From 6bf0dab0770162e5eab74dd07f6f15089ea6f92e Mon Sep 17 00:00:00 2001 From: nobody Date: Tue, 22 Aug 2000 12:05:30 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'CONTROL_CENTER_1_3_1'. svn path=/tags/CONTROL_CENTER_1_3_1/; revision=4928 --- .cvsignore | 25 - AUTHORS | 66 - COPYING | 340 - ChangeLog | 5251 ------ HACKING | 0 INSTALL | 182 - MAINTAINERS | 1 - Makefile.am | 49 - NEWS | 367 - README | 171 - acconfig.h | 31 - addressbook/.cvsignore | 6 - addressbook/ChangeLog | 2135 --- addressbook/Makefile.am | 7 - addressbook/backend/.cvsignore | 6 - addressbook/backend/Makefile.am | 1 - addressbook/backend/ebook/.cvsignore | 16 - addressbook/backend/ebook/Makefile.am | 116 - addressbook/backend/ebook/TODO | 2 - addressbook/backend/ebook/e-book-listener.c | 587 - addressbook/backend/ebook/e-book-listener.h | 95 - addressbook/backend/ebook/e-book-types.h | 31 - addressbook/backend/ebook/e-book-view-listener.c | 374 - addressbook/backend/ebook/e-book-view-listener.h | 73 - addressbook/backend/ebook/e-book-view.c | 300 - addressbook/backend/ebook/e-book-view.h | 56 - addressbook/backend/ebook/e-book.c | 1010 -- addressbook/backend/ebook/e-book.h | 123 - addressbook/backend/ebook/e-card-cursor.c | 235 - addressbook/backend/ebook/e-card-cursor.h | 52 - addressbook/backend/ebook/e-card-pairs.h | 118 - addressbook/backend/ebook/e-card-simple.c | 1208 -- addressbook/backend/ebook/e-card-simple.h | 198 - addressbook/backend/ebook/e-card-types.h | 97 - addressbook/backend/ebook/e-card.c | 3295 ---- addressbook/backend/ebook/e-card.h | 141 - .../backend/ebook/load-gnomecard-addressbook.c | 110 - addressbook/backend/ebook/load-pine-addressbook.c | 160 - addressbook/backend/ebook/test-card.c | 194 - addressbook/backend/ebook/test-client-list.c | 82 - addressbook/backend/ebook/test-client.c | 190 - addressbook/backend/idl/.cvsignore | 6 - addressbook/backend/idl/Makefile.am | 6 - addressbook/backend/idl/addressbook.idl | 133 - addressbook/backend/pas/.cvsignore | 11 - addressbook/backend/pas/Makefile.am | 52 - addressbook/backend/pas/TODO | 2 - addressbook/backend/pas/pas-backend-file.c | 1233 -- addressbook/backend/pas/pas-backend-file.h | 32 - addressbook/backend/pas/pas-backend-ldap.c | 1151 -- addressbook/backend/pas/pas-backend-ldap.h | 32 - addressbook/backend/pas/pas-backend.c | 162 - addressbook/backend/pas/pas-backend.h | 73 - addressbook/backend/pas/pas-book-factory.c | 639 - addressbook/backend/pas/pas-book-factory.h | 50 - addressbook/backend/pas/pas-book-view.c | 316 - addressbook/backend/pas/pas-book-view.h | 54 - addressbook/backend/pas/pas-book.c | 677 - addressbook/backend/pas/pas-book.h | 98 - addressbook/backend/pas/pas-card-cursor.c | 227 - addressbook/backend/pas/pas-card-cursor.h | 58 - addressbook/conduit/.cvsignore | 8 - addressbook/conduit/Makefile.am | 73 - .../conduit/address-conduit-control-applet.c | 386 - .../conduit/address-conduit-control-applet.desktop | 12 - addressbook/conduit/address-conduit.c | 1274 -- addressbook/conduit/address-conduit.h | 91 - addressbook/conduit/address.conduit.in | 8 - addressbook/contact-editor/.cvsignore | 8 - addressbook/contact-editor/Makefile.am | 65 - addressbook/contact-editor/arrow.png | Bin 174 -> 0 bytes addressbook/contact-editor/briefcase.png | Bin 390 -> 0 bytes addressbook/contact-editor/categories-strings.h | 9 - addressbook/contact-editor/categories.glade | 190 - addressbook/contact-editor/contact-editor.glade | 2332 --- .../contact-editor/e-contact-editor-categories.c | 470 - .../contact-editor/e-contact-editor-categories.h | 83 - .../e-contact-editor-confirm-delete.glade | 85 - .../e-contact-editor-confirm-delete.glade.h | 9 - .../contact-editor/e-contact-editor-fullname.c | 214 - .../contact-editor/e-contact-editor-fullname.h | 75 - .../contact-editor/e-contact-editor-strings.h | 41 - addressbook/contact-editor/e-contact-editor.c | 1809 -- addressbook/contact-editor/e-contact-editor.h | 114 - addressbook/contact-editor/e-contact-save-as.c | 77 - addressbook/contact-editor/e-contact-save-as.h | 42 - addressbook/contact-editor/email.png | Bin 331 -> 0 bytes addressbook/contact-editor/fullname-strings.h | 25 - addressbook/contact-editor/fullname.glade | 391 - addressbook/contact-editor/head.png | Bin 493 -> 0 bytes addressbook/contact-editor/netfreebusy.png | Bin 755 -> 0 bytes addressbook/contact-editor/netmeeting.png | Bin 803 -> 0 bytes addressbook/contact-editor/phone.png | Bin 506 -> 0 bytes addressbook/contact-editor/snailmail.png | Bin 516 -> 0 bytes addressbook/contact-editor/test-editor.c | 142 - addressbook/contact-editor/web.png | Bin 573 -> 0 bytes addressbook/demo/.cvsignore | 8 - addressbook/demo/Makefile.am | 63 - addressbook/demo/addressbook-factory.c | 47 - addressbook/demo/addressbook-widget.c | 533 - addressbook/demo/addressbook-widget.h | 52 - addressbook/demo/addressbook.c | 200 - addressbook/demo/addressbook.gnorba | 11 - addressbook/demo/addressbook.h | 8 - addressbook/demo/demo.c | 462 - addressbook/demo/e-test-model.c | 385 - addressbook/demo/e-test-model.h | 64 - addressbook/demo/spec | 12 - addressbook/ename/.cvsignore | 8 - addressbook/ename/Makefile.am | 50 - addressbook/ename/TODO | 2 - addressbook/ename/e-name-western-tables.h | 54 - addressbook/ename/e-name-western.c | 868 - addressbook/ename/e-name-western.h | 21 - addressbook/ename/test-ename-western-gtk.c | 148 - addressbook/ename/test-ename-western.c | 70 - addressbook/gui/.cvsignore | 6 - addressbook/gui/Makefile.am | 1 - addressbook/gui/component/.cvsignore | 10 - .../component/GNOME_Evolution_Addressbook.oaf.in | 88 - .../component/GNOME_Evolution_Addressbook.oafinfo | 88 - addressbook/gui/component/Makefile.am | 91 - addressbook/gui/component/addressbook-component.c | 129 - addressbook/gui/component/addressbook-component.h | 29 - addressbook/gui/component/addressbook-factory.c | 88 - addressbook/gui/component/addressbook.c | 1144 -- addressbook/gui/component/addressbook.gnorba | 23 - addressbook/gui/component/addressbook.h | 9 - addressbook/gui/component/addressbook.oafinfo | 88 - addressbook/gui/component/alphabet.glade | 357 - addressbook/gui/component/alphabet.glade.h | 34 - addressbook/gui/component/e-addressbook-model.c | 421 - addressbook/gui/component/e-addressbook-model.h | 54 - addressbook/gui/component/e-cardlist-model.c | 226 - addressbook/gui/component/e-cardlist-model.h | 42 - addressbook/gui/component/e-ldap-server-dialog.c | 142 - addressbook/gui/component/e-ldap-server-dialog.h | 9 - addressbook/gui/component/e-ldap-storage.c | 314 - addressbook/gui/component/e-ldap-storage.h | 44 - addressbook/gui/component/ldap-server-dialog.glade | 400 - .../gui/component/ldap-server-dialog.glade.h | 11 - addressbook/gui/component/select-names/.cvsignore | 11 - .../Evolution-Addressbook-SelectNames.idl | 37 - .../GNOME_Evolution_Addressbook_SelectNames.oaf.in | 29 - ...GNOME_Evolution_Addressbook_SelectNames.oafinfo | 29 - addressbook/gui/component/select-names/Makefile.am | 73 - .../component/select-names/e-select-names-bonobo.c | 294 - .../component/select-names/e-select-names-bonobo.h | 71 - .../select-names/e-select-names-factory.c | 60 - .../select-names/e-select-names-factory.h | 31 - .../select-names/e-select-names-manager.c | 349 - .../select-names/e-select-names-manager.h | 53 - .../component/select-names/e-select-names-model.c | 441 - .../component/select-names/e-select-names-model.h | 93 - .../select-names/e-select-names-table-model.c | 353 - .../select-names/e-select-names-table-model.h | 51 - .../select-names/e-select-names-text-model.c | 357 - .../select-names/e-select-names-text-model.h | 44 - .../gui/component/select-names/e-select-names.c | 424 - .../gui/component/select-names/e-select-names.h | 91 - .../evolution-addressbook-select-names.oafinfo | 29 - .../gui/component/select-names/recipient.glade | 61 - .../gui/component/select-names/select-names.glade | 247 - .../component/select-names/select-names.glade.h | 10 - addressbook/gui/contact-editor/.cvsignore | 8 - addressbook/gui/contact-editor/Makefile.am | 65 - addressbook/gui/contact-editor/arrow.png | Bin 174 -> 0 bytes addressbook/gui/contact-editor/briefcase.png | Bin 390 -> 0 bytes .../gui/contact-editor/categories-strings.h | 9 - addressbook/gui/contact-editor/categories.glade | 190 - .../gui/contact-editor/contact-editor.glade | 2332 --- .../contact-editor/e-contact-editor-categories.c | 470 - .../contact-editor/e-contact-editor-categories.h | 83 - .../e-contact-editor-confirm-delete.glade | 85 - .../e-contact-editor-confirm-delete.glade.h | 9 - .../gui/contact-editor/e-contact-editor-fullname.c | 214 - .../gui/contact-editor/e-contact-editor-fullname.h | 75 - .../gui/contact-editor/e-contact-editor-strings.h | 41 - addressbook/gui/contact-editor/e-contact-editor.c | 1809 -- addressbook/gui/contact-editor/e-contact-editor.h | 114 - addressbook/gui/contact-editor/e-contact-save-as.c | 77 - addressbook/gui/contact-editor/e-contact-save-as.h | 42 - addressbook/gui/contact-editor/email.png | Bin 331 -> 0 bytes addressbook/gui/contact-editor/fullname-strings.h | 25 - addressbook/gui/contact-editor/fullname.glade | 391 - addressbook/gui/contact-editor/head.png | Bin 493 -> 0 bytes addressbook/gui/contact-editor/netfreebusy.png | Bin 755 -> 0 bytes addressbook/gui/contact-editor/netmeeting.png | Bin 803 -> 0 bytes addressbook/gui/contact-editor/phone.png | Bin 506 -> 0 bytes addressbook/gui/contact-editor/snailmail.png | Bin 516 -> 0 bytes addressbook/gui/contact-editor/test-editor.c | 142 - addressbook/gui/contact-editor/web.png | Bin 573 -> 0 bytes addressbook/gui/minicard/.cvsignore | 12 - addressbook/gui/minicard/Makefile.am | 124 - addressbook/gui/minicard/e-minicard-control.c | 336 - addressbook/gui/minicard/e-minicard-control.gnorba | 24 - addressbook/gui/minicard/e-minicard-control.h | 8 - addressbook/gui/minicard/e-minicard-label.c | 446 - addressbook/gui/minicard/e-minicard-label.h | 83 - addressbook/gui/minicard/e-minicard-view-widget.c | 267 - addressbook/gui/minicard/e-minicard-view-widget.h | 73 - addressbook/gui/minicard/e-minicard-view.c | 432 - addressbook/gui/minicard/e-minicard-view.h | 95 - addressbook/gui/minicard/e-minicard-widget-test.c | 113 - addressbook/gui/minicard/e-minicard-widget.c | 236 - addressbook/gui/minicard/e-minicard-widget.h | 76 - addressbook/gui/minicard/e-minicard.c | 797 - addressbook/gui/minicard/e-minicard.h | 98 - addressbook/gui/minicard/e-reflow-sorted.c | 272 - addressbook/gui/minicard/e-reflow-sorted.h | 90 - addressbook/gui/minicard/e-reflow.c | 859 - addressbook/gui/minicard/e-reflow.h | 112 - addressbook/gui/minicard/test-minicard-label.c | 126 - addressbook/gui/minicard/test-minicard-view.c | 206 - addressbook/gui/minicard/test-minicard.c | 115 - addressbook/gui/minicard/test-reflow.c | 194 - addressbook/gui/search/.cvsignore | 7 - addressbook/gui/search/Makefile.am | 16 - addressbook/gui/search/addresstypes.xml | 37 - .../gui/search/e-addressbook-search-dialog.c | 192 - .../gui/search/e-addressbook-search-dialog.h | 64 - addressbook/gui/widgets/Makefile.am | 124 - addressbook/gui/widgets/alphabet.glade | 357 - addressbook/gui/widgets/alphabet.glade.h | 34 - addressbook/gui/widgets/e-addressbook-model.c | 421 - addressbook/gui/widgets/e-addressbook-model.h | 54 - addressbook/gui/widgets/e-minicard-control.c | 336 - addressbook/gui/widgets/e-minicard-control.h | 8 - addressbook/gui/widgets/e-minicard-label.c | 446 - addressbook/gui/widgets/e-minicard-label.h | 83 - addressbook/gui/widgets/e-minicard-view-widget.c | 267 - addressbook/gui/widgets/e-minicard-view-widget.h | 73 - addressbook/gui/widgets/e-minicard-view.c | 432 - addressbook/gui/widgets/e-minicard-view.h | 95 - addressbook/gui/widgets/e-minicard-widget-test.c | 113 - addressbook/gui/widgets/e-minicard-widget.c | 236 - addressbook/gui/widgets/e-minicard-widget.h | 76 - addressbook/gui/widgets/e-minicard.c | 797 - addressbook/gui/widgets/e-minicard.h | 98 - addressbook/gui/widgets/test-minicard-label.c | 126 - addressbook/gui/widgets/test-minicard-view.c | 206 - addressbook/gui/widgets/test-minicard.c | 115 - addressbook/gui/widgets/test-reflow.c | 194 - addressbook/printing/.cvsignore | 9 - addressbook/printing/Makefile.am | 67 - .../printing/e-contact-print-style-editor.c | 150 - .../printing/e-contact-print-style-editor.h | 74 - addressbook/printing/e-contact-print-types.h | 74 - addressbook/printing/e-contact-print.c | 1112 -- addressbook/printing/e-contact-print.glade | 2009 --- addressbook/printing/e-contact-print.glade.h | 56 - addressbook/printing/e-contact-print.h | 33 - addressbook/printing/medbook.ecps | 30 - addressbook/printing/phonelist.ecps | 29 - addressbook/printing/smallbook.ecps | 30 - .../printing/test-contact-print-style-editor.c | 87 - addressbook/printing/test-print.c | 82 - announcement-0.4.1.txt | 167 - art/.cvsignore | 2 - art/Makefile.am | 34 - art/attachment.xpm | 21 - art/briefcase.png | Bin 2358 -> 0 bytes art/cellphone.png | Bin 3440 -> 0 bytes art/empty.xpm | 21 - art/envelope.png | Bin 3168 -> 0 bytes art/evolution-calendar-mini.png | Bin 491 -> 0 bytes art/evolution-calendar.png | Bin 2733 -> 0 bytes art/evolution-contacts-mini.png | Bin 417 -> 0 bytes art/evolution-contacts.png | Bin 2288 -> 0 bytes art/evolution-inbox-mini.png | Bin 478 -> 0 bytes art/evolution-inbox.png | Bin 4281 -> 0 bytes art/evolution-notes-mini.png | Bin 516 -> 0 bytes art/evolution-notes.png | Bin 3400 -> 0 bytes art/evolution-tasks-mini.png | Bin 708 -> 0 bytes art/evolution-tasks.png | Bin 3515 -> 0 bytes art/evolution-today.png | Bin 3713 -> 0 bytes art/globe.png | Bin 3328 -> 0 bytes art/house.png | Bin 4135 -> 0 bytes art/mail-new.xpm | 67 - art/mail-read.xpm | 70 - art/mail-replied.xpm | 52 - art/malehead.png | Bin 4220 -> 0 bytes art/mark.xpm | 21 - art/meeting.xpm | 64 - art/priority-high.xpm | 21 - art/priority-low.xpm | 21 - art/tree-expanded.xpm | 22 - art/tree-unexpanded.xpm | 22 - autogen.sh | 10 - calendar/.cvsignore | 10 - calendar/AUTHORS | 4 - calendar/ChangeLog | 5513 ------ calendar/Makefile.am | 2 - calendar/TODO | 88 - calendar/cal-client/.cvsignore | 17 - calendar/cal-client/Makefile.am | 71 - calendar/cal-client/cal-client.c | 1396 -- calendar/cal-client/cal-client.h | 122 - calendar/cal-client/cal-listener.c | 403 - calendar/cal-client/cal-listener.h | 79 - calendar/cal-client/client-test.c | 243 - calendar/cal-client/test.ics | 318 - calendar/cal-util/.cvsignore | 8 - calendar/cal-util/Makefile.am | 73 - calendar/cal-util/cal-component.c | 3480 ---- calendar/cal-util/cal-component.h | 306 - calendar/cal-util/cal-recur.c | 3054 ---- calendar/cal-util/cal-recur.h | 117 - calendar/cal-util/cal-util.c | 100 - calendar/cal-util/cal-util.h | 68 - calendar/cal-util/calobj.c | 2008 --- calendar/cal-util/calobj.h | 312 - calendar/cal-util/icalendar-save.c | 516 - calendar/cal-util/icalendar-save.h | 13 - calendar/cal-util/icalendar-test.c | 146 - calendar/cal-util/icalendar.c | 673 - calendar/cal-util/icalendar.h | 13 - calendar/cal-util/test-recur.c | 337 - calendar/cal-util/timeutil.c | 590 - calendar/cal-util/timeutil.h | 82 - calendar/conduits/.cvsignore | 2 - calendar/conduits/Makefile.am | 1 - calendar/conduits/calendar/.cvsignore | 8 - calendar/conduits/calendar/Makefile.am | 81 - .../calendar/calendar-conduit-control-applet.c | 387 - .../calendar-conduit-control-applet.desktop | 13 - calendar/conduits/calendar/calendar-conduit.c | 1727 -- calendar/conduits/calendar/calendar-conduit.h | 88 - calendar/conduits/calendar/calendar.conduit.in | 8 - calendar/conduits/todo/.cvsignore | 8 - calendar/conduits/todo/Makefile.am | 81 - .../conduits/todo/todo-conduit-control-applet.c | 386 - .../todo/todo-conduit-control-applet.desktop | 12 - calendar/conduits/todo/todo-conduit.c | 1355 -- calendar/conduits/todo/todo-conduit.h | 93 - calendar/conduits/todo/todo.conduit.in | 8 - calendar/gui/.cvsignore | 21 - calendar/gui/GNOME_Evolution_Calendar.oaf.in | 29 - calendar/gui/GNOME_Evolution_Calendar.oafinfo | 29 - .../gui/GNOME_Evolution_Calendar_Control.oaf.in | 28 - .../gui/GNOME_Evolution_Calendar_Control.oafinfo | 28 - .../gui/GNOME_Evolution_Calendar_gnomecal.oaf.in | 29 - .../gui/GNOME_Evolution_Calendar_gnomecal.oafinfo | 29 - calendar/gui/Makefile.am | 143 - calendar/gui/alarm-notify/alarm-notify-dialog.c | 225 - calendar/gui/alarm-notify/alarm-notify-dialog.h | 44 - calendar/gui/alarm-notify/alarm-notify.glade | 230 - calendar/gui/alarm-notify/alarm.c | 304 - calendar/gui/alarm-notify/alarm.h | 40 - calendar/gui/alarm.c | 304 - calendar/gui/alarm.h | 40 - calendar/gui/bell.xpm | 83 - calendar/gui/calendar-commands.c | 855 - calendar/gui/calendar-commands.h | 125 - calendar/gui/calendar-component.c | 119 - calendar/gui/calendar-component.h | 29 - calendar/gui/calendar-control.gnorba | 11 - calendar/gui/calendar-control.oafinfo | 28 - calendar/gui/calendar-model.c | 1782 -- calendar/gui/calendar-model.h | 75 - calendar/gui/component-factory.c | 119 - calendar/gui/component-factory.h | 29 - calendar/gui/control-factory.c | 188 - calendar/gui/control-factory.h | 30 - calendar/gui/dayview.xpm | 42 - calendar/gui/dialogs/.cvsignore | 3 - calendar/gui/dialogs/Makefile.am | 31 - calendar/gui/dialogs/alarm-notify-dialog.c | 225 - calendar/gui/dialogs/alarm-notify-dialog.h | 44 - calendar/gui/dialogs/alarm-notify.glade | 230 - calendar/gui/dialogs/alarm-notify.glade.h | 10 - calendar/gui/dialogs/task-editor-dialog.glade | 822 - calendar/gui/dialogs/task-editor-dialog.glade.h | 33 - calendar/gui/dialogs/task-editor.c | 481 - calendar/gui/dialogs/task-editor.h | 63 - calendar/gui/dialogs/task-page.glade | 822 - calendar/gui/e-calendar-table.c | 482 - calendar/gui/e-calendar-table.h | 84 - calendar/gui/e-day-view-main-item.c | 651 - calendar/gui/e-day-view-main-item.h | 65 - calendar/gui/e-day-view-time-item.c | 531 - calendar/gui/e-day-view-time-item.h | 74 - calendar/gui/e-day-view-top-item.c | 586 - calendar/gui/e-day-view-top-item.h | 65 - calendar/gui/e-day-view.c | 5716 ------ calendar/gui/e-day-view.h | 504 - calendar/gui/e-week-view-event-item.c | 753 - calendar/gui/e-week-view-event-item.h | 70 - calendar/gui/e-week-view-main-item.c | 367 - calendar/gui/e-week-view-main-item.h | 66 - calendar/gui/e-week-view-titles-item.c | 300 - calendar/gui/e-week-view-titles-item.h | 66 - calendar/gui/e-week-view.c | 2925 --- calendar/gui/e-week-view.h | 380 - calendar/gui/event-editor-dialog.glade | 2024 --- calendar/gui/event-editor-dialog.glade.h | 94 - calendar/gui/event-editor.c | 1985 --- calendar/gui/event-editor.h | 85 - calendar/gui/evolution-calendar-control.c | 201 - calendar/gui/evolution-calendar.gnorba | 11 - calendar/gui/evolution-calendar.oafinfo | 29 - calendar/gui/getdate.y | 1001 -- calendar/gui/gncal-todo.c | 960 - calendar/gui/gncal-todo.h | 54 - calendar/gui/gnome-cal.c | 1530 -- calendar/gui/gnome-cal.h | 134 - calendar/gui/gnome-cal.html | 44 - calendar/gui/gnome-calendar-conduit.png | Bin 3000 -> 0 bytes calendar/gui/gnome-month-item.c | 1246 -- calendar/gui/gnome-month-item.h | 165 - calendar/gui/gnomecal.gnorba | 11 - calendar/gui/gnomecal.oafinfo | 27 - calendar/gui/goto.c | 326 - calendar/gui/jump.xpm | 14 - calendar/gui/main.c | 96 - calendar/gui/mark.c | 297 - calendar/gui/mark.h | 75 - calendar/gui/monthview.xpm | 46 - calendar/gui/popup-menu.c | 41 - calendar/gui/popup-menu.h | 25 - calendar/gui/print.c | 1313 -- calendar/gui/print.h | 41 - calendar/gui/prop.c | 938 - calendar/gui/recur.xpm | 83 - calendar/gui/task-assigned-to.xpm | 120 - calendar/gui/task-assigned.xpm | 120 - calendar/gui/task-recurring.xpm | 120 - calendar/gui/task.xpm | 120 - calendar/gui/test.vcf | 133 - calendar/gui/test2.vcf | 133 - calendar/gui/topic.dat | 2 - calendar/gui/weekview.xpm | 41 - calendar/gui/workweekview.xpm | 43 - calendar/gui/yearview.xpm | 45 - calendar/idl/.cvsignore | 2 - calendar/idl/Makefile.am | 7 - calendar/idl/evolution-calendar.idl | 181 - calendar/pcs/.cvsignore | 12 - calendar/pcs/Makefile.am | 42 - calendar/pcs/cal-backend-file.c | 1056 -- calendar/pcs/cal-backend-file.h | 62 - calendar/pcs/cal-backend-imc.c | 1421 -- calendar/pcs/cal-backend-imc.h | 61 - calendar/pcs/cal-backend.c | 403 - calendar/pcs/cal-backend.h | 127 - calendar/pcs/cal-common.h | 41 - calendar/pcs/cal-factory.c | 858 - calendar/pcs/cal-factory.h | 75 - calendar/pcs/cal.c | 761 - calendar/pcs/cal.h | 70 - calendar/pcs/job.c | 98 - calendar/pcs/job.h | 35 - camel/.cvsignore | 8 - camel/CODING.STYLE | 19 - camel/ChangeLog | 5332 ------ camel/Makefile.am | 131 - camel/README | 57 - camel/README.COPYRIGHT | 47 - camel/README.HACKING | 14 - camel/broken-date-parser.c | 315 - camel/broken-date-parser.h | 41 - camel/camel-address.c | 133 - camel/camel-address.h | 57 - camel/camel-data-wrapper.c | 270 - camel/camel-data-wrapper.h | 96 - camel/camel-exception-list.def | 36 - camel/camel-exception.c | 279 - camel/camel-exception.h | 89 - camel/camel-folder-search.c | 598 - camel/camel-folder-search.h | 99 - camel/camel-folder-summary.c | 1641 -- camel/camel-folder-summary.h | 238 - camel/camel-folder.c | 1268 -- camel/camel-folder.h | 315 - camel/camel-internet-address.c | 277 - camel/camel-internet-address.h | 51 - camel/camel-medium.c | 266 - camel/camel-medium.h | 92 - camel/camel-mime-filter-basic.c | 214 - camel/camel-mime-filter-basic.h | 58 - camel/camel-mime-filter-charset.c | 229 - camel/camel-mime-filter-charset.h | 52 - camel/camel-mime-filter-crlf.c | 150 - camel/camel-mime-filter-crlf.h | 62 - camel/camel-mime-filter-from.c | 221 - camel/camel-mime-filter-from.h | 49 - camel/camel-mime-filter-index.c | 156 - camel/camel-mime-filter-index.h | 55 - camel/camel-mime-filter-save.c | 144 - camel/camel-mime-filter-save.h | 50 - camel/camel-mime-filter.c | 211 - camel/camel-mime-filter.h | 84 - camel/camel-mime-message.c | 532 - camel/camel-mime-message.h | 118 - camel/camel-mime-parser.c | 1791 -- camel/camel-mime-parser.h | 119 - camel/camel-mime-part-utils.c | 237 - camel/camel-mime-part-utils.h | 45 - camel/camel-mime-part.c | 706 - camel/camel-mime-part.h | 131 - camel/camel-mime-utils.c | 2640 --- camel/camel-mime-utils.h | 171 - camel/camel-movemail.c | 590 - camel/camel-movemail.h | 45 - camel/camel-multipart.c | 476 - camel/camel-multipart.h | 103 - camel/camel-news-address.c | 65 - camel/camel-news-address.h | 45 - camel/camel-object.c | 971 - camel/camel-object.h | 145 - camel/camel-op-queue.c | 166 - camel/camel-op-queue.h | 64 - camel/camel-provider.c | 153 - camel/camel-provider.h | 97 - camel/camel-seekable-stream.c | 201 - camel/camel-seekable-stream.h | 88 - camel/camel-seekable-substream.c | 271 - camel/camel-seekable-substream.h | 70 - camel/camel-service.c | 386 - camel/camel-service.h | 142 - camel/camel-session.c | 346 - camel/camel-session.h | 124 - camel/camel-store.c | 376 - camel/camel-store.h | 115 - camel/camel-stream-buffer.c | 453 - camel/camel-stream-buffer.h | 109 - camel/camel-stream-filter.c | 342 - camel/camel-stream-filter.h | 52 - camel/camel-stream-fs.c | 298 - camel/camel-stream-fs.h | 75 - camel/camel-stream-mem.c | 249 - camel/camel-stream-mem.h | 75 - camel/camel-stream.c | 289 - camel/camel-stream.h | 91 - camel/camel-thread-proxy.c | 514 - camel/camel-thread-proxy.h | 90 - camel/camel-transport.c | 104 - camel/camel-transport.h | 85 - camel/camel-types.h | 70 - camel/camel-uid-cache.c | 186 - camel/camel-uid-cache.h | 56 - camel/camel-url.c | 368 - camel/camel-url.h | 74 - camel/camel.c | 46 - camel/camel.h | 79 - camel/devel-docs/camel_data_wrapper.dia | Bin 3062 -> 0 bytes camel/devel-docs/camel_parser_states.dia | Bin 2505 -> 0 bytes camel/devel-docs/camel_stream.dia | Bin 2669 -> 0 bytes camel/gmime-content-field.c | 237 - camel/gmime-content-field.h | 71 - camel/gstring-util.c | 216 - camel/gstring-util.h | 66 - camel/hash-table-utils.c | 80 - camel/hash-table-utils.h | 46 - camel/md5-utils.c | 391 - camel/md5-utils.h | 54 - camel/providers/.cvsignore | 2 - camel/providers/Makefile.am | 7 - camel/providers/imap/.cvsignore | 7 - camel/providers/imap/Makefile.am | 42 - camel/providers/imap/camel-imap-folder.c | 1578 -- camel/providers/imap/camel-imap-folder.h | 77 - camel/providers/imap/camel-imap-provider.c | 109 - camel/providers/imap/camel-imap-store.c | 1262 -- camel/providers/imap/camel-imap-store.h | 103 - camel/providers/imap/camel-imap-stream.c | 197 - camel/providers/imap/camel-imap-stream.h | 71 - camel/providers/imap/camel-imap-utils.c | 486 - camel/providers/imap/camel-imap-utils.h | 43 - camel/providers/imap/libcamelimap.urls | 1 - camel/providers/maildir/.cvsignore | 6 - camel/providers/maildir/Makefile.am | 22 - camel/providers/maildir/camel-maildir-folder.c | 802 - camel/providers/maildir/camel-maildir-folder.h | 66 - camel/providers/maildir/camel-maildir-provider.c | 46 - camel/providers/maildir/camel-maildir-store.c | 124 - camel/providers/maildir/camel-maildir-store.h | 69 - camel/providers/mbox/.cvsignore | 7 - camel/providers/mbox/Makefile.am | 39 - camel/providers/mbox/camel-mbox-folder.c | 625 - camel/providers/mbox/camel-mbox-folder.h | 80 - camel/providers/mbox/camel-mbox-provider.c | 57 - camel/providers/mbox/camel-mbox-store.c | 285 - camel/providers/mbox/camel-mbox-store.h | 68 - camel/providers/mbox/camel-mbox-summary.c | 872 - camel/providers/mbox/camel-mbox-summary.h | 80 - camel/providers/mbox/libcamelmbox.urls | 1 - camel/providers/mh/.cvsignore | 7 - camel/providers/mh/Makefile.am | 39 - camel/providers/mh/camel-mh-folder.c | 528 - camel/providers/mh/camel-mh-folder.h | 72 - camel/providers/mh/camel-mh-provider.c | 54 - camel/providers/mh/camel-mh-store.c | 210 - camel/providers/mh/camel-mh-store.h | 59 - camel/providers/mh/camel-mh-summary.c | 267 - camel/providers/mh/camel-mh-summary.h | 61 - camel/providers/mh/libcamelmh.urls | 1 - camel/providers/nntp/.cvsignore | 8 - camel/providers/nntp/Makefile.am | 47 - camel/providers/nntp/camel-nntp-folder.c | 399 - camel/providers/nntp/camel-nntp-folder.h | 73 - camel/providers/nntp/camel-nntp-newsrc.c | 469 - camel/providers/nntp/camel-nntp-newsrc.h | 27 - camel/providers/nntp/camel-nntp-provider.c | 80 - camel/providers/nntp/camel-nntp-store.c | 513 - camel/providers/nntp/camel-nntp-store.h | 87 - camel/providers/nntp/camel-nntp-utils.c | 218 - camel/providers/nntp/camel-nntp-utils.h | 42 - camel/providers/nntp/libcamelnntp.urls | 2 - camel/providers/nntp/test-newsrc.c | 10 - camel/providers/pop3/.cvsignore | 6 - camel/providers/pop3/Makefile.am | 33 - camel/providers/pop3/camel-pop3-folder.c | 331 - camel/providers/pop3/camel-pop3-folder.h | 72 - camel/providers/pop3/camel-pop3-provider.c | 58 - camel/providers/pop3/camel-pop3-store.c | 750 - camel/providers/pop3/camel-pop3-store.h | 81 - camel/providers/pop3/libcamelpop3.urls | 1 - camel/providers/sendmail/.cvsignore | 7 - camel/providers/sendmail/Makefile.am | 29 - camel/providers/sendmail/camel-sendmail-provider.c | 60 - .../providers/sendmail/camel-sendmail-transport.c | 221 - .../providers/sendmail/camel-sendmail-transport.h | 64 - camel/providers/sendmail/libcamelsendmail.urls | 1 - camel/providers/smtp/.cvsignore | 6 - camel/providers/smtp/Makefile.am | 30 - camel/providers/smtp/camel-smtp-provider.c | 59 - camel/providers/smtp/camel-smtp-transport.c | 803 - camel/providers/smtp/camel-smtp-transport.h | 81 - camel/providers/smtp/libcamelsmtp.urls | 1 - camel/providers/vee/.cvsignore | 7 - camel/providers/vee/Makefile.am | 37 - camel/providers/vee/camel-vee-folder.c | 529 - camel/providers/vee/camel-vee-folder.h | 57 - camel/providers/vee/camel-vee-provider.c | 52 - camel/providers/vee/camel-vee-store.c | 107 - camel/providers/vee/camel-vee-store.h | 47 - camel/providers/vee/libcamelvee.urls | 1 - camel/string-utils.c | 206 - camel/string-utils.h | 68 - composer/.cvsignore | 12 - composer/ChangeLog | 580 - composer/Makefile.am | 69 - composer/e-msg-composer-address-dialog.c | 656 - composer/e-msg-composer-address-dialog.glade | 576 - composer/e-msg-composer-address-dialog.glade.h | 19 - composer/e-msg-composer-address-dialog.h | 75 - composer/e-msg-composer-address-entry.c | 175 - composer/e-msg-composer-address-entry.h | 63 - composer/e-msg-composer-attachment-bar.c | 653 - composer/e-msg-composer-attachment-bar.h | 75 - composer/e-msg-composer-attachment.c | 399 - composer/e-msg-composer-attachment.glade | 258 - composer/e-msg-composer-attachment.glade.h | 10 - composer/e-msg-composer-attachment.h | 72 - composer/e-msg-composer-hdrs.c | 709 - composer/e-msg-composer-hdrs.h | 92 - composer/e-msg-composer-select-file.c | 171 - composer/e-msg-composer-select-file.h | 32 - composer/e-msg-composer.c | 1756 -- composer/e-msg-composer.h | 118 - composer/main.c | 76 - configure.in | 612 - data/.cvsignore | 2 - data/Makefile.am | 6 - data/evolution.desktop | 20 - data/evolution.keys | 7 - default_user/.cvsignore | 2 - default_user/ChangeLog | 69 - default_user/Makefile.am | 9 - default_user/ldapservers.xml | 19 - default_user/local/.cvsignore | 2 - default_user/local/Calendar/.cvsignore | 2 - default_user/local/Calendar/Makefile.am | 3 - default_user/local/Calendar/folder-metadata.xml | 5 - default_user/local/Contacts/.cvsignore | 2 - default_user/local/Contacts/Makefile.am | 4 - default_user/local/Contacts/folder-metadata.xml | 5 - default_user/local/Drafts/.cvsignore | 2 - default_user/local/Drafts/Makefile.am | 4 - default_user/local/Drafts/folder-metadata.xml | 5 - default_user/local/Inbox/.cvsignore | 2 - default_user/local/Inbox/Makefile.am | 7 - default_user/local/Inbox/folder-metadata.xml | 5 - default_user/local/Inbox/mbox | 2225 --- default_user/local/Makefile.am | 7 - default_user/local/Outbox/.cvsignore | 2 - default_user/local/Outbox/Makefile.am | 4 - default_user/local/Outbox/folder-metadata.xml | 5 - default_user/local/Trash/.cvsignore | 2 - default_user/local/Trash/Makefile.am | 4 - default_user/local/Trash/folder-metadata.xml | 5 - default_user/shortcuts.xml | 17 - devel-docs/.cvsignore | 3 - devel-docs/Makefile.am | 3 - devel-docs/camel/.cvsignore | 12 - devel-docs/camel/Makefile.am | 101 - devel-docs/camel/README_AND_TODO.txt | 43 - devel-docs/camel/camel-docs.sgml | 28 - devel-docs/camel/camel-sections.txt | 154 - devel-docs/camel/camel.types | 9 - devel-docs/camel/tmpl/.cvsignore | 2 - devel-docs/camel/tmpl/camel-data-wrapper.sgml | 26 - devel-docs/camel/tmpl/camel-folder.sgml | 96 - devel-docs/camel/tmpl/camel-mime-message.sgml | 171 - devel-docs/camel/tmpl/camel-mime-part.sgml | 151 - devel-docs/camel/tmpl/camel-recipient.sgml | 88 - devel-docs/camel/tmpl/camel-service.sgml | 72 - devel-docs/camel/tmpl/camel-store.sgml | 45 - devel-docs/camel/tmpl/camel-stream.sgml | 101 - devel-docs/misc/ref_and_id_proposition.txt | 237 - devel-docs/query/virtual-folder-in-depth.sgml | 407 - devel-docs/query/virtual-folder-in-depth.txt | 309 - doc/.cvsignore | 2 - doc/C/.cvsignore | 4 - doc/C/Makefile.am | 51 - doc/C/apx-authors.sgml | 74 - doc/C/apx-bugs.sgml | 19 - doc/C/apx-fdl.sgml | 678 - doc/C/apx-gloss.sgml | 284 - doc/C/apx-gpl.sgml | 414 - doc/C/config-prefs.sgml | 570 - doc/C/config-setupassist.sgml | 159 - doc/C/config-sync.sgml | 67 - doc/C/evolution-guide.sgml | 132 - doc/C/fig/calendar.png | Bin 33576 -> 0 bytes doc/C/fig/config-cal.png | Bin 13077 -> 0 bytes doc/C/fig/config-mail.png | Bin 9729 -> 0 bytes doc/C/fig/contact.png | Bin 28369 -> 0 bytes doc/C/fig/filter-new-fig.png | Bin 11861 -> 0 bytes doc/C/fig/mail-druid-pic.png | Bin 35959 -> 0 bytes doc/C/fig/mainwindow-pic.png | Bin 108277 -> 0 bytes doc/C/fig/vfolder-createrule-fig.png | Bin 12084 -> 0 bytes doc/C/preface.sgml | 174 - doc/C/usage-calendar.sgml | 356 - doc/C/usage-contact.sgml | 504 - doc/C/usage-mail.sgml | 1132 -- doc/C/usage-mainwindow.sgml | 420 - doc/C/usage-notes.sgml | 41 - doc/C/usage-sync.sgml | 22 - doc/Camel-Classes | 35 - doc/ChangeLog | 329 - doc/Design | 201 - doc/Makefile.am | 1 - doc/devel/.cvsignore | 4 - doc/devel/ChangeLog | 35 - doc/devel/Makefile.am | 64 - doc/devel/calendar/.cvsignore | 2 - doc/devel/calendar/Makefile.am | 6 - doc/devel/calendar/architecture.sgml | 94 - doc/devel/calendar/cal-client/.cvsignore | 3 - doc/devel/calendar/cal-client/Makefile.am | 76 - .../cal-client/evolution-cal-client-decl.txt | 132 - .../cal-client/evolution-cal-client-sections.txt | 37 - .../calendar/cal-client/evolution-cal-client.args | 0 .../cal-client/evolution-cal-client.hierarchy | 2 - .../cal-client/evolution-cal-client.signals | 21 - .../calendar/cal-client/evolution-cal-client.types | 4 - doc/devel/calendar/cal-client/tmpl/cal-client.sgml | 291 - .../tmpl/evolution-cal-client-unused.sgml | 10 - doc/devel/calendar/cal-util/.cvsignore | 3 - doc/devel/calendar/cal-util/Makefile.am | 75 - .../calendar/cal-util/evolution-cal-util-decl.txt | 852 - .../cal-util/evolution-cal-util-sections.txt | 166 - .../calendar/cal-util/evolution-cal-util.args | 0 .../calendar/cal-util/evolution-cal-util.hierarchy | 2 - .../calendar/cal-util/evolution-cal-util.signals | 0 .../calendar/cal-util/evolution-cal-util.types | 4 - .../calendar/cal-util/tmpl/cal-component.sgml | 934 - doc/devel/calendar/cal-util/tmpl/cal-recur.sgml | 88 - doc/devel/calendar/cal-util/tmpl/cal-util.sgml | 62 - .../cal-util/tmpl/evolution-cal-util-unused.sgml | 0 doc/devel/calendar/cal-util/tmpl/timeutil.sgml | 260 - doc/devel/calendar/evolution-calendar.sgml | 51 - doc/devel/calendar/public-reference.sgml | 24 - doc/devel/calendar/reference.sgml | 24 - doc/devel/evolution-devel-guide.sgml | 50 - doc/white-papers/calendar/calendar.sgml | 209 - doc/white-papers/mail/camel.sgml | 339 - doc/white-papers/mail/ibex.sgml | 158 - doc/white-papers/widgets/e-table.sgml | 279 - e-util/.cvsignore | 6 - e-util/ChangeLog | 495 - e-util/Makefile.am | 48 - e-util/e-canvas-utils.c | 67 - e-util/e-canvas-utils.h | 30 - e-util/e-canvas-vbox.c | 321 - e-util/e-canvas-vbox.h | 86 - e-util/e-canvas.c | 696 - e-util/e-canvas.h | 121 - e-util/e-cursors.c | 134 - e-util/e-cursors.h | 33 - e-util/e-dialog-widgets.c | 824 - e-util/e-dialog-widgets.h | 60 - e-util/e-font.c | 128 - e-util/e-font.h | 64 - e-util/e-gui-utils.c | 219 - e-util/e-gui-utils.h | 19 - e-util/e-html-utils.c | 274 - e-util/e-html-utils.h | 33 - e-util/e-iterator.c | 186 - e-util/e-iterator.h | 69 - e-util/e-list-iterator.c | 247 - e-util/e-list-iterator.h | 44 - e-util/e-list.c | 158 - e-util/e-list.h | 61 - e-util/e-popup-menu.c | 114 - e-util/e-popup-menu.h | 25 - e-util/e-printable.c | 207 - e-util/e-printable.h | 72 - e-util/e-sexp.c | 1163 -- e-util/e-sexp.h | 119 - e-util/e-text-event-processor-emacs-like.c | 372 - e-util/e-text-event-processor-emacs-like.h | 68 - e-util/e-text-event-processor-types.h | 140 - e-util/e-text-event-processor.c | 103 - e-util/e-text-event-processor.h | 74 - e-util/e-util.c | 475 - e-util/e-util.c-8611 | 475 - e-util/e-util.h | 94 - e-util/e-util.h-29002 | 94 - e-util/e-xml-utils.c | 104 - e-util/e-xml-utils.c-56826 | 104 - e-util/e-xml-utils.h | 35 - e-util/e-xml-utils.h-82548 | 35 - e-util/ename/.cvsignore | 8 - e-util/ename/Makefile.am | 50 - e-util/ename/TODO | 2 - e-util/ename/e-name-western-tables.h | 54 - e-util/ename/e-name-western.c | 868 - e-util/ename/e-name-western.h | 21 - e-util/ename/test-ename-western-gtk.c | 148 - e-util/ename/test-ename-western.c | 70 - evolution.desktop | 11 - evolution.png | Bin 4281 -> 0 bytes evolution.spec.in | 124 - filter/.cvsignore | 9 - filter/ChangeLog | 647 - filter/Makefile.am | 72 - filter/filter-code.c | 121 - filter/filter-code.h | 53 - filter/filter-colour.c | 220 - filter/filter-colour.h | 55 - filter/filter-context.c | 148 - filter/filter-context.h | 59 - filter/filter-datespec.c | 703 - filter/filter-datespec.h | 64 - filter/filter-driver.c | 636 - filter/filter-driver.h | 71 - filter/filter-editor.c | 389 - filter/filter-editor.h | 61 - filter/filter-element.c | 267 - filter/filter-element.h | 77 - filter/filter-filter.c | 411 - filter/filter-filter.h | 60 - filter/filter-folder.c | 267 - filter/filter-folder.h | 56 - filter/filter-input.c | 260 - filter/filter-input.h | 59 - filter/filter-option.c | 311 - filter/filter-option.h | 64 - filter/filter-part.c | 432 - filter/filter-part.h | 75 - filter/filter-rule.c | 574 - filter/filter-rule.h | 99 - filter/filter.glade | 702 - filter/filtertypes.xml | 177 - filter/rule-context.c | 427 - filter/rule-context.h | 118 - filter/score-context.c | 100 - filter/score-context.h | 53 - filter/score-editor.c | 313 - filter/score-editor.h | 59 - filter/score-rule.c | 190 - filter/score-rule.h | 56 - filter/vfolder-context.c | 116 - filter/vfolder-context.h | 55 - filter/vfolder-editor.c | 339 - filter/vfolder-editor.h | 61 - filter/vfolder-rule.c | 354 - filter/vfolder-rule.h | 59 - filter/vfoldertypes.xml | 144 - help/.cvsignore | 2 - help/C/.cvsignore | 4 - help/C/Makefile.am | 51 - help/C/apx-authors.sgml | 74 - help/C/apx-bugs.sgml | 19 - help/C/apx-fdl.sgml | 678 - help/C/apx-gloss.sgml | 284 - help/C/apx-gpl.sgml | 414 - help/C/config-prefs.sgml | 570 - help/C/config-setupassist.sgml | 159 - help/C/config-sync.sgml | 67 - help/C/evolution-guide.sgml | 132 - help/C/fig/calendar.png | Bin 33576 -> 0 bytes help/C/fig/config-cal.png | Bin 13077 -> 0 bytes help/C/fig/config-mail.png | Bin 9729 -> 0 bytes help/C/fig/contact.png | Bin 28369 -> 0 bytes help/C/fig/filter-new-fig.png | Bin 11861 -> 0 bytes help/C/fig/mail-druid-pic.png | Bin 35959 -> 0 bytes help/C/fig/mainwindow-pic.png | Bin 108277 -> 0 bytes help/C/fig/vfolder-createrule-fig.png | Bin 12084 -> 0 bytes help/C/preface.sgml | 174 - help/C/usage-calendar.sgml | 356 - help/C/usage-contact.sgml | 504 - help/C/usage-mail.sgml | 1132 -- help/C/usage-mainwindow.sgml | 420 - help/C/usage-notes.sgml | 41 - help/C/usage-sync.sgml | 22 - help/Camel-Classes | 35 - help/ChangeLog | 329 - help/Design | 201 - help/Makefile.am | 1 - help/devel/.cvsignore | 4 - help/devel/ChangeLog | 35 - help/devel/Makefile.am | 64 - help/devel/calendar/.cvsignore | 2 - help/devel/calendar/Makefile.am | 6 - help/devel/calendar/architecture.sgml | 94 - help/devel/calendar/cal-client/.cvsignore | 3 - help/devel/calendar/cal-client/Makefile.am | 76 - .../cal-client/evolution-cal-client-decl.txt | 132 - .../cal-client/evolution-cal-client-sections.txt | 37 - .../calendar/cal-client/evolution-cal-client.args | 0 .../cal-client/evolution-cal-client.hierarchy | 2 - .../cal-client/evolution-cal-client.signals | 21 - .../calendar/cal-client/evolution-cal-client.types | 4 - .../devel/calendar/cal-client/tmpl/cal-client.sgml | 291 - .../tmpl/evolution-cal-client-unused.sgml | 10 - help/devel/calendar/cal-util/.cvsignore | 3 - help/devel/calendar/cal-util/Makefile.am | 75 - .../calendar/cal-util/evolution-cal-util-decl.txt | 852 - .../cal-util/evolution-cal-util-sections.txt | 166 - .../calendar/cal-util/evolution-cal-util.args | 0 .../calendar/cal-util/evolution-cal-util.hierarchy | 2 - .../calendar/cal-util/evolution-cal-util.signals | 0 .../calendar/cal-util/evolution-cal-util.types | 4 - .../calendar/cal-util/tmpl/cal-component.sgml | 934 - help/devel/calendar/cal-util/tmpl/cal-recur.sgml | 88 - help/devel/calendar/cal-util/tmpl/cal-util.sgml | 62 - .../cal-util/tmpl/evolution-cal-util-unused.sgml | 0 help/devel/calendar/cal-util/tmpl/timeutil.sgml | 260 - help/devel/calendar/evolution-calendar.sgml | 51 - help/devel/calendar/public-reference.sgml | 24 - help/devel/calendar/reference.sgml | 24 - help/devel/evolution-devel-guide.sgml | 50 - help/white-papers/calendar/calendar.sgml | 209 - help/white-papers/mail/camel.sgml | 339 - help/white-papers/mail/ibex.sgml | 158 - help/white-papers/widgets/e-table.sgml | 279 - libibex/.cvsignore | 9 - libibex/COPYING.LIB | 481 - libibex/ChangeLog | 99 - libibex/Makefile.am | 21 - libibex/TODO | 61 - libibex/file.c | 481 - libibex/find.c | 198 - libibex/ibex.h | 106 - libibex/ibex_internal.h | 39 - libibex/index.c | 154 - libibex/lookup.c | 83 - libibex/mkindex.c | 84 - libibex/words.c | 269 - libical/.cvsignore | 19 - libical/AUTHORS | 0 libical/CHANGES | 222 - libical/COPYING | 0 libical/ChangeLog | 27 - libical/INSTALL | 24 - libical/MacOS/errno.h | 185 - libical/MacOS/libical.mcp | Bin 139917 -> 0 bytes libical/MacOS/libical.mcp.exp | 1 - libical/MacOS/libical_prefix.h | 5 - libical/MacOS/restrictions.make | 1 - libical/MacOS/restrictions.script | 1 - libical/MacOS/strdup.c | 17 - libical/MacOS/strdup.h | 3 - libical/Makefile.am | 11 - libical/NEWS | 269 - libical/README | 96 - libical/TEST | 4 - libical/THANKS | 10 - libical/TODO | 32 - libical/acconfig.h | 7 - libical/autogen.sh | 80 - libical/configure.in | 52 - libical/configure.scan | 30 - libical/design-data/.cvsignore | 2 - libical/design-data/Makefile.am | 10 - libical/design-data/components.txt | 21 - libical/design-data/param-c-types.txt | 23 - libical/design-data/params-in-prop.txt | 55 - libical/design-data/prop-to-value.txt | 50 - libical/design-data/property-tokens.txt | 65 - libical/design-data/restrictions.csv | 1348 -- libical/design-data/status-new.txt | 56 - libical/design-data/status.foo | 104 - libical/design-data/status.txt | 56 - libical/design-data/value-c-types.txt | 22 - libical/design-data/value-mem-semantics.txt | 19 - libical/doc/.cvsignore | 2 - libical/doc/Makefile.am | 1 - libical/doc/UsingLibical.lyx | 2256 --- libical/doc/UsingLibical.ps | 1308 -- libical/doc/UsingLibical.sgml | 318 - libical/doc/UsingLibical.txt | 302 - libical/install-sh | 119 - libical/missing | 190 - libical/mkinstalldirs | 40 - libical/scripts/.cvsignore | 2 - libical/scripts/Makefile.am | 8 - libical/scripts/mkderivedcomponents.pl | 170 - libical/scripts/mkderivedparameters.pl | 277 - libical/scripts/mkderivedproperties.pl | 290 - libical/scripts/mkderivedvalues.pl | 307 - libical/scripts/mkparameterrestrictions.pl | 85 - libical/scripts/mkrestrictionrecords.pl | 109 - libical/scripts/mkrestrictiontable.pl | 94 - libical/src/.cvsignore | 2 - libical/src/Makefile.am | 1 - libical/src/libical/.cvsignore | 14 - libical/src/libical/.gdb_history | 457 - libical/src/libical/.gdbinit | 3 - libical/src/libical/Makefile.am | 96 - libical/src/libical/base64.c | 323 - libical/src/libical/filelock.c | 143 - libical/src/libical/filelock.h | 57 - libical/src/libical/ical.h | 43 - libical/src/libical/icalcomponent.c | 782 - libical/src/libical/icalcomponent.h | 119 - libical/src/libical/icalenums.c | 615 - libical/src/libical/icalenums.h | 466 - libical/src/libical/icalerror.c | 99 - libical/src/libical/icalerror.h | 141 - libical/src/libical/icalirip.h | 108 - libical/src/libical/icalitip.output | 1698 -- libical/src/libical/icalitip.tab.c | 1663 -- libical/src/libical/icalitip.tab.h | 137 - libical/src/libical/icalitipl.l | 283 - libical/src/libical/icalitipy.y | 434 - libical/src/libical/icallexer.l | 286 - libical/src/libical/icalmemory.c | 244 - libical/src/libical/icalmemory.h | 76 - libical/src/libical/icalparameter.c | 1913 -- libical/src/libical/icalparameter.h | 174 - libical/src/libical/icalparser.c | 990 -- libical/src/libical/icalparser.h | 94 - libical/src/libical/icalproperty.c | 3095 ---- libical/src/libical/icalproperty.h | 368 - libical/src/libical/icalrestriction.c | 1600 -- libical/src/libical/icalrestriction.h | 72 - libical/src/libical/icaltypes.c | 304 - libical/src/libical/icaltypes.h | 182 - libical/src/libical/icalvalue.c | 2104 --- libical/src/libical/icalvalue.h | 169 - libical/src/libical/icalvcal.h | 39 - libical/src/libical/icalversion.h.in | 3 - libical/src/libical/icalyacc.c | 1706 -- libical/src/libical/icalyacc.y | 480 - libical/src/libical/locking.c | 143 - libical/src/libical/pvl.c | 768 - libical/src/libical/pvl.h | 104 - libical/src/libical/testlocks.c | 70 - libical/src/libicalss/.cvsignore | 6 - libical/src/libicalss/Makefile.am | 25 - libical/src/libicalss/icalcalendar.c | 268 - libical/src/libicalss/icalcalendar.h | 68 - libical/src/libicalss/icalcluster.c | 423 - libical/src/libicalss/icalcluster.h | 73 - libical/src/libicalss/icalcomponent.h | 115 - libical/src/libicalss/icalstore.c | 858 - libical/src/libicalss/icalstore.h | 78 - libical/src/pvl/Makefile | 0 libical/src/test/.cvsignore | 12 - libical/src/test/Makefile.am | 19 - libical/src/test/Makefile.in | 385 - libical/src/test/alice/booked/199706 | 317 - libical/src/test/alice/booked/199707 | 701 - libical/src/test/alice/booked/199708 | 45 - libical/src/test/alice/booked/199709 | 58 - libical/src/test/alice/booked/199803 | 241 - libical/src/test/alice/incoming.ics | 2164 --- libical/src/test/copycluster.c | 113 - libical/src/test/findobj.c | 71 - libical/src/test/icaltestparser.c | 124 - libical/src/test/regression.c | 1334 -- libical/src/test/storage.c | 460 - libical/src/test/stow.c | 533 - libical/src/test/test-component.icd | 23 - libical/src/test/usecases.c | 553 - libical/test-data/.cvsignore | 2 - libical/test-data/0 | 9 - libical/test-data/1 | 39 - libical/test-data/1.1 | 13 - libical/test-data/2 | 22 - libical/test-data/2445.ics | 321 - libical/test-data/2445.vcd | 329 - libical/test-data/2446.ics | 998 -- libical/test-data/2446.vcd | 1007 -- libical/test-data/3 | 21 - libical/test-data/4 | 23 - libical/test-data/5 | 16 - libical/test-data/6 | 12 - libical/test-data/7 | 14 - libical/test-data/Makefile.am | 13 - libical/test-data/smallcluster.ics | 13 - libical/test-data/smallcluster.vcd | 18 - libversit/.cvsignore | 9 - libversit/Makefile.am | 15 - libversit/README.TXT | 951 - libversit/port.h | 88 - libversit/vcaltest.c | 118 - libversit/vcaltmp.c | 337 - libversit/vcaltmp.h | 128 - libversit/vcc.h | 80 - libversit/vcc.y | 1257 -- libversit/vctest.c | 95 - libversit/vobject.c | 1452 -- libversit/vobject.h | 366 - mail/.cvsignore | 14 - mail/ChangeLog | 3693 ---- mail/GNOME_Evolution_Mail.oaf.in | 54 - mail/GNOME_Evolution_Mail.oafinfo | 54 - mail/Mail.idl | 30 - mail/Makefile.am | 145 - mail/README.async | 360 - mail/component-factory.c | 276 - mail/component-factory.h | 29 - mail/e-attchmt.png | Bin 169 -> 0 bytes mail/evolution-mail.gnorba | 23 - mail/evolution-mail.oafinfo | 54 - mail/folder-browser-factory.c | 349 - mail/folder-browser-factory.h | 19 - mail/folder-browser.c | 451 - mail/folder-browser.h | 73 - mail/local-config.glade | 220 - mail/mail-autofilter.c | 265 - mail/mail-autofilter.h | 21 - mail/mail-callbacks.c | 654 - mail/mail-config-druid.glade | 143 - mail/mail-config-druid.glade.h | 18 - mail/mail-config-gui.c | 2268 --- mail/mail-config-gui.h | 29 - mail/mail-config.c | 549 - mail/mail-config.glade | 496 - mail/mail-config.glade.h | 28 - mail/mail-config.h | 88 - mail/mail-crypto.c | 529 - mail/mail-display.c | 564 - mail/mail-display.h | 57 - mail/mail-format.c | 1764 -- mail/mail-identify.c | 101 - mail/mail-local.c | 504 - mail/mail-local.h | 37 - mail/mail-ops.c | 1975 --- mail/mail-ops.h | 68 - mail/mail-threads.c | 1096 -- mail/mail-threads.h | 75 - mail/mail-tools.c | 676 - mail/mail-tools.h | 115 - mail/mail-types.h | 39 - mail/mail-vfolder.c | 317 - mail/mail-vfolder.h | 24 - mail/mail-view.c | 243 - mail/mail.h | 94 - mail/main.c | 75 - mail/message-list.c | 1267 -- mail/message-list.h | 118 - mail/message-thread.c | 942 - mail/message-thread.h | 23 - mail/session.c | 215 - mail/test-mail.c | 71 - mail/test-thread.c | 230 - notes/.cvsignore | 2 - notes/GNOME_Evolution_Notes.oaf.in | 54 - notes/GNOME_Evolution_Notes.oafinfo | 54 - notes/Makefile.am | 46 - notes/component-factory.c | 151 - notes/component-factory.h | 7 - notes/e-bevel-button-util.c | 189 - notes/e-bevel-button-util.h | 12 - notes/e-bevel-button.c | 175 - notes/e-bevel-button.h | 37 - notes/e-note.c | 381 - notes/e-note.h | 37 - notes/evolution-notes.oafinfo | 54 - notes/main.c | 52 - notes/test-notes.c | 34 - po/.cvsignore | 12 - po/ChangeLog | 539 - po/POTFILES.ignore | 1 - po/POTFILES.in | 109 - po/README.tools | 58 - po/da.po | 4813 ----- po/de.po | 4837 ----- po/desk.pl | 118 - po/el.po | 3771 ---- po/es.po | 3540 ---- po/flu-danish | 114 - po/fr.po | 3501 ---- po/ga.po | 455 - po/gl.po | 3334 ---- po/hu.po | 3904 ---- po/it.po | 3721 ---- po/ja.po | 3915 ---- po/ko.po | 3699 ---- po/nl.po | 3770 ---- po/no.po | 4627 ----- po/pl.po | 3785 ---- po/pt.po | 2556 --- po/pt_BR.po | 3904 ---- po/ru.po | 4822 ----- po/sl.po | 4025 ----- po/sv.po | 3543 ---- po/tr.po | 3376 ---- po/uk.po | 4373 ----- po/update.pl | 166 - po/update.sh | 42 - shell/.cvsignore | 11 - shell/ChangeLog | 2040 --- shell/Evolution-Session.idl | 39 - shell/Evolution-Shell.idl | 60 - shell/Evolution-ShellComponent.idl | 77 - shell/Evolution-ShellView.idl | 18 - shell/Evolution-Storage.idl | 51 - shell/Evolution.idl | 17 - shell/Makefile.am | 133 - shell/e-component-registry.c | 374 - shell/e-component-registry.h | 79 - shell/e-corba-storage-registry.c | 246 - shell/e-corba-storage-registry.h | 73 - shell/e-corba-storage.c | 354 - shell/e-corba-storage.h | 76 - shell/e-folder-type-registry.c | 367 - shell/e-folder-type-registry.h | 88 - shell/e-folder.c | 289 - shell/e-folder.h | 93 - shell/e-local-folder.c | 261 - shell/e-local-folder.h | 73 - shell/e-local-storage.c | 589 - shell/e-local-storage.h | 69 - shell/e-setup.c | 144 - shell/e-setup.h | 31 - shell/e-shell-constants.h | 36 - shell/e-shell-folder-creation-dialog.c | 398 - shell/e-shell-folder-creation-dialog.h | 35 - shell/e-shell-folder-selection-dialog.c | 359 - shell/e-shell-folder-selection-dialog.h | 79 - shell/e-shell-folder-title-bar.c | 548 - shell/e-shell-folder-title-bar.h | 81 - shell/e-shell-utils.c | 107 - shell/e-shell-utils.h | 30 - shell/e-shell-view-menu.c | 623 - shell/e-shell-view-menu.h | 35 - shell/e-shell-view.c | 1379 -- shell/e-shell-view.h | 103 - shell/e-shell.c | 846 - shell/e-shell.h | 88 - shell/e-shortcuts-view.c | 584 - shell/e-shortcuts-view.h | 76 - shell/e-shortcuts.c | 760 - shell/e-shortcuts.h | 110 - shell/e-storage-set-view.c | 1003 -- shell/e-storage-set-view.h | 79 - shell/e-storage-set.c | 576 - shell/e-storage-set.h | 112 - shell/e-storage.c | 593 - shell/e-storage.h | 135 - shell/evolution-session.c | 213 - shell/evolution-session.h | 72 - shell/evolution-shell-client.c | 333 - shell/evolution-shell-client.h | 78 - shell/evolution-shell-component-client.c | 526 - shell/evolution-shell-component-client.h | 101 - shell/evolution-shell-component.c | 498 - shell/evolution-shell-component.h | 141 - shell/evolution-shell-view.c | 226 - shell/evolution-shell-view.h | 76 - shell/evolution-storage.c | 387 - shell/evolution-storage.h | 98 - shell/glade/.cvsignore | 4 - shell/glade/Makefile.am | 5 - shell/glade/e-shell-folder-creation-dialog.glade | 168 - shell/idl/folder.idl | 87 - shell/main.c | 174 - stamp.h.in | 1 - tests/.cvsignore | 24 - tests/Makefile.am | 73 - tests/test-movemail.c | 164 - tests/test-url.c | 37 - tests/test1.c | 136 - tests/test10.c | 127 - tests/test11.c | 136 - tests/test12.c | 56 - tests/test13.c | 123 - tests/test14.c | 177 - tests/test2.c | 48 - tests/test3.c | 29 - tests/test4.c | 65 - tests/test5.c | 59 - tests/test6.c | 49 - tests/test8.c | 75 - tests/test9.c | 80 - tests/ui-tests/.cvsignore | 8 - tests/ui-tests/Makefile.am | 39 - tests/ui-tests/filter.c | 30 - tests/ui-tests/filterdescription.xml | 99 - tests/ui-tests/mail-atchmt-image.msg | 67 - tests/ui-tests/mail-atchmt-postscript.msg | 8069 --------- tests/ui-tests/mail-atchmt-svg.msg | 418 - tests/ui-tests/message-browser.c | 819 - tests/ui-tests/saveoptions.xml | 37 - tests/ui-tests/store_listing.c | 424 - tests/ui-tests/store_listing.glade | 489 - tests/ui-tests/test-multipart-alt.msg | 17738 ------------------- tests/ui-tests/test-multipart-mixed.msg | 377 - tools/.cvsignore | 3 - tools/Makefile.am | 3 - tools/killev | 16 - tools/verify-evolution-install.sh | 640 - widgets/.cvsignore | 9 - widgets/LICENSE | 1 - widgets/Makefile.am | 8 - widgets/e-paned/.cvsignore | 8 - widgets/e-paned/Makefile.am | 15 - widgets/e-paned/e-hpaned.c | 439 - widgets/e-paned/e-hpaned.h | 72 - widgets/e-paned/e-paned.c | 635 - widgets/e-paned/e-paned.h | 135 - widgets/e-paned/e-vpaned.c | 438 - widgets/e-paned/e-vpaned.h | 72 - widgets/e-reflow/e-reflow-sorted.c | 272 - widgets/e-reflow/e-reflow-sorted.h | 90 - widgets/e-reflow/e-reflow.c | 859 - widgets/e-reflow/e-reflow.h | 112 - widgets/e-table/.cvsignore | 12 - widgets/e-table/ChangeLog | 2508 --- widgets/e-table/LICENSE | 1 - widgets/e-table/Makefile.am | 180 - widgets/e-table/ROADMAP.e-table | 113 - widgets/e-table/TODO | 99 - widgets/e-table/add-col.xpm | 22 - widgets/e-table/arrow-down.xpm | 21 - widgets/e-table/arrow-up.xpm | 21 - widgets/e-table/check-empty.xpm | 21 - widgets/e-table/check-filled.xpm | 21 - widgets/e-table/clip.png | Bin 192 -> 0 bytes widgets/e-table/e-cell-checkbox.c | 44 - widgets/e-table/e-cell-checkbox.h | 24 - widgets/e-table/e-cell-string.c | 9 - widgets/e-table/e-cell-text.c | 2314 --- widgets/e-table/e-cell-text.h | 77 - widgets/e-table/e-cell-toggle.c | 289 - widgets/e-table/e-cell-toggle.h | 35 - widgets/e-table/e-cell-tree.c | 542 - widgets/e-table/e-cell-tree.h | 48 - widgets/e-table/e-cell.c | 200 - widgets/e-table/e-cell.h | 85 - widgets/e-table/e-table-click-to-add.c | 504 - widgets/e-table/e-table-click-to-add.h | 51 - widgets/e-table/e-table-col-dnd.h | 10 - widgets/e-table/e-table-col.c | 168 - widgets/e-table/e-table-col.h | 67 - widgets/e-table/e-table-column-model.h | 5 - widgets/e-table/e-table-column.c | 293 - widgets/e-table/e-table-config.c | 233 - widgets/e-table/e-table-config.glade | 302 - widgets/e-table/e-table-config.glade.h | 10 - widgets/e-table/e-table-config.h | 11 - widgets/e-table/e-table-defines.h | 16 - widgets/e-table/e-table-example-1.c | 287 - widgets/e-table/e-table-example-2.c | 330 - widgets/e-table/e-table-field-chooser-dialog.c | 190 - widgets/e-table/e-table-field-chooser-dialog.h | 76 - widgets/e-table/e-table-field-chooser-item.c | 566 - widgets/e-table/e-table-field-chooser-item.h | 47 - widgets/e-table/e-table-field-chooser.c | 246 - widgets/e-table/e-table-field-chooser.glade | 131 - widgets/e-table/e-table-field-chooser.glade.h | 9 - widgets/e-table/e-table-field-chooser.h | 81 - widgets/e-table/e-table-group-container.c | 1169 -- widgets/e-table/e-table-group-container.h | 69 - widgets/e-table/e-table-group-leaf.c | 425 - widgets/e-table/e-table-group-leaf.h | 52 - widgets/e-table/e-table-group.c | 420 - widgets/e-table/e-table-group.glade | 208 - widgets/e-table/e-table-group.glade.h | 13 - widgets/e-table/e-table-group.h | 135 - widgets/e-table/e-table-header-item.c | 1449 -- widgets/e-table/e-table-header-item.h | 76 - widgets/e-table/e-table-header.c | 665 - widgets/e-table/e-table-header.h | 79 - widgets/e-table/e-table-item.c | 2228 --- widgets/e-table/e-table-item.h | 143 - widgets/e-table/e-table-model.c | 354 - widgets/e-table/e-table-model.h | 88 - widgets/e-table/e-table-one.c | 236 - widgets/e-table/e-table-one.h | 30 - widgets/e-table/e-table-scrolled.c | 341 - widgets/e-table/e-table-scrolled.h | 64 - widgets/e-table/e-table-selection-model.c | 500 - widgets/e-table/e-table-selection-model.h | 70 - widgets/e-table/e-table-simple.c | 242 - widgets/e-table/e-table-simple.h | 61 - widgets/e-table/e-table-size-test.c | 288 - widgets/e-table/e-table-sort-info.c | 238 - widgets/e-table/e-table-sort-info.h | 60 - widgets/e-table/e-table-sorted-variable.c | 337 - widgets/e-table/e-table-sorted-variable.h | 38 - widgets/e-table/e-table-sorted.c | 89 - widgets/e-table/e-table-sorted.h | 29 - widgets/e-table/e-table-sorter.c | 295 - widgets/e-table/e-table-sorter.h | 47 - widgets/e-table/e-table-subset-variable.c | 193 - widgets/e-table/e-table-subset-variable.h | 48 - widgets/e-table/e-table-subset.c | 253 - widgets/e-table/e-table-subset.h | 38 - widgets/e-table/e-table-text-model.c | 220 - widgets/e-table/e-table-text-model.h | 61 - widgets/e-table/e-table-tree.h | 19 - widgets/e-table/e-table.c | 1669 -- widgets/e-table/e-table.h | 252 - widgets/e-table/e-tree-example-1.c | 403 - widgets/e-table/e-tree-model.c | 760 - widgets/e-table/e-tree-model.h | 107 - widgets/e-table/e-tree-simple.c | 84 - widgets/e-table/e-tree-simple.h | 43 - widgets/e-table/image1.png | Bin 1858 -> 0 bytes widgets/e-table/image2.png | Bin 1987 -> 0 bytes widgets/e-table/image3.png | Bin 2051 -> 0 bytes widgets/e-table/remove-col.xpm | 22 - widgets/e-table/sample.table | 11 - widgets/e-table/table-test.c | 45 - widgets/e-table/table-test.h | 4 - widgets/e-table/test-check.c | 206 - widgets/e-table/test-cols.c | 250 - widgets/e-table/test-table.c | 394 - widgets/e-table/tree-expanded.xpm | 22 - widgets/e-table/tree-unexpanded.xpm | 22 - widgets/e-text/.cvsignore | 9 - widgets/e-text/Makefile.am | 43 - widgets/e-text/e-entry-test.c | 79 - widgets/e-text/e-entry.c | 408 - widgets/e-text/e-entry.h | 39 - widgets/e-text/e-text-event-processor-emacs-like.c | 372 - widgets/e-text/e-text-event-processor-emacs-like.h | 68 - widgets/e-text/e-text-event-processor-types.h | 140 - widgets/e-text/e-text-event-processor.c | 103 - widgets/e-text/e-text-event-processor.h | 74 - widgets/e-text/e-text-model.c | 244 - widgets/e-text/e-text-model.h | 72 - widgets/e-text/e-text-test.c | 153 - widgets/e-text/e-text.c | 3365 ---- widgets/e-text/e-text.h | 227 - widgets/meeting-time-sel/.cvsignore | 8 - widgets/meeting-time-sel/ChangeLog | 9 - widgets/meeting-time-sel/LICENSE | 1 - widgets/meeting-time-sel/Makefile.am | 36 - widgets/meeting-time-sel/e-meeting-time-sel-item.c | 978 - widgets/meeting-time-sel/e-meeting-time-sel-item.h | 79 - .../e-meeting-time-sel-list-item.c | 393 - .../e-meeting-time-sel-list-item.h | 73 - .../meeting-time-sel/e-meeting-time-sel-mail.xpm | 135 - .../e-meeting-time-sel-no-mail.xpm | 123 - widgets/meeting-time-sel/e-meeting-time-sel.c | 3271 ---- widgets/meeting-time-sel/e-meeting-time-sel.h | 518 - widgets/meeting-time-sel/test-meeting-time-sel.c | 242 - widgets/misc/.cvsignore | 9 - widgets/misc/ChangeLog | 50 - widgets/misc/Makefile.am | 42 - widgets/misc/e-calendar-item.c | 1615 -- widgets/misc/e-calendar-item.h | 151 - widgets/misc/e-calendar.c | 486 - widgets/misc/e-calendar.h | 87 - widgets/misc/e-canvas-utils.c | 67 - widgets/misc/e-canvas-utils.h | 30 - widgets/misc/e-canvas-vbox.c | 321 - widgets/misc/e-canvas-vbox.h | 86 - widgets/misc/e-canvas.c | 696 - widgets/misc/e-canvas.h | 121 - widgets/misc/e-clipped-label.c | 378 - widgets/misc/e-clipped-label.h | 90 - widgets/misc/e-colors.c | 74 - widgets/misc/e-colors.h | 14 - widgets/misc/e-cursors.c | 38 - widgets/misc/e-cursors.h | 38 - widgets/misc/e-gui-utils.c | 219 - widgets/misc/e-gui-utils.h | 19 - widgets/misc/e-popup-menu.c | 114 - widgets/misc/e-popup-menu.h | 25 - widgets/misc/e-printable.c | 207 - widgets/misc/e-printable.h | 72 - widgets/misc/e-reflow.c | 859 - widgets/misc/e-reflow.h | 112 - widgets/misc/e-scroll-frame.c | 1250 -- widgets/misc/e-scroll-frame.h | 95 - widgets/misc/e-title-bar.c | 271 - widgets/misc/e-title-bar.h | 79 - widgets/misc/pixmaps/cursor_cross.xpm | 38 - widgets/misc/pixmaps/cursor_hand_closed.xpm | 38 - widgets/misc/pixmaps/cursor_hand_open.xpm | 38 - widgets/misc/pixmaps/cursor_zoom_in.xpm | 37 - widgets/misc/pixmaps/cursor_zoom_out.xpm | 37 - widgets/misc/test-calendar.c | 74 - widgets/misc/test-title-bar.c | 73 - widgets/shortcut-bar/.cvsignore | 8 - widgets/shortcut-bar/ChangeLog | 276 - widgets/shortcut-bar/LICENSE | 1 - widgets/shortcut-bar/Makefile.am | 38 - widgets/shortcut-bar/e-group-bar.c | 1546 -- widgets/shortcut-bar/e-group-bar.h | 172 - widgets/shortcut-bar/e-icon-bar-bg-item.c | 366 - widgets/shortcut-bar/e-icon-bar-bg-item.h | 72 - widgets/shortcut-bar/e-icon-bar.c | 1643 -- widgets/shortcut-bar/e-icon-bar.h | 246 - widgets/shortcut-bar/e-shortcut-bar.c | 757 - widgets/shortcut-bar/e-shortcut-bar.h | 128 - widgets/shortcut-bar/e-shortcut-model.c | 556 - widgets/shortcut-bar/e-shortcut-model.h | 139 - widgets/shortcut-bar/e-vscrolled-bar.c | 708 - widgets/shortcut-bar/e-vscrolled-bar.h | 97 - widgets/shortcut-bar/test-shortcut-bar.c | 606 - widgets/table/.cvsignore | 12 - widgets/table/add-col.xpm | 22 - widgets/table/arrow-down.xpm | 21 - widgets/table/arrow-up.xpm | 21 - widgets/table/check-empty.xpm | 21 - widgets/table/check-filled.xpm | 21 - widgets/table/clip.png | Bin 192 -> 0 bytes widgets/table/e-cell-checkbox.c | 44 - widgets/table/e-cell-checkbox.h | 24 - widgets/table/e-cell-string.c | 9 - widgets/table/e-cell-text.c | 2314 --- widgets/table/e-cell-text.h | 77 - widgets/table/e-cell-toggle.c | 289 - widgets/table/e-cell-toggle.h | 35 - widgets/table/e-cell-tree.c | 542 - widgets/table/e-cell-tree.h | 48 - widgets/table/e-cell.c | 200 - widgets/table/e-cell.h | 85 - widgets/table/e-table-click-to-add.c | 504 - widgets/table/e-table-click-to-add.h | 51 - widgets/table/e-table-col-dnd.h | 10 - widgets/table/e-table-col.c | 168 - widgets/table/e-table-col.h | 67 - widgets/table/e-table-column-model.h | 5 - widgets/table/e-table-column.c | 293 - widgets/table/e-table-config.c | 233 - widgets/table/e-table-config.glade | 302 - widgets/table/e-table-config.glade.h | 10 - widgets/table/e-table-config.h | 11 - widgets/table/e-table-defines.h | 16 - widgets/table/e-table-example-1.c | 287 - widgets/table/e-table-example-2.c | 330 - widgets/table/e-table-field-chooser-dialog.c | 190 - widgets/table/e-table-field-chooser-dialog.h | 76 - widgets/table/e-table-field-chooser-item.c | 566 - widgets/table/e-table-field-chooser-item.h | 47 - widgets/table/e-table-field-chooser.c | 246 - widgets/table/e-table-field-chooser.glade | 131 - widgets/table/e-table-field-chooser.glade.h | 9 - widgets/table/e-table-field-chooser.h | 81 - widgets/table/e-table-group-container.c | 1169 -- widgets/table/e-table-group-container.h | 69 - widgets/table/e-table-group-leaf.c | 425 - widgets/table/e-table-group-leaf.h | 52 - widgets/table/e-table-group.c | 420 - widgets/table/e-table-group.glade | 208 - widgets/table/e-table-group.glade.h | 13 - widgets/table/e-table-group.h | 135 - widgets/table/e-table-header-item.c | 1449 -- widgets/table/e-table-header-item.h | 76 - widgets/table/e-table-header.c | 665 - widgets/table/e-table-header.h | 79 - widgets/table/e-table-item.c | 2228 --- widgets/table/e-table-item.h | 143 - widgets/table/e-table-model.c | 354 - widgets/table/e-table-model.h | 88 - widgets/table/e-table-one.c | 236 - widgets/table/e-table-one.h | 30 - widgets/table/e-table-scrolled.c | 341 - widgets/table/e-table-scrolled.h | 64 - widgets/table/e-table-selection-model.c | 500 - widgets/table/e-table-selection-model.h | 70 - widgets/table/e-table-simple.c | 242 - widgets/table/e-table-simple.h | 61 - widgets/table/e-table-size-test.c | 288 - widgets/table/e-table-sort-info.c | 238 - widgets/table/e-table-sort-info.h | 60 - widgets/table/e-table-sorted-variable.c | 337 - widgets/table/e-table-sorted-variable.h | 38 - widgets/table/e-table-sorted.c | 89 - widgets/table/e-table-sorted.h | 29 - widgets/table/e-table-sorter.c | 295 - widgets/table/e-table-sorter.h | 47 - widgets/table/e-table-subset-variable.c | 193 - widgets/table/e-table-subset-variable.h | 48 - widgets/table/e-table-subset.c | 253 - widgets/table/e-table-subset.h | 38 - widgets/table/e-table-text-model.c | 220 - widgets/table/e-table-text-model.h | 61 - widgets/table/e-table-tree.h | 19 - widgets/table/e-table.c | 1669 -- widgets/table/e-table.h | 252 - widgets/table/e-tree-example-1.c | 403 - widgets/table/e-tree-model.c | 760 - widgets/table/e-tree-model.h | 107 - widgets/table/e-tree-simple.c | 84 - widgets/table/e-tree-simple.h | 43 - widgets/table/image1.png | Bin 1858 -> 0 bytes widgets/table/image2.png | Bin 1987 -> 0 bytes widgets/table/image3.png | Bin 2051 -> 0 bytes widgets/table/remove-col.xpm | 22 - widgets/table/sample.table | 11 - widgets/table/table-test.c | 45 - widgets/table/table-test.h | 4 - widgets/table/test-check.c | 206 - widgets/table/test-cols.c | 250 - widgets/table/test-table.c | 394 - widgets/table/tree-expanded.xpm | 22 - widgets/table/tree-unexpanded.xpm | 22 - widgets/text/.cvsignore | 9 - widgets/text/e-entry-test.c | 79 - widgets/text/e-entry.c | 408 - widgets/text/e-entry.h | 39 - widgets/text/e-table-text-model.c | 220 - widgets/text/e-table-text-model.h | 61 - widgets/text/e-text-event-processor-emacs-like.c | 372 - widgets/text/e-text-event-processor-emacs-like.h | 68 - widgets/text/e-text-event-processor-types.h | 140 - widgets/text/e-text-event-processor.c | 103 - widgets/text/e-text-event-processor.h | 74 - widgets/text/e-text-model.c | 244 - widgets/text/e-text-model.h | 72 - widgets/text/e-text-test.c | 153 - widgets/text/e-text.c | 3365 ---- widgets/text/e-text.h | 227 - wombat/.cvsignore | 13 - wombat/ChangeLog | 106 - wombat/GNOME_Evolution_Wombat.oaf.in | 30 - wombat/GNOME_Evolution_Wombat.oafinfo | 30 - wombat/Makefile.am | 57 - wombat/wombat.c | 293 - wombat/wombat.gnorba | 11 - wombat/wombat.idl | 12 - wombat/wombat.oafinfo | 30 - 1646 files changed, 508058 deletions(-) delete mode 100644 .cvsignore delete mode 100644 AUTHORS delete mode 100644 COPYING delete mode 100644 ChangeLog delete mode 100644 HACKING delete mode 100644 INSTALL delete mode 100644 MAINTAINERS delete mode 100644 Makefile.am delete mode 100644 NEWS delete mode 100644 README delete mode 100644 acconfig.h delete mode 100644 addressbook/.cvsignore delete mode 100644 addressbook/ChangeLog delete mode 100644 addressbook/Makefile.am delete mode 100644 addressbook/backend/.cvsignore delete mode 100644 addressbook/backend/Makefile.am delete mode 100644 addressbook/backend/ebook/.cvsignore delete mode 100644 addressbook/backend/ebook/Makefile.am delete mode 100644 addressbook/backend/ebook/TODO delete mode 100644 addressbook/backend/ebook/e-book-listener.c delete mode 100644 addressbook/backend/ebook/e-book-listener.h delete mode 100644 addressbook/backend/ebook/e-book-types.h delete mode 100644 addressbook/backend/ebook/e-book-view-listener.c delete mode 100644 addressbook/backend/ebook/e-book-view-listener.h delete mode 100644 addressbook/backend/ebook/e-book-view.c delete mode 100644 addressbook/backend/ebook/e-book-view.h delete mode 100644 addressbook/backend/ebook/e-book.c delete mode 100644 addressbook/backend/ebook/e-book.h delete mode 100644 addressbook/backend/ebook/e-card-cursor.c delete mode 100644 addressbook/backend/ebook/e-card-cursor.h delete mode 100644 addressbook/backend/ebook/e-card-pairs.h delete mode 100644 addressbook/backend/ebook/e-card-simple.c delete mode 100644 addressbook/backend/ebook/e-card-simple.h delete mode 100644 addressbook/backend/ebook/e-card-types.h delete mode 100644 addressbook/backend/ebook/e-card.c delete mode 100644 addressbook/backend/ebook/e-card.h delete mode 100644 addressbook/backend/ebook/load-gnomecard-addressbook.c delete mode 100644 addressbook/backend/ebook/load-pine-addressbook.c delete mode 100644 addressbook/backend/ebook/test-card.c delete mode 100644 addressbook/backend/ebook/test-client-list.c delete mode 100644 addressbook/backend/ebook/test-client.c delete mode 100644 addressbook/backend/idl/.cvsignore delete mode 100644 addressbook/backend/idl/Makefile.am delete mode 100644 addressbook/backend/idl/addressbook.idl delete mode 100644 addressbook/backend/pas/.cvsignore delete mode 100644 addressbook/backend/pas/Makefile.am delete mode 100644 addressbook/backend/pas/TODO delete mode 100644 addressbook/backend/pas/pas-backend-file.c delete mode 100644 addressbook/backend/pas/pas-backend-file.h delete mode 100644 addressbook/backend/pas/pas-backend-ldap.c delete mode 100644 addressbook/backend/pas/pas-backend-ldap.h delete mode 100644 addressbook/backend/pas/pas-backend.c delete mode 100644 addressbook/backend/pas/pas-backend.h delete mode 100644 addressbook/backend/pas/pas-book-factory.c delete mode 100644 addressbook/backend/pas/pas-book-factory.h delete mode 100644 addressbook/backend/pas/pas-book-view.c delete mode 100644 addressbook/backend/pas/pas-book-view.h delete mode 100644 addressbook/backend/pas/pas-book.c delete mode 100644 addressbook/backend/pas/pas-book.h delete mode 100644 addressbook/backend/pas/pas-card-cursor.c delete mode 100644 addressbook/backend/pas/pas-card-cursor.h delete mode 100644 addressbook/conduit/.cvsignore delete mode 100644 addressbook/conduit/Makefile.am delete mode 100644 addressbook/conduit/address-conduit-control-applet.c delete mode 100644 addressbook/conduit/address-conduit-control-applet.desktop delete mode 100644 addressbook/conduit/address-conduit.c delete mode 100644 addressbook/conduit/address-conduit.h delete mode 100644 addressbook/conduit/address.conduit.in delete mode 100644 addressbook/contact-editor/.cvsignore delete mode 100644 addressbook/contact-editor/Makefile.am delete mode 100644 addressbook/contact-editor/arrow.png delete mode 100644 addressbook/contact-editor/briefcase.png delete mode 100644 addressbook/contact-editor/categories-strings.h delete mode 100644 addressbook/contact-editor/categories.glade delete mode 100644 addressbook/contact-editor/contact-editor.glade delete mode 100644 addressbook/contact-editor/e-contact-editor-categories.c delete mode 100644 addressbook/contact-editor/e-contact-editor-categories.h delete mode 100644 addressbook/contact-editor/e-contact-editor-confirm-delete.glade delete mode 100644 addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h delete mode 100644 addressbook/contact-editor/e-contact-editor-fullname.c delete mode 100644 addressbook/contact-editor/e-contact-editor-fullname.h delete mode 100644 addressbook/contact-editor/e-contact-editor-strings.h delete mode 100644 addressbook/contact-editor/e-contact-editor.c delete mode 100644 addressbook/contact-editor/e-contact-editor.h delete mode 100644 addressbook/contact-editor/e-contact-save-as.c delete mode 100644 addressbook/contact-editor/e-contact-save-as.h delete mode 100644 addressbook/contact-editor/email.png delete mode 100644 addressbook/contact-editor/fullname-strings.h delete mode 100644 addressbook/contact-editor/fullname.glade delete mode 100644 addressbook/contact-editor/head.png delete mode 100644 addressbook/contact-editor/netfreebusy.png delete mode 100644 addressbook/contact-editor/netmeeting.png delete mode 100644 addressbook/contact-editor/phone.png delete mode 100644 addressbook/contact-editor/snailmail.png delete mode 100644 addressbook/contact-editor/test-editor.c delete mode 100644 addressbook/contact-editor/web.png delete mode 100644 addressbook/demo/.cvsignore delete mode 100644 addressbook/demo/Makefile.am delete mode 100644 addressbook/demo/addressbook-factory.c delete mode 100644 addressbook/demo/addressbook-widget.c delete mode 100644 addressbook/demo/addressbook-widget.h delete mode 100644 addressbook/demo/addressbook.c delete mode 100644 addressbook/demo/addressbook.gnorba delete mode 100644 addressbook/demo/addressbook.h delete mode 100644 addressbook/demo/demo.c delete mode 100644 addressbook/demo/e-test-model.c delete mode 100644 addressbook/demo/e-test-model.h delete mode 100644 addressbook/demo/spec delete mode 100644 addressbook/ename/.cvsignore delete mode 100644 addressbook/ename/Makefile.am delete mode 100644 addressbook/ename/TODO delete mode 100644 addressbook/ename/e-name-western-tables.h delete mode 100644 addressbook/ename/e-name-western.c delete mode 100644 addressbook/ename/e-name-western.h delete mode 100644 addressbook/ename/test-ename-western-gtk.c delete mode 100644 addressbook/ename/test-ename-western.c delete mode 100644 addressbook/gui/.cvsignore delete mode 100644 addressbook/gui/Makefile.am delete mode 100644 addressbook/gui/component/.cvsignore delete mode 100644 addressbook/gui/component/GNOME_Evolution_Addressbook.oaf.in delete mode 100644 addressbook/gui/component/GNOME_Evolution_Addressbook.oafinfo delete mode 100644 addressbook/gui/component/Makefile.am delete mode 100644 addressbook/gui/component/addressbook-component.c delete mode 100644 addressbook/gui/component/addressbook-component.h delete mode 100644 addressbook/gui/component/addressbook-factory.c delete mode 100644 addressbook/gui/component/addressbook.c delete mode 100644 addressbook/gui/component/addressbook.gnorba delete mode 100644 addressbook/gui/component/addressbook.h delete mode 100644 addressbook/gui/component/addressbook.oafinfo delete mode 100644 addressbook/gui/component/alphabet.glade delete mode 100644 addressbook/gui/component/alphabet.glade.h delete mode 100644 addressbook/gui/component/e-addressbook-model.c delete mode 100644 addressbook/gui/component/e-addressbook-model.h delete mode 100644 addressbook/gui/component/e-cardlist-model.c delete mode 100644 addressbook/gui/component/e-cardlist-model.h delete mode 100644 addressbook/gui/component/e-ldap-server-dialog.c delete mode 100644 addressbook/gui/component/e-ldap-server-dialog.h delete mode 100644 addressbook/gui/component/e-ldap-storage.c delete mode 100644 addressbook/gui/component/e-ldap-storage.h delete mode 100644 addressbook/gui/component/ldap-server-dialog.glade delete mode 100644 addressbook/gui/component/ldap-server-dialog.glade.h delete mode 100644 addressbook/gui/component/select-names/.cvsignore delete mode 100644 addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl delete mode 100644 addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oaf.in delete mode 100644 addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oafinfo delete mode 100644 addressbook/gui/component/select-names/Makefile.am delete mode 100644 addressbook/gui/component/select-names/e-select-names-bonobo.c delete mode 100644 addressbook/gui/component/select-names/e-select-names-bonobo.h delete mode 100644 addressbook/gui/component/select-names/e-select-names-factory.c delete mode 100644 addressbook/gui/component/select-names/e-select-names-factory.h delete mode 100644 addressbook/gui/component/select-names/e-select-names-manager.c delete mode 100644 addressbook/gui/component/select-names/e-select-names-manager.h delete mode 100644 addressbook/gui/component/select-names/e-select-names-model.c delete mode 100644 addressbook/gui/component/select-names/e-select-names-model.h delete mode 100644 addressbook/gui/component/select-names/e-select-names-table-model.c delete mode 100644 addressbook/gui/component/select-names/e-select-names-table-model.h delete mode 100644 addressbook/gui/component/select-names/e-select-names-text-model.c delete mode 100644 addressbook/gui/component/select-names/e-select-names-text-model.h delete mode 100644 addressbook/gui/component/select-names/e-select-names.c delete mode 100644 addressbook/gui/component/select-names/e-select-names.h delete mode 100644 addressbook/gui/component/select-names/evolution-addressbook-select-names.oafinfo delete mode 100644 addressbook/gui/component/select-names/recipient.glade delete mode 100644 addressbook/gui/component/select-names/select-names.glade delete mode 100644 addressbook/gui/component/select-names/select-names.glade.h delete mode 100644 addressbook/gui/contact-editor/.cvsignore delete mode 100644 addressbook/gui/contact-editor/Makefile.am delete mode 100644 addressbook/gui/contact-editor/arrow.png delete mode 100644 addressbook/gui/contact-editor/briefcase.png delete mode 100644 addressbook/gui/contact-editor/categories-strings.h delete mode 100644 addressbook/gui/contact-editor/categories.glade delete mode 100644 addressbook/gui/contact-editor/contact-editor.glade delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-categories.c delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-categories.h delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade.h delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-fullname.c delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-fullname.h delete mode 100644 addressbook/gui/contact-editor/e-contact-editor-strings.h delete mode 100644 addressbook/gui/contact-editor/e-contact-editor.c delete mode 100644 addressbook/gui/contact-editor/e-contact-editor.h delete mode 100644 addressbook/gui/contact-editor/e-contact-save-as.c delete mode 100644 addressbook/gui/contact-editor/e-contact-save-as.h delete mode 100644 addressbook/gui/contact-editor/email.png delete mode 100644 addressbook/gui/contact-editor/fullname-strings.h delete mode 100644 addressbook/gui/contact-editor/fullname.glade delete mode 100644 addressbook/gui/contact-editor/head.png delete mode 100644 addressbook/gui/contact-editor/netfreebusy.png delete mode 100644 addressbook/gui/contact-editor/netmeeting.png delete mode 100644 addressbook/gui/contact-editor/phone.png delete mode 100644 addressbook/gui/contact-editor/snailmail.png delete mode 100644 addressbook/gui/contact-editor/test-editor.c delete mode 100644 addressbook/gui/contact-editor/web.png delete mode 100644 addressbook/gui/minicard/.cvsignore delete mode 100644 addressbook/gui/minicard/Makefile.am delete mode 100644 addressbook/gui/minicard/e-minicard-control.c delete mode 100644 addressbook/gui/minicard/e-minicard-control.gnorba delete mode 100644 addressbook/gui/minicard/e-minicard-control.h delete mode 100644 addressbook/gui/minicard/e-minicard-label.c delete mode 100644 addressbook/gui/minicard/e-minicard-label.h delete mode 100644 addressbook/gui/minicard/e-minicard-view-widget.c delete mode 100644 addressbook/gui/minicard/e-minicard-view-widget.h delete mode 100644 addressbook/gui/minicard/e-minicard-view.c delete mode 100644 addressbook/gui/minicard/e-minicard-view.h delete mode 100644 addressbook/gui/minicard/e-minicard-widget-test.c delete mode 100644 addressbook/gui/minicard/e-minicard-widget.c delete mode 100644 addressbook/gui/minicard/e-minicard-widget.h delete mode 100644 addressbook/gui/minicard/e-minicard.c delete mode 100644 addressbook/gui/minicard/e-minicard.h delete mode 100644 addressbook/gui/minicard/e-reflow-sorted.c delete mode 100644 addressbook/gui/minicard/e-reflow-sorted.h delete mode 100644 addressbook/gui/minicard/e-reflow.c delete mode 100644 addressbook/gui/minicard/e-reflow.h delete mode 100644 addressbook/gui/minicard/test-minicard-label.c delete mode 100644 addressbook/gui/minicard/test-minicard-view.c delete mode 100644 addressbook/gui/minicard/test-minicard.c delete mode 100644 addressbook/gui/minicard/test-reflow.c delete mode 100644 addressbook/gui/search/.cvsignore delete mode 100644 addressbook/gui/search/Makefile.am delete mode 100644 addressbook/gui/search/addresstypes.xml delete mode 100644 addressbook/gui/search/e-addressbook-search-dialog.c delete mode 100644 addressbook/gui/search/e-addressbook-search-dialog.h delete mode 100644 addressbook/gui/widgets/Makefile.am delete mode 100644 addressbook/gui/widgets/alphabet.glade delete mode 100644 addressbook/gui/widgets/alphabet.glade.h delete mode 100644 addressbook/gui/widgets/e-addressbook-model.c delete mode 100644 addressbook/gui/widgets/e-addressbook-model.h delete mode 100644 addressbook/gui/widgets/e-minicard-control.c delete mode 100644 addressbook/gui/widgets/e-minicard-control.h delete mode 100644 addressbook/gui/widgets/e-minicard-label.c delete mode 100644 addressbook/gui/widgets/e-minicard-label.h delete mode 100644 addressbook/gui/widgets/e-minicard-view-widget.c delete mode 100644 addressbook/gui/widgets/e-minicard-view-widget.h delete mode 100644 addressbook/gui/widgets/e-minicard-view.c delete mode 100644 addressbook/gui/widgets/e-minicard-view.h delete mode 100644 addressbook/gui/widgets/e-minicard-widget-test.c delete mode 100644 addressbook/gui/widgets/e-minicard-widget.c delete mode 100644 addressbook/gui/widgets/e-minicard-widget.h delete mode 100644 addressbook/gui/widgets/e-minicard.c delete mode 100644 addressbook/gui/widgets/e-minicard.h delete mode 100644 addressbook/gui/widgets/test-minicard-label.c delete mode 100644 addressbook/gui/widgets/test-minicard-view.c delete mode 100644 addressbook/gui/widgets/test-minicard.c delete mode 100644 addressbook/gui/widgets/test-reflow.c delete mode 100644 addressbook/printing/.cvsignore delete mode 100644 addressbook/printing/Makefile.am delete mode 100644 addressbook/printing/e-contact-print-style-editor.c delete mode 100644 addressbook/printing/e-contact-print-style-editor.h delete mode 100644 addressbook/printing/e-contact-print-types.h delete mode 100644 addressbook/printing/e-contact-print.c delete mode 100644 addressbook/printing/e-contact-print.glade delete mode 100644 addressbook/printing/e-contact-print.glade.h delete mode 100644 addressbook/printing/e-contact-print.h delete mode 100644 addressbook/printing/medbook.ecps delete mode 100644 addressbook/printing/phonelist.ecps delete mode 100644 addressbook/printing/smallbook.ecps delete mode 100644 addressbook/printing/test-contact-print-style-editor.c delete mode 100644 addressbook/printing/test-print.c delete mode 100644 announcement-0.4.1.txt delete mode 100644 art/.cvsignore delete mode 100644 art/Makefile.am delete mode 100644 art/attachment.xpm delete mode 100644 art/briefcase.png delete mode 100644 art/cellphone.png delete mode 100644 art/empty.xpm delete mode 100644 art/envelope.png delete mode 100644 art/evolution-calendar-mini.png delete mode 100644 art/evolution-calendar.png delete mode 100644 art/evolution-contacts-mini.png delete mode 100644 art/evolution-contacts.png delete mode 100644 art/evolution-inbox-mini.png delete mode 100644 art/evolution-inbox.png delete mode 100644 art/evolution-notes-mini.png delete mode 100644 art/evolution-notes.png delete mode 100644 art/evolution-tasks-mini.png delete mode 100644 art/evolution-tasks.png delete mode 100644 art/evolution-today.png delete mode 100644 art/globe.png delete mode 100644 art/house.png delete mode 100644 art/mail-new.xpm delete mode 100644 art/mail-read.xpm delete mode 100644 art/mail-replied.xpm delete mode 100644 art/malehead.png delete mode 100644 art/mark.xpm delete mode 100644 art/meeting.xpm delete mode 100644 art/priority-high.xpm delete mode 100644 art/priority-low.xpm delete mode 100644 art/tree-expanded.xpm delete mode 100644 art/tree-unexpanded.xpm delete mode 100755 autogen.sh delete mode 100644 calendar/.cvsignore delete mode 100644 calendar/AUTHORS delete mode 100644 calendar/ChangeLog delete mode 100644 calendar/Makefile.am delete mode 100644 calendar/TODO delete mode 100644 calendar/cal-client/.cvsignore delete mode 100644 calendar/cal-client/Makefile.am delete mode 100644 calendar/cal-client/cal-client.c delete mode 100644 calendar/cal-client/cal-client.h delete mode 100644 calendar/cal-client/cal-listener.c delete mode 100644 calendar/cal-client/cal-listener.h delete mode 100644 calendar/cal-client/client-test.c delete mode 100644 calendar/cal-client/test.ics delete mode 100644 calendar/cal-util/.cvsignore delete mode 100644 calendar/cal-util/Makefile.am delete mode 100644 calendar/cal-util/cal-component.c delete mode 100644 calendar/cal-util/cal-component.h delete mode 100644 calendar/cal-util/cal-recur.c delete mode 100644 calendar/cal-util/cal-recur.h delete mode 100644 calendar/cal-util/cal-util.c delete mode 100644 calendar/cal-util/cal-util.h delete mode 100644 calendar/cal-util/calobj.c delete mode 100644 calendar/cal-util/calobj.h delete mode 100644 calendar/cal-util/icalendar-save.c delete mode 100644 calendar/cal-util/icalendar-save.h delete mode 100644 calendar/cal-util/icalendar-test.c delete mode 100644 calendar/cal-util/icalendar.c delete mode 100644 calendar/cal-util/icalendar.h delete mode 100644 calendar/cal-util/test-recur.c delete mode 100644 calendar/cal-util/timeutil.c delete mode 100644 calendar/cal-util/timeutil.h delete mode 100644 calendar/conduits/.cvsignore delete mode 100644 calendar/conduits/Makefile.am delete mode 100644 calendar/conduits/calendar/.cvsignore delete mode 100644 calendar/conduits/calendar/Makefile.am delete mode 100644 calendar/conduits/calendar/calendar-conduit-control-applet.c delete mode 100644 calendar/conduits/calendar/calendar-conduit-control-applet.desktop delete mode 100644 calendar/conduits/calendar/calendar-conduit.c delete mode 100644 calendar/conduits/calendar/calendar-conduit.h delete mode 100644 calendar/conduits/calendar/calendar.conduit.in delete mode 100644 calendar/conduits/todo/.cvsignore delete mode 100644 calendar/conduits/todo/Makefile.am delete mode 100644 calendar/conduits/todo/todo-conduit-control-applet.c delete mode 100644 calendar/conduits/todo/todo-conduit-control-applet.desktop delete mode 100644 calendar/conduits/todo/todo-conduit.c delete mode 100644 calendar/conduits/todo/todo-conduit.h delete mode 100644 calendar/conduits/todo/todo.conduit.in delete mode 100644 calendar/gui/.cvsignore delete mode 100644 calendar/gui/GNOME_Evolution_Calendar.oaf.in delete mode 100644 calendar/gui/GNOME_Evolution_Calendar.oafinfo delete mode 100644 calendar/gui/GNOME_Evolution_Calendar_Control.oaf.in delete mode 100644 calendar/gui/GNOME_Evolution_Calendar_Control.oafinfo delete mode 100644 calendar/gui/GNOME_Evolution_Calendar_gnomecal.oaf.in delete mode 100644 calendar/gui/GNOME_Evolution_Calendar_gnomecal.oafinfo delete mode 100644 calendar/gui/Makefile.am delete mode 100644 calendar/gui/alarm-notify/alarm-notify-dialog.c delete mode 100644 calendar/gui/alarm-notify/alarm-notify-dialog.h delete mode 100644 calendar/gui/alarm-notify/alarm-notify.glade delete mode 100644 calendar/gui/alarm-notify/alarm.c delete mode 100644 calendar/gui/alarm-notify/alarm.h delete mode 100644 calendar/gui/alarm.c delete mode 100644 calendar/gui/alarm.h delete mode 100644 calendar/gui/bell.xpm delete mode 100644 calendar/gui/calendar-commands.c delete mode 100644 calendar/gui/calendar-commands.h delete mode 100644 calendar/gui/calendar-component.c delete mode 100644 calendar/gui/calendar-component.h delete mode 100644 calendar/gui/calendar-control.gnorba delete mode 100644 calendar/gui/calendar-control.oafinfo delete mode 100644 calendar/gui/calendar-model.c delete mode 100644 calendar/gui/calendar-model.h delete mode 100644 calendar/gui/component-factory.c delete mode 100644 calendar/gui/component-factory.h delete mode 100644 calendar/gui/control-factory.c delete mode 100644 calendar/gui/control-factory.h delete mode 100644 calendar/gui/dayview.xpm delete mode 100644 calendar/gui/dialogs/.cvsignore delete mode 100644 calendar/gui/dialogs/Makefile.am delete mode 100644 calendar/gui/dialogs/alarm-notify-dialog.c delete mode 100644 calendar/gui/dialogs/alarm-notify-dialog.h delete mode 100644 calendar/gui/dialogs/alarm-notify.glade delete mode 100644 calendar/gui/dialogs/alarm-notify.glade.h delete mode 100644 calendar/gui/dialogs/task-editor-dialog.glade delete mode 100644 calendar/gui/dialogs/task-editor-dialog.glade.h delete mode 100644 calendar/gui/dialogs/task-editor.c delete mode 100644 calendar/gui/dialogs/task-editor.h delete mode 100644 calendar/gui/dialogs/task-page.glade delete mode 100644 calendar/gui/e-calendar-table.c delete mode 100644 calendar/gui/e-calendar-table.h delete mode 100644 calendar/gui/e-day-view-main-item.c delete mode 100644 calendar/gui/e-day-view-main-item.h delete mode 100644 calendar/gui/e-day-view-time-item.c delete mode 100644 calendar/gui/e-day-view-time-item.h delete mode 100644 calendar/gui/e-day-view-top-item.c delete mode 100644 calendar/gui/e-day-view-top-item.h delete mode 100644 calendar/gui/e-day-view.c delete mode 100644 calendar/gui/e-day-view.h delete mode 100644 calendar/gui/e-week-view-event-item.c delete mode 100644 calendar/gui/e-week-view-event-item.h delete mode 100644 calendar/gui/e-week-view-main-item.c delete mode 100644 calendar/gui/e-week-view-main-item.h delete mode 100644 calendar/gui/e-week-view-titles-item.c delete mode 100644 calendar/gui/e-week-view-titles-item.h delete mode 100644 calendar/gui/e-week-view.c delete mode 100644 calendar/gui/e-week-view.h delete mode 100644 calendar/gui/event-editor-dialog.glade delete mode 100644 calendar/gui/event-editor-dialog.glade.h delete mode 100644 calendar/gui/event-editor.c delete mode 100644 calendar/gui/event-editor.h delete mode 100644 calendar/gui/evolution-calendar-control.c delete mode 100644 calendar/gui/evolution-calendar.gnorba delete mode 100644 calendar/gui/evolution-calendar.oafinfo delete mode 100644 calendar/gui/getdate.y delete mode 100644 calendar/gui/gncal-todo.c delete mode 100644 calendar/gui/gncal-todo.h delete mode 100644 calendar/gui/gnome-cal.c delete mode 100644 calendar/gui/gnome-cal.h delete mode 100644 calendar/gui/gnome-cal.html delete mode 100644 calendar/gui/gnome-calendar-conduit.png delete mode 100644 calendar/gui/gnome-month-item.c delete mode 100644 calendar/gui/gnome-month-item.h delete mode 100644 calendar/gui/gnomecal.gnorba delete mode 100644 calendar/gui/gnomecal.oafinfo delete mode 100644 calendar/gui/goto.c delete mode 100644 calendar/gui/jump.xpm delete mode 100644 calendar/gui/main.c delete mode 100644 calendar/gui/mark.c delete mode 100644 calendar/gui/mark.h delete mode 100644 calendar/gui/monthview.xpm delete mode 100644 calendar/gui/popup-menu.c delete mode 100644 calendar/gui/popup-menu.h delete mode 100644 calendar/gui/print.c delete mode 100644 calendar/gui/print.h delete mode 100644 calendar/gui/prop.c delete mode 100644 calendar/gui/recur.xpm delete mode 100644 calendar/gui/task-assigned-to.xpm delete mode 100644 calendar/gui/task-assigned.xpm delete mode 100644 calendar/gui/task-recurring.xpm delete mode 100644 calendar/gui/task.xpm delete mode 100644 calendar/gui/test.vcf delete mode 100644 calendar/gui/test2.vcf delete mode 100644 calendar/gui/topic.dat delete mode 100644 calendar/gui/weekview.xpm delete mode 100644 calendar/gui/workweekview.xpm delete mode 100644 calendar/gui/yearview.xpm delete mode 100644 calendar/idl/.cvsignore delete mode 100644 calendar/idl/Makefile.am delete mode 100644 calendar/idl/evolution-calendar.idl delete mode 100644 calendar/pcs/.cvsignore delete mode 100644 calendar/pcs/Makefile.am delete mode 100644 calendar/pcs/cal-backend-file.c delete mode 100644 calendar/pcs/cal-backend-file.h delete mode 100644 calendar/pcs/cal-backend-imc.c delete mode 100644 calendar/pcs/cal-backend-imc.h delete mode 100644 calendar/pcs/cal-backend.c delete mode 100644 calendar/pcs/cal-backend.h delete mode 100644 calendar/pcs/cal-common.h delete mode 100644 calendar/pcs/cal-factory.c delete mode 100644 calendar/pcs/cal-factory.h delete mode 100644 calendar/pcs/cal.c delete mode 100644 calendar/pcs/cal.h delete mode 100644 calendar/pcs/job.c delete mode 100644 calendar/pcs/job.h delete mode 100644 camel/.cvsignore delete mode 100644 camel/CODING.STYLE delete mode 100644 camel/ChangeLog delete mode 100644 camel/Makefile.am delete mode 100644 camel/README delete mode 100644 camel/README.COPYRIGHT delete mode 100644 camel/README.HACKING delete mode 100644 camel/broken-date-parser.c delete mode 100644 camel/broken-date-parser.h delete mode 100644 camel/camel-address.c delete mode 100644 camel/camel-address.h delete mode 100644 camel/camel-data-wrapper.c delete mode 100644 camel/camel-data-wrapper.h delete mode 100644 camel/camel-exception-list.def delete mode 100644 camel/camel-exception.c delete mode 100644 camel/camel-exception.h delete mode 100644 camel/camel-folder-search.c delete mode 100644 camel/camel-folder-search.h delete mode 100644 camel/camel-folder-summary.c delete mode 100644 camel/camel-folder-summary.h delete mode 100644 camel/camel-folder.c delete mode 100644 camel/camel-folder.h delete mode 100644 camel/camel-internet-address.c delete mode 100644 camel/camel-internet-address.h delete mode 100644 camel/camel-medium.c delete mode 100644 camel/camel-medium.h delete mode 100644 camel/camel-mime-filter-basic.c delete mode 100644 camel/camel-mime-filter-basic.h delete mode 100644 camel/camel-mime-filter-charset.c delete mode 100644 camel/camel-mime-filter-charset.h delete mode 100644 camel/camel-mime-filter-crlf.c delete mode 100644 camel/camel-mime-filter-crlf.h delete mode 100644 camel/camel-mime-filter-from.c delete mode 100644 camel/camel-mime-filter-from.h delete mode 100644 camel/camel-mime-filter-index.c delete mode 100644 camel/camel-mime-filter-index.h delete mode 100644 camel/camel-mime-filter-save.c delete mode 100644 camel/camel-mime-filter-save.h delete mode 100644 camel/camel-mime-filter.c delete mode 100644 camel/camel-mime-filter.h delete mode 100644 camel/camel-mime-message.c delete mode 100644 camel/camel-mime-message.h delete mode 100644 camel/camel-mime-parser.c delete mode 100644 camel/camel-mime-parser.h delete mode 100644 camel/camel-mime-part-utils.c delete mode 100644 camel/camel-mime-part-utils.h delete mode 100644 camel/camel-mime-part.c delete mode 100644 camel/camel-mime-part.h delete mode 100644 camel/camel-mime-utils.c delete mode 100644 camel/camel-mime-utils.h delete mode 100644 camel/camel-movemail.c delete mode 100644 camel/camel-movemail.h delete mode 100644 camel/camel-multipart.c delete mode 100644 camel/camel-multipart.h delete mode 100644 camel/camel-news-address.c delete mode 100644 camel/camel-news-address.h delete mode 100644 camel/camel-object.c delete mode 100644 camel/camel-object.h delete mode 100644 camel/camel-op-queue.c delete mode 100644 camel/camel-op-queue.h delete mode 100644 camel/camel-provider.c delete mode 100644 camel/camel-provider.h delete mode 100644 camel/camel-seekable-stream.c delete mode 100644 camel/camel-seekable-stream.h delete mode 100644 camel/camel-seekable-substream.c delete mode 100644 camel/camel-seekable-substream.h delete mode 100644 camel/camel-service.c delete mode 100644 camel/camel-service.h delete mode 100644 camel/camel-session.c delete mode 100644 camel/camel-session.h delete mode 100644 camel/camel-store.c delete mode 100644 camel/camel-store.h delete mode 100644 camel/camel-stream-buffer.c delete mode 100644 camel/camel-stream-buffer.h delete mode 100644 camel/camel-stream-filter.c delete mode 100644 camel/camel-stream-filter.h delete mode 100644 camel/camel-stream-fs.c delete mode 100644 camel/camel-stream-fs.h delete mode 100644 camel/camel-stream-mem.c delete mode 100644 camel/camel-stream-mem.h delete mode 100644 camel/camel-stream.c delete mode 100644 camel/camel-stream.h delete mode 100644 camel/camel-thread-proxy.c delete mode 100644 camel/camel-thread-proxy.h delete mode 100644 camel/camel-transport.c delete mode 100644 camel/camel-transport.h delete mode 100644 camel/camel-types.h delete mode 100644 camel/camel-uid-cache.c delete mode 100644 camel/camel-uid-cache.h delete mode 100644 camel/camel-url.c delete mode 100644 camel/camel-url.h delete mode 100644 camel/camel.c delete mode 100644 camel/camel.h delete mode 100644 camel/devel-docs/camel_data_wrapper.dia delete mode 100644 camel/devel-docs/camel_parser_states.dia delete mode 100644 camel/devel-docs/camel_stream.dia delete mode 100644 camel/gmime-content-field.c delete mode 100644 camel/gmime-content-field.h delete mode 100644 camel/gstring-util.c delete mode 100644 camel/gstring-util.h delete mode 100644 camel/hash-table-utils.c delete mode 100644 camel/hash-table-utils.h delete mode 100644 camel/md5-utils.c delete mode 100644 camel/md5-utils.h delete mode 100644 camel/providers/.cvsignore delete mode 100644 camel/providers/Makefile.am delete mode 100644 camel/providers/imap/.cvsignore delete mode 100644 camel/providers/imap/Makefile.am delete mode 100644 camel/providers/imap/camel-imap-folder.c delete mode 100644 camel/providers/imap/camel-imap-folder.h delete mode 100644 camel/providers/imap/camel-imap-provider.c delete mode 100644 camel/providers/imap/camel-imap-store.c delete mode 100644 camel/providers/imap/camel-imap-store.h delete mode 100644 camel/providers/imap/camel-imap-stream.c delete mode 100644 camel/providers/imap/camel-imap-stream.h delete mode 100644 camel/providers/imap/camel-imap-utils.c delete mode 100644 camel/providers/imap/camel-imap-utils.h delete mode 100644 camel/providers/imap/libcamelimap.urls delete mode 100644 camel/providers/maildir/.cvsignore delete mode 100644 camel/providers/maildir/Makefile.am delete mode 100644 camel/providers/maildir/camel-maildir-folder.c delete mode 100644 camel/providers/maildir/camel-maildir-folder.h delete mode 100644 camel/providers/maildir/camel-maildir-provider.c delete mode 100644 camel/providers/maildir/camel-maildir-store.c delete mode 100644 camel/providers/maildir/camel-maildir-store.h delete mode 100644 camel/providers/mbox/.cvsignore delete mode 100644 camel/providers/mbox/Makefile.am delete mode 100644 camel/providers/mbox/camel-mbox-folder.c delete mode 100644 camel/providers/mbox/camel-mbox-folder.h delete mode 100644 camel/providers/mbox/camel-mbox-provider.c delete mode 100644 camel/providers/mbox/camel-mbox-store.c delete mode 100644 camel/providers/mbox/camel-mbox-store.h delete mode 100644 camel/providers/mbox/camel-mbox-summary.c delete mode 100644 camel/providers/mbox/camel-mbox-summary.h delete mode 100644 camel/providers/mbox/libcamelmbox.urls delete mode 100644 camel/providers/mh/.cvsignore delete mode 100644 camel/providers/mh/Makefile.am delete mode 100644 camel/providers/mh/camel-mh-folder.c delete mode 100644 camel/providers/mh/camel-mh-folder.h delete mode 100644 camel/providers/mh/camel-mh-provider.c delete mode 100644 camel/providers/mh/camel-mh-store.c delete mode 100644 camel/providers/mh/camel-mh-store.h delete mode 100644 camel/providers/mh/camel-mh-summary.c delete mode 100644 camel/providers/mh/camel-mh-summary.h delete mode 100644 camel/providers/mh/libcamelmh.urls delete mode 100644 camel/providers/nntp/.cvsignore delete mode 100644 camel/providers/nntp/Makefile.am delete mode 100644 camel/providers/nntp/camel-nntp-folder.c delete mode 100644 camel/providers/nntp/camel-nntp-folder.h delete mode 100644 camel/providers/nntp/camel-nntp-newsrc.c delete mode 100644 camel/providers/nntp/camel-nntp-newsrc.h delete mode 100644 camel/providers/nntp/camel-nntp-provider.c delete mode 100644 camel/providers/nntp/camel-nntp-store.c delete mode 100644 camel/providers/nntp/camel-nntp-store.h delete mode 100644 camel/providers/nntp/camel-nntp-utils.c delete mode 100644 camel/providers/nntp/camel-nntp-utils.h delete mode 100644 camel/providers/nntp/libcamelnntp.urls delete mode 100644 camel/providers/nntp/test-newsrc.c delete mode 100644 camel/providers/pop3/.cvsignore delete mode 100644 camel/providers/pop3/Makefile.am delete mode 100644 camel/providers/pop3/camel-pop3-folder.c delete mode 100644 camel/providers/pop3/camel-pop3-folder.h delete mode 100644 camel/providers/pop3/camel-pop3-provider.c delete mode 100644 camel/providers/pop3/camel-pop3-store.c delete mode 100644 camel/providers/pop3/camel-pop3-store.h delete mode 100644 camel/providers/pop3/libcamelpop3.urls delete mode 100644 camel/providers/sendmail/.cvsignore delete mode 100644 camel/providers/sendmail/Makefile.am delete mode 100644 camel/providers/sendmail/camel-sendmail-provider.c delete mode 100644 camel/providers/sendmail/camel-sendmail-transport.c delete mode 100644 camel/providers/sendmail/camel-sendmail-transport.h delete mode 100644 camel/providers/sendmail/libcamelsendmail.urls delete mode 100644 camel/providers/smtp/.cvsignore delete mode 100644 camel/providers/smtp/Makefile.am delete mode 100644 camel/providers/smtp/camel-smtp-provider.c delete mode 100644 camel/providers/smtp/camel-smtp-transport.c delete mode 100644 camel/providers/smtp/camel-smtp-transport.h delete mode 100644 camel/providers/smtp/libcamelsmtp.urls delete mode 100644 camel/providers/vee/.cvsignore delete mode 100644 camel/providers/vee/Makefile.am delete mode 100644 camel/providers/vee/camel-vee-folder.c delete mode 100644 camel/providers/vee/camel-vee-folder.h delete mode 100644 camel/providers/vee/camel-vee-provider.c delete mode 100644 camel/providers/vee/camel-vee-store.c delete mode 100644 camel/providers/vee/camel-vee-store.h delete mode 100644 camel/providers/vee/libcamelvee.urls delete mode 100644 camel/string-utils.c delete mode 100644 camel/string-utils.h delete mode 100644 composer/.cvsignore delete mode 100644 composer/ChangeLog delete mode 100644 composer/Makefile.am delete mode 100644 composer/e-msg-composer-address-dialog.c delete mode 100644 composer/e-msg-composer-address-dialog.glade delete mode 100644 composer/e-msg-composer-address-dialog.glade.h delete mode 100644 composer/e-msg-composer-address-dialog.h delete mode 100644 composer/e-msg-composer-address-entry.c delete mode 100644 composer/e-msg-composer-address-entry.h delete mode 100644 composer/e-msg-composer-attachment-bar.c delete mode 100644 composer/e-msg-composer-attachment-bar.h delete mode 100644 composer/e-msg-composer-attachment.c delete mode 100644 composer/e-msg-composer-attachment.glade delete mode 100644 composer/e-msg-composer-attachment.glade.h delete mode 100644 composer/e-msg-composer-attachment.h delete mode 100644 composer/e-msg-composer-hdrs.c delete mode 100644 composer/e-msg-composer-hdrs.h delete mode 100644 composer/e-msg-composer-select-file.c delete mode 100644 composer/e-msg-composer-select-file.h delete mode 100644 composer/e-msg-composer.c delete mode 100644 composer/e-msg-composer.h delete mode 100644 composer/main.c delete mode 100644 configure.in delete mode 100644 data/.cvsignore delete mode 100644 data/Makefile.am delete mode 100644 data/evolution.desktop delete mode 100644 data/evolution.keys delete mode 100644 default_user/.cvsignore delete mode 100644 default_user/ChangeLog delete mode 100644 default_user/Makefile.am delete mode 100644 default_user/ldapservers.xml delete mode 100644 default_user/local/.cvsignore delete mode 100644 default_user/local/Calendar/.cvsignore delete mode 100644 default_user/local/Calendar/Makefile.am delete mode 100644 default_user/local/Calendar/folder-metadata.xml delete mode 100644 default_user/local/Contacts/.cvsignore delete mode 100644 default_user/local/Contacts/Makefile.am delete mode 100644 default_user/local/Contacts/folder-metadata.xml delete mode 100644 default_user/local/Drafts/.cvsignore delete mode 100644 default_user/local/Drafts/Makefile.am delete mode 100644 default_user/local/Drafts/folder-metadata.xml delete mode 100644 default_user/local/Inbox/.cvsignore delete mode 100644 default_user/local/Inbox/Makefile.am delete mode 100644 default_user/local/Inbox/folder-metadata.xml delete mode 100644 default_user/local/Inbox/mbox delete mode 100644 default_user/local/Makefile.am delete mode 100644 default_user/local/Outbox/.cvsignore delete mode 100644 default_user/local/Outbox/Makefile.am delete mode 100644 default_user/local/Outbox/folder-metadata.xml delete mode 100644 default_user/local/Trash/.cvsignore delete mode 100644 default_user/local/Trash/Makefile.am delete mode 100644 default_user/local/Trash/folder-metadata.xml delete mode 100644 default_user/shortcuts.xml delete mode 100644 devel-docs/.cvsignore delete mode 100644 devel-docs/Makefile.am delete mode 100644 devel-docs/camel/.cvsignore delete mode 100644 devel-docs/camel/Makefile.am delete mode 100644 devel-docs/camel/README_AND_TODO.txt delete mode 100644 devel-docs/camel/camel-docs.sgml delete mode 100644 devel-docs/camel/camel-sections.txt delete mode 100644 devel-docs/camel/camel.types delete mode 100644 devel-docs/camel/tmpl/.cvsignore delete mode 100644 devel-docs/camel/tmpl/camel-data-wrapper.sgml delete mode 100644 devel-docs/camel/tmpl/camel-folder.sgml delete mode 100644 devel-docs/camel/tmpl/camel-mime-message.sgml delete mode 100644 devel-docs/camel/tmpl/camel-mime-part.sgml delete mode 100644 devel-docs/camel/tmpl/camel-recipient.sgml delete mode 100644 devel-docs/camel/tmpl/camel-service.sgml delete mode 100644 devel-docs/camel/tmpl/camel-store.sgml delete mode 100644 devel-docs/camel/tmpl/camel-stream.sgml delete mode 100644 devel-docs/misc/ref_and_id_proposition.txt delete mode 100644 devel-docs/query/virtual-folder-in-depth.sgml delete mode 100644 devel-docs/query/virtual-folder-in-depth.txt delete mode 100644 doc/.cvsignore delete mode 100644 doc/C/.cvsignore delete mode 100644 doc/C/Makefile.am delete mode 100644 doc/C/apx-authors.sgml delete mode 100644 doc/C/apx-bugs.sgml delete mode 100644 doc/C/apx-fdl.sgml delete mode 100644 doc/C/apx-gloss.sgml delete mode 100644 doc/C/apx-gpl.sgml delete mode 100644 doc/C/config-prefs.sgml delete mode 100644 doc/C/config-setupassist.sgml delete mode 100644 doc/C/config-sync.sgml delete mode 100644 doc/C/evolution-guide.sgml delete mode 100644 doc/C/fig/calendar.png delete mode 100644 doc/C/fig/config-cal.png delete mode 100644 doc/C/fig/config-mail.png delete mode 100644 doc/C/fig/contact.png delete mode 100644 doc/C/fig/filter-new-fig.png delete mode 100644 doc/C/fig/mail-druid-pic.png delete mode 100644 doc/C/fig/mainwindow-pic.png delete mode 100644 doc/C/fig/vfolder-createrule-fig.png delete mode 100644 doc/C/preface.sgml delete mode 100644 doc/C/usage-calendar.sgml delete mode 100644 doc/C/usage-contact.sgml delete mode 100644 doc/C/usage-mail.sgml delete mode 100644 doc/C/usage-mainwindow.sgml delete mode 100644 doc/C/usage-notes.sgml delete mode 100644 doc/C/usage-sync.sgml delete mode 100644 doc/Camel-Classes delete mode 100644 doc/ChangeLog delete mode 100644 doc/Design delete mode 100644 doc/Makefile.am delete mode 100644 doc/devel/.cvsignore delete mode 100644 doc/devel/ChangeLog delete mode 100644 doc/devel/Makefile.am delete mode 100644 doc/devel/calendar/.cvsignore delete mode 100644 doc/devel/calendar/Makefile.am delete mode 100644 doc/devel/calendar/architecture.sgml delete mode 100644 doc/devel/calendar/cal-client/.cvsignore delete mode 100644 doc/devel/calendar/cal-client/Makefile.am delete mode 100644 doc/devel/calendar/cal-client/evolution-cal-client-decl.txt delete mode 100644 doc/devel/calendar/cal-client/evolution-cal-client-sections.txt delete mode 100644 doc/devel/calendar/cal-client/evolution-cal-client.args delete mode 100644 doc/devel/calendar/cal-client/evolution-cal-client.hierarchy delete mode 100644 doc/devel/calendar/cal-client/evolution-cal-client.signals delete mode 100644 doc/devel/calendar/cal-client/evolution-cal-client.types delete mode 100644 doc/devel/calendar/cal-client/tmpl/cal-client.sgml delete mode 100644 doc/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml delete mode 100644 doc/devel/calendar/cal-util/.cvsignore delete mode 100644 doc/devel/calendar/cal-util/Makefile.am delete mode 100644 doc/devel/calendar/cal-util/evolution-cal-util-decl.txt delete mode 100644 doc/devel/calendar/cal-util/evolution-cal-util-sections.txt delete mode 100644 doc/devel/calendar/cal-util/evolution-cal-util.args delete mode 100644 doc/devel/calendar/cal-util/evolution-cal-util.hierarchy delete mode 100644 doc/devel/calendar/cal-util/evolution-cal-util.signals delete mode 100644 doc/devel/calendar/cal-util/evolution-cal-util.types delete mode 100644 doc/devel/calendar/cal-util/tmpl/cal-component.sgml delete mode 100644 doc/devel/calendar/cal-util/tmpl/cal-recur.sgml delete mode 100644 doc/devel/calendar/cal-util/tmpl/cal-util.sgml delete mode 100644 doc/devel/calendar/cal-util/tmpl/evolution-cal-util-unused.sgml delete mode 100644 doc/devel/calendar/cal-util/tmpl/timeutil.sgml delete mode 100644 doc/devel/calendar/evolution-calendar.sgml delete mode 100644 doc/devel/calendar/public-reference.sgml delete mode 100644 doc/devel/calendar/reference.sgml delete mode 100644 doc/devel/evolution-devel-guide.sgml delete mode 100644 doc/white-papers/calendar/calendar.sgml delete mode 100644 doc/white-papers/mail/camel.sgml delete mode 100644 doc/white-papers/mail/ibex.sgml delete mode 100644 doc/white-papers/widgets/e-table.sgml delete mode 100644 e-util/.cvsignore delete mode 100644 e-util/ChangeLog delete mode 100644 e-util/Makefile.am delete mode 100644 e-util/e-canvas-utils.c delete mode 100644 e-util/e-canvas-utils.h delete mode 100644 e-util/e-canvas-vbox.c delete mode 100644 e-util/e-canvas-vbox.h delete mode 100644 e-util/e-canvas.c delete mode 100644 e-util/e-canvas.h delete mode 100644 e-util/e-cursors.c delete mode 100644 e-util/e-cursors.h delete mode 100644 e-util/e-dialog-widgets.c delete mode 100644 e-util/e-dialog-widgets.h delete mode 100644 e-util/e-font.c delete mode 100644 e-util/e-font.h delete mode 100644 e-util/e-gui-utils.c delete mode 100644 e-util/e-gui-utils.h delete mode 100644 e-util/e-html-utils.c delete mode 100644 e-util/e-html-utils.h delete mode 100644 e-util/e-iterator.c delete mode 100644 e-util/e-iterator.h delete mode 100644 e-util/e-list-iterator.c delete mode 100644 e-util/e-list-iterator.h delete mode 100644 e-util/e-list.c delete mode 100644 e-util/e-list.h delete mode 100644 e-util/e-popup-menu.c delete mode 100644 e-util/e-popup-menu.h delete mode 100644 e-util/e-printable.c delete mode 100644 e-util/e-printable.h delete mode 100644 e-util/e-sexp.c delete mode 100644 e-util/e-sexp.h delete mode 100644 e-util/e-text-event-processor-emacs-like.c delete mode 100644 e-util/e-text-event-processor-emacs-like.h delete mode 100644 e-util/e-text-event-processor-types.h delete mode 100644 e-util/e-text-event-processor.c delete mode 100644 e-util/e-text-event-processor.h delete mode 100644 e-util/e-util.c delete mode 100644 e-util/e-util.c-8611 delete mode 100644 e-util/e-util.h delete mode 100644 e-util/e-util.h-29002 delete mode 100644 e-util/e-xml-utils.c delete mode 100644 e-util/e-xml-utils.c-56826 delete mode 100644 e-util/e-xml-utils.h delete mode 100644 e-util/e-xml-utils.h-82548 delete mode 100644 e-util/ename/.cvsignore delete mode 100644 e-util/ename/Makefile.am delete mode 100644 e-util/ename/TODO delete mode 100644 e-util/ename/e-name-western-tables.h delete mode 100644 e-util/ename/e-name-western.c delete mode 100644 e-util/ename/e-name-western.h delete mode 100644 e-util/ename/test-ename-western-gtk.c delete mode 100644 e-util/ename/test-ename-western.c delete mode 100644 evolution.desktop delete mode 100644 evolution.png delete mode 100644 evolution.spec.in delete mode 100644 filter/.cvsignore delete mode 100644 filter/ChangeLog delete mode 100644 filter/Makefile.am delete mode 100644 filter/filter-code.c delete mode 100644 filter/filter-code.h delete mode 100644 filter/filter-colour.c delete mode 100644 filter/filter-colour.h delete mode 100644 filter/filter-context.c delete mode 100644 filter/filter-context.h delete mode 100644 filter/filter-datespec.c delete mode 100644 filter/filter-datespec.h delete mode 100644 filter/filter-driver.c delete mode 100644 filter/filter-driver.h delete mode 100644 filter/filter-editor.c delete mode 100644 filter/filter-editor.h delete mode 100644 filter/filter-element.c delete mode 100644 filter/filter-element.h delete mode 100644 filter/filter-filter.c delete mode 100644 filter/filter-filter.h delete mode 100644 filter/filter-folder.c delete mode 100644 filter/filter-folder.h delete mode 100644 filter/filter-input.c delete mode 100644 filter/filter-input.h delete mode 100644 filter/filter-option.c delete mode 100644 filter/filter-option.h delete mode 100644 filter/filter-part.c delete mode 100644 filter/filter-part.h delete mode 100644 filter/filter-rule.c delete mode 100644 filter/filter-rule.h delete mode 100644 filter/filter.glade delete mode 100644 filter/filtertypes.xml delete mode 100644 filter/rule-context.c delete mode 100644 filter/rule-context.h delete mode 100644 filter/score-context.c delete mode 100644 filter/score-context.h delete mode 100644 filter/score-editor.c delete mode 100644 filter/score-editor.h delete mode 100644 filter/score-rule.c delete mode 100644 filter/score-rule.h delete mode 100644 filter/vfolder-context.c delete mode 100644 filter/vfolder-context.h delete mode 100644 filter/vfolder-editor.c delete mode 100644 filter/vfolder-editor.h delete mode 100644 filter/vfolder-rule.c delete mode 100644 filter/vfolder-rule.h delete mode 100644 filter/vfoldertypes.xml delete mode 100644 help/.cvsignore delete mode 100644 help/C/.cvsignore delete mode 100644 help/C/Makefile.am delete mode 100644 help/C/apx-authors.sgml delete mode 100644 help/C/apx-bugs.sgml delete mode 100644 help/C/apx-fdl.sgml delete mode 100644 help/C/apx-gloss.sgml delete mode 100644 help/C/apx-gpl.sgml delete mode 100644 help/C/config-prefs.sgml delete mode 100644 help/C/config-setupassist.sgml delete mode 100644 help/C/config-sync.sgml delete mode 100644 help/C/evolution-guide.sgml delete mode 100644 help/C/fig/calendar.png delete mode 100644 help/C/fig/config-cal.png delete mode 100644 help/C/fig/config-mail.png delete mode 100644 help/C/fig/contact.png delete mode 100644 help/C/fig/filter-new-fig.png delete mode 100644 help/C/fig/mail-druid-pic.png delete mode 100644 help/C/fig/mainwindow-pic.png delete mode 100644 help/C/fig/vfolder-createrule-fig.png delete mode 100644 help/C/preface.sgml delete mode 100644 help/C/usage-calendar.sgml delete mode 100644 help/C/usage-contact.sgml delete mode 100644 help/C/usage-mail.sgml delete mode 100644 help/C/usage-mainwindow.sgml delete mode 100644 help/C/usage-notes.sgml delete mode 100644 help/C/usage-sync.sgml delete mode 100644 help/Camel-Classes delete mode 100644 help/ChangeLog delete mode 100644 help/Design delete mode 100644 help/Makefile.am delete mode 100644 help/devel/.cvsignore delete mode 100644 help/devel/ChangeLog delete mode 100644 help/devel/Makefile.am delete mode 100644 help/devel/calendar/.cvsignore delete mode 100644 help/devel/calendar/Makefile.am delete mode 100644 help/devel/calendar/architecture.sgml delete mode 100644 help/devel/calendar/cal-client/.cvsignore delete mode 100644 help/devel/calendar/cal-client/Makefile.am delete mode 100644 help/devel/calendar/cal-client/evolution-cal-client-decl.txt delete mode 100644 help/devel/calendar/cal-client/evolution-cal-client-sections.txt delete mode 100644 help/devel/calendar/cal-client/evolution-cal-client.args delete mode 100644 help/devel/calendar/cal-client/evolution-cal-client.hierarchy delete mode 100644 help/devel/calendar/cal-client/evolution-cal-client.signals delete mode 100644 help/devel/calendar/cal-client/evolution-cal-client.types delete mode 100644 help/devel/calendar/cal-client/tmpl/cal-client.sgml delete mode 100644 help/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml delete mode 100644 help/devel/calendar/cal-util/.cvsignore delete mode 100644 help/devel/calendar/cal-util/Makefile.am delete mode 100644 help/devel/calendar/cal-util/evolution-cal-util-decl.txt delete mode 100644 help/devel/calendar/cal-util/evolution-cal-util-sections.txt delete mode 100644 help/devel/calendar/cal-util/evolution-cal-util.args delete mode 100644 help/devel/calendar/cal-util/evolution-cal-util.hierarchy delete mode 100644 help/devel/calendar/cal-util/evolution-cal-util.signals delete mode 100644 help/devel/calendar/cal-util/evolution-cal-util.types delete mode 100644 help/devel/calendar/cal-util/tmpl/cal-component.sgml delete mode 100644 help/devel/calendar/cal-util/tmpl/cal-recur.sgml delete mode 100644 help/devel/calendar/cal-util/tmpl/cal-util.sgml delete mode 100644 help/devel/calendar/cal-util/tmpl/evolution-cal-util-unused.sgml delete mode 100644 help/devel/calendar/cal-util/tmpl/timeutil.sgml delete mode 100644 help/devel/calendar/evolution-calendar.sgml delete mode 100644 help/devel/calendar/public-reference.sgml delete mode 100644 help/devel/calendar/reference.sgml delete mode 100644 help/devel/evolution-devel-guide.sgml delete mode 100644 help/white-papers/calendar/calendar.sgml delete mode 100644 help/white-papers/mail/camel.sgml delete mode 100644 help/white-papers/mail/ibex.sgml delete mode 100644 help/white-papers/widgets/e-table.sgml delete mode 100644 libibex/.cvsignore delete mode 100644 libibex/COPYING.LIB delete mode 100644 libibex/ChangeLog delete mode 100644 libibex/Makefile.am delete mode 100644 libibex/TODO delete mode 100644 libibex/file.c delete mode 100644 libibex/find.c delete mode 100644 libibex/ibex.h delete mode 100644 libibex/ibex_internal.h delete mode 100644 libibex/index.c delete mode 100644 libibex/lookup.c delete mode 100644 libibex/mkindex.c delete mode 100644 libibex/words.c delete mode 100644 libical/.cvsignore delete mode 100644 libical/AUTHORS delete mode 100644 libical/CHANGES delete mode 100644 libical/COPYING delete mode 100644 libical/ChangeLog delete mode 100644 libical/INSTALL delete mode 100644 libical/MacOS/errno.h delete mode 100644 libical/MacOS/libical.mcp delete mode 100644 libical/MacOS/libical.mcp.exp delete mode 100644 libical/MacOS/libical_prefix.h delete mode 100644 libical/MacOS/restrictions.make delete mode 100644 libical/MacOS/restrictions.script delete mode 100644 libical/MacOS/strdup.c delete mode 100644 libical/MacOS/strdup.h delete mode 100644 libical/Makefile.am delete mode 100644 libical/NEWS delete mode 100644 libical/README delete mode 100644 libical/TEST delete mode 100644 libical/THANKS delete mode 100644 libical/TODO delete mode 100644 libical/acconfig.h delete mode 100755 libical/autogen.sh delete mode 100644 libical/configure.in delete mode 100644 libical/configure.scan delete mode 100644 libical/design-data/.cvsignore delete mode 100644 libical/design-data/Makefile.am delete mode 100644 libical/design-data/components.txt delete mode 100644 libical/design-data/param-c-types.txt delete mode 100644 libical/design-data/params-in-prop.txt delete mode 100644 libical/design-data/prop-to-value.txt delete mode 100644 libical/design-data/property-tokens.txt delete mode 100644 libical/design-data/restrictions.csv delete mode 100644 libical/design-data/status-new.txt delete mode 100644 libical/design-data/status.foo delete mode 100644 libical/design-data/status.txt delete mode 100644 libical/design-data/value-c-types.txt delete mode 100644 libical/design-data/value-mem-semantics.txt delete mode 100644 libical/doc/.cvsignore delete mode 100644 libical/doc/Makefile.am delete mode 100644 libical/doc/UsingLibical.lyx delete mode 100644 libical/doc/UsingLibical.ps delete mode 100644 libical/doc/UsingLibical.sgml delete mode 100644 libical/doc/UsingLibical.txt delete mode 100755 libical/install-sh delete mode 100755 libical/missing delete mode 100644 libical/mkinstalldirs delete mode 100644 libical/scripts/.cvsignore delete mode 100644 libical/scripts/Makefile.am delete mode 100755 libical/scripts/mkderivedcomponents.pl delete mode 100755 libical/scripts/mkderivedparameters.pl delete mode 100755 libical/scripts/mkderivedproperties.pl delete mode 100755 libical/scripts/mkderivedvalues.pl delete mode 100755 libical/scripts/mkparameterrestrictions.pl delete mode 100755 libical/scripts/mkrestrictionrecords.pl delete mode 100755 libical/scripts/mkrestrictiontable.pl delete mode 100644 libical/src/.cvsignore delete mode 100644 libical/src/Makefile.am delete mode 100644 libical/src/libical/.cvsignore delete mode 100644 libical/src/libical/.gdb_history delete mode 100644 libical/src/libical/.gdbinit delete mode 100644 libical/src/libical/Makefile.am delete mode 100644 libical/src/libical/base64.c delete mode 100644 libical/src/libical/filelock.c delete mode 100644 libical/src/libical/filelock.h delete mode 100644 libical/src/libical/ical.h delete mode 100644 libical/src/libical/icalcomponent.c delete mode 100644 libical/src/libical/icalcomponent.h delete mode 100644 libical/src/libical/icalenums.c delete mode 100644 libical/src/libical/icalenums.h delete mode 100644 libical/src/libical/icalerror.c delete mode 100644 libical/src/libical/icalerror.h delete mode 100644 libical/src/libical/icalirip.h delete mode 100644 libical/src/libical/icalitip.output delete mode 100644 libical/src/libical/icalitip.tab.c delete mode 100644 libical/src/libical/icalitip.tab.h delete mode 100644 libical/src/libical/icalitipl.l delete mode 100644 libical/src/libical/icalitipy.y delete mode 100644 libical/src/libical/icallexer.l delete mode 100644 libical/src/libical/icalmemory.c delete mode 100644 libical/src/libical/icalmemory.h delete mode 100644 libical/src/libical/icalparameter.c delete mode 100644 libical/src/libical/icalparameter.h delete mode 100644 libical/src/libical/icalparser.c delete mode 100644 libical/src/libical/icalparser.h delete mode 100644 libical/src/libical/icalproperty.c delete mode 100644 libical/src/libical/icalproperty.h delete mode 100644 libical/src/libical/icalrestriction.c delete mode 100644 libical/src/libical/icalrestriction.h delete mode 100644 libical/src/libical/icaltypes.c delete mode 100644 libical/src/libical/icaltypes.h delete mode 100644 libical/src/libical/icalvalue.c delete mode 100644 libical/src/libical/icalvalue.h delete mode 100644 libical/src/libical/icalvcal.h delete mode 100644 libical/src/libical/icalversion.h.in delete mode 100644 libical/src/libical/icalyacc.c delete mode 100644 libical/src/libical/icalyacc.y delete mode 100644 libical/src/libical/locking.c delete mode 100644 libical/src/libical/pvl.c delete mode 100644 libical/src/libical/pvl.h delete mode 100644 libical/src/libical/testlocks.c delete mode 100644 libical/src/libicalss/.cvsignore delete mode 100644 libical/src/libicalss/Makefile.am delete mode 100644 libical/src/libicalss/icalcalendar.c delete mode 100644 libical/src/libicalss/icalcalendar.h delete mode 100644 libical/src/libicalss/icalcluster.c delete mode 100644 libical/src/libicalss/icalcluster.h delete mode 100644 libical/src/libicalss/icalcomponent.h delete mode 100644 libical/src/libicalss/icalstore.c delete mode 100644 libical/src/libicalss/icalstore.h delete mode 100644 libical/src/pvl/Makefile delete mode 100644 libical/src/test/.cvsignore delete mode 100644 libical/src/test/Makefile.am delete mode 100644 libical/src/test/Makefile.in delete mode 100644 libical/src/test/alice/booked/199706 delete mode 100644 libical/src/test/alice/booked/199707 delete mode 100644 libical/src/test/alice/booked/199708 delete mode 100644 libical/src/test/alice/booked/199709 delete mode 100644 libical/src/test/alice/booked/199803 delete mode 100644 libical/src/test/alice/incoming.ics delete mode 100644 libical/src/test/copycluster.c delete mode 100644 libical/src/test/findobj.c delete mode 100644 libical/src/test/icaltestparser.c delete mode 100644 libical/src/test/regression.c delete mode 100644 libical/src/test/storage.c delete mode 100644 libical/src/test/stow.c delete mode 100644 libical/src/test/test-component.icd delete mode 100644 libical/src/test/usecases.c delete mode 100644 libical/test-data/.cvsignore delete mode 100644 libical/test-data/0 delete mode 100644 libical/test-data/1 delete mode 100644 libical/test-data/1.1 delete mode 100644 libical/test-data/2 delete mode 100644 libical/test-data/2445.ics delete mode 100644 libical/test-data/2445.vcd delete mode 100644 libical/test-data/2446.ics delete mode 100644 libical/test-data/2446.vcd delete mode 100644 libical/test-data/3 delete mode 100644 libical/test-data/4 delete mode 100644 libical/test-data/5 delete mode 100644 libical/test-data/6 delete mode 100644 libical/test-data/7 delete mode 100644 libical/test-data/Makefile.am delete mode 100644 libical/test-data/smallcluster.ics delete mode 100644 libical/test-data/smallcluster.vcd delete mode 100644 libversit/.cvsignore delete mode 100644 libversit/Makefile.am delete mode 100644 libversit/README.TXT delete mode 100644 libversit/port.h delete mode 100644 libversit/vcaltest.c delete mode 100644 libversit/vcaltmp.c delete mode 100644 libversit/vcaltmp.h delete mode 100644 libversit/vcc.h delete mode 100644 libversit/vcc.y delete mode 100644 libversit/vctest.c delete mode 100644 libversit/vobject.c delete mode 100644 libversit/vobject.h delete mode 100644 mail/.cvsignore delete mode 100644 mail/ChangeLog delete mode 100644 mail/GNOME_Evolution_Mail.oaf.in delete mode 100644 mail/GNOME_Evolution_Mail.oafinfo delete mode 100644 mail/Mail.idl delete mode 100644 mail/Makefile.am delete mode 100644 mail/README.async delete mode 100644 mail/component-factory.c delete mode 100644 mail/component-factory.h delete mode 100644 mail/e-attchmt.png delete mode 100644 mail/evolution-mail.gnorba delete mode 100644 mail/evolution-mail.oafinfo delete mode 100644 mail/folder-browser-factory.c delete mode 100644 mail/folder-browser-factory.h delete mode 100644 mail/folder-browser.c delete mode 100644 mail/folder-browser.h delete mode 100644 mail/local-config.glade delete mode 100644 mail/mail-autofilter.c delete mode 100644 mail/mail-autofilter.h delete mode 100644 mail/mail-callbacks.c delete mode 100644 mail/mail-config-druid.glade delete mode 100644 mail/mail-config-druid.glade.h delete mode 100644 mail/mail-config-gui.c delete mode 100644 mail/mail-config-gui.h delete mode 100644 mail/mail-config.c delete mode 100644 mail/mail-config.glade delete mode 100644 mail/mail-config.glade.h delete mode 100644 mail/mail-config.h delete mode 100644 mail/mail-crypto.c delete mode 100644 mail/mail-display.c delete mode 100644 mail/mail-display.h delete mode 100644 mail/mail-format.c delete mode 100644 mail/mail-identify.c delete mode 100644 mail/mail-local.c delete mode 100644 mail/mail-local.h delete mode 100644 mail/mail-ops.c delete mode 100644 mail/mail-ops.h delete mode 100644 mail/mail-threads.c delete mode 100644 mail/mail-threads.h delete mode 100644 mail/mail-tools.c delete mode 100644 mail/mail-tools.h delete mode 100644 mail/mail-types.h delete mode 100644 mail/mail-vfolder.c delete mode 100644 mail/mail-vfolder.h delete mode 100644 mail/mail-view.c delete mode 100644 mail/mail.h delete mode 100644 mail/main.c delete mode 100644 mail/message-list.c delete mode 100644 mail/message-list.h delete mode 100644 mail/message-thread.c delete mode 100644 mail/message-thread.h delete mode 100644 mail/session.c delete mode 100644 mail/test-mail.c delete mode 100644 mail/test-thread.c delete mode 100644 notes/.cvsignore delete mode 100644 notes/GNOME_Evolution_Notes.oaf.in delete mode 100644 notes/GNOME_Evolution_Notes.oafinfo delete mode 100644 notes/Makefile.am delete mode 100644 notes/component-factory.c delete mode 100644 notes/component-factory.h delete mode 100644 notes/e-bevel-button-util.c delete mode 100644 notes/e-bevel-button-util.h delete mode 100644 notes/e-bevel-button.c delete mode 100644 notes/e-bevel-button.h delete mode 100644 notes/e-note.c delete mode 100644 notes/e-note.h delete mode 100644 notes/evolution-notes.oafinfo delete mode 100644 notes/main.c delete mode 100644 notes/test-notes.c delete mode 100644 po/.cvsignore delete mode 100644 po/ChangeLog delete mode 100644 po/POTFILES.ignore delete mode 100644 po/POTFILES.in delete mode 100644 po/README.tools delete mode 100644 po/da.po delete mode 100644 po/de.po delete mode 100755 po/desk.pl delete mode 100644 po/el.po delete mode 100644 po/es.po delete mode 100644 po/flu-danish delete mode 100644 po/fr.po delete mode 100755 po/ga.po delete mode 100644 po/gl.po delete mode 100644 po/hu.po delete mode 100644 po/it.po delete mode 100644 po/ja.po delete mode 100644 po/ko.po delete mode 100644 po/nl.po delete mode 100644 po/no.po delete mode 100644 po/pl.po delete mode 100644 po/pt.po delete mode 100644 po/pt_BR.po delete mode 100644 po/ru.po delete mode 100644 po/sl.po delete mode 100644 po/sv.po delete mode 100644 po/tr.po delete mode 100644 po/uk.po delete mode 100755 po/update.pl delete mode 100755 po/update.sh delete mode 100644 shell/.cvsignore delete mode 100644 shell/ChangeLog delete mode 100644 shell/Evolution-Session.idl delete mode 100644 shell/Evolution-Shell.idl delete mode 100644 shell/Evolution-ShellComponent.idl delete mode 100644 shell/Evolution-ShellView.idl delete mode 100644 shell/Evolution-Storage.idl delete mode 100644 shell/Evolution.idl delete mode 100644 shell/Makefile.am delete mode 100644 shell/e-component-registry.c delete mode 100644 shell/e-component-registry.h delete mode 100644 shell/e-corba-storage-registry.c delete mode 100644 shell/e-corba-storage-registry.h delete mode 100644 shell/e-corba-storage.c delete mode 100644 shell/e-corba-storage.h delete mode 100644 shell/e-folder-type-registry.c delete mode 100644 shell/e-folder-type-registry.h delete mode 100644 shell/e-folder.c delete mode 100644 shell/e-folder.h delete mode 100644 shell/e-local-folder.c delete mode 100644 shell/e-local-folder.h delete mode 100644 shell/e-local-storage.c delete mode 100644 shell/e-local-storage.h delete mode 100644 shell/e-setup.c delete mode 100644 shell/e-setup.h delete mode 100644 shell/e-shell-constants.h delete mode 100644 shell/e-shell-folder-creation-dialog.c delete mode 100644 shell/e-shell-folder-creation-dialog.h delete mode 100644 shell/e-shell-folder-selection-dialog.c delete mode 100644 shell/e-shell-folder-selection-dialog.h delete mode 100644 shell/e-shell-folder-title-bar.c delete mode 100644 shell/e-shell-folder-title-bar.h delete mode 100644 shell/e-shell-utils.c delete mode 100644 shell/e-shell-utils.h delete mode 100644 shell/e-shell-view-menu.c delete mode 100644 shell/e-shell-view-menu.h delete mode 100644 shell/e-shell-view.c delete mode 100644 shell/e-shell-view.h delete mode 100644 shell/e-shell.c delete mode 100644 shell/e-shell.h delete mode 100644 shell/e-shortcuts-view.c delete mode 100644 shell/e-shortcuts-view.h delete mode 100644 shell/e-shortcuts.c delete mode 100644 shell/e-shortcuts.h delete mode 100644 shell/e-storage-set-view.c delete mode 100644 shell/e-storage-set-view.h delete mode 100644 shell/e-storage-set.c delete mode 100644 shell/e-storage-set.h delete mode 100644 shell/e-storage.c delete mode 100644 shell/e-storage.h delete mode 100644 shell/evolution-session.c delete mode 100644 shell/evolution-session.h delete mode 100644 shell/evolution-shell-client.c delete mode 100644 shell/evolution-shell-client.h delete mode 100644 shell/evolution-shell-component-client.c delete mode 100644 shell/evolution-shell-component-client.h delete mode 100644 shell/evolution-shell-component.c delete mode 100644 shell/evolution-shell-component.h delete mode 100644 shell/evolution-shell-view.c delete mode 100644 shell/evolution-shell-view.h delete mode 100644 shell/evolution-storage.c delete mode 100644 shell/evolution-storage.h delete mode 100644 shell/glade/.cvsignore delete mode 100644 shell/glade/Makefile.am delete mode 100644 shell/glade/e-shell-folder-creation-dialog.glade delete mode 100644 shell/idl/folder.idl delete mode 100644 shell/main.c delete mode 100644 stamp.h.in delete mode 100644 tests/.cvsignore delete mode 100644 tests/Makefile.am delete mode 100644 tests/test-movemail.c delete mode 100644 tests/test-url.c delete mode 100644 tests/test1.c delete mode 100644 tests/test10.c delete mode 100644 tests/test11.c delete mode 100644 tests/test12.c delete mode 100644 tests/test13.c delete mode 100644 tests/test14.c delete mode 100644 tests/test2.c delete mode 100644 tests/test3.c delete mode 100644 tests/test4.c delete mode 100644 tests/test5.c delete mode 100644 tests/test6.c delete mode 100644 tests/test8.c delete mode 100644 tests/test9.c delete mode 100644 tests/ui-tests/.cvsignore delete mode 100644 tests/ui-tests/Makefile.am delete mode 100644 tests/ui-tests/filter.c delete mode 100644 tests/ui-tests/filterdescription.xml delete mode 100644 tests/ui-tests/mail-atchmt-image.msg delete mode 100644 tests/ui-tests/mail-atchmt-postscript.msg delete mode 100644 tests/ui-tests/mail-atchmt-svg.msg delete mode 100644 tests/ui-tests/message-browser.c delete mode 100644 tests/ui-tests/saveoptions.xml delete mode 100644 tests/ui-tests/store_listing.c delete mode 100644 tests/ui-tests/store_listing.glade delete mode 100644 tests/ui-tests/test-multipart-alt.msg delete mode 100644 tests/ui-tests/test-multipart-mixed.msg delete mode 100644 tools/.cvsignore delete mode 100644 tools/Makefile.am delete mode 100755 tools/killev delete mode 100755 tools/verify-evolution-install.sh delete mode 100644 widgets/.cvsignore delete mode 100644 widgets/LICENSE delete mode 100644 widgets/Makefile.am delete mode 100644 widgets/e-paned/.cvsignore delete mode 100644 widgets/e-paned/Makefile.am delete mode 100644 widgets/e-paned/e-hpaned.c delete mode 100644 widgets/e-paned/e-hpaned.h delete mode 100644 widgets/e-paned/e-paned.c delete mode 100644 widgets/e-paned/e-paned.h delete mode 100644 widgets/e-paned/e-vpaned.c delete mode 100644 widgets/e-paned/e-vpaned.h delete mode 100644 widgets/e-reflow/e-reflow-sorted.c delete mode 100644 widgets/e-reflow/e-reflow-sorted.h delete mode 100644 widgets/e-reflow/e-reflow.c delete mode 100644 widgets/e-reflow/e-reflow.h delete mode 100644 widgets/e-table/.cvsignore delete mode 100644 widgets/e-table/ChangeLog delete mode 100644 widgets/e-table/LICENSE delete mode 100644 widgets/e-table/Makefile.am delete mode 100644 widgets/e-table/ROADMAP.e-table delete mode 100644 widgets/e-table/TODO delete mode 100644 widgets/e-table/add-col.xpm delete mode 100644 widgets/e-table/arrow-down.xpm delete mode 100644 widgets/e-table/arrow-up.xpm delete mode 100644 widgets/e-table/check-empty.xpm delete mode 100644 widgets/e-table/check-filled.xpm delete mode 100644 widgets/e-table/clip.png delete mode 100644 widgets/e-table/e-cell-checkbox.c delete mode 100644 widgets/e-table/e-cell-checkbox.h delete mode 100644 widgets/e-table/e-cell-string.c delete mode 100644 widgets/e-table/e-cell-text.c delete mode 100644 widgets/e-table/e-cell-text.h delete mode 100644 widgets/e-table/e-cell-toggle.c delete mode 100644 widgets/e-table/e-cell-toggle.h delete mode 100644 widgets/e-table/e-cell-tree.c delete mode 100644 widgets/e-table/e-cell-tree.h delete mode 100644 widgets/e-table/e-cell.c delete mode 100644 widgets/e-table/e-cell.h delete mode 100644 widgets/e-table/e-table-click-to-add.c delete mode 100644 widgets/e-table/e-table-click-to-add.h delete mode 100644 widgets/e-table/e-table-col-dnd.h delete mode 100644 widgets/e-table/e-table-col.c delete mode 100644 widgets/e-table/e-table-col.h delete mode 100644 widgets/e-table/e-table-column-model.h delete mode 100644 widgets/e-table/e-table-column.c delete mode 100644 widgets/e-table/e-table-config.c delete mode 100644 widgets/e-table/e-table-config.glade delete mode 100644 widgets/e-table/e-table-config.glade.h delete mode 100644 widgets/e-table/e-table-config.h delete mode 100644 widgets/e-table/e-table-defines.h delete mode 100644 widgets/e-table/e-table-example-1.c delete mode 100644 widgets/e-table/e-table-example-2.c delete mode 100644 widgets/e-table/e-table-field-chooser-dialog.c delete mode 100644 widgets/e-table/e-table-field-chooser-dialog.h delete mode 100644 widgets/e-table/e-table-field-chooser-item.c delete mode 100644 widgets/e-table/e-table-field-chooser-item.h delete mode 100644 widgets/e-table/e-table-field-chooser.c delete mode 100644 widgets/e-table/e-table-field-chooser.glade delete mode 100644 widgets/e-table/e-table-field-chooser.glade.h delete mode 100644 widgets/e-table/e-table-field-chooser.h delete mode 100644 widgets/e-table/e-table-group-container.c delete mode 100644 widgets/e-table/e-table-group-container.h delete mode 100644 widgets/e-table/e-table-group-leaf.c delete mode 100644 widgets/e-table/e-table-group-leaf.h delete mode 100644 widgets/e-table/e-table-group.c delete mode 100644 widgets/e-table/e-table-group.glade delete mode 100644 widgets/e-table/e-table-group.glade.h delete mode 100644 widgets/e-table/e-table-group.h delete mode 100644 widgets/e-table/e-table-header-item.c delete mode 100644 widgets/e-table/e-table-header-item.h delete mode 100644 widgets/e-table/e-table-header.c delete mode 100644 widgets/e-table/e-table-header.h delete mode 100644 widgets/e-table/e-table-item.c delete mode 100644 widgets/e-table/e-table-item.h delete mode 100644 widgets/e-table/e-table-model.c delete mode 100644 widgets/e-table/e-table-model.h delete mode 100644 widgets/e-table/e-table-one.c delete mode 100644 widgets/e-table/e-table-one.h delete mode 100644 widgets/e-table/e-table-scrolled.c delete mode 100644 widgets/e-table/e-table-scrolled.h delete mode 100644 widgets/e-table/e-table-selection-model.c delete mode 100644 widgets/e-table/e-table-selection-model.h delete mode 100644 widgets/e-table/e-table-simple.c delete mode 100644 widgets/e-table/e-table-simple.h delete mode 100644 widgets/e-table/e-table-size-test.c delete mode 100644 widgets/e-table/e-table-sort-info.c delete mode 100644 widgets/e-table/e-table-sort-info.h delete mode 100644 widgets/e-table/e-table-sorted-variable.c delete mode 100644 widgets/e-table/e-table-sorted-variable.h delete mode 100644 widgets/e-table/e-table-sorted.c delete mode 100644 widgets/e-table/e-table-sorted.h delete mode 100644 widgets/e-table/e-table-sorter.c delete mode 100644 widgets/e-table/e-table-sorter.h delete mode 100644 widgets/e-table/e-table-subset-variable.c delete mode 100644 widgets/e-table/e-table-subset-variable.h delete mode 100644 widgets/e-table/e-table-subset.c delete mode 100644 widgets/e-table/e-table-subset.h delete mode 100644 widgets/e-table/e-table-text-model.c delete mode 100644 widgets/e-table/e-table-text-model.h delete mode 100644 widgets/e-table/e-table-tree.h delete mode 100644 widgets/e-table/e-table.c delete mode 100644 widgets/e-table/e-table.h delete mode 100644 widgets/e-table/e-tree-example-1.c delete mode 100644 widgets/e-table/e-tree-model.c delete mode 100644 widgets/e-table/e-tree-model.h delete mode 100644 widgets/e-table/e-tree-simple.c delete mode 100644 widgets/e-table/e-tree-simple.h delete mode 100644 widgets/e-table/image1.png delete mode 100644 widgets/e-table/image2.png delete mode 100644 widgets/e-table/image3.png delete mode 100644 widgets/e-table/remove-col.xpm delete mode 100644 widgets/e-table/sample.table delete mode 100644 widgets/e-table/table-test.c delete mode 100644 widgets/e-table/table-test.h delete mode 100644 widgets/e-table/test-check.c delete mode 100644 widgets/e-table/test-cols.c delete mode 100644 widgets/e-table/test-table.c delete mode 100644 widgets/e-table/tree-expanded.xpm delete mode 100644 widgets/e-table/tree-unexpanded.xpm delete mode 100644 widgets/e-text/.cvsignore delete mode 100644 widgets/e-text/Makefile.am delete mode 100644 widgets/e-text/e-entry-test.c delete mode 100644 widgets/e-text/e-entry.c delete mode 100644 widgets/e-text/e-entry.h delete mode 100644 widgets/e-text/e-text-event-processor-emacs-like.c delete mode 100644 widgets/e-text/e-text-event-processor-emacs-like.h delete mode 100644 widgets/e-text/e-text-event-processor-types.h delete mode 100644 widgets/e-text/e-text-event-processor.c delete mode 100644 widgets/e-text/e-text-event-processor.h delete mode 100644 widgets/e-text/e-text-model.c delete mode 100644 widgets/e-text/e-text-model.h delete mode 100644 widgets/e-text/e-text-test.c delete mode 100644 widgets/e-text/e-text.c delete mode 100644 widgets/e-text/e-text.h delete mode 100644 widgets/meeting-time-sel/.cvsignore delete mode 100644 widgets/meeting-time-sel/ChangeLog delete mode 100644 widgets/meeting-time-sel/LICENSE delete mode 100644 widgets/meeting-time-sel/Makefile.am delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel-item.c delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel-item.h delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel-list-item.c delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel-list-item.h delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel-mail.xpm delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel-no-mail.xpm delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel.c delete mode 100644 widgets/meeting-time-sel/e-meeting-time-sel.h delete mode 100644 widgets/meeting-time-sel/test-meeting-time-sel.c delete mode 100644 widgets/misc/.cvsignore delete mode 100644 widgets/misc/ChangeLog delete mode 100644 widgets/misc/Makefile.am delete mode 100644 widgets/misc/e-calendar-item.c delete mode 100644 widgets/misc/e-calendar-item.h delete mode 100644 widgets/misc/e-calendar.c delete mode 100644 widgets/misc/e-calendar.h delete mode 100644 widgets/misc/e-canvas-utils.c delete mode 100644 widgets/misc/e-canvas-utils.h delete mode 100644 widgets/misc/e-canvas-vbox.c delete mode 100644 widgets/misc/e-canvas-vbox.h delete mode 100644 widgets/misc/e-canvas.c delete mode 100644 widgets/misc/e-canvas.h delete mode 100644 widgets/misc/e-clipped-label.c delete mode 100644 widgets/misc/e-clipped-label.h delete mode 100644 widgets/misc/e-colors.c delete mode 100644 widgets/misc/e-colors.h delete mode 100644 widgets/misc/e-cursors.c delete mode 100644 widgets/misc/e-cursors.h delete mode 100644 widgets/misc/e-gui-utils.c delete mode 100644 widgets/misc/e-gui-utils.h delete mode 100644 widgets/misc/e-popup-menu.c delete mode 100644 widgets/misc/e-popup-menu.h delete mode 100644 widgets/misc/e-printable.c delete mode 100644 widgets/misc/e-printable.h delete mode 100644 widgets/misc/e-reflow.c delete mode 100644 widgets/misc/e-reflow.h delete mode 100644 widgets/misc/e-scroll-frame.c delete mode 100644 widgets/misc/e-scroll-frame.h delete mode 100644 widgets/misc/e-title-bar.c delete mode 100644 widgets/misc/e-title-bar.h delete mode 100644 widgets/misc/pixmaps/cursor_cross.xpm delete mode 100644 widgets/misc/pixmaps/cursor_hand_closed.xpm delete mode 100644 widgets/misc/pixmaps/cursor_hand_open.xpm delete mode 100644 widgets/misc/pixmaps/cursor_zoom_in.xpm delete mode 100644 widgets/misc/pixmaps/cursor_zoom_out.xpm delete mode 100644 widgets/misc/test-calendar.c delete mode 100644 widgets/misc/test-title-bar.c delete mode 100644 widgets/shortcut-bar/.cvsignore delete mode 100644 widgets/shortcut-bar/ChangeLog delete mode 100644 widgets/shortcut-bar/LICENSE delete mode 100644 widgets/shortcut-bar/Makefile.am delete mode 100644 widgets/shortcut-bar/e-group-bar.c delete mode 100644 widgets/shortcut-bar/e-group-bar.h delete mode 100644 widgets/shortcut-bar/e-icon-bar-bg-item.c delete mode 100644 widgets/shortcut-bar/e-icon-bar-bg-item.h delete mode 100644 widgets/shortcut-bar/e-icon-bar.c delete mode 100644 widgets/shortcut-bar/e-icon-bar.h delete mode 100644 widgets/shortcut-bar/e-shortcut-bar.c delete mode 100644 widgets/shortcut-bar/e-shortcut-bar.h delete mode 100644 widgets/shortcut-bar/e-shortcut-model.c delete mode 100644 widgets/shortcut-bar/e-shortcut-model.h delete mode 100644 widgets/shortcut-bar/e-vscrolled-bar.c delete mode 100644 widgets/shortcut-bar/e-vscrolled-bar.h delete mode 100644 widgets/shortcut-bar/test-shortcut-bar.c delete mode 100644 widgets/table/.cvsignore delete mode 100644 widgets/table/add-col.xpm delete mode 100644 widgets/table/arrow-down.xpm delete mode 100644 widgets/table/arrow-up.xpm delete mode 100644 widgets/table/check-empty.xpm delete mode 100644 widgets/table/check-filled.xpm delete mode 100644 widgets/table/clip.png delete mode 100644 widgets/table/e-cell-checkbox.c delete mode 100644 widgets/table/e-cell-checkbox.h delete mode 100644 widgets/table/e-cell-string.c delete mode 100644 widgets/table/e-cell-text.c delete mode 100644 widgets/table/e-cell-text.h delete mode 100644 widgets/table/e-cell-toggle.c delete mode 100644 widgets/table/e-cell-toggle.h delete mode 100644 widgets/table/e-cell-tree.c delete mode 100644 widgets/table/e-cell-tree.h delete mode 100644 widgets/table/e-cell.c delete mode 100644 widgets/table/e-cell.h delete mode 100644 widgets/table/e-table-click-to-add.c delete mode 100644 widgets/table/e-table-click-to-add.h delete mode 100644 widgets/table/e-table-col-dnd.h delete mode 100644 widgets/table/e-table-col.c delete mode 100644 widgets/table/e-table-col.h delete mode 100644 widgets/table/e-table-column-model.h delete mode 100644 widgets/table/e-table-column.c delete mode 100644 widgets/table/e-table-config.c delete mode 100644 widgets/table/e-table-config.glade delete mode 100644 widgets/table/e-table-config.glade.h delete mode 100644 widgets/table/e-table-config.h delete mode 100644 widgets/table/e-table-defines.h delete mode 100644 widgets/table/e-table-example-1.c delete mode 100644 widgets/table/e-table-example-2.c delete mode 100644 widgets/table/e-table-field-chooser-dialog.c delete mode 100644 widgets/table/e-table-field-chooser-dialog.h delete mode 100644 widgets/table/e-table-field-chooser-item.c delete mode 100644 widgets/table/e-table-field-chooser-item.h delete mode 100644 widgets/table/e-table-field-chooser.c delete mode 100644 widgets/table/e-table-field-chooser.glade delete mode 100644 widgets/table/e-table-field-chooser.glade.h delete mode 100644 widgets/table/e-table-field-chooser.h delete mode 100644 widgets/table/e-table-group-container.c delete mode 100644 widgets/table/e-table-group-container.h delete mode 100644 widgets/table/e-table-group-leaf.c delete mode 100644 widgets/table/e-table-group-leaf.h delete mode 100644 widgets/table/e-table-group.c delete mode 100644 widgets/table/e-table-group.glade delete mode 100644 widgets/table/e-table-group.glade.h delete mode 100644 widgets/table/e-table-group.h delete mode 100644 widgets/table/e-table-header-item.c delete mode 100644 widgets/table/e-table-header-item.h delete mode 100644 widgets/table/e-table-header.c delete mode 100644 widgets/table/e-table-header.h delete mode 100644 widgets/table/e-table-item.c delete mode 100644 widgets/table/e-table-item.h delete mode 100644 widgets/table/e-table-model.c delete mode 100644 widgets/table/e-table-model.h delete mode 100644 widgets/table/e-table-one.c delete mode 100644 widgets/table/e-table-one.h delete mode 100644 widgets/table/e-table-scrolled.c delete mode 100644 widgets/table/e-table-scrolled.h delete mode 100644 widgets/table/e-table-selection-model.c delete mode 100644 widgets/table/e-table-selection-model.h delete mode 100644 widgets/table/e-table-simple.c delete mode 100644 widgets/table/e-table-simple.h delete mode 100644 widgets/table/e-table-size-test.c delete mode 100644 widgets/table/e-table-sort-info.c delete mode 100644 widgets/table/e-table-sort-info.h delete mode 100644 widgets/table/e-table-sorted-variable.c delete mode 100644 widgets/table/e-table-sorted-variable.h delete mode 100644 widgets/table/e-table-sorted.c delete mode 100644 widgets/table/e-table-sorted.h delete mode 100644 widgets/table/e-table-sorter.c delete mode 100644 widgets/table/e-table-sorter.h delete mode 100644 widgets/table/e-table-subset-variable.c delete mode 100644 widgets/table/e-table-subset-variable.h delete mode 100644 widgets/table/e-table-subset.c delete mode 100644 widgets/table/e-table-subset.h delete mode 100644 widgets/table/e-table-text-model.c delete mode 100644 widgets/table/e-table-text-model.h delete mode 100644 widgets/table/e-table-tree.h delete mode 100644 widgets/table/e-table.c delete mode 100644 widgets/table/e-table.h delete mode 100644 widgets/table/e-tree-example-1.c delete mode 100644 widgets/table/e-tree-model.c delete mode 100644 widgets/table/e-tree-model.h delete mode 100644 widgets/table/e-tree-simple.c delete mode 100644 widgets/table/e-tree-simple.h delete mode 100644 widgets/table/image1.png delete mode 100644 widgets/table/image2.png delete mode 100644 widgets/table/image3.png delete mode 100644 widgets/table/remove-col.xpm delete mode 100644 widgets/table/sample.table delete mode 100644 widgets/table/table-test.c delete mode 100644 widgets/table/table-test.h delete mode 100644 widgets/table/test-check.c delete mode 100644 widgets/table/test-cols.c delete mode 100644 widgets/table/test-table.c delete mode 100644 widgets/table/tree-expanded.xpm delete mode 100644 widgets/table/tree-unexpanded.xpm delete mode 100644 widgets/text/.cvsignore delete mode 100644 widgets/text/e-entry-test.c delete mode 100644 widgets/text/e-entry.c delete mode 100644 widgets/text/e-entry.h delete mode 100644 widgets/text/e-table-text-model.c delete mode 100644 widgets/text/e-table-text-model.h delete mode 100644 widgets/text/e-text-event-processor-emacs-like.c delete mode 100644 widgets/text/e-text-event-processor-emacs-like.h delete mode 100644 widgets/text/e-text-event-processor-types.h delete mode 100644 widgets/text/e-text-event-processor.c delete mode 100644 widgets/text/e-text-event-processor.h delete mode 100644 widgets/text/e-text-model.c delete mode 100644 widgets/text/e-text-model.h delete mode 100644 widgets/text/e-text-test.c delete mode 100644 widgets/text/e-text.c delete mode 100644 widgets/text/e-text.h delete mode 100644 wombat/.cvsignore delete mode 100644 wombat/ChangeLog delete mode 100644 wombat/GNOME_Evolution_Wombat.oaf.in delete mode 100644 wombat/GNOME_Evolution_Wombat.oafinfo delete mode 100644 wombat/Makefile.am delete mode 100644 wombat/wombat.c delete mode 100644 wombat/wombat.gnorba delete mode 100644 wombat/wombat.idl delete mode 100644 wombat/wombat.oafinfo diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index 00c805b196..0000000000 --- a/.cvsignore +++ /dev/null @@ -1,25 +0,0 @@ -ABOUT-NLS -Makefile -Makefile.in -aclocal.m4 -config.cache -config.guess -config.h -config.h.in -config.log -config.status -config.sub -configure -install-sh -intl -libtool -ltconfig -ltmain.sh -missing -mkinstalldirs -stamp-h -stamp-h.in -stamp.h -xlibtool -xltmain.sh -evolution.spec diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 5156573f32..0000000000 --- a/AUTHORS +++ /dev/null @@ -1,66 +0,0 @@ -Evolution was written by: - -Addressbook - Arturo Esponosa (Original Gnomecard author) - Nat Friedman - Chris Lahey - Chris Toshok - -Artwork - Tuomas Kuosmanen - -Calendar - Seth Alves - Eric Busboom (libical author) - Arturo Esponosa (Gnomecal contributor) - Damon Chaplin - Federico Mena-Quintero - Russell Steinthal (Gnomecal maintainer) - -Documentation - Kevin Breit - Aaron Weber - -Mailer - Bertrand Guiheneuf - Matt Loper - Ettore Perazzoli - Jeff Stedfast - Peter Williams - Dan Winship - Michael Zucchi - -Notes - Anders Carlsson - -Shell - Miguel de Icaza - Ettore Perazzoli - -Translations - Akira TAGOH - Andraz Tori - Andreas Hyden - Arjan Scherpenisse - Clara Tattoni - Fatih Demir - GNOME PL Team - Gustavo Maciel Dias Vieira - Héctor García Alvarez - Jesús Bravo Álvarez - Keld Simonsen - Matthias Warkus - Spiros Papadimitriou - Sung-Hyun Nam - Szabolcs BAN - Tiago Antão - Valek Filippov - Vincent Renardias - Yuri Syrota - -Widgets - Damon Chaplin - Miguel de Icaza - Chris Lahey - Federico Mena-Quintero - Chris Toshok diff --git a/COPYING b/COPYING deleted file mode 100644 index d60c31a97a..0000000000 --- a/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index a608c7aa5c..0000000000 --- a/ChangeLog +++ /dev/null @@ -1,5251 +0,0 @@ -2000-08-22 Christopher James Lahey - - * announcement-0.4.1.txt: Announcement message - -2000-08-19 Mathieu Lacage - - Fixes compile for non-standard prefixes. Mainly in idl - compilation where -I`gnome-config --datadir`/idl is replaced - by `gnome-config --cflags idl` (ugly but it works at least) - and add some random _CFLAGS here and there and _LIBS for linking. - * addressbook/gui/component/select-names/Makefile.am - * composer/Makefile.am - * e-util/Makefile.am - * filter/Makefile.am - * mail/Makefile.am - * shell/Makefile.am - * widgets/e-text/Makefile.am - - -2000-08-21 Christopher James Lahey - - * widgets/e-paned/e-hpaned.c, widgets/e-paned/e-paned.c, - widgets/e-paned/e-paned.h, widgets/e-paned/e-vpaned.c: Added code - to make handle position persist across resizes. - -2000-08-20 Christopher James Lahey - - * widgets/e-text/e-text.c: Fixed a warning. - -2000-08-20 arik devens - - * widgets/e-text/Makefile.am (INCLUDES): added UNICODE_CFLAGS - support so that compiling in an alternate prefix works. - -2000-08-19 Lauris Kaplinski - - * widgets/e-text/e-text.h: Commented out Suckfont, added EFont - * widgets/e-text/e-text.c: Ported to UTF-8 - -2000-08-18 Peter Williams - - * configure.in (gnome-vfs): Check for new enough gnome-vfs - (needs gnome_vfs_mime_get_default_action_without_fallback) - -2000-08-14 Federico Mena Quintero - - * configure.in (AC_OUTPUT): Generate - doc/devel/calendar/cal-util/Makefile. - -2000-08-14 Peter Williams - - * configure.in: Check for db1/db.h too, which is what - RH 7.0 uses for the old db headers. Patch from Kenny Graunke - - -2000-08-13 Chris Toshok - - * configure.in: offer --enable-pilot-conduits to add pilot - conduits if the user wants them. - -2000-08-13 Dan Winship - - * configure.in: Fix the name of the binary to look for for PGP5 - -2000-08-12 Michael Meeks - - * configure.in: Check for Bonobo 0.17 - -2000-08-12 Christopher James Lahey - - * configure.in: Added addressbook/gui/search/Makefile. - -2000-08-12 Dan Winship - - * configure.in, README: Depend on gnome-vfs 0.3 - -2000-08-10 Christopher James Lahey - - * widgets/e-text/.cvsignore, widgets/e-text/Makefile.am, - widgets/e-text/e-entry-test.c: Added a test for the EEntry widget. - -2000-08-09 Dan Winship - - * data/evolution.keys: New file containing MIME keys for - Evolution. Currently just the addressbook minicard display. - - * data/Makefile.am (mime_DATA): add evolution.keys - -2000-08-09 Peter Williams - - * configure.in (EVOLUTION_DIR): Remove the warning about camel-async. - -2000-08-08 Peter Williams - - * Makefile.am (SUBDIRS): Reenable the calendar. Oops. - -2000-08-05 Dan Winship - - * tools/verify-evolution-install.sh: Look for oafinfo files in - oaf's prefix, not gnome-libs's. Allow binaries to be installed - anywhere in $PATH. - - * configure.in, README: Update the README and the text of the - Bonobo configure check to match reality. Remove the 0.15 vs - 0.15-and-a-half check since we require post-0.16 now. - -2000-08-03 JP Rosevear - - * configure.in: Remove gconf check - -2000-08-03 Alastair McKinstry - - * configure.in (ALL_LINGUAS): Add Irish translation - -2000-08-02 Michael Meeks - - * configure.in: update for BonoboX - -2000-08-02 Dan Winship - - * configure.in (AC_OUTPUT): Add camel/providers/nntp - -2000-08-02 Christopher James Lahey - - * widgets/e-text/e-text.c: Made clicking choose the right - character even if show_borders is on. - -2000-08-01 Dan Winship - - * configure.in, acconfig.h: Add checks for GPG, PGP 5 and PGP 2. - Only record the first one found. - -2000-08-01 Damon Chaplin - - * configure.in (AC_OUTPUT): removed calendar/doc/* - -2000-08-01 Not Zed - - * configure.in: Added mh provider. - -2000-07-27 Dan Winship - - * configure.in: Check for gconf_client_get_default (gconf 0.5 vs - newer) - -2000-07-26 Ettore Perazzoli - - * configure.in: Bump version number to 0.3. - -2000-07-26 Peter Williams - - * widgets/e-table/e-table-scrolled.c (right_click_proxy): Default - the return value to 0. - -2000-07-25 Dan Winship - - * configure.in: some unrelated changes: check for mkdtemp, - gnome_vfs_mime_get_default_action_without_fallback, and a - setuid/setgid movemail binary. - - * acconfig.h: add MOVEMAIL_PATH - -2000-07-25 Christopher James Lahey - - * configure.in: Added addressbook/conduit/Makefile. - -2000-07-21 Christopher James Lahey - - * widgets/e-text/e-text.c: Made focus in not change your selection - position. - -2000-07-21 Szabolcs BAN - - * calendar/gui/event-editor.c: Typo fix - -2000-07-20 Peter Williams - - * configure.in (THREADS_CFLAGS): Make threads mandatory - again. - -2000-07-19 Fatih Demir - - * evolution.desktop & data/evolution.desktop: Added - the Turkish desktop entries. - -2000-07-17 Federico Mena Quintero - - * configure.in (EVOLUTION_DIR): Typo fix. - - * configure.in (AC_OUTPUT): Added the doc/devel Makefiles. - (EVOLUTION_DIR): Substitute EVOLUTION_DIR for the top_srcdir. - Added checks for gtk-doc. - -2000-07-13 Peter Williams - - * configure.in (end): Bigass warnings for camel-async branch - (remove them later). - -2000-07-12 Federico Mena Quintero - - * configure.in: Make gnome-print-0.20 mandatory. We will bail out - with CVS HEAD versions to avoid breakage. - -2000-07-10 Ettore Perazzoli - - * Version 0.2. - - * configure.in: Reverse the GtkHTML check. - -2000-07-10 Jeffrey Stedfast - - * configure.in: Updated to check for required GtkHTML and - gnome-print - -2000-07-10 Ettore Perazzoli - - * configure.in: Remove the conduits stuff for now. They depend on - CVS gnome-pilot, and this is not good for the release. - -2000-07-10 Dan Winship - - * README: updates - -2000-07-10 Seth Alves - - * configure.in: added makefiles for calendar conduits - -2000-07-10 Dan Winship - - * configure.in: Add a check for Bonobo 0.15 vs Bonobo post-0.15 - -2000-07-09 Christopher James Lahey - - * widgets/e-text/e-text.c: Don't draw quite as large a "flat_box". - If draw_borders is TRUE, cause the cursor to change even if not - editing. - -2000-07-09 Christopher James Lahey - - * widgets/e-text/e-entry.c: Removed some border padding and set - the "draw_borders" argument of the contained GtkText. - - * widgets/e-text/e-text.c, widget/e-text/e-text.h: Added a - "draw_borders" argument which, if set, makes the EText look more - like a GtkEntry. - -2000-07-09 Tuomas Kuosmanen - - * art/evolution-contacts.png: updated so it has better contrast - against the background. - - * art/evolution-contacts-small.png: Fits the style of the new contacts - icon, this is a sigle card. - -2000-07-09 Christopher James Lahey - - * widgets/e-text/e-text-model.c (e_text_model_real_get_text): - Return "" instead of NULL. - -2000-07-07 Christopher James Lahey - - * art/Makefile.am: Fixed EXTRA_DIST for make distcheck. - -2000-07-07 Christopher James Lahey - - * widgets/e-text/e-entry.c: Set "anchor" and "fill_clip_rectangle" - arguments. - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Added - "fill_clip_rectangle" argument which describes whether to accept - clicks throughout the clipping rectangle. - -2000-07-07 Christopher James Lahey - - * widgets/e-text/e-entry.c: Fixed some typos. - -2000-07-07 Tuomas Kuosmanen - - * art/evolution-contacts.png: Changed icon (hi ettore) - The old handshake one was a little too firm handshake.. - this is a rolodex icon.. - -2000-07-07 Dan Winship - - * configure.in: make pthreads not required again, since they - aren't, and remove widgets/e-toolbar/Makefile from AC_OUTPUT since - that dir doesn't exist any more. - -2000-07-06 Chris Toshok - - * configure.in (AC_OUTPUT): remove the default_user Directories - dir. - -2000-07-06 Christopher James Lahey - - * Makefile.am, libical/configure.in: Fixed some make distcheck - errors. - -2000-07-05 Ettore Perazzoli - - * configure.in (GNOME_VFS_CFLAGS): Define. - (GNOME_VFS_LIBS): Define. - -2000-07-03 Ettore Perazzoli - - * configure.in: Add - `addressbook/gui/component/select-names/Makefile' to the - `AC_OUTPUT()' list. - -2000-07-03 Christopher James Lahey - - * widgets/e-text/Makefile.am: Added e-entry.c and e-entry.h. - - * widgets/e-text/e-entry.c, widgets/e-text/e-entry.h: New files to - be a widget containing a text item. - - * widgets/e-text/e-text.c: Fixed some spacing. - -2000-06-29 Ettore Perazzoli - - * notes/component-factory.c (owner_set_cb): Get an - EvolutionShellClient instead of an Evolution_Shell to match the - changes in libeshell. - -2000-06-29 Peter Williams - - * configure.in: Re-enable GNOME_PILOT_CHECK. - Change AC_MSG_CHECKING([For...]) to [for...]. It's the little - things that matter. - -2000-06-28 Ettore Perazzoli - - * configure.in: `AM_PATH_GCONF'. - -2000-06-27 Peter Williams - - * configure.in (ctime_r): Check for whether ctime_r takes - two (Linux) or three (Solaris) arguments. - (AC_OUTPUT): Don't create notes/Makefile twice. - - * acconfig.h: Add CTIME_R_THREE_ARGS to the list. - -2000-06-26 Christopher James Lahey - - * widgets/e-text/e-text.c: Calculate height including if - clip_height is set to -1. - -2000-06-26 Peter Williams - - * configure.in (THREADS_CFLAGS): Add option --enable-broken-threads - to turn on the threading stuff in evolution-mail. Defaults to no. - - * acconfig.h: Add USE_BROKEN_THREADS to the list. - -2000-06-25 Ettore Perazzoli - - * configure.in: Use `glib-config' instead of `$GLIB_CONFIG' as the - latter is not actually defined anywhere. - -2000-06-25 Peter Williams - - * configure.in (pthread stuff): Make threads required due - to threaded evolution-mail. Subst in the THREADS_LIBS et - al. - - * tests/Makefile.am: Remove USE_THREADS conditional as we - always use threads now. - -2000-06-21 Christopher James Lahey - - * widgets/e-text/e-text.c: Fixed some vertical scroll bugs. - -2000-06-21 Christopher James Lahey - - * widgets/e-text/e-text.c: Fix a bug with intial vertical scroll. - -2000-06-21 Christopher James Lahey - - * notes/e-note.c, widgets/meeting-time-sel/e-meeting-time-sel.c, - widgets/shortcut-bar/e-icon-bar.c: Removed the usage of "x" and - "y" arguments to EText. - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Removed the - "x" and "y" arguments to EText. Added vertical scrolling. - -2000-06-20 Damon Chaplin - - * widgets/meeting-time-sel/e-meeting-time-sel-item.c: - * widgets/meeting-time-sel/e-meeting-time-sel.c: fixed a few warnings. - -2000-06-17 Christopher James Lahey - - * widgets/e-text/e-text.c: Made EText use the font from the - canvas's style if one isn't set. - -2000-06-17 Damon Chaplin - - * widgets/meeting-time-sel/*: updated to use EText items rather than - GtkEntry widgets and added support for adding new rows. - -2000-06-15 Dan Winship - - * README: bye bye goad - -2000-06-14 Damon Chaplin - - * README (http): added command to co ORBit. - -2000-06-13 Jeffrey Stedfast - - * configure.in: Added IMAP into the build - -2000-06-13 Ettore Perazzoli - - * notes/Makefile.am (SHELL_OBJS): Removed. - (evolution_notes_LDADD): Link with - `$(top_builddir)/shell/libeshell.a'. - -2000-06-12 Ettore Perazzoli - - * widgets/Makefile.am (SUBDIRS): build `misc' before everything - else. - - * Makefile.am: Install `evolution.png' and `evolution.desktop' - where appropriate. - - * evolution.png: New. For now, it's just a copy of - `art/evolution-inbox.png'. - - * evolution.desktop: New. - -2000-06-10 Zbigniew Chyla - - * configure.in: Added pl (Polish) to ALL_LINGUAS - -2000-06-09 Ettore Perazzoli - - * configure.in: Added new directory `shell/glade'. - -2000-06-07 Christopher James Lahey - - * widgets/e-paned/e-hpaned.c, widgets/e-paned/e-paned.c, - widgets/e-paned/e-paned.h, widgets/e-paned/e-vpaned.c: Added a - "quantum" argument for making the panes move in jumps. - -2000-06-07 Anders Carlsson - - * configure.in: Create notes/Makefile - - * notes/*: Add preliminary yellow sticky notes. - -2000-06-05 Mathieu Lacage - - * addressbook/contact-editor/Makefile.am: make it - compile: add proper bonobo linking params. - * addressbook/gui/minicard/Makefile.am: idem. - * wombat/Makefile.am: add BONOBO_VFS_GNOME_CFLAGS. - cleanup some useless includes and libs. - -2000-06-02 Ettore Perazzoli - - * configure.in (ALL_LINGUAS): Add `it' and `de'. - -2000-06-02 Christopher James Lahey - - * configure.in: Released Evolution 0.1. - -2000-06-02 Christopher James Lahey - - * tests/test-movemail.c: Reverted removal of e_setup_base_dir. - -2000-06-02 Jesus Bravo Alvarez - - * configure.in: Added pt (Portuguese) to ALL_LINGUAS - -2000-06-02 Dan Winship - - * README: Update dependencies. Rewrite the GOAD vs OAF thing some - more to reflect OAF's new ascendency. Make the fact that you don't - need pilot stuff clearer. Add some new directories to the - directory layout section. - -2000-06-02 Christopher James Lahey - - * widgets/misc/e-clipped-label.c: Free the finish data. - -2000-06-01 Christopher James Lahey - - * tests/test-movemail.c (main): Don't call e_setup_base_dir. - -2000-06-01 Dan Winship - - * configure.in (AC_OUTPUT): add doc, doc/C - - * Makefile.am (SUBDIRS): add doc - -2000-05-31 Federico Mena Quintero - - * widgets/misc/e-scroll-frame.[ch]: Imported GtkScrollFrame from - EOG and renamed it to EScrollFrame. - - * widgets/misc/Makefile.am (libemiscwidgets_a_SOURCES): Added - e-scroll-frame.[ch]. - -2000-05-30 Ettore Perazzoli - - * widgets/e-paned/e-vpaned.c (e_vpaned_handle_shown): Show the - handle even if the requisition for the child is zero. - * widgets/e-paned/e-hpaned.c (e_hpaned_handle_shown): Likewise. - -2000-05-26 Héctor García Alvarez - - * configure.in: Added Spanish language - -2000-05-25 Christopher James Lahey - - * widgets/e-paned/e-hpaned.c, widgets/e-paned/e-vpaned.c: Fixed a - bug where we were resizing a non-existent window. - -2000-05-25 Christopher James Lahey - - * widgets/e-paned/e-hpaned.c, widgets/e-paned/e-paned.c, - widgets/e-paned/e-paned.h, widgets/e-paned/e-vpaned.c: Made - the handlebar disappear if either side is empty, hidden, or - requests 0 size. - -2000-05-24 Christopher James Lahey - - * configure.in: Added widgets/e-paned/Makefile. - - * tests/ui-tests/message-browser.c: Switched from GtkPaned to - EPaned. - - * widgets/Makefile.am: Added e-paned directory. - - * widgets/e-paned/, widgets/e-paned/.cvsignore, - widgets/e-paned/Makefile.am, widgets/e-paned/e-hpaned.c, - widgets/e-paned/e-hpaned.h, widgets/e-paned/e-paned.c, - widgets/e-paned/e-paned.h, widgets/e-paned/e-vpaned.c, - widgets/e-paned/e-vpaned.h: New widget based completely on - GtkPaned from 1.4. This will be more advanced soon. - -2000-05-22 Jeff Stedfast - - * configure.in: Readded camel/providers/smtp - -2000-05-22 Szabolcs BAN - - * configure.in: Added Hungarian language - -2000-05-18 Dan Winship - - * configure.in (AC_OUTPUT): add camel/providers/vee - -2000-05-16 Ettore Perazzoli - - * art/Makefile.am: Install the mini icons. - -2000-05-16 Chris Toshok - - * configure.in: add --with-purify-options support, and default it - to what we at helix need - -Tue May 16 06:11:40 2000 Tuomas Kuosmanen - - * art/evolution-calendar-mini.png art/evolution-inbox-mini.png - art/evolution-tasks-mini.png art/evolution-contacts-mini.png - art/evolution-notes-mini.png: new mini-icons for the tree view - of folders and stuff. - -2000-05-14 Federico Mena Quintero - - * configure.in (AC_OUTPUT): Added calendar/gui/dialogs/Makefile.am. - -2000-05-10 Matt Loper - - * README: Added version and availability of required libunicode - library. - -2000-05-10 Dan Winship - - * configure.in: Update versions needed for gnome-print, bonobo, - and gtkhtml. - -2000-05-10 Christopher James Lahey - - * HACKING: We need a HACKING file. - -2000-05-10 Christopher James Lahey - - * Makefile.am: Removed dist-hook section. - - * configure.in: Set the version number. Added a check for gnome - window icons. Removed a bunch of unused Makefiles. - - * tools/Makefile.am: Created a proper EXTRA_DIST section. - - * widgets/e-text/Makefile.am: Added - e-text-event-processor-types.h. - -2000-05-09 Christopher James Lahey - - * art/Makefile.am: Added briefcase.png to get installed. - -2000-05-09 Christopher James Lahey - - * widgets/e-text/e-text.c: Remove the tooltip callback when - destroyed. - -2000-05-09 Matt Loper - - * calendar/pcs/cal-backend.c (cal_backend_add_cal): Return nothing - for a 'void' function. - -2000-05-08 Christopher James Lahey - - * widget/e-text/e-text.c, widgets/e-text/e-text.h: Added an - activate signal. - -2000-05-06 Chris Toshok - - * configure.in: Added new Directories section for the default_user. - -2000-05-06 Ettore Perazzoli - - * configure.in: Updated for the new `default_user' directory - setup. - -2000-05-06 Chris Toshok - - * configure.in: check for purify. - -2000-05-06 Christopher James Lahey - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Added a - "changed" signal that gets sent whenever the text changes. - -2000-05-05 Ettore Perazzoli - - * Added `--enable-purify' flag. - -2000-05-05 Chris Toshok - - * shell/Makefile.am: add support for building purified evolution. - - * shell/.cvsignore: ignore evolution.pure - -2000-05-05 Chris Toshok - - * addressbook/backend/ebook/.cvsignore, - addressbook/contact-editor/.cvsignore, - addressbook/gui/component/.cvsignore, - addressbook/gui/minicard/.cvsignore, - addressbook/printing/.cvsignore, - calendar/cal-client/.cvsignore, - calendar/gui/.cvsignore, - calendar/pcs/.cvsignore, - filter/.cvsignore, - mail/.cvsignore, - shell/.cvsignore, - tests/.cvsignore, - widgets/e-table/.cvsignore, - widgets/e-text/.cvsignore, - widgets/meeting-time-sel/.cvsignore, - widgets/shortcut-bar/.cvsignore, - wombat/.cvsignore: ignore the .pure directory - -2000-05-04 Dan Winship - - * configure.in: Oops. The Kerberos check was succeeding when it - shouldn't have (and thus breaking the pop3 build for "normal" - people). Fix. - -2000-05-03 Michael Meeks - - * configure.in (xmlversion): Fix to remove older 'libxml' prefix. - -2000-05-02 Ettore Perazzoli - - * configure.in: Do not output `doc/Makefile' because there is - nothing to generate it from. - -2000-05-02 Dan Winship - - * configure.in, acconfig.h: add some minimal Kerberos checking. - This isn't intended to be generically useful at this point, it's - just there to give me a second POP auth mechanism to play with. - - Also remove a bit of cruft, and reorganize configure.in a bit. - -2000-05-02 NotZed - - * tests/test13.c: And here too. - - * tests/test2.c (main): REmoved gmime-utils.h - - * tests/Makefile.am (LDADD): Add libeutil to default link line. - (test_movemail_LDADD): Fixed order for libutil linking. - -2000-05-02 Matt Loper - - * tests/Makefile.am: set G_LOG_DOMAIN. - * tests/ui-tests/Makefile.am: same. - * widgets/e-text/Makefile.am: same. - * widgets/meeting-time-sel/Makefile.am: same. - -2000-05-01 NotZed - - * tests/test11.c (main): *sigh* moved back to sync api. - -2000-05-01 NotZed - - * tests/test11.c (search_cb): Try deleting messages ... - (main): Fix for provider api changes. - -2000-05-01 Anders Carlsson - - * configure.in: Check if bonobo uses oaf, so you don't - need to specify --enable-oaf. - -2000-04-27 Ettore Perazzoli - - * acconfig.h: New configured #define `USING_OAF'. - - * configure.in: Added `--enable-oaf' option and corresponding - `OAF_LIBS' and `OAF_FLAGS' variables. Code friendly provided by - Maciej Stachowiak . - -2000-04-27 NotZed - - * tests/test10.c: Fix for removal of camelmimebodypart, and changes - to recipient stuff. - - * tests/test1.c: Fix for removal of camelmimebodypart, and changes - to recipient stuff. - -2000-04-27 Christopher James Lahey - - * configure.in: Added addressbook/ename/Makefile. - -2000-04-27 Matt Loper - - * configure.in: added tools/Makefile. - - * Makefile.am: Added tools. - - * tools/: New directory for tools relating to evolution. - - * tools/killev: New script for killing all evolution-related - stuff. - - * tools/Makefile.am: New file. - - * tools/.cvsignore: New file. - -2000-04-26 NotZed - - * tests/test13.c (main): And here too. - - * tests/test2.c (main): Same here. - - * tests/test1.c (main): Change for removed simpledatawrapper. - -2000-04-26 Matt Loper - - * tests/.cvsignore: Added test13. - - * default_user/.cvsignore: New file. - - * widgets/e-text/e-text.c (e_text_destroy): Kill text->timer and - text->timeout on destroy. - -2000-04-26 Dan Winship - - * tests: Update for the camel changes. - - * Makefile.am (SUBDIRS): Remove tests. They aren't terribly - useful/interesting any more for the most part, and they frequently - don't compile. - -2000-04-24 Christopher James Lahey - - * widgets/e-text/e-text.c: Made the tooltip show up in the correct - place and configuration when using the "max_lines", "anchor" - (untested), or "justification" arguments. - -From a patch by Iain Holmes - - * widgets/e-text/e-text-event-processor-emacs-like.c, - widget/e-text/e-text-event-processor-types.h, - widgets/e-text/e-text.c, widgets/e-text/e-text.h: Changed C-w and - C-y to control the X clipboard. Added double and triple click - events. - -2000-04-24 Fatih Demir - - * configure.in : Added tr to ALL_LINGUAS . - -2000-04-24 NotZed - - * tests/test13.c (main): Fixed for method movements. - - * tests/test3.c (main): Removed from build, data-wrapper-repository removed. - -2000-04-23 NotZed - - * tests/test2.c (main): Changed to use construct_from_stream. - - * tests/test1.c (main): Chagned to use construct_from_stream. - -2000-04-24 Matt Loper - - * default_user/Makefile.am: new file. - - * default_user/Main_Shortcuts.xml: New file; is used to fill the - shortcut bar's "main shortcuts" pane. - - * default_user/Other_Shortcuts.xml: New file, used to fill the - shortcut bar's "other shortcuts" pane. - - * default_user/Inbox.mbox: New file. This is the first message a - new user will see when they fire up Evolution. Needs work. - - * Makefile.am: added default_user directory. - * configure.in: same. - -2000-04-23 NotZed - - * tests/test10.c: Removed some unecessary includes. From - Ali Abdin - (create_sample_mime_message): Changed for date api change. - - * tests/Makefile.am (noinst_PROGRAMS): Put test10 back. - -2000-04-22 NotZed - - * tests/test1.c (main): Changed for date api change. - -2000-04-20 NotZed - - * tests/test11.c: Fixed some headers. - - * tests/Makefile.am (noinst_PROGRAMS): Removed test9. - (noinst_PROGRAMS): Removed test12, temporarirly (nntp not being - built). - Removed test10. - -2000-04-20 Yukihiro Nakai - - * configure.in: Add Japanese to ALL_LINGUAS - -2000-04-19 Dan Winship - - * README: More detail on exactly what versions of what libraries - are needed. - -2000-04-18 Dan Winship - - * tests/*: remove camel-log references - -2000-04-17 Dan Winship - - * configure.in (xmlpatch): Require gnome-xml 1.8.7 (or later, - but not 2.0). xmlParseMemory's behavior in 1.8.7 is incompatible - with its behavior in 1.8.6 and earlier. - - * tests/test-url.c: New program to test CamelURL - -2000-04-16 Christopher James Lahey - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h, - addressbook/backend/ebook/test-card.c, - addressbook/backend/pas/pas-backend-file.c, - addressbook/contact-editor/e-contact-editor.c: Added - orginizational unit, nickname, and internet free-busy fields. - - * addressbook/contact-editor/contact-editor.glade: Renamed some - incorrectly named fields. - -2000-04-16 Christopher James Lahey - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h, - addressbook/backend/ebook/test-card.c, - addressbook/backend/pas/pas-backend-file.c, - addressbook/gui/minicard/e-minicard.c: Added orginization and role - fields. - - * addressbook/contact-editor/contact-editor.glade, - addressbook/contact-editor/e-contact-editor-strings.h: Renamed - some incorrectly named fields. - - * addressbook/contact-editor/e-contact-editor.c: Added - orginization and role fields as well as hooking up the birth date - field. - - * addressbook/gui/minicard/e-minicard-view.c: Added a missing include. - -2000-04-15 Matt Loper - - * addressbook/gui/component/addressbook.c - (search_entry_activated): New function. Gets called when the quick - search entry is called on to perform a search. - (make_quick_search_widget): New function; returns a "quick search" - widget. - (control_activate): During the construction of the toolbar, a - "quick search" widget is included. - -2000-04-14 Chris Toshok - - * tests/.cvsignore: add test12 - - * tests/test12.c (main): add test for nntp stuff. - - * tests/Makefile.am (noinst_PROGRAMS): same. - - -2000-04-14 Christopher James Lahey - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h, - addressbook/backend/pas/pas-backend-file.c, - addressbook/backend/pas/pas-backend-ldap.c, - addressbook/contact-editor/e-contact-editor.c: Added a note field. - -2000-04-15 Ettore Perazzoli - - * addressbook/backend/ebook/e-card-cursor.h: #include - "addressbook/backend/ebook" to make sure we pick up the right - addressbook.h. Butt ugly, but at least it makes it possible for - me to build Evolution. - - * addressbook/gui/minicard/Makefile.am (INCLUDES): Use - `$(builddir)' so that we pick up the IDL-generated includes - correctly. - * addressbook/backend/pas/Makefile.am: Likewise. Also use - `$(srcdir)'. - - * addressbook/backend/ebook/Makefile.am: Use `$(srcdir)' so that - it works with builddir != srcdir. - * addressbook/backend/pas/Makefile.am: Likewise. - -2000-04-14 Chris Toshok - - * addressbook/backend/pas/pas-backend-ldap.c - (pas_backend_ldap_ensure_connected): don't ldap_simple_bind_s if - the ldap_open failed, and fix warnings. - (pas_backend_ldap_build_all_cards_list): don't do search if the - ensure_connected failed, and fix warnings. - (pas_backend_ldap_search): same. - (poll_ldap): fix warnings. - (pas_backend_ldap_process_get_book_view): same. - (pas_backend_ldap_get_vcard): same. - (pas_backend_ldap_load_uri): same. - - * configure.in: quiet configure in the case where it can't find - ldap libs. - -2000-04-13 Christopher James Lahey - - * addressbook/contact-editor/e-contact-editor.c (extract_info): - Check for 0 length fields when building the outgoing ECard. - -2000-04-13 Christopher James Lahey - - * addressbook/backend/pas/pas-book-view.c: Give correct warnings. - - * addressbook/backend/ebook/e-card.c (e_card_set_arg): g_strdup - url and title. - -2000-04-13 Chris Toshok - - * addressbook/contact-editor/e-contact-editor.c - (fill_in_info): reflect the title attribute in the contact editor. - (extract_info): same. - - * addressbook/backend/pas/pas-backend-ldap.c: add the title attribute. - - * addressbook/gui/minicard/test-reflow.c: add a title. - - * addressbook/gui/minicard/e-minicard.c (remodel): add support for - the title attribute. - - * addressbook/backend/ebook/e-card.c (e_card_get_vcard): save out - the title to the vcard. - - * addressbook/backend/ebook/test-card.c: add title field foo to - the test. - - * addressbook/backend/ebook/e-card.c: reflect the title field. - - * addressbook/backend/ebook/e-card.h: un-#if 0 the title field. - - * addressbook/backend/pas/pas-backend-ldap.c (poll_ldap): new - function that polls ldap for more search responses. - (pas_backend_ldap_search): use the async search interface and - register an idle call to poll for the responses. - (view_destroy): make sure to g_source_remove the idle id. - -2000-04-12 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c (entry_compare): - rework this function to use a table mapping search field names to - vcard properties and extra information (such as whether or not the - property is a list.) - - * addressbook/backend/pas/pas-backend-ldap.c - (construct_email_list): new function, to build the ECardList for - email addresses. - (construct_phone_list): new function, to build the ECardList for - phone numbers. - (pas_backend_ldap_search): use a table mapping ldap attributes to - ecard properties, and use the special list construction functions - if the property calls for it. general cleanup. added a comment - about not calling ber_free if there was a decoding error. - - -2000-04-12 Matt Loper - - * art/Makefile.am: Add tigert's contact-dlg-related images. - - * addressbook/contact-editor/e-contact-editor.c (_add_images): Add - tigert's images. - - * addressbook/contact-editor/Makefile.am: add EVOLUTION_IMAGES. - -2000-04-12 Tuomas Kuosmanen - - * art/house.png, art/malehead.png, art/cellphone.png, - art/briefcase.png, art/envelope.png, art/globe.png: - New icons for the contact manager.. more to follow once I get - around to do more artist work.. - -2000-04-12 Chris Toshok - - * addressbook/backend/pas/pas-backend-ldap.c - (pas_backend_ldap_build_all_cards_list): delay the setting of the - ldap variable until we've ensured we were connected. Also, set - the search limit to LDAP_MAX_SEARCH_RESPONSES (we'll eventually - want a user setting here i assume.) - (pas_backend_ldap_search): same here, and also send back lists of - CARDS_PER_VIEW_NOTIFICATION length in each - pas_book_view_notify_add call. also, don't call ber_free if there - was a decoding error, since the ldap library frees it for us. - -2000-04-11 Miguel de Icaza - - * configure.in (have_pthread): Properly use AC_ARG_WITH - -2000-04-11 Chris Toshok - - * wombat/Makefile.am (wombat_LDADD): add LDAP_LIBS here. - - * configure.in: check for -lldap and -llber and if both are - present include ldap support in the pas/wombat. - - * addressbook/backend/pas/Makefile.am (libpas_la_SOURCES): include - pas-backend.ldap.c if ENABLE_LDAP. - - * addressbook/backend/pas/pas-backend-ldap.c: get searching - working (converting between the sexp and ldap stuff.) - - * wombat/wombat.c (setup_pas): register the ldap pas backend if - HAVE_LDAP is defined. - -2000-04-11 Christopher James Lahey - - * configure.in: Changed AC_DEFUN to AC_DEFINE. - - * acconfig.h: Added HAVE_TIMEZONE and HAVE_TM_GMTOFF. - -2000-04-11 Chris Toshok - - * configure.in: check for timezone as a variable (as it is in - linux, but not in freebsd or netbsd.) - -2000-04-11 Larry Ewing - - * widgets/e-table/e-cell-toggle.c (etog_draw): update for new - gdk-pixbuf. Added a disabled chuck of code to do alpha blending - on pixmaps. - -2000-04-11 Christopher James Lahey - - * widgets/e-text/e-text.c: Moved some logic a bit. Minor changes. - -00-04-11 Iain Holmes - - * widgets/e-text/e-text.c - (e_text_set_args): Recalculate bounds when width or clip_width changes. - (tooltip_event): Forward clicks on the tooltip onto the text item. - (_do_tooltip): Correct the origin co-ordinates to the items co-ords. - (e_text_point): Return 0 when the mouse is on the item. - (_do_tooltip): Make the tooltip obey the parent items - line_wrap and max_lines. - -00-04-11 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (get_e_card_prop): new function, taking code from func_contains to - get string properties. - (entry_compare): new function generic, taking strstr-like function - as a parameter. - (func_contains): rewrite function to use entry_compare. - (is_helper): new helper function to map strcmp to a strstr-like - function. - (func_is): new function, implementing "is" for searches. - (endswith_helper): new function. - (func_endswith) new function, implementing "endswith" for - searches. - (beginswith_helper): new function. - (func_beginswith): new function, implementing "beginswith" for - searches. - (compare_email): new function for searching all email addresses of - a contact. - (compare_phone): new function for searching all phone numbers of a - contact. - (compare_address): new function for searching all addresses of a - contact (unimplemented as yet). - (entry_compare): add support for searching the list items "email", - "phone" and "address". - (vcard_matches_search): free the esexp_result. - (entry_compare): we want comparison functions to take 2 args. - -2000-04-11 Christopher James Lahey - - * addressbook/gui/minicard/e-minicard-view.c: This was setting - E_REFLOW(view)->items to NULL too soon. Fixed now. - -2000-04-11 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_search): remove spew. - (pas_backend_file_process_create_card): move the sync to the - earliest possible point after the db operation. - (pas_backend_file_process_remove_card): same. - (pas_backend_file_process_modify_card): same, and call - pas_book_respond_modify, not pas_book_respond_remove, here. - - * addressbook/gui/component/addressbook.c (card_deleted_cb): new - function. - (delete_contact_cb): wire up button to call - e_minicard_view_remove_selection. - - * addressbook/gui/minicard/e-minicard-view.c - (e_minicard_view_remove_selection): fix warning, and stick "view" - in the name. - -2000-04-10 Christopher James Lahey - - * addressbook/backend/ebook/e-book-view.c, - addressbook/backend/ebook/e-book.c: Changed some incorrect - gtk_object_refs and gtk_object_unrefs into bonobo_object_refs and - bonobo_object_unrefs. - - * addressbook/backend/pas/pas-card-cursor.c: Changed a - gtk_object_destroy to a gtk_object_unref. - - * addressbook/gui/minicard/e-minicard-view.c, - addressbook/gui/minicard/e-minicard-view.h: Set a list pointer to - NULL after freeing its contents. Added - e_minicard_view_remove_selection function. - - * addressbook/gui/minicard/e-reflow.c: Set a list pointer to NULL - after freeing its contents. - -2000-04-11 Chris Toshok - - * addressbook/gui/component/addressbook.c (find_contact_cb): - implement braindead dialog to input the query string for the view. - - also, change all callbacks to get the EMinicardView instead of the - EBook. - - * addressbook/gui/minicard/e-minicard-view.c - (e_minicard_view_get_arg): add missing break. - -2000-04-10 Christopher James Lahey - - * addressbook/gui/minicard/e-minicard-view.c, - addressbook/gui/minicard/e-minicard-view.h: Added a "query" - argument to the e-minicard-view. Documented all the arguments to - the e-minicard-view. - -2000-04-10 Chris Toshok - - * addressbook/gui/minicard/e-minicard-view.c (get_view): change - the empty search string ("") to the valid (contains "full_name" ""). - - * wombat/Makefile.am (wombat_LDADD): reorder so libeutil.la comes - after libpas (since it uses the sexp stuff now.) - - * addressbook/backend/pas/Makefile.am (INCLUDES): add - -I$(top_srcdir)/addressbook/backend/ebook - - * addressbook/backend/pas/pas-backend-file.c - (view_destroy): free the search context and unref the sexp. - (string_to_dbt): save the zero byte of strings, so we don't have - to g_strndup everywhere. - (func_contains): new function, implementing the (contains) search - function. - (vcard_matches_search): generic predicate to tell whether or not a - vcard entry matches the current book view. - (pas_backend_file_search): rip some of this code out of - get_book_view (the portion building the list of cards) and make it - use the e-sexp stuff. - (pas_backend_file_process_create_card): use vcard_matches_search - to only notify if the card will appear in the view. - (pas_backend_file_process_remove_card): use vcard_matches_search - to only notify if the card will be removed from the view. - (pas_backend_file_process_modify_card): use vcard_matches_search - to notify if the modified card was added, removed, or changed in - the view. - -2000-04-10 Miguel de Icaza - - * configure.in (GNOME_PRINT_CFLAGS): Update to support - --disable-threads correctly. - -2000-04-10 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_process_get_book_view): use view != NULL instead - of checking db_error when we call pas_book_respond_get_book_view) - -2000-04-10 Dan Winship - - * configure.in: check for mkstemp - -2000-04-10 Damon Chaplin - - * configure.in (AC_OUTPUT): removed libical stuff since it has its - own configure.in. - -2000-04-10 Christopher James Lahey - - * addressbook/backend/ebook/e-book-view.c: Fixed a bug where I was - sending the wrong information to some callbacks. - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h: Added an e_card_duplicate - function. Made ids get stored in vcards. Made sure to delete the - url if it exists. - - * addressbook/backend/pas/Makefile.am: Made pas include - addressbook/backend/ebook/ in the search path. - - * addressbook/backend/pas/pas-backend-file.c: Fixed some bugs and - made the create card function store the generated id in the card - being saved. - - * addressbook/backend/pas/pas-book-view.c: Fixed a double free - bug. - - * addressbook/contact-editor/e-contact-editor.c: Fixed some bugs. - Made the contact editor actually return a valid card when - gtk_object_get(editor, "card", ...) is called. - - * addressbook/contact-editor/e-contact-editor.h: Fixed a copy and - paste error. - - * addressbook/gui/component/addressbook.c: Made this get the card - properly. - - * addressbook/gui/minicard/Makefile.am: Made this include - contact-editor directory in the search path and link against - libecontacteditor so that double clicking can open a dialog. - - * addressbook/gui/minicard/e-minicard.c: Fixed some small bugs. - Made double clicking open a contact editor dialog if this minicard - is contained in a minicard view. (It needs the minicard view to - get the EBook to save to. - - * wombat/Makefile.am: Link wombat against libebook, since - pas-backend-file now uses ECard. - -2000-04-09 Matt Loper - - * addressbook/gui/component/addressbook.c (control_activate): Make - "New Contact" menuitem add a card with new_contact_cb(). - - * addressbook/Makefile.am: Compile contact-editor, _then_ gui, - since the gui now depends on the contact editor (shouldn't the - contact-editor directory be moved into 'gui'?). - - * addressbook/gui/component/addressbook.c (card_added_cb): New - function. Gets called when a card is successfully added via the - contact-editor. - (new_contact_cb): New function. Gets called when a user clicks the - "new contact" button on the toolbar, and creates a contact-editor - to edit a new contact entry. - (control_activate): Call gnome_app_fill_toolbar_with_data() - instead of gnome_app_fill_toolbar(), so that our toolbar can find - the right book to add a new card to. - (addressbook_factory): On an "activate" signal, send the book up - to control_activate_cb. - - * addressbook/gui/component/addressbook-factory.c (init_bonobo): - Call glade_gnome_init(), so that our contact-editor (which - requires glade) doesn't barf. - - * addressbook/gui/component/Makefile.am: added the contact-editor - to our libraries and include files. - - * addressbook/contact-editor/e-contact-editor.c - (e_contact_editor_new): Set "card" gtk property to the passed-in - card property. - - * addressbook/gui/component/addressbook.c (addressbook_factory): - Added gtk_widget_push/pop_colormap/visual, which I assume is - necessary for canvas use. - -2000-04-08 Christopher James Lahey - - * addressbook/contact-editor/Makefile.am, - addressbook/contact-editor/e-contact-editor.c, - addressbook/contact-editor/e-contact-editor.h, - addressbook/contact-editor/test-editor.c: Made the contact editor - load from an ECard. - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h, - addressbook/gui/minicard/e-minicard.c: Added support for the URL - field. - -2000-04-08 Christopher James Lahey - - * addressbook/backend/ebook/e-card.c (e_card_get_vcard): Fixed a - small typo. - -2000-04-08 Dan Winship - - * art/Makefile.am: pixmap_DATA should have been images_DATA (after - pixmapdir was renamed to imagesdir) - -2000-04-08 Christopher James Lahey - - * addressbook/gui/minicard/.cvsignore, - addressbook/gui/minicard/Makefile.am, - addressbook/gui/minicard/e-minicard-view.c, - addressbook/gui/minicard/e-minicard-view.h, - addressbook/gui/minicard/e-minicard.c, - addressbook/gui/minicard/e-minicard.h, - addressbook/gui/minicard/e-reflow-sorted.c, - addressbook/gui/minicard/e-reflow-sorted.h, - addressbook/gui/minicard/e-reflow.c, - addressbook/gui/minicard/e-reflow.h, - addressbook/gui/minicard/test-minicard-view.c, - addressbook/gui/minicard/test-reflow.c, - widgets/e-minicard/.cvsignore, widgets/e-minicard/Makefile.am, - widgets/e-minicard/e-minicard-label.c, - widgets/e-minicard/e-minicard-label.h, - widgets/e-minicard/e-minicard-view.c, - widgets/e-minicard/e-minicard-view.h, - widgets/e-minicard/e-minicard.c, widgets/e-minicard/e-minicard.h, - widgets/e-minicard/e-reflow-sorted.c, - widgets/e-minicard/e-reflow-sorted.h, - widgets/e-minicard/e-reflow.c, widgets/e-minicard/e-reflow.h, - widgets/e-minicard/test-minicard-label.c, - widgets/e-minicard/test-minicard-view.c, - widgets/e-minicard/test-minicard.c, - widgets/e-minicard/test-reflow.c: CVS move mistake. Fixed the - correct changes in the correct places. - -2000-04-08 Christopher James Lahey - - * art/Makefile.am: pixmap_DATA isn't defined so don't use it as a variable. - - * addressbook/gui/component/, - addressbook/gui/component/.cvsignore, addressbook/gui/Makefile.am, - addressbook/gui/component/addressbook-factory.c, - addressbook/gui/component/addressbook.c, - addressbook/gui/component/addressbook.gnorba, - addressbook/gui/component/addressbook.h: New directory to proivde - the component for contact management. Simply uses an e-minicard-view. - - * addressbook/gui/minicard/e-minicard-view.c, - addressbook/gui/minicard/e-minicard-view.h: New subclass of - e-reflow-sorted that takes an EBook and uses it to compute the - card data to display. - - * addressbook/gui/minicard/e-minicard.c, - addressbook/gui/minicard/e-minicard.h: This now backends to a - ECard instead of a ETableModel. - - * addressbook/gui/minicard/e-reflow.c, - addressbook/gui/minicard/e-reflow.h: This now has a virtualized - add method. - - * addressbook/gui/minicard/e-reflow-sorted.c, - addressbook/gui/minicard/e-reflow-sorted.h: New subclass of - e-reflow that allows the data to be sorted on the fly. - - * addressbook/gui/minicard/test-minicard-view.c: New test to test - the new minicard view. - - * addressbook/gui/minicard/test-reflow.c: Uses the new ECard - backend of the e-minicard. - - * addressbook/gui/minicard/.cvsignore, - addressbook/gui/minicard/Makefile.am: Added new test. Fixed - dependencies. Added new files. - - * addressbook/gui/, addressbook/gui/Makefile.am, - addressbook/gui/.cvsignore: New directory for addressbook gui - bits. Added subdirectories. Created an initial .cvsignore. - - * addressbook/Makefile.am (SUBDIRS): Removed demo and added gui. - - * addressbook/backend/pas/pas-backend-file.c: Added code to do - notification on bookviews when changes in the backend are made. - - * addressbook/backend/pas/pas-book-view.c, - addressbook/backend/pas/pas-book-view.h: Added helper functions to - notify the view about the addition or modification of a single - card. Fixed a mistaken extra free. - - * addressbook/backend/ebook/e-card-list-iterator.h: Fixed - incorrect parent class. - - * addressbook/backend/ebook/test-client.c: Made this accept an - optional parameter that specifies the vcard to add. - - * configure.in: Replaced widgets/e-minicard/Makefile and - addressbook/demo/Makefile with addressbook/gui/minicard/Makefile - and addressbook/gui/component/Makefile respectively. - - * widgets/Makefile.am: Removed e-minicard since it's being moved - to addressbook/gui/minicard. - - * widgets/e-text/e-text.c: Fixed the border width around tooltips - and made the main tooltip area yellow. - -2000-04-08 Dan Winship - - * configure.in, acconfig.h: add SYSTEM_MAIL_DIR - -2000-04-08 Jesus Bravo Alvarez - - * configure.in (ALL_LINGUAS): Added Galician (gl). - -2000-04-07 Jeffrey Stedfast - * configure.in: Modified to create camel/providers/smtp/Makefile - -2000-04-07 Christopher James Lahey - - * widgets/e-text/e-text.c: Made text tooltips appear in place. - Iain figured out that to get them to not appear, we hide the - tooltip when the mouse leaves the tooltip window, not the canvas - item (this works because the tooltip window always covers the - canvas item completely.) - -2000-04-07 Matt Loper - - * addressbook/demo/addressbook.c (control_activate_cb): New - function. Called when the control is (de)activated. - (control_activate): New function; called when the control is - activated, and sets up toolbar/menu times. - (control_deactivate): New function; removes those toolbar/menu - items. - (do_nothing_cb): Does nothing :-) - (addressbook_factory): Hook up to control_activate_cb(). - -2000-04-07 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_process_get_book_view): correctly (well, - untested) implement. - (view_destroy): new function. - -2000-04-06 Christopher James Lahey - - * addressbook/demo/demo.c, addressbook/demo/addressbook-widget.c: - Changed calls to e_cell_text_new to match new function signature. - -2000-04-06 Miguel de Icaza - - * art/Makefile.am (images_DATA): Renamed from pixmaps to images. - -2000-04-05 Matt Loper - - * README: Added wombat. - -2000-04-04 Christopher James Lahey - - * widgets/e-text/e-text-test.c: Got rid of some runtime errors. - Changed to "fixed" font so that it will work on everyone's - machine. Added a white background rectangle. Made resizing the - window resize the contained text item. Changed to using affines - (e_canvas_item_move_absolute) instead of "x" and "y" attributes. - Set the text in the entries so that they match the original values - of the displayed text object. - -2000-04-04 Christopher James Lahey - - * widgets/e-minicard/e-minicard.c: Fixed some referencing and - lifetime issues. - -2000-04-04 Christopher James Lahey - - * widgets/e-text/e-text.c: Removed an unnecessary get_bounds call. - - (From a patch by Iain Holmes ) - - * widgets/e-text/e-text.c: Made tooltips look more like the - underlying text. Made tooltips show up more consistently. - -2000-04-04 Christopher James Lahey - - * addressbook/demo/Makefile.am, addressbook/demo/e-test-model.c, - addressbook/demo/e-test-model.h: Changed this to backend to an - ebook. - - * addressbook/backend/ebook/e-card-iterator.c, - addressbook/backend/ebook/e-card-iterator.h, - addressbook/backend/ebook/e-card-list-iterator.c, - addressbook/backend/ebook/e-card-list.c, - addressbook/backend/ebook/e-card-list.h, - addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h: Fixed const correctness and - changed a couple of functions to be external. - - * addressbook/Makefile.am: Fixed subdir ordering. - -2000-04-04 Christopher James Lahey - - * addressbook/backend/ebook/e-book-view.c: Fixed an incorrect - function. - - * addressbook/backend/ebook/e-book-view.h, - addressbook/backend/ebook/e-book.h: Fixed some incorrect function - pointer declarations. - - * addressbook/backend/ebook/e-card-iterator.c, - addressbook/backend/ebook/e-card-iterator.h, - addressbook/backend/ebook/e-card-list-iterator.c, - addressbook/backend/ebook/e-card-list-iterator.h, - addressbook/backend/ebook/e-card-list.c, - addressbook/backend/ebook/e-card-list.h, - addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h, - addressbook/backend/ebook/test-card.c: Built new iterator system - for getting fields with multiple entries. - - * addressbook/backend/ebook/Makefile.am: Added new files - addressbook/backend/ebook/e-card-iterator.c, - addressbook/backend/ebook/e-card-iterator.h, - addressbook/backend/ebook/e-card-list-iterator.c, - addressbook/backend/ebook/e-card-list-iterator.h, - addressbook/backend/ebook/e-card-list.c, and - addressbook/backend/ebook/e-card-list.h. - -2000-04-04 Yuri Syrota - - * configure.in: Added uk to ALL_LINGUAS. - -2000-04-04 Andreas Hyden - - * configure.in: Added no and sv to ALL_LINGUAS. - -2000-04-03 Christopher James Lahey - - * addressbook/backend/ebook/e-card-cursor.h, - addressbook/backend/ebook/e-card.c: A bit of clean up. - - * addressbook/backend/ebook/e-book-types.h, - addressbook/backend/ebook/e-book-view-listener.c, - addressbook/backend/ebook/e-book-view-listener.h, - addressbook/backend/ebook/e-book-view.c, - addressbook/backend/ebook/e-book-view.h, - addressbook/backend/pas/pas-book-view.c, - addressbook/backend/pas/pas-book-view.h: New files for live views. - - * addressbook/backend/ebook/Makefile.am, - addressbook/backend/ebook/e-book-listener.c, - addressbook/backend/ebook/e-book-listener.h, - addressbook/backend/ebook/e-book.c, - addressbook/backend/ebook/e-book.h, - addressbook/backend/ebook/test-client-list.c, - addressbook/backend/ebook/test-client.c, - addressbook/backend/pas/pas-backend-file.c, - addressbook/backend/pas/pas-book.c, - addressbook/backend/pas/pas-book.h, - addressbook/backend/idl/addressbook.idl: Added live views and - searching to the interface (neither is working yet.) - -2000-04-01 Matt Loper - - * tests/.cvsignore: Added test-movemail. - - * art/.cvsignore: New file. - -2000-03-31 Christopher James Lahey - - * addressbook/demo/demo.c, addressbook/demo/addressbook-widget.c: - Added some missing gtk_object_refs. - -2000-03-30 Matt Loper - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_build_all_cards_list): Get first card (with - R_FIRST) on first seq(). - -2000-03-30 Chris Toshok - - * addressbook/backend/pas/pas-backend-ldap.h: new-file - * addressbook/backend/pas/pas-backend-ldap.c: new file - -2000-03-30 Dan Winship - - * configure.in: - * Makefile.am: - * art/Makefile.am: install new shortcut bar pixmaps. - -2000-03-30 Tuomas Kuosmanen - - * art/evolution-calendar.png art/evolution-inbox.png - art/evolution-tasks.png art/evolution-contacts.png - art/evolution-notes.png evolution-today.png: - added some artwork for the main shortcutbar.. someone - could stick them in it. - -2000-03-29 Christopher James Lahey - - * addressbook/backend/ebook/e-card-cursor.c: Fixed management of - the corba-cursor object by calling CORBA_Object_duplicate on it on - e-card-cursor creation and calling CORBA_Object_release on - e-card-cursor destruction. Also, properly free string returned - from Evolution_CardCursor_get_nth function. - -2000-03-29 Matt Loper - - * addressbook/backend/ebook/test-client.c (get_cursor_cb): Added - some debugging. - - * addressbook/backend/ebook/e-book-listener.c: Added inline - documentation for exposed functions. - * addressbook/backend/ebook/e-card-cursor.c: same. - * addressbook/backend/ebook/e-card.c: same. - - * Makefile.am: add calendar compilation back in. - - * addressbook/backend/pas/pas-book-factory.c - (PAS_BOOK_FACTORY_GOAD_ID): changed to - "evolution:addressbook-server". - - * addressbook/backend/pas/Makefile.am: no need to install a - .gnorba file from here, as the wombat.gnorba file in - evolution/wombat will do its job. - - * addressbook/backend/ebook/test-client.c (ebook_create): if - ebook_new fails, print a warning and return. - - * addressbook/backend/ebook/e-book.c (CARDSERVER_GOAD_ID): changed - to "evolution:addressbook-server". - - * wombat/wombat.c: Changed headerfile path. - - * wombat/Makefile.am: Use relative paths to libraries in the build - tree, rather than requiring libraries (such as libpcs) to already - be installed. - -2000-03-28 Matt Loper - - * wombat/Makefile.am: new file. - - * wombat/wombat.gnorba: Cleaned up. - - * wombat/wombat.c (setup_pcs): filled in the rest. - - * Makefile.am: added wombat. - - * wombat/wombat.gnorba: new file. - - * wombat/.cvsignore: new file. - - * wombat/wombat.c (setup_pcs): fill out this function some. - - * configure.in: added wombat. - -2000-03-28 Chris Toshok - - * addressbook/backend/pas/pas-card-cursor.c (create_cursor): use - g_new0 to allocate the BonoboObjectServant. - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_build_all_cards_list): remove unnecessary - strdup/free. - -2000-03-28 Christopher James Lahey - - * addressbook/backend/pas/pas-backend-file.c: Removed an infinite - loop. - - * addressbook/backend/ebook/test-client-list.c: New test that - doesn't add an extra database item. - - * addressbook/backend/ebook/Makefile.am, - addressbook/backend/ebook/.cvsignore: Added test-client-list. - -2000-03-28 Christopher James Lahey - - * addressbook/backend/pas/pas-card-cursor.c: Fixed memory - allocation. - - * addressbook/backend/pas/pas-backend-file.c: Fixed memory - allocation. Made database stuff not do an extra entry. - - * addressbook/backend/ebook/test-client.c: Add test for - get_all_cards functionality. Changed database name to test.db. - - * addressbook/backend/ebook/e-card-cursor.c: Changed bonobo_object - to gtk_object in a couple of places. - -2000-03-28 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_create_unique_id): create id's for entries using - the following format: ("pas-id-%08lX%08X", time(NULL), c++). - -2000-03-27 Dan Winship - - * tests/test-movemail.c: new test program. Can be used to copy POP - mail into your evolution inbox. - -2000-03-27 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_get_vcard): remove unneeded g_strdup; - (get_length): implement function. - (get_nth): implement function. - (cursor_destroy): free up the internal glist of vcards, and fix - warning. - (pas_backend_file_build_all_cards_list): new function, to build up - the list of cards in the db. - (pas_backend_file_process_get_all_cards): call - pas_backend_file_build_+all_cards_list, and fix warning. - -2000-03-27 Christopher James Lahey - - * addressbook/backend/ebook/test-card.c: Fixed some warnings. - - * addressbook/backend/ebook/test-client.c: Added a section to test - cursors and returning an id when adding. - - * addressbook/backend/ebook/e-card-pairs.h: Removed the address - pairs since they were added to e-card.c. - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h: Made the set_id function take - a const char *. - - * addressbook/backend/ebook/e-book-listener.c, - addressbook/backend/ebook/e-book-listener.h, - addressbook/backend/ebook/e-book.c, - addressbook/backend/ebook/e-book.h, - addressbook/backend/idl/addressbook.idl, - addressbook/backend/pas/pas-backend-file.c, - addressbook/backend/pas/pas-book.c, - addressbook/backend/pas/pas-book.h: Added a get_all_cards function - and made the response to the create_card function include the card - id. - - * addressbook/backend/ebook/Makefile.am: Added e-card-cursor.c and - e-card-cursor.h. - - * addressbook/backend/ebook/e-card-cursor.c, - addressbook/backend/ebook/e-card-cursor.h: New class for proxying - to an Evolution_CardCursor. - - * addressbook/backend/pas/Makefile.am: Added pas-card-cursor.c and - pas-card-cursor.h. - - * addressbook/backend/pas/pas-card-cursor.c, - addressbook/backend/pas/pas-card-cursor.h: New bonobo class for - making an Evolution_CardCursor server. - -2000-03-27 NotZed - - * tests/test9.c (main): This test is basically now invalid. - * tests/test11.c (main): Fix for async search api. Probably works. - Removed camel-mbox-*.h headers, should be private. - -2000-03-27 Tuomas Kuosmanen - * art/attachment.xpm art/mail-new.xpm art/mail-read.xpm - art/mail-replied.xpm art/mark.xpm art/meeting.xpm - art/priority-high.xpm art/priority-low.xpm - - Added some new icons for the message-list view.. - -2000-03-26 Chris Toshok - - * configure.in: check for db_185.h (present in newer db - distributions.) - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_create_unique_id): new function. - (pas_backend_file_process_create_card): call - pas_backend_file_create_unique_id and pas_book_notify_add (if the - db->put was successful). also, sync out db. - (pas_backend_file_process_remove_card): call - pas_book_notify_remove if the db->del was successful, and sync out - db. - (pas_backend_file_process_modify_card): call - pas_book_notify_change if db->put was successful, and sync out db. - (string_to_dbt): new function. - (pas_backend_file_process_create_card): use string_to_dbt - (pas_backend_file_process_remove_card): likewise - (pas_backend_file_process_modify_card): likewise - (pas_backend_file_get_vcard): likewise - (pas_backend_file_upgrade_db): new function, to upgrade a db file - if we change the data format. - (pas_backend_file_maybe_upgrade_db): check db version vs. current - code version, and upgrade it necessary. - (pas_backend_file_load_uri): call pas_backend_file_maybe_upgrade. - -2000-03-26 Christopher James Lahey - - * addressbook/backend/ebook/test-client.c: Load an ECard instead - of a VCard and then get the VCard from that ECard. Just tests - ECard and the client stuff at the same time. Also, replaces - carriage returns with newlines. - - * addressbook/backend/ebook/e-book.c: Fixed a small parity error. - -2000-03-25 Chris Toshok - - * addressbook/backend/ebook/test-client.c: create a card and then - look it up. - -2000-03-26 Chris Toshok - - * addressbook/backend/pas/pas-backend-file.c - (pas_backend_file_process_create_card): add db calls to flesh out - the interface. hardcoded id that needs to change, once we decide - how we're going to create it. - (pas_backend_file_process_remove_card): add db calls to flesh out - the interface. - (pas_backend_file_process_modify_card): likewise - (pas_backend_file_process_check_connection): likewise - (pas_backend_file_get_vcard): likewise - (pas_backend_file_load_uri): likewise - -2000-03-26 Christopher James Lahey - - * addressbook/backend/ebook/e-book.c: Set the card id properly - when retrieving a card. - -2000-03-22 NotZed - - * e-util/e-sexp.h: Formatting cleanup. - -2000-03-07 NotZed - - * e-util/Makefile.am (libeutil_la_SOURCES): s-sexp.h -> e-sexp.h. - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h: Added the ability to set the - card's id (and made getting it work correctly also.) - -2000-03-25 Chris Toshok - - * addressbook/backend/ebook/e-book.c (e_book_pop_op): pass GList* - as second parameter to g_list_remove_link, not the data pointer. - -2000-03-26 Christopher James Lahey - - * addressbook/backend/ebook/e-card-types.h: Removed the - address->description field. - - * addressbook/backend/ebook/e-card.c: Added VCard output and - the use of GtkArguments. - - * addressbook/backend/ebook/test-card.c: Updated this to use the - GtkArguments. - - * addressbook/backend/ebook/e-book.c: Fixed a memory leak. - -2000-03-25 Matt Loper - - * ebook/e-book.c, - ebook/e-book.h, - ebook/e-book.h, - ebook/e-card-fields.h, - ebook/e-card.h, - ebook/e-commerce.h: old, removed. Up-to-date EBook stuff is kept - in addressbook/backend/ebook. - -2000-03-23 Christopher James Lahey - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h, - addressbook/backend/ebook/e-card-types.h, - addressbook/backend/ebook/e-card-pairs.h, - addressbook/backend/ebook/test-card.c: Added parsing and testing - for name, full name, birthday, telephone, email, and street - address properties. - -2000-03-22 Christopher James Lahey - - * addressbook/backend/ebook/.cvsignore, - addressbook/backend/pas/.cvsignore, - addressbook/backend/idl/.cvsignore, - addressbook/backend/.cvsignore: Updated .cvsignore files. - -2000-03-22 Christopher James Lahey - - * addressbook/Makefile.am, configure.in: Added the - addressbook/backend directory. - - * addressbook/backend/Makefile.am: Removed the libversit directory - as it's now included in the base evolution directory. - - * addressbook/backend/ebook/e-card-pairs.h, - addressbook/backend/ebook/Makefile.am: Changed the place where - libversit is looked for. - - * addressbook/backend/ebook/e-book-listener.c: Fixed some - indentation. - - * addressbook/backend/ebook/e-card-pairs.h, - addressbook/backend/ebook/e-card-types.h: Commented out some code - to get this to compile. - - * addressbook/backend/ebook/e-card.c, - addressbook/backend/ebook/e-card.h: Turned this into a GTK+ - object. - - * addressbook/backend/pas/pas.c, - addressbook/backend/ebook/test-client.c: Include gnome.h and - gnorba.h. - - * addressbook/backend/idl/addressbook.idl: Include Bonobo.idl - instead of bonobo-unknown.idl. - - * addressbook/backend/pas/pas-backend-file.c, - addressbook/backend/pas/pas-book.c, - addressbook/contact-editor/test-editor.c, - addressbook/contact-editor/e-contact-editor.c, - addressbook/printing/e-contact-print.c, - addressbook/printing/test-contact-print-style-editor.c, - addressbook/printing/test-print.c: Killed some warnings. - -2000-03-21 Christopher James Lahey - - * widgets/e-text/e-text.c: Changed gnome_canvas_item_grab_focus to - e_canvas_item_grab_focus. - -2000-03-21 Christopher James Lahey - - * addressbook/demo/addressbook-widget.c: Make background pixmap - get properly set to NULL. - -2000-03-20 Christopher James Lahey - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Added the - ability to access the text event processor. - -2000-03-13 Christopher James Lahey - - * addressbook/demo/addressbook-widget.c: Made the addressbook - component look in the users home directory for the addressbook.xml - file. - -2000-03-20 Matt Loper - - * tests/ui-tests/.cvsignore: added filter. - - * addressbook/demo/.cvsignore: added test-addressbook. - -2000-03-17 Elliot Lee - * calendar/cal-client/Makefile.am, - calendar/cal-util/Makefile.am, calendar/gui/Makefile.am, - calendar/pcs/Makefile.am, mail/Makefile.am, - widgets/e-text/Makefile.am: Fix for srcdir != builddir. - -2000-03-14 Dan Winship - - * Makefile.am (SUBDIRS): build shell before mail, since mail - relies on the shell idl files being compiled. - -2000-03-13 Christopher James Lahey - - * addressbook/demo/Makefile.am: Added files for addressbook bonobo - component. Changed non bonobo version to compile as - test-addressbook. - - * addressbook/demo/addressbook.c, - addressbook/demo/addressbook.gnorba, - addressbook/demo/addressbook.h, - addressbook/demo/addressbook-factory.c, - addressbook/demo/addressbook-widget.c, - addressbook/demo/addressbook-widget.h: New factory to create an - addressbook bonobo component. - -2000-03-12 Christopher James Lahey - - * widgets/e-text/.cvsignore: Added e-text-test. - - * addressbook/demo/e-test-model.c, - addressbook/demo/e-test-model.h: A model storing data in an array - of Address objects. - - * addressbook/demo/demo.c: Changed to use - addressbook/demo/e-test-model.c and - addressbook/demo/e-test-model.h. - - * addressbook/demo/Makefile.am: Added e-test-model.c and - e-test-model.h. - -2000-03-12 Christopher James Lahey - - * widgets/Makefile.am: Rearranged SUBDIRS for dependencies. - - * widgets/e-text/e-text-model.c, widgets/e-text-model.h: New - object which stores a piece of text data. All methods are - virtual. - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Modified this - to use an ETextModel for its data. - - * widgets/e-text/Makefile.am: Added e-text-model.c and e-text-model.h. - - * widgets/e-minicard/test-minicard-label.c: Made this work again. - - * widgets/e-minicard/e-minicard.c, - widgets/e-minicard/e-minicard.h: Made this use an ETableModel to - get its data. - - * widgets/e-minicard/e-minicard-label.c, - widgets/e-minicard/e-minicard-label.h: Added the ability to set - the text model used for the contained text widget. - - * widgets/e-minicard/Makefile.am: Added e-table since e-minicard - is now dependent on an e-table-model for its data. - - * addressbook/demo, addressbook/demo/.cvsignore, - addressbook/demo/Makefile.am, addressbook/demo/demo.c, - addressbook/demo/spec: A new program to test ETable and EMinicard - integration. - - * configure.in: Added addressbook/demo/Makefile. - - * addressbook/Makefile.am: Added the demo/ subdirectory. - -2000-03-10 Christopher James Lahey - - * widgets/e-minicard/e-minicard.c, - widgets/e-minicard/e-minicard-label.c, - widgets/e-minicard/e-minicard-label.h, - widgets/e-minicard/e-reflow.c, widgets/e-minicard/test-reflow.c, - widgets/e-text/e-text.c, widgets/e-text/e-text.h: Adapted to use - the new e-canvas reflow system. - -2000-03-07 Christopher James Lahey - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Added a - "break_characters" argument. It lets you define a set of - characters which should cause optional linebreaks to occur. Made - setting the "clip_height" argument to -1 mean no height clipping. - Moved calling the "resize" signal into an idle handler to avoid - reentering the canvas update loop. Made EText recalc bounds if - the affine has changed. Fixed up tooltip_count (this counts the - number of ENTER and LEAVE events.) - - * widgets/e-text/e-text-test.c: Got rid of a few warnings. - - * widgets/e-minicard/e-minicard-label.h: Reindent a few lines. - - * widgets/e-minicard/e-minicard.c, - widgets/e-minicard/e-minicard-label.c: Switch from using "x" and - "y" to set the children's position to using - e_canvas_item_move_absolute. - -2000-03-05 Matt Loper - - * tests/ui-tests/message-browser.c: Commenting added. - (on_url_data_requested): renamed from "on_url_requested", to - reflect that a stream of data is what's actually being asked for. - (hydrate_persist_stream_from_gstring): New function. - (camel_stream_to_gstring): New function. - (on_object_requested): Cleaned up. - -2000-03-04 bertrand - - * tests/ui-tests/Makefile.am: add bonobo to the build - process. - - * tests/ui-tests/message-browser.c (main): - initialize Bonobo. Use bonobo_main. - (get_gtk_html_contents_window): set signal handlers - for url requests and objects requests. - (on_object_requested): answer to object requests. - -2000-03-03 bertrand - - * tests/ui-tests/message-browser.c (main): initialize - gdkrgb. Push visual/colormap. - (on_url_requested): in the case where a camel url is requested, - write the camel stream to gtkhtml. - - * tests/ui-tests/Makefile.am (filter_LDADD): add - gnomeprint in the lib list. - -2000-03-01 Ettore Perazzoli - - * configure.in: Build `filter/Makefile'. Added check for GtkHTML. - Set `GTKHTML_CFLAGS' and `GTKHTML_LIBS' to the appropriate values - for linking with GtkHTML. - -2000-03-01 Federico Mena Quintero - - * configure.in (AC_OUTPUT): Added calendar/idl/Makefile, - calendar/cal-client/Makefile, and calendar/pcs/Makefile to the - list of files to generate. - -2000-02-29 Iain Holmes - - * widgets/e-text/e-text.c: Don't show the tooltip if the text is being - editted or isn't clipped. Remove the tooltip when editting starts. - - * widgets/e-text/Makefile.am: Build the test program - -2000-02-29 NotZed - - * tests/ui-tests/Makefile.am (filter_LDADD): Added test program. - - * tests/ui-tests/filterdescription.xml, saveoptions.xml: Data - files for test program. - - * tests/ui-tests/filter.c (main): Test program for filter ui. - -2000-02-28 NotZed - - * widgets/e-minicard/Makefile.am (INCLUDES): Fixed references to - eutil. - - * Makefile.am (SUBDIRS): Build e-util before other stuff. - (SUBDIRS): Build filter after camel. - -2000-02-28 Chris Lahey - - * widgets/e-text/e-text.c: Compilation error. - -2000-02-28 Chris Lahey - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Updated these - to use the canvas ::update system properly. - -2000-02-24 Dan Winship - - * acconfig.h: - * configure.in: define SENDMAIL_PATH with the path to sendmail. - -2000-02-24 Christopher James Lahey - - * widgets/e-text.c, widgets/e-text.h, e-text-event-processor.c, - e-text-event-processor.h, e-text-event-processor-emacs-like.c, - e-text-event-processor-emacs-like.h, - e-text-event-processor-types.h: This were moved to widgets/e-text/ - a while ago but never removed. They have now been removed. - - * widgets/e-text/e-text.c, widgets/e-text/e-text.h: Removed some - warnings from this file. Made tooltips disappear when you're - finished with them. - - * widgets/e-minicard/test-reflow.c, - widgets/e-minicard/test-minicard.c, - widgets/e-minicard/test-minicard-label.c: Commented out unused - about_callback functions. - - * widgets/e-minicard/e-reflow.c: Made e-reflow pass an EFocus to - its e-minicard children. - - * widgets/e-minicard/e-minicard.c: Made e-minicard take and return - an EFocus for its "has_focus" argument. This makes shift-tab work properly. - - * widgets/e-minicard/e-minicard-label.c: Made e-minicard-label take and return - an EFocus for its "has_focus" argument. Made the font that - e-minicard-label uses only be allocated once. - -2000-02-21 Matt Loper - - * tests/ui-tests/message-browser.c (on_link_clicked): stop - sscanf() abuse. - - * tests/Makefile.am: changed references to libibex.a to - libibex.la. - - * libical/src/libical/.cvsignore: Added *.lo, *.la, and .libs. - * libical/src/libicalss/.cvsignore: same. - - * tests/.cvsignore: Added test11. - - * libical/Makefile.in: autogenerated file removed from cvs, and - added to .cvsignore. - * libical/src/Makefile.in: same. - * libical/src/libical/Makefile.in: same. - * libical/src/libicalss/Makefile.in: same. - -2000-02-22 bertrand - - * tests/ui-tests/message-browser.c (on_link_clicked): - uggly hack to test part saving and - b64 streams. - -2000-02-21 Dan Winship - - * tests/test10.c: - * tests/test11.c: update for camel changes - -2000-02-20 Matt Loper - - * tests/Makefile.am: Changed dependencies on libibex.la to - libibex.a. In test9_LDADD, placed libcamelmbox.la before - libibex.la, as the former requires the latter. - -2000-02-20 Iain Holmes - - * widgets/e-text/e-text.[ch] (_do_tooltip): Show the text of the item, - in a tooltip style. - (e_text_event): Add a timeout on the Enter and remove it on the Leave - events. - - * e-text-test.c: New file to test e-text items. - -2000-02-20 Matt Loper - - * .cvsignore: added ABOUT-NLS. - * ABOUT-NLS: removed. - -2000-02-19 Matt Loper - - * tests/ui-tests/message-browser.c (on_link_clicked): When a link - is clicked, indicate the link with a dialog. - - * libical/src/test/.cvsignore: Added Makefile. - - * libical/.cvsignore: Added Makefile, configure, config.status. - - * libical/src/.cvsignore: New file. - - * libical/Makefile: autogenerated file removed from cvs. - * libical/configure: same. - * libical/config.status: same. - * libical/src/Makefile: same. - * libical/src/test/Makefile: same. - - * widgets/e-minicard/.cvsignore: Added minicard-label-test, - minicard-test, and reflow-test. - - * shell/.cvsignore: added files autogenerated from Evolution.idl. - - * libversit/.cvsignore: Added .libs, vcc.c, vcc.lo, vobject.lo, - vcaltmp.lo, libversit.la - - * libical/src/test/.cvsignore: New file. - - * libical/src/libical/.cvsignore: New file. - - * libical/src/libicalss/.cvsignore: New file. - - * libical/.cvsignore: New file, with config.log in it. - - * tests/ui-tests/message-browser.c: minor cleanup. - - * tests/ui-tests/.cvsignore: added message-browser. - -2000-02-18 NotZed - - * tests/test11.c (main): Use a relative path to the mbox provider - module. - -2000-02-18 Matt Loper - - * tests/ui-tests/message-browser.c (filename_to_camel_msg): Call - camel_data_wrapper_set_input_stream, rather than - camel_data_wrapper_construct_from_stream. For the whole message, - allow someone to see the header ("to", "from", etc.). Clicking on - tree items to see their elements, now works also. - -2000-02-18 Miguel de Icaza - - * configure.in: Make gnomeui the last library on the command line, - as its path is the one most likely to hold other old libraries - (libxml) and we need newer versions. - - (BONOBO_VFS_GNOME_CFLAGS): Add libical to the - AC_CONFIG_SUBDIRS - - (BONOBO_HTML_GNOME_CFLAGS): VFS checking needs to - go before we rquery them. - - Use the new method for gnome-print - checking instead of the old crufty gtk+ based one that nobody can - debug. ever. - -2000-02-16 Matt Loper - - * tests/ui-tests/message-browser.c (tree_selection_changed): New - callback function, which will later change the main html window to - reflect the newly-selected tree item. - (get_gtk_html_contents_window): New function. Gets the content - part of a message. - (get_gtk_html_header_window): New function. Will get the header - part of a message, when applicable. - - * camel/camel-formatter.c (str_tolower): Now returns a new string, - rather than changing it in place. - (initialize_camel_formatter): New function; gives a root - CamelDataWrapper and a stream to a CamelFormatter. - (camel_formatter_wrapper_to_html): New function. Translates any - CamelDataWrapper into html. - (lookup_unique_id): Allows the root object to be a - CamelDataWrapper, which is more general than the previously - required CamelMimeMessage. - - -2000-02-14 NotZed - - * configure.in (EXTRA_GNOME_CFLAGS): Add libunicode to CFLAGS/LIBS. - -2000-02-13 NotZed - - * configure.in: Added check for libunicode. - - * Makefile.am (SUBDIRS): Added libibex. - - * tests/test11.c (main): New test, tests search api. - -2000-02-13 Matt Loper - - * tests/ui-tests/test-multipart-mixed.msg: New rfc822 file, which - crashes message-browser. - - * tests/ui-tests/message-browser.c (get_gtk_html_window): Takes a - CamelMimeMessage as a param, rather than a filename. - (main): Puts our windows in an hpane rather than a vbox. Also - opens a file dlg box if a filename wasn't given as a first param. - - * camel/camel-stream-fs.c (_init_with_name): Set stream_fs->fd to - -1 if we fail to load the file. - (camel_stream_fs_new_with_name): If stream_fs->fd is -1, return - NULL. These changes make it so that a CamelStreamFs won't be - created if you give it a bogus filename; they may be replaced once - exception handling is in place. - - * tests/ui-tests/message-browser.c (handle_tree_item): Expand tree - items. - (mime_message_to_html): New function; translates a - CamelMimeMessage into two strings (one for the header, and one for - the body). - (get_gtk_html_window): New function; fills out a window with - html. The html is taken from a processed rfc822 file, via a - CamelFormatter. - - * camel/camel-formatter.c: Added assertions. - (handle_text_html): Don't call text_to_html on something that's - already html. - (multipart_foreach): function deleted. - - * tests/ui-tests/message-browser.c: Added preliminary support for - the viewing of messages via gtkhtml. Lots of commenting. - -2000-02-11 Christopher James Lahey - - * addressbook/contact-editor/e-contact-editor.c: Fixed the - location the first time you see the drop down menus for changing - which phone, email, or snail mail address you see. - -2000-02-11 Christopher James Lahey - - * widgets/e-text/e-text.c (e_text_event): Made a click on a text - widget set the cursor properly. - -2000-02-11 Christopher James Lahey - - * widgets/e-text/e-text.h: Removed some arguments from the .h that - will never be implemented. - - -2000-02-10 bertrand - - * camel/data-wrapper-repository.c (data_wrapper_repository_init): - default the text/* mime types to CamelSimpleDataWrapper so - that Michael can use get_stream. - -2000-02-10 NotZed - - * camel/camel-simple-data-wrapper-stream.h: The superclass is - actually a seekable stream, not just a stream. - -2000-02-10 bertrand - - * tests/Makefile.am (THREAD_RELATED_TESTS): don't - build thread related tests if evolution has been - compiled with no thread support. - - * configure.in (have_pthread): allow user to enable/disable - thread support at configure time - (EXTRA_GNOME_CFLAGS): - (EXTRA_GNOME_LIBS): thread support is directly - included in this variable if enabled. No more - EXTRA_GNOME_CFLAGS_THREADS - Other special support should be added in - EXTRA_GNOME_LIBS and EXTRA_GNOME_CFLAGS - instead of redefining a new variable - each time we want to add a new lib. - (bonobo, ....) - - * camel/camel.c (camel_init): only try to initialize threads if - we enabled threads support. - - * tests/ui-tests/Makefile.am (message_browser_LDADD): use - EXTRA_GNOME_LIBS - - * configure.in (have_pthread): remove HAVE_PTHREADS - variable. Define ENABLE_THREADS instead. - - * camel/Makefile.am: use ENABLE_THREADS not HAVE_PTHREADS - to test if we build thread relateed code. - - * tests/Makefile.am: use EXTRA_GNOME_LIBS, - not EXTRA_GNOME_LIBS_THREADS - -2000-02-10 NotZed - - * camel/hash-table-utils.c (g_strcase_hash): Removed a bizarre - comparison construct for converting case. - -2000-02-09 NotZed - - * camel/data-wrapper-repository.c (data_wrapper_repository_init): - Uses case-insensitive compares. - - * camel/gmime-content-field.c (gmime_content_field_new): Uses - case-insensitive compares. - - * camel/data-wrapper-repository.c (data_wrapper_repository_init): - Use case-insensitive mime types. - - * camel/camel-simple-data-wrapper-stream.c (read): Increment the - copy source address to match the data read offset. - (seek): Actually implement the seek. - - * camel/camel-mime-part-utils.c - (camel_mime_part_store_stream_in_buffer): If we get a -1 read, - DONT update the total bytes, and try and truncate the array in - reverse. Eek. - - * camel/camel-mime-part.c (camel_mime_part_encoding_from_string): - This was DEFINETLEY not the right way to do it. strncmp!=strcmp - (camel_mime_part_encoding_to_string): Handle the default case. - : include string.h for strcmp() etc. - -2000-02-09 Matt Loper - - * tests/ui-tests/test-multipart-alt.msg: New test file; run - message-browser on it, and it will crash. - -2000-02-09 bertrand - - * tests/ui-tests/message-browser.c (handle_tree_item): - show the item. - (handle_tree_item): show the containers and the containees - (get_message_tree_ctrl): call handle_tree_item - on the message itself - - * camel/camel-mime-message.c (camel_mime_message_init): - set the mime type to "mime/message". - --- THIS IS NOT THE CONTENT TYPE --- - - * camel/camel-mime-body-part.c (camel_mime_body_part_init): - set the mime type to "body-part". - --- THIS IS NOT THE CONTENT TYPE --- - - * camel/camel-data-wrapper.c (camel_data_wrapper_set_mime_type): - mime_type is const. - (_set_input_stream): really set the input stream - (_set_output_stream): really set the output stream - various other typo fixes. - - * tests/ui-tests/message-browser.c: various typo - fixes in the ctree construction. - - * camel/string-utils.c (string_trim): fix braindead - trailing trim bug. - - * camel/gmime-content-field.c (gmime_content_field_construct_from_string): - strip the leading and trailing quotes when constructing the - content field. This should be done in a more generic - RFC822 approach, but this fixes a bug that prevent - matt from analysing some multipart messages. - - * camel/camel-data-wrapper.h: reorganize the - deprecated and new methods. - - * camel/providers/mbox/camel-mbox-folder.c - (_check_get_or_maybe_generate_summary_file): - Use "From " as the message separating string. - - * camel/providers/mbox/camel-mbox-folder.c (_append_message): - set the mode when creating the mbox file. - - * camel/providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): - ditto - * camel/providers/mbox/camel-mbox-summary.c (camel_mbox_save_summary): - ditto - -2000-02-09 Matt Loper - - * tests/ui-tests/message-browser.c (print_usage_and_quit): Minor - cleanup. - -2000-02-09 NotZed - - * camel/camel-simple-data-wrapper-stream.c (class_init): Actually - initialise the class. It simple couldn't have worked before. - (camel_simple_data_wrapper_stream_construct): Commented out code - which crashes just to get something working, memory corruption?? - -2000-02-09 Christopher James Lahey - - * configure.in: Add new Makefiles to Makefile list. - - * widgets/e-text/Makefile.am: Build libetext. - - * widgets/e-minicard/Makefile.am: Build libeminicard and test - programs. - - * widgets/Makefile.am: Remove all e-text and e-minicard code and - add them to the SUBDIRS list. - -2000-02-08 Matt Loper - - * tests/ui-tests/message-browser.c: New file; shows a message in - tree format, where multipart's have multiple leaves. - - * camel/camel-formatter.c: Changed references from - 'multipart/alternate' to 'multipart/alternative'. - - * tests/test-formatter.c (convert_to_html_and_print): Use the - buffer length of the stream to create strings which are then - printed, rather than printing the stream (which might not have a - trailing \0) directly. - - * camel/camel-formatter.c (str_tolower): New function; makes a - string lowercase. - - * tests/test-formatter.c (convert_to_html_and_print): Fixed call - to 'camel_formatter_mime_message_to_html' to contain correct - params. - - * camel/camel-formatter.c: New member to 'CamelFormatterPrivate', - 'attachments', will be used to let the caller know which items - should be treated as attachments (as opposed to objects which are - inline to the body). - (text_to_html): name changed from 'encode_entities'. Also now - converts newlines to
tags. - (camel_formatter_mime_message_to_html): Now takes two output - streams -- one for the header, and one for the body. - (get_bonobo_tag_for_object): New function; tries to make a tag out - of (1) the leaf of a mime message and (2) a bonobo object that can - handle its mime type, but can return NULL if it fails to find the - mime type. - (handle_vcard): New function; will write out a vcard as html. - -2000-02-07 Christopher James Lahey - - * widgets/e-text.h, widgets/e-text.c: Added line wrap and a max - number of lines (max number of lines is only obeyed if text is not - being edited). - -2000-02-07 Christopher James Lahey - - * addressbook/printing/e-contact-print.c: Removed an unneccessary - include of libhnj. All uses of libhnj are commented out. - -2000-02-07 Matt Loper - - * camel/camel-formatter.c (mime_part_to_html): function deleted. - - * tests/test-formatter.c (print_usage_and_quit): New function, - which gives usage information. - - * camel/camel-formatter.c: made the 'stream' a member of the - CamelFormatter class, so that streams don't have to be explicitly - sent as a param where a CamelFormatter is also sent.. - (handle_text_plain): Use 'encode_entities' to change '<' to - '>', etc. - -2000-02-03 bertrand - - * camel/camel-formatter.c (find_preferred_displayable_body_part_in_multipart_alternative): - (mime_part_to_html): typo fix : - use find_preferred_displayable_body_part_in_multipart_alternative - instead of the other names. Allows camel to have no undefined symbols. - -2000-02-02 Matt Loper - - * tests/test-formatter.c: New file; intended to test the - CamelFormatter class. - - * camel/camel-formatter.c: Lots of cleanup, commenting, some new - functions, and a really basic skeleton for getting bonobo objects - into the html. - (encode_entities): New function, stolen from Daniel Velliard. - -2000-01-28 Christopher James Lahey - - * addressbook/printing/e-contact-print-style-editor.h, - addressbook/printing/e-contact-print-style-editor.c, - addressbook/printing/test-contact-print-style-editor.c: Files to - load the contact print style editor from the glade file. Doesn't - really do anything yet. - - * addressbook/printing/Makefile.am: Added style editor stuff. - - * addressbook/printing/e-contact-print.glade: Changed a bit. - Fixed an out of place widget. - - * addressbook/printing/.cvsignore: Added - contact-print-style-editor-test. - - * addressbook/printing/smallbook.ecps: Fixed up the values to - match the new types. - - * addressbook/printing/medbook.ecps, - addressbook/printing/phonelist.ecps: Added two new printing - styles. - - * addressbook/printing/e-contact-print.h: Fixed an incorrect - comment. - - * addressbook/printing/e-contact-print.c: Added columns and letter - tabs. Tweaked spacing all over the place. Fixed card height - function so that column wrapping is always done correctly. Added - pulling of style information from a file. Added line wrapping - within each text field. - - * addressbook/printing/e-contact-print-types.h: Added a type field - for different types of print styles. - - -2000-01-28 Christopher James Lahey - - * widgets/e-text.c (e_text_command): Handle the grab and ungrab - command instead of doing focus by hand. This fixes a problem - related to the scroll wheel. - (e_text_command): Reset the blink timer in many more command - situations so that the cursor blinks less when you're interacting - with it. - - * widgets/e-text-event-processor-emacs-like.c: Send the grab focus - command when starting a selection and the ungrab focus command - when ending it. - - * widgets/e-text-event-processor-types.h: Added grab command type - so that the event processor can tell the widget to grab the focus. - - * widgets/e-reflow.c: Redefined all sizes using #defines so that - they can be tweaked later. Added scroll wheel handling and set up - adjustment increments so that the scroll bars will work correctly. - - * widgets/e-minicard.h: Added minicard focus type enum. This - doesn't mean anything yet, but it will later be used to say which - direction the focus is coming from (below for shift-tab, above for - tab.) - -2000-01-28 Christopher James Lahey - - * widgets/e-minicard-label.c, widgets/e-minicard.c: Use - e_canvas_item_grab_focus so that it will work with old versions of - gnome-canvas. - - * widgets/e-canvas.c, widgets/e-canvas.h: Finished working around - focus bugs. - -2000-01-28 Christopher James Lahey - - * widgets/test-reflow.c: Set the minimum_width. - - * widgets/e-reflow.h, widgets/e-reflow.c: Added one more column - line so that the right edge of the reflow will have a line. Also - added a minimum_width so that even if the reflow is thinner than - the window, when you resize it larger all the lines are drawn. - -2000-01-27 Christopher James Lahey - - * widgets/e-reflow.h, widgets/e-reflow.c: Added an arrow cursor - for the draggable columns. Made the clickable column area - larger. - - * widgets/e-text.h, widgets/e-text.c: Added an I beam cursor for - the text item when it is editable. - - * widgets/e-minicard-label.c: Forward enter and leave - notifications to the contained editable text item. - -2000-01-26 Matt Loper - - * camel/camel-formatter.c: By looking up a mimetype in a - hashtable, we can now get a handler function for an arbitrary - mimetype. - -2000-01-25 Mathieu Lacage - - * .cvsignore s: cvs shutup. - -2000-01-25 Christopher James Lahey - - * widgets/e-reflow.c, widgets/e-minicard.c: Handle shift-tab - properly now. - - * widgets/e-minicard-label.c: Reindented some areas. - - * widgets/test-reflow.c: Use e-canvas. Set the back pixmap to - NULL for the canvas so that scrolling won't flash grey. - - * widgets/e-canvas.c, widgets/e-canvas.h: These subclass - GnomeCanvas to work around a few bugs so that evolution will work - well with old versions of gnome-libs. - - * widgets/Makefile.am: Added e-canvas.c and e-canvas.h. - - * addressbook/contact-editor/contact-editor.glade: Not much - change. Mostly internal reorganization by glade itself. - -2000-01-25 Christopher James Lahey - - * addressbook/printing/smallbook.ecps: Example contact printing - style. Not used yet. - - * addressbook/printing/e-contact-print.glade: A glade file for - editing contact printing styles. Not used yet. - - * addressbook/printing/test-print.c: Test file for printing. - - * addressbook/printing/e-contact-print.c, - addressbook/printing/e-contact-print.h, - addressbook/printing/e-contact-print-types.h, - addressbook/printing/Makefile.am, addressbook/printing/.cvsignore: - New files for contact printing support. - - * addressbook/Makefile.am (SUBDIRS): Add printing. - - * configure.in: Check for gnome-print. Build the - addressbook/printing Makefile. - -2000-01-24 bertrand - - * camel/camel-data-wrapper.h: - * camel/camel-data-wrapper.c - (_set_input_stream): - (_get_input_stream): - (_set_output_stream): - (_get_output_stream): - The CamelDataWrapper can now be provided with input and - output streams, so that nothing has to be kept in memory. - - * camel/camel-stream.c (camel_stream_class_init): - added the "data_available" signal. - - -2000-01-24 Federico Mena Quintero - - * configure.in: Added the gnome-pilot and capplet checks; they - will likely be reworked for the Evolution framework, but for now - the calendar/ directory needs them. - - * configure.in: Added checks for gnome-vfs. - -2000-01-24 bertrand - - * camel/camel-seekable-stream.c: - * camel/camel-seekable-stream.h: - new files. - - * camel/camel-simple-data-wrapper-stream.h: parent class is now - CamelSeekableStream - * camel/camel-stream-buffered-fs.h: idem - * camel/camel-stream-buffered-fs.c: idem - * camel/camel-stream-mem.h: idem - * camel/camel-stream-mem.c: idem - (_seek): change declaration - * camel/camel-stream-fs.c: parent class is now - CamelSeekableStream - (_seek): change declaration - - * camel/camel-stream-fs.h: parent class is now - CamelSeekableStream - - * camel/camel-stream-fs.[ch]: converted all - gint64 variables into guint32. - - - * camel/camel-stream-fs.c (_read): fix stupid bug. - (_write): ditto. - - * camel/camel-exception.c (camel_exception_new): don't - forget to clean the exception when creating it. - - * camel/camel-recipient.c (camel_recipient_table_add_list): - add recipient_list to the recipients, not recipients_list. - I don't know what that variable was doing here. - - -2000-01-24 Matt Loper - - * camel/camel-formatter.c (write_header_info_to_stream): new - function, broken out from 'camel_formatter_make_html'. - (write_mimepart_to_stream): same. - (find_text_body_part_in_multipart_related): new function. - (camel_formatter_make_html): Now tries to deal with - multipart/related, multipart/alternate, and text/(plain|html). - - -2000-01-23 bertrand - - * camel/camel-store.c (camel_store_get_session): - added a public get_session method. - - * camel/providers/mbox/camel-mbox-summary.c (camel_mbox_save_summary): - (camel_mbox_load_summary): load/save message sizes in the summary file - - * camel/providers/mbox/camel-mbox-summary.h: - added a size field to the message information - structure. - - * camel/providers/mbox/camel-mbox-utils.c (parsed_information_to_mbox_summary): - copy message size to the mbox summary information too. - - * camel/camel-stream-fs.c (_seek): updated to - work with bounded fs streams. - (_write): ditto. - (_read): ditto. - - * camel/camel-stream-fs.h (struct ): - added the cur_pos, inf_bound and sup_bound - members to allow for bounded fs stream. - - * camel/camel-stream-fs.c (_set_bounds): new func. - (_init_with_fd_and_bounds): idem. - (_init_with_name_and_bounds): idem. - New functions to allow the usage of bounded fs streams. - - The bounded fs stream allow, for example, to make a stream - from a message stored in an mbox file. - - -2000-01-22 bertrand - - * camel/providers/mbox/camel-mbox-folder.c (_check_get_or_maybe_generate_summary_file): - use the real summary file path instead of a - stupid hardcoded one. Fixes yet another bug. - - * camel/providers/mbox/camel-mbox-utils.c (parsed_information_to_mbox_summary): - don't forget to copy the date too. Fix a very annoying bug. - - * camel/providers/mbox/camel-mbox-folder.c (_append_message): - implemented. A lot of fixes too. Works now. - (_get_uid_list): implemented. - -2000-01-21 bertrand - - * tests/test10.c: - test the mbox provider. - - * camel/camel-folder.c (_set_name): - if camel_folder_get_mode returns an - exception, return it instead of - overriding it with a new one. - (camel_folder_is_open): make the is_open - method public. - (_set_name): use the is_open instead of - get_mode. - (_set_name): set the fullname even in the case - where the folder has no parent. - (_set_name): use %c, not %d to add the - separator char into the full path. - - * camel/camel-store.c: add exception handling everywhere in - the store related functions arguments. - * camel/providers/mbox/camel-mbox-folder.c: idem - * camel/providers/mbox/camel-mbox-folder.h: idem - * camel/providers/mbox/camel-mbox-store.h: idem - - * camel/providers/mbox/Makefile.am (libcamelmbox_la_SOURCES): - added camel-mbox-provider.c to the mbox provider - sources. - - * camel/providers/mbox/camel-mbox-provider.c: - provider registration code. - - * camel/providers/mbox/camel-mbox-folder.c (_get_message_count): implemented - (_append_message): implemented - - * camel/providers/mbox/camel-mbox-parser.c (initialize_buffer): - use \0 to mark the end of the buffer. - (read_next_buffer_chunk): ditto. - (read_header): test the presence of a \0 instead of - reading the eof field - (read_message_begining): idem. - (camel_mbox_parse_file): idem. - Remove the eof field from the parser - structure. - (read_next_buffer_chunk): removed some nasty bugs - again. - - -2000-01-21 Federico Mena Quintero - - * libversit/vcc.y: Removed the VFS crap; my mistake, it should not - go here. - - * configure.in: Added yacc requirements for libversit. - -2000-01-21 Matt Loper - - * camel/camel-formatter.c (camel_formatter_make_html): added a - CamelMimeMessage as a param to this function, and removed it as a - member of the object. - -2000-01-21 Federico Mena Quintero - - * configure.in (AC_OUTPUT): Added libversit/Makefile and - calendar/Makefile. - - * Makefile.am (SUBDIRS): Added libversit and calendar. - -2000-01-20 bertrand - - * camel/providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): - compute and return the file size. - - -2000-01-20 Matt Loper - - * camel/camel-formatter.c, camel/camel-formatter.h: New - files. You'll be able to use a CamelFormatter to get - html-formatted versions of a CamelMimeMessage. - -2000-01-20 Christopher James Lahey - - * widgets/e-text-event-processor-types.h: Changed some line - spacing. - - * widgets/test-reflow.c: Connected to the resize signal of the - reflow. - - * widgets/e-minicard.c: Made width argument set function only - update if width is different. - - * widgets/e-reflow.h, widgets/e-reflow.c: Added draggable column dividers. - - * addressbook/contact-editor/test-editor.c: Open two dialogs for - more interesting testing. - - * addressbook/contact-editor/e-contact-editor.h, - addressbook/contact-editor/e-contact-editor.c: Modified to use - glade. Added menus to change which phone/address/email entries to - view. Added images to the dialog. - - * addressbook/contact-editor/e-contact-editor-strings.h, - addressbook/contact-editor/contact-editor.glade: Glade files for - the contact editor dialog. - - * addressbook/contact-editor/Makefile.am: Added images and added - glade stuff. - - * addressbook/contact-editor/arrow.png, - addressbook/contact-editor/briefcase.png, - addressbook/contact-editor/netfreebusy.png, - addressbook/contact-editor/netmeeting.png: Image files for the - contact editor dialog. - -2000-01-19 bertrand - - * camel/providers/mbox/camel-mbox-folder.c (_get_message_count): - implemented. - - * camel/providers/mbox/camel-mbox-summary.c (camel_mbox_save_summary): - (camel_mbox_load_summary): save/load the next uid. - - * camel/providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): - Compute the next available uid. - * camel/providers/mbox/camel-mbox-folder.c (_create): - (_check_get_or_maybe_generate_summary_file): - Set and use the next_uid field properly. - * camel/providers/mbox/camel-mbox-summary.h: added - an extra field to store the next available uid. - - * camel/providers/mbox/camel-mbox-folder.c - (_check_get_or_maybe_generate_summary_file): - routine called when the folder is opened. - Reads or creates the summary file. - (_create): initialize the internal summary - structure. - (_close): save the summary file on closing. - (_init_with_store): initialize mbox specific - folder members. - -2000-01-18 bertrand - - * tests/test9.c: - tests for summary and parsing process of mbox files. - - * camel/providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): do - not use case insensitive comp to detect message separators. Kill - some nasty bugs in netscape file parsing, - - * camel/providers/mbox/camel-mbox-utils.c (parsed_information_to_mbox_summary): - don't use g_array_append but write directly inside the - array data instead. Better performance and bug fix. - - * camel/providers/mbox/camel-mbox-summary.c (camel_mbox_load_summary): - fix the name and bugs. - - * camel/camel-folder-summary.h: update the class - method definition to match the public defs. - - * camel/providers/mbox/camel-mbox-summary.c (camel_mbox_save_summary): - (mbox_load_summary): summary file read/write routines. - - * camel/providers/mbox/camel-mbox-utils.c (parsed_information_to_mbox_summary): - routine to construct the summary after the mbox - file has been parsed and the x-evolution fields - inserted. - -2000-01-17 bertrand - - * camel/providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): - dont use the x_evolution field but rather the uid to - determine the presence of "X-Evolution" in the mail. - - * camel/providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): - parse the status and uid values if the x-evolution - has been found. - - * camel/providers/mbox/camel-mbox-utils.c (camel_mbox_xev_parse_header_content): - return the parsed status field correctly. - - * camel/providers/mbox/camel-mbox-utils.h: - fixed bad prototype. - - * camel/providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): - parse and store the "To:" header. - - * camel/providers/mbox/camel-mbox-parser.h: - added a "to" field - - * camel/camel-folder-summary.c: - create the arrays here. - - * camel/camel-folder-summary.h: the list of - summary information is no longer a GList but - rather a GArray. - -2000-01-17 Chrsitopher James Lahey - - * head.png, phone.png, email.png, web.png, snailmail.png: Images - for e-contact-editor.c. - - * addressbook/contact-editor/text-editor.c: Test program - for contact editor widget. - - * addressbook/contact-editor/e-contact-editor.c, - addressbook/contact-editor/e-contact-editor.h: Contact editor - widget files. - - * addressbook/contact-editor/.cvsignore, - addressbook/contact-editor/Makefile.am: New directory for contact - editor files. - - * addressbook/.cvsignore, addressbook/Makefile.am: New directory - for addressbook files. - - * widgets/.cvsignore: Added reflow-test. - - * Makefile.am (SUBDIRS): Added addressbook subdirectory. - - * configure.in, widgets/Makefile.am: Removed widgets/toolbar from - SUBDIRS since the lack of content was preventing it from - compiling. - - * widgets/e-text.c, widgets/e-text.h: Fixed a crashing bug. - -2000-01-17 bertrand - - * tests/test9.c (main): test for the mbox utils. - -2000-01-17 Federico Mena Quintero - - * configure.in: Add the gnomecanvaspixbuf argument to gnome-config - invocations. - -2000-01-17 bertrand - - * camel/providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): - (copy_file_chunk): - (camel_mbox_xev_write_header_content): - (string_to_flag): - (flag_to_string): - (string_to_uid): - (uid_to_string): - A bunch of new funcs to handle x-evolution - private header field. - (copy_file_chunk): fixed a nasty bug. - (camel_mbox_write_xev): create the copy file descriptor - with the proper arguments. Exceptions implememnted. - (camel_mbox_write_xev): changed the way bytes are counted. - No more uses the message size cause it did not take into - account the message separators characters. - (camel_mbox_write_xev): hopefully fixed the last bugs. - works ok now. - - -2000-01-15 bertrand - - * camel/providers/mbox/camel-mbox-parser.c - (camel_mbox_parse_file): - store the end of headers position. - - * camel/providers/mbox/camel-mbox-parser.h: - added the end_of_header_position to locate the - begining of the mail body. - - - * camel/providers/mbox/camel-mbox-utils.c (uid_to_string): - (string_to_uid): - (flag_to_string): - (string_to_flag): - new functions to handle uids and - flags in the X-Evolution header. - (camel_mbox_xev_parse_header_content): - new function to parse an X-Evolution - header. - (camel_mbox_xev_write_header_content): - new function to write the X-Evolution - header. - -2000-01-13 bertrand - - * camel/providers/mbox/camel-mbox-parser.c (read_next_buffer_chunk): - eof is true when no more chars are available, not - when we've read the entire file. - (initialize_buffer): ditto. - (read_message_begining): documented. - (read_header): ditto. - (new_message_detected): ditto. - (advance_n_chars): ditto. - (goto_next_char): ditto. - (read_next_buffer_chunk): ditto. - (initialize_buffer): ditto. - (parser_free): ditto. - (new_parser): ditto. - -2000-01-12 - - * widgets/e-text-event-processor-types.h, - widgets/e-text-event-processor-emacs-like.c, widgets/e-text.c, - widgets/e-text.h: Added selection and clipboard support. Added up - and down arrow keys. Fixed choice of font colors for the - selection to be based on the current style. - - * widgets/e-minicard.c: Caused a click to grab the focus. Changed - the fake information added. - - * widgets/e-minicard-label.c: Forward mouse events to the field - EText item. - -2000-01-13 Christopher James Lahey - - * widgets/e-canvas-utils.c, widgets/e-canvas-utils.h: - e_canvas_item_move_absolute is just a helper function not supplied - by the gnome_canvas.[ch] I put it here so that multiple items can - use it. - - * widgets/e-reflow.c, widgets/e-reflow.h: This item contains a - number of other items and places them into multiple columns. The - items contained must support a number of arguments and signals to - allow the reflow to interact with them. - - * widgets/test-reflow.c: This is a test program for e-reflow. - - * widgets/e-text.c, widgets/e-text.h: Added properly drawn - selected text. Added some preliminary code for X selection - handling and cut & paste. - - * widgets/e-minicard.c, widgets/e-minicard.h: Added ARG_HAS_FOCUS - handling. Made label display random for more interesting tests of - multiple cards. Tweaked sizing information for better display. - - * widgets/e-minicard-label.c, widgets/e-minicard-label.h: Added - ARG_HAS_FOCUS handling. - - * widgets/Makefile.am: Added the reflow test and reflow files. - -2000-01-12 bertrand - - * camel/providers/mbox/camel-mbox-parser.h (camel_mbox_parse_file): - Added the prototype of camel_mbox_parse_file. - - * camel/providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): - updated in-line documentation. - - * tests/Makefile.am (noinst_PROGRAMS): - remove non updated tests from the build - process. - - * corrected a bunch of bugs - - * camel/providers/mbox/camel-mbox-parser.c - (camel_mbox_parse_file): - parser the subject and date. - - - * camel/providers/mbox/camel-mbox-parser.c - (camel_mbox_parse_file): added the ability to - follow the parsing progression. - - * camel/providers/mbox/camel-mbox-parser.h: - parse the x-evolution field. - - * camel/Makefile.am (libcamel_la_SOURCES): - disabled gmime-rfc2047 as it depends on libunicode - and is not used for the moment. - -2000-01-12 Christopher James Lahey - - * widgets/e-minicard.c, widgets/e-minicard.h: Added a resize - signal for when the card changes height. Made it so that when you - press tab inside of a field, it goes to the next field. - - * widgets/e-minicard-label.c, widgets/e-minicard-label.h: Added a - resize signal for when the label changes height. - - * widgets/e-text.c, widgets/e-text.h: Added a resize signal for - multiple lines. Added scrolling based on cursor position. - - * widgets/Makefile.am: Removed an extraneous build target. - -2000-01-11 Christopher James Lahey - - * widgets/e-text-event-processor-emacs-like.c: Blocked the tab key - from getting inserted into the buffer since the renderer doesn't - know what a tab is. - - * widgets/e-text.c, widgets/e-text.h: Fixed a memory leak. Added - a blinking cursor and scrolling for the text item. - -2000-01-11 Christopher James Lahey - - * widgets/test-minicard.c: Removed some code which got in the way - of testing properly. - - * widgets/e-minicard-label.c (e_minicard_label_realize): Made the - field text item editable. - - * widgets/Makefile.am: Added e-text-event-process*.[ch]. - - * widgets/e-text.c, widgets/e-text.h: Changed these to support - editing. - - * widgets/e-text-event-processor.c, - widgets/e-text-event-processor.h, - widgets/e-text-event-processor-types.h, - widgets/e-text-event-processor-emacs-like.c, - widgets/e-text-event-processor-emacs-like.h: These are a new pair - of classes which handle all events from the text item and convert - them into commands. - - -2000-01-10 Christopher James Lahey - - * widgets/Makefile.am: Added minicard and text stuff. - - * widgets/e-minicard.c, widgets/e-minicard.h, - widgets/e-minicard-label.c, widgets/e-minicard-label.h: Added - canvas items for the minicard view in the contact manager. - - * widgets/test-minicard.c, widgets/test-minicard-label.c: Tests - for the minicard items. - - * widgets/e-text.h, widgets/e-text.c: New canvas item. Based on - GnomeCanvasText. Adds ellipsis capabilities. Used in - e-minicard*.[ch]. - - * widgets/.cvsignore: Added minicard-test and minicard-label-test. - -2000-01-06 Miguel de Icaza - - * configure.in: Add Bonobo detection, Bonobo flags for compilation - for the components and the shell. - -2000-01-06 Elliot Lee - * composer/Makefile.am, widgets/e-table/Makefile.am: Work with - builddir != srcdir - -2000-01-05 Miguel de Icaza - - * configure.in (EXTRA_GNOME_CFLAGS_THREADS, - EXTRA_GNOME_LIBS_THREADS): New variables that hold the thread - version of the compile/link lines. - -1999-11-20 Miguel de Icaza - - * configure.in (PACKAGE): Raise warning level. - -2000-01-04 bertrand - - * camel/providers/mbox/camel-mbox-folder.c (_list_subfolders): - in the io_error label does not return before the - list has been freed. - -2000-01-03 bertrand - - * camel/providers/mbox/camel-mbox-folder.c (_list_subfolders): - detects netscape ".sdb" folders as well as simple - non-suffixed folders (as the ones used in pine). - - - * camel/string-utils.c (string_prefix): - finished implementation. - (string_prefix): added a boolean flag to indicate if the - suffix has been found. When the suffix does not match, - return NULL. - -1999-12-26 bertrand - - * camel/camel-exception.c (camel_exception_setv): - new function. Allow printf-like description - string constructions. - - * camel/camel-exception.h: cosmetic changes. - - * camel/providers/mbox/camel-mbox-store.h: - * camel/providers/mbox/camel-mbox-store.c: - * camel/providers/mbox/camel-mbox-folder.h: - * camel/providers/mbox/camel-mbox-folder.c: - More work on the mbox provider. - - -1999-12-22 bertrand - - * camel/providers/mbox/camel-mbox-store.h: - * camel/providers/mbox/camel-mbox-store.c: - * camel/providers/mbox/camel-mbox-folder.h: - * camel/providers/mbox/camel-mbox-folder.c: - part of the mbox provider. - -1999-12-20 bertrand - - * camel/camel-folder.c (_set_name): - check that the folder is closed or raise an exception. - (_set_name): unset the name fields as soon as possible, - even if an exception is raised. - - * configure.in: - build mbox provider Makefile - - * camel/Makefile.am (SUBDIRS): - re-enable providers compilation - -1999-12-19 Damon Chaplin - - * configure.in (AC_OUTPUT): added widgets/meeting-time-sel/Makefile - -1999-12-19 bertrand - - * camel/camel-folder-utils.c: include camel-log.h - to avoid unresolved symbols. - -1999-12-18 bertrand - - * camel/camel-folder.c (camel_folder_get_summary): - documented. - - * camel/camel-folder-pt-proxy.c (_append_message): - updated to take the change on append into account. - - * camel/camel-folder.h: - updated class def concerning append. - * camel/camel-folder.c - (camel_folder_append_message): documented. - (camel_folder_append_message): don't return the - message number. Use specific methods instead. - (_append_message): idem. - - (_delete): use exception mechanism. - (camel_folder_delete): idem. - (_delete_messages): idem. - (camel_folder_delete_messages): idem. - (_get_parent_folder): idem. - (camel_folder_get_parent_folder): idem. - (_get_parent_store): idem. - (_get_mode): idem. - (camel_folder_get_parent_store): idem. - (camel_folder_get_mode): idem. - (_list_subfolders): idem. - (camel_folder_list_subfolders): idem. - (_expunge): idem. - (camel_folder_expunge): idem. - (_has_message_number_capability): idem. - (camel_folder_has_message_number_capability): idem. - (_get_message_by_number): idem. - (camel_folder_get_message_by_number): idem. - (camel_folder_get_message_count): idem. - (_list_permanent_flags): idem. - (camel_folder_list_permanent_flags): idem. - (_copy_message_to): idem. - (camel_folder_copy_message_to): idem. - (camel_folder_has_summary_capability): idem. - (camel_folder_get_summary): idem. - (camel_folder_has_uid_capability): idem. - (camel_folder_get_message_uid): idem. - (_get_message_uid_by_number): idem. - (camel_folder_get_message_uid_by_number): idem. - (camel_folder_get_message_by_uid): idem. - (camel_folder_get_uid_list): idem. - -1999-12-17 bertrand - - * camel/camel-folder.c (_set_name): - use exception mechanism. - (camel_folder_set_name): idem. - (camel_folder_set_full_name): idem. - (_get_name): idem. - (camel_folder_get_name): idem. - (_get_full_name): idem. - (camel_folder_get_full_name): idem. - (_can_hold_folders): idem. - (_can_hold_messages): idem. - (_exists): idem. - (camel_folder_exists): idem. - (_is_open): idem. - (_get_subfolder): idem. - (camel_folder_get_subfolder): idem. - - * camel/camel-exception.c (camel_exception_clear): - New function. Clear an exception. - (camel_exception_get_id): - New function. - (camel_exception_get_description): - New function. - - * camel/camel-folder.c (_set_name): - Use the exception system. When the folder - has no parent, don't set its full name - field. - - -1999-12-16 bertrand - - * camel/camel-folder.c (camel_folder_expunge): - (_expunge): - * camel/camel-folder-pt-proxy.c (_expunge): - changed the return value. Now returns the list - of expunged messages - - * camel/camel-folder.c (_init_with_store): - cleaned up. Use the exception system now. - (_open): ditto. - (camel_folder_open): ditto. - (camel_folder_open_async): ditto. - (_close): ditto. - (camel_folder_close): ditto. - (camel_folder_close_async): ditto. - - * camel/camel-exception.c (camel_exception_set): - When no exception is given, do nothing, just - return. - (camel_exception_set): documented. - (camel_exception_new): idem. - (camel_exception_free): idem. - (camel_exception_xfer): idem. - - - * camel/camel-folder.c: - * camel/camel-folder.h: more clean-ups. - Removed message list related code. - This was braindead design. - - - * camel/camel-folder-utils.c (camel_aml_expunge_messages): - implemented. The routines in this file will be - called by providers to handle the list of - message already standing in memory. - -1999-12-15 bertrand - - * camel/camel-folder-utils.c: - * camel/camel-folder-utils.h: - New files, misc utilities for the - folder providers. Includes active message - list utilities. - - - * camel/camel-folder.c (_has_message_number_capability): - (camel_folder_has_message_number_capability): - Added this to know if a folder provides - number-based message access. - - * camel/camel-folder.c (_get_message_count): - added warning when called directly. - (_append_message): ditto - (_open_async): ditto - (_close_async): ditto - (_delete_messages): ditto - (_expunge): ditto - (_get_message_by_number): ditto - (_get_message_uid): ditto - (_get_message_uid_by_number): ditto - (_get_message_by_uid): ditto - (_get_uid_list): ditto - - - * camel/camel-folder-pt-proxy.c (_open_async): - (_open): - (_close_async): - (_close): - (camel_folder_pt_proxy_class_init): - update - (_get_message_by_number): - Update to reflect changes in CamelFolder - - * camel/camel-folder.h: - * camel/camel-folder.c (_get_subfolder): - (camel_folder_get_subfolder): - The CamelFolder::get_folder is renamed to - get_subfolder as it is more intuitive. - - * camel/camel-folder.c (_get_message_by_number): - (camel_folder_get_message_by_number): - * camel/camel-folder.h - (camel_folder_get_message_by_number): - The get_message method is now named - get_message_by_number for consistency - with the _by_uid methods. - - * camel/camel-folder.[ch]: - clean-ups. - -1999-12-13 Nat Friedman - - * ebook/e-book.h: New file. - * ebook/e-book.c: New file. - * ebook/e-card.h: New file. - * ebook/e-card-fields.h: New file. - * ebook/e-commerce.h: New file. :-) - -1999-12-08 Ettore Perazzoli - - * tests/test1.c (main): Removed the strdup()s, which are not - deeded anymore. - - * camel/camel-mime-message.c (_set_subject): `subject' made const. - (camel_mime_message_set_subject): Likewise. - (_set_from): `from' made const. - (camel_mime_message_set_from): Likewise. - (_set_reply_to): Made `reply_to' const. - (camel_mime_message_set_reply_to): Likewise. - (_set_set_received_date): Made `received_date' const. - (camel_mime_message_set_reply_to): Likewise. - (_set_field): `value' made const. Also, strdup the string before - assigning. - - * camel/camel-mime-message.h: Virtual methods changed to use const - strings when setting header values. - -1999-11-17 Ettore Perazzoli - - * composer/Makefile.am (EXTRA_DIST): Added `$(glade_DATA)'. - - * camel/Makefile.am (EXTRA_DIST): Added - `$(libcamel_extra_sources)'. - (libcamelinclude_HEADERS): Added `gmime-base64.h'. - -1999-11-17 Ettore Perazzoli - - * camel/camel-mime-message.c (_write_to_stream): Removed extra ':' - in the `Mime-Version' header. - - * tests/ui-tests/msg-composer-test.c: Removed. - - * Makefile.am (SUBDIRS): Added `composer'. - - * configure.in: Create `composer/Makefile'. - - * camel/camel-simple-data-wrapper-stream.c - (camel_simple_data_wrapper_stream_construct): Updated accordingly. - (camel_simple_data_wrapper_stream_new): Updated accordingly. - * camel/camel-stream-data-wrapper.c - (camel_stream_data_wrapper_construct): Updated accordingly. - - * camel/camel-data-wrapper.h: Replaced `IS_CAMEL...()' type check - macro name with `CAMEL_IS...()'. - * camel/camel-folder-pt-proxy.h: Likewise. - * camel/camel-folder-summary.h: Likewise. - * camel/camel-folder.h: Likewise. - * camel/camel-medium.h: Likewise. - * camel/camel-mime-body-part.h: Likewise. - * camel/camel-mime-message.h: Likewise. - * camel/camel-mime-part.h: Likewise. - * camel/camel-multipart.h: Likewise. - * camel/camel-service.h: Likewise. - * camel/camel-session.h: Likewise. - * camel/camel-simple-data-wrapper-stream.h: Likewise. - * camel/camel-simple-data-wrapper.h: Likewise. - * camel/camel-store.h: Likewise. - * camel/camel-stream-buffered-fs.h: Likewise. - * camel/camel-stream-data-wrapper.h: Likewise. - * camel/camel-stream-fs.h: Likewise. - * camel/camel-stream-mem.h: Likewise. - * camel/camel-stream.h: Likewise. - - * tests/test1.c (main): Updated to match the `RECIPIENT_TYPE' - changes. - - * camel/camel-mime-message.h: Changed `RECIPIENT_TYPE_TO', - `RECIPIENT_TYPE_CC' and `RECIPIENT_TYPE_BCC' into - `CAMEL_RECIPIENT_TYPE_TO', `CAMEL_RECIPIENT_TYPE_CC' and - `CAMEL_RECIPIENT_TYPE_BCC', respectively. - -1999-11-17 Ettore Perazzoli - - * camel/camel-mime-message.c (_write_to_stream): Write - "Mime-Version: 1.0" to the stream. - - * tests/test1.c: If executed with a file name parameter, attach a - file with with that name to the email without loading it into - core, thus demonstrating usage of my latest changes. - - * camel/camel-mime-part.c (_set_encoding): Updated to use - `CamelMimePartEncodingType'. - (camel_mime_part_set_encoding): Likewise. - (_get_encoding): Likewise. - (camel_mime_part_get_encoding): Likewise. - (_write_content_to_stream): Honour the `encoding' member. - (_construct_from_stream): Made static. - (camel_mime_part_encoding_to_string): New function. - (_write_to_stream): Write the encoding string using it. - (camel_mime_part_init): Set encoding to - `CAMEL_MIME_PART_ENCODING_DEFAULT'. - (_finalize): Don't free `encoding' anymore. - (camel_mime_part_encoding_from_string): New function. - (_parse_header_pair): Use it. - - * camel/camel-mime-part.h: New enum `CamelMimePartEncodingType'. - Member `encoding' of `struct _CamelMimePart' changed from `gchar - *' to `CamelMimePartEncodingType'. All the encoding-related - methods changed to use this type instead of `gchar *'. - - * camel/gmime-base64.c (gmime_encode_base64): Got it to work. - - * camel/Makefile.am (libcamel_la_SOURCES): Compile - `gmime-base64.c'. - - * camel/gmime-base64.h: New, previously missing, header. - - * camel/camel-stream-data-wrapper.c: New file implementing the - `CamelStreamDataWrapper' class. - * camel/camel-stream-data-wrapper.h: Corresponding header. - - * camel/camel-simple-data-wrapper.c: Implemented the `get_stream' - virtual method. - (_get_stream): New function implementing the method. - (camel_simple_data_wrapper_class_init): Install it in the class - struct. - (camel_simple_data_wrapper_init): New function initializing the - `stream' member to NULL, - (camel_simple_data_wrapper_class_init): Set it as the - GtkObjectInitFunc. - - * camel/camel-simple-data-wrapper.h: New member `stream' in - `struct _CamelSimpleDataWrapper'. - - * camel/camel-simple-data-wrapper-stream.c: New file implementing - the `CamelSimpleDataWrapperStream' class. - * camel/camel-simple-data-wrapper-stream.h: Corresponding header. - - * camel/camel-data-wrapper.c (camel_data_wrapper_get_stream): New - function. - (_get_stream): New private function, just returning NULL. - (camel_data_wrapper_class_init): Install it as the default - `get_stream' virtual method. - - * camel/camel-data-wrapper.h: New virtual method `get_stream' in - `CamelDataWrapperClass'. - (camel_data_wrapper_get_stream): New function prototype. - -1999-11-05 Ettore Perazzoli - - * tests/ui-tests/msg-composer-test.c: New file for testing the - `EMsgComposer' widget. - * tests/ui-tests/Makefile.am (noinst_PROGRAMS): Compile it. Do - not compile `store_listing' for now because it's currently broken. - (INCLUDES): Added the `widgets' source directory to the include - path list. - (LDADD): Removed the MH dependency; link with - `libevolutionwidgets.la' from the `widgets' directory. - - * configure.in: Create `widgets/Makefile'. - - * camel/gmime-rfc2047.c (rfc2047_clean): Removed C++-like comment. - * camel/camel-folder.c (camel_folder_get_message_uid_by_number): - Likewise. - * camel/gmime-content-field.c (gmime_content_field_get_parameter): - Likewise. - * camel/camel.c (camel_init): Likewise. - * camel/camel-provider.c (camel_provider_register): Likewise. - * camel/camel-multipart.c (_construct_from_stream): Likewise. - * camel/camel-mime-part.c (_write_content_to_stream): Likewise. - * camel/camel-medium.c (camel_medium_class_init): Likewise. - - * camel/camel-data-wrapper.h (camel_data_wrapper_get_type): Make - prototype non-static. - - * camel/Makefile.am (libcamelinclude_HEADERS): Move - `camel-exception-list.def' from `EXTRA_DIST' to - `libcamelinclude_HEADERS'. - - * camel/camel.h: Do not #include . - * camel/data-wrapper-repository.h: Likewise. - -1999-11-05 Ettore Perazzoli - - * tests/Makefile.am (INCLUDES): Add `-I$(top_srcdir)'. - -1999-10-13 bertrand - - * camel/camel-folder.c (camel_folder_close): the - folder->close method is now asynchronous. - - * camel/camel-folder-pt-proxy.c (_folder_open_cb): - (_open): - (_folder_open_cb): - (_open): - open/close method implemented in the thread proxy - folder. More to come. - - * camel/camel-exception.c (camel_exception_xfer): - new utility func. - - * camel/camel-marshal-utils.c: some new marshallers - - * camel/camel-folder-pt-proxy.c: Some explanations - on the thread proxy system. - -1999-10-11 bertrand - - * camel/camel-marshal-utils.c: - camel/camel-marshal-utils.h: - Handles operation marshalling. - - * camel/camel-thread-proxy.c: - camel/camel-thread-proxy.h: - new files. Generic proxy system. - - * camel/camel-folder-pt-proxy.c - moved all proxy related code in dedicated files. - - (camel_folder_pt_proxy_init): - removed proxy initialisation code - (_finalize): - removed proxy finalization code - - - * camel/camel-exception.c - (camel_exception_new): - (camel_exception_set): - (camel_exception_free): - New funcs. - -1999-09-21 bertrand - - * camel/camel-folder-pt-proxy.c (_async_close): - implemented. - - * configure.in: - Check pthreads. - - * camel/Makefile.am: - camel-folder-pt-proxy.c is only compiled - when pthreads are available. - - * camel/camel-folder-pt-proxy.c: - Signal proxying implemenatation. - (_signal_marshaller_server_side): - (_signal_marshaller_client_side): - (_init_signals_proxy): - Code not is tested and has to be best - explained as it uses threads conditions and - gtk signal system. - (_thread_notification_catch): notify pending signals - as well as thread availability. - -1999-09-20 bertrand - - * camel/camel-folder-pt-proxy.c (_op_exec_or_plan_for_exec): - completed - - Binch of new funcs: - (_maybe_run_next_op): - Called by the watch notification when - a threaded op is completed - (_thread_notification_catch): - notification watch call back - (_init_notify_system): - set up the notification channel - (notify_availability): - called by threads before completion. - -1999-09-18 bertrand - - * camel/camel-folder-pt-proxy.c (_op_exec_or_plan_for_exec): - new func. Try to exec an operation in a thread - or queue it if a thread is already busy. - - * camel/camel-op-queue.c (camel_op_queue_set_service_availability): - (camel_op_queue_get_service_availability): - new funcs. - - * camel/camel-op-queue.c (camel_op_new): - (camel_op_free): - new funcs. Uses glib mem chunks. - - -1999-09-17 bertrand - - * camel/camel-folder-pt-proxy.c (_init_with_store): - added notify io_channel. - - * camel/camel-op-queue.h: - * camel/camel-op-queue.c: - New object. Operation queue. Meant to be used in - non-blocking proxy objects. - (camel_op_queue_run_next_op): new func. - run the next operation. - -1999-09-14 bertrand - - * camel/Makefile.am (libcamel_la_SOURCES): - added camel-folder-pt-proxy.[ch] to the build - process. - - * camel/camel-folder-pt-proxy.c (_init_with_store): - started implementation of the pthread-based - folder proxy. - - -1999-09-08 bertrand - - * camel/providers/MH/mh-summary.c - (mh_load_summary): - (mh_save_summary): - (mh_create_summary): - implemented summary (files) for MH folders. - - * camel/providers/MH/camel-mh-folder.c - (_get_message_by_uid): implemented. - (camel_mh_folder_class_init): - (_get_message_uid): implemented - - * camel/camel-folder.c (camel_folder_has_uid_capability): - (camel_folder_get_message_uid): - (camel_folder_get_message_uid_by_number): - (camel_folder_get_message_by_uid): - (camel_folder_get_uid_list): - Documented UID methods. - (camel_folder_get_message_uid_by_number): - const'ified uid. - (camel_folder_get_message_by_uid): idem - removed stupid camel_folder_get_message_uid_by_number - method. - - * tests/ui-tests/store_listing.c (close_all): - close all open folders and stores. (necessary - for UID list saving ). - - * camel/providers/MH/mh-uid.c (mh_generate_uid_list): - fix: store UID list in CamelMHFolder object. - - * camel/providers/MH/camel-mh-folder.c (_open): - read or create UID list. - (_close): save UID list. - -1999-09-07 bertrand - - * camel/md5-utils.c (md5_get_digest_from_file): - correct parameter decl (const) - - * camel/md5-utils.h: typo. - - * camel/providers/MH/mh-uid.c - More work on UID stuff for MH. - (mh_save_uid_list): - (mh_load_uid_list): - (mh_generate_uid_list): - new funcs. Manage on-disk uid list. - - * camel/providers/MH/mh-utils.c (mh_is_a_message_file): - Util routines live here now. - - * camel/md5-utils.c - Documented all funcs. - - (md5_get_digest_from_stream): - correct typo. - (md5_get_digest_from_file): - same typo corrected. - - - * camel/md5-utils.h : - raw routines are declared public now. - Md5 use has to be versatile. - - * camel/providers/MH/mh-uid.c (mh_uid_get_for_file): - new func. Returns an UID for an MH message. - -1999-09-06 bertrand - - - * camel/md5-utils.h: - * camel/md5-utils.c: - changed names to follow camel style. - (md5_get_digest_from_stream): - new methods. - (md5_get_digest_from_file): - new function : get file md5 signature. - To be used in providers code. - - * camel/md5-utils.c: imported md5 coding - routine from rpm. Compiles. - - -1999-09-05 bertrand - - * camel/camel-folder.c (camel_folder_has_uid_capability): - (camel_folder_get_message_uid): - (camel_folder_get_message_uid_by_number): - (camel_folder_get_message_by_uid): - (camel_folder_get_uid_list): - Basic UID framework. - - * devel-docs/misc/ref_and_id_proposition.txt: - New revision. Some fixes. - - * camel/camel-folder.h (struct _CamelFolder): added - uid_capability field. - - - * camel/camel-folder.c (camel_folder_close): publicized - the close method. - - * tests/ui-tests/store_listing.c (show_folder_messages): - use folder summary instead of opening all messages. - (show_folder_messages): re-enabled old CPU/Mem consumming - method. Useful for pop3 for instance. - - * camel/providers/MH/camel-mh-folder.c (_create_summary): - basic and highly non-efficient summary implementation. - Should be seen as a proof of concept only. - subfolder summary still has to be implemented. - - * camel/providers/maildir/camel-maildir-folder.c (_init_with_store): - hasn't summary for the moment. - * camel/providers/maildir/camel-maildir-folder.c - cosmetic changes. - - -1999-09-04 bertrand - - * camel/providers/MH/camel-mh-folder.c (_create_summary): - started summary implementation. - (_open): correct use of open. - - * camel/camel-folder.c (camel_folder_get_summary): - get folder associated summary object. - - * camel/Makefile.am: - added summary files build - - * camel/camel-folder-summary.[ch]: - basic summary framework - -1999-09-03 bertrand - - * devel-docs/camel/Makefile.am: - sgml doc has camel-recipient now. - - * camel/camel-recipient.c (camel_recipient_foreach_recipient_type): - added in-line documentation. - -1999-09-02 bertrand - - * camel/providers/maildir: Added (experimental) maildir - provider written by Jukka Zitting - - * camel/providers/Makefile.am (SUBDIRS): build maildir - provider. - - * camel/camel-provider.c (camel_provider_get_for_protocol): - bug fix. patch from Jukka Zitting - - * camel/camel-mime-message.c (_write_one_recipient_to_stream): - changed decl to fit CRLFunc. - (_write_recipients_to_stream): - calls camel_recipient_foreach_recipient_type now. - - * camel/camel-recipient.c (camel_recipient_foreach_recipient_type): - new convinience function. Iterate over all recipient types. - - * camel/gmime-utils.c (gmime_write_header_table_to_stream): - s/write_header_table_to_stream/gmime_write_header_table_to_stream/ - (gmime_write_header_with_glist_to_stream): - s/write_header_with_glist_to_stream/gmime_write_header_with_glist_to_stream/ - -1999-09-01 bertrand - - * camel/camel-mime-message.c (_finalize): - (_add_recipient): - (_remove_recipient): - (_get_recipients): now use CamelRecipientTable - - * camel/gmime-content-field.c: - (gmime_content_field_unref): test if object - to free is non void. - - * camel/camel-folder.c (_finalize): - (_set_name): - * camel/camel-mime-part.c (_finalize): - (_set_description): - (_set_disposition): - * camel/camel-service.c (_finalize): - * camel/camel-stream-fs.c (_finalize): - * camel/gmime-content-field.c: - (gmime_content_field_construct_from_string): - - * camel/url-util.c (g_url_free): - - When using g_free (obj) don't test if obj != NULL - g_free () already do that. Thanks to elerium for - the feedback. - -1999-08-30 bertrand - - * camel/camel-recipient.c (camel_recipient_get): - (camel_recipient_remove): - (camel_recipient_add): - new func. More work on new independant recipient code. - -1999-08-29 bertrand - - * MAINTAINERS: updated my e-mail address. - -1999-08-28 bertrand - - * camel/camel-mime-part.c (camel_mime_part_set_text): - text parameter declared const - - * camel/camel-mime-part-utils.c (camel_mime_part_store_stream_in_buffer): - actually test correctly nb_bytes_read_chunk is >0 - - * camel/gstring-util.c: - * camel/gmime-content-field.c: - * camel/providers/MH/camel-mh-folder.c: - * camel/camel-stream-fs.c: - include string.h - - * camel/camel-stream-mem.c (_write): return - the numver of written bytes. - - * camel/camel-stream-buffered-fs.c (_eos): - return sthg - - * camel/camel-stream.c (default_camel_seek): - return something. - -1999-08-26 bertrand - - * camel/camel-mime-part.c (_get_content_object): - contruct the content from the buffer before calling - CamelMedium implementation. - (_construct_from_stream): Do not construct the content - by default, just store the content bytes in - a temporary buffer. Content will be constructed only - at caller request (when calling CamelMedium::get_content_object) - Providers with better access to the messages (mbox/MH ...) - will have to provider lighter implementation, that is - shall not read content at all unless the caller asks - for it (again with get_content). - - * camel/camel-mime-part-utils.c: new file, groups - mime-part related utils. Meant to be used by providers - subclassing MimeMessage. - (camel_mime_part_construct_headers_from_stream): - (camel_mime_part_construct_content_from_stream): - no more useless temporary hash table. - - * camel/camel-mime-part.c (_construct_from_stream): calls - mime-part-utils functions now. - - * camel/gmime-utils.c (_store_header_pair_from_string): - do not use hash table to store header, use an array instead. - -1999-08-25 bertrand - - * camel/camel-mime-part.c: now descend from CamelMedium. - - * tests/test1.c (main): all headers must be strdup'ed - (main): unref created objects - - * camel/camel-medium.c (_set_content_object): - (_get_content_object): these methods are - in CamelMedium now. - -1999-08-24 bertrand - - * camel/camel-medium.c (camel_medium_class_init): - new class. Will handle all sort of information media - (Mime mail messages, Lotus Notes mail messages, - postit notes, faxes, who knows .... :) - CamelMimePart will inherit from it. - - * camel/camel-mime-part.c (_set_disposition): - (_set_description): - description and disposition parameters are now const. - - - * camel/gmime-content-field.c (gmime_content_field_free): added - assertion code. - - * camel/providers/MH/camel-mh-folder.c (_get_message): - uses buffered stream. - - * camel/camel-stream-buffered-fs.c: - new stream to accelerate file ops. - -1999-08-20 bertrand - - * camel/camel-stream-fs.c (camel_stream_fs_new_with_name): - name parameter is const. This fixes a bug in destroy () - -1999-08-18 Robert Brady - - * camel/gmime-rfc2047.c: more work on encoder. - -1999-08-17 bertrand - - * camel/camel-stream.c (camel_stream_read): - return the number of bytes read. - How can this have ever worked ? - (camel_stream_flush): don't return anything. - - * camel/gmime-utils.c (get_header_table_from_stream): - mem leak fixed. - -1999-08-16 bertrand - - * tests/ui-tests/store_listing.c: - Now has a popup menu on mailbox tree to allow - easier tests. Implemented the copy stuff. - Works well for the MH provider :))) - - * camel/providers/MH/camel-mh-folder.c (_copy_message_to): - Test MH provider fast copy implemented. - - -1999-08-15 bertrand - - * camel/camel-folder.c (camel_folder_expunge): - moved the active list readjustment code here. - Much saner, providers won't have to worry about - that. - (_copy_message_to): new method. - - * camel/providers/MH/camel-mh-folder.c (_expunge): - no more active list readjustment stuff. - - * camel/camel-folder.h: the expunge virtual no more - returns a list of expunged messages. Now providers - only have to set the expunge flag on the expunged - messages. - - * camel/camel-folder.c (camel_folder_get_message): - moved the caching code here. Finally, I don't want - providers to crash the libs with a bad message cache - implementation. - (_close): do not call the CamelFolder virtual expunge - method directly, use camel_folder_expunge() instead. - (camel_folder_expunge): added the want_list param. - The client can decide if it wants the expunged message - list or not. If yes, it'll have to unref the messages - itself. - -1999-08-14 bertrand - - * tests/ui-tests/store_listing.c (delete_selected_messages): - (expunge_selected_folders): - Implemented deletion/expunge mechanism. - - * camel/camel-folder.c (_get_message): - Added some debug info. - - * camel/providers/MH/camel-mh-folder.c (_expunge): - implemented and tested. - - * camel/camel-mime-message.c (_set_flag): - changed the old braindead implementation. - boolean are inserted in the flag hash - table casted as gpointers. - - - * camel/camel-mime-message.c: indentation fix - - -1999-08-13 bertrand - - * camel/camel-folder.c (_get_message): default implementation - to be called first by providers methods. It looks in the - folder message list (in memory) to see if the message has - not already been retrieved, and in this case, returns - the same CamelMimeMessage object - - * camel/providers/MH/camel-mh-folder.c (_get_message): set - message->message_number correctly. - - * camel/camel-folder.h (struct _CamelFolder): - New field (message_list) which will hold a - reference on each message obtained by the folder, - which is necessary in order for the caching procedure - to work (Getting the same message from a folder twice - will return the same CamelMimeMessage object). - - * camel/camel-folder.c (camel_folder_get_message): - When the store retreives a message put it in its - message list. - (_finalize): free message list. - - * ChangeLog: fix typo (parmanent) - - * camel/camel-folder.c (_get_permanent_flag_list): - (camel_folder_get_permanent_flag_list): - new method, returns the list of permanent - flags supported by the folder. - - * camel/camel-mime-message.c (_get_flag_list): - (camel_mime_message_get_flag_list): new method, - return the list of flag name used by this message. - - * camel/hash-table-utils.c (g_strcase_equal): - (g_strcase_hash): those two func go here now. - - * camel/hash_table_utils.c (hash_table_generic_free): - free a (gpointer, gpointer) hash table pair. - - * camel/camel-mime-message.c (camel_mime_message_init): use - case insensitive hash table functions. - (_set_flag): - (camel_mime_message_set_flag): - (_get_flag): - (camel_mime_message_get_flag): - Use const for flag name, they are now - duplicated. - -1999-08-12 bertrand - - * tests/ui-tests/store_listing.c (show_folder_messages): - remove stupid debug code. - (add_mail_store): use camel_session_get_store instead - of creating MH store directly. - (main): load MH provider. - - * camel/camel-provider.c (camel_provider_register_as_module): - register new provider. - (camel_provider_get_for_protocol): - Now, implementation is correct. - - * camel/camel-store.c (_finalize): - * camel/camel-store.h (struct _CamelStore): - further disabled url_name field use. - URL will be generated dynamically. - - * camel/camel-session.c (camel_session_get_store_for_protocol): - compilation and runtime fixes. - - * camel/providers/MH/camel-mh-store.c (_init): - synced with CamelStore. - - * camel/camel-store.c (_init): - in CamelStore::init, url_name is now const. - disabled url_name copy. - - * camel/camel-session.c (camel_session_get_store): - new function: returns a store for an URL. - (camel_session_get_store_for_protocol): - new functionc: returns a store for a given - store protocol (as IMAP/POP/MH ...) - * camel/string-utils.c (g_strcase_equal): - (g_strcase_hash): case insensitive hash table - funcs. - - * camel/camel-session.c (camel_session_init): hash table - keys are case insensitive. - - * camel/camel-provider.c (camel_provider_get_for_protocol): - new function, returns the last registered - provider for a protocol. - - * camel/providers/MH/camel-mh-provider.c: - new file. MH provider registration stuff. - - * camel/camel-provider.c (camel_provider_register_as_module): - load a provider from a shared object (plugin). - (camel_provider_register): register a provider - "by hand". Used for statically defined providers. - - * tests/test7.c: new test. - tests providers loading framework. - -1999-08-11 - - * camel/camel-service.c (_finalize): - * camel/camel-stream-fs.c (_finalize): - (_destroy): close file descriptor. - * camel/camel-stream-mem.c (_finalize): - * camel/camel-store.c (_finalize): - * camel/camel-folder.c (_finalize): - * camel/camel-multipart.c (_finalize): - * camel/camel-simple-data-wrapper.c (_finalize): - * camel/camel-mime-part.c (_finalize): - implemented destructors. - - - * camel/gmime-content-field.c (gmime_content_field_ref): - (gmime_content_field_unref): - New reference mechanism for GMimeContentField objects. - - * camel/camel-data-wrapper.c (_finalize): - Started implementing destructors. - - * camel/camel-mime-part.c (_construct_from_stream): - * camel/gmime-content-field.c (gmime_content_field_write_to_stream): - * camel/camel-multipart.c (_construct_from_stream): - removed forgotten anarchic traces. - -1999-08-10 bertrand - - * tests/ui-tests/store_listing.c: - * tests/ui-tests/store_listing.glade: - Quick and (very) dirty hack to test Camel more - easily. - - * camel/camel-folder.c (camel_folder_append_message): - new method. - -1999-08-09 bertrand - - * devel-docs/misc/ref_and_id_proposition.txt: - new file. Document message UID and vfolder - implementation. - -1999-08-08 Robert Brady - - * camel/gmime-rfc2047.c: more advanced RFC2047 encoder started. - -1999-08-08 bertrand - - * camel/providers/MH/camel-mh-folder.c (_get_message): - fix. In MH, message number is not related to - message position in folder. - - * camel/providers/MH/camel-mh-folder.c (_is_a_message_file): - util func. - (_get_message_count): implemented. - -1999-08-06 bertrand - - * devel-docs/camel/: - updated some autogen doc stuff. - Still don't understand warnings :( - - * camel/camel-data-wrapper.c: - * camel/providers/MH/camel-mh-store.c: - * camel/url-util.c: - * camel/gmime-content-field.c: - * camel/camel-store.c: - various inline doc corrections. - - * camel/camel-folder.c (get_message_count): - new method. Returns the number of message - in the folder. - - - -1999-08-06 Robert Brady - - * tests/test6.c: encoder test. - - * camel/gmime-rfc2047.c: Fixed decoder bug : sequence - ?= is not always the terminator for an encoded-string. - - -1999-08-06 bertrand - - * camel/providers/MH/camel-mh-folder.c (_list_subfolders): - stat was not testing the good file. Fixed. - - * tests/test4.c (main): added real test for MH folder - provider. All tested things seem to work OK :) - -1998-08-06 Robert Brady - - * tests/test5.c: test for RFC2047 decoder. - - * camel/gmime-rfc2047.c: Improved RFC2047 decoder. - -1999-08-06 bertrand - - * camel/providers/MH/camel-mh-folder.c (_exists): add debug information - (_list_subfolders): test if first char in folder name is not '.' - before adding it to the folder list. - - * camel/camel-store.c (_init): - disable session check temporarily - (_get_separator): - (_get_folder): new static func. - Fixed several oddities in class definition. - - * camel/providers/MH/camel-mh-store.c (camel_mh_store_get_type): - parent type is CAMEL_STORE_TYPE not CAMEL_FOLDER_TYPE - - * camel/camel-store.c: - prent class is CamelServiceClass not GtkObjectClass - - * camel/url-util.c : - cosmetic changes + use of const when possible. - (find_host): - fix a bug: when there is no host and no port don't skip the '/' - all static find_* func are now named _func_* - (g_url_free): destructor func. - cache field has been disabled. Constructing the url string - won't be too slow and will occur rarely enough that we - do not need to add complexity to this code. - - * camel/providers/MH/camel-mh-store.c: - parent class is CamelStorClass not GtkObjectClass - -1999-08-05 bertrand - - * tests/test4.c: - test mh provider. - - * camel/providers/MH/camel-mh-folder.c (_get_message): - implemented - - * camel/camel-folder.c (_get_message): - new method. - (camel_folder_get_message): - corresponding public call - - * camel/README.HACKING: - Some notes. - - * camel/CODING.STYLE: - short note about coding style. - - * camel/README.COPYRIGHT: - Note about copyright policy. - - * camel/providers/MH/camel-mh-folder.c (_list_subfolders): - minor typo fixes. - - -1999-08-04 bertrand - - * camel/gmime-rfc2047.c: - * camel/gmime-rfc2047.h: - indentation and cosmetic changes. - - * camel/providers/MH/camel-mh-folder.c (_list_subfolders): - implemented. - * camel/providers/MH/camel-mh-folder.c (_delete): - finshed implementation - (_delete_messages): implemented. - - -1999-08-04 Robert Brady - - * camel/gmime-rfc2047.[ch]: added an implemention of RFC2047 - (support for character sets other than US-ASCII in MIME - headers). Not actually called from anywhere yet. - - -1999-08-03 bertrand - - * camel/providers/MH/camel-mh-folder.c (_create): - implemented. - (_delete): started implementation. - - * camel/camel-folder.c (_get_folder): default implementation - calls camel_store_get_folder (). - - * camel/providers/MH/camel-mh-folder.c (_init_with_store): - implemented. - - * camel/camel-folder.h (struct _CamelFolder): - remove useless exist_on_store field. - - * camel/camel-folder.c (_exists): - do not use exist_on_store field. - - * camel/camel-folder.c (camel_folder_set_name): - (camel_folder_get_name): - new public functions - (_set_name): set full_path. - - (_set_full_name): - (camel_folder_set_full_name): - commented out this functions def. - It would make things very difficult to handle, and would not - be very useful. - - * camel/providers/MH/camel-mh-store.h: - * camel/providers/MH/camel-mh-store.c (camel_mh_store_set_toplevel_dir): - (camel_mh_store_get_toplevel_dir): - * camel/providers/MH/camel-mh-folder.c (_set_name): - * camel/providers/MH/camel-mh-folder.h: - use (gchar *) instead of (GString *) everywhere. - use const when necessary. - - * camel/camel-folder.h (struct _CamelFolder): - removed unused message_list field. - - * camel/camel-mime-part.c (_set_content_object): - There is a probleme here. We can not allow mime part - content-type field and content_object mime-type to be - different. I thus chosed to set mime part object - content field to be freed (if necessary) and set - to be a pointer to content_object mime type - field. - (_construct_from_stream): set content_object mime type - to be the same as mime_part's one. This is necessary - because we use _set_content_type. - - This two things are a bit hackish ansd may need - to be redesigned. - - * camel/gmime-utils.c (gmime_write_header_pair_to_stream): - use g_strdup_printf and remove a bug. - - * camel/camel-simple-data-wrapper.c (_construct_from_stream): - more debugging output + nb_bytes_read is now a signed int - to avoid bug when eos is encountered. - - * camel/camel-mime-part.c (_construct_from_stream): - sync to data_wrapper_repository function name changes. - Use default "text/plain" type when conten-type field - is not found. (following RFC 2046 spec). - - * camel/data-wrapper-repository.c (data_wrapper_repository_set_data_wrapper_type): - (data_wrapper_repository_get_data_wrapper_type): - change function name prefix (s/data_wrapper/data_wrapper_repository/) - - * camel/camel-multipart.c (_read_part): - add `\n` at eol but not before boundary. - - * camel/gmime-utils.c (get_header_table_from_stream): - correct implementation of end of stream detection. - -1999-08-01 bertrand - - * camel/camel-multipart.c (_read_part): - use a stream to store the part instead of GString. - - * camel/camel-mime-part.c (camel_mime_part_set_text): - set data wrapper content type to "text/plain". - - * camel/camel-stream-mem.c: - * camel/camel-stream-mem.h: - new memory buffer based stream. - - * camel/camel-stream-fs.c (_seek): - implementation for file system based stream. - - * camel/camel-stream.c (camel_stream_seek): - new method. - - * camel/camel-stream-fs.c (camel_stream_fs_class_init): - pass CamelStreamFsClass instead of CamelStreamClass. - -1999-08-01 bertrand - - * camel/gmime-utils.c (gmime_write_header_pair_to_stream): - corrected a bug with memory not allocated for '\0' in strtmp - - * camel/gmime-utils.c (gmime_read_line_from_stream): - do not return NULL when line is empty. - - * camel/camel-multipart.c (_read_part): return true when end - of multipart is found, not the opposite - -1999-07-31 bertrand - - * camel/gmime-utils.c (gmime_read_line_from_stream): - Don't return crlf at end of line. - -1999-07-30 bertrand - - * camel/gmime-utils.c (gmime_read_line_from_stream): - new function: reads a line from a stream. - should be in streams utils maybe. - -1999-07-29 bertrand - - * camel/camel-mime-part.c (_construct_from_stream): - Uses data wrapper repository to find what data wrapper - to use to construct the content from a stream. When - no object is registered for the mime type found in - content type field a CamelSimpleDataWrapper is - used. - - * camel/camel-mime-part.c (_get_content_type): - (camel_mime_part_get_content_type): returns - a pointer on the content_type field instead - of the gchar * mime "type/subtype". - -1999-07-28 bertrand - - - * camel/data-wrapper-repository.c - * camel/data-wrapper-repository.h - New files. Handles mime type <-> camel object - (for example "multipart" <-> CamelMultipart - * tests/tesst3.c: test data repository thing. - -1999-07-26 bertrand - - * camel/camel-multipart.c (_write_to_stream): - implemented output of multipart. - - * tests/test1.c (main): testing content objects operations. - -1999-07-25 bertrand - - * camel/camel-mime-part.c (camel_mime_part_set_text): - new util function to set a mime part content to be - a text string. - - * camel/camel-simple-data-wrapper.c (camel_simple_data_wrapper_set_buffer_from_text): - new util func. - (camel_simple_data_wrapper_new): new func. - - * camel/camel-multipart.c (_write_to_stream): - implemented output of multiparts. - -1999-07-24 bertrand - - * camel/gmime-content-field.c (gmime_content_field_get_parameter): - New function. Returns the value associated to a - mime parameter. - - -1999-07-22 bertrand - - * camel/camel-multipart.h: - * camel/camel-multipart.c: - New class. Models multipart mime objects. - - * camel/camel-mime-body-part.h: - * camel/camel-mime-body-part.c: - New class. Body part is a mime part contained in - a multipart object. - - -1999-07-21 bertrand - - * camel/camel-log.h: - implemented hard log level stuff. - * came/*.c use "CAMEL_LOG_*" instead of "CAMEL_LOG (*" - in order to allow hard level switch. - - * tests/test1.c: - * tests/test2.c: - updated to use gchar instead of GString. Tests passed. - - -1999-07-19 bertrand - - * camel/camel-stream.c: - * camel/camel-stream.h: - "const"-antified - - - * camel/camel-simple-data-wrapper.c: (_construct_from_stream) - do not use any limit when constructing the object from a stream - - * camel/camel-stream-fs.c: - * camel/camel-stream-fs.h: - * camel/camel-mime-message.c: - * camel/camel-mime-message.h: - * camel/camel-session.c: - * camel/camel-session.h: - * camel/camel-service.c: - * camel/camel-service.h: - * camel/camel-store.c: - * camel/camel-store.h: - * camel/camel-folder.c: - * camel/camel-folder.h: - * camel/gmime-utils.c: - * camel/gmime-utils.h: - GString -> gchar - constantified what had to be. - - * camel/string-utils.c: - * camel/string-utils.h: - New files. Meant to replace gstring-util for gchar * - -1999-07-16 bertrand - - * camel/gmime-content-field.c (gmime_content_field_construct_from_string): - GString -> gchar - use const to indicate copied parameter. - -1999-07-15 bertrand - - * camel/camel-simple-data-wrapper.c: - * camel/camel-simple-data-wrapper.h: - Gstring -> gchar - -1999-07-15 bertrand - - * camel/url-util.c: - * camel/url-util.h: - Do not use GStrings any more. - Added assertion code. - Cosmetic reformating - - * AUTHORS: - * ChangeLog: - Changed my email address. - - -1999-07-13 Miguel de Icaza - - * camel/gmime-base64.c (gmime_encode_base64): Implemented base64 - encoder based on CamelStreams. Should the encoder/decoder be a - Stream itself? - - * camel/gmime-utils.c: include config.h here. - * camel/url-util.c: ditto. - * camel/gstring-util.c: ditto. - * camel/gmime-content-field.c: ditto. - * camel/camel-stream.c: ditto. - * camel/camel-stream-fs.c: ditto. - * camel/camel-store.c: ditto. - * camel/camel-simple-data-wrapper.c: ditto. - * camel/camel-session.c: ditto. - * camel/camel-service.c: ditto. - * camel/camel-mime-part.c: ditto. - * camel/camel-mime-message.c: ditto. - * camel/camel-log.c: ditto. - * camel/camel-data-wrapper.c: ditto - * camel/camel-folder.c: ditto. - - * camel/camel-stream.c (camel_stream_write): Moved api - documentation to the places that they document. - (camel_stream_class_init): Virtual classes do not need to have a - default implementation. So null them all. - (camel_stream_write): Return value from write. - (camel_stream_available): implement. - (camel_stream_write_strings): documented. - - * devel-docs/query/virtual-folder-in-depth.sgml: Small - reformatting - -1999-06-28 bertrand - - * tests/test2.c (main): now use - CamelDataWrapper::contruct_form_stream to test - message parsing - - * camel/camel-data-wrapper.c: - * camel/camel-data-wrapper.h: - construct_from_stream no longer has maximimum size arg. - - * camel/camel-mime-part.c (_construct_from_stream): new. - Construct the mime_part from a stream. - - * camel/camel-mime-part.c: - new field (content_type) and associated methods. - (camel_mime_part_init): initialize content_type field. - (_parse_header_pair): now set content_type MimePart field - instead of using DataWrapper Mime typing facility. - -1999-06-28 bertrand - - * camel/camel-data-wrapper.h: - s/content_type/mime_type/ - -1999-06-24 bertrand - - * camel/camel-simple-data-wrapper.[ch]: - new class. Simple implementation of a data wrapper: - simply keeps the stream result in a byte array. - - * camel/camel-mime-part.c (_parse_header_pair): added a warning. - Have to think about the correct way to store content type stuff. - -1999-06-24 bertrand - - * camel/camel-mime-message.c (_write_one_recipient_to_stream): - includes gmime-utils header. - patch from Ulrich Drepper - set separator string in write_header_with_glist_to_stream() - - * camel/camel-log.c (camel_log): - patch from Ulrich Drepper - Do not use stderr in initialization of logfile descriptor. - - * camel/camel-stream-fs.c (camel_stream_fs_new_with_name): - patch from Ulrich Drepper - initialize mode field in open(). - -1999-06-22 bertrand - - * camel/camel-data-wrapper.c (_get_content_type): - moved all the content-type stuff here. - (camel_data_wrapper_init): initialize the instance - content-type field. - - * camel/camel-mime-part.c (_parse_header_pair): - parse Content-Type stuff in header. - (_write_to_stream): write the content type stuff to - the stream. - - * camel/gmime-content-field.c (gmime_content_field_get_mime_type): - new function, returns "type/subtype" mime type string. - (gmime_content_field_construct_from_string): - new function, construbt a content_field object - form a string. be used to set the mime_type from a - string. - - * camel/camel-mime-part.c (_set_content_type): - (camel_mime_part_set_content_type): - (_get_content_type): - (_get_content_type): - new methods. - -1999-06-21 bertrand - - * camel/gmime-utils.c (get_header_table_from_stream): - replace CR/LF+'\t' with ' ' - - * camel/camel-mime-message.c (_set_recipient_list_from_string): - trim \t when splitting - - * camel/gmime-utils.c (get_header_table_from_file): - corrected bug in scanning tabulations ('t' -> '\t') - - * tests/test2.c (main): read mail.test instead - of mail1.test - - * camel/camel-mime-part.c (_add_header): - added comments - -1999-06-03 bertrand - - * devel-docs/query/virtual-folder-in-depth.sgml: - sgmlized Giao's doc about virtual folders. - -1999-05-31 bertrand - - * tests/test2.c (main): - use new stream code instead of raw file * stuff. - - * camel/gmime-utils.c (get_header_table_from_stream): - new func. Will replace get_header_table_from_file and will - be used to parse headers from files as well as from - memory buffers. - - * camel/camel-stream-fs.c: - CamelStream Subclass. File system based - stream. - - -1999-05-30 bertrand - - * camel/camel-stream.h: new class. Represents an - abstract stream object. - - * camel/camel-mime-message.c (_set_recipient_list_from_string): - remove leading and trailing spaces in recipient addresses. - - * camel/gmime-utils.c (_store_header_pair_from_gstring): - remove leading and trailing spaces from header values. - - * camel/gstring-util.c (g_string_trim): new - func: remove leading or trailng chars from - a specified char set. - (g_string_split): allow trimming of substrings. - - * tests/test1.c (main): remove gtk_main call - -1999-05-28 bertrand - - * camel/camel-mime-part.c - (_parse_header_pair): - (_init_header_name_table): - More header parsing code. - - -1999-05-27 bertrand - - * tests/test2.c (main): rewrite message obtained via - parsing into a file. Actually, it works pretty well :)) - - * camel/camel-mime-message.c (_set_recipient_list_from_string): - create recipient list form a comma separated string. - (_parse_header_pair): added recipient lists parsing. - - * camel/camel-mime-part.c (_parse_header_pair): - new (protected) method. Parse a head pair and - decides what to do with it. - - (_add_header): Call in _parse_header_pair - - * camel/camel-mime-message.c (_parse_header_pair): - overload header parsing MimePart mthod. - - * camel/gstring-util.c (g_string_split): - new func: split a gstring into a GList of - substring. - -1999-05-26 bertrand - - * camel/gmime-utils.c (get_header_lines_from_file): - new func. Parses message header zone and returns - a Glist of all header lines. - - * tests/test2.c: tests message parsing - - * camel/gmime-utils.c (write_header_table_to_file): - new func to write a table of headers. - -1999-05-20 bertrand - - * camel/camel-mime-message.c (_write_to_file): - recipient list printing - - * tests/test1.c (main): more tests. - -1999-05-19 bertrand - - * camel/camel-mime-part.c (_write_to_file): test if content - exists before calling its write_to method. - - * camel/camel-mime-message.c (_write_to_file): bugs fix. - - * camel/camel-mime-message.c (camel_mime_message_new_with_session): - new func. Creates a message with the session field set - up correctly. - -1999-05-18 bertrand - - * tests/test1.c (main): tests - - * camel/camel-mime-message.c (_write_to_file): - started write_to framework for mime_messages - - * camel/camel-mime-message.c (*_message_number): - message number funcs. - -1999-05-15 bertrand - - * camel/camel-mime-message.c (*_flag): - flags handling methods - -1999-05-14 bertrand - - * camel/camel-mime-message.c (camel_mime_message_class_init): - added recipient handling class funcs. - -1999-05-13 bertrand - - * camel/camel-mime-message.c (camel_mime_message_init): - create recipients hash table - (_remove_recipient): - (_add_recipient): - (_get_recipients): new funcs. - Internal Recipients data structure is - a bit complicated though. - - * camel/camel-mime-part.c (camel_mime_part_init): - create headers hash table - - * camel/camel-mime-message.h: - a bunch of get/set header field - method done. Does nothing yet though. - - * camel/camel-mime-message.[ch] : - new file. - -1999-05-12 bertrand - - * camel/camel-mime-part.h (struct ): - disposition is now a full GMimeContentField - object. - - * camel/gmime-content-field.c: new file - handle "type/subtype ;parameter=value ; parameter=value ..." - BNF grammar elements - (gmime_content_field_write_to_file): new func - - * camel/gmime-utils.c (gmime_write_header_pair_to_file): - namespace change - -1999-05-11 bertrand - - * camel/camel-mime-part.c (_write_to_file): - overload wrapper class method. - (_write_to_file): start to write some text in - file. - - * camel/camel-store.c: typo fix. - - * camel/camel-store.c: - * camel/camel-service.c: - * camel/camel-folder.c: - * camel/camel-data-wrapper.c: - * camel/camel-mime-part.c: - static functions naming follows gnome - coding style guide. - - * camel/camel-mime-part.h: implemented public interfaces - - -1999-05-10 Bertrand Guiheneuf - - * camel/camel-mime-part.c (__camel_mime_part_get_header_lines): - (__camel_mime_part_set_header_lines): - (__camel_mime_part_get_content_languages): - (__camel_mime_part_set_content_languages): - (__camel_mime_part_get_encoding): - (__camel_mime_part_set_encoding): - (__camel_mime_part_get_content_MD5): - (__camel_mime_part_set_content_MD5): - (__camel_mime_part_get_content_id): - (__camel_mime_part_set_content_id): - A bunch of new set/get func. - - * camel/gstring-util.c (g_string_list_free): - convenience function for string list - complete deallocation. - -1999-05-09 bertrand - - * camel/camel-mime-part.c (__camel_mime_part_add_header): - new method - - * camel/camel-mime-part.h (struct CamelMimePart): - added core fields. - -1999-05-08 bertrand - - * camel/camel-mime-part.[ch]: - new class. models a mime mail part. - - * camel/camel-data-wrapper.c - (camel_data_wrapper_write_to_buffer): method to - stream data content in a buffer. - (camel_data_wrapper_write_to_file): - (camel_data_wrapper_construct_from_buffer): - (camel_data_wrapper_construct_from_file): - new methods. - -1999-05-07 bertrand - - * camel/camel-data-wrapper.[ch]:new class. - This should not be a class but rather an - interface. The day Gtk support interfaces, - it dataWrapper should become an interface. - -1999-05-04 bertrand - - * camel/camel-service.c (camel_service_get_url): - new method. - - * devel-docs/camel/camel-sections.txt: added - function doc references - - * camel/camel-folder.c (__camel_folder_close): - fixed indentation. - (camel_folder_expunge): new method. - (__camel_folder_close): used expunge flag - -1999-05-03 bertrand - - * camel/camel-folder.c (camel_folder_get_mode): - typo fix - - * camel/camel-folder.c (__camel_folder_list_subfolders): - new func. - - * some doc stuffs - - -1999-05-01 bertrand - - * camel/camel-folder.c - (__camel_folder_get_mode): - (camel_folder_get_mode): - (camel_folder_get_parent_store): - (__camel_folder_get_parent_store): - (camel_folder_get_parent_folder): - (__camel_folder_get_parent_folder): - new methods - - * camel/camel-service.c: put __ prefix before - private virtual funcs. - - * camel/camel-folder.c (camel_folder_delete): - (camel_folder_delete_messages): - new methods. - - * camel/url-util.c (g_url_new): some - more comments - -1999-04-27 bertrand - - * camel/camel-folder.c (camel_folder_create): - new public function. - -1999-04-25 bertrand - - * camel/camel-session.c (camel_session_get_store_from_provider): - initialize folder object. - - * camel/camel-store.c (init): new method. - called by session object at instantiation time. - - * camel/camel-store.h (struct _CamelStore): - new fields : session and url_name - -1999-04-25 bertrand - - * camel/camel-session.c (camel_session_set_provider): - new method to set the default provider for a protocol. - (camel_session_get_store_from_provider): - new method to instantiate a folder from a provider. - - * camel/camel-provider.h: s/GString/gchar/g - + typo fix. - - * camel/camel-provider.[ch]: - basic provider structure. Have to write the - code for dynamic loading. - -1999-04-24 bertrand - - * camel/url-util.[ch]: s/new_g_url/g_url_new - - * camel/url-util.c (new_g_url): URL - rewritten completely. Error handling not - implemented in public functions. - But URL scan works pretty well :))) - -1999-04-24 bertrand - - * camel/url-util.[ch]: I needed the url - functions to use GString, and I wanted a more - general scheme so I finally started rewriting - the whole thing from scratch. - No more code from gzilla :( - -1999-04-23 bertrand - - * camel/url-util.[ch]: - Utility functions to parse URLs. - Stolen shamelessly from gzilla (www.gzilla.com) - written by Raph Levien - - * camel/Makefile.am: added url-util.[ch] - compilation. - - * Makefile.am (SUBDIRS): removed devel-docs - until I come up with a correct Makefile.am - - * camel/camel-store.h: - * camel/camel-folder.h: - correct declarations of structs - - -1999-04-22 bertrand - - * camel/providers/MH/camel-mh-store.c: - more test implementation. - - * camel/camel-store.c (camel_store_get_type): typo fix - - -1999-04-21 bertrand - - * camel/providers/MH/camel-mh-folder.c (camel_mh_folder_get_type): - start test provider. - -1999-04-20 bertrand - - * camel/camel-store.h: now CamelStore inherits from - CamelService. - - * camel/camel-service.c (camel_service_class_init): - basic abstract service class. - -1999-04-19 bertrand - - * camel/README: added some (few) explanations. - -1999-04-18 bertrand - - * camel/camel-store.[ch]: started implementation - * camel/camel-folder.c (camel_folder_get_type): typo - uncommented the store related code. - (camel_folder_create): enable som store relted code. - Not finished. Have to define public methods first. - - * camel/camel-log.h: some explanation about the - log system - -1999-04-18 bertrand - - * camel/camel-folder.c: - (camel_folder_create): implemented (partially) - have to write CamelStore before finishing it. - - * camel/camel-folder.h (CamelFolder): added full_name field - (CamelFolderClass): added set/get_full_name methods - -1999-04-18 bertrand - - * camel/camel-folder.c: some work - * camel/camel-log.c: log system for camel - * camel/gstring-util.c: some utilities for GString objects - - -1999-04-18 bertrand - - * autogen.sh (PKG_NAME): groomf -> gnome-mailer - diff --git a/HACKING b/HACKING deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/INSTALL b/INSTALL deleted file mode 100644 index b42a17ac46..0000000000 --- a/INSTALL +++ /dev/null @@ -1,182 +0,0 @@ -Basic Installation -================== - - These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, a file -`config.cache' that saves the results of its tests to speed up -reconfiguring, and a file `config.log' containing compiler output -(useful mainly for debugging `configure'). - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If at some point `config.cache' -contains results you don't want to keep, you may remove or edit it. - - The file `configure.in' is used to create `configure' by a program -called `autoconf'. You only need `configure.in' if you want to change -it or regenerate `configure' using a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. You can give `configure' -initial values for variables by setting them in the environment. Using -a Bourne-compatible shell, you can do that on the command line like -this: - CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure - -Or on systems that have the `env' program, you can do it like this: - env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not supports the `VPATH' -variable, you have to compile the package for one architecture at a time -in the source code directory. After you have installed the package for -one architecture, use `make distclean' before reconfiguring for another -architecture. - -Installation Names -================== - - By default, `make install' will install the package's files in -`/usr/local/bin', `/usr/local/man', etc. You can specify an -installation prefix other than `/usr/local' by giving `configure' the -option `--prefix=PATH'. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -give `configure' the option `--exec-prefix=PATH', the package will use -PATH as the prefix for installing programs and libraries. -Documentation and other data files will still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=PATH' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - - There may be some features `configure' can not figure out -automatically, but needs to determine by the type of host the package -will run on. Usually `configure' can figure that out, but if it prints -a message saying it can not guess the host type, give it the -`--host=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name with three fields: - CPU-COMPANY-SYSTEM - -See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the host type. - - If you are building compiler tools for cross-compiling, you can also -use the `--target=TYPE' option to select the type of system they will -produce code for and the `--build=TYPE' option to select the type of -system on which you are compiling the package. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Operation Controls -================== - - `configure' recognizes the following options to control how it -operates. - -`--cache-file=FILE' - Use and save the results of the tests in FILE instead of - `./config.cache'. Set FILE to `/dev/null' to disable caching, for - debugging `configure'. - -`--help' - Print a summary of the options to `configure', and exit. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--version' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`configure' also accepts some other, not widely useful, options. diff --git a/MAINTAINERS b/MAINTAINERS deleted file mode 100644 index 7a42d1eee8..0000000000 --- a/MAINTAINERS +++ /dev/null @@ -1 +0,0 @@ -Email: miguel@kernel.org diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 0aa8f77438..0000000000 --- a/Makefile.am +++ /dev/null @@ -1,49 +0,0 @@ -changelogs = \ - ChangeLog - -appicondir = $(datadir)/pixmaps -appicon_DATA = evolution.png - -applicationdir = $(datadir)/gnome/apps/Applications -application_DATA = evolution.desktop - -EXTRA_DIST = \ - AUTHORS \ - $(changelogs) \ - README \ - HACKING \ - MAINTAINERS \ - NEWS \ - evolution.spec.in \ - $(appicon_DATA) \ - $(application_DATA) - - -SUBDIRS = \ - intl \ - macros \ - data \ - e-util \ - widgets \ - shell \ - libibex \ - camel \ - filter \ - composer \ - mail \ - libical \ - libversit \ - addressbook \ - calendar \ - wombat \ - art \ - default_user \ - tools \ - po \ - doc - - -dist-hook: evolution.spec - cp evolution.spec $(distdir) - - diff --git a/NEWS b/NEWS deleted file mode 100644 index 48883adf2b..0000000000 --- a/NEWS +++ /dev/null @@ -1,367 +0,0 @@ -Version 0.4, "Alewife", 2000-08-14 ----------------------------------- - -Shell: - - - Added interfaces to display messages and a progress bar when the - component is busy. (Ettore) - - - Changed the shell BonoboUIHandler code to allow placing menu items - such as "Print" in the right places. (Ettore) - - - Added code to check if an existing `~/evolution' directory - actually has the content we expect and, if not, complain to the - user. (Dan) - - - Fixed some Bonobo-related refcounting problems. (Michael Meeks) - - - Removed the GConf dependency. (JP) - - - Improved the API for the folder selection dialog. (Ettore) - - - Memory leak fixes. (Peter) - -Calendar: - - The calendar is in the middle of major rewrite. Evolution 0.4 - ships with essentially the same calendar component as 0.3 did. - -Addressbook: - - - More work on the Palm Pilot conduits. (Chris Toshok) - - - Fixed some LDAP-related crashes. (Chris Toshok) - - - Added support for displaying embedded vCards through a Bonobo - component. (Chris Lahey) - - - Added support for generic fields. (Chris Lahey) - - - Fixed the navigation order for the Tab key in the contact editor - window. (Chris Lahey) - - - Fixed some Bonobo-related bugs and crashes. (Chris Lahey, Michael - Meeks) - - - Only display entries that have an email address in the address - selector dialog. (Chris Lahey) - - - Added an utility program to import vCards from Gnomecard. (Chris - Lahey) - -Mailer: - - Generic - - - Long mailer operations (such as fetching new mail) now run - asynchronously rather than blocking the UI. This involved - a major rewrite of much of the Camel and mailer code. (Peter) - - - GPG/PGP message decryption support (Nathan Thompson-Amato, Dan) - - - Unfinished messages in the composer can be saved to the "Drafts" - folder and finished later. (Jeff) - - - Double-clicking on a message in the message view now opens it in a - separate window. (Jeff) - - - vCards attached to messages now bring up a minicard view with a - button to add the vCard to the addressbook (Chris Lahey, Dan) - - - Inline uuencoded/binhexed "attachment" support (Dan) - - - "Mark All Messages Seen" command. (Cody Russell) - - Filters / VFolders - - - Major filter/vfolder dialog rewrite (Michael Zucchi) VFolders can - now search any (searchable) folder, not just Inbox. - - - Auto-filter/auto-vfolder code (right click on a message in the - list and pick one of the options at the bottom of the menu to - create a filter/vfolder rule for similar messages). (Michael) - - - You can now set the color of messages in the message list, based - on filter rules. (Local stores can also now store arbitrary user - flags, although there is not yet UI code to set/view them.) - (Michael) - - - Added "Save" button to the quicksearch bar to save a search as a - vfolder. (Michael) - - Configuration - - - Major mail config dialog rewrite (JP). - - - The mailer now remembers your threaded/unthreaded message view - setting between sessions. (Jeremy Wise). - - - Support for multiple identities (JP, Jeff), sources (JP, Peter), and - IMAP servers (JP, Dan) - - Providers - - - You can now leave POP mail on the server. (This will [currently] - only work right with POP servers that support the UIDL command. - On other servers, it will never download some messages unless you - never delete mail.) - - - There is now an MH-like local store available, and code to convert - a folder from one type to the other. (Michael) - - - The mbox provider now writes out "From " lines that are more - compatible with other mailers (like Mutt) that are picky about - their exact format. (Michael) - - - The IMAP provider now supports searching (Jeff). Also various - other speed/efficiency/robustness improvements (Jeff), and support - for old IMAP4 servers as well as IMAP4rev1 (Jon K Hellan). - - -Version 0.3, "Jellyfish", 2000-07-21 ------------------------------------- - -Shell: - - - Pop-up folder selection. (Ettore) - - - Added support for multiple views. (Ettore) - - - Added support for saving component-specific settings, and - some initial code to save the view's configuration. - (Ettore) - - - Fixed the Bonobo menu code so that it works with all the - locales. (Ettore) - -Mailer: - - - Lots of IMAP fixes. (Jeff) - - - You can use an external setuid/setgid movemail program - (although we don't ship our own yet). If you have one - installed with emacs, the configure script will find - that. Otherwise, you can specify --with-movemail=/path. - (Dan) - - - You can toggle HTML/plain text for an individual message - in the composer now. (Ettore) - - - Bonobo embedding sort of works again, but there are - problems with size allocation somewhere. Attachments can now - also be handled by external applications. (Dan) - - - text/plain mail is now line-wrapped in the mail display, - to deal with people who don't put newlines in their mail. - (Dan) - - - Allow user to specify IMAP namespace in the mail config - dialog. (Dan, Jeff) - - - Quoted-printable encoder fixes. (Michael Zucchi) - - - Various NNTP fixes, include a news pane in the config - dialog. (Chris Toshok) - - - Some memory corruption fixes. (Peter Williams) - - - Fix for message not being re-drawn as deleted. (Peter - Williams, Jeff) - - - Moving a message to another folder copies the flags now - (Jeff) - - - Close signature in HTML mail with , not
, and
-    default to ~/.signature.  (Michael Meeks)
-
-  - Fixed some confusing behavior in the message threading
-    algorithm.  (Dan)
-
-  - Improvements to the item selection code.  (Chris Lahey)
-
-Calendar:
-
-  - Added support for a bunch of previously unsupported iCalendar
-    properties.  (Federico)
-
-  - Conduit for synchronizing the calendar with gnome-pilot
-    (requires gnome-pilot from CVS).  (Seth)
-
-  - ETable-based to-do list view ("taskpad"), for your viewing
-    pleasure.
-
-Addressbook:
-
-  - Conduit for synchronizing the addressbook with gnome-pilot
-    (requires gnome-pilot from CVS).  (Chris Toshok)
-
-  - Conduit for synchronizing the addressbook with gnome-pilot
-    (requires gnome-pilot from CVS).  (Chris Toshok)
-
-  - Fixed some random crashes.  (Chris Lahey)
-
-  - Implemented a vCard Bonobo control so that we can support
-    inline vCard viewing in the mailer.  (Chris Lahey)
-
-  - Quick search looks at both the name and the company name now.
-    (Chris Lahey)
-
-  - Added more functionality to the contact editor's toolbar.  (Chris
-    Lahey)
-
-  - Support for printing single cards.  (Chris Lahey)
-
-Version 0.2, "Saccharomyces", 2000-07-11
-----------------------------------------
-
-Shell:
-
-  * Folder selection dialog (Ettore).
-
-  * Folder creation dialog (Ettore).
-
-Addressbook:
-
-  * LDAP server configuration dialog (Chris Toshok).
-  
-  * Integration of LDAP servers in the shell's tree view (Chris Toshok).
-  
-  * ETable-based view (Chris Lahey).
-  
-  * Printing support for the ETable-based view (Chris Lahey).
-  
-  * Address selection dialog integrated with the message composer (Chris
-    Lahey).
-  
-  * Many miscellaneous bugs fixed (everyone).
-
-Calendar:
-
-  * Printing support (Michael, Federico).
-  
-  * Many, many behavior fixes and polishing to the day/week/month view
-    widgets (Damon).
-  
-  * New glade-based event editor.  This is unfinished but usable (Seth,
-    Federico).
-  
-  * Mouse wheel scrolling support (Anders).
-  
-  * We have an awesome new engine for computing recurring events
-    (Damon).  This will be plugged in to the new iCalendar code.
-  
-  * Internal and public API fixes (Federico, Seth).
-  
-  * Shell-related changes (Ettore).
-  
-  * Data model for ETable; this is not used yet (Federico).
-  
-  * New iCalendar support; this is not used yet (Federico).
-  
-  * Pilot syncing updates; this is not used yet (Seth).
-  
-  * Many miscellaneous bugs fixed (everyone).
-
-
-Mailer:
-
-  Major features:
-
-  * Basic IMAP support (Jeff)
-
-  * Threaded message view (Michael, Chris Toshok)
-
-  * Filters now work (original work by Michael, bugfixes by Dan)
-
-
-  Smaller features:
-
-  * Implemented moving messages between folders (Dan)
-
-  * Very basic printing support (Dan, but it was only like 5 lines
-    of code, because gnome-print kicks ass)
-
-  * "Delete", "Forward", and "Refile" operations now work on
-    multiple messages. (Chris Lahey, Peter Williams, Dan)
-
-  * Toggle read/unread flag when the user clicks on the envelope
-    icon (Chris Lahey, Dan).
-
-  * The "New folder" menu item now works (Ettore, Dan).
-
-  * The filter/vfolder druid now uses the new shell folder selection
-    UI (Michael)
-
-  * Added "Cc" to the set of filter/vfolderable headers and make the
-    filter/vfolder "messages to address" rule work with to or cc.
-    (Dan)
-
-  * New key bindings: "Delete" deletes the current message and jumps
-    to the next undeleted message. "N" and "P" go to next/previous
-    unread message. (Dan)
-
-  * Keep asking for POP/IMAP password until the user gets it correct
-    or hits Cancel, and remember the result until the user exits (or
-    chooses "Forget Passwords"). (Dan, Jeff)
-
-  * Kludge Camel to output ISO-8859-1 instead of UTF-8, since
-    neither GtkHTML nor ETable supports UTF-8 still. (Dan)
-
-  * Use the gnome-vfs "sniff buffer" interface to try to identify
-    the MIME type of attachments without useful type information
-    (Dan)
-
-  * Allow saving drafts in the composer (Ettore)
-
-  * Added "Received date" header to the set of possible message list
-    headers. (Dan)
-
-  * Partial gladification of the config dialog (JP Rosevear)
-
-
-  Bug fixes:
-
-  * Message read/unread/deleted flags should now be saved reliably
-    when you exit, and summary should not be rebuilt when a rebuild
-    isn't needed. Expunging should work reliably (Dan, Ettore,
-    Jeff).
-
-  * Fix disappearing toolbar bug (Dan).
-
-  * Fixed a bug that made downloading of very large messages over
-    POP incredibly slow, and various other smaller POP bugs. (Dan)
-
-  * Fixed bugs that made large attachments sometimes get dropped and
-    small ones sometimes get truncated. (Dan)
-
-  * Fixed filter/vfolder "messages to address" rule to correctly
-    match "to" rather than "from". (Michael)
-
-  * Fix some text/plain formatting bugs in the composer. (Dan,
-    Ettore)
-
-  * Turn off search mode when getting new mail (to avoid corrupting
-    the display). Make "get mail" always put unfiltered mail into
-    Inbox rather than the current folder. (Dan)
-
-  * Fixed a bug that caused "Re:" to be prepended even to subjects
-    that started with "Re:" when replying. Added a default subject
-    to forwarded messages. (Dan)
-
-  * Make the "Attach" dialog in the composer remember the last
-    directory it was in. (Dan)
-
-  * Code to parse invalid date formats since some mailers generate
-    them... (Jeff)
-
-  * Fixed various small SMTP bugs (Jeff, Chris Lahey)
-
-  * Fixed some memory leaks (Peter, Jeff)
-
-  * Make replies use the text/plain part of a multipart/alternative
-    if the user configured plain text rather than HTML mail sending.
-    (Dan)
-
-  * Various config dialog fixes (Jeff)
-
-  * Partial filter/vfolder GUI facelift (Jacob)
diff --git a/README b/README
deleted file mode 100644
index 6457c9bc80..0000000000
--- a/README
+++ /dev/null
@@ -1,171 +0,0 @@
-Evolution is the integrated mail, calendar and address book
-distributed suite from Helix Code, Inc.
-
-See http://www.helixcode.com/apps/evolution.php3 for more information.
-
-Note that Evolution is still beta. This means it may delete all of
-your mail if you give it the chance.
-
-If you are interested in hacking on Evolution, you should subscribe to
-the Evolution mailing list. Send mail to
-"evolution-request@helixcode.com" with the word "subscribe" in the
-body of the message. If you are planning to work on any part of
-Evolution, please send mail to the mailing list first, to avoid
-duplicated effort (and to make sure that you aren't basing your work
-on interfaces that are expected to change).
-
-There is a mailing list archive available at
-http://lists.helixcode.com/archives/public/evolution/
-
-There is also an #evolution IRC channel on irc.gnome.org.
-
-
-HOW TO BUILD EVOLUTION
-----------------------
-
-	*** READ THIS BEFORE YOU START BUILDING ANYTHING! ***
-
-Evolution depends on a large number of unreleased and rapidly-changing
-libraries. Some of these libraries in turn depend on other unreleased
-and rapidly-changing libraries.
-
-Building Evolution is HARD, and it's going to stay hard until all of
-the libraries it depends on stabilize, and there's nothing we can do
-to make it any easier until then.
-
-
-General Principles
-------------------
-
-First you have to decide whether you want to install Evolution (and
-its dependencies) into the same prefix as the rest of your GNOME
-install, or into a new prefix. Installing everything into the same
-prefix as the rest of your GNOME install will make it much easier to
-build and run programs, but may make it harder to uninstall later.
-
-If you want to install into the same prefix as the rest of GNOME,
-type:
-
-	gnome-config --prefix
-	gnome-config --sysconfdir
-
-and remember the answers, and pass them to "configure" and "autogen"
-when building the other packages you need. Eg:
-
-	./configure --prefix=/usr --sysconfdir=/etc
-
-
-If you do not do this, you will need to set the GNOME_PATH environment
-variable (and ACLOCAL_FLAGS as well if building from CVS) to include
-the prefix you install into. Eg:
-
-        export GNOME_PATH=/usr/local
-	export ACLOCAL_FLAGS="-I /usr/local/share/aclocal"
-
-(Assuming your shell is bash, and you installed into /usr/local.) You
-need to set GNOME_PATH both during compiling AND when you run
-evolution. Remember also that if you're installing into an odd prefix
-such as /evolution, that you also need to make sure to put
-${prefix}/bin in your PATH.
-
-If you install Evolution into a different prefix from OAF, you will
-also need to set OAF_INFO_PATH to include the directory where the
-oafinfo files are installed (${prefix}/share/oaf). (OAF will
-eventually obey the GNOME_PATH variable, but it does not do so
-currently.) Eg:
-
-	export OAF_INFO_PATH=/usr/local/share/oaf
-
-If you are already running an oafd, you will need to kill it after
-setting that variable so it gets restarted later with that in its
-environment.
-
-
-Dependencies
-------------
-
-All of these libraries are available in GNOME CVS, under the given
-names. Most (but not all) of them are also available as tarballs on
-ftp.gnome.org. The (*)ed packages are available in Helix GNOME.
-(http://www.helixcode.com/desktop/)
-
- - gnome-xml - 1.8.7 or later in the 1.0 series, but not from the 2.0
-   series (If you get this from GNOME CVS, use the tag "LIB_XML_1_X".)
-   (*)
-
- - gnome-print - 0.20 (*). The gnome-print CVS HEAD will NOT work, nor
-   will 0.21.
-
- - gdk-pixbuf - 0.7.0 or later (*)
-
- - ORBit - 0.5.3 or later (*)
-
- - oaf - 0.5 or later
-
-   *** If you are using oaf from CVS, you should use the flag
-   *** "--disable-more-warnings" when configure, or it may fail to
-   *** build.
-
- - gnome-vfs - 0.3 or later
-
-   *** If you are using gnome-vfs from CVS, you should use the flag
-   *** "--disable-more-warnings" when configuring, or it may fail to
-   *** build.
-
- - bonobo - 0.17 or later
-
-   *** Note that bonobo must be installed with the same --prefix as
-   *** either gnome-libs or evolution for the Makefiles to work
-   *** properly.
-
- - libunicode - 0.4 or later, available from
-   http://www.pango.org/download.shtml
-
- - gconf - 0.6 or later
-
- - gtkhtml - 0.5 or later
-
- - libglade (*)
-
-If you want support for PalmPilot syncing (currently only supported by
-the calendar and not yet very stable/functional), you will also need
-the following packages:
-
- - pilot-link (*)
-
- - gnome-pilot - from CVS, with --enable-oaf
-
-
-
-
-The layout of the source tree is:
-
-addressbook:	the Address Book UI
-art:		graphics used by evolution
-calendar:	the Calendar UI
-camel:		libcamel, a messaging library used by the mailer.
-		Camel is inspired by Sun's JavaMail
-		(http://java.sun.com/products/javamail/) and the
-		IMAPv4 spec (RFC 2060).
-composer:	the message composer UI
-data:		the .desktop file for Evolution
-default_user:	initial Evolution config files for new users
-devel-docs:	entirely inadequate documentation
-doc:		more adequate documentation
-e-util:		utility code used by various parts of Evolution
-filter:		libfilter, a mail filtering library
-libibex:	an indexing library used by the mailer
-libical:	a library for the iCalendar format (RFC 2445-2446)
-libversit:	a library for the vCard (RFC 2425-2426) and vCalendar
-		(http://www.imc.org/pdi/vcal-10.txt) formats
-mail:		the mail display UI
-shell:		the Evolution shell (the main program that launches
-		the other components)
-tests:		some test programs
-tools:		utilities, notably "killev", a script to kill of all
-		of the Evolution components
-widgets:	widgets used by Evolution, including the shortcut bar,
-		ETable, and EText
-wombat:		Has source code that will load in the addressbook
-		and calendar backend, and will form the server
-		process we'll be using
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644
index 70c43a6dfb..0000000000
--- a/acconfig.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#undef ENABLE_NLS
-#undef HAVE_CATGETS
-#undef HAVE_GETTEXT
-#undef HAVE_LC_MESSAGES
-#undef HAVE_STPCPY
-#undef HAVE_LIBSM
-#undef PACKAGE
-#undef VERSION
-#undef HAVE_BONOBO
-#undef ENABLE_THREADS
-#undef SENDMAIL_PATH
-#undef SYSTEM_MAIL_DIR
-#undef HAVE_LDAP
-#undef HAVE_TIMEZONE
-#undef HAVE_TM_GMTOFF
-#undef USING_OAF
-#undef HAVE_KRB4
-#undef HAVE_KRB5
-#undef USE_BROKEN_THREADS
-#undef BONOBO_POST_0_15
-#undef MOVEMAIL_PATH
-#undef PGP_PROGRAM
-#undef GPG_PATH
-#undef PGP5_PATH
-#undef PGP_PATH
-
-/* Define this if you want to build against the development gtk */
-#undef HAVE_DEVGTK
-
-/* Define if ctime_r takes three arguments */
-#undef CTIME_R_THREE_ARGS
diff --git a/addressbook/.cvsignore b/addressbook/.cvsignore
deleted file mode 100644
index 09980ae6ba..0000000000
--- a/addressbook/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
deleted file mode 100644
index 5f86fa875b..0000000000
--- a/addressbook/ChangeLog
+++ /dev/null
@@ -1,2135 +0,0 @@
-2000-08-22  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Linked in the search dialog again.
-	It looks like some changes in the shell made this not work.
-
-2000-08-19  Christopher James Lahey  
-
-	* conduit/address-conduit.c, conduit/address-conduit.h: Changed
-	this to use ECardSimple.
-
-	* contact-editor/e-contact-editor.c: Fixed a memory leak.
-
-	* gui/component/addressbook.c: Added stuff to the right click
-	menu.  Activated the new search dialog that doesn't quite work
-	yet.
-
-	* gui/minicard/e-minicard-view.c: Fixed some run time warnings.
-
-2000-08-15  Larry Ewing  
-
-	* gui/minicard/e-minicard.c (e_minicard_event): use style colors
-	for the selected state.  This doesn't properly redraw the minicard
-	when there is a style_change event, that is next.
-	(e_minicard_realize): use style colors.
-
-2000-08-14  Peter Williams  
-
-	* backend/pas/pas-backend-file.c: Include the proper db1/db.h
-	as in RedHat 7.0 -- patch from Kenny Graunke 
-
-2000-08-13  Chris Toshok  
-
-	* conduit/Makefile.am (libaddress_conduit_la_SOURCES): add
-	address-conduit.h
-
-	* Makefile.am (CONDUIT_SUBDIR): only set subdir if
-	ENABLE_PILOT_CONDUITS is set.
-
-2000-08-13  Chris Toshok  
-
-	* Makefile.am (SUBDIRS): add conduit subdir.
-
-2000-08-13  Chris Toshok  
-
-	* conduit/address-conduit.c (conduit_get_gpilot_conduit): add
-	special oaf initialization hack so conduit can find wombat, and
-	accept all cookies so that we can actually talk to oaf.
-
-2000-08-13  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c: Fixed a typo that cause the
-	wrong field to be searched.
-
-	* gui/component/select-names/e-select-names.c: Made the select
-	names dialog only display entries with email addresses.
-
-2000-08-12  Christopher James Lahey  
-
-	* contact-editor/contact-editor.glade: Fixed a typo in the name of
-	the first phone entry.
-
-2000-08-12  Christopher James Lahey  
-
-	* gui/search/Makefile.am,
-	gui/search/e-addressbook-search-dialog.c,
-	gui/search/e-addressbook-search-dialog.h: A few small interface
-	fixes.
-
-	* gui/component/Makefile.am: Link in the addressbook search
-	dialog.
-
-2000-08-12  Christopher James Lahey  
-
-	* gui/Makefile.am: Added the search directory.
-
-	* backend/ebook/e-book.c: Fixed a potential crash.
-
-	* gui/minicard/e-reflow-sorted.h: Fixed an include line.
-
-	* gui/search/.cvsignore, gui/search/Makefile.am: New files.
-
-	* gui/search/e-addressbook-search-dialog.c: Fixed compilation.
-
-2000-08-12  Christopher James Lahey  
-
-	* printing/Makefile.am: Ettore fixed compilation.
-
-2000-08-12  Christopher James Lahey  
-
-	* backend/ebook/.cvsignore: Added load-gnomecard-addressbook.
-
-2000-08-12  Christopher James Lahey  
-
-	* gui/search/e-addressbook-search-dialog.c,
-	gui/search/e-addressbook-search-dialog.h: Made this into a Gtk
-	object.
-
-2000-08-12  Christopher James Lahey  
-
-	* backend/pas/pas-book-view.c: Ref our book view listener.
-
-	* gui/component/addressbook.c: Updated to use new minicard view
-	widget.
-
-	* gui/minicard/Makefile.am: Added e-minicard-view-widget.c and
-	e-minicard-view-widget.h.
-
-	* gui/minicard/e-minicard-view-widget.c,
-	gui/minicard/e-minicard-view-widget.h: New class that's just a
-	minicard view in an ECanvas.
-
-	* gui/search/e-addressbook-search-dialog.c: New file for
-	implementing a search dialog.
-
-2000-08-11  Chris Toshok  
-
-	* conduit/address-conduit.c (transmit): implement code to encode
-	the first email address and send to the pilot.
-	(get_phone_label_by_flag): rename find_phone_label_for_flags to
-	this, and implement by calling get_phone_label_by_name.
-
-2000-08-11  Chris Toshok  
-
-	* conduit/address-conduit.c (ecard_from_remote_record): add code
-	for handling email addresses from pilot (which stores it as a
-	phone number entry.  go figure.)
-	(check_for_slow_setting): #if 0 out, since we don't use it (yet).
-	(update_record): un #if 0 the code to handle the case where the
-	pilot info has changed for a local record.
-	(merge_ecard_with_remote_record): implement function, but for now
-	just return the existing (desktop) record - we still don't allow
-	merge from the pilot.
-
-
-2000-08-10  Christopher James Lahey  
-
-	* gui/search/addresstypes.xml: Changed a couple of input field
-	names.
-
-2000-08-10  Ettore Perazzoli  
-
-	* gui/component/addressbook-component.c: Remove prototype for
-	`setup_ldap_storage()', which shouldn't be here anyway.
-
-2000-08-10  Christopher James Lahey  
-
-	* gui/search/, gui/search/addresstypes.xml: New search dialog for
-	addressbook.
-
-2000-08-10  Dan Winship  
-
-	* gui/component/addressbook-component.c (owner_set_cb): Update for
-	changed prototype, pass evolution_homedir arg to
-	setup_ldap_storage.
-
-	* gui/component/e-ldap-storage.c (setup_ldap_storage): Now takes
-	an evolution_homedir arg, uses that to generate the path to the
-	ldapservers.xml file, and stores the result in a static variable.
-	(e_ldap_storage_add_server, e_ldap_storage_remove_server): Use that
-	static variable rather than hardcoding the path to the file.
-
-2000-08-10  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c: Fixed any search to not crash on
-	missing phone numbers or email addresses.
-
-2000-08-09  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-control.c: Added a button to save to
-	your addressbook.
-
-2000-08-09  Cody Russell  
-
-	* gui/component/addressbook.c: Make the toolbar honor the user's
-	gnomecc settings for detachable toolbars.
-
-2000-08-09  Nat Friedman  
-
-	* ename/e-name-western-tables.h: Added some military prefixes.
-
-2000-08-09  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Fixed a warning.
-
-2000-08-09  Ettore Perazzoli  
-
-	* gui/component/addressbook.c (control_activate): Add the stock
-	print icon to the print item.
-
-2000-08-09  Ettore Perazzoli  
-
-	* gui/component/addressbook.c (control_activate): Put the print
-	item in the right placeholder so that it gets the right position
-	in the "File" menu.
-	(control_deactivate): Updated accordingly.
-
-2000-08-09  Christopher James Lahey  
-
-	* gui/component/addressbook.c, gui/minicard/e-minicard.c: Changed
-	e_popup_menu_run call to match the new arguments.
-
-	* gui/component/addressbook.oafinfo: Fixed this file to work
-	properly.
-
-	* gui/minicard/e-minicard-control.c: Use the correct oafinfo ID
-	here.  Also cleaned up the code a bit with the help of Michael
-	Meeks.
-
-2000-08-08  Chris Toshok  
-
-	* gui/component/e-addressbook-model.c (e_addressbook_model_init):
-	use x-evolution-any-field.
-
-	* gui/component/addressbook.c (search_entry_activated): use
-	x-evolution-any-field.
-	(change_view_type): same.
-
-	* gui/minicard/e-minicard-view.c (e_minicard_view_init): set query
-	to x-evolution-any-field.
-
-	* backend/pas/pas-backend-ldap.c (func_contains): support
-	x-evolution-any-field for matching any evolution supported field.
-
-	* backend/pas/pas-backend-file.c (compare_email): switch to using
-	ECardSimple calls.
-	(compare_phone): same.
-	(compare_address): same.
-	(entry_compare): switch to using ECardSimple calls, and support a
-	'x-evolution-any-field' wildcard field.
-	(vcard_matches_search): use an ECardSimple.
-
-2000-08-07  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Removed the next and prev
-	toolbar buttons since they don't do anything.
-
-2000-08-07  Christopher James Lahey  
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor.c: Fixed the tab order to not
-	repeat the web page address field.
-
-2000-08-07  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Fixed the tab order for this
-	dialog.
-
-2000-08-05  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c: Fixed a warning.
-
-	* backend/ebook/e-card.c: Cast to (char *) in
-	e_card_load_cards_from_file since libversit isn't const correct.
-
-	* backend/pas/pas-backend-file.c: Fixed a warning.
-
-2000-08-04  Michael Meeks  
-
-	* gui/component/addressbook.c (control_activate): unref.
-
-	* demo/addressbook.c (control_activate): unref.
-
-2000-08-02  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c,
-	gui/component/e-addressbook-model.c: Emit "model_pre_change"
-	signal as appropriate.
-
-2000-08-02  Christopher James Lahey  
-
-	* gui/component/e-addressbook-model.c: Adapted this to supply the
-	new append_row API of ETableModel.
-
-2000-07-31  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Changed the default set of columns.
-
-2000-07-29  Christopher James Lahey  
-
-	* backend/ebook/Makefile.am: Added load-gnomecard-addressbook
-	compilation.
-
-	* backend/ebook/e-card.c, backend/ebook/e-card.h: Added
-	e_card_load_cards_from_file helper function to load multiple cards
-	from a single file.
-
-	* backend/ebook/load-gnomecard-addressbook.c: New file to load
-	vcard files.  I think this is the format that gnomecard uses so if
-	you copy your gnomecard file to gnomecard.vcf and then run this
-	program in the same directory, it'll copy all your gnome contacts
-	into evolution.  It needs to be changed to take a filename as a
-	parameter.  Some fields (phone and address information, for
-	example) aren't displayed properly, but are saved.  This is new
-	code, so some other than phone and address may be lost.
-
-2000-07-28  Ettore Perazzoli  
-
-	* backend/pas/Makefile.am: Add `pas-backend-ldap.c' and
-	`pas-backend-ldap.h' to `EXTRA_DIST' so they get distributed even
-	if the OpenLDAP support is not enabled.
-
-2000-07-27  Christopher James Lahey  
-
-	* backend/ebook/load-pine-addressbook.c: Changed the URI to load
-	to.
-
-2000-07-26  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-widget-test.c: Fixed a warning.
-
-2000-07-26  Chris Toshok  
-
-	* backend/pas/pas-backend-ldap.c (view_destroy): wait to free the
-	view until we've taken care of freeing its internals.  also, close
-	the ldap connection here.
-	(pas_backend_ldap_connect): rename p_b_l_ensure_connected to this,
-	since it's always called when we create a view.
-	(pas_backend_ldap_build_all_cards_list): open an ldap connection
-	in this function and close it at the end.
-	(poll_ldap): make sure to call ldap_unbind to close the view's
-	connection here.
-	(pas_backend_ldap_search): call pas_backend_ldap_connect here -
-	ldap_unbind will either be called from poll_ldap or from
-	view_destroy.
-	(pas_backend_ldap_get_vcard): the PASBackendLDAP no longer has an
-	LDAP*.
-
-2000-07-26  Chris Toshok  
-
-	* backend/pas/pas-backend-ldap.c
-	(pas_backend_ldap_build_all_cards_list): add support for user settable scope.
-	(pas_backend_ldap_search): same.
-	(pas_backend_ldap_load_uri): same.
-
-2000-07-26  Dan Winship  
-
-	* gui/component/addressbook.oafinfo: lowercasify the
-	supported_mime_types
-
-2000-07-25  Chris Toshok  
-
-	* backend/ebook/e-card-types.h: add enum for e-card pilot status.
-
-	* conduit/address-conduit.c: #ifdef out all the archiving code with SUPPORT_ARCHIVING.
-	(purge): implement correctly - deleting ecards whose pilot status is DELETED.
-	(set_status): implement.
-	(set_pilot_id): add gtk_main call here to change commit_card into a synchronous
-	(delete_all): implement correctly - don't delete the records, just set their status to DELETED.
-	(local_record_from_ecard): get the current status from the ecard.
-
-	* backend/ebook/e-card.c (e_card_get_vcard): add vcard support for pilot status.
-	(parse_pilot_status): new function.
-	(e_card_class_init): add pilot status object arg.
-	(e_card_set_arg): add pilot status support.
-	(e_card_get_arg): same.
-	(e_card_init): initialize pilot_status to 0.
-
-2000-07-25  Chris Toshok  
-
-	* conduit/address-conduit.c: add comment headers to signals that
-	didn't have any.
-	
-2000-07-25  Chris Toshok  
-
-	* conduit/address-conduit.c (start_address_server): use the user's
-	Contact db.  not toshok's.
-
-2000-07-25  Michael Meeks  
-
-	* backend/ebook/load-pine-addressbook.c (book_open_cb): check we
-	opened ok.
-
-2000-07-25  Seth Alves  
-
-	* ename/Makefile.am (libename_static_la_LDFLAGS): build static
-	version of the library for address conduit to use
-
-	* backend/ebook/Makefile.am: build a static version of the library
-	to link into the conduit
-
-2000-07-25  Christopher James Lahey  
-
-	* backend/ebook/e-card.c: Added a #define for
-	"X-EVOLUTION-PILOTID".  Added a parse_pilot_id to read pilot id's
-	in properly from VCards.  Rearranged some field orders.  Added a
-	get_arg case for ARG_PILOTID.  Initialize pilot_id field to 0.
-
-2000-07-24  Chris Toshok  
-
-	* backend/ebook/e-card.h: add pilot_id.
-
-	* backend/ebook/e-card.c (e_card_get_vcard): add support for
-	X-EVOLUTION-PILOTD vcard field.
-	(e_card_class_init): add pilot_id arg.
-	(e_card_set_arg): handle pilot_id arg.
-
-2000-07-23  Christopher James Lahey  
-
-	* backend/ebook/e-book-view-listener.c: Remove the idle handler
-	when we're destroyed.
-
-	* printing/e-contact-print.c: Fixed the spacing on the card
-	header.
-
-2000-07-20  Christopher James Lahey  
-
-	* gui/component/addressbook.oafinfo: Fixed the oaf info.
-
-	* gui/minicard/.cvsignore, gui/minicard/Makefile.am,
-	gui/minicard/e-minicard-widget-test.c: Added a test for the
-	minicard widget.
-
-	* gui/minicard/e-minicard-control.c: Fixed the mime type.
-
-	* gui/minicard/e-minicard.c: Fixed some crashes if your parent
-	isn't a minicard view.
-
-	* gui/minicard/e-minicard-control.oafinfo: Removed.
-
-2000-07-20  Ettore Perazzoli  
-
-	* gui/component/addressbook-component.c (factory_fn): Update for
-	the new `evolution_shell_component_new()'.
-
-2000-07-19  Fatih Demir	
-	
-	* conduit/address-conduit-control-applet.desktop:
-		Added the Turkish desktop entry.
-
-2000-07-18  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-control.c: Added "text/vCard" to the
-	list of mime types we support.
-
-2000-07-18  Christopher James Lahey  
-
-	* gui/minicard/Makefile.am: Added
-	gui/minicard/e-minicard-control.c,
-	gui/minicard/e-minicard-control.h,
-	gui/minicard/e-minicard-widget.c, and
-	gui/minicard/e-minicard-widget.h.
-
-	* gui/minicard/e-minicard-control.c,
-	gui/minicard/e-minicard-control.h,
-	gui/minicard/e-minicard-widget.c,
-	gui/minicard/e-minicard-widget.h: Got these to compile.
-
-	* gui/minicard/e-minicard-control.gnorba,
-	gui/minicard/e-minicard-control.oafinfo: Copied directly from
-	bonobo-clock-control.  These aren't done yet.
-
-2000-07-18  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-control.c,
-	gui/minicard/e-minicard-control.h,
-	gui/minicard/e-minicard-widget.c,
-	gui/minicard/e-minicard-widget.h: New files for using a minicard
-	as a widget or a bonobo control.
-
-2000-07-14  Chris Toshok  
-
-	* gui/component/e-ldap-storage.c (ldap_server_foreach): duh.
-	don't save the port in the host slot either.
-
-2000-07-13  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-confirm-delete.glade,
-	contact-editor/e-contact-editor-confirm-delete.glade.h: Added
-	these.
-
-2000-07-13  Christopher James Lahey  
-
-	* Makefile.am: Switched the order of compilation of printing and
-	contact-editor.
-
-	* contact-editor/Makefile.am: Added printing libraries and a
-	confirm delete dialog glade file.
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Enabled the delete and print
-	functions as well as providing a confirm delete dialog to the
-	outside world.
-
-	* gui/component/addressbook.c: Made the delete button on new cards
-	active.
-
-	* gui/minicard/Makefile.am: Added printing libraries to a number
-	of test programs.
-
-	* gui/minicard/e-minicard.c: Added print and delete to the right
-	click menu.  Made the delete button on the card editor active.
-
-	* printing/e-contact-print.c, printing/e-contact-print.h: Added a
-	function to print a single card.
-
-2000-07-12  Chris Toshok  
-
-	* gui/component/e-ldap-storage.c (ldap_server_foreach): oops.  fix
-	typo that was saving the port in the rootdn spot.
-	(save_ldap_data): make this a bit safer - writing to a new file
-	and renaming it.
-	(load_ldap_data): make this a bit smarter - if parsing the
-	ldapservers.xml file fails and there's a .new file there,
-	rename it.
-	
-2000-07-12  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c: Do case insensitive compares.
-
-	* addressbook/gui/component/addressbook.c: Make quick search
-	search both name and company name.
-
-2000-07-12  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Add icons to the toolbars.
-
-2000-07-12  Christopher James Lahey  
-
-	* contact-editor/Makefile.am: Added installation of arrow.png.
-
-	* contact-editor/e-contact-editor.c: Use EVOLUTIONDIR #define.
-
-2000-07-11  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Removed an unused function
-
-2000-07-10  Dan Winship  
-
-	* gui/component/select-names/Makefile.am (EXTRA_DIST): add idl
-	file to EXTRA_DIST
-
-2000-07-10  Ettore Perazzoli  
-
-	* gui/component/addressbook.c (control_activate): Remove the
-	SelectNames test.
-
-2000-07-10  Peter Williams  
-
-	* gui/component/select-names/e-select-names-model.c: (Clahey's fix)
-	Make multiple addresses be concatenated correctly.
-
-2000-07-09  Christopher James Lahey  
-
-	* gui/component/addressbook.c,
-	gui/component/select-names/e-select-names.c,
-	gui/component/select-names/e-select-names.h: Switched from ETable
-	to ETableScrolled.
-
-	* addressbook/gui/minicard/e-minicard.c: Don't display mailer or
-	"name or org" fields.
-
-2000-07-09  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h:
-	Added a field that gives the name if it exists and the company
-	name otherwise.
-
-	* gui/component/e-addressbook-model.c: Formatting changes.
-
-	* gui/component/select-names/e-select-names-table-model.c: Added
-	stripping of names and display of company name if name doesn't
-	exist.
-
-	* gui/component/select-names/e-select-names.c: Fixed up the
-	display so that we display both name and email address.
-
-2000-07-09  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names-model.c: Fixed a small
-	off by one error that was causing an extra character to get
-	deleted sometimes.
-
-2000-07-09  Anders Carlsson  
-
-	* gui/minicard/test-reflow.c (allocate_callback): Fix off by one bug with
-	scroll region setting.
-	(resize): Likewise.
-	(main): Put the contacts list in an EScrolledFrame instead of using a
-	separate GtkScrollbar.
-
-	* gui/minicard/e-reflow.c (e_reflow_event): Don't change mouse cursor and
-	don't allow drags on dividers that aren't visible.
-
-	* gui/component/addressbook.c (allocate_callback): Fix off by one bug with
-	scroll region setting.
-	(resize): Likewise.
-	(create_minicard_view): Put the contacts list in an EScrolledFrame instead of
-	using a separate GtkScrollbar.
-
-2000-07-09  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Removed unused do_nothing_cb
-	function.
-
-	* gui/component/select-names/e-select-names-manager.c,
-	gui/component/select-names/e-select-names-manager.h: Made the OK
-	and Cancel buttons in the ESelectNames dialog we create work
-	properly.
-	
-	* gui/component/select-names/e-select-names-model.c,
-	gui/component/select-names/e-select-names-model.h: Added
-	e_select_names_model_duplicate.
-
-	* gui/component/select-names/e-select-names-text-model.c: Made the
-	text be set correctly if there's already data in the source when
-	the text model is created.
-
-	* gui/component/select-names/e-select-names.c,
-	gui/component/select-names/e-select-names.h: Removed handling of
-	the buttons (the user of this dialog will have to handle them.)
-	Added e_select_names_get_source.  Fixed some typos.
-
-2000-07-09  Not Zed  
-
-	* gui/component/addressbook.c: Link the toolbar print button to
-	the print callback.
-
-2000-07-08  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names.c
-	(e_select_names_clicked): Hitting OK or Cancel at least closes the
-	dialog now.
-
-2000-07-08  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names-manager.c
-	(e_select_names_manager_create_entry): Set the returned entry to
-	use the ellipsis.
-
-2000-07-08  Christopher James Lahey  
-
-	* gui/component/addressbook-factory.c: Include
-	e-select-names-factory.h.
-
-	* gui/component/select-names/e-select-names-model.c: Handle a NULL
-	iterator properly in the replace function.
-
-	* gui/component/select-names/e-select-names-table-model.c: Fill in
-	info properly in the value_at function.
-
-	* gui/component/select-names/e-select-names-text-model.c: Don't
-	strlen a NULL text object.
-
-	* gui/component/select-names/e-select-names.c: Close if the person
-	hits ok or cancel (doesn't yet actually undo changes if Cancel is
-	hit.)  Handle removing addresses when they're double clicked on.
-
-	* gui/component/select-names/select-names.glade,
-	gui/component/select-names/select-names.glade.h: Hid some unused
-	fields and changed the text at the top of the dialog.
-
-2000-07-08  Jeffrey Stedfast  
-
-	* gui/component/select-names/.cvsignore: Ignore dynamically 
-	created source files
-
-2000-07-08  Ettore Perazzoli  
-
-	* gui/component/select-names/e-select-names-bonobo.c
-	(entry_get_property_fn): New function to set the properties.
-
-2000-07-08  Ettore Perazzoli  
-
-	* gui/component/addressbook-factory.c (main): Start up the factory
-	for `Evolution::Addressbook::SelectNames'.
-
-	* gui/component/select-names/evolution-addressbook-select-names.oafinfo:
-	New.
-
-	* gui/component/select-names/e-select-names-factory.c: New.
-	* gui/component/select-names/e-select-names-factory.h: New.
-
-	* gui/component/select-names/e-select-names-bonobo.c: New.
-	* gui/component/select-names/e-select-names-bonobo.h: New.
-
-	* gui/component/addressbook-factory.c (main): Call
-	`e_select_names_factory_init()'.
-
-	* gui/component/select-names/e-select-names-manager.c
-	(e_select_names_manager_add_section): Made const-aware.
-	(e_select_names_manager_create_entry): Made const-aware.
-	(e_select_names_manager_activate_dialog): Made const-aware.
-
-	* gui/component/select-names/Evolution-Addressbook-SelectNames.idl:
-	New.
-
-2000-07-08  Christopher James Lahey  
-
-	* gui/component/e-addressbook-model.c,
-	gui/component/e-addressbook-model.h: Added an "editable" argument.
-
-	* gui/component/select-names/e-select-names.c: Set our
-	EAddressModel to not be editable.
-
-2000-07-07  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names.c: Changed to line
-	mode.
-
-2000-07-07  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names-manager.c,
-	gui/component/select-names/e-select-names-model.c: Implemented the
-	get_cards function.
-
-	* gui/component/select-names/e-select-names.c: Implemented adding
-	cards through the interface.
-
-2000-07-07  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names-manager.c: Make the
-	entry widgets we create editable.
-
-	* gui/component/select-names/e-select-names-model.c: Use
-	e_strsplit instead of g_strsplit.  Fixed an off by 1 error.
-
-	* gui/component/select-names/e-select-names-table-model.c: When
-	the model changes, send a model changed signal.
-
-	* gui/component/select-names/e-select-names-text-model.c: Made
-	changing this work correctly if it's empty.  Made change signals
-	propagate properly.  Is a bit better about freeing iterators when
-	done.
-
-	* gui/component/select-names/e-select-names.c: Made the finished
-	lists be in order instead of being sorted.
-
-2000-07-07  Christopher James Lahey  
-
-	* gui/component/addressbook.c (new_server_cb): Since
-	ELDAPServer->port is a char *, allocate a string with the number
-	389 contained.
-
-	* gui/component/addressbook.c: Make the select names test test the
-	new code instead of the old way of getting to an ESelectNames
-	dialog.
-
-	* gui/component/select-names/e-select-names-manager.c: Coded
-	storing the model for each section, creating an entry and
-	returning it, and for activating the dialog.  Wrote a bit of the
-	get_cards code, but not all of it.
-
-	* gui/component/select-names/e-select-names-model.c,
-	gui/component/select-names/e-select-names-model.h: Coded all of
-	the code needed to make ESelectNamesTextModel work (it doesn't
-	yet, but all the code should be there.)  Removed
-	E_SELECT_NAMES_MODEL_DATA_TYPE_SEPARATION_MATERIAL.
-
-	* gui/component/select-names/e-select-names-table-model.c,
-	gui/component/select-names/e-select-names-text-model.c: Changed
-	these to compensate for removal of
-	E_SELECT_NAMES_MODEL_DATA_TYPE_SEPARATION_MATERIAL.
-
-	* gui/component/select-names/e-select-names-table-model.h,
-	gui/component/select-names/e-select-names-text-model.h: Fixed some
-	silly typos.
-
-	* gui/component/select-names/e-select-names.c,
-	gui/component/select-names/e-select-names.h: Added a parameter to
-	add_section that lets you specify the source ESelectNamesModel.
-	
-2000-07-06  Chris Toshok  
-
-	* gui/component/e-ldap-storage.h: add scope to ELDAPServer, and
-	make port a string.
-
-	* gui/component/e-ldap-storage.c (load_ldap_data): don't load a
-	uri, load all the bits and pieces and build up the uri when
-	creating the folder, according to the openldap url format.
-	(ldap_server_foreach): store out each of the individual uri
-	pieces.
-	(e_ldap_storage_remove_server): free the new fields.
-	(get_string_value): if the text is empty, return the empty string
-	instead of NULL.
-
-	* gui/component/e-ldap-server-dialog.c (extract_server_info): port is a string now.
-	(fill_in_server_info): port is a string now.
-
-2000-07-06  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Changed "FIXME: Save and
-	Close" to "Save and Close".  Removed some toolbar items that will
-	never be used.
-
-	* gui/component/select-names/e-select-names-model.c,
-	gui/component/select-names/e-select-names-model.h: Added functions
-	to allow you to modify the model (not implemented yet.)
-
-	* gui/component/select-names/e-select-names-table-model.c,
-	gui/component/select-names/e-select-names-table-model.h: Finished
-	this.  Doesn't support changing the model at all.
-
-	* gui/component/select-names/e-select-names-text-model.c: Finished
-	this.  Changing the model by typing is done, but doesn't work
-	since none of the functions in the base model are implemented.
-
-2000-07-05  Chris Toshok  
-
-	* gui/component/addressbook.c (new_server_cb): call
-	e_ldap_storage_add_server call.
-
-	* gui/component/ldap-server-dialog.glade: add name row.
-
-	* gui/component/e-ldap-server-dialog.h: remove the ELDAPServer type.
-
-	* gui/component/e-ldap-server-dialog.c (extract_server_info): add
-	support for the name-entry.
-
-	* gui/component/e-ldap-server-dialog.c (fill_in_server_info): same.
-
-	* gui/component/e-ldap-storage.h: add ELDAPServer type, and add
-	prototypes for e_ldap_storage_add_server and
-	e_ldap_storage_remove_server.
-
-	* gui/component/e-ldap-storage.c (e_ldap_storage_add_server): new
-	function, add it to our hash table, add a shell folder, and save
-	out the metadata.
-	(ldap_server_foreach): add the ldap server info under a
-	"contactserver" node.
-	(setup_ldap_storage): create our hashtable.
-
-2000-07-05  Chris Toshok  
-
-	* gui/component/addressbook.c (set_prop): remove hack to read
-	"uri" file from local directory.
-
-	* gui/component/Makefile.am (evolution_addressbook_SOURCES): add
-	e-ldap-storage.{c,h}
-
-	* gui/component/addressbook-component.c (owner_set_cb): call
-	setup_ldap_storage.
-
-	* gui/component/e-ldap-storage.c (setup_ldap_storage): Register
-	the LDAP storage and load the .xml file.
-	(load_ldap_data): function to load our xml file.
-	(save_ldap_data): function to save our xml file.
-
-	* gui/component/e-ldap-storage.h: new file.
-
-2000-07-03  Christopher James Lahey  
-
-	* gui/component/select-names/e-select-names-manager.c,
-	gui/component/select-names/e-select-names-text-model.c,
-	gui/component/select-names/e-select-names.c: Fixed more compile
-	errors.
-
-2000-07-03  Christopher James Lahey  
-
-	* gui/component/select-names/Makefile.am: Fixed compile error.
-
-2000-07-03  Christopher James Lahey  
-
-	* backend/ebook/Makefile.am: Removed e-card-iterator.c,
-	e-card-iterator.h, e-card-list-iterator.c, e-card-list-iterator.h,
-	e-card-list.c, e-card-list.h.
-
-	* backend/ebook/e-card-iterator.c,
-	backend/ebook/e-card-iterator.h,
-	backend/ebook/e-card-list-iterator.c,
-	backend/ebook/e-card-list-iterator.h, backend/ebook/e-card-list.c,
-	backend/ebook/e-card-list.h: Removed in favor or versions without
-	the -card in the e-util directory since these classes are not
-	specific to cards at all.
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h,
-	backend/ebook/e-card.c, backend/ebook/e-card.h,
-	backend/ebook/load-pine-addressbook.c, backend/ebook/test-card.c,
-	backend/pas/pas-backend-file.c: Changed the references to
-	e-card-list.c and friends to e-list.c and friends.
-
-	* contact-editor/e-contact-editor.c: Added #include
-	 to fix a warning.
-
-	* gui/component/Makefile.am: Moved a number of classes associated
-	with the select-names object to the new select-names directory.
-
-	* gui/component/addressbook.c: Changed the reference to
-	e-select-names.h.
-
-	* gui/component/e-select-names.c, gui/component/e-select-names.h,
-	gui/component/select-names.glade,
-	gui/component/select-names.glade.h: Moved these files into
-	select-names/.
-
-	* gui/component/select-names/.cvsignore,
-	gui/component/select-names/Makefile.am,
-	gui/component/select-names/e-select-names-manager.c,
-	gui/component/select-names/e-select-names-manager.h,
-	gui/component/select-names/e-select-names-model.c,
-	gui/component/select-names/e-select-names-model.h,
-	gui/component/select-names/e-select-names-table-model.c,
-	gui/component/select-names/e-select-names-table-model.h,
-	gui/component/select-names/e-select-names-text-model.c,
-	gui/component/select-names/e-select-names-text-model.h,
-	gui/component/select-names/e-select-names.c,
-	gui/component/select-names/e-select-names.h,
-	gui/component/select-names/recipient.glade,
-	gui/component/select-names/select-names.glade,
-	gui/component/select-names/select-names.glade.h: New files for
-	select names dialog (e-select-names.c, e-select-names.h,
-	select-names.glade, select-names.glade.h and recipient.glade moved
-	from gui/component/.)
-
-2000-06-29  Ettore Perazzoli  
-
-	* gui/component/addressbook-component.c (owner_set_cb): Get an
-	EvolutionShellClient instead of an Evolution_Shell to match the
-	changes in libeshell.
-
-2000-06-28  Christopher James Lahey  
-
-	* gui/component/select-names/,
-	gui/component/select-names/e-select-names-manager.c,
-	gui/component/select-names/e-select-names-manager.h: New select
-	names manager interface (Not complete.)
-
-2000-06-26  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c,
-	addressbook/gui/component/e-cardlist-model.c: Added
-	value_to_string handlers.
-
-	* demo/addressbook-widget.c, demo/demo.c: Removed usage of "x" and
-	"y" arguments.
-
-	* addressbook/gui/component/addressbook.c: Activated Click To Add
-	and set the click to add message.
-
-	* addressbook/gui/component/e-addressbook-model.c: Added
-	value_to_string and append_row handlers.
-
-	* addressbook/gui/component/e-select-names.c: Added a column.
-
-2000-06-26  Chris Toshok  
-
-	* backend/pas/pas-backend-ldap.c (poll_ldap): remove spew.
-	(pas_backend_ldap_ensure_connected): duh, don't access a pointer
-	we know to be NULL.
-	(query_prop_to_ldap): rename map_e_card_prop_to_ldap to this.
-	easier to type.
-
-2000-06-21  Christopher James Lahey  
-
-	* gui/minicard/test-minicard-label.c,
-	gui/minicard/test-minicard.c, gui/minicard/test-reflow.c: Remove
-	usage of "x" and "y" arguments.
-
-2000-06-18    
-
-	* contact-editor/Makefile.am (INCLUDES): Use
-	`$(BONOBO_GNOME_CFLAGS)' so that we compile when Bonobo is not in
-	the default GNOME prefix.
-
-2000-06-17  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-label.c,
-	gui/minicard/e-minicard-label.h, gui/minicard/e-minicard.c: Made
-	the left column of minicards not get any wider than the widest
-	possible name.
-
-2000-06-13  Ettore Perazzoli  
-
-	* gui/component/Makefile.am (SHELL_OBJS): Removed.
-	(evolution_addressbook_LDADD): Link with
-	`$(top_builddir)/shell/libeshell.a'.
-
-2000-06-12  Federico Mena Quintero  
-
-	* contact-editor/e-contact-editor-categories.c: Removed the
-	ETableModel thaw handler.
-	* gui/component/e-cardlist-model.c: Likewise.
-
-2000-06-11  Christopher James Lahey  
-
-	* gui/component/e-select-names.c: Fixed the widget reparenting.
-
-2000-06-11  Christopher James Lahey  
-
-	* gui/component/Makefile.am: Added glade files.
-
-	* gui/component/addressbook.c: Added a test of the Select Names
-	functionality.
-
-	* gui/component/e-addressbook-model.c: Made this class_init
-	function a bit cleaner.
-
-	* gui/component/e-select-names.c: Tested this and fixed some
-	obvious errors.
-
-	* gui/component/select-names.glade: The main window shouldn't be
-	visible by default.
-
-2000-06-11  Ettore Perazzoli  
-
-	* contact-editor/Makefile.am (contact_editor_test_LDADD): Link
-	with libemiscwidgets.a.
-	* gui/component/Makefile.am (evolution_addressbook_LDADD): Likewise.
-	* gui/minicard/Makefile.am (minicard_test_LDADD): Likewise.
-	(reflow_test_LDADD): Likewise.
-	(minicard_view_test_LDADD): Likewise.
-
-2000-06-10  Christopher James Lahey  
-
-	* gui/component/e-cardlist-model.c: Renamed a bunch of functions
-	for better readability.
-
-	* gui/component/e-select-names.c, gui/component/e-select-names.h:
-	This should be a working dialog now.
-
-	* gui/component/select-names.glade: Changed the name & creation
-	function of the ETable here.
-
-2000-06-10  Christopher James Lahey  
-
-	* gui/component/select-names.glade,
-	gui/component/select-names.glade.h: Glade files for Select Names
-	dialog.
-
-2000-06-10  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Do e_card_simple_sync and
-	extract_info more often.
-
-	* gui/component/addressbook.c: Added table printing code.
-
-2000-06-09  Ettore Perazzoli  
-
-	* gui/component/addressbook-component.c (factory_fn): Pass NULL
-	for the new args @create_folder_fn and @remove_folder_fn.
-
-2000-06-08  Ettore Perazzoli  
-
-	* gui/component/addressbook-component.c (create_view): Updated for
-	the new `EvolutionShellComponentCreateViewFn'.  Return
-	`EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE' if @type is not
-	"contacts".
-
-2000-06-08  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Bind Save As to save the
-	current view of the contact as a vcard.
-
-2000-06-08  Federico Mena Quintero  
-
-	* contact-editor/e-contact-editor.c (save_card): Doh, sync the
-	card simple and extract the card info.
-
-2000-06-08  Federico Mena Quintero  
-
-	* contact-editor/e-contact-editor.h (EContactEditor): Now this
-	derives from GtkObject.  It follows the same strategy as the
-	EventEditor in the calendar.
-	(EContactEditor): Added an is_new_card field so that we can know
-	whether to add() or commit() the card.
-
-	* contact-editor/e-contact-editor.c (e_contact_editor_get_type):
-	Derive from GtkObject.
-	(e_contact_editor_class_init): Likewise.
-	(e_contact_editor_class_init): Added an "is_new_card" argument.
-	(e_contact_editor_set_arg): Handle ARG_IS_NEW_CARD.
-	(e_contact_editor_get_arg): Likewise.
-	(e_contact_editor_new): Take in an is_new_arg argument and set it
-	on the object.
-	(e_contact_editor_init): Load the app widget into the app field of
-	the EContactEditor structure.  Create its UIHandler as well.
-	(e_contact_editor_class_init): New "add_card", "commit_card", and
-	"editor_closed" signals.
-
-	* contact-editor/test-editor.c (main): Modified for the new API.
-	(editor_closed_cb): Tweaked for the new API.
-	Since this test program does not use Bonobo, it doesn't work,
-	though.
-
-	* gui/component/addressbook.c (new_contact_cb): Use the new
-	contact editor API.
-	(table_double_click): Ditto.
-
-	* gui/minicard/e-minicard-view.c (e_minicard_view_event): Use the
-	new contact editor API.
-
-	* gui/minicard/e-minicard.c (e_minicard_event): Use the new
-	contact editor API.
-
-2000-06-08  Ettore Perazzoli  
-
-	* contact-editor/Makefile.am (contact_editor_test_LDADD): Remove
-	the `$(srcdir)/' prefix from `libecontacteditor.a' because [of
-	course] the library is built in the build directory, not in the
-	source directory.
-	* gui/minicard/Makefile.am (minicard_test_LDADD): Likewise with
-	`libeminicard.a'.
-	(minicard_label_test_LDADD): Likewise.
-	(reflow_test_LDADD): Likewise.
-	(minicard_view_test_LDADD): Likewise.
-
-2000-06-06  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Bind right click on the ETable to
-	"Save to VCard."
-
-2000-06-02  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Made phone/email/address
-	labels change correctly again.
-
-2000-06-02  Christopher James Lahey  
-
-	* gui/component/addressbook-component.c: Made
-	evolution-addressbook shut down when the shell is done with it.
-
-2000-06-02  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-view.c, gui/minicard/e-minicard.c: Made
-	double click only work on the first button.
-
-2000-06-01  Christopher James Lahey  
-
-	* gui/minicard/e-minicard.c: return TRUE if opening a contact
-	editor so that we don't get a "new dialog" contact editor.
-
-2000-06-01  Ettore Perazzoli  
-
-	* gui/component/addressbook.c (new_contact_cb): Use the stock
-	cancel button for the dialog.
-	(table_double_click): Likewise.
-	(find_contact_cb): Likewise.
-
-2000-05-31  Miguel de Icaza  
-
-	* contact-editor/contact-editor.glade: Added accelerators for
-	the remaining items.
-
-	Add spacing, beautify the dialogs.
-
-2000-06-01  Ettore Perazzoli  
-
-	* gui/component/addressbook.c (control_activate): Put the toolbar
-	into a frame to make it look like standard GNOME toolbars.  Also,
-	set `GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL' so that it does not do
-	evil things when its moved to the left or the right of the window.
-
-2000-05-30  Christopher James Lahey  
-
-	* gui/component/e-cardlist-model.c,
-	gui/component/e-cardlist-model.h: New files for card list.
-
-2000-05-30  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Fixed a memory leak.
-
-2000-05-30  Christopher James Lahey  
-
-	* gui/component/alphabet.glade: Made the alphabet buttons not
-	focusable.
-
-	* gui/minicard/e-minicard-view.c: Made the "123" button work.
-
-	* gui/minicard/e-reflow-sorted.c: Made all buttons past the last
-	letter available work.
-
-2000-05-30  Christopher James Lahey  
-
-	* gui/component/alphabet.glade: Added a bit of space around the
-	alphabet bar.
-
-2000-05-30  Christopher James Lahey  
-
-	* gui/component/Makefile.am: Added alphabet.glade and
-	alphabet.glade.h.
-
-	* gui/component/addressbook.c, gui/component/alphabet.glade,
-	gui/component/alphabet.glade.h: Added an alphabet bar.
-
-	* gui/minicard/e-minicard-view.c, gui/minicard/e-minicard-view.h,
-	gui/minicard/e-reflow-sorted.c, gui/minicard/e-reflow-sorted.h:
-	Added the ability to just to a particular spot in the reflow.
-
-2000-05-30  Christopher James Lahey  
-
-	* printing/Makefile.am: Added BONOBO_GNOME_CFLAGS to CPPFLAGS.
-
-2000-05-30  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-view.c: Made double clicking create a
-	new card.  Set the empty message.
-
-	* gui/minicard/e-minicard.c: Made sorting be case insensitive.
-
-	* gui/minicard/e-reflow-sorted.c, e-reflow.c, e-reflow.h: Added a
-	message for when the reflow is empty.
-
-	* printing/e-contact-print.c, printing/medbook.ecps: Made the
-	default printout be full page.  Made sorting case insensitive.
-
-2000-05-30  Christopher James Lahey  
-
-	* backend/ebook/e-book-view-listener.c,
-	backend/ebook/e-book-view-listener.h, backend/ebook/e-book-view.c,
-	backend/ebook/e-book-view.h, backend/idl/addressbook.idl,
-	backend/pas/pas-backend-file.c, backend/pas/pas-backend-ldap.c,
-	backend/pas/pas-book-factory.c, backend/pas/pas-book-view.c,
-	backend/pas/pas-book-view.h: Added "sequence_complete" signal.
-
-	* printing/e-contact-print.c: Made printing wait for
-	"sequence_complete" signal and made it sort.
-
-2000-05-25  Christopher James Lahey  
-
-	* gui/component/addressbook.c,
-	gui/component/e-addressbook-model.c,
-	gui/component/e-addressbook-model.h: Added double click to open
-	contact editor.
-
-2000-05-25  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Removed some columns.
-
-2000-05-25  Ettore Perazzoli  
-
-	* gui/component/addressbook.c (addressbook_factory_new_control):
-	New function.
-	(addressbook_factory): Use it.
-
-	* Makefile.am (evolution_addressbook_LDADD): Link with
-	`evolution-shell-component.o' from the shell directory.
-
-	* gui/component/addressbook-component.c: New.
-	* gui/component/addressbook-component.h: New.
-
-2000-05-23  Christopher James Lahey  
-
-	* Makefile.am: Switched printing and gui.
-
-	* backend/ebook/e-book-view-listener.h,
-	backend/ebook/e-book-view.h, backend/ebook/e-book.h,
-	backend/ebook/e-card-cursor.h, backend/ebook/e-card-list.h,
-	backend/ebook/e-card-simple.h, backend/ebook/e-card.h: Fixed the
-	#defines to work elsewhere in evolution.
-
-	* gui/component/Makefile.am: Added linking to libecontactprint.
-
-	* gui/component/addressbook.c: Added a menu item to print the
-	current query.
-
-	* printing/Makefile.am: Add linking to libebook and requirements.
-	Add installation of ecps files.
-
-	* printing/e-contact-print.c, printing/e-contact-print.h: Changed
-	this to use real data from an EBook.
-
-	* printing/test-print.c: Made this pass NULL, NULL to
-	e_contact_print_dialog_new so that it will compile.
-
-2000-05-23  Christopher James Lahey  
-
-	* contact-editor/e-contact-save-as.c: Fixed some memory leaks.
-
-2000-05-23  Christopher James Lahey  
-
-	* contact-editor/Makefile.am: Added e-contact-editor-save-as.c and
-	e-contact-editor-save-as.h.
-
-	* contact-editor/e-contact-save-as.c,
-	contact-editor/e-contact-save-as.h: New files that display a save
-	as dialog and then save the given card to that file.
-
-	* gui/minicard/e-minicard.c: Call e_contact_save_as in a right
-	click menu.
-
-2000-05-19  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c,
-	gui/component/e-addressbook-model.c: Added initialize_value and
-	value_is_empty callbacks.
-
-2000-05-19  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Fixed a bug that broke
-	address field support.
-
-2000-05-19  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Added support for arbitrary
-	fields in the contact editor.
-
-2000-05-18  Christopher James Lahey  
-
-	* backend/ebook/e-card.c: Fixed e_card_name_copy and
-	e_card_arbitrary_copy to deal correctly with a passed NULL.
-
-	* contact-editor/Makefile.am: Removed imagesdir stuff.
-
-	* contact-editor/arrow.png: Made this transparent.
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Renamed some widgets
-	and added custom widgets for all of the images.
-
-	* contact-editor/e-contact-editor.c: Worked on making this work
-	decently well with messed up glade files.  Cleaned up a lot of code.
-
-2000-05-18  Christopher James Lahey  
-
-	* backend/ebook/e-card.c: Fixed the code to write out and read in
-	arbitrary fields.
-
-2000-05-18  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h,
-	backend/ebook/e-card-types.h, backend/ebook/e-card.c,
-	backend/ebook/e-card.h: Implemented "MAILER" field.  Added
-	arbitrary field support.
-
-	* contact-editor/e-contact-editor-categories.c: Fixed a warning.
-
-2000-05-16  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h:
-	Added E_CARD_SIMPLE_FIELD_MAILER.  Not implemented yet.
-
-2000-05-16  Chris Toshok  
-
-	* backend/pas/pas-backend-ldap.c (construct_email_list): convert to use ECardSimple.
-	(poll_ldap): same.
-
-2000-05-16  Chris Toshok  
-
-	* backend/pas/pas-book.h: add typedefs for the can_write
-	functions, and add parameters to pas_book_new.
-
-	* backend/pas/pas-book.c (pas_book_construct): add can_write/can_write_card params.
-	(pas_book_new): same.
-	(impl_Evolution_Book_can_write): new function.
-	(impl_Evolution_Book_can_write_card): same.
-	(pas_book_get_epv): assign the can_write/can_write_card slots in the epv.
-
-	* backend/pas/pas-backend-ldap.c (pas_backend_ldap_can_write): new function.
-	(pas_backend_ldap_can_write_card): same.
-	(pas_backend_ldap_add_client): add can_write/can_write_card to pas_book_new call.
-
-	* backend/pas/pas-backend-file.c (pas_backend_file_can_write_card): new function, calls can_write.
-	(pas_backend_file_can_write): same.
-	(can_write): return TRUE if we can write to the addressbook file.
-	(pas_backend_file_add_client): add can_write/can_write_card to pas_book_new call.
-
-	* backend/idl/addressbook.idl (Evolution): add can_write and
-	can_write_card permission requests.
-
-2000-05-16  Christopher James Lahey  
-
-	* backend/ebook/e-card.c (e_card_get_vcard): Fixed a large memory leak.
-
-2000-05-16  Christopher James Lahey  
-
-	* backend/ebook/e-card.c (add_list_unique): Fixed another memory
-	leak.
-
-2000-05-16  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c, backend/pas/pas-backend-file.c,
-	contact-editor/e-contact-editor.c, ename/e-name-western.c,
-	gui/component/addressbook.c, gui/minicard/e-minicard-view.c: Fixed
-	some memory leaks.
-
-	* backend/ebook/e-card.c: Rearranged some code.
-
-2000-05-16  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c: Fixed a reference
-	leak.
-
-2000-05-16  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c: Fixed a compile
-	error.
-
-2000-05-16  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c: Got rid of a
-	memory leak.  Rearranged a couple functions.
-	
-	* gui/minicard/e-minicard-view.c, gui/minicard/e-minicard-view.h:
-	Added some code to stop watching the EBook when the canvas is
-	destroyed (apparently the canvas is destroyed before our widget is
-	destroyed.)
-
-2000-05-14  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-categories.c: Use the correct
-	policy for resize.
-
-2000-05-14  Christopher James Lahey  
-
-	* backend/ebook/Makefile.am: Added libeutil for e-card's support
-	for categories.
-
-	* backend/ebook/e-card-list.c, backend/ebook/e-card-list.h: Added
-	a function to get the length.
-
-	* backend/ebook/e-card.c, backend/ebook/e-card.h: Added categories
-	support (accessible either as "categories" or "category_list".)
-
-	* contact-editor/Makefile.am: Added e-table and all of the
-	categories files.
-
-	* contact-editor/categories.glade,
-	contact-editor/categories-strings.h,
-	contact-editor/e-contact-editor-categories.c,
-	contact-editor/e-contact-editor-categories.h:
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Rearranged this dialog.
-
-	* contact-editor/e-contact-editor.c: Rearranged dialog a bit.
-	Added opening of categories dialog.
-
-	* gui/component/Makefile.am: Rearranged libraries so that
-	libetable would be available for the contact editor categories
-	dialog.
-
-	* gui/component/addressbook.c: Fix for new ETable resizing.  Make
-	contact editor dialog resizable.
-
-	* gui/minicard/Makefile.am: Added libetable contact editor
-	categories dialog.
-
-	* gui/minicard/e-minicard.c: Make contact editor dialog resizable.
-
-2000-05-12  Miguel de Icaza  
-
-	* contact-editor/fulname.glade: Use accelerators here.
-
-2000-05-13  Valek Filippov  
-
-	* gui/component/ldap-server-dialog.glade: save translatable strings
-	* gui/component/ldap-server-dialog.glade.h: file with strings
-	* printing/e-contact-print.glade: save translatable strings
-	* printing/e-contact-print.glade.h: file with strings
-		
-2000-05-11  Dan Winship  
-
-	* gui/component/addressbook.c (control_activate): Now that we
-	depend on recent gnome-libs we can make the toolbar detachable
-	again.
-
-2000-05-10  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Make the table view be sorted by
-	name initially.
-
-2000-05-10  Christopher James Lahey  
-
-	* backend/pas/pas-book-factory.c: Send a proper response when you
-	can't find the ldap URI.
-
-	* gui/component/addressbook.c: Cleaned up the open error dialog a
-	bit.
-
-2000-05-10  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Added a dialog for when you can't
-	open an addressbook.
-
-2000-05-10  Christopher James Lahey  
-
-	* backend/ebook/Makefile.am: Added e-book-types.h, e-card-pairs.h,
-	e-card-types.h.
-
-	* backend/pas/Makefile.am: Added pas-backend-ldap.h.
-
-	* contact-editor/Makefile.am: Added a proper EXTRA_DIST section.
-	Removed some old defines.
-
-	* ename/Makefile.am: Added e-name-western-tables.h.
-
-	* gui/component/Makefile.am: Added e-ldap-server-dialog.h.  Added
-	a proper EXTRA_DIST section.
-
-	* gui/minicard/e-reflow.c: Added a missed cast.
-
-	* printing/Makefile.am: Added a proper EXTRA_DIST section.
-	
-2000-05-09  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Make sure that the canvas
-	doesn't intercept keyboard focus.
-
-2000-05-09  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Use new art.
-
-2000-05-09  Christopher James Lahey  
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Replaced the Address
-	button with a label and rearranged the address area a bit.
-
-2000-05-09  Christopher James Lahey  
-
-	* gui/minicard/e-minicard.c: Reenable editting.
-
-	* gui/minicard/e-reflow-sorted.c: Make reflow flow on deletion.
-
-2000-05-09  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Destroy the view object when
-	leaving the minicard view.
-
-2000-05-09  Christopher James Lahey  
-
-	* gui/minicard/e-reflow-sorted.c: Fixed reflow sorting to call
-	reflow_request when sorting on an item changes.
-
-2000-05-09  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c: Make File As change if name or
-	company are changed pretty much anywhere.
-
-	* gui/minicard/e-minicard.c: Turned off having minicard editing
-	effect anything since it's so crashy.
-
-2000-05-09  Christopher James Lahey  
-
-	* backend/pas/pas-backend-ldap.c: Enabled a couple more fields
-
-2000-05-09  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c: Added a default card to all new
-	file backends.
-
-2000-05-09  Christopher James Lahey  
-
-	* gui/component/e-addressbook-model.c: Rearranged order of things
-	getting destroyed.
-
-	* gui/minicard/e-minicard-view.c: Rearranged order of things
-	getting destroyed.  Don't set attributes of non-null or destroyed
-	items.  Destroy parent object when destroyed.  Maintain ref_count
-	of items in list.
-
-	* gui/minicard/e-minicard.c: Don't set attributes of non-null
-	items.
-
-	* gui/minicard/e-reflow-sorted.c: Maintain ref_count of items in
-	list.
-
-	* gui/minicard/e-reflow.c: Maintain ref_count of items in list.
-	Destroy parent object when destroyed.
-
-2000-05-09  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c: Fixed some indentation.
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Changed Email to
-	Primary Email.
-
-	* contact-editor/e-contact-editor.c: Added checkmarks to indicate
-	if data exists in the pull down menus for the phone, address, and
-	email fields.
-
-2000-05-09  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c: Fixed the string duplication
-	problem.  Fixed the business/home address string mix up.
-
-	* gui/component/addressbook.c: Made the minicard view the default
-	view.
-
-2000-05-08  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c: Fixed this up a bit.  Syncing
-	should work better now.
-
-2000-05-08  Christopher James Lahey  
-
-	* gui/minicard/e-minicard-view.c, gui/minicard/e-minicard.c,
-	gui/minicard/e-minicard.h, gui/minicard/e-reflow-sorted.c,
-	gui/minicard/e-reflow-sorted.h: Made a minimal number of things be
-	destroyed and recreated when updating a field.
-
-2000-05-07    
-
-	* gui/minicard/e-minicard.c (remodel): make sure to free the
-	return value of e_card_simple_get.
-
-	* gui/component/addressbook.c (teardown_table_view): destroy the
-	ECardSimple here, plug memory leak.
-	(create_table_view): use view->simple so we can destroy the
-	ECardSimple later on.
-
-2000-05-07  Chris Toshok  
-
-	* ename/e-name-western.c (e_name_western_extract_middle): comment
-	function, and fix an ABR.
-
-2000-05-07  Chris Toshok  
-
-	* ename/e-name-western.c (e_name_western_cleanup_string): comment
-	function, and fix an ABR.
-
-2000-05-08  Christopher James Lahey  
-
-	* gui/minicard/e-minicard.c: Added saving in minicard view.
-
-2000-05-07  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c: Fixed an off by 2 error.
-
-2000-05-07  Chris Toshok  
-
-	* gui/component/addressbook.c (set_prop): don't create a new
-	ebook.  instead, unload the current uri (if there is one) and load
-	the new one.
-	(addressbook_factory): create the ebook once.
-
-2000-05-07  Christopher James Lahey  
-
-	* gui/component/e-addressbook-model.c: Replaced some model_changed
-	calls with row_inserted calls.
-
-2000-05-07  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c, backend/pas/pas-backend-ldap.c:
-	Removed some code that was notifying too many clients at the wrong
-	times.
-
-	* gui/component/addressbook.c: Set view->book.  Unreffed
-	view->book.  Unreffed the model instead of destroying it.  Removed
-	the /tmp/test.db stuff.
-
-2000-05-07  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Make the addressbook create the
-	correct file uri.  Added a default query.  Initialize view->model
-	and view->view to NULL.
-
-	* gui/component/e-addressbook-model.c,
-	gui/minicard/e-minicard-view.c: Only call get_book_view if both
-	book and query and non-null.
-
-2000-05-06  Chris Toshok  
-
-	* gui/component/addressbook.c (control_deactivate): remove the
-	separator and toggle view items as well.
-	(toggle_view_as_cb): callback for the "/View/Toggle View" menu
-	item.
-	(get_query): getter for the query string that takes into account
-	the two view types.
-	(set_query): setter for the query string that takes into account
-	the two view types.
-	(set_book): setter for the EBook type - not really a setter, since
-	the book is kept in the AddressbookView, but this method actually
-	sets the "book" property on the current view.
-	(find_contact_cb): make use of get/set_query
-	(search_entry_activated): make use of set_query.
-	(control_activate): add a menu separator and an item to toggle
-	between view types.
-	(book_open_cb): make use of set_book.
-	(ebook_create): no longer needs to return the EBook, since we set
-	the book field in our view.
-	(teardown_minicard_view): destructor function for the minicard
-	specific ui.
-	(create_minicard_view): constructor function for the minicard
-	specific ui.
-	(teardown_table_view): destructor function for the e-table
-	specific ui.
-	(create_table_view): constructor function for the e-table specific
-	ui.
-	(change_view_type): destroy the old and create the new view ui,
-	change the label of the Toggle View menu item, and reset the book
-	and query on the new view type.
-	(addressbook_factory): create an all-encompassing vbox that the
-	view uses to create the bonobo control, which contains 1 widget
-	per ui specific view (the e-table in the table case, and another
-	vbox in the minicard case.)  use change_view_type to create the
-	initial view.
-
-2000-05-07  Christopher James Lahey  
-
-	* backend/ebook/e-book.c: Made a NULL callback just mean to not
-	call back.
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h:
-	Reordered fields.  Added a get_const function to get a constant
-	string that persists until the simple is destroyed.
-
-	* gui/component/Makefile.am: Added e-addressbook-model.c and
-	e-addressbook-model.h and all of the libraries and includes that
-	they are dependent on.
-
-	* gui/component/addressbook-factory.c: Initialize e cursors.
-
-	* gui/component/addressbook.c: Added inactive code to display an
-	ETable view of the addressbook.
-
-	* gui/component/e-addressbook-model.c,
-	gui/component/e-addressbook-model.h: New files to implement an
-	ETable model with a EBook back end.
-	
-2000-05-06  Christopher James Lahey  
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h:
-	Mostly finished ECardSimple.
-
-	* contact-editor/e-contact-editor.c: Changed this to match with
-	some of the changes to ECardSimple.
-
-	* gui/component/addressbook.c: Changed this to look for
-	"addressbook.db" in the given directory if it doesn't find the
-	file "uri".
-
-	* gui/minicard/e-minicard.c, gui/minicard/e-minicard.h: Changed
-	this to use ECardSimple.
-
-2000-05-06  Chris Toshok  
-	
-	* gui/component/.cvsignore: ignore evolution-addressbook.pure
-
-	* gui/component/Makefile.am: add support for generating 
-	evolution-addressbook.pure.
-
-2000-05-06  Chris Toshok  
-
-	* backend/pas/pas-backend-ldap.c (pas_backend_ldap_load_uri): if a
-	port isn't specified in the uri default to 389.
-
-2000-05-06  Christopher James Lahey  
-
-	* gui/component/addressbook.c: Made this take a uri through its
-	property bag.
-
-2000-05-05  Christopher James Lahey  
-
-	* backend/ebook/Makefile.am: Added e-card-simple.c and
-	e-card-simple.h.
-
-	* backend/ebook/e-card-simple.c, backend/ebook/e-card-simple.h:
-	New card wrapper class to simplify things.
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Changed e-contact-editor to use
-	ECardSimple a bit.
-
-2000-05-03  Chris Toshok  
-
-	* gui/component/addressbook.c (control_deactivate): #ifdef
-	HAVE_LDAP the ldap specific stuff.
-	(null_cb): same.
-	(control_activate): same.
-
-2000-05-02  Ettore Perazzoli  
-
-	* backend/ebook/Makefile.am (INCLUDES): Add
-	`-I$(top_srcdir)/addressbook/ename'.
-
-2000-05-02  Matt Loper  
-
-	* demo/Makefile.am: set G_LOG_DOMAIN.
-	* printing/Makefile.am: same.
-
-2000-05-01  Christopher James Lahey  
-
-	* backend/pas/pas-book-factory.c: Add back in the
-	CORBA_Object_release.
-
-	* backend/pas/pas-book.c: Properly duplicate and release the
-	listener passed to us.
-
-2000-05-01  Christopher James Lahey  
-
-	* backend/pas/pas-backend-file.c, backend/pas/pas-backend-ldap.c:
-	Made uri slightly better managed.
-	
-	* backend/pas/pas-book-factory.c
-	(pas_book_factory_process_request): Remove this
-	CORBA_Object_release that causes things not to work.  This is just
-	a temporary fix until we figure out what's actually wrong.
-
-	* backend/pas/pas-book.c: Fixed a copy and paste error in a warning.
-	
-2000-05-01  Christopher James Lahey  
-
-	* Makefile.am: Switched the subdirs order since backend depends on
-	ename.
-
-2000-05-01  Larry Ewing  
-
-	* backend/pas/pas-backend-ldap.c (pas_backend_ldap_remove_client):
-	fix a typo in the for loop.
-
-2000-05-01  Michael Meeks  
-
-	* backend/pas/pas-book-factory.c: include gtk.
-
-2000-04-30  Federico Mena Quintero  
-
-	* backend/ebook/e-book-types.h (EBookStatus): Added new status
-	values for the IDL stuff.
-
-	* backend/pas/pas-book-factory.h (PASBookFactoryClass): New
-	"last_book_gone" signal.
-
-	* backend/pas/pas-book-factory.c
-	(pas_book_factory_launch_backend): Better error handling.
-	(pas_book_factory_process_queue): Let
-	pas_book_factory_process_request() free the request.
-	(pas_book_factory_process_request): Free the request here.
-	Perform better error handling.
-	(free_active_server_map_entry): Free an active server map entry;
-	free the URI key and unref the backend value.  This function was
-	renamed; the old one was trying to CORBA_Object_unref() a GTK+
-	object!
-	(remove_backends_entry): Free a backend table entry; free the URI
-	key.
-	(backend_last_client_gone_cb): Remove the backend from the active
-	server map and emit the "last_book_gone" signal if appropriate.
-	(pas_book_factory_get_n_backends): New function to query the
-	number of running backends in an addressbook factory.
-
-	* backend/idl/addressbook.idl (BookListener::CallStatus): Added a
-	ProtocolNotSupported code.  This is for when the addressbook
-	factory cannot find a provider for the requested URI.
-
-	* backend/pas/pas-backend.h (PASBackendClass): New
-	"last_client_gone" signal.
-	(PASBackendClass): New get_uri virtual method.
-
-	* backend/pas/pas-backend.c (pas_backend_load_uri): Return a
-	gboolean success code.
-	(pas_backend_add_client): Return a gboolean success code.
-	(pas_backend_last_client_gone): New function used by backend
-	implementations to notify upwards when the backend's last client
-	is destroyed.
-	(pas_backend_get_uri): New function to get the URI of a backend.
-
-	* backend/pas/pas-backend-file.c (pas_backend_file_add_client):
-	Pass the backend as the closure data to the "destroy" handler of
-	the book.  We cannot call pas_book_get_backend() in the callback
-	since the book's private data has already been destroyed when the
-	callback is invoked.  Alternatively, we could move the private
-	data destruction step to the book's ::finalize() method.
-	(pas_backend_file_book_destroy_cb): Get the backend from the
-	callback's data, not from the book.
-	(pas_backend_file_remove_client): Remove the book from the list of
-	clients.  When all clients go away, call
-	pas_backend_last_client_gone().
-	(PASBackendFilePrivate): Added an uri field.
-	(pas_backend_file_get_uri): Implement the get_uri method.
-	(pas_backend_file_load_uri): Return a gboolean success code.
-	Also, store the URI in the private structure.
-	(pas_backend_file_add_client): Return a gboolean success code.
-	Also, call pas_backend_last_client_gone() if appropriate.
-	(pas_backend_file_destroy): Free the bf->priv->uri.
-
-	* backend/pas/pas-backend-ldap.c (pas_backend_ldap_add_client):
-	Pass the backend as the closure data to the "destroy" handler of
-	the book.  See above for rationale.
-	(pas_backend_ldap_book_destroy_cb): Get the backend from the
-	callback's data.
-	(pas_backend_ldap_remove_client): Remove the book from the list of
-	clients.  When all clients go away, call
-	pas_backend_last_client_gone().
-	(pas_backend_ldap_load_uri): Return a gboolean success code.
-	(pas_backend_ldap_add_client): Return a gboolean success code.
-	Also, call pas_backend_last_client_gone() if appropriate.
-	(PASBackendLDAPPrivate): New uri field.
-	(pas_backend_ldap_get_uri): Implement the get_uri method.
-	(pas_backend_ldap_load_uri): Store the uri in the private
-	structure.
-	(pas_backend_ldap_destroy): Free the bl->priv->uri.
-
-2000-04-30  Chris Toshok  
-
-	* gui/component/Makefile.am (evolution_addressbook_SOURCES): added
-	e-ldap-server-dialog.c
-	(glade_DATA): added ldap-server-dialog.glade
-
-	* gui/component/ldap-server-dialog.glade: new file.
-
-	* gui/component/e-ldap-server-dialog.h: new file.
-
-	* gui/component/e-ldap-server-dialog.c: new file, contains logic
-	associated with ldap server dialog.
-
-	* gui/component/addressbook.c (control_deactivate): remove the
-	directory server menu item.
-	(null_cb): do nothing callback for e_book_load_uri call.  should
-	change to (at the very least) pop up a dialog if there was an
-	error.
-	(new_server_cb): new function - really just switches to a
-	particular ldap server, since the information isn't saved
-	anywhere.
-	(control_activate): add directory server menu item.
-
-2000-04-30  Chris Toshok  
-
-	* backend/ebook/e-book.c (e_book_load_uri): create the book
-	listener here, since it's destroyed in unload_uri.
-	(e_book_construct): remove the book listener construction here.
-
-2000-04-30  Christopher James Lahey  
-
-	* backend/ebook/.cvsignore: Added load-pine-addressbook.
-
-2000-04-30  Christopher James Lahey  
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor.c, gui/minicard/e-minicard.c: Made
-	some fields invisible that were visible before.
-
-2000-04-30  Christopher James Lahey  
-
-	* backend/ebook/e-card.c: Make file as not have the : after it if
-	it's empty.  If there's no name, or file_as, fill in these fields
-	with defaults based on full_name or name respectively.
-
-	* backend/ebook/load-pine-addressbook.c: New file to do import of
-	pine .addressbook files.
-
-	* backend/pas/pas-backend-file.c: Made empty fields act as the
-	empty string for searches.
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Made the File As field update
-	properly as you edit the name and company fields.  Added the pull
-	down list of File As choices.  Made sure that all fields will
-	be set to NULL if they are deleted to the empty string.
-
-	* gui/minicard/e-minicard.c: Use the File As field instead of the
-	Full Name field for the header.  Make identical compares on the
-	File As field do a compare on the uid.
-
-2000-04-30  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor-fullname.c,
-	contact-editor/fullname.glade: Fixed a string mismatch.
-
-2000-04-30  Christopher James Lahey  
-
-	* backend/ebook/Makefile.am: Added ename includes and libs.
-
-	* backend/ebook/e-card.c, backend/ebook/e-card.h: Added
-	e_card_name_from_string.  Added header for
-	e_card_delivery_address_from_string, even though it's not
-	implemented yet.
-
-	* contact-editor/Makefile.am: Removed the ename includes since we
-	no longer use ename directly here.
-
-	* contact-editor/e-contact-editor.c: Fixed this to properly save
-	the address labels displayed.  Updated this to use the function
-	e_card_name_from_string instead of doing it by hand.
-
-	* contact-editor/fullname-strings.h,
-	contact-editor/fullname.glade: Deleted an unused field.  Changed
-	the set of prefixes and suffixes.
-
-2000-04-30  Chris Toshok  
-
-	* backend/pas/pas-backend-ldap.c
-	(pas_backend_ldap_ensure_connected): add support for a rootdn in
-	the uri.
-	(pas_backend_ldap_build_all_cards_list): make use of the rootdn in
-	the call to ldap_search_s.
-	(pas_backend_ldap_search): same.
-	(pas_backend_ldap_load_uri): get the rootdn out of the passed in uri.
-
-2000-04-29  Christopher James Lahey  
-
-	* backend/ebook/e-card.c, backend/ebook/e-card.h: Added
-	e_card_phone_new e_card_delivery_address_new,
-	e_card_delivery_address_to_string, e_card_name_copy,
-	e_card_name_new, e_card_name_to_string, and made e_card_name_free
-	public.  Removed some unused code.
-
-	* backend/pas/pas-backend-file.c: Fixed a warning.
-
-	* contact-editor/Makefile.am: Added e-contact-editor-fullname.[ch]
-	and fullname.glade.  Added e-name libs and includes.
-
-	* contact-editor/e-contact-editor-fullname.c,
-	contact-editor/e-contact-editor-fullname.h,
-	contact-editor/fullname-strings.h, contact-editor/fullname.glade:
-	New dialog for editing the fields of a name separately.
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Create an
-	EContactEditorFullname when you click on the Full Name button.
-	Maintain a parsed name at all times.
-
-	* gui/component/Makefile.am, gui/minicard/Makefile.am: Added
-	e-name libs.
-
-2000-04-28  Larry Ewing  
-
-	* backend/pas/pas-book-factory.c (register_factory): fix the
-	`USING_OAF' changes so that they work for when we are not using
-	oaf.
-
-2000-04-27  Ettore Perazzoli  
-
-	* ename/Makefile.am
-	(gnome_libs): Use `BONOBO_GNOME_LIBS'.
-	(INCLUDES): Add `-I$(srcdir)/..'.
-
-	* backend/pas/pas-book-factory.c
-	(register_factory): New function to register the factory.
-	Implementation different according to `USING_OAF'.
-	(pas_book_factory_activate): Use `register_factory()'.
-
-	* gui/component/addressbook.c: New #define `CONTROL_FACTORY_ID',
-	varying depending on whether we are `USING_OAF'.
-	(addressbook_factory_init): Use `CONTROL_FACTORY_ID'.
-
-	* backend/ebook/test-client.c (init_corba): New function,
-	implemented differently according to the `USING_OAF' #define.
-
-	* backend/ebook/e-book.c: New #define `CARDSERVER_OAF_ID'.
-	(e_book_construct): Work with OAF #if `USING_OAF'.
-
-	* backend/ebook/Makefile.am (gnome_libs): Removed.
-	(corbadir): Removed.
-	(ebook_libs): Removed.
-	(test_client_LDADD): Just add `libebook.la'.
-	(test_card_LDADD): Likewise.
-	(test_client_list_LDADD): Likewise.
-
-	* gui/component/addressbook-factory.c
-	(init_corba): New helper function, implemented differently
-	according to `USING_OAF'.
-	(main): Call `init_corba()'.
-
-2000-04-27  Christopher James Lahey  
-
-	* backend/ebook/e-card.c, backend/ebook/e-card.h: Added file as,
-	office, manager, assistant, spouse, and anniversary fields.  These
-	all use "X-EVOLUTION-" fields in the VCards.
-
-	* backend/pas/pas-backend-file.c: Added all the new fields (except
-	anniversary) to the list of fields.
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Fixed some misnamed
-	fields and fixed the placement of the comments field.
-
-	* contact-editor/e-contact-editor.c: Made the newly added fields
-	display properly.
-
-	* Makefile.am: Added ename.
-
-	* ename/e-name-western.h, ename/test-ename-western-gtk.c,
-	ename/test-ename-western.c: Fixed up some #includes.
-
-	* ename/.cvsignore: Added .cvsignore.
-
-2000-04-26  Christopher James Lahey  
-
-	* backend/ebook/e-card-types.h, backend/ebook/e-card.c,
-	backend/ebook/e-card.h: Added an address label field.
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Got rid of some unused
-	fields.
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Added the address label field.
-	Load only.  Editing these fields seems to mess things up.
-
-2000-04-26  Christopher James Lahey  
-
-	* contact-editor/e-contact-editor.c: Added proper handling of the
-	email field.
-
-2000-04-26  Christopher James Lahey  
-
-	* backend/ebook/e-card-types.h, backend/ebook/e-card.c,
-	gui/minicard/e-minicard.c: Prefixed the ADDR_ flags.
-
-	* contact-editor/contact-editor.glade,
-	contact-editor/e-contact-editor-strings.h: Edited the glade file.
-	Removed all the fields that we don't use.
-
-	* contact-editor/e-contact-editor.c,
-	contact-editor/e-contact-editor.h: Made the phone fields work
-	properly.  The address and email fields are temporarily turned off
-	until they can be made to work as the phone fields do.
-
-2000-04-25  Ettore Perazzoli  
-
-	* gui/minicard/Makefile.am (INCLUDES): Use
-	`$(BONOBO_GNOME_CFLAGS)'.
-
-	* backend/pas/Makefile.am (idl_flags): Add `-I $(datadir)/idl' to
-	pick up IDL files in the installation prefix as well.
-	(INCLUDES): Use `$(BONOBO_GNOME_CFLAGS)'.
-
-	* backend/ebook/Makefile.am (ORBIT_IDL): Use `-I $(datadir)/idl'
-	to get the IDLs from the installation prefix as well.
-	(INCLUDES): Add `$(BONOBO_GNOME_CFLAGS)'.
-	(test_client_LDADD): Use `$(BONOBO_GNOME_LIBS)' instead of
-	hardcoding `-lbonobo'!  Also get rid of some other useless flags,
-	as `$(BONOBO_GNOME_LIBS)' really has all what we need.
-	(test_client_list_LDADD): Likewise.
-	(test_card_LDADD): Likewise.
-
-2000-04-18  Federico Mena Quintero  
-
-	* gui/minicard/Makefile.am (INCLUDES): Use "e-minicard" as the log
-	domain.
-
-	* gui/component/Makefile.am (INCLUDES): Use
-	"evolution-addressbook" as the log domain.
-
-	* backend/pas/Makefile.am: Build libpas.a, not a shared library.
-	Do not install any header files.
-	(INCLUDES): Remove spurious include paths.
-
-	* backend/pas/*.[ch]: Fix includes.
-
-	* backend/ebook/Makefile.am: Do not install the test programs.
-	Fixed some include weirdness.
-
-	* backend/ebook/*.[ch]: Fix includes.
-
-	* contact-editor/Makefile.am (INCLUDES): Set the log domain to
-	"contact-editor".
-	(INCLUDES): Fix.
-
-	* contact-editor/*.[ch]: Fix includes.
-
-	* gui/minicard/*.[ch]: Fix includes.
-
-	* ChangeLog: Started a ChangeLog here.
diff --git a/addressbook/Makefile.am b/addressbook/Makefile.am
deleted file mode 100644
index 66581af8ed..0000000000
--- a/addressbook/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-if ENABLE_PILOT_CONDUITS
-CONDUIT_SUBDIR=conduit
-endif
-
-SUBDIRS =	\
-	ename backend printing contact-editor gui $(CONDUIT_SUBDIR)
-
diff --git a/addressbook/backend/.cvsignore b/addressbook/backend/.cvsignore
deleted file mode 100644
index 09980ae6ba..0000000000
--- a/addressbook/backend/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
diff --git a/addressbook/backend/Makefile.am b/addressbook/backend/Makefile.am
deleted file mode 100644
index b2807b2480..0000000000
--- a/addressbook/backend/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = idl ebook pas
diff --git a/addressbook/backend/ebook/.cvsignore b/addressbook/backend/ebook/.cvsignore
deleted file mode 100644
index 1abc66db18..0000000000
--- a/addressbook/backend/ebook/.cvsignore
+++ /dev/null
@@ -1,16 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-*.lo
-*.la
-addressbook-stubs.c
-addressbook-skels.c
-addressbook-common.c
-addressbook.h
-test-card
-test-client
-test-client-list
-load-pine-addressbook
-load-gnomecard-addressbook
diff --git a/addressbook/backend/ebook/Makefile.am b/addressbook/backend/ebook/Makefile.am
deleted file mode 100644
index 12f35d0b94..0000000000
--- a/addressbook/backend/ebook/Makefile.am
+++ /dev/null
@@ -1,116 +0,0 @@
-noinst_PROGRAMS = test-card test-client test-client-list load-pine-addressbook load-gnomecard-addressbook
-
-CORBA_SOURCE =						\
-	addressbook.h					\
-	addressbook-common.c				\
-	addressbook-stubs.c				\
-	addressbook-skels.c
-
-idls =							\
-	$(srcdir)/../idl/addressbook.idl
-
-idl_flags = `$(GNOME_CONFIG) --cflags idl` -I $(datadir)/idl
-
-$(CORBA_SOURCE): $(idls)
-	$(ORBIT_IDL) $(srcdir)/../idl/addressbook.idl $(idl_flags)
-
-INCLUDES =						\
-        -DGNOMELOCALEDIR=\""$(datadir)/locale"\"        \
-	-DG_LOG_DOMAIN=\"EBook\"			\
-	-I$(top_srcdir) 				\
-	-I$(top_srcdir)/addressbook/backend		\
-	-I$(top_srcdir)/addressbook/ename		\
-	-I$(top_builddir)/addressbook/backend		\
-	-I$(top_builddir)/addressbook/ename		\
-        $(BONOBO_GNOME_CFLAGS)
-
-lib_LTLIBRARIES = libebook.la
-
-libebook_la_SOURCES =					\
-	$(CORBA_SOURCE)					\
-	e-book-listener.c				\
-	e-book-view-listener.c				\
-	e-book-view.c					\
-	e-book.c					\
-	e-card-cursor.c					\
-	e-card-simple.c					\
-	e-card.c
-
-libebookincludedir = $(includedir)/evolution/ebook
-
-libebookinclude_HEADERS =				\
-	e-book-listener.h				\
-	e-book-types.h					\
-	e-book-view-listener.h				\
-	e-book-view.h					\
-	e-book.h					\
-	e-card-cursor.h					\
-	e-card-pairs.h					\
-	e-card-simple.h					\
-	e-card-types.h					\
-	e-card.h
-
-
-#
-# make a static library for use by addressbook's conduit's shared library
-#
-noinst_LTLIBRARIES = libebook-static.la
-libebook_static_la_SOURCES = $(libebook_la_SOURCES)
-libebook_static_la_LDFLAGS = --all-static
-
-
-test_client_SOURCES =					\
-	test-client.c
-
-test_client_LDADD =					\
-	libebook.la					\
-	$(BONOBO_GNOME_LIBS)				\
-	$(top_builddir)/libversit/libversit.la		\
-	$(top_builddir)/addressbook/ename/libename.la	\
-	$(top_builddir)/e-util/libeutil.la
-
-test_client_list_SOURCES =				\
-	test-client-list.c
-
-test_client_list_LDADD =				\
-	libebook.la					\
-	$(BONOBO_GNOME_LIBS)				\
-	$(top_builddir)/addressbook/ename/libename.la	\
-	$(top_builddir)/libversit/libversit.la		\
-	$(top_builddir)/e-util/libeutil.la
-
-test_card_SOURCES =					\
-	test-card.c
-
-test_card_LDADD =					\
-	libebook.la					\
-	$(BONOBO_GNOME_LIBS)				\
-	$(top_builddir)/addressbook/ename/libename.la	\
-	$(top_builddir)/libversit/libversit.la		\
-	$(top_builddir)/e-util/libeutil.la
-
-
-load_pine_addressbook_SOURCES =				\
-	load-pine-addressbook.c
-
-load_pine_addressbook_LDADD =				\
-	libebook.la					\
-	$(BONOBO_GNOME_LIBS)				\
-	$(top_builddir)/addressbook/ename/libename.la	\
-	$(top_builddir)/libversit/libversit.la		\
-	$(top_builddir)/e-util/libeutil.la
-
-
-load_gnomecard_addressbook_SOURCES =			\
-	load-gnomecard-addressbook.c
-
-load_gnomecard_addressbook_LDADD =			\
-	libebook.la					\
-	$(BONOBO_GNOME_LIBS)				\
-	$(top_builddir)/addressbook/ename/libename.la	\
-	$(top_builddir)/libversit/libversit.la		\
-	$(top_builddir)/e-util/libeutil.la
-
-
-BUILT_SOURCES = $(CORBA_SOURCE)
-CLEANFILES   += $(BUILT_SOURCES)
diff --git a/addressbook/backend/ebook/TODO b/addressbook/backend/ebook/TODO
deleted file mode 100644
index a69703cd92..0000000000
--- a/addressbook/backend/ebook/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-* Make sure open_book_progress does not use the EBook op queue; make
-  sure it works.
diff --git a/addressbook/backend/ebook/e-book-listener.c b/addressbook/backend/ebook/e-book-listener.c
deleted file mode 100644
index 5efdaa37df..0000000000
--- a/addressbook/backend/ebook/e-book-listener.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Exports the BookListener interface.  Maintains a queue of messages
- * which come in on the interface.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include "e-book-listener.h"
-
-static EBookStatus e_book_listener_convert_status (Evolution_BookListener_CallStatus status);
-
-enum {
-	RESPONSES_QUEUED,
-	LAST_SIGNAL
-};
-
-static guint e_book_listener_signals [LAST_SIGNAL];
-
-static BonoboObjectClass          *e_book_listener_parent_class;
-POA_Evolution_BookListener__vepv  e_book_listener_vepv;
-
-struct _EBookListenerPrivate {
-	GList *response_queue;
-	gint   idle_id;
-};
-
-static gboolean
-e_book_listener_check_queue (EBookListener *listener)
-{
-	if (listener->priv->response_queue != NULL) {
-		gtk_signal_emit (GTK_OBJECT (listener),
-				 e_book_listener_signals [RESPONSES_QUEUED]);
-	}
-
-	if (listener->priv->response_queue == NULL) {
-		listener->priv->idle_id = 0;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static void
-e_book_listener_queue_response (EBookListener         *listener,
-				EBookListenerResponse *response)
-{
-	listener->priv->response_queue =
-		g_list_append (listener->priv->response_queue,
-			       response);
-
-	if (listener->priv->idle_id == 0) {
-		listener->priv->idle_id = g_idle_add (
-			(GSourceFunc) e_book_listener_check_queue, listener);
-	}
-}
-
-/* Add, Remove, Modify */
-static void
-e_book_listener_queue_generic_response (EBookListener          *listener,
-					EBookListenerOperation  op,
-					EBookStatus             status)
-{
-	EBookListenerResponse *resp;
-
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op     = op;
-	resp->status = status;
-
-	e_book_listener_queue_response (listener, resp);
-}
-
-static void
-e_book_listener_queue_open_response (EBookListener  *listener,
-				     EBookStatus     status,
-				     Evolution_Book  book)
-{
-	EBookListenerResponse *resp;
-
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op     = OpenBookResponse;
-	resp->status = status;
-	resp->book   = book;
-
-	e_book_listener_queue_response (listener, resp);
-}
-
-static void
-e_book_listener_queue_open_progress (EBookListener *listener,
-				     const char    *msg,
-				     short          percent)
-{
-	EBookListenerResponse *resp;
-
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op      = OpenProgressEvent;
-	resp->msg     = g_strdup (msg);
-	resp->percent = percent;
-
-	e_book_listener_queue_response (listener, resp);
-}
-
-
-static void
-e_book_listener_queue_create_card_response (EBookListener *listener,
-					    EBookStatus    status,
-					    const char    *id)
-{
-	EBookListenerResponse *resp;
-
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op     = CreateCardResponse;
-	resp->status = status;
-	resp->id     = g_strdup (id);
-
-	e_book_listener_queue_response (listener, resp);
-}
-
-static void
-e_book_listener_queue_get_cursor_response (EBookListener        *listener,
-					   EBookStatus           status,
-					   Evolution_CardCursor  cursor)
-{
-	EBookListenerResponse *resp;
-	
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op     = GetCursorResponse;
-	resp->status = status;
-	resp->cursor = cursor;
-	
-	e_book_listener_queue_response (listener, resp);
-}
-
-static void
-e_book_listener_queue_get_view_response (EBookListener        *listener,
-					 EBookStatus           status,
-					 Evolution_BookView    book_view)
-{
-	EBookListenerResponse *resp;
-	
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op        = GetBookViewResponse;
-	resp->status    = status;
-	resp->book_view = book_view;
-	
-	e_book_listener_queue_response (listener, resp);
-}
-
-static void
-e_book_listener_queue_link_status (EBookListener *listener,
-				   gboolean       connected)
-{
-	EBookListenerResponse *resp;
-
-	resp = g_new0 (EBookListenerResponse, 1);
-
-	resp->op        = LinkStatusEvent;
-	resp->connected = connected;
-
-	e_book_listener_queue_response (listener, resp);
-}
-
-static void
-impl_BookListener_respond_create_card (PortableServer_Servant                   servant,
-				       const Evolution_BookListener_CallStatus  status,
-				       const Evolution_CardId                   id,
-				       CORBA_Environment                       *ev)
-{
-	EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_listener_queue_create_card_response (
-		listener,
-		e_book_listener_convert_status (status),
-		id);
-}
-
-static void
-impl_BookListener_respond_remove_card (PortableServer_Servant servant,
-				       const Evolution_BookListener_CallStatus status,
-				       CORBA_Environment *ev)
-{
-	EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_listener_queue_generic_response (
-		listener, RemoveCardResponse,
-		e_book_listener_convert_status (status));
-}
-
-static void
-impl_BookListener_respond_modify_card (PortableServer_Servant servant,
-				       const Evolution_BookListener_CallStatus status,
-				       CORBA_Environment *ev)
-{
-	EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_listener_queue_generic_response (
-		listener, ModifyCardResponse,
-		e_book_listener_convert_status (status));
-}
-
-static void
-impl_BookListener_respond_get_cursor (PortableServer_Servant servant,
-				      const Evolution_BookListener_CallStatus status,
-				      const Evolution_CardCursor cursor,
-				      CORBA_Environment *ev)
-{
-	EBookListener        *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-	Evolution_CardCursor  cursor_copy;
-
-	cursor_copy = CORBA_Object_duplicate (cursor, ev);
-
-	if (ev->_major != CORBA_NO_EXCEPTION) {
-		g_warning ("EBookListener: Exception while duplicating CardCursor!\n");
-		return;
-	}
-
-	e_book_listener_queue_get_cursor_response (
-		listener,
-		e_book_listener_convert_status (status),
-		cursor_copy);
-}
-
-static void
-impl_BookListener_respond_get_view (PortableServer_Servant servant,
-				    const Evolution_BookListener_CallStatus status,
-				    const Evolution_BookView book_view,
-				    CORBA_Environment *ev)
-{
-	EBookListener        *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-	Evolution_BookView    book_view_copy;
-
-	book_view_copy = CORBA_Object_duplicate (book_view, ev);
-
-	if (ev->_major != CORBA_NO_EXCEPTION) {
-		g_warning ("EBookListener: Exception while duplicating BookView.\n");
-		return;
-	}
-
-	e_book_listener_queue_get_view_response (
-		listener,
-		e_book_listener_convert_status (status),
-		book_view_copy);
-}
-
-static void
-impl_BookListener_respond_open_book (PortableServer_Servant servant,
-				     const Evolution_BookListener_CallStatus status,
-				     const Evolution_Book book,
-				     CORBA_Environment *ev)
-{
-	EBookListener  *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-	Evolution_Book  book_copy;
-
-	book_copy = CORBA_Object_duplicate (book, ev);
-
-	if (ev->_major != CORBA_NO_EXCEPTION) {
-		g_warning ("EBookListener: Exception while duplicating Book!\n");
-		return;
-	}
-
-	e_book_listener_queue_open_response (
-		listener,
-		e_book_listener_convert_status (status),
-		book_copy);
-}
-
-static void
-impl_BookListener_report_open_book_progress (PortableServer_Servant servant,
-					     const CORBA_char *status_message,
-					     const CORBA_short percent,
-					     CORBA_Environment *ev)
-{
-	EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_listener_queue_open_progress (
-		listener, status_message, percent);
-}
-
-static void
-impl_BookListener_report_connection_status (PortableServer_Servant servant,
-					    const CORBA_boolean connected,
-					    CORBA_Environment *ev)
-{
-	EBookListener *listener = E_BOOK_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_listener_queue_link_status (
-		listener, connected);
-}
-
-/**
- * e_book_listener_check_pending:
- * @listener: the #EBookListener 
- *
- * Returns: the number of items on the response queue,
- * or -1 if the @listener is isn't an #EBookListener.
- */
-int
-e_book_listener_check_pending (EBookListener *listener)
-{
-	g_return_val_if_fail (listener != NULL,              -1);
-	g_return_val_if_fail (E_IS_BOOK_LISTENER (listener), -1);
-
-	return g_list_length (listener->priv->response_queue);
-}
-
-/**
- * e_book_listener_pop_response:
- * @listener: the #EBookListener for which a request is to be popped
- *
- * Returns: an #EBookListenerResponse if there are responses on the
- * queue to be returned; %NULL if there aren't, or if the @listener
- * isn't an EBookListener.
- */
-EBookListenerResponse *
-e_book_listener_pop_response (EBookListener *listener)
-{
-	EBookListenerResponse *resp;
-	GList                 *popped;
-
-	g_return_val_if_fail (listener != NULL,              NULL);
-	g_return_val_if_fail (E_IS_BOOK_LISTENER (listener), NULL);
-
-	if (listener->priv->response_queue == NULL)
-		return NULL;
-
-	resp = listener->priv->response_queue->data;
-
-	popped = listener->priv->response_queue;
-	listener->priv->response_queue =
-		g_list_remove_link (listener->priv->response_queue,
-				    listener->priv->response_queue);
-	g_list_free_1 (popped);
-
-	return resp;
-}
-
-static EBookStatus
-e_book_listener_convert_status (const Evolution_BookListener_CallStatus status)
-{
-	switch (status) {
-	case Evolution_BookListener_Success:
-		return E_BOOK_STATUS_SUCCESS;
-	case Evolution_BookListener_RepositoryOffline:
-		return E_BOOK_STATUS_REPOSITORY_OFFLINE;
-	case Evolution_BookListener_PermissionDenied:
-		return E_BOOK_STATUS_PERMISSION_DENIED;
-	case Evolution_BookListener_CardNotFound:
-		return E_BOOK_STATUS_CARD_NOT_FOUND;
-	case Evolution_BookListener_ProtocolNotSupported:
-		return E_BOOK_STATUS_PROTOCOL_NOT_SUPPORTED;
-	case Evolution_BookListener_OtherError:
-		return E_BOOK_STATUS_OTHER_ERROR;
-	default:
-		g_warning ("e_book_listener_convert_status: Unknown status "
-			   "from card server: %d\n", (int) status);
-		return E_BOOK_STATUS_UNKNOWN;
-
-	}
-}
-
-static EBookListener *
-e_book_listener_construct (EBookListener *listener)
-{
-	POA_Evolution_BookListener *servant;
-	CORBA_Environment           ev;
-	CORBA_Object                obj;
-
-	g_assert (listener != NULL);
-	g_assert (E_IS_BOOK_LISTENER (listener));
-
-	servant = (POA_Evolution_BookListener *) g_new0 (BonoboObjectServant, 1);
-	servant->vepv = &e_book_listener_vepv;
-
-	CORBA_exception_init (&ev);
-
-	POA_Evolution_BookListener__init ((PortableServer_Servant) servant, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_free (servant);
-		CORBA_exception_free (&ev);
-
-		return NULL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	obj = bonobo_object_activate_servant (BONOBO_OBJECT (listener), servant);
-	if (obj == CORBA_OBJECT_NIL) {
-		g_free (servant);
-
-		return NULL;
-	}
-
-	bonobo_object_construct (BONOBO_OBJECT (listener), obj);
-
-	return listener;
-}
-
-/**
- * e_book_listener_new:
- * @book: the #EBook for which the listener is to be bound
- *
- * Creates and returns a new #EBookListener for the book.
- *
- * Returns: a new #EBookListener
- */
-EBookListener *
-e_book_listener_new ()
-{
-	EBookListener *listener;
-	EBookListener *retval;
-
-	listener = gtk_type_new (E_BOOK_LISTENER_TYPE);
-
-	retval = e_book_listener_construct (listener);
-
-	if (retval == NULL) {
-		g_warning ("e_book_listener_new: Error constructing "
-			   "EBookListener!\n");
-		gtk_object_unref (GTK_OBJECT (listener));
-		return NULL;
-	}
-
-	return retval;
-}
-
-static void
-e_book_listener_init (EBookListener *listener)
-{
-	listener->priv = g_new0 (EBookListenerPrivate, 1);
-}
-
-static void
-e_book_listener_destroy (GtkObject *object)
-{
-	EBookListener     *listener = E_BOOK_LISTENER (object);
-	GList             *l;
-
-	for (l = listener->priv->response_queue; l != NULL; l = l->next) {
-		EBookListenerResponse *resp = l->data;
-
-		g_free (resp->msg);
-		g_free (resp->id);
-
-		if (resp->book != CORBA_OBJECT_NIL) {
-			CORBA_Environment ev;
-
-			CORBA_exception_init (&ev);
-
-			CORBA_Object_release (resp->book, &ev);
-
-			if (ev._major != CORBA_NO_EXCEPTION) {
-				g_warning ("e_book_listener_destroy: "
-					   "Exception destroying book "
-					   "in response queue!\n");
-			}
-			
-			CORBA_exception_free (&ev);
-		}
-
-		if (resp->cursor != CORBA_OBJECT_NIL) {
-			CORBA_Environment ev;
-
-			CORBA_exception_init (&ev);
-
-			CORBA_Object_release (resp->cursor, &ev);
-
-			if (ev._major != CORBA_NO_EXCEPTION) {
-				g_warning ("e_book_listener_destroy: "
-					   "Exception destroying cursor "
-					   "in response queue!\n");
-			}
-			
-			CORBA_exception_free (&ev);
-		}
-
-		if (resp->book_view != CORBA_OBJECT_NIL) {
-			CORBA_Environment ev;
-
-			CORBA_exception_init (&ev);
-
-			CORBA_Object_release (resp->book_view, &ev);
-
-			if (ev._major != CORBA_NO_EXCEPTION) {
-				g_warning ("e_book_listener_destroy: "
-					   "Exception destroying book_view "
-					   "in response queue!\n");
-			}
-			
-			CORBA_exception_free (&ev);
-		}
-
-		g_free (resp);
-	}
-	g_list_free (listener->priv->response_queue);
-
-	g_free (listener->priv);
-	
-	GTK_OBJECT_CLASS (e_book_listener_parent_class)->destroy (object);
-}
-
-POA_Evolution_BookListener__epv *
-e_book_listener_get_epv (void)
-{
-	POA_Evolution_BookListener__epv *epv;
-
-	epv = g_new0 (POA_Evolution_BookListener__epv, 1);
-
-	epv->report_open_book_progress = impl_BookListener_report_open_book_progress;
-	epv->respond_open_book         = impl_BookListener_respond_open_book;
-
-	epv->respond_create_card       = impl_BookListener_respond_create_card;
-	epv->respond_remove_card       = impl_BookListener_respond_remove_card;
-	epv->respond_modify_card       = impl_BookListener_respond_modify_card;
-
-	epv->respond_get_cursor        = impl_BookListener_respond_get_cursor;
-	epv->respond_get_view          = impl_BookListener_respond_get_view;
-
-	epv->report_connection_status  = impl_BookListener_report_connection_status;
-
-	return epv;
-}
-
-static void
-e_book_listener_corba_class_init (void)
-{
-	e_book_listener_vepv.Bonobo_Unknown_epv          = bonobo_object_get_epv ();
-	e_book_listener_vepv.Evolution_BookListener_epv = e_book_listener_get_epv ();
-}
-
-static void
-e_book_listener_class_init (EBookListenerClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	e_book_listener_parent_class = gtk_type_class (bonobo_object_get_type ());
-
-	e_book_listener_signals [RESPONSES_QUEUED] =
-		gtk_signal_new ("responses_queued",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookListenerClass, responses_queued),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, e_book_listener_signals, LAST_SIGNAL);
-
-	object_class->destroy = e_book_listener_destroy;
-
-	e_book_listener_corba_class_init ();
-}
-
-/**
- * e_book_listener_get_type:
- */
-GtkType
-e_book_listener_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"EBookListener",
-			sizeof (EBookListener),
-			sizeof (EBookListenerClass),
-			(GtkClassInitFunc)  e_book_listener_class_init,
-			(GtkObjectInitFunc) e_book_listener_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (bonobo_object_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/ebook/e-book-listener.h b/addressbook/backend/ebook/e-book-listener.h
deleted file mode 100644
index eb0432e360..0000000000
--- a/addressbook/backend/ebook/e-book-listener.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * A client-side GtkObject which exposes the
- * Evolution:BookListener interface.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __E_BOOK_LISTENER_H__
-#define __E_BOOK_LISTENER_H__
-
-#include 
-#include 
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _EBookListener EBookListener;
-typedef struct _EBookListenerClass EBookListenerClass;
-typedef struct _EBookListenerPrivate EBookListenerPrivate;
-
-struct _EBookListener {
-	BonoboObject           parent;
-	EBookListenerPrivate *priv;
-};
-
-struct _EBookListenerClass {
-	BonoboObjectClass parent;
-
-	/*
-	 * Signals
-	 */
-	void (*responses_queued) (void);
-};
-
-typedef enum {
-	/* Async responses */
-	OpenBookResponse,
-	CreateCardResponse,
-	RemoveCardResponse,
-	ModifyCardResponse,
-	GetCursorResponse,
-	GetBookViewResponse,
-
-	/* Async events */
-	LinkStatusEvent,
-	OpenProgressEvent,
-} EBookListenerOperation;
-
-typedef struct {
-	EBookListenerOperation  op;
-
-	/* For most Response notifications */
-	EBookStatus             status;
-
-	/* For OpenBookResponse */
-	Evolution_Book          book;
-
-	/* For GetCursorResponse */
-	Evolution_CardCursor    cursor;
-
-	/* For GetBookViewReponse */
-	Evolution_BookView      book_view;
-
-	/* For OpenProgressEvent */
-	char                   *msg;
-	short                   percent;
-
-	/* For LinkStatusEvent */
-	gboolean                connected;
-
-	/* For Card[Added|Removed|Modified]Event */
-	char                   *id;
-} EBookListenerResponse;
-
-EBookListener         *e_book_listener_new            (void);
-int                    e_book_listener_check_pending  (EBookListener *listener);
-EBookListenerResponse *e_book_listener_pop_response   (EBookListener *listener);
-GtkType                e_book_listener_get_type       (void);
-
-POA_Evolution_BookListener__epv *e_book_listener_get_epv (void);
-
-#define E_BOOK_LISTENER_TYPE        (e_book_listener_get_type ())
-#define E_BOOK_LISTENER(o)          (GTK_CHECK_CAST ((o), E_BOOK_LISTENER_TYPE, EBookListener))
-#define E_BOOK_LISTENER_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_BOOK_LISTENER_TYPE, EBookListenerClass))
-#define E_IS_BOOK_LISTENER(o)       (GTK_CHECK_TYPE ((o), E_BOOK_LISTENER_TYPE))
-#define E_IS_BOOK_LISTENER_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_BOOK_LISTENER_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __E_BOOK_LISTENER_H__ */
diff --git a/addressbook/backend/ebook/e-book-types.h b/addressbook/backend/ebook/e-book-types.h
deleted file mode 100644
index a3e8bbc032..0000000000
--- a/addressbook/backend/ebook/e-book-types.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * A client-side GtkObject which exposes the
- * Evolution:BookListener interface.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __E_BOOK_TYPES_H__
-#define __E_BOOK_TYPES_H__
-
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef enum {
-	E_BOOK_STATUS_SUCCESS,
-	E_BOOK_STATUS_UNKNOWN,
-	E_BOOK_STATUS_REPOSITORY_OFFLINE,
-	E_BOOK_STATUS_PERMISSION_DENIED,
-	E_BOOK_STATUS_CARD_NOT_FOUND,
-	E_BOOK_STATUS_PROTOCOL_NOT_SUPPORTED,
-	E_BOOK_STATUS_OTHER_ERROR
-} EBookStatus;
-
-END_GNOME_DECLS
-
-#endif /* ! __E_BOOK_TYPES_H__ */
diff --git a/addressbook/backend/ebook/e-book-view-listener.c b/addressbook/backend/ebook/e-book-view-listener.c
deleted file mode 100644
index be871d65d7..0000000000
--- a/addressbook/backend/ebook/e-book-view-listener.c
+++ /dev/null
@@ -1,374 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Exports the BookViewListener interface.  Maintains a queue of messages
- * which come in on the interface.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include "e-book-view-listener.h"
-#include "e-book-view.h"
-#include "e-card.h"
-
-enum {
-	RESPONSES_QUEUED,
-	LAST_SIGNAL
-};
-
-static guint e_book_view_listener_signals [LAST_SIGNAL];
-
-static BonoboObjectClass          *e_book_view_listener_parent_class;
-POA_Evolution_BookViewListener__vepv  e_book_view_listener_vepv;
-
-struct _EBookViewListenerPrivate {
-	GList *response_queue;
-	gint   idle_id;
-};
-
-static gboolean
-e_book_view_listener_check_queue (EBookViewListener *listener)
-{
-	if (listener->priv->response_queue != NULL) {
-		gtk_signal_emit (GTK_OBJECT (listener),
-				 e_book_view_listener_signals [RESPONSES_QUEUED]);
-	}
-
-	if (listener->priv->response_queue == NULL) {
-		listener->priv->idle_id = 0;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static void
-e_book_view_listener_queue_response (EBookViewListener         *listener,
-				     EBookViewListenerResponse *response)
-{
-	listener->priv->response_queue =
-		g_list_append (listener->priv->response_queue,
-			       response);
-
-	if (listener->priv->idle_id == 0) {
-		listener->priv->idle_id = g_idle_add (
-			(GSourceFunc) e_book_view_listener_check_queue, listener);
-	}
-}
-
-/* Add, Remove, Modify */
-static void
-e_book_view_listener_queue_empty_event (EBookViewListener          *listener,
-					EBookViewListenerOperation  op)
-{
-	EBookViewListenerResponse *resp;
-
-	resp = g_new0 (EBookViewListenerResponse, 1);
-
-	resp->op        = op;
-	resp->id        = NULL;
-	resp->cards     = NULL;
-
-	e_book_view_listener_queue_response (listener, resp);
-}
-
-/* Add, Remove, Modify */
-static void
-e_book_view_listener_queue_id_event (EBookViewListener          *listener,
-				     EBookViewListenerOperation  op,
-				     const char             *id)
-{
-	EBookViewListenerResponse *resp;
-
-	resp = g_new0 (EBookViewListenerResponse, 1);
-
-	resp->op        = op;
-	resp->id        = g_strdup (id);
-	resp->cards     = NULL;
-
-	e_book_view_listener_queue_response (listener, resp);
-}
-
-/* Add, Remove, Modify */
-static void
-e_book_view_listener_queue_sequence_event (EBookViewListener          *listener,
-					   EBookViewListenerOperation  op,
-					   const Evolution_VCardList  *cards)
-{
-	EBookViewListenerResponse *resp;
-	int i;
-
-	resp = g_new0 (EBookViewListenerResponse, 1);
-
-	resp->op        = op;
-	resp->id        = NULL;
-	resp->cards     = NULL;
-	
-	for ( i = 0; i < cards->_length; i++ ) {
-		resp->cards = g_list_append(resp->cards, e_card_new(cards->_buffer[i]));
-	}
-
-	e_book_view_listener_queue_response (listener, resp);
-}
-
-static void
-impl_BookViewListener_signal_card_added (PortableServer_Servant servant,
-					 const Evolution_VCardList *cards,
-					 CORBA_Environment *ev)
-{
-	EBookViewListener *listener = E_BOOK_VIEW_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_view_listener_queue_sequence_event (
-		listener, CardAddedEvent, cards);
-}
-
-static void
-impl_BookViewListener_signal_card_removed (PortableServer_Servant servant,
-					   const Evolution_CardId id,
-					   CORBA_Environment *ev)
-{
-	EBookViewListener *listener = E_BOOK_VIEW_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_view_listener_queue_id_event (
-		listener, CardRemovedEvent, (const char *) id);
-}
-
-static void
-impl_BookViewListener_signal_card_changed (PortableServer_Servant servant,
-					   const Evolution_VCardList *cards,
-					   CORBA_Environment *ev)
-{
-	EBookViewListener *listener = E_BOOK_VIEW_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_view_listener_queue_sequence_event (
-		listener, CardModifiedEvent, cards);
-}
-
-static void
-impl_BookViewListener_signal_sequence_complete (PortableServer_Servant servant,
-						CORBA_Environment *ev)
-{
-	EBookViewListener *listener = E_BOOK_VIEW_LISTENER (bonobo_object_from_servant (servant));
-
-	e_book_view_listener_queue_empty_event (listener, SequenceCompleteEvent);
-}
-
-/**
- * e_book_view_listener_check_pending:
- * @listener: the #EBookViewListener 
- *
- * Returns: the number of items on the response queue,
- * or -1 if the @listener is isn't an #EBookViewListener.
- */
-int
-e_book_view_listener_check_pending (EBookViewListener *listener)
-{
-	g_return_val_if_fail (listener != NULL,              -1);
-	g_return_val_if_fail (E_IS_BOOK_VIEW_LISTENER (listener), -1);
-
-	return g_list_length (listener->priv->response_queue);
-}
-
-/**
- * e_book_view_listener_pop_response:
- * @listener: the #EBookViewListener for which a request is to be popped
- *
- * Returns: an #EBookViewListenerResponse if there are responses on the
- * queue to be returned; %NULL if there aren't, or if the @listener
- * isn't an EBookViewListener.
- */
-EBookViewListenerResponse *
-e_book_view_listener_pop_response (EBookViewListener *listener)
-{
-	EBookViewListenerResponse *resp;
-	GList                 *popped;
-
-	g_return_val_if_fail (listener != NULL,              NULL);
-	g_return_val_if_fail (E_IS_BOOK_VIEW_LISTENER (listener), NULL);
-
-	if (listener->priv->response_queue == NULL)
-		return NULL;
-
-	resp = listener->priv->response_queue->data;
-
-	popped = listener->priv->response_queue;
-	listener->priv->response_queue =
-		g_list_remove_link (listener->priv->response_queue,
-				    listener->priv->response_queue);
-	g_list_free_1 (popped);
-
-	return resp;
-}
-
-static EBookViewListener *
-e_book_view_listener_construct (EBookViewListener *listener)
-{
-	POA_Evolution_BookViewListener *servant;
-	CORBA_Environment           ev;
-	CORBA_Object                obj;
-
-	g_assert (listener != NULL);
-	g_assert (E_IS_BOOK_VIEW_LISTENER (listener));
-
-	servant = (POA_Evolution_BookViewListener *) g_new0 (BonoboObjectServant, 1);
-	servant->vepv = &e_book_view_listener_vepv;
-
-	CORBA_exception_init (&ev);
-
-	POA_Evolution_BookViewListener__init ((PortableServer_Servant) servant, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_free (servant);
-		CORBA_exception_free (&ev);
-
-		return NULL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	obj = bonobo_object_activate_servant (BONOBO_OBJECT (listener), servant);
-	if (obj == CORBA_OBJECT_NIL) {
-		g_free (servant);
-
-		return NULL;
-	}
-
-	bonobo_object_construct (BONOBO_OBJECT (listener), obj);
-
-	return listener;
-}
-
-/**
- * e_book_view_listener_new:
- * @book: the #EBookView for which the listener is to be bound
- *
- * Creates and returns a new #EBookViewListener for the book.
- *
- * Returns: a new #EBookViewListener
- */
-EBookViewListener *
-e_book_view_listener_new ()
-{
-	EBookViewListener *listener;
-	EBookViewListener *retval;
-
-	listener = gtk_type_new (E_BOOK_VIEW_LISTENER_TYPE);
-
-	retval = e_book_view_listener_construct (listener);
-
-	if (retval == NULL) {
-		g_warning ("e_book_view_listener_new: Error constructing "
-			   "EBookViewListener!\n");
-		gtk_object_unref (GTK_OBJECT (listener));
-		return NULL;
-	}
-
-	return retval;
-}
-
-static void
-e_book_view_listener_init (EBookViewListener *listener)
-{
-	listener->priv                 = g_new0 (EBookViewListenerPrivate, 1);
-	listener->priv->response_queue = NULL;
-	listener->priv->idle_id        = 0;
-}
-
-static void
-e_book_view_listener_destroy (GtkObject *object)
-{
-	EBookViewListener     *listener = E_BOOK_VIEW_LISTENER (object);
-	GList             *l;
-
-	if (listener->priv->idle_id)
-		g_source_remove(listener->priv->idle_id);
-
-	for (l = listener->priv->response_queue; l != NULL; l = l->next) {
-		EBookViewListenerResponse *resp = l->data;
-		if (resp->id)
-			g_free(resp->id);
-		if (resp->cards) {
-			g_list_foreach(resp->cards, (GFunc) gtk_object_unref, NULL);
-			g_list_free(resp->cards);
-		}
-		g_free (resp);
-	}
-	g_list_free (listener->priv->response_queue);
-
-	g_free (listener->priv);
-	
-	GTK_OBJECT_CLASS (e_book_view_listener_parent_class)->destroy (object);
-}
-
-POA_Evolution_BookViewListener__epv *
-e_book_view_listener_get_epv (void)
-{
-	POA_Evolution_BookViewListener__epv *epv;
-
-	epv = g_new0 (POA_Evolution_BookViewListener__epv, 1);
-
-	epv->signal_card_changed       = impl_BookViewListener_signal_card_changed;
-	epv->signal_card_removed       = impl_BookViewListener_signal_card_removed;
-	epv->signal_card_added         = impl_BookViewListener_signal_card_added;
-	epv->signal_sequence_complete  = impl_BookViewListener_signal_sequence_complete;
-
-	return epv;
-}
-
-static void
-e_book_view_listener_corba_class_init (void)
-{
-	e_book_view_listener_vepv.Bonobo_Unknown_epv          = bonobo_object_get_epv ();
-	e_book_view_listener_vepv.Evolution_BookViewListener_epv = e_book_view_listener_get_epv ();
-}
-
-static void
-e_book_view_listener_class_init (EBookViewListenerClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	e_book_view_listener_parent_class = gtk_type_class (bonobo_object_get_type ());
-
-	e_book_view_listener_signals [RESPONSES_QUEUED] =
-		gtk_signal_new ("responses_queued",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookViewListenerClass, responses_queued),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, e_book_view_listener_signals, LAST_SIGNAL);
-
-	object_class->destroy = e_book_view_listener_destroy;
-
-	e_book_view_listener_corba_class_init ();
-}
-
-/**
- * e_book_view_listener_get_type:
- */
-GtkType
-e_book_view_listener_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"EBookViewListener",
-			sizeof (EBookViewListener),
-			sizeof (EBookViewListenerClass),
-			(GtkClassInitFunc)  e_book_view_listener_class_init,
-			(GtkObjectInitFunc) e_book_view_listener_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (bonobo_object_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/ebook/e-book-view-listener.h b/addressbook/backend/ebook/e-book-view-listener.h
deleted file mode 100644
index 65e5f8eb5b..0000000000
--- a/addressbook/backend/ebook/e-book-view-listener.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * A client-side GtkObject which exposes the
- * Evolution:BookViewListener interface.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __E_BOOK_VIEW_LISTENER_H__
-#define __E_BOOK_VIEW_LISTENER_H__
-
-#include 
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _EBookViewListener EBookViewListener;
-typedef struct _EBookViewListenerClass EBookViewListenerClass;
-typedef struct _EBookViewListenerPrivate EBookViewListenerPrivate;
-
-struct _EBookViewListener {
-	BonoboObject           parent;
-	EBookViewListenerPrivate *priv;
-};
-
-struct _EBookViewListenerClass {
-	BonoboObjectClass parent;
-
-	/*
-	 * Signals
-	 */
-	void (*responses_queued) (void);
-};
-
-typedef enum {
-	/* Async events */
-	CardAddedEvent,
-	CardRemovedEvent,
-	CardModifiedEvent,
-	SequenceCompleteEvent,
-} EBookViewListenerOperation;
-
-typedef struct {
-	EBookViewListenerOperation  op;
-
-	/* For CardRemovedEvent */
-	char                   *id;
-
-	/* For Card[Added|Modified]Event */
-	GList                  *cards; /* Of type ECard. */
-	
-} EBookViewListenerResponse;
-
-EBookViewListener         *e_book_view_listener_new            (void);
-int                        e_book_view_listener_check_pending  (EBookViewListener *listener);
-EBookViewListenerResponse *e_book_view_listener_pop_response   (EBookViewListener *listener);
-GtkType                    e_book_view_listener_get_type       (void);
-
-POA_Evolution_BookViewListener__epv *e_book_view_listener_get_epv (void);
-
-#define E_BOOK_VIEW_LISTENER_TYPE        (e_book_view_listener_get_type ())
-#define E_BOOK_VIEW_LISTENER(o)          (GTK_CHECK_CAST ((o), E_BOOK_VIEW_LISTENER_TYPE, EBookViewListener))
-#define E_BOOK_VIEW_LISTENER_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_BOOK_VIEW_LISTENER_TYPE, EBookViewListenerClass))
-#define E_IS_BOOK_VIEW_LISTENER(o)       (GTK_CHECK_TYPE ((o), E_BOOK_VIEW_LISTENER_TYPE))
-#define E_IS_BOOK_VIEW_LISTENER_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_BOOK_VIEW_LISTENER_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __E_BOOK_VIEW_LISTENER_H__ */
diff --git a/addressbook/backend/ebook/e-book-view.c b/addressbook/backend/ebook/e-book-view.c
deleted file mode 100644
index f00a2efb08..0000000000
--- a/addressbook/backend/ebook/e-book-view.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * The Evolution addressbook client object.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 1999, 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include 
-
-#include "addressbook.h"
-#include "e-card-cursor.h"
-#include "e-book-view-listener.h"
-#include "e-book-view.h"
-
-GtkObjectClass *e_book_view_parent_class;
-
-struct _EBookViewPrivate {
-	Evolution_BookView     corba_book_view;
-	
-	EBookViewListener     *listener;
-
-	int                    responses_queued_id;
-};
-
-enum {
-	CARD_CHANGED,
-	CARD_REMOVED,
-	CARD_ADDED,
-	SEQUENCE_COMPLETE,
-	LAST_SIGNAL
-};
-
-static guint e_book_view_signals [LAST_SIGNAL];
-
-static void
-e_book_view_do_added_event (EBookView                 *book_view,
-			    EBookViewListenerResponse *resp)
-{
-	gtk_signal_emit (GTK_OBJECT (book_view), e_book_view_signals [CARD_ADDED],
-			 resp->cards);
-
-	g_list_foreach (resp->cards, (GFunc) gtk_object_unref, NULL);
-	g_list_free (resp->cards);
-}
-
-static void
-e_book_view_do_modified_event (EBookView                 *book_view,
-			       EBookViewListenerResponse *resp)
-{
-	gtk_signal_emit (GTK_OBJECT (book_view), e_book_view_signals [CARD_CHANGED],
-			 resp->cards);
-
-	g_list_foreach (resp->cards, (GFunc) gtk_object_unref, NULL);
-	g_list_free (resp->cards);
-}
-
-static void
-e_book_view_do_removed_event (EBookView                 *book_view,
-			      EBookViewListenerResponse *resp)
-{
-	gtk_signal_emit (GTK_OBJECT (book_view), e_book_view_signals [CARD_REMOVED],
-			 resp->id);
-
-	g_free(resp->id);
-}
-
-static void
-e_book_view_do_complete_event (EBookView                 *book_view,
-			      EBookViewListenerResponse *resp)
-{
-	gtk_signal_emit (GTK_OBJECT (book_view), e_book_view_signals [SEQUENCE_COMPLETE]);
-}
-
-
-/*
- * Reading notices out of the EBookViewListener's queue.
- */
-static void
-e_book_view_check_listener_queue (EBookViewListener *listener, EBookView *book_view)
-{
-	EBookViewListenerResponse *resp;
-
-	resp = e_book_view_listener_pop_response (listener);
-
-	if (resp == NULL)
-		return;
-
-	switch (resp->op) {
-	case CardAddedEvent:
-		e_book_view_do_added_event (book_view, resp);
-		break;
-	case CardModifiedEvent:
-		e_book_view_do_modified_event (book_view, resp);
-		break;
-	case CardRemovedEvent:
-		e_book_view_do_removed_event (book_view, resp);
-		break;
-	case SequenceCompleteEvent:
-		e_book_view_do_complete_event (book_view, resp);
-		break;
-	default:
-		g_error ("EBookView: Unknown operation %d in listener queue!\n",
-			 resp->op);
-	}
-
-	g_free (resp);
-}
-
-static gboolean
-e_book_view_construct (EBookView *book_view, Evolution_BookView corba_book_view, EBookViewListener *listener)
-{
-	CORBA_Environment  ev;
-	g_return_val_if_fail (book_view != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK_VIEW (book_view), FALSE);
-
-	/*
-	 * Copy in the corba_book_view.
-	 */
-	CORBA_exception_init (&ev);
-
-	book_view->priv->corba_book_view = CORBA_Object_duplicate(corba_book_view, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_view_construct: Exception duplicating corba_book_view.\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-
-	Evolution_BookView_ref(book_view->priv->corba_book_view, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_view_construct: Exception reffing corba_book_view.\n");
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	        CORBA_Object_release (book_view->priv->corba_book_view, &ev);
-		if (ev._major != CORBA_NO_EXCEPTION) {
-			g_warning ("e_book_view_construct: Exception releasing corba_book_view.\n");
-		}
-		CORBA_exception_free (&ev);
-		book_view->priv->corba_book_view = NULL;
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	/*
-	 * Create our local BookListener interface.
-	 */
-	book_view->priv->listener = listener;
-
-	bonobo_object_ref(BONOBO_OBJECT(book_view->priv->listener));
-	book_view->priv->responses_queued_id = gtk_signal_connect (GTK_OBJECT (book_view->priv->listener), "responses_queued",
-								   e_book_view_check_listener_queue, book_view);
-
-	return TRUE;
-}
-
-/**
- * e_book_view_new:
- */
-EBookView *
-e_book_view_new (Evolution_BookView corba_book_view, EBookViewListener *listener)
-{
-	EBookView *book_view;
-
-	book_view = gtk_type_new (E_BOOK_VIEW_TYPE);
-
-	if (! e_book_view_construct (book_view, corba_book_view, listener)) {
-		gtk_object_unref (GTK_OBJECT (book_view));
-		return NULL;
-	}
-
-	return book_view;
-}
-
-static void
-e_book_view_init (EBookView *book_view)
-{
-	book_view->priv                      = g_new0 (EBookViewPrivate, 1);
-	book_view->priv->corba_book_view     = CORBA_OBJECT_NIL;
-	book_view->priv->listener            = NULL;
-	book_view->priv->responses_queued_id = 0;
-}
-
-static void
-e_book_view_destroy (GtkObject *object)
-{
-	EBookView             *book_view = E_BOOK_VIEW (object);
-	CORBA_Environment  ev;
-
-	if (book_view->priv->corba_book_view) {
-		CORBA_exception_init (&ev);
-
-		Evolution_BookView_unref(book_view->priv->corba_book_view, &ev);
-		if (ev._major != CORBA_NO_EXCEPTION) {
-			g_warning ("EBookView: Exception while unreffing BookView\n");
-			
-			CORBA_exception_free (&ev);
-			CORBA_exception_init (&ev);
-		}
-
-		CORBA_Object_release (book_view->priv->corba_book_view, &ev);
-		if (ev._major != CORBA_NO_EXCEPTION) {
-			g_warning ("EBookView: Exception while releasing BookView\n");
-		}
-
-		CORBA_exception_free (&ev);
-	}
-
-	if (book_view->priv->listener) {
-		if (book_view->priv->responses_queued_id)
-			gtk_signal_disconnect(GTK_OBJECT(book_view->priv->listener),
-					      book_view->priv->responses_queued_id);
-		bonobo_object_unref (BONOBO_OBJECT(book_view->priv->listener));
-	}
-
-	g_free (book_view->priv);
-
-	if (GTK_OBJECT_CLASS (e_book_view_parent_class)->destroy)
-		GTK_OBJECT_CLASS (e_book_view_parent_class)->destroy (object);
-}
-
-static void
-e_book_view_class_init (EBookViewClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	e_book_view_parent_class = gtk_type_class (gtk_object_get_type ());
-
-	e_book_view_signals [CARD_CHANGED] =
-		gtk_signal_new ("card_changed",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookViewClass, card_changed),
-				gtk_marshal_NONE__POINTER,
-				GTK_TYPE_NONE, 1,
-				GTK_TYPE_POINTER);
-
-	e_book_view_signals [CARD_ADDED] =
-		gtk_signal_new ("card_added",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookViewClass, card_added),
-				gtk_marshal_NONE__STRING,
-				GTK_TYPE_NONE, 1,
-				GTK_TYPE_STRING);
-
-	e_book_view_signals [CARD_REMOVED] =
-		gtk_signal_new ("card_removed",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookViewClass, card_removed),
-				gtk_marshal_NONE__POINTER,
-				GTK_TYPE_NONE, 1,
-				GTK_TYPE_POINTER);
-
-	e_book_view_signals [SEQUENCE_COMPLETE] =
-		gtk_signal_new ("sequence_complete",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookViewClass, sequence_complete),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, e_book_view_signals,
-				      LAST_SIGNAL);
-
-	object_class->destroy = e_book_view_destroy;
-}
-
-/**
- * e_book_view_get_type:
- */
-GtkType
-e_book_view_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"EBookView",
-			sizeof (EBookView),
-			sizeof (EBookViewClass),
-			(GtkClassInitFunc)  e_book_view_class_init,
-			(GtkObjectInitFunc) e_book_view_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (gtk_object_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/ebook/e-book-view.h b/addressbook/backend/ebook/e-book-view.h
deleted file mode 100644
index b8edc68018..0000000000
--- a/addressbook/backend/ebook/e-book-view.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * The Evolution addressbook client object.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 1999, 2000, Helix Code, Inc.
- */
-
-#ifndef __E_BOOK_VIEW_H__
-#define __E_BOOK_VIEW_H__
-
-#include 
-
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _EBookView        EBookView;
-typedef struct _EBookViewClass   EBookViewClass;
-typedef struct _EBookViewPrivate EBookViewPrivate;
-
-struct _EBookView {
-	GtkObject     parent;
-	EBookViewPrivate *priv;
-};
-
-struct _EBookViewClass {
-	GtkObjectClass parent;
-
-	/*
-	 * Signals.
-	 */
-	void (* card_changed)      (EBookView *book_view, const GList *cards);
-	void (* card_removed)      (EBookView *book_view, const char *id);
-	void (* card_added)        (EBookView *book_view, const GList *cards);
-	void (* sequence_complete) (EBookView *book_view);
-};
-
-/* Creating a new addressbook. */
-EBookView         *e_book_view_new                    (Evolution_BookView corba_book_view, EBookViewListener *listener);
-
-GtkType            e_book_view_get_type               (void);
-void               e_book_view_get_book_view_listener (EBookView *book_view);
-
-#define E_BOOK_VIEW_TYPE        (e_book_view_get_type ())
-#define E_BOOK_VIEW(o)          (GTK_CHECK_CAST ((o), E_BOOK_VIEW_TYPE, EBookView))
-#define E_BOOK_VIEW_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_BOOK_VIEW_TYPE, EBookViewClass))
-#define E_IS_BOOK_VIEW(o)       (GTK_CHECK_TYPE ((o), E_BOOK_VIEW_TYPE))
-#define E_IS_BOOK_VIEW_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_BOOK_VIEW_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __E_BOOK_VIEW_H__ */
diff --git a/addressbook/backend/ebook/e-book.c b/addressbook/backend/ebook/e-book.c
deleted file mode 100644
index 38179559ba..0000000000
--- a/addressbook/backend/ebook/e-book.c
+++ /dev/null
@@ -1,1010 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * The Evolution addressbook client object.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 1999, 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include 
-
-#include "addressbook.h"
-#include "e-card-cursor.h"
-#include "e-book-listener.h"
-#include "e-book.h"
-
-GtkObjectClass *e_book_parent_class;
-
-#ifdef USING_OAF
-#include 
-#define CARDSERVER_OAF_ID "OAFIID:evolution:addressbook-server:0fbc844d-c721-4615-98d0-d67eacf42d80"
-#else
-#include 
-#define CARDSERVER_GOAD_ID "evolution:addressbook-server"
-#endif
-
-typedef enum {
-	URINotLoaded,
-	URILoading,
-	URILoaded
-} EBookLoadState;
-
-struct _EBookPrivate {
-	Evolution_BookFactory  book_factory;
-	EBookListener	      *listener;
-
-	Evolution_Book         corba_book;
-
-	EBookLoadState         load_state;
-
-	/*
-	 * The operation queue.  New operations are appended to the
-	 * end of the queue.  When responses come back from the PAS,
-	 * the op structures are popped off the front of the queue.
-	 */
-	GList                 *pending_ops;
-};
-
-enum {
-	OPEN_PROGRESS,
-	LINK_STATUS,
-	LAST_SIGNAL
-};
-
-static guint e_book_signals [LAST_SIGNAL];
-
-typedef struct {
-	gpointer  cb;
-	gpointer  closure;
-	EBookViewListener *listener;
-} EBookOp;
-
-/*
- * Local response queue management.
- */
-static void
-e_book_queue_op (EBook    *book,
-		 gpointer  cb,
-		 gpointer  closure,
-		 EBookViewListener *listener)
-{
-	EBookOp *op;
-
-	op           = g_new0 (EBookOp, 1);
-	op->cb       = cb;
-	op->closure  = closure;
-	op->listener = listener;
-
-	book->priv->pending_ops =
-		g_list_append (book->priv->pending_ops, op);
-}
-
-static EBookOp *
-e_book_pop_op (EBook *book)
-{
-	GList   *popped;
-	EBookOp *op;
-
-	if (book->priv->pending_ops == NULL)
-		return NULL;
-
-	op = book->priv->pending_ops->data;
-
-	popped = book->priv->pending_ops;
-	book->priv->pending_ops =
-		g_list_remove_link (book->priv->pending_ops,
-				    book->priv->pending_ops);
-
-	g_list_free_1 (popped);
-
-	return op;
-}
-
-static void
-e_book_do_response_create_card (EBook                 *book,
-				EBookListenerResponse *resp)
-{
-	EBookOp *op;
-
-	op = e_book_pop_op (book);
-
-	if (op == NULL) {
-		g_warning ("e_book_do_response_create_card: Cannot find operation "
-			   "in local op queue!\n");
-		return;
-	}
-
-	if (op->cb)
-		((EBookIdCallback) op->cb) (book, resp->status, resp->id, op->closure);
-	g_free (resp->id);
-	g_free (op);
-}
-
-static void
-e_book_do_response_generic (EBook                 *book,
-			    EBookListenerResponse *resp)
-{
-	EBookOp *op;
-
-	op = e_book_pop_op (book);
-
-	if (op == NULL) {
-		g_warning ("e_book_do_response_generic: Cannot find operation "
-			   "in local op queue!\n");
-	}
-
-	if (op->cb)
-		((EBookCallback) op->cb) (book, resp->status, op->closure);
-
-	g_free (op);
-}
-
-static void
-e_book_do_response_get_cursor (EBook                 *book,
-			       EBookListenerResponse *resp)
-{
-	CORBA_Environment ev;
-	EBookOp *op;
-	ECardCursor *cursor;
-
-	op = e_book_pop_op (book);
-
-	if (op == NULL) {
-		g_warning ("e_book_do_response_get_cursor: Cannot find operation "
-			   "in local op queue!\n");
-		return;
-	}
-
-	cursor = e_card_cursor_new(resp->cursor);
-
-	if (op->cb)
-		((EBookCursorCallback) op->cb) (book, resp->status, cursor, op->closure);
-
-	/*
-	 * Release the remote Evolution_Book in the PAS.
-	 */
-	CORBA_exception_init (&ev);
-
-	Bonobo_Unknown_unref  (resp->cursor, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_do_response_get_cursor: Exception unref'ing "
-			   "remote Evolution_CardCursor interface!\n");
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	}
-	
-	CORBA_Object_release (resp->cursor, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_do_response_get_cursor: Exception releasing "
-			   "remote Evolution_CardCursor interface!\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	gtk_object_unref(GTK_OBJECT(cursor));
-	
-	g_free (op);
-}
-
-static void
-e_book_do_response_get_view (EBook                 *book,
-			     EBookListenerResponse *resp)
-{
-	CORBA_Environment ev;
-	EBookOp *op;
-	EBookView *book_view;
-
-	op = e_book_pop_op (book);
-
-	if (op == NULL) {
-		g_warning ("e_book_do_response_get_view: Cannot find operation "
-			   "in local op queue!\n");
-		return;
-	}
-
-	book_view = e_book_view_new(resp->book_view, op->listener);
-	
-	if (op->cb)
-		((EBookBookViewCallback) op->cb) (book, resp->status, book_view, op->closure);
-
-	/*
-	 * Release the remote Evolution_Book in the PAS.
-	 */
-	CORBA_exception_init (&ev);
-
-	Bonobo_Unknown_unref  (resp->book_view, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_do_response_get_view: Exception unref'ing "
-			   "remote Evolution_BookView interface!\n");
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	}
-	
-	CORBA_Object_release (resp->book_view, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_do_response_get_view: Exception releasing "
-			   "remote Evolution_BookView interface!\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	gtk_object_unref(GTK_OBJECT(book_view));
-	bonobo_object_unref(BONOBO_OBJECT(op->listener));
-	
-	g_free (op);
-}
-
-static void
-e_book_do_response_open (EBook                 *book,
-			 EBookListenerResponse *resp)
-{
-	EBookOp *op;
-
-	if (resp->status == E_BOOK_STATUS_SUCCESS) {
-		book->priv->corba_book  = resp->book;
-		book->priv->load_state  = URILoaded;
-	}
-
-	op = e_book_pop_op (book);
-
-	if (op == NULL) {
-		g_warning ("e_book_do_response_open: Cannot find operation "
-			   "in local op queue!\n");
-		return;
-	}
-
-	if (op->cb)
-		((EBookCallback) op->cb) (book, resp->status, op->closure);
-	g_free (op);
-}
-
-static void
-e_book_do_progress_event (EBook                 *book,
-			  EBookListenerResponse *resp)
-{
-	gtk_signal_emit (GTK_OBJECT (book), e_book_signals [OPEN_PROGRESS],
-			 resp->msg, resp->percent);
-
-	g_free (resp->msg);
-}
-
-static void
-e_book_do_link_event (EBook                 *book,
-		      EBookListenerResponse *resp)
-{
-	gtk_signal_emit (GTK_OBJECT (book), e_book_signals [LINK_STATUS],
-			 resp->connected);
-}
-
-
-/*
- * Reading notices out of the EBookListener's queue.
- */
-static void
-e_book_check_listener_queue (EBookListener *listener, EBook *book)
-{
-	EBookListenerResponse *resp;
-
-	resp = e_book_listener_pop_response (listener);
-
-	if (resp == NULL)
-		return;
-
-	switch (resp->op) {
-	case CreateCardResponse:
-		e_book_do_response_create_card (book, resp);
-		break;
-	case RemoveCardResponse:
-	case ModifyCardResponse:
-		e_book_do_response_generic (book, resp);
-		break;
-	case GetCursorResponse:
-		e_book_do_response_get_cursor (book, resp);
-		break;
-	case GetBookViewResponse:
-		e_book_do_response_get_view(book, resp);
-		break;
-	case OpenBookResponse:
-		e_book_do_response_open (book, resp);
-		break;
-
-	case OpenProgressEvent:
-		e_book_do_progress_event (book, resp);
-		break;
-	case LinkStatusEvent:
-		e_book_do_link_event (book, resp);
-		break;
-	default:
-		g_error ("EBook: Unknown operation %d in listener queue!\n",
-			 resp->op);
-	}
-
-	g_free (resp);
-}
-
-/**
- * e_book_load_uri:
- */
-gboolean
-e_book_load_uri (EBook                     *book,
-		 const char                *uri,
-		 EBookCallback              open_response,
-		 gpointer                   closure)
-{
-	CORBA_Environment ev;
-
-	g_return_val_if_fail (book != NULL,          FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book),      FALSE);
-	g_return_val_if_fail (uri != NULL,           FALSE);
-	g_return_val_if_fail (open_response != NULL, FALSE);
-
-	if (book->priv->load_state != URINotLoaded) {
-		g_warning ("e_book_load_uri: Attempted to load a URI "
-			   "on a book which already has a URI loaded!\n");
-		return FALSE;
-	}
-
-	/*
-	 * Create our local BookListener interface.
-	 */
-	book->priv->listener = e_book_listener_new ();
-	if (book->priv->listener == NULL) {
-		g_warning ("e_book_load_uri: Could not create EBookListener!\n");
-		return FALSE;
-	}
-
-	gtk_signal_connect (GTK_OBJECT (book->priv->listener), "responses_queued",
-			    e_book_check_listener_queue, book);
-
-	/*
-	 * Load the addressbook into the PAS.
-	 */
-	CORBA_exception_init (&ev);
-
-	Evolution_BookFactory_open_book (
-		book->priv->book_factory, uri,
-		bonobo_object_corba_objref (BONOBO_OBJECT (book->priv->listener)),
-		&ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_load_uri: CORBA exception while opening addressbook!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	book->priv->load_state = URILoading;
-
-	e_book_queue_op (book, open_response, closure, NULL);
-
-	/* Now we play the waiting game. */
-
-	return TRUE;
-}
-
-/**
- * e_book_unload_uri:
- */
-void
-e_book_unload_uri (EBook *book)
-{
-	CORBA_Environment ev;
-
-	g_return_if_fail (book != NULL);
-	g_return_if_fail (E_IS_BOOK (book));
-
-	/*
-	 * FIXME: Make sure this works if the URI is still being
-	 * loaded.
-	 */
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_unload_uri: No URI is loaded!\n");
-		return;
-	}
-
-	/*
-	 * Release the remote Evolution_Book in the PAS.
-	 */
-	CORBA_exception_init (&ev);
-
-	Bonobo_Unknown_unref  (book->priv->corba_book, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_unload_uri: Exception unref'ing "
-			   "remote Evolution_Book interface!\n");
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	}
-	
-	CORBA_Object_release (book->priv->corba_book, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_unload_uri: Exception releasing "
-			   "remote book interface!\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	bonobo_object_unref (BONOBO_OBJECT (book->priv->listener));
-
-	book->priv->listener   = NULL;
-	book->priv->load_state = URINotLoaded;
-}
-
-static gboolean
-e_book_construct (EBook *book)
-{
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-
-	/*
-	 * Connect to the Personal Addressbook Server.
-	 */
-
-#ifdef USING_OAF
-	book->priv->book_factory = (Evolution_BookFactory)
-		oaf_activate_from_id (CARDSERVER_OAF_ID, 0, NULL, NULL);
-#else
-	book->priv->book_factory = (Evolution_BookFactory)
-		goad_server_activate_with_id (NULL, CARDSERVER_GOAD_ID, 0, NULL);
-#endif
-
-	if (book->priv->book_factory == CORBA_OBJECT_NIL) {
-		g_warning ("e_book_construct: Could not obtain a handle "
-			   "to the Personal Addressbook Server!\n");
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-/**
- * e_book_new:
- */
-EBook *
-e_book_new (void)
-{
-	EBook *book;
-
-	book = gtk_type_new (E_BOOK_TYPE);
-
-	if (! e_book_construct (book)) {
-		gtk_object_unref (GTK_OBJECT (book));
-		return NULL;
-	}
-
-	return book;
-}
-
-/* Fetching cards */
-
-/**
- * e_book_get_card:
- */
-ECard *
-e_book_get_card (EBook       *book,
-		 const char  *id)
-{
-	char  *vcard;
-	ECard *card;
-
-	g_return_val_if_fail (book != NULL,     NULL);
-	g_return_val_if_fail (E_IS_BOOK (book), NULL);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_get_card: No URI loaded!\n");
-		return NULL;
-	}
-
-	vcard = e_book_get_vcard (book, id);
-
-	if (vcard == NULL) {
-		g_warning ("e_book_get_card: Got bogus VCard from PAS!\n");
-		return NULL;
-	}
-
-	card = e_card_new (vcard);
-	g_free(vcard);
-	
-	e_card_set_id(card, id);
-
-	return card;
-}
-
-/**
- * e_book_get_vcard:
- */
-char *
-e_book_get_vcard (EBook       *book,
-		  const char  *id)
-{
-	CORBA_Environment  ev;
-	char              *retval;
-	char              *vcard;
-
-	g_return_val_if_fail (book != NULL,     NULL);
-	g_return_val_if_fail (E_IS_BOOK (book), NULL);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_get_vcard: No URI loaded!\n");
-		return NULL;
-	}
-
-	CORBA_exception_init (&ev);
-
-	vcard = Evolution_Book_get_vcard (book->priv->corba_book,
-					  (Evolution_CardId) id,
-					  &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_get_vcard: Exception getting VCard from PAS!\n");
-		CORBA_exception_free (&ev);
-		return NULL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	if (vcard == NULL || strlen (vcard) == 0) {
-		g_warning ("e_book_get_vcard: Got NULL VCard from PAS!\n");
-		return NULL;
-	}
-
-	retval = g_strdup (vcard);
-	CORBA_free (vcard);
-
-	return retval;
-}
-
-/* Deleting cards. */
-
-/**
- * e_book_remove_card:
- */
-gboolean
-e_book_remove_card (EBook         *book,
-		    ECard         *card,
-		    EBookCallback  cb,
-		    gpointer       closure)
-{
-	const char *id;
-
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-	g_return_val_if_fail (card != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_CARD (card), FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_remove_card: No URI loaded!\n");
-		return FALSE;
-	}
-
-	id = e_card_get_id (card);
-	g_assert (id != NULL);
-
-	return e_book_remove_card_by_id (book, id, cb, closure);
-}
-
-/**
- * e_book_remove_card_by_id:
- */
-gboolean
-e_book_remove_card_by_id (EBook         *book,
-			  const char    *id,
-			  EBookCallback  cb,
-			  gpointer       closure)
-
-{
-	CORBA_Environment ev;
-
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-	g_return_val_if_fail (id != NULL,       FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_remove_card_by_id: No URI loaded!\n");
-		return FALSE;
-	}
-
-	CORBA_exception_init (&ev);
-
-	Evolution_Book_remove_card (
-		book->priv->corba_book, (const Evolution_CardId) id, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_remove_card_by_id: CORBA exception "
-			   "talking to PAS!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-	
-	CORBA_exception_free (&ev);
-
-	e_book_queue_op (book, cb, closure, NULL);
-
-	return TRUE;
-}
-
-/* Adding cards. */
-
-/**
- * e_book_add_card:
- */
-gboolean
-e_book_add_card (EBook           *book,
-		 ECard           *card,
-		 EBookIdCallback  cb,
-		 gpointer         closure)
-
-{
-	char     *vcard;
-	gboolean  retval;
-
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-	g_return_val_if_fail (card != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_CARD (card), FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_add_card: No URI loaded!\n");
-		return FALSE;
-	}
-
-	vcard = e_card_get_vcard (card);
-
-	if (vcard == NULL) {
-		g_warning ("e_book_add_card: Cannot convert card to VCard string!\n");
-		return FALSE;
-	}
-
-	retval = e_book_add_vcard (book, vcard, cb, closure);
-
-	g_free (vcard);
-
-	return retval;
-}
-
-/**
- * e_book_add_vcard:
- */
-gboolean
-e_book_add_vcard (EBook           *book,
-		  const char      *vcard,
-		  EBookIdCallback  cb,
-		  gpointer         closure)
-{
-	CORBA_Environment ev;
-
-	g_return_val_if_fail (book  != NULL,    FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-	g_return_val_if_fail (vcard != NULL,    FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_add_vcard: No URI loaded!\n");
-		return FALSE;
-	}
-
-	CORBA_exception_init (&ev);
-
-	Evolution_Book_create_card (
-		book->priv->corba_book, (const Evolution_VCard) vcard, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_add_vcard: Exception adding card to PAS!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	e_book_queue_op (book, (EBookCallback) cb, closure, NULL);
-
-	return TRUE;
-}
-
-/* Modifying cards. */
-
-/**
- * e_book_commit_card:
- */
-gboolean
-e_book_commit_card (EBook         *book,
-		    ECard         *card,
-		    EBookCallback  cb,
-		    gpointer       closure)
-{
-	char     *vcard;
-	gboolean  retval;
-	
-	g_return_val_if_fail (book  != NULL,    FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-	g_return_val_if_fail (card != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_CARD (card), FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_commit_card: No URI loaded!\n");
-		return FALSE;
-	}
-
-	vcard = e_card_get_vcard (card);
-
-	if (vcard == NULL) {
-		g_warning ("e_book_commit_card: Error "
-			   "getting VCard for card!\n");
-		return FALSE;
-	}
-
-	retval = e_book_commit_vcard (book, vcard, cb, closure);
-
-	g_free (vcard);
-
-	return retval;
-}
-
-/**
- * e_book_commit_vcard:
- */
-gboolean
-e_book_commit_vcard (EBook         *book,
-		     const char    *vcard,
-		     EBookCallback  cb,
-		     gpointer       closure)
-{
-	CORBA_Environment ev;
-
-	g_return_val_if_fail (book  != NULL,    FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-	g_return_val_if_fail (vcard != NULL,    FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_commit_vcard: No URI loaded!\n");
-		return FALSE;
-	}
-
-	CORBA_exception_init (&ev);
-
-	Evolution_Book_modify_card (
-		book->priv->corba_book, (const Evolution_VCard) vcard, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_commit_vcard: Exception "
-			   "modifying card in PAS!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	e_book_queue_op (book, cb, closure, NULL);
-
-	return TRUE;
-}
-
-/**
- * e_book_check_connection:
- */
-gboolean
-e_book_check_connection (EBook *book)
-{
-	CORBA_Environment ev;
-
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_check_connection: No URI loaded!\n");
-		return FALSE;
-	}
-
-	CORBA_exception_init (&ev);
-
-	Evolution_Book_check_connection (book->priv->corba_book, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_check_connection: Exception "
-			   "querying the PAS!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-	
-	CORBA_exception_free (&ev);
-
-	return TRUE;
-}
-
-gboolean e_book_get_cursor       (EBook               *book,
-				  gchar               *query,
-				  EBookCursorCallback  cb,
-				  gpointer             closure)
-{
-	CORBA_Environment ev;
-  
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_check_connection: No URI loaded!\n");
-		return FALSE;
-	}
-	
-	CORBA_exception_init (&ev);
-	
-	Evolution_Book_get_cursor (book->priv->corba_book, query, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_get_all_cards: Exception "
-			   "querying list of cards!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-	
-	CORBA_exception_free (&ev);
-
-	e_book_queue_op (book, cb, closure, NULL);
-
-	return TRUE;
-}
-
-gboolean e_book_get_book_view       (EBook                 *book,
-				     gchar                 *query,
-				     EBookBookViewCallback  cb,
-				     gpointer               closure)
-{
-	CORBA_Environment ev;
-	EBookViewListener *listener;
-  
-	g_return_val_if_fail (book != NULL,     FALSE);
-	g_return_val_if_fail (E_IS_BOOK (book), FALSE);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_get_book_view: No URI loaded!\n");
-		return FALSE;
-	}
-
-	listener = e_book_view_listener_new();
-	
-	CORBA_exception_init (&ev);
-	
-	Evolution_Book_get_book_view (book->priv->corba_book, bonobo_object_corba_objref(BONOBO_OBJECT(listener)), query, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_get_book_view: Exception "
-			   "getting book_view!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-	
-	CORBA_exception_free (&ev);
-
-	e_book_queue_op (book, cb, closure, listener);
-
-	return TRUE;
-}
-
-/**
- * e_book_get_name:
- */
-char *
-e_book_get_name (EBook *book)
-{
-	CORBA_Environment  ev;
-	char              *retval;
-	char              *name;
-
-	g_return_val_if_fail (book != NULL,     NULL);
-	g_return_val_if_fail (E_IS_BOOK (book), NULL);
-
-	if (book->priv->load_state != URILoaded) {
-		g_warning ("e_book_get_name: No URI loaded!\n");
-		return NULL;
-	}
-
-	CORBA_exception_init (&ev);
-
-	name = Evolution_Book_get_name (book->priv->corba_book, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("e_book_get_name: Exception getting name from PAS!\n");
-		CORBA_exception_free (&ev);
-		return NULL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	if (name == NULL) {
-		g_warning ("e_book_get_name: Got NULL name from PAS!\n");
-		return NULL;
-	}
-
-	retval = g_strdup (name);
-	CORBA_free (name);
-
-	return retval;
-}
-
-static void
-e_book_init (EBook *book)
-{
-	book->priv             = g_new0 (EBookPrivate, 1);
-	book->priv->load_state = URINotLoaded;
-}
-
-static void
-e_book_destroy (GtkObject *object)
-{
-	EBook             *book = E_BOOK (object);
-	CORBA_Environment  ev;
-
-	if (book->priv->load_state == URILoaded)
-		e_book_unload_uri (book);
-
-	CORBA_exception_init (&ev);
-
-	CORBA_Object_release (book->priv->book_factory, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("EBook: Exception while releasing BookFactory\n");
-
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	}
-
-	g_free (book->priv);
-
-	GTK_OBJECT_CLASS (e_book_parent_class)->destroy (object);
-}
-
-static void
-e_book_class_init (EBookClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	e_book_parent_class = gtk_type_class (gtk_object_get_type ());
-
-	e_book_signals [LINK_STATUS] =
-		gtk_signal_new ("link_status",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EBookClass, link_status),
-				gtk_marshal_NONE__BOOL,
-				GTK_TYPE_NONE, 1,
-				GTK_TYPE_BOOL);
-
-	gtk_object_class_add_signals (object_class, e_book_signals,
-				      LAST_SIGNAL);
-
-	object_class->destroy = e_book_destroy;
-}
-
-/**
- * e_book_get_type:
- */
-GtkType
-e_book_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"EBook",
-			sizeof (EBook),
-			sizeof (EBookClass),
-			(GtkClassInitFunc)  e_book_class_init,
-			(GtkObjectInitFunc) e_book_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (gtk_object_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/ebook/e-book.h b/addressbook/backend/ebook/e-book.h
deleted file mode 100644
index a57c7263b3..0000000000
--- a/addressbook/backend/ebook/e-book.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * The Evolution addressbook client object.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 1999, 2000, Helix Code, Inc.
- */
-
-#ifndef __E_BOOK_H__
-#define __E_BOOK_H__
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _EBook        EBook;
-typedef struct _EBookClass   EBookClass;
-typedef struct _EBookPrivate EBookPrivate;
-
-struct _EBook {
-	GtkObject     parent;
-	EBookPrivate *priv;
-};
-
-struct _EBookClass {
-	GtkObjectClass parent;
-
-	/*
-	 * Signals.
-	 */
-	void (* open_progress) (EBook *book, const char *msg, short percent);
-	void (* link_status)   (EBook *book, gboolean connected);
-};
-
-/* Callbacks for asynchronous functions. */
-typedef void (*EBookCallback) (EBook *book, EBookStatus status, gpointer closure);
-typedef void (*EBookOpenProgressCallback)     (EBook          *book,
-					       const char     *status_message,
-					       short           percent,
-					       gpointer        closure);
-typedef void (*EBookIdCallback) (EBook *book, EBookStatus status, const char *id, gpointer closure);
-typedef void (*EBookCursorCallback) (EBook *book, EBookStatus status, ECardCursor *cursor, gpointer closure);
-typedef void (*EBookBookViewCallback) (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure);
-
-
-/* Creating a new addressbook. */
-EBook    *e_book_new                (void);
-gboolean  e_book_load_uri           (EBook         *book,
-				     const char    *uri,
-				     EBookCallback  open_response,
-				     gpointer       closure);
-void      e_book_unload_uri         (EBook         *book);
-
-/* Fetching cards. */
-ECard    *e_book_get_card           (EBook         *book,
-				     const char    *id);
-char     *e_book_get_vcard          (EBook         *book,
-				     const char    *id);
-
-/* Deleting cards. */
-gboolean  e_book_remove_card        (EBook         *book,
-				     ECard         *card,
-				     EBookCallback  cb,
-				     gpointer       closure);
-gboolean  e_book_remove_card_by_id  (EBook         *book,
-				     const char    *id,
-				     EBookCallback  cb,
-				     gpointer       closure);
-
-/* Adding cards. */
-gboolean  e_book_add_card           (EBook           *book,
-				     ECard           *card,
-				     EBookIdCallback  cb,
-				     gpointer         closure);
-gboolean  e_book_add_vcard          (EBook           *book,
-				     const char      *vcard,
-				     EBookIdCallback  cb,
-				     gpointer         closure);
-
-/* Modifying cards. */
-gboolean  e_book_commit_card        (EBook         *book,
-				     ECard         *card,
-				     EBookCallback  cb,
-				     gpointer       closure);
-gboolean  e_book_commit_vcard       (EBook         *book,
-				     const char    *vcard,
-				     EBookCallback  cb,
-				     gpointer       closure);
-
-/* Checking to see if we're connected to the card repository. */
-gboolean  e_book_check_connection   (EBook         *book);
-
-gboolean e_book_get_cursor          (EBook               *book,
-				     char                *query,
-				     EBookCursorCallback  cb,
-				     gpointer             closure);
-
-gboolean e_book_get_book_view       (EBook                 *book,
-				     char                  *query,
-				     EBookBookViewCallback  cb,
-				     gpointer               closure);
-
-/* Getting the name of the repository. */
-char     *e_book_get_name           (EBook         *book);
-
-GtkType   e_book_get_type           (void);
-
-#define E_BOOK_TYPE        (e_book_get_type ())
-#define E_BOOK(o)          (GTK_CHECK_CAST ((o), E_BOOK_TYPE, EBook))
-#define E_BOOK_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_BOOK_TYPE, EBookClass))
-#define E_IS_BOOK(o)       (GTK_CHECK_TYPE ((o), E_BOOK_TYPE))
-#define E_IS_BOOK_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_BOOK_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __E_BOOK_H__ */
diff --git a/addressbook/backend/ebook/e-card-cursor.c b/addressbook/backend/ebook/e-card-cursor.c
deleted file mode 100644
index 1618a6ddee..0000000000
--- a/addressbook/backend/ebook/e-card-cursor.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-card-cursor.c: Implements card cursors.
- *
- * Author:
- *   Christopher James Lahey 
-#include 
-#include "addressbook.h"
-#include "e-card-cursor.h"
-
-struct _ECardCursorPrivate {
-	Evolution_CardCursor corba_cursor;
-};
-
-/*
- * A pointer to our parent object class
- */
-static GtkObjectClass *parent_class;
-
-/*
- * Implemented GtkObject::destroy
- */
-static void
-e_card_cursor_destroy (GtkObject *object)
-{
-	ECardCursor *cursor = E_CARD_CURSOR (object);
-	CORBA_Environment      ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_CardCursor_unref( cursor->priv->corba_cursor, &ev );
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("e_card_cursor_destroy: Exception unreffing "
-			  "corba cursor.\n");
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	}
-
-	CORBA_Object_release (cursor->priv->corba_cursor, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("e_card_cursor_destroy: Exception releasing "
-			  "corba cursor.\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	if ( cursor->priv )
-		g_free ( cursor->priv );
-
-	GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-/**
- * e_card_cursor_get_length:
- * @cursor: the #ECardCursor whose length is being queried
- *
- * Returns: the number of items the cursor references, or -1 there's
- * an error.
- */
-long
-e_card_cursor_get_length (ECardCursor *cursor)
-{
-	if ( cursor->priv->corba_cursor != CORBA_OBJECT_NIL ) {
-		CORBA_Environment      ev;
-		long ret_val;
-
-		CORBA_exception_init (&ev);
-
-		ret_val = Evolution_CardCursor_get_length(cursor->priv->corba_cursor, &ev);
-		
-		if (ev._major != CORBA_NO_EXCEPTION) {
-			g_warning("e_card_cursor_get_length: Exception during "
-				  "get_length corba call.\n");
-			ret_val = -1;
-		}
-
-		CORBA_exception_free (&ev);
-
-		return ret_val;
-	}
-	else
-		return -1;
-}
-
-/**
- * e_card_cursor_get_nth:
- * @cursor: an #ECardCursor object
- * @n: the index of the item requested
- *
- * Gets an #ECard based on an index.
- *
- * Returns: a new #ECard on success, or %NULL on failure.
- */
-ECard *
-e_card_cursor_get_nth (ECardCursor *cursor,
-		       const long   n)
-{
-	if ( cursor->priv->corba_cursor != CORBA_OBJECT_NIL ) {
-		CORBA_Environment      en;
-		CORBA_char *vcard;
-		ECard *card;
-
-		CORBA_exception_init (&en);
-
-		vcard = Evolution_CardCursor_get_nth(cursor->priv->corba_cursor, n, &en);
-		
-		if (en._major != CORBA_NO_EXCEPTION) {
-			g_warning("e_card_cursor_get_nth: Exception during "
-				  "get_nth corba call.\n");
-		}
-		
-		CORBA_exception_free (&en);
-
-		card = e_card_new (vcard);
-
-		CORBA_free(vcard);
-
-		return card;
-	}
-	else
-		return e_card_new("");
-}
-
-static void
-e_card_cursor_class_init (ECardCursorClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	parent_class = gtk_type_class (gtk_object_get_type ());
-
-	object_class->destroy = e_card_cursor_destroy;
-}
-
-static void
-e_card_cursor_init (ECardCursor *cursor)
-{
-	cursor->priv = g_new(ECardCursorPrivate, 1);
-	cursor->priv->corba_cursor = CORBA_OBJECT_NIL;
-}
-
-GtkType
-e_card_cursor_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (!type){
-		GtkTypeInfo info = {
-			"ECardCursor",
-			sizeof (ECardCursor),
-			sizeof (ECardCursorClass),
-			(GtkClassInitFunc) e_card_cursor_class_init,
-			(GtkObjectInitFunc) e_card_cursor_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (gtk_object_get_type (), &info);
-	}
-
-	return type;
-}
-
-/**
- * e_card_cursor_construct:
- * @cursor: an #ECardCursor object
- * @corba_cursor: an #Evolution_CardCursor
- *
- * Wraps an #Evolution_CardCursor object inside the #ECardCursor
- * @cursor object.
- *
- * Returns: a new #ECardCursor on success, or %NULL on failure.
- */
-ECardCursor *
-e_card_cursor_construct (ECardCursor          *cursor,
-			 Evolution_CardCursor  corba_cursor)
-{
-	CORBA_Environment      ev;
-	g_return_val_if_fail (cursor != NULL, NULL);
-	g_return_val_if_fail (E_IS_CARD_CURSOR (cursor), NULL);
-	g_return_val_if_fail (corba_cursor != CORBA_OBJECT_NIL, NULL);
-
-	CORBA_exception_init (&ev);
-
-	/*
-	 * Initialize cursor
-	 */
-	cursor->priv->corba_cursor = CORBA_Object_duplicate(corba_cursor, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("e_card_cursor_construct: Exception duplicating "
-			  "corba cursor.\n");
-		CORBA_exception_free (&ev);
-		CORBA_exception_init (&ev);
-	}
-	
-	Evolution_CardCursor_ref(cursor->priv->corba_cursor, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("e_card_cursor_construct: Exception reffing "
-			  "corba cursor.\n");
-	}
-
-	CORBA_exception_free (&ev);
-	
-	/*
-	 * Success: return the GtkType we were given
-	 */
-	return cursor;
-}
-
-/**
- * e_card_cursor_new:
- * @cursor: the #Evolution_CardCursor to be wrapped
- *
- * Creates a new #ECardCursor, which wraps an #Evolution_CardCursor
- * object.
- *
- * Returns: a new #ECardCursor on success, or %NULL on failure.
- */
-ECardCursor *
-e_card_cursor_new (Evolution_CardCursor corba_cursor)
-{
-	ECardCursor *cursor;
-
-	cursor = gtk_type_new (e_card_cursor_get_type ());
-	
-	return e_card_cursor_construct (cursor,
-					corba_cursor);
-}
diff --git a/addressbook/backend/ebook/e-card-cursor.h b/addressbook/backend/ebook/e-card-cursor.h
deleted file mode 100644
index b318e646c4..0000000000
--- a/addressbook/backend/ebook/e-card-cursor.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __E_CARD_CURSOR_H__
-#define __E_CARD_CURSOR_H__
-
-#include 
-#include 
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _ECardCursor        ECardCursor;
-typedef struct _ECardCursorPrivate ECardCursorPrivate;
-typedef struct _ECardCursorClass   ECardCursorClass;
-
-struct _ECardCursor {
-	GtkObject           parent;
-	ECardCursorPrivate *priv;
-};
-
-struct _ECardCursorClass {
-	GtkObjectClass parent;
-};
-
-/* Creating a new addressbook. */
-ECardCursor *e_card_cursor_new       (Evolution_CardCursor  corba_cursor);
-ECardCursor *e_card_cursor_construct (ECardCursor          *cursor,
-				      Evolution_CardCursor  corba_cursor);
-
-GtkType      e_card_cursor_get_type    (void);
-
-/* Fetching cards. */
-long         e_card_cursor_get_length  (ECardCursor          *cursor);
-ECard       *e_card_cursor_get_nth     (ECardCursor          *cursor,
-					const long            nth);
-#define E_CARD_CURSOR_TYPE        (e_card_cursor_get_type ())
-#define E_CARD_CURSOR(o)          (GTK_CHECK_CAST ((o), E_CARD_CURSOR_TYPE, ECardCursor))
-#define E_CARD_CURSOR_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_CARD_CURSOR_TYPE, ECardCursorClass))
-#define E_IS_CARD_CURSOR(o)       (GTK_CHECK_TYPE ((o), E_CARD_CURSOR_TYPE))
-#define E_IS_CARD_CURSOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_CARD_CURSOR_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __E_CARD_CURSOR_H__ */
diff --git a/addressbook/backend/ebook/e-card-pairs.h b/addressbook/backend/ebook/e-card-pairs.h
deleted file mode 100644
index 0f379d3477..0000000000
--- a/addressbook/backend/ebook/e-card-pairs.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* GnomeCard - a graphical contact manager.
- *
- * pairs.h: This file is part of GnomeCard.
- * 
- * Copyright (C) 1999 The Free Software Foundation
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef __E_CARD_PAIRS_H__
-#define __E_CARD_PAIRS_H__
-
-#include 
-#include 
-
-
-#if 0
-struct pair
-{
-	char *str;
-	ECardPropertyType i ;
-};
-
-struct pair prop_lookup[] = {
-		{        VCFullNameProp, PROP_FNAME },
-		{            VCNameProp, PROP_NAME },
-		{           VCPhotoProp, PROP_PHOTO },
-		{       VCBirthDateProp, PROP_BDAY },
-		{             VCAdrProp, PROP_DELADDR },
-		{   VCDeliveryLabelProp, PROP_DELLABEL },
-		{       VCTelephoneProp, PROP_PHONE },
-		{    VCEmailAddressProp, PROP_EMAIL },
-		{          VCMailerProp, PROP_MAILER },
-		{        VCTimeZoneProp, PROP_TIMEZN },
-		{             VCGeoProp, PROP_GEOPOS },
-		{           VCTitleProp, PROP_TITLE },
-		{    VCBusinessRoleProp, PROP_ROLE },
-		{            VCLogoProp, PROP_LOGO },
-		{           VCAgentProp, PROP_AGENT },
-		{             VCOrgProp, PROP_ORG },
-		{      VCCategoriesProp, PROP_CATEGORIES },
-		{         VCCommentProp, PROP_COMMENT },
-		{     VCLastRevisedProp, PROP_REV },
-		{   VCPronunciationProp, PROP_SOUND },
-		{             VCURLProp, PROP_URL },
-		{    VCUniqueStringProp, PROP_UID },
-		{         VCVersionProp, PROP_VERSION },
-		{       VCPublicKeyProp, PROP_KEY },
-		{           VCValueProp, PROP_VALUE },
-		{        VCEncodingProp, PROP_ENCODING },
-		{ VCQuotedPrintableProp, PROP_QUOTED_PRINTABLE },
-		{            VC8bitProp, PROP_8BIT },
-		{          VCBase64Prop, PROP_BASE64 },
-		{        VCLanguageProp, PROP_LANG },
-		{         VCCharSetProp, PROP_CHARSET },
-		{ NULL, PROP_NONE} };
-
-struct pair photo_pairs[] = {
-		{ VCGIFProp, PHOTO_GIF },
-		{ VCCGMProp, PHOTO_CGM },
-		{ VCWMFProp, PHOTO_WMF },
-		{ VCBMPProp, PHOTO_BMP },
-		{ VCMETProp, PHOTO_MET },
-		{ VCPMBProp, PHOTO_PMB },
-		{ VCDIBProp, PHOTO_DIB },
-		{ VCPICTProp, PHOTO_PICT },
-		{ VCTIFFProp, PHOTO_TIFF },
-		{ VCPDFProp, PHOTO_PDF },
-		{ VCPSProp, PHOTO_PS },
-		{ VCJPEGProp, PHOTO_JPEG },
-		{ VCMPEGProp, PHOTO_MPEG },
-		{ VCMPEG2Prop, PHOTO_MPEG2 },
-		{ VCAVIProp, PHOTO_AVI },
-		{ VCQuickTimeProp, PHOTO_QTIME },
-		{ NULL, 0 } };
-
-struct pair email_pairs[] = {
-		{ VCAOLProp, EMAIL_AOL },
-		{ VCAppleLinkProp, EMAIL_APPLE_LINK },
-		{ VCATTMailProp, EMAIL_ATT },
-		{ VCCISProp, EMAIL_CIS },
-		{ VCEWorldProp, EMAIL_EWORLD },
-		{ VCInternetProp, EMAIL_INET },
-		{ VCIBMMailProp, EMAIL_IBM },
-		{ VCMCIMailProp, EMAIL_MCI },
-		{ VCPowerShareProp, EMAIL_POWERSHARE },
-		{ VCProdigyProp, EMAIL_PRODIGY },
-		{ VCTLXProp, EMAIL_TLX },
-		{ VCX400Prop, EMAIL_X400 },
-		{ NULL, 0 } };
-
-struct pair sound_pairs[] = {
-		{ VCAIFFProp, SOUND_AIFF },
-		{ VCPCMProp, SOUND_PCM },
-		{ VCWAVEProp, SOUND_WAVE },
-		{ NULL, 0 } };
-
-struct pair key_pairs[] = {
-		{ VCX509Prop, KEY_X509 },
-		{ VCPGPProp, KEY_PGP },
-		{ NULL, 0 } };
-	  
-
-#endif
-#endif /* ! __E_CARD_PAIRS_H__ */
diff --git a/addressbook/backend/ebook/e-card-simple.c b/addressbook/backend/ebook/e-card-simple.c
deleted file mode 100644
index 0efda1a8d7..0000000000
--- a/addressbook/backend/ebook/e-card-simple.c
+++ /dev/null
@@ -1,1208 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors: 
- *   Chris Lahey     
- *   Arturo Espinosa (arturo@nuclecu.unam.mx)
- *   Nat Friedman    (nat@helixcode.com)
- *
- * Copyright (C) 2000 Helix Code, Inc.
- * Copyright (C) 1999 The Free Software Foundation
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include "e-card-simple.h"
-
-/* Object argument IDs */
-enum {
-	ARG_0,
-	ARG_CARD,
-#if 0
-	ARG_FILE_AS,
-	ARG_FULL_NAME,
-	ARG_NAME,
-	ARG_ADDRESS,
-	ARG_ADDRESS_LABEL,
-	ARG_PHONE,
-	ARG_EMAIL,
-	ARG_BIRTH_DATE,
-	ARG_URL,
-	ARG_ORG,
-	ARG_ORG_UNIT,
-	ARG_OFFICE,
-	ARG_TITLE,
-	ARG_ROLE,
-	ARG_MANAGER,
-	ARG_ASSISTANT,
-	ARG_NICKNAME,
-	ARG_SPOUSE,
-	ARG_ANNIVERSARY,
-	ARG_FBURL,
-	ARG_NOTE,
-	ARG_ID
-#endif
-};
-
-
-typedef enum _ECardSimpleInternalType ECardSimpleInternalType;
-typedef struct _ECardSimpleFieldData ECardSimpleFieldData;
-
-enum _ECardSimpleInternalType {
-	E_CARD_SIMPLE_INTERNAL_TYPE_STRING,
-	E_CARD_SIMPLE_INTERNAL_TYPE_DATE,
-	E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS,
-	E_CARD_SIMPLE_INTERNAL_TYPE_PHONE,
-	E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL,
-	E_CARD_SIMPLE_INTERNAL_TYPE_SPECIAL,
-};
-
-struct _ECardSimpleFieldData {
-	ECardSimpleField         field;
-	char                    *ecard_field;
-	char                    *name;
-	char                    *short_name;
-	int                      list_type_index;
-	ECardSimpleInternalType  type;
-};
-
-/* This order must match the order in the .h. */
-
-static ECardSimpleFieldData field_data[] =
-{
-	{ E_CARD_SIMPLE_FIELD_FILE_AS,            "file_as",     "File As",       "",         0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_FULL_NAME,          "full_name",   "Name",          "Name",     0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_EMAIL,              "",            "Email",         "Email",    E_CARD_SIMPLE_EMAIL_ID_EMAIL,   	   E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL },
-	{ E_CARD_SIMPLE_FIELD_PHONE_PRIMARY,      "",            "Primary",       "Prim",     E_CARD_SIMPLE_PHONE_ID_PRIMARY,      E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_BUSINESS,     "",            "Business",      "Bus",      E_CARD_SIMPLE_PHONE_ID_BUSINESS,     E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_HOME,         "",            "Home",          "Home",     E_CARD_SIMPLE_PHONE_ID_HOME,         E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_ORG,                "org",         "Organization",  "Org",      0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_ADDRESS_BUSINESS,   "",            "Business",      "Bus",      E_CARD_SIMPLE_ADDRESS_ID_BUSINESS,   E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS },
-	{ E_CARD_SIMPLE_FIELD_ADDRESS_HOME,       "",            "Home",          "Home",     E_CARD_SIMPLE_ADDRESS_ID_HOME,       E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS },
-	{ E_CARD_SIMPLE_FIELD_PHONE_MOBILE,       "",            "Mobile",        "Mobile",   E_CARD_SIMPLE_PHONE_ID_MOBILE,       E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_CAR,          "",            "Car",           "Car",      E_CARD_SIMPLE_PHONE_ID_CAR,          E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_FAX, "",            "Business Fax",  "Bus Fax",  E_CARD_SIMPLE_PHONE_ID_BUSINESS_FAX, E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_HOME_FAX,     "",            "Home Fax",      "Home Fax", E_CARD_SIMPLE_PHONE_ID_HOME_FAX,     E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_2,   "",            "Business 2",    "Bus 2",    E_CARD_SIMPLE_PHONE_ID_BUSINESS_2,   E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_HOME_2,       "",            "Home 2",        "Home 2",   E_CARD_SIMPLE_PHONE_ID_HOME_2,       E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_ISDN,         "",            "ISDN",          "ISDN",     E_CARD_SIMPLE_PHONE_ID_ISDN,         E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_OTHER,        "",            "Other",         "Other",    E_CARD_SIMPLE_PHONE_ID_OTHER,        E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_PHONE_PAGER,        "",            "Pager",         "Pager",    E_CARD_SIMPLE_PHONE_ID_PAGER,        E_CARD_SIMPLE_INTERNAL_TYPE_PHONE },
-	{ E_CARD_SIMPLE_FIELD_ADDRESS_OTHER,      "",            "Other",         "Other",    E_CARD_SIMPLE_ADDRESS_ID_OTHER,      E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS },
-	{ E_CARD_SIMPLE_FIELD_EMAIL_2,            "",            "Email 2",       "Email 2",  E_CARD_SIMPLE_EMAIL_ID_EMAIL_2, 	   E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL },
-	{ E_CARD_SIMPLE_FIELD_EMAIL_3,            "",            "Email 3",       "Email 3",  E_CARD_SIMPLE_EMAIL_ID_EMAIL_3, 	   E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL },
-	{ E_CARD_SIMPLE_FIELD_URL,                "url",         "Web Site",      "Url",      0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_ORG_UNIT,           "org_unit",    "Department",    "Dep",      0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_OFFICE,             "office",      "Office",        "Off",      0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_TITLE,              "title",       "Title",         "Title",    0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_ROLE,               "role",        "Profession",    "Prof",     0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_MANAGER,            "manager",     "Manager",       "Man",      0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_ASSISTANT,          "assistant",   "Assistant",     "Ass",      0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_NICKNAME,           "nickname",    "Nickname",      "Nick",     0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_SPOUSE,             "spouse",      "Spouse",        "Spouse",   0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_NOTE,               "note",        "Note",          "Note",     0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_FBURL,              "fburl",       "Free-busy URL", "FBUrl",    0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_ANNIVERSARY,        "anniversary", "Anniversary",   "Anniv",    0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_DATE },
-	{ E_CARD_SIMPLE_FIELD_BIRTH_DATE,         "birth_date",  "Birth Date",    "",         0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_DATE },
-	{ E_CARD_SIMPLE_FIELD_MAILER,             "mailer",      "",              "",         0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_STRING },
-	{ E_CARD_SIMPLE_FIELD_NAME_OR_ORG,        "nameororg",   "",              "",         0,                                   E_CARD_SIMPLE_INTERNAL_TYPE_SPECIAL },
-};
-
-static void e_card_simple_init (ECardSimple *simple);
-static void e_card_simple_class_init (ECardSimpleClass *klass);
-
-static void e_card_simple_destroy (GtkObject *object);
-static void e_card_simple_set_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-static void e_card_simple_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-
-static void fill_in_info(ECardSimple *simple);
-
-ECardPhoneFlags phone_correspondences[] = {
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_ASSISTANT,    */
-	E_CARD_PHONE_WORK | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_BUSINESS,	   */
-	E_CARD_PHONE_WORK | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_BUSINESS_2,   */
-	E_CARD_PHONE_WORK | E_CARD_PHONE_FAX, /* E_CARD_SIMPLE_PHONE_ID_BUSINESS_FAX, */
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_CALLBACK,	   */
-	E_CARD_PHONE_CAR | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_CAR,	   */
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_COMPANY,	   */
-	E_CARD_PHONE_HOME | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_HOME,	   */
-	E_CARD_PHONE_HOME | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_HOME_2,	   */
-	E_CARD_PHONE_HOME | E_CARD_PHONE_FAX, /* E_CARD_SIMPLE_PHONE_ID_HOME_FAX,	   */
-	E_CARD_PHONE_ISDN, /* E_CARD_SIMPLE_PHONE_ID_ISDN,	   */
-	E_CARD_PHONE_CELL | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_MOBILE,	   */
-	E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_OTHER,	   */
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_OTHER_FAX,	   */
-	E_CARD_PHONE_PAGER | E_CARD_PHONE_VOICE, /* E_CARD_SIMPLE_PHONE_ID_PAGER,	   */
-	E_CARD_PHONE_PREF, /* E_CARD_SIMPLE_PHONE_ID_PRIMARY,	   */
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_RADIO,	   */
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_TELEX,	   */
-	0xFF, /* E_CARD_SIMPLE_PHONE_ID_TTYTTD,	   */
-};
-
-char *phone_names[] = {
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_ASSISTANT,    */
-	"Business",
-	"Business 2",
-	"Business Fax",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_CALLBACK,	   */
-	"Car",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_COMPANY,	   */
-	"Home",
-	"Home 2",
-	"Home Fax",
-	"ISDN",
-	"Mobile",
-	"Other",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_OTHER_FAX,	   */
-	"Pager",
-	"Primary",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_RADIO,	   */
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_TELEX,	   */
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_TTYTTD,	   */
-};
-
-char *phone_short_names[] = {
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_ASSISTANT,    */
-	"Bus",
-	"Bus 2",
-	"Bus Fax",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_CALLBACK,	   */
-	"Car",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_COMPANY,	   */
-	"Home",
-	"Home 2",
-	"Home Fax",
-	"ISDN",
-	"Mob",
-	"Other",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_OTHER_FAX,	   */
-	"Pag",
-	"Prim",
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_RADIO,	   */
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_TELEX,	   */
-	NULL, /* E_CARD_SIMPLE_PHONE_ID_TTYTTD,	   */
-};
-
-ECardAddressFlags addr_correspondences[] = {
-	E_CARD_ADDR_WORK, /* E_CARD_SIMPLE_ADDRESS_ID_BUSINESS, */
-	E_CARD_ADDR_HOME, /* E_CARD_SIMPLE_ADDRESS_ID_HOME,	 */
-	E_CARD_ADDR_POSTAL, /* E_CARD_SIMPLE_ADDRESS_ID_OTHER,    */
-};
-
-char *address_names[] = {
-	"Business",
-	"Home",
-	"Other",
-};
-
-/**
- * e_card_simple_get_type:
- * @void: 
- * 
- * Registers the &ECardSimple class if necessary, and returns the type ID
- * associated to it.
- * 
- * Return value: The type ID of the &ECardSimple class.
- **/
-GtkType
-e_card_simple_get_type (void)
-{
-	static GtkType simple_type = 0;
-
-	if (!simple_type) {
-		GtkTypeInfo simple_info = {
-			"ECardSimple",
-			sizeof (ECardSimple),
-			sizeof (ECardSimpleClass),
-			(GtkClassInitFunc) e_card_simple_class_init,
-			(GtkObjectInitFunc) e_card_simple_init,
-			NULL, /* reserved_1 */
-			NULL, /* reserved_2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		simple_type = gtk_type_unique (gtk_object_get_type (), &simple_info);
-	}
-
-	return simple_type;
-}
-
-/**
- * e_card_simple_new:
- * @VCard: a string in vCard format
- *
- * Returns: a new #ECardSimple that wraps the @VCard.
- */
-ECardSimple *
-e_card_simple_new (ECard *card)
-{
-	ECardSimple *simple = E_CARD_SIMPLE(gtk_type_new(e_card_simple_get_type()));
-	gtk_object_set(GTK_OBJECT(simple),
-		       "card", card,
-		       NULL);
-	return simple;
-}
-
-ECardSimple *e_card_simple_duplicate(ECardSimple *simple)
-{
-	char *vcard = e_card_simple_get_vcard(simple);
-	ECard *card = e_card_new(vcard);
-	ECardSimple *new_simple = e_card_simple_new(card);
-	g_free (vcard);
-	return new_simple;
-}
-
-/**
- * e_card_simple_get_id:
- * @simple: an #ECardSimple
- *
- * Returns: a string representing the id of the simple, which is unique
- * within its book.
- */
-char *
-e_card_simple_get_id (ECardSimple *simple)
-{
-	if (simple->card)
-		return e_card_get_id(simple->card);
-	else
-		return "";
-}
-
-/**
- * e_card_simple_get_id:
- * @simple: an #ECardSimple
- * @id: a id in string format
- *
- * Sets the identifier of a simple, which should be unique within its
- * book.
- */
-void
-e_card_simple_set_id (ECardSimple *simple, const char *id)
-{
-	if ( simple->card )
-		e_card_set_id(simple->card, id);
-}
-
-/**
- * e_card_simple_get_vcard:
- * @simple: an #ECardSimple
- *
- * Returns: a string in vcard format, which is wrapped by the @simple.
- */
-char
-*e_card_simple_get_vcard (ECardSimple *simple)
-{
-	if (simple->card)
-		return e_card_get_vcard(simple->card);
-	else
-		return g_strdup("");
-}
-
-static void
-e_card_simple_class_init (ECardSimpleClass *klass)
-{
-	GtkObjectClass *object_class;
-
-	object_class = GTK_OBJECT_CLASS(klass);
-
-	gtk_object_add_arg_type ("ECardSimple::card",
-				 GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CARD);
-#if 0
-	gtk_object_add_arg_type ("ECardSimple::file_as",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FILE_AS);
-	gtk_object_add_arg_type ("ECardSimple::full_name",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FULL_NAME);  
-	gtk_object_add_arg_type ("ECardSimple::name",
-				 GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_NAME);
-	gtk_object_add_arg_type ("ECardSimple::address",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS);
-	gtk_object_add_arg_type ("ECardSimple::address_label",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS_LABEL);
-	gtk_object_add_arg_type ("ECardSimple::phone",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_PHONE);
-	gtk_object_add_arg_type ("ECardSimple::email",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_EMAIL);
-	gtk_object_add_arg_type ("ECardSimple::birth_date",
-				 GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BIRTH_DATE);
-	gtk_object_add_arg_type ("ECardSimple::url",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_URL);  
-	gtk_object_add_arg_type ("ECardSimple::org",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG);
-	gtk_object_add_arg_type ("ECardSimple::org_unit",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG_UNIT);
-	gtk_object_add_arg_type ("ECardSimple::office",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_OFFICE);
-	gtk_object_add_arg_type ("ECardSimple::title",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_TITLE);  
-	gtk_object_add_arg_type ("ECardSimple::role",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ROLE);
-	gtk_object_add_arg_type ("ECardSimple::manager",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MANAGER);
-	gtk_object_add_arg_type ("ECardSimple::assistant",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ASSISTANT);
-	gtk_object_add_arg_type ("ECardSimple::nickname",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NICKNAME);
-	gtk_object_add_arg_type ("ECardSimple::spouse",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_SPOUSE);
-	gtk_object_add_arg_type ("ECardSimple::anniversary",
-				 GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_ANNIVERSARY);
-	gtk_object_add_arg_type ("ECardSimple::fburl",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FBURL);
-	gtk_object_add_arg_type ("ECardSimple::note",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NOTE);
-	gtk_object_add_arg_type ("ECardSimple::id",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ID);
-#endif
-
-	object_class->destroy = e_card_simple_destroy;
-	object_class->get_arg = e_card_simple_get_arg;
-	object_class->set_arg = e_card_simple_set_arg;
-}
-
-/*
- * ECardSimple lifecycle management and vcard loading/saving.
- */
-
-static void
-e_card_simple_destroy (GtkObject *object)
-{
-	ECardSimple *simple;
-	int i;
-	
-	simple = E_CARD_SIMPLE (object);
-
-	if (simple->card)
-		gtk_object_unref(GTK_OBJECT(simple->card));
-	g_list_foreach(simple->temp_fields, (GFunc) g_free, NULL);
-	g_list_free(simple->temp_fields);
-	simple->temp_fields = NULL;
-
-	for(i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++)
-		g_free(simple->phone[i]);
-	for(i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++)
-		g_free(simple->email[i]);
-	for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++)
-		g_free(simple->address[i]);
-}
-
-
-/* Set_arg handler for the simple */
-static void
-e_card_simple_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	ECardSimple *simple;
-	
-	simple = E_CARD_SIMPLE (object);
-
-	switch (arg_id) {
-	case ARG_CARD:
-		if (simple->card)
-			gtk_object_unref(GTK_OBJECT(simple->card));
-		g_list_foreach(simple->temp_fields, (GFunc) g_free, NULL);
-		g_list_free(simple->temp_fields);
-		simple->temp_fields = NULL;
-		if (GTK_VALUE_OBJECT(*arg))
-			simple->card = E_CARD(GTK_VALUE_OBJECT(*arg));
-		else
-			simple->card = NULL;
-		if(simple->card)
-			gtk_object_ref(GTK_OBJECT(simple->card));
-		fill_in_info(simple);
-		break;
-#if 0
-	case ARG_FILE_AS:
-		if (simple->file_as)
-			g_free(simple->file_as);
-		simple->file_as = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_FULL_NAME:
-		if ( simple->fname )
-			g_free(simple->fname);
-		simple->fname = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_NAME:
-		if ( simple->name )
-			e_card_simple_name_free(simple->name);
-		simple->name = GTK_VALUE_POINTER(*arg);
-		break;
-	case ARG_BIRTH_DATE:
-		if ( simple->bday )
-			g_free(simple->bday);
-		simple->bday = GTK_VALUE_POINTER(*arg);
-		break;
-	case ARG_URL:
-		if ( simple->url )
-			g_free(simple->url);
-		simple->url = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ORG:
-		if (simple->org)
-			g_free(simple->org);
-		simple->org = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ORG_UNIT:
-		if (simple->org_unit)
-			g_free(simple->org_unit);
-		simple->org_unit = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_OFFICE:
-		if (simple->office)
-			g_free(simple->office);
-		simple->office = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_TITLE:
-		if ( simple->title )
-			g_free(simple->title);
-		simple->title = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ROLE:
-		if (simple->role)
-			g_free(simple->role);
-		simple->role = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_MANAGER:
-		if (simple->manager)
-			g_free(simple->manager);
-		simple->manager = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ASSISTANT:
-		if (simple->assistant)
-			g_free(simple->assistant);
-		simple->assistant = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_NICKNAME:
-		if (simple->nickname)
-			g_free(simple->nickname);
-		simple->nickname = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_SPOUSE:
-		if (simple->spouse)
-			g_free(simple->spouse);
-		simple->spouse = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ANNIVERSARY:
-		if ( simple->anniversary )
-			g_free(simple->anniversary);
-		simple->anniversary = GTK_VALUE_POINTER(*arg);
-		break;
-	case ARG_FBURL:
-		if (simple->fburl)
-			g_free(simple->fburl);
-		simple->fburl = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_NOTE:
-		if (simple->note)
-			g_free (simple->note);
-		simple->note = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ID:
-		if (simple->id)
-			g_free(simple->id);
-		simple->id = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-#endif
-	default:
-		return;
-	}
-}
-
-/* Get_arg handler for the simple */
-static void
-e_card_simple_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	ECardSimple *simple;
-
-	simple = E_CARD_SIMPLE (object);
-
-	switch (arg_id) {
-	case ARG_CARD:
-		e_card_simple_sync_card(simple);
-		if (simple->card)
-			GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(simple->card);
-		else
-			GTK_VALUE_OBJECT (*arg) = NULL;
-		break;
-#if 0
-	case ARG_FILE_AS:
-		GTK_VALUE_STRING (*arg);
-		break;
-	case ARG_FULL_NAME:
-		GTK_VALUE_STRING (*arg) = simple->fname;
-		break;
-	case ARG_NAME:
-		GTK_VALUE_POINTER(*arg) = simple->name;
-		break;
-	case ARG_ADDRESS:
-		if (!simple->address)
-			simple->address = e_card_simple_list_new((ECardSimpleListCopyFunc) e_card_simple_delivery_address_copy, 
-							(ECardSimpleListFreeFunc) e_card_simple_delivery_address_free,
-							NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(simple->address);
-		break;
-	case ARG_ADDRESS_LABEL:
-		if (!simple->address_label)
-			simple->address_label = e_card_simple_list_new((ECardSimpleListCopyFunc) e_card_simple_address_label_copy, 
-							      (ECardSimpleListFreeFunc) e_card_simple_address_label_free,
-							      NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(simple->address_label);
-		break;
-	case ARG_PHONE:
-		if (!simple->phone)
-			simple->phone = e_card_simple_list_new((ECardSimpleListCopyFunc) e_card_simple_phone_copy, 
-						      (ECardSimpleListFreeFunc) e_card_simple_phone_free,
-						      NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(simple->phone);
-		break;
-	case ARG_EMAIL:
-		if (!simple->email)
-			simple->email = e_card_simple_list_new((ECardSimpleListCopyFunc) g_strdup, 
-						      (ECardSimpleListFreeFunc) g_free,
-						      NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(simple->email);
-		break;
-	case ARG_BIRTH_DATE:
-		GTK_VALUE_POINTER(*arg) = simple->bday;
-		break;
-	case ARG_URL:
-		GTK_VALUE_STRING(*arg) = simple->url;
-		break;
-	case ARG_ORG:
-		GTK_VALUE_STRING(*arg) = simple->org;
-		break;
-	case ARG_ORG_UNIT:
-		GTK_VALUE_STRING(*arg) = simple->org_unit;
-		break;
-	case ARG_OFFICE:
-		GTK_VALUE_STRING(*arg) = simple->office;
-		break;
-	case ARG_TITLE:
-		GTK_VALUE_STRING(*arg) = simple->title;
-		break;
-	case ARG_ROLE:
-		GTK_VALUE_STRING(*arg) = simple->role;
-		break;
-	case ARG_MANAGER:
-		GTK_VALUE_STRING(*arg) = simple->manager;
-		break;
-	case ARG_ASSISTANT:
-		GTK_VALUE_STRING(*arg) = simple->assistant;
-		break;
-	case ARG_NICKNAME:
-		GTK_VALUE_STRING(*arg) = simple->nickname;
-		break;
-	case ARG_SPOUSE:
-		GTK_VALUE_STRING(*arg) = simple->spouse;
-		break;
-	case ARG_ANNIVERSARY:
-		GTK_VALUE_POINTER(*arg) = simple->anniversary;
-		break;
-	case ARG_FBURL:
-		GTK_VALUE_STRING(*arg) = simple->fburl;
-		break;
-	case ARG_NOTE:
-		GTK_VALUE_STRING(*arg) = simple->note;
-		break;
-	case ARG_ID:
-		GTK_VALUE_STRING(*arg) = simple->id;
-		break;
-#endif
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-
-/**
- * e_card_simple_init:
- */
-static void
-e_card_simple_init (ECardSimple *simple)
-{
-	int i;
-	simple->card = NULL;
-	for(i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++)
-		simple->phone[i] = NULL;
-	for(i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++)
-		simple->email[i] = NULL;
-	for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++)
-		simple->address[i] = NULL;
-	simple->temp_fields = NULL;
-}
-
-static void
-fill_in_info(ECardSimple *simple)
-{
-	ECard *card = simple->card;
-	if (card) {
-		EList *address_list;
-		EList *phone_list;
-		EList *email_list;
-		const ECardPhone *phone;
-		const char *email;
-		const ECardAddrLabel *address;
-		int i;
-
-		EIterator *iterator;
-
-		gtk_object_get(GTK_OBJECT(card),
-			       "address_label", &address_list,
-			       "phone",         &phone_list,
-			       "email",         &email_list,
-			       NULL);
-		for (i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++) {
-			e_card_phone_free(simple->phone[i]);
-			simple->phone[i] = NULL;
-		}
-		for (iterator = e_list_get_iterator(phone_list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			phone = e_iterator_get(iterator);
-			for (i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i ++) {
-				if (((phone->flags & phone_correspondences[i]) == phone_correspondences[i]) && (simple->phone[i] == NULL)) {
-					simple->phone[i] = e_card_phone_copy(phone);
-					break;
-				}
-			}
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-
-		for (i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++) {
-			g_free(simple->email[i]);
-			simple->email[i] = NULL;
-		}
-		for (iterator = e_list_get_iterator(email_list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			email = e_iterator_get(iterator);
-			for (i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i ++) {
-				if ((simple->email[i] == NULL)) {
-					simple->email[i] = g_strdup(email);
-					break;
-				}
-			}
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-
-		for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) {
-			e_card_address_label_free(simple->address[i]);
-			simple->address[i] = NULL;
-		}
-		for (iterator = e_list_get_iterator(address_list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			address = e_iterator_get(iterator);
-			for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i ++) {
-				if (((address->flags & addr_correspondences[i]) == addr_correspondences[i]) && (simple->address[i] == NULL)) {
-					simple->address[i] = e_card_address_label_copy(address);
-					break;
-				}
-			}
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-	}
-}
-
-void
-e_card_simple_sync_card(ECardSimple *simple)
-{
-	ECard *card = simple->card;
-	if (card) {
-		EList *address_list;
-		EList *phone_list;
-		EList *email_list;
-		const ECardPhone *phone;
-		const ECardAddrLabel *address;
-		const char *email;
-		int i;
-		int iterator_next = 1;
-
-		EIterator *iterator;
-
-		gtk_object_get(GTK_OBJECT(card),
-			       "address_label", &address_list,
-			       "phone",         &phone_list,
-			       "email",         &email_list,
-			       NULL);
-
-		for (iterator = e_list_get_iterator(phone_list); e_iterator_is_valid(iterator); iterator_next ? e_iterator_next(iterator) : FALSE ) {
-			int i;
-			phone = e_iterator_get(iterator);
-			iterator_next = 1;
-			for (i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i ++) {
-				if ((phone->flags & phone_correspondences[i]) == phone_correspondences[i]) {
-					if (simple->phone[i]) {
-						simple->phone[i]->flags = phone_correspondences[i];
-						if (simple->phone[i]->number && *simple->phone[i]->number) {
-							e_iterator_set(iterator, simple->phone[i]);
-						} else {
-							e_iterator_delete(iterator);
-							iterator_next = 0;
-						}
-						e_card_phone_free(simple->phone[i]);
-						simple->phone[i] = NULL;
-						break;
-					}
-				}
-			}
-		}	
-		gtk_object_unref(GTK_OBJECT(iterator));
-		for (i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i ++) {
-			if (simple->phone[i]) {
-				simple->phone[i]->flags = phone_correspondences[i];
-				e_list_append(phone_list, simple->phone[i]);
-				e_card_phone_free(simple->phone[i]);
-				simple->phone[i] = NULL;
-			}
-		}
-
-		for (iterator = e_list_get_iterator(email_list); e_iterator_is_valid(iterator); iterator_next ? e_iterator_next(iterator) : FALSE ) {
-			int i;
-			email = e_iterator_get(iterator);
-			iterator_next = 1;
-			for (i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i ++) {
-				if (simple->email[i]) {
-					if (*simple->email[i]) {
-						e_iterator_set(iterator, simple->email[i]);
-					} else {
-						e_iterator_delete(iterator);
-						iterator_next = 0;
-					}
-					g_free(simple->email[i]);
-					simple->email[i] = NULL;
-					break;
-				}
-			}
-		}	
-		gtk_object_unref(GTK_OBJECT(iterator));
-		for (i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i ++) {
-			if (simple->email[i]) {
-				e_list_append(email_list, simple->email[i]);
-				g_free(simple->email[i]);
-				simple->email[i] = NULL;
-			}
-		}
-
-		for (iterator = e_list_get_iterator(address_list); e_iterator_is_valid(iterator); iterator_next ? e_iterator_next(iterator) : FALSE ) {
-			int i;
-			address = e_iterator_get(iterator);
-			iterator_next = 1;
-			for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i ++) {
-				if ((address->flags & addr_correspondences[i]) == addr_correspondences[i]) {
-					if (simple->address[i]) {
-						simple->address[i]->flags = addr_correspondences[i];
-						if (simple->address[i]->data && *simple->address[i]->data) {
-							e_iterator_set(iterator, simple->address[i]);
-						} else {
-							e_iterator_delete(iterator);
-							iterator_next = 0;
-						}
-						e_card_address_label_free(simple->address[i]);
-						simple->address[i] = NULL;
-						break;
-					}
-				}
-			}
-		}	
-		gtk_object_unref(GTK_OBJECT(iterator));
-		for (i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i ++) {
-			if (simple->address[i]) {
-				simple->address[i]->flags = addr_correspondences[i];
-				e_list_append(address_list, simple->address[i]);
-				e_card_address_label_free(simple->address[i]);
-				simple->address[i] = NULL;
-			}
-		}
-		fill_in_info(simple);
-	}
-}
-
-const ECardPhone     *e_card_simple_get_phone   (ECardSimple          *simple,
-						 ECardSimplePhoneId    id)
-{
-	return simple->phone[id];
-}
-
-const char           *e_card_simple_get_email   (ECardSimple          *simple,
-						 ECardSimpleEmailId    id)
-{
-	return simple->email[id];
-}
-
-const ECardAddrLabel *e_card_simple_get_address (ECardSimple          *simple,
-						 ECardSimpleAddressId  id)
-{
-	return simple->address[id];
-}
-
-void            e_card_simple_set_phone   (ECardSimple          *simple,
-					   ECardSimplePhoneId    id,
-					   const ECardPhone           *phone)
-{
-	if (simple->phone[id])
-		e_card_phone_free(simple->phone[id]);
-	simple->phone[id] = e_card_phone_copy(phone);
-}
-
-void            e_card_simple_set_email   (ECardSimple          *simple,
-					   ECardSimpleEmailId    id,
-					   const char                 *email)
-{
-	if (simple->email[id])
-		g_free(simple->email[id]);
-	simple->email[id] = g_strdup(email);
-}
-
-void            e_card_simple_set_address (ECardSimple          *simple,
-					   ECardSimpleAddressId  id,
-					   const ECardAddrLabel       *address)
-{
-	if (simple->address[id])
-		e_card_address_label_free(simple->address[id]);
-	simple->address[id] = e_card_address_label_copy(address);
-}
-
-const char *e_card_simple_get_const    (ECardSimple          *simple,
-					ECardSimpleField      field)
-{
-	char *ret_val = e_card_simple_get(simple, field);
-	if (ret_val)
-		simple->temp_fields = g_list_prepend(simple->temp_fields, ret_val);
-	return ret_val;
-}
-
-char     *e_card_simple_get            (ECardSimple          *simple,
-					ECardSimpleField      field)
-{
-	ECardSimpleInternalType type = field_data[field].type;
-	const ECardAddrLabel *addr;
-	const ECardPhone *phone;
-	const char *string;
-	ECardDate *date;
-	switch(type) {
-	case E_CARD_SIMPLE_INTERNAL_TYPE_STRING:
-		gtk_object_get(GTK_OBJECT(simple->card),
-			       field_data[field].ecard_field, &string,
-			       NULL);
-		return g_strdup(string);
-	case E_CARD_SIMPLE_INTERNAL_TYPE_DATE:
-		gtk_object_get(GTK_OBJECT(simple->card),
-			       field_data[field].ecard_field, &date,
-			       NULL);
-		return NULL; /* FIXME!!!! */
-	case E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS:
-		addr = e_card_simple_get_address(simple,
-						 field_data[field].list_type_index);
-		if (addr)
-			return g_strdup(addr->data);
-		else
-			return NULL;
-	case E_CARD_SIMPLE_INTERNAL_TYPE_PHONE:
-		phone = e_card_simple_get_phone(simple,
-						field_data[field].list_type_index);
-		if (phone)
-			return g_strdup(phone->number);
-		else
-			return NULL;
-	case E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL:
-		string = e_card_simple_get_email(simple,
-						 field_data[field].list_type_index);
-		return g_strdup(string);
-	case E_CARD_SIMPLE_INTERNAL_TYPE_SPECIAL:
-		switch (field) {
-		case E_CARD_SIMPLE_FIELD_NAME_OR_ORG:
-			gtk_object_get(GTK_OBJECT(simple->card),
-				       "full_name", &string,
-				       NULL);
-			if (string && *string)
-				return g_strdup(string);
-			gtk_object_get(GTK_OBJECT(simple->card),
-				       "org", &string,
-				       NULL);
-			return g_strdup(string);
-		default:
-			return NULL;
-		}
-	default:
-		return NULL;
-	}
-}
-
-static char *
-name_to_style(const ECardName *name, char *company, int style)
-{
-	char *string;
-	char *strings[4], **stringptr;
-	char *substring;
-	switch (style) {
-	case 0:
-		stringptr = strings;
-		if (name->family && *name->family)
-			*(stringptr++) = name->family;
-		if (name->given && *name->given)
-			*(stringptr++) = name->given;
-		*stringptr = NULL;
-		string = g_strjoinv(", ", strings);
-		break;
-	case 1:
-		stringptr = strings;
-		if (name->given && *name->given)
-			*(stringptr++) = name->given;
-		if (name->family && *name->family)
-			*(stringptr++) = name->family;
-		*stringptr = NULL;
-		string = g_strjoinv(" ", strings);
-		break;
-	case 2:
-		string = g_strdup(company);
-		break;
-	case 3: /* Fall Through */
-	case 4:
-		stringptr = strings;
-		if (name->family && *name->family)
-			*(stringptr++) = name->family;
-		if (name->given && *name->given)
-			*(stringptr++) = name->given;
-		*stringptr = NULL;
-		substring = g_strjoinv(", ", strings);
-		if (!(company && *company))
-			company = "";
-		if (style == 3)
-			string = g_strdup_printf("%s (%s)", substring, company);
-		else
-			string = g_strdup_printf("%s (%s)", company, substring);
-		g_free(substring);
-		break;
-	default:
-		string = g_strdup("");
-	}
-	return string;
-}
-
-static int
-file_as_get_style (ECardSimple *simple)
-{
-	char *filestring = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FILE_AS);
-	char *trystring;
-	char *full_name = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FULL_NAME);
-	char *company = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_ORG);
-	ECardName *name = NULL;
-	int i;
-	int style;
-	style = 0;
-	if (!full_name)
-		full_name = g_strdup("");
-	if (!company)
-		company = g_strdup("");
-	if (filestring) {
-
-		name = e_card_name_from_string(full_name);
-		
-		if (!name) {
-			goto end;
-		}
-
-		style = -1;
-		
-		for (i = 0; i < 5; i++) {
-			trystring = name_to_style(name, company, i);
-			if (!strcmp(trystring, filestring)) {
-				g_free(trystring);
-				style = i;
-				goto end;
-			}
-			g_free(trystring);
-		}
-	}		
- end:
-		
-	g_free(filestring);
-	g_free(full_name);
-	g_free(company);
-	if (name)
-		e_card_name_free(name);
-	
-	return style;
-}
-
-static void
-file_as_set_style(ECardSimple *simple, int style)
-{
-	if (style != -1) {
-		char *string;
-		char *full_name = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FULL_NAME);
-		char *company = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_ORG);
-		ECardName *name;
-		
-		if (!full_name)
-			full_name = g_strdup("");
-		if (!company)
-			company = g_strdup("");
-		name = e_card_name_from_string(full_name);
-		if (name) {
-			string = name_to_style(name, company, style);
-			e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_FILE_AS, string);
-			g_free(string);
-		}
-		g_free(full_name);
-		g_free(company);
-		e_card_name_free(name);
-	}
-}
-
-void            e_card_simple_set            (ECardSimple          *simple,
-					      ECardSimpleField      field,
-					      const char           *data)
-{
-	ECardSimpleInternalType type = field_data[field].type;
-	ECardAddrLabel *address;
-	ECardPhone *phone;
-	int style;
-	switch (field) {
-	case E_CARD_SIMPLE_FIELD_FULL_NAME:
-	case E_CARD_SIMPLE_FIELD_ORG:
-		style = file_as_get_style(simple);
-		gtk_object_set(GTK_OBJECT(simple->card),
-			       field_data[field].ecard_field, data,
-			       NULL);
-		file_as_set_style(simple, style);
-		break;
-	default:
-		switch(type) {
-		case E_CARD_SIMPLE_INTERNAL_TYPE_STRING:
-			gtk_object_set(GTK_OBJECT(simple->card),
-				       field_data[field].ecard_field, data,
-				       NULL);
-			break;
-		case E_CARD_SIMPLE_INTERNAL_TYPE_DATE:
-			break; /* FIXME!!!! */
-		case E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS:
-			address = e_card_address_label_new();
-			address->data = (char *) data;
-			e_card_simple_set_address(simple,
-						  field_data[field].list_type_index,
-						  address);
-			address->data = NULL;
-			e_card_address_label_free(address);
-			break;
-		case E_CARD_SIMPLE_INTERNAL_TYPE_PHONE:
-			phone = e_card_phone_new();
-			phone->number = (char *) data;
-			e_card_simple_set_phone(simple,
-						field_data[field].list_type_index,
-						phone);
-			phone->number = NULL;
-			e_card_phone_free(phone);
-			break;
-		case E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL:
-			e_card_simple_set_email(simple,
-						field_data[field].list_type_index,
-						data);
-			break;
-		case E_CARD_SIMPLE_INTERNAL_TYPE_SPECIAL:
-			break;
-		}
-		break;
-	}
-}
-					     
-ECardSimpleType e_card_simple_type       (ECardSimple          *simple,
-					  ECardSimpleField      field)
-{
-	ECardSimpleInternalType type = field_data[field].type;
-	switch(type) {
-	case E_CARD_SIMPLE_INTERNAL_TYPE_STRING:
-	case E_CARD_SIMPLE_INTERNAL_TYPE_ADDRESS:
-	case E_CARD_SIMPLE_INTERNAL_TYPE_PHONE:
-	case E_CARD_SIMPLE_INTERNAL_TYPE_EMAIL:
-	default:
-		return E_CARD_SIMPLE_TYPE_STRING;
-
-	case E_CARD_SIMPLE_INTERNAL_TYPE_DATE:
-		return E_CARD_SIMPLE_TYPE_DATE;
-
-	case E_CARD_SIMPLE_INTERNAL_TYPE_SPECIAL:
-		return E_CARD_SIMPLE_TYPE_STRING;
-	}
-}
-
-const char     *e_card_simple_get_name       (ECardSimple          *simple,
-					      ECardSimpleField      field)
-{
-	return field_data[field].name;
-}
-
-const char     *e_card_simple_get_short_name (ECardSimple          *simple,
-					      ECardSimpleField      field)
-{
-	return field_data[field].short_name;
-}
-
-void                  e_card_simple_arbitrary_foreach (ECardSimple                  *simple,
-						       ECardSimpleArbitraryCallback *callback,
-						       gpointer                      closure)
-{
-	if (simple->card) {
-		EList *list;
-		EIterator *iterator;
-		gtk_object_get(GTK_OBJECT(simple->card),
-			       "arbitrary", &list,
-			       NULL);
-		for (iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			const ECardArbitrary *arbitrary = e_iterator_get(iterator);
-			if (callback)
-				(*callback) (arbitrary, closure);
-		}
-	}
-}
-
-const ECardArbitrary *e_card_simple_get_arbitrary     (ECardSimple          *simple,
-						       const char           *key)
-{
-	if (simple->card) {
-		EList *list;
-		EIterator *iterator;
-		gtk_object_get(GTK_OBJECT(simple->card),
-			       "arbitrary", &list,
-			       NULL);
-		for (iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			const ECardArbitrary *arbitrary = e_iterator_get(iterator);
-			if (!strcasecmp(arbitrary->key, key))
-				return arbitrary;
-		}
-	}
-	return NULL;
-}
-
-/* Any of these except key can be NULL */	      
-void                  e_card_simple_set_arbitrary     (ECardSimple          *simple,
-						       const char           *key,
-						       const char           *type,
-						       const char           *value)
-{
-	if (simple->card) {
-	ECardArbitrary *new_arb;
-		EList *list;
-		EIterator *iterator;
-		gtk_object_get(GTK_OBJECT(simple->card),
-			       "arbitrary", &list,
-			       NULL);
-		for (iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			const ECardArbitrary *arbitrary = e_iterator_get(iterator);
-			if (!strcasecmp(arbitrary->key, key)) {
-				new_arb = e_card_arbitrary_new();
-				new_arb->key = g_strdup(key);
-				new_arb->type = g_strdup(type);
-				new_arb->value = g_strdup(value);
-				e_iterator_set(iterator, new_arb);
-				e_card_arbitrary_free(new_arb);
-				return;
-			}
-		}
-		new_arb = e_card_arbitrary_new();
-		new_arb->key = g_strdup(key);
-		new_arb->type = g_strdup(type);
-		new_arb->value = g_strdup(value);
-		e_list_append(list, new_arb);
-		e_card_arbitrary_free(new_arb);
-	}
-}
-
diff --git a/addressbook/backend/ebook/e-card-simple.h b/addressbook/backend/ebook/e-card-simple.h
deleted file mode 100644
index 2d3b1cb4f4..0000000000
--- a/addressbook/backend/ebook/e-card-simple.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- *   Chris Lahey 
- *   Arturo Espinosa
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright (C) 2000 Helix Code, Inc.
- * Copyright (C) 1999 The Free Software Foundation
- */
-
-#ifndef __E_CARD_SIMPLE_H__
-#define __E_CARD_SIMPLE_H__
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define E_TYPE_CARD_SIMPLE            (e_card_simple_get_type ())
-#define E_CARD_SIMPLE(obj)            (GTK_CHECK_CAST ((obj), E_TYPE_CARD_SIMPLE, ECardSimple))
-#define E_CARD_SIMPLE_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CARD_SIMPLE, ECardSimpleClass))
-#define E_IS_CARD_SIMPLE(obj)         (GTK_CHECK_TYPE ((obj), E_TYPE_CARD_SIMPLE))
-#define E_IS_CARD_SIMPLE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_CARD_SIMPLE))
-
-typedef enum _ECardSimplePhoneId ECardSimplePhoneId;
-typedef enum _ECardSimpleEmailId ECardSimpleEmailId;
-typedef enum _ECardSimpleAddressId ECardSimpleAddressId;
-typedef enum _ECardSimpleType ECardSimpleType;
-typedef enum _ECardSimpleField ECardSimpleField;
-
-enum _ECardSimplePhoneId {
-	E_CARD_SIMPLE_PHONE_ID_ASSISTANT,
-	E_CARD_SIMPLE_PHONE_ID_BUSINESS,
-	E_CARD_SIMPLE_PHONE_ID_BUSINESS_2,
-	E_CARD_SIMPLE_PHONE_ID_BUSINESS_FAX,
-	E_CARD_SIMPLE_PHONE_ID_CALLBACK,
-	E_CARD_SIMPLE_PHONE_ID_CAR,
-	E_CARD_SIMPLE_PHONE_ID_COMPANY,
-	E_CARD_SIMPLE_PHONE_ID_HOME,
-	E_CARD_SIMPLE_PHONE_ID_HOME_2,
-	E_CARD_SIMPLE_PHONE_ID_HOME_FAX,
-	E_CARD_SIMPLE_PHONE_ID_ISDN,
-	E_CARD_SIMPLE_PHONE_ID_MOBILE,
-	E_CARD_SIMPLE_PHONE_ID_OTHER,
-	E_CARD_SIMPLE_PHONE_ID_OTHER_FAX,
-	E_CARD_SIMPLE_PHONE_ID_PAGER,
-	E_CARD_SIMPLE_PHONE_ID_PRIMARY,
-	E_CARD_SIMPLE_PHONE_ID_RADIO,
-	E_CARD_SIMPLE_PHONE_ID_TELEX,
-	E_CARD_SIMPLE_PHONE_ID_TTYTTD,
-	E_CARD_SIMPLE_PHONE_ID_LAST
-};
-
-/* We need HOME and WORK email addresses here. */
-enum _ECardSimpleEmailId {
-	E_CARD_SIMPLE_EMAIL_ID_EMAIL,
-	E_CARD_SIMPLE_EMAIL_ID_EMAIL_2,
-	E_CARD_SIMPLE_EMAIL_ID_EMAIL_3,
-	E_CARD_SIMPLE_EMAIL_ID_LAST
-};
-
-/* Should this include (BILLING/SHIPPING)? */
-enum _ECardSimpleAddressId {
-	E_CARD_SIMPLE_ADDRESS_ID_BUSINESS,
-	E_CARD_SIMPLE_ADDRESS_ID_HOME,
-	E_CARD_SIMPLE_ADDRESS_ID_OTHER,
-	E_CARD_SIMPLE_ADDRESS_ID_LAST
-};
-
-enum _ECardSimpleType {
-	E_CARD_SIMPLE_TYPE_STRING,
-	E_CARD_SIMPLE_TYPE_DATE,
-};
-
-enum _ECardSimpleField {
-	E_CARD_SIMPLE_FIELD_FILE_AS,
-        E_CARD_SIMPLE_FIELD_FULL_NAME,
-        E_CARD_SIMPLE_FIELD_EMAIL,
-        E_CARD_SIMPLE_FIELD_PHONE_PRIMARY,
-        E_CARD_SIMPLE_FIELD_PHONE_BUSINESS,
-        E_CARD_SIMPLE_FIELD_PHONE_HOME,
-        E_CARD_SIMPLE_FIELD_ORG,
-        E_CARD_SIMPLE_FIELD_ADDRESS_BUSINESS,
-        E_CARD_SIMPLE_FIELD_ADDRESS_HOME,
-        E_CARD_SIMPLE_FIELD_PHONE_MOBILE,
-        E_CARD_SIMPLE_FIELD_PHONE_CAR,
-        E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_FAX,
-        E_CARD_SIMPLE_FIELD_PHONE_HOME_FAX,
-        E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_2,
-        E_CARD_SIMPLE_FIELD_PHONE_HOME_2,
-        E_CARD_SIMPLE_FIELD_PHONE_ISDN,
-        E_CARD_SIMPLE_FIELD_PHONE_OTHER,
-        E_CARD_SIMPLE_FIELD_PHONE_PAGER,
-        E_CARD_SIMPLE_FIELD_ADDRESS_OTHER,
-        E_CARD_SIMPLE_FIELD_EMAIL_2,
-        E_CARD_SIMPLE_FIELD_EMAIL_3,
-        E_CARD_SIMPLE_FIELD_URL,
-        E_CARD_SIMPLE_FIELD_ORG_UNIT,
-        E_CARD_SIMPLE_FIELD_OFFICE,
-        E_CARD_SIMPLE_FIELD_TITLE,
-        E_CARD_SIMPLE_FIELD_ROLE,
-        E_CARD_SIMPLE_FIELD_MANAGER,
-        E_CARD_SIMPLE_FIELD_ASSISTANT,
-        E_CARD_SIMPLE_FIELD_NICKNAME,
-        E_CARD_SIMPLE_FIELD_SPOUSE,
-        E_CARD_SIMPLE_FIELD_NOTE,
-        E_CARD_SIMPLE_FIELD_FBURL,
-        E_CARD_SIMPLE_FIELD_ANNIVERSARY,
-        E_CARD_SIMPLE_FIELD_BIRTH_DATE,
-	E_CARD_SIMPLE_FIELD_MAILER,
-	E_CARD_SIMPLE_FIELD_NAME_OR_ORG,
-        E_CARD_SIMPLE_FIELD_LAST
-};
-
-typedef struct _ECardSimple ECardSimple;
-typedef struct _ECardSimpleClass ECardSimpleClass;
-
-struct _ECardSimple {
-	GtkObject object;
-	ECard *card;
-
-	GList *temp_fields;
-
-	ECardPhone *phone[E_CARD_SIMPLE_PHONE_ID_LAST];
-	char *email[E_CARD_SIMPLE_EMAIL_ID_LAST];
-	ECardAddrLabel *address[E_CARD_SIMPLE_ADDRESS_ID_LAST];
-};
-
-struct _ECardSimpleClass {
-	GtkObjectClass parent_class;
-};
-
-typedef void (*ECardSimpleArbitraryCallback) (const ECardArbitrary *arbitrary, gpointer closure);
-	       
-ECardSimple    	     *e_card_simple_new               (ECard *card);
-char           	     *e_card_simple_get_id            (ECardSimple *simple);
-void           	      e_card_simple_set_id            (ECardSimple *simple,
-						       const gchar *character);
-char           	     *e_card_simple_get_vcard         (ECardSimple *simple);
-	       	     				      
-ECardSimple    	     *e_card_simple_duplicate         (ECardSimple *simple);
-	       	     				      
-char     	     *e_card_simple_get               (ECardSimple          *simple,
-						       ECardSimpleField      field);
-const char     	     *e_card_simple_get_const         (ECardSimple          *simple,
-						       ECardSimpleField      field);
-void           	      e_card_simple_set               (ECardSimple          *simple,
-						       ECardSimpleField      field,
-						       const char           *data);
-	       					       
-ECardSimpleType	      e_card_simple_type              (ECardSimple          *simple,
-						       ECardSimpleField      field);
-const char     	     *e_card_simple_get_name          (ECardSimple          *simple,
-						       ECardSimpleField      field);
-const char     	     *e_card_simple_get_short_name    (ECardSimple          *simple,
-						       ECardSimpleField      field);
-
-
-/* Use these only if building lists of specific types.  It should be
- * easier to use the above if you consider a phone field to be the
- * same as any other field.
- */
-const ECardPhone     *e_card_simple_get_phone         (ECardSimple          *simple,
-						       ECardSimplePhoneId    id);
-const char           *e_card_simple_get_email         (ECardSimple          *simple,
-						       ECardSimpleEmailId    id);
-const ECardAddrLabel *e_card_simple_get_address       (ECardSimple          *simple,
-						       ECardSimpleAddressId  id);
-void                  e_card_simple_set_phone         (ECardSimple          *simple,
-						       ECardSimplePhoneId    id,
-						       const ECardPhone     *phone);
-void                  e_card_simple_set_email         (ECardSimple          *simple,
-						       ECardSimpleEmailId    id,
-						       const char           *email);
-void                  e_card_simple_set_address       (ECardSimple          *simple,
-						       ECardSimpleAddressId  id,
-						       const ECardAddrLabel *address);
-
-void                  e_card_simple_arbitrary_foreach (ECardSimple                  *simple,
-						       ECardSimpleArbitraryCallback *callback,
-						       gpointer                      closure);
-const ECardArbitrary *e_card_simple_get_arbitrary     (ECardSimple          *simple,
-						       const char           *key);
-/* Any of these except key can be NULL */	      
-void                  e_card_simple_set_arbitrary     (ECardSimple          *simple,
-						       const char           *key,
-						       const char           *type,
-						       const char           *value);
-						      
-void                  e_card_simple_sync_card         (ECardSimple *simple);
-
-/* Standard Gtk function */			      
-GtkType               e_card_simple_get_type          (void);
-
-#endif /* ! __E_CARD_SIMPLE_H__ */
diff --git a/addressbook/backend/ebook/e-card-types.h b/addressbook/backend/ebook/e-card-types.h
deleted file mode 100644
index a2563d4bf6..0000000000
--- a/addressbook/backend/ebook/e-card-types.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- *   Arturo Espinosa
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright (C) 2000 Helix Code, Inc.
- * Copyright (C) 1999 The Free Software Foundation
- */
-
-#ifndef __E_CARD_TYPES_H__
-#define __E_CARD_TYPES_H__
-
-/* IDENTIFICATION PROPERTIES */
-
-typedef struct {
-	char            *prefix;        /* Mr. */
-	char            *given;         /* John */
-	char            *additional;    /* Quinlan */
-	char            *family;        /* Public */
-	char            *suffix;        /* Esq. */
-} ECardName;
-
-typedef struct {
-	int year;
-	int month;
-	int day;
-} ECardDate;
-
-/* TELECOMMUNICATIONS ADDRESSING PROPERTIES */
-
-typedef enum {
-	E_CARD_PHONE_PREF  = 1 << 0,
-	E_CARD_PHONE_WORK  = 1 << 1,
-	E_CARD_PHONE_HOME  = 1 << 2,
-	E_CARD_PHONE_VOICE = 1 << 3,
-	E_CARD_PHONE_FAX   = 1 << 4,
-	E_CARD_PHONE_MSG   = 1 << 5,
-	E_CARD_PHONE_CELL  = 1 << 6,
-	E_CARD_PHONE_PAGER = 1 << 7,
-	E_CARD_PHONE_BBS   = 1 << 8,
-	E_CARD_PHONE_MODEM = 1 << 9,
-	E_CARD_PHONE_CAR   = 1 << 10,
-	E_CARD_PHONE_ISDN  = 1 << 11,
-	E_CARD_PHONE_VIDEO = 1 << 12 
-} ECardPhoneFlags;
-
-typedef struct {
-	ECardPhoneFlags  flags;
-	char            *number;
-} ECardPhone;
-
-/* DELIVERY ADDRESSING PROPERTIES */
-
-typedef enum {
-	E_CARD_ADDR_HOME   = 1 << 0, 
-	E_CARD_ADDR_WORK   = 1 << 1,
-	E_CARD_ADDR_POSTAL = 1 << 2, 
-	E_CARD_ADDR_PARCEL = 1 << 3, 
-	E_CARD_ADDR_DOM    = 1 << 4,
-	E_CARD_ADDR_INTL   = 1 << 5 
-} ECardAddressFlags;
-
-typedef struct {
-	ECardAddressFlags  flags;
-
-	char     	  *po;
-	char     	  *ext;
-	char     	  *street;
-	char     	  *city;
-	char     	  *region;
-	char     	  *code;
-	char     	  *country;
-} ECardDeliveryAddress;
-
-typedef struct {
-	ECardAddressFlags  flags;
-	char              *data;
-} ECardAddrLabel;
-
-/* ARBITRARY PROPERTIES */
-
-typedef struct {
-	char *key;
-	char *type;
-	char *value;
-} ECardArbitrary;
-
-/* PILOT SYNC STATUS */
-
-enum {
-	E_CARD_PILOT_STATUS_NONE,
-	E_CARD_PILOT_STATUS_MOD,
-	E_CARD_PILOT_STATUS_DEL
-};
-
-#endif /* __E_CARD_TYPES_H__ */
diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c
deleted file mode 100644
index a81544dcd3..0000000000
--- a/addressbook/backend/ebook/e-card.c
+++ /dev/null
@@ -1,3295 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors: 
- *   Arturo Espinosa (arturo@nuclecu.unam.mx)
- *   Nat Friedman    (nat@helixcode.com)
- *
- * Copyright (C) 2000 Helix Code, Inc.
- * Copyright (C) 1999 The Free Software Foundation
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include "e-card.h"
-#include "e-card-pairs.h"
-#include "e-name-western.h"
-
-#include 
-
-#define is_a_prop_of(obj,prop) (isAPropertyOf ((obj),(prop)))
-#define str_val(obj) (the_str = (vObjectValueType (obj))? fakeCString (vObjectUStringZValue (obj)) : calloc (1, 1))
-#define has(obj,prop) (vo = isAPropertyOf ((obj), (prop)))
-
-#define XEV_PILOT_ID "X-EVOLUTION-PILOTID"
-#define XEV_PILOT_STATUS "X-EVOLUTION-PILOTSTATUS"
-#define XEV_ARBITRARY "X-EVOLUTION-ARBITRARY"
-
-/* Object argument IDs */
-enum {
-	ARG_0,
-	ARG_FILE_AS,
-	ARG_FULL_NAME,
-	ARG_NAME,
-	ARG_ADDRESS,
-	ARG_ADDRESS_LABEL,
-	ARG_PHONE,
-	ARG_EMAIL,
-	ARG_BIRTH_DATE,
-	ARG_URL,
-	ARG_ORG,
-	ARG_ORG_UNIT,
-	ARG_OFFICE,
-	ARG_TITLE,
-	ARG_ROLE,
-	ARG_MANAGER,
-	ARG_ASSISTANT,
-	ARG_NICKNAME,
-	ARG_SPOUSE,
-	ARG_ANNIVERSARY,
-	ARG_MAILER,
-	ARG_FBURL,
-	ARG_NOTE,
-	ARG_CATEGORIES,
-	ARG_CATEGORY_LIST,
-	ARG_PILOTID,
-	ARG_PILOTSTATUS,
-	ARG_ARBITRARY,
-	ARG_ID,
-};
-
-#if 0
-static VObject *card_convert_to_vobject (ECard *crd);
-#endif
-static void parse(ECard *card, VObject *vobj);
-static void e_card_init (ECard *card);
-static void e_card_class_init (ECardClass *klass);
-
-static void e_card_destroy (GtkObject *object);
-static void e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-static void e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-
-static void assign_string(VObject *vobj, char **string);
-
-char *e_v_object_get_child_value(VObject *vobj, char *name);
-static ECardDate e_card_date_from_string (char *str);
-
-static void parse_bday(ECard *card, VObject *object);
-static void parse_full_name(ECard *card, VObject *object);
-static void parse_file_as(ECard *card, VObject *object);
-static void parse_name(ECard *card, VObject *object);
-static void parse_email(ECard *card, VObject *object);
-static void parse_phone(ECard *card, VObject *object);
-static void parse_address(ECard *card, VObject *object);
-static void parse_address_label(ECard *card, VObject *object);
-static void parse_url(ECard *card, VObject *object);
-static void parse_org(ECard *card, VObject *object);
-static void parse_office(ECard *card, VObject *object);
-static void parse_title(ECard *card, VObject *object);
-static void parse_role(ECard *card, VObject *object);
-static void parse_manager(ECard *card, VObject *object);
-static void parse_assistant(ECard *card, VObject *object);
-static void parse_nickname(ECard *card, VObject *object);
-static void parse_spouse(ECard *card, VObject *object);
-static void parse_anniversary(ECard *card, VObject *object);
-static void parse_mailer(ECard *card, VObject *object);
-static void parse_fburl(ECard *card, VObject *object);
-static void parse_note(ECard *card, VObject *object);
-static void parse_categories(ECard *card, VObject *object);
-static void parse_pilot_id(ECard *card, VObject *object);
-static void parse_pilot_status(ECard *card, VObject *object);
-static void parse_arbitrary(ECard *card, VObject *object);
-static void parse_id(ECard *card, VObject *object);
-
-static ECardPhoneFlags get_phone_flags (VObject *vobj);
-static void set_phone_flags (VObject *vobj, ECardPhoneFlags flags);
-static ECardAddressFlags get_address_flags (VObject *vobj);
-static void set_address_flags (VObject *vobj, ECardAddressFlags flags);
-
-typedef void (* ParsePropertyFunc) (ECard *card, VObject *object);
-
-struct {
-	char *key;
-	ParsePropertyFunc function;
-} attribute_jump_array[] = 
-{
-	{ VCFullNameProp,            parse_full_name },
-	{ "X-EVOLUTION-FILE-AS",     parse_file_as },
-	{ VCNameProp,                parse_name },
-	{ VCBirthDateProp,           parse_bday },
-	{ VCEmailAddressProp,        parse_email },
-	{ VCTelephoneProp,           parse_phone },
-	{ VCAdrProp,                 parse_address },
-	{ VCDeliveryLabelProp,       parse_address_label },
-	{ VCURLProp,                 parse_url },
-	{ VCOrgProp,                 parse_org },
-	{ "X-EVOLUTION-OFFICE",      parse_office },
-	{ VCTitleProp,               parse_title },
-	{ VCBusinessRoleProp,        parse_role },
-	{ "X-EVOLUTION-MANAGER",     parse_manager },
-	{ "X-EVOLUTION-ASSISTANT",   parse_assistant },
-	{ "NICKNAME",                parse_nickname },
-	{ "X-EVOLUTION-SPOUSE",      parse_spouse },
-	{ "X-EVOLUTION-ANNIVERSARY", parse_anniversary },   
-	{ VCMailerProp,              parse_mailer },
-	{ "FBURL",                   parse_fburl },
-	{ VCNoteProp,                parse_note },
-	{ "CATEGORIES",              parse_categories },
-	{ XEV_PILOT_ID,              parse_pilot_id },
-	{ XEV_PILOT_STATUS,          parse_pilot_status },
-	{ XEV_ARBITRARY,             parse_arbitrary },
-	{ VCUniqueStringProp,        parse_id }
-};
-
-/**
- * e_card_get_type:
- * @void: 
- * 
- * Registers the &ECard class if necessary, and returns the type ID
- * associated to it.
- * 
- * Return value: The type ID of the &ECard class.
- **/
-GtkType
-e_card_get_type (void)
-{
-	static GtkType card_type = 0;
-
-	if (!card_type) {
-		GtkTypeInfo card_info = {
-			"ECard",
-			sizeof (ECard),
-			sizeof (ECardClass),
-			(GtkClassInitFunc) e_card_class_init,
-			(GtkObjectInitFunc) e_card_init,
-			NULL, /* reserved_1 */
-			NULL, /* reserved_2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		card_type = gtk_type_unique (gtk_object_get_type (), &card_info);
-	}
-
-	return card_type;
-}
-
-/**
- * e_card_new:
- * @vcard: a string in vCard format
- *
- * Returns: a new #ECard that wraps the @vcard.
- */
-ECard *
-e_card_new (char *vcard)
-{
-	ECard *card = E_CARD(gtk_type_new(e_card_get_type()));
-	VObject *vobj = Parse_MIME(vcard, strlen(vcard));
-	while(vobj) {
-		VObject *next;
-		parse(card, vobj);
-		next = nextVObjectInList(vobj);
-		cleanVObject(vobj);
-		vobj = next;
-	}
-	return card;
-}
-
-ECard *e_card_duplicate(ECard *card)
-{
-	char *vcard = e_card_get_vcard(card);
-	ECard *new_card = e_card_new(vcard);
-	g_free (vcard);
-	return new_card;
-}
-
-/**
- * e_card_get_id:
- * @card: an #ECard
- *
- * Returns: a string representing the id of the card, which is unique
- * within its book.
- */
-char *
-e_card_get_id (ECard *card)
-{
-	return card->id;
-}
-
-/**
- * e_card_get_id:
- * @card: an #ECard
- * @id: a id in string format
- *
- * Sets the identifier of a card, which should be unique within its
- * book.
- */
-void
-e_card_set_id (ECard *card, const char *id)
-{
-	if ( card->id )
-		g_free(card->id);
-	card->id = g_strdup(id);
-}
-
-/**
- * e_card_get_vcard:
- * @card: an #ECard
- *
- * Returns: a string in vCard format, which is wrapped by the @card.
- */
-char
-*e_card_get_vcard (ECard *card)
-{
-	VObject *vobj; /*, *vprop; */
-	char *temp, *ret_val;
-	
-	vobj = newVObject (VCCardProp);
-
-	if ( card->file_as && *card->file_as )
-		addPropValue(vobj, "X-EVOLUTION-FILE-AS", card->file_as);
-	else if (card->file_as)
-		addProp(vobj, "X-EVOLUTION-FILE_AS");
-
-	if ( card->fname )
-		addPropValue(vobj, VCFullNameProp, card->fname);
-
-	if ( card->name && (card->name->prefix || card->name->given || card->name->additional || card->name->family || card->name->suffix) ) {
-		VObject *nameprop;
-		nameprop = addProp(vobj, VCNameProp);
-		if ( card->name->prefix )
-			addPropValue(nameprop, VCNamePrefixesProp, card->name->prefix);
-		if ( card->name->given )
-			addPropValue(nameprop, VCGivenNameProp, card->name->given);
-		if ( card->name->additional )
-			addPropValue(nameprop, VCAdditionalNamesProp, card->name->additional);
-		if ( card->name->family )
-			addPropValue(nameprop, VCFamilyNameProp, card->name->family);
-		if ( card->name->suffix )
-			addPropValue(nameprop, VCNameSuffixesProp, card->name->suffix);
-	}
-
-
-	if ( card->address ) {
-		EIterator *iterator = e_list_get_iterator(card->address);
-		for ( ; e_iterator_is_valid(iterator) ;e_iterator_next(iterator) ) {
-			VObject *addressprop;
-			ECardDeliveryAddress *address = (ECardDeliveryAddress *) e_iterator_get(iterator);
-			addressprop = addProp(vobj, VCAdrProp);
-			
-			set_address_flags (addressprop, address->flags);
-			if ( address->po )
-				addPropValue(addressprop, VCPostalBoxProp, address->po);
-			if ( address->ext )
-				addPropValue(addressprop, VCExtAddressProp, address->ext);
-			if ( address->street )
-				addPropValue(addressprop, VCStreetAddressProp, address->street);
-			if ( address->city )
-				addPropValue(addressprop, VCCityProp, address->city);
-			if ( address->region )
-				addPropValue(addressprop, VCRegionProp, address->region);
-			if ( address->code )
-				addPropValue(addressprop, VCPostalCodeProp, address->code);
-			if ( address->country )
-				addPropValue(addressprop, VCCountryNameProp, address->country);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-	}
-
-	if ( card->address_label ) {
-		EIterator *iterator = e_list_get_iterator(card->address_label);
-		for ( ; e_iterator_is_valid(iterator) ;e_iterator_next(iterator) ) {
-			VObject *labelprop;
-			ECardAddrLabel *address_label = (ECardAddrLabel *) e_iterator_get(iterator);
-			if (address_label->data)
-				labelprop = addPropValue(vobj, VCDeliveryLabelProp, address_label->data);
-			else
-				labelprop = addProp(vobj, VCDeliveryLabelProp);
-			
-			set_address_flags (labelprop, address_label->flags);
-			addProp(labelprop, VCQuotedPrintableProp);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-	}
-
-	if ( card->phone ) { 
-		EIterator *iterator = e_list_get_iterator(card->phone);
-		for ( ; e_iterator_is_valid(iterator) ;e_iterator_next(iterator) ) {
-			VObject *phoneprop;
-			ECardPhone *phone = (ECardPhone *) e_iterator_get(iterator);
-			phoneprop = addPropValue(vobj, VCTelephoneProp, phone->number);
-			
-			set_phone_flags (phoneprop, phone->flags);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-	}
-
-	if ( card->email ) { 
-		EIterator *iterator = e_list_get_iterator(card->email);
-		for ( ; e_iterator_is_valid(iterator) ;e_iterator_next(iterator) ) {
-			VObject *emailprop;
-			emailprop = addPropValue(vobj, VCEmailAddressProp, (char *) e_iterator_get(iterator));
-			addProp (emailprop, VCInternetProp);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-	}
-
-	if ( card->bday ) {
-		ECardDate date;
-		char *value;
-		date = *card->bday;
-		date.year = MIN(date.year, 9999);
-		date.month = MIN(date.month, 12);
-		date.day = MIN(date.day, 31);
-		value = g_strdup_printf("%04d-%02d-%02d", date.year, date.month, date.day);
-		addPropValue(vobj, VCBirthDateProp, value);
-		g_free(value);
-	}
-
-	if (card->url)
-		addPropValue(vobj, VCURLProp, card->url);
-
-	if (card->org || card->org_unit) {
-		VObject *orgprop;
-		orgprop = addProp(vobj, VCOrgProp);
-		
-		if (card->org)
-			addPropValue(orgprop, VCOrgNameProp, card->org);
-		if (card->org_unit)
-			addPropValue(orgprop, VCOrgUnitProp, card->org_unit);
-	}
-	
-	if (card->office)
-		addPropValue(vobj, "X-EVOLUTION-OFFICE", card->office);
-
-	if (card->title)
-		addPropValue(vobj, VCTitleProp, card->title);
-
-	if (card->role)
-		addPropValue(vobj, VCBusinessRoleProp, card->role);
-	
-	if (card->manager)
-		addPropValue(vobj, "X-EVOLUTION-MANAGER", card->manager);
-	
-	if (card->assistant)
-		addPropValue(vobj, "X-EVOLUTION-ASSISTANT", card->assistant);
-	
-	if (card->nickname)
-		addPropValue(vobj, "NICKNAME", card->nickname);
-
-	if (card->spouse)
-		addPropValue(vobj, "X-EVOLUTION-SPOUSE", card->spouse);
-
-	if ( card->anniversary ) {
-		ECardDate date;
-		char *value;
-		date = *card->anniversary;
-		date.year = MIN(date.year, 9999);
-		date.month = MIN(date.month, 12);
-		date.day = MIN(date.day, 31);
-		value = g_strdup_printf("%04d-%02d-%02d", date.year, date.month, date.day);
-		addPropValue(vobj, "X-EVOLUTION-ANNIVERSARY", value);
-		g_free(value);
-	}
-
-	if (card->mailer) {
-		addPropValue(vobj, VCMailerProp, card->mailer);
-	}
-	
-	if (card->fburl)
-		addPropValue(vobj, "FBURL", card->fburl);
-	
-	if (card->note)
-		addPropValue(vobj, VCNoteProp, card->note);
-
-	if (card->categories) {
-		EIterator *iterator;
-		int length = 0;
-		char *string;
-		char *stringptr;
-		for (iterator = e_list_get_iterator(card->categories); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			length += strlen(e_iterator_get(iterator)) + 1;
-		}
-		string = g_new(char, length + 1);
-		stringptr = string;
-		*stringptr = 0;
-		for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			strcpy(stringptr, e_iterator_get(iterator));
-			stringptr += strlen(stringptr);
-			*stringptr = ',';
-			stringptr++;
-			*stringptr = 0;
-		}
-		if (stringptr > string) {
-			stringptr --;
-			*stringptr = 0;
-		}
-		addPropValue (vobj, "CATEGORIES", string);
-		g_free(string);
-	}
-
-	if (card->pilot_id) {
-		gchar *pilotid_str;
-		pilotid_str = g_strdup_printf ("%d", card->pilot_id);
-		addPropValue (vobj, XEV_PILOT_ID, pilotid_str);
-		g_free (pilotid_str);
-	}
-
-	if (card->pilot_status) {
-		gchar *pilotstatus_str;
-		pilotstatus_str = g_strdup_printf ("%d", card->pilot_status);
-		addPropValue (vobj, XEV_PILOT_STATUS, pilotstatus_str);
-		g_free (pilotstatus_str);
-	}
-
-	if (card->arbitrary) {
-		EIterator *iterator;
-		for (iterator = e_list_get_iterator(card->arbitrary); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-			const ECardArbitrary *arbitrary = e_iterator_get(iterator);
-			VObject *arb_object;
-			if (arbitrary->value) {
-				arb_object = addPropValue (vobj, XEV_ARBITRARY, arbitrary->value);
-			} else {
-				arb_object = addProp (vobj, XEV_ARBITRARY);
-			}
-			if (arbitrary->type) {
-				addPropValue (arb_object, "TYPE", arbitrary->type);
-			}
-			if (arbitrary->key) {
-				addProp (arb_object, arbitrary->key);
-			}
-		}
-	}
-
-	if (card->id)
-		addPropValue (vobj, VCUniqueStringProp, card->id);
-#if 0
-	
-	
-	if (crd->photo.prop.used) {
-		vprop = addPropSizedValue (vobj, VCPhotoProp, 
-					  crd->photo.data, crd->photo.size);
-		add_PhotoType (vprop, crd->photo.type);
-		add_CardProperty (vprop, &crd->photo.prop);
-	}
-
-	if (crd->xtension.l) {
-		GList *node;
-		
-		for (node = crd->xtension.l; node; node = node->next) {
-			CardXProperty *xp = (CardXProperty *) node->data;
-			addPropValue (vobj, xp->name, xp->data);
-			add_CardProperty (vobj, &xp->prop);
-		}
-	}
-	
-	if (crd->timezn.prop.used) {
-		char *str;
-		
-		str = card_timezn_str (crd->timezn);
-		vprop = addPropValue (vobj, VCTimeZoneProp, str);
-		free (str);
-		add_CardProperty (vprop, &crd->timezn.prop);
-	}
-	
-	if (crd->geopos.prop.used) {
-		char *str;
-		
-		str = card_geopos_str (crd->geopos);
-		vprop = addPropValue (vobj, VCGeoLocationProp, str);
-		free (str);
-		add_CardProperty (vprop, &crd->geopos.prop);
-	}
-	
-	if (crd->logo.prop.used) {
-		vprop = addPropSizedValue (vobj, VCLogoProp, 
-					  crd->logo.data, crd->logo.size);
-		add_PhotoType (vprop, crd->logo.type);
-		add_CardProperty (vprop, &crd->logo.prop);
-	}
-	
-	if (crd->agent)
-	  addVObjectProp (vobj, card_convert_to_vobject (crd->agent));
-	
-	if (crd->sound.prop.used) {
-		if (crd->sound.type != SOUND_PHONETIC)
-		  vprop = addPropSizedValue (vobj, VCPronunciationProp,
-					    crd->sound.data, crd->sound.size);
-		else
-		  vprop = addPropValue (vobj, VCPronunciationProp, 
-				       crd->sound.data);
-		
-		add_SoundType (vprop, crd->sound.type);
-		add_CardProperty (vprop, &crd->sound.prop);
-	}
-	
-	if (crd->key.prop.used) {
-		vprop = addPropValue (vobj, VCPublicKeyProp, crd->key.data);
-		add_KeyType (vprop, crd->key.type);
-		add_CardProperty (vprop, &crd->key.prop);
-	}
-#endif
-	temp = writeMemVObject(NULL, NULL, vobj);
-	ret_val = g_strdup(temp);
-	free(temp);
-	cleanVObject(vobj);
-	return ret_val;
-}
-
-static void
-parse_file_as(ECard *card, VObject *vobj)
-{
-	if ( card->file_as )
-		g_free(card->file_as);
-	assign_string(vobj, &(card->file_as));
-}
-
-static void
-parse_name(ECard *card, VObject *vobj)
-{
-	if ( card->name ) {
-		e_card_name_free(card->name);
-	}
-	card->name = g_new(ECardName, 1);
-
-	card->name->family     = e_v_object_get_child_value (vobj, VCFamilyNameProp);
-	card->name->given      = e_v_object_get_child_value (vobj, VCGivenNameProp);
-	card->name->additional = e_v_object_get_child_value (vobj, VCAdditionalNamesProp);
-	card->name->prefix     = e_v_object_get_child_value (vobj, VCNamePrefixesProp);
-	card->name->suffix     = e_v_object_get_child_value (vobj, VCNameSuffixesProp);
-}
-
-static void
-parse_full_name(ECard *card, VObject *vobj)
-{
-	if ( card->fname )
-		g_free(card->fname);
-	assign_string(vobj, &(card->fname));
-}
-
-static void
-parse_email(ECard *card, VObject *vobj)
-{
-	char *next_email;
-	EList *list;
-
-	assign_string(vobj, &next_email);
-	gtk_object_get(GTK_OBJECT(card),
-		       "email", &list,
-		       NULL);
-	e_list_append(list, next_email);
-	g_free (next_email);
-}
-
-static void
-parse_bday(ECard *card, VObject *vobj)
-{
-	if ( vObjectValueType (vobj) ) {
-		char *str = fakeCString (vObjectUStringZValue (vobj));
-		if ( card->bday )
-			g_free(card->bday);
-		card->bday = g_new(ECardDate, 1);
-		*(card->bday) = e_card_date_from_string(str);
-		free(str);
-	}
-}
-
-static void
-parse_phone(ECard *card, VObject *vobj)
-{
-	ECardPhone *next_phone = g_new(ECardPhone, 1);
-	EList *list;
-
-	assign_string(vobj, &(next_phone->number));
-	next_phone->flags = get_phone_flags(vobj);
-
-	gtk_object_get(GTK_OBJECT(card),
-		       "phone", &list,
-		       NULL);
-	e_list_append(list, next_phone);
-	e_card_phone_free (next_phone);
-}
-
-static void
-parse_address(ECard *card, VObject *vobj)
-{
-	ECardDeliveryAddress *next_addr = g_new(ECardDeliveryAddress, 1);
-	EList *list;
-
-	next_addr->flags   = get_address_flags (vobj);
-	next_addr->po      = e_v_object_get_child_value (vobj, VCPostalBoxProp);
-	next_addr->ext     = e_v_object_get_child_value (vobj, VCExtAddressProp);
-	next_addr->street  = e_v_object_get_child_value (vobj, VCStreetAddressProp);
-	next_addr->city    = e_v_object_get_child_value (vobj, VCCityProp);
-	next_addr->region  = e_v_object_get_child_value (vobj, VCRegionProp);
-	next_addr->code    = e_v_object_get_child_value (vobj, VCPostalCodeProp);
-	next_addr->country = e_v_object_get_child_value (vobj, VCCountryNameProp);
-
-	gtk_object_get(GTK_OBJECT(card),
-		       "address", &list,
-		       NULL);
-	e_list_append(list, next_addr);
-	e_card_delivery_address_free (next_addr);
-}
-
-static void
-parse_address_label(ECard *card, VObject *vobj)
-{
-	ECardAddrLabel *next_addr = g_new(ECardAddrLabel, 1);
-	EList *list;
-
-	next_addr->flags   = get_address_flags (vobj);
-	assign_string(vobj, &next_addr->data);
-
-	gtk_object_get(GTK_OBJECT(card),
-		       "address_label", &list,
-		       NULL);
-	e_list_append(list, next_addr);
-	e_card_address_label_free (next_addr);
-}
-
-static void
-parse_url(ECard *card, VObject *vobj)
-{
-	if (card->url)
-		g_free(card->url);
-	assign_string(vobj, &(card->url));
-}
-
-static void
-parse_org(ECard *card, VObject *vobj)
-{
-	char *temp;
-	
-	temp = e_v_object_get_child_value(vobj, VCOrgNameProp);
-	if (temp) {
-		if (card->org)
-			g_free(card->org);
-		card->org = temp;
-	}
-	temp = e_v_object_get_child_value(vobj, VCOrgUnitProp);
-	if (temp) {
-		if (card->org_unit)
-			g_free(card->org_unit);
-		card->org_unit = temp;
-	}
-}
-
-static void
-parse_office(ECard *card, VObject *vobj)
-{
-	if ( card->office )
-		g_free(card->office);
-	assign_string(vobj, &(card->office));
-}
-
-static void
-parse_title(ECard *card, VObject *vobj)
-{
-	if ( card->title )
-		g_free(card->title);
-	assign_string(vobj, &(card->title));
-}
-
-static void
-parse_role(ECard *card, VObject *vobj)
-{
-	if (card->role)
-		g_free(card->role);
-	assign_string(vobj, &(card->role));
-}
-
-static void
-parse_manager(ECard *card, VObject *vobj)
-{
-	if ( card->manager )
-		g_free(card->manager);
-	assign_string(vobj, &(card->manager));
-}
-
-static void
-parse_assistant(ECard *card, VObject *vobj)
-{
-	if ( card->assistant )
-		g_free(card->assistant);
-	assign_string(vobj, &(card->assistant));
-}
-
-static void
-parse_nickname(ECard *card, VObject *vobj)
-{
-	if (card->nickname)
-		g_free(card->nickname);
-	assign_string(vobj, &(card->nickname));
-}
-
-static void
-parse_spouse(ECard *card, VObject *vobj)
-{
-	if ( card->spouse )
-		g_free(card->spouse);
-	assign_string(vobj, &(card->spouse));
-}
-
-static void
-parse_anniversary(ECard *card, VObject *vobj)
-{
-	if ( vObjectValueType (vobj) ) {
-		char *str = fakeCString (vObjectUStringZValue (vobj));
-		if (card->anniversary)
-			g_free(card->anniversary);
-		card->anniversary = g_new(ECardDate, 1);
-		*(card->anniversary) = e_card_date_from_string(str);
-		free(str);
-	}
-}
-
-static void
-parse_mailer(ECard *card, VObject *vobj)
-{
-	if ( card->mailer )
-		g_free(card->mailer);
-	assign_string(vobj, &(card->mailer));
-}
-
-static void
-parse_fburl(ECard *card, VObject *vobj)
-{
-	g_free(card->fburl);
-	assign_string(vobj, &(card->fburl));
-}
-
-static void
-parse_note(ECard *card, VObject *vobj)
-{
-	g_free(card->note);
-	assign_string(vobj, &(card->note));
-}
-
-static void
-add_list_unique(ECard *card, EList *list, char *string)
-{
-	char *temp = e_strdup_strip(string);
-	EIterator *iterator;
-
-	if (!*temp) {
-		g_free(temp);
-		return;
-	}
-	for ( iterator = e_list_get_iterator(list); e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-		if (!strcmp(e_iterator_get(iterator), temp)) {
-			break;
-		}
-	}
-	if (!e_iterator_is_valid(iterator)) {
-		e_list_append(list, temp);
-	}
-	g_free(temp);
-	gtk_object_unref(GTK_OBJECT(iterator));
-}
-
-static void
-do_parse_categories(ECard *card, char *str)
-{
-	int length = strlen(str);
-	char *copy = g_new(char, length + 1);
-	int i, j;
-	EList *list;
-	gtk_object_get(GTK_OBJECT(card),
-		       "category_list", &list,
-		       NULL);
-	for (i = 0, j = 0; str[i]; i++, j++) {
-		switch (str[i]) {
-		case '\\':
-			i++;
-			if (str[i]) {
-				copy[j] = str[i];
-			} else
-				i--;
-			break;
-		case ',':
-			copy[j] = 0;
-			add_list_unique(card, list, copy);
-			j = -1;
-			break;
-		default:
-			copy[j] = str[i];
-			break;
-		}
-	}
-	copy[j] = 0;
-	add_list_unique(card, list, copy);
-	g_free(copy);
-}
-
-static void
-parse_categories(ECard *card, VObject *vobj)
-{
-	if ( vObjectValueType (vobj) ) {
-		char *str = fakeCString (vObjectUStringZValue (vobj));
-		do_parse_categories(card, str);
-		free(str);
-	}
-}
-
-static void
-parse_pilot_id(ECard *card, VObject *vobj)
-{
-	if ( vObjectValueType (vobj) ) {
-		char *str = fakeCString (vObjectUStringZValue (vobj));
-		card->pilot_id = atoi(str);
-		free(str);
-	}
-}
-
-static void
-parse_pilot_status(ECard *card, VObject *vobj)
-{
-	if ( vObjectValueType (vobj) ) {
-		char *str = fakeCString (vObjectUStringZValue (vobj));
-		card->pilot_status = atoi(str);
-		free(str);
-	}
-}
-
-typedef union ValueItem {
-    const char *strs;
-    const wchar_t *ustrs;
-    unsigned int i;
-    unsigned long l;
-    void *any;
-    VObject *vobj;
-} ValueItem;
-
-struct VObject {
-    VObject *next;
-    const char *id;
-    VObject *prop;
-    unsigned short valType;
-    ValueItem val;
-};
-
-static void
-parse_arbitrary(ECard *card, VObject *vobj)
-{
-	ECardArbitrary *arbitrary = e_card_arbitrary_new();
-	VObjectIterator iterator;
-	EList *list;
-	for ( initPropIterator (&iterator, vobj); moreIteration(&iterator); ) {
-		VObject *temp = nextVObject(&iterator);
-		const char *name = vObjectName(temp);
-		if (name && !strcmp(name, "TYPE")) {
-			g_free(arbitrary->type);
-			assign_string(temp, &(arbitrary->type));
-		} else {
-			g_free(arbitrary->key);
-			arbitrary->key = g_strdup(name);
-		}
-	}
-
-	assign_string(vobj, &(arbitrary->value));
-	
-	gtk_object_get(GTK_OBJECT(card),
-		       "arbitrary", &list,
-		       NULL);
-	e_list_append(list, arbitrary);
-	e_card_arbitrary_free(arbitrary);
-}
-
-static void
-parse_id(ECard *card, VObject *vobj)
-{
-	if ( card->id )
-		g_free(card->id);
-	assign_string(vobj, &(card->id));
-}
-
-static void
-parse_attribute(ECard *card, VObject *vobj)
-{
-	ParsePropertyFunc function = g_hash_table_lookup(E_CARD_CLASS(GTK_OBJECT(card)->klass)->attribute_jump_table, vObjectName(vobj));
-	if ( function )
-		function(card, vobj);
-}
-
-static void
-parse(ECard *card, VObject *vobj)
-{
-	VObjectIterator iterator;
-	initPropIterator(&iterator, vobj);
-	while(moreIteration (&iterator)) {
-		parse_attribute(card, nextVObject(&iterator));
-	}
-	if (!card->name) {
-		if (card->fname) {
-			card->name = e_card_name_from_string(card->fname);
-		}
-	}
-	if (!card->file_as) {
-		if (card->name) {
-			ECardName *name = card->name;
-			char *strings[3], **stringptr;
-			char *string;
-			stringptr = strings;
-			if (name->family && *name->family)
-				*(stringptr++) = name->family;
-			if (name->given && *name->given)
-				*(stringptr++) = name->given;
-			*stringptr = NULL;
-			string = g_strjoinv(", ", strings);
-			card->file_as = string;
-		} else
-			card->file_as = g_strdup("");
-	}
-}
-
-static void
-e_card_class_init (ECardClass *klass)
-{
-	int i;
-	GtkObjectClass *object_class;
-
-	object_class = GTK_OBJECT_CLASS(klass);
-
-	klass->attribute_jump_table = g_hash_table_new(g_str_hash, g_str_equal);
-
-	for ( i = 0; i < sizeof(attribute_jump_array) / sizeof(attribute_jump_array[0]); i++ ) {
-		g_hash_table_insert(klass->attribute_jump_table, attribute_jump_array[i].key, attribute_jump_array[i].function);
-	}
-
-	gtk_object_add_arg_type ("ECard::file_as",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FILE_AS);
-	gtk_object_add_arg_type ("ECard::full_name",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FULL_NAME);  
-	gtk_object_add_arg_type ("ECard::name",
-				 GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_NAME);
-	gtk_object_add_arg_type ("ECard::address",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS);
-	gtk_object_add_arg_type ("ECard::address_label",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS_LABEL);
-	gtk_object_add_arg_type ("ECard::phone",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_PHONE);
-	gtk_object_add_arg_type ("ECard::email",
-				 GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_EMAIL);
-	gtk_object_add_arg_type ("ECard::birth_date",
-				 GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BIRTH_DATE);
-	gtk_object_add_arg_type ("ECard::url",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_URL);  
-	gtk_object_add_arg_type ("ECard::org",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG);
-	gtk_object_add_arg_type ("ECard::org_unit",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG_UNIT);
-	gtk_object_add_arg_type ("ECard::office",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_OFFICE);
-	gtk_object_add_arg_type ("ECard::title",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_TITLE);  
-	gtk_object_add_arg_type ("ECard::role",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ROLE);
-	gtk_object_add_arg_type ("ECard::manager",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MANAGER);
-	gtk_object_add_arg_type ("ECard::assistant",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ASSISTANT);
-	gtk_object_add_arg_type ("ECard::nickname",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NICKNAME);
-	gtk_object_add_arg_type ("ECard::spouse",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_SPOUSE);
-	gtk_object_add_arg_type ("ECard::anniversary",
-				 GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_ANNIVERSARY);
-	gtk_object_add_arg_type ("ECard::mailer",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MAILER);
-	gtk_object_add_arg_type ("ECard::fburl",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FBURL);
-	gtk_object_add_arg_type ("ECard::note",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NOTE);
-	gtk_object_add_arg_type ("ECard::categories",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_CATEGORIES);
-	gtk_object_add_arg_type ("ECard::category_list",
-				 GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CATEGORY_LIST);
-	gtk_object_add_arg_type ("ECard::pilot_id",
-				 GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PILOTID);
-	gtk_object_add_arg_type ("ECard::pilot_status",
-				 GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_PILOTSTATUS);
-	gtk_object_add_arg_type ("ECard::arbitrary",
-				 GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_ARBITRARY);
-	gtk_object_add_arg_type ("ECard::id",
-				 GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ID);
-
-
-	object_class->destroy = e_card_destroy;
-	object_class->get_arg = e_card_get_arg;
-	object_class->set_arg = e_card_set_arg;
-}
-
-ECardPhone *
-e_card_phone_new (void)
-{
-	ECardPhone *newphone = g_new(ECardPhone, 1);
-
-	newphone->number = NULL;
-	newphone->flags = 0;
-	
-	return newphone;
-}
-
-void
-e_card_phone_free (ECardPhone *phone)
-{
-	if ( phone ) {
-		g_free(phone->number);
-
-		g_free(phone);
-	}
-}
-
-ECardPhone *
-e_card_phone_copy (const ECardPhone *phone)
-{
-	if ( phone ) {
-		ECardPhone *phone_copy = g_new(ECardPhone, 1);
-		phone_copy->number = g_strdup(phone->number);
-		phone_copy->flags  = phone->flags;
-		return phone_copy;
-	} else
-		return NULL;
-}
-
-ECardDeliveryAddress *
-e_card_delivery_address_new (void)
-{
-	ECardDeliveryAddress *newaddr = g_new(ECardDeliveryAddress, 1);
-
-	newaddr->po      = NULL;
-	newaddr->ext     = NULL;
-	newaddr->street  = NULL;
-	newaddr->city    = NULL;
-	newaddr->region  = NULL;
-	newaddr->code    = NULL;
-	newaddr->country = NULL;
-	newaddr->flags   = 0;
-
-	return newaddr;
-}
-
-void
-e_card_delivery_address_free (ECardDeliveryAddress *addr)
-{
-	if ( addr ) {
-		g_free(addr->po);
-		g_free(addr->ext);
-		g_free(addr->street);
-		g_free(addr->city);
-		g_free(addr->region);
-		g_free(addr->code);
-		g_free(addr->country);
-
-		g_free(addr);
-	}
-}
-
-ECardDeliveryAddress *
-e_card_delivery_address_copy (const ECardDeliveryAddress *addr)
-{
-	if ( addr ) {
-		ECardDeliveryAddress *addr_copy = g_new(ECardDeliveryAddress, 1);
-		addr_copy->po      = g_strdup(addr->po     );
-		addr_copy->ext     = g_strdup(addr->ext    );
-		addr_copy->street  = g_strdup(addr->street );
-		addr_copy->city    = g_strdup(addr->city   );
-		addr_copy->region  = g_strdup(addr->region );
-		addr_copy->code    = g_strdup(addr->code   );
-		addr_copy->country = g_strdup(addr->country);
-		addr_copy->flags   = addr->flags;
-		return addr_copy;
-	} else
-		return NULL;
-}
-
-char *
-e_card_delivery_address_to_string(const ECardDeliveryAddress *addr)
-{
-	char *strings[4], **stringptr = strings;
-	char *line1, *line22, *line2;
-	char *final;
-	if (addr->po && *addr->po)
-		*(stringptr++) = addr->po;
-	if (addr->street && *addr->street)
-		*(stringptr++) = addr->street;
-	if (addr->ext && *addr->ext)
-		*(stringptr++) = addr->ext;
-	*stringptr = NULL;
-	line1 = g_strjoinv(" ", strings);
-	stringptr = strings;
-	if (addr->region && *addr->region)
-		*(stringptr++) = addr->region;
-	if (addr->code && *addr->code)
-		*(stringptr++) = addr->code;
-	*stringptr = NULL;
-	line22 = g_strjoinv(" ", strings);
-	stringptr = strings;
-	if (addr->city && *addr->city)
-		*(stringptr++) = addr->city;
-	if (line22 && *line22)
-		*(stringptr++) = line22;
-	*stringptr = NULL;
-	line2 = g_strjoinv(", ", strings);
-	stringptr = strings;
-	if (line1 && *line1)
-		*(stringptr++) = line1;
-	if (line2 && *line2)
-		*(stringptr++) = line2;
-	if (addr->country && *addr->country)
-		*(stringptr++) = addr->country;
-	*stringptr = NULL;
-	final = g_strjoinv("\n", strings);
-	g_free(line1);
-	g_free(line22);
-	g_free(line2);
-	return final;
-}
-
-ECardAddrLabel *
-e_card_address_label_new (void)
-{
-	ECardAddrLabel *newaddr = g_new(ECardAddrLabel, 1);
-
-	newaddr->data = NULL;
-	newaddr->flags = 0;
-	
-	return newaddr;
-}
-
-void
-e_card_address_label_free (ECardAddrLabel *addr)
-{
-	if ( addr ) {
-		g_free(addr->data);
-
-		g_free(addr);
-	}
-}
-
-ECardAddrLabel *
-e_card_address_label_copy (const ECardAddrLabel *addr)
-{
-	if ( addr ) {
-		ECardAddrLabel *addr_copy = g_new(ECardAddrLabel, 1);
-		addr_copy->data    = g_strdup(addr->data);
-		addr_copy->flags   = addr->flags;
-		return addr_copy;
-	} else
-		return NULL;
-}
-
-ECardName *e_card_name_new(void)
-{
-	ECardName *newname = g_new(ECardName, 1);
-
-	newname->prefix     = NULL;
-	newname->given      = NULL;
-	newname->additional = NULL;
-	newname->family     = NULL;
-	newname->suffix     = NULL;
-
-	return newname;
-}
-
-void
-e_card_name_free(ECardName *name)
-{
-	if (name) {
-		if ( name->prefix )
-			g_free(name->prefix);
-		if ( name->given )
-			g_free(name->given);
-		if ( name->additional )
-			g_free(name->additional);
-		if ( name->family )
-			g_free(name->family);
-		if ( name->suffix )
-			g_free(name->suffix);
-		g_free ( name );
-	}
-}
-
-ECardName *
-e_card_name_copy(const ECardName *name)
-{
-	if (name) {
-		ECardName *newname = g_new(ECardName, 1);
-		
-		newname->prefix = g_strdup(name->prefix);
-		newname->given = g_strdup(name->given);
-		newname->additional = g_strdup(name->additional);
-		newname->family = g_strdup(name->family);
-		newname->suffix = g_strdup(name->suffix);
-
-		return newname;
-	} else
-		return NULL;
-}
-
-char *
-e_card_name_to_string(const ECardName *name)
-{
-	char *strings[6], **stringptr = strings;
-	if (name->prefix && *name->prefix)
-		*(stringptr++) = name->prefix;
-	if (name->given && *name->given)
-		*(stringptr++) = name->given;
-	if (name->additional && *name->additional)
-		*(stringptr++) = name->additional;
-	if (name->family && *name->family)
-		*(stringptr++) = name->family;
-	if (name->suffix && *name->suffix)
-		*(stringptr++) = name->suffix;
-	*stringptr = NULL;
-	return g_strjoinv(" ", strings);
-}
-
-ECardName *
-e_card_name_from_string(const char *full_name)
-{
-	ECardName *name = g_new(ECardName, 1);
-	ENameWestern *western = e_name_western_parse (full_name);
-	
-	name->prefix     = g_strdup (western->prefix);
-	name->given      = g_strdup (western->first );
-	name->additional = g_strdup (western->middle);
-	name->family     = g_strdup (western->last  );
-	name->suffix     = g_strdup (western->suffix);
-	
-	e_name_western_free(western);
-	
-	return name;
-}
-
-ECardArbitrary *
-e_card_arbitrary_new(void)
-{
-	ECardArbitrary *arbitrary = g_new(ECardArbitrary, 1);
-	arbitrary->key = NULL;
-	arbitrary->type = NULL;
-	arbitrary->value = NULL;
-	return arbitrary;
-}
-
-ECardArbitrary *
-e_card_arbitrary_copy(const ECardArbitrary *arbitrary)
-{
-	if (arbitrary) {
-		ECardArbitrary *arb_copy = g_new(ECardArbitrary, 1);
-		arb_copy->key = g_strdup(arbitrary->key);
-		arb_copy->type = g_strdup(arbitrary->type);
-		arb_copy->value = g_strdup(arbitrary->value);
-		return arb_copy;
-	} else
-		return NULL;
-}
-
-void
-e_card_arbitrary_free(ECardArbitrary *arbitrary)
-{
-	if (arbitrary) {
-		g_free(arbitrary->key);
-		g_free(arbitrary->type);
-		g_free(arbitrary->value);
-	}
-	g_free(arbitrary);
-}
-
-/*
- * ECard lifecycle management and vCard loading/saving.
- */
-
-static void
-e_card_destroy (GtkObject *object)
-{
-	ECard *card = E_CARD(object);
-	g_free(card->id);
-	g_free(card->file_as);
-	g_free(card->fname);
-	if ( card->name )
-		e_card_name_free(card->name);
-	g_free(card->bday);
-
-	g_free(card->url);
-	g_free(card->org);
-	g_free(card->org_unit);
-	g_free(card->office);
-	g_free(card->title);
-	g_free(card->role);
-	g_free(card->manager);
-	g_free(card->assistant);
-	g_free(card->nickname);
-	g_free(card->spouse);
-	g_free(card->anniversary);
-	g_free(card->fburl);
-	g_free(card->note);
-		
-	if (card->categories)
-		gtk_object_unref(GTK_OBJECT(card->categories));
-	if (card->email)
-		gtk_object_unref(GTK_OBJECT(card->email));
-	if (card->phone)
-		gtk_object_unref(GTK_OBJECT(card->phone));
-	if (card->address)
-		gtk_object_unref(GTK_OBJECT(card->address));
-	if (card->address_label)
-		gtk_object_unref(GTK_OBJECT(card->address_label));
-}
-
-
-/* Set_arg handler for the card */
-static void
-e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	ECard *card;
-	
-	card = E_CARD (object);
-
-	switch (arg_id) {
-	case ARG_FILE_AS:
-		g_free(card->file_as);
-		card->file_as = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_FULL_NAME:
-		g_free(card->fname);
-		card->fname = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_NAME:
-		if ( card->name )
-			e_card_name_free(card->name);
-		card->name = GTK_VALUE_POINTER(*arg);
-		break;
-	case ARG_CATEGORIES:
-		if (card->categories)
-			gtk_object_unref(GTK_OBJECT(card->categories));
-		card->categories = NULL;
-		if (GTK_VALUE_STRING(*arg))
-			do_parse_categories(card, GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_CATEGORY_LIST:
-		if (card->categories)
-			gtk_object_unref(GTK_OBJECT(card->categories));
-		card->categories = E_LIST(GTK_VALUE_OBJECT(*arg));
-		if (card->categories)
-			gtk_object_ref(GTK_OBJECT(card->categories));
-		break;
-	case ARG_BIRTH_DATE:
-		g_free(card->bday);
-		card->bday = GTK_VALUE_POINTER(*arg);
-		break;
-	case ARG_URL:
-		g_free(card->url);
-		card->url = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ORG:
-		g_free(card->org);
-		card->org = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ORG_UNIT:
-		g_free(card->org_unit);
-		card->org_unit = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_OFFICE:
-		g_free(card->office);
-		card->office = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_TITLE:
-		g_free(card->title);
-		card->title = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ROLE:
-		g_free(card->role);
-		card->role = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_MANAGER:
-		g_free(card->manager);
-		card->manager = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ASSISTANT:
-		g_free(card->assistant);
-		card->assistant = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_NICKNAME:
-		g_free(card->nickname);
-		card->nickname = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_SPOUSE:
-		g_free(card->spouse);
-		card->spouse = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_ANNIVERSARY:
-		g_free(card->anniversary);
-		card->anniversary = GTK_VALUE_POINTER(*arg);
-		break;
-	case ARG_MAILER:
-		g_free(card->mailer);
-		card->mailer = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_FBURL:
-		g_free(card->fburl);
-		card->fburl = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_NOTE:
-		g_free (card->note);
-		card->note = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	case ARG_PILOTID:
-		card->pilot_id = GTK_VALUE_INT(*arg);
-		break;
-	case ARG_PILOTSTATUS:
-		card->pilot_status = GTK_VALUE_INT(*arg);
-		break;
-	case ARG_ARBITRARY:
-		if (card->arbitrary)
-			gtk_object_unref(GTK_OBJECT(card->arbitrary));
-		card->arbitrary = E_LIST(GTK_VALUE_OBJECT(*arg));
-		if (card->arbitrary)
-			gtk_object_ref(GTK_OBJECT(card->arbitrary));
-		break;
-	case ARG_ID:
-		g_free(card->id);
-		card->id = g_strdup(GTK_VALUE_STRING(*arg));
-		break;
-	default:
-		return;
-	}
-}
-
-/* Get_arg handler for the card */
-static void
-e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	ECard *card;
-
-	card = E_CARD (object);
-
-	switch (arg_id) {
-	case ARG_FILE_AS:
-		GTK_VALUE_STRING (*arg) = card->file_as;
-		break;
-	case ARG_FULL_NAME:
-		GTK_VALUE_STRING (*arg) = card->fname;
-		break;
-	case ARG_NAME:
-		GTK_VALUE_POINTER(*arg) = card->name;
-		break;
-	case ARG_ADDRESS:
-		if (!card->address)
-			card->address = e_list_new((EListCopyFunc) e_card_delivery_address_copy, 
-							(EListFreeFunc) e_card_delivery_address_free,
-							NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->address);
-		break;
-	case ARG_ADDRESS_LABEL:
-		if (!card->address_label)
-			card->address_label = e_list_new((EListCopyFunc) e_card_address_label_copy, 
-							      (EListFreeFunc) e_card_address_label_free,
-							      NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->address_label);
-		break;
-	case ARG_PHONE:
-		if (!card->phone)
-			card->phone = e_list_new((EListCopyFunc) e_card_phone_copy, 
-						      (EListFreeFunc) e_card_phone_free,
-						      NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->phone);
-		break;
-	case ARG_EMAIL:
-		if (!card->email)
-			card->email = e_list_new((EListCopyFunc) g_strdup, 
-						      (EListFreeFunc) g_free,
-						      NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->email);
-		break;
-	case ARG_CATEGORIES:
-		{
-			int i;
-			char ** strs;
-			int length;
-			EIterator *iterator;
-			if (!card->categories)
-				card->categories = e_list_new((EListCopyFunc) g_strdup, 
-								   (EListFreeFunc) g_free,
-								   NULL);
-			length = e_list_length(card->categories);
-			strs = g_new(char *, length + 1);
-			for (iterator = e_list_get_iterator(card->categories), i = 0; e_iterator_is_valid(iterator); e_iterator_next(iterator), i++) {
-				strs[i] = (char *)e_iterator_get(iterator);
-			}
-			strs[i] = 0;
-			GTK_VALUE_STRING(*arg) = g_strjoinv(", ", strs);
-			g_free(strs);
-		}
-		break;
-	case ARG_CATEGORY_LIST:
-		if (!card->categories)
-			card->categories = e_list_new((EListCopyFunc) g_strdup, 
-							   (EListFreeFunc) g_free,
-							   NULL);
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->categories);
-		break;
-	case ARG_BIRTH_DATE:
-		GTK_VALUE_POINTER(*arg) = card->bday;
-		break;
-	case ARG_URL:
-		GTK_VALUE_STRING(*arg) = card->url;
-		break;
-	case ARG_ORG:
-		GTK_VALUE_STRING(*arg) = card->org;
-		break;
-	case ARG_ORG_UNIT:
-		GTK_VALUE_STRING(*arg) = card->org_unit;
-		break;
-	case ARG_OFFICE:
-		GTK_VALUE_STRING(*arg) = card->office;
-		break;
-	case ARG_TITLE:
-		GTK_VALUE_STRING(*arg) = card->title;
-		break;
-	case ARG_ROLE:
-		GTK_VALUE_STRING(*arg) = card->role;
-		break;
-	case ARG_MANAGER:
-		GTK_VALUE_STRING(*arg) = card->manager;
-		break;
-	case ARG_ASSISTANT:
-		GTK_VALUE_STRING(*arg) = card->assistant;
-		break;
-	case ARG_NICKNAME:
-		GTK_VALUE_STRING(*arg) = card->nickname;
-		break;
-	case ARG_SPOUSE:
-		GTK_VALUE_STRING(*arg) = card->spouse;
-		break;
-	case ARG_ANNIVERSARY:
-		GTK_VALUE_POINTER(*arg) = card->anniversary;
-		break;
-	case ARG_MAILER:
-		GTK_VALUE_STRING(*arg) = card->mailer;
-		break;
-	case ARG_FBURL:
-		GTK_VALUE_STRING(*arg) = card->fburl;
-		break;
-	case ARG_NOTE:
-		GTK_VALUE_STRING(*arg) = card->note;
-		break;
-	case ARG_PILOTID:
-		GTK_VALUE_INT(*arg) = card->pilot_id;
-		break;
-	case ARG_PILOTSTATUS:
-		GTK_VALUE_INT(*arg) = card->pilot_status;
-		break;
-	case ARG_ARBITRARY:
-		if (!card->arbitrary)
-			card->arbitrary = e_list_new((EListCopyFunc) e_card_arbitrary_copy,
-							  (EListFreeFunc) e_card_arbitrary_free,
-							  NULL);
-
-		GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->arbitrary);
-		break;
-	case ARG_ID:
-		GTK_VALUE_STRING(*arg) = card->id;
-		break;
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-
-/**
- * e_card_init:
- */
-static void
-e_card_init (ECard *card)
-{
-	card->id = g_strdup("");
-	
-	card->file_as = NULL;
-	card->fname = NULL;
-	card->name = NULL;
-	card->bday = NULL;
-	card->email = NULL;
-	card->phone = NULL;
-	card->address = NULL;
-	card->address_label = NULL;
-	card->url = NULL;
-	card->org = NULL;
-	card->org_unit = NULL;
-	card->office = NULL;
-	card->title = NULL;
-	card->role = NULL;
-	card->manager = NULL;
-	card->assistant = NULL;
-	card->nickname = NULL;
-	card->spouse = NULL;
-	card->anniversary = NULL;
-	card->mailer = NULL;
-	card->fburl = NULL;
-	card->note = NULL;
-	card->categories = NULL;
-	card->pilot_id = 0;
-	card->pilot_status = 0;
-	card->arbitrary = NULL;
-#if 0
-
-	c = g_new0 (ECard, 1);
-	
-	c->fname      = 
-	c->mailer     = 
-	c->role       = 
-	c->comment    = 
-	c->categories = 
-	c->uid        = e_card_prop_str_empty ();
-	
-	c->photo.type = PHOTO_JPEG;
-	c->logo.type  = PHOTO_JPEG;
-	c->rev.utc    = -1;
-	c->sound.type = SOUND_PHONETIC;
-	c->key.type   = KEY_PGP;
-
-	c->categories.prop.encod = ENC_QUOTED_PRINTABLE;
-	c->comment.prop.encod    = ENC_QUOTED_PRINTABLE;
-	
-	c->name.prop   = c->photo.prop = c->bday.prop     = c->timezn.prop   = 
-	c->geopos.prop = c->logo.prop  = c->org.prop      = c->rev.prop      =
-	c->sound.prop  = c->key.prop   = c->deladdr.prop  = c->dellabel.prop =
-	c->phone.prop  = c->email.prop = c->xtension.prop = c->prop = e_card_prop_empty ();
-	
-	c->prop.type            = PROP_CARD;
-	c->fname.prop.type      = PROP_FNAME;
-	c->name.prop.type       = PROP_NAME;
-	c->photo.prop.type      = PROP_PHOTO;
-	c->bday.prop.type       = PROP_BDAY;
-	
-	c->deladdr.prop.type    = PROP_DELADDR_LIST;
-	c->dellabel.prop.type   = PROP_DELLABEL_LIST;
-	c->phone.prop.type      = PROP_PHONE_LIST;
-	c->email.prop.type      = PROP_EMAIL_LIST;
-	c->xtension.prop.type   = PROP_XTENSION_LIST;
-	c->mailer.prop.type     = PROP_MAILER;
-	c->timezn.prop.type     = PROP_TIMEZN;
-	c->geopos.prop.type     = PROP_GEOPOS;
-	c->role.prop.type       = PROP_ROLE;
-	c->logo.prop.type       = PROP_LOGO;
-	c->org.prop.type        = PROP_ORG;
-	c->categories.prop.type = PROP_CATEGORIES;
-	c->comment.prop.type    = PROP_COMMENT;
-	c->rev.prop.type        = PROP_REV;
-	c->sound.prop.type      = PROP_SOUND;
-	c->uid.prop.type 	= PROP_UID;
-	c->key.prop.type 	= PROP_KEY;
-	
-	return c;
-#endif
-}
-
-GList *
-e_card_load_cards_from_file(const char *filename)
-{
-	VObject *vobj = Parse_MIME_FromFileName((char *) filename);
-	GList *list = NULL;
-	while(vobj) {
-		VObject *next;
-		ECard *card = E_CARD(gtk_type_new(e_card_get_type()));
-		parse(card, vobj);
-		next = nextVObjectInList(vobj);
-		cleanVObject(vobj);
-		vobj = next;
-		list = g_list_prepend(list, card);
-	}
-	list = g_list_reverse(list);
-	return list;
-}
-
-static void
-assign_string(VObject *vobj, char **string)
-{
-	int type = vObjectValueType(vobj);
-	char *str;
-
-	switch(type) {
-	case VCVT_STRINGZ:
-		*string = g_strdup (vObjectStringZValue(vobj));
-		break;
-	case VCVT_USTRINGZ:
-		str = (vObjectValueType (vobj) ? fakeCString (vObjectUStringZValue (vobj)) : calloc(1, 1));
-		*string = g_strdup(str);
-		free(str);
-		break;
-	default:
-		*string = g_strdup("");
-		break;
-	}
-}
-
-#if 0
-static void
-e_card_str_free (CardStrProperty *sp)
-{
-	g_free (sp->str);
-
-	e_card_prop_free (sp->prop);
-}
-
-static void
-e_card_photo_free (CardPhoto *photo)
-{
-	g_free (photo->data);
-
-	e_card_prop_free (photo->prop);
-}
-
-/**
- * e_card_free:
- */
-void
-e_card_free (ECard *card)
-{
-	GList *l;
-
-	g_return_if_fail (card != NULL);
-
-	e_card_name_free (& card->name);
-	e_card_str_free  (& card->fname);
-
-	e_card_photo_free (card->photo);
-
-	e_card_logo_free (card->logo);
-	e_card_org_free (card->org);
-	e_card_key_free (card->key);
-	e_card_sound_free (card->sound);
-
-	e_card_prop_str_free (& card->mailer);
-	e_card_prop_str_free (& card->role);
-	e_card_prop_str_free (& card->categories);
-	e_card_prop_str_free (& card->comment);
-	e_card_prop_str_free (& card->uid);
-
-	/* address is a little more complicated */
-	card_prop_free (card->deladdr.prop);
-	while ((l = card->deladdr.l)) {
-
-		e_card_deladdr_free ((CardDelAddr *) l->data);
-
-		card->deladdr.l = g_list_remove_link (card->deladdr.l, l);
-		g_list_free (l);
-	}
-	
-	g_free (card);
-}
-
-typedef struct
-{
-	char c;
-	int id;
-	
-	GList *sons;
-} tree;
-
-extern CardProperty 
-e_card_prop_empty (void)
-{
-	CardProperty prop;
-	
-	prop.used = FALSE;
-	
-	prop.type = PROP_NONE;
-	prop.encod = ENC_7BIT;
-	prop.value = VAL_INLINE;
-	prop.charset = NULL;
-	prop.lang = NULL;
-	prop.grp = NULL;
-	prop.xtension = NULL;
-	
-	prop.user_data = NULL;
-	
-	return prop;
-}
-
-static CardStrProperty 
-e_card_prop_str_empty (void)
-{
-	CardStrProperty strprop;
-	
-	strprop.prop = card_prop_empty ();
-	strprop.str = NULL;
-	
-	return strprop;
-}
-
-/* Intended to check asserts. */
-extern int card_check_prop (ECardProperty prop)
-{
-	if (((prop.used == FALSE) || (prop.used == TRUE)) &&
-	    ((prop.type >= PROP_NONE) && (prop.type <= PROP_LAST)) &&
-	    ((prop.encod >= ENC_NONE) && (prop.encod <= ENC_LAST)) &&
-	    ((prop.value >= VAL_NONE) && (prop.value <= VAL_LAST)))
-	  return TRUE;
-	    
-	return FALSE;
-}
-
-extern void
-card_prop_free (CardProperty prop)
-{
-	GList *l;
-	
-	g_free (prop.charset);
-	g_free (prop.lang);
-	
-	for (l = prop.xtension; l; l = l->next) {
-		CardXAttribute *xa = (CardXAttribute *) l->data;
-		g_free (xa->name);
-		g_free (xa->data);
-	}
-	
-	g_list_free (l);
-	
-	prop.used = FALSE;
-}
-	
-e_card_deladdr_free (ECardDelAddr *c)
-{
-	card_prop_free (c->prop);
-
-	g_free (p->pobox);
-	g_free (p->ext);
-	g_free (p->street);
-	g_free (p->city);
-	g_free (p->region);
-	g_free (p->code);
-	g_free (p->country);
-}
-
-void 
-card_free (Card *crd)
-{
-}
-
-static tree *
-new_tree (char c, int id)
-{
-	tree *t;
-	
-	t = malloc (sizeof (tree));
-	t->c = c;
-	t->id = id;
-	t->sons = NULL;
-	
-	return t;
-}
-
-static void 
-add_branch (tree *t, char *str, int id)
-{
-	tree *tmp;
-	char *end;
-	
-	end = str + strlen (str) + 1;
-
-	while (str != end) {
-		tmp = new_tree (*str, id);
-		t->sons = g_list_append (t->sons, (gpointer) tmp);
-		t = tmp;
-		
-		str ++;
-	}
-}
-
-static tree *
-add_to_tree (tree *t, struct pair p)
-{
-	GList *node;
-	char *c, *end;
-	tree *tmp;
-	
-	  c = p.str;
-	end = c + strlen (c) + 1;
-	tmp = t;
-	
-	while (c != end) {
-		for (node = tmp->sons; node; node = node->next)
-		  if (((tree *) node->data)->c == *c) {
-			  break;
-		  }
-		
-		if (node) {
-			tmp = (tree *) node->data;
-			tmp->id = 0;
-			c++;
-		}
-		else {
-			add_branch (tmp, c, p.id);
-			break;
-		}
-	}
-	
-	return t;
-}
-		
-static tree *
-create_search_tree (void)
-{
-	tree *t;
-	int i;
-
-	t = new_tree (0, 0);
-	for (i = 0; prop_lookup[i].str; i++)
-	  t = add_to_tree (t, prop_lookup[i]);
-	
-	return t;
-}
-		
-static int 
-card_lookup_name (const char *c)
-{
-	static tree *search_tree = NULL;
-	GList *node;
-	tree *tmp;
-	const char *end;
-	
-	if (!search_tree)
-	  search_tree = create_search_tree ();
-	
-	tmp = search_tree;
-	end = c + strlen (c) + 1;
-	
-	while (tmp->id == 0 && c != end) {
-		for (node = tmp->sons; node; node = node->next)
-		  if (((tree *) node->data)->c == *c) {
-			  break;
-		  }
-	
-		if (node) {
-			tmp = (tree *) node->data;
-			c++;
-		}
-		else
-		  return 0;
-	}
-	
-	return tmp->id;
-}
-
-static enum PhotoType 
-get_photo_type (VObject *o)
-{
-	VObject *vo;
-	int i;
-	
-	for (i = 0; photo_pairs[i].str; i++)
-	  if (has (o, photo_pairs[i].str))
-	    return photo_pairs[i].id;
-
-	g_warning ("? < No PhotoType for Photo property. Falling back to JPEG.");
-	return PHOTO_JPEG;
-}
-
-static CardProperty 
-get_CardProperty (VObject *o)
-{
-	VObjectIterator i;
-	CardProperty prop;
-
-	prop = card_prop_empty ();
-	prop.used = TRUE;
-	
-	initPropIterator (&i, o);
-	while (moreIteration (&i)) {
-		VObject *vo = nextVObject (&i);
-		const char *n = vObjectName (vo);
-		int propid;
-	
-		propid = card_lookup_name (n);
-		
-		switch (propid) {
-			
-		 case PROP_VALUE:
-		
-			if (has (vo, VCContentIDProp))
-			  prop.value = VAL_CID;
-			break;
-			
-		 case PROP_ENCODING:
-			if (has (vo, VCQuotedPrintableProp))
-			  prop.encod = ENC_QUOTED_PRINTABLE;
-			else if (has (vo, VC8bitProp))
-			  prop.encod = ENC_8BIT;
-			else if (has (vo, VCBase64Prop))
-			  prop.encod = ENC_BASE64;
-			break;
-			
-		 case PROP_QUOTED_PRINTABLE:
-			prop.encod = ENC_QUOTED_PRINTABLE;
-			break;
-			
-		 case PROP_8BIT:
-			prop.encod = ENC_8BIT;
-			break;
-			
-		 case PROP_BASE64:
-			prop.encod = ENC_BASE64;
-			break;
-	
-		 case PROP_LANG:
-			if (vObjectValueType (vo)) {
-				prop.lang = 
-				  g_strdup (vObjectStringZValue (vo));
-			} else
-			  g_warning ("? < No value for LANG attribute.");
-			break;
-			
-		 case PROP_CHARSET:
-			if (vObjectValueType (vo)) {
-				prop.charset = 
-				  g_strdup (vObjectStringZValue (vo));
-				g_warning (prop.charset); 
-			} else
-			  g_warning ("? < No value for CHARSET attribute.");
-			break;
-		 default:
-				{
-					CardXAttribute *c;
-
-					c = malloc (sizeof (CardXAttribute));
-					c->name = g_strdup (n);
-					
-					if (vObjectValueType (vo))
-					  c->data = 
-					  g_strdup (vObjectStringZValue (vo));
-					else
-					  c->data = NULL;
-					
-					prop.xtension = 
-					  g_list_append (prop.xtension, c);
-				}
-		}
-	}
-
-	return prop;
-}
-
-static gboolean
-e_card_prop_has (VObject    *o,
-		 const char *id)
-{
-	g_assert (o  != NULL);
-	g_assert (id != NULL);
-
-	if (isAPropertyOf (o, id) == NULL)
-		return FALSE;
-
-	return TRUE;
-}
-
-static const char *
-e_card_prop_get_str (VObject    *o,
-		     const char *id)
-{
-	VObject *strobj;
-
-	g_assert (o  != NULL);
-	g_assert (id != NULL);
-
-	strobj = isAPropertyOf (o, id);
-
-	if (strobj == NULL)
-		return g_strdup ("");
-
-	if (vObjectValueType (strobj) != NULL) {
-		char *str;
-		char *g_str;
-
-		str = fakeCString (vObjectStringZValue (strobj));
-		g_str = g_strdup (str);
-		free (str);
-
-		return g_str;
-	}
-
-	return g_strdup ("");
-}
-
-static ECardName *
-e_card_get_name (VObject *o)
-{
-	CardName *name;
-	VObject *vo;
-	char *the_str;
-
-	name = g_new0 (ECardName, 1);
-
-	name->family     = e_card_prop_get_substr (o, VCFamilyNameProp);
-	name->given      = e_card_prop_get_substr (o, VCGivenNameProp);
-	name->additional = e_card_prop_get_substr (o, VCAdditionalNamesProp);
-	name->prefix     = e_card_prop_get_substr (o, VCNamePrefixesProp);
-	name->suffix     = e_card_prop_get_substr (o, VCNameSuffixesProp);
-
-	return name;
-}
-
-static CardDelLabel *
-get_CardDelLabel (VObject *o)
-{
-	CardDelLabel *dellabel;
-	char *the_str;
-	
-	dellabel = malloc (sizeof (CardDelLabel));
-	
-	dellabel->type = get_addr_type (o);
-	dellabel->data = g_strdup (str_val (o));
-	
-	free (the_str);
-	return dellabel;
-}
-
-static CardPhone *
-get_CardPhone (VObject *o)
-{
-	CardPhone *ret;
-	char *the_str;
-	
-	ret = malloc (sizeof (CardPhone));
-	ret->type = get_phone_type (o);
-	ret->data = g_strdup (str_val (o));
-	
-	free (the_str);
-
-	return ret;
-}
-
-static CardEMail *
-get_CardEMail (VObject *o)
-{
-	CardEMail *ret;
-	char *the_str; 
-	
-	ret = malloc (sizeof (CardEMail)); 
-	ret->type = get_email_type (o);
-	ret->data = g_strdup (str_val (o));
-	
-	free (the_str);
-	
-	return ret;
-}
-	
-static CardTimeZone 
-strtoCardTimeZone (char *str)
-{
-	char s[3];
-	CardTimeZone tz;
-	
-	if (*str == '-') {
-		tz.sign = -1;
-		str++;
-	} else
-	  tz.sign = 1;
-	
-	tz.hours = 0;
-	tz.mins = 0;
-	
-	s[2] = 0;
-	if (strlen (str) > 2) {
-		s[0] = str[0];
-		s[1] = str[1];
-		tz.hours = atoi (s);
-	} else {
-		g_warning ("? < TimeZone value is too short.");
-		return tz;
-	}
-	
-	str += 2;
-	if (*str == ':')
-	  str++;
-	
-	if (strlen (str) >= 2) {
-		s[0] = str[0];
-		s[1] = str[1];
-		tz.mins = atoi (s);
-	} else {
-		g_warning ("? < TimeZone value is too short.");
-		return tz;
-	}
-	
-	if (strlen (str) > 3)
-		g_warning ("? < TimeZone value is too long.");
-
-	return tz;
-}
-
-static CardGeoPos 
-strtoCardGeoPos (char *str)
-{
-	CardGeoPos gp;
-	char *s;
-	
-	gp.lon = 0;
-	gp.lat = 0;
-	  
-	s = strchr (str, ',');
-	
-	if (! s) {
-		g_warning ("? < Bad format for GeoPos property.");
-		return gp;
-	}
-	
-	*s = 0;
-	s++;
-	
-	gp.lon = atof (str);
-	gp.lat = atof (s);
-	
-	return gp;
-}
-	
-static CardOrg *
-e_card_vobject_to_org (VObject *o)
-{
-	VObject *vo;
-	char *the_str;
-	CardOrg *org;
-
-	org = g_new0 (CardOrg, 1);
-
-	if (has (o, VCOrgNameProp)) {
-		org.name = g_strdup (str_val (vo));
-		free (the_str);
-	}
-	if (has (o, VCOrgUnitProp)) {
-		org.unit1 = g_strdup (str_val (vo));
-		free (the_str);
-	}
-	if (has (o, VCOrgUnit2Prop)) {
-		org.unit2 = g_strdup (str_val (vo));
-		free (the_str);
-	}
-	if (has (o, VCOrgUnit3Prop)) {
-		org.unit3 = g_strdup (str_val (vo));
-		free (the_str);
-	}
-	if (has (o, VCOrgUnit4Prop)) {
-		org.unit4 = g_strdup (str_val (vo));
-		free (the_str);
-	}
-	
-	return org;
-}
-
-static CardXProperty *
-get_XProp (VObject *o)
-{
-	char *the_str;
-	CardXProperty *ret;
-	
-	ret = malloc (sizeof (CardXProperty)); 
-	ret->name = g_strdup (vObjectName (o));
-	ret->data = g_strdup (str_val (o));
-	free (the_str);
-	
-	return ret;
-}
-
-static CardRev 
-strtoCardRev (char *str)
-{
-	char s[3], *t, *ss;
-	int len, i;
-	CardRev rev;
-	
-	rev.utc = 0;
-	len = strlen (str);
-	
-	if (str[len] == 'Z') {              /* Is it UTC? */
-		rev.utc = 1;
-		str[len] = 0;
-	}
-	  
-	s[2] = 0;
-	t = strchr (str, 'T');
-	if (t) {                            /* Take the Time */
-		*t = 0;
-		t++;
-		if (strlen (t) > 2) {
-			s[0] = t[0];
-			s[1] = t[1];
-			rev.tm.tm_hour = atoi (s);
-		} else {
-			g_warning ("? < Rev value is too short.");
-			return rev;
-		}
-		
-		t += 2;
-		if (*t == ':')             /* Ignore ':' separator */
-		  t++;
-		
-		if (strlen (t) > 2) {
-			s[0] = t[0];
-			s[1] = t[1];
-			rev.tm.tm_min = atoi (s);
-		} else {
-			g_warning ("? < Rev value is too short.");
-			return rev;
-		}
-		
-		t += 2;
-		if (*t == ':')
-		  t++;
-		
-		if (strlen (t) > 2) {
-			s[0] = t[0];
-			s[1] = t[1];
-			rev.tm.tm_sec = atoi (s);
-		} else {
-			g_warning ("? < Rev value is too short.");
-			return rev;
-		}
-
-		if (strlen (str) > 3)
-		  g_warning ("? < Rev value is too long.");
-		
-	} else {
-		g_warning ("? < No time value for Rev property.");
-	}
-
-	/* Now the date (the part before the T) */
-	
-	if (strchr (str, '-')) {                        /* extended iso 8601 */
-		for (ss = strtok (str, "-"), i = 0; ss;
-		     ss = strtok (NULL, "-"), i++)
-		  switch (i) {
-		   case 0:
-			  rev.tm.tm_year = atoi (ss);
-			  break;
-		   case 1:
-			  rev.tm.tm_mon = atoi (ss);
-			  break;
-		   case 2:
-			  rev.tm.tm_mday = atoi (ss);
-			  break;
-		   default:
-			  g_warning ("? < Too many values for Rev property.");
-		  }
-		
-		if (i < 2)
-		  g_warning ("? < Too few values for Rev property.");
-	} else {
-		if (strlen (str) >= 8) {             /* short representation */
-			rev.tm.tm_mday = atoi (str + 6);
-			str[6] = 0;
-			rev.tm.tm_mon = atoi (str + 4);
-			str[4] = 0;
-			rev.tm.tm_year = atoi (str);
-		} else
-		  g_warning ("? < Bad format for Rev property.");
-	}
-	
-	return rev;
-}
-		
-static enum KeyType 
-get_key_type (VObject *o)
-{
-	VObject *vo;
-	int i;
-	
-	for (i = 0; key_pairs[i].str; i++)
-	  if (has (o, key_pairs[i].str))
-	    return key_pairs[i].id;
-
-	g_warning ("? < No KeyType for Key property. Falling back to PGP.");
-	return KEY_PGP;
-}
-
-static CardPhoto 
-get_CardPhoto (VObject *o)
-{
-	VObject *vo;
-	char *the_str;
-	CardPhoto photo;
-
-	photo.type = get_photo_type (o);
-	
-	if (has (o, VCDataSizeProp)) {
-		photo.size = vObjectIntegerValue (vo);
-		photo.data = malloc (photo.size);
-		memcpy (photo.data, vObjectAnyValue (o), photo.size);
-	} else {
-		photo.size = strlen (str_val (o)) + 1;
-		photo.data = g_strdup (the_str);
-		free (the_str);
-	}
-	
-	return photo;
-}
-
-static enum SoundType 
-get_sound_type (VObject *o)
-{
-	VObject *vo;
-	int i;
-	
-	for (i = 0; sound_pairs[i].str; i++)
-	  if (has (o, sound_pairs[i].str))
-	    return sound_pairs[i].id;
-
-	return SOUND_PHONETIC;
-}
-	
-static CardSound 
-get_CardSound (VObject *o)
-{
-	VObject *vo;
-	char *the_str;
-	CardSound sound;
-
-	sound.type = get_sound_type (o);
-	
-	if (has (o, VCDataSizeProp)) {
-		sound.size = vObjectIntegerValue (vo);
-		sound.data = malloc (sound.size);
-		memcpy (sound.data, vObjectAnyValue (o), sound.size);
-	} else {
-		sound.size = strlen (str_val (o));
-		sound.data = g_strdup (the_str);
-		free (the_str);
-	}
-	
-	return sound;
-}
-
-/* Loads our card contents from a VObject */
-static ECard *
-e_card_construct_from_vobject (ECard   *card,
-			       VObject *vcrd)
-{
-	VObjectIterator i;
-	Card *crd;
-	char *the_str;
-
-	initPropIterator (&i, vcrd);
-	crd = card_new ();
-
-	while (moreIteration (&i)) {
-		VObject *o = nextVObject (&i);
-		const char *n = vObjectName (o);
-		int propid;
-		CardProperty *prop = NULL;
-
-		propid = card_lookup_name (n);
-		
-		switch (propid) {
-		case PROP_FNAME:
-			prop = &crd->fname.prop;
-			crd->fname.str = g_strdup (str_val (o));
-			free (the_str);
-			break;
-		 case PROP_NAME:
-			prop = &crd->name.prop;
-			crd->name = e_card_get_name (o);
-			break;
-		 case PROP_PHOTO:
-			prop = &crd->photo.prop;
-			crd->photo = get_CardPhoto (o);
-			break;
-		 case PROP_BDAY:
-			prop = &crd->bday.prop;
-			crd->bday = strtoCardBDay (str_val (o));
-			free (the_str);
-			break;
-		 case PROP_DELADDR:
-				{
-					CardDelAddr *c;
-					c = get_CardDelAddr (o);
-					prop = &c->prop;
-					crd->deladdr.l = g_list_append (crd->deladdr.l, c);
-				}
-			break;
-		 case PROP_DELLABEL:
-				{
-					CardDelLabel *c;
-					c = get_CardDelLabel (o);
-					prop = &c->prop;
-					crd->dellabel.l = g_list_append (crd->dellabel.l, c);
-				}
-			break;
-		 case PROP_PHONE:
-				{
-					CardPhone *c;
-					
-					c = get_CardPhone (o);
-					prop = &c->prop;
-					crd->phone.l = g_list_append (crd->phone.l, c);
-				}
-			break;
-		 case PROP_EMAIL:
-				{
-					CardEMail *c;
-					
-					c = get_CardEMail (o);
-					prop = &c->prop;
-					crd->email.l = g_list_append (crd->email.l, c);
-				}
-			break;
-		 case PROP_MAILER:
-			prop = &crd->mailer.prop;
-			crd->mailer.str = g_strdup (str_val (o));
-			free (the_str);
-			break;
-		 case PROP_TIMEZN:
-			prop = &crd->timezn.prop;
-			crd->timezn = strtoCardTimeZone (str_val (o));
-			free (the_str);
-			break;
-		 case PROP_GEOPOS:
-			prop = &crd->geopos.prop;
-			crd->geopos = strtoCardGeoPos (str_val (o));
-			break;
-		 case PROP_ROLE:
-			prop = &crd->role.prop;
-			crd->role.str = g_strdup (str_val (o));
-			free (the_str);
-			break;
-		 case PROP_LOGO:
-			prop = &crd->logo.prop;
-			crd->logo = get_CardPhoto (o);
-			break;
-		 case PROP_AGENT:
-			crd->agent = card_create_from_vobject (o);
-			break;
-		 case PROP_ORG:
-			prop = &crd->org.prop;
-			crd->org = get_CardOrg (o);
-			break;
-		 case PROP_CATEGORIES:
-			prop = &crd->categories.prop;
-			crd->categories.str = g_strdup (str_val (o));
-			crd->categories.prop.encod = ENC_QUOTED_PRINTABLE;
-			free (the_str);
-			break;
-		 case PROP_COMMENT:
-			prop = &crd->comment.prop;
-			crd->comment.str = g_strdup (str_val (o));
-			crd->comment.prop.encod = ENC_QUOTED_PRINTABLE;
-			free (the_str);
-			break;
-		 case PROP_REV:
-			prop = &crd->rev.prop;
-			crd->rev = strtoCardRev (str_val (o));
-			free (the_str);
-			break;
-		 case PROP_SOUND:
-			prop = &crd->sound.prop;
-			crd->sound = get_CardSound (o);
-			break;
-		 case PROP_VERSION:
-				{
-					char *str;
-					str = str_val (o);
-					if (strcmp (str, "2.1"))
-					  g_warning ("? < Version doesn't match.");
-					free (the_str);
-				}
-			break;
-		 case PROP_KEY:
-			prop = &crd->key.prop;
-			crd->key.type = get_key_type (o);
-			crd->key.data = g_strdup (str_val (o));
-			free (the_str);
-			break;
-		 default:
-				{
-					CardXProperty *c;
-				
-					c = get_XProp (o);
-					prop = &c->prop;
-					crd->xtension.l = g_list_append (crd->xtension.l, c);
-				}
-			break;
-		}
-		
-		if (prop) {
-			*prop = get_CardProperty (o);
-			prop->type = propid;
-		}
-	}
-	
-	return crd;
-}
-		
-/* Loads a card from a file */
-GList *
-card_load (GList *crdlist, char *fname)
-{
-	VObject *vobj, *tmp;
-	
-	vobj = Parse_MIME_FromFileName (fname);
-	if (!vobj) {
-		g_warning ("Could not load the cardfile");
-		return NULL;
-	}
-
-	while (vobj) {
-		const char *n = vObjectName (vobj);
-		
-		if (strcmp (n, VCCardProp) == 0) {
-			crdlist = g_list_append (crdlist, (gpointer)
-					    card_create_from_vobject (vobj));
-		}
-		tmp = vobj;
-		vobj = nextVObjectInList (vobj);
-		cleanVObject (tmp);
-	}
-
-	cleanVObject (vobj);
-	cleanStrTbl ();
-	return crdlist;
-}
-
-static VObject *
-add_strProp (VObject *o, const char *id, char *val)
-{
-	VObject *vo = NULL;
-	
-	if (val)
-	  vo = addPropValue (o, id, val);
-
-	return vo;
-}
-
-static VObject *
-add_CardProperty (VObject *o, CardProperty *prop)
-{
-	GList *node;
-	
-	switch (prop->encod) {
-	 case ENC_BASE64:
-		addProp (o, VCBase64Prop);
-		break;
-	 case ENC_QUOTED_PRINTABLE:
-		addProp (o, VCQuotedPrintableProp);
-		break;
-	 case ENC_8BIT:
-		addProp (o, VC8bitProp);
-		break;
-	 case ENC_7BIT:
-		/* Do nothing: 7BIT is the default. Avoids file clutter. */
-		break;
-	 default:
-		g_warning ("? < Card had invalid encoding type.");
-	}
-	
-	switch (prop->value) {
-	 case VAL_CID:
-		addProp (o, VCContentIDProp);
-		break;
-	 case VAL_INLINE:
-		/* Do nothing: INLINE is the default. Avoids file clutter. */
-		break;
-	 default:
-		g_warning ("? < Card had invalid value type.");
-	}
-	
-	for (node = prop->xtension; node; node = node->next) {
-		CardXAttribute *xa = (CardXAttribute *) node->data;
-		if (xa->data)
-		  addPropValue (o, xa->name, xa->data);
-		else
-		  addProp (o, xa->name);
-	}
-
-	add_strProp (o, VCCharSetProp, prop->charset);
-	add_strProp (o, VCLanguageProp, prop->lang);
-	
-	return o;
-}
-
-static VObject *
-add_CardStrProperty (VObject *vobj, const char *id, CardStrProperty *strprop)
-{
-	VObject *vprop;
-	
-	if (strprop->prop.used) {
-		vprop = add_strProp (vobj, id, strprop->str);
-		add_CardProperty (vprop, &strprop->prop);
-	}
-	
-	return vobj;
-}
-
-static VObject *
-add_PhotoType (VObject *o, enum PhotoType photo_type)
-{
-	int i;
-	
-	for (i = 0; photo_pairs[i].str; i++)
-	  if (photo_type == photo_pairs[i].id) {
-		  addProp (o, photo_pairs[i].str);
-		  return o;
-	  }
-
-	g_warning ("? > No PhotoType for Photo property. Falling back to JPEG.");
-	addProp (o, VCJPEGProp);
-	
-	return o;
-}
-
-static VObject *
-add_AddrType (VObject *o, int addr_type)
-{
-	int i;
-	
-	for (i = 0; addr_pairs[i].str; i++)
-	  if (addr_type & addr_pairs[i].id)
-	    addProp (o, addr_pairs[i].str);
-	
-	return o;
-}
-
-static void
-add_strAddrType (GString *string, int addr_type)
-{
-	int i, first = 1;
-	char *str;
-	
-	if (addr_type) {
-		g_string_append (string, " (");
-		
-		for (i = 0; addr_pairs[i].str; i++)
-		  if (addr_type & addr_pairs[i].id) {
-			  if (!first)
-			    g_string_append (string, ", ");
-			  first = 0;
-			  str = my_cap (addr_pairs[i].str);
-			  g_string_append (string, str);
-			  g_free (str);
-		  }
-		
-		g_string_append_c (string, ')');
-	}
-}
-
-static VObject *
-add_PhoneType (VObject *o, int phone_type)
-{
-	int i;
-	
-	for (i = 0; phone_pairs[i].str; i++)
-	  if (phone_type & phone_pairs[i].id)
-	    addProp (o, phone_pairs[i].str);
-	
-	return o;
-}
-
-static void
-add_strPhoneType (GString *string, int phone_type)
-{
-	int i, first = 1;
-	char *str;
-	
-	if (phone_type) {
-		g_string_append (string, " (");
-		
-		for (i = 0; phone_pairs[i].str; i++)
-		  if (phone_type & phone_pairs[i].id) {
-			  if (!first)
-			    g_string_append (string, ", ");
-			  first = 0;
-			  str = my_cap (phone_pairs[i].str);
-			  g_string_append (string, str);
-			  g_free (str);
-		  }
-		
-		g_string_append_c (string, ')');
-	}
-}
-
-static VObject *
-add_EMailType (VObject *o, enum EMailType email_type)
-{
-	int i;
-	
-	for (i = 0; email_pairs[i].str; i++)
-	  if (email_type == email_pairs[i].id) {
-		  addProp (o, email_pairs[i].str);
-		  return o;
-	  }
-
-	g_warning ("? > No EMailType for EMail property. Falling back to INET.");
-	addProp (o, VCInternetProp);
-	
-	return o;
-}
-
-static void
-add_strEMailType (GString *string, int email_type)
-{
-	int i;
-	char *str;
-	
-	if (email_type) {
-		g_string_append (string, " (");
-		
-		for (i = 0; email_pairs[i].str; i++)
-		  if (email_type == email_pairs[i].id) {
-			  str = my_cap (email_pairs[i].str);
-			  g_string_append (string, str);
-			  g_free (str);
-			  break;
-		  }
-		
-		g_string_append_c (string, ')');
-	}
-}
-
-static VObject *
-add_KeyType (VObject *o, enum KeyType key_type)
-{
-	int i;
-	
-	for (i = 0; key_pairs[i].str; i++)
-	  if (key_type == key_pairs[i].id) {
-		  addProp (o, key_pairs[i].str);
-		  return o;
-	  }
-
-	g_warning ("? > No KeyType for Key property. Falling back to PGP.");
-	addProp (o, VCPGPProp);
-	
-	return o;
-}
-
-static void
-add_strKeyType (GString *string, int key_type)
-{
-	int i;
-	char *str;
-	
-	if (key_type) {
-		g_string_append (string, " (");
-		
-		for (i = 0; key_pairs[i].str; i++)
-		  if (key_type == key_pairs[i].id) {
-			  str = my_cap (key_pairs[i].str);
-			  g_string_append (string, str);
-			  g_free (str);
-			  break;
-		  }
-		
-		g_string_append_c (string, ')');
-	}
-}
-
-static VObject *
-add_SoundType (VObject *o, enum SoundType sound_type)
-{
-	int i;
-	
-	for (i = 0; sound_pairs[i].str; i++)
-	  if (sound_type == sound_pairs[i].id) {
-		  addProp (o, sound_pairs[i].str);
-		  return o;
-	  }
-
-	return o;
-}
-
-char *card_timezn_str (CardTimeZone timezn)
-{
-	char *str;
-	
-	str = malloc (7);
-	snprintf (str, 7, (timezn.sign == -1)? "-%02d:%02d" : "%02d:%02d",
-		 timezn.hours, timezn.mins);
-	return str;
-}
-
-char *card_geopos_str (CardGeoPos geopos)
-{
-	char *str;
-	
-	str = malloc (15);
-	snprintf (str, 15, "%03.02f,%03.02f", geopos.lon, geopos.lat);
-	return str;
-}
-
-static void add_CardStrProperty_to_string (GString *string, char *prop_name,
-					   CardStrProperty *strprop)
-{
-	if (strprop->prop.used) {
-		if (prop_name)
-		  g_string_append (string, prop_name);
-		
-		g_string_append (string, strprop->str);
-	}
-}
-
-static void add_strProp_to_string (GString *string, char *prop_name, char *val)
-{
-	if (val) {
-		if (prop_name)
-		  g_string_append (string, prop_name);
-		
-		g_string_append (string, val);
-	}
-}
-
-static void addProp_to_string (GString *string, char *prop_name)
-{
-	if (prop_name)
-	  g_string_append (string, prop_name);
-}
-
-char *
-card_to_string (Card *crd)
-{
-	GString *string;
-	char *ret;
-	
-	string = g_string_new ("");
-	
-	add_CardStrProperty_to_string (string, _ ("Card: "), &crd->fname);
-	if (crd->name.prop.used) {
-		addProp_to_string (string, _ ("\nName: "));
-		add_strProp_to_string (string, _ ("\n  Prefix:     "), crd->name.prefix);
-		add_strProp_to_string (string, _ ("\n  Given:      "), crd->name.given);
-		add_strProp_to_string (string, _ ("\n  Additional: "), crd->name.additional);
-		add_strProp_to_string (string, _ ("\n  Family:     "), crd->name.family);
-		add_strProp_to_string (string, _ ("\n  Suffix:     "), crd->name.suffix);
-		g_string_append_c (string, '\n');
-	}
-	
-/*	if (crd->photo.prop.used) {
-		addPropSizedValue (string, _ ("\nPhoto: "), 
-					  crd->photo.data, crd->photo.size);
-		add_PhotoType (string, crd->photo.type);
-	}*/
-	
-	if (crd->bday.prop.used) {
-		char *date_str;
-		
-		date_str = card_bday_str (crd->bday);
-		add_strProp_to_string (string, _ ("\nBirth Date: "), date_str);
-		free (date_str);
-	}
-	
-	if (crd->deladdr.l) {
-		GList *node;
-		
-		for (node = crd->deladdr.l; node; node = node->next) {
-			CardDelAddr *deladdr = (CardDelAddr *) node->data;
-			
-			if (deladdr->prop.used) {
-				addProp_to_string (string, _ ("\nAddress:"));
-				add_strAddrType (string, deladdr->type);
-				add_strProp_to_string (string, _ ("\n  Postal Box:  "), deladdr->po);
-				add_strProp_to_string (string, _ ("\n  Ext:         "),deladdr->ext);
-				add_strProp_to_string (string, _ ("\n  Street:      "),deladdr->street);
-				add_strProp_to_string (string, _ ("\n  City:        "), deladdr->city);
-				add_strProp_to_string (string, _ ("\n  Region:      "), deladdr->region);
-				add_strProp_to_string (string, _ ("\n  Postal Code: "), deladdr->code);
-				add_strProp_to_string (string, _ ("\n  Country:     "), deladdr->country);
-			}
-		}
-		
-		g_string_append_c (string, '\n');
-	}
-	
-	if (crd->dellabel.l) {
-		GList *node;
-		
-		for (node = crd->dellabel.l; node; node = node->next) {
-			CardDelLabel *dellabel = (CardDelLabel *) node->data;
-			
-			add_strProp_to_string (string, _ ("\nDelivery Label: "),
-					    dellabel->data);
-			add_strAddrType (string, dellabel->type);
-		}
-	}
-	
-	if (crd->phone.l) {
-		GList *node;
-		char *sep;
-		
-		if (crd->phone.l->next) {
-			sep = "  ";
-			g_string_append (string, _ ("\nTelephones:\n"));
-		} else {
-			sep = " ";
-			g_string_append (string, _ ("\nTelephone:"));
-		}
-		
-		for (node = crd->phone.l; node; node = node->next) {
-			CardPhone *phone = (CardPhone *) node->data;
-
-			if (phone->prop.used) {
-				g_string_append (string, sep);
-				g_string_append (string, phone->data);
-				add_strPhoneType (string, phone->type);
-				g_string_append_c (string, '\n');
-			}
-		}
-		
-		if (crd->phone.l->next)
-		  g_string_append_c (string, '\n');
-	}
-
-	if (crd->email.l) {
-		GList *node;
-		char *sep;
-		
-		if (crd->email.l->next) {
-			sep = "  ";
-			g_string_append (string, _ ("\nE-mail:\n"));
-		} else {
-			sep = " ";
-			g_string_append (string, _ ("\nE-mail:"));
-		}
-		
-		
-		for (node = crd->email.l; node; node = node->next) {
-			CardEMail *email = (CardEMail *) node->data;
-			
-			if (email->prop.used) {
-				g_string_append (string, sep);
-				g_string_append (string, email->data);
-				add_strEMailType (string, email->type);
-				g_string_append_c (string, '\n');
-			}
-		}
-		
-		if (crd->email.l->next)
-		  g_string_append_c (string, '\n');
-	}
-
-	add_CardStrProperty_to_string (string, _ ("\nMailer: "), &crd->mailer);
-	
-	if (crd->timezn.prop.used) {
-		char *str;
-		
-		str = card_timezn_str (crd->timezn);
-		add_strProp_to_string (string, _ ("\nTime Zone: "), str);
-		free (str);
-	}
-	
-	if (crd->geopos.prop.used) {
-		char *str;
-		
-		str = card_geopos_str (crd->geopos);
-		add_strProp_to_string (string, _ ("\nGeo Location: "), str);
-		free (str);
-	}
-	
-        add_CardStrProperty_to_string (string, _ ("\nBusiness Role: "), &crd->role);
-	
-/*	if (crd->logo.prop.used) {
-		addPropSizedValue (string, _ ("\nLogo: "), 
-					  crd->logo.data, crd->logo.size);
-		add_PhotoType (string, crd->logo.type);
-	}*/
-	
-/*	if (crd->agent)
-	  addstringectProp (string, card_convert_to_stringect (crd->agent));*/
-	
-	if (crd->org.prop.used) {
-		addProp_to_string (string, _ ("\nOrg: "));
-		add_strProp_to_string (string, _ ("\n  Name:  "), crd->org.name);
-		add_strProp_to_string (string, _ ("\n  Unit:  "), crd->org.unit1);
-		add_strProp_to_string (string, _ ("\n  Unit2: "), crd->org.unit2);
-		add_strProp_to_string (string, _ ("\n  Unit3: "), crd->org.unit3);
-		add_strProp_to_string (string, _ ("\n  Unit4: "), crd->org.unit4);
-		g_string_append_c (string, '\n');
-	}
-	
-        add_CardStrProperty_to_string (string, _ ("\nCategories: "), &crd->categories);
-        add_CardStrProperty_to_string (string, _ ("\nComment: "), &crd->comment);
-	
-/*	if (crd->sound.prop.used) {
-		if (crd->sound.type != SOUND_PHONETIC)
-		  addPropSizedValue (string, _ ("\nPronunciation: "),
-					    crd->sound.data, crd->sound.size);
-		else
-		  add_strProp_to_string (string, _ ("\nPronunciation: "), 
-				       crd->sound.data);
-		
-		add_SoundType (string, crd->sound.type);
-	}*/
-	
-        add_CardStrProperty_to_string (string, _ ("\nUnique String: "), &crd->uid);
-	
-	if (crd->key.prop.used) {
-		add_strProp_to_string (string, _ ("\nPublic Key: "), crd->key.data);
-		add_strKeyType (string, crd->key.type);
-	}
-	
-	ret = g_strdup (string->str);
-	g_string_free (string, TRUE);
-	
-	return ret;
-}
-#endif
-
-static ECardDate
-e_card_date_from_string (char *str)
-{
-	ECardDate date;
-	int length;
-
-	date.year = 0;
-	date.month = 0;
-	date.day = 0;
-
-	length = strlen(str);
-	
-	if (length == 10 ) {
-		date.year = str[0] * 1000 + str[1] * 100 + str[2] * 10 + str[3] - '0' * 1111;
-		date.month = str[5] * 10 + str[6] - '0' * 11;
-		date.day = str[8] * 10 + str[9] - '0' * 11;
-	} else if ( length == 8 ) {
-		date.year = str[0] * 1000 + str[1] * 100 + str[2] * 10 + str[3] - '0' * 1111;
-		date.month = str[4] * 10 + str[5] - '0' * 11;
-		date.day = str[6] * 10 + str[7] - '0' * 11;
-	}
-	
-	return date;
-}
-
-char *
-e_v_object_get_child_value(VObject *vobj, char *name)
-{
-	char *ret_val;
-	VObjectIterator iterator;
-	initPropIterator(&iterator, vobj);
-	while(moreIteration (&iterator)) {
-		VObject *attribute = nextVObject(&iterator);
-		const char *id = vObjectName(attribute);
-		if ( ! strcmp(id, name) ) {
-			assign_string(attribute, &ret_val);
-			return ret_val;
-		}
-	}
-	ret_val = g_new(char, 1);
-	*ret_val = 0;
-	return ret_val;
-}
-
-static ECardPhoneFlags
-get_phone_flags (VObject *vobj)
-{
-	ECardPhoneFlags ret = 0;
-	int i;
-
-	struct { 
-		char *id;
-		ECardPhoneFlags flag;
-	} phone_pairs[] = {
-		{ VCPreferredProp, E_CARD_PHONE_PREF },
-		{ VCWorkProp,      E_CARD_PHONE_WORK },
-		{ VCHomeProp,      E_CARD_PHONE_HOME },
-		{ VCVoiceProp,     E_CARD_PHONE_VOICE },
-		{ VCFaxProp,       E_CARD_PHONE_FAX },
-		{ VCMessageProp,   E_CARD_PHONE_MSG },
-		{ VCCellularProp,  E_CARD_PHONE_CELL },
-		{ VCPagerProp,     E_CARD_PHONE_PAGER },
-		{ VCBBSProp,       E_CARD_PHONE_BBS },
-		{ VCModemProp,     E_CARD_PHONE_MODEM },
-		{ VCCarProp,       E_CARD_PHONE_CAR },
-		{ VCISDNProp,      E_CARD_PHONE_ISDN },
-		{ VCVideoProp,     E_CARD_PHONE_VIDEO },
-	};
-	
-	for (i = 0; i < sizeof(phone_pairs) / sizeof(phone_pairs[0]); i++) {
-		if (isAPropertyOf (vobj, phone_pairs[i].id)) {
-			ret |= phone_pairs[i].flag;
-		}
-	}
-	
-	return ret;
-}
-
-static void
-set_phone_flags (VObject *vobj, ECardPhoneFlags flags)
-{
-	int i;
-
-	struct { 
-		char *id;
-		ECardPhoneFlags flag;
-	} phone_pairs[] = {
-		{ VCPreferredProp, E_CARD_PHONE_PREF },
-		{ VCWorkProp,      E_CARD_PHONE_WORK },
-		{ VCHomeProp,      E_CARD_PHONE_HOME },
-		{ VCVoiceProp,     E_CARD_PHONE_VOICE },
-		{ VCFaxProp,       E_CARD_PHONE_FAX },
-		{ VCMessageProp,   E_CARD_PHONE_MSG },
-		{ VCCellularProp,  E_CARD_PHONE_CELL },
-		{ VCPagerProp,     E_CARD_PHONE_PAGER },
-		{ VCBBSProp,       E_CARD_PHONE_BBS },
-		{ VCModemProp,     E_CARD_PHONE_MODEM },
-		{ VCCarProp,       E_CARD_PHONE_CAR },
-		{ VCISDNProp,      E_CARD_PHONE_ISDN },
-		{ VCVideoProp,     E_CARD_PHONE_VIDEO },
-	};
-	
-	for (i = 0; i < sizeof(phone_pairs) / sizeof(phone_pairs[0]); i++) {
-		if (flags & phone_pairs[i].flag) {
-				addProp (vobj, phone_pairs[i].id);
-		}
-	}
-}
-
-static ECardAddressFlags
-get_address_flags (VObject *vobj)
-{
-	ECardAddressFlags ret = 0;
-	int i;
-
-	struct { 
-		char *id;
-		ECardAddressFlags flag;
-	} addr_pairs[] = {
-		{ VCDomesticProp, E_CARD_ADDR_DOM },
-		{ VCInternationalProp, E_CARD_ADDR_INTL },
-		{ VCPostalProp, E_CARD_ADDR_POSTAL },
-		{ VCParcelProp, E_CARD_ADDR_PARCEL },
-		{ VCHomeProp, E_CARD_ADDR_HOME },
-		{ VCWorkProp, E_CARD_ADDR_WORK },
-	};
-	
-	for (i = 0; i < sizeof(addr_pairs) / sizeof(addr_pairs[0]); i++) {
-		if (isAPropertyOf (vobj, addr_pairs[i].id)) {
-			ret |= addr_pairs[i].flag;
-		}
-	}
-	
-	return ret;
-}
-
-static void
-set_address_flags (VObject *vobj, ECardAddressFlags flags)
-{
-	int i;
-
-	struct { 
-		char *id;
-		ECardAddressFlags flag;
-	} addr_pairs[] = {
-		{ VCDomesticProp, E_CARD_ADDR_DOM },
-		{ VCInternationalProp, E_CARD_ADDR_INTL },
-		{ VCPostalProp, E_CARD_ADDR_POSTAL },
-		{ VCParcelProp, E_CARD_ADDR_PARCEL },
-		{ VCHomeProp, E_CARD_ADDR_HOME },
-		{ VCWorkProp, E_CARD_ADDR_WORK },
-	};
-	
-	for (i = 0; i < sizeof(addr_pairs) / sizeof(addr_pairs[0]); i++) {
-		if (flags & addr_pairs[i].flag) {
-			addProp (vobj, addr_pairs[i].id);
-		}
-	}
-}
diff --git a/addressbook/backend/ebook/e-card.h b/addressbook/backend/ebook/e-card.h
deleted file mode 100644
index 3992067a55..0000000000
--- a/addressbook/backend/ebook/e-card.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors:
- *   Chris Lahey 
- *   Arturo Espinosa
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright (C) 2000 Helix Code, Inc.
- * Copyright (C) 1999 The Free Software Foundation
- */
-
-#ifndef __E_CARD_H__
-#define __E_CARD_H__
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define E_TYPE_CARD            (e_card_get_type ())
-#define E_CARD(obj)            (GTK_CHECK_CAST ((obj), E_TYPE_CARD, ECard))
-#define E_CARD_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CARD, ECardClass))
-#define E_IS_CARD(obj)         (GTK_CHECK_TYPE ((obj), E_TYPE_CARD))
-#define E_IS_CARD_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_CARD))
-
-typedef struct _ECard ECard;
-typedef struct _ECardClass ECardClass;
-
-struct _ECard {
-	GtkObject object;
-	char *id;
-
-	char            *file_as;       /* The File As field.               */
-	char            *fname;         /* The full name.                   */
-	ECardName       *name;          /* The structured name.             */
-	EList       *address;  	/* Delivery addresses (ECardDeliveryAddress *) */
-	EList       *address_label; /* Delivery address labels
-					 * (ECardAddrLabel *)               */
-
-	EList       *phone;         /* Phone numbers (ECardPhone *)     */
-	EList       *email;         /* Email addresses (char *)         */
-	char            *url;	        /* The person's web page.           */
-
-	ECardDate       *bday;	        /* The person's birthday.           */
-
-	char            *note;
-
-
-	char            *org;           /* The person's organization.       */
-	char            *org_unit;      /* The person's organization unit.  */
-	char            *office;        /* The person's office.             */
-	char            *role;          /* The person's role w/in his org   */
-	char            *title;	        /* The person's title w/in his org  */
-
-	char            *manager;
-	char            *assistant;
-
-	char            *nickname;      /* The person's nickname            */
-	
-	char            *spouse;        /* The person's spouse.             */
-	ECardDate       *anniversary;   /* The person's anniversary.        */
-
-	char            *mailer;        /* Mailer                           */
-
-	char            *fburl;         /* Free Busy URL                    */
-
-	EList       *categories;    /* Categories.                      */
-
-	EList       *arbitrary;     /* Arbitrary fields.                */
-
-	guint32         pilot_id;       /* id of the corresponding pilot */
-	guint32         pilot_status;   /* status information */
-#if 0
-	ECardPhoto      *logo;          /* This person's org's logo.        */
-
-	ECardPhoto      *photo;    	/* A photo of the person.           */
-	
-	ECard           *agent;         /* A person who sereves as this
-					   guy's agent/secretary/etc.       */
-	
-
-	char            *categories;    /* A list of the categories to which
-					   this card belongs.               */
-	
-	ECardSound      *sound;
-	
-	ECardKey        *key;	        /* The person's public key.         */
-	ECardTimeZone   *timezn;        /* The person's time zone.          */
-	ECardGeoPos     *geopos;        /* The person's long/lat.           */
-
-	ECardRev        *rev;	        /* The time this card was last
-					   modified.                        */
-
-	EList        xtension;
-#endif
-};
-
-struct _ECardClass {
-	GtkObjectClass parent_class;
-	GHashTable    *attribute_jump_table;
-};
-
-
-ECard         *e_card_new       (      char  *vcard);
-char          *e_card_get_id    (      ECard *card);
-void           e_card_set_id    (      ECard *card,
-				 const char  *character);
-char          *e_card_get_vcard (      ECard *card);
-ECard         *e_card_duplicate (      ECard *card);
-
-ECardPhone *e_card_phone_new  (void);
-ECardPhone *e_card_phone_copy (const ECardPhone *phone);
-void        e_card_phone_free (      ECardPhone *phone);
-
-ECardDeliveryAddress *e_card_delivery_address_new         (void);
-ECardDeliveryAddress *e_card_delivery_address_copy        (const ECardDeliveryAddress *addr);
-void                  e_card_delivery_address_free        (      ECardDeliveryAddress *addr);
-char                 *e_card_delivery_address_to_string   (const ECardDeliveryAddress *addr);
-ECardDeliveryAddress *e_card_delivery_address_from_string (const char                 *full_addr);
-
-ECardAddrLabel *e_card_address_label_new  (void);
-ECardAddrLabel *e_card_address_label_copy (const ECardAddrLabel *addr);
-void            e_card_address_label_free (      ECardAddrLabel *addr);
-
-ECardName *e_card_name_new         (void);
-ECardName *e_card_name_copy        (const ECardName *name);
-void       e_card_name_free        (      ECardName *name);
-char      *e_card_name_to_string   (const ECardName *name);
-ECardName *e_card_name_from_string (const char      *full_name);
-
-ECardArbitrary *e_card_arbitrary_new  (void);
-ECardArbitrary *e_card_arbitrary_copy (const ECardArbitrary *arbitrary);
-void            e_card_arbitrary_free (      ECardArbitrary *arbitrary);
-
-GList *e_card_load_cards_from_file(const char *filename);
-
-/* Standard Gtk function */
-GtkType        e_card_get_type (void);
-
-#endif /* ! __E_CARD_H__ */
diff --git a/addressbook/backend/ebook/load-gnomecard-addressbook.c b/addressbook/backend/ebook/load-gnomecard-addressbook.c
deleted file mode 100644
index f1f20bf50b..0000000000
--- a/addressbook/backend/ebook/load-gnomecard-addressbook.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-static CORBA_Environment ev;
-
-#ifdef USING_OAF
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_init_with_popt_table("blah", "0.0", *argc, argv, NULL, 0, NULL);
-
-	oaf_init (*argc, argv);
-}
-
-#else
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_CORBA_init_with_popt_table (
-		"blah", "0.0",
-		argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
-}
-
-#endif
-
-static void
-init_bonobo (int argc, char **argv)
-{
-	if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
-		g_error (_("Could not initialize Bonobo"));
-}
-
-static void
-add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure)
-{
-	ECard *card = E_CARD(closure);
-	char *vcard = e_card_get_vcard(card);
-	g_print ("Saved card: %s\n", vcard);
-	g_free(vcard);
-	gtk_object_unref(GTK_OBJECT(card));
-}
-
-static void
-book_open_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-	GList *list = e_card_load_cards_from_file("gnomecard.vcf");
-	GList *iterator;
-	for (iterator = list; iterator; iterator = g_list_next(iterator)) {
-		ECard *card = iterator->data;
-		e_book_add_card(book, card, add_card_cb, card);
-	}
-	g_list_free(list);
-}
-
-static guint
-ebook_create (void)
-{
-	EBook *book;
-	gchar *path, *uri;
-	
-	book = e_book_new ();
-
-	if (!book) {
-		printf ("%s: %s(): Couldn't create EBook, bailing.\n",
-			__FILE__,
-			__FUNCTION__);
-		return FALSE;
-	}
-	
-
-	path = g_concat_dir_and_file (g_get_home_dir (),
-				      "evolution/local/Contacts/addressbook.db");
-	uri = g_strdup_printf ("file://%s", path);
-	g_free (path);
-
-	if (! e_book_load_uri (book, uri, book_open_cb, NULL)) {
-		printf ("error calling load_uri!\n");
-	}
-	g_free(uri);
-
-
-	return FALSE;
-}
-
-int
-main (int argc, char **argv)
-{
-
-	CORBA_exception_init (&ev);
-
-	init_corba (&argc, argv);
-	init_bonobo (argc, argv);
-
-	gtk_idle_add ((GtkFunction) ebook_create, NULL);
-	
-	bonobo_main ();
-
-	return 0;
-}
diff --git a/addressbook/backend/ebook/load-pine-addressbook.c b/addressbook/backend/ebook/load-pine-addressbook.c
deleted file mode 100644
index 0cc1be693c..0000000000
--- a/addressbook/backend/ebook/load-pine-addressbook.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-static CORBA_Environment ev;
-
-#ifdef USING_OAF
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_init_with_popt_table("blah", "0.0", *argc, argv, NULL, 0, NULL);
-
-	oaf_init (*argc, argv);
-}
-
-#else
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_CORBA_init_with_popt_table (
-		"blah", "0.0",
-		argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
-}
-
-#endif
-
-static void
-init_bonobo (int argc, char **argv)
-{
-	if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
-		g_error (_("Could not initialize Bonobo"));
-}
-
-static void
-add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure)
-{
-	ECard *card = E_CARD(closure);
-	char *vcard = e_card_get_vcard(card);
-	g_print ("Saved card: %s\n", vcard);
-	g_free(vcard);
-	gtk_object_unref(GTK_OBJECT(card));
-}
-
-static void
-book_open_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-	FILE *fp = fopen (".addressbook", "r");
-	char line[1024];
-
-	if (!fp) {
-		g_warning ("Can't find .addressbook");
-		return;
-	}
-
-	while(fgets(line, 1024, fp)) {
-		int length = strlen(line);
-		char **strings;
-		ECardName *name;
-		ECard *card;
-		EList *list;
-		if (line[length - 1] == '\n')
-			line[--length] = 0;
-		
-		card = e_card_new("");
-		strings = g_strsplit(line, "\t", 3);
-		name = e_card_name_from_string(strings[1]);
-		gtk_object_set(GTK_OBJECT(card),
-			       "nickname", strings[0],
-			       "full_name", strings[1],
-			       "name", name,
-			       NULL);
-		gtk_object_get(GTK_OBJECT(card),
-			       "email", &list,
-			       NULL);
-		e_list_append(list, strings[2]);
-		g_strfreev(strings);
-		e_book_add_card(book, card, add_card_cb, card);
-	}
-}
-
-static guint
-ebook_create (void)
-{
-	EBook *book;
-	gchar *path, *uri;
-	
-	book = e_book_new ();
-
-	if (!book) {
-		printf ("%s: %s(): Couldn't create EBook, bailing.\n",
-			__FILE__,
-			__FUNCTION__);
-		return FALSE;
-	}
-	
-
-	path = g_concat_dir_and_file (g_get_home_dir (),
-				      "evolution/local/Contacts/addressbook.db");
-	uri = g_strdup_printf ("file://%s", path);
-	g_free (path);
-
-	if (! e_book_load_uri (book, uri, book_open_cb, NULL)) {
-		printf ("error calling load_uri!\n");
-	}
-	g_free(uri);
-
-
-	return FALSE;
-}
-
-#if 0
-static char *
-read_file (char *name)
-{
-	int  len;
-	char buff[65536];
-	char line[1024];
-	FILE *f;
-
-	f = fopen (name, "r");
-	if (f == NULL)
-		g_error ("Unable to open %s!\n", name);
-
-	len  = 0;
-	while (fgets (line, sizeof (line), f) != NULL) {
-		strcpy (buff + len, line);
-		len += strlen (line);
-	}
-
-	fclose (f);
-
-	return g_strdup (buff);
-}
-#endif
-
-int
-main (int argc, char **argv)
-{
-
-	CORBA_exception_init (&ev);
-
-	init_corba (&argc, argv);
-	init_bonobo (argc, argv);
-
-	gtk_idle_add ((GtkFunction) ebook_create, NULL);
-	
-	bonobo_main ();
-
-	return 0;
-}
diff --git a/addressbook/backend/ebook/test-card.c b/addressbook/backend/ebook/test-card.c
deleted file mode 100644
index a727dae7a3..0000000000
--- a/addressbook/backend/ebook/test-card.c
+++ /dev/null
@@ -1,194 +0,0 @@
-#include 
-#include "e-card.h"
-
-#define TEST_VCARD                   \
-"BEGIN:VCARD
-"                      \
-"FN:Nat
-"                           \
-"N:Friedman;Nat;D;Mr.
-"             \
-"ORG:Helix Code, Inc.
-"             \
-"TITLE:Head Geek
-"                  \
-"ROLE:Programmer/Executive
-"        \
-"BDAY:1977-08-06
-"                  \
-"TEL;WORK:617 679 1984
-"            \
-"TEL;CELL:123 456 7890
-"            \
-"EMAIL;INTERNET:nat@nat.org
-"       \
-"EMAIL;INTERNET:nat@helixcode.com
-" \
-"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234;
-" \
-"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA
-" \
-"END:VCARD
-"                        \
-"
-"
-
-static char *
-read_file (char *name)
-{
-	int  len;
-	char buff[65536];
-	char line[1024];
-	FILE *f;
-
-	f = fopen (name, "r");
-	if (f == NULL)
-		g_error ("Unable to open %s!\n", name);
-
-	len  = 0;
-	while (fgets (line, sizeof (line), f) != NULL) {
-		strcpy (buff + len, line);
-		len += strlen (line);
-	}
-
-	fclose (f);
-
-	return g_strdup (buff);
-}
-
-
-
-int
-main (int argc, char **argv)
-{
-	char  *cardstr;
-	ECard *card;
-
-	/* Fields */
-	char *fname;
-	char *org;
-	char *org_unit;
-        char *title;
-	char *role;
-	char *nickname;
-	char *fburl;
-	ECardName *name;
-	EList *address;
-	EList *phone;
-	EList *email;
-	EIterator *iterator;
-	ECardDate *bday;
-
-	gnome_init ("TestCard", "0.0", argc, argv);
-
-	cardstr = NULL;
-	if (argc == 2)
-		cardstr = read_file (argv [1]);
-
-	if (cardstr == NULL)
-		cardstr = TEST_VCARD;
-#if 0
-	{
-	  int i;
-	  for ( i = 0; i < 100000; i++ ) {
-	    card = e_card_new (cardstr);
-	  
-	    gtk_object_unref (GTK_OBJECT (card));
-	  }
-	}
-#endif
-	card = e_card_new (cardstr);
-	gtk_object_get(GTK_OBJECT(card),
-		       "full_name",  &fname,
-		       "name",       &name,
-		       "address",    &address,
-		       "phone",      &phone,
-		       "email",      &email,
-		       "org",        &org,
-		       "org_unit",   &org_unit,
-		       "title",      &title,
-		       "role",       &role,
-		       "nickname",   &nickname,
-		       "fburl",      &fburl,
-		       "birth_date", &bday,
-		       NULL);
-	if ( fname ) {
-	  printf("Name : %s\n", fname);
-	  g_free(fname);
-	}
-	if ( name ) {
-	  printf("Full Name:\n");
-	  if ( name->prefix )
-	    printf("  prefix     : %s\n", name->prefix);
-	  if ( name->given )
-	    printf("  given      : %s\n", name->given);
-	  if ( name->additional )
-	    printf("  additional : %s\n", name->additional);
-	  if ( name->family )
-	    printf("  family     : %s\n", name->family);
-	  if ( name->suffix )
-	    printf("  suffix     : %s\n", name->suffix);
-	}
-	if ( org ) {
-	  printf("Company : %s\n", org);
-        }
-	if ( org_unit ) {
-	  printf("Department : %s\n", org_unit);
-        }
-	if ( title ) {
-	  printf("Title : %s\n", title);
-        }
-	if ( role ) {
-	  printf("Profession : %s\n", role);
-        }
-	if ( nickname ) {
-	  printf("Nickname : %s\n", nickname);
-        }
-	if ( fburl ) {
-	  printf("Free Busy URL : %s\n", fburl);
-        }
-	if ( bday ) {
-	  printf("BDay : %4d-%02d-%02d\n", bday->year, bday->month, bday->day);
-	}
-	if ( email ) {
-	  iterator = e_list_get_iterator(address);
-	  for (; e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-	    printf("Email : %s\n", (char *) e_iterator_get(iterator));
-	  }
-	  gtk_object_unref(GTK_OBJECT(iterator));
-	}
-	if ( phone ) {
-	  iterator = e_list_get_iterator(address);
-	  for (; e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-	    ECardPhone *e_card_phone = (ECardPhone *) e_iterator_get(iterator);
-	    printf("Phone ; %d : %s\n", e_card_phone->flags, e_card_phone->number);
-	  }
-	  gtk_object_unref(GTK_OBJECT(iterator));
-	}
-	if ( address ) {
-	  iterator = e_list_get_iterator(address);
-	  for (; e_iterator_is_valid(iterator); e_iterator_next(iterator)) {
-	    ECardDeliveryAddress *del_address = (ECardDeliveryAddress *) e_iterator_get(iterator);
-	    printf("Address ; %d:\n", del_address->flags);
-	    if ( del_address->po )
-	      printf("  Po      : %s\n", del_address->po);
-	    if ( del_address->ext )
-	      printf("  Ext     : %s\n", del_address->ext);
-	    if ( del_address->street )
-	      printf("  Street  : %s\n", del_address->street);
-	    if ( del_address->city )
-	      printf("  City    : %s\n", del_address->city);
-	    if ( del_address->region )
-	      printf("  Region  : %s\n", del_address->region);
-	    if ( del_address->code )
-	      printf("  Code    : %s\n", del_address->code);
-	    if ( del_address->country )
-	      printf("  Country : %s\n", del_address->country);
-	  }
-	  gtk_object_unref(GTK_OBJECT(iterator));
-	}
-	printf("%s", e_card_get_vcard(card));
-	gtk_object_unref (GTK_OBJECT (card));
-
-	return 0;
-}
diff --git a/addressbook/backend/ebook/test-client-list.c b/addressbook/backend/ebook/test-client-list.c
deleted file mode 100644
index e492323310..0000000000
--- a/addressbook/backend/ebook/test-client-list.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#include 
-#include 
-#include 
-
-#ifdef USING_OAF
-#include 
-#else
-#include 
-#endif
-
-#include "e-book.h"
-
-CORBA_Environment ev;
-
-static void
-init_bonobo (int argc, char **argv)
-{
-#ifdef USING_OAF
-	gnome_init ("blah", "0.0", argc, argv);
-	oaf_init (argc, argv);
-#else
-	gnome_CORBA_init_with_popt_table (
-		"blah", "0.0",
-		&argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
-#endif
-
-	if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
-		g_error (_("Could not initialize Bonobo"));
-}
-
-static void
-get_cursor_cb (EBook *book, EBookStatus status, ECardCursor *cursor, gpointer closure)
-{
-	long length = e_card_cursor_get_length(cursor);
-	long i;
-	
-	printf ("Length: %d\n", (int) length);
-	for ( i = 0; i < length; i++ ) {
-		ECard *card = e_card_cursor_get_nth(cursor, i);
-		char *vcard = e_card_get_vcard(card);
-		printf("[%s]\n", vcard);
-		g_free(vcard);
-		gtk_object_unref(GTK_OBJECT(card));
-	}
-}
-
-static void
-book_open_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-	printf ("Book opened.\n");
-	e_book_get_cursor(book, "", get_cursor_cb, NULL);
-}
-
-static guint
-ebook_create (void)
-{
-	EBook *book;
-	
-	book = e_book_new ();
-
-	if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) {
-		printf ("error calling load_uri!\n");
-	}
-
-
-	return FALSE;
-}
-
-int
-main (int argc, char **argv)
-{
-
-	CORBA_exception_init (&ev);
-	init_bonobo (argc, argv);
-
-	gtk_idle_add ((GtkFunction) ebook_create, NULL);
-
-	bonobo_main ();
-
-	return 0;
-}
diff --git a/addressbook/backend/ebook/test-client.c b/addressbook/backend/ebook/test-client.c
deleted file mode 100644
index ef13c1ab96..0000000000
--- a/addressbook/backend/ebook/test-client.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#include 
-#include 
-#include 
-
-#include 
-
-#define TEST_VCARD                   \
-"BEGIN:VCARD
-"                      \
-"FN:Nat
-"                           \
-"N:Friedman;Nat;D;Mr.
-"             \
-"BDAY:1977-08-06
-"                  \
-"TEL;WORK:617 679 1984
-"            \
-"TEL;CELL:123 456 7890
-"            \
-"EMAIL;INTERNET:nat@nat.org
-"       \
-"EMAIL;INTERNET:nat@helixcode.com
-" \
-"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234;
-" \
-"END:VCARD
-"                        \
-"
-"
-
-static CORBA_Environment ev;
-static char *cardstr;
-
-#ifdef USING_OAF
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_init_with_popt_table("blah", "0.0", *argc, argv, NULL, 0, NULL);
-
-	oaf_init (*argc, argv);
-}
-
-#else
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_CORBA_init_with_popt_table (
-		"blah", "0.0",
-		argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
-}
-
-#endif
-
-static void
-init_bonobo (int argc, char **argv)
-{
-	if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
-		g_error (_("Could not initialize Bonobo"));
-}
-
-static void
-get_cursor_cb (EBook *book, EBookStatus status, ECardCursor *cursor, gpointer closure)
-{
-	long length = e_card_cursor_get_length(cursor);
-	long i;
-
-	/* we just added a card, so the length should be >1 */
-	printf ("\n%s: %s(): Number of cards is %ld\n",
-		__FILE__, __FUNCTION__, length);
-	if (length < 1)
-		printf ("*** Why isn't this above zero?? ***\n\n");
-	
-	for ( i = 0; i < length; i++ ) {
-		ECard *card = e_card_cursor_get_nth(cursor, i);
-		char *vcard = e_card_get_vcard(card);
-		printf("Get all cards callback: [%s]\n", vcard);
-		g_free(vcard);
-		gtk_object_unref(GTK_OBJECT(card));
-	}
-}
-
-static void
-add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure)
-{
-	char *vcard;
-	ECard *card;
-	GTimer *timer;
-
-	printf ("Status: %d\n", status);
-
-	printf ("Id: %s\n", id);
-
-	timer = g_timer_new ();
-	g_timer_start (timer);
-	card = e_book_get_card (book, id);
-	g_timer_stop (timer);
-
-	vcard = e_card_get_vcard(card);
-	printf ("%g\n", g_timer_elapsed (timer, NULL));
-	printf ("Card added: [%s]\n", vcard);
-	g_free(vcard);
-	gtk_object_unref(GTK_OBJECT(card));
-
-	printf ("Getting cards..\n");
-	e_book_get_cursor(book, "", get_cursor_cb, NULL);
-	printf ("Done getting all cards.\n");	
-}
-
-static void
-book_open_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-	e_book_add_vcard(book, cardstr, add_card_cb, NULL);
-}
-
-static guint
-ebook_create (void)
-{
-	EBook *book;
-	
-	book = e_book_new ();
-
-	if (!book) {
-		printf ("%s: %s(): Couldn't create EBook, bailing.\n",
-			__FILE__,
-			__FUNCTION__);
-		return FALSE;
-	}
-	
-
-	if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) {
-		printf ("error calling load_uri!\n");
-	}
-
-
-	return FALSE;
-}
-
-static char *
-read_file (char *name)
-{
-	int  len;
-	char buff[65536];
-	char line[1024];
-	FILE *f;
-
-	f = fopen (name, "r");
-	if (f == NULL)
-		g_error ("Unable to open %s!\n", name);
-
-	len  = 0;
-	while (fgets (line, sizeof (line), f) != NULL) {
-		strcpy (buff + len, line);
-		len += strlen (line);
-	}
-
-	fclose (f);
-
-	return g_strdup (buff);
-}
-
-
-int
-main (int argc, char **argv)
-{
-
-	CORBA_exception_init (&ev);
-
-	init_corba (&argc, argv);
-	init_bonobo (argc, argv);
-
-	cardstr = NULL;
-	if (argc == 2)
-		cardstr = read_file (argv [1]);
-
-	if (cardstr == NULL)
-		cardstr = TEST_VCARD;
-
-	gtk_idle_add ((GtkFunction) ebook_create, NULL);
-	
-	bonobo_main ();
-
-	return 0;
-}
diff --git a/addressbook/backend/idl/.cvsignore b/addressbook/backend/idl/.cvsignore
deleted file mode 100644
index 09980ae6ba..0000000000
--- a/addressbook/backend/idl/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
diff --git a/addressbook/backend/idl/Makefile.am b/addressbook/backend/idl/Makefile.am
deleted file mode 100644
index db61d2c30c..0000000000
--- a/addressbook/backend/idl/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-idldir = $(datadir)/idl
-
-idl_DATA =			\
-	addressbook.idl
-
-EXTRA_DIST = $(idl_DATA)
diff --git a/addressbook/backend/idl/addressbook.idl b/addressbook/backend/idl/addressbook.idl
deleted file mode 100644
index b8cf15c4ff..0000000000
--- a/addressbook/backend/idl/addressbook.idl
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-
-module Evolution {
-
-	typedef string CardId;
-	typedef string VCard;
-	typedef sequence VCardList;
-
-	interface CardCursor : Bonobo::Unknown {
-		long   get_length ();
-		string get_nth    (in long n);
-	};
-
-	/* 
-	 * A book view is a live view of a book.  It's either a view
-	 * of all the cards in the book or a view of a query.  When
-	 * created, it will get a series of signal_card_added calls
-	 * for all objects in the initial set.  After that, it will
-	 * get added, removed, or changed signals whenever the book
-	 * changes (if it affects the set of viewed cards.)
-	 */
-	interface BookViewListener : Bonobo::Unknown {
-		void signal_card_added (in VCardList cards);
-		void signal_card_removed (in CardId id);
-		void signal_card_changed (in VCardList cards);
-		void signal_sequence_complete ();
-	};
-	
-	interface BookView : Bonobo::Unknown {
-	};
-
-	interface Book : Bonobo::Unknown {
-		/*
-		 * Fetching cards in the addresbook.
-		 */
-		VCard get_vcard (in CardId id);
-
-		/*
-		 * Permissions.  the first form is general write
-		 * permission (whether or not the user can add or
-		 * remove or modify any entry in the addressbook.)
-		 *
-		 * if can_write returns TRUE, can_write_card can still
-		 * return FALSE if the user doesn't have permission to
-		 * modify/remove that specific card.
-		 */
-		boolean can_write ();
-		boolean can_write_card (in CardId Id);
-
-		/*
-		 * Adding and deleting cards in the book.
-		 */
-		void create_card (in VCard vcard);
-		void remove_card (in CardId Id);
-	        
-		/*
-		 * Modifying cards in the addressbook.
-		 */
-		void modify_card (in VCard vcard);
-		
-		/*
-		 * These two functions return a cursor to the book
-		 * listener.  This is for people who want a snapshot
-		 * of the addressbook.  The syntax for the query
-		 * string is not yet defined.
-		 */
-		void get_cursor (in string query);
-		
-		/*
-		 * These two functions return a book view to the book
-		 * listener.  This is for people who want a live view
-		 * of the addressbook.
-		 */
-		void get_book_view(in BookViewListener listener, in string query);
-
-		void check_connection ();
-
-		string get_name ();
-	};
-
-	interface BookListener : Bonobo::Unknown {
-
-		enum CallStatus {
-			Success,
-			RepositoryOffline,
-			PermissionDenied,
-			CardNotFound,
-			ProtocolNotSupported,
-			OtherError
-		};
-
-		void respond_create_card (in CallStatus status, in CardId Id);
-
-		void respond_remove_card (in CallStatus status);
-
-		void respond_modify_card (in CallStatus status);
-		
-		void report_open_book_progress (in string status_message, in short percent);
-
-		void respond_open_book (in CallStatus status, in Book book);
-
-		void respond_get_cursor (in CallStatus status, in CardCursor cursor);
-
-		void respond_get_view (in CallStatus status, in BookView view);
-
-		/**
-		 * report_connection_status:
-		 *
-		 * Used to report changes in the connection to the
-		 * contact repository.  This is often a response to a
-		 * call to check_connection() on the Book, but wombat
-		 * is free to report the connection status without
-		 * being asked.
-		 */
-		void report_connection_status (in boolean connected);
-	};
-
-	interface BookFactory : Bonobo::Unknown {
-		exception ProtocolNotSupported {};
-
-		void open_book (in string uri, in BookListener listener)
-			raises (ProtocolNotSupported);
-	};
-};
diff --git a/addressbook/backend/pas/.cvsignore b/addressbook/backend/pas/.cvsignore
deleted file mode 100644
index 071cef99ae..0000000000
--- a/addressbook/backend/pas/.cvsignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-addressbook-stubs.c
-addressbook-skels.c
-addressbook-common.c
-addressbook.h
-*.lo
-*.la
diff --git a/addressbook/backend/pas/Makefile.am b/addressbook/backend/pas/Makefile.am
deleted file mode 100644
index 8f4f8a3731..0000000000
--- a/addressbook/backend/pas/Makefile.am
+++ /dev/null
@@ -1,52 +0,0 @@
-CORBA_SOURCE =						\
-	addressbook.h					\
-	addressbook-common.c				\
-	addressbook-stubs.c				\
-	addressbook-skels.c
-
-idls =							\
-	$(srcdir)/../idl/addressbook.idl
-
-idl_flags = `$(GNOME_CONFIG) --cflags idl` -I $(datadir)/idl
-
-$(CORBA_SOURCE): $(idls)
-	$(ORBIT_IDL) $(srcdir)/../idl/addressbook.idl $(idl_flags)
-
-INCLUDES =						\
-        -DGNOMELOCALEDIR=\""$(datadir)/locale"\"        \
-	-DG_LOG_DOMAIN=\"wombat-pas\"			\
-	-I$(top_srcdir) 				\
-	-I$(top_srcdir)/addressbook/backend		\
-	-I$(top_builddir)/addressbook/backend		\
-        $(BONOBO_GNOME_CFLAGS)
-
-LDAP_BACKEND_SOURCES = pas-backend-ldap.c pas-backend-ldap.h
-
-if ENABLE_LDAP
-LDAP_BACKEND = $(LDAP_BACKEND_SOURCES)
-else
-LDAP_BACKEND = 
-endif
-
-noinst_LIBRARIES = libpas.a
-
-libpas_a_SOURCES =					\
-	$(CORBA_SOURCE)					\
-	pas-book-factory.c				\
-	pas-book-factory.h				\
-	pas-book-view.c					\
-	pas-book-view.h					\
-	pas-book.c					\
-	pas-book.h					\
-	pas-backend-file.c				\
-	pas-backend-file.h				\
-	$(LDAP_BACKEND)					\
-	pas-backend.c					\
-	pas-backend.h					\
-	pas-card-cursor.c				\
-	pas-card-cursor.h
-
-BUILT_SOURCES = $(CORBA_SOURCE)
-CLEANFILES   += $(BUILT_SOURCES)
-
-EXTRA_DIST = $(LDAP_BACKEND_SOURCES)
\ No newline at end of file
diff --git a/addressbook/backend/pas/TODO b/addressbook/backend/pas/TODO
deleted file mode 100644
index 0c77c1b200..0000000000
--- a/addressbook/backend/pas/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-* Implement pas_book_factory_activate
-* Authentication
\ No newline at end of file
diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c
deleted file mode 100644
index 3cf0586afe..0000000000
--- a/addressbook/backend/pas/pas-backend-file.c
+++ /dev/null
@@ -1,1233 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include "config.h"  
-#include 
-#include 
-#include 
-#include 
-#ifdef HAVE_DB_185_H
-#include 
-#else
-#ifdef HAVE_DB1_DB_H
-#include 
-#else
-#include 
-#endif
-#endif
-
-#include "pas-backend-file.h"
-#include "pas-book.h"
-#include "pas-card-cursor.h"
-#include 
-#include 
-#include 
-
-#define PAS_BACKEND_FILE_VERSION_NAME "PAS-DB-VERSION"
-#define PAS_BACKEND_FILE_VERSION "0.1"
-
-static PASBackendClass *pas_backend_file_parent_class;
-typedef struct _PASBackendFileCursorPrivate PASBackendFileCursorPrivate;
-typedef struct _PASBackendFileBookView PASBackendFileBookView;
-typedef struct _PASBackendFileSearchContext PASBackendFileSearchContext;
-
-struct _PASBackendFilePrivate {
-	GList    *clients;
-	gboolean  loaded;
-	char     *uri;
-	DB       *file_db;
-	GList    *book_views;
-};
-
-struct _PASBackendFileCursorPrivate {
-	PASBackend *backend;
-	PASBook    *book;
-
-	GList      *elements;
-	guint32    num_elements;
-};
-
-struct _PASBackendFileBookView {
-	PASBookView                 *book_view;
-	gchar                       *search;
-	ESExp                       *search_sexp;
-	PASBackendFileSearchContext *search_context;
-};
-
-struct _PASBackendFileSearchContext {
-	ECardSimple *card;
-};
-
-static long
-get_length(PASCardCursor *cursor, gpointer data)
-{
-	PASBackendFileCursorPrivate *cursor_data = (PASBackendFileCursorPrivate *) data;
-
-	return cursor_data->num_elements;
-}
-
-static char *
-get_nth(PASCardCursor *cursor, long n, gpointer data)
-{
-	PASBackendFileCursorPrivate *cursor_data = (PASBackendFileCursorPrivate *) data;
-	GList *nth_item = g_list_nth(cursor_data->elements, n);
-
-	return g_strdup((char*)nth_item->data);
-}
-
-static void
-cursor_destroy(GtkObject *object, gpointer data)
-{
-	CORBA_Environment ev;
-	Evolution_Book corba_book;
-	PASBackendFileCursorPrivate *cursor_data = (PASBackendFileCursorPrivate *) data;
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(cursor_data->book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_unref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("cursor_destroy: Exception unreffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-
-	g_list_foreach(cursor_data->elements, (GFunc)g_free, NULL);
-	g_list_free (cursor_data->elements);
-
-	g_free(cursor_data);
-}
-
-static void
-view_destroy(GtkObject *object, gpointer data)
-{
-	CORBA_Environment ev;
-	Evolution_Book    corba_book;
-	PASBook           *book = (PASBook *)data;
-	PASBackendFile    *bf;
-	GList             *list;
-
-	bf = PAS_BACKEND_FILE(pas_book_get_backend(book));
-	for (list = bf->priv->book_views; list; list = g_list_next(list)) {
-		PASBackendFileBookView *view = list->data;
-		if (view->book_view == PAS_BOOK_VIEW(object)) {
-			gtk_object_unref((GtkObject *)view->search_sexp);
-			g_free (view->search_context);
-			g_free (view->search);
-			g_free (view);
-			bf->priv->book_views = g_list_remove_link(bf->priv->book_views, list);
-			g_list_free_1(list);
-			break;
-		}
-	}
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_unref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("view_destroy: Exception unreffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-}
-
-static void
-string_to_dbt(const char *str, DBT *dbt)
-{
-	dbt->data = (void*)str;
-	dbt->size = strlen (str) + 1;
-}
-
-static char *
-pas_backend_file_create_unique_id (char *vcard)
-{
-	/* use a 32 counter and the 32 bit timestamp to make an id.
-	   it's doubtful 2^32 id's will be created in a second, so we
-	   should be okay. */
-	static guint c = 0;
-	return g_strdup_printf ("pas-id-%08lX%08X", time(NULL), c++);
-}
-
-static gboolean
-compare_email (ECardSimple *card, const char *str,
-	       char *(*compare)(const char*, const char*))
-{
-	int i;
-
-	for (i = E_CARD_SIMPLE_EMAIL_ID_EMAIL; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i ++) {
-		const char *email = e_card_simple_get_email (card, i);
-
-		if (email && compare(email, str))
-			return TRUE;
-	}
-
-	return FALSE;
-}
-
-static gboolean
-compare_phone (ECardSimple *card, const char *str,
-	       char *(*compare)(const char*, const char*))
-{
-	int i;
-
-	for (i = E_CARD_SIMPLE_PHONE_ID_ASSISTANT; i < E_CARD_SIMPLE_PHONE_ID_LAST; i ++) {
-		const ECardPhone *phone = e_card_simple_get_phone (card, i);
-
-		if (phone && compare(phone->number, str))
-			return TRUE;
-	}
-
-	return FALSE;
-}
-
-static gboolean
-compare_address (ECardSimple *card, const char *str,
-		 char *(*compare)(const char*, const char*))
-{
-	g_warning("address searching not implemented\n");
-	return FALSE;
-}
-
-static struct prop_info {
-	ECardSimpleField field_id;
-	const char *query_prop;
-	const char *ecard_prop;
-#define PROP_TYPE_NORMAL   0x01
-#define PROP_TYPE_LIST     0x02
-#define PROP_TYPE_LISTITEM 0x03
-	int prop_type;
-	gboolean (*list_compare)(ECardSimple *ecard, const char *str,
-				 char *(*compare)(const char*, const char*));
-
-} prop_info_table[] = {
-#define NORMAL_PROP(f,q,e) {f, q, e, PROP_TYPE_NORMAL, NULL}
-#define LIST_PROP(q,e,c) {0, q, e, PROP_TYPE_LIST, c}
-
-	/* query prop,  ecard prop,   type,              list compare function */
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_FILE_AS, "file_as", "file_as" ),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_FULL_NAME, "full_name",  "full_name" ),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_URL, "url", "url" ),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_MAILER, "mailer", "mailer"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_ORG, "org", "org"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_ORG_UNIT, "org_unit", "org_unit"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_OFFICE, "office", "office"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_TITLE, "title", "title"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_ROLE, "role", "role"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_MANAGER, "manager", "manager"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_ASSISTANT, "assistant", "assistant"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_NICKNAME, "nickname", "nickname"),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_SPOUSE, "spouse", "spouse" ),
-	NORMAL_PROP ( E_CARD_SIMPLE_FIELD_NOTE, "note", "note"),
-	LIST_PROP ( "email", "email", compare_email ),
-	LIST_PROP ( "phone", "phone", compare_phone ),
-	LIST_PROP ( "address", "address", compare_address ),
-};
-static int num_prop_infos = sizeof(prop_info_table) / sizeof(prop_info_table[0]);
-
-static ESExpResult *
-entry_compare(PASBackendFileSearchContext *ctx, struct _ESExp *f,
-	      int argc, struct _ESExpResult **argv,
-	      char *(*compare)(const char*, const char*))
-{
-	ESExpResult *r;
-	int truth = FALSE;
-
-	if (argc == 2
-	    && argv[0]->type == ESEXP_RES_STRING
-	    && argv[1]->type == ESEXP_RES_STRING) {
-		char *propname;
-		struct prop_info *info = NULL;
-		int i;
-		gboolean any_field;
-
-		propname = argv[0]->value.string;
-
-		any_field = !strcmp(propname, "x-evolution-any-field");
-		for (i = 0; i < num_prop_infos; i ++) {
-			if (any_field
-			    || !strcmp (prop_info_table[i].query_prop, propname)) {
-				info = &prop_info_table[i];
-				
-				if (info->prop_type == PROP_TYPE_NORMAL) {
-					char *prop = NULL;
-					/* searches where the query's property
-					   maps directly to an ecard property */
-					
-					prop = e_card_simple_get (ctx->card, info->field_id);
-
-					if (prop && compare(prop, argv[1]->value.string)) {
-						truth = TRUE;
-					}
-					if ((!prop) && compare("", argv[1]->value.string)) {
-						truth = TRUE;
-					}
-				}
-				else if (info->prop_type == PROP_TYPE_LIST) {
-				/* the special searches that match any of the list elements */
-					truth = info->list_compare (ctx->card, argv[1]->value.string, compare);
-				}
-
-				/* if we're looking at all fields and find a match,
-				   or if we're just looking at this one field,
-				   break. */
-				if ((any_field && truth)
-				    || !any_field)
-					break;
-			}
-		}
-		
-	}
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = truth;
-
-	return r;
-}
-
-static ESExpResult *
-func_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	PASBackendFileSearchContext *ctx = data;
-
-	return entry_compare (ctx, f, argc, argv, (char *(*)(const char*, const char*)) e_strstrcase);
-}
-
-static char *
-is_helper (const char *s1, const char *s2)
-{
-	if (!strcmp(s1, s2))
-		return (char*)s1;
-	else
-		return NULL;
-}
-
-static ESExpResult *
-func_is(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	PASBackendFileSearchContext *ctx = data;
-
-	return entry_compare (ctx, f, argc, argv, is_helper);
-}
-
-static char *
-endswith_helper (const char *s1, const char *s2)
-{
-	char *p;
-	if ((p = strstr(s1, s2))
-	    && (strlen(p) == strlen(s2)))
-		return p;
-	else
-		return NULL;
-}
-
-static ESExpResult *
-func_endswith(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	PASBackendFileSearchContext *ctx = data;
-
-	return entry_compare (ctx, f, argc, argv, endswith_helper);
-}
-
-static char *
-beginswith_helper (const char *s1, const char *s2)
-{
-	char *p;
-	if ((p = strstr(s1, s2))
-	    && (p == s1))
-		return p;
-	else
-		return NULL;
-}
-
-static ESExpResult *
-func_beginswith(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	PASBackendFileSearchContext *ctx = data;
-
-	return entry_compare (ctx, f, argc, argv, beginswith_helper);
-}
-
-/* 'builtin' functions */
-static struct {
-	char *name;
-	ESExpFunc *func;
-	int type;		/* set to 1 if a function can perform shortcut evaluation, or
-				   doesn't execute everything, 0 otherwise */
-} symbols[] = {
-	{ "contains", func_contains, 0 },
-	{ "is", func_is, 0 },
-	{ "beginswith", func_beginswith, 0 },
-	{ "endswith", func_endswith, 0 },
-};
-
-static gboolean
-vcard_matches_search (PASBackendFileBookView *view, char *vcard_string)
-{
-	ESExpResult *r;
-	gboolean retval;
-
-	view->search_context->card = e_card_simple_new (e_card_new (vcard_string));
-
-	/* if it's not a valid vcard why is it in our db? :) */
-	if (!view->search_context->card)
-		return FALSE;
-
-	r = e_sexp_eval(view->search_sexp);
-
-	retval = (r && r->type == ESEXP_RES_BOOL && r->value.bool);
-
-	gtk_object_unref(GTK_OBJECT(view->search_context->card));
-
-	e_sexp_result_free(r);
-
-	return retval;
-}
-
-static void
-pas_backend_file_search (PASBackendFile  	*bf,
-			 PASBook         	*book,
-			 PASBackendFileBookView *view)
-{
-	int     db_error = 0;
-	GList   *cards = NULL;
-	DB      *db = bf->priv->file_db;
-	DBT     id_dbt, vcard_dbt;
-	int i;
-
-	if (!bf->priv->loaded)
-		return;
-
-	view->search_sexp = e_sexp_new();
-	view->search_context = g_new0(PASBackendFileSearchContext, 1);
-
-	for(i=0;isearch_sexp, 0, symbols[i].name,
-					     (ESExpIFunc *)symbols[i].func, view->search_context);
-		} else {
-			e_sexp_add_function(view->search_sexp, 0, symbols[i].name,
-					    symbols[i].func, view->search_context);
-		}
-	}
-
-	e_sexp_input_text(view->search_sexp, view->search, strlen(view->search));
-	e_sexp_parse(view->search_sexp);
-
-	db_error = db->seq(db, &id_dbt, &vcard_dbt, R_FIRST);
-
-	while (db_error == 0) {
-
-		/* don't include the version in the list of cards */
-		if (id_dbt.size != strlen(PAS_BACKEND_FILE_VERSION_NAME) + 1
-		    || strcmp (id_dbt.data, PAS_BACKEND_FILE_VERSION_NAME)) {
-			char *vcard_string = vcard_dbt.data;
-
-			/* check if the vcard matches the search sexp */
-			if (vcard_matches_search (view, vcard_string)) {
-				cards = g_list_append (cards, strdup(vcard_string));
-			}
-		}
-		
-		db_error = db->seq(db, &id_dbt, &vcard_dbt, R_NEXT);
-	}
-
-	if (db_error == -1) {
-		g_warning ("pas_backend_file_search: error building list\n");
-	}
-	else {
-		pas_book_view_notify_add (view->book_view, cards);
-		pas_book_view_notify_complete (view->book_view);
-	}
-
-	/*
-	** It's fine to do this now since the data has been handed off.
-	*/
-	g_list_foreach (cards, (GFunc)g_free, NULL);
-	g_list_free (cards);
-}
-
-static char *
-do_create(PASBackend *backend,
-	  char       *vcard_req,
-	  char      **vcard_ptr)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	DB             *db = bf->priv->file_db;
-	DBT            id_dbt, vcard_dbt;
-	int            db_error;
-	char           *id;
-	ECard          *card;
-	char           *vcard;
-	char           *ret_val;
-
-	id = pas_backend_file_create_unique_id (vcard_req);
-
-	string_to_dbt (id, &id_dbt);
-	
-	card = e_card_new(vcard_req);
-	e_card_set_id(card, id);
-	vcard = e_card_get_vcard(card);
-
-	string_to_dbt (vcard, &vcard_dbt);
-
-	db_error = db->put (db, &id_dbt, &vcard_dbt, 0);
-
-	if (0 == db_error) {
-		db_error = db->sync (db, 0);
-		if (db_error != 0)
-			g_warning ("db->sync failed.\n");
-		ret_val = id;
-
-	}
-	else {
-		ret_val = NULL;
-	}
-
-	gtk_object_unref(GTK_OBJECT(card));
-	card = NULL;
-
-	if (vcard_ptr && ret_val)
-		*vcard_ptr = vcard;
-	else
-		g_free (vcard);
-
-	return ret_val;
-}
-
-static void
-pas_backend_file_process_create_card (PASBackend *backend,
-				      PASBook    *book,
-				      PASRequest *req)
-{
-	char *id;
-	char *vcard;
-	GList          *list;
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-
-	id = do_create(backend, req->vcard, &vcard);
-	if (id) {
-		for (list = bf->priv->book_views; list; list = g_list_next(list)) {
-			PASBackendFileBookView *view = list->data;
-			if (vcard_matches_search (view, vcard)) {
-				pas_book_view_notify_add_1 (view->book_view, vcard);
-				pas_book_view_notify_complete (view->book_view);
-			}
-		}
-
-		pas_book_respond_create (
-				 book,
-				 Evolution_BookListener_Success,
-				 id);
-		g_free(vcard);
-		g_free(id);
-	}
-	else {
-		/* XXX need a different call status for this case, i
-                   think */
-		pas_book_respond_create (
-				 book,
-				 Evolution_BookListener_CardNotFound,
-				 "");
-	}
-
-	g_free(req->vcard);
-}
-
-static void
-pas_backend_file_process_remove_card (PASBackend *backend,
-				      PASBook    *book,
-				      PASRequest *req)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	DB             *db = bf->priv->file_db;
-	DBT            id_dbt, vcard_dbt;
-	int            db_error;
-	GList         *list;
-	char          *vcard_string;
-
-	string_to_dbt (req->id, &id_dbt);
-
-	db_error = db->get (db, &id_dbt, &vcard_dbt, 0);
-	if (0 != db_error) {
-		pas_book_respond_remove (
-				 book,
-				 Evolution_BookListener_CardNotFound);
-		g_free (req->id);
-		return;
-	}
-	
-	db_error = db->del (db, &id_dbt, 0);
-	if (0 != db_error) {
-		pas_book_respond_remove (
-				 book,
-				 Evolution_BookListener_CardNotFound);
-		g_free (req->id);
-		return;
-	}
-
-	db_error = db->sync (db, 0);
-	if (db_error != 0)
-		g_warning ("db->sync failed.\n");
-
-
-	vcard_string = vcard_dbt.data;
-	for (list = bf->priv->book_views; list; list = g_list_next(list)) {
-		PASBackendFileBookView *view = list->data;
-		if (vcard_matches_search (view, vcard_string)) {
-			pas_book_view_notify_remove (view->book_view, req->id);
-			pas_book_view_notify_complete (view->book_view);
-		}
-	}
-	
-	pas_book_respond_remove (
-				 book,
-				 Evolution_BookListener_Success);
-	
-	g_free (req->id);
-}
-
-static void
-pas_backend_file_process_modify_card (PASBackend *backend,
-				      PASBook    *book,
-				      PASRequest *req)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	DB             *db = bf->priv->file_db;
-	DBT            id_dbt, vcard_dbt;
-	int            db_error;
-	GList         *list;
-	ECard         *card;
-	char          *id;
-	char          *old_vcard_string;
-
-	/* create a new ecard from the request data */
-	card = e_card_new(req->vcard);
-	id = e_card_get_id(card);
-
-	string_to_dbt (id, &id_dbt);	
-
-	/* get the old ecard - the one that's presently in the db */
-	db_error = db->get (db, &id_dbt, &vcard_dbt, 0);
-	if (0 != db_error) {
-		pas_book_respond_modify (
-				 book,
-				 Evolution_BookListener_CardNotFound);
-		g_free (req->id);
-		return;
-	}
-	old_vcard_string = g_strdup(vcard_dbt.data);
-
-	string_to_dbt (req->vcard, &vcard_dbt);	
-
-	db_error = db->put (db, &id_dbt, &vcard_dbt, 0);
-
-	if (0 == db_error) {
-		db_error = db->sync (db, 0);
-		if (db_error != 0)
-			g_warning ("db->sync failed.\n");
-
-		for (list = bf->priv->book_views; list; list = g_list_next(list)) {
-			PASBackendFileBookView *view = list->data;
-			gboolean old_match, new_match;
-
-			old_match = vcard_matches_search (view, old_vcard_string);
-			new_match = vcard_matches_search (view, req->vcard);
-			if (old_match && new_match)
-				pas_book_view_notify_change_1 (view->book_view, req->vcard);
-			else if (new_match)
-				pas_book_view_notify_add_1 (view->book_view, req->vcard);
-			else /* if (old_match) */
-				pas_book_view_notify_remove (view->book_view, id);
-			pas_book_view_notify_complete (view->book_view);
-		}
-
-		pas_book_respond_modify (
-				 book,
-				 Evolution_BookListener_Success);
-	}
-	else {
-		pas_book_respond_modify (
-				 book,
-				 Evolution_BookListener_CardNotFound);
-	}
-
-	g_free(old_vcard_string);
-
-	gtk_object_unref(GTK_OBJECT(card));
-	g_free (req->vcard);
-}
-
-static void
-pas_backend_file_build_all_cards_list(PASBackend *backend,
-				      PASBackendFileCursorPrivate *cursor_data)
-{
-	  PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	  DB             *db = bf->priv->file_db;
-	  int            db_error;
-	  DBT  id_dbt, vcard_dbt;
-  
-	  cursor_data->elements = NULL;
-	  
-	  db_error = db->seq(db, &id_dbt, &vcard_dbt, R_FIRST);
-
-	  while (db_error == 0) {
-
-		  /* don't include the version in the list of cards */
-		  if (id_dbt.size != strlen(PAS_BACKEND_FILE_VERSION_NAME) + 1
-		      || strcmp (id_dbt.data, PAS_BACKEND_FILE_VERSION_NAME)) {
-
-			  cursor_data->elements = g_list_append(cursor_data->elements,
-								g_strdup(vcard_dbt.data));
-
-		  }
-
-		  db_error = db->seq(db, &id_dbt, &vcard_dbt, R_NEXT);
-
-	  }
-
-	  if (db_error == -1) {
-		  g_warning ("pas_backend_file_build_all_cards_list: error building list\n");
-	  }
-	  else {
-		  cursor_data->num_elements = g_list_length (cursor_data->elements);
-	  }
-}
-
-static void
-pas_backend_file_process_get_cursor (PASBackend *backend,
-				     PASBook    *book,
-				     PASRequest *req)
-{
-	/*
-	  PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	  DB             *db = bf->priv->file_db;
-	  DBT            id_dbt, vcard_dbt;
-	*/
-	CORBA_Environment ev;
-	int            db_error = 0;
-	PASBackendFileCursorPrivate *cursor_data;
-	PASCardCursor *cursor;
-	Evolution_Book corba_book;
-
-	cursor_data = g_new(PASBackendFileCursorPrivate, 1);
-	cursor_data->backend = backend;
-	cursor_data->book = book;
-
-	pas_backend_file_build_all_cards_list(backend, cursor_data);
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_ref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("pas_backend_file_process_get_cursor: Exception reffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-	
-	cursor = pas_card_cursor_new(get_length,
-				     get_nth,
-				     cursor_data);
-
-	gtk_signal_connect(GTK_OBJECT(cursor), "destroy",
-			   GTK_SIGNAL_FUNC(cursor_destroy), cursor_data);
-	
-	pas_book_respond_get_cursor (
-		book,
-		(db_error == 0 
-		 ? Evolution_BookListener_Success 
-		 : Evolution_BookListener_CardNotFound),
-		cursor);
-}
-
-static void
-pas_backend_file_process_get_book_view (PASBackend *backend,
-					PASBook    *book,
-					PASRequest *req)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	CORBA_Environment ev;
-	PASBookView       *book_view;
-	Evolution_Book    corba_book;
-	PASBackendFileBookView *view;
-
-	g_return_if_fail (req->listener != NULL);
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_ref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("pas_backend_file_process_get_book_view: Exception reffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-
-	book_view = pas_book_view_new (req->listener);
-
-	gtk_signal_connect(GTK_OBJECT(book_view), "destroy",
-			   GTK_SIGNAL_FUNC(view_destroy), book);
-
-	pas_book_respond_get_book_view (book,
-		   (book_view != NULL
-		    ? Evolution_BookListener_Success 
-		    : Evolution_BookListener_CardNotFound /* XXX */),
-		   book_view);
-
-	view = g_new(PASBackendFileBookView, 1);
-	view->book_view = book_view;
-	view->search = g_strdup(req->search);
-
-	bf->priv->book_views = g_list_prepend(bf->priv->book_views, view);
-
-	pas_backend_file_search (bf, book, view);
-
-	g_free(req->search);
-}
-
-static void
-pas_backend_file_process_check_connection (PASBackend *backend,
-					   PASBook    *book,
-					   PASRequest *req)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-
-	pas_book_report_connection (book, bf->priv->file_db != NULL);
-}
-
-static char *
-pas_backend_file_extract_path_from_uri (const char *uri)
-{
-	g_assert (strncasecmp (uri, "file:", 5) == 0);
-
-	return g_strdup (uri + 5);
-}
-
-static gboolean
-can_write (PASBackend *backend)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	char *path = pas_backend_file_extract_path_from_uri (bf->priv->uri);
-	gboolean retval;
-
-	retval = (access (path, W_OK) != -1);
-
-	g_free (path);
-
-	return retval;
-}
-
-static gboolean
-pas_backend_file_can_write (PASBook *book)
-{
-	PASBackend* backend = pas_book_get_backend (book);
-
-	return can_write(backend);
-}
-
-static gboolean
-pas_backend_file_can_write_card (PASBook *book,
-				 const char *id)
-{
-	PASBackend* backend = pas_book_get_backend (book);
-
-	return can_write(backend);
-}
-
-static void
-pas_backend_file_process_client_requests (PASBook *book)
-{
-	PASBackend *backend;
-	PASRequest *req;
-
-	backend = pas_book_get_backend (book);
-
-	req = pas_book_pop_request (book);
-	if (req == NULL)
-		return;
-
-	switch (req->op) {
-	case CreateCard:
-		pas_backend_file_process_create_card (backend, book, req);
-		break;
-
-	case RemoveCard:
-		pas_backend_file_process_remove_card (backend, book, req);
-		break;
-
-	case ModifyCard:
-		pas_backend_file_process_modify_card (backend, book, req);
-		break;
-
-	case CheckConnection:
-		pas_backend_file_process_check_connection (backend, book, req);
-		break;
-		
-	case GetCursor:
-		pas_backend_file_process_get_cursor (backend, book, req);
-		break;
-		
-	case GetBookView:
-		pas_backend_file_process_get_book_view (backend, book, req);
-		break;
-	}
-
-	g_free (req);
-}
-
-static void
-pas_backend_file_book_destroy_cb (PASBook *book, gpointer data)
-{
-	PASBackendFile *backend;
-
-	backend = PAS_BACKEND_FILE (data);
-
-	pas_backend_remove_client (PAS_BACKEND (backend), book);
-}
-
-static char *
-pas_backend_file_get_vcard (PASBook *book, const char *id)
-{
-	PASBackendFile *bf;
-	DBT            id_dbt, vcard_dbt;
-	DB             *db;
-	int            db_error;
-
-	bf = PAS_BACKEND_FILE (pas_book_get_backend (book));
-	db = bf->priv->file_db;
-
-	string_to_dbt (id, &id_dbt);
-
-	db_error = db->get (db, &id_dbt, &vcard_dbt, 0);
-	if (db_error == 0) {
-		/* success */
-		return g_strdup (vcard_dbt.data);
-	}
-	else if (db_error == 1) {
-		/* key was not in file */
-		return g_strdup (""); /* XXX */
-	}
-	else /* if (db_error < 0)*/ {
-		/* error */
-		return g_strdup (""); /* XXX */
-	}
-}
-
-static gboolean
-pas_backend_file_upgrade_db (PASBackendFile *bf, char *old_version)
-{
-	if (!strcmp (old_version, "0.0")) {
-		/* 0.0 is the same as 0.1, we just need to add the version */
-		DB  *db = bf->priv->file_db;
-		DBT version_name_dbt, version_dbt;
-		int db_error;
-
-		string_to_dbt (PAS_BACKEND_FILE_VERSION_NAME, &version_name_dbt);
-		string_to_dbt (PAS_BACKEND_FILE_VERSION, &version_dbt);
-
-		db_error = db->put (db, &version_name_dbt, &version_dbt, 0);
-		if (db_error == 0)
-			return TRUE;
-		else
-			return FALSE;
-	}
-	else {
-		g_warning ("unsupported version '%s' found in PAS backend file\n",
-			   old_version);
-		return FALSE;
-	}
-}
-
-static gboolean
-pas_backend_file_maybe_upgrade_db (PASBackendFile *bf)
-{
-	DB   *db = bf->priv->file_db;
-	DBT  version_name_dbt, version_dbt;
-	int  db_error;
-	char *version;
-	gboolean ret_val = TRUE;
-
-	string_to_dbt (PAS_BACKEND_FILE_VERSION_NAME, &version_name_dbt);
-
-	db_error = db->get (db, &version_name_dbt, &version_dbt, 0);
-	if (db_error == 0) {
-		/* success */
-		version = g_strdup (version_dbt.data);
-	}
-	else {
-		/* key was not in file */
-		version = g_strdup ("0.0");
-	}
-
-	if (strcmp (version, PAS_BACKEND_FILE_VERSION))
-		ret_val = pas_backend_file_upgrade_db (bf, version);
-
-	g_free (version);
-
-	return ret_val;
-}
-
-#define INITIAL_VCARD "BEGIN:VCARD\n\
-X-EVOLUTION-FILE-AS:Helix Code, Inc.\n\
-LABEL;WORK;QUOTED-PRINTABLE:101 Rogers St. Ste. 214=0ACambridge, MA 02142=0AUSA\n\
-TEL;WORK;VOICE:(617) 679-1984\n\
-TEL;WORK;FAX:(617) 679-1949\n\
-EMAIL;INTERNET:hello@helixcode.com\n\
-URL:http://www.helixcode.com/\n\
-ORG:Helix Code, Inc.;\n\
-NOTE:Welcome to the Helix Code Addressbook.\n\
-END:VCARD"
-
-static gboolean
-pas_backend_file_load_uri (PASBackend             *backend,
-			   const char             *uri)
-{
-	PASBackendFile *bf = PAS_BACKEND_FILE (backend);
-	char           *filename;
-
-	g_assert (bf->priv->loaded == FALSE);
-
-	filename = pas_backend_file_extract_path_from_uri (uri);
-
-	bf->priv->file_db = dbopen (filename, O_RDWR, 0666, DB_HASH, NULL);
-	if (bf->priv->file_db == NULL) {
-		bf->priv->file_db = dbopen (filename, O_RDWR | O_CREAT, 0666, DB_HASH, NULL);
-
-		if (bf->priv->file_db) {
-			char *id;
-			id = do_create(backend, INITIAL_VCARD, NULL);
-			g_free (id);
-		}
-	}
-
-	g_free (filename);
-
-	if (bf->priv->file_db != NULL) {
-		if (pas_backend_file_maybe_upgrade_db (bf))
-			bf->priv->loaded = TRUE;
-		/* XXX what if we fail to upgrade it? */
-		
-		g_free(bf->priv->uri);
-		bf->priv->uri = g_strdup (uri);
-	} else
-		return FALSE;
-
-	return TRUE;
-}
-
-/* Get_uri handler for the addressbook file backend */
-static const char *
-pas_backend_file_get_uri (PASBackend *backend)
-{
-	PASBackendFile *bf;
-
-	bf = PAS_BACKEND_FILE (backend);
-
-	g_return_val_if_fail (bf->priv->loaded, NULL);
-	g_assert (bf->priv->uri != NULL);
-
-	return bf->priv->uri;
-}
-
-static gboolean
-pas_backend_file_add_client (PASBackend             *backend,
-			     Evolution_BookListener  listener)
-{
-	PASBackendFile *bf;
-	PASBook        *book;
-
-	g_assert (backend != NULL);
-	g_assert (PAS_IS_BACKEND_FILE (backend));
-
-	bf = PAS_BACKEND_FILE (backend);
-
-	book = pas_book_new (
-		backend, listener,
-		pas_backend_file_get_vcard,
-		pas_backend_file_can_write,
-		pas_backend_file_can_write_card);
-
-	if (!book) {
-		if (!bf->priv->clients)
-			pas_backend_last_client_gone (backend);
-
-		return FALSE;
-	}
-
-	gtk_signal_connect (GTK_OBJECT (book), "destroy",
-			    pas_backend_file_book_destroy_cb, backend);
-
-	gtk_signal_connect (GTK_OBJECT (book), "requests_queued",
-		    pas_backend_file_process_client_requests, NULL);
-
-	bf->priv->clients = g_list_prepend (
-		bf->priv->clients, book);
-
-	if (bf->priv->loaded) {
-		pas_book_respond_open (
-			book, Evolution_BookListener_Success);
-	} else {
-		/* Open the book. */
-		pas_book_respond_open (
-			book, Evolution_BookListener_Success);
-	}
-
-	return TRUE;
-}
-
-static void
-pas_backend_file_remove_client (PASBackend             *backend,
-				PASBook                *book)
-{
-	PASBackendFile *bf;
-	GList *l;
-	PASBook *lbook;
-
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (PAS_IS_BACKEND_FILE (backend));
-	g_return_if_fail (book != NULL);
-	g_return_if_fail (PAS_IS_BOOK (book));
-
-	bf = PAS_BACKEND_FILE (backend);
-
-	/* Find the book in the list of clients */
-
-	for (l = bf->priv->clients; l; l = l->next) {
-		lbook = PAS_BOOK (l->data);
-
-		if (lbook == book)
-			break;
-	}
-
-	g_assert (l != NULL);
-
-	/* Disconnect */
-
-	bf->priv->clients = g_list_remove_link (bf->priv->clients, l);
-	g_list_free_1 (l);
-
-	/* When all clients go away, notify the parent factory about it so that
-	 * it may decide whether to kill the backend or not.
-	 */
-	if (!bf->priv->clients)
-		pas_backend_last_client_gone (backend);
-}
-
-static gboolean
-pas_backend_file_construct (PASBackendFile *backend)
-{
-	g_assert (backend != NULL);
-	g_assert (PAS_IS_BACKEND_FILE (backend));
-
-	if (! pas_backend_construct (PAS_BACKEND (backend)))
-		return FALSE;
-
-	return TRUE;
-}
-
-/**
- * pas_backend_file_new:
- */
-PASBackend *
-pas_backend_file_new (void)
-{
-	PASBackendFile *backend;
-
-	backend = gtk_type_new (pas_backend_file_get_type ());
-
-	if (! pas_backend_file_construct (backend)) {
-		gtk_object_unref (GTK_OBJECT (backend));
-
-		return NULL;
-	}
-
-	return PAS_BACKEND (backend);
-}
-
-static void
-pas_backend_file_destroy (GtkObject *object)
-{
-	PASBackendFile *bf;
-
-	bf = PAS_BACKEND_FILE (object);
-
-	g_free (bf->priv->uri);
-
-	GTK_OBJECT_CLASS (pas_backend_file_parent_class)->destroy (object);	
-}
-
-static void
-pas_backend_file_class_init (PASBackendFileClass *klass)
-{
-	GtkObjectClass  *object_class = (GtkObjectClass *) klass;
-	PASBackendClass *parent_class;
-
-	pas_backend_file_parent_class = gtk_type_class (pas_backend_get_type ());
-
-	parent_class = PAS_BACKEND_CLASS (klass);
-
-	/* Set the virtual methods. */
-	parent_class->load_uri      = pas_backend_file_load_uri;
-	parent_class->get_uri       = pas_backend_file_get_uri;
-	parent_class->add_client    = pas_backend_file_add_client;
-	parent_class->remove_client = pas_backend_file_remove_client;
-
-	object_class->destroy = pas_backend_file_destroy;
-}
-
-static void
-pas_backend_file_init (PASBackendFile *backend)
-{
-	PASBackendFilePrivate *priv;
-
-	priv             = g_new0 (PASBackendFilePrivate, 1);
-	priv->loaded     = FALSE;
-	priv->clients    = NULL;
-	priv->book_views = NULL;
-	priv->uri        = NULL;
-
-	backend->priv = priv;
-}
-
-/**
- * pas_backend_file_get_type:
- */
-GtkType
-pas_backend_file_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"PASBackendFile",
-			sizeof (PASBackendFile),
-			sizeof (PASBackendFileClass),
-			(GtkClassInitFunc)  pas_backend_file_class_init,
-			(GtkObjectInitFunc) pas_backend_file_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (pas_backend_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/pas/pas-backend-file.h b/addressbook/backend/pas/pas-backend-file.h
deleted file mode 100644
index 4da9a29cc5..0000000000
--- a/addressbook/backend/pas/pas-backend-file.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __PAS_BACKEND_FILE_H__
-#define __PAS_BACKEND_FILE_H__
-
-#include 
-#include "pas-backend.h"
-
-typedef struct _PASBackendFilePrivate PASBackendFilePrivate;
-
-typedef struct {
-	PASBackend             parent_object;
-	PASBackendFilePrivate *priv;
-} PASBackendFile;
-
-typedef struct {
-	PASBackendClass parent_class;
-} PASBackendFileClass;
-
-PASBackend *pas_backend_file_new      (void);
-GtkType     pas_backend_file_get_type (void);
-
-#define PAS_BACKEND_FILE_TYPE        (pas_backend_file_get_type ())
-#define PAS_BACKEND_FILE(o)          (GTK_CHECK_CAST ((o), PAS_BACKEND_FILE_TYPE, PASBackendFile))
-#define PAS_BACKEND_FILE_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_BACKEND_TYPE, PASBackendFileClass))
-#define PAS_IS_BACKEND_FILE(o)       (GTK_CHECK_TYPE ((o), PAS_BACKEND_FILE_TYPE))
-#define PAS_IS_BACKEND_FILE_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_BACKEND_FILE_TYPE))
-
-#endif /* ! __PAS_BACKEND_FILE_H__ */
-
diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c
deleted file mode 100644
index 3968648972..0000000000
--- a/addressbook/backend/pas/pas-backend-ldap.c
+++ /dev/null
@@ -1,1151 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include "config.h"  
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "pas-backend-ldap.h"
-#include "pas-book.h"
-#include "pas-card-cursor.h"
-
-#include 
-#include 
-
-#define LDAP_MAX_SEARCH_RESPONSES 500
-
-static gchar *query_prop_to_ldap(gchar *query_prop);
-
-static PASBackendClass *pas_backend_ldap_parent_class;
-typedef struct _PASBackendLDAPCursorPrivate PASBackendLDAPCursorPrivate;
-typedef struct _PASBackendLDAPBookView PASBackendLDAPBookView;
-
-struct _PASBackendLDAPPrivate {
-	char     *uri;
-	gboolean connected;
-	GList    *clients;
-	gchar    *ldap_host;
-	gchar    *ldap_rootdn;
-	int      ldap_port;
-	int      ldap_scope;
-	GList    *book_views;
-};
-
-struct _PASBackendLDAPCursorPrivate {
-	PASBackend *backend;
-	PASBook    *book;
-
-	GList      *elements;
-	long       num_elements;
-};
-
-struct _PASBackendLDAPBookView {
-	PASBookView           *book_view;
-	PASBackendLDAPPrivate *blpriv;
-	LDAP     *ldap;
-	gchar                 *search;
-	int                   search_idle;
-	int                   search_msgid;
-};
-
-static long
-get_length(PASCardCursor *cursor, gpointer data)
-{
-	PASBackendLDAPCursorPrivate *cursor_data = (PASBackendLDAPCursorPrivate *) data;
-
-	return cursor_data->num_elements;
-}
-
-static char *
-get_nth(PASCardCursor *cursor, long n, gpointer data)
-{
-	return g_strdup("");
-}
-
-static void
-cursor_destroy(GtkObject *object, gpointer data)
-{
-	CORBA_Environment ev;
-	Evolution_Book corba_book;
-	PASBackendLDAPCursorPrivate *cursor_data = (PASBackendLDAPCursorPrivate *) data;
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(cursor_data->book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_unref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("cursor_destroy: Exception unreffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-
-	/* free the ldap specific cursor information */
-
-
-	g_free(cursor_data);
-}
-
-static void
-view_destroy(GtkObject *object, gpointer data)
-{
-	CORBA_Environment ev;
-	Evolution_Book    corba_book;
-	PASBook           *book = (PASBook *)data;
-	PASBackendLDAP    *bl;
-	GList             *list;
-
-	bl = PAS_BACKEND_LDAP(pas_book_get_backend(book));
-	for (list = bl->priv->book_views; list; list = g_list_next(list)) {
-		PASBackendLDAPBookView *view = list->data;
-		if (view->book_view == PAS_BOOK_VIEW(object)) {
-			if (view->search_idle != 0)
-				g_source_remove(view->search_idle);
-			if (view->ldap)
-				ldap_unbind (view->ldap);
-			g_free (view->search);
-			g_free (view);
-			bl->priv->book_views = g_list_remove_link(bl->priv->book_views, list);
-			g_list_free_1(list);
-			break;
-		}
-	}
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_unref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("view_destroy: Exception unreffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-}
-
-static void
-pas_backend_ldap_connect (PASBackendLDAPBookView *view)
-{
-	LDAP                  *ldap = view->ldap;
-	PASBackendLDAPPrivate *bl = view->blpriv;
-
-	/* the connection has gone down, or wasn't ever opened */
-	if (ldap == NULL ||
-	    (ldap_simple_bind_s(ldap, NULL /*binddn*/, NULL /*passwd*/) != LDAP_SUCCESS)) {
-
-		/* close connection first if it's open first */
-		if (ldap)
-			ldap_unbind (ldap);
-
-		view->ldap = ldap_open (bl->ldap_host, bl->ldap_port);
-		if (NULL != view->ldap) {
-			ldap_simple_bind_s(view->ldap,
-					   NULL /*binddn*/, NULL /*passwd*/);
-			bl->connected = TRUE;
-		}
-		else {
-			g_warning ("pas_backend_ldap_connect failed for "
-				   "'ldap://%s:%d/%s'\n",
-				   bl->ldap_host,
-				   bl->ldap_port,
-				   bl->ldap_rootdn ? bl->ldap_rootdn : "");
-			bl->connected = FALSE;
-		}
-	}
-}
-
-static void
-pas_backend_ldap_process_create_card (PASBackend *backend,
-				      PASBook    *book,
-				      PASRequest *req)
-{
-	g_warning ("pas_backend_ldap_process_create_card not implemented\n");
-
-	pas_book_respond_create (
-				 book,
-				 Evolution_BookListener_CardNotFound,
-				 "");
-
-	g_free (req->vcard);
-}
-
-static void
-pas_backend_ldap_process_remove_card (PASBackend *backend,
-				      PASBook    *book,
-				      PASRequest *req)
-{
-	g_warning ("pas_backend_ldap_process_remove_card not implemented\n");
-
-	pas_book_respond_remove (
-				 book,
-				 Evolution_BookListener_CardNotFound);
-
-	g_free (req->id);
-}
-
-static void
-pas_backend_ldap_build_all_cards_list(PASBackend *backend,
-				      PASBackendLDAPCursorPrivate *cursor_data)
-{
-	PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
-	LDAP           *ldap;
-	int            ldap_error;
-	LDAPMessage    *res, *e;
-
-	ldap = ldap_open (bl->priv->ldap_host, bl->priv->ldap_port);
-	if (NULL != ldap) {
-		ldap_simple_bind_s(ldap, NULL /*binddn*/, NULL /*passwd*/);
-	}
-	else {
-		g_warning ("pas_backend_ldap_build_all_cards_list: ldap_open failed for "
-			   "'ldap://%s:%d/%s'\n",
-			   bl->priv->ldap_host,
-			   bl->priv->ldap_port,
-			   bl->priv->ldap_rootdn ? bl->priv->ldap_rootdn : "");
-		return;
-	}
-
-	ldap->ld_sizelimit = LDAP_MAX_SEARCH_RESPONSES;
-	ldap->ld_deref = LDAP_DEREF_ALWAYS;
-
-	if ((ldap_error = ldap_search_s (ldap,
-					 bl->priv->ldap_rootdn,
-					 bl->priv->ldap_scope,
-					 "(objectclass=*)",
-					 NULL, 0, &res)) == -1) {
-		g_warning ("ldap error '%s' in "
-			   "pas_backend_ldap_build_all_cards_list\n",
-			   ldap_err2string(ldap_error));
-	}
-
-	cursor_data->elements = NULL;
-
-	cursor_data->num_elements = ldap_count_entries (ldap, res);
-
-	e = ldap_first_entry(ldap, res);
-
-	while (NULL != e) {
-
-		/* for now just make a list of the dn's */
-#if 0
-		for ( a = ldap_first_attribute( ldap, e, &ber ); a != NULL;
-		      a = ldap_next_attribute( ldap, e, ber ) ) {
-		}
-#else
-		cursor_data->elements = g_list_prepend(cursor_data->elements,
-						       g_strdup(ldap_get_dn(ldap, e)));
-#endif
-
-		e = ldap_next_entry(ldap, e);
-	}
-
-	ldap_msgfree(res);
-
-	ldap_unbind (ldap);
-}
-
-static void
-pas_backend_ldap_process_modify_card (PASBackend *backend,
-				      PASBook    *book,
-				      PASRequest *req)
-{
-	g_warning ("pas_backend_ldap_process_modify_card not implemented\n");
-
-	pas_book_respond_modify (
-				 book,
-				 Evolution_BookListener_CardNotFound);
-	g_free (req->vcard);
-}
-
-static void
-pas_backend_ldap_process_get_cursor (PASBackend *backend,
-				     PASBook    *book,
-				     PASRequest *req)
-{
-	CORBA_Environment ev;
-	PASBackendLDAPCursorPrivate *cursor_data;
-	int            ldap_error = 0;
-	PASCardCursor *cursor;
-	Evolution_Book corba_book;
-
-	cursor_data = g_new(PASBackendLDAPCursorPrivate, 1);
-	cursor_data->backend = backend;
-	cursor_data->book = book;
-
-	pas_backend_ldap_build_all_cards_list(backend, cursor_data);
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_ref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("pas_backend_file_process_get_cursor: Exception reffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-	
-	cursor = pas_card_cursor_new(get_length,
-				     get_nth,
-				     cursor_data);
-
-	gtk_signal_connect(GTK_OBJECT(cursor), "destroy",
-			   GTK_SIGNAL_FUNC(cursor_destroy), cursor_data);
-	
-	pas_book_respond_get_cursor (
-		book,
-		(ldap_error == 0 
-		 ? Evolution_BookListener_Success 
-		 : Evolution_BookListener_CardNotFound),
-		cursor);
-}
-
-static void
-construct_email_list(ECardSimple *card, const char *prop, char **values)
-{
-	int i;
-
-	for (i = 0; values[i] && i < 3; i ++) {
-		e_card_simple_set_email (card, i, values[i]);
-	}
-}
-
-struct prop_info {
-	ECardSimpleField field_id;
-	char *query_prop;
-	char *ldap_attr;
-#define PROP_TYPE_NORMAL   0x01
-#define PROP_TYPE_LIST     0x02
-#define PROP_TYPE_LISTITEM 0x03
-	int prop_type;
-	void (*construct_list_func)(ECardSimple *card, const char *prop, char **values);
-} prop_info_table[] = {
-	/* field_id,                         query prop,   ldap attr,        type,             list construct function */
-	{ E_CARD_SIMPLE_FIELD_FULL_NAME,     "full_name", "cn",              PROP_TYPE_NORMAL, NULL },
-	{ E_CARD_SIMPLE_FIELD_TITLE,         "title",     "title",           PROP_TYPE_NORMAL, NULL },
-	{ E_CARD_SIMPLE_FIELD_ORG,           "org",       "o",               PROP_TYPE_NORMAL, NULL },
-	{ E_CARD_SIMPLE_FIELD_PHONE_PRIMARY, "phone",     "telephonenumber", PROP_TYPE_NORMAL, NULL },
-	{ 0 /* unused */,                    "email",     "mail",            PROP_TYPE_LIST,   construct_email_list },
-};
-
-static int num_prop_infos = sizeof(prop_info_table) / sizeof(prop_info_table[0]);
-
-static ESExpResult *
-func_and(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-	char ** strings;
-
-	if (argc > 0) {
-		int i;
-
-		strings = g_new(char*, argc+3);
-		strings[0] = g_strdup ("(&");
-		strings[argc+3 - 2] = g_strdup (")");
-		strings[argc+3 - 1] = NULL;
-		
-		for (i = 0; i < argc; i ++) {
-			GList *list_head = *list;
-			strings[argc - i] = (*list)->data;
-			*list = g_list_remove_link(*list, *list);
-			g_list_free_1(list_head);
-		}
-
-		*list = g_list_prepend(*list, g_strjoinv(" ", strings));
-
-		for (i = 0 ; i < argc + 2; i ++)
-			g_free (strings[i]);
-
-		g_free (strings);
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-static ESExpResult *
-func_or(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-	char ** strings;
-
-	if (argc > 0) {
-		int i;
-
-		strings = g_new(char*, argc+3);
-		strings[0] = g_strdup ("(|");
-		strings[argc+3 - 2] = g_strdup (")");
-		strings[argc+3 - 1] = NULL;
-		for (i = 0; i < argc; i ++) {
-			GList *list_head = *list;
-			strings[argc - i] = (*list)->data;
-			*list = g_list_remove_link(*list, *list);
-			g_list_free_1(list_head);
-		}
-
-		*list = g_list_prepend(*list, g_strjoinv(" ", strings));
-
-		for (i = 0 ; i < argc + 2; i ++)
-			g_free (strings[i]);
-
-		g_free (strings);
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-static ESExpResult *
-func_not(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-
-	/* just replace the head of the list with the NOT of it. */
-	if (argc > 0) {
-		char *term = (*list)->data;
-		(*list)->data = g_strdup_printf("(!%s)", term);
-		g_free (term);
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-static ESExpResult *
-func_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-
-	if (argc == 2
-	    && argv[0]->type == ESEXP_RES_STRING
-	    && argv[1]->type == ESEXP_RES_STRING) {
-		char *propname = argv[0]->value.string;
-		char *str = argv[1]->value.string;
-		gboolean one_star = FALSE;
-
-		if (strlen(str) == 0)
-			one_star = TRUE;
-
-		if (!strcmp (propname, "x-evolution-any-field")) {
-			int i;
-			int query_length;
-			char *big_query;
-			char *header, *footer;
-			char *match_str;
-
-			header = g_malloc0((num_prop_infos - 1) * 2 + 1);
-			footer = g_malloc0(num_prop_infos + 1);
-			for (i = 0; i < num_prop_infos - 1; i ++) {
-				strcat (header, "(|");
-				strcat (footer, ")");
-			}
-
-			match_str = g_strdup_printf("=*%s%s)",
-						    str, one_star ? "" : "*");
-
-			query_length = strlen (header);
-
-			for (i = 0; i < num_prop_infos; i ++) {
-				query_length += 1 + strlen(prop_info_table[i].ldap_attr) + strlen (match_str);
-			}
-
-			big_query = g_malloc0(query_length + 1);
-			strcat (big_query, header);
-			for (i = 0; i < num_prop_infos; i ++) {
-				strcat (big_query, "(");
-				strcat (big_query, prop_info_table[i].ldap_attr);
-				strcat (big_query, match_str);
-			}
-			strcat (big_query, footer);
-
-			*list = g_list_prepend(*list, big_query);
-
-			g_free (match_str);
-			g_free (header);
-			g_free (footer);
-		}
-		else {
-			char *ldap_attr = query_prop_to_ldap(propname);
-
-			if (ldap_attr)
-				*list = g_list_prepend(*list,
-						       g_strdup_printf("(%s=*%s%s)",
-								       ldap_attr,
-								       str,
-								       one_star ? "" : "*"));
-		}
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-static ESExpResult *
-func_is(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-
-	if (argc == 2
-	    && argv[0]->type == ESEXP_RES_STRING
-	    && argv[1]->type == ESEXP_RES_STRING) {
-		char *propname = argv[0]->value.string;
-		char *str = argv[1]->value.string;
-		char *ldap_attr = query_prop_to_ldap(propname);
-
-		if (ldap_attr)
-			*list = g_list_prepend(*list,
-					       g_strdup_printf("(%s=%s)",
-							       ldap_attr, str));
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-static ESExpResult *
-func_beginswith(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-
-	if (argc == 2
-	    && argv[0]->type == ESEXP_RES_STRING
-	    && argv[1]->type == ESEXP_RES_STRING) {
-		char *propname = argv[0]->value.string;
-		char *str = argv[1]->value.string;
-		char *ldap_attr = query_prop_to_ldap(propname);
-		gboolean one_star = FALSE;
-
-		if (strlen(str) == 0)
-			one_star = TRUE;
-
-		if (ldap_attr)
-			*list = g_list_prepend(*list,
-					       g_strdup_printf("(%s=%s*)",
-							       ldap_attr,
-							       str));
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-static ESExpResult *
-func_endswith(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
-{
-	GList **list = data;
-	ESExpResult *r;
-
-	if (argc == 2
-	    && argv[0]->type == ESEXP_RES_STRING
-	    && argv[1]->type == ESEXP_RES_STRING) {
-		char *propname = argv[0]->value.string;
-		char *str = argv[1]->value.string;
-		char *ldap_attr = query_prop_to_ldap(propname);
-		gboolean one_star = FALSE;
-
-		if (strlen(str) == 0)
-			one_star = TRUE;
-
-		if (ldap_attr)
-			*list = g_list_prepend(*list,
-					       g_strdup_printf("(%s=*%s)",
-							       ldap_attr,
-							       str));
-	}
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = FALSE;
-
-	return r;
-}
-
-/* 'builtin' functions */
-static struct {
-	char *name;
-	ESExpFunc *func;
-	int type;		/* set to 1 if a function can perform shortcut evaluation, or
-				   doesn't execute everything, 0 otherwise */
-} symbols[] = {
-	{ "and", func_and, 0 },
-	{ "or", func_or, 0 },
-	{ "not", func_not, 0 },
-	{ "contains", func_contains, 0 },
-	{ "is", func_is, 0 },
-	{ "beginswith", func_beginswith, 0 },
-	{ "endswith", func_endswith, 0 },
-};
-
-static gchar *
-pas_backend_ldap_build_query (gchar *query)
-{
-	ESExp *sexp;
-	ESExpResult *r;
-	gchar *retval;
-	GList *list = NULL;
-	int i;
-
-	sexp = e_sexp_new();
-
-	for(i=0;inext) {
-		g_warning ("conversion to ldap query string failed");
-		retval = NULL;
-		g_list_foreach (list, (GFunc)g_free, NULL);
-	}
-	else {
-		retval = list->data;
-	}
-
-	g_list_free (list);
-	return retval;
-}
-
-static gchar *
-query_prop_to_ldap(gchar *query_prop)
-{
-	int i;
-
-	for (i = 0; i < num_prop_infos; i ++)
-		if (!strcmp (query_prop, prop_info_table[i].query_prop))
-			return prop_info_table[i].ldap_attr;
-
-	return NULL;
-}
-
-static gboolean
-poll_ldap (PASBackendLDAPBookView *view)
-{
-	LDAP           *ldap;
-	int            rc;
-	LDAPMessage    *res, *e;
-	GList   *cards = NULL;
-
-	ldap = view->ldap;
-		
-	if ((rc = ldap_result (ldap, view->search_msgid, 0, NULL, &res))
-	    != LDAP_RES_SEARCH_ENTRY) {
-		view->search_idle = 0;
-		pas_book_view_notify_complete (view->book_view);
-		ldap_unbind (ldap);
-		view->ldap = NULL;
-		return FALSE;
-	}
-		
-	e = ldap_first_entry(ldap, res);
-
-	while (NULL != e) {
-		ECard *ecard = E_CARD(gtk_type_new(e_card_get_type()));
-		ECardSimple *card = e_card_simple_new (ecard);
-		char *dn = ldap_get_dn(ldap, e);
-		char *attr;
-		BerElement *ber = NULL;
-
-		e_card_simple_set_id (card, dn);
-
-		for (attr = ldap_first_attribute (ldap, e, &ber); attr;
-		     attr = ldap_next_attribute (ldap, e, ber)) {
-			int i;
-			struct prop_info *info = NULL;
-
-			for (i = 0; i < num_prop_infos; i ++)
-				if (!strcmp (attr, prop_info_table[i].ldap_attr))
-					info = &prop_info_table[i];
-
-			if (info) {
-				char **values;
-				values = ldap_get_values (ldap, e, attr);
-
-				if (info->prop_type == PROP_TYPE_NORMAL) {
-					/* if it's a normal property just set the string */
-					e_card_simple_set (card, info->field_id, values[0]);
-
-				}
-				else if (info->prop_type == PROP_TYPE_LIST) {
-					/* if it's a list call the construction function,
-					   which calls gtk_object_set to set the property */
-					info->construct_list_func(card,
-								  info->query_prop,
-								  values);
-				}
-
-				ldap_value_free (values);
-			}
-		}
-
-		/* if ldap->ld_errno == LDAP_DECODING_ERROR there was an
-		   error decoding an attribute, and we shouldn't free ber,
-		   since the ldap library already did it. */
-		if (ldap->ld_errno != LDAP_DECODING_ERROR && ber)
-			ber_free (ber, 0);
-
-		e_card_simple_sync_card (card);
-		cards = g_list_append (cards, e_card_simple_get_vcard (card));
-
-		gtk_object_unref (GTK_OBJECT(card));
-
-		e = ldap_next_entry(ldap, e);
-	}
-
-	if (cards) {
-		pas_book_view_notify_add (view->book_view, cards);
-			
-		g_list_foreach (cards, (GFunc)g_free, NULL);
-		g_list_free (cards);
-		cards = NULL;
-	}
-
-	ldap_msgfree(res);
-
-	return TRUE;
-}
-
-static void
-pas_backend_ldap_search (PASBackendLDAP  	*bl,
-			 PASBook         	*book,
-			 PASBackendLDAPBookView *view)
-{
-	char *ldap_query;
-
-	if (view->search_idle)
-		g_warning ("pas_backend_ldap_search called again with pending search on this view.\n");
-
-	ldap_query = pas_backend_ldap_build_query(view->search);
-
-	if (ldap_query != NULL) {
-		LDAP           *ldap;
-
-		pas_backend_ldap_connect(view);
-
-		ldap = view->ldap;
-
-		if (ldap) {
-			ldap->ld_sizelimit = LDAP_MAX_SEARCH_RESPONSES;
-			ldap->ld_deref = LDAP_DEREF_ALWAYS;
-
-			if ((view->search_msgid = ldap_search (ldap,
-							       bl->priv->ldap_rootdn,
-							       bl->priv->ldap_scope,
-							       ldap_query,
-							       NULL, 0)) == -1) {
-				g_warning ("ldap error '%s' in pas_backend_ldap_search\n", ldap_err2string(ldap->ld_errno));
-			}
-			else {
-				view->search_idle = g_idle_add((GSourceFunc)poll_ldap, view);
-			}
-		}
-	}
-}
-
-static void
-pas_backend_ldap_process_get_book_view (PASBackend *backend,
-					PASBook    *book,
-					PASRequest *req)
-{
-	PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
-	CORBA_Environment ev;
-	Evolution_Book    corba_book;
-	PASBookView       *book_view;
-	PASBackendLDAPBookView *view;
-
-	g_return_if_fail (req->listener != NULL);
-
-	corba_book = bonobo_object_corba_objref(BONOBO_OBJECT(book));
-
-	CORBA_exception_init(&ev);
-
-	Evolution_Book_ref(corba_book, &ev);
-	
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("pas_backend_file_process_get_book_view: Exception reffing "
-			  "corba book.\n");
-	}
-
-	CORBA_exception_free(&ev);
-
-	book_view = pas_book_view_new (req->listener);
-
-	gtk_signal_connect(GTK_OBJECT(book_view), "destroy",
-			   GTK_SIGNAL_FUNC(view_destroy), book);
-
-	pas_book_respond_get_book_view (book,
-		(book_view != NULL
-		 ? Evolution_BookListener_Success 
-		 : Evolution_BookListener_CardNotFound /* XXX */),
-		book_view);
-
-	view = g_new0(PASBackendLDAPBookView, 1);
-	view->book_view = book_view;
-	view->search = g_strdup(req->search);
-	view->blpriv = bl->priv;
-
-	bl->priv->book_views = g_list_prepend(bl->priv->book_views, view);
-
-	pas_backend_ldap_search (bl, book, view);
-
-}
-
-static void
-pas_backend_ldap_process_check_connection (PASBackend *backend,
-					   PASBook    *book,
-					   PASRequest *req)
-{
-	PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
-
-	pas_book_report_connection (book, bl->priv->connected);
-}
-
-static gboolean
-pas_backend_ldap_can_write (PASBook *book)
-{
-	return FALSE; /* XXX */
-}
-
-static gboolean
-pas_backend_ldap_can_write_card (PASBook *book,
-				 const char *id)
-{
-	return FALSE; /* XXX */
-}
-
-static void
-pas_backend_ldap_process_client_requests (PASBook *book)
-{
-	PASBackend *backend;
-	PASRequest *req;
-
-	backend = pas_book_get_backend (book);
-
-	req = pas_book_pop_request (book);
-	if (req == NULL)
-		return;
-
-	switch (req->op) {
-	case CreateCard:
-		pas_backend_ldap_process_create_card (backend, book, req);
-		break;
-
-	case RemoveCard:
-		pas_backend_ldap_process_remove_card (backend, book, req);
-		break;
-
-	case ModifyCard:
-		pas_backend_ldap_process_modify_card (backend, book, req);
-		break;
-
-	case CheckConnection:
-		pas_backend_ldap_process_check_connection (backend, book, req);
-		break;
-
-	case GetCursor:
-		pas_backend_ldap_process_get_cursor (backend, book, req);
-		break;
-
-	case GetBookView:
-		pas_backend_ldap_process_get_book_view (backend, book, req);
-		break;
-	}
-
-	g_free (req);
-}
-
-static void
-pas_backend_ldap_book_destroy_cb (PASBook *book, gpointer data)
-{
-	PASBackendLDAP *backend;
-
-	backend = PAS_BACKEND_LDAP (data);
-
-	pas_backend_remove_client (PAS_BACKEND (backend), book);
-}
-
-static char *
-pas_backend_ldap_get_vcard (PASBook *book, const char *id)
-{
-	PASBackendLDAP *bl;
-	int            ldap_error = LDAP_SUCCESS; /* XXX */
-
-	bl = PAS_BACKEND_LDAP (pas_book_get_backend (book));
-
-	/* XXX use ldap_search */
-
-	if (ldap_error == LDAP_SUCCESS) {
-		/* success */
-		return g_strdup ("");
-	}
-	else {
-		return g_strdup ("");
-	}
-}
-
-static gboolean
-pas_backend_ldap_load_uri (PASBackend             *backend,
-			   const char             *uri)
-{
-	PASBackendLDAP *bl = PAS_BACKEND_LDAP (backend);
-	LDAPURLDesc    *lud;
-	int ldap_error;
-
-	g_assert (bl->priv->connected == FALSE);
-
-	ldap_error = ldap_url_parse ((char*)uri, &lud);
-	if (ldap_error == LDAP_SUCCESS) {
-		g_free(bl->priv->uri);
-		bl->priv->uri = g_strdup (uri);
-		bl->priv->ldap_host = g_strdup(lud->lud_host);
-		bl->priv->ldap_port = lud->lud_port;
-		/* if a port wasn't specified, default to 389 */
-		if (bl->priv->ldap_port == 0)
-			bl->priv->ldap_port = 389;
-		bl->priv->ldap_rootdn = g_strdup(lud->lud_dn);
-		bl->priv->ldap_scope = lud->lud_scope;
-
-		ldap_free_urldesc(lud);
-
-		return TRUE;
-	} else
-		return FALSE;
-}
-
-/* Get_uri handler for the addressbook LDAP backend */
-static const char *
-pas_backend_ldap_get_uri (PASBackend *backend)
-{
-	PASBackendLDAP *bl;
-
-	bl = PAS_BACKEND_LDAP (backend);
-	return bl->priv->uri;
-}
-
-static gboolean
-pas_backend_ldap_add_client (PASBackend             *backend,
-			     Evolution_BookListener  listener)
-{
-	PASBackendLDAP *bl;
-	PASBook        *book;
-
-	g_assert (backend != NULL);
-	g_assert (PAS_IS_BACKEND_LDAP (backend));
-
-	bl = PAS_BACKEND_LDAP (backend);
-
-	book = pas_book_new (
-		backend, listener,
-		pas_backend_ldap_get_vcard,
-		pas_backend_ldap_can_write,
-		pas_backend_ldap_can_write_card);
-
-	if (!book) {
-		if (!bl->priv->clients)
-			pas_backend_last_client_gone (backend);
-
-		return FALSE;
-	}
-
-	gtk_signal_connect (GTK_OBJECT (book), "destroy",
-		    pas_backend_ldap_book_destroy_cb, backend);
-
-	gtk_signal_connect (GTK_OBJECT (book), "requests_queued",
-		    pas_backend_ldap_process_client_requests, NULL);
-
-	bl->priv->clients = g_list_prepend (
-		bl->priv->clients, book);
-
-	if (bl->priv->connected) {
-		pas_book_respond_open (
-			book, Evolution_BookListener_Success);
-	} else {
-		/* Open the book. */
-		pas_book_respond_open (
-			book, Evolution_BookListener_Success);
-	}
-
-	return TRUE;
-}
-
-static void
-pas_backend_ldap_remove_client (PASBackend             *backend,
-				PASBook                *book)
-{
-	PASBackendLDAP *bl;
-	GList *l;
-	PASBook *lbook;
-
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (PAS_IS_BACKEND_LDAP (backend));
-	g_return_if_fail (book != NULL);
-	g_return_if_fail (PAS_IS_BOOK (book));
-
-	bl = PAS_BACKEND_LDAP (backend);
-
-	/* Find the book in the list of clients */
-
-	for (l = bl->priv->clients; l; l = l->next) {
-		lbook = PAS_BOOK (l->data);
-
-		if (lbook == book)
-			break;
-	}
-
-	g_assert (l != NULL);
-
-	/* Disconnect */
-
-	bl->priv->clients = g_list_remove_link (bl->priv->clients, l);
-	g_list_free_1 (l);
-
-	/* When all clients go away, notify the parent factory about it so that
-	 * it may decide whether to kill the backend or not.
-	 */
-	if (!bl->priv->clients)
-		pas_backend_last_client_gone (backend);
-}
-
-static gboolean
-pas_backend_ldap_construct (PASBackendLDAP *backend)
-{
-	g_assert (backend != NULL);
-	g_assert (PAS_IS_BACKEND_LDAP (backend));
-
-	if (! pas_backend_construct (PAS_BACKEND (backend)))
-		return FALSE;
-
-	return TRUE;
-}
-
-/**
- * pas_backend_ldap_new:
- */
-PASBackend *
-pas_backend_ldap_new (void)
-{
-	PASBackendLDAP *backend;
-
-	backend = gtk_type_new (pas_backend_ldap_get_type ());
-
-	if (! pas_backend_ldap_construct (backend)) {
-		gtk_object_unref (GTK_OBJECT (backend));
-
-		return NULL;
-	}
-
-	return PAS_BACKEND (backend);
-}
-
-static void
-pas_backend_ldap_destroy (GtkObject *object)
-{
-	PASBackendLDAP *bl;
-
-	bl = PAS_BACKEND_LDAP (object);
-
-	g_free (bl->priv->uri);
-
-	GTK_OBJECT_CLASS (pas_backend_ldap_parent_class)->destroy (object);	
-}
-
-static void
-pas_backend_ldap_class_init (PASBackendLDAPClass *klass)
-{
-	GtkObjectClass  *object_class = (GtkObjectClass *) klass;
-	PASBackendClass *parent_class;
-
-	pas_backend_ldap_parent_class = gtk_type_class (pas_backend_get_type ());
-
-	parent_class = PAS_BACKEND_CLASS (klass);
-
-	/* Set the virtual methods. */
-	parent_class->load_uri      = pas_backend_ldap_load_uri;
-	parent_class->get_uri       = pas_backend_ldap_get_uri;
-	parent_class->add_client    = pas_backend_ldap_add_client;
-	parent_class->remove_client = pas_backend_ldap_remove_client;
-
-	object_class->destroy = pas_backend_ldap_destroy;
-}
-
-static void
-pas_backend_ldap_init (PASBackendLDAP *backend)
-{
-	PASBackendLDAPPrivate *priv;
-
-	priv            = g_new0 (PASBackendLDAPPrivate, 1);
-	priv->connected = FALSE;
-	priv->clients   = NULL;
-	priv->uri       = NULL;
-
-	backend->priv = priv;
-}
-
-/**
- * pas_backend_ldap_get_type:
- */
-GtkType
-pas_backend_ldap_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"PASBackendLDAP",
-			sizeof (PASBackendLDAP),
-			sizeof (PASBackendLDAPClass),
-			(GtkClassInitFunc)  pas_backend_ldap_class_init,
-			(GtkObjectInitFunc) pas_backend_ldap_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (pas_backend_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/pas/pas-backend-ldap.h b/addressbook/backend/pas/pas-backend-ldap.h
deleted file mode 100644
index a59cdf3857..0000000000
--- a/addressbook/backend/pas/pas-backend-ldap.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __PAS_BACKEND_LDAP_H__
-#define __PAS_BACKEND_LDAP_H__
-
-#include 
-#include "pas-backend.h"
-
-typedef struct _PASBackendLDAPPrivate PASBackendLDAPPrivate;
-
-typedef struct {
-	PASBackend             parent_object;
-	PASBackendLDAPPrivate *priv;
-} PASBackendLDAP;
-
-typedef struct {
-	PASBackendClass parent_class;
-} PASBackendLDAPClass;
-
-PASBackend *pas_backend_ldap_new      (void);
-GtkType     pas_backend_ldap_get_type (void);
-
-#define PAS_BACKEND_LDAP_TYPE        (pas_backend_ldap_get_type ())
-#define PAS_BACKEND_LDAP(o)          (GTK_CHECK_CAST ((o), PAS_BACKEND_LDAP_TYPE, PASBackendLDAP))
-#define PAS_BACKEND_LDAP_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_BACKEND_TYPE, PASBackendLDAPClass))
-#define PAS_IS_BACKEND_LDAP(o)       (GTK_CHECK_TYPE ((o), PAS_BACKEND_LDAP_TYPE))
-#define PAS_IS_BACKEND_LDAP_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_BACKEND_LDAP_TYPE))
-
-#endif /* ! __PAS_BACKEND_LDAP_H__ */
-
diff --git a/addressbook/backend/pas/pas-backend.c b/addressbook/backend/pas/pas-backend.c
deleted file mode 100644
index 3d315c2faf..0000000000
--- a/addressbook/backend/pas/pas-backend.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include 
-#include "pas-backend.h"
-
-#define CLASS(o) PAS_BACKEND_CLASS (GTK_OBJECT (o)->klass)
-
-/* Signal IDs */
-enum {
-	LAST_CLIENT_GONE,
-	LAST_SIGNAL
-};
-
-static guint pas_backend_signals[LAST_SIGNAL];
-
-
-gboolean
-pas_backend_construct (PASBackend *backend)
-{
-	return TRUE;
-}
-
-gboolean
-pas_backend_load_uri (PASBackend             *backend,
-		      const char             *uri)
-{
-	g_return_val_if_fail (backend != NULL, FALSE);
-	g_return_val_if_fail (PAS_IS_BACKEND (backend), FALSE);
-	g_return_val_if_fail (uri != NULL, FALSE);
-
-	g_assert (CLASS (backend)->load_uri != NULL);
-
-	return (* CLASS (backend)->load_uri) (backend, uri);
-}
-
-/**
- * pas_backend_get_uri:
- * @backend: An addressbook backend.
- * 
- * Queries the URI that an addressbook backend is serving.
- * 
- * Return value: URI for the backend.
- **/
-const char *
-pas_backend_get_uri (PASBackend *backend)
-{
-	g_return_val_if_fail (backend != NULL, NULL);
-	g_return_val_if_fail (PAS_IS_BACKEND (backend), NULL);
-
-	g_assert (CLASS (backend)->get_uri != NULL);
-
-	return (* CLASS (backend)->get_uri) (backend);
-}
-
-/**
- * pas_backend_add_client:
- * @backend: An addressbook backend.
- * @listener: Listener for notification to the client.
- *
- * Adds a client to an addressbook backend.
- *
- * Return value: TRUE on success, FALSE on failure to add the client.
- */
-gboolean
-pas_backend_add_client (PASBackend             *backend,
-			Evolution_BookListener  listener)
-{
-	g_return_val_if_fail (backend != NULL, FALSE);
-	g_return_val_if_fail (PAS_IS_BACKEND (backend), FALSE);
-	g_return_val_if_fail (listener != CORBA_OBJECT_NIL, FALSE);
-
-	g_assert (CLASS (backend)->add_client != NULL);
-
-	return CLASS (backend)->add_client (backend, listener);
-}
-
-void
-pas_backend_remove_client (PASBackend *backend,
-			   PASBook    *book)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (PAS_IS_BACKEND (backend));
-	g_return_if_fail (book    != NULL);
-	g_return_if_fail (PAS_IS_BOOK (book));
-	
-	g_assert (CLASS (backend)->remove_client != NULL);
-
-	CLASS (backend)->remove_client (backend, book);
-}
-
-/**
- * pas_backend_last_client_gone:
- * @backend: An addressbook backend.
- * 
- * Emits the "last_client_gone" signal for the specified backend.  Should
- * only be called from backend implementations if the backend really does
- * not have any more clients.
- **/
-void
-pas_backend_last_client_gone (PASBackend *backend)
-{
-	g_return_if_fail (backend != NULL);
-	g_return_if_fail (PAS_IS_BACKEND (backend));
-
-	gtk_signal_emit (GTK_OBJECT (backend), pas_backend_signals[LAST_CLIENT_GONE]);	
-}
-
-static void
-pas_backend_init (PASBackend *backend)
-{
-}
-
-static void
-pas_backend_class_init (PASBackendClass *klass)
-{
-	GtkObjectClass *object_class;
-
-	object_class = (GtkObjectClass *) klass;
-
-	pas_backend_signals[LAST_CLIENT_GONE] =
-		gtk_signal_new ("last_client_gone",
-				GTK_RUN_FIRST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (PASBackendClass, last_client_gone),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, pas_backend_signals, LAST_SIGNAL);
-}
-
-/**
- * pas_backend_get_type:
- */
-GtkType
-pas_backend_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"PASBackend",
-			sizeof (PASBackend),
-			sizeof (PASBackendClass),
-			(GtkClassInitFunc)  pas_backend_class_init,
-			(GtkObjectInitFunc) pas_backend_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (gtk_object_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/pas/pas-backend.h b/addressbook/backend/pas/pas-backend.h
deleted file mode 100644
index a1d1a291fd..0000000000
--- a/addressbook/backend/pas/pas-backend.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * An abstract class which defines the API to a given backend.
- * There will be one PASBackend object for every URI which is loaded.
- *
- * Two people will call into the PASBackend API:
- *
- * 1. The PASBookFactory, when it has been asked to load a book.
- *    It will create a new PASBackend if one is not already running
- *    for the requested URI.  It will call pas_backend_add_client to
- *    add a new client to an existing PASBackend server.
- *
- * 2. A PASBook, when a client has requested an operation on the
- *    Evolution_Book interface.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __PAS_BACKEND_H__
-#define __PAS_BACKEND_H__
-
-#include 
-#include 
-#include 
-
-typedef struct _PASBackend        PASBackend;
-typedef struct _PASBackendPrivate PASBackendPrivate;
-
-#include 
-
-struct _PASBackend {
-	GtkObject parent_object;
-	PASBackendPrivate *priv;
-};
-
-typedef struct {
-	GtkObjectClass parent_class;
-
-	/* Virtual methods */
-	gboolean (*load_uri) (PASBackend *backend, const char *uri);
-	const char *(* get_uri) (PASBackend *backend);
-	gboolean (*add_client) (PASBackend *backend, Evolution_BookListener listener);
-	void (*remove_client) (PASBackend *backend, PASBook *book);
-
-	/* Notification signals */
-	void (* last_client_gone) (PASBackend *backend);
-} PASBackendClass;
-
-typedef PASBackend * (*PASBackendFactoryFn) (void);
-
-gboolean    pas_backend_construct          (PASBackend             *backend);
-gboolean    pas_backend_load_uri           (PASBackend             *backend,
-					    const char             *uri);
-const char *pas_backend_get_uri            (PASBackend             *backend);
-gboolean    pas_backend_add_client         (PASBackend             *backend,
-					    Evolution_BookListener  listener);
-void        pas_backend_remove_client      (PASBackend             *backend,
-					    PASBook                *book);
-
-void        pas_backend_last_client_gone   (PASBackend             *backend);
-
-GtkType     pas_backend_get_type           (void);
-
-#define PAS_BACKEND_TYPE        (pas_backend_get_type ())
-#define PAS_BACKEND(o)          (GTK_CHECK_CAST ((o), PAS_BACKEND_TYPE, PASBackend))
-#define PAS_BACKEND_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_BACKEND_TYPE, PASBackendClass))
-#define PAS_IS_BACKEND(o)       (GTK_CHECK_TYPE ((o), PAS_BACKEND_TYPE))
-#define PAS_IS_BACKEND_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_BACKEND_TYPE))
-
-#endif /* ! __PAS_BACKEND_H__ */
-
diff --git a/addressbook/backend/pas/pas-book-factory.c b/addressbook/backend/pas/pas-book-factory.c
deleted file mode 100644
index 626c7420e2..0000000000
--- a/addressbook/backend/pas/pas-book-factory.c
+++ /dev/null
@@ -1,639 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include 
-
-#include "addressbook.h"
-#include "pas-book-factory.h"
-
-#ifdef USING_OAF
-#include 
-#define PAS_BOOK_FACTORY_OAF_ID "OAFIID:evolution:addressbook-server:0fbc844d-c721-4615-98d0-d67eacf42d80"
-#else
-#include 
-#define PAS_BOOK_FACTORY_GOAD_ID "evolution:addressbook-server"
-#endif
-
-static BonoboObjectClass          *pas_book_factory_parent_class;
-POA_Evolution_BookFactory__vepv   pas_book_factory_vepv;
-
-typedef struct {
-	char                              *uri;
-	Evolution_BookListener             listener;
-} PASBookFactoryQueuedRequest;
-
-struct _PASBookFactoryPrivate {
-	gint        idle_id;
-	GHashTable *backends;
-	GHashTable *active_server_map;
-	GList      *queued_requests;
-};
-
-/* Signal IDs */
-enum {
-	LAST_BOOK_GONE,
-	LAST_SIGNAL
-};
-
-static guint factory_signals[LAST_SIGNAL];
-
-static char *
-pas_book_factory_canonicalize_uri (const char *uri)
-{
-	/* FIXME: What do I do here? */
-
-	return g_strdup (uri);
-}
-
-static char *
-pas_book_factory_extract_proto_from_uri (const char *uri)
-{
-	char *proto;
-	char *p;
-
-	p = strchr (uri, ':');
-
-	if (p == NULL)
-		return NULL;
-
-	proto = g_malloc0 (p - uri + 1);
-
-	strncpy (proto, uri, p - uri);
-
-	return proto;
-}
-
-/**
- * pas_book_factory_register_backend:
- * @factory:
- * @proto:
- * @backend:
- */
-void
-pas_book_factory_register_backend (PASBookFactory      *factory,
-				   const char          *proto,
-				   PASBackendFactoryFn  backend)
-{
-	g_return_if_fail (factory != NULL);
-	g_return_if_fail (PAS_IS_BOOK_FACTORY (factory));
-	g_return_if_fail (proto != NULL);
-	g_return_if_fail (backend != NULL);
-
-	if (g_hash_table_lookup (factory->priv->backends, proto) != NULL) {
-		g_warning ("pas_book_factory_register_backend: "
-			   "Proto \"%s\" already registered!\n", proto);
-	}
-
-	g_hash_table_insert (factory->priv->backends,
-			     g_strdup (proto), backend);
-}
-
-/**
- * pas_book_factory_get_n_backends:
- * @factory: An addressbook factory.
- * 
- * Queries the number of running addressbook backends in an addressbook factory.
- * 
- * Return value: Number of running backends.
- **/
-int
-pas_book_factory_get_n_backends (PASBookFactory *factory)
-{
-	g_return_val_if_fail (factory != NULL, -1);
-	g_return_val_if_fail (PAS_IS_BOOK_FACTORY (factory), -1);
-
-	return g_hash_table_size (factory->priv->active_server_map);
-}
-
-/* Callback used when a backend loses its last connected client */
-static void
-backend_last_client_gone_cb (PASBackend *backend, gpointer data)
-{
-	PASBookFactory *factory;
-	const char *uri;
-	gpointer orig_key;
-	gboolean result;
-	char *orig_uri;
-
-	factory = PAS_BOOK_FACTORY (data);
-
-	/* Remove the backend from the active server map */
-
-	uri = pas_backend_get_uri (backend);
-	g_assert (uri != NULL);
-
-	result = g_hash_table_lookup_extended (factory->priv->active_server_map, uri,
-					       &orig_key, NULL);
-	g_assert (result != FALSE);
-
-	orig_uri = orig_key;
-
-	g_hash_table_remove (factory->priv->active_server_map, orig_uri);
-	g_free (orig_uri);
-
-	gtk_object_unref (GTK_OBJECT (backend));
-
-	/* Notify upstream if there are no more backends */
-
-	if (g_hash_table_size (factory->priv->active_server_map) == 0)
-		gtk_signal_emit (GTK_OBJECT (factory), factory_signals[LAST_BOOK_GONE]);
-}
-
-static PASBackendFactoryFn
-pas_book_factory_lookup_backend_factory (PASBookFactory *factory,
-					 const char     *uri)
-{
-	PASBackendFactoryFn  backend_fn;
-	char                *proto;
-	char                *canonical_uri;
-
-	g_assert (factory != NULL);
-	g_assert (PAS_IS_BOOK_FACTORY (factory));
-	g_assert (uri != NULL);
-
-	canonical_uri = pas_book_factory_canonicalize_uri (uri);
-	if (canonical_uri == NULL)
-		return NULL;
-
-	proto = pas_book_factory_extract_proto_from_uri (canonical_uri);
-	if (proto == NULL) {
-		g_free (canonical_uri);
-		return NULL;
-	}
-
-	backend_fn = g_hash_table_lookup (factory->priv->backends, proto);
-
-	g_free (proto); 
-	g_free (canonical_uri);
-
-	return backend_fn;
-}
-
-static PASBackend *
-pas_book_factory_launch_backend (PASBookFactory              *factory,
-				 Evolution_BookListener       listener,
-				 const char                  *uri)
-{
-	PASBackendFactoryFn  backend_factory;
-	PASBackend          *backend;
-
-	backend_factory = pas_book_factory_lookup_backend_factory (
-		factory, uri);
-
-	if (!backend_factory) {
-		CORBA_Environment ev;
-
-		CORBA_exception_init (&ev);
-		Evolution_BookListener_respond_open_book (
-			listener,
-			Evolution_BookListener_ProtocolNotSupported,
-			CORBA_OBJECT_NIL,
-			&ev);
-
-		if (ev._major != CORBA_NO_EXCEPTION)
-			g_message ("pas_book_factory_launch_backend(): could not notify "
-				   "the listener");
-
-		CORBA_exception_free (&ev);
-		return NULL;
-	}
-
-	backend = (* backend_factory) ();
-	if (!backend) {
-		CORBA_Environment ev;
-
-		CORBA_exception_init (&ev);
-		Evolution_BookListener_respond_open_book (
-			listener,
-			Evolution_BookListener_OtherError,
-			CORBA_OBJECT_NIL,
-			&ev);
-
-		if (ev._major != CORBA_NO_EXCEPTION)
-			g_message ("pas_book_factory_launch_backend(): could not notify "
-				   "the listener");
-
-		CORBA_exception_free (&ev);
-		return NULL;
-	}
-
-	g_hash_table_insert (factory->priv->active_server_map,
-			     g_strdup (uri),
-			     backend);
-
-	gtk_signal_connect (GTK_OBJECT (backend), "last_client_gone",
-			    backend_last_client_gone_cb,
-			    factory);
-
-	return backend;
-}
-
-static void
-pas_book_factory_process_request (PASBookFactory              *factory,
-				  PASBookFactoryQueuedRequest *request)
-{
-	PASBackend *backend;
-	char *uri;
-	Evolution_BookListener listener;
-	CORBA_Environment ev;
-
-	uri = request->uri;
-	listener = request->listener;
-	g_free (request);
-
-	/* Look up the backend and create one if needed */
-
-	backend = g_hash_table_lookup (factory->priv->active_server_map, uri);
-
-	if (!backend) {
-		backend = pas_book_factory_launch_backend (factory, listener, uri);
-		if (!backend)
-			goto out;
-
-		if (!pas_backend_add_client (backend, listener))
-			goto out;
-
-		pas_backend_load_uri (backend, uri);
-
-		goto out;
-	}
-
-	pas_backend_add_client (backend, listener);
-
- out:
-	g_free (uri);
-
-	CORBA_exception_init (&ev);
-	CORBA_Object_release (listener, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION)
-		g_message ("pas_book_factory_process_request(): could not release the listener");
-
-	CORBA_exception_free (&ev);
-}
-
-static gboolean
-pas_book_factory_process_queue (PASBookFactory *factory)
-{
-	/* Process pending Book-creation requests. */
-	if (factory->priv->queued_requests != NULL) {
-		PASBookFactoryQueuedRequest  *request;
-		GList *l;
-
-		l = factory->priv->queued_requests;
-		request = l->data;
-
-		pas_book_factory_process_request (factory, request);
-
-		factory->priv->queued_requests = g_list_remove_link (
-			factory->priv->queued_requests, l);
-		g_list_free_1 (l);
-	}
-
-	if (factory->priv->queued_requests == NULL) {
-
-		factory->priv->idle_id = 0;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static void
-pas_book_factory_queue_request (PASBookFactory               *factory,
-				const char                   *uri,
-				const Evolution_BookListener  listener)
-{
-	PASBookFactoryQueuedRequest *request;
-	Evolution_BookListener       listener_copy;
-	CORBA_Environment            ev;
-
-	CORBA_exception_init (&ev);
-
-	listener_copy = CORBA_Object_duplicate (listener, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("PASBookFactory: Could not duplicate BookListener!\n");
-		CORBA_exception_free (&ev);
-		return;
-	}
-
-	CORBA_exception_free (&ev);
-
-	request           = g_new0 (PASBookFactoryQueuedRequest, 1);
-	request->listener = listener_copy;
-	request->uri      = g_strdup (uri);
-
-	factory->priv->queued_requests =
-		g_list_prepend (factory->priv->queued_requests, request);
-
-	if (! factory->priv->idle_id) {
-		factory->priv->idle_id =
-			g_idle_add ((GSourceFunc) pas_book_factory_process_queue, factory);
-	}
-}
-
-
-static void
-impl_Evolution_BookFactory_open_book (PortableServer_Servant        servant,
-				      const CORBA_char             *uri,
-				      const Evolution_BookListener  listener,
-				      CORBA_Environment            *ev)
-{
-	PASBookFactory      *factory =
-		PAS_BOOK_FACTORY (bonobo_object_from_servant (servant));
-	PASBackendFactoryFn  backend_factory;
-
-	backend_factory = pas_book_factory_lookup_backend_factory (factory, uri);
-
-	if (backend_factory == NULL) {
-		Evolution_BookListener_respond_open_book (
-			listener,
-			Evolution_BookListener_ProtocolNotSupported,
-			CORBA_OBJECT_NIL,
-			ev);
-
-		return;
-	}
-
-	pas_book_factory_queue_request (factory, uri, listener);
-}
-
-static gboolean
-pas_book_factory_construct (PASBookFactory *factory)
-{
-	POA_Evolution_BookFactory  *servant;
-	CORBA_Environment           ev;
-	CORBA_Object                obj;
-
-	g_assert (factory != NULL);
-	g_assert (PAS_IS_BOOK_FACTORY (factory));
-
-	servant = (POA_Evolution_BookFactory *) g_new0 (BonoboObjectServant, 1);
-	servant->vepv = &pas_book_factory_vepv;
-
-	CORBA_exception_init (&ev);
-
-	POA_Evolution_BookFactory__init ((PortableServer_Servant) servant, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_free (servant);
-		CORBA_exception_free (&ev);
-
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	obj = bonobo_object_activate_servant (BONOBO_OBJECT (factory), servant);
-	if (obj == CORBA_OBJECT_NIL) {
-		g_free (servant);
-
-		return FALSE;
-	}
-
-	bonobo_object_construct (BONOBO_OBJECT (factory), obj);
-
-	return TRUE;
-}
-
-/**
- * pas_book_factory_new:
- */
-PASBookFactory *
-pas_book_factory_new (void)
-{
-	PASBookFactory *factory;
-
-	factory = gtk_type_new (pas_book_factory_get_type ());
-
-	if (! pas_book_factory_construct (factory)) {
-		g_warning ("pas_book_factory_new: Could not construct PASBookFactory!\n");
-		gtk_object_unref (GTK_OBJECT (factory));
-
-		return NULL;
-	}
-
-	return factory;
-}
-
-#ifdef USING_OAF
-
-static gboolean
-register_factory (CORBA_Object obj)
-{
-	OAF_RegistrationResult result;
-
-	puts ("about to register addressbook");
-
-	result = oaf_active_server_register (PAS_BOOK_FACTORY_OAF_ID, obj);
-
-	switch (result) {
-	case OAF_REG_SUCCESS:
-		return TRUE;
-	case OAF_REG_NOT_LISTED:
-		g_message ("Error registering the PAS factory: not listed");
-		return FALSE;
-	case OAF_REG_ALREADY_ACTIVE:
-		g_message ("Error registering the PAS factory: already active");
-		return FALSE;
-	case OAF_REG_ERROR:
-	default:
-		g_message ("Error registering the PAS factory: generic error");
-		return FALSE;
-	}
-}
-
-#else
-
-static gboolean
-register_factory (CORBA_Object obj)
-{
-	CORBA_Environment  ev;
-	int ret;
-
-	CORBA_exception_init (&ev);
-	ret = goad_server_register (NULL, obj, PAS_BOOK_FACTORY_GOAD_ID, "server", &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_message ("pas_book_factory_activate: Exception "
-			   "registering PASBookFactory!\n");
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	switch (ret) {
-	case 0:
-		return TRUE;
-	case -2:
-		g_message ("pas_book_factory_activate: Another "
-			   "PASBookFactory is already running.\n");
-		return FALSE;
-	case -1:
-	default:
-		g_message ("pas_book_factory_activate: Error "
-			   "registering PASBookFactory!\n");
-		return FALSE;
-	}
-}
-
-#endif
-
-/**
- * pas_book_factory_activate:
- */
-void
-pas_book_factory_activate (PASBookFactory *factory)
-{
-	g_return_if_fail (factory != NULL);
-	g_return_if_fail (PAS_IS_BOOK_FACTORY (factory));
-
-	register_factory (bonobo_object_corba_objref (BONOBO_OBJECT (factory)));
-}
-
-static void
-pas_book_factory_init (PASBookFactory *factory)
-{
-	factory->priv = g_new0 (PASBookFactoryPrivate, 1);
-
-	factory->priv->active_server_map = g_hash_table_new (g_str_hash, g_str_equal);
-	factory->priv->backends          = g_hash_table_new (g_str_hash, g_str_equal);
-	factory->priv->queued_requests   = NULL;
-}
-
-static void
-free_active_server_map_entry (gpointer key, gpointer value, gpointer data)
-{
-	char *uri;
-	PASBackend *backend;
-
-	uri = key;
-	g_free (uri);
-
-	backend = PAS_BACKEND (value);
-	gtk_object_unref (GTK_OBJECT (backend));
-}
-
-static void
-remove_backends_entry (gpointer key, gpointer value, gpointer data)
-{
-	char *uri;
-
-	uri = key;
-	g_free (uri);
-}
-
-static void
-pas_book_factory_destroy (GtkObject *object)
-{
-	PASBookFactory *factory = PAS_BOOK_FACTORY (object);
-	GList          *l;
-
-	for (l = factory->priv->queued_requests; l != NULL; l = l->next) {
-		PASBookFactoryQueuedRequest *request = l->data;
-		CORBA_Environment ev;
-
-		g_free (request->uri);
-
-		CORBA_exception_init (&ev);
-		CORBA_Object_release (request->listener, &ev);
-		CORBA_exception_free (&ev);
-
-		g_free (request);
-	}
-	g_list_free (factory->priv->queued_requests);
-	factory->priv->queued_requests = NULL;
-
-	g_hash_table_foreach (factory->priv->active_server_map,
-			      free_active_server_map_entry,
-			      NULL);
-	g_hash_table_destroy (factory->priv->active_server_map);
-	factory->priv->active_server_map = NULL;
-
-	g_hash_table_foreach (factory->priv->backends,
-			      remove_backends_entry,
-			      NULL);
-	g_hash_table_destroy (factory->priv->backends);
-	factory->priv->backends = NULL;
-	
-	g_free (factory->priv);
-
-	GTK_OBJECT_CLASS (pas_book_factory_parent_class)->destroy (object);
-}
-
-static POA_Evolution_BookFactory__epv *
-pas_book_factory_get_epv (void)
-{
-	POA_Evolution_BookFactory__epv *epv;
-
-	epv = g_new0 (POA_Evolution_BookFactory__epv, 1);
-
-	epv->open_book = impl_Evolution_BookFactory_open_book;
-
-	return epv;
-	
-}
-
-static void
-pas_book_factory_corba_class_init (void)
-{
-	pas_book_factory_vepv.Bonobo_Unknown_epv         = bonobo_object_get_epv ();
-	pas_book_factory_vepv.Evolution_BookFactory_epv = pas_book_factory_get_epv ();
-}
-
-static void
-pas_book_factory_class_init (PASBookFactoryClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	pas_book_factory_parent_class = gtk_type_class (bonobo_object_get_type ());
-
-	factory_signals[LAST_BOOK_GONE] =
-		gtk_signal_new ("last_book_gone",
-				GTK_RUN_FIRST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (PASBookFactoryClass, last_book_gone),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, factory_signals, LAST_SIGNAL);
-
-	object_class->destroy = pas_book_factory_destroy;
-
-	pas_book_factory_corba_class_init ();
-}
-
-/**
- * pas_book_factory_get_type:
- */
-GtkType
-pas_book_factory_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"PASBookFactory",
-			sizeof (PASBookFactory),
-			sizeof (PASBookFactoryClass),
-			(GtkClassInitFunc)  pas_book_factory_class_init,
-			(GtkObjectInitFunc) pas_book_factory_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (bonobo_object_get_type (), &info);
-	}
-
-	return type;
-}
diff --git a/addressbook/backend/pas/pas-book-factory.h b/addressbook/backend/pas/pas-book-factory.h
deleted file mode 100644
index 7e4690adf1..0000000000
--- a/addressbook/backend/pas/pas-book-factory.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-
-#include 
-
-#ifndef __PAS_BOOK_FACTORY_H__
-#define __PAS_BOOK_FACTORY_H__
-
-BEGIN_GNOME_DECLS
-
-typedef struct _PASBookFactoryPrivate PASBookFactoryPrivate;
-
-typedef struct {
-	BonoboObject            parent_object;
-	PASBookFactoryPrivate *priv;
-} PASBookFactory;
-
-typedef struct {
-	BonoboObjectClass parent_class;
-
-	/* Notification signals */
-
-	void (* last_book_gone) (PASBookFactory *factory);
-} PASBookFactoryClass;
-
-PASBookFactory *pas_book_factory_new              (void);
-
-void            pas_book_factory_register_backend (PASBookFactory               *factory,
-						   const char                   *proto,
-						   PASBackendFactoryFn           backend_factory);
-
-int             pas_book_factory_get_n_backends   (PASBookFactory               *factory);
-
-void            pas_book_factory_activate         (PASBookFactory               *factory);
-
-GtkType         pas_book_factory_get_type (void);
-
-#define PAS_BOOK_FACTORY_TYPE        (pas_book_factory_get_type ())
-#define PAS_BOOK_FACTORY(o)          (GTK_CHECK_CAST ((o), PAS_BOOK_FACTORY_TYPE, PASBookFactory))
-#define PAS_BOOK_FACTORY_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_BOOK_FACTORY_TYPE, PASBookFactoryClass))
-#define PAS_IS_BOOK_FACTORY(o)       (GTK_CHECK_TYPE ((o), PAS_BOOK_FACTORY_TYPE))
-#define PAS_IS_BOOK_FACTORY_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_BOOK_FACTORY_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __PAS_BOOK_FACTORY_H__ */
diff --git a/addressbook/backend/pas/pas-book-view.c b/addressbook/backend/pas/pas-book-view.c
deleted file mode 100644
index 3bf35f439f..0000000000
--- a/addressbook/backend/pas/pas-book-view.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * pas-book-view.c
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include "pas-book-view.h"
-
-static BonoboObjectClass *pas_book_view_parent_class;
-POA_Evolution_BookView__vepv pas_book_view_vepv;
-
-struct _PASBookViewPrivate {
-	Evolution_BookViewListener  listener;
-};
-
-/**
- * pas_book_view_notify_change:
- */
-void
-pas_book_view_notify_change (PASBookView                *book_view,
-			     const GList                *cards)
-{
-	CORBA_Environment ev;
-	gint i, length;
-	CORBA_sequence_Evolution_VCard card_sequence;
-
-	length = g_list_length((GList *) cards);
-
-	card_sequence._buffer = CORBA_sequence_Evolution_VCard_allocbuf(length);
-	card_sequence._maximum = length;
-	card_sequence._length = length;
-
-	for ( i = 0; cards; cards = g_list_next(cards), i++ ) {
-		card_sequence._buffer[i] = CORBA_string_dup((char *) cards->data);
-	}
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookViewListener_signal_card_changed (
-		book_view->priv->listener, &card_sequence, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_view_notify_change: Exception signaling BookViewListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	CORBA_free(card_sequence._buffer);
-}
-
-void
-pas_book_view_notify_change_1 (PASBookView *book_view,
-			       const char  *card)
-{
-	GList *list = g_list_append(NULL, (char *) card);
-	pas_book_view_notify_change(book_view, list);
-	g_list_free(list);
-}
-
-/**
- * pas_book_view_notify_remove:
- */
-void
-pas_book_view_notify_remove (PASBookView                *book_view,
-			     const char                 *id)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookViewListener_signal_card_removed (
-		book_view->priv->listener, (Evolution_CardId) id, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_view_notify_remove: Exception signaling BookViewListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_view_notify_add:
- */
-void
-pas_book_view_notify_add (PASBookView                *book_view,
-			  const GList                *cards)
-{
-	CORBA_Environment ev;
-	gint i, length;
-	CORBA_sequence_Evolution_VCard card_sequence;
-
-	length = g_list_length((GList *)cards);
-
-	card_sequence._buffer = CORBA_sequence_Evolution_VCard_allocbuf(length);
-	card_sequence._maximum = length;
-	card_sequence._length = length;
-
-	for ( i = 0; cards; cards = g_list_next(cards), i++ ) {
-		card_sequence._buffer[i] = CORBA_string_dup((char *) cards->data);
-	}
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookViewListener_signal_card_added (
-		book_view->priv->listener, &card_sequence, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_view_notify_add: Exception signaling BookViewListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	CORBA_free(card_sequence._buffer);
-}
-
-void
-pas_book_view_notify_add_1 (PASBookView *book_view,
-			    const char  *card)
-{
-	GList *list = g_list_append(NULL, (char *) card);
-	pas_book_view_notify_add(book_view, list);
-	g_list_free(list);
-}
-
-void
-pas_book_view_notify_complete (PASBookView *book_view)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookViewListener_signal_sequence_complete (
-		book_view->priv->listener, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_view_notify_complete: Exception signaling BookViewListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-static gboolean
-pas_book_view_construct (PASBookView                *book_view,
-			 Evolution_BookViewListener  listener)
-{
-	POA_Evolution_BookView *servant;
-	CORBA_Environment   ev;
-	CORBA_Object        obj;
-
-	g_assert (book_view      != NULL);
-	g_assert (PAS_IS_BOOK_VIEW (book_view));
-	g_assert (listener  != CORBA_OBJECT_NIL);
-
-	servant = (POA_Evolution_BookView *) g_new0 (BonoboObjectServant, 1);
-	servant->vepv = &pas_book_view_vepv;
-
-	CORBA_exception_init (&ev);
-
-	POA_Evolution_BookView__init ((PortableServer_Servant) servant, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_free (servant);
-		CORBA_exception_free (&ev);
-
-		return FALSE;
-	}
-
-	CORBA_Object_duplicate (listener, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("Unable to duplicate listener object in pas-book-view.c\n");
-		CORBA_exception_free (&ev);
-
-		return FALSE;
-	}
-
-	Evolution_BookViewListener_ref (listener, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("Unable to ref listener object in pas-book-view.c\n");
-		CORBA_exception_free (&ev);
-
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	obj = bonobo_object_activate_servant (BONOBO_OBJECT (book_view), servant);
-	if (obj == CORBA_OBJECT_NIL) {
-		g_free (servant);
-
-		return FALSE;
-	}
-
-	bonobo_object_construct (BONOBO_OBJECT (book_view), obj);
-
-	book_view->priv->listener  = listener;
-
-	return TRUE;
-}
-
-/**
- * pas_book_view_new:
- */
-PASBookView *
-pas_book_view_new (Evolution_BookViewListener  listener)
-{
-	PASBookView *book_view;
-
-	g_return_val_if_fail (listener  != CORBA_OBJECT_NIL, NULL);
-
-	book_view = gtk_type_new (pas_book_view_get_type ());
-
-	if (! pas_book_view_construct (book_view, listener)) {
-		gtk_object_unref (GTK_OBJECT (book_view));
-
-		return NULL;
-	}
-
-	return book_view;
-}
-
-static void
-pas_book_view_destroy (GtkObject *object)
-{
-	PASBookView *book_view = PAS_BOOK_VIEW (object);
-	CORBA_Environment   ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookViewListener_unref (book_view->priv->listener, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("Unable to unref listener object in pas-book-view.c\n");
-		CORBA_exception_free (&ev);
-
-		return;
-	}
-
-	CORBA_Object_release (book_view->priv->listener, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning("Unable to release listener object in pas-book-view.c\n");
-		CORBA_exception_free (&ev);
-
-		return;
-	}
-
-	CORBA_exception_free (&ev);
-
-	g_free (book_view->priv);
-
-	GTK_OBJECT_CLASS (pas_book_view_parent_class)->destroy (object);	
-}
-
-static POA_Evolution_BookView__epv *
-pas_book_view_get_epv (void)
-{
-	POA_Evolution_BookView__epv *epv;
-
-	epv = g_new0 (POA_Evolution_BookView__epv, 1);
-
-	return epv;
-	
-}
-
-static void
-pas_book_view_corba_class_init (void)
-{
-	pas_book_view_vepv.Bonobo_Unknown_epv     = bonobo_object_get_epv ();
-	pas_book_view_vepv.Evolution_BookView_epv = pas_book_view_get_epv ();
-}
-
-static void
-pas_book_view_class_init (PASBookViewClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	pas_book_view_parent_class = gtk_type_class (bonobo_object_get_type ());
-
-	object_class->destroy = pas_book_view_destroy;
-
-	pas_book_view_corba_class_init ();
-}
-
-static void
-pas_book_view_init (PASBookView *book_view)
-{
-	book_view->priv           = g_new0 (PASBookViewPrivate, 1);
-	book_view->priv->listener = CORBA_OBJECT_NIL;
-}
-
-/**
- * pas_book_view_get_type:
- */
-GtkType
-pas_book_view_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"PASBookView",
-			sizeof (PASBookView),
-			sizeof (PASBookViewClass),
-			(GtkClassInitFunc)  pas_book_view_class_init,
-			(GtkObjectInitFunc) pas_book_view_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (bonobo_object_get_type (), &info);
-	}
-
-	return type;
-}
-
diff --git a/addressbook/backend/pas/pas-book-view.h b/addressbook/backend/pas/pas-book-view.h
deleted file mode 100644
index b9cdbee876..0000000000
--- a/addressbook/backend/pas/pas-book-view.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * A wrapper object which exports the Evolution_Book CORBA interface
- * and which maintains a request queue.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __PAS_BOOK_VIEW_H__
-#define __PAS_BOOK_VIEW_H__
-
-#include 
-#include 
-#include 
-
-typedef struct _PASBookView        PASBookView;
-typedef struct _PASBookViewClass   PASBookViewClass;
-typedef struct _PASBookViewPrivate PASBookViewPrivate;
-
-struct _PASBookView {
-	BonoboObject     parent_object;
-	PASBookViewPrivate *priv;
-};
-
-struct _PASBookViewClass {
-	BonoboObjectClass parent_class;
-};
-
-PASBookView                *pas_book_view_new                (Evolution_BookViewListener             listener);
-
-void                        pas_book_view_notify_change      (PASBookView                           *book_view,
-							      const GList                           *cards);
-void                        pas_book_view_notify_change_1    (PASBookView                           *book_view,
-							      const char                            *card);
-void                        pas_book_view_notify_remove      (PASBookView                           *book_view,
-							      const char                            *id);
-void                        pas_book_view_notify_add         (PASBookView                           *book_view,
-							      const GList                           *cards);
-void                        pas_book_view_notify_add_1       (PASBookView                           *book_view,
-							      const char                            *card);
-void                        pas_book_view_notify_complete    (PASBookView                           *book_view);
-
-GtkType                     pas_book_view_get_type           (void);
-
-#define PAS_BOOK_VIEW_TYPE        (pas_book_view_get_type ())
-#define PAS_BOOK_VIEW(o)          (GTK_CHECK_CAST ((o), PAS_BOOK_VIEW_TYPE, PASBookView))
-#define PAS_BOOK_VIEW_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_BOOK_VIEW_FACTORY_TYPE, PASBookViewClass))
-#define PAS_IS_BOOK_VIEW(o)       (GTK_CHECK_TYPE ((o), PAS_BOOK_VIEW_TYPE))
-#define PAS_IS_BOOK_VIEW_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_BOOK_VIEW_TYPE))
-
-#endif /* ! __PAS_BOOK_VIEW_H__ */
diff --git a/addressbook/backend/pas/pas-book.c b/addressbook/backend/pas/pas-book.c
deleted file mode 100644
index 55caf1dce7..0000000000
--- a/addressbook/backend/pas/pas-book.c
+++ /dev/null
@@ -1,677 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * pas-book.c
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include "pas-book.h"
-
-static BonoboObjectClass *pas_book_parent_class;
-POA_Evolution_Book__vepv pas_book_vepv;
-
-enum {
-	REQUESTS_QUEUED,
-	LAST_SIGNAL
-};
-
-static guint pas_book_signals [LAST_SIGNAL];
-
-struct _PASBookPrivate {
-	PASBackend             *backend;
-	Evolution_BookListener  listener;
-	PASBookGetVCardFn       get_vcard;
-	PASBookCanWriteFn       can_write;
-	PASBookCanWriteCardFn   can_write_card;
-
-	GList                  *request_queue;
-	gint                    idle_id;
-};
-
-static gboolean
-pas_book_check_queue (PASBook *book)
-{
-	if (book->priv->request_queue != NULL) {
-		gtk_signal_emit (GTK_OBJECT (book),
-				 pas_book_signals [REQUESTS_QUEUED]);
-	}
-
-	if (book->priv->request_queue == NULL) {
-		book->priv->idle_id = 0;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static void
-pas_book_queue_request (PASBook *book, PASRequest *req)
-{
-	book->priv->request_queue =
-		g_list_append (book->priv->request_queue, req);
-
-	if (book->priv->idle_id == 0) {
-		book->priv->idle_id = g_idle_add ((GSourceFunc) pas_book_check_queue, book);
-	}
-}
-
-static void
-pas_book_queue_create_card (PASBook *book, const char *vcard)
-{
-	PASRequest *req;
-
-	req        = g_new0 (PASRequest, 1);
-	req->op    = CreateCard;
-	req->vcard = g_strdup (vcard);
-
-	pas_book_queue_request (book, req);
-}
-
-static void
-pas_book_queue_remove_card (PASBook *book, const char *id)
-{
-	PASRequest *req;
-
-	req     = g_new0 (PASRequest, 1);
-	req->op = RemoveCard;
-	req->id = g_strdup (id);
-
-	pas_book_queue_request (book, req);
-}
-
-static void
-pas_book_queue_modify_card (PASBook *book, const char *vcard)
-{
-	PASRequest *req;
-
-	req        = g_new0 (PASRequest, 1);
-	req->op    = ModifyCard;
-	req->vcard = g_strdup (vcard);
-
-	pas_book_queue_request (book, req);
-}
-
-static void
-pas_book_queue_get_cursor (PASBook *book, const char *search)
-{
-	PASRequest *req;
-
-	req         = g_new0 (PASRequest, 1);
-	req->op     = GetCursor;
-	req->search = g_strdup(search);
-
-	pas_book_queue_request (book, req);
-}
-
-static void
-pas_book_queue_get_book_view (PASBook *book, const Evolution_BookViewListener listener, const char *search)
-{
-	PASRequest *req;
-	CORBA_Environment ev;
-
-	req           = g_new0 (PASRequest, 1);
-	req->op       = GetBookView;
-	req->search   = g_strdup(search);
-	
-	CORBA_exception_init (&ev);
-
-	req->listener = CORBA_Object_duplicate(listener, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_queue_get_book_view: Exception "
-			   "duplicating BookViewListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-
-	pas_book_queue_request (book, req);
-}
-
-static void
-pas_book_queue_check_connection (PASBook *book)
-{
-	PASRequest *req;
-
-	req        = g_new0 (PASRequest, 1);
-	req->op    = CheckConnection;
-
-	pas_book_queue_request (book, req);
-}
-
-static CORBA_char *
-impl_Evolution_Book_get_vcard (PortableServer_Servant servant,
-			       const Evolution_CardId id,
-			       CORBA_Environment *ev)
-{
-	PASBook    *book = PAS_BOOK (bonobo_object_from_servant (servant));
-	char       *vcard;
-	CORBA_char *retval;
-
-	vcard = (book->priv->get_vcard) (book, (const char *) id);
-	retval = CORBA_string_dup (vcard);
-	g_free (vcard);
-
-	return retval;
-}
-
-static CORBA_boolean
-impl_Evolution_Book_can_write (PortableServer_Servant servant,
-			       CORBA_Environment *ev)
-{
-	PASBook    *book = PAS_BOOK (bonobo_object_from_servant (servant));
-	CORBA_boolean retval;
-
-	retval = (book->priv->can_write) (book);
-
-	return retval;
-}
-
-static CORBA_boolean
-impl_Evolution_Book_can_write_card (PortableServer_Servant servant,
-				    const Evolution_CardId id,
-				    CORBA_Environment *ev)
-{
-	PASBook    *book = PAS_BOOK (bonobo_object_from_servant (servant));
-	CORBA_boolean retval;
-
-	retval = (book->priv->can_write_card) (book, (const char *) id);
-
-	return retval;
-}
-
-static void
-impl_Evolution_Book_create_card (PortableServer_Servant servant,
-				 const Evolution_VCard vcard,
-				 CORBA_Environment *ev)
-{
-	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant));
-
-	pas_book_queue_create_card (book, (const char *) vcard);
-}
-
-static void
-impl_Evolution_Book_remove_card (PortableServer_Servant servant,
-				 const Evolution_CardId id,
-				 CORBA_Environment *ev)
-{
-	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant));
-
-	pas_book_queue_remove_card (book, (const char *) id);
-}
-
-static void
-impl_Evolution_Book_modify_card (PortableServer_Servant servant,
-				 const Evolution_VCard vcard,
-				 CORBA_Environment *ev)
-{
-	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant));
-
-	pas_book_queue_modify_card (book, (const char *) vcard);
-}
-
-static void
-impl_Evolution_Book_get_cursor (PortableServer_Servant servant,
-				const CORBA_char *search,
-				CORBA_Environment *ev)
-{
-	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant));
-
-	pas_book_queue_get_cursor (book, search);
-}
-
-static void
-impl_Evolution_Book_get_book_view (PortableServer_Servant servant,
-				   const Evolution_BookViewListener listener,
-				   const CORBA_char *search,
-				   CORBA_Environment *ev)
-{
-	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant));
-
-	pas_book_queue_get_book_view (book, listener, search);
-}
-
-static void
-impl_Evolution_Book_check_connection (PortableServer_Servant servant,
-				      CORBA_Environment *ev)
-{
-	PASBook *book = PAS_BOOK (bonobo_object_from_servant (servant));
-
-	pas_book_queue_check_connection (book);
-}
-
-/**
- * pas_book_get_backend:
- */
-PASBackend *
-pas_book_get_backend (PASBook *book)
-{
-	g_return_val_if_fail (book != NULL,       NULL);
-	g_return_val_if_fail (PAS_IS_BOOK (book), NULL);
-
-	return book->priv->backend;
-}
-
-/**
- * pas_book_get_listener:
- */
-Evolution_BookListener
-pas_book_get_listener (PASBook *book)
-{
-	g_return_val_if_fail (book != NULL,       CORBA_OBJECT_NIL);
-	g_return_val_if_fail (PAS_IS_BOOK (book), CORBA_OBJECT_NIL);
-
-	return book->priv->listener;
-}
-
-/**
- * pas_book_check_pending
- */
-gint
-pas_book_check_pending (PASBook *book)
-{
-	g_return_val_if_fail (book != NULL,       -1);
-	g_return_val_if_fail (PAS_IS_BOOK (book), -1);
-
-	return g_list_length (book->priv->request_queue);
-}
-
-/**
- * pas_book_pop_request:
- */
-PASRequest *
-pas_book_pop_request (PASBook *book)
-{
-	GList      *popped;
-	PASRequest *req;
-
-	g_return_val_if_fail (book != NULL,       NULL);
-	g_return_val_if_fail (PAS_IS_BOOK (book), NULL);
-
-	if (book->priv->request_queue == NULL)
-		return NULL;
-
-	req = book->priv->request_queue->data;
-
-	popped = book->priv->request_queue;
-	book->priv->request_queue =
-		g_list_remove_link (book->priv->request_queue, popped);
-
-	g_list_free_1 (popped);
-
-	return req;
-}
-
-/**
- * pas_book_respond_open:
- */
-void
-pas_book_respond_open (PASBook                           *book,
-		       Evolution_BookListener_CallStatus  status)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	if (status == Evolution_BookListener_Success) {
-		Evolution_BookListener_respond_open_book (
-			book->priv->listener, status,
-			bonobo_object_corba_objref (BONOBO_OBJECT (book)),
-			&ev);
-	} else {
-		Evolution_BookListener_respond_open_book (
-			book->priv->listener, status,
-			CORBA_OBJECT_NIL, &ev);
-	}
-	
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_respond_open: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_respond_create:
- */
-void
-pas_book_respond_create (PASBook                           *book,
-			 Evolution_BookListener_CallStatus  status,
-			 const char                        *id)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookListener_respond_create_card (
-		book->priv->listener, status, (char *)id, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_respond_create: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_respond_remove:
- */
-void
-pas_book_respond_remove (PASBook                           *book,
-			 Evolution_BookListener_CallStatus  status)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookListener_respond_remove_card (
-		book->priv->listener, status, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_respond_remove: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_respond_modify:
- */
-void
-pas_book_respond_modify (PASBook                           *book,
-			 Evolution_BookListener_CallStatus  status)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookListener_respond_modify_card (
-		book->priv->listener, status, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_respond_modify: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_respond_get_cursor:
- */
-void
-pas_book_respond_get_cursor (PASBook                           *book,
-			     Evolution_BookListener_CallStatus  status,
-			     PASCardCursor                     *cursor)
-{
-	CORBA_Environment ev;
-	CORBA_Object      object;
-
-	CORBA_exception_init (&ev);
-	
-	object = bonobo_object_corba_objref(BONOBO_OBJECT(cursor));
-
-	Evolution_BookListener_respond_get_cursor (
-		book->priv->listener, status, object, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_respond_get_cursor: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_respond_get_cursor:
- */
-void
-pas_book_respond_get_book_view (PASBook                           *book,
-				Evolution_BookListener_CallStatus  status,
-				PASBookView                       *book_view)
-{
-	CORBA_Environment ev;
-	CORBA_Object      object;
-
-	CORBA_exception_init (&ev);
-	
-	object = bonobo_object_corba_objref(BONOBO_OBJECT(book_view));
-
-	Evolution_BookListener_respond_get_view (
-		book->priv->listener, status, object, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_respond_get_book_view: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-/**
- * pas_book_report_connection:
- */
-void
-pas_book_report_connection (PASBook  *book,
-			    gboolean  connected)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_BookListener_report_connection_status (
-		book->priv->listener, (CORBA_boolean) connected, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("pas_book_report_connection: Exception "
-			   "responding to BookListener!\n");
-	}
-
-	CORBA_exception_free (&ev);
-}
-
-static gboolean
-pas_book_construct (PASBook                *book,
-		    PASBackend             *backend,
-		    Evolution_BookListener  listener,
-		    PASBookGetVCardFn       get_vcard,
-		    PASBookCanWriteFn       can_write,
-		    PASBookCanWriteCardFn   can_write_card)
-{
-	POA_Evolution_Book *servant;
-	CORBA_Environment   ev;
-	CORBA_Object        obj;
-
-	g_assert (book      != NULL);
-	g_assert (PAS_IS_BOOK (book));
-	g_assert (listener  != CORBA_OBJECT_NIL);
-	g_assert (get_vcard != NULL);
-	g_assert (can_write != NULL);
-	g_assert (can_write_card != NULL);
-
-	servant = (POA_Evolution_Book *) g_new0 (BonoboObjectServant, 1);
-	servant->vepv = &pas_book_vepv;
-
-	CORBA_exception_init (&ev);
-
-	POA_Evolution_Book__init ((PortableServer_Servant) servant, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_free (servant);
-		CORBA_exception_free (&ev);
-
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	obj = bonobo_object_activate_servant (BONOBO_OBJECT (book), servant);
-	if (obj == CORBA_OBJECT_NIL) {
-		g_free (servant);
-
-		return FALSE;
-	}
-
-	bonobo_object_construct (BONOBO_OBJECT (book), obj);
-
-	CORBA_exception_init (&ev);
-	book->priv->listener = CORBA_Object_duplicate (listener, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION)
-		g_message ("pas_book_construct(): could not duplicate the listener");
-
-	CORBA_exception_free (&ev);
-
-	book->priv->listener  = listener;
-	book->priv->get_vcard = get_vcard;
-	book->priv->can_write = can_write;
-	book->priv->can_write_card = can_write_card;
-	book->priv->backend   = backend;
-
-	return TRUE;
-}
-
-/**
- * pas_book_new:
- */
-PASBook *
-pas_book_new (PASBackend             *backend,
-	      Evolution_BookListener  listener,
-	      PASBookGetVCardFn       get_vcard,
-	      PASBookCanWriteFn       can_write,
-	      PASBookCanWriteCardFn   can_write_card)
-{
-	PASBook *book;
-
-	g_return_val_if_fail (listener  != CORBA_OBJECT_NIL, NULL);
-	g_return_val_if_fail (get_vcard != NULL,             NULL);
-
-	book = gtk_type_new (pas_book_get_type ());
-
-	if (! pas_book_construct (book, backend, listener,
-				  get_vcard, can_write, can_write_card)) {
-		gtk_object_unref (GTK_OBJECT (book));
-
-		return NULL;
-	}
-
-	return book;
-}
-
-static void
-pas_book_destroy (GtkObject *object)
-{
-	PASBook *book = PAS_BOOK (object);
-	GList   *l;
-	CORBA_Environment ev;
-
-	for (l = book->priv->request_queue; l != NULL; l = l->next) {
-		PASRequest *req = l->data;
-
-		g_free (req->id);
-		g_free (req->vcard);
-		g_free (req);
-	}
-	g_list_free (book->priv->request_queue);
-
-	CORBA_exception_init (&ev);
-	CORBA_Object_release (book->priv->listener, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION)
-		g_message ("pas_book_construct(): could not release the listener");
-
-	CORBA_exception_free (&ev);
-
-	g_free (book->priv);
-
-	GTK_OBJECT_CLASS (pas_book_parent_class)->destroy (object);	
-}
-
-static POA_Evolution_Book__epv *
-pas_book_get_epv (void)
-{
-	POA_Evolution_Book__epv *epv;
-
-	epv = g_new0 (POA_Evolution_Book__epv, 1);
-
-	epv->get_vcard        = impl_Evolution_Book_get_vcard;
-	epv->can_write        = impl_Evolution_Book_can_write;
-	epv->can_write_card   = impl_Evolution_Book_can_write_card;
-	epv->create_card      = impl_Evolution_Book_create_card;
-	epv->remove_card      = impl_Evolution_Book_remove_card;
-	epv->modify_card      = impl_Evolution_Book_modify_card;
-	epv->check_connection = impl_Evolution_Book_check_connection;
-	epv->get_cursor       = impl_Evolution_Book_get_cursor;
-	epv->get_book_view    = impl_Evolution_Book_get_book_view;
-
-	return epv;
-	
-}
-
-static void
-pas_book_corba_class_init (void)
-{
-	pas_book_vepv.Bonobo_Unknown_epv  = bonobo_object_get_epv ();
-	pas_book_vepv.Evolution_Book_epv = pas_book_get_epv ();
-}
-
-static void
-pas_book_class_init (PASBookClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	pas_book_parent_class = gtk_type_class (bonobo_object_get_type ());
-
-	pas_book_signals [REQUESTS_QUEUED] =
-		gtk_signal_new ("requests_queued",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (PASBookClass, requests_queued),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, pas_book_signals, LAST_SIGNAL);
-
-	object_class->destroy = pas_book_destroy;
-
-	pas_book_corba_class_init ();
-}
-
-static void
-pas_book_init (PASBook *book)
-{
-	book->priv                = g_new0 (PASBookPrivate, 1);
-	book->priv->idle_id       = 0;
-	book->priv->request_queue = NULL;
-}
-
-/**
- * pas_book_get_type:
- */
-GtkType
-pas_book_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (! type) {
-		GtkTypeInfo info = {
-			"PASBook",
-			sizeof (PASBook),
-			sizeof (PASBookClass),
-			(GtkClassInitFunc)  pas_book_class_init,
-			(GtkObjectInitFunc) pas_book_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (bonobo_object_get_type (), &info);
-	}
-
-	return type;
-}
-
diff --git a/addressbook/backend/pas/pas-book.h b/addressbook/backend/pas/pas-book.h
deleted file mode 100644
index 43a94b6600..0000000000
--- a/addressbook/backend/pas/pas-book.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * A wrapper object which exports the Evolution_Book CORBA interface
- * and which maintains a request queue.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __PAS_BOOK_H__
-#define __PAS_BOOK_H__
-
-#include 
-#include 
-#include 
-#include 
-
-typedef struct _PASBook        PASBook;
-typedef struct _PASBookPrivate PASBookPrivate;
-
-#include 
-#include 
-
-typedef enum {
-	CreateCard,
-	RemoveCard,
-	ModifyCard,
-	GetCursor,
-	GetBookView,
-	CheckConnection
-} PASOperation;
-
-typedef struct {
-	PASOperation               op;
-	char                      *id;
-	char                      *vcard;
-	char                      *search;
-	Evolution_BookViewListener listener;
-} PASRequest;
-
-struct _PASBook {
-	BonoboObject     parent_object;
-	PASBookPrivate *priv;
-};
-
-typedef struct {
-	BonoboObjectClass parent_class;
-
-	/* Signals */
-	void (*requests_queued) (void);
-} PASBookClass;
-
-typedef char *   (*PASBookGetVCardFn)     (PASBook *book, const char *id);
-typedef gboolean (*PASBookCanWriteFn)     (PASBook *book);
-typedef gboolean (*PASBookCanWriteCardFn) (PASBook *book, const char *id);
-
-PASBook                *pas_book_new                   (PASBackend                        *backend,
-						       	Evolution_BookListener             listener,
-						       	PASBookGetVCardFn                  get_vcard,
-							PASBookCanWriteFn                  can_write,
-							PASBookCanWriteCardFn              can_write_card);
-PASBackend             *pas_book_get_backend           (PASBook                           *book);
-Evolution_BookListener  pas_book_get_listener          (PASBook                           *book);
-int                     pas_book_check_pending         (PASBook                           *book);
-PASRequest             *pas_book_pop_request           (PASBook                           *book);
-
-void                    pas_book_respond_open          (PASBook                           *book,
-						       	Evolution_BookListener_CallStatus  status);
-void                    pas_book_respond_create        (PASBook                           *book,
-						       	Evolution_BookListener_CallStatus  status,
-						       	const char                        *id);
-void                    pas_book_respond_remove        (PASBook                           *book,
-						       	Evolution_BookListener_CallStatus  status);
-void                    pas_book_respond_modify        (PASBook                           *book,
-						       	Evolution_BookListener_CallStatus  status);
-void                    pas_book_respond_get_cursor    (PASBook                           *book,
-						       	Evolution_BookListener_CallStatus  status,
-						       	PASCardCursor                     *cursor);
-void                    pas_book_respond_get_book_view (PASBook                           *book,
-						     	Evolution_BookListener_CallStatus  status,
-						     	PASBookView                       *book_view);
-void                    pas_book_report_connection     (PASBook                           *book,
-						     	gboolean                           connected);
-
-gboolean		pas_book_can_write             (PASBook                           *book);
-gboolean		pas_book_can_write_card        (PASBook                           *book,
-							const char                        *id);
-GtkType                 pas_book_get_type              (void);
-
-#define PAS_BOOK_TYPE        (pas_book_get_type ())
-#define PAS_BOOK(o)          (GTK_CHECK_CAST ((o), PAS_BOOK_TYPE, PASBook))
-#define PAS_BOOK_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_BOOK_FACTORY_TYPE, PASBookClass))
-#define PAS_IS_BOOK(o)       (GTK_CHECK_TYPE ((o), PAS_BOOK_TYPE))
-#define PAS_IS_BOOK_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_BOOK_TYPE))
-
-#endif /* ! __PAS_BOOK_H__ */
diff --git a/addressbook/backend/pas/pas-card-cursor.c b/addressbook/backend/pas/pas-card-cursor.c
deleted file mode 100644
index c2bbe1c9b0..0000000000
--- a/addressbook/backend/pas/pas-card-cursor.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * pas-card-cursor.c: Implements card cursors.
- *
- * Author:
- *   Christopher James Lahey 
-#include 
-#include "addressbook.h"
-#include "pas-card-cursor.h"
-
-struct _PASCardCursorPrivate {
-	long     (*get_length) (PASCardCursor *cursor, gpointer data);
-	char *   (*get_nth)    (PASCardCursor *cursor, long n, gpointer data);
-	gpointer   data;
-};
-
-/*
- * A pointer to our parent object class
- */
-static BonoboObjectClass *parent_class;
-
-/*
- * The VEPV for the CardCursor object
- */
-static POA_Evolution_CardCursor__vepv cursor_vepv;
-
-/*
- * Implemented GtkObject::destroy
- */
-static void
-pas_card_cursor_destroy (GtkObject *object)
-{
-	PASCardCursor *cursor = PAS_CARD_CURSOR (object);
-
-	if ( cursor->priv )
-		g_free ( cursor->priv );
-
-	GTK_OBJECT_CLASS (parent_class)->destroy (object);
-}
-
-/*
- * CORBA Demo::Echo::echo method implementation
- */
-static CORBA_long
-impl_pas_card_cursor_get_length (PortableServer_Servant  servant,
-			       CORBA_Environment      *ev)
-{
-	PASCardCursor *cursor = PAS_CARD_CURSOR (bonobo_object_from_servant (servant));
-	if ( cursor->priv->get_length )
-		return cursor->priv->get_length( cursor, cursor->priv->data );
-	else
-		return 0;
-}
-
-/*
- * CORBA Demo::Echo::echo method implementation
- */
-static char *
-impl_pas_card_cursor_get_nth (PortableServer_Servant  servant,
-			    const CORBA_long        n,
-			    CORBA_Environment      *ev)
-{
-	PASCardCursor *cursor = PAS_CARD_CURSOR (bonobo_object_from_servant (servant));
-	if ( cursor->priv->get_nth ) {
-		char *vcard = cursor->priv->get_nth( cursor, n, cursor->priv->data );
-		char *retval = CORBA_string_dup (vcard);
-		g_free (vcard);
-		return retval;
-	} else
-		return CORBA_string_dup ("");
-}
-
-/*
- * If you want users to derive classes from your implementation
- * you need to support this method.
- */
-POA_Evolution_CardCursor__epv *
-pas_card_cursor_get_epv (void)
-{
-	POA_Evolution_CardCursor__epv *epv;
-
-	epv = g_new0 (POA_Evolution_CardCursor__epv, 1);
-
-	/*
-	 * This is the method invoked by CORBA
-	 */
-	epv->get_length = impl_pas_card_cursor_get_length;
-	epv->get_nth    = impl_pas_card_cursor_get_nth;
-
-	return epv;
-}
-
-static void
-init_pas_card_cursor_corba_class (void)
-{
-	cursor_vepv.Bonobo_Unknown_epv       = bonobo_object_get_epv ();
-	cursor_vepv.Evolution_CardCursor_epv = pas_card_cursor_get_epv ();
-}
-
-static void
-pas_card_cursor_class_init (PASCardCursorClass *klass)
-{
-	GtkObjectClass *object_class = (GtkObjectClass *) klass;
-
-	parent_class = gtk_type_class (bonobo_object_get_type ());
-
-	object_class->destroy = pas_card_cursor_destroy;
-
-	init_pas_card_cursor_corba_class ();
-}
-
-static void
-pas_card_cursor_init (PASCardCursor *cursor)
-{
-	cursor->priv = g_new(PASCardCursorPrivate, 1);
-	cursor->priv->get_length = NULL;
-	cursor->priv->get_nth = NULL;
-	cursor->priv->data = NULL;
-}
-
-GtkType
-pas_card_cursor_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (!type){
-		GtkTypeInfo info = {
-			"PASCardCursor",
-			sizeof (PASCardCursor),
-			sizeof (PASCardCursorClass),
-			(GtkClassInitFunc) pas_card_cursor_class_init,
-			(GtkObjectInitFunc) pas_card_cursor_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (bonobo_object_get_type (), &info);
-	}
-
-	return type;
-}
-
-PASCardCursor *
-pas_card_cursor_construct (PASCardCursor           *cursor,
-			   Evolution_CardCursor     corba_cursor,
-			   PASCardCursorLengthFunc  get_length,
-			   PASCardCursorNthFunc     get_nth,
-			   gpointer data)
-{
-	g_return_val_if_fail (cursor != NULL, NULL);
-	g_return_val_if_fail (PAS_IS_CARD_CURSOR (cursor), NULL);
-	g_return_val_if_fail (corba_cursor != CORBA_OBJECT_NIL, NULL);
-
-	/*
-	 * Call parent constructor
-	 */
-	if (!bonobo_object_construct (BONOBO_OBJECT (cursor), (CORBA_Object) corba_cursor))
-		return NULL;
-
-	/*
-	 * Initialize cursor
-	 */
-	cursor->priv->get_length = get_length;
-	cursor->priv->get_nth = get_nth;
-	cursor->priv->data = data;
-	
-	/*
-	 * Success: return the GtkType we were given
-	 */
-	return cursor;
-}
-
-/*
- * This routine creates the ORBit CORBA server and initializes the
- * CORBA side of things
- */
-static Evolution_CardCursor
-create_cursor (BonoboObject *cursor)
-{
-	POA_Evolution_CardCursor *servant;
-	CORBA_Environment ev;
-
-	servant = (POA_Evolution_CardCursor *) g_new0 (BonoboObjectServant, 1);
-	servant->vepv = &cursor_vepv;
-
-	CORBA_exception_init (&ev);
-	POA_Evolution_CardCursor__init ((PortableServer_Servant) servant, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION){
-		g_free (servant);
-		CORBA_exception_free (&ev);
-		return CORBA_OBJECT_NIL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	/*
-	 * Activates the CORBA object.
-	 */
-	return (Evolution_CardCursor) bonobo_object_activate_servant (cursor, servant);
-}
-
-PASCardCursor *
-pas_card_cursor_new (PASCardCursorLengthFunc  get_length,
-		     PASCardCursorNthFunc     get_nth,
-		     gpointer data)
-{
-	PASCardCursor *cursor;
-	Evolution_CardCursor corba_cursor;
-
-	cursor = gtk_type_new (pas_card_cursor_get_type ());
-	corba_cursor = create_cursor (BONOBO_OBJECT (cursor));
-
-	if (corba_cursor == CORBA_OBJECT_NIL){
-		gtk_object_unref (GTK_OBJECT (cursor));
-		return NULL;
-	}
-	
-	return pas_card_cursor_construct (cursor,
-					  corba_cursor,
-					  get_length,
-					  get_nth,
-					  data);
-}
diff --git a/addressbook/backend/pas/pas-card-cursor.h b/addressbook/backend/pas/pas-card-cursor.h
deleted file mode 100644
index 300e3e3ce1..0000000000
--- a/addressbook/backend/pas/pas-card-cursor.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 2000, Helix Code, Inc.
- */
-
-#ifndef __PAS_CARD_CURSOR_H__
-#define __PAS_CARD_CURSOR_H__
-
-#include 
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _PASCardCursor        PASCardCursor;
-typedef struct _PASCardCursorPrivate PASCardCursorPrivate;
-typedef struct _PASCardCursorClass   PASCardCursorClass;
-
-typedef long (*PASCardCursorLengthFunc) (PASCardCursor *cursor, gpointer data);
-typedef char * (*PASCardCursorNthFunc) (PASCardCursor *cursor, long n, gpointer data);
-
-struct _PASCardCursor {
-	BonoboObject     parent;
-	PASCardCursorPrivate *priv;
-};
-
-struct _PASCardCursorClass {
-	BonoboObjectClass parent;
-};
-
-/* Creating a new addressbook. */
-PASCardCursor *pas_card_cursor_new       (PASCardCursorLengthFunc  get_length,
-				          PASCardCursorNthFunc     get_nth,
-					  gpointer data);
-PASCardCursor *pas_card_cursor_construct (PASCardCursor           *cursor,
-					  Evolution_CardCursor     corba_cursor,
-					  PASCardCursorLengthFunc  get_length,
-					  PASCardCursorNthFunc     get_nth,
-					  gpointer data);
-
-GtkType        pas_card_cursor_get_type  (void);
-POA_Evolution_CardCursor__epv *
-               pas_card_cursor_get_epv   (void);
-
-/* Fetching cards. */
-#define PAS_CARD_CURSOR_TYPE        (pas_card_cursor_get_type ())
-#define PAS_CARD_CURSOR(o)          (GTK_CHECK_CAST ((o), PAS_CARD_CURSOR_TYPE, PASCardCursor))
-#define PAS_CARD_CURSOR_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), PAS_CARD_CURSOR_TYPE, PASCardCursorClass))
-#define PAS_IS_CARD_CURSOR(o)       (GTK_CHECK_TYPE ((o), PAS_CARD_CURSOR_TYPE))
-#define PAS_IS_CARD_CURSOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), PAS_CARD_CURSOR_TYPE))
-
-END_GNOME_DECLS
-
-#endif /* ! __PAS_CARD_CURSOR_H__ */
diff --git a/addressbook/conduit/.cvsignore b/addressbook/conduit/.cvsignore
deleted file mode 100644
index 6f302c2ac7..0000000000
--- a/addressbook/conduit/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-*.lo
-Makefile.in
-Makefile
-libaddress_conduit.la
-address-conduit-control-applet
-address.conduit
\ No newline at end of file
diff --git a/addressbook/conduit/Makefile.am b/addressbook/conduit/Makefile.am
deleted file mode 100644
index c45e24714d..0000000000
--- a/addressbook/conduit/Makefile.am
+++ /dev/null
@@ -1,73 +0,0 @@
-INCLUDES = 				\
-	-I$(top_srcdir)/addressbook	\
-	-I$(top_srcdir)/addressbook/backend	\
-	$(GNOME_PILOT_CFLAGS)
-
-bin_PROGRAMS = address-conduit-control-applet
-
-address_conduit_control_applet_SOURCES = address-conduit-control-applet.c
-
-address_conduit_control_applet_LDADD = \
-		$(CAPPLET_LIBS)  \
-		$(GNOME_LIBDIR) \
-		-lgpilotdcm \
-		-lgpilotd \
-		-lgpilotdconduit \
-		$(GNOME_CAPPLET_LIBS) \
-		$(BONOBO_VFS_GNOME_LIBS) \
-		$(GNOME_XML_LIB) \
-	        $(GNOMEUI_LIBS) \
-		$(PISOCK_LIBDIR) $(PISOCK_LIBS) \
-                $(INTLLIBS)
-
-
-# address_conduit
-address_conduitsdir=$(libdir)/gnome-pilot/conduits
-address_conduits_LTLIBRARIES = libaddress_conduit.la
-
-libaddress_conduit_la_SOURCES = \
-	address-conduit.c \
-	address-conduit.h
-
-# address-conduit.c: my_gnomecal_idl
-
-address.conduit: address.conduit.in Makefile
-	sed -e 's^\@prefix\@^$(prefix)^g' < $(srcdir)/address.conduit.in > address.conduit.tmp \
-	&& mv address.conduit.tmp address.conduit
-
-#
-# conduit
-#
-
-libaddress_conduit_la_LDFLAGS = \
-	-rpath $(libdir)
-
-libaddress_conduit_la_LIBADD = 					\
-	$(top_builddir)/addressbook/backend/ebook/libebook-static.la	\
-	$(top_builddir)/e-util/libeutil-static.la			\
-	$(top_builddir)/addressbook/ename/libename-static.la		\
-	$(top_builddir)/libversit/libversit.la				\
-	$(top_builddir)/libical/src/libical/libical-static.la		\
-	$(BONOBO_VFS_GNOME_LIBS)					\
-	$(PISOCK_LIBDIR) $(PISOCK_LIBS) 				\
-	$(GNOME_LIBDIR) 						\
-	$(GNOME_LIBS)
-
-ccenterdir = $(datadir)/control-center
-ccenterPalmPilotdir = $(ccenterdir)/Peripherals
-ccenterConduitsdir = $(ccenterPalmPilotdir)/Conduits
-ccenterConduits_DATA = address-conduit-control-applet.desktop 
-
-panelConduitsdir = $(datadir)/gnome/apps/Settings/Peripherals/Conduits
-panelConduits_DATA = $(ccenterConduits_DATA)
-
-Conduitdir = $(datadir)/gnome-pilot/conduits/
-Conduit_DATA = address.conduit
-
-EXTRA_DIST = \
-	address.conduit.in \
-        $(ccenterConduits_DATA)
-
-install-data-local:
-	$(mkinstalldirs) $(ccenterConduitsdir)
-	$(mkinstalldirs) $(Conduitdir)
diff --git a/addressbook/conduit/address-conduit-control-applet.c b/addressbook/conduit/address-conduit-control-applet.c
deleted file mode 100644
index 07a6e0042f..0000000000
--- a/addressbook/conduit/address-conduit-control-applet.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* Control applet ("capplet") for the gnome-pilot address conduit,             */
-/* based on                                                                 */
-/* gpilotd control applet ('capplet') for use with the GNOME control center */
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#include 
-#include 
-#include 
-
-#include "address-conduit.h"
-
-
-/* tell changes callbacks to ignore changes or not */
-static gboolean ignore_changes=FALSE;
-
-/* capplet widget */
-static GtkWidget *capplet=NULL;
-
-/* host/device/pilot configuration windows */
-GtkWidget *cfgOptionsWindow=NULL;
-GtkWidget *cfgStateWindow=NULL;
-GtkWidget *dialogWindow=NULL;
-
-gboolean activated,org_activation_state;
-GnomePilotConduitManagement *conduit;
-GnomePilotConduitConfig *conduit_config;
-AddressbookConduitCfg *origState = NULL;
-AddressbookConduitCfg *curState = NULL;
-
-static void doTrySettings(GtkWidget *widget, AddressbookConduitCfg *cfg);
-static void doRevertSettings(GtkWidget *widget, AddressbookConduitCfg *cfg);
-static void doSaveSettings(GtkWidget *widget, AddressbookConduitCfg *cfg);
-
-//static void readStateCfg (GtkWidget *w, AddressbookConduitCfg *c);
-static void setStateCfg (GtkWidget *w, AddressbookConduitCfg *c);
-
-gint pilotId;
-CORBA_Environment ev;
-static GnomePilotClient *gpc;
-
-
-/* This array must be in the same order as enumerations
-   in GnomePilotConduitSyncType as they are used as index.
-   Custom type implies Disabled state.
-*/
-static gchar* sync_options[] ={ N_("Disabled"),
-				N_("Synchronize"),
-				N_("Copy From Pilot"),
-				N_("Copy To Pilot"),
-				N_("Merge From Pilot"),
-				N_("Merge To Pilot")};
-#define SYNC_OPTIONS_COUNT 6
-
-
-
-
-/* Saves the configuration data. */
-static void 
-addressbookconduit_save_configuration(AddressbookConduitCfg *c) 
-{
-	gchar prefix[256];
-
-	g_snprintf(prefix,255,"/gnome-pilot.d/address-conduit/Pilot_%u/",c->pilotId);
-
-	gnome_config_push_prefix(prefix);
-	gnome_config_set_bool ("open_secret", c->open_secret);
-	gnome_config_pop_prefix();
-
-	gnome_config_sync();
-	gnome_config_drop_all();
-}
-
-/* Creates a duplicate of the configuration data */
-static AddressbookConduitCfg*
-gcalconduit_dupe_configuration(AddressbookConduitCfg *c) {
-	AddressbookConduitCfg *retval;
-	g_return_val_if_fail(c!=NULL,NULL);
-	retval = g_new0(AddressbookConduitCfg,1);
-	retval->sync_type = c->sync_type;
-	retval->open_secret = c->open_secret;
-	retval->pilotId = c->pilotId;
-	return retval;
-}
-
-
-static void
-doTrySettings(GtkWidget *widget, AddressbookConduitCfg *c)
-{
-	/*
-	readStateCfg (cfgStateWindow, curState);
-	if (activated)
-		gnome_pilot_conduit_config_enable (conduit_config, GnomePilotConduitSyncTypeCustom);
-	else
-		gnome_pilot_conduit_config_disable (conduit_config);
-	*/
-
-	if (c->sync_type!=GnomePilotConduitSyncTypeCustom)
-		gnome_pilot_conduit_config_enable_with_first_sync (conduit_config,
-								   c->sync_type,
-								   c->sync_type,
-								   TRUE);
-	else
-		gnome_pilot_conduit_config_disable (conduit_config);
-
-	addressbookconduit_save_configuration (c);
-}
-
-
-static void
-doSaveSettings(GtkWidget *widget, AddressbookConduitCfg *cfg)
-{
-	doTrySettings(widget, cfg);
-	addressbookconduit_save_configuration(cfg);
-}
-
-
-static void
-doCancelSettings(GtkWidget *widget, AddressbookConduitCfg *c)
-{
-	doSaveSettings (widget, c);
-}
-
-
-static void
-doRevertSettings(GtkWidget *widget, AddressbookConduitCfg *cfg)
-{
-	activated = org_activation_state;
-	setStateCfg (cfgStateWindow, curState);
-}
-
-static void 
-about_cb (GtkWidget *widget, gpointer data) 
-{
-	GtkWidget *about;
-	const gchar *authors[] = {_("Eskil Heyn Olsen "),NULL};
-  
-	about = gnome_about_new (_("Gpilotd address conduit"), VERSION,
-				 _("(C) 1998 the Free Software Foundation"),
-				 authors,
-				 _("Configuration utility for the address conduit.\n"),
-				 _("gnome-unknown.xpm"));
-	gtk_widget_show (about);
-  
-	return;
-}
-
-
-/* called by the sync_type GtkOptionMenu */
-static void
-sync_action_selection(GtkMenuShell *widget, gpointer unused) 
-{
-	if (!ignore_changes) {
-		capplet_widget_state_changed(CAPPLET_WIDGET (capplet), TRUE);
-	}
-}
-
-
-/* called by the sync_type GtkOptionMenu */
-static void
-activate_sync_type(GtkMenuItem *widget, gpointer data)
-{
-	curState->sync_type = GPOINTER_TO_INT(data);
-	if(!ignore_changes)
-		capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE);
-}
-
-
-static GtkWidget
-*createStateCfgWindow(void)
-{
-	GtkWidget *vbox, *table;
-	GtkWidget *label;
-	GtkWidget *optionMenu,*menuItem;
-	GtkMenu   *menu;
-	gint i;
-	
-	vbox = gtk_vbox_new(FALSE, GNOME_PAD);
-
-	table =  gtk_hbox_new(FALSE, 0); 
-	gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD);
-
-	label = gtk_label_new(_("Synchronize Action"));
-	gtk_box_pack_start(GTK_BOX(table), label, FALSE, FALSE, GNOME_PAD);    
-
-	optionMenu=gtk_option_menu_new();
-	gtk_object_set_data(GTK_OBJECT(vbox), "conduit_state", optionMenu);
-	menu = GTK_MENU(gtk_menu_new());
-
-	for (i=0; isync_type);
-	ignore_changes = FALSE;
-}
-
-
-#if 0
-static void
-readStateCfg (GtkWidget *w, AddressbookConduitCfg *c)
-{
-	/*
-	GtkWidget *button;
-	button  = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off");
-	g_assert(button!=NULL);
-	activated = GTK_TOGGLE_BUTTON(button)->active;
-	*/
-}
-#endif /* 0 */
-
-
-static void
-pilot_capplet_setup(void)
-{
-	GtkWidget *frame, *table;
-
-	capplet = capplet_widget_new();
-
-	table = gtk_table_new(1, 2, FALSE);
-	gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD);
-	gtk_container_add(GTK_CONTAINER(capplet), table); 
-
-	frame = gtk_frame_new(_("Conduit state"));
-	gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL);
-	gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1);
-	cfgStateWindow = createStateCfgWindow();
-	gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow);
-
-	gtk_signal_connect(GTK_OBJECT(capplet), "try",
-			   GTK_SIGNAL_FUNC(doTrySettings), curState);
-	gtk_signal_connect(GTK_OBJECT(capplet), "revert",
-			   GTK_SIGNAL_FUNC(doRevertSettings), curState);
-	gtk_signal_connect(GTK_OBJECT(capplet), "ok",
-			   GTK_SIGNAL_FUNC(doSaveSettings), curState);
-	gtk_signal_connect(GTK_OBJECT(capplet), "cancel",
-			   GTK_SIGNAL_FUNC(doCancelSettings), curState);
-	gtk_signal_connect(GTK_OBJECT(capplet), "help",
-			   GTK_SIGNAL_FUNC(about_cb), NULL);
-
-
-	setStateCfg (cfgStateWindow, curState);
-
-	gtk_widget_show_all (capplet);
-}
-
-
-static void 
-run_error_dialog(gchar *mesg,...) 
-{
-	char tmp[80];
-	va_list ap;
-
-	va_start(ap,mesg);
-	vsnprintf(tmp,79,mesg,ap);
-	dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL);
-	gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow));
-	va_end(ap);
-}
-
-
-static gint 
-get_pilot_id_from_gpilotd() 
-{
-	GList *pilots=NULL;
-	gint pilot;
-	int i,err;
-  
-	i=0;
-	/* we don't worry about leaking here, so pilots isn't freed */
-	switch(err = gnome_pilot_client_get_pilots(gpc,&pilots)) {
-	case GPILOTD_OK: {
-		if(pilots) {
-			for(i=0;idata); 
-			}
-			if(i==0) {
-				run_error_dialog(_("No pilot configured, please choose the\n'Pilot Link Properties' capplet first."));
-				return -1;
-			} else {
-				gnome_pilot_client_get_pilot_id_by_name(gpc,
-									pilots->data,  /* this is the first pilot */
-									&pilot);
-				if(i>1) {
-					g_message("too many pilots...");
-					/* need a choose here */
-				}
-				return pilot;
-			}
-		} else {
-			run_error_dialog(_("No pilot configured, please choose the\n'Pilot Link Properties' capplet first."));
-			return -1;
-		}    
-		break;
-	}
-	case GPILOTD_ERR_NOT_CONNECTED:
-		run_error_dialog(_("Not connected to the gnome-pilot daemon"));
-		return -1;
-		break;
-	default:
-		g_warning("gnome_pilot_client_get_pilot_ids(...) = %d",err);
-		run_error_dialog(_("An error occured when trying to fetch\npilot list from the gnome-pilot daemon"));
-		return -1;
-		break;
-	}
-}
-
-
-int
-main (int argc, char *argv[])
-{
-	g_log_set_always_fatal (G_LOG_LEVEL_ERROR |
-				G_LOG_LEVEL_CRITICAL |
-				G_LOG_LEVEL_WARNING);
-	
-	/* we're a capplet */
-	gnome_capplet_init ("address conduit control applet", NULL, argc, argv, 
-			    NULL, 0, NULL);
-
-   
-	gpc = gnome_pilot_client_new();
-	gnome_pilot_client_connect_to_daemon(gpc);
-	pilotId = get_pilot_id_from_gpilotd();
-	if(!pilotId) return -1;
-
-	/* put all code to set things up in here */
-	conduit_load_configuration (&origState, pilotId);
-
-	conduit = gnome_pilot_conduit_management_new ("address_conduit", GNOME_PILOT_CONDUIT_MGMT_ID);
-	if (conduit == NULL) return -1;
-	conduit_config = gnome_pilot_conduit_config_new (conduit, pilotId);
-	org_activation_state = gnome_pilot_conduit_config_is_enabled (conduit_config,
-								      &origState->sync_type);
-	activated = org_activation_state;
-
-	//gpilotd_conduit_mgmt_get_sync_type (conduit, pilotId, &origState->sync_type);
-
-	curState = gcalconduit_dupe_configuration(origState);
-    
-	pilot_capplet_setup ();
-
-
-	/* done setting up, now run main loop */
-	capplet_gtk_main();
-    
-	gnome_pilot_conduit_management_destroy(conduit);
-
-	return 0;
-}    
diff --git a/addressbook/conduit/address-conduit-control-applet.desktop b/addressbook/conduit/address-conduit-control-applet.desktop
deleted file mode 100644
index a11a782844..0000000000
--- a/addressbook/conduit/address-conduit-control-applet.desktop
+++ /dev/null
@@ -1,12 +0,0 @@
-[Desktop Entry]
-Name=Address conduit 
-Name[da]=Udstående
-Name[no]=Oppgaver
-Name[tr]=Adres parçasý
-Comment=Configure the address conduit
-Comment[da]=Konfigurér Udstående
-Comment[no]=Konfigurér oppgavelisten
-Comment[tr]=Adres parçasýnýn ayarlarý
-Exec=address-conduit-control-applet --cap-id=1
-Terminal=0
-Type=Application
diff --git a/addressbook/conduit/address-conduit.c b/addressbook/conduit/address-conduit.c
deleted file mode 100644
index d863d22af4..0000000000
--- a/addressbook/conduit/address-conduit.c
+++ /dev/null
@@ -1,1274 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "ebook/e-book-types.h"
-
-#include 
-
-GnomePilotConduit * conduit_get_gpilot_conduit (guint32);
-void conduit_destroy_gpilot_conduit (GnomePilotConduit*);
-void local_record_from_ecard (AddressbookLocalRecord *local, ECard *ecard);
-
-#define CONDUIT_VERSION "0.1"
-#ifdef G_LOG_DOMAIN
-#undef G_LOG_DOMAIN
-#endif
-#define G_LOG_DOMAIN "addressconduit" 
-
-/* #define SUPPORT_ARCHIVING 1 */
-#define NEED_OAF_INIT_HACK 1
-#define DEBUG_ADDRESSBOOKCONDUIT 1
-
-#ifdef DEBUG_ADDRESSBOOKCONDUIT
-#define show_exception(e) g_warning ("Exception: %s\n", CORBA_exception_id (e))
-#define LOG(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e)
-#else
-#define show_exception(e)
-#define LOG(e...)
-#endif
-
-#define WARN(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_WARNING, e)
-#define INFO(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e)
-
-#define catch_ret_val(_env,ret)                                                                 \
-  if (_env._major != CORBA_NO_EXCEPTION) {                                                      \
-        g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE,"%s:%d: Caught exception",__FILE__,__LINE__);    \
-        g_warning ("Exception: %s\n", CORBA_exception_id (&(_env)));                               \
-	CORBA_exception_free(&(_env));                                                             \
-	return ret;                                                                             \
-  }
-
-
-static void
-status_cb (EBook *ebook, EBookStatus status, gpointer closure)
-{
-	(*(EBookStatus*)closure) = status;
-	gtk_main_quit();
-}
-
-
-/* Destroys any data allocated by gcalconduit_load_configuration
-   and deallocates the given configuration. */
-static void 
-conduit_destroy_configuration(AddressbookConduitCfg **c) 
-{
-	g_return_if_fail(c!=NULL);
-	g_return_if_fail(*c!=NULL);
-	//g_free(*c); FIX ME
-	*c = NULL;
-}
-
-
-/* Given a AddressbookConduitContext**, allocates the structure */
-static void
-conduit_new_context(AddressbookConduitContext **ctxt,
-		    AddressbookConduitCfg *c) 
-{
-	*ctxt = g_new0(AddressbookConduitContext,1);
-	g_assert(ctxt!=NULL);
-	(*ctxt)->cfg = c;
-	CORBA_exception_init (&((*ctxt)->ev));
-}
-
-
-/* Destroys any data allocated by conduit_new_context
-   and deallocates its data. */
-static void
-conduit_destroy_context(AddressbookConduitContext **ctxt)
-{
-	g_return_if_fail(ctxt!=NULL);
-	g_return_if_fail(*ctxt!=NULL);
-
-	if ((*ctxt)->cfg!=NULL)
-		conduit_destroy_configuration(&((*ctxt)->cfg));
-
-	g_free(*ctxt);
-	*ctxt = NULL;
-}
-
-
-static void
-cursor_cb (EBook *book, EBookStatus status, ECardCursor *cursor, gpointer closure)
-{
-	AddressbookConduitContext *ctxt = (AddressbookConduitContext*)closure;
-
-	if (status == E_BOOK_STATUS_SUCCESS) {
-		long length;
-		int i;
-
-		// ctxt->cursor = cursor;
-		ctxt->address_load_success = TRUE;
-
-		length = e_card_cursor_get_length (cursor);
-		ctxt->cards = NULL;
-		for (i = 0; i < length; i ++)
-			ctxt->cards = g_list_append (ctxt->cards, e_card_cursor_get_nth (cursor, i));
-
-		gtk_main_quit(); /* end the sub event loop */
-	}
-	else {
-		WARN (_("BLARG\n"));
-		gtk_main_quit(); /* end the sub event loop */
-	}
-}
-
-static void
-book_open_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-	AddressbookConduitContext *ctxt = (AddressbookConduitContext*)closure;
-
-	if (status == E_BOOK_STATUS_SUCCESS) {
-		e_book_get_cursor (book, "(contains \"full_name\" \"\")", cursor_cb, ctxt);
-	}
-	else {
-		WARN (_("BLARG\n"));
-		gtk_main_quit(); /* end the sub event loop */
-	}
-}
-
-static int
-start_address_server (GnomePilotConduitStandardAbs *conduit,
-		      AddressbookConduitContext *ctxt)
-{
-	gchar *uri, *path;
-
-	g_return_val_if_fail(conduit!=NULL,-2);
-	g_return_val_if_fail(ctxt!=NULL,-2);
-
-	ctxt->ebook = e_book_new ();
-
-	path = g_concat_dir_and_file (g_get_home_dir (),
-				      "evolution/local/Contacts/addressbook.db");
-	uri = g_strdup_printf ("file://%s", path);
-	g_free (path);
-
-	e_book_load_uri (ctxt->ebook, uri, book_open_cb, ctxt);
-
-	/* run a sub event loop to turn ebook's async loading into a
-           synchronous call */
-	gtk_main ();
-
-	g_free (uri);
-
-	if (ctxt->address_load_success)
-		return 0;
-
-	return -1;
-}
-
-/*
- * converts a ECard to a AddressbookLocalRecord
- */
-void
-local_record_from_ecard(AddressbookLocalRecord *local,
-			ECard *ecard)
-{
-	guint32 current_status;
-
-	g_return_if_fail(local!=NULL);
-	g_return_if_fail(ecard!=NULL);
-
-	local->ecard = ecard;
-	local->local.ID = local->ecard->pilot_id;
-
-	gtk_object_get (GTK_OBJECT(ecard),
-			"pilot_status", ¤t_status, NULL);
-
-	switch(current_status) {
-	case E_CARD_PILOT_STATUS_NONE: 
-		local->local.attr = GnomePilotRecordNothing; 
-		break;
-	case E_CARD_PILOT_STATUS_MOD:
-		local->local.attr = GnomePilotRecordModified; 
-		break;
-	case E_CARD_PILOT_STATUS_DEL: 
-		local->local.attr = GnomePilotRecordDeleted; 
-		break;
-	}
-
-	/* Records without a pilot_id are new */
-	if(local->local.ID == 0) 
-		local->local.attr = GnomePilotRecordNew; 
-  
-	local->local.secret = 0;
-#if 0
-	if(obj->class!=NULL) 
-		if(strcmp(obj->class,"PRIVATE")==0)
-			local->local.secret = 1;
-#endif
- 
-	local->local.archived = 0;  
-}
-
-static ECard *
-get_ecard_by_pilot_id (GList *card_list, recordid_t id)
-{
-	GList *l;
-
-	for (l = card_list; l; l = l->next) {
-		guint32 pilot_id;
-		ECard *card = l->data;
-
-		if (!card)
-			continue;
-
-		gtk_object_get (GTK_OBJECT(card),
-				"pilot_id", &pilot_id, NULL);
-
-		if (pilot_id == id)
-			return card;
-	}
-
-	return NULL;
-}
-
-/*
- * Given a PilotRecord, find the matching record in
- * the addressbook. If no match, return NULL
- */
-static AddressbookLocalRecord *
-find_record_in_ebook(GnomePilotConduitStandardAbs *conduit,
-		     PilotRecord *remote,
-		     AddressbookConduitContext *ctxt) 
-{
-	AddressbookLocalRecord *loc;
-	ECard *ecard;
-  
-	g_return_val_if_fail(conduit!=NULL,NULL);
-	g_return_val_if_fail(remote!=NULL,NULL);
-  
-	LOG ("requesting %ld", remote->ID);
-
-	ecard = get_ecard_by_pilot_id (ctxt->cards, remote->ID);
-
-	if (NULL != ecard) {
-		LOG ("Found");
-		loc = g_new0(AddressbookLocalRecord,1);
-		/* memory allocated in new_from_string is freed in free_match */
-		local_record_from_ecard (loc, ecard);
-		return loc;
-	}
-
-	INFO ("Object did not exist");
-	return NULL;
-}
-
-static ECard *
-ecard_from_remote_record(AddressbookConduitContext *ctxt,
-			 PilotRecord *remote)
-{
-	struct Address address;
-	ECard *ecard;
-	ECardSimple *simple;
-	int i;
-	char *string;
-	char *stringparts[4];
-	char *commaparts[3];
-	char *spaceparts[3];
-	char *commastring, *spacestring;
-
-	g_return_val_if_fail(remote!=NULL,NULL);
-	memset (&address, 0, sizeof (struct Address));
-	unpack_Address (&address, remote->record, remote->length);
-
-
-	ecard = e_card_new("");
-	simple = e_card_simple_new(ecard);
-
-#define get(pilotprop) \
-        (address.entry [(pilotprop)])
-#define check(pilotprop) \
-        (address.entry [(pilotprop)] && *address.entry [(pilotprop)])
-
-	i = 0;
-	if (check(entryFirstname))
-		stringparts[i++] = get(entryFirstname);
-	if (check(entryLastname))
-		stringparts[i++] = get(entryLastname);
-	stringparts[i] = NULL;
-	string = g_strjoinv(" ", stringparts);
-	e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_FULL_NAME, string);
-	g_free(string);
-
-	i = 0;
-	if (check (entryAddress))
-		spaceparts[i++] = get (entryAddress);
-	if (check (entryZip))
-		spaceparts[i++] = get (entryZip);
-	spaceparts[i] = 0;
-	spacestring = g_strjoinv(" ", spaceparts);
-
-	i = 0;
-	if (check (entryCity))
-		commaparts[i++] = get (entryCity);
-	if (spacestring && *spacestring)
-		commaparts[i++] = spacestring;
-	commaparts[i] = 0;
-	commastring = g_strjoinv(", ", commaparts);
-
-	i = 0;
-	if (check (entryAddress))
-		stringparts[i++] = get (entryAddress);
-	if (commastring && *commastring)
-		stringparts[i++] = commastring;
-	if (check (entryCountry))
-		stringparts[i++] = get (entryCountry);
-	stringparts[i] = NULL;
-	string = g_strjoinv("\n", stringparts);
-	e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_ADDRESS_HOME, string);
-
-	g_free(spacestring);
-	g_free(commastring);
-	g_free(string);
-
-	if (check (entryTitle))
-		e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_TITLE, get (entryTitle));
-
-	if (check (entryCompany))
-		e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_ORG, get (entryCompany));
-
-	for (i = entryPhone1; i <= entryPhone5; i ++) {
-		if (address.entry [i] && *(address.entry [i])) {
-			char *phonelabel = ctxt->ai.phoneLabels[address.phoneLabel[i - entryPhone1]];
-			if (!strcmp (phonelabel, "E-mail"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_EMAIL, address.entry[i]);
-			else if (!strcmp (phonelabel, "Home"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_HOME, address.entry[i]);
-			else if (!strcmp (phonelabel, "Work"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_BUSINESS, address.entry[i]);
-			else if (!strcmp (phonelabel, "Fax"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_BUSINESS_FAX, address.entry[i]);
-			else if (!strcmp (phonelabel, "Other"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_OTHER, address.entry[i]);
-			else if (!strcmp (phonelabel, "Main"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_PRIMARY, address.entry[i]);
-			else if (!strcmp (phonelabel, "Pager"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_PAGER, address.entry[i]);
-			else if (!strcmp (phonelabel, "Mobile"))
-				e_card_simple_set(simple, E_CARD_SIMPLE_FIELD_PHONE_MOBILE, address.entry[i]);
-		}
-	}
-#undef get
-#undef set
-
-	free_Address(&address);
-
-	gtk_object_set (GTK_OBJECT(ecard), "pilot_id", remote->ID, NULL);
-
-	gtk_object_unref(GTK_OBJECT(simple));
-
-	return ecard;
-}
-
-static ECard*
-merge_ecard_with_remote_record (AddressbookConduitContext *ctxt,
-				ECard *ecard,
-				PilotRecord *remote)
-{
-	return ecard;
-}
-
-typedef struct {
-	EBookStatus status;
-	char *id;
-} add_card_cons;
-
-static void
-add_card_cb (EBook *ebook, EBookStatus status, const char *id, gpointer closure)
-{
-	add_card_cons *cons = (add_card_cons*)closure;
-
-	cons->status = status;
-	cons->id = g_strdup (id);
-
-	gtk_main_quit();
-}
-
-static gint
-update_record (GnomePilotConduitStandardAbs *conduit,
-	       PilotRecord *remote,
-	       AddressbookConduitContext *ctxt)
-{
-	struct Address address;
-	ECard *ecard;
-	add_card_cons cons;
-
-	g_return_val_if_fail(remote!=NULL,-1);
-
-	memset (&address, 0, sizeof (struct Address));
-	unpack_Address (&address, remote->record, remote->length);
-
-	LOG ("requesting %ld [%s %s]", remote->ID, address.entry[entryFirstname], address.entry[entryLastname]);
-	printf ("requesting %ld [%s %s]\n", remote->ID, address.entry[entryFirstname], address.entry[entryLastname]);
-
-	ecard = get_ecard_by_pilot_id (ctxt->cards, remote->ID);
-
-	if (ecard == NULL) {
-
-		LOG ("Object did not exist, creating a new one");
-		printf ("Object did not exist, creating a new one\n");
-
-		ecard = ecard_from_remote_record (ctxt, remote);
-
-		/* add the ecard to the server */
-		e_book_add_card (ctxt->ebook, ecard, add_card_cb, &cons);
-
-		gtk_main(); /* enter sub mainloop */
-
-		if (cons.status == E_BOOK_STATUS_SUCCESS) {
-			ctxt->cards = g_list_append (ctxt->cards,
-				     e_book_get_card (ctxt->ebook, cons.id));
-			g_free (cons.id);
-		}
-		else
-			WARN ("update_record: failed to add card to ebook\n");
-	} else {
-		EBookStatus commit_status;
-
-		ecard = merge_ecard_with_remote_record (ctxt, ecard, remote);
-
-		e_book_commit_card (ctxt->ebook, ecard, status_cb, &commit_status);
-
-		gtk_main (); /* enter sub mainloop */
-
-		if (commit_status != E_BOOK_STATUS_SUCCESS)
-			WARN ("update_record: failed to update card in ebook\n");
-	}
-
-	free_Address(&address);
-
-	return 0;
-}
-
-#if 0
-static void
-check_for_slow_setting (GnomePilotConduit *c, AddressbookConduitContext *ctxt)
-{
-	GList *uids;
-	unsigned long int entry_number;
-
-	uids = cal_client_get_uids (ctxt->client, CALOBJ_TYPE_ADDRESS);
-
-	entry_number = g_list_length (uids);
-
-	LOG (_("Address holds %ld address entries"), entry_number);
-	/* If the local base is empty, do a slow sync */
-	if (entry_number == 0) {
-		GnomePilotConduitStandard *conduit;
-		conduit = GNOME_PILOT_CONDUIT_STANDARD (c);
-		gnome_pilot_conduit_standard_set_slow (conduit);
-	}
-}
-#endif /* 0 */
-
-static gint
-pre_sync (GnomePilotConduit *c,
-	  GnomePilotDBInfo *dbi,
-	  AddressbookConduitContext *ctxt)
-{
-	int l;
-	unsigned char *buf;
-	GnomePilotConduitStandardAbs *conduit;
-
-	conduit = GNOME_PILOT_CONDUIT_STANDARD_ABS(c);
-  
-	g_message ("Evolution Addressbook Conduit v.%s",CONDUIT_VERSION);
-
-	ctxt->ebook = NULL;
-	
-	if (start_address_server (GNOME_PILOT_CONDUIT_STANDARD_ABS(c), ctxt) != 0) {
-		WARN(_("Could not start addressbook server"));
-		gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c),
-					  _("Could not start addressbook server"));
-		return -1;
-	}
-
-
-	/* Set the counters for the progress bar crap */
-
-	gtk_object_set_data (GTK_OBJECT(c),"dbinfo",dbi);
-  
-	/* load_records(c); */
-
-	buf = (unsigned char*)g_malloc(0xffff);
-	if((l=dlp_ReadAppBlock(dbi->pilot_socket,dbi->db_handle,0,(unsigned char *)buf,0xffff)) < 0) {
-		WARN(_("Could not read pilot's Address application block"));
-		WARN("dlp_ReadAppBlock(...) = %d",l);
-		gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c),
-			     _("Could not read pilot's Address application block"));
-		return -1;
-	}
-	unpack_AddressAppInfo(&(ctxt->ai),buf,l);
-	g_free(buf);
-
-#if 0
-	check_for_slow_setting(c,ctxt);
-#else
-	/* for now just always use the slow sync method */
-	gnome_pilot_conduit_standard_set_slow (GNOME_PILOT_CONDUIT_STANDARD (c));
-#endif
-
-	return 0;
-}
-
-/**
- * Find (if possible) the local record which matches
- * the given PilotRecord.
- * if successfull, return non-zero and set *local to
- * a non-null value (the located local record),
- * otherwise return 0 and set *local = NULL;
- */
-
-static gint
-match_record	(GnomePilotConduitStandardAbs *conduit,
-		 AddressbookLocalRecord **local,
-		 PilotRecord *remote,
-		 AddressbookConduitContext *ctxt)
-{
-	LOG ("in match_record");
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_return_val_if_fail(remote!=NULL,-1);
-
-	*local = find_record_in_ebook(conduit,remote,ctxt);
-  
-	if (*local==NULL) return -1;
-	return 0;
-}
-
-/**
- * Free the data allocated by a previous match_record call.
- * If successfull, return non-zero and ser *local=NULL, otherwise
- * return 0.
- */
-static gint
-free_match	(GnomePilotConduitStandardAbs *conduit,
-		 AddressbookLocalRecord **local,
-		 AddressbookConduitContext *ctxt)
-{
-	LOG ("entering free_match");
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_return_val_if_fail(*local!=NULL,-1);
-
-	g_free(*local);
-	
-        *local = NULL;
-	return 0;
-}
-
-#if SUPPORT_ARCHIVING
-/*
-  Move to archive and set status to Nothing
- */
-static gint
-archive_local (GnomePilotConduitStandardAbs *conduit,
-	       AddressbookLocalRecord *local,
-	       AddressbookConduitContext *ctxt)
-{
-	LOG ("entering archive_local");
-
-	g_return_val_if_fail(local!=NULL,-1);
-
-	return -1;
-}
-
-/*
-** used when copying information from the pilot to the desktop.  if
-** the archived flag is set to true in the PilotRecord, this method is
-** called.
-**
-** Store in archive and set status to Nothing
-*/
-static gint
-archive_remote (GnomePilotConduitStandardAbs *conduit,
-		AddressbookLocalRecord *local,
-		PilotRecord *remote,
-		AddressbookConduitContext *ctxt)
-{
-	LOG ("entering archive_remote");
-
-        //g_return_val_if_fail(remote!=NULL,-1);
-	//g_return_val_if_fail(local!=NULL,-1);
-
-	return -1;
-}
-
-/*
-** Called when copying records to the pilot.
-**
-** XXX more here.
-*/
-static gint
-clear_status_archive_local (GnomePilotConduitStandardAbs *conduit,
-			    AddressbookLocalRecord *local,
-			    AddressbookConduitContext *ctxt)
-{
-	LOG ("entering clear_status_archive_local");
-
-	g_return_val_if_fail(local!=NULL,-1);
-
-        return -1;
-}
-
-/*
-** presumably used to set the archived flag on a local record.  not
-** actually used in the gnome-pilot source.
-*/
-static gint
-set_archived (GnomePilotConduitStandardAbs *conduit,
-	      AddressbookLocalRecord *local,
-	      gint archived,
-	      AddressbookConduitContext *ctxt)
-{
-	LOG ("entering set_archived");
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_assert(local->ecard!=NULL);
-
-	local->local.archived = archived;
-	update_address_entry_in_repository (conduit, local->ical, ctxt);
-        return 0;
-}
-
-#endif
-
-/*
-** used when copying information from the pilot to the desktop.  if
-** the archived flags and deleted flags are not set to true in the
-** PilotRecord, this method is called.
-**
-** Store and set status to Nothing
-*/
-static gint
-store_remote (GnomePilotConduitStandardAbs *conduit,
-	      PilotRecord *remote,
-	      AddressbookConduitContext *ctxt)
-{
-	LOG ("entering store_remote");
-
-	g_return_val_if_fail(remote!=NULL,-1);
-	remote->attr = GnomePilotRecordNothing;
-
-	return update_record(conduit,remote,ctxt);
-}
-
-/*
-** Used when looping over records on the local side of things.
-** function should maintain state such that *local moves along the
-** list of records.
-**
-** return value is 0 if we're done, 1 to continue iterating, and -1 on
-** error.
-*/
-static gint
-iterate (GnomePilotConduitStandardAbs *conduit,
-	 AddressbookLocalRecord **local,
-	 AddressbookConduitContext *ctxt)
-{
-	static GList *iterator;
-	static int num;
-
-	g_return_val_if_fail(local!=NULL,-1);
-
-	if (*local==NULL) {
-		LOG ("beginning iteration");
-
-		iterator = ctxt->cards;
-		num = 0;
-		
-		LOG ("iterating over %d records", g_list_length (ctxt->cards));
-		*local = g_new0(AddressbookLocalRecord, 1);
-		local_record_from_ecard (*local, (ECard*)iterator->data);
-	} else {
-		/* printf ("continuing iteration\n"); */
-		num++;
-		if(g_list_next(iterator)==NULL) {
-			LOG ("ending");
-			/** free stuff allocated for iteration */
-			g_free((*local));
-
-			LOG ("iterated over %d records", num);
-
-			/* ends iteration */
-			(*local) = NULL;
-			return 0;
-		} else {
-			iterator = g_list_next (iterator);
-			local_record_from_ecard (*local,(ECard*)(iterator->data));
-		}
-	}
-	return 1;
-}
-
-
-/*
-** similar to iterate, except the list of records we iterate over have
-** to have FLAG set and ARCHIVE should match the state of the local
-** record.
-**
-** return value is 0 if we're done, 1 to continue iterating, and -1 on
-** error.
-*/
-static gint
-iterate_specific (GnomePilotConduitStandardAbs *conduit,
-		  AddressbookLocalRecord **local,
-		  gint flag,
-		  gint archived,
-		  AddressbookConduitContext *ctxt)
-{
-#ifdef DEBUG_ADDRESSBOOKCONDUIT
-	{
-		gchar *tmp;
-		switch (flag) {
-		case GnomePilotRecordNothing: tmp = g_strdup("RecordNothing"); break;
-		case GnomePilotRecordModified: tmp = g_strdup("RecordModified"); break;
-		case GnomePilotRecordDeleted: tmp = g_strdup("RecordDeleted"); break;
-		case GnomePilotRecordNew: tmp = g_strdup("RecordNew"); break;
-		default: tmp = g_strdup_printf("0x%x",flag); break;
-		}
-		printf ("entering iterate_specific(flag = %s)\n", tmp);
-		g_free(tmp);
-	}
-#endif
-	g_return_val_if_fail(local!=NULL,-1);
-
-	/* iterate until a record meets the criteria */
-	while(gnome_pilot_conduit_standard_abs_iterate(conduit,(LocalRecord**)local)) {
-		if((*local)==NULL) break;
-#if SUPPORT_ARCHIVING
-		if(archived && ((*local)->local.archived==archived)) break;
-#endif
-		if(((*local)->local.attr == flag)) break;
-	}
-
-	return (*local)==NULL?0:1;
-}
-
-/*
-** actually remove the records flagged as deleted from the local
-** store.
-**
-** XXX return value isn't checked by gnome-pilot source.
-*/
-static gint
-purge (GnomePilotConduitStandardAbs *conduit,
-       AddressbookConduitContext *ctxt)
-{
-	GList *it;
-	gint retval = 0;
-
-	for (it=ctxt->cards; it;) {
-		guint32 current_status;
-
-		gtk_object_get (GTK_OBJECT (it->data), "pilot_status",
-				¤t_status, NULL);
-
-		if (current_status == E_CARD_PILOT_STATUS_DEL) {
-			EBookStatus remove_status;
-
-			e_book_remove_card (ctxt->ebook, it->data, status_cb, &remove_status);
-			gtk_main(); /* enter sub loop */
-
-			if (remove_status == E_BOOK_STATUS_SUCCESS) {
-				GList *l = it;
-				it = g_list_next (it);
-				gtk_object_unref (GTK_OBJECT (it->data));
-				ctxt->cards = g_list_remove_link(ctxt->cards, l);
-				g_list_free_1 (l);
-			}
-			else {
-				retval = -1;
-				it = g_list_next (it);
-			}
-		}
-		else
-			it = g_list_next (it);
-	}
-
-	return retval;
-}
-
-
-/*
-** sets the value of the status flag on the local record (deleted,
-** nothing, modified, etc.)
-**
-** XXX return value not checked by gnome-pilot source.
-*/
-static gint
-set_status (GnomePilotConduitStandardAbs *conduit,
-	    AddressbookLocalRecord *local,
-	    gint status,
-	    AddressbookConduitContext *ctxt)
-{
-	EBookStatus commit_status;
-	guint32 ecard_status;
-
-	LOG ("entering set_status(status=%d)",status);
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_assert(local->ecard!=NULL);
-	
-	local->local.attr = status;
-	switch(status) {
-	case GnomePilotRecordDeleted:
-		ecard_status = E_CARD_PILOT_STATUS_DEL;
-		break;
-	case GnomePilotRecordNew:
-	case GnomePilotRecordModified:
-		ecard_status = E_CARD_PILOT_STATUS_MOD;
-		break;
-	default:
-		ecard_status = E_CARD_PILOT_STATUS_NONE;
-		break;
-	}
-	
-	gtk_object_set (GTK_OBJECT (local->ecard),
-			"pilot_status", ecard_status, NULL);
-
-	e_book_commit_card (ctxt->ebook, local->ecard, status_cb,
-			    &commit_status);
-
-	gtk_main (); /* enter sub loop */
-
-	if (commit_status != E_BOOK_STATUS_SUCCESS) {
-		WARN (_("Error while communicating with address server"));
-	}
-
-        return 0;
-}
-
-/*
-** used when writing a record to the pilot.  the id is the one
-** assigned to the remote record.  storing it in the local record
-** makes it easier to match up local and remote records later on.
-**
-** this should not change the state of the local entry to modified.
-**
-** XXX return value not checked by gnome-pilot source.
-*/
-static gint
-set_pilot_id (GnomePilotConduitStandardAbs *conduit,
-	      AddressbookLocalRecord *local,
-	      guint32 ID,
-	      AddressbookConduitContext *ctxt)
-{
-	EBookStatus commit_status;
-
-	LOG ("entering set_pilot_id(id=%d)",ID);
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_assert(local->ecard!=NULL);
-
-	local->local.ID = ID;
-
-	gtk_object_set (GTK_OBJECT(local->ecard),
-			"pilot_id", local->local.ID, NULL);
-	e_book_commit_card (ctxt->ebook, local->ecard, status_cb, &commit_status);
-
-	gtk_main (); /* enter sub loop */
-
-	if (commit_status == E_BOOK_STATUS_SUCCESS) {
-		return 0;
-	}
-	else {
-		WARN ("set_pilot_id failed.\n");
-		return -1;
-	}
-}
-
-static int
-get_phone_label_by_name (struct AddressAppInfo *ai,
-			 const char *name)
-{
-	int i;
-
-	for (i = 0; i < 8 /* the number of pilot address labels */; i ++) {
-		if (!strcmp(name, ai->phoneLabels[i]))
-			return i;
-	}
-
-	WARN ("couldn't find pilot label '%s'.\n", name);
-	return 0;
-}
-
-static int
-get_phone_label_by_flag (struct AddressAppInfo *ai,
-			 int flags)
-{
-	char *label_to_find;
-
-	if (flags & E_CARD_PHONE_PREF) label_to_find = "Main";
-	else if (flags & E_CARD_PHONE_WORK) label_to_find = "Work";
-	else if (flags & E_CARD_PHONE_HOME) label_to_find = "Home";
-	else if (flags & E_CARD_PHONE_FAX) label_to_find = "Fax";
-	else if (flags & E_CARD_PHONE_PAGER) label_to_find = "Pager";
-	else if (flags & E_CARD_PHONE_CELL) label_to_find = "Mobile";
-	else label_to_find = "Other";
-
-	return get_phone_label_by_name (ai, label_to_find);
-}
-
-/*
-** used to convert between a local record and a remote record.  memory
-** allocated during this process should be freed in free_transmit
-** below.
-**
-** XXX return value not checked by gnome-pilot source, but setting
-** *remote to NULL triggers an error.
-*/
-static gint
-transmit (GnomePilotConduitStandardAbs *conduit,
-	  AddressbookLocalRecord *local,
-	  PilotRecord **remote,
-	  AddressbookConduitContext *ctxt)
-{
-	PilotRecord *p;
-	ECardName *ecard_name;
-	EList *ecard_phones;
-	EList *ecard_emails;
-	char *ecard_org, *ecard_note, *ecard_title;
-	int phone_entry = entryPhone1;
-	
-	LOG ("entering transmit");
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_return_val_if_fail(remote!=NULL,-1);
-	g_assert(local->ecard!=NULL);
-
-	p = g_new0(PilotRecord,1);
-
-	p->ID = local->local.ID;
-	p->attr = local->local.attr;
-	p->archived = local->local.archived;
-	p->secret = local->local.secret;
-
-	local->address = g_new0(struct Address,1);
-
-	gtk_object_get (GTK_OBJECT (local->ecard),
-			"name", &ecard_name,
-			"org", &ecard_org,
-			"note", &ecard_note,
-			"title", &ecard_title,
-			"phone", &ecard_phones,
-			"email", &ecard_emails,
-			NULL);
-
-	/* use strdup instead of g_strdup since free_transmit uses free, not g_free. */
-	if (ecard_name) {
-		if (ecard_name->given)
-			local->address->entry [ entryFirstname ] = strdup (ecard_name->given);
-		if (ecard_name->family)
-			local->address->entry [ entryLastname ] = strdup (ecard_name->family);
-		// e_card_name_free (ecard_name);
-	}
-
-	if (ecard_org) {
-		local->address->entry [ entryCompany ] = strdup (ecard_org);
-	}
-	if (ecard_title) {
-		local->address->entry [ entryTitle ] = strdup (ecard_title);
-	}
-	if (ecard_emails) {
-		EIterator *iterator = e_list_get_iterator (ecard_emails);
-		char *email;
-
-		if ((email = (char *)e_iterator_get(iterator))) {
-			local->address->phoneLabel[phone_entry - entryPhone1] =
-				get_phone_label_by_name (&ctxt->ai, "E-mail");
-			local->address->entry [ phone_entry ] = strdup (email);
-
-			phone_entry++;
-		}
-	}
-	if (ecard_phones) {
-		int phone_entry = entryPhone1;
-		EIterator *iterator = e_list_get_iterator (ecard_phones);
-		ECardPhone *phone;
-
-		while ((phone = (ECardPhone*)e_iterator_get(iterator))) {
-
-			local->address->phoneLabel[phone_entry - entryPhone1] =
-				get_phone_label_by_flag (&ctxt->ai, phone->flags);
-			local->address->entry [ phone_entry ] = strdup (phone->number);
-
-			/* only store a maximum of 5 numbers (4 if
-                           there was an email address) */
-			if (phone_entry == entryPhone5)
-				break;
-
-			if (e_iterator_next (iterator) == FALSE)
-				break;
-
-			phone_entry++;
-		}
-	}
-
-	if (ecard_note) {
-		local->address->entry [ entryNote ] = strdup (ecard_note);
-	}
-#if 0
-	printf ("transmitting address to pilot [%s] complete=%d/%ld\n",
-		local->ical->summary==NULL?"NULL":local->ical->summary,
-		local->address->complete, local->ical->completed);
-#endif
-
-	/* Generate pilot record structure */
-	p->record = g_new0(char,0xffff);
-	p->length = pack_Address(local->address,p->record,0xffff);
-
-	*remote = p;
-
-	return 0;
-}
-
-/*
-** free memory allocated in the transmit signal.
-**
-** XXX return value not checked.
-*/
-static gint
-free_transmit (GnomePilotConduitStandardAbs *conduit,
-	       AddressbookLocalRecord *local,
-	       PilotRecord **remote,
-	       AddressbookConduitContext *ctxt)
-{
-	LOG ("entering free_transmit");
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_return_val_if_fail(remote!=NULL,-1);
-
-	free_Address(local->address);
-	g_free((*remote)->record);
-	*remote = NULL;
-        return 0;
-}
-
-/*
-** used when synching.  compare the local and remove record data and
-** determine equality.
-**
-** retval is similar to strcmp: 0 for equality, anything else for
-** inequality (no ordering is imposed).
-*/
-static gint
-compare (GnomePilotConduitStandardAbs *conduit,
-	 AddressbookLocalRecord *local,
-	 PilotRecord *remote,
-	 AddressbookConduitContext *ctxt)
-{
-#if 0
-	/* used by the quick compare */
-	PilotRecord *remoteOfLocal;
-	int err;
-	int retval;
-
-	g_message ("entering compare");
-	printf ("entering compare\n");
-
-	g_return_val_if_fail (local!=NULL,-1);
-	g_return_val_if_fail (remote!=NULL,-1);
-
-	err = transmit(conduit,local,&remoteOfLocal,ctxt);
-	if (err != 0) return err;
-
-	retval = 0;
-	if (remote->length == remoteOfLocal->length) {
-		if (memcmp(remoteOfLocal->record,remote->record,remote->length)!=0) {
-			g_message("compare failed on contents");
-			printf ("compare failed on contents\n");
-			retval = 1;
-
-			/* debug spew */
-			{
-				struct Address foolocal;
-				struct Address fooremote;
-
-				unpack_Address (&foolocal,
-					     remoteOfLocal->record,
-					     remoteOfLocal->length);
-				unpack_Address (&fooremote,
-					     remote->record,
-					     remote->length);
-
-				printf (" local:[%d %ld %d %d '%s' '%s']\n",
-					foolocal.indefinite,
-					mktime (& foolocal.due),
-					foolocal.priority,
-					foolocal.complete,
-					foolocal.description,
-					foolocal.note);
-
-				printf ("remote:[%d %ld %d %d '%s' '%s']\n",
-					fooremote.indefinite,
-					mktime (& fooremote.due),
-					fooremote.priority,
-					fooremote.complete,
-					fooremote.description,
-					fooremote.note);
-			}
-		}
-	} else {
-		g_message("compare failed on length");
-		printf("compare failed on length\n");
-		retval = 1;
-	}
-
-	free_transmit(conduit,local,&remoteOfLocal,ctxt);	
-	return retval;
-#endif /* 0 */
-	return 0;
-}
-
-/*
-** XXX not actually called from the gnome-pilot source
-*/
-static gint
-compare_backup (GnomePilotConduitStandardAbs *conduit,
-		AddressbookLocalRecord *local,
-		PilotRecord *remote,
-		AddressbookConduitContext *ctxt)
-{
-	LOG ("entering compare_backup");
-
-	g_return_val_if_fail(local!=NULL,-1);
-	g_return_val_if_fail(remote!=NULL,-1);
-
-        return -1;
-}
-
-/*
-** used when copying from the pilot.
-**
-** delete all records in the local database.  this doesn't actually
-** remove the records, merely sets their status to DELETED.
-**
-** return value is < 0 on error, >= 0 on success.
-*/
-static gint
-delete_all (GnomePilotConduitStandardAbs *conduit,
-	    AddressbookConduitContext *ctxt)
-{
-	GList *it;
-
-	for (it=ctxt->cards; it; it = g_list_next (it)) {
-		gtk_object_set (GTK_OBJECT (it->data),
-				"pilot_status", E_CARD_PILOT_STATUS_DEL, NULL);
-	}
-
-        return 0;
-}
-
-#ifdef NEED_OAF_INIT_HACK
-static ORBit_MessageValidationResult
-accept_all_cookies (CORBA_unsigned_long request_id,
-		    CORBA_Principal *principal,
-		    CORBA_char *operation)
-{
-	/* allow ALL cookies */
-	return ORBIT_MESSAGE_ALLOW_ALL;
-}
-#endif
-
-GnomePilotConduit *
-conduit_get_gpilot_conduit (guint32 pilotId)
-{
-	GtkObject *retval;
-	AddressbookConduitCfg *cfg;
-	AddressbookConduitContext *ctxt;
-
-	printf ("in address's conduit_get_gpilot_conduit\n");
-
-#ifdef NEED_OAF_INIT_HACK
-#ifndef NO_WARNINGS
-#warning "need a better way to do this"
-#endif
-	/* we need to find wombat with oaf, so make sure oaf
-	   is initialized here.  once the desktop is converted
-	   to oaf and gpilotd is built with oaf, this can go away */
-	if (! oaf_is_initialized ())
-	{
-		char *argv[ 1 ] = {"hi"};
-		oaf_init (1, argv);
-
-		if (bonobo_init (CORBA_OBJECT_NIL,
-				 CORBA_OBJECT_NIL,
-				 CORBA_OBJECT_NIL) == FALSE)
-			g_error (_("Could not initialize Bonobo"));
-
-		ORBit_set_request_validation_handler (accept_all_cookies);
-	}
-#endif
-
-	retval = gnome_pilot_conduit_standard_abs_new ("AddressDB",
-						       0x61646472);
-	g_assert (retval != NULL);
-	gnome_pilot_conduit_construct(GNOME_PILOT_CONDUIT(retval),"AddressConduit");
-
-	conduit_load_configuration(&cfg,pilotId);
-	gtk_object_set_data (retval,"addressconduit_cfg",cfg);
-
-	conduit_new_context(&ctxt,cfg);
-	gtk_object_set_data(GTK_OBJECT(retval),"addressconduit_context",ctxt);
-
-	gtk_signal_connect (retval, "match_record", (GtkSignalFunc) match_record, ctxt);
-	gtk_signal_connect (retval, "free_match", (GtkSignalFunc) free_match, ctxt);
-#ifdef SUPPORT_ARCHIVING
-	gtk_signal_connect (retval, "archive_local", (GtkSignalFunc) archive_local, ctxt);
-	gtk_signal_connect (retval, "archive_remote", (GtkSignalFunc) archive_remote, ctxt);
-	gtk_signal_connect (retval, "set_archived", (GtkSignalFunc) set_archived, ctxt);
-	gtk_signal_connect (retval, "clear_status_archive_local", (GtkSignalFunc) clear_status_archive_local, ctxt);
-#endif
-	gtk_signal_connect (retval, "store_remote", (GtkSignalFunc) store_remote, ctxt);
-	gtk_signal_connect (retval, "iterate", (GtkSignalFunc) iterate, ctxt);
-	gtk_signal_connect (retval, "iterate_specific", (GtkSignalFunc) iterate_specific, ctxt);
-	gtk_signal_connect (retval, "purge", (GtkSignalFunc) purge, ctxt);
-	gtk_signal_connect (retval, "set_status", (GtkSignalFunc) set_status, ctxt);
-	gtk_signal_connect (retval, "set_pilot_id", (GtkSignalFunc) set_pilot_id, ctxt);
-	gtk_signal_connect (retval, "compare", (GtkSignalFunc) compare, ctxt);
-	gtk_signal_connect (retval, "compare_backup", (GtkSignalFunc) compare_backup, ctxt);
-	gtk_signal_connect (retval, "free_transmit", (GtkSignalFunc) free_transmit, ctxt);
-	gtk_signal_connect (retval, "delete_all", (GtkSignalFunc) delete_all, ctxt);
-	gtk_signal_connect (retval, "transmit", (GtkSignalFunc) transmit, ctxt);
-	gtk_signal_connect (retval, "pre_sync", (GtkSignalFunc) pre_sync, ctxt);
-
-	return GNOME_PILOT_CONDUIT (retval);
-}
-
-void
-conduit_destroy_gpilot_conduit (GnomePilotConduit *conduit)
-{ 
-        AddressbookConduitCfg *cc;
-	AddressbookConduitContext *ctxt;
-
-        cc = GET_CONDUITCFG(conduit);
-	ctxt = GET_CONDUITCONTEXT(conduit);
-
-	if (ctxt->ebook != NULL) {
-		gtk_object_unref (GTK_OBJECT (ctxt->ebook));
-	}
-
-        conduit_destroy_configuration (&cc);
-
-	conduit_destroy_context (&ctxt);
-
-	gtk_object_destroy (GTK_OBJECT (conduit));
-}
diff --git a/addressbook/conduit/address-conduit.h b/addressbook/conduit/address-conduit.h
deleted file mode 100644
index 9858504fd7..0000000000
--- a/addressbook/conduit/address-conduit.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-#ifndef __ADDRESS_CONDUIT_H__
-#define __ADDRESS_CONDUIT_H__
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "ebook/e-card.h"
-#include "ebook/e-card-simple.h"
-#include "ebook/e-book.h"
-#include "ebook/e-book-view.h"
-
-#ifdef USING_OAF
-#include 
-#else
-#include 
-#endif
-
-
-/* This is the local record structure for the GnomeCal conduit. */
-typedef struct _AddressbookLocalRecord AddressbookLocalRecord;
-struct _AddressbookLocalRecord {
-	/* The stuff from gnome-pilot-conduit-standard-abs.h
-	   Must be first in the structure, or instances of this
-	   structure cannot be used by gnome-pilot-conduit-standard-abs.
-	*/
-	LocalRecord local;
-	/* The corresponding Evolution addressbook object. */
-	ECard *ecard;
-        /* pilot-link address structure, used for implementing Transmit. */	
-	struct Address *address;
-};
-#define ADDRESSBOOK_LOCALRECORD(s) ((AddressbookLocalRecord*)(s))
-
-/* This is the configuration of the GnomeCal conduit. */
-typedef struct _AddressbookConduitCfg AddressbookConduitCfg;
-struct _AddressbookConduitCfg {
-	gboolean open_secret;
-	guint32 pilotId;
-	GnomePilotConduitSyncType  sync_type;   /* only used by capplet */
-};
-#define GET_CONDUITCFG(c) ((AddressbookConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"addressconduit_cfg"))
-
-/* This is the context for all the Addressbook conduit methods. */
-typedef struct _AddressbookConduitContext AddressbookConduitContext;
-struct _AddressbookConduitContext {
-	struct AddressAppInfo ai;
-	AddressbookConduitCfg *cfg;
-	EBook *ebook;
-	// ECardCursor *cursor;
-	GList *cards;
-	/*	CalClient *client;*/
-	CORBA_Environment ev;
-	CORBA_ORB orb;
-	gboolean address_load_tried;
-	gboolean address_load_success;
-
-	char *address_file;
-};
-#define GET_CONDUITCONTEXT(c) ((AddressbookConduitContext*)gtk_object_get_data(GTK_OBJECT(c),"addressconduit_context"))
-
-
-/* Given a GCalConduitCfg*, allocates the structure and 
-   loads the configuration data for the given pilot.
-   this is defined in the header file because it is used by
-   both address-conduit and address-conduit-control-applet,
-   and we don't want to export any symbols we don't have to. */
-static void 
-conduit_load_configuration(AddressbookConduitCfg **c,
-			   guint32 pilotId) 
-{
-	gchar prefix[256];
-	g_snprintf(prefix,255,"/gnome-pilot.d/address-conduit/Pilot_%u/",pilotId);
-	
-	*c = g_new0(AddressbookConduitCfg,1);
-	g_assert(*c != NULL);
-	gnome_config_push_prefix(prefix);
-	(*c)->open_secret = gnome_config_get_bool("open_secret=FALSE");
-	(*c)->sync_type = GnomePilotConduitSyncTypeCustom; /* set in capplets main */
-	gnome_config_pop_prefix();
-	
-	(*c)->pilotId = pilotId;
-}
-
-
-#endif __ADDRESS_CONDUIT_H__ 
diff --git a/addressbook/conduit/address.conduit.in b/addressbook/conduit/address.conduit.in
deleted file mode 100644
index 3a0416fac8..0000000000
--- a/addressbook/conduit/address.conduit.in
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/addressbook/contact-editor/.cvsignore b/addressbook/contact-editor/.cvsignore
deleted file mode 100644
index 6fd0b5075c..0000000000
--- a/addressbook/contact-editor/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-*.lo
-*.la
-contact-editor-test
diff --git a/addressbook/contact-editor/Makefile.am b/addressbook/contact-editor/Makefile.am
deleted file mode 100644
index f51a0109ac..0000000000
--- a/addressbook/contact-editor/Makefile.am
+++ /dev/null
@@ -1,65 +0,0 @@
-CPPFLAGS =					\
-	-DEVOLUTION_GLADEDIR=\""$(gladedir)"\"	\
-	-DDATADIR=\""$(datadir)"\"		\
-	-DEVOLUTIONDIR=\""$(evolutiondir)"\"
-
-INCLUDES =					\
-	$(BONOBO_GNOME_CFLAGS)			\
-	-I$(top_srcdir)				\
-	-I$(top_srcdir)/addressbook/		\
-	-I$(top_srcdir)/addressbook/backend	\
-	-I$(top_srcdir)/widgets/e-table		\
-	-DG_LOG_DOMAIN=\"contact-editor\"
-
-noinst_LIBRARIES =				\
-	libecontacteditor.a
-
-libecontacteditor_a_SOURCES = 			\
-	e-contact-editor-categories.c		\
-	e-contact-editor-categories.h		\
-	e-contact-editor-fullname.c		\
-	e-contact-editor-fullname.h		\
-	e-contact-editor.c			\
-	e-contact-editor.h			\
-	e-contact-save-as.c			\
-	e-contact-save-as.h
-
-noinst_PROGRAMS =		\
-	contact-editor-test
-
-contact_editor_test_SOURCES = 	\
-	test-editor.c
-
-contact_editor_test_LDADD =					\
-	libecontacteditor.a					\
-	$(top_builddir)/e-util/libeutil.la			\
-	$(top_builddir)/addressbook/printing/libecontactprint.a	\
-	$(top_builddir)/addressbook/backend/ebook/libebook.la	\
-	$(top_builddir)/addressbook/ename/libename.la		\
-	$(top_builddir)/libversit/libversit.la			\
-	$(GNOMEGNORBA_LIBS)					\
-	$(BONOBO_GNOME_LIBS)				\
-	$(top_builddir)/widgets/e-table/libetable.a		\
-	$(top_builddir)/widgets/misc/libemiscwidgets.a \
-	$(top_builddir)/e-util/libeutil.la			\
-	$(top_builddir)/widgets/e-text/libetext.a		\
-	$(EXTRA_GNOME_LIBS)
-
-evolutiondir = $(datadir)/evolution
-
-evolution_DATA = arrow.png
-
-gladedir   = $(datadir)/evolution/glade
-
-glade_DATA = 				\
-	contact-editor.glade		\
-	fullname.glade			\
-	categories.glade		\
-	e-contact-editor-confirm-delete.glade
-
-EXTRA_DIST = $(evolution_DATA)		\
-	$(glade_DATA)			\
-	e-contact-editor-strings.h	\
-	fullname-strings.h		\
-	categories-strings.h		\
-	e-contact-editor-confirm-delete.glade.h
diff --git a/addressbook/contact-editor/arrow.png b/addressbook/contact-editor/arrow.png
deleted file mode 100644
index b102356c78..0000000000
Binary files a/addressbook/contact-editor/arrow.png and /dev/null differ
diff --git a/addressbook/contact-editor/briefcase.png b/addressbook/contact-editor/briefcase.png
deleted file mode 100644
index dd59b8fd39..0000000000
Binary files a/addressbook/contact-editor/briefcase.png and /dev/null differ
diff --git a/addressbook/contact-editor/categories-strings.h b/addressbook/contact-editor/categories-strings.h
deleted file mode 100644
index 813018a00e..0000000000
--- a/addressbook/contact-editor/categories-strings.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("categories");
-gchar *s = N_("Item(s) belong to these categories:");
-gchar *s = N_("Available Categories:");
diff --git a/addressbook/contact-editor/categories.glade b/addressbook/contact-editor/categories.glade
deleted file mode 100644
index bf78008940..0000000000
--- a/addressbook/contact-editor/categories.glade
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
-
-
-  categories
-  categories
-  
-  src
-  pixmaps
-  C
-  True
-  False
-  False
-  False
-  False
-  False
-  False
-  interface.c
-  interface.h
-  callbacks.c
-  callbacks.h
-  support.c
-  support.h
-  True
-  categories-strings.h
-
-
-
-  GnomeDialog
-  categories
-  True
-  False
-  categories
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  True
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    dialog-vbox1
-    True
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkTable
-      table-categories
-      True
-      4
-      1
-      False
-      0
-      0
-      
-	0
-	True
-	True
-      
-
-      
-	GtkAccelLabel
-	accellabel1
-	True
-	
-	GTK_JUSTIFY_LEFT
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  0
-	  1
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkAccelLabel
-	accellabel2
-	True
-	
-	GTK_JUSTIFY_LEFT
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  2
-	  3
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkEntry
-	entry-categories
-	True
-	True
-	True
-	True
-	0
-	
-	
-	  0
-	  1
-	  1
-	  2
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      dialog-action_area1
-      True
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button1
-	True
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	button3
-	True
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-  
-
-
-
diff --git a/addressbook/contact-editor/contact-editor.glade b/addressbook/contact-editor/contact-editor.glade
deleted file mode 100644
index 7c328a72ce..0000000000
--- a/addressbook/contact-editor/contact-editor.glade
+++ /dev/null
@@ -1,2332 +0,0 @@
-
-
-
-
-  Contact-editor
-  contact-editor
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  True
-  False
-  False
-  False
-  False
-  True
-  e-contact-editor-strings.h
-
-
-
-  GnomeDialog
-  dialog2
-  2
-  False
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  False
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    dialog-vbox2
-    False
-    4
-    
-      4
-      True
-      True
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      dialog-action_area2
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button28
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	button29
-	True
-	True
-	GNOME_STOCK_BUTTON_APPLY
-      
-
-      
-	GtkButton
-	button30
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-
-    
-      GtkTable
-      table2
-      2
-      2
-      False
-      0
-      2
-      
-	0
-	True
-	True
-      
-
-      
-	GtkEntry
-	entry2
-	True
-	True
-	True
-	0
-	
-	
-	  0
-	  2
-	  1
-	  2
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkVBox
-	vbox1
-	False
-	2
-	
-	  1
-	  2
-	  0
-	  1
-	  0
-	  0
-	  False
-	  True
-	  False
-	  False
-	  True
-	  True
-	
-
-	
-	  GtkButton
-	  button31
-	  2
-	  True
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button32
-	  2
-	  True
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-      
-
-      
-	GtkScrolledWindow
-	scrolledwindow1
-	200
-	GTK_POLICY_ALWAYS
-	GTK_POLICY_ALWAYS
-	GTK_UPDATE_CONTINUOUS
-	GTK_UPDATE_CONTINUOUS
-	
-	  0
-	  1
-	  0
-	  1
-	  0
-	  0
-	  True
-	  True
-	  False
-	  False
-	  True
-	  True
-	
-
-	
-	  GtkCList
-	  clist1
-	  True
-	  1
-	  80
-	  GTK_SELECTION_SINGLE
-	  True
-	  GTK_SHADOW_NONE
-
-	  
-	    GtkLabel
-	    CList:title
-	    label20
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0.5
-	    0.5
-	    0
-	    0
-	  
-	
-      
-    
-  
-
-
-
-  GnomeDialog
-  dialog-add-phone
-  False
-  New phone type
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  False
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    vbox2
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      hbuttonbox1
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button43
-	True
-	True
-	True
-	
-	GNOME_STOCK_PIXMAP_ADD
-      
-
-      
-	GtkButton
-	button44
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-
-    
-      GtkFrame
-      frame-add-phone
-      4
-      
-      0
-      GTK_SHADOW_ETCHED_IN
-      
-	0
-	True
-	True
-      
-
-      
-	GtkAlignment
-	alignment9
-	9
-	0.5
-	0.5
-	1
-	1
-
-	
-	  GtkEntry
-	  entry-add-phone
-	  True
-	  True
-	  True
-	  True
-	  0
-	  
-	
-      
-    
-  
-
-
-
-  GnomeApp
-  contact editor
-  Contact Editor
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  True
-  False
-  True
-
-  
-    GnomeDock
-    GnomeApp:dock
-    dock1
-    True
-    
-      0
-      True
-      True
-    
-
-    
-      GtkNotebook
-      GnomeDock:contents
-      notebook-contact-editor
-      True
-      True
-      True
-      GTK_POS_TOP
-      False
-      2
-      2
-      False
-
-      
-	GtkTable
-	table-contact-editor-general
-	7
-	14
-	8
-	False
-	4
-	4
-
-	
-	  GtkEntry
-	  entry-phone1
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    7
-	    8
-	    0
-	    1
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-phone2
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    7
-	    8
-	    1
-	    2
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-phone3
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    7
-	    8
-	    2
-	    3
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-phone4
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    7
-	    8
-	    3
-	    4
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkText
-	  text-address
-	  1
-	  1
-	  True
-	  True
-	  
-	  
-	    7
-	    8
-	    5
-	    9
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkButton
-	  button-fullname
-	  True
-	  
-	  
-	    1
-	    3
-	    0
-	    1
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkAccelLabel
-	  accellabel-fileas
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  
-	    1
-	    3
-	    3
-	    4
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkAccelLabel
-	  accellabel-web
-	  
-	  GTK_JUSTIFY_LEFT
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  
-	    1
-	    3
-	    8
-	    9
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment3
-	  1
-	  0.5
-	  0
-	  1
-	  
-	    2
-	    3
-	    5
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-email1
-
-	    
-	      Placeholder
-	    
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment5
-	  1
-	  0.5
-	  0
-	  0
-	  
-	    6
-	    7
-	    3
-	    4
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-phone4
-
-	    
-	      Placeholder
-	    
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment7
-	  1
-	  0.5
-	  0
-	  0
-	  
-	    6
-	    7
-	    1
-	    2
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-phone2
-
-	    
-	      Placeholder
-	    
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment8
-	  1
-	  0.5
-	  0
-	  0
-	  
-	    6
-	    7
-	    0
-	    1
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-phone1
-
-	    
-	      Placeholder
-	    
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator4
-	  
-	    4
-	    8
-	    4
-	    5
-	    0
-	    2
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment6
-	  1
-	  0.5
-	  0
-	  0
-	  
-	    6
-	    7
-	    2
-	    3
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-phone3
-
-	    
-	      Placeholder
-	    
-	  
-	
-
-	
-	  GtkEntry
-	  entry-fullname
-	  True
-	  True
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    3
-	    4
-	    0
-	    1
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-jobtitle
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    3
-	    4
-	    1
-	    2
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-company
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    3
-	    4
-	    2
-	    3
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-email1
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    3
-	    4
-	    5
-	    6
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-web
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    3
-	    4
-	    8
-	    9
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator5
-	  
-	    0
-	    4
-	    4
-	    5
-	    0
-	    2
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkCombo
-	  combo-file-as
-	  False
-	  True
-	  True
-	  True
-	  False
-	  
-	  
-	    3
-	    4
-	    3
-	    4
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-
-	  
-	    GtkEntry
-	    GtkCombo:entry
-	    entry-file-as
-	    True
-	    True
-	    True
-	    0
-	    
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator6
-	  
-	    0
-	    4
-	    7
-	    8
-	    0
-	    2
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment10
-	  0.5
-	  0
-	  1
-	  1
-	  
-	    3
-	    4
-	    6
-	    7
-	    0
-	    0
-	    True
-	    False
-	    True
-	    True
-	    True
-	    True
-	  
-
-	  
-	    GtkCheckButton
-	    checkbutton-htmlmail
-	    False
-	    
-	    False
-	    True
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment4
-	  1
-	  0.5
-	  0
-	  0
-	  
-	    6
-	    7
-	    5
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-address
-
-	    
-	      Placeholder
-	    
-	  
-	
-
-	
-	  GtkLabel
-	  address-label
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  text-address
-	  
-	    5
-	    7
-	    6
-	    7
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox1
-	  
-	    5
-	    6
-	    0
-	    1
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label-phone1
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox2
-	  
-	    5
-	    6
-	    1
-	    2
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label-phone2
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	    entry-phone2
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox3
-	  
-	    5
-	    6
-	    2
-	    3
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label-phone3
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	    entry-phone3
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox4
-	  
-	    5
-	    6
-	    3
-	    4
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label-phone4
-	    
-	    GTK_JUSTIFY_LEFT
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	    entry-phone4
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox5
-	  
-	    1
-	    2
-	    5
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label-email1
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	    entry-email1
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox-business
-	  
-	    5
-	    6
-	    5
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label-address
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	    text-address
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment2
-	  0
-	  0
-	  0
-	  0
-	  
-	    7
-	    8
-	    9
-	    10
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkCheckButton
-	    checkbutton-mailingaddress
-	    False
-	    
-	    False
-	    True
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator9
-	  
-	    0
-	    4
-	    11
-	    12
-	    0
-	    2
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator10
-	  
-	    4
-	    8
-	    11
-	    12
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment-contacts
-	  0.5
-	  0.5
-	  1
-	  0
-	  
-	    1
-	    3
-	    12
-	    13
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-contacts
-	    True
-	    
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment15
-	  0.5
-	  0.5
-	  1
-	  0
-	  
-	    7
-	    8
-	    12
-	    13
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkEntry
-	    entry-categories
-	    True
-	    True
-	    True
-	    0
-	    
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment14
-	  0.5
-	  0.5
-	  1
-	  0
-	  
-	    3
-	    4
-	    12
-	    13
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkEntry
-	    entry-contacts
-	    True
-	    True
-	    True
-	    0
-	    
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment16
-	  0.5
-	  0.5
-	  1
-	  0
-	  
-	    5
-	    7
-	    12
-	    13
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkButton
-	    button-categories
-	    True
-	    
-	  
-	
-
-	
-	  GtkEventBox
-	  eventbox7
-	  
-	    1
-	    3
-	    1
-	    2
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label34
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	    entry-jobtitle
-	  
-	
-
-	
-	  Custom
-	  custom1
-	  e_create_image_widget
-	  malehead.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:19:47 GMT
-	  
-	    0
-	    1
-	    0
-	    4
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom2
-	  e_create_image_widget
-	  cellphone.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:20:02 GMT
-	  
-	    4
-	    5
-	    0
-	    4
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom3
-	  e_create_image_widget
-	  envelope.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:19:51 GMT
-	  
-	    0
-	    1
-	    5
-	    7
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom4
-	  e_create_image_widget
-	  house.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:20:06 GMT
-	  
-	    4
-	    5
-	    5
-	    10
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom5
-	  e_create_image_widget
-	  evolution-contacts.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:19:59 GMT
-	  
-	    0
-	    1
-	    12
-	    14
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom6
-	  e_create_image_widget
-	  briefcase.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:20:09 GMT
-	  
-	    4
-	    5
-	    12
-	    14
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom10
-	  e_create_image_widget
-	  globe.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:19:56 GMT
-	  
-	    0
-	    1
-	    8
-	    10
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label35
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-company
-	  
-	    1
-	    3
-	    2
-	    3
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-      
-
-      
-	GtkLabel
-	Notebook:tab
-	label15
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0.5
-	0.5
-	0
-	0
-      
-
-      
-	GtkTable
-	table-contact-editor-details
-	7
-	9
-	6
-	False
-	4
-	4
-
-	
-	  GtkLabel
-	  label21
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-department
-	  
-	    1
-	    2
-	    0
-	    1
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label22
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-office
-	  
-	    1
-	    2
-	    1
-	    2
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label23
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-profession
-	  
-	    1
-	    2
-	    2
-	    3
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label24
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-nickname
-	  
-	    1
-	    2
-	    4
-	    5
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label25
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-spouse
-	  
-	    1
-	    2
-	    5
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label31
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  
-	    3
-	    4
-	    4
-	    5
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label30
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-assistant
-	  
-	    3
-	    4
-	    1
-	    2
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label29
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  entry-manager
-	  
-	    3
-	    4
-	    0
-	    1
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label32
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  
-	    3
-	    4
-	    5
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkEntry
-	  entry-spouse
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    2
-	    3
-	    5
-	    6
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-department
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    2
-	    3
-	    0
-	    1
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-office
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    2
-	    3
-	    1
-	    2
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-profession
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    2
-	    3
-	    2
-	    3
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-nickname
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    2
-	    3
-	    4
-	    5
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GnomeDateEdit
-	  dateedit-anniversary
-	  False
-	  False
-	  False
-	  7
-	  19
-	  
-	    4
-	    6
-	    5
-	    6
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GnomeDateEdit
-	  dateedit-birthday
-	  False
-	  False
-	  False
-	  7
-	  19
-	  
-	    4
-	    6
-	    4
-	    5
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-assistant
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    4
-	    6
-	    1
-	    2
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  entry-manager
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    4
-	    6
-	    0
-	    1
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator7
-	  
-	    0
-	    6
-	    3
-	    4
-	    0
-	    2
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkLabel
-	  label33
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0
-	  0.5
-	  0
-	  0
-	  
-	    1
-	    2
-	    7
-	    8
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkHSeparator
-	  hseparator8
-	  
-	    0
-	    6
-	    6
-	    7
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom7
-	  e_create_image_widget
-	  briefcase.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:20:13 GMT
-	  
-	    0
-	    1
-	    0
-	    2
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  Custom
-	  custom8
-	  e_create_image_widget
-	  malehead.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:20:16 GMT
-	  
-	    0
-	    1
-	    4
-	    6
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-
-	
-	  GtkScrolledWindow
-	  scrolledwindow2
-	  GTK_POLICY_AUTOMATIC
-	  GTK_POLICY_AUTOMATIC
-	  GTK_UPDATE_CONTINUOUS
-	  GTK_UPDATE_CONTINUOUS
-	  
-	    1
-	    6
-	    8
-	    9
-	    0
-	    0
-	    True
-	    True
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkText
-	    text-comments
-	    True
-	    True
-	    
-	  
-	
-
-	
-	  Custom
-	  custom9
-	  e_create_image_widget
-	  globe.png
-	  
-	  0
-	  0
-	  Thu, 18 May 2000 12:20:19 GMT
-	  
-	    0
-	    1
-	    7
-	    9
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-	
-      
-
-      
-	GtkLabel
-	Notebook:tab
-	label16
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0.5
-	0.5
-	0
-	0
-      
-    
-  
-
-  
-    GnomeAppBar
-    GnomeApp:appbar
-    appbar1
-    True
-    True
-    
-      0
-      True
-      True
-    
-  
-
-
-
diff --git a/addressbook/contact-editor/e-contact-editor-categories.c b/addressbook/contact-editor/e-contact-editor-categories.c
deleted file mode 100644
index 9251a86948..0000000000
--- a/addressbook/contact-editor/e-contact-editor-categories.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * e-contact-editor-categories.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-static void e_contact_editor_categories_init		(EContactEditorCategories		 *card);
-static void e_contact_editor_categories_class_init	(EContactEditorCategoriesClass	 *klass);
-static void e_contact_editor_categories_set_arg         (GtkObject *o, GtkArg *arg, guint arg_id);
-static void e_contact_editor_categories_get_arg         (GtkObject *object, GtkArg *arg, guint arg_id);
-static void e_contact_editor_categories_destroy         (GtkObject *object);
-static int e_contact_editor_categories_col_count (ETableModel *etc, gpointer data);
-static int e_contact_editor_categories_row_count (ETableModel *etc, gpointer data);
-static void *e_contact_editor_categories_value_at (ETableModel *etc, int col, int row, gpointer data);
-static void e_contact_editor_categories_set_value_at (ETableModel *etc, int col, int row, const void *val, gpointer data);
-static gboolean e_contact_editor_categories_is_cell_editable (ETableModel *etc, int col, int row, gpointer data);
-static void *e_contact_editor_categories_duplicate_value (ETableModel *etc, int col, const void *value, gpointer data);
-static void e_contact_editor_categories_free_value (ETableModel *etc, int col, void *value, gpointer data);
-static void *e_contact_editor_categories_initialize_value (ETableModel *etc, int col, gpointer data);
-static gboolean e_contact_editor_categories_value_is_empty (ETableModel *etc, int col, const void *value, gpointer data);
-static char * e_contact_editor_categories_value_to_string (ETableModel *etc, int col, const void *value, gpointer data);
-
-static GnomeDialogClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
-	ARG_0,
-	ARG_CATEGORIES
-};
-
-GtkType
-e_contact_editor_categories_get_type (void)
-{
-	static GtkType contact_editor_categories_type = 0;
-
-	if (!contact_editor_categories_type)
-		{
-			static const GtkTypeInfo contact_editor_categories_info =
-			{
-				"EContactEditorCategories",
-				sizeof (EContactEditorCategories),
-				sizeof (EContactEditorCategoriesClass),
-				(GtkClassInitFunc) e_contact_editor_categories_class_init,
-				(GtkObjectInitFunc) e_contact_editor_categories_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-				(GtkClassInitFunc) NULL,
-			};
-
-			contact_editor_categories_type = gtk_type_unique (gnome_dialog_get_type (), &contact_editor_categories_info);
-		}
-
-	return contact_editor_categories_type;
-}
-
-static void
-e_contact_editor_categories_class_init (EContactEditorCategoriesClass *klass)
-{
-	GtkObjectClass *object_class;
-	GnomeDialogClass *dialog_class;
-
-	object_class = (GtkObjectClass*) klass;
-	dialog_class = (GnomeDialogClass *) klass;
-
-	parent_class = gtk_type_class (gnome_dialog_get_type ());
-
-	gtk_object_add_arg_type ("EContactEditorCategories::categories", GTK_TYPE_STRING,
-				 GTK_ARG_READWRITE, ARG_CATEGORIES);
- 
-	object_class->set_arg = e_contact_editor_categories_set_arg;
-	object_class->get_arg = e_contact_editor_categories_get_arg;
-	object_class->destroy = e_contact_editor_categories_destroy;
-}
-
-gchar *builtin_categories[] = {
-	"Business",
-	"Competition",
-	"Favorites",
-	"Gifts",
-	"Goals/Objectives",
-	"Holiday",
-	"Holiday Cards",
-	"Hot Contacts",
-	"Ideas",
-	"International",
-	"Key Customer",
-	"Miscellaneous",
-	"Personal",
-	"Phone Calls",
-	"Status",
-	"Strategies",
-	"Suppliers",
-	"Time & Expenses",
-	"VIP",
-	"Waiting",
-};
-
-#define BUILTIN_CATEGORY_COUNT (sizeof(builtin_categories) / sizeof(builtin_categories[0]))
-
-static void
-add_list_unique(EContactEditorCategories *categories, char *string)
-{
-	int k;
-	char *temp = e_strdup_strip(string);
-	char **list = categories->category_list;
-
-	if (!*temp) {
-		g_free(temp);
-		return;
-	}
-	for (k = 0; k < categories->list_length; k++) {
-		if (!strcmp(list[k], temp)) {
-			categories->selected_list[k] = TRUE;
-			break;
-		}
-	}
-	if (k == categories->list_length) {
-		categories->selected_list[categories->list_length] = TRUE;
-		list[categories->list_length++] = temp;
-	} else {
-		g_free(temp);
-	}
-}
-
-static void
-do_parse_categories(EContactEditorCategories *categories)
-{
-	char *str = categories->categories;
-	int length = strlen(str);
-	char *copy = g_new(char, length + 1);
-	int i, j;
-	char **list;
-	int count = 1;
-
-	e_table_model_pre_change(categories->model);
-
-	for (i = 0; i < categories->list_length; i++)
-		g_free(categories->category_list[i]);
-	g_free(categories->category_list);
-	g_free(categories->selected_list);
-
-	for (i = 0; str[i]; i++) {
-		switch (str[i]) {
-		case '\\':
-			i++;
-			if (!str[i])
-				i--;
-			break;
-		case ',':
-			count ++;
-			break;
-		}
-	}
-	list = g_new(char *, count + 1 + BUILTIN_CATEGORY_COUNT);
-	categories->category_list = list;
-
-	categories->selected_list = g_new(gboolean, count + 1 + BUILTIN_CATEGORY_COUNT);
-
-	for (count = 0; count < BUILTIN_CATEGORY_COUNT; count++) {
-		list[count] = g_strdup(builtin_categories[count]);
-		categories->selected_list[count] = 0;
-	}
-
-	categories->list_length = count;
-
-	for (i = 0, j = 0; str[i]; i++, j++) {
-		switch (str[i]) {
-		case '\\':
-			i++;
-			if (str[i]) {
-				copy[j] = str[i];
-			} else
-				i--;
-			break;
-		case ',':
-			copy[j] = 0;
-			add_list_unique(categories, copy);
-			j = -1;
-			break;
-		default:
-			copy[j] = str[i];
-			break;
-		}
-	}
-	copy[j] = 0;
-	add_list_unique(categories, copy);
-	g_free(copy);
-	e_table_model_changed(categories->model);
-}
-
-static void
-e_contact_editor_categories_entry_change (GtkWidget *entry, 
-					  EContactEditorCategories *categories)
-{
-	g_free(categories->categories);
-	categories->categories = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
-	do_parse_categories(categories);
-}
-
-
-#define INITIAL_SPEC "    	       \
-	                  			       \
-		 0      			       \
-		 1      			       \
-	                 			       \
-	      \
-"
-
-static void
-e_contact_editor_categories_init (EContactEditorCategories *categories)
-{
-	GladeXML *gui;
-	GtkWidget *table;
-	ECell *cell_left_just;
-	ECell *cell_checkbox;
-	ETableHeader *header;
-	ETableCol *col;
-	GtkWidget *e_table;
-
-	categories->list_length = 0;
-	categories->category_list = NULL;
-	categories->selected_list = NULL;
-	categories->categories = NULL;
-
-	gnome_dialog_append_button ( GNOME_DIALOG(categories),
-				     GNOME_STOCK_BUTTON_OK);
-	
-	gnome_dialog_append_button ( GNOME_DIALOG(categories),
-				     GNOME_STOCK_BUTTON_CANCEL);
-
-	gtk_window_set_policy(GTK_WINDOW(categories), FALSE, TRUE, FALSE);
-
-	gui = glade_xml_new (EVOLUTION_GLADEDIR "/categories.glade", NULL);
-	categories->gui = gui;
-
-	table = glade_xml_get_widget(gui, "table-categories");
-	gtk_widget_ref(table);
-	gtk_container_remove(GTK_CONTAINER(table->parent), table);
-	gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (categories)->vbox), table, TRUE, TRUE, 0);
-	gtk_widget_unref(table);
-
-	categories->entry = glade_xml_get_widget(gui, "entry-categories");
-	
-	gtk_signal_connect(GTK_OBJECT(categories->entry), "changed",
-			   GTK_SIGNAL_FUNC(e_contact_editor_categories_entry_change), categories);
-
-	categories->model = e_table_simple_new(e_contact_editor_categories_col_count, 
-					       e_contact_editor_categories_row_count,
-					       e_contact_editor_categories_value_at,
-					       e_contact_editor_categories_set_value_at,
-					       e_contact_editor_categories_is_cell_editable,
-					       e_contact_editor_categories_duplicate_value,
-					       e_contact_editor_categories_free_value,
-					       e_contact_editor_categories_initialize_value,
-					       e_contact_editor_categories_value_is_empty,
-					       e_contact_editor_categories_value_to_string,
-					       categories);
-
-	header = e_table_header_new();
-
-	cell_checkbox = e_cell_checkbox_new();
-	col = e_table_col_new (0, "",
-			       0, 20, cell_checkbox,
-			       g_int_compare, TRUE);
-	e_table_header_add_column (header, col, 0);
-
-	cell_left_just = e_cell_text_new (categories->model, NULL, GTK_JUSTIFY_LEFT);
-	col = e_table_col_new (1, "Category",
-			       1.0, 20, cell_left_just,
-			       g_str_compare, TRUE);
-	e_table_header_add_column (header, col, 1);
-
-	e_table = e_table_scrolled_new (header, categories->model, INITIAL_SPEC);
-
-	gtk_object_sink(GTK_OBJECT(categories->model));
-	
-	gtk_widget_show(e_table);
-
-	gtk_table_attach_defaults(GTK_TABLE(table),
-				  e_table, 
-				  0, 1,
-				  3, 4);
-}
-
-void
-e_contact_editor_categories_destroy (GtkObject *object)
-{
-	EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(object);
-	int i;
-
-	if (categories->gui)
-		gtk_object_unref(GTK_OBJECT(categories->gui));
-
-	g_free(categories->categories);
-	for (i = 0; i < categories->list_length; i++)
-		g_free(categories->category_list[i]);
-	g_free(categories->category_list);
-	g_free(categories->selected_list);
-}
-
-GtkWidget*
-e_contact_editor_categories_new (char *categories)
-{
-	GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_editor_categories_get_type ()));
-	gtk_object_set (GTK_OBJECT(widget),
-			"categories", categories,
-			NULL);
-	return widget;
-}
-
-static void
-e_contact_editor_categories_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
-{
-	EContactEditorCategories *e_contact_editor_categories;
-
-	e_contact_editor_categories = E_CONTACT_EDITOR_CATEGORIES (o);
-	
-	switch (arg_id){
-	case ARG_CATEGORIES:
-		gtk_entry_set_text(GTK_ENTRY(e_contact_editor_categories->entry), GTK_VALUE_STRING (*arg));
-		break;
-	}
-}
-
-static void
-e_contact_editor_categories_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	EContactEditorCategories *e_contact_editor_categories;
-
-	e_contact_editor_categories = E_CONTACT_EDITOR_CATEGORIES (object);
-
-	switch (arg_id) {
-	case ARG_CATEGORIES:
-		GTK_VALUE_STRING (*arg) = g_strdup(e_contact_editor_categories->categories);
-		break;
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-e_contact_editor_categories_col_count (ETableModel *etc, gpointer data)
-{
-	return 2;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-e_contact_editor_categories_row_count (ETableModel *etc, gpointer data)
-{
-	EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(data);
-	return categories->list_length;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-e_contact_editor_categories_value_at (ETableModel *etc, int col, int row, gpointer data)
-{
-	EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(data);
-	if (col == 0)
-		return (void *) categories->selected_list[row];
-	else
-		return categories->category_list[row];
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-e_contact_editor_categories_set_value_at (ETableModel *etc, int col, int row, const void *val, gpointer data)
-{
-	EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(data);
-	if ( col == 0 ) {
-		char **strs;
-		int i, j;
-		char *string;
-		categories->selected_list[row] = (gboolean) val;
-		strs = g_new(char *, categories->list_length + 1);
-		for (i = 0, j = 0; i < categories->list_length; i++) {
-			if (categories->selected_list[i])
-				strs[j++] = categories->category_list[i];
-		}
-		strs[j] = 0;
-		string = g_strjoinv(", ", strs);
-		gtk_entry_set_text(GTK_ENTRY(categories->entry), string);
-		g_free(string);
-		g_free(strs);
-	}
-	if ( col == 1 )
-		return;
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-e_contact_editor_categories_is_cell_editable (ETableModel *etc, int col, int row, gpointer data)
-{
-	return col == 0;
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-e_contact_editor_categories_duplicate_value (ETableModel *etc, int col, const void *value, gpointer data)
-{
-	if (col == 0)
-		return (void *)value;
-	else
-		return g_strdup(value);
-}
-
-/* This function frees the value passed to it. */
-static void
-e_contact_editor_categories_free_value (ETableModel *etc, int col, void *value, gpointer data)
-{
-	if (col == 0)
-		return;
-	else
-		g_free(value);
-}
-
-static void *
-e_contact_editor_categories_initialize_value (ETableModel *etc, int col, gpointer data)
-{
-	if (col == 0)
-		return NULL;
-	else
-		return g_strdup("");
-}
-
-static gboolean
-e_contact_editor_categories_value_is_empty (ETableModel *etc, int col, const void *value, gpointer data)
-{
-	if (col == 0)
-		return value == NULL;
-	else
-		return !(value && *(char *)value);
-}
-
-static char *
-e_contact_editor_categories_value_to_string (ETableModel *etc, int col, const void *value, gpointer data)
-{
-	if (col == 0)
-		return g_strdup_printf("%d", (int) value);
-	else
-		return g_strdup(value);
-}
diff --git a/addressbook/contact-editor/e-contact-editor-categories.h b/addressbook/contact-editor/e-contact-editor-categories.h
deleted file mode 100644
index 529ef71b68..0000000000
--- a/addressbook/contact-editor/e-contact-editor-categories.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-contact-editor-categories.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef __E_CONTACT_EDITOR_CATEGORIES_H__
-#define __E_CONTACT_EDITOR_CATEGORIES_H__
-
-#include 
-#include 
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* EContactEditorCategories - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name		type		read/write	description
- * --------------------------------------------------------------------------------
- * name         ECardName *     RW              The card currently being edited. Returns a copy.
- */
-
-#define E_CONTACT_EDITOR_CATEGORIES_TYPE			(e_contact_editor_categories_get_type ())
-#define E_CONTACT_EDITOR_CATEGORIES(obj)			(GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_CATEGORIES_TYPE, EContactEditorCategories))
-#define E_CONTACT_EDITOR_CATEGORIES_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_CATEGORIES_TYPE, EContactEditorCategoriesClass))
-#define E_IS_CONTACT_EDITOR_CATEGORIES(obj)		(GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_CATEGORIES_TYPE))
-#define E_IS_CONTACT_EDITOR_CATEGORIES_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_CATEGORIES_TYPE))
-
-
-typedef struct _EContactEditorCategories       EContactEditorCategories;
-typedef struct _EContactEditorCategoriesClass  EContactEditorCategoriesClass;
-
-struct _EContactEditorCategories
-{
-	GnomeDialog parent;
-	
-	/* item specific fields */
-	char *categories;
-	GtkWidget *entry;
-	ETableModel *model;
-
-	int list_length;
-	char **category_list;
-	gboolean *selected_list;
-
-	GladeXML *gui;
-};
-
-struct _EContactEditorCategoriesClass
-{
-	GnomeDialogClass parent_class;
-};
-
-
-GtkWidget *e_contact_editor_categories_new(char *categories);
-GtkType    e_contact_editor_categories_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CONTACT_EDITOR_CATEGORIES_H__ */
diff --git a/addressbook/contact-editor/e-contact-editor-confirm-delete.glade b/addressbook/contact-editor/e-contact-editor-confirm-delete.glade
deleted file mode 100644
index 7f52321021..0000000000
--- a/addressbook/contact-editor/e-contact-editor-confirm-delete.glade
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-  e-contact-editor-confirm-delete
-  e-contact-editor-confirm-delete
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  True
-  False
-  False
-  False
-  True
-  True
-  e-contact-editor-confirm-delete.glade.h
-
-
-
-  GnomeMessageBox
-  confirm-dialog
-  GNOME_MESSAGE_BOX_QUESTION
-  Are you sure you want
-to delete this contact?
-  Delete Contact?
-  GTK_WIN_POS_NONE
-  False
-  False
-  False
-  False
-  True
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    dialog-vbox1
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      dialog-action_area1
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button1
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	button2
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-  
-
-
-
diff --git a/addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h b/addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h
deleted file mode 100644
index 7168db0a5c..0000000000
--- a/addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("Are you sure you want\n"
-              "to delete this contact?");
-gchar *s = N_("Delete Contact?");
diff --git a/addressbook/contact-editor/e-contact-editor-fullname.c b/addressbook/contact-editor/e-contact-editor-fullname.c
deleted file mode 100644
index b2e598fdde..0000000000
--- a/addressbook/contact-editor/e-contact-editor-fullname.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * e-contact-editor-fullname.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-
-static void e_contact_editor_fullname_init		(EContactEditorFullname		 *card);
-static void e_contact_editor_fullname_class_init	(EContactEditorFullnameClass	 *klass);
-static void e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
-static void e_contact_editor_fullname_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-static void e_contact_editor_fullname_destroy (GtkObject *object);
-
-static void fill_in_info(EContactEditorFullname *editor);
-static void extract_info(EContactEditorFullname *editor);
-
-static GnomeDialogClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
-	ARG_0,
-	ARG_NAME
-};
-
-GtkType
-e_contact_editor_fullname_get_type (void)
-{
-	static GtkType contact_editor_fullname_type = 0;
-
-	if (!contact_editor_fullname_type)
-		{
-			static const GtkTypeInfo contact_editor_fullname_info =
-			{
-				"EContactEditorFullname",
-				sizeof (EContactEditorFullname),
-				sizeof (EContactEditorFullnameClass),
-				(GtkClassInitFunc) e_contact_editor_fullname_class_init,
-				(GtkObjectInitFunc) e_contact_editor_fullname_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-				(GtkClassInitFunc) NULL,
-			};
-
-			contact_editor_fullname_type = gtk_type_unique (gnome_dialog_get_type (), &contact_editor_fullname_info);
-		}
-
-	return contact_editor_fullname_type;
-}
-
-static void
-e_contact_editor_fullname_class_init (EContactEditorFullnameClass *klass)
-{
-	GtkObjectClass *object_class;
-	GnomeDialogClass *dialog_class;
-
-	object_class = (GtkObjectClass*) klass;
-	dialog_class = (GnomeDialogClass *) klass;
-
-	parent_class = gtk_type_class (gnome_dialog_get_type ());
-
-	gtk_object_add_arg_type ("EContactEditorFullname::name", GTK_TYPE_POINTER, 
-				 GTK_ARG_READWRITE, ARG_NAME);
- 
-	object_class->set_arg = e_contact_editor_fullname_set_arg;
-	object_class->get_arg = e_contact_editor_fullname_get_arg;
-	object_class->destroy = e_contact_editor_fullname_destroy;
-}
-
-static void
-e_contact_editor_fullname_init (EContactEditorFullname *e_contact_editor_fullname)
-{
-	GladeXML *gui;
-	GtkWidget *widget;
-
-	gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_fullname),
-				     GNOME_STOCK_BUTTON_OK);
-	
-	gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_fullname),
-				     GNOME_STOCK_BUTTON_CANCEL);
-
-	gtk_window_set_policy(GTK_WINDOW(e_contact_editor_fullname), TRUE, TRUE, FALSE);
-
-	e_contact_editor_fullname->name = NULL;
-	gui = glade_xml_new (EVOLUTION_GLADEDIR "/fullname.glade", NULL);
-	e_contact_editor_fullname->gui = gui;
-
-	widget = glade_xml_get_widget(gui, "table-checkfullname");
-	gtk_widget_ref(widget);
-	gtk_container_remove(GTK_CONTAINER(widget->parent), widget);
-	gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (e_contact_editor_fullname)->vbox), widget, TRUE, TRUE, 0);
-	gtk_widget_unref(widget);
-}
-
-void
-e_contact_editor_fullname_destroy (GtkObject *object)
-{
-	EContactEditorFullname *e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME(object);
-
-	if (e_contact_editor_fullname->gui)
-		gtk_object_unref(GTK_OBJECT(e_contact_editor_fullname->gui));
-	e_card_name_free(e_contact_editor_fullname->name);
-}
-
-GtkWidget*
-e_contact_editor_fullname_new (ECardName *name)
-{
-	GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_editor_fullname_get_type ()));
-	gtk_object_set (GTK_OBJECT(widget),
-			"name", name,
-			NULL);
-	return widget;
-}
-
-static void
-e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
-{
-	EContactEditorFullname *e_contact_editor_fullname;
-
-	e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME (o);
-	
-	switch (arg_id){
-	case ARG_NAME:
-		if (e_contact_editor_fullname->name)
-			e_card_name_free(e_contact_editor_fullname->name);
-		e_contact_editor_fullname->name = e_card_name_copy(GTK_VALUE_POINTER (*arg));
-		fill_in_info(e_contact_editor_fullname);
-		break;
-	}
-}
-
-static void
-e_contact_editor_fullname_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	EContactEditorFullname *e_contact_editor_fullname;
-
-	e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME (object);
-
-	switch (arg_id) {
-	case ARG_NAME:
-		extract_info(e_contact_editor_fullname);
-		GTK_VALUE_POINTER (*arg) = e_card_name_copy(e_contact_editor_fullname->name);
-		break;
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-static void
-fill_in_field(EContactEditorFullname *editor, char *field, char *string)
-{
-	GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, field));
-	if (entry) {
-		if (string)
-			gtk_entry_set_text(entry, string);
-		else
-			gtk_entry_set_text(entry, "");
-	}
-}
-
-static void
-fill_in_info(EContactEditorFullname *editor)
-{
-	ECardName *name = editor->name;
-	if (name) {
-		fill_in_field(editor, "entry-title",  name->prefix);
-		fill_in_field(editor, "entry-first",  name->given);
-		fill_in_field(editor, "entry-middle", name->additional);
-		fill_in_field(editor, "entry-last",   name->family);
-		fill_in_field(editor, "entry-suffix", name->suffix);
-	}
-}
-
-static char *
-extract_field(EContactEditorFullname *editor, char *field)
-{
-	GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, field));
-	if (entry)
-		return g_strdup(gtk_entry_get_text(entry));
-	else
-		return NULL;
-}
-
-static void
-extract_info(EContactEditorFullname *editor)
-{
-	ECardName *name = editor->name;
-	if (!name)
-		name = e_card_name_new();
-	name->prefix     = extract_field(editor, "entry-title" );
-	name->given      = extract_field(editor, "entry-first" );
-	name->additional = extract_field(editor, "entry-middle");
-	name->family     = extract_field(editor, "entry-last"  );
-	name->suffix     = extract_field(editor, "entry-suffix");
-}
diff --git a/addressbook/contact-editor/e-contact-editor-fullname.h b/addressbook/contact-editor/e-contact-editor-fullname.h
deleted file mode 100644
index 409ffc72d0..0000000000
--- a/addressbook/contact-editor/e-contact-editor-fullname.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-contact-editor-fullname.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef __E_CONTACT_EDITOR_FULLNAME_H__
-#define __E_CONTACT_EDITOR_FULLNAME_H__
-
-#include 
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* EContactEditorFullname - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name		type		read/write	description
- * --------------------------------------------------------------------------------
- * name         ECardName *     RW              The card currently being edited. Returns a copy.
- */
-
-#define E_CONTACT_EDITOR_FULLNAME_TYPE			(e_contact_editor_fullname_get_type ())
-#define E_CONTACT_EDITOR_FULLNAME(obj)			(GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE, EContactEditorFullname))
-#define E_CONTACT_EDITOR_FULLNAME_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_FULLNAME_TYPE, EContactEditorFullnameClass))
-#define E_IS_CONTACT_EDITOR_FULLNAME(obj)		(GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE))
-#define E_IS_CONTACT_EDITOR_FULLNAME_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE))
-
-
-typedef struct _EContactEditorFullname       EContactEditorFullname;
-typedef struct _EContactEditorFullnameClass  EContactEditorFullnameClass;
-
-struct _EContactEditorFullname
-{
-	GnomeDialog parent;
-	
-	/* item specific fields */
-	ECardName *name;
-	GladeXML *gui;
-};
-
-struct _EContactEditorFullnameClass
-{
-	GnomeDialogClass parent_class;
-};
-
-
-GtkWidget *e_contact_editor_fullname_new(ECardName *name);
-GtkType    e_contact_editor_fullname_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CONTACT_EDITOR_FULLNAME_H__ */
diff --git a/addressbook/contact-editor/e-contact-editor-strings.h b/addressbook/contact-editor/e-contact-editor-strings.h
deleted file mode 100644
index d5ac9daf24..0000000000
--- a/addressbook/contact-editor/e-contact-editor-strings.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("_Add");
-gchar *s = N_("_Delete");
-gchar *s = N_("Phone Types");
-gchar *s = N_("New phone type");
-gchar *s = N_("Add");
-gchar *s = N_("New phone type");
-gchar *s = N_("Contact Editor");
-gchar *s = N_("_Full Name...");
-gchar *s = N_("File As:");
-gchar *s = N_("Web page address:");
-gchar *s = N_("Wants to receive _HTML mail");
-gchar *s = N_("Address:");
-gchar *s = N_("_Business");
-gchar *s = N_("_Home");
-gchar *s = N_("Business _Fax");
-gchar *s = N_("_Mobile");
-gchar *s = N_("Primary Email");
-gchar *s = N_("B_usiness");
-gchar *s = N_("_This is the mailing address");
-gchar *s = N_("C_ontacts...");
-gchar *s = N_("Ca_tegories...");
-gchar *s = N_("_Job title:");
-gchar *s = N_("_Company:");
-gchar *s = N_("General");
-gchar *s = N_("_Department:");
-gchar *s = N_("_Office:");
-gchar *s = N_("_Profession:");
-gchar *s = N_("_Nickname:");
-gchar *s = N_("_Spouse:");
-gchar *s = N_("_Birthday:");
-gchar *s = N_("_Assistant's name:");
-gchar *s = N_("_Manager's Name:");
-gchar *s = N_("Anni_versary:");
-gchar *s = N_("No_tes:");
-gchar *s = N_("Details");
diff --git a/addressbook/contact-editor/e-contact-editor.c b/addressbook/contact-editor/e-contact-editor.c
deleted file mode 100644
index e8062d83b9..0000000000
--- a/addressbook/contact-editor/e-contact-editor.c
+++ /dev/null
@@ -1,1809 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * e-contact-editor.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include "e-contact-editor.h"
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "addressbook/printing/e-contact-print.h"
-
-/* Signal IDs */
-enum {
-	ADD_CARD,
-	COMMIT_CARD,
-	DELETE_CARD,
-	EDITOR_CLOSED,
-	LAST_SIGNAL
-};
-
-static void e_contact_editor_init		(EContactEditor		 *card);
-static void e_contact_editor_class_init	(EContactEditorClass	 *klass);
-static void e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
-static void e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-static void e_contact_editor_destroy (GtkObject *object);
-
-#if 0
-static GtkWidget *e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info);
-#endif
-static void _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
-static void _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
-static void _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor);
-static void fill_in_info(EContactEditor *editor);
-static void extract_info(EContactEditor *editor);
-static void set_fields(EContactEditor *editor);
-static void set_address_field(EContactEditor *editor, int result);
-static void add_field_callback(GtkWidget *widget, EContactEditor *editor);
-
-static GtkObjectClass *parent_class = NULL;
-
-static guint contact_editor_signals[LAST_SIGNAL];
-
-/* The arguments we take */
-enum {
-	ARG_0,
-	ARG_CARD,
-	ARG_IS_NEW_CARD
-};
-
-enum {
-	DYNAMIC_LIST_EMAIL,
-	DYNAMIC_LIST_PHONE,
-	DYNAMIC_LIST_ADDRESS
-};
-
-GtkType
-e_contact_editor_get_type (void)
-{
-  static GtkType contact_editor_type = 0;
-
-  if (!contact_editor_type)
-    {
-      static const GtkTypeInfo contact_editor_info =
-      {
-        "EContactEditor",
-        sizeof (EContactEditor),
-        sizeof (EContactEditorClass),
-        (GtkClassInitFunc) e_contact_editor_class_init,
-        (GtkObjectInitFunc) e_contact_editor_init,
-        /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-
-      contact_editor_type = gtk_type_unique (GTK_TYPE_OBJECT, &contact_editor_info);
-    }
-
-  return contact_editor_type;
-}
-
-static void
-e_contact_editor_class_init (EContactEditorClass *klass)
-{
-  GtkObjectClass *object_class;
-
-  object_class = (GtkObjectClass*) klass;
-
-  parent_class = gtk_type_class (GTK_TYPE_OBJECT);
-
-  gtk_object_add_arg_type ("EContactEditor::card", GTK_TYPE_OBJECT, 
-			   GTK_ARG_READWRITE, ARG_CARD);
-  gtk_object_add_arg_type ("EContactEditor::is_new_card", GTK_TYPE_BOOL,
-			   GTK_ARG_READWRITE, ARG_IS_NEW_CARD);
-
-  contact_editor_signals[ADD_CARD] =
-	  gtk_signal_new ("add_card",
-			  GTK_RUN_FIRST,
-			  object_class->type,
-			  GTK_SIGNAL_OFFSET (EContactEditorClass, add_card),
-			  gtk_marshal_NONE__OBJECT,
-			  GTK_TYPE_NONE, 1,
-			  GTK_TYPE_OBJECT);
-
-  contact_editor_signals[COMMIT_CARD] =
-	  gtk_signal_new ("commit_card",
-			  GTK_RUN_FIRST,
-			  object_class->type,
-			  GTK_SIGNAL_OFFSET (EContactEditorClass, commit_card),
-			  gtk_marshal_NONE__OBJECT,
-			  GTK_TYPE_NONE, 1,
-			  GTK_TYPE_OBJECT);
-
-  contact_editor_signals[DELETE_CARD] =
-	  gtk_signal_new ("delete_card",
-			  GTK_RUN_FIRST,
-			  object_class->type,
-			  GTK_SIGNAL_OFFSET (EContactEditorClass, delete_card),
-			  gtk_marshal_NONE__OBJECT,
-			  GTK_TYPE_NONE, 1,
-			  GTK_TYPE_OBJECT);
-
-  contact_editor_signals[EDITOR_CLOSED] =
-	  gtk_signal_new ("editor_closed",
-			  GTK_RUN_FIRST,
-			  object_class->type,
-			  GTK_SIGNAL_OFFSET (EContactEditorClass, editor_closed),
-			  gtk_marshal_NONE__NONE,
-			  GTK_TYPE_NONE, 0);
-
-  gtk_object_class_add_signals (object_class, contact_editor_signals, LAST_SIGNAL);
- 
-  object_class->set_arg = e_contact_editor_set_arg;
-  object_class->get_arg = e_contact_editor_get_arg;
-  object_class->destroy = e_contact_editor_destroy;
-}
-
-static void
-_replace_button(EContactEditor *editor, gchar *button_xml, gchar *image, GtkSignalFunc func)
-{
-	GladeXML *gui = editor->gui;
-	GtkWidget *button = glade_xml_get_widget(gui, button_xml);
-	GtkWidget *pixmap;
-	gchar *image_temp;
-	if (button && GTK_IS_BUTTON(button)) {
-		image_temp = g_strdup_printf("%s/%s", EVOLUTIONDIR, image);
-		pixmap = e_create_image_widget(NULL, image_temp, NULL, 0, 0);
-		gtk_container_add(GTK_CONTAINER(button),
-				  pixmap);
-		g_free(image_temp);
-		gtk_widget_show(pixmap);
-		gtk_signal_connect(GTK_OBJECT(button), "button_press_event", func, editor);
-	}
-}
-
-static void
-_replace_buttons(EContactEditor *editor)
-{
-	_replace_button(editor, "button-phone1", "arrow.png", _phone_arrow_pressed);
-	_replace_button(editor, "button-phone2", "arrow.png", _phone_arrow_pressed);
-	_replace_button(editor, "button-phone3", "arrow.png", _phone_arrow_pressed);
-	_replace_button(editor, "button-phone4", "arrow.png", _phone_arrow_pressed);
-	_replace_button(editor, "button-address", "arrow.png", _address_arrow_pressed);
-	_replace_button(editor, "button-email1", "arrow.png", _email_arrow_pressed);
-}
-
-static void
-phone_entry_changed (GtkWidget *widget, EContactEditor *editor)
-{
-	int which;
-	gchar *string;
-	GtkEntry *entry = GTK_ENTRY(widget);
-	ECardPhone *phone;
-
-	if ( widget == glade_xml_get_widget(editor->gui, "entry-phone1") ) {
-		which = 1;
-	} else if ( widget == glade_xml_get_widget(editor->gui, "entry-phone2") ) {
-		which = 2;
-	} else if ( widget == glade_xml_get_widget(editor->gui, "entry-phone3") ) {
-		which = 3;
-	} else if ( widget == glade_xml_get_widget(editor->gui, "entry-phone4") ) {
-		which = 4;
-	} else
-		return;
-	string = gtk_entry_get_text(entry);
-	phone = e_card_phone_new();
-	phone->number = string;
-	e_card_simple_set_phone(editor->simple, editor->phone_choice[which - 1], phone);
-	phone->number = NULL;
-	e_card_phone_free(phone);
-	set_fields(editor);
-}
-
-static void
-email_entry_changed (GtkWidget *widget, EContactEditor *editor)
-{
-	gchar *string;
-	GtkEntry *entry = GTK_ENTRY(widget);
-
-	string = gtk_entry_get_text(entry);
-
-	e_card_simple_set_email(editor->simple, editor->email_choice, string);
-}
-
-static void
-address_text_changed (GtkWidget *widget, EContactEditor *editor)
-{
-	GtkEditable *editable = GTK_EDITABLE(widget);
-	ECardAddrLabel *address;
-
-	if (editor->address_choice == -1)
-		return;
-
-	address = e_card_address_label_new();
-	address->data = gtk_editable_get_chars(editable, 0, -1);
-	e_card_simple_set_address(editor->simple, editor->address_choice, address);
-	e_card_address_label_free(address);
-}
-
-/* This function tells you whether name_to_style will make sense.  */
-static gboolean
-style_makes_sense(const ECardName *name, char *company, int style)
-{
-	switch (style) {
-	case 0: /* Fall Through */
-	case 1:
-		return TRUE;
-	case 2:
-		if (company && *company)
-			return TRUE;
-		else
-			return FALSE;
-	case 3: /* Fall Through */
-	case 4:
-		if (company && *company && ((name->given && *name->given) || (name->family && *name->family)))
-			return TRUE;
-		else
-			return FALSE;
-	default:
-		return FALSE;
-	}
-}
-
-static char *
-name_to_style(const ECardName *name, char *company, int style)
-{
-	char *string;
-	char *strings[4], **stringptr;
-	char *substring;
-	switch (style) {
-	case 0:
-		stringptr = strings;
-		if (name->family && *name->family)
-			*(stringptr++) = name->family;
-		if (name->given && *name->given)
-			*(stringptr++) = name->given;
-		*stringptr = NULL;
-		string = g_strjoinv(", ", strings);
-		break;
-	case 1:
-		stringptr = strings;
-		if (name->given && *name->given)
-			*(stringptr++) = name->given;
-		if (name->family && *name->family)
-			*(stringptr++) = name->family;
-		*stringptr = NULL;
-		string = g_strjoinv(" ", strings);
-		break;
-	case 2:
-		string = g_strdup(company);
-		break;
-	case 3: /* Fall Through */
-	case 4:
-		stringptr = strings;
-		if (name->family && *name->family)
-			*(stringptr++) = name->family;
-		if (name->given && *name->given)
-			*(stringptr++) = name->given;
-		*stringptr = NULL;
-		substring = g_strjoinv(", ", strings);
-		if (!(company && *company))
-			company = "";
-		if (style == 3)
-			string = g_strdup_printf("%s (%s)", substring, company);
-		else
-			string = g_strdup_printf("%s (%s)", company, substring);
-		g_free(substring);
-		break;
-	default:
-		string = g_strdup("");
-	}
-	return string;
-}
-
-static int
-file_as_get_style (EContactEditor *editor)
-{
-	GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as"));
-	char *filestring = gtk_entry_get_text(file_as);
-	char *trystring;
-	ECardName *name = editor->name;
-	int i;
-	int style;
-
-	if (!name) return 0;
-
-	style = -1;
-	for (i = 0; i < 5; i++) {
-		trystring = name_to_style(name, editor->company, i);
-		if (!strcmp(trystring, filestring)) {
-			g_free(trystring);
-			return i;
-		}
-		g_free(trystring);
-	}
-	return -1;
-}
-
-static void
-file_as_set_style(EContactEditor *editor, int style)
-{
-	char *string;
-	int i;
-	GList *strings = NULL;
-	GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as"));
-	GtkWidget *widget;
-		
-
-	if (style == -1) {
-		string = g_strdup(gtk_entry_get_text(file_as));
-		strings = g_list_append(strings, string);
-	}
-
-	for (i = 0; i < 5; i++) {
-		if (style_makes_sense(editor->name, editor->company, i)) {
-			string = name_to_style(editor->name, editor->company, i);
-			strings = g_list_append(strings, string);
-		}
-	}
-
-	widget = glade_xml_get_widget(editor->gui, "combo-file-as");
-	if (widget && GTK_IS_COMBO(widget)) {
-		GtkCombo *combo = GTK_COMBO(widget);
-		gtk_combo_set_popdown_strings(combo, strings);
-		g_list_foreach(strings, (GFunc) g_free, NULL);
-		g_list_free(strings);
-	}
-
-	if (style != -1) {
-		string = name_to_style(editor->name, editor->company, style);
-		gtk_entry_set_text(file_as, string);
-		g_free(string);
-	}
-}
-
-static void
-name_entry_changed (GtkWidget *widget, EContactEditor *editor)
-{
-	GtkWidget *file_as;
-	int style = 0;
-
-	file_as = glade_xml_get_widget(editor->gui, "entry-file-as");
-
-	if (file_as && GTK_IS_ENTRY(file_as)) {
-		style = file_as_get_style(editor);
-	}
-	
-	e_card_name_free(editor->name);
-	editor->name = e_card_name_from_string(gtk_entry_get_text(GTK_ENTRY(widget)));
-	
-	if (file_as && GTK_IS_ENTRY(file_as)) {
-		file_as_set_style(editor, style);
-	}
-}
-
-static void
-company_entry_changed (GtkWidget *widget, EContactEditor *editor)
-{
-	int style = 0;
-	GtkWidget *file_as;
-
-	file_as = glade_xml_get_widget(editor->gui, "entry-file-as");
-
-	if (file_as && GTK_IS_ENTRY(file_as)) {
-		style = file_as_get_style(editor);
-	}
-	
-	g_free(editor->company);
-	
-	editor->company = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
-	
-	if (file_as && GTK_IS_ENTRY(file_as)) {
-		file_as_set_style(editor, style);
-	}
-}
-
-static void
-set_entry_changed_signal_phone(EContactEditor *editor, char *id)
-{
-	GtkWidget *widget = glade_xml_get_widget(editor->gui, id);
-	if (widget && GTK_IS_ENTRY(widget))
-		gtk_signal_connect(GTK_OBJECT(widget), "changed",
-				   phone_entry_changed, editor);
-}
-
-static void
-set_entry_changed_signals(EContactEditor *editor)
-{
-	GtkWidget *widget;
-	set_entry_changed_signal_phone(editor, "entry-phone1");
-	set_entry_changed_signal_phone(editor, "entry-phone2");
-	set_entry_changed_signal_phone(editor, "entry-phone3");
-	set_entry_changed_signal_phone(editor, "entry-phone4");
-	widget = glade_xml_get_widget(editor->gui, "entry-email1");
-	if (widget && GTK_IS_ENTRY(widget)) {
-		gtk_signal_connect(GTK_OBJECT(widget), "changed",
-				   email_entry_changed, editor);
-	}
-	widget = glade_xml_get_widget(editor->gui, "text-address");
-	if (widget && GTK_IS_TEXT(widget)) {
-		gtk_signal_connect(GTK_OBJECT(widget), "changed",
-				   address_text_changed, editor);
-	}
-	widget = glade_xml_get_widget(editor->gui, "entry-fullname");
-	if (widget && GTK_IS_ENTRY(widget)) {
-		gtk_signal_connect(GTK_OBJECT(widget), "changed",
-				   name_entry_changed, editor);
-	}
-	widget = glade_xml_get_widget(editor->gui, "entry-company");
-	if (widget && GTK_IS_ENTRY(widget)) {
-		gtk_signal_connect(GTK_OBJECT(widget), "changed",
-				   company_entry_changed, editor);
-	}
-}
-
-static void
-full_name_clicked(GtkWidget *button, EContactEditor *editor)
-{
-	GnomeDialog *dialog = GNOME_DIALOG(e_contact_editor_fullname_new(editor->name));
-	int result;
-	gtk_widget_show(GTK_WIDGET(dialog));
-	result = gnome_dialog_run_and_close (dialog);
-	if (result == 0) {
-		ECardName *name;
-		GtkWidget *fname_widget;
-
-		gtk_object_get(GTK_OBJECT(dialog),
-			       "name", &name,
-			       NULL);
-		e_card_name_free(editor->name);
-		editor->name = e_card_name_copy(name);
-
-		fname_widget = glade_xml_get_widget(editor->gui, "entry-fullname");
-		if (fname_widget && GTK_IS_ENTRY(fname_widget)) {
-			char *full_name = e_card_name_to_string(name);
-			gtk_entry_set_text(GTK_ENTRY(fname_widget), full_name);
-			g_free(full_name);
-		}
-	}
-	gtk_object_unref(GTK_OBJECT(dialog));
-}
-
-static void
-categories_clicked(GtkWidget *button, EContactEditor *editor)
-{
-	char *categories;
-	GnomeDialog *dialog;
-	int result;
-	GtkWidget *entry = glade_xml_get_widget(editor->gui, "entry-categories");
-	if (entry && GTK_IS_ENTRY(entry))
-		categories = gtk_entry_get_text(GTK_ENTRY(entry));
-	else if (editor->card)
-		gtk_object_get(GTK_OBJECT(editor->card),
-			       "categories", &categories,
-			       NULL);
-	dialog = GNOME_DIALOG(e_contact_editor_categories_new(categories));
-	gtk_widget_show(GTK_WIDGET(dialog));
-	result = gnome_dialog_run (dialog);
-	if (result == 0) {
-		gtk_object_get(GTK_OBJECT(dialog),
-			       "categories", &categories,
-			       NULL);
-		if (entry && GTK_IS_ENTRY(entry))
-			gtk_entry_set_text(GTK_ENTRY(entry), categories);
-		else
-			gtk_object_set(GTK_OBJECT(editor->card),
-				       "categories", categories,
-				       NULL);
-		g_free(categories);
-	}
-	gtk_object_destroy(GTK_OBJECT(dialog));
-	if (!entry)
-		g_free(categories);
-}
-
-/* Emits the signal to request saving a card */
-static void
-save_card (EContactEditor *ce)
-{
-	extract_info (ce);
-	e_card_simple_sync_card (ce->simple);
-
-	if (ce->is_new_card)
-		gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[ADD_CARD],
-				 ce->card);
-	else
-		gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[COMMIT_CARD],
-				 ce->card);
-
-	/* FIXME: should we set the ce->is_new_card here or have the client code
-	 * set the "is_new_card" argument on the contact editor object?
-	 */
-
-	ce->is_new_card = FALSE;
-}
-
-/* Closes the dialog box and emits the appropriate signals */
-static void
-close_dialog (EContactEditor *ce)
-{
-	g_assert (ce->app != NULL);
-
-	gtk_widget_destroy (ce->app);
-	ce->app = NULL;
-
-	gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[EDITOR_CLOSED]);
-}
-
-/* Menu callbacks */
-
-/* File/Save callback */
-static void
-file_save_cb (GtkWidget *widget, gpointer data)
-{
-	EContactEditor *ce;
-
-	ce = E_CONTACT_EDITOR (data);
-	save_card (ce);
-}
-
-/* File/Close callback */
-static void
-file_close_cb (GtkWidget *widget, gpointer data)
-{
-	EContactEditor *ce;
-
-	ce = E_CONTACT_EDITOR (data);
-	close_dialog (ce);
-}
-
-static void
-file_save_as_cb (GtkWidget *widget, gpointer data)
-{
-	EContactEditor *ce;
-	ECard *card;
-
-	ce = E_CONTACT_EDITOR (data);
-
-	extract_info (ce);
-	e_card_simple_sync_card (ce->simple);
-
-	card = ce->card;
-	e_contact_save_as("Save as VCard", card);
-}
-
-gboolean
-e_contact_editor_confirm_delete(void)
-{
-	GnomeDialog *dialog;
-	GladeXML *gui;
-	int result;
-
-	gui = glade_xml_new (EVOLUTION_GLADEDIR "/e-contact-editor-confirm-delete.glade", NULL);
-
-	dialog = GNOME_DIALOG(glade_xml_get_widget(gui, "confirm-dialog"));
-	
-	result = gnome_dialog_run_and_close(dialog);
-
-	gtk_object_unref(GTK_OBJECT(gui));
-
-	return !result;
-}
-
-static void
-delete_cb (GtkWidget *widget, gpointer data)
-{
-	EContactEditor *ce;
-
-	if (e_contact_editor_confirm_delete()) {
-
-		ce = E_CONTACT_EDITOR (data);
-
-		extract_info (ce);
-		e_card_simple_sync_card (ce->simple);
-		
-		if (!ce->is_new_card)
-			gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[DELETE_CARD],
-					 ce->card);
-		
-		file_close_cb(widget, data);
-	}
-}
-
-/* Emits the signal to request printing a card */
-static void
-print_cb (GtkWidget *widget, gpointer data)
-{
-	EContactEditor *ce;
-
-	ce = E_CONTACT_EDITOR (data);
-
-	extract_info (ce);
-	e_card_simple_sync_card (ce->simple);
-
-	gtk_widget_show(e_contact_print_card_dialog_new(ce->card));
-}
-
-
-/* Menu bar */
-
-static GnomeUIInfo file_new_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Appointment"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Meeting Re_quest"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Mail Message"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Contact"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Task"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Task _Request"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Journal Entry"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Note"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo file_page_setup_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Memo Style"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Define Print _Styles..."), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo file_menu[] = {
-	GNOMEUIINFO_MENU_NEW_SUBTREE (file_new_menu),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: S_end"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_MENU_SAVE_ITEM (file_save_cb, NULL),
-	GNOMEUIINFO_MENU_SAVE_AS_ITEM (file_save_as_cb, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Save Attac_hments..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("_Delete"), NULL, delete_cb),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Move to Folder..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Cop_y to Folder..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_SUBTREE (N_("Page Set_up"), file_page_setup_menu),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Print Pre_view"), NULL, NULL),
-	GNOMEUIINFO_MENU_PRINT_ITEM (print_cb, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_MENU_PROPERTIES_ITEM (NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_MENU_CLOSE_ITEM (file_close_cb, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo edit_object_menu[] = {
-	GNOMEUIINFO_ITEM_NONE ("FIXME: what goes here?", NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo edit_menu[] = {
-	GNOMEUIINFO_MENU_UNDO_ITEM (NULL, NULL),
-	GNOMEUIINFO_MENU_REDO_ITEM (NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_MENU_CUT_ITEM (NULL, NULL),
-	GNOMEUIINFO_MENU_COPY_ITEM (NULL, NULL),
-	GNOMEUIINFO_MENU_PASTE_ITEM (NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Paste _Special..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_MENU_CLEAR_ITEM (NULL, NULL),
-	GNOMEUIINFO_MENU_SELECT_ALL_ITEM (NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Mark as U_nread"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_MENU_FIND_ITEM (NULL, NULL),
-	GNOMEUIINFO_MENU_FIND_AGAIN_ITEM (NULL, NULL),
-	GNOMEUIINFO_SUBTREE (N_("_Object"), edit_object_menu),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo view_previous_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Fi_rst Item in Folder"), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo view_next_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Last Item in Folder"), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo view_toolbars_menu[] = {
-	{ GNOME_APP_UI_TOGGLEITEM, N_("FIXME: _Standard"), NULL, NULL, NULL, NULL,
-	  GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
-	{ GNOME_APP_UI_TOGGLEITEM, N_("FIXME: __Formatting"), NULL, NULL, NULL, NULL,
-	  GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Customize..."), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo view_menu[] = {
-	GNOMEUIINFO_SUBTREE (N_("Pre_vious"), view_previous_menu),
-	GNOMEUIINFO_SUBTREE (N_("Ne_xt"), view_next_menu),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_SUBTREE (N_("_Toolbars"), view_toolbars_menu),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo insert_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _File..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: It_em..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Object..."), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo format_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Font..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Paragraph..."), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo tools_forms_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Desi_gn This Form"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: D_esign a Form..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Publish _Form..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Pu_blish Form As..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Script _Debugger"), NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo tools_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Spelling..."), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_SUBTREE (N_("_Forms"), tools_forms_menu),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo actions_menu[] = {
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _New Contact"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Contact from Same Company"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Letter to Contact"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Message to Contact"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: New Meetin_g with Contact"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Plan a Meeting..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Task for Contact"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Journal Entry for Contact"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Flag for Follow Up..."), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Display Map of Address"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Open Web Page"), NULL, NULL),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Forward as _vCard"), NULL, NULL),
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: For_ward"), NULL, NULL)
-};
-
-static GnomeUIInfo help_menu[] = {
-	GNOMEUIINFO_ITEM_NONE ("FIXME: fix Bonobo so it supports help items!", NULL, NULL),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo main_menu[] = {
-	GNOMEUIINFO_MENU_FILE_TREE (file_menu),
-	GNOMEUIINFO_MENU_EDIT_TREE (edit_menu),
-	GNOMEUIINFO_MENU_VIEW_TREE (view_menu),
-	GNOMEUIINFO_SUBTREE (N_("_Insert"), insert_menu),
-	GNOMEUIINFO_SUBTREE (N_("F_ormat"), format_menu),
-	GNOMEUIINFO_SUBTREE (N_("_Tools"), tools_menu),
-	GNOMEUIINFO_SUBTREE (N_("Actio_ns"), actions_menu),
-	GNOMEUIINFO_MENU_HELP_TREE (help_menu),
-	GNOMEUIINFO_END
-};
-
-/* Creates the menu bar for the contact editor */
-static void
-create_menu (EContactEditor *ce)
-{
-	BonoboUIHandlerMenuItem *list;
-
-	bonobo_ui_handler_create_menubar (ce->uih);
-
-	list = bonobo_ui_handler_menu_parse_uiinfo_list_with_data (main_menu, ce);
-	bonobo_ui_handler_menu_add_list (ce->uih, "/", list);
-}
-
-/* Toolbar/Save and Close callback */
-static void
-tb_save_and_close_cb (GtkWidget *widget, gpointer data)
-{
-	EContactEditor *ce;
-
-	ce = E_CONTACT_EDITOR (data);
-	save_card (ce);
-	close_dialog (ce);
-}
-
-/* Toolbar */
-
-static GnomeUIInfo toolbar[] = {
-	GNOMEUIINFO_ITEM_STOCK (N_("Save and Close"),
-				N_("Save the appointment and close the dialog box"),
-				tb_save_and_close_cb,
-				GNOME_STOCK_PIXMAP_SAVE),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_STOCK (N_("Print..."),
-				N_("Print this item"), print_cb, 
-				GNOME_STOCK_PIXMAP_PRINT),
-#if 0
-	GNOMEUIINFO_ITEM_NONE (N_("FIXME: Insert File..."),
-			       N_("Insert a file as an attachment"), NULL),
-#endif
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_ITEM_STOCK (N_("Delete"),
-				N_("Delete this item"), delete_cb,
-				GNOME_STOCK_PIXMAP_TRASH),
-	GNOMEUIINFO_SEPARATOR,
-#if 0
-	GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Previous"),
-				N_("Go to the previous item"), NULL,
-				GNOME_STOCK_PIXMAP_BACK),
-	GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Next"),
-				N_("Go to the next item"), NULL,
-				GNOME_STOCK_PIXMAP_FORWARD),
-#endif
-	GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Help"),
-				N_("See online help"), NULL, GNOME_STOCK_PIXMAP_HELP),
-	GNOMEUIINFO_END
-};
-
-/* Creates the toolbar for the contact editor */
-static void
-create_toolbar (EContactEditor *ce)
-{
-	BonoboUIHandlerToolbarItem *list;
-	GnomeDockItem *dock_item;
-	GtkWidget *toolbar_child;
-
-	bonobo_ui_handler_create_toolbar (ce->uih, "Toolbar");
-
-	/* Fetch the toolbar.  What a pain in the ass. */
-
-	dock_item = gnome_app_get_dock_item_by_name (GNOME_APP (ce->app), GNOME_APP_TOOLBAR_NAME);
-	g_assert (dock_item != NULL);
-
-	toolbar_child = gnome_dock_item_get_child (dock_item);
-	g_assert (toolbar_child != NULL && GTK_IS_TOOLBAR (toolbar_child));
-
-	/* Turn off labels as GtkToolbar sucks */
-	gtk_toolbar_set_style (GTK_TOOLBAR (toolbar_child), GTK_TOOLBAR_ICONS);
-
-	list = bonobo_ui_handler_toolbar_parse_uiinfo_list_with_data (toolbar, ce);
-	bonobo_ui_handler_toolbar_add_list (ce->uih, "/Toolbar", list);
-}
-
-/* Callback used when the dialog box is destroyed */
-static gint
-app_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
-{
-	EContactEditor *ce;
-
-	ce = E_CONTACT_EDITOR (data);
-
-	close_dialog (ce);
-	return TRUE;
-}
-
-static GList *
-add_to_tab_order(GList *list, GladeXML *gui, char *name)
-{
-	GtkWidget *widget = glade_xml_get_widget(gui, name);
-	return g_list_prepend(list, widget);
-}
-
-static void
-setup_tab_order(GladeXML *gui)
-{
-	GtkWidget *container;
-	GList *list = NULL;
-
-	container = glade_xml_get_widget(gui, "table-contact-editor-general");
-
-	if (container) {
-		list = add_to_tab_order(list, gui, "entry-fullname");
-		list = add_to_tab_order(list, gui, "entry-jobtitle");
-		list = add_to_tab_order(list, gui, "entry-company");
-		list = add_to_tab_order(list, gui, "combo-file-as");
-		list = add_to_tab_order(list, gui, "entry-phone1");
-		list = add_to_tab_order(list, gui, "entry-phone2");
-		list = add_to_tab_order(list, gui, "entry-phone3");
-		list = add_to_tab_order(list, gui, "entry-phone4");
-		list = g_list_reverse(list);
-		e_container_change_tab_order(GTK_CONTAINER(container), list);
-		g_list_free(list);
-
-		list = NULL;
-		list = add_to_tab_order(list, gui, "entry-email1");
-		list = add_to_tab_order(list, gui, "entry-web");
-		list = add_to_tab_order(list, gui, "text-address");
-		list = add_to_tab_order(list, gui, "alignment-contacts");
-		list = g_list_reverse(list);
-		e_container_change_tab_order(GTK_CONTAINER(container), list);
-		g_list_free(list);
-	}
-}
-
-static void
-e_contact_editor_init (EContactEditor *e_contact_editor)
-{
-	GladeXML *gui;
-	GtkWidget *widget;
-
-	e_contact_editor->email_info = NULL;
-	e_contact_editor->phone_info = NULL;
-	e_contact_editor->address_info = NULL;
-	e_contact_editor->email_popup = NULL;
-	e_contact_editor->phone_popup = NULL;
-	e_contact_editor->address_popup = NULL;
-	e_contact_editor->email_list = NULL;
-	e_contact_editor->phone_list = NULL;
-	e_contact_editor->address_list = NULL;
-	e_contact_editor->name = NULL;
-	e_contact_editor->company = g_strdup("");
-	
-	e_contact_editor->email_choice = 0;
-	e_contact_editor->phone_choice[0] = E_CARD_SIMPLE_PHONE_ID_BUSINESS;
-	e_contact_editor->phone_choice[1] = E_CARD_SIMPLE_PHONE_ID_HOME;
-	e_contact_editor->phone_choice[2] = E_CARD_SIMPLE_PHONE_ID_BUSINESS_FAX;
-	e_contact_editor->phone_choice[3] = E_CARD_SIMPLE_PHONE_ID_MOBILE;
-	e_contact_editor->address_choice = 0;
-
-	e_contact_editor->arbitrary_fields = NULL;
-	
-	e_contact_editor->simple = e_card_simple_new(NULL);
-
-	e_contact_editor->card = NULL;
-
-	gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL);
-	e_contact_editor->gui = gui;
-
-	setup_tab_order(gui);
-
-	e_contact_editor->app = glade_xml_get_widget (gui, "contact editor");
-
-	e_container_foreach_leaf (GTK_CONTAINER (e_contact_editor->app),
-				  (GtkCallback) add_field_callback,
-				  e_contact_editor);
-
-	_replace_buttons(e_contact_editor);
-	set_entry_changed_signals(e_contact_editor);
-	
-	widget = glade_xml_get_widget(e_contact_editor->gui, "button-fullname");
-	if (widget && GTK_IS_BUTTON(widget))
-		gtk_signal_connect(GTK_OBJECT(widget), "clicked",
-				   full_name_clicked, e_contact_editor);
-
-	widget = glade_xml_get_widget(e_contact_editor->gui, "button-categories");
-	if (widget && GTK_IS_BUTTON(widget))
-		gtk_signal_connect(GTK_OBJECT(widget), "clicked",
-				   categories_clicked, e_contact_editor);
-
-	/* Build the menu and toolbar */
-
-	e_contact_editor->uih = bonobo_ui_handler_new ();
-	if (!e_contact_editor->uih) {
-		g_message ("e_contact_editor_init(): eeeeek, could not create the UI handler!");
-		return;
-	}
-
-	bonobo_ui_handler_set_app (e_contact_editor->uih, GNOME_APP (e_contact_editor->app));
-
-	create_menu (e_contact_editor);
-	create_toolbar (e_contact_editor);
-
-	/* Connect to the deletion of the dialog */
-
-	gtk_signal_connect (GTK_OBJECT (e_contact_editor->app), "delete_event",
-			    GTK_SIGNAL_FUNC (app_delete_event_cb), e_contact_editor);
-}
-
-void
-e_contact_editor_destroy (GtkObject *object) {
-	EContactEditor *e_contact_editor = E_CONTACT_EDITOR(object);
-	
-	if (e_contact_editor->email_list) {
-		g_list_foreach(e_contact_editor->email_list, (GFunc) g_free, NULL);
-		g_list_free(e_contact_editor->email_list);
-	}
-	if (e_contact_editor->email_info) {
-		g_free(e_contact_editor->email_info);
-	}
-	if (e_contact_editor->email_popup) {
-		gtk_widget_unref(e_contact_editor->email_popup);
-	}
-	
-	if (e_contact_editor->phone_list) {
-		g_list_foreach(e_contact_editor->phone_list, (GFunc) g_free, NULL);
-		g_list_free(e_contact_editor->phone_list);
-	}
-	if (e_contact_editor->phone_info) {
-		g_free(e_contact_editor->phone_info);
-	}
-	if (e_contact_editor->phone_popup) {
-		gtk_widget_unref(e_contact_editor->phone_popup);
-	}
-	
-	if (e_contact_editor->address_list) {
-		g_list_foreach(e_contact_editor->address_list, (GFunc) g_free, NULL);
-		g_list_free(e_contact_editor->address_list);
-	}
-	if (e_contact_editor->address_info) {
-		g_free(e_contact_editor->address_info);
-	}
-	if (e_contact_editor->address_popup) {
-		gtk_widget_unref(e_contact_editor->address_popup);
-	}
-	
-	if (e_contact_editor->simple)
-		gtk_object_unref(GTK_OBJECT(e_contact_editor->simple));
-
-	g_free (e_contact_editor->company);
-
-	gtk_object_unref(GTK_OBJECT(e_contact_editor->gui));
-}
-
-EContactEditor *
-e_contact_editor_new (ECard *card, gboolean is_new_card)
-{
-	EContactEditor *ce;
-
-	ce = E_CONTACT_EDITOR (gtk_type_new (E_CONTACT_EDITOR_TYPE));
-
-	gtk_object_set (GTK_OBJECT (ce),
-			"card", card,
-			"is_new_card", is_new_card,
-			NULL);
-
-	gtk_widget_show (ce->app);
-	return ce;
-}
-
-static void
-e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
-{
-	EContactEditor *editor;
-
-	editor = E_CONTACT_EDITOR (o);
-	
-	switch (arg_id){
-	case ARG_CARD:
-		if (editor->card)
-			gtk_object_unref(GTK_OBJECT(editor->card));
-		editor->card = e_card_duplicate(E_CARD(GTK_VALUE_OBJECT (*arg)));
-		gtk_object_set(GTK_OBJECT(editor->simple),
-			       "card", editor->card,
-			       NULL);
-		fill_in_info(editor);
-		break;
-
-	case ARG_IS_NEW_CARD:
-		editor->is_new_card = GTK_VALUE_BOOL (*arg) ? TRUE : FALSE;
-		break;
-	}
-}
-
-static void
-e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	EContactEditor *e_contact_editor;
-
-	e_contact_editor = E_CONTACT_EDITOR (object);
-
-	switch (arg_id) {
-	case ARG_CARD:
-		e_card_simple_sync_card(e_contact_editor->simple);
-		extract_info(e_contact_editor);
-		GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_contact_editor->card);
-		break;
-
-	case ARG_IS_NEW_CARD:
-		GTK_VALUE_BOOL (*arg) = e_contact_editor->is_new_card ? TRUE : FALSE;
-		break;
-
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-static void
-_popup_position(GtkMenu *menu,
-		gint *x,
-		gint *y,
-		gpointer data)
-{
-	GtkWidget *button = GTK_WIDGET(data);
-	GtkRequisition request;
-	int mh, mw;
-	gdk_window_get_origin (button->window, x, y);
-	*x += button->allocation.width;
-	*y += button->allocation.height;
-
-	gtk_widget_size_request(GTK_WIDGET(menu), &request);
-
-	mh = request.height;
-	mw = request.width;
-
-	*x -= mw;
-	if (*x < 0)
-		*x = 0;
-	
-	if (*y < 0)
-		*y = 0;
-	
-	if ((*x + mw) > gdk_screen_width ())
-		*x = gdk_screen_width () - mw;
-	
-	if ((*y + mh) > gdk_screen_height ())
-		*y = gdk_screen_height () - mh;
-}
-
-static gint
-_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor, GtkWidget *popup, GList **list, GnomeUIInfo **info, gchar *label, gchar *entry, gchar *dialog_title)
-{
-	gint menu_item;
-	gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event");
-	gtk_widget_realize(popup);
-	menu_item = gnome_popup_menu_do_popup_modal(popup, _popup_position, widget, button, editor);
-	if ( menu_item != -1 ) {
-#if 0
-		if (menu_item == g_list_length (*list)) {
-			e_contact_editor_build_dialog(editor, entry, label, dialog_title, list, info);
-		} else {
-#endif
-			GtkWidget *label_widget = glade_xml_get_widget(editor->gui, label);
-			if (label_widget && GTK_IS_LABEL(label_widget)) {
-				gtk_object_set(GTK_OBJECT(label_widget),
-					       "label", g_list_nth_data(*list, menu_item),
-					       NULL);
-			}
-#if 0
-		}
-#endif
-	}
-	return menu_item;
-}
-
-static void
-e_contact_editor_build_ui_info(GList *list, GnomeUIInfo **infop)
-{
-	GnomeUIInfo *info;
-	GnomeUIInfo singleton = { GNOME_APP_UI_TOGGLEITEM, NULL, NULL, NULL, NULL, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL };
-	GnomeUIInfo end = GNOMEUIINFO_END;
-	int length;
-	int i;
-
-	info = *infop;
-
-	if ( info )
-		g_free(info);
-	length = g_list_length( list );
-	info = g_new(GnomeUIInfo, length + 2);
-	for (i = 0; i < length; i++) {
-		info[i] = singleton;
-		info[i].label = _(list->data);
-		list = list->next;
-	}
-	info[i] = end;
-
-	*infop = info;
-}
-
-#if 0
-static void
-_dialog_clicked(GtkWidget *dialog, gint button, EContactEditor *editor)
-{
-	GtkWidget *label = gtk_object_get_data(GTK_OBJECT(dialog),
-					       "e_contact_editor_label");
-
-	GtkWidget *dialog_entry = gtk_object_get_data(GTK_OBJECT(dialog),
-						      "e_contact_editor_dialog_entry");
-	
-	GList **list = gtk_object_get_data(GTK_OBJECT(dialog),
-					   "e_contact_editor_list");
-	GList **info = gtk_object_get_data(GTK_OBJECT(dialog),
-					   "e_contact_editor_info");
-	switch (button) {
-	case 0:
-		if (label && GTK_IS_LABEL(label)) {
-			gtk_object_set(GTK_OBJECT(label),
-				       "label", gtk_entry_get_text(GTK_ENTRY(dialog_entry)),
-				       NULL);
-			*list = g_list_append(*list, g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog_entry))));
-			g_free(*info);
-			*info = NULL;
-		}
-		break;
-	}
-	gnome_dialog_close(GNOME_DIALOG(dialog));
-}
-
-static void
-_dialog_destroy(EContactEditor *editor, GtkWidget *dialog)
-{
-	gnome_dialog_close(GNOME_DIALOG(dialog));
-}
-
-static GtkWidget *
-e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info)
-{
-	GtkWidget *dialog_entry = gtk_entry_new();
-	GtkWidget *entry = glade_xml_get_widget(editor->gui, entry_id);
-	GtkWidget *label = glade_xml_get_widget(editor->gui, label_id);
-	
-	GtkWidget *dialog = gnome_dialog_new(title,
-					     NULL);
-	
-	gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(dialog)->vbox),
-			  gtk_widget_new (gtk_frame_get_type(),
-					  "border_width", 4,
-					  "label", title,
-					  "child", gtk_widget_new(gtk_alignment_get_type(),
-								  "child", dialog_entry,
-								  "xalign", .5,
-								  "yalign", .5,
-								  "xscale", 1.0,
-								  "yscale", 1.0,
-								  "border_width", 9,
-								  NULL),
-					  NULL));
-
-	gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(dialog),
-					       "Add",
-					       GNOME_STOCK_PIXMAP_ADD);
-	gnome_dialog_append_button(GNOME_DIALOG(dialog), GNOME_STOCK_BUTTON_CANCEL);
-	gnome_dialog_set_default(GNOME_DIALOG(dialog), 0);
-	
-	gtk_signal_connect(GTK_OBJECT(dialog), "clicked",
-			   _dialog_clicked, editor);
-	gtk_signal_connect_while_alive(GTK_OBJECT(editor), "destroy",
-				       _dialog_destroy, GTK_OBJECT(dialog), GTK_OBJECT(dialog));
-	
-	gtk_object_set_data(GTK_OBJECT(dialog),
-			    "e_contact_editor_entry", entry);
-	gtk_object_set_data(GTK_OBJECT(dialog),
-			    "e_contact_editor_label", label);
-	gtk_object_set_data(GTK_OBJECT(dialog),
-			    "e_contact_editor_dialog_entry", dialog_entry);
-	gtk_object_set_data(GTK_OBJECT(dialog),
-			    "e_contact_editor_list", list);
-	gtk_object_set_data(GTK_OBJECT(dialog),
-			    "e_contact_editor_info", info);
-
-	gtk_widget_show_all(dialog);
-	return dialog;
-}
-#endif
-
-static void
-_phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
-{
-	int which;
-	int i;
-	gchar *label;
-	gchar *entry;
-	int result;
-	if ( widget == glade_xml_get_widget(editor->gui, "button-phone1") ) {
-		which = 1;
-	} else if ( widget == glade_xml_get_widget(editor->gui, "button-phone2") ) {
-		which = 2;
-	} else if ( widget == glade_xml_get_widget(editor->gui, "button-phone3") ) {
-		which = 3;
-	} else if ( widget == glade_xml_get_widget(editor->gui, "button-phone4") ) {
-		which = 4;
-	} else
-		return;
-	
-	label = g_strdup_printf("label-phone%d", which);
-	entry = g_strdup_printf("entry-phone%d", which);
-
-	if (editor->phone_list == NULL) {
-		static char *info[] = {
-			N_("Assistant"),
-			N_("Business"),
-			N_("Business 2"),
-			N_("Business Fax"),
-			N_("Callback"),
-			N_("Car"),
-			N_("Company"),
-			N_("Home"),
-			N_("Home 2"),
-			N_("Home Fax"),
-			N_("ISDN"),
-			N_("Mobile"),
-			N_("Other"),
-			N_("Other Fax"),
-			N_("Pager"),
-			N_("Primary"),
-			N_("Radio"),
-			N_("Telex"),
-			N_("TTY/TDD")
-		};
-		
-		for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
-			editor->phone_list = g_list_append(editor->phone_list, g_strdup(info[i]));
-		}
-	}
-	if (editor->phone_info == NULL) {
-		e_contact_editor_build_ui_info(editor->phone_list, &editor->phone_info);
-		
-		if ( editor->phone_popup )
-			gtk_widget_unref(editor->phone_popup);
-		
-		editor->phone_popup = gnome_popup_menu_new(editor->phone_info);
-	}
-	
-	for(i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++) {
-		const ECardPhone *phone = e_card_simple_get_phone(editor->simple, i);
-		gboolean checked;
-		checked = phone && phone->number && *phone->number;
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->phone_info[i].widget),
-					       checked);
-		gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(editor->phone_info[i].widget),
-						    TRUE);
-	}
-	
-	result = _arrow_pressed (widget, button, editor, editor->phone_popup, &editor->phone_list, &editor->phone_info, label, entry, "Add new phone number type");
-	
-	if (result != -1) {
-		editor->phone_choice[which - 1] = result;
-		set_fields(editor);
-	}
-
-	g_free(label);
-	g_free(entry);
-}
-
-static void
-_email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
-{
-	int i;
-	int result;
-	if (editor->email_list == NULL) {
-		static char *info[] = {
-			N_("Primary Email"),
-			N_("Email 2"),
-			N_("Email 3")
-		};
-		
-		for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
-			editor->email_list = g_list_append(editor->email_list, g_strdup(info[i]));
-		}
-	}
-	if (editor->email_info == NULL) {
-		e_contact_editor_build_ui_info(editor->email_list, &editor->email_info);
-
-		if ( editor->email_popup )
-			gtk_widget_unref(editor->email_popup);
-		
-		editor->email_popup = gnome_popup_menu_new(editor->email_info);
-	}
-	
-	for(i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++) {
-		const char *string = e_card_simple_get_email(editor->simple, i);
-		gboolean checked;
-		checked = string && *string;
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->email_info[i].widget),
-					       checked);
-		gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(editor->email_info[i].widget),
-						    TRUE);
-	}
-	
-	result = _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type");
-	
-	if (result != -1) {
-		editor->email_choice = result;
-		set_fields(editor);
-	}
-}
-
-static void
-_address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
-{
-	int i;
-	int result;
-	if (editor->address_list == NULL) {
-		static char *info[] = {
-			N_("Business"),
-			N_("Home"),
-			N_("Other")
-		};
-		
-		for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) {
-			editor->address_list = g_list_append(editor->address_list, g_strdup(info[i]));
-		}
-	}
-	if (editor->address_info == NULL) {
-		e_contact_editor_build_ui_info(editor->address_list, &editor->address_info);
-
-		if ( editor->address_popup )
-			gtk_widget_unref(editor->address_popup);
-		
-		editor->address_popup = gnome_popup_menu_new(editor->address_info);
-	}
-	
-	for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) {
-		const ECardAddrLabel *address = e_card_simple_get_address(editor->simple, i);
-		gboolean checked;
-		checked = address && address->data && *address->data;
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->address_info[i].widget),
-					       checked);
-		gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(editor->address_info[i].widget),
-						    TRUE);
-	}
-	
-	result = _arrow_pressed (widget, button, editor, editor->address_popup, &editor->address_list, &editor->address_info, "label-address", "text-address", "Add new Address type");
-
-	if (result != -1) {
-		set_address_field(editor, result);
-	}
-}
-
-static void
-set_field(GtkEntry *entry, const char *string)
-{
-	char *oldstring = gtk_entry_get_text(entry);
-	if (!string)
-		string = "";
-	if (strcmp(string, oldstring))
-		gtk_entry_set_text(entry, string);
-}
-
-static void
-set_phone_field(GtkWidget *entry, const ECardPhone *phone)
-{
-	set_field(GTK_ENTRY(entry), phone ? phone->number : "");
-}
-
-static void
-set_fields(EContactEditor *editor)
-{
-	GtkWidget *entry;
-
-	entry = glade_xml_get_widget(editor->gui, "entry-phone1");
-	if (entry && GTK_IS_ENTRY(entry))
-		set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[0]));
-
-	entry = glade_xml_get_widget(editor->gui, "entry-phone2");
-	if (entry && GTK_IS_ENTRY(entry))
-		set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[1]));
-
-	entry = glade_xml_get_widget(editor->gui, "entry-phone3");
-	if (entry && GTK_IS_ENTRY(entry))
-		set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[2]));
-
-	entry = glade_xml_get_widget(editor->gui, "entry-phone4");
-	if (entry && GTK_IS_ENTRY(entry))
-		set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[3]));
-	
-	entry = glade_xml_get_widget(editor->gui, "entry-email1");
-	if (entry && GTK_IS_ENTRY(entry))
-		set_field(GTK_ENTRY(entry), e_card_simple_get_email(editor->simple, editor->email_choice));
-	
-	set_address_field(editor, -1);
-}
-
-static void
-set_address_field(EContactEditor *editor, int result)
-{
-	GtkWidget *widget;
-	
-	widget = glade_xml_get_widget(editor->gui, "text-address");
-
-	if (widget && GTK_IS_TEXT(widget)) {
-		int position;
-		GtkEditable *editable;
-		const ECardAddrLabel *address;
-
-		if (result == -1)
-			result = editor->address_choice;
-		editor->address_choice = -1;
-
-		position = 0;
-		editable = GTK_EDITABLE(widget);
-		gtk_editable_delete_text(editable, 0, -1);
-		address = e_card_simple_get_address(editor->simple, result);
-		if (address && address->data)
-			gtk_editable_insert_text(editable, address->data, strlen(address->data), &position);
-
-		editor->address_choice = result;
-	}
-}
-
-static void
-add_field_callback(GtkWidget *widget, EContactEditor *editor)
-{
-	const char *name;
-	int i;
-	static const char *builtins[] = {
-		"entry-fullname",
-		"entry-web",
-		"entry-company",
-		"entry-department",
-		"entry-office",
-		"entry-jobtitle",
-		"entry-profession",
-		"entry-manager",
-		"entry-assistant",
-		"entry-nickname",
-		"entry-spouse",
-		"text-comments",
-		"entry-categories",
-		"entry-contacts",
-		"entry-file-as",
-		"dateedit-anniversary",
-		"dateedit-birthday",
-		"entry-phone1",
-		"entry-phone2",
-		"entry-phone3",
-		"entry-phone4",
-		"entry-email1",
-		"text-address",
-		"checkbutton-mailingaddress",
-		"checkbutton-htmlmail",
-		NULL
-	};
-	name = glade_get_widget_name(widget);
-	if (name) {
-		for (i = 0; builtins[i]; i++) {
-			if (!strcmp(name, builtins[i]))
-				return;
-		}
-		if (GTK_IS_ENTRY(widget) || GTK_IS_TEXT(widget)) {
-			editor->arbitrary_fields = g_list_prepend(editor->arbitrary_fields, g_strdup(name));
-		}
-	}
-}
-
-struct {
-	char *id;
-	char *key;
-} field_mapping [] = {
-	{ "entry-fullname", "full_name" },
-	{ "entry-web", "url" },
-	{ "entry-company", "org" },
-	{ "entry-department", "org_unit" },
-	{ "entry-office", "office" },
-	{ "entry-jobtitle", "title" },
-	{ "entry-profession", "role" },
-	{ "entry-manager", "manager" },
-	{ "entry-assistant", "assistant" },
-	{ "entry-nickname", "nickname" },
-	{ "entry-spouse", "spouse" },
-	{ "text-comments", "note" },
-	{ "entry-categories", "categories" },
-};
-
-static void
-fill_in_field(EContactEditor *editor, char *id, char *value)
-{
-	GtkWidget *widget = glade_xml_get_widget(editor->gui, id);
-	if (widget && GTK_IS_EDITABLE(widget)) {
-		int position = 0;
-		GtkEditable *editable = GTK_EDITABLE(widget);
-		gtk_editable_delete_text(editable, 0, -1);
-		if (value)
-			gtk_editable_insert_text(editable, value, strlen(value), &position);
-	}
-}
-
-static void
-fill_in_card_field(EContactEditor *editor, ECard *card, char *id, char *key)
-{
-	char *string;
-	gtk_object_get(GTK_OBJECT(card),
-		       key, &string,
-		       NULL);
-	fill_in_field(editor, id, string);
-}
-
-static void
-fill_in_single_field(EContactEditor *editor, char *name)
-{
-	ECardSimple *simple = editor->simple;
-	GtkWidget *widget = glade_xml_get_widget(editor->gui, name);
-	if (widget && GTK_IS_EDITABLE(widget)) {
-		int position = 0;
-		GtkEditable *editable = GTK_EDITABLE(widget);
-		const ECardArbitrary *arbitrary;
-
-		gtk_editable_delete_text(editable, 0, -1);
-		arbitrary = e_card_simple_get_arbitrary(simple,
-							name);
-		if (arbitrary && arbitrary->value)
-			gtk_editable_insert_text(editable, arbitrary->value, strlen(arbitrary->value), &position);
-	}
-}
-
-static void
-fill_in_info(EContactEditor *editor)
-{
-	ECard *card = editor->card;
-	if (card) {
-		char *file_as;
-		ECardName *name;
-		const ECardDate *anniversary;
-		const ECardDate *bday;
-		int i;
-		GtkWidget *widget;
-		GList *list;
-
-		gtk_object_get(GTK_OBJECT(card),
-			       "file_as",       &file_as,
-			       "name",          &name,
-			       "anniversary",   &anniversary,
-			       "birth_date",    &bday,
-			       NULL);
-	
-		for (i = 0; i < sizeof(field_mapping) / sizeof(field_mapping[0]); i++) {
-			fill_in_card_field(editor, card, field_mapping[i].id, field_mapping[i].key);
-		}
-
-		for (list = editor->arbitrary_fields; list; list = list->next) {
-			fill_in_single_field(editor, list->data);
-		}
-
-		/* File as has to come after company and name or else it'll get messed up when setting them. */
-		fill_in_field(editor, "entry-file-as", file_as);
-		
-		e_card_name_free(editor->name);
-		editor->name = e_card_name_copy(name);
-
-		widget = glade_xml_get_widget(editor->gui, "dateedit-anniversary");
-		if (anniversary && widget && GNOME_IS_DATE_EDIT(widget)) {
-			struct tm time_struct = {0,0,0,0,0,0,0,0,0};
-			time_t time_val;
-			GnomeDateEdit *dateedit;
-
-			time_struct.tm_mday = anniversary->day;
-			time_struct.tm_mon = anniversary->month - 1;
-			time_struct.tm_year = anniversary->year - 1900;
-			time_val = mktime(&time_struct);
-			dateedit = GNOME_DATE_EDIT(widget);
-			gnome_date_edit_set_time(dateedit, time_val);
-		}
-
-		widget = glade_xml_get_widget(editor->gui, "dateedit-birthday");
-		if (bday && widget && GNOME_IS_DATE_EDIT(widget)) {
-			struct tm time_struct = {0,0,0,0,0,0,0,0,0};
-			time_t time_val;
-			GnomeDateEdit *dateedit;
-			time_struct.tm_mday = bday->day;
-			time_struct.tm_mon = bday->month - 1;
-			time_struct.tm_year = bday->year - 1900;
-			time_val = mktime(&time_struct);
-			dateedit = GNOME_DATE_EDIT(widget);
-			gnome_date_edit_set_time(dateedit, time_val);
-		}
-
-		set_fields(editor);
-	}
-}
-
-static void
-extract_field(EContactEditor *editor, ECard *card, char *editable_id, char *key)
-{
-	GtkWidget *widget = glade_xml_get_widget(editor->gui, editable_id);
-	if (widget && GTK_IS_EDITABLE(widget)) {
-		GtkEditable *editable = GTK_EDITABLE(widget);
-		char *string = gtk_editable_get_chars(editable, 0, -1);
-		if (string && *string)
-			gtk_object_set(GTK_OBJECT(card),
-				       key, string,
-				       NULL);
-		else
-			gtk_object_set(GTK_OBJECT(card),
-				       key, NULL,
-				       NULL);
-		g_free(string);
-	}
-}
-
-static void
-extract_single_field(EContactEditor *editor, char *name)
-{
-	GtkWidget *widget = glade_xml_get_widget(editor->gui, name);
-	ECardSimple *simple = editor->simple;
-	if (widget && GTK_IS_EDITABLE(widget)) {
-		GtkEditable *editable = GTK_EDITABLE(widget);
-		char *string = gtk_editable_get_chars(editable, 0, -1);
-
-		if (string && *string)
-			e_card_simple_set_arbitrary(simple,
-						    name,
-						    NULL,
-						    string);
-		else
-			e_card_simple_set_arbitrary(simple,
-						    name,
-						    NULL,
-						    NULL);
-		g_free(string);
-	}
-}
-
-static void
-extract_info(EContactEditor *editor)
-{
-	ECard *card = editor->card;
-	if (card) {
-		ECardDate *anniversary;
-		ECardDate *bday;
-		struct tm time_struct;
-		time_t time_val;
-		int i;
-		GtkWidget *widget;
-		GList *list;
-
-		widget = glade_xml_get_widget(editor->gui, "entry-file-as");
-		if (widget && GTK_IS_EDITABLE(widget)) {
-			GtkEditable *editable = GTK_EDITABLE(widget);
-			char *string = gtk_editable_get_chars(editable, 0, -1);
-			if (string && *string)
-				gtk_object_set(GTK_OBJECT(card),
-					       "file_as", string,
-					       NULL);
-			g_free(string);
-		}
-
-		for (i = 0; i < sizeof(field_mapping) / sizeof(field_mapping[0]); i++) {
-			extract_field(editor, card, field_mapping[i].id, field_mapping[i].key);
-		}
-
-		for (list = editor->arbitrary_fields; list; list = list->next) {
-			extract_single_field(editor, list->data);
-		}
-
-		if (editor->name)
-			gtk_object_set(GTK_OBJECT(card),
-				       "name", editor->name,
-				       NULL);
-
-		widget = glade_xml_get_widget(editor->gui, "dateedit-anniversary");
-		if (widget && GNOME_IS_DATE_EDIT(widget)) {
-			time_val = gnome_date_edit_get_date(GNOME_DATE_EDIT(widget));
-			gmtime_r(&time_val,
-				 &time_struct);
-			anniversary = g_new(ECardDate, 1);
-			anniversary->day   = time_struct.tm_mday;
-			anniversary->month = time_struct.tm_mon + 1;
-			anniversary->year  = time_struct.tm_year + 1900;
-			gtk_object_set(GTK_OBJECT(card),
-				       "anniversary", anniversary,
-				       NULL);
-		}
-
-		widget = glade_xml_get_widget(editor->gui, "dateedit-birthday");
-		if (widget && GNOME_IS_DATE_EDIT(widget)) {
-			time_val = gnome_date_edit_get_date(GNOME_DATE_EDIT(widget));
-			gmtime_r(&time_val,
-				 &time_struct);
-			bday = g_new(ECardDate, 1);
-			bday->day   = time_struct.tm_mday;
-			bday->month = time_struct.tm_mon + 1;
-			bday->year  = time_struct.tm_year + 1900;
-			gtk_object_set(GTK_OBJECT(card),
-				       "birth_date", bday,
-				       NULL);
-		}
-	}
-}
diff --git a/addressbook/contact-editor/e-contact-editor.h b/addressbook/contact-editor/e-contact-editor.h
deleted file mode 100644
index de14b84ca3..0000000000
--- a/addressbook/contact-editor/e-contact-editor.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-contact-editor.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef __E_CONTACT_EDITOR_H__
-#define __E_CONTACT_EDITOR_H__
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* EContactEditor - A dialog displaying information about a contact.
- *
- * The following arguments are available:
- *
- * name		type		read/write	description
- * --------------------------------------------------------------------------------
- * card         ECard *         RW              The card currently being edited
- */
-
-#define E_CONTACT_EDITOR_TYPE			(e_contact_editor_get_type ())
-#define E_CONTACT_EDITOR(obj)			(GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_TYPE, EContactEditor))
-#define E_CONTACT_EDITOR_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_TYPE, EContactEditorClass))
-#define E_IS_CONTACT_EDITOR(obj)		(GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_TYPE))
-#define E_IS_CONTACT_EDITOR_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_TYPE))
-
-
-typedef struct _EContactEditor       EContactEditor;
-typedef struct _EContactEditorClass  EContactEditorClass;
-
-struct _EContactEditor
-{
-	GtkObject object;
-	
-	/* item specific fields */
-	ECard *card;
-	ECardSimple *simple;
-
-	/* UI handler */
-	BonoboUIHandler *uih;
-	
-	GladeXML *gui;
-	GtkWidget *app;
-	GnomeUIInfo *email_info;
-	GnomeUIInfo *phone_info;
-	GnomeUIInfo *address_info;
-	GtkWidget *email_popup;
-	GtkWidget *phone_popup;
-	GtkWidget *address_popup;
-	GList *email_list;
-	GList *phone_list;
-	GList *address_list;
-
-	ECardName *name;
-	char *company;
-
-	ECardSimpleEmailId email_choice;
-	ECardSimplePhoneId phone_choice[4];
-	ECardSimpleAddressId address_choice;
-	
-	GList *arbitrary_fields;
-
-	/* Whether we are editing a new card or an existing one */
-	guint is_new_card : 1;
-};
-
-struct _EContactEditorClass
-{
-	GtkObjectClass parent_class;
-
-	/* Notification signals */
-
-	void (* add_card) (EContactEditor *ce, ECard *card);
-	void (* commit_card) (EContactEditor *ce, ECard *card);
-	void (* delete_card) (EContactEditor *ce, ECard *card);
-	void (* editor_closed) (EContactEditor *ce);
-};
-
-
-EContactEditor *e_contact_editor_new (ECard *card, gboolean is_new_card);
-GtkType    e_contact_editor_get_type (void);
-
-
-gboolean e_contact_editor_confirm_delete(void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CONTACT_EDITOR_H__ */
diff --git a/addressbook/contact-editor/e-contact-save-as.c b/addressbook/contact-editor/e-contact-save-as.c
deleted file mode 100644
index 51cb2619e7..0000000000
--- a/addressbook/contact-editor/e-contact-save-as.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-contact-editor.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-
-typedef struct {
-	GtkFileSelection *filesel;
-	ECard *card;
-} SaveAsInfo;
-
-static void
-save_it(GtkWidget *widget, SaveAsInfo *info)
-{
-	char *vcard = e_card_get_vcard(info->card);
-	const char *filename = gtk_file_selection_get_filename(info->filesel);
-	e_write_file(filename, vcard, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC);
-	g_free(vcard);
-	gtk_object_unref(GTK_OBJECT(info->card));
-	gtk_widget_destroy(GTK_WIDGET(info->filesel));
-	g_free(info);
-}
-
-static void
-close_it(GtkWidget *widget, SaveAsInfo *info)
-{
-	gtk_object_unref(GTK_OBJECT(info->card));
-	gtk_widget_destroy(GTK_WIDGET(info->filesel));
-	g_free(info);
-}
-
-static void
-delete_it(GtkWidget *widget, SaveAsInfo *info)
-{
-	gtk_object_unref(GTK_OBJECT(info->card));
-	g_free(info);
-}
-
-void
-e_contact_save_as(char *title, ECard *card)
-{
-	GtkFileSelection *filesel;
-	SaveAsInfo *info = g_new(SaveAsInfo, 1);
-	
-	filesel = GTK_FILE_SELECTION(gtk_file_selection_new(title));
-
-	info->filesel = filesel;
-	info->card = e_card_duplicate(card);
-	
-	gtk_signal_connect(GTK_OBJECT(filesel->ok_button), "clicked",
-			   save_it, info);
-	gtk_signal_connect(GTK_OBJECT(filesel->cancel_button), "clicked",
-			   close_it, info);
-	gtk_signal_connect(GTK_OBJECT(filesel), "delete_event",
-			   delete_it, info);
-	gtk_widget_show(GTK_WIDGET(filesel));
-}
diff --git a/addressbook/contact-editor/e-contact-save-as.h b/addressbook/contact-editor/e-contact-save-as.h
deleted file mode 100644
index e6af13e8fd..0000000000
--- a/addressbook/contact-editor/e-contact-save-as.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-contact-save-as.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef __E_CONTACT_SAVE_AS_H__
-#define __E_CONTACT_SAVE_AS_H__
-
-#include 
-#include 
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-void
-e_contact_save_as(gchar *title, ECard *card);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CONTACT_EDITOR_H__ */
diff --git a/addressbook/contact-editor/email.png b/addressbook/contact-editor/email.png
deleted file mode 100644
index f3ff02e343..0000000000
Binary files a/addressbook/contact-editor/email.png and /dev/null differ
diff --git a/addressbook/contact-editor/fullname-strings.h b/addressbook/contact-editor/fullname-strings.h
deleted file mode 100644
index 0c84dfdc8f..0000000000
--- a/addressbook/contact-editor/fullname-strings.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("Check Full Name");
-gchar *s = N_("_Title:");
-gchar *s = N_("_First:");
-gchar *s = N_("_Middle:");
-gchar *s = N_("_Last:");
-gchar *s = N_("_Suffix:");
-gchar *s = N_("\n"
-              "Mr.\n"
-              "Mrs.\n"
-              "Dr.\n"
-              "");
-gchar *s = N_("\n"
-              "Sr.\n"
-              "Jr.\n"
-              "I\n"
-              "II\n"
-              "III\n"
-              "Esq.\n"
-              "");
diff --git a/addressbook/contact-editor/fullname.glade b/addressbook/contact-editor/fullname.glade
deleted file mode 100644
index 8f811c5616..0000000000
--- a/addressbook/contact-editor/fullname.glade
+++ /dev/null
@@ -1,391 +0,0 @@
-
-
-
-
-  fullname
-  fullname
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  True
-  False
-  False
-  False
-  True
-  interface.c
-  interface.h
-  callbacks.c
-  callbacks.h
-  support.c
-  support.h
-  True
-  fullname-strings.h
-
-
-
-  GnomeDialog
-  dialog-checkfullname
-  False
-  Check Full Name
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  True
-  True
-  True
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    vbox-container
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkTable
-      table-checkfullname
-      8
-      5
-      3
-      False
-      6
-      21
-      
-	0
-	True
-	True
-      
-
-      
-	GtkAccelLabel
-	accellabel1
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  0
-	  1
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkAccelLabel
-	accellabel2
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  1
-	  2
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkAccelLabel
-	accellabel3
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  2
-	  3
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkAccelLabel
-	accellabel4
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  3
-	  4
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkAccelLabel
-	accellabel5
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  4
-	  5
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkCombo
-	combo-title
-	False
-	True
-	False
-	True
-	False
-	
-Mr.
-Mrs.
-Dr.
-
-	
-	  1
-	  2
-	  0
-	  1
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-
-	
-	  GtkEntry
-	  GtkCombo:entry
-	  entry-title
-	  True
-	  True
-	  True
-	  0
-	  
-	
-      
-
-      
-	GtkCombo
-	combo-suffix
-	False
-	True
-	False
-	True
-	False
-	
-Sr.
-Jr.
-I
-II
-III
-Esq.
-
-	
-	  1
-	  2
-	  4
-	  5
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-
-	
-	  GtkEntry
-	  GtkCombo:entry
-	  entry-suffix
-	  True
-	  True
-	  True
-	  0
-	  
-	
-      
-
-      
-	GtkEntry
-	entry-first
-	True
-	True
-	True
-	0
-	
-	
-	  1
-	  3
-	  1
-	  2
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkEntry
-	entry-middle
-	True
-	True
-	True
-	0
-	
-	
-	  1
-	  3
-	  2
-	  3
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkEntry
-	entry-last
-	True
-	True
-	True
-	0
-	
-	
-	  1
-	  3
-	  3
-	  4
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      hbuttonbox1
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button1
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	button2
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-  
-
-
-
diff --git a/addressbook/contact-editor/head.png b/addressbook/contact-editor/head.png
deleted file mode 100644
index ca00b75f92..0000000000
Binary files a/addressbook/contact-editor/head.png and /dev/null differ
diff --git a/addressbook/contact-editor/netfreebusy.png b/addressbook/contact-editor/netfreebusy.png
deleted file mode 100644
index 09ec8a2a5c..0000000000
Binary files a/addressbook/contact-editor/netfreebusy.png and /dev/null differ
diff --git a/addressbook/contact-editor/netmeeting.png b/addressbook/contact-editor/netmeeting.png
deleted file mode 100644
index 4cb90c121e..0000000000
Binary files a/addressbook/contact-editor/netmeeting.png and /dev/null differ
diff --git a/addressbook/contact-editor/phone.png b/addressbook/contact-editor/phone.png
deleted file mode 100644
index ebec84ba0b..0000000000
Binary files a/addressbook/contact-editor/phone.png and /dev/null differ
diff --git a/addressbook/contact-editor/snailmail.png b/addressbook/contact-editor/snailmail.png
deleted file mode 100644
index 647ae8f68c..0000000000
Binary files a/addressbook/contact-editor/snailmail.png and /dev/null differ
diff --git a/addressbook/contact-editor/test-editor.c b/addressbook/contact-editor/test-editor.c
deleted file mode 100644
index 80db2fe848..0000000000
--- a/addressbook/contact-editor/test-editor.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * test-editor.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-
-#include 
-#include 
-#include "e-contact-editor.h"
-
-#define TEST_VCARD                   \
-"BEGIN:VCARD
-"                      \
-"FN:Nat
-"                           \
-"N:Friedman;Nat;D;Mr.
-"             \
-"BDAY:1977-08-06
-"                  \
-"TEL;WORK:617 679 1984
-"            \
-"TEL;CELL:123 456 7890
-"            \
-"EMAIL;INTERNET:nat@nat.org
-"       \
-"EMAIL;INTERNET:nat@helixcode.com
-" \
-"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234;
-" \
-"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA
-" \
-"END:VCARD
-"                        \
-"
-"
-
-static char *
-read_file (char *name)
-{
-	int  len;
-	char buff[65536];
-	char line[1024];
-	FILE *f;
-
-	f = fopen (name, "r");
-	if (f == NULL)
-		g_error ("Unable to open %s!\n", name);
-
-	len  = 0;
-	while (fgets (line, sizeof (line), f) != NULL) {
-		strcpy (buff + len, line);
-		len += strlen (line);
-	}
-
-	fclose (f);
-
-	return g_strdup (buff);
-}
-
-/* Callback used when a contact editor is closed */
-static void
-editor_closed_cb (EContactEditor *ce, gpointer data)
-{
-	static int count = 2;
-
-	count--;
-	gtk_object_unref (GTK_OBJECT (ce));
-
-	if (count == 0)
-		exit (0);
-}
-
-#if 0
-static void about_callback( GtkWidget *widget, gpointer data )
-{
-
-  const gchar *authors[] =
-  {
-    "Christopher James Lahey ",
-    NULL
-  };
-
-  GtkWidget *about =
-    gnome_about_new ( _( "Contact Editor Test" ), VERSION,
-		      _( "Copyright (C) 2000, Helix Code, Inc." ),
-		      authors,
-		      _( "This should test the contact editor canvas item" ),
-		      NULL);
-  gtk_widget_show (about);
-}
-#endif
-
-int main( int argc, char *argv[] )
-{
-	char *cardstr;
-	EContactEditor *ce;
-
-	/*  bindtextdomain (PACKAGE, GNOMELOCALEDIR);
-	    textdomain (PACKAGE);*/
-
-	gnome_init( "Contact Editor Test", VERSION, argc, argv);
-
-	glade_gnome_init ();
-
-	cardstr = NULL;
-	if (argc == 2)
-		cardstr = read_file (argv [1]);
-
-	if (cardstr == NULL)
-		cardstr = TEST_VCARD;
-
-	ce = e_contact_editor_new (e_card_new (cardstr), TRUE);
-	gtk_signal_connect (GTK_OBJECT (ce), "editor_closed",
-			    GTK_SIGNAL_FUNC (editor_closed_cb), NULL);
-
-	ce = e_contact_editor_new (e_card_new (cardstr), TRUE);
-	gtk_signal_connect (GTK_OBJECT (ce), "editor_closed",
-			    GTK_SIGNAL_FUNC (editor_closed_cb), NULL);
-
-	gtk_main();
-
-	/* Not reached. */
-	return 0;
-}
diff --git a/addressbook/contact-editor/web.png b/addressbook/contact-editor/web.png
deleted file mode 100644
index 3211a11b19..0000000000
Binary files a/addressbook/contact-editor/web.png and /dev/null differ
diff --git a/addressbook/demo/.cvsignore b/addressbook/demo/.cvsignore
deleted file mode 100644
index a0427f184f..0000000000
--- a/addressbook/demo/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
-evolution-addressbook
-test-addressbook
\ No newline at end of file
diff --git a/addressbook/demo/Makefile.am b/addressbook/demo/Makefile.am
deleted file mode 100644
index 1a7e4e6d01..0000000000
--- a/addressbook/demo/Makefile.am
+++ /dev/null
@@ -1,63 +0,0 @@
-INCLUDES =					\
-	$(EXTRA_GNOME_CFLAGS)			\
-	$(GNOME_INCLUDEDIR)			\
-	-I$(top_srcdir)/widgets/e-text		\
-	-I$(top_srcdir)/e-util			\
-	-I$(top_srcdir)/widgets/e-table		\
-	-I$(top_srcdir)				\
-	-I$(top_srcdir)/widgets/e-minicard	\
-	-I$(top_srcdir)/addressbook/backend/ebook	\
-	$(BONOBO_HTML_GNOME_CFLAGS)			\
-	-DEVOLUTION_VERSION=\""$(VERSION)"\"		\
-	-DEVOLUTION_GLADEDIR=\""$(gladedir)"\"		\
-	-DEVOLUTION_ICONSDIR=\""$(iconsdir)"\"		\
-	-DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\"	\
-	-DCAMEL_PROVIDERDIR=\""$(providerdir)"\"	\
-	-DG_LOG_DOMAIN=\"addressbook-demo\"			
-
-noinst_PROGRAMS =	\
-	test-addressbook
-
-test_addressbook_SOURCES =		\
-	demo.c				\
-	e-test-model.c			\
-	e-test-model.h
-
-test_addressbook_LDADD =				\
-	$(EXTRA_GNOME_LIBS)			\
-	$(BONOBO_HTML_GNOME_LIBS)			\
-	$(top_builddir)/widgets/e-minicard/libeminicard.a	\
-	$(top_builddir)/widgets/e-table/libetable.a	\
-	$(top_builddir)/widgets/e-text/libetext.a	\
-	$(top_builddir)/e-util/libeutil.la		\
-	$(top_builddir)/addressbook/backend/ebook/libebook.la	\
-	$(top_builddir)/libversit/libversit.la
-
-test_addressbook_LDFLAGS = `gnome-config --libs gdk_pixbuf`
-
-bin_PROGRAMS =	\
-	evolution-addressbook
-
-evolution_addressbook_SOURCES = 	\
-	addressbook-factory.c		\
-	addressbook-widget.c		\
-	addressbook-widget.h		\
-	addressbook.c			\
-	addressbook.h			\
-	e-test-model.c			\
-	e-test-model.h
-
-evolution_addressbook_LDADD =				\
-	$(EXTRA_GNOME_LIBS)				\
-	$(BONOBO_HTML_GNOME_LIBS)			\
-	$(top_builddir)/widgets/e-minicard/libeminicard.a	\
-	$(top_builddir)/widgets/e-table/libetable.a	\
-	$(top_builddir)/widgets/e-text/libetext.a	\
-	$(top_builddir)/e-util/libeutil.la		\
-	$(top_builddir)/addressbook/backend/ebook/libebook.la	\
-	$(top_builddir)/libversit/libversit.la
-
-evolution_addressbook_LDFLAGS = `gnome-config --libs gdk_pixbuf`
-
-gnorbadir = $(sysconfdir)/CORBA/servers
-gnorba_DATA = addressbook.gnorba
diff --git a/addressbook/demo/addressbook-factory.c b/addressbook/demo/addressbook-factory.c
deleted file mode 100644
index cf59177f84..0000000000
--- a/addressbook/demo/addressbook-factory.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * sample-control-factory.c
- *
- * Copyright 1999, Helix Code, Inc.
- * 
- * Author:
- *   Nat Friedman (nat@nat.org)
- *
- */
-
-#include 
-#include 
-#include 
-#include 
-
-#include "addressbook.h"
-
-CORBA_Environment ev;
-CORBA_ORB orb;
-
-static void
-init_bonobo (int argc, char **argv)
-{
-
-	gnome_CORBA_init_with_popt_table (
-		"evolution-addressbook", "0.0",
-		&argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
-
-	orb = gnome_CORBA_ORB ();
-
-	if (bonobo_init (orb, NULL, NULL) == FALSE)
-		g_error (_("Could not initialize Bonobo"));
-}
-
-int
-main (int argc, char **argv)
-{
-	CORBA_exception_init (&ev);
-
-	init_bonobo (argc, argv);
-
-	addressbook_factory_init ();
-
-	bonobo_main ();
-
-	return 0;
-}
diff --git a/addressbook/demo/addressbook-widget.c b/addressbook/demo/addressbook-widget.c
deleted file mode 100644
index a4e4fb95e7..0000000000
--- a/addressbook/demo/addressbook-widget.c
+++ /dev/null
@@ -1,533 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * demo.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "e-util/e-cursors.h"
-#include "e-canvas.h"
-#include "e-table-simple.h"
-#include "e-table-header.h"
-#include "e-table-header-item.h"
-#include "e-table-item.h"
-#include "e-cell-text.h"
-#include "e-cell-checkbox.h"
-#include "e-table.h"
-#include "e-reflow.h"
-#include "e-minicard.h"
-#include 
-
-#include "e-test-model.h"
-
-#include "addressbook-widget.h"
-
-#define COLS 4
-
-/* Here we define the initial layout of the table.  This is an xml
-   format that allows you to change the initial ordering of the
-   columns or to do sorting or grouping initially.  This specification
-   shows all 5 columns, but moves the importance column nearer to the
-   front.  It also sorts by the "Full Name" column (ascending.)
-   Sorting and grouping take the model column as their arguments
-   (sorting is specified by the "column" argument to the leaf elemnt. */
-#define INITIAL_SPEC "                    	       \
-	                  			       \
-		 0      			       \
-		 1      			       \
-		 2      			       \
-		 3      			       \
-	                 			       \
-	      \
-"
-
-char *headers[COLS] = {
-  "Email",
-  "Full Name",
-  "Address",
-  "Phone"
-};
-
-static int window_count = 0;
-static GHashTable *models = NULL;
-
-static void
-remove_model(ETableModel *model, gchar *filename)
-{
-	g_hash_table_remove(models, filename);
-	g_free(filename);
-}
-
-static ETestModel *
-get_model(char *filename)
-{
-	ETestModel *model;
-	gboolean free_filename = FALSE;
-
-	if ( filename == NULL ) {
-		filename = gnome_util_prepend_user_home("addressbook.xml");
-		free_filename = TRUE;
-	}
-
-	if ( models == NULL ) {
-		models = g_hash_table_new(g_str_hash, g_str_equal);
-	}
-
-	model = g_hash_table_lookup(models, filename);
-	if ( model ) {
-		if (free_filename)
-			g_free(filename);
-		return model;
-	}
-
-	if ( !free_filename )
-		filename = g_strdup(filename);
-	
-	model = E_TEST_MODEL(e_test_model_new(filename));
-	g_hash_table_insert(models,
-			    filename, model);
-	gtk_signal_connect(GTK_OBJECT(model), "destroy",
-			   GTK_SIGNAL_FUNC(remove_model), filename);
-
-	return model;
-}
-
-static void
-add_address_cb(GtkWidget *button, gpointer data)
-{
-	View *view = (View *) data;
-	Address *newadd = g_new(Address, 1);
-	newadd->email = g_strdup("");
-	newadd->phone = g_strdup("");
-	newadd->full_name = g_strdup("");
-	newadd->street = g_strdup("");
-	e_test_model_add_column (view->model, newadd);
-}
-
-static void
-rebuild_reflow(ETableModel *model, gpointer data)
-{
-	int i;
-	View *view = (View *) data;
-	Reflow *reflow = view->reflow;
-	if (!reflow)
-		return;
-	gtk_object_destroy(GTK_OBJECT(reflow->reflow));
-	reflow->reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( reflow->canvas ) ),
-					      e_reflow_get_type(),
-					      "height", (double) reflow->last_alloc.height,
-					      "minimum_width", (double) reflow->last_alloc.width,
-					      NULL );
-
-	for ( i = 0; i < view->model->data_count; i++ )
-		{
-			GnomeCanvasItem *item;
-			item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow->reflow),
-						      e_minicard_get_type(),
-						      "model", view->model,
-						      "row", i,
-						      NULL);
-			e_reflow_add_item(E_REFLOW(reflow->reflow), item);
-		}
-	e_canvas_item_request_reflow(reflow->reflow);
-}
-
-static void
-destroy_reflow(View *view)
-{
-	Reflow *reflow = view->reflow;
-	if ( !reflow )
-		return;
-
-	gtk_signal_disconnect(GTK_OBJECT(view->model),
-			      reflow->model_changed_id);
-	g_free(reflow);
-	gtk_object_unref(GTK_OBJECT(view->model));
-	view->reflow = NULL;
-}
-
-static void
-destroy_callback(GtkWidget *app, gpointer data)
-{
-	View *view = (View *)data;
-	if ( view->reflow ) {
-		destroy_reflow(view);
-	}
-	gtk_object_unref(GTK_OBJECT(view->model));
-	g_free(view);
-	window_count --;
-	if ( window_count <= 0 )
-		gtk_main_quit();
-}
-
-static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data)
-{
-	double width;
-	View *view = (View *)data;
-	Reflow *reflow = view->reflow;
-	if ( !reflow )
-		return;
-	reflow->last_alloc = *allocation;
-	gnome_canvas_item_set( reflow->reflow,
-			       "height", (double) allocation->height,
-			       NULL );
-	gnome_canvas_item_set( reflow->reflow,
-			       "minimum_width", (double) allocation->width,
-			       NULL );
-	gtk_object_get(GTK_OBJECT(reflow->reflow),
-		       "width", &width,
-		       NULL);
-	width = MAX(width, allocation->width);
-	gnome_canvas_set_scroll_region(GNOME_CANVAS( reflow->canvas ), 0, 0, width, allocation->height );
-	gnome_canvas_item_set( reflow->rect,
-			       "x2", (double) width,
-			       "y2", (double) allocation->height,
-			       NULL );
-}
-
-static void resize(ECanvas *canvas, gpointer data)
-{
-	double width;
-	View *view = (View *)data;
-	Reflow *reflow = view->reflow;
-	if ( !reflow )
-		return;
-  	gtk_object_get(GTK_OBJECT(reflow->reflow),
-		       "width", &width,
-		       NULL);
-	width = MAX(width, reflow->last_alloc.width);
-	gnome_canvas_set_scroll_region(GNOME_CANVAS(reflow->canvas), 0, 0, width, reflow->last_alloc.height );
-	gnome_canvas_item_set( reflow->rect,
-			       "x2", (double) width,
-			       "y2", (double) reflow->last_alloc.height,
-			       NULL );	
-}
-
-static void
-canvas_realized(GtkLayout *layout, View *view)
-{
-	gdk_window_set_back_pixmap( layout->bin_window, NULL, FALSE);
-}
-
-static GtkWidget *
-create_reflow(View *view)
-{
-	GtkWidget *inner_vbox;
-	GtkWidget *scrollbar;
-	int i;
-	Reflow *reflow = g_new(Reflow, 1);
-	view->reflow = reflow;
-
-	view->type = VIEW_TYPE_REFLOW;
-
-	/* Next we create our model.  This uses the functions we defined
-	   earlier. */
-
-	inner_vbox = gtk_vbox_new(FALSE, 0);
-	reflow->canvas = e_canvas_new();
-	reflow->rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( reflow->canvas ) ),
-					    gnome_canvas_rect_get_type(),
-					    "x1", (double) 0,
-					    "y1", (double) 0,
-					    "x2", (double) 100,
-					    "y2", (double) 100,
-					    "fill_color", "white",
-					    NULL );
-	reflow->reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( reflow->canvas ) ),
-					      e_reflow_get_type(),
-					      "height", (double) 100,
-					      "minimum_width", (double) 100,
-					      NULL );
-	/* Connect the signals */
-	gtk_signal_connect( GTK_OBJECT( reflow->canvas ), "reflow",
-			    GTK_SIGNAL_FUNC( resize ),
-			    ( gpointer ) view);
-	
-	for ( i = 0; i < view->model->data_count; i++ )
-		{
-			GnomeCanvasItem *item;
-			item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow->reflow),
-						      e_minicard_get_type(),
-						      "model", view->model,
-						      "row", i,
-						      NULL);
-			e_reflow_add_item(E_REFLOW(reflow->reflow), item);
-		}
-	gnome_canvas_set_scroll_region ( GNOME_CANVAS( reflow->canvas ),
-					 0, 0,
-					 100, 100 );
-
-	scrollbar = gtk_hscrollbar_new(gtk_layout_get_hadjustment(GTK_LAYOUT(reflow->canvas)));
-
-	gtk_signal_connect( GTK_OBJECT( reflow->canvas ), "size_allocate",
-			    GTK_SIGNAL_FUNC( allocate_callback ),
-			    ( gpointer ) view );
-
-	gtk_signal_connect( GTK_OBJECT(reflow->canvas), "realize",
-			    GTK_SIGNAL_FUNC(canvas_realized), view);
-	
-	reflow->model_changed_id = gtk_signal_connect(GTK_OBJECT( view->model ), "model_changed",
-						      GTK_SIGNAL_FUNC(rebuild_reflow), view);
-
-	gtk_object_ref(GTK_OBJECT(view->model));
-
-	/* Build the gtk widget hierarchy. */
-	gtk_box_pack_start(GTK_BOX(inner_vbox), reflow->canvas, TRUE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(inner_vbox), scrollbar, FALSE, FALSE, 0);
-
-	return inner_vbox;
-}
-
-/* We create a window containing our new table. */
-static GtkWidget *
-create_table(View *view)
-{
-	ECell *cell_left_just;
-	ETableHeader *e_table_header;
-	GtkWidget *e_table;
-	int i;
-
-	view->type = VIEW_TYPE_TABLE;
-
-	/*
-	  Next we create a header.  The ETableHeader is used in two
-	  different way.  The first is the full_header.  This is the
-	  list of possible columns in the view.  The second use is
-	  completely internal.  Many of the ETableHeader functions are
-	  for that purpose.  The only functions we really need are
-	  e_table_header_new and e_table_header_add_col.
-
-	  First we create the header.  */
-	e_table_header = e_table_header_new ();
-	
-	/* Next we have to build renderers for all of the columns.
-	   Since all our columns are text columns, we can simply use
-	   the same renderer over and over again.  If we had different
-	   types of columns, we could use a different renderer for
-	   each column. */
-	cell_left_just = e_cell_text_new (E_TABLE_MODEL(view->model), NULL, GTK_JUSTIFY_LEFT);
-		
-	/* Next we create a column object for each view column and add
-	   them to the header.  We don't create a column object for
-	   the importance column since it will not be shown. */
-	for (i = 0; i < LAST_COL; i++){
-		/* Create the column. */
-		ETableCol *ecol = e_table_col_new (
-						   i, headers [i],
-						   80, 20, cell_left_just,
-						   g_str_compare, TRUE);
-		/* Add it to the header. */
-		e_table_header_add_column (e_table_header, ecol, i);
-	}
-
-	/* Here we create the table.  We give it the three pieces of
-	   the table we've created, the header, the model, and the
-	   initial layout.  It does the rest.  */
-	e_table = e_table_new_from_spec_file (e_table_header, E_TABLE_MODEL(view->model), "spec");
-
-#if 0
-	gtk_signal_connect(GTK_OBJECT(E_TABLE(e_table)->sort_info), "sort_info_changed",
-			   GTK_SIGNAL_FUNC(queue_header_save), e_table->sort_info);
-
-	gtk_signal_connect(GTK_OBJECT(E_TABLE(e_table)->header), "structure_change",
-			   GTK_SIGNAL_FUNC(queue_header_save), e_table->sort_info);
-	gtk_signal_connect(GTK_OBJECT(E_TABLE(e_table)->header), "dimension_change",
-			   GTK_SIGNAL_FUNC(queue_header_save), e_table->sort_info);
-#endif
-
-	return e_table;
-}
-
-void
-change_type(View *view, ViewType type)
-{
-	gtk_object_ref(GTK_OBJECT(view->model));
-	if (view->reflow)
-		destroy_reflow(view);
-	gtk_widget_destroy(view->child);
-	switch(type) {
-	case VIEW_TYPE_REFLOW:
-		view->child = create_reflow(view);
-		break;
-	case VIEW_TYPE_TABLE:
-		view->child = create_table(view);
-		break;
-	}
-	gtk_container_add(GTK_CONTAINER(view->frame), view->child);
-	gtk_widget_show_all(view->child);
-	gtk_object_unref(GTK_OBJECT(view->model));
-}
-
-View *
-create_view(void)
-{
-	View *view = g_new(View, 1);
-	ViewType type = VIEW_TYPE_REFLOW;
-	GtkWidget *button;
-
-	view->reflow = NULL;
-
-	view->model = get_model(NULL);
-
-	/* This frame is simply to get a bevel around our table. */
-	view->frame = gtk_frame_new (NULL);
-
-	switch(type) {
-	case VIEW_TYPE_REFLOW:
-		view->child = create_reflow(view);
-		break;
-	case VIEW_TYPE_TABLE:
-		view->child = create_table(view);
-		break;
-	}
-
-
-	gtk_signal_connect( GTK_OBJECT( view->child ), "destroy",
-			    GTK_SIGNAL_FUNC( destroy_callback ),
-			    view );
-
-	/*	
-	vbox = gtk_vbox_new(FALSE, 0);
-	button = gtk_button_new_with_label("Add address");
-	gtk_signal_connect(GTK_OBJECT(button), "clicked",
-			   GTK_SIGNAL_FUNC(add_address_cb), view);
-
-	change_button = gtk_button_new_with_label("Change View");
-	gtk_signal_connect(GTK_OBJECT(change_button), "clicked",
-			   GTK_SIGNAL_FUNC(change_callback), view);
-	*/
-	/* Build the gtk widget hierarchy. */
-
-	view->widget = gtk_vbox_new(FALSE, 0);
-	
-	button = gtk_button_new_with_label("Add address");
-	gtk_signal_connect(GTK_OBJECT(button), "clicked",
-			   GTK_SIGNAL_FUNC(add_address_cb), view);
-
-	gtk_container_add (GTK_CONTAINER (view->frame), view->child);
-	gtk_box_pack_start (GTK_BOX (view->widget), view->frame, TRUE, TRUE, 0);
-	gtk_box_pack_start (GTK_BOX (view->widget), button, FALSE, FALSE, 0);
-	/*
-	gtk_box_pack_start (GTK_BOX (vbox), change_button, FALSE, FALSE, 0);
-	*/
-	/* Show it all. */
-	gtk_widget_show_all (view->widget);
-	gtk_object_ref(GTK_OBJECT(view->model));
-	gtk_object_sink(GTK_OBJECT(view->model));
-	window_count ++;
-	return view;
-
-}
-
-#if 0
-static void
-change_callback(GtkWidget *button, View *view)
-{
-	if (view->type == VIEW_TYPE_REFLOW)
-		change_type(view, VIEW_TYPE_TABLE);
-	else
-		change_type(view, VIEW_TYPE_REFLOW);
-}
-
-static GtkWidget *
-create_window(char *filename, ViewType type)
-{
-	GtkWidget *button;
-	GtkWidget *change_button;
-	GtkWidget *vbox;
-	View *view = g_new(View, 1);
-
-	view->reflow = NULL;
-
-	view->model = get_model(filename);
-
-	/* Here we create a window for our new table.  This window
-	   will get shown and the person will be able to test their
-	   item. */
-	view->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
-	gtk_signal_connect( GTK_OBJECT( view->window ), "destroy",
-			    GTK_SIGNAL_FUNC( destroy_callback ),
-			    view );
-
-	/* This frame is simply to get a bevel around our table. */
-	view->frame = gtk_frame_new (NULL);
-
-	switch(type) {
-	case VIEW_TYPE_REFLOW:
-		view->child = create_reflow(view);
-		break;
-	case VIEW_TYPE_TABLE:
-		view->child = create_table(view);
-		break;
-	}
-
-
-	vbox = gtk_vbox_new(FALSE, 0);
-	
-	button = gtk_button_new_with_label("Add address");
-	gtk_signal_connect(GTK_OBJECT(button), "clicked",
-			   GTK_SIGNAL_FUNC(add_address_cb), view);
-
-	change_button = gtk_button_new_with_label("Change View");
-	gtk_signal_connect(GTK_OBJECT(change_button), "clicked",
-			   GTK_SIGNAL_FUNC(change_callback), view);
-
-	/* Build the gtk widget hierarchy. */
-
-	gtk_container_add (GTK_CONTAINER (view->frame), view->child);
-	gtk_box_pack_start (GTK_BOX (vbox), view->frame, TRUE, TRUE, 0);
-	gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (vbox), change_button, FALSE, FALSE, 0);
-	gtk_container_add (GTK_CONTAINER (view->window), vbox);
-
-	/* Size the initial window. */
-	gtk_widget_set_usize (view->window, 200, 200);
-	/* Show it all. */
-	gtk_widget_show_all (view->window);
-	gtk_object_sink(GTK_OBJECT(view->model));
-	window_count ++;
-	return view->window;
-}
-
-/* This is the main function which just initializes gnome and call our create_table function */
-
-int
-main (int argc, char *argv [])
-{
-	gnome_init ("TableExample", "TableExample", argc, argv);
-	e_cursors_init ();
-
-	gtk_widget_push_visual (gdk_rgb_get_visual ());
-	gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
-	create_window("addressbook.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook.xml", VIEW_TYPE_REFLOW);
-	create_window("addressbook2.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook2.xml", VIEW_TYPE_REFLOW);
-
-	gtk_main ();
-
-	e_cursors_shutdown ();
-	return 0;
-}
-#endif
diff --git a/addressbook/demo/addressbook-widget.h b/addressbook/demo/addressbook-widget.h
deleted file mode 100644
index 9111713da5..0000000000
--- a/addressbook/demo/addressbook-widget.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * demo.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#ifndef __DEMO_H__
-#define __DEMO_H__
-
-#include "e-test-model.h"
-
-typedef struct _View View;
-
-typedef enum {
-	VIEW_TYPE_REFLOW,
-	VIEW_TYPE_TABLE
-} ViewType;
-
-typedef struct {
-	GtkAllocation last_alloc;
-	GnomeCanvasItem *reflow;
-	GtkWidget *canvas;
-	GnomeCanvasItem *rect;
-	int model_changed_id;
-} Reflow;
-
-struct _View {
-	ViewType type;
-	ETestModel *model;
-	GtkWidget *child;
-	GtkWidget *frame;
-	Reflow *reflow;
-
-	GtkWidget *widget;
-};
-
-void change_type(View *view, ViewType type);
-View *create_view(void);
-
-#endif /* __DEMO_H__ */
diff --git a/addressbook/demo/addressbook.c b/addressbook/demo/addressbook.c
deleted file mode 100644
index b273788118..0000000000
--- a/addressbook/demo/addressbook.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * folder-browser-factory.c: A Bonobo Control factory for Folder Browsers
- *
- * Author:
- *   Miguel de Icaza (miguel@helixcode.com)
- *
- * (C) 2000 Helix Code, Inc.
- */
-/*
- * bonobo-clock-control.c
- *
- * Copyright 1999, Helix Code, Inc.
- *
- * Author:
- *   Nat Friedman (nat@nat.org)
- */
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include "addressbook-widget.h"
-#include "addressbook.h"
-
-
-
-#if 0
-static void
-bonobo_clock_control_prop_value_changed_cb (BonoboPropertyBag *pb, char *name, char *type,
-					    gpointer old_value, gpointer new_value,
-					    gpointer user_data)
-{
-	GtkClock *clock = user_data;
-
-	if (! strcmp (name, "running")) {
-		gboolean *b = new_value;
-
-		if (*b)
-			gtk_clock_start (clock);
-		else
-			gtk_clock_stop (clock);
-	}
-}
-
-/*
- * Callback routine used to release any values we associated with the control
- * dynamically.
- */
-static void
-release_data (GtkObject *object, void *data)
-{
-	g_free (data);
-}
-#endif
-
-
-static void
-control_deactivate (BonoboControl *control, BonoboUIHandler *uih)
-{
-	/* how to remove a menu item */
-	bonobo_ui_handler_menu_remove (uih, "/Actions/New Contact"); 
-
-	/* remove our toolbar */
-	bonobo_ui_handler_dock_remove (uih, "/Toolbar");
-}
-
-static void
-do_nothing_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	printf ("Yow! I am called back!\n");
-}
-
-static GnomeUIInfo gnome_toolbar [] = {
-	GNOMEUIINFO_ITEM_STOCK (N_("New"), N_("Create a new contact"), do_nothing_cb, GNOME_STOCK_PIXMAP_NEW),
-
-	GNOMEUIINFO_SEPARATOR,
-
-	GNOMEUIINFO_ITEM_STOCK (N_("Find"), N_("Find a contact"), do_nothing_cb, GNOME_STOCK_PIXMAP_SEARCH),
-	GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print contacts"), do_nothing_cb, GNOME_STOCK_PIXMAP_PRINT),
-	GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete a contact"), do_nothing_cb, GNOME_STOCK_PIXMAP_TRASH),
-
-	GNOMEUIINFO_END
-};
-
-
-
-
-static void
-control_activate (BonoboControl *control, BonoboUIHandler *uih)
-{
-	Bonobo_UIHandler  remote_uih;
-	GtkWidget *toolbar;
-	BonoboControl *toolbar_control;
-	
-	remote_uih = bonobo_control_get_remote_ui_handler (control);
-	bonobo_ui_handler_set_container (uih, remote_uih);		
-	bonobo_object_release_unref (remote_uih, NULL);
-
-	bonobo_ui_handler_menu_new_item (uih, "/Actions/New Contact", N_("_New Contact"),       
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
-					 0, 0, do_nothing_cb, NULL);
-
-	toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL,
-				   GTK_TOOLBAR_BOTH);
-
-	gnome_app_fill_toolbar (GTK_TOOLBAR (toolbar),
-				gnome_toolbar, 
-				NULL);
-	
-	gtk_widget_show_all (toolbar);
-
-	toolbar_control = bonobo_control_new (toolbar);
-	bonobo_ui_handler_dock_add (
-		uih, "/Toolbar",
-		bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)),
-		GNOME_DOCK_ITEM_BEH_LOCKED |
-		GNOME_DOCK_ITEM_BEH_EXCLUSIVE,
-		GNOME_DOCK_TOP,
-		1, 1, 0);
-}
-
-static void
-control_activate_cb (BonoboControl *control, 
-		     gboolean activate, 
-		     gpointer user_data)
-{
-	BonoboUIHandler  *uih;
-
-	uih = bonobo_control_get_ui_handler (control);
-	g_assert (uih);
-	
-	if (activate)
-		control_activate (control, uih);
-	else
-		control_deactivate (control, uih);
-}
-
-
-static BonoboObject *
-addressbook_factory (BonoboGenericFactory *Factory, void *closure)
-{
-#if 0
-	BonoboPropertyBag  *pb;
-	CORBA_boolean	  *running;
-#endif
-	BonoboControl      *control;
-	View               *view;
-
-	/* Create the control. */
-	view = create_view();
-	control = bonobo_control_new (view->widget);
-
-	gtk_signal_connect (GTK_OBJECT (control), "activate",
-			    control_activate_cb, NULL);	
-#if 0
-	/* Create the properties. */
-	pb = bonobo_property_bag_new ();
-	bonobo_control_set_property_bag (control, pb);
-
-	gtk_signal_connect (GTK_OBJECT (pb), "value_changed",
-			    bonobo_clock_control_prop_value_changed_cb,
-			    clock);
-
-	running = g_new0 (CORBA_boolean, 1);
-	*running = TRUE;
-	bonobo_property_bag_add (pb, "running", "boolean",
-				(gpointer) running,
-				NULL, "Whether or not the clock is running", 0);
-
-	/*
-	 * Release "running" when the object is destroyed
-	 */
-	gtk_signal_connect (GTK_OBJECT (pb), "destroy", GTK_SIGNAL_FUNC (release_data), running);
-#endif
-
-	return BONOBO_OBJECT (control);
-}
-
-void
-addressbook_factory_init (void)
-{
-	static BonoboGenericFactory *addressbook_control_factory = NULL;
-
-	if (addressbook_control_factory != NULL)
-		return;
-
-	addressbook_control_factory =
-		bonobo_generic_factory_new (
-			"control-factory:addressbook",
-			addressbook_factory, NULL);
-
-	if (addressbook_control_factory == NULL) {
-		g_error ("I could not register a Addressbook factory.");
-	}
-}
diff --git a/addressbook/demo/addressbook.gnorba b/addressbook/demo/addressbook.gnorba
deleted file mode 100644
index 7114b1c332..0000000000
--- a/addressbook/demo/addressbook.gnorba
+++ /dev/null
@@ -1,11 +0,0 @@
-[control-factory:addressbook]
-type=exe
-repo_id=IDL:GNOME/GenericFactory:1.0
-description=Factory for the sample Addressbook control
-location_info=evolution-addressbook
-
-[control:addressbook]
-type=factory
-repo_id=IDL:BonoboControl/addressbook-control:1.0 IDL:GNOME/Control:1.0
-description=A sample Bonobo control which displays an addressbook.
-location_info=control-factory:addressbook
diff --git a/addressbook/demo/addressbook.h b/addressbook/demo/addressbook.h
deleted file mode 100644
index e9289128a6..0000000000
--- a/addressbook/demo/addressbook.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef __ADDRESSBOOK_H__
-#define __ADDRESSBOOK_H__
-
-#include 
-
-void             addressbook_factory_init (void);
-
-#endif /* __ADDRESSBOOK_H__ */
diff --git a/addressbook/demo/demo.c b/addressbook/demo/demo.c
deleted file mode 100644
index 1e2c256d3a..0000000000
--- a/addressbook/demo/demo.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "e-util/e-cursors.h"
-#include "e-canvas.h"
-#include "e-table-simple.h"
-#include "e-table-header.h"
-#include "e-table-header-item.h"
-#include "e-table-item.h"
-#include "e-cell-text.h"
-#include "e-cell-checkbox.h"
-#include "e-table.h"
-#include "e-reflow.h"
-#include "e-minicard.h"
-
-#include 
-
-#include "table-test.h"
-
-#include "e-test-model.h"
-
-#define COLS 4
-
-/* Here we define the initial layout of the table.  This is an xml
-   format that allows you to change the initial ordering of the
-   columns or to do sorting or grouping initially.  This specification
-   shows all 5 columns, but moves the importance column nearer to the
-   front.  It also sorts by the "Full Name" column (ascending.)
-   Sorting and grouping take the model column as their arguments
-   (sorting is specified by the "column" argument to the leaf elemnt. */
-#define INITIAL_SPEC "                    	       \
-	                  			       \
-		 0      			       \
-		 1      			       \
-		 2      			       \
-		 3      			       \
-	                 			       \
-	      \
-"
-
-char *headers[COLS] = {
-  "Email",
-  "Full Name",
-  "Address",
-  "Phone"
-};
-
-typedef struct _View View;
-
-typedef enum {
-	VIEW_TYPE_REFLOW,
-	VIEW_TYPE_TABLE
-} ViewType;
-
-typedef struct {
-	GtkAllocation last_alloc;
-	GnomeCanvasItem *reflow;
-	GtkWidget *canvas;
-	GnomeCanvasItem *rect;
-	int model_changed_id;
-} Reflow;
-
-struct _View {
-	ETestModel *model;
-	GtkWidget *window;
-	GtkWidget *frame;
-	GtkWidget *child;
-
-	ViewType type;
-
-	Reflow *reflow;
-};
-
-static int window_count = 0;
-static GHashTable *models = NULL;
-
-static void
-remove_model(ETableModel *model, gchar *filename)
-{
-	g_hash_table_remove(models, filename);
-	g_free(filename);
-}
-
-static ETestModel *
-get_model(char *filename)
-{
-	ETestModel *model;
-	if ( models == NULL ) {
-		models = g_hash_table_new(g_str_hash, g_str_equal);
-	}
-
-	model = g_hash_table_lookup(models, filename);
-	if ( model )
-		return model;
-
-	filename = g_strdup(filename);
-	
-	model = E_TEST_MODEL(e_test_model_new(filename));
-	g_hash_table_insert(models,
-			    filename, model);
-	gtk_signal_connect(GTK_OBJECT(model), "destroy",
-			   GTK_SIGNAL_FUNC(remove_model), filename);
-	return model;
-}
-
-static void
-add_address_cb(GtkWidget *button, gpointer data)
-{
-	View *view = (View *) data;
-	Address *newadd = g_new(Address, 1);
-	newadd->email = g_strdup("");
-	newadd->phone = g_strdup("");
-	newadd->full_name = g_strdup("");
-	newadd->street = g_strdup("");
-	e_test_model_add_column (view->model, newadd);
-}
-
-static void
-rebuild_reflow(ETableModel *model, gpointer data)
-{
-	int i;
-	View *view = (View *) data;
-	Reflow *reflow = view->reflow;
-	if (!reflow)
-		return;
-	gtk_object_destroy(GTK_OBJECT(reflow->reflow));
-	reflow->reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( reflow->canvas ) ),
-					      e_reflow_get_type(),
-					      "height", (double) reflow->last_alloc.height,
-					      "minimum_width", (double) reflow->last_alloc.width,
-					      NULL );
-
-	for ( i = 0; i < view->model->data_count; i++ )
-		{
-			GnomeCanvasItem *item;
-			item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow->reflow),
-						      e_minicard_get_type(),
-						      "model", view->model,
-						      "row", i,
-						      NULL);
-			e_reflow_add_item(E_REFLOW(reflow->reflow), item);
-		}
-	e_canvas_item_request_reflow(reflow->reflow);
-}
-
-static void
-destroy_reflow(View *view)
-{
-	Reflow *reflow = view->reflow;
-	if ( !reflow )
-		return;
-
-	gtk_signal_disconnect(GTK_OBJECT(view->model),
-			      reflow->model_changed_id);
-	g_free(reflow);
-	gtk_object_unref(GTK_OBJECT(view->model));
-	view->reflow = NULL;
-}
-
-static void destroy_callback(GtkWidget *app, gpointer data)
-{
-	View *view = (View *)data;
-	if ( view->reflow ) {
-		destroy_reflow(view);
-	}
-	gtk_object_unref(GTK_OBJECT(view->model));
-	g_free(view);
-	window_count --;
-	if ( window_count <= 0 )
-		exit(0);
-}
-
-static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data)
-{
-	double width;
-	View *view = (View *)data;
-	Reflow *reflow = view->reflow;
-	if ( !reflow )
-		return;
-	reflow->last_alloc = *allocation;
-	gnome_canvas_item_set( reflow->reflow,
-			       "height", (double) allocation->height,
-			       NULL );
-	gnome_canvas_item_set( reflow->reflow,
-			       "minimum_width", (double) allocation->width,
-			       NULL );
-	gtk_object_get(GTK_OBJECT(reflow->reflow),
-		       "width", &width,
-		       NULL);
-	width = MAX(width, allocation->width);
-	gnome_canvas_set_scroll_region(GNOME_CANVAS( reflow->canvas ), 0, 0, width, allocation->height );
-	gnome_canvas_item_set( reflow->rect,
-			       "x2", (double) width,
-			       "y2", (double) allocation->height,
-			       NULL );
-}
-
-static void resize(ECanvas *canvas, gpointer data)
-{
-	double width;
-	View *view = (View *)data;
-	Reflow *reflow = view->reflow;
-	if ( !reflow )
-		return;
-  	gtk_object_get(GTK_OBJECT(reflow->reflow),
-		       "width", &width,
-		       NULL);
-	width = MAX(width, reflow->last_alloc.width);
-	gnome_canvas_set_scroll_region(GNOME_CANVAS(reflow->canvas), 0, 0, width, reflow->last_alloc.height );
-	gnome_canvas_item_set( reflow->rect,
-			       "x2", (double) width,
-			       "y2", (double) reflow->last_alloc.height,
-			       NULL );	
-}
-
-static GtkWidget *
-create_reflow(View *view)
-{
-	GtkWidget *inner_vbox;
-	GtkWidget *scrollbar;
-	int i;
-	Reflow *reflow = g_new(Reflow, 1);
-	view->reflow = reflow;
-
-	view->type = VIEW_TYPE_REFLOW;
-
-	/* Next we create our model.  This uses the functions we defined
-	   earlier. */
-
-	inner_vbox = gtk_vbox_new(FALSE, 0);
-	reflow->canvas = e_canvas_new();
-	reflow->rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( reflow->canvas ) ),
-					    gnome_canvas_rect_get_type(),
-					    "x1", (double) 0,
-					    "y1", (double) 0,
-					    "x2", (double) 100,
-					    "y2", (double) 100,
-					    "fill_color", "white",
-					    NULL );
-	reflow->reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( reflow->canvas ) ),
-					      e_reflow_get_type(),
-					      "height", (double) 100,
-					      "minimum_width", (double) 100,
-					      NULL );
-	/* Connect the signals */
-	gtk_signal_connect( GTK_OBJECT( reflow->canvas ), "reflow",
-			    GTK_SIGNAL_FUNC( resize ),
-			    ( gpointer ) view);
-	
-	for ( i = 0; i < view->model->data_count; i++ )
-		{
-			GnomeCanvasItem *item;
-			item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow->reflow),
-						      e_minicard_get_type(),
-						      "model", view->model,
-						      "row", i,
-						      NULL);
-			e_reflow_add_item(E_REFLOW(reflow->reflow), item);
-		}
-	gnome_canvas_set_scroll_region ( GNOME_CANVAS( reflow->canvas ),
-					 0, 0,
-					 100, 100 );
-
-	scrollbar = gtk_hscrollbar_new(gtk_layout_get_hadjustment(GTK_LAYOUT(reflow->canvas)));
-
-	gtk_signal_connect( GTK_OBJECT( reflow->canvas ), "size_allocate",
-			    GTK_SIGNAL_FUNC( allocate_callback ),
-			    ( gpointer ) view );
-
-	gdk_window_set_back_pixmap( GTK_LAYOUT(reflow->canvas)->bin_window, NULL, FALSE);
-	
-	reflow->model_changed_id = gtk_signal_connect(GTK_OBJECT( view->model ), "model_changed",
-						      GTK_SIGNAL_FUNC(rebuild_reflow), view);
-
-	gtk_object_ref(GTK_OBJECT(view->model));
-
-	/* Build the gtk widget hierarchy. */
-	gtk_box_pack_start(GTK_BOX(inner_vbox), reflow->canvas, TRUE, TRUE, 0);
-	gtk_box_pack_start(GTK_BOX(inner_vbox), scrollbar, FALSE, FALSE, 0);
-
-	return inner_vbox;
-}
-
-/* We create a window containing our new table. */
-static GtkWidget *
-create_table(View *view)
-{
-	ECell *cell_left_just;
-	ETableHeader *e_table_header;
-	GtkWidget *e_table;
-	int i;
-
-	view->type = VIEW_TYPE_TABLE;
-
-	/*
-	  Next we create a header.  The ETableHeader is used in two
-	  different way.  The first is the full_header.  This is the
-	  list of possible columns in the view.  The second use is
-	  completely internal.  Many of the ETableHeader functions are
-	  for that purpose.  The only functions we really need are
-	  e_table_header_new and e_table_header_add_col.
-
-	  First we create the header.  */
-	e_table_header = e_table_header_new ();
-	
-	/* Next we have to build renderers for all of the columns.
-	   Since all our columns are text columns, we can simply use
-	   the same renderer over and over again.  If we had different
-	   types of columns, we could use a different renderer for
-	   each column. */
-	cell_left_just = e_cell_text_new (E_TABLE_MODEL(view->model), NULL, GTK_JUSTIFY_LEFT);
-		
-	/* Next we create a column object for each view column and add
-	   them to the header.  We don't create a column object for
-	   the importance column since it will not be shown. */
-	for (i = 0; i < LAST_COL; i++){
-		/* Create the column. */
-		ETableCol *ecol = e_table_col_new (
-						   i, headers [i],
-						   80, 20, cell_left_just,
-						   g_str_compare, TRUE);
-		/* Add it to the header. */
-		e_table_header_add_column (e_table_header, ecol, i);
-	}
-
-	/* Here we create the table.  We give it the three pieces of
-	   the table we've created, the header, the model, and the
-	   initial layout.  It does the rest.  */
-	e_table = e_table_new_from_spec_file (e_table_header, E_TABLE_MODEL(view->model), "spec");
-
-#if 0
-	gtk_signal_connect(GTK_OBJECT(E_TABLE(e_table)->sort_info), "sort_info_changed",
-			   GTK_SIGNAL_FUNC(queue_header_save), e_table->sort_info);
-
-	gtk_signal_connect(GTK_OBJECT(E_TABLE(e_table)->header), "structure_change",
-			   GTK_SIGNAL_FUNC(queue_header_save), e_table->sort_info);
-	gtk_signal_connect(GTK_OBJECT(E_TABLE(e_table)->header), "dimension_change",
-			   GTK_SIGNAL_FUNC(queue_header_save), e_table->sort_info);
-#endif
-
-	return e_table;
-}
-
-static void
-change_type(View *view, ViewType type)
-{
-	gtk_object_ref(GTK_OBJECT(view->model));
-	if (view->reflow)
-		destroy_reflow(view);
-	gtk_widget_destroy(view->child);
-	switch(type) {
-	case VIEW_TYPE_REFLOW:
-		view->child = create_reflow(view);
-		break;
-	case VIEW_TYPE_TABLE:
-		view->child = create_table(view);
-		break;
-	}
-	gtk_container_add(GTK_CONTAINER(view->frame), view->child);
-	gtk_widget_show_all(view->child);
-	gtk_object_unref(GTK_OBJECT(view->model));
-}
-
-static void
-change_callback(GtkWidget *button, View *view)
-{
-	if (view->type == VIEW_TYPE_REFLOW)
-		change_type(view, VIEW_TYPE_TABLE);
-	else
-		change_type(view, VIEW_TYPE_REFLOW);
-}
-
-static GtkWidget *
-create_window(char *filename, ViewType type)
-{
-	GtkWidget *button;
-	GtkWidget *change_button;
-	GtkWidget *vbox;
-	View *view = g_new(View, 1);
-
-	view->reflow = NULL;
-
-	view->model = get_model(filename);
-
-	/* Here we create a window for our new table.  This window
-	   will get shown and the person will be able to test their
-	   item. */
-	view->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
-	gtk_signal_connect( GTK_OBJECT( view->window ), "destroy",
-			    GTK_SIGNAL_FUNC( destroy_callback ),
-			    view );
-
-	/* This frame is simply to get a bevel around our table. */
-	view->frame = gtk_frame_new (NULL);
-
-	switch(type) {
-	case VIEW_TYPE_REFLOW:
-		view->child = create_reflow(view);
-		break;
-	case VIEW_TYPE_TABLE:
-		view->child = create_table(view);
-		break;
-	}
-
-
-	vbox = gtk_vbox_new(FALSE, 0);
-	
-	button = gtk_button_new_with_label("Add address");
-	gtk_signal_connect(GTK_OBJECT(button), "clicked",
-			   GTK_SIGNAL_FUNC(add_address_cb), view);
-
-	change_button = gtk_button_new_with_label("Change View");
-	gtk_signal_connect(GTK_OBJECT(change_button), "clicked",
-			   GTK_SIGNAL_FUNC(change_callback), view);
-
-	/* Build the gtk widget hierarchy. */
-
-	gtk_container_add (GTK_CONTAINER (view->frame), view->child);
-	gtk_box_pack_start (GTK_BOX (vbox), view->frame, TRUE, TRUE, 0);
-	gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (vbox), change_button, FALSE, FALSE, 0);
-	gtk_container_add (GTK_CONTAINER (view->window), vbox);
-
-	/* Size the initial window. */
-	gtk_widget_set_usize (view->window, 200, 200);
-	/* Show it all. */
-	gtk_widget_show_all (view->window);
-	gtk_object_ref(GTK_OBJECT(view->model));
-	gtk_object_sink(GTK_OBJECT(view->model));
-	window_count ++;
-	return view->window;
-}
-
-/* This is the main function which just initializes gnome and call our create_table function */
-
-int
-main (int argc, char *argv [])
-{
-	gnome_init ("TableExample", "TableExample", argc, argv);
-	e_cursors_init ();
-
-	gtk_widget_push_visual (gdk_rgb_get_visual ());
-	gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
-	create_window("addressbook.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook.xml", VIEW_TYPE_REFLOW);
-	create_window("addressbook.xml", VIEW_TYPE_REFLOW);
-	create_window("addressbook2.xml", VIEW_TYPE_TABLE);
-	create_window("addressbook2.xml", VIEW_TYPE_REFLOW);
-
-	gtk_main ();
-
-	e_cursors_shutdown ();
-	return 0;
-}
diff --git a/addressbook/demo/e-test-model.c b/addressbook/demo/e-test-model.c
deleted file mode 100644
index 941e1c006f..0000000000
--- a/addressbook/demo/e-test-model.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Miguel de Icaza (miguel@gnu.org)
- *
- * (C) 1999 Helix Code, Inc.
- */
-
-#include 
-#include "e-test-model.h"
-#include 
-#include 
-#include 
-#include 
-
-#define PARENT_TYPE e_table_model_get_type()
-/*
- * ETestModel callbacks
-n * These are the callbacks that define the behavior of our custom model.
- */
-
-static void
-test_destroy(GtkObject *object)
-{
-	ETestModel *model = E_TEST_MODEL(object);
-	int i;
-	if (model->book)
-		gtk_object_unref(GTK_OBJECT(model->book));
-	if (model->book_view)
-		gtk_object_unref(GTK_OBJECT(model->book_view));
-	for ( i = 0; i < model->data_count; i++ ) {
-		gtk_object_unref(GTK_OBJECT(model->data[i]));
-	}
-	g_free(model->data);
-	g_free(model->uri);
-}
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-test_col_count (ETableModel *etc)
-{
-	return LAST_COL;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-test_row_count (ETableModel *etc)
-{
-	ETestModel *test = E_TEST_MODEL(etc);
-	return test->data_count;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-test_value_at (ETableModel *etc, int col, int row)
-{
-	ETestModel *test = E_TEST_MODEL(etc);
-	ECardList *list;
-	ECardIterator *iterator;
-	gchar *string;
-	if ( col >= LAST_COL || row >= test->data_count )
-		return NULL;
-	switch (col) {
-	case EMAIL:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "email", &list,
-			       NULL);
-		iterator = e_card_list_get_iterator(list);
-		if (e_card_iterator_get(iterator))
-			return (void *) e_card_iterator_get(iterator);
-		else
-			return "";
-		gtk_object_unref(GTK_OBJECT(iterator));
-		break;
-	case FULL_NAME:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "full_name", &string,
-			       NULL);
-		if (string)
-			return string;
-		else
-			return "";
-		break;
-	case STREET:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "street", &list,
-			       NULL);
-		iterator = e_card_list_get_iterator(list);
-		if (e_card_iterator_get(iterator))
-			return ((ECardDeliveryAddress *)e_card_iterator_get(iterator))->street;
-		else
-			return "";
-		gtk_object_unref(GTK_OBJECT(iterator));
-		break;
-	case PHONE:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "phone", &list,
-			       NULL);
-		iterator = e_card_list_get_iterator(list);
-		if (e_card_iterator_get(iterator))
-			return ((ECardPhone *)e_card_iterator_get(iterator))->number;
-		else
-			return "";
-		gtk_object_unref(GTK_OBJECT(iterator));
-		break;
-	default:
-		return NULL;
-	}
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-test_set_value_at (ETableModel *etc, int col, int row, const void *val)
-{
-	ETestModel *test = E_TEST_MODEL(etc);
-	ECardList *list;
-	ECardIterator *iterator;
-	if ( col >= LAST_COL || row >= test->data_count )
-		return;
-	switch (col) {
-	case EMAIL:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "email", &list,
-			       NULL);
-		iterator = e_card_list_get_iterator(list);
-		if (e_card_iterator_is_valid(iterator)) {
-			e_card_iterator_set(iterator, val);
-		} else {
-			e_card_list_append(list, val);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-		break;
-	case FULL_NAME:
-		gtk_object_set(GTK_OBJECT(test->data[row]),
-			       "full_name", val,
-			       NULL);
-		break;
-	case STREET:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "address", &list,
-			       NULL);
-		iterator = e_card_list_get_iterator(list);
-		if (e_card_iterator_is_valid(iterator)) {
-			const ECardDeliveryAddress *address = e_card_iterator_get(iterator);
-			ECardDeliveryAddress *address_copy = e_card_delivery_address_copy(address);
-			g_free(address_copy->street);
-			address_copy->street = g_strdup(val);
-			e_card_iterator_set(iterator, address_copy);
-			e_card_delivery_address_free(address_copy);
-		} else {
-			ECardDeliveryAddress *address = g_new(ECardDeliveryAddress, 1);
-			address->po = NULL;
-			address->ext = NULL;
-			address->street = g_strdup(val);
-			address->city = NULL;
-			address->region = NULL;
-			address->code = NULL;
-			address->country = NULL;
-			address->flags = 0;
-			e_card_list_append(list, address);
-			e_card_delivery_address_free(address);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-		break;
-	case PHONE:
-		gtk_object_get(GTK_OBJECT(test->data[row]),
-			       "phone", &list,
-			       NULL);
-		iterator = e_card_list_get_iterator(list);
-		if (e_card_iterator_is_valid(iterator)) {
-			const ECardPhone *phone = e_card_iterator_get(iterator);
-			ECardPhone *phone_copy = e_card_phone_copy(phone);
-			g_free(phone_copy->number);
-			phone_copy->number = g_strdup(val);
-			e_card_iterator_set(iterator, phone_copy);
-			e_card_phone_free(phone_copy);
-		} else {
-			ECardPhone *phone = g_new(ECardPhone, 1);
-			phone->number = g_strdup(val);
-			phone->flags = 0;
-			e_card_list_append(list, phone);
-			e_card_phone_free(phone);
-		}
-		gtk_object_unref(GTK_OBJECT(iterator));
-		break;
-	default:
-		return;
-	}
-	e_book_commit_card(test->book, test->data[row], NULL, NULL);
-	if ( !etc->frozen )
-		e_table_model_cell_changed(etc, col, row);
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-test_is_cell_editable (ETableModel *etc, int col, int row)
-{
-	return TRUE;
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-test_duplicate_value (ETableModel *etc, int col, const void *value)
-{
-	return g_strdup(value);
-}
-
-/* This function frees the value passed to it. */
-static void
-test_free_value (ETableModel *etc, int col, void *value)
-{
-	g_free(value);
-}
-
-/* This function is for when the model is unfrozen.  This can mostly
-   be ignored for simple models.  */
-static void
-test_thaw (ETableModel *etc)
-{
-	e_table_model_changed(etc);
-}
-
-static void
-e_test_model_class_init (GtkObjectClass *object_class)
-{
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
-	
-	object_class->destroy = test_destroy;
-
-	model_class->column_count = test_col_count;
-	model_class->row_count = test_row_count;
-	model_class->value_at = test_value_at;
-	model_class->set_value_at = test_set_value_at;
-	model_class->is_cell_editable = test_is_cell_editable;
-	model_class->duplicate_value = test_duplicate_value;
-	model_class->free_value = test_free_value;
-	model_class->thaw = test_thaw;
-}
-
-static void
-e_test_model_init (GtkObject *object)
-{
-	ETestModel *model = E_TEST_MODEL(object);
-	model->data = NULL;
-	model->data_count = 0;
-	model->book = NULL;
-	model->book_view = NULL;
-}
-
-GtkType
-e_test_model_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (!type){
-		GtkTypeInfo info = {
-			"ETestModel",
-			sizeof (ETestModel),
-			sizeof (ETestModelClass),
-			(GtkClassInitFunc) e_test_model_class_init,
-			(GtkObjectInitFunc) e_test_model_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (PARENT_TYPE, &info);
-	}
-
-	return type;
-}
-
-void
-e_test_model_add_column (ETestModel *model, Address *newadd)
-{
-#if 0
-	model->data = g_realloc(model->data, (++model->data_count) * sizeof(Address *));
-	model->data[model->data_count - 1] = newadd;
-	e_test_model_queue_save(model);
-	if ( model && !E_TABLE_MODEL(model)->frozen )
-		e_table_model_changed(E_TABLE_MODEL(model));
-#endif
-}
-
-static void
-e_test_model_card_added(EBookView *book_view,
-			const GList *cards,
-			ETestModel *model)
-{
-	model->data = g_realloc(model->data, (model->data_count + g_list_length((GList *)cards)) * sizeof(ECard *));
-	for ( ; cards; cards = cards->next) {
-		gtk_object_ref(GTK_OBJECT(cards->data));
-		model->data[model->data_count++] = E_CARD (cards->data);
-	}
-	e_table_model_changed(E_TABLE_MODEL(model));
-}
-
-static void
-e_test_model_card_removed(EBookView *book_view,
-			  const char *id,
-			  ETestModel *model)
-{
-	int i;
-	for ( i = 0; i < model->data_count; i++) {
-		if ( !strcmp(e_card_get_id(model->data[i]), id) ) {
-			gtk_object_unref(GTK_OBJECT(model->data[i]));
-			memmove(model->data + i, model->data + i + 1, (model->data_count - i - 1) * sizeof (ECard *));
-		}
-	}
-	e_table_model_changed(E_TABLE_MODEL(model));
-}
-
-static void
-e_test_model_card_changed(EBookView *book_view,
-			  const GList *cards,
-			  ETestModel *model)
-{
-	for ( ; cards; cards = cards->next) {
-		int i;
-		for ( i = 0; i < model->data_count; i++) {
-			if ( !strcmp(e_card_get_id(model->data[i]), e_card_get_id(E_CARD(cards->data))) ) {
-				gtk_object_unref(GTK_OBJECT(model->data[i]));
-				model->data[i] = E_CARD(cards->data);
-				gtk_object_ref(GTK_OBJECT(model->data[i]));
-				e_table_model_row_changed(E_TABLE_MODEL(model), i);
-				break;
-			}
-		}
-	}
-}
-
-static void
-e_test_model_book_respond_get_view(EBook *book,
-				   EBookStatus status,
-				   EBookView *book_view,
-				   ETestModel *model)
-{
-	if (status == E_BOOK_STATUS_SUCCESS) {
-		model->book_view = book_view;
-		gtk_object_ref(GTK_OBJECT(book_view));
-		gtk_signal_connect(GTK_OBJECT(book_view),
-				   "card_changed",
-				   GTK_SIGNAL_FUNC(e_test_model_card_changed),
-				   model);
-		gtk_signal_connect(GTK_OBJECT(book_view),
-				   "card_removed",
-				   GTK_SIGNAL_FUNC(e_test_model_card_removed),
-				   model);
-		gtk_signal_connect(GTK_OBJECT(book_view),
-				   "card_added",
-				   GTK_SIGNAL_FUNC(e_test_model_card_added),
-				   model);
-	}
-}
-
-static void
-e_test_model_uri_loaded(EBook *book,
-			EBookStatus status,
-			ETestModel *model)
-{
-	if (status == E_BOOK_STATUS_SUCCESS) {
-		e_book_get_book_view (book,
-				      "",
-				      (EBookBookViewCallback) e_test_model_book_respond_get_view,
-				      model);
-	}
-}
-
-ETableModel *
-e_test_model_new (gchar *uri)
-{
-	ETestModel *et;
-
-	et = gtk_type_new (e_test_model_get_type ());
-	
-	et->uri = g_strdup(uri);
-	et->book = e_book_new();
-	e_book_load_uri(et->book,
-			et->uri,
-			(EBookCallback) e_test_model_uri_loaded,
-			et);
-
-	return E_TABLE_MODEL(et);
-}
diff --git a/addressbook/demo/e-test-model.h b/addressbook/demo/e-test-model.h
deleted file mode 100644
index 871ea11de8..0000000000
--- a/addressbook/demo/e-test-model.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#ifndef _E_TEST_MODEL_H_
-#define _E_TEST_MODEL_H_
-
-#include "e-table-model.h"
-#include 
-#include 
-#include 
-
-#define E_TEST_MODEL_TYPE        (e_test_model_get_type ())
-#define E_TEST_MODEL(o)          (GTK_CHECK_CAST ((o), E_TEST_MODEL_TYPE, ETestModel))
-#define E_TEST_MODEL_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_TEST_MODEL_TYPE, ETestModelClass))
-#define E_IS_TEST_MODEL(o)       (GTK_CHECK_TYPE ((o), E_TEST_MODEL_TYPE))
-#define E_IS_TEST_MODEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_TEST_MODEL_TYPE))
-
-/* Virtual Column list:
-   0   Email
-   1   Full Name
-   2   Street
-   3   Phone
-*/
-typedef struct _Address Address;
-typedef enum _Rows Rows;
-
-struct _Address {
-	gchar *email;
-	gchar *full_name;
-	gchar *street;
-	gchar *phone;
-};
-
-enum _Rows {
-	EMAIL,
-	FULL_NAME,
-	STREET,
-	PHONE,
-	LAST_COL
-};
-
-typedef struct {
-	ETableModel parent;
-
-	EBook *book;
-
-	EBookView *book_view;
-
-	ECard **data;
-	int data_count;
-
-	char *uri;
-} ETestModel;
-
-
-typedef struct {
-	ETableModelClass parent_class;
-} ETestModelClass;
-
-
-GtkType e_test_model_get_type (void);
-ETableModel *e_test_model_new (char *uri);
-
-void e_test_model_add_column (ETestModel *model, Address *newadd);
-
-#endif /* _E_TEST_MODEL_H_ */
diff --git a/addressbook/demo/spec b/addressbook/demo/spec
deleted file mode 100644
index 2d366ed75f..0000000000
--- a/addressbook/demo/spec
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-  
-    1
-    0
-    2
-    3
-  
-  
-    
-  
-
diff --git a/addressbook/ename/.cvsignore b/addressbook/ename/.cvsignore
deleted file mode 100644
index 4f8c173841..0000000000
--- a/addressbook/ename/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
-test-ename-western
-test-ename-western-gtk
diff --git a/addressbook/ename/Makefile.am b/addressbook/ename/Makefile.am
deleted file mode 100644
index 25a67a929c..0000000000
--- a/addressbook/ename/Makefile.am
+++ /dev/null
@@ -1,50 +0,0 @@
-INCLUDES =						\
-        -DGNOMELOCALEDIR=\""$(datadir)/locale"\"        \
-	-DG_LOG_DOMAIN=\"EName\"			\
-	-I$(srcdir)					\
-	-I$(srcdir)/..					\
-	-I$(top_srcdir) 				\
-	-I. 						\
-	-I.. 						\
-	-I$(top_builddir)				\
-        -I$(includedir)                                 \
-        $(GNOME_INCLUDEDIR)
-
-gnome_libs =						\
-	$(BONOBO_GNOME_LIBS)				\
-	$(INTLLIBS)
-
-ename_libs = 						\
-	libename.la 					\
-	$(gnome_libs)
-
-lib_LTLIBRARIES = libename.la
-
-libename_la_SOURCES =					\
-	e-name-western.c
-
-libenameincludedir = $(includedir)/ename
-
-libenameinclude_HEADERS =				\
-	e-name-western-tables.h				\
-	e-name-western.h
-
-
-noinst_LTLIBRARIES = libename-static.la
-libename_static_la_SOURCES = $(libename_la_SOURCES)
-libename_static_la_LDFLAGS = --all-static
-
-
-noinst_PROGRAMS =					\
-	test-ename-western				\
-	test-ename-western-gtk
-
-test_ename_western_SOURCES =				\
-	test-ename-western.c
-
-test_ename_western_LDADD = $(ename_libs)
-
-test_ename_western_gtk_SOURCES =				\
-	test-ename-western-gtk.c
-
-test_ename_western_gtk_LDADD = $(ename_libs) $(gnome_libs)
diff --git a/addressbook/ename/TODO b/addressbook/ename/TODO
deleted file mode 100644
index 669661eea7..0000000000
--- a/addressbook/ename/TODO
+++ /dev/null
@@ -1,2 +0,0 @@
-* Support other naming systems.
-* Handle misspelled suffixes better.
diff --git a/addressbook/ename/e-name-western-tables.h b/addressbook/ename/e-name-western-tables.h
deleted file mode 100644
index bb29cc5292..0000000000
--- a/addressbook/ename/e-name-western-tables.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef __E_NAME_WESTERN_TABLES_H__
-#define __E_NAME_WESTERN_TABLES_H__
-
-char *e_name_western_pfx_table[] = {
-
-	/*
-	 * English.
-	 */
-	"mister", "miss.", "mr.", "mrs.", "ms.",
-	"miss", "mr", "mrs", "ms", "sir", 
-	"professor", "prof.", "dr", "dr.", "doctor",
-	"reverend", "president", "judge", "senator",
-	"congressman", "congresswoman", "commander",
-	"lieutenant", "colonel", "major", "general",  
-
-	"the honorable", "the reverend", "his holiness",
-	"his eminence",
-	
-
-	/*
-	 * French.
-	 */
-	"monsieur", "mr.", "mademoiselle", "melle.",
-	"madame", "mme.", "professeur",
-
-	/*
-	 * Spanish.
-	 */
-	"senor", "senora", "senorita",
-
-	NULL};
-
-char *e_name_western_sfx_table[]  = {
-
-	/*
-	 * English.
-	 */
-	"junior", "senior", "jr", "sr", "I", "II", "III", "IV", "V",
-	"phd", "ms", "md", "esq", "esq.", "esquire",
-
-	NULL};
-
-char *e_name_western_twopart_sfx_table[] = {
-
-	/*
-	 * English.
-	 */
-	"the first", "the second", "the third",
-
-	NULL};
-
-char *e_name_western_complex_last_table[] = {"van", "von", "de", NULL};
-
-#endif /* ! __E_NAME_WESTERN_TABLES_H__ */
diff --git a/addressbook/ename/e-name-western.c b/addressbook/ename/e-name-western.c
deleted file mode 100644
index 698cceec0b..0000000000
--- a/addressbook/ename/e-name-western.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
- * A simple Western name parser.
- *
- *  Jamie, do you know anything about name parsing?
- *  Are you going down that rat hole?  Bring a flashlight.
- *
- * Author:
- *   Nat Friedman (nat@helixcode.com)
- *
- * Copyright 1999, Helix Code, Inc.
- */
-
-#include 
-#include 
-#include 
- 
-#include 
-#include 
-
-typedef struct {
-	int prefix_idx;
-	int first_idx;
-	int middle_idx;
-	int nick_idx;
-	int last_idx;
-	int suffix_idx;
-} ENameWesternIdxs;
-
-static int
-e_name_western_str_count_words (char *str)
-{
-	int word_count;
-	char *p;
-
-	word_count = 0;
-
-	for (p = str; p != NULL; p = strchr (p, ' ')) {
-		word_count ++;
-		p ++;
-	}
-
-	return word_count;
-}
-
-static void
-e_name_western_cleanup_string (char **str)
-{
-	char *newstr;
-	char *p;
-
-	if (*str == NULL)
-		return;
-
-	/* skip any spaces and commas at the start of the string */
-	p = *str;
-	while (isspace (*p) || *p == ',')
-		p ++;
-
-	/* make the copy we're going to return */
-	newstr = g_strdup (p);
-
-	if ( strlen(newstr) > 0) {
-		/* now search from the back, skipping over any spaces and commas */
-		p = newstr + strlen (newstr) - 1;
-		while (isspace (*p) || *p == ',')
-			p --;
-		/* advance p to after the character that caused us to exit the
-		   previous loop, and end the string. */
-		if ((! isspace (*p)) && *p != ',')
-			p ++;
-		*p = '\0';
-	}
-
-	g_free (*str);
-	*str = newstr;
-}
-
-static char *
-e_name_western_get_words_at_idx (char *str, int idx, int num_words)
-{
-	char *words;
-	char *p;
-	int   word_count;
-	int   words_len;
-
-	/*
-	 * Walk to the end of the words.
-	 */
-	word_count = 0;
-	p = str + idx;
-	while (word_count < num_words && *p != '\0') {
-		while (! isspace (*p) && *p != '\0')
-			p ++;
-
-		while (isspace (*p) && *p != '\0')
-			p ++;
-
-		word_count ++;
-	}
-
-	words_len = p - str - idx - 1;
-
-	if (*p == '\0')
-		words_len ++;
-
-	words = g_malloc0 (1 + words_len);
-	strncpy (words, str + idx, words_len);
-
-	return words;
-}
-
-/*
- * What the fuck is wrong with glib's MAX macro.
- */ 
-static int
-e_name_western_max (const int a, const int b)
-{
-	if (a > b)
-		return a;
-
-	return b;
-}
-
-static gboolean
-e_name_western_word_is_suffix (char *word)
-{
-	int i;
-
-	for (i = 0; e_name_western_sfx_table [i] != NULL; i ++) {
-		if (g_strcasecmp (word, e_name_western_sfx_table [i]))
-			continue;
-
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-static char *
-e_name_western_get_one_prefix_at_str (char *str)
-{
-	char *word;
-	int   i;
-
-	/*
-	 * Check for prefixes from our table.
-	 */
-	for (i = 0; e_name_western_pfx_table [i] != NULL; i ++) {
-		int pfx_words;
-		char *words;
-
-		pfx_words = e_name_western_str_count_words (e_name_western_pfx_table [i]);
-		words = e_name_western_get_words_at_idx (str, 0, pfx_words);
-
-		if (! g_strcasecmp (words, e_name_western_pfx_table [i]))
-			return words;
-
-		g_free (words);
-	}
-
-	/*
-	 * Check for prefixes we don't know about.  These are always a
-	 * sequence of more than one letters followed by a period.
-	 */
-	word = e_name_western_get_words_at_idx (str, 0, 1);
-
-	if (strlen (word) > 2 && isalpha (word [0]) && isalpha (word [1]) &&
-	    word [strlen (word) - 1] == '.')
-		return word;
-
-	g_free (word);
-
-	return NULL;
-}
-
-static char *
-e_name_western_get_prefix_at_str (char *str)
-{
-	char *pfx;
-	char *pfx1;
-	char *pfx2;
-	char *p;
-
-	/* Get the first prefix. */
-	pfx1 = e_name_western_get_one_prefix_at_str (str);
-
-	if (pfx1 == NULL)
-		return NULL;
-
-	/* Check for a second prefix. */
-	p = str + strlen (pfx1);
-	while (isspace (*p) && *p != '\0')
-		p ++;
-
-	pfx2 = e_name_western_get_one_prefix_at_str (p);
-
-	if (pfx2 != NULL) {
-		int pfx_len;
-
-		pfx_len = (p + strlen (pfx2)) - str;
-		pfx = g_malloc0 (pfx_len + 1);
-		strncpy (pfx, str, pfx_len);
-	} else {
-		pfx = g_strdup (pfx1);
-	}
-
-	g_free (pfx1);
-	g_free (pfx2);
-
-	return pfx;
-}
-
-static void
-e_name_western_extract_prefix (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	char *pfx;
-
-	pfx = e_name_western_get_prefix_at_str (name->full);
-
-	if (pfx == NULL)
-		return;
-
-	idxs->prefix_idx = 0;
-	name->prefix     = pfx;
-}
-
-static gboolean
-e_name_western_is_complex_last_beginning (char *word)
-{
-	int i;
-
-	for (i = 0; e_name_western_complex_last_table [i] != NULL; i ++) {
-
-		if (! g_strcasecmp (
-			word, e_name_western_complex_last_table [i]))
-			return TRUE;
-	}
-
-	return FALSE;
-}
-
-static void
-e_name_western_extract_first (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	/*
-	 * If there's a prefix, then the first name is right after it.
-	 */
-	if (idxs->prefix_idx != -1) {
-		int   first_idx;
-		char *p;
-
-		first_idx = idxs->prefix_idx + strlen (name->prefix);
-
-		/* Skip past white space. */
-		p = name->full + first_idx;
-		while (isspace (*p) && *p != '\0')
-			p++;
-
-		if (*p == '\0')
-			return;
-
-		idxs->first_idx = p - name->full;
-		name->first = e_name_western_get_words_at_idx (
-			name->full, idxs->first_idx, 1);
-
-	} else {
-
-		/*
-		 * Otherwise, the first name is probably the first string.
-		 */
-		idxs->first_idx = 0;
-		name->first = e_name_western_get_words_at_idx (
-			name->full, idxs->first_idx, 1);
-	}
-
-	/*
-	 * Check that we didn't just assign the beginning of a
-	 * compound last name to the first name.
-	 */
-	if (name->first != NULL) {
-		if (e_name_western_is_complex_last_beginning (name->first)) {
-			g_free (name->first);
-			name->first = NULL;
-			idxs->first_idx = -1;
-		}
-	}
-}
-
-static void
-e_name_western_extract_middle (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	char *word;
-	int   middle_idx;
-
-	/*
-	 * Middle names can only exist if you have a first name.
-	 */
-	if (idxs->first_idx == -1)
-		return;
-
-	middle_idx = idxs->first_idx + strlen (name->first) + 1;
-
-	if (middle_idx > strlen (name->full))
-		return;
-	
-	/*
-	 * Search for the first space (or the terminating \0)
-	 */
-	while (isspace (name->full [middle_idx]) &&
-	       name->full [middle_idx] != '\0')
-		middle_idx ++;
-		
-	if (name->full [middle_idx] == '\0')
-		return;
-
-	/*
-	 * Skip past the nickname, if it's there.
-	 */
-	if (name->full [middle_idx] == '\"') {
-		if (idxs->nick_idx == -1)
-			return;
-
-		middle_idx = idxs->nick_idx + strlen (name->nick) + 1;
-		
-		while (isspace (name->full [middle_idx]) &&
-		       name->full [middle_idx] != '\0')
-			middle_idx ++;
-
-		if (name->full [middle_idx] == '\0')
-			return;
-	}
-
-	/*
-	 * Make sure this isn't the beginning of a complex last name.
-	 */
-	word = e_name_western_get_words_at_idx (name->full, middle_idx, 1);
-	if (e_name_western_is_complex_last_beginning (word)) {
-		g_free (word);
-		return;
-	}
-
-	/*
-	 * Make sure this isn't a suffix.
-	 */
-	e_name_western_cleanup_string (& word);
-	if (e_name_western_word_is_suffix (word)) {
-		g_free (word);
-		return;
-	}
-
-	/*
-	 * Make sure we didn't just grab a cute nickname.
-	 */
-	if (word [0] == '\"') {
-		g_free (word);
-		return;
-	}
-	
-	idxs->middle_idx = middle_idx;
-	name->middle = word;
-}
-
-static void
-e_name_western_extract_nickname (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	int   idx;
-	int   start_idx;
-	char *str;
-
-	if (idxs->first_idx == -1)
-		return;
-
-	if (idxs->middle_idx > idxs->first_idx)
-		idx = idxs->middle_idx + strlen (name->middle);
-	else
-		idx = idxs->first_idx + strlen (name->first);
-
-	while (name->full [idx] != '\"' && name->full [idx] != '\0')
-		idx ++;
-
-	if (name->full [idx] != '\"')
-		return;
-
-	start_idx = idx;
-
-	/*
-	 * Advance to the next double quote.
-	 */
-	idx ++;
-	
-	while (name->full [idx] != '\"' && name->full [idx] != '\0')
-		idx ++;
-
-	if (name->full [idx] == '\0')
-		return;
-
-	str = g_malloc0 (idx - start_idx + 2);
-	strncpy (str, name->full + start_idx, idx - start_idx + 1);
-
-	name->nick = str;
-	idxs->nick_idx = start_idx;
-}
-
-static int
-e_name_western_last_get_max_idx (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	int max_idx = -1;
-
-	if (name->prefix != NULL)
-		max_idx = e_name_western_max (
-			max_idx, idxs->prefix_idx + strlen (name->prefix));
-
-	if (name->first != NULL)
-		max_idx = e_name_western_max (
-			max_idx, idxs->first_idx + strlen (name->first));
-
-	if (name->middle != NULL)
-		max_idx = e_name_western_max (
-			max_idx, idxs->middle_idx + strlen (name->middle));
-
-	if (name->nick != NULL)
-		max_idx = e_name_western_max (
-			max_idx, idxs->nick_idx + strlen (name->nick));
-
-	return max_idx;
-}
-
-static void
-e_name_western_extract_last (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	char *word;
-	int   idx = -1;
-
-	idx = e_name_western_last_get_max_idx (name, idxs);
-
-	/*
-	 * In the case where there is no preceding name element, the
-	 * name is either just a first name ("Nat", "John"), is a
-	 * single-element name ("Cher", which we treat as a first
-	 * name), or is just a last name.  The only time we can
-	 * differentiate a last name alone from a single-element name
-	 * or a first name alone is if it's a complex last name ("de
-	 * Icaza", "van Josephsen").  So if there is no preceding name
-	 * element, we check to see whether or not the first part of
-	 * the name is the beginning of a complex name.  If it is,
-	 * we subsume the entire string.  If we accidentally subsume
-	 * the suffix, this will get fixed in the fixup routine.
-	 */
-	if (idx == -1) {
-		word = e_name_western_get_words_at_idx (name->full, 0, 1);
-		if (! e_name_western_is_complex_last_beginning (word)) {
-			g_free (word);
-			return;
-		}
-
-		name->last     = g_strdup (name->full);
-		idxs->last_idx = 0;
-		return;
-	}
-
-	/* Skip past the white space. */
-	while (isspace (name->full [idx]) && name->full [idx] != '\0')
-		idx ++;
-
-	if (name->full [idx] == '\0')
-		return;
-
-	word = e_name_western_get_words_at_idx (name->full, idx, 1);
-	e_name_western_cleanup_string (& word);
-	if (e_name_western_word_is_suffix (word)) {
-		g_free (word);
-		return;
-	}
-	g_free (word);
-
-	/*
-	 * Subsume the rest of the string into the last name.  If we
-	 * accidentally include the prefix, it will get fixed later.
-	 * This is the only way to handle things like "Miguel de Icaza
-	 * Amozorrutia" without dropping data and forcing the user
-	 * to retype it.
-	 */
-	name->last = g_strdup (name->full + idx);
-	idxs->last_idx = idx;
-}
-
-static char *
-e_name_western_get_preceding_word (char *str, int idx)
-{
-	int   word_len;
-	char *word;
-	char *p;
-
-	p = str + idx;
-
-	while (isspace (*p) && p > str)
-		p --;
-
-	while (! isspace (*p) && p > str)
-		p --;
-
-	if (isspace (*p))
-	    p ++;
-
-	word_len = (str + idx) - p;
-	word = g_malloc0 (word_len + 1);
-	if (word_len > 0)
-		strncpy (word, p, word_len);
-
-	return word;
-}
-
-static char *
-e_name_western_get_suffix_at_str_end (char *str)
-{
-	char *suffix;
-	char *p;
-
-	/*
-	 * Walk backwards till we reach the beginning of the
-	 * (potentially-comma-separated) list of suffixes.
-	 */
-	p = str + strlen (str);
-	while (1) {
-		char *nextp;
-		char *word;
-
-		word = e_name_western_get_preceding_word (str, p - str);
-		nextp = p - strlen (word) - 1;
-		
-		e_name_western_cleanup_string (& word);
-
-		if (e_name_western_word_is_suffix (word)) {
-			p = nextp;
-			g_free (word);
-		} else {
-			g_free (word);
-			break;
-		}
-	}
-
-	if (p == (str + strlen (str)))
-		return NULL;
-
-	suffix = g_strdup (p);
-	e_name_western_cleanup_string (& suffix);
-
-	if (strlen (suffix) == 0) {
-		g_free (suffix);
-		return NULL;
-	}
-
-	return suffix;
-}
-
-static void
-e_name_western_extract_suffix (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-
-	name->suffix = e_name_western_get_suffix_at_str_end (name->full);
-
-	if (name->suffix == NULL)
-		return;
-
-	idxs->suffix_idx = strlen (name->full) - strlen (name->suffix);
-}
-
-static gboolean
-e_name_western_detect_backwards (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	char *comma;
-	char *word;
-
-	comma = strchr (name->full, ',');
-
-	if (comma == NULL)
-		return FALSE;
-
-	/*
-	 * If there's a comma, we need to detect whether it's
-	 * separating the last name from the first or just separating
-	 * suffixes.  So we grab the word which comes before the
-	 * comma and check if it's a suffix.
-	 */
-	word = e_name_western_get_preceding_word (name->full, comma - name->full);
-
-	if (e_name_western_word_is_suffix (word)) {
-		g_free (word);
-		return FALSE;
-	}
-
-	g_free (word);
-	return TRUE;
-}
-
-static void
-e_name_western_reorder_asshole (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	char *prefix;
-	char *last;
-	char *suffix;
-	char *firstmidnick;
-	char *newfull;
-
-	char *comma;
-	char *p;
-
-	if (! e_name_western_detect_backwards (name, idxs))
-		return;
-
-	/*
-	 * Convert
-	 *     ,   
-	 * to
-	 *        
-	 */
-	
-	/*
-	 * Grab the prefix from the beginning.
-	 */
-	prefix = e_name_western_get_prefix_at_str (name->full);
-
-	/*
-	 * Everything from the end of the prefix to the comma is the
-	 * last name.
-	 */
-	comma = strchr (name->full, ',');
-	if (comma == NULL)
-		return;
-
-	p = name->full + (prefix == NULL ? 0 : strlen (prefix));
-
-	while (isspace (*p) && *p != '\0')
-		p ++;
-
-	last = g_malloc0 (comma - p + 1);
-	strncpy (last, p, comma - p);
-
-	/*
-	 * Get the suffix off the end.
-	 */
-	suffix = e_name_western_get_suffix_at_str_end (name->full);
-
-	/*
-	 * Firstmidnick is everything from the comma to the beginning
-	 * of the suffix.
-	 */
-	p = comma + 1;
-
-	while (isspace (*p) && *p != '\0')
-		p ++;
-
-	if (suffix != NULL) {
-		char *q;
-
-		/*
-		 * Point q at the beginning of the suffix.
-		 */
-		q = name->full + strlen (name->full) - strlen (suffix) - 1;
-
-		/*
-		 * Walk backwards until we hit the space which
-		 * separates the suffix from firstmidnick.
-		 */
-		while (! isspace (*q) && q > comma)
-			q --;
-
-		if ((q - p + 1) > 0) {
-			firstmidnick = g_malloc0 (q - p + 1);
-			strncpy (firstmidnick, p, q - p);
-		} else
-			firstmidnick = NULL;
-	} else {
-		firstmidnick = g_strdup (p);
-	}
-
-	/*
-	 * Create our new reordered version of the name.
-	 */
-#define NULLSTR(a) ((a) == NULL ? "" : (a))
-	newfull = g_strdup_printf ("%s %s %s %s", NULLSTR (prefix), NULLSTR (firstmidnick),
-				   NULLSTR (last), NULLSTR (suffix));
-	g_strstrip (newfull);
-	g_free (name->full);
-	name->full = newfull;
-
-
-	g_free (prefix);
-	g_free (firstmidnick);
-	g_free (last);
-	g_free (suffix);
-}
-
-static void
-e_name_western_zap_nil (char **str, int *idx)
-{
-	if (*str == NULL)
-		return;
-
-	if (strlen (*str) != 0)
-		return;
-
-	*idx = -1;
-	g_free (*str);
-	*str = NULL;
-}
-
-static void
-e_name_western_fixup (ENameWestern *name, ENameWesternIdxs *idxs)
-{
-	/*
-	 * The middle and last names cannot be the same.
-	 */
-	if (idxs->middle_idx != -1 && idxs->middle_idx == idxs->last_idx) {
-		idxs->middle_idx = -1;
-		g_free (name->middle);
-		name->middle = NULL;
-	}
-
-	/*
-	 * If we have a middle name and no last name, then we mistook
-	 * the last name for the middle name.
-	 */
-	if (idxs->last_idx == -1 && idxs->middle_idx != -1) {
-		idxs->last_idx   = idxs->middle_idx;
-		name->last       = name->middle;
-		name->middle     = NULL;
-		idxs->middle_idx = -1;
-	}
-
-	/*
-	 * Check to see if we accidentally included the suffix in the
-	 * last name.
-	 */
-	if (idxs->suffix_idx != -1 && idxs->last_idx != -1 &&
-	    idxs->suffix_idx < (idxs->last_idx + strlen (name->last))) {
-		char *sfx;
-
-		sfx = name->last + (idxs->suffix_idx - idxs->last_idx);
-		if (sfx != NULL) {
-			char *newlast;
-			char *p;
-
-			p = sfx - 1;
-			while (isspace (*p) && p > name->last)
-				p --;
-			p ++;
-
-			newlast = g_malloc0 (p - name->last + 1);
-			strncpy (newlast, name->last, p - name->last);
-			g_free (name->last);
-			name->last = newlast;
-		}
-	}
-
-	/*
-	 * If we have a prefix and a first name, but no last name,
-	 * then we need to assign the first name to the last name.
-	 * This way we get things like "Mr Friedman" correctly.
-	 */
-	if (idxs->first_idx != -1 && idxs->prefix_idx != -1 &&
-	    idxs->last_idx == -1) {
-		name->last      = name->first;
-		idxs->last_idx  = idxs->first_idx;
-		idxs->first_idx = -1;
-		name->first     = NULL;
-	}
-
-	/*
-	 * Remove stray spaces and commas (although there don't seem
-	 * to be any in the test cases, they might show up later).
-	 */
-	e_name_western_cleanup_string (& name->prefix);
-	e_name_western_cleanup_string (& name->first);
-	e_name_western_cleanup_string (& name->middle);
-	e_name_western_cleanup_string (& name->nick);
-	e_name_western_cleanup_string (& name->last);
-	e_name_western_cleanup_string (& name->suffix);
-
-	/*
-	 * Make zero-length strings just NULL.
-	 */
-	e_name_western_zap_nil (& name->prefix, & idxs->prefix_idx);
-	e_name_western_zap_nil (& name->first,  & idxs->first_idx);
-	e_name_western_zap_nil (& name->middle, & idxs->middle_idx);
-	e_name_western_zap_nil (& name->nick,   & idxs->nick_idx);
-	e_name_western_zap_nil (& name->last,   & idxs->last_idx);
-	e_name_western_zap_nil (& name->suffix, & idxs->suffix_idx);
-}
-
-/**
- * e_name_western_western_parse_fullname:
- * @full_name: A string containing a Western name.
- *
- * Parses @full_name and returns an #ENameWestern object filled with
- * the component parts of the name.
- */
-ENameWestern *
-e_name_western_parse (const char *full_name)
-{
-	ENameWesternIdxs *idxs;
-	ENameWestern *wname;
-
-	wname = g_new0 (ENameWestern, 1);
-
-	wname->full = g_strdup (full_name);
-
-	idxs = g_new0 (ENameWesternIdxs, 1);
-
-	idxs->prefix_idx = -1;
-	idxs->first_idx  = -1;
-	idxs->middle_idx = -1;
-	idxs->nick_idx   = -1;
-	idxs->last_idx   = -1;
-	idxs->suffix_idx = -1;
-	
-	/*
-	 * An extremely simple algorithm.
-	 *
-	 * The goal here is to get it right 95% of the time for
-	 * Western names.
-	 *
-	 * First we check to see if this is an ass-backwards name
-	 * ("Prefix Last, First Middle Suffix").  These names really
-	 * suck (imagine "Dr von Johnson, Albert Roderick Jr"), so
-	 * we reorder them first and then parse them.
-	 *
-	 * Next, we grab the most obvious assignments for the various
-	 * parts of the name.  Once this is done, we check for stupid
-	 * errors and fix them up.
-	 */
-	e_name_western_reorder_asshole  (wname, idxs);
-
-	e_name_western_extract_prefix   (wname, idxs);
-	e_name_western_extract_first    (wname, idxs);
-	e_name_western_extract_nickname (wname, idxs);
-	e_name_western_extract_middle   (wname, idxs);
-	e_name_western_extract_last     (wname, idxs);
-	e_name_western_extract_suffix   (wname, idxs);
-
-	e_name_western_fixup            (wname, idxs);
-
-	g_free (idxs);
-
-	return wname;
-}
-
-/**
- * e_name_western_free:
- * @name: An ENameWestern object which needs to be freed.
- *
- * Deep-frees @name
- */
-void
-e_name_western_free (ENameWestern *w)
-{
-
-	g_free (w->prefix);
-	g_free (w->first);
-	g_free (w->middle);
-	g_free (w->nick);
-	g_free (w->last);
-	g_free (w->suffix);
-	
-	g_free (w->full);
-
-	g_free (w);
-}
diff --git a/addressbook/ename/e-name-western.h b/addressbook/ename/e-name-western.h
deleted file mode 100644
index fa5bac494c..0000000000
--- a/addressbook/ename/e-name-western.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef __E_NAME_WESTERN_H__
-#define __E_NAME_WESTERN_H__
-
-typedef struct {
-
-	/* Public */
-	char *prefix;
-	char *first;
-	char *middle;
-	char *nick;
-	char *last;
-	char *suffix;
-
-	/* Private */
-	char *full;
-} ENameWestern;
-
-ENameWestern *e_name_western_parse (const char   *full_name);
-void          e_name_western_free  (ENameWestern *w);
-
-#endif /* ! __E_NAME_WESTERN_H__ */
diff --git a/addressbook/ename/test-ename-western-gtk.c b/addressbook/ename/test-ename-western-gtk.c
deleted file mode 100644
index 17daf42b30..0000000000
--- a/addressbook/ename/test-ename-western-gtk.c
+++ /dev/null
@@ -1,148 +0,0 @@
-#include 
-#include 
-
-ENameWestern *name;
-GtkWidget    *full;
-GtkWidget    *prefix;
-GtkWidget    *first;
-GtkWidget    *middle;
-GtkWidget    *nick;
-GtkWidget    *last;
-GtkWidget    *suffix;
-
-static void
-fill_entries (void)
-{
-
-#define SET(a,b) (gtk_entry_set_text (GTK_ENTRY (a), (b) == NULL ? "" : (b)))
-	SET(prefix, name->prefix);
-	SET(first,  name->first);
-	SET(middle, name->middle);
-	SET(nick,   name->nick);
-	SET(last,   name->last);
-	SET(suffix, name->suffix);
-}
-
-static void
-full_changed_cb (GtkEntry *fulle)
-{
-	e_name_western_free (name);
-	name = e_name_western_parse (gtk_entry_get_text (fulle));
-	fill_entries ();
-}
-
-static void
-create_window (void)
-{
-	GtkWidget *app;
-	GtkTable  *table;
-
-	GtkWidget *prefix_label;
-	GtkWidget *first_label;
-	GtkWidget *middle_label;
-	GtkWidget *nick_label;
-	GtkWidget *last_label;
-	GtkWidget *suffix_label;
-
-	app = gnome_app_new ("test", "Evolution Western Name Parser");
-
-	table = GTK_TABLE (gtk_table_new (3, 6, FALSE));
-
-	full   = gtk_entry_new ();
-	prefix = gtk_entry_new ();
-	first  = gtk_entry_new ();
-	middle = gtk_entry_new ();
-	nick   = gtk_entry_new ();
-	last   = gtk_entry_new ();
-	suffix = gtk_entry_new ();
-
-	gtk_widget_set_usize (prefix, 100, 0);
-	gtk_widget_set_usize (first,  100, 0);
-	gtk_widget_set_usize (middle, 100, 0);
-	gtk_widget_set_usize (nick,   100, 0);
-	gtk_widget_set_usize (last,   100, 0);
-	gtk_widget_set_usize (suffix, 100, 0);
-
-	gtk_table_attach (table, full, 0, 6, 0, 1,
-			  GTK_EXPAND | GTK_FILL, 0,
-			  0, 0);
-
-	gtk_table_attach (table, prefix, 0, 1, 1, 2,
-			  GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, first, 1, 2, 1, 2,
-			  GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, middle, 2, 3, 1, 2,
-			  GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, nick, 3, 4, 1, 2,
-			  GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, last, 4, 5, 1, 2,
-			  GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, suffix, 5, 6, 1, 2,
-			  GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0,
-			  0, 0);
-
-	prefix_label = gtk_label_new ("Prefix"); 
-	first_label  = gtk_label_new ("First"); 
-	middle_label = gtk_label_new ("Middle"); 
-	nick_label   = gtk_label_new ("Nick"); 
-	last_label   = gtk_label_new ("Last"); 
-	suffix_label = gtk_label_new ("Suffix"); 
-
-	gtk_table_attach (table, prefix_label, 0, 1, 2, 3,
-			  GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, first_label, 1, 2, 2, 3,
-			  GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, middle_label, 2, 3, 2, 3,
-			  GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, nick_label, 3, 4, 2, 3,
-			  GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, last_label, 4, 5, 2, 3,
-			  GTK_SHRINK, 0,
-			  0, 0);
-
-	gtk_table_attach (table, suffix_label, 5, 6, 2, 3,
-			  GTK_SHRINK, 0,
-			  0, 0);
-
-	gnome_app_set_contents (GNOME_APP (app), GTK_WIDGET (table));
-
-	gtk_widget_show_all (app);
-
-	gtk_entry_set_text (GTK_ENTRY (full),
-			    "The Honorable Doctor van Jacobsen, Albert Roderick \"The Clenched Fist\" Jr, MD, PhD, Esquire");
-
-	name = e_name_western_parse ("The Honorable Doctor van Jacobsen, Albert Roderick \"The Clenched Fist\" Jr, MD, PhD, Esquire");
-	fill_entries ();
-
-	gtk_signal_connect (GTK_OBJECT (full), "changed", full_changed_cb, NULL);
-}
-
-int
-main (int argc, char **argv)
-{
-	gnome_init ("Test EName", "Test EName", argc, argv);
-
-	create_window ();
-
-	gtk_main ();
-
-	return 0;
-}
diff --git a/addressbook/ename/test-ename-western.c b/addressbook/ename/test-ename-western.c
deleted file mode 100644
index 6d3beaf16f..0000000000
--- a/addressbook/ename/test-ename-western.c
+++ /dev/null
@@ -1,70 +0,0 @@
-#include 
-#include 
-
-#include 
-
-static void
-do_name (char *n)
-{
-	ENameWestern *wname;
-
-	wname = e_name_western_parse (n);
-
-	printf ("Full Name: [%s]\n", n);
-
-	printf ("Prefix: [%s]\n", wname->prefix);
-	printf ("First:  [%s]\n", wname->first);
-	printf ("Middle: [%s]\n", wname->middle);
-	printf ("Nick:   [%s]\n", wname->nick);
-	printf ("Last:   [%s]\n", wname->last);
-	printf ("Suffix: [%s]\n", wname->suffix);
-
-	printf ("\n");
-
-	e_name_western_free (wname);
-}
-
-int
-main (int argc, char **argv)
-{
-	if (argc == 2) {
-		while (! feof (stdin)) {
-			char s[256];
-
-			if (fgets (s, sizeof (s), stdin) == NULL)
-				return 0;
-
-			g_strstrip (s);
-
-			do_name (s);
-		}
-
-		return 0;
-	}
-
-	do_name ("Nat");
-	do_name ("Karl Anders Carlsson");
-	do_name ("Miguel de Icaza Amozorrutia");
-	do_name ("The Honorable Doctor de Icaza, Miguel \"Sparky\" Junior, PhD, MD");
-	do_name ("Nat Friedman MD, Phd");
-	do_name ("Nat Friedman PhD");
-	do_name ("Friedman, Nat");
-	do_name ("Miguel de Icaza Esquire");
-	do_name ("Dr Miguel \"Sparky\" de Icaza");
-	do_name ("Robert H.B. Netzer");
-	do_name ("W. Richard Stevens");
-	do_name ("Nat Friedman");
-	do_name ("N. Friedman");
-	do_name ("Miguel de Icaza");
-	do_name ("Drew Johnson");
-	do_name ("President Bill \"Slick Willy\" Clinton");
-	do_name ("The Honorable Mark J. Einstein Jr");
-	do_name ("Friedman, Nat");
-	do_name ("de Icaza, Miguel");
-	do_name ("Mr de Icaza, Miguel");
-	do_name ("Smith, John Jr");
-	do_name ("Nick Glennie-Smith");
-	do_name ("Dr von Johnson, Albert Roderick Jr");
-
-	return 0;
-}
diff --git a/addressbook/gui/.cvsignore b/addressbook/gui/.cvsignore
deleted file mode 100644
index 09980ae6ba..0000000000
--- a/addressbook/gui/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
diff --git a/addressbook/gui/Makefile.am b/addressbook/gui/Makefile.am
deleted file mode 100644
index a9fdef3273..0000000000
--- a/addressbook/gui/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = minicard search component
\ No newline at end of file
diff --git a/addressbook/gui/component/.cvsignore b/addressbook/gui/component/.cvsignore
deleted file mode 100644
index a8ecb5d170..0000000000
--- a/addressbook/gui/component/.cvsignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-*.lo
-*.la
-evolution-addressbook
-evolution-addressbook.pure
-test-addressbook
diff --git a/addressbook/gui/component/GNOME_Evolution_Addressbook.oaf.in b/addressbook/gui/component/GNOME_Evolution_Addressbook.oaf.in
deleted file mode 100644
index 4f319fb947..0000000000
--- a/addressbook/gui/component/GNOME_Evolution_Addressbook.oaf.in
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	        
-	
-
-	
-		
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
diff --git a/addressbook/gui/component/GNOME_Evolution_Addressbook.oafinfo b/addressbook/gui/component/GNOME_Evolution_Addressbook.oafinfo
deleted file mode 100644
index 4f319fb947..0000000000
--- a/addressbook/gui/component/GNOME_Evolution_Addressbook.oafinfo
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	        
-	
-
-	
-		
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
diff --git a/addressbook/gui/component/Makefile.am b/addressbook/gui/component/Makefile.am
deleted file mode 100644
index 9dc6f10e3a..0000000000
--- a/addressbook/gui/component/Makefile.am
+++ /dev/null
@@ -1,91 +0,0 @@
-SUBDIRS	= select-names
-
-CPPFLAGS =					\
-	-DEVOLUTION_GLADEDIR=\""$(gladedir)"\"
-
-INCLUDES =						\
-	-DG_LOG_DOMAIN=\"evolution-addressbook\"	\
-	$(EXTRA_GNOME_CFLAGS)				\
-	$(GNOME_INCLUDEDIR)				\
-	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
-	-I$(top_srcdir)/shell				\
-	-I$(top_builddir)/shell				\
-	-I$(top_srcdir)/widgets/e-text			\
-	-I$(top_srcdir)/widgets/e-table			\
-	-I$(top_srcdir)/widgets/misc			\
-	-I$(top_srcdir)/addressbook/gui/minicard	\
-	-I$(top_srcdir)/addressbook/contact-editor	\
-	-I$(top_srcdir)/addressbook/backend		\
-	-I$(top_builddir)/addressbook/backend		\
-	$(BONOBO_HTML_GNOME_CFLAGS)			\
-	-DEVOLUTION_VERSION=\""$(VERSION)"\"		\
-	-DEVOLUTION_GLADEDIR=\""$(gladedir)"\"		\
-	-DEVOLUTION_ICONSDIR=\""$(iconsdir)"\"		\
-	-DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\"	\
-	-DCAMEL_PROVIDERDIR=\""$(providerdir)"\"
-
-bin_PROGRAMS =	\
-	evolution-addressbook
-
-evolution_addressbook_SOURCES = 	\
-	addressbook-component.c		\
-	addressbook-component.h		\
-	addressbook-factory.c		\
-	addressbook.c			\
-	addressbook.h			\
-	e-addressbook-model.c		\
-	e-addressbook-model.h		\
-	e-cardlist-model.c		\
-	e-cardlist-model.h		\
-	e-ldap-server-dialog.c          \
-	e-ldap-server-dialog.h		\
-	e-ldap-storage.c		\
-	e-ldap-storage.h
-
-evolution_addressbook_LDADD =						\
-	select-names/libeselectnames.la					\
-	$(top_builddir)/shell/libeshell.a				\
-	$(EXTRA_GNOME_LIBS)						\
-	$(BONOBO_HTML_GNOME_LIBS)					\
-	$(top_builddir)/addressbook/gui/minicard/libeminicard.a		\
-	$(top_builddir)/addressbook/backend/ebook/libebook.la		\
-	$(top_builddir)/addressbook/ename/libename.la			\
-	$(top_builddir)/addressbook/contact-editor/libecontacteditor.a	\
-	$(top_builddir)/libversit/libversit.la				\
-	$(top_builddir)/widgets/e-text/libetext.a			\
-	$(top_builddir)/widgets/e-table/libetable.a			\
-	$(top_builddir)/widgets/misc/libemiscwidgets.a 			\
-	$(top_builddir)/e-util/libeutil.la				\
-	$(top_builddir)/addressbook/printing/libecontactprint.a		\
-	$(top_builddir)/addressbook/gui/search/libeaddressbooksearch.a
-
-evolution_addressbook_LDFLAGS = `gnome-config --libs gdk_pixbuf`
-
-if USING_OAF
-oafdir = $(datadir)/oaf
-oaf_DATA = addressbook.oafinfo
-else
-gnorbadir = $(sysconfdir)/CORBA/servers
-gnorba_DATA = addressbook.gnorba
-endif
-
-gladedir   = $(datadir)/evolution/glade
-glade_DATA = ldap-server-dialog.glade ldap-server-dialog.glade.h alphabet.glade
-
-EXTRA_DIST = 			\
-	$(glade_DATA)		\
-	addressbook.gnorba	\
-	addressbook.oafinfo	\
-	alphabet.glade.h
-
-if ENABLE_PURIFY
-PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-
-all-local: evolution-addressbook.pure
-
-evolution-addressbook.pure: evolution-addressbook
-	@rm -f evolution-addressbook.pure
-	$(PLINK) $(evolution_addressbook_LDFLAGS) $(evolution_addressbook_OBJECTS) $(evolution_addressbook_LDADD) $(LIBS)
-
-endif
diff --git a/addressbook/gui/component/addressbook-component.c b/addressbook/gui/component/addressbook-component.c
deleted file mode 100644
index b066330a49..0000000000
--- a/addressbook/gui/component/addressbook-component.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* addressbook-component.c
- *
- * Copyright (C) 2000  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-
-#include 
-
-#include "evolution-shell-component.h"
-#include "evolution-storage.h"
-
-#include "addressbook-component.h"
-#include "addressbook.h"
-#include "e-ldap-storage.h"
-
-
-#ifdef USING_OAF
-#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0"
-#else
-#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:addressbook"
-#endif
-
-static BonoboGenericFactory *factory = NULL;
-
-static const EvolutionShellComponentFolderType folder_types[] = {
-	{ "contacts", "evolution-contacts.png" },
-	{ NULL, NULL }
-};
-
-
-/* EvolutionShellComponent methods and signals.  */
-
-static EvolutionShellComponentResult
-create_view (EvolutionShellComponent *shell_component,
-	     const char *physical_uri,
-	     const char *type,
-	     BonoboControl **control_return,
-	     void *closure)
-{
-	BonoboControl *control;
-
-	if (g_strcasecmp (type, "contacts") != 0)
-		return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE;
-
-	control = addressbook_factory_new_control ();
-	bonobo_control_set_property (control, "folder_uri", physical_uri, NULL);
-
-	*control_return = control;
-
-	return EVOLUTION_SHELL_COMPONENT_OK;
-}
-
-static int owner_count = 0;
-
-static void
-owner_set_cb (EvolutionShellComponent *shell_component,
-	      EvolutionShellClient *shell_client,
-	      const char *evolution_homedir,
-	      gpointer user_data)
-{
-	owner_count ++;
-
-	setup_ldap_storage (shell_component, evolution_homedir);
-}
-
-static void
-owner_unset_cb (EvolutionShellComponent *shell_component,
-		Evolution_Shell shell_interface,
-		gpointer user_data)
-{
-	owner_count --;
-	if (owner_count == 0)
-		gtk_main_quit();
-}
-
-
-/* The factory function.  */
-
-static BonoboObject *
-factory_fn (BonoboGenericFactory *factory,
-	    void *closure)
-{
-	EvolutionShellComponent *shell_component;
-
-	shell_component = evolution_shell_component_new (folder_types, create_view, NULL, NULL, NULL, NULL);
-
-	gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
-			    GTK_SIGNAL_FUNC (owner_set_cb), NULL);
-
-	gtk_signal_connect (GTK_OBJECT (shell_component), "owner_unset",
-			    GTK_SIGNAL_FUNC (owner_unset_cb), NULL);
-
-	return BONOBO_OBJECT (shell_component);
-}
-
-
-void
-addressbook_component_factory_init (void)
-{
-	if (factory != NULL)
-		return;
-
-	factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL);
-
-	if (factory == NULL)
-		g_error ("Cannot initialize the Evolution addressbook factory.");
-}
-
diff --git a/addressbook/gui/component/addressbook-component.h b/addressbook/gui/component/addressbook-component.h
deleted file mode 100644
index ec37da694a..0000000000
--- a/addressbook/gui/component/addressbook-component.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* addressbook-component.h
- *
- * Copyright (C) 2000  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef _ADDRESSBOOK_COMPONENT_H
-#define _ADDRESSBOOK_COMPONENT_H
-
-void  addressbook_component_factory_init  (void);
-
-#endif /* _ADDRESSBOOK_COMPONENT_H */
diff --git a/addressbook/gui/component/addressbook-factory.c b/addressbook/gui/component/addressbook-factory.c
deleted file mode 100644
index 7b939318fb..0000000000
--- a/addressbook/gui/component/addressbook-factory.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * sample-control-factory.c
- *
- * Copyright 1999, Helix Code, Inc.
- * 
- * Author:
- *   Nat Friedman (nat@nat.org)
- *
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "addressbook.h"
-#include "addressbook-component.h"
-#include "addressbook/gui/minicard/e-minicard-control.h"
-#include "select-names/e-select-names-factory.h"
-
-#ifdef USING_OAF
-
-#include 
-
-static void
-init_corba (int *argc, char **argv)
-{
-	gnome_init_with_popt_table ("evolution-addressbook", "0.0",
-				    *argc, argv, oaf_popt_options, 0, NULL);
-
-	oaf_init (*argc, argv);
-}
-
-#else
-
-#include 
- 
-static void
-init_corba (int *argc, char **argv)
-{
-	CORBA_Environment ev;
-
-	CORBA_exception_init (&ev);
-
-	gnome_CORBA_init_with_popt_table (
-		"evolution-addressbook", "0.0",
-		argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
-
-	CORBA_exception_free (&ev);
-}
-
-#endif
-
-static void
-init_bonobo (int argc, char **argv)
-{
-	if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
-		g_error (_("Could not initialize Bonobo"));
-
-	glade_gnome_init ();
-}
-
-int
-main (int argc, char **argv)
-{
-	init_corba (&argc, argv);
-
-	init_bonobo (argc, argv);
-
-	/* FIXME: Messy names here.  This file should be `main.c'.  `addressbook.c' should
-           be `addressbook-control-factory.c' and the functions should be called
-           `addressbook_control_factory_something()'.  And `addressbook-component.c'
-           should be `addressbook-component-factory.c'.  */
-
-	addressbook_factory_init ();
-	addressbook_component_factory_init ();
-
-	e_select_names_factory_init ();
-	
-	e_minicard_control_factory_init ();
-
-	e_cursors_init();
-
-	bonobo_main ();
-
-	return 0;
-}
diff --git a/addressbook/gui/component/addressbook.c b/addressbook/gui/component/addressbook.c
deleted file mode 100644
index 9c0213edd8..0000000000
--- a/addressbook/gui/component/addressbook.c
+++ /dev/null
@@ -1,1144 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * addressbook.c: 
- *
- * Author:
- *   Chris Lahey (clahey@helixcode.com)
- *
- * (C) 2000 Helix Code, Inc.
- */
-
-#include 
-
-#include 
-#include 
-#include 
-
-#include "addressbook.h"
-
-#include 
-#include 
-#include 
-#include "e-minicard-view-widget.h"
-#include "addressbook/gui/search/e-addressbook-search-dialog.h"
-
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-#include 
-#include "e-contact-editor.h"
-#include "e-contact-save-as.h"
-#include "e-ldap-server-dialog.h"
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#ifdef USING_OAF
-#define CONTROL_FACTORY_ID "OAFIID:control-factory:addressbook:3e10597b-0591-4d45-b082-d781b7aa6e17"
-#else
-#define CONTROL_FACTORY_ID "control-factory:addressbook"
-#endif
-
-#define PROPERTY_FOLDER_URI          "folder_uri"
-
-#define PROPERTY_FOLDER_URI_IDX      1
-
-typedef enum {
-	ADDRESSBOOK_VIEW_NONE, /* initialized to this */
-	ADDRESSBOOK_VIEW_TABLE,
-	ADDRESSBOOK_VIEW_MINICARD
-} AddressbookViewType;
-
-typedef struct {
-	AddressbookViewType view_type;
-	EBook *book;
-	GtkWidget *vbox;
-	GtkWidget *minicard_hbox;
-	GtkWidget *minicard_view;
-	GtkWidget *table;
-	ETableModel *model;
-	ECardSimple *simple;
-	GtkAllocation last_alloc;
-	BonoboControl *control;
-	BonoboPropertyBag *properties;
-	char *uri;
-} AddressbookView;
-
-static void change_view_type (AddressbookView *view, AddressbookViewType view_type);
-
-static void
-control_deactivate (BonoboControl *control, BonoboUIHandler *uih)
-{
-	/* how to remove a menu item */
-	bonobo_ui_handler_menu_remove (uih, "/File//Print contacts...");
-	bonobo_ui_handler_menu_remove (uih, "/File//separator1");
-	bonobo_ui_handler_menu_remove (uih, "/File/TestSelectNames");
-	bonobo_ui_handler_menu_remove (uih, "/View/");
-	bonobo_ui_handler_menu_remove (uih, "/View/Toggle View"); 
-	bonobo_ui_handler_menu_remove (uih, "/Actions/New Contact"); 
-#ifdef HAVE_LDAP
-	bonobo_ui_handler_menu_remove (uih, "/Actions/New Directory Server");
-#endif
-	bonobo_ui_handler_menu_remove (uih, "//Tools");
-	bonobo_ui_handler_menu_remove (uih, "//Tools/Search");
-	/* remove our toolbar */
-	bonobo_ui_handler_dock_remove (uih, "/Toolbar");
-}
-
-static void
-card_added_cb (EBook* book, EBookStatus status, const char *id,
-	    gpointer user_data)
-{
-	g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__);
-}
-
-static void
-card_modified_cb (EBook* book, EBookStatus status,
-		  gpointer user_data)
-{
-	g_print ("%s: %s(): a card was modified\n", __FILE__, __FUNCTION__);
-}
-
-/* Callback for the add_card signal from the contact editor */
-static void
-add_card_cb (EContactEditor *ce, ECard *card, gpointer data)
-{
-	EBook *book;
-
-	book = E_BOOK (data);
-	e_book_add_card (book, card, card_added_cb, NULL);
-}
-
-/* Callback for the commit_card signal from the contact editor */
-static void
-commit_card_cb (EContactEditor *ce, ECard *card, gpointer data)
-{
-	EBook *book;
-
-	book = E_BOOK (data);
-	e_book_commit_card (book, card, card_modified_cb, NULL);
-}
-
-/* Callback for the delete_card signal from the contact editor */
-static void
-delete_card_cb (EContactEditor *ce, ECard *card, gpointer data)
-{
-	EBook *book;
-
-	book = E_BOOK (data);
-	e_book_remove_card (book, card, card_modified_cb, NULL);
-}
-
-/* Callback used when the contact editor is closed */
-static void
-editor_closed_cb (EContactEditor *ce, gpointer data)
-{
-	gtk_object_unref (GTK_OBJECT (ce));
-}
-
-static void
-new_contact_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	ECard *card;
-	EBook *book;
-	EContactEditor *ce;
-	AddressbookView *view = (AddressbookView *) user_data;
-	GtkObject *object;
-
-	card = e_card_new("");
-
-	if (view->minicard_view)
-		object = GTK_OBJECT(view->minicard_view);
-	else
-		object = GTK_OBJECT(view->model);
-
-	gtk_object_get(object, "book", &book, NULL);
-	g_assert (E_IS_BOOK (book));
-
-	ce = e_contact_editor_new (card, TRUE);
-
-	gtk_signal_connect (GTK_OBJECT (ce), "add_card",
-			    GTK_SIGNAL_FUNC (add_card_cb), book);
-	gtk_signal_connect (GTK_OBJECT (ce), "commit_card",
-			    GTK_SIGNAL_FUNC (commit_card_cb), book);
-	gtk_signal_connect (GTK_OBJECT (ce), "delete_card",
-			    GTK_SIGNAL_FUNC (delete_card_cb), book);
-	gtk_signal_connect (GTK_OBJECT (ce), "editor_closed",
-			    GTK_SIGNAL_FUNC (editor_closed_cb), NULL);
-
-	gtk_object_sink(GTK_OBJECT(card));
-}
-
-static void
-toggle_view_as_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	AddressbookView *view = user_data;
-	
-	if (view->view_type == ADDRESSBOOK_VIEW_TABLE)
-		change_view_type (view, ADDRESSBOOK_VIEW_MINICARD);
-	else
-		change_view_type (view, ADDRESSBOOK_VIEW_TABLE);
-}
-
-#ifdef HAVE_LDAP
-static void
-null_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-}
-
-static void
-new_server_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	ELDAPServer *server = g_new (ELDAPServer, 1);
-	EBook *book;
-	AddressbookView *view = (AddressbookView *) user_data;
-	GtkObject *object;
-
-	/* fill in the defaults */
-	server->name = g_strdup("");
-	server->host = g_strdup("");
-	server->port = g_strdup_printf("%d", 389);
-	server->description = g_strdup("");
-	server->rootdn = g_strdup("");
-	server->uri = g_strdup_printf ("ldap://%s:%s/%s", server->host, server->port, server->rootdn);
-	e_ldap_server_editor_show (server);
-
-	if (view->minicard_view)
-		object = GTK_OBJECT(view->minicard_view);
-	else
-		object = GTK_OBJECT(view->model);
-	gtk_object_get(object, "book", &book, NULL);
-	g_assert (E_IS_BOOK (book));
-	
-	/* write out the new server info */
-	e_ldap_storage_add_server (server);
-
-	/* now update the view */
-	e_book_unload_uri (book);
-	if (! e_book_load_uri (book, server->uri, null_cb, NULL)) {
-		g_warning ("error calling load_uri!\n");
-	}
-}
-#endif
-
-static void
-search_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	EBook *book;
-	AddressbookView *view = (AddressbookView *) user_data;
-	GtkObject *object;
-
-	if (view->minicard_view)
-		object = GTK_OBJECT(view->minicard_view);
-	else
-		object = GTK_OBJECT(view->model);
-	gtk_object_get(object, "book", &book, NULL);
-	g_assert (E_IS_BOOK (book));
-
-	gtk_widget_show(e_addressbook_search_dialog_new(book));
-}
-
-static char *
-get_query (AddressbookView *view)
-{
-	GtkObject *object;
-	char *query = NULL;
-
-	if (view->minicard_view)
-		object = GTK_OBJECT(view->minicard_view);
-	else
-		object = GTK_OBJECT(view->model);
-
-	if (object)
-		gtk_object_get (object, "query", &query, NULL);
-
-	return query;
-}
-
-static void
-set_query (AddressbookView *view, char *query)
-{
-	GtkObject *object;
-
-	if (view->minicard_view)
-		object = GTK_OBJECT(view->minicard_view);
-	else
-		object = GTK_OBJECT(view->model);
-
-	gtk_object_set (object, 
-			"query", query, 
-			NULL);
-}
-
-static void
-set_book(AddressbookView *view)
-{
-	if (view->book)
-		gtk_object_set(view->minicard_view ? GTK_OBJECT(view->minicard_view) : GTK_OBJECT(view->model),
-			       "book", view->book,
-			       NULL);
-}
-
-static void
-find_contact_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	gint result;
-	GtkWidget* search_entry = gtk_entry_new();
-	gchar* search_text;
-	AddressbookView *view = (AddressbookView *) user_data;
-
-	GtkWidget* dlg = gnome_dialog_new ("Search Contacts", "Find",
-					   GNOME_STOCK_BUTTON_CANCEL, NULL);
-
-	search_text = get_query (view);
-	gtk_entry_set_text(GTK_ENTRY(search_entry), search_text);
-	g_free (search_text);
-
-	gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dlg)->vbox),
-			    search_entry, TRUE, TRUE, 0);
-
-	gtk_widget_show_all (dlg);
-
-	gnome_dialog_close_hides (GNOME_DIALOG (dlg), TRUE);
-	result = gnome_dialog_run_and_close (GNOME_DIALOG (dlg));
-
-	/* If the user clicks "okay"...*/
-	if (result == 0) {
-		search_text = gtk_entry_get_text(GTK_ENTRY(search_entry));
-		set_query (view, search_text);
-	}
-	
-}
-
-static void
-card_deleted_cb (EBook* book, EBookStatus status, gpointer user_data)
-{
-	g_print ("%s: %s(): a card was deleted\n", __FILE__, __FUNCTION__);
-}
-
-static void
-delete_contact_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	AddressbookView *view = (AddressbookView *) user_data;
-	if (view->minicard_view)
-		e_minicard_view_widget_remove_selection (E_MINICARD_VIEW_WIDGET(view->minicard_view), card_deleted_cb, NULL);
-}
-
-static void
-e_contact_print_destroy(GnomeDialog *dialog, gpointer data)
-{
-	ETableScrolled *table = gtk_object_get_data(GTK_OBJECT(dialog), "table");
-	EPrintable *printable = gtk_object_get_data(GTK_OBJECT(dialog), "printable");
-	gtk_object_unref(GTK_OBJECT(printable));
-	gtk_object_unref(GTK_OBJECT(table));
-}
-
-static void
-e_contact_print_button(GnomeDialog *dialog, gint button, gpointer data)
-{
-	GnomePrintMaster *master;
-	GnomePrintContext *pc;
-	EPrintable *printable = gtk_object_get_data(GTK_OBJECT(dialog), "printable");
-	GtkWidget *preview;
-	switch( button ) {
-	case GNOME_PRINT_PRINT:
-		master = gnome_print_master_new_from_dialog( GNOME_PRINT_DIALOG(dialog) );
-		pc = gnome_print_master_get_context( master );
-		e_printable_reset(printable);
-		while (e_printable_data_left(printable)) {
-			if (gnome_print_gsave(pc) == -1)
-				/* FIXME */;
-			if (gnome_print_translate(pc, .5 * 72, .5 * 72) == -1)
-				/* FIXME */;
-			e_printable_print_page(printable,
-					       pc,
-					       7.5 * 72,
-					       10.5 * 72,
-					       TRUE);
-			if (gnome_print_grestore(pc) == -1)
-				/* FIXME */;
-			if (gnome_print_showpage(pc) == -1)
-				/* FIXME */;
-		}
-		gnome_print_master_close(master);
-		gnome_print_master_print(master);
-		gtk_object_unref(GTK_OBJECT(master));
-		gnome_dialog_close(dialog);
-		break;
-	case GNOME_PRINT_PREVIEW:
-		master = gnome_print_master_new_from_dialog( GNOME_PRINT_DIALOG(dialog) );
-		pc = gnome_print_master_get_context( master );
-		e_printable_reset(printable);
-		while (e_printable_data_left(printable)) {
-			if (gnome_print_gsave(pc) == -1)
-				/* FIXME */;
-			if (gnome_print_translate(pc, .5 * 72, .5 * 72) == -1)
-				/* FIXME */;
-			e_printable_print_page(printable,
-					       pc,
-					       7.5 * 72,
-					       10.5 * 72,
-					       TRUE);
-			if (gnome_print_grestore(pc) == -1)
-				/* FIXME */;
-			if (gnome_print_showpage(pc) == -1)
-				/* FIXME */;
-		}
-		gnome_print_master_close(master);
-		preview = GTK_WIDGET(gnome_print_master_preview_new(master, "Print Preview"));
-		gtk_widget_show_all(preview);
-		gtk_object_unref(GTK_OBJECT(master));
-		break;
-	case GNOME_PRINT_CANCEL:
-		gnome_dialog_close(dialog);
-		break;
-	}
-}
-
-static void
-print_cb (BonoboUIHandler *uih, void *user_data, const char *path)
-{
-	AddressbookView *view = (AddressbookView *) user_data;
-	if (view->minicard_view) {
-		char *query = get_query(view);
-		GtkWidget *print = e_contact_print_dialog_new(view->book, query);
-		g_free(query);
-		gtk_widget_show_all(print);
-	} else {
-		GtkWidget *dialog;
-		EPrintable *printable;
-
-		dialog = gnome_print_dialog_new("Print cards", GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES);
-		gnome_print_dialog_construct_range_any(GNOME_PRINT_DIALOG(dialog), GNOME_PRINT_RANGE_ALL | GNOME_PRINT_RANGE_SELECTION,
-						       NULL, NULL, NULL);
-		
-		printable = e_table_scrolled_get_printable(E_TABLE_SCROLLED(view->table));
-
-		gtk_object_ref(GTK_OBJECT(view->table));
-
-		gtk_object_set_data(GTK_OBJECT(dialog), "table", view->table);
-		gtk_object_set_data(GTK_OBJECT(dialog), "printable", printable);
-		
-		gtk_signal_connect(GTK_OBJECT(dialog),
-				   "clicked", GTK_SIGNAL_FUNC(e_contact_print_button), NULL);
-		gtk_signal_connect(GTK_OBJECT(dialog),
-				   "destroy", GTK_SIGNAL_FUNC(e_contact_print_destroy), NULL);
-		gtk_widget_show(dialog);
-	}
-}
-
-static GnomeUIInfo gnome_toolbar [] = {
-	GNOMEUIINFO_ITEM_STOCK (N_("New"), N_("Create a new contact"), new_contact_cb, GNOME_STOCK_PIXMAP_NEW),
-
-	GNOMEUIINFO_SEPARATOR,
-
-	GNOMEUIINFO_ITEM_STOCK (N_("Find"), N_("Find a contact"), find_contact_cb, GNOME_STOCK_PIXMAP_SEARCH),
-	GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print contacts"), print_cb, GNOME_STOCK_PIXMAP_PRINT),
-	GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete a contact"), delete_contact_cb, GNOME_STOCK_PIXMAP_TRASH),
-	GNOMEUIINFO_SEPARATOR,
-	GNOMEUIINFO_END
-};
-
-
-static void
-search_entry_activated (GtkWidget* widget, gpointer user_data)
-{
-	char* search_word = gtk_entry_get_text(GTK_ENTRY(widget));
-	char* search_query;
-	AddressbookView *view = (AddressbookView *) user_data;
-
-	if (search_word && strlen (search_word))
-		search_query = g_strdup_printf (
-			"(contains \"x-evolution-any-field\" \"%s\")",
-			search_word);
-	else
-		search_query = g_strdup (
-			"(contains \"full_name\" \"\")");
-
-	set_query(view, search_query);
-
-	g_free (search_query);
-}
-
-static GtkWidget*
-make_quick_search_widget (GtkSignalFunc start_search_func,
-			  gpointer user_data_for_search)
-{
-	GtkWidget *search_vbox = gtk_vbox_new (FALSE, 0);
-	GtkWidget *search_entry = gtk_entry_new ();
-
-	if (start_search_func)
-	{
-		gtk_signal_connect (GTK_OBJECT (search_entry), "activate",
-				    (GtkSignalFunc) search_entry_activated,
-				    user_data_for_search);
-	}
-	
-	/* add the search entry to the our search_vbox */
-	gtk_box_pack_start (GTK_BOX (search_vbox), search_entry,
-			    FALSE, TRUE, 3);
-	gtk_box_pack_start (GTK_BOX (search_vbox),
-			    gtk_label_new("Quick Search"),
-			    FALSE, TRUE, 0);
-
-	return search_vbox;
-}
-
-static void
-control_activate (BonoboControl *control, BonoboUIHandler *uih,
-		  AddressbookView *view)
-{
-	Bonobo_UIHandler  remote_uih;
-	GtkWidget *toolbar, *toolbar_frame;
-	BonoboControl *toolbar_control;
-	GnomeDockItemBehavior behavior;
-	GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
-	GtkWidget *quick_search_widget;
-
-	remote_uih = bonobo_control_get_remote_ui_handler (control);
-	bonobo_ui_handler_set_container (uih, remote_uih);		
-	bonobo_object_release_unref (remote_uih, NULL);
-
-	bonobo_ui_handler_menu_new_separator (uih, "/View/", -1);
-
-	bonobo_ui_handler_menu_new_item (uih, "/File//Print contacts...",
-					 N_("_Print Contacts..."),
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_STOCK,
-					 GNOME_STOCK_MENU_PRINT,
-					 0, 0, print_cb,
-					 (gpointer) view);
-
-	bonobo_ui_handler_menu_new_separator (uih, "/File//separator1", -1);
-
-	bonobo_ui_handler_menu_new_item (uih, "/View/Toggle View",
-					 N_("As _Table"),
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
-					 0, 0, toggle_view_as_cb,
-					 (gpointer)view);
-
-	bonobo_ui_handler_menu_new_item (uih, "/Actions/New Contact",
-					 N_("_New Contact"),       
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
-					 0, 0, new_contact_cb,
-					 (gpointer)view);
-
-#ifdef HAVE_LDAP
-	bonobo_ui_handler_menu_new_item (uih, "/Actions/New Directory Server",
-					 N_("N_ew Directory Server"),       
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
-					 0, 0, new_server_cb,
-					 (gpointer)view);
-#endif
-
-	bonobo_ui_handler_menu_new_subtree (uih, "//Tools",
-					    _("_Tools"),
-					    NULL, -1,
-					    BONOBO_UI_HANDLER_PIXMAP_NONE, NULL,
-					    0, 0);
-
-	bonobo_ui_handler_menu_new_item (uih, "//Tools/Search",
-					 N_("_Search for contacts"),
-					 NULL, -1,
-					 BONOBO_UI_HANDLER_PIXMAP_STOCK, GNOME_STOCK_MENU_SEARCH,
-					 0, 0, search_cb,
-					 (gpointer)view);
-
-	toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL,
-				   GTK_TOOLBAR_BOTH);
-
-	gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar),
-					  gnome_toolbar, 
-					  NULL, view);
-	
-	gtk_box_pack_start (GTK_BOX (hbox), toolbar, FALSE, TRUE, 0);
-
-
-	/* add the search_vbox to the hbox which will be our toolbar */
-	quick_search_widget = make_quick_search_widget (
-		search_entry_activated, view);
-	
-	gtk_box_pack_start (GTK_BOX (hbox),
-			    quick_search_widget,
-			    FALSE, TRUE, 0);
-
-	gtk_widget_show_all (hbox);
-
-	toolbar_frame = gtk_frame_new (NULL);
-	gtk_frame_set_shadow_type (GTK_FRAME (toolbar_frame), GTK_SHADOW_OUT);
-	gtk_container_add (GTK_CONTAINER (toolbar_frame), hbox);
-	gtk_widget_show (toolbar_frame);
-
-	gtk_widget_show_all (toolbar_frame);
-
-	behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE;
-	if (!gnome_preferences_get_toolbar_detachable ())
-		behavior |= GNOME_DOCK_ITEM_BEH_LOCKED;
-
-	toolbar_control = bonobo_control_new (toolbar_frame);
-	bonobo_ui_handler_dock_add (
-		uih, "/Toolbar",
-		bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)),
-		behavior,
-		GNOME_DOCK_TOP,
-		1, 1, 0);
-}
-
-static void
-control_activate_cb (BonoboControl *control, 
-		     gboolean activate, 
-		     AddressbookView *view)
-{
-	BonoboUIHandler  *uih;
-
-	uih = bonobo_control_get_ui_handler (control);
-	g_assert (uih);
-	
-	if (activate)
-		control_activate (control, uih, view);
-	else
-		control_deactivate (control, uih);
-}
-
-static void
-addressbook_view_free(AddressbookView *view)
-{
-	if (view->properties)
-		bonobo_object_unref(BONOBO_OBJECT(view->properties));
-	if (view->book)
-		gtk_object_unref(GTK_OBJECT(view->book));
-	g_free(view->uri);
-	g_free(view);
-}
-
-static void
-book_open_cb (EBook *book, EBookStatus status, gpointer closure)
-{
-	AddressbookView *view = closure;
-	if (status == E_BOOK_STATUS_SUCCESS) {
-		set_book (view);
-	} else {
-		GtkWidget *warning_dialog, *label, *href;
-        	warning_dialog = gnome_dialog_new (
-        		_("Unable to open addressbook"),
-			GNOME_STOCK_BUTTON_CLOSE,
-        		NULL);
-        
-        	label = gtk_label_new (
-        		_("We were unable to open this addressbook.  This either\n"
-			  "means you have entered an incorrect URI, or have tried\n"
-			  "to access an LDAP server and don't have LDAP support\n"
-			  "compiled in.  If you've entered a URI, check the URI for\n"
-			  "correctness and reenter.  If not, you probably have\n"
-			  "attempted to access an LDAP server.  If you wish to be\n"
-			  "able to use LDAP, you'll need to download and install\n"
-			  "OpenLDAP and recompile and install evolution.\n"));
-		gtk_misc_set_alignment(GTK_MISC(label),
-				       0, .5);
-		gtk_label_set_justify(GTK_LABEL(label),
-				      GTK_JUSTIFY_LEFT);
-		gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (warning_dialog)->vbox), 
-				    label, TRUE, TRUE, 0);
-        	gtk_widget_show (label);
-
-		href = gnome_href_new ("http://www.openldap.org/", "OpenLDAP at http://www.openldap.org/");
-		gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (warning_dialog)->vbox), 
-				    href, FALSE, FALSE, 0);
-        	gtk_widget_show (href);
-
-		gnome_dialog_run (GNOME_DIALOG (warning_dialog));
-		
-		gtk_object_destroy (GTK_OBJECT (warning_dialog));
-	}
-}
-
-static void destroy_callback(GtkWidget *widget, gpointer data)
-{
-	AddressbookView *view = data;
-	addressbook_view_free(view);
-}
-
-static void
-get_prop (BonoboPropertyBag *bag,
-	  BonoboArg         *arg,
-	  guint              arg_id,
-	  gpointer           user_data)
-{
-	AddressbookView *view = user_data;
-
-	switch (arg_id) {
-
-	case PROPERTY_FOLDER_URI_IDX:
-		if (view && view->uri)
-			BONOBO_ARG_SET_STRING (arg, view->uri);
-		else
-			BONOBO_ARG_SET_STRING (arg, "");
-		break;
-
-	default:
-		g_warning ("Unhandled arg %d\n", arg_id);
-	}
-}
-
-static void
-set_prop (BonoboPropertyBag *bag,
-	  const BonoboArg   *arg,
-	  guint              arg_id,
-	  gpointer           user_data)
-{
-	AddressbookView *view = user_data;
-
-	char *uri_data;
-	
-	switch (arg_id) {
-
-	case PROPERTY_FOLDER_URI_IDX:
-		if (view->uri) {
-			/* we've already had a uri set on this view, so unload it */
-			e_book_unload_uri (view->book);
-			g_free (view->uri);
-		}
-
-		view->uri = g_strdup(BONOBO_ARG_GET_STRING (arg));
-		
-		if (!strncmp (view->uri, "file:", 5)) {
-			char *file_name = g_concat_dir_and_file(view->uri + 7, "addressbook.db");
-			uri_data = g_strdup_printf("file://%s", file_name);
-			g_free(file_name);
-		}
-		else {
-			uri_data = g_strdup (view->uri);
-		}
-
-		if (! e_book_load_uri (view->book, uri_data, book_open_cb, view))
-			printf ("error calling load_uri!\n");
-
-		g_free(uri_data);
-
-		break;
-		
-	default:
-		g_warning ("Unhandled arg %d\n", arg_id);
-		break;
-	}
-}
-
-#define SPEC "    \
- \
-                          \
-    0                   \
-    1                   \
-    5                   \
-    3                   \
-    4                   \
-                         \
-                               \
-     \
-                              \
-"
-
-static void
-teardown_minicard_view (AddressbookView *view)
-{
-	if (view->minicard_view) {
-		view->minicard_view = NULL;
-	}
-	if (view->minicard_hbox) {
-		gtk_widget_destroy(view->minicard_hbox);
-		view->minicard_hbox = NULL;
-	}
-}
-
-typedef struct {
-	AddressbookView *view;
-	char letter;
-} LetterClosure;
-
-static void
-jump_to_letter(GtkWidget *button, LetterClosure *closure)
-{
-	if (closure->view->minicard_view)
-		e_minicard_view_widget_jump_to_letter(E_MINICARD_VIEW_WIDGET(closure->view->minicard_view), closure->letter);
-}
-
-static void
-free_closure(GtkWidget *button, LetterClosure *closure)
-{
-	g_free(closure);
-}
-
-static void
-connect_button (AddressbookView *view, GladeXML *gui, char letter)
-{
-	char *name;
-	GtkWidget *button;
-	LetterClosure *closure;
-	name = g_strdup_printf("button-%c", letter);
-	button = glade_xml_get_widget(gui, name);
-	g_free(name);
-	if (!button)
-		return;
-	closure = g_new(LetterClosure, 1);
-	closure->view = view;
-	closure->letter = letter;
-	gtk_signal_connect(GTK_OBJECT(button), "clicked",
-			   GTK_SIGNAL_FUNC(jump_to_letter), closure);
-	gtk_signal_connect(GTK_OBJECT(button), "destroy",
-			   GTK_SIGNAL_FUNC(free_closure), closure);
-}
-
-static GtkWidget *
-create_alphabet (AddressbookView *view)
-{
-	GtkWidget *widget;
-	char letter;
-	GladeXML *gui = glade_xml_new (EVOLUTION_GLADEDIR "/alphabet.glade", NULL);
-
-	widget = glade_xml_get_widget(gui, "scrolledwindow-top");
-	if (!widget) {
-		return NULL;
-	}
-	
-	connect_button(view, gui, '1');
-	for (letter = 'a'; letter <= 'z'; letter ++) {
-		connect_button(view, gui, letter);
-	}
-	
-	gtk_object_unref(GTK_OBJECT(gui));
-	return widget;
-}
-
-static void
-create_minicard_view (AddressbookView *view, char *initial_query)
-{
-	GtkWidget *scrollframe;
-	GtkWidget *alphabet;
-
-	gtk_widget_push_visual (gdk_rgb_get_visual ());
-	gtk_widget_push_colormap (gdk_rgb_get_cmap ());
-
-	view->minicard_hbox = gtk_hbox_new(FALSE, 0);
-
-	view->minicard_view = e_minicard_view_widget_new();
-
-	scrollframe = e_scroll_frame_new (NULL, NULL);
-	e_scroll_frame_set_policy (E_SCROLL_FRAME (scrollframe),
-				   GTK_POLICY_AUTOMATIC,
-				   GTK_POLICY_NEVER);
-
-	gtk_container_add (GTK_CONTAINER (scrollframe), view->minicard_view);
-
-	gtk_box_pack_start(GTK_BOX(view->minicard_hbox), scrollframe, TRUE, TRUE, 0);
-
-	alphabet = create_alphabet(view);
-	if (alphabet) {
-		gtk_object_ref(GTK_OBJECT(alphabet));
-		gtk_widget_unparent(alphabet);
-		gtk_box_pack_start(GTK_BOX(view->minicard_hbox), alphabet, FALSE, FALSE, 0);
-		gtk_object_unref(GTK_OBJECT(alphabet));
-	}
-
-	gtk_box_pack_start(GTK_BOX(view->vbox), view->minicard_hbox, TRUE, TRUE, 0);
-
-	gtk_widget_show_all( GTK_WIDGET(view->minicard_hbox) );
-
-#if 0
-	gdk_window_set_back_pixmap(
-		GTK_LAYOUT(view->canvas)->bin_window, NULL, FALSE);
-#endif
-
-	gtk_widget_pop_visual ();
-	gtk_widget_pop_colormap ();
-}
-
-static void
-teardown_table_view (AddressbookView *view)
-{
-	if (view->table) {
-		gtk_widget_destroy (GTK_WIDGET (view->table));
-		view->table = NULL;
-	}
-	if (view->model) {
-		gtk_object_unref (GTK_OBJECT (view->model));
-		view->model = NULL;
-	}
-	if (view->simple) {
-		gtk_object_destroy (GTK_OBJECT (view->simple));
-		view->simple = NULL;
-	}
-}
-
-static void
-table_double_click(ETableScrolled *table, gint row, AddressbookView *view)
-{
-	ECard *card = e_addressbook_model_get_card(E_ADDRESSBOOK_MODEL(view->model), row);
-	EBook *book;
-	EContactEditor *ce;
-
-	gtk_object_get(GTK_OBJECT(view->model),
-		       "book", &book,
-		       NULL);
-
-	g_assert (E_IS_BOOK (book));
-
-	ce = e_contact_editor_new (card, FALSE);
-
-	gtk_signal_connect (GTK_OBJECT (ce), "add_card",
-			    GTK_SIGNAL_FUNC (add_card_cb), book);
-	gtk_signal_connect (GTK_OBJECT (ce), "commit_card",
-			    GTK_SIGNAL_FUNC (commit_card_cb), book);
-	gtk_signal_connect (GTK_OBJECT (ce), "editor_closed",
-			    GTK_SIGNAL_FUNC (editor_closed_cb), NULL);
-
-	gtk_object_unref(GTK_OBJECT(card));
-}
-
-typedef struct {
-	EBook *book;
-	ECard *card;
-} CardAndBook;
-
-static void
-card_and_book_free (CardAndBook *card_and_book)
-{
-	gtk_object_unref(GTK_OBJECT(card_and_book->card));
-	gtk_object_unref(GTK_OBJECT(card_and_book->book));
-}
-
-static void
-save_as (GtkWidget *widget, CardAndBook *card_and_book)
-{
-	e_contact_save_as(_("Save as VCard"), card_and_book->card);
-	card_and_book_free(card_and_book);
-}
-
-static void
-print (GtkWidget *widget, CardAndBook *card_and_book)
-{
-	gtk_widget_show(e_contact_print_card_dialog_new(card_and_book->card));
-	card_and_book_free(card_and_book);
-}
-
-static void
-delete (GtkWidget *widget, CardAndBook *card_and_book)
-{
-	if (e_contact_editor_confirm_delete()) {
-		/* Add the card in the contact editor to our ebook */
-		e_book_remove_card (card_and_book->book,
-				    card_and_book->card,
-				    NULL,
-				    NULL);
-	}
-	card_and_book_free(card_and_book);
-}
-
-static gint
-table_right_click(ETableScrolled *table, gint row, gint col, GdkEvent *event, AddressbookView *view)
-{
-	CardAndBook *card_and_book;
-
-	EPopupMenu menu[] = {
-		{"Save as VCard", NULL, GTK_SIGNAL_FUNC(save_as), 0}, 
-		{"Print", NULL, GTK_SIGNAL_FUNC(print), 0},
-		{"Delete", NULL, GTK_SIGNAL_FUNC(delete), 0}, 
-		{NULL, NULL, NULL, 0}
-	};
-
-	card_and_book = g_new(CardAndBook, 1);
-	card_and_book->card = e_addressbook_model_get_card(E_ADDRESSBOOK_MODEL(view->model), row);
-	gtk_object_get(GTK_OBJECT(view->model),
-		       "book", &(card_and_book->book),
-		       NULL);
-
-	gtk_object_ref(GTK_OBJECT(card_and_book->book));
-
-	e_popup_menu_run (menu, (GdkEventButton *)event, 0, 0, card_and_book);
-
-	return TRUE;
-}
-
-static void
-create_table_view (AddressbookView *view, char *initial_query)
-{
-	ECell *cell_left_just;
-	ETableHeader *e_table_header;
-	int i;
-	
-	view->simple = e_card_simple_new(NULL);
-
-	view->model = e_addressbook_model_new();
-
-	/*
-	  Next we create a header.  The ETableHeader is used in two
-	  different way.  The first is the full_header.  This is the
-	  list of possible columns in the view.  The second use is
-	  completely internal.  Many of the ETableHeader functions are
-	  for that purpose.  The only functions we really need are
-	  e_table_header_new and e_table_header_add_col.
-
-	  First we create the header.  */
-	e_table_header = e_table_header_new ();
-	
-	/* Next we have to build renderers for all of the columns.
-	   Since all our columns are text columns, we can simply use
-	   the same renderer over and over again.  If we had different
-	   types of columns, we could use a different renderer for
-	   each column. */
-	cell_left_just = e_cell_text_new (view->model, NULL, GTK_JUSTIFY_LEFT);
-		
-	/* Next we create a column object for each view column and add
-	   them to the header.  We don't create a column object for
-	   the importance column since it will not be shown. */
-	for (i = 0; i < E_CARD_SIMPLE_FIELD_LAST - 1; i++){
-		/* Create the column. */
-		ETableCol *ecol = e_table_col_new (
-						   i, e_card_simple_get_name(view->simple, i+1),
-						   1.0, 20, cell_left_just,
-						   g_str_compare, TRUE);
-		/* Add it to the header. */
-		e_table_header_add_column (e_table_header, ecol, i);
-	}
-
-	/* Here we create the table.  We give it the three pieces of
-	   the table we've created, the header, the model, and the
-	   initial layout.  It does the rest.  */
-	view->table = e_table_scrolled_new (e_table_header, E_TABLE_MODEL(view->model), SPEC);
-
-	gtk_signal_connect(GTK_OBJECT(view->table), "double_click",
-			   GTK_SIGNAL_FUNC(table_double_click), view);
-	gtk_signal_connect(GTK_OBJECT(view->table), "right_click",
-			   GTK_SIGNAL_FUNC(table_right_click), view);
-
-	gtk_object_set (GTK_OBJECT(view->table),
-			"click_to_add_message", _("* Click here to add a contact *"),
-			NULL);
-
-	gtk_box_pack_start(GTK_BOX(view->vbox), view->table, TRUE, TRUE, 0);
-
-	gtk_widget_show( GTK_WIDGET(view->table) );
-}
-
-static void
-change_view_type (AddressbookView *view, AddressbookViewType view_type)
-{
-	char *query = NULL;
-	BonoboUIHandler *uih = bonobo_control_get_ui_handler (view->control);
-
-	if (view_type == view->view_type)
-		return;
-	
-	if (view->view_type != ADDRESSBOOK_VIEW_NONE)
-		query = get_query(view);
-	else
-		query = g_strdup("(contains \"x-evolution-any-field\" \"\")");
-
-
-	switch (view_type) {
-	case ADDRESSBOOK_VIEW_MINICARD:
-		teardown_table_view (view);
-		create_minicard_view (view, query);
-		if (uih)
-			bonobo_ui_handler_menu_set_label (uih, "/View/Toggle View",
-							  N_("As _Table"));
-		break;
-	case ADDRESSBOOK_VIEW_TABLE:
-		teardown_minicard_view (view);
-		create_table_view (view, query);
-		if (uih)
-			bonobo_ui_handler_menu_set_label (uih, "/View/Toggle View",
-							  N_("As _Minicards"));
-		break;
-	default:
-		g_warning ("view_type must be either TABLE or MINICARD\n");
-		g_free (query);
-		return;
-	}
-
-	view->view_type = view_type;
-
-	/* set the book */
-	set_book (view);
-
-	/* and reset the query */
-	if (query)
-		set_query (view, query);
-	g_free (query);
-}
-
-
-BonoboControl *
-addressbook_factory_new_control (void)
-{
-	AddressbookView *view;
-
-	view = g_new0 (AddressbookView, 1);
-
-	view->vbox = gtk_vbox_new(FALSE, 0);
-
-	gtk_signal_connect( GTK_OBJECT( view->vbox ), "destroy",
-			    GTK_SIGNAL_FUNC( destroy_callback ),
-			    ( gpointer ) view );
-
-	/* Create the control. */
-	view->control = bonobo_control_new(view->vbox);
-
-	view->model = NULL;
-	view->minicard_view = NULL;
-
-	/* create the initial view */
-	change_view_type (view, ADDRESSBOOK_VIEW_MINICARD);
-
-	gtk_widget_show_all( view->vbox );
-
-	/* create the view's ebook */
-	view->book = e_book_new ();
-
-	view->properties = bonobo_property_bag_new (get_prop, set_prop, view);
-
-	bonobo_property_bag_add (
-		view->properties, PROPERTY_FOLDER_URI, PROPERTY_FOLDER_URI_IDX,
-		BONOBO_ARG_STRING, NULL, _("The URI that the Folder Browser will display"), 0);
-
-	bonobo_control_set_property_bag (view->control,
-					 view->properties);
-
-	view->uri = NULL;
-
-	gtk_signal_connect (GTK_OBJECT (view->control), "activate",
-			    control_activate_cb, view);
-
-	return view->control;
-}
-
-static BonoboObject *
-addressbook_factory (BonoboGenericFactory *Factory, void *closure)
-{
-	return BONOBO_OBJECT (addressbook_factory_new_control ());
-}
-
-void
-addressbook_factory_init (void)
-{
-	static BonoboGenericFactory *addressbook_control_factory = NULL;
-
-	if (addressbook_control_factory != NULL)
-		return;
-
-	addressbook_control_factory = bonobo_generic_factory_new (CONTROL_FACTORY_ID,
-								  addressbook_factory,
-								  NULL);
-
-	if (addressbook_control_factory == NULL) {
-		g_error ("I could not register a Addressbook factory.");
-	}
-}
diff --git a/addressbook/gui/component/addressbook.gnorba b/addressbook/gui/component/addressbook.gnorba
deleted file mode 100644
index bc3830686d..0000000000
--- a/addressbook/gui/component/addressbook.gnorba
+++ /dev/null
@@ -1,23 +0,0 @@
-[control-factory:addressbook]
-type=exe
-repo_id=IDL:GNOME/GenericFactory:1.0
-description=Factory for the sample Addressbook control
-location_info=evolution-addressbook
-
-[control:addressbook]
-type=factory
-repo_id=IDL:BonoboControl/addressbook-control:1.0 IDL:GNOME/Control:1.0
-description=A sample Bonobo control which displays an addressbook.
-location_info=control-factory:addressbook
-
-[evolution-shell-component-factory:addressbook]
-type=exe
-repo_id=IDL:GNOME/GenericFactory:1.0
-description=Factory for the Evolution addressbook component.
-location_info=evolution-addressbook
-
-[evolution-shell-component:addressbook]
-type=factory
-repo_id=IDL:Evolution/ShellComponent:1.0
-description=Evolution component for handling contacts.
-location_info=evolution-shell-component-factory:addressbook
diff --git a/addressbook/gui/component/addressbook.h b/addressbook/gui/component/addressbook.h
deleted file mode 100644
index 66c5a7e4e6..0000000000
--- a/addressbook/gui/component/addressbook.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef __ADDRESSBOOK_H__
-#define __ADDRESSBOOK_H__
-
-#include 
-
-BonoboControl *addressbook_factory_new_control  (void);
-void           addressbook_factory_init         (void);
-
-#endif /* __ADDRESSBOOK_H__ */
diff --git a/addressbook/gui/component/addressbook.oafinfo b/addressbook/gui/component/addressbook.oafinfo
deleted file mode 100644
index 4f319fb947..0000000000
--- a/addressbook/gui/component/addressbook.oafinfo
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	        
-	
-
-	
-		
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
-
-	
-		
-	
-
-	
-
-
-
-
diff --git a/addressbook/gui/component/alphabet.glade b/addressbook/gui/component/alphabet.glade
deleted file mode 100644
index bc6e5f3798..0000000000
--- a/addressbook/gui/component/alphabet.glade
+++ /dev/null
@@ -1,357 +0,0 @@
-
-
-
-
-  alphabet
-  alphabet
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  True
-  False
-  False
-  False
-  True
-  True
-  alphabet.glade.h
-
-
-
-  GtkWindow
-  window2
-  False
-  window2
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  True
-  False
-
-  
-    GtkScrolledWindow
-    scrolledwindow-top
-    GTK_POLICY_NEVER
-    GTK_POLICY_AUTOMATIC
-    GTK_UPDATE_CONTINUOUS
-    GTK_UPDATE_CONTINUOUS
-
-    
-      GtkViewport
-      viewport1
-      4
-      GTK_SHADOW_NONE
-
-      
-	GtkVBox
-	vbox2
-	27
-	False
-	4
-
-	
-	  GtkButton
-	  button-1
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-a
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-b
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-c
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-d
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-e
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-f
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-g
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-h
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-i
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-j
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-k
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-l
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-m
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-n
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-o
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-p
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-q
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-r
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-s
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-t
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-u
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-v
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-w
-	  True
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-x
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-y
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  button-z
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-      
-    
-  
-
-
-
diff --git a/addressbook/gui/component/alphabet.glade.h b/addressbook/gui/component/alphabet.glade.h
deleted file mode 100644
index 2448eeb4fc..0000000000
--- a/addressbook/gui/component/alphabet.glade.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("window2");
-gchar *s = N_("123");
-gchar *s = N_("a");
-gchar *s = N_("b");
-gchar *s = N_("c");
-gchar *s = N_("d");
-gchar *s = N_("e");
-gchar *s = N_("f");
-gchar *s = N_("g");
-gchar *s = N_("h");
-gchar *s = N_("i");
-gchar *s = N_("j");
-gchar *s = N_("k");
-gchar *s = N_("l");
-gchar *s = N_("m");
-gchar *s = N_("n");
-gchar *s = N_("o");
-gchar *s = N_("p");
-gchar *s = N_("q");
-gchar *s = N_("r");
-gchar *s = N_("s");
-gchar *s = N_("t");
-gchar *s = N_("u");
-gchar *s = N_("v");
-gchar *s = N_("w");
-gchar *s = N_("x");
-gchar *s = N_("y");
-gchar *s = N_("z");
diff --git a/addressbook/gui/component/e-addressbook-model.c b/addressbook/gui/component/e-addressbook-model.c
deleted file mode 100644
index d46b42fe00..0000000000
--- a/addressbook/gui/component/e-addressbook-model.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Christopher James Lahey 
- *
- * (C) 1999 Helix Code, Inc.
- */
-
-#include 
-#include "e-addressbook-model.h"
-#include 
-#include 
-#include 
-#include 
-
-#define PARENT_TYPE e_table_model_get_type()
-ETableModelClass *parent_class;
-
-/*
- * EAddressbookModel callbacks
- * These are the callbacks that define the behavior of our custom model.
- */
-static void e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
-static void e_addressbook_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-
-
-enum {
-	ARG_0,
-	ARG_BOOK,
-	ARG_QUERY,
-	ARG_EDITABLE,
-};
-
-static void
-addressbook_destroy(GtkObject *object)
-{
-	EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object);
-	int i;
-
-	if (model->get_view_idle)
-		g_source_remove(model->get_view_idle);
-	if (model->book_view && model->create_card_id)
-		gtk_signal_disconnect(GTK_OBJECT (model->book_view),
-				      model->create_card_id);
-	if (model->book_view && model->remove_card_id)
-		gtk_signal_disconnect(GTK_OBJECT (model->book_view),
-				      model->remove_card_id);
-	if (model->book_view && model->modify_card_id)
-		gtk_signal_disconnect(GTK_OBJECT (model->book_view),
-				      model->modify_card_id);
-	if (model->book)
-		gtk_object_unref(GTK_OBJECT(model->book));
-	if (model->book_view)
-		gtk_object_unref(GTK_OBJECT(model->book_view));
-
-	for ( i = 0; i < model->data_count; i++ ) {
-		gtk_object_unref(GTK_OBJECT(model->data[i]));
-	}
-	g_free(model->data);
-}
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-addressbook_col_count (ETableModel *etc)
-{
-	return E_CARD_SIMPLE_FIELD_LAST;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-addressbook_row_count (ETableModel *etc)
-{
-	EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etc);
-	return addressbook->data_count;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-addressbook_value_at (ETableModel *etc, int col, int row)
-{
-	EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etc);
-	const char *value;
-	if ( col >= E_CARD_SIMPLE_FIELD_LAST - 1 || row >= addressbook->data_count )
-		return NULL;
-
-	value = e_card_simple_get_const(addressbook->data[row], 
-					col + 1);
-	return (void *)(value ? value : "");
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-addressbook_set_value_at (ETableModel *etc, int col, int row, const void *val)
-{
-	EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etc);
-	ECard *card;
-	if (addressbook->editable) {
-		if ( col >= E_CARD_SIMPLE_FIELD_LAST - 1|| row >= addressbook->data_count )
-			return;
-		e_card_simple_set(addressbook->data[row],
-				  col + 1,
-				  val);
-		gtk_object_get(GTK_OBJECT(addressbook->data[row]),
-			       "card", &card,
-			       NULL);
-		e_book_commit_card(addressbook->book, card, NULL, NULL);
-		
-		e_table_model_cell_changed(etc, col, row);
-	}
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-addressbook_is_cell_editable (ETableModel *etc, int col, int row)
-{
-	return E_ADDRESSBOOK_MODEL(etc)->editable;
-}
-
-static void
-addressbook_append_row (ETableModel *etm, ETableModel *source, gint row)
-{
-	ECard *card;
-	ECardSimple *simple;
-	EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etm);
-	int col;
-
-	card = e_card_new("");
-	simple = e_card_simple_new(card);
-
-	for (col = 0; col < E_CARD_SIMPLE_FIELD_LAST - 1; col++) {
-		const void *val = e_table_model_value_at(source, col, row);
-		e_card_simple_set(simple,
-				  col + 1,
-				  val);
-	}
-	e_card_simple_sync_card(simple);
-	e_book_add_card(addressbook->book, card, NULL, NULL);
-	gtk_object_unref(GTK_OBJECT(simple));
-	gtk_object_unref(GTK_OBJECT(card));
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-addressbook_duplicate_value (ETableModel *etc, int col, const void *value)
-{
-	return g_strdup(value);
-}
-
-/* This function frees the value passed to it. */
-static void
-addressbook_free_value (ETableModel *etc, int col, void *value)
-{
-	g_free(value);
-}
-
-static void *
-addressbook_initialize_value (ETableModel *etc, int col)
-{
-	return g_strdup("");
-}
-
-static gboolean
-addressbook_value_is_empty (ETableModel *etc, int col, const void *value)
-{
-	return !(value && *(char *)value);
-}
-
-static char *
-addressbook_value_to_string (ETableModel *etc, int col, const void *value)
-{
-	return g_strdup(value);
-}
-
-static void
-create_card(EBookView *book_view,
-	    const GList *cards,
-	    EAddressbookModel *model)
-{
-	model->data = g_realloc(model->data, (model->data_count + g_list_length((GList *)cards)) * sizeof(ECard *));
-	for ( ; cards; cards = cards->next) {
-		model->data[model->data_count++] = e_card_simple_new (E_CARD(cards->data));
-		e_table_model_row_inserted(E_TABLE_MODEL(model), model->data_count - 1);
-	}
-}
-
-static void
-remove_card(EBookView *book_view,
-	    const char *id,
-	    EAddressbookModel *model)
-{
-	int i;
-	for ( i = 0; i < model->data_count; i++) {
-		if ( !strcmp(e_card_simple_get_id(model->data[i]), id) ) {
-			gtk_object_unref(GTK_OBJECT(model->data[i]));
-			memmove(model->data + i, model->data + i + 1, (model->data_count - i - 1) * sizeof (ECard *));
-			e_table_model_row_deleted(E_TABLE_MODEL(model), i);
-		}
-	}
-}
-
-static void
-modify_card(EBookView *book_view,
-	    const GList *cards,
-	    EAddressbookModel *model)
-{
-	for ( ; cards; cards = cards->next) {
-		int i;
-		for ( i = 0; i < model->data_count; i++) {
-			if ( !strcmp(e_card_simple_get_id(model->data[i]), e_card_get_id(E_CARD(cards->data))) ) {
-				gtk_object_unref(GTK_OBJECT(model->data[i]));
-				model->data[i] = e_card_simple_new(E_CARD(cards->data));
-				gtk_object_ref(GTK_OBJECT(model->data[i]));
-				e_table_model_row_changed(E_TABLE_MODEL(model), i);
-				break;
-			}
-		}
-	}
-}
-
-static void
-e_addressbook_model_class_init (GtkObjectClass *object_class)
-{
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
-
-	parent_class = gtk_type_class (PARENT_TYPE);
-
-	object_class->destroy = addressbook_destroy;
-	object_class->set_arg   = e_addressbook_model_set_arg;
-	object_class->get_arg   = e_addressbook_model_get_arg;
-
-	gtk_object_add_arg_type ("EAddressbookModel::book", GTK_TYPE_OBJECT, 
-				 GTK_ARG_READWRITE, ARG_BOOK);
-	gtk_object_add_arg_type ("EAddressbookModel::query", GTK_TYPE_STRING,
-				 GTK_ARG_READWRITE, ARG_QUERY);
-	gtk_object_add_arg_type ("EAddressbookModel::editable", GTK_TYPE_BOOL,
-				 GTK_ARG_READWRITE, ARG_EDITABLE);
-	
-	model_class->column_count = addressbook_col_count;
-	model_class->row_count = addressbook_row_count;
-	model_class->value_at = addressbook_value_at;
-	model_class->set_value_at = addressbook_set_value_at;
-	model_class->is_cell_editable = addressbook_is_cell_editable;
-	model_class->append_row = addressbook_append_row;
-	model_class->duplicate_value = addressbook_duplicate_value;
-	model_class->free_value = addressbook_free_value;
-	model_class->initialize_value = addressbook_initialize_value;
-	model_class->value_is_empty = addressbook_value_is_empty;
-	model_class->value_to_string = addressbook_value_to_string;
-}
-
-static void
-e_addressbook_model_init (GtkObject *object)
-{
-	EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object);
-	model->book = NULL;
-	model->query = g_strdup("(contains \"x-evolution-any-field\" \"\")");
-	model->book_view = NULL;
-	model->get_view_idle = 0;
-	model->create_card_id = 0;
-	model->remove_card_id = 0;
-	model->modify_card_id = 0;
-	model->data = NULL;
-	model->data_count = 0;
-	model->editable = TRUE;
-}
-
-static void
-book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure)
-{
-	EAddressbookModel *model = closure;
-	int i;
-	if (model->book_view && model->create_card_id)
-		gtk_signal_disconnect(GTK_OBJECT (model->book_view),
-				      model->create_card_id);
-	if (model->book_view && model->remove_card_id)
-		gtk_signal_disconnect(GTK_OBJECT (model->book_view),
-				      model->remove_card_id);
-	if (model->book_view && model->modify_card_id)
-		gtk_signal_disconnect(GTK_OBJECT (model->book_view),
-				      model->modify_card_id);
-	if (model->book_view)
-		gtk_object_unref(GTK_OBJECT(model->book_view));
-	model->book_view = book_view;
-	if (model->book_view)
-		gtk_object_ref(GTK_OBJECT(model->book_view));
-	model->create_card_id = gtk_signal_connect(GTK_OBJECT(model->book_view),
-						  "card_added",
-						  GTK_SIGNAL_FUNC(create_card),
-						  model);
-	model->remove_card_id = gtk_signal_connect(GTK_OBJECT(model->book_view),
-						  "card_removed",
-						  GTK_SIGNAL_FUNC(remove_card),
-						  model);
-	model->modify_card_id = gtk_signal_connect(GTK_OBJECT(model->book_view),
-						  "card_changed",
-						  GTK_SIGNAL_FUNC(modify_card),
-						  model);
-
-	for ( i = 0; i < model->data_count; i++ ) {
-		gtk_object_unref(GTK_OBJECT(model->data[i]));
-	}
-
-	e_table_model_pre_change(E_TABLE_MODEL(model));
-	g_free(model->data);
-	model->data = NULL;
-	model->data_count = 0;
-	e_table_model_changed(E_TABLE_MODEL(model));
-}
-
-static gboolean
-get_view(EAddressbookModel *model)
-{
-	if (model->book && model->query)
-		e_book_get_book_view(model->book, model->query, book_view_loaded, model);
-
-	model->get_view_idle = 0;
-	return FALSE;
-}
-
-ECard *
-e_addressbook_model_get_card(EAddressbookModel *model,
-			     int                row)
-{
-	if (model->data && row < model->data_count) {
-		ECard *card;
-		gtk_object_get(GTK_OBJECT(model->data[row]),
-			       "card", &card,
-			       NULL);
-		gtk_object_ref(GTK_OBJECT(card));
-		return card;
-	}
-	return NULL;
-}
-
-static void
-e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
-{
-	EAddressbookModel *model;
-
-	model = E_ADDRESSBOOK_MODEL (o);
-	
-	switch (arg_id){
-	case ARG_BOOK:
-		if (model->book)
-			gtk_object_unref(GTK_OBJECT(model->book));
-		model->book = E_BOOK(GTK_VALUE_OBJECT (*arg));
-		if (model->book) {
-			gtk_object_ref(GTK_OBJECT(model->book));
-			if (model->get_view_idle == 0)
-				model->get_view_idle = g_idle_add((GSourceFunc)get_view, model);
-		}
-		break;
-	case ARG_QUERY:
-		if (model->query)
-			g_free(model->query);
-		model->query = g_strdup(GTK_VALUE_STRING (*arg));
-		if (model->get_view_idle == 0)
-			model->get_view_idle = g_idle_add((GSourceFunc)get_view, model);
-		break;
-	case ARG_EDITABLE:
-		model->editable = GTK_VALUE_BOOL (*arg);
-		break;
-	}
-}
-
-static void
-e_addressbook_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	EAddressbookModel *e_addressbook_model;
-
-	e_addressbook_model = E_ADDRESSBOOK_MODEL (object);
-
-	switch (arg_id) {
-	case ARG_BOOK:
-		GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_addressbook_model->book);
-		break;
-	case ARG_QUERY:
-		GTK_VALUE_STRING (*arg) = g_strdup(e_addressbook_model->query);
-		break;
-	case ARG_EDITABLE:
-		GTK_VALUE_BOOL (*arg) = e_addressbook_model->editable;
-		break;
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-GtkType
-e_addressbook_model_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (!type){
-		GtkTypeInfo info = {
-			"EAddressbookModel",
-			sizeof (EAddressbookModel),
-			sizeof (EAddressbookModelClass),
-			(GtkClassInitFunc) e_addressbook_model_class_init,
-			(GtkObjectInitFunc) e_addressbook_model_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (PARENT_TYPE, &info);
-	}
-
-	return type;
-}
-
-ETableModel *
-e_addressbook_model_new (void)
-{
-	EAddressbookModel *et;
-
-	et = gtk_type_new (e_addressbook_model_get_type ());
-	
-	return E_TABLE_MODEL(et);
-}
diff --git a/addressbook/gui/component/e-addressbook-model.h b/addressbook/gui/component/e-addressbook-model.h
deleted file mode 100644
index 8f5f6485cf..0000000000
--- a/addressbook/gui/component/e-addressbook-model.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#ifndef _E_ADDRESSBOOK_MODEL_H_
-#define _E_ADDRESSBOOK_MODEL_H_
-
-#include "e-table-model.h"
-#include 
-#include 
-#include 
-
-#define E_ADDRESSBOOK_MODEL_TYPE        (e_addressbook_model_get_type ())
-#define E_ADDRESSBOOK_MODEL(o)          (GTK_CHECK_CAST ((o), E_ADDRESSBOOK_MODEL_TYPE, EAddressbookModel))
-#define E_ADDRESSBOOK_MODEL_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_ADDRESSBOOK_MODEL_TYPE, EAddressbookModelClass))
-#define E_IS_ADDRESSBOOK_MODEL(o)       (GTK_CHECK_TYPE ((o), E_ADDRESSBOOK_MODEL_TYPE))
-#define E_IS_ADDRESSBOOK_MODEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_ADDRESSBOOK_MODEL_TYPE))
-
-/* Virtual Column list:
-   0   Email
-   1   Full Name
-   2   Street
-   3   Phone
-*/
-
-typedef struct {
-	ETableModel parent;
-
-	/* item specific fields */
-	EBook *book;
-	char *query;
-	EBookView *book_view;
-
-	int get_view_idle;
-
-	ECardSimple **data;
-	int data_count;
-
-	int create_card_id, remove_card_id, modify_card_id;
-
-	guint editable : 1;
-} EAddressbookModel;
-
-
-typedef struct {
-	ETableModelClass parent_class;
-} EAddressbookModelClass;
-
-
-GtkType e_addressbook_model_get_type (void);
-ETableModel *e_addressbook_model_new (void);
-
-/* Returns object with ref count of 1. */
-ECard *e_addressbook_model_get_card(EAddressbookModel *model,
-				    int                row);
-
-#endif /* _E_ADDRESSBOOK_MODEL_H_ */
diff --git a/addressbook/gui/component/e-cardlist-model.c b/addressbook/gui/component/e-cardlist-model.c
deleted file mode 100644
index 23b61d58be..0000000000
--- a/addressbook/gui/component/e-cardlist-model.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *
- * Author:
- *   Christopher James Lahey 
- *
- * (C) 1999 Helix Code, Inc.
- */
-
-#include 
-#include "e-cardlist-model.h"
-#include 
-#include 
-#include 
-#include 
-
-#define PARENT_TYPE e_table_model_get_type()
-
-static void
-e_cardlist_model_destroy(GtkObject *object)
-{
-	ECardlistModel *model = E_CARDLIST_MODEL(object);
-	int i;
-
-	for ( i = 0; i < model->data_count; i++ ) {
-		gtk_object_unref(GTK_OBJECT(model->data[i]));
-	}
-	g_free(model->data);
-}
-
-/* This function returns the number of columns in our ETableModel. */
-static int
-e_cardlist_model_col_count (ETableModel *etc)
-{
-	return E_CARD_SIMPLE_FIELD_LAST;
-}
-
-/* This function returns the number of rows in our ETableModel. */
-static int
-e_cardlist_model_row_count (ETableModel *etc)
-{
-	ECardlistModel *e_cardlist_model = E_CARDLIST_MODEL(etc);
-	return e_cardlist_model->data_count;
-}
-
-/* This function returns the value at a particular point in our ETableModel. */
-static void *
-e_cardlist_model_value_at (ETableModel *etc, int col, int row)
-{
-	ECardlistModel *e_cardlist_model = E_CARDLIST_MODEL(etc);
-	const char *value;
-	if ( col >= E_CARD_SIMPLE_FIELD_LAST - 1|| row >= e_cardlist_model->data_count )
-		return NULL;
-	value = e_card_simple_get_const(e_cardlist_model->data[row], 
-					col + 1);
-	return (void *)(value ? value : "");
-}
-
-/* This function sets the value at a particular point in our ETableModel. */
-static void
-e_cardlist_model_set_value_at (ETableModel *etc, int col, int row, const void *val)
-{
-	ECardlistModel *e_cardlist_model = E_CARDLIST_MODEL(etc);
-	ECard *card;
-	if ( col >= E_CARD_SIMPLE_FIELD_LAST - 1|| row >= e_cardlist_model->data_count )
-		return;
-	e_card_simple_set(e_cardlist_model->data[row],
-			  col + 1,
-			  val);
-	gtk_object_get(GTK_OBJECT(e_cardlist_model->data[row]),
-		       "card", &card,
-		       NULL);
-
-	e_table_model_cell_changed(etc, col, row);
-}
-
-/* This function returns whether a particular cell is editable. */
-static gboolean
-e_cardlist_model_is_cell_editable (ETableModel *etc, int col, int row)
-{
-	return TRUE;
-}
-
-/* This function duplicates the value passed to it. */
-static void *
-e_cardlist_model_duplicate_value (ETableModel *etc, int col, const void *value)
-{
-	return g_strdup(value);
-}
-
-/* This function frees the value passed to it. */
-static void
-e_cardlist_model_free_value (ETableModel *etc, int col, void *value)
-{
-	g_free(value);
-}
-
-static void *
-e_cardlist_model_initialize_value (ETableModel *etc, int col)
-{
-	return g_strdup("");
-}
-
-static gboolean
-e_cardlist_model_value_is_empty (ETableModel *etc, int col, const void *value)
-{
-	return !(value && *(char *)value);
-}
-
-static char *
-e_cardlist_model_value_to_string (ETableModel *etc, int col, const void *value)
-{
-	return g_strdup(value);
-}
-
-void
-e_cardlist_model_add(ECardlistModel *model,
-		     ECard **cards,
-		     int count)
-{
-	int i;
-	model->data = g_realloc(model->data, model->data_count + count * sizeof(ECard *));
-	for (i = 0; i < count; i++) {
-		gboolean found = FALSE;
-		gchar *id = e_card_get_id(cards[i]);
-		for ( i = 0; i < model->data_count; i++) {
-			if ( !strcmp(e_card_simple_get_id(model->data[i]), id) ) {
-				found = TRUE;
-			}
-		}
-		if (!found) {
-			gtk_object_ref(GTK_OBJECT(cards[i]));
-			model->data[model->data_count++] = e_card_simple_new (cards[i]);
-			e_table_model_row_inserted(E_TABLE_MODEL(model), model->data_count - 1);
-		}
-	}
-}
-
-void
-e_cardlist_model_remove(ECardlistModel *model,
-			const char *id)
-{
-	int i;
-	for ( i = 0; i < model->data_count; i++) {
-		if ( !strcmp(e_card_simple_get_id(model->data[i]), id) ) {
-			gtk_object_unref(GTK_OBJECT(model->data[i]));
-			memmove(model->data + i, model->data + i + 1, (model->data_count - i - 1) * sizeof (ECard *));
-			e_table_model_row_deleted(E_TABLE_MODEL(model), i);
-		}
-	}
-}
-
-static void
-e_cardlist_model_class_init (GtkObjectClass *object_class)
-{
-	ETableModelClass *model_class = (ETableModelClass *) object_class;
-	
-	object_class->destroy = e_cardlist_model_destroy;
-
-	model_class->column_count = e_cardlist_model_col_count;
-	model_class->row_count = e_cardlist_model_row_count;
-	model_class->value_at = e_cardlist_model_value_at;
-	model_class->set_value_at = e_cardlist_model_set_value_at;
-	model_class->is_cell_editable = e_cardlist_model_is_cell_editable;
-	model_class->duplicate_value = e_cardlist_model_duplicate_value;
-	model_class->free_value = e_cardlist_model_free_value;
-	model_class->initialize_value = e_cardlist_model_initialize_value;
-	model_class->value_is_empty = e_cardlist_model_value_is_empty;
-	model_class->value_to_string = e_cardlist_model_value_to_string;
-}
-
-static void
-e_cardlist_model_init (GtkObject *object)
-{
-	ECardlistModel *model = E_CARDLIST_MODEL(object);
-	model->data = NULL;
-	model->data_count = 0;
-}
-
-ECard *
-e_cardlist_model_get(ECardlistModel *model,
-		     int                row)
-{
-	if (model->data && row < model->data_count) {
-		ECard *card;
-		gtk_object_get(GTK_OBJECT(model->data[row]),
-			       "card", &card,
-			       NULL);
-		gtk_object_ref(GTK_OBJECT(card));
-		return card;
-	}
-	return NULL;
-}
-
-GtkType
-e_cardlist_model_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (!type){
-		GtkTypeInfo info = {
-			"ECardlistModel",
-			sizeof (ECardlistModel),
-			sizeof (ECardlistModelClass),
-			(GtkClassInitFunc) e_cardlist_model_class_init,
-			(GtkObjectInitFunc) e_cardlist_model_init,
-			NULL, /* reserved 1 */
-			NULL, /* reserved 2 */
-			(GtkClassInitFunc) NULL
-		};
-
-		type = gtk_type_unique (PARENT_TYPE, &info);
-	}
-
-	return type;
-}
-
-ETableModel *
-e_cardlist_model_new (void)
-{
-	ECardlistModel *et;
-
-	et = gtk_type_new (e_cardlist_model_get_type ());
-	
-	return E_TABLE_MODEL(et);
-}
diff --git a/addressbook/gui/component/e-cardlist-model.h b/addressbook/gui/component/e-cardlist-model.h
deleted file mode 100644
index b7df356342..0000000000
--- a/addressbook/gui/component/e-cardlist-model.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-#ifndef _E_CARDLIST_MODEL_H_
-#define _E_CARDLIST_MODEL_H_
-
-#include "e-table-model.h"
-#include 
-#include 
-#include 
-
-#define E_CARDLIST_MODEL_TYPE        (e_cardlist_model_get_type ())
-#define E_CARDLIST_MODEL(o)          (GTK_CHECK_CAST ((o), E_CARDLIST_MODEL_TYPE, ECardlistModel))
-#define E_CARDLIST_MODEL_CLASS(k)    (GTK_CHECK_CLASS_CAST((k), E_CARDLIST_MODEL_TYPE, ECardlistModelClass))
-#define E_IS_CARDLIST_MODEL(o)       (GTK_CHECK_TYPE ((o), E_CARDLIST_MODEL_TYPE))
-#define E_IS_CARDLIST_MODEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_CARDLIST_MODEL_TYPE))
-
-typedef struct {
-	ETableModel parent;
-
-	/* item specific fields */
-	ECardSimple **data;
-	int data_count;
-} ECardlistModel;
-
-
-typedef struct {
-	ETableModelClass parent_class;
-} ECardlistModelClass;
-
-
-GtkType e_cardlist_model_get_type (void);
-ETableModel *e_cardlist_model_new (void);
-
-/* Returns object with an extra ref count. */
-ECard *e_cardlist_model_get  (ECardlistModel  *model,
-			      int              row);
-void e_cardlist_model_add    (ECardlistModel  *model,
-			      ECard          **card,
-			      int              count);
-void e_cardlist_model_remove (ECardlistModel  *model,
-			      const char      *id);
-
-#endif /* _E_CARDLIST_MODEL_H_ */
diff --git a/addressbook/gui/component/e-ldap-server-dialog.c b/addressbook/gui/component/e-ldap-server-dialog.c
deleted file mode 100644
index 172f43280b..0000000000
--- a/addressbook/gui/component/e-ldap-server-dialog.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-ldap-server-dialog.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Toshok 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-#include 
-#include 
-#include "e-ldap-server-dialog.h"
-
-typedef struct {
-	GladeXML *gui;
-	GtkWidget *dialog;
-	ELDAPServer *server;
-} ELDAPServerDialog;
-
-static void
-fill_in_server_info (ELDAPServerDialog *dialog)
-{
-	ELDAPServer *ldap_server = dialog->server;
-	GtkEditable *editable;
-	int position;
-
-	/* the name */
-	position = 0;
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "name-entry"));
-	gtk_editable_delete_text (editable, 0, -1);
-	gtk_editable_insert_text (editable, ldap_server->name, strlen (ldap_server->name), &position);
-
-	/* the server description */
-	position = 0;
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "description-entry"));
-	gtk_editable_delete_text (editable, 0, -1);
-	gtk_editable_insert_text (editable, ldap_server->description, strlen (ldap_server->description), &position);
-
-	/* the server hostname */
-	position = 0;
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "server-entry"));
-	gtk_editable_delete_text (editable, 0, -1);
-	gtk_editable_insert_text (editable, ldap_server->host, strlen (ldap_server->host), &position);
-
-	/* the server port */
-	position = 0;
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "port-entry"));
-	gtk_editable_delete_text (editable, 0, -1);
-	gtk_editable_insert_text (editable, ldap_server->port, strlen (ldap_server->port), &position);
-
-	/* the root dn */
-	position = 0;
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "root-dn-entry"));
-	gtk_editable_delete_text (editable, 0, -1);
-	gtk_editable_insert_text (editable, ldap_server->rootdn, strlen (ldap_server->rootdn), &position);
-}
-
-static void
-extract_server_info (ELDAPServerDialog *dialog)
-{
-	ELDAPServer *ldap_server = dialog->server;
-	GtkEditable *editable;
-	char *description, *server, *port, *rootdn, *name;
-
-	/* the server name */
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "name-entry"));
-	name = gtk_editable_get_chars(editable, 0, -1);
-	if (name && *name) {
-		if (ldap_server->name)
-			g_free(ldap_server->name);
-		ldap_server->name = name;
-	}
-
-	/* the server description */
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "description-entry"));
-	description = gtk_editable_get_chars(editable, 0, -1);
-	if (description && *description) {
-		if (ldap_server->description)
-			g_free(ldap_server->description);
-		ldap_server->description = description;
-	}
-
-	/* the server hostname */
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "server-entry"));
-	server = gtk_editable_get_chars(editable, 0, -1);
-	if (server && *server) {
-		if (ldap_server->host)
-			g_free(ldap_server->host);
-		ldap_server->host = server;
-	}
-
-	/* the server port */
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "port-entry"));
-	port = gtk_editable_get_chars(editable, 0, -1);
-	if (port && *port) {
-		if (ldap_server->port)
-			g_free (ldap_server->port);
-		ldap_server->port = port;
-	}
-
-	/* the root dn */
-	editable = GTK_EDITABLE(glade_xml_get_widget(dialog->gui, "root-dn-entry"));
-	rootdn = gtk_editable_get_chars(editable, 0, -1);
-	if (rootdn && *rootdn) {
-		if (ldap_server->rootdn)
-			g_free (ldap_server->rootdn);
-		ldap_server->rootdn = rootdn;
-	}
-}
-
-void
-e_ldap_server_editor_show(ELDAPServer *server)
-{
-	ELDAPServerDialog *dialog = g_new0 (ELDAPServerDialog, 1);
-
-	dialog->server = server;
-	dialog->gui = glade_xml_new (EVOLUTION_GLADEDIR "/ldap-server-dialog.glade", NULL);
-
-	dialog->dialog = glade_xml_get_widget(dialog->gui, "ldap-server-dialog");
-
-	fill_in_server_info (dialog);
-
-	gnome_dialog_run (GNOME_DIALOG(dialog->dialog));
-
-	extract_server_info (dialog);
-
-	gnome_dialog_close (GNOME_DIALOG(dialog->dialog));
-}
diff --git a/addressbook/gui/component/e-ldap-server-dialog.h b/addressbook/gui/component/e-ldap-server-dialog.h
deleted file mode 100644
index e5ae169f5c..0000000000
--- a/addressbook/gui/component/e-ldap-server-dialog.h
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#ifndef __E_LDAP_SERVER_DIALOG_H__
-#define __E_LDAP_SERVER_DIALOG_H__
-
-#include "e-ldap-storage.h"
-
-void e_ldap_server_editor_show(ELDAPServer *server);
-
-#endif /* __E_LDAP_SERVER_DIALOG_H__ */
diff --git a/addressbook/gui/component/e-ldap-storage.c b/addressbook/gui/component/e-ldap-storage.c
deleted file mode 100644
index aa1e153a2a..0000000000
--- a/addressbook/gui/component/e-ldap-storage.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-ldap-storage.c
- *
- * Copyright (C) 2000  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Chris Toshok
- */
-
-/* The ldap server file goes like this:
-
-   
-   
-     
-           LDAP Server
-	   This is my company address book.
-	   ldap.server.com
-	   389
-	   
-     
-   
-
-   FIXME: Do we want to use a namespace for this?
-   FIXME: Do we want to have an internationalized description?
- */
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-
-#include 
-
-#include "evolution-shell-component.h"
-#include "evolution-storage.h"
-
-#include 
-#include 
-
-#include "e-ldap-storage.h"
-#include "e-ldap-server-dialog.h"
-
-#include "e-util/e-util.h"
-#include "e-util/e-xml-utils.h"
-
-#include 
-#include 
-#include 
-#include 
-
-#define LDAPSERVER_XML "ldapservers.xml"
-
-static gboolean load_ldap_data (EvolutionStorage *storage, const char *file_path);
-static gboolean save_ldap_data (const char *file_path);
-
-GHashTable *servers;
-EvolutionStorage *storage;
-static char *ldapservers;
-
-void
-setup_ldap_storage (EvolutionShellComponent *shell_component,
-		    const char *evolution_homedir)
-{
-	EvolutionShellClient *shell_client;
-	Evolution_Shell corba_shell;
-
-	shell_client = evolution_shell_component_get_owner (shell_component);
-	if (shell_client == CORBA_OBJECT_NIL) {
-		g_warning ("We have no shell!?");
-		return;
-	}
-
-	corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client));
-
-	storage = evolution_storage_new (_("External Directories"));
-	if (evolution_storage_register_on_shell (storage, corba_shell) != EVOLUTION_STORAGE_OK) {
-		g_warning ("Cannot register storage");
-		return;
-	}
-
-	/* save the storage for later */
-	servers = g_hash_table_new (g_str_hash, g_str_equal);
-
-	gtk_object_set_data (GTK_OBJECT (shell_component), "e-storage", storage);
-
-	if (ldapservers)
-		g_free (ldapservers);
-	ldapservers = g_strdup_printf ("%s/" LDAPSERVER_XML, evolution_homedir);
-	load_ldap_data (storage, ldapservers);
-}
-
-static char *
-get_string_value (xmlNode *node,
-		  const char *name)
-{
-	xmlNode *p;
-	xmlChar *xml_string;
-	char *retval;
-
-	p = e_xml_get_child_by_name (node, (xmlChar *) name);
-	if (p == NULL)
-		return NULL;
-
-	p = e_xml_get_child_by_name (p, (xmlChar *) "text");
-	if (p == NULL) /* there's no text between the tags, return the empty string */
-		return g_strdup("");
-
-	xml_string = xmlNodeListGetString (node->doc, p, 1);
-	retval = g_strdup ((char *) xml_string);
-	xmlFree (xml_string);
-
-	return retval;
-}
-
-static gboolean
-load_ldap_data (EvolutionStorage *storage,
-		const char *file_path)
-{
-	xmlDoc *doc;
-	xmlNode *root;
-	xmlNode *child;
-
- tryagain:
-	doc = xmlParseFile (file_path);
-	if (doc == NULL) {
-		/* check to see if a ldapserver.xml.new file is
-                   there.  if it is, rename it and run with it */
-		char *new_path = g_strdup_printf ("%s.new", file_path);
-		struct stat sb;
-
-		if (stat (new_path, &sb) == 0) {
-			int rv;
-
-			rv = rename (new_path, file_path);
-			g_free (new_path);
-
-			if (0 > rv) {
-				g_error ("Failed to rename ldapserver.xml: %s\n", strerror(errno));
-				return FALSE;
-			}
-			else {
-				goto tryagain;
-			}
-		}
-
-		g_free (new_path);
-		return TRUE;
-	}
-
-	root = xmlDocGetRootElement (doc);
-	if (root == NULL || strcmp (root->name, "contactservers") != 0) {
-		xmlFreeDoc (doc);
-		return FALSE;
-	}
-
-	for (child = root->childs; child; child = child->next) {
-		char *path;
-		ELDAPServer *server;
-
-		if (strcmp (child->name, "contactserver")) {
-			g_warning ("unknown node '%s' in %s", child->name, file_path);
-			continue;
-		}
-
-		server = g_new (ELDAPServer, 1);
-
-		server->name = get_string_value (child, "name");
-		server->description = get_string_value (child, "description");
-		server->port = get_string_value (child, "port");
-		server->host = get_string_value (child, "host");
-		server->rootdn = get_string_value (child, "rootdn");
-		server->scope = get_string_value (child, "scope");
-		server->uri = g_strdup_printf ("ldap://%s:%s/%s??%s", server->host, server->port, server->rootdn, server->scope);
-
-		path = g_strdup_printf ("/%s", server->name);
-		evolution_storage_new_folder (storage, path, "contacts", server->uri, server->description);
-
-		g_hash_table_insert (servers, server->name, server);
-
-		g_free (path);
-	}
-
-	xmlFreeDoc (doc);
-
-	return TRUE;
-}
-
-static void
-ldap_server_foreach(gpointer key, gpointer value, gpointer user_data)
-{
-	ELDAPServer *server = (ELDAPServer*)value;
-	xmlNode *root = (xmlNode*)user_data;
-	xmlNode *server_root = xmlNewNode (NULL,
-					   (xmlChar *) "contactserver");
-
-	xmlAddChild (root, server_root);
-
-	xmlNewChild (server_root, NULL, (xmlChar *) "name",
-		     (xmlChar *) server->name);
-	xmlNewChild (server_root, NULL, (xmlChar *) "description",
-		     (xmlChar *) server->description);
-
-	xmlNewChild (server_root, NULL, (xmlChar *) "port",
-		     (xmlChar *) server->port);
-	xmlNewChild (server_root, NULL, (xmlChar *) "host",
-		     (xmlChar *) server->host);
-	xmlNewChild (server_root, NULL, (xmlChar *) "rootdn",
-		     (xmlChar *) server->rootdn);
-	xmlNewChild (server_root, NULL, (xmlChar *) "scope",
-		     (xmlChar *) server->scope);
-}
-
-static gboolean
-save_ldap_data (const char *file_path)
-{
-	xmlDoc *doc;
-	xmlNode *root;
-	int fd, rv;
-	xmlChar *buf;
-	int buf_size;
-	char *new_path = g_strdup_printf ("%s.new", file_path);
-
-	doc = xmlNewDoc ((xmlChar *) "1.0");
-	root = xmlNewDocNode (doc, NULL, (xmlChar *) "contactservers", NULL);
-	xmlDocSetRootElement (doc, root);
-
-	g_hash_table_foreach (servers, ldap_server_foreach, root);
-
-	fd = open (new_path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
-	fchmod (fd, 0600);
-
-	xmlDocDumpMemory (doc, &buf, &buf_size);
-
-	if (buf == NULL) {
-		g_error ("Failed to write ldapserver.xml: xmlBufferCreate() == NULL");
-		return FALSE;
-	}
-
-	rv = write (fd, buf, buf_size);
-	xmlFree (buf);
-	close (fd);
-
-	if (0 > rv) {
-		g_error ("Failed to write new ldapserver.xml: %s\n", strerror(errno));
-		unlink (new_path);
-		return FALSE;
-	}
-	else {
-		if (0 > rename (new_path, file_path)) {
-			g_error ("Failed to rename ldapserver.xml: %s\n", strerror(errno));
-			unlink (new_path);
-			return FALSE;
-		}
-		return TRUE;
-	}
-}
-
-void
-e_ldap_storage_add_server (ELDAPServer *server)
-{
-	char *path;
-	/* add it to our hashtable */
-	g_hash_table_insert (servers, server->name, server);
-
-	/* and then to the ui */
-	path = g_strdup_printf ("/%s", server->name);
-	evolution_storage_new_folder (storage, path, "contacts", server->uri, server->description);
-
-	g_free (path);
-
-	save_ldap_data (ldapservers);
-}
-
-void
-e_ldap_storage_remove_server (char *name)
-{
-	char *path;
-	ELDAPServer *server;
-
-	/* remove it from our hashtable */
-	server = (ELDAPServer*)g_hash_table_lookup (servers, name);
-	g_hash_table_remove (servers, name);
-
-	g_free (server->name);
-	g_free (server->description);
-	g_free (server->host);
-	g_free (server->port);
-	g_free (server->rootdn);
-	g_free (server->scope);
-	g_free (server->uri);
-
-	g_free (server);
-
-	/* and then from the ui */
-	path = g_strdup_printf ("/%s", name);
-	evolution_storage_removed_folder (storage, path);
-
-	g_free (path);
-
-	save_ldap_data (ldapservers);
-}
diff --git a/addressbook/gui/component/e-ldap-storage.h b/addressbook/gui/component/e-ldap-storage.h
deleted file mode 100644
index 9d3e35b4db..0000000000
--- a/addressbook/gui/component/e-ldap-storage.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-ldap-storage.h
- *
- * Copyright (C) 2000  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Chris Toshok
- */
-
-#ifndef __E_LDAP_STORAGE_H__
-#define __E_LDAP_STORAGE_H__
-
-#include "evolution-shell-component.h"
-
-typedef struct {
-	char *name;
-	char *description;
-	char *host;
-	char *port;
-	char *rootdn;
-	char *scope;
-	char *uri; /* filled in from the above */
-} ELDAPServer;
-
-void setup_ldap_storage (EvolutionShellComponent *shell_component,
-			 const char *evolution_homedir);
-void e_ldap_storage_add_server (ELDAPServer *server);
-void e_ldap_storage_remove_server (char *name);
-
-#endif /* __E_LDAP_STORAGE_H__ */
diff --git a/addressbook/gui/component/ldap-server-dialog.glade b/addressbook/gui/component/ldap-server-dialog.glade
deleted file mode 100644
index a4dad9c2c2..0000000000
--- a/addressbook/gui/component/ldap-server-dialog.glade
+++ /dev/null
@@ -1,400 +0,0 @@
-
-
-
-
-  newserver
-  newserver
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  False
-  True
-  ldap-server-dialog.glade.h
-
-
-
-  GnomeDialog
-  ldap-server-dialog
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  False
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    dialog-vbox1
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      dialog-action_area1
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button1
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	button3
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-
-    
-      GtkVBox
-      vbox1
-      False
-      0
-      
-	0
-	True
-	True
-      
-
-      
-	GtkTable
-	table2
-	5
-	2
-	False
-	0
-	0
-	
-	  0
-	  True
-	  True
-	
-
-	
-	  GtkEntry
-	  description-entry
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    1
-	    2
-	    1
-	    2
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  server-entry
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    1
-	    2
-	    2
-	    3
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  port-entry
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    1
-	    2
-	    3
-	    4
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  root-dn-entry
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    1
-	    2
-	    4
-	    5
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment1
-	  0.5
-	  0.5
-	  1
-	  1
-	  
-	    0
-	    1
-	    1
-	    2
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label1
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment2
-	  0.5
-	  0.5
-	  1
-	  1
-	  
-	    0
-	    1
-	    2
-	    3
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label2
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment3
-	  0.5
-	  0.5
-	  1
-	  1
-	  
-	    0
-	    1
-	    3
-	    4
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label3
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment4
-	  0.5
-	  0.5
-	  1
-	  1
-	  
-	    0
-	    1
-	    4
-	    5
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label4
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	  
-	
-
-	
-	  GtkEntry
-	  name-entry
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    1
-	    2
-	    0
-	    1
-	    0
-	    0
-	    True
-	    False
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkAlignment
-	  alignment5
-	  0
-	  0.5
-	  1
-	  1
-	  
-	    0
-	    1
-	    0
-	    1
-	    0
-	    0
-	    False
-	    False
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkLabel
-	    label5
-	    
-	    GTK_JUSTIFY_CENTER
-	    False
-	    0
-	    0.5
-	    0
-	    0
-	  
-	
-      
-    
-  
-
-
-
diff --git a/addressbook/gui/component/ldap-server-dialog.glade.h b/addressbook/gui/component/ldap-server-dialog.glade.h
deleted file mode 100644
index c99dfa3cb5..0000000000
--- a/addressbook/gui/component/ldap-server-dialog.glade.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("Description:");
-gchar *s = N_("LDAP Server:");
-gchar *s = N_("Port Number:");
-gchar *s = N_("Root DN:");
-gchar *s = N_("Name:");
diff --git a/addressbook/gui/component/select-names/.cvsignore b/addressbook/gui/component/select-names/.cvsignore
deleted file mode 100644
index 1d8db60890..0000000000
--- a/addressbook/gui/component/select-names/.cvsignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.deps
-.libs
-.pure
-Makefile
-Makefile.in
-*.lo
-*.la
-Evolution-Addressbook-SelectNames-stubs.c
-Evolution-Addressbook-SelectNames-skels.c
-Evolution-Addressbook-SelectNames-common.c
-Evolution-Addressbook-SelectNames.h
diff --git a/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl b/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl
deleted file mode 100644
index 2bc8154daf..0000000000
--- a/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * CORBA interface for the SelectNames dialog.
- *
- * Authors:
- *   Ettore Perazzoli 
- *
- * Copyright (C) 2000 Helix Code, Inc.
- */
-
-#include 
-
-module Evolution {
-module Addressbook {
-
-	interface SelectNames : Bonobo::Unknown {
-		struct Section {
-			string id;
-			string title;
-		};
-
-		typedef sequence
SectionList; - - exception DuplicateID {}; - exception SectionNotFound {}; - - void add_section (in string id, in string title) - raises (DuplicateID); - - Bonobo::Control get_entry_for_section (in string section_id) - raises (SectionNotFound); - - void activate_dialog (in string section_id); - }; - -}; -}; diff --git a/addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oaf.in b/addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oaf.in deleted file mode 100644 index e66c3aa38a..0000000000 --- a/addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oaf.in +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oafinfo b/addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oafinfo deleted file mode 100644 index e66c3aa38a..0000000000 --- a/addressbook/gui/component/select-names/GNOME_Evolution_Addressbook_SelectNames.oafinfo +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/addressbook/gui/component/select-names/Makefile.am b/addressbook/gui/component/select-names/Makefile.am deleted file mode 100644 index 44209b15f9..0000000000 --- a/addressbook/gui/component/select-names/Makefile.am +++ /dev/null @@ -1,73 +0,0 @@ -# CORBA stuff - -IDLS = \ - Evolution-Addressbook-SelectNames.idl - -IDL_GENERATED = \ - Evolution-Addressbook-SelectNames.h \ - Evolution-Addressbook-SelectNames-common.c \ - Evolution-Addressbook-SelectNames-skels.c \ - Evolution-Addressbook-SelectNames-stubs.c - -Evolution-Addressbook-SelectNames-impl.o: Evolution-Addressbook-SelectNames.h - -$(IDL_GENERATED): $(IDLS) - $(ORBIT_IDL) -I$(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \ - -I$(srcdir) $(srcdir)/Evolution-Addressbook-SelectNames.idl - -oafdir = $(datadir)/oaf -oaf_DATA = evolution-addressbook-select-names.oafinfo - -# - -CPPFLAGS = \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" - -INCLUDES = \ - -DG_LOG_DOMAIN=\"evolution-addressbook\" \ - $(EXTRA_GNOME_CFLAGS) \ - $(GNOME_INCLUDEDIR) \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -I$(top_srcdir)/shell \ - -I$(top_builddir)/shell \ - -I$(top_srcdir)/widgets/e-text \ - -I$(top_srcdir)/widgets/e-table \ - -I$(top_srcdir)/addressbook/gui/minicard \ - -I$(top_srcdir)/addressbook/contact-editor \ - -I$(top_srcdir)/addressbook/backend \ - -I$(top_builddir)/addressbook/backend \ - $(BONOBO_HTML_GNOME_CFLAGS) \ - -DEVOLUTION_VERSION=\""$(VERSION)"\" \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DEVOLUTION_ICONSDIR=\""$(iconsdir)"\" \ - -DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\" \ - -DCAMEL_PROVIDERDIR=\""$(providerdir)"\" - -lib_LTLIBRARIES = libeselectnames.la - -libeselectnames_la_SOURCES = \ - $(IDL_GENERATED) \ - e-select-names-bonobo.c \ - e-select-names-bonobo.h \ - e-select-names-factory.c \ - e-select-names-factory.h \ - e-select-names-manager.c \ - e-select-names-manager.h \ - e-select-names-model.c \ - e-select-names-model.h \ - e-select-names-table-model.c \ - e-select-names-table-model.h \ - e-select-names-text-model.c \ - e-select-names-text-model.h \ - e-select-names.c \ - e-select-names.h - -gladedir = $(datadir)/evolution/glade -glade_DATA = select-names.glade - -EXTRA_DIST = \ - $(glade_DATA) \ - select-names.glade.h \ - $(oaf_DATA) \ - $(IDLS) diff --git a/addressbook/gui/component/select-names/e-select-names-bonobo.c b/addressbook/gui/component/select-names/e-select-names-bonobo.c deleted file mode 100644 index a7b8f5b11f..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-bonobo.c +++ /dev/null @@ -1,294 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-select-names-bonobo.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include -#include - -#include "Evolution-Addressbook-SelectNames.h" - -#include "e-util/e-util.h" -#include "e-select-names-manager.h" - -#include "e-select-names-bonobo.h" - - -#define PARENT_TYPE bonobo_object_get_type () -static BonoboObjectClass *parent_class = NULL; - -struct _ESelectNamesBonoboPrivate { - ESelectNamesManager *manager; -}; - -enum _EntryPropertyID { - ENTRY_PROPERTY_ID_TEXT -}; -typedef enum _EntryPropertyID EntryPropertyID; - - -/* PropertyBag implementation for the entry widgets. */ - -static void -entry_get_property_fn (BonoboPropertyBag *bag, - BonoboArg *arg, - unsigned int arg_id, - void *user_data) -{ - GtkWidget *widget; - char *text; - - widget = GTK_WIDGET (user_data); - - switch (arg_id) { - case ENTRY_PROPERTY_ID_TEXT: - gtk_object_get (GTK_OBJECT (widget), "text", &text, NULL); - BONOBO_ARG_SET_STRING (arg, text); - break; - default: - break; - } -} - -static void -entry_set_property_fn (BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GtkWidget *widget; - const char *text; - - widget = GTK_WIDGET (user_data); - - switch (arg_id) { - case ENTRY_PROPERTY_ID_TEXT: - text = BONOBO_ARG_GET_STRING (arg); - gtk_object_set (GTK_OBJECT (widget), "text", text, NULL); - break; - default: - break; - } -} - - -/* CORBA interface implementation. */ - -static POA_Evolution_Addressbook_SelectNames__vepv SelectNames_vepv; - -static POA_Evolution_Addressbook_SelectNames * -create_servant (void) -{ - POA_Evolution_Addressbook_SelectNames *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_Addressbook_SelectNames *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &SelectNames_vepv; - - CORBA_exception_init (&ev); - - POA_Evolution_Addressbook_SelectNames__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - return servant; -} - -static void -impl_SelectNames_add_section (PortableServer_Servant servant, - const CORBA_char *id, - const CORBA_char *title, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - ESelectNamesBonobo *select_names; - ESelectNamesBonoboPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - select_names = E_SELECT_NAMES_BONOBO (bonobo_object); - priv = select_names->priv; - - e_select_names_manager_add_section (priv->manager, id, title); -} - -static Bonobo_Control -impl_SelectNames_get_entry_for_section (PortableServer_Servant servant, - const CORBA_char *section_id, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - ESelectNamesBonobo *select_names; - ESelectNamesBonoboPrivate *priv; - GtkWidget *entry_widget; - BonoboControl *control; - BonoboPropertyBag *property_bag; - - bonobo_object = bonobo_object_from_servant (servant); - select_names = E_SELECT_NAMES_BONOBO (bonobo_object); - priv = select_names->priv; - - entry_widget = e_select_names_manager_create_entry (priv->manager, section_id); - gtk_widget_show (entry_widget); - - if (entry_widget == NULL) { - CORBA_exception_set (ev, - CORBA_USER_EXCEPTION, - ex_Evolution_Addressbook_SelectNames_SectionNotFound, - NULL); - return CORBA_OBJECT_NIL; - } - - control = bonobo_control_new (entry_widget); - - property_bag = bonobo_property_bag_new (entry_get_property_fn, entry_set_property_fn, entry_widget); - bonobo_property_bag_add (property_bag, "text", ENTRY_PROPERTY_ID_TEXT, - BONOBO_ARG_STRING, NULL, NULL, - BONOBO_PROPERTY_READABLE | BONOBO_PROPERTY_WRITEABLE); - - bonobo_control_set_property_bag (control, property_bag); - - return bonobo_object_corba_objref (BONOBO_OBJECT (control)); -} - -static void -impl_SelectNames_activate_dialog (PortableServer_Servant servant, - const CORBA_char *section_id, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - ESelectNamesBonobo *select_names; - ESelectNamesBonoboPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - select_names = E_SELECT_NAMES_BONOBO (bonobo_object); - priv = select_names->priv; - - e_select_names_manager_activate_dialog (priv->manager, section_id); -} - - -/* GtkObject methods. */ - -static void -impl_destroy (GtkObject *object) -{ - ESelectNamesBonobo *select_names; - ESelectNamesBonoboPrivate *priv; - - select_names = E_SELECT_NAMES_BONOBO (object); - priv = select_names->priv; - - gtk_object_unref (GTK_OBJECT (priv->manager)); - - g_free (priv); -} - - -static void -corba_class_init () -{ - POA_Evolution_Addressbook_SelectNames__vepv *vepv; - POA_Evolution_Addressbook_SelectNames__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_Addressbook_SelectNames__epv, 1); - epv->add_section = impl_SelectNames_add_section; - epv->get_entry_for_section = impl_SelectNames_get_entry_for_section; - epv->activate_dialog = impl_SelectNames_activate_dialog; - - vepv = &SelectNames_vepv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_Addressbook_SelectNames_epv = epv; -} - -static void -class_init (ESelectNamesBonoboClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - parent_class = gtk_type_class (bonobo_object_get_type ()); - - object_class->destroy = impl_destroy; - - corba_class_init (); -} - -static void -init (ESelectNamesBonobo *select_names) -{ - ESelectNamesBonoboPrivate *priv; - - priv = g_new (ESelectNamesBonoboPrivate, 1); - - priv->manager = e_select_names_manager_new (); - - select_names->priv = priv; -} - - -void -e_select_names_bonobo_construct (ESelectNamesBonobo *select_names, - Evolution_Addressbook_SelectNames corba_object) -{ - g_return_if_fail (select_names != NULL); - g_return_if_fail (E_IS_SELECT_NAMES_BONOBO (select_names)); - - bonobo_object_construct (BONOBO_OBJECT (select_names), corba_object); -} - -ESelectNamesBonobo * -e_select_names_bonobo_new (void) -{ - POA_Evolution_Addressbook_SelectNames *servant; - Evolution_Addressbook_SelectNames corba_object; - ESelectNamesBonobo *select_names; - - servant = create_servant (); - if (servant == NULL) - return NULL; - - select_names = gtk_type_new (e_select_names_bonobo_get_type ()); - - corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (select_names), servant); - e_select_names_bonobo_construct (select_names, corba_object); - - return select_names; -} - - -E_MAKE_TYPE (e_select_names_bonobo, "ESelectNamesBonobo", ESelectNamesBonobo, class_init, init, PARENT_TYPE) diff --git a/addressbook/gui/component/select-names/e-select-names-bonobo.h b/addressbook/gui/component/select-names/e-select-names-bonobo.h deleted file mode 100644 index 4531c1e024..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-bonobo.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-select-names-bonobo.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_SELECT_NAMES_BONOBO_H__ -#define __E_SELECT_NAMES_BONOBO_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution-Addressbook-SelectNames.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_SELECT_NAMES_BONOBO (e_select_names_bonobo_get_type ()) -#define E_SELECT_NAMES_BONOBO(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_BONOBO, ESelectNamesBonobo)) -#define E_SELECT_NAMES_BONOBO_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_BONOBO, ESelectNamesBonoboClass)) -#define E_IS_SELECT_NAMES_BONOBO(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_BONOBO)) -#define E_IS_SELECT_NAMES_BONOBO_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SELECT_NAMES_BONOBO)) - - -typedef struct _ESelectNamesBonobo ESelectNamesBonobo; -typedef struct _ESelectNamesBonoboPrivate ESelectNamesBonoboPrivate; -typedef struct _ESelectNamesBonoboClass ESelectNamesBonoboClass; - -struct _ESelectNamesBonobo { - BonoboObject parent; - - ESelectNamesBonoboPrivate *priv; -}; - -struct _ESelectNamesBonoboClass { - BonoboObjectClass parent_class; -}; - - -GtkType e_select_names_bonobo_get_type (void); -void e_select_names_bonobo_construct (ESelectNamesBonobo *select_names, - Evolution_Addressbook_SelectNames corba_object); -ESelectNamesBonobo *e_select_names_bonobo_new (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_SELECT_NAMES_BONOBO_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-factory.c b/addressbook/gui/component/select-names/e-select-names-factory.c deleted file mode 100644 index 9a45692071..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-factory.c +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-select-names-factory.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-select-names-bonobo.h" - -#include "e-select-names-factory.h" - - -#define COMPONENT_FACTORY_ID "OAFIID:factory:addressbook:select-names:b39eb1a1-f341-4d5a-9a91-e2616e206b2e" - -static BonoboGenericFactory *factory = NULL; - - -static BonoboObject * -factory_fn (BonoboGenericFactory *factory, - void *closure) -{ - return BONOBO_OBJECT (e_select_names_bonobo_new ()); -} - - -gboolean -e_select_names_factory_init (void) -{ - if (factory != NULL) - return TRUE; - - factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL); - - if (factory == NULL) - return FALSE; - - return TRUE; -} diff --git a/addressbook/gui/component/select-names/e-select-names-factory.h b/addressbook/gui/component/select-names/e-select-names-factory.h deleted file mode 100644 index f65d5aaa9e..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-factory.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-select-names-factory.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_SECELT_NAMES_FACTORY_H -#define _E_SECELT_NAMES_FACTORY_H - -#include - -gboolean e_select_names_factory_init (void); - -#endif diff --git a/addressbook/gui/component/select-names/e-select-names-manager.c b/addressbook/gui/component/select-names/e-select-names-manager.c deleted file mode 100644 index b67ea282e9..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-manager.c +++ /dev/null @@ -1,349 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include -#include - -#include "e-select-names-manager.h" -#include "e-select-names-model.h" -#include "e-select-names-text-model.h" -#include "e-select-names.h" -#include "widgets/e-text/e-entry.h" - -/* Object argument IDs */ -enum { - ARG_0, - ARG_CARD, -}; - - -typedef struct { - char *id; - char *title; - ESelectNamesModel *model; -} ESelectNamesManagerSection; - -typedef struct { - char *id; - EEntry *entry; -} ESelectNamesManagerEntry; - -static void e_select_names_manager_init (ESelectNamesManager *manager); -static void e_select_names_manager_class_init (ESelectNamesManagerClass *klass); - -static void e_select_names_manager_destroy (GtkObject *object); -static void e_select_names_manager_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_select_names_manager_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); - -/** - * e_select_names_manager_get_type: - * @void: - * - * Registers the &ESelectNamesManager class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &ESelectNamesManager class. - **/ -GtkType -e_select_names_manager_get_type (void) -{ - static GtkType manager_type = 0; - - if (!manager_type) { - GtkTypeInfo manager_info = { - "ESelectNamesManager", - sizeof (ESelectNamesManager), - sizeof (ESelectNamesManagerClass), - (GtkClassInitFunc) e_select_names_manager_class_init, - (GtkObjectInitFunc) e_select_names_manager_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - manager_type = gtk_type_unique (gtk_object_get_type (), &manager_info); - } - - return manager_type; -} - -/** - * e_select_names_manager_new: - * @VCard: a string in vCard format - * - * Returns: a new #ESelectNamesManager that wraps the @VCard. - */ -ESelectNamesManager * -e_select_names_manager_new (void) -{ - ESelectNamesManager *manager = E_SELECT_NAMES_MANAGER(gtk_type_new(e_select_names_manager_get_type())); - return manager; -} - -static void -e_select_names_manager_class_init (ESelectNamesManagerClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS(klass); - - gtk_object_add_arg_type ("ESelectNamesManager::card", - GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CARD); - - object_class->destroy = e_select_names_manager_destroy; - object_class->get_arg = e_select_names_manager_get_arg; - object_class->set_arg = e_select_names_manager_set_arg; -} - -/* - * ESelectNamesManager lifecycle management and vcard loading/saving. - */ - -static void -e_select_names_manager_destroy (GtkObject *object) -{ - ESelectNamesManager *manager; - - manager = E_SELECT_NAMES_MANAGER (object); - - gtk_object_unref(GTK_OBJECT(manager->sections)); - gtk_object_unref(GTK_OBJECT(manager->entries)); -} - - -/* Set_arg handler for the manager */ -static void -e_select_names_manager_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesManager *manager; - - manager = E_SELECT_NAMES_MANAGER (object); - - switch (arg_id) { - case ARG_CARD: - break; - default: - return; - } -} - -/* Get_arg handler for the manager */ -static void -e_select_names_manager_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesManager *manager; - - manager = E_SELECT_NAMES_MANAGER (object); - - switch (arg_id) { - case ARG_CARD: - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void * -section_copy(const void *sec, void *data) -{ - const ESelectNamesManagerSection *section = sec; - ESelectNamesManagerSection *newsec; - - newsec = g_new(ESelectNamesManagerSection, 1); - newsec->id = g_strdup(section->id); - newsec->title = g_strdup(section->title); - newsec->model = section->model; - if (newsec->model) - gtk_object_ref(GTK_OBJECT(newsec->model)); - return newsec; -} - -static void -section_free(void *sec, void *data) -{ - ESelectNamesManagerSection *section = sec; - g_free(section->id); - g_free(section->title); - if (section->model) - gtk_object_unref(GTK_OBJECT(section->model)); - g_free(section); -} - -static void * -entry_copy(const void *ent, void *data) -{ - const ESelectNamesManagerEntry *entry = ent; - ESelectNamesManagerEntry *newent; - - newent = g_new(ESelectNamesManagerEntry, 1); - newent->id = g_strdup(entry->id); - newent->entry = entry->entry; - if (newent->entry) - gtk_object_ref(GTK_OBJECT(newent->entry)); - return newent; -} - -static void -entry_free(void *ent, void *data) -{ - ESelectNamesManagerEntry *entry = ent; - g_free(entry->id); - if (entry->entry) - gtk_object_unref(GTK_OBJECT(entry->entry)); - g_free(entry); -} - -/** - * e_select_names_manager_init: - */ -static void -e_select_names_manager_init (ESelectNamesManager *manager) -{ - manager->sections = e_list_new(section_copy, section_free, manager); - manager->entries = e_list_new(entry_copy, entry_free, manager); -} - -void e_select_names_manager_add_section (ESelectNamesManager *manager, - const char *id, - const char *title) -{ - ESelectNamesManagerSection *section; - - section = g_new(ESelectNamesManagerSection, 1); - section->id = g_strdup(id); - section->title = g_strdup(title); - section->model = e_select_names_model_new(); - e_list_append(manager->sections, section); - section_free(section, manager); -} - -static void -entry_destroyed(EEntry *entry, ESelectNamesManager *manager) -{ - if(!GTK_OBJECT_DESTROYED(manager)) { - EIterator *iterator = e_list_get_iterator(manager->entries); - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesManagerEntry *this_entry = e_iterator_get(iterator); - if(entry == this_entry->entry) { - e_iterator_delete(iterator); - break; - } - } - } - gtk_object_unref(GTK_OBJECT(manager)); -} - -GtkWidget *e_select_names_manager_create_entry (ESelectNamesManager *manager, - const char *id) -{ - ETextModel *model; - EIterator *iterator; - iterator = e_list_get_iterator(manager->sections); - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesManagerSection *section = e_iterator_get(iterator); - if (!strcmp(section->id, id)) { - ESelectNamesManagerEntry *entry; - EEntry *eentry; - eentry = E_ENTRY(e_entry_new()); - - entry = g_new(ESelectNamesManagerEntry, 1); - entry->entry = eentry; - entry->id = (char *)id; - model = e_select_names_text_model_new(section->model); - e_list_append(manager->entries, entry); - g_free(entry); - - gtk_object_set(GTK_OBJECT(eentry), - "model", model, - "editable", TRUE, - "use_ellipsis", TRUE, - NULL); - gtk_signal_connect(GTK_OBJECT(eentry), "destroy", - GTK_SIGNAL_FUNC(entry_destroyed), manager); - gtk_object_ref(GTK_OBJECT(manager)); - return GTK_WIDGET(eentry); - } - } - return NULL; -} - -static void -e_select_names_clicked(ESelectNames *dialog, gint button, ESelectNamesManager *manager) -{ - switch(button) { - case 0: { - EList *list = manager->sections; - EIterator *iterator = e_list_get_iterator(list); - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - ESelectNamesManagerSection *section = (void *) e_iterator_get(iterator); - ESelectNamesModel *source = e_select_names_get_source(dialog, section->id); - if (section->model) - gtk_object_unref(GTK_OBJECT(section->model)); - section->model = source; - /* Don't ref because get_source returns a conceptual ref_count of 1. */ - } - gtk_object_unref(GTK_OBJECT(iterator)); - - list = manager->entries; - iterator = e_list_get_iterator(list); - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - ESelectNamesManagerEntry *entry = (void *) e_iterator_get(iterator); - ESelectNamesModel *source = e_select_names_get_source(dialog, entry->id); - if (source) { - ETextModel *model = e_select_names_text_model_new(source); - if (model) { - gtk_object_set(GTK_OBJECT(entry->entry), - "model", model, - NULL); - gtk_object_unref(GTK_OBJECT(source)); - } - gtk_object_unref(GTK_OBJECT(model)); - } - } - gtk_object_unref(GTK_OBJECT(iterator)); - break; - } - } - gnome_dialog_close(GNOME_DIALOG(dialog)); -} - -void e_select_names_manager_activate_dialog (ESelectNamesManager *manager, - const char *id) -{ - ESelectNames *names = E_SELECT_NAMES(e_select_names_new()); - EIterator *iterator; - iterator = e_list_get_iterator(manager->sections); - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesManagerSection *section = e_iterator_get(iterator); - ESelectNamesModel *newmodel = e_select_names_model_duplicate(section->model); - e_select_names_add_section(names, section->id, section->title, newmodel); - gtk_object_unref(GTK_OBJECT(newmodel)); - } - gtk_signal_connect(GTK_OBJECT(names), "clicked", - GTK_SIGNAL_FUNC(e_select_names_clicked), manager); - gtk_widget_show(GTK_WIDGET(names)); -} - -/* Of type ECard */ -EList *e_select_names_manager_get_cards (ESelectNamesManager *manager, - const char *id) -{ - EIterator *iterator; - iterator = e_list_get_iterator(manager->sections); - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesManagerSection *section = e_iterator_get(iterator); - if (!strcmp(section->id, id)) { - return e_select_names_model_get_cards(section->model); - } - } - return NULL; -} diff --git a/addressbook/gui/component/select-names/e-select-names-manager.h b/addressbook/gui/component/select-names/e-select-names-manager.h deleted file mode 100644 index b05348ae79..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-manager.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#ifndef __E_SELECT_NAMES_MANAGER_H__ -#define __E_SELECT_NAMES_MANAGER_H__ - -#include -#include -#include -#include - -#define E_TYPE_SELECT_NAMES_MANAGER (e_select_names_manager_get_type ()) -#define E_SELECT_NAMES_MANAGER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_MANAGER, ESelectNamesManager)) -#define E_SELECT_NAMES_MANAGER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_MANAGER, ESelectNamesManagerClass)) -#define E_IS_SELECT_NAMES_MANAGER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_MANAGER)) -#define E_IS_SELECT_NAMES_MANAGER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_MANAGER)) - -typedef struct _ESelectNamesManager ESelectNamesManager; -typedef struct _ESelectNamesManagerClass ESelectNamesManagerClass; - -struct _ESelectNamesManager { - GtkObject object; - - EList *sections; - EList *entries; -}; - -struct _ESelectNamesManagerClass { - GtkObjectClass parent_class; -}; - -ESelectNamesManager *e_select_names_manager_new (void); -void e_select_names_manager_add_section (ESelectNamesManager *manager, - const char *id, - const char *title); -GtkWidget *e_select_names_manager_create_entry (ESelectNamesManager *manager, - const char *id); -void e_select_names_manager_activate_dialog (ESelectNamesManager *manager, - const char *id); - -/* Of type ECard */ -EList *e_select_names_manager_get_cards (ESelectNamesManager *manager, - const char *id); - -/* Standard Gtk function */ -GtkType e_select_names_manager_get_type (void); - -#endif /* ! __E_SELECT_NAMES_MANAGER_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-model.c b/addressbook/gui/component/select-names/e-select-names-model.c deleted file mode 100644 index 32f2a85a56..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-model.c +++ /dev/null @@ -1,441 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include -#include - -#include "e-select-names-model.h" -#include "e-util/e-util.h" -#include "addressbook/backend/ebook/e-card-simple.h" - -enum { - E_SELECT_NAMES_MODEL_CHANGED, - E_SELECT_NAMES_MODEL_LAST_SIGNAL -}; - -static guint e_select_names_model_signals[E_SELECT_NAMES_MODEL_LAST_SIGNAL] = { 0 }; - -/* Object argument IDs */ -enum { - ARG_0, - ARG_CARD, -}; - -static void e_select_names_model_init (ESelectNamesModel *model); -static void e_select_names_model_class_init (ESelectNamesModelClass *klass); - -static void e_select_names_model_destroy (GtkObject *object); -static void e_select_names_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_select_names_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); - -/** - * e_select_names_model_get_type: - * @void: - * - * Registers the &ESelectNamesModel class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &ESelectNamesModel class. - **/ -GtkType -e_select_names_model_get_type (void) -{ - static GtkType model_type = 0; - - if (!model_type) { - GtkTypeInfo model_info = { - "ESelectNamesModel", - sizeof (ESelectNamesModel), - sizeof (ESelectNamesModelClass), - (GtkClassInitFunc) e_select_names_model_class_init, - (GtkObjectInitFunc) e_select_names_model_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - model_type = gtk_type_unique (gtk_object_get_type (), &model_info); - } - - return model_type; -} - -/** - * e_select_names_model_new: - * @VCard: a string in vCard format - * - * Returns: a new #ESelectNamesModel that wraps the @VCard. - */ -ESelectNamesModel * -e_select_names_model_new (void) -{ - ESelectNamesModel *model = E_SELECT_NAMES_MODEL(gtk_type_new(e_select_names_model_get_type())); - return model; -} - -/** - * e_select_names_model_new: - * @VCard: a string in vCard format - * - * Returns: a new #ESelectNamesModel that wraps the @VCard. - */ -ESelectNamesModel * -e_select_names_model_duplicate (ESelectNamesModel *old) -{ - ESelectNamesModel *model = E_SELECT_NAMES_MODEL(gtk_type_new(e_select_names_model_get_type())); - model->data = e_list_duplicate(old->data); - model->id = g_strdup(old->id); - model->title = g_strdup(old->title); - return model; -} - -static void -e_select_names_model_class_init (ESelectNamesModelClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS(klass); - - e_select_names_model_signals[E_SELECT_NAMES_MODEL_CHANGED] = - gtk_signal_new ("changed", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (ESelectNamesModelClass, changed), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, e_select_names_model_signals, E_SELECT_NAMES_MODEL_LAST_SIGNAL); - - gtk_object_add_arg_type ("ESelectNamesModel::card", - GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CARD); - - klass->changed = NULL; - - object_class->destroy = e_select_names_model_destroy; - object_class->get_arg = e_select_names_model_get_arg; - object_class->set_arg = e_select_names_model_set_arg; -} - -/* - * ESelectNamesModel lifecycle management and vcard loading/saving. - */ - -static void -e_select_names_model_destroy (GtkObject *object) -{ - ESelectNamesModel *model; - - model = E_SELECT_NAMES_MODEL (object); - - gtk_object_unref(GTK_OBJECT(model->data)); -} - - -/* Set_arg handler for the model */ -static void -e_select_names_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesModel *model; - - model = E_SELECT_NAMES_MODEL (object); - - switch (arg_id) { - case ARG_CARD: - break; - default: - return; - } -} - -/* Get_arg handler for the model */ -static void -e_select_names_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesModel *model; - - model = E_SELECT_NAMES_MODEL (object); - - switch (arg_id) { - case ARG_CARD: - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void * -data_copy(const void *sec, void *data) -{ - const ESelectNamesModelData *section = sec; - ESelectNamesModelData *newsec; - - newsec = g_new(ESelectNamesModelData, 1); - newsec->type = section->type; - newsec->card = section->card; - if (newsec->card) - gtk_object_ref(GTK_OBJECT(newsec->card)); - newsec->string = g_strdup(section->string); - return newsec; -} - -static void -data_free(void *sec, void *data) -{ - ESelectNamesModelData *section = sec; - if (section->card) - gtk_object_unref(GTK_OBJECT(section->card)); - g_free(section->string); - g_free(section); -} - -/** - * e_select_names_model_init: - */ -static void -e_select_names_model_init (ESelectNamesModel *model) -{ - model->data = e_list_new(data_copy, data_free, model); -} - -static void * -copy_func(const void *data, void *user_data) -{ - GtkObject *object = (void *) data; - if (object) - gtk_object_ref(object); - return object; -} - -static void -free_func(void *data, void *user_data) -{ - GtkObject *object = data; - if (object) - gtk_object_unref(object); -} - -/* Of type ECard */ -EList *e_select_names_model_get_cards (ESelectNamesModel *model) -{ - EList *list = e_list_new(copy_func, free_func, NULL); - EIterator *iterator = e_list_get_iterator(model->data); - EIterator *new_iterator = e_list_get_iterator(list); - - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - ESelectNamesModelData *node = (void *) e_iterator_get(iterator); - ECard *card; - ECardSimple *simple; - if (node->card) { - card = node->card; - gtk_object_ref(GTK_OBJECT(card)); - } else { - card = e_card_new(""); - } - simple = e_card_simple_new(card); - e_card_simple_set_arbitrary(simple, "text_version", "string", node->string); - e_iterator_insert(new_iterator, card, FALSE); - gtk_object_unref(GTK_OBJECT(card)); - gtk_object_unref(GTK_OBJECT(simple)); - } - return list; -} - -EList *e_select_names_model_get_data (ESelectNamesModel *model) -{ - return model->data; -} - -static void -e_select_names_model_changed (ESelectNamesModel *model) -{ - gtk_signal_emit(GTK_OBJECT(model), - e_select_names_model_signals[E_SELECT_NAMES_MODEL_CHANGED]); -} - -void -e_select_names_model_insert (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model, or NULL if the list is empty. */ - int index, - char *data) -{ - gchar **strings = e_strsplit(data, ",", -1); - int i; - if (iterator == NULL) { - ESelectNamesModelData new = {E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS, NULL, ""}; - - e_list_append(model->data, &new); - iterator = e_list_get_iterator(model->data); - - index = 0; - } else { - gtk_object_ref(GTK_OBJECT(iterator)); - } - if (strings[0]) { - ESelectNamesModelData *node = (void *) e_iterator_get(iterator); - gchar *temp = g_strdup_printf("%.*s%s%s", index, node->string, strings[0], node->string + index); - g_free(node->string); - node->string = temp; - index += strlen(strings[0]); - - for (i = 1; strings[i]; i++) { - ESelectNamesModelData *node = (void *) e_iterator_get(iterator); - gchar *temp = g_strdup_printf("%.*s", index, node->string); - gchar *temp2 = g_strdup_printf("%s%s", strings[i], node->string + index); - - g_free(node->string); - node->type = E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS; - node->string = temp; - if (node->card) - gtk_object_unref(GTK_OBJECT(node->card)); - node->card = NULL; - - node = g_new(ESelectNamesModelData, 1); - node->type = E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS; - node->card = NULL; - node->string = temp2; - e_iterator_insert(iterator, node, 0); - index = strlen(strings[i]); - g_free(node->string); - g_free(node); - } - } - e_select_names_model_changed(model); - gtk_object_unref(GTK_OBJECT(iterator)); -} - -void -e_select_names_model_insert_length (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - char *data, - int length) -{ - gchar *string = g_new(char, length + 1); - strncpy(string, data, length); - string[length] = 0; - e_select_names_model_insert(model, iterator, index, string); - g_free(string); -} - -void -e_select_names_model_delete (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - int length) -{ - while (length > 0 && e_iterator_is_valid(iterator)) { - ESelectNamesModelData *node = (void *) e_iterator_get(iterator); - int this_length = strlen(node->string); - if (this_length <= index + length) { - gchar *temp = g_strdup_printf("%.*s", index, node->string); - g_free(node->string); - node->string = temp; - length -= this_length - index; - } else { - gchar *temp = g_strdup_printf("%.*s%s", index, node->string, node->string + index + length); - g_free(node->string); - node->string = temp; - break; - } - - if (length > 0) { - e_iterator_next(iterator); - if (e_iterator_is_valid(iterator)) { - ESelectNamesModelData *node2 = (void *) e_iterator_get(iterator); - gchar *temp = g_strdup_printf("%s%s", node->string, node2->string); - g_free(node2->string); - node2->string = temp; - e_iterator_prev(iterator); - e_iterator_delete(iterator); - length --; - } - } - } - e_select_names_model_changed(model); -} - -void -e_select_names_model_replace (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - int length, - char *data) -{ - if (iterator == NULL) { - ESelectNamesModelData new = {E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS, NULL, ""}; - - e_list_append(model->data, &new); - iterator = e_list_get_iterator(model->data); - - index = 0; - } else { - gtk_object_ref(GTK_OBJECT(iterator)); - } - while (length > 0 && e_iterator_is_valid(iterator)) { - ESelectNamesModelData *node = (void *) e_iterator_get(iterator); - int this_length = strlen(node->string); - if (this_length <= index + length) { - gchar *temp = g_strdup_printf("%.*s", index, node->string); - g_free(node->string); - node->string = temp; - length -= this_length - index; - } else { - gchar *temp = g_strdup_printf("%.*s%s", index, node->string, node->string + index + length); - g_free(node->string); - node->string = temp; - length = 0; - } - - if (length > 0) { - e_iterator_next(iterator); - if (e_iterator_is_valid(iterator)) { - ESelectNamesModelData *node2 = (void *) e_iterator_get(iterator); - gchar *temp = g_strdup_printf("%s%s", node->string, node2->string); - g_free(node2->string); - node2->string = temp; - e_iterator_prev(iterator); - e_iterator_delete(iterator); - } - } - } - if (!e_iterator_is_valid(iterator)) { - ESelectNamesModelData *node; - e_iterator_last(iterator); - if (e_iterator_is_valid(iterator)) { - node = (void *) e_iterator_get(iterator); - index = strlen(node->string); - } else - index = 0; - } - e_select_names_model_insert (model, iterator, index, data); - gtk_object_unref(GTK_OBJECT(iterator)); -} - - -void -e_select_names_model_add_item (ESelectNamesModel *model, - EIterator *iterator, /* NULL for at the beginning. */ - ESelectNamesModelData *data) -{ - e_iterator_insert(iterator, data, FALSE); - e_select_names_model_changed(model); -} - -void -e_select_names_model_remove_item (ESelectNamesModel *model, - EIterator *iterator) -{ - e_iterator_delete(iterator); - e_select_names_model_changed(model); -} - - diff --git a/addressbook/gui/component/select-names/e-select-names-model.h b/addressbook/gui/component/select-names/e-select-names-model.h deleted file mode 100644 index 4ea1bdc8db..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-model.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#ifndef __E_SELECT_NAMES_MODEL_H__ -#define __E_SELECT_NAMES_MODEL_H__ - -#include -#include -#include -#include -#include - -#define E_TYPE_SELECT_NAMES_MODEL (e_select_names_model_get_type ()) -#define E_SELECT_NAMES_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_MODEL, ESelectNamesModel)) -#define E_SELECT_NAMES_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_MODEL, ESelectNamesModelClass)) -#define E_IS_SELECT_NAMES_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_MODEL)) -#define E_IS_SELECT_NAMES_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_MODEL)) - -typedef enum _ESelectNamesModelDataType ESelectNamesModelDataType; -typedef struct _ESelectNamesModelData ESelectNamesModelData; -typedef struct _ESelectNamesModel ESelectNamesModel; -typedef struct _ESelectNamesModelClass ESelectNamesModelClass; - -enum _ESelectNamesModelDataType { - E_SELECT_NAMES_MODEL_DATA_TYPE_CARD, - E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS, -}; - -struct _ESelectNamesModelData { - ESelectNamesModelDataType type; - ECard *card; - char *string; -}; - -struct _ESelectNamesModel { - GtkObject object; - - char *id; - char *title; - - EList *data; /* Of type ESelectNamesModelData. */ -}; - -struct _ESelectNamesModelClass { - GtkObjectClass parent_class; - - void (*changed) (ESelectNamesModel *model); -}; - -ESelectNamesModel *e_select_names_model_new (void); -ESelectNamesModel *e_select_names_model_duplicate (ESelectNamesModel *old); - -/* These lengths are allowed to go over objects and act just like the text model does. */ -void e_select_names_model_insert (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - char *data); -void e_select_names_model_insert_length (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - char *data, - int length); -void e_select_names_model_delete (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - int length); -void e_select_names_model_replace (ESelectNamesModel *model, - EIterator *iterator, /* Must be one of the iterators in the model. */ - int index, - int replacement_length, - char *data); - -void e_select_names_model_add_item (ESelectNamesModel *model, - EIterator *iterator, /* NULL for at the beginning. */ - ESelectNamesModelData *data); -void e_select_names_model_remove_item (ESelectNamesModel *model, - EIterator *iterator); - -/* Of type ECard */ -EList *e_select_names_model_get_cards (ESelectNamesModel *model); - -/* Of type ESelectNamesModelData */ -EList *e_select_names_model_get_data (ESelectNamesModel *model); - -/* Standard Gtk function */ -GtkType e_select_names_model_get_type (void); - -#endif /* ! __E_SELECT_NAMES_MODEL_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-table-model.c b/addressbook/gui/component/select-names/e-select-names-table-model.c deleted file mode 100644 index 0c56606c31..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-table-model.c +++ /dev/null @@ -1,353 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include -#include - -#include "e-util/e-util.h" -#include "e-select-names-table-model.h" -#include "addressbook/backend/ebook/e-card-simple.h" - -/* Object argument IDs */ -enum { - ARG_0, - ARG_SOURCE, -}; - -static void e_select_names_table_model_init (ESelectNamesTableModel *model); -static void e_select_names_table_model_class_init (ESelectNamesTableModelClass *klass); - -static void e_select_names_table_model_destroy (GtkObject *object); -static void e_select_names_table_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_select_names_table_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); - -static void e_select_names_table_model_model_changed (ESelectNamesModel *source, - ESelectNamesTableModel *model); - - -static void -e_select_names_table_model_add_source (ESelectNamesTableModel *model, - ESelectNamesModel *source) -{ - model->source = source; - if (model->source) - gtk_object_ref(GTK_OBJECT(model->source)); - model->source_changed_id = gtk_signal_connect(GTK_OBJECT(model->source), "changed", - GTK_SIGNAL_FUNC(e_select_names_table_model_model_changed), - model); -} - -static void -e_select_names_table_model_drop_source (ESelectNamesTableModel *model) -{ - if (model->source_changed_id) - gtk_signal_disconnect(GTK_OBJECT(model->source), model->source_changed_id); - if (model->source) - gtk_object_unref(GTK_OBJECT(model->source)); - model->source = NULL; - model->source_changed_id = 0; -} - -/** - * e_select_names_table_model_get_type: - * @void: - * - * Registers the &ESelectNamesTableModel class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &ESelectNamesTableModel class. - **/ -GtkType -e_select_names_table_model_get_type (void) -{ - static GtkType model_type = 0; - - if (!model_type) { - GtkTypeInfo model_info = { - "ESelectNamesTableModel", - sizeof (ESelectNamesTableModel), - sizeof (ESelectNamesTableModelClass), - (GtkClassInitFunc) e_select_names_table_model_class_init, - (GtkObjectInitFunc) e_select_names_table_model_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - model_type = gtk_type_unique (e_table_model_get_type (), &model_info); - } - - return model_type; -} - -/** - * e_select_names_table_model_new: - * @VCard: a string in vCard format - * - * Returns: a new #ESelectNamesTableModel that wraps the @VCard. - */ -ETableModel * -e_select_names_table_model_new (ESelectNamesModel *source) -{ - ETableModel *model = E_TABLE_MODEL(gtk_type_new(e_select_names_table_model_get_type())); - gtk_object_set(GTK_OBJECT(model), - "source", source, - NULL); - return model; -} - -static void -fill_in_info (ESelectNamesTableModel *model) -{ - if (model->source) { - EList *list = e_select_names_model_get_data(model->source); - EIterator *iterator = e_list_get_iterator(list); - int count = 0; - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - count ++; - } - model->count = count; - model->data = g_new(ESelectNamesTableModelData, count); - count = 0; - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesModelData *data = e_iterator_get(iterator); - switch (data->type) { - case E_SELECT_NAMES_MODEL_DATA_TYPE_CARD: { - ECardSimple *simple = e_card_simple_new(data->card); - model->data[count].name = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FULL_NAME); - if ((model->data[count].name == 0) || *model->data[count].name == 0) { - model->data[count].name = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_ORG); - } - if (model->data[count].name == 0) - model->data[count].name = g_strdup(""); - model->data[count].email = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_EMAIL); - if (model->data[count].email == 0) - model->data[count].email = g_strdup(""); - gtk_object_unref(GTK_OBJECT(simple)); - count ++; - break; - } - case E_SELECT_NAMES_MODEL_DATA_TYPE_STRING_ADDRESS: - model->data[count].name = e_strdup_strip(data->string); - model->data[count].email = e_strdup_strip(data->string); - count ++; - break; - } - } - } else { - model->count = 0; - } -} - -static void -clear_info (ESelectNamesTableModel *model) -{ - int i; - for (i = 0; i < model->count; i++) { - g_free(model->data[i].name); - g_free(model->data[i].email); - } - g_free(model->data); - model->data = NULL; - model->count = -1; -} - -/* - * ESelectNamesTableModel lifecycle management and vcard loading/saving. - */ - -static void -e_select_names_table_model_destroy (GtkObject *object) -{ - ESelectNamesTableModel *model; - - model = E_SELECT_NAMES_TABLE_MODEL (object); - - e_select_names_table_model_drop_source (model); - clear_info(model); -} - -/* This function returns the number of columns in our ETableModel. */ -static int -e_select_names_table_model_col_count (ETableModel *etc) -{ - return 2; -} - -/* This function returns the number of rows in our ETableModel. */ -static int -e_select_names_table_model_row_count (ETableModel *etc) -{ - ESelectNamesTableModel *e_select_names_table_model = E_SELECT_NAMES_TABLE_MODEL(etc); - if (e_select_names_table_model->count == -1) { - if (e_select_names_table_model->source) { - fill_in_info(e_select_names_table_model); - } else { - return 0; - } - } - return e_select_names_table_model->count; -} - -/* This function returns the value at a particular point in our ETableModel. */ -static void * -e_select_names_table_model_value_at (ETableModel *etc, int col, int row) -{ - ESelectNamesTableModel *e_select_names_table_model = E_SELECT_NAMES_TABLE_MODEL(etc); - if (e_select_names_table_model->data == NULL) { - fill_in_info(e_select_names_table_model); - } - switch (col) { - case 0: - if (e_select_names_table_model->data[row].name == NULL) { - fill_in_info(e_select_names_table_model); - } - return e_select_names_table_model->data[row].name; - break; - case 1: - if (e_select_names_table_model->data[row].email == NULL) { - fill_in_info(e_select_names_table_model); - } - return e_select_names_table_model->data[row].email; - break; - } - return ""; -} - -/* This function sets the value at a particular point in our ETableModel. */ -static void -e_select_names_table_model_set_value_at (ETableModel *etc, int col, int row, const void *val) -{ -} - -/* This function returns whether a particular cell is editable. */ -static gboolean -e_select_names_table_model_is_cell_editable (ETableModel *etc, int col, int row) -{ - return FALSE; -} - -/* This function duplicates the value passed to it. */ -static void * -e_select_names_table_model_duplicate_value (ETableModel *etc, int col, const void *value) -{ - return g_strdup(value); -} - -/* This function frees the value passed to it. */ -static void -e_select_names_table_model_free_value (ETableModel *etc, int col, void *value) -{ - g_free(value); -} - -static void * -e_select_names_table_model_initialize_value (ETableModel *etc, int col) -{ - return g_strdup(""); -} - -static gboolean -e_select_names_table_model_value_is_empty (ETableModel *etc, int col, const void *value) -{ - return !(value && *(char *)value); -} - -static char * -e_select_names_table_model_value_to_string (ETableModel *etc, int col, const void *value) -{ - return g_strdup(value); -} - -static void -e_select_names_table_model_model_changed (ESelectNamesModel *source, - ESelectNamesTableModel *model) -{ - clear_info(model); - e_table_model_changed(E_TABLE_MODEL(model)); -} - -/* Set_arg handler for the model */ -static void -e_select_names_table_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesTableModel *model; - - model = E_SELECT_NAMES_TABLE_MODEL (object); - - switch (arg_id) { - case ARG_SOURCE: - e_select_names_table_model_drop_source (model); - e_select_names_table_model_add_source (model, E_SELECT_NAMES_MODEL(GTK_VALUE_OBJECT (*arg))); - break; - default: - return; - } -} - -/* Get_arg handler for the model */ -static void -e_select_names_table_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesTableModel *model; - - model = E_SELECT_NAMES_TABLE_MODEL (object); - - switch (arg_id) { - case ARG_SOURCE: - GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(model->source); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -/** - * e_select_names_table_model_init: - */ -static void -e_select_names_table_model_init (ESelectNamesTableModel *model) -{ - model->source = NULL; - model->source_changed_id = 0; - - model->count = -1; - model->data = NULL; -} - -static void -e_select_names_table_model_class_init (ESelectNamesTableModelClass *klass) -{ - GtkObjectClass *object_class; - ETableModelClass *table_model_class; - - object_class = GTK_OBJECT_CLASS(klass); - table_model_class = E_TABLE_MODEL_CLASS(klass); - - gtk_object_add_arg_type ("ESelectNamesTableModel::source", - GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_SOURCE); - - object_class->destroy = e_select_names_table_model_destroy; - object_class->get_arg = e_select_names_table_model_get_arg; - object_class->set_arg = e_select_names_table_model_set_arg; - - table_model_class->column_count = e_select_names_table_model_col_count; - table_model_class->row_count = e_select_names_table_model_row_count; - table_model_class->value_at = e_select_names_table_model_value_at; - table_model_class->set_value_at = e_select_names_table_model_set_value_at; - table_model_class->is_cell_editable = e_select_names_table_model_is_cell_editable; - table_model_class->duplicate_value = e_select_names_table_model_duplicate_value; - table_model_class->free_value = e_select_names_table_model_free_value; - table_model_class->initialize_value = e_select_names_table_model_initialize_value; - table_model_class->value_is_empty = e_select_names_table_model_value_is_empty; - table_model_class->value_to_string = e_select_names_table_model_value_to_string; -} diff --git a/addressbook/gui/component/select-names/e-select-names-table-model.h b/addressbook/gui/component/select-names/e-select-names-table-model.h deleted file mode 100644 index e0f0f5d804..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-table-model.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#ifndef __E_SELECT_NAMES_TABLE_MODEL_H__ -#define __E_SELECT_NAMES_TABLE_MODEL_H__ - -#include -#include -#include -#include "e-select-names-model.h" -#include - -#define E_TYPE_SELECT_NAMES_TABLE_MODEL (e_select_names_table_model_get_type ()) -#define E_SELECT_NAMES_TABLE_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_TABLE_MODEL, ESelectNamesTableModel)) -#define E_SELECT_NAMES_TABLE_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_TABLE_MODEL, ESelectNamesTableModelClass)) -#define E_IS_SELECT_NAMES_TABLE_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_TABLE_MODEL)) -#define E_IS_SELECT_NAMES_TABLE_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_TABLE_MODEL)) - -typedef struct { - char *name; - char *email; -} ESelectNamesTableModelData; - -typedef struct _ESelectNamesTableModel ESelectNamesTableModel; -typedef struct _ESelectNamesTableModelClass ESelectNamesTableModelClass; - -struct _ESelectNamesTableModel { - ETableModel parent; - - ESelectNamesModel *source; - int source_changed_id; - - int count; - ESelectNamesTableModelData *data; /* This is used as an array. */ -}; - -struct _ESelectNamesTableModelClass { - ETableModelClass parent_class; -}; - -ETableModel *e_select_names_table_model_new (ESelectNamesModel *source); - -/* Standard Gtk function */ -GtkType e_select_names_table_model_get_type (void); - -#endif /* ! __E_SELECT_NAMES_TABLE_MODEL_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names-text-model.c b/addressbook/gui/component/select-names/e-select-names-text-model.c deleted file mode 100644 index 71934c46dc..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-text-model.c +++ /dev/null @@ -1,357 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include -#include - -#include "e-select-names-text-model.h" - -/* Object argument IDs */ -enum { - ARG_0, - ARG_SOURCE, -}; - -static void e_select_names_text_model_init (ESelectNamesTextModel *model); -static void e_select_names_text_model_class_init (ESelectNamesTextModelClass *klass); - -static void e_select_names_text_model_destroy (GtkObject *object); -static void e_select_names_text_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_select_names_text_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); - -static void e_select_names_text_model_set_text (ETextModel *model, gchar *text); -static void e_select_names_text_model_insert (ETextModel *model, gint position, gchar *text); -static void e_select_names_text_model_insert_length (ETextModel *model, gint position, gchar *text, gint length); -static void e_select_names_text_model_delete (ETextModel *model, gint position, gint length); - -static void e_select_names_text_model_model_changed (ESelectNamesModel *source, - ESelectNamesTextModel *model); - - -ETextModelClass *parent_class; -#define PARENT_TYPE e_text_model_get_type() - -/** - * e_select_names_text_model_get_type: - * @void: - * - * Registers the &ESelectNamesTextModel class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &ESelectNamesTextModel class. - **/ -GtkType -e_select_names_text_model_get_type (void) -{ - static GtkType model_type = 0; - - if (!model_type) { - GtkTypeInfo model_info = { - "ESelectNamesTextModel", - sizeof (ESelectNamesTextModel), - sizeof (ESelectNamesTextModelClass), - (GtkClassInitFunc) e_select_names_text_model_class_init, - (GtkObjectInitFunc) e_select_names_text_model_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - model_type = gtk_type_unique (PARENT_TYPE, &model_info); - } - - return model_type; -} - -/** - * e_select_names_text_model_new: - * @VCard: a string in vCard format - * - * Returns: a new #ESelectNamesTextModel that wraps the @VCard. - */ -ETextModel * -e_select_names_text_model_new (ESelectNamesModel *source) -{ - ETextModel *model = E_TEXT_MODEL(gtk_type_new(e_select_names_text_model_get_type())); - gtk_object_set(GTK_OBJECT(model), - "source", source, - NULL); - e_select_names_text_model_model_changed (source, E_SELECT_NAMES_TEXT_MODEL(model)); - return model; -} - -static void -e_select_names_text_model_class_init (ESelectNamesTextModelClass *klass) -{ - GtkObjectClass *object_class; - ETextModelClass *text_model_class; - - object_class = GTK_OBJECT_CLASS(klass); - text_model_class = E_TEXT_MODEL_CLASS(klass); - - parent_class = gtk_type_class(PARENT_TYPE); - - gtk_object_add_arg_type ("ESelectNamesTextModel::source", - GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_SOURCE); - - object_class->destroy = e_select_names_text_model_destroy; - object_class->get_arg = e_select_names_text_model_get_arg; - object_class->set_arg = e_select_names_text_model_set_arg; - - text_model_class->set_text = e_select_names_text_model_set_text; - text_model_class->insert = e_select_names_text_model_insert; - text_model_class->insert_length = e_select_names_text_model_insert_length; - text_model_class->delete = e_select_names_text_model_delete; -} - -static int -get_length(EIterator *iterator) -{ - const ESelectNamesModelData *data = e_iterator_get(iterator); - return strlen(data->string); -} - -static void -e_select_names_text_model_set_text (ETextModel *model, gchar *text) -{ - ESelectNamesModel *source = E_SELECT_NAMES_TEXT_MODEL(model)->source; - EIterator *iterator = e_list_get_iterator(e_select_names_model_get_data(source)); - int length = 0; - if (model->text) { - length = strlen(model->text); - } - - e_iterator_reset(iterator); - if (!e_iterator_is_valid(iterator)) { - gtk_object_unref(GTK_OBJECT(iterator)); - iterator = NULL; - } - e_select_names_model_replace(source, - iterator, - 0, - length, - text); - if (iterator) - gtk_object_unref(GTK_OBJECT(iterator)); -} - -static void -e_select_names_text_model_insert (ETextModel *model, gint position, gchar *text) -{ - ESelectNamesModel *source = E_SELECT_NAMES_TEXT_MODEL(model)->source; - EIterator *iterator = e_list_get_iterator(e_select_names_model_get_data(source)); - - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - int this_length = get_length(iterator); - if (position <= this_length) { - break; - } else { - position -= this_length + 1; - } - } - if (!e_iterator_is_valid(iterator)) { - gtk_object_unref(GTK_OBJECT(iterator)); - iterator = NULL; - } - e_select_names_model_insert(source, - iterator, - position, - text); - if (iterator) - gtk_object_unref(GTK_OBJECT(iterator)); -} - -static void -e_select_names_text_model_insert_length (ETextModel *model, gint position, gchar *text, gint length) -{ - ESelectNamesModel *source = E_SELECT_NAMES_TEXT_MODEL(model)->source; - EIterator *iterator = e_list_get_iterator(e_select_names_model_get_data(source)); - - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - int this_length = get_length(iterator); - if (position <= this_length) { - break; - } else { - position -= this_length + 1; - } - } - if (!e_iterator_is_valid(iterator)) { - gtk_object_unref(GTK_OBJECT(iterator)); - iterator = NULL; - } - e_select_names_model_insert_length(source, - iterator, - position, - text, - length); - if (iterator) - gtk_object_unref(GTK_OBJECT(iterator)); -} - -static void -e_select_names_text_model_delete (ETextModel *model, gint position, gint length) -{ - ESelectNamesModel *source = E_SELECT_NAMES_TEXT_MODEL(model)->source; - EIterator *iterator = e_list_get_iterator(e_select_names_model_get_data(source)); - - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - int this_length = get_length(iterator); - if (position <= this_length) { - e_select_names_model_delete(source, - iterator, - position, - length); - break; - } else { - position -= this_length + 1; - } - } - if (iterator) - gtk_object_unref(GTK_OBJECT(iterator)); -} - -static void -e_select_names_text_model_model_changed (ESelectNamesModel *source, - ESelectNamesTextModel *model) -{ - EList *list = e_select_names_model_get_data(source); - EIterator *iterator = e_list_get_iterator(list); - int length = 0; - int length_count = 0; - int *lengthsp; - char *string; - char *stringp; - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesModelData *data = e_iterator_get(iterator); - length += strlen(data->string); - length ++; - length_count++; - } - if (length > 0) - length --; - - g_free(model->lengths); - model->lengths = g_new(int, length_count + 1); - lengthsp = model->lengths; - - string = g_new(char, length + 1); - stringp = string; - *stringp = 0; - for (e_iterator_reset(iterator); e_iterator_is_valid(iterator); e_iterator_next(iterator)) { - const ESelectNamesModelData *data = e_iterator_get(iterator); - int this_length; - - strcpy(stringp, data->string); - this_length = strlen(stringp); - stringp += this_length; - *(stringp++) = ','; - *(lengthsp++) = this_length; - } - if (stringp != string) { - stringp --; - *stringp = 0; - } - *lengthsp = -1; - g_free(E_TEXT_MODEL(model)->text); - E_TEXT_MODEL(model)->text = string; - e_text_model_changed(E_TEXT_MODEL(model)); -} - - -static void -e_select_names_text_model_add_source (ESelectNamesTextModel *model, - ESelectNamesModel *source) -{ - model->source = source; - if (model->source) - gtk_object_ref(GTK_OBJECT(model->source)); - model->source_changed_id = gtk_signal_connect(GTK_OBJECT(model->source), "changed", - GTK_SIGNAL_FUNC(e_select_names_text_model_model_changed), - model); -} - -static void -e_select_names_text_model_drop_source (ESelectNamesTextModel *model) -{ - if (model->source_changed_id) - gtk_signal_disconnect(GTK_OBJECT(model->source), model->source_changed_id); - if (model->source) - gtk_object_unref(GTK_OBJECT(model->source)); - model->source = NULL; - model->source_changed_id = 0; -} - -/* - * ESelectNamesTextModel lifecycle management and vcard loading/saving. - */ - -static void -e_select_names_text_model_destroy (GtkObject *object) -{ - ESelectNamesTextModel *model; - - model = E_SELECT_NAMES_TEXT_MODEL (object); - - e_select_names_text_model_drop_source(model); - g_free(model->lengths); - - if (GTK_OBJECT_CLASS(parent_class)->destroy) - GTK_OBJECT_CLASS(parent_class)->destroy(object); -} - - -/* Set_arg handler for the model */ -static void -e_select_names_text_model_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesTextModel *model; - - model = E_SELECT_NAMES_TEXT_MODEL (object); - - switch (arg_id) { - case ARG_SOURCE: - e_select_names_text_model_drop_source(model); - e_select_names_text_model_add_source(model, E_SELECT_NAMES_MODEL(GTK_VALUE_OBJECT(*arg))); - break; - default: - return; - } -} - -/* Get_arg handler for the model */ -static void -e_select_names_text_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNamesTextModel *model; - - model = E_SELECT_NAMES_TEXT_MODEL (object); - - switch (arg_id) { - case ARG_SOURCE: - GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(model->source); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -/** - * e_select_names_text_model_init: - */ -static void -e_select_names_text_model_init (ESelectNamesTextModel *model) -{ - model->source = NULL; - model->source_changed_id = 0; - model->lengths = NULL; -} - diff --git a/addressbook/gui/component/select-names/e-select-names-text-model.h b/addressbook/gui/component/select-names/e-select-names-text-model.h deleted file mode 100644 index aa23544251..0000000000 --- a/addressbook/gui/component/select-names/e-select-names-text-model.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#ifndef __E_SELECT_NAMES_TEXT_MODEL_H__ -#define __E_SELECT_NAMES_TEXT_MODEL_H__ - -#include -#include -#include -#include "e-select-names-model.h" -#include - -#define E_TYPE_SELECT_NAMES_TEXT_MODEL (e_select_names_text_model_get_type ()) -#define E_SELECT_NAMES_TEXT_MODEL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SELECT_NAMES_TEXT_MODEL, ESelectNamesTextModel)) -#define E_SELECT_NAMES_TEXT_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SELECT_NAMES_TEXT_MODEL, ESelectNamesTextModelClass)) -#define E_IS_SELECT_NAMES_TEXT_MODEL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SELECT_NAMES_TEXT_MODEL)) -#define E_IS_SELECT_NAMES_TEXT_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_SELECT_NAMES_TEXT_MODEL)) - -typedef struct _ESelectNamesTextModel ESelectNamesTextModel; -typedef struct _ESelectNamesTextModelClass ESelectNamesTextModelClass; - -struct _ESelectNamesTextModel { - ETextModel parent; - - ESelectNamesModel *source; - int source_changed_id; - int *lengths; -}; - -struct _ESelectNamesTextModelClass { - ETextModelClass parent_class; -}; - -ETextModel *e_select_names_text_model_new (ESelectNamesModel *source); - -/* Standard Gtk function */ -GtkType e_select_names_text_model_get_type (void); - -#endif /* ! __E_SELECT_NAMES_TEXT_MODEL_H__ */ diff --git a/addressbook/gui/component/select-names/e-select-names.c b/addressbook/gui/component/select-names/e-select-names.c deleted file mode 100644 index 2303f13ad1..0000000000 --- a/addressbook/gui/component/select-names/e-select-names.c +++ /dev/null @@ -1,424 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-select-names.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-select-names.h" -#include -#include -#include -#include -#include -#include "e-select-names-table-model.h" - -static void e_select_names_init (ESelectNames *card); -static void e_select_names_class_init (ESelectNamesClass *klass); -static void e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_select_names_destroy (GtkObject *object); - -static GnomeDialogClass *parent_class = NULL; -#define PARENT_TYPE gnome_dialog_get_type() - -/* The arguments we take */ -enum { - ARG_0, -}; - -typedef struct { - char *title; - ETableModel *model; - ESelectNamesModel *source; - ESelectNames *names; -} ESelectNamesChild; - -GtkType -e_select_names_get_type (void) -{ - static GtkType type = 0; - - if (!type) { - static const GtkTypeInfo info = - { - "ESelectNames", - sizeof (ESelectNames), - sizeof (ESelectNamesClass), - (GtkClassInitFunc) e_select_names_class_init, - (GtkObjectInitFunc) e_select_names_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (PARENT_TYPE, &info); - } - - return type; -} - -static void -e_select_names_class_init (ESelectNamesClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass*) klass; - - parent_class = gtk_type_class (PARENT_TYPE); - - object_class->set_arg = e_select_names_set_arg; - object_class->get_arg = e_select_names_get_arg; - object_class->destroy = e_select_names_destroy; -} - -#define SPEC " \ - \ - 2 \ - \ - \ -" - -#define SPEC2 " \ - \ - 0 \ - \ - \ -" - -GtkWidget *e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int num1, int num2); - -static void -set_book(EBook *book, EBookStatus status, ETableModel *model) -{ - gtk_object_set(GTK_OBJECT(model), - "book", book, - "query", "(contains \"email\" \"\")", - NULL); - gtk_object_unref(GTK_OBJECT(book)); -} - -GtkWidget * -e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int num1, int num2) -{ - ETableModel *model; - ETableHeader *header; - ECell *cell_left_just; - EBook *book; - GtkWidget *table; - char *filename; - char *uri; - - model = e_addressbook_model_new(); - gtk_object_set(GTK_OBJECT(model), - "editable", FALSE, - NULL); - cell_left_just = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - - header = e_table_header_new (); - e_table_header_add_column (header, e_table_col_new (0, "Full Name", 1.0, 20, cell_left_just, - g_str_compare, TRUE), -1); - e_table_header_add_column (header, e_table_col_new (1, "Email", 1.0, 20, cell_left_just, - g_str_compare, TRUE), -1); - e_table_header_add_column (header, e_table_col_new (34, "Name", 1.0, 20, cell_left_just, - g_str_compare, TRUE), -1); - - book = e_book_new(); - gtk_object_ref(GTK_OBJECT(model)); - gtk_object_ref(GTK_OBJECT(book)); - filename = gnome_util_prepend_user_home("evolution/local/Contacts/addressbook.db"); - uri = g_strdup_printf("file://%s", filename); - e_book_load_uri(book, uri, (EBookCallback) set_book, model); - g_free(uri); - g_free(filename); - table = e_table_scrolled_new (header, model, SPEC); - - gtk_object_set(GTK_OBJECT(table), - "cursor_mode", E_TABLE_CURSOR_LINE, - NULL); - - gtk_object_set_data(GTK_OBJECT(table), "model", model); - return table; -} - -static void -set_current_selection(ETableScrolled *table, int row, ESelectNames *names) -{ - names->currently_selected = row; -} - -static void -e_select_names_init (ESelectNames *e_select_names) -{ - GladeXML *gui; - GtkWidget *widget; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/select-names.glade", NULL); - e_select_names->gui = gui; - - e_select_names->children = g_hash_table_new(g_str_hash, g_str_equal); - e_select_names->child_count = 0; - - widget = glade_xml_get_widget(gui, "table-top"); - if (!widget) { - return; - } - gtk_widget_ref(widget); - gtk_widget_unparent(widget); - gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(e_select_names)->vbox), widget, TRUE, TRUE, 0); - gtk_widget_unref(widget); - - gnome_dialog_append_buttons(GNOME_DIALOG(e_select_names), - GNOME_STOCK_BUTTON_OK, - GNOME_STOCK_BUTTON_CANCEL, - NULL); - - gtk_window_set_policy(GTK_WINDOW(e_select_names), FALSE, TRUE, FALSE); - - e_select_names->table = E_TABLE_SCROLLED(glade_xml_get_widget(gui, "table-source")); - e_select_names->model = gtk_object_get_data(GTK_OBJECT(e_select_names->table), "model"); - - e_select_names->currently_selected = -1; - - gtk_signal_connect(GTK_OBJECT(e_select_names->table), "cursor_change", - GTK_SIGNAL_FUNC(set_current_selection), e_select_names); -} - -static void e_select_names_child_free(char *key, ESelectNamesChild *child, ESelectNames *e_select_names) -{ - g_free(child->title); - gtk_object_unref(GTK_OBJECT(child->model)); - gtk_object_unref(GTK_OBJECT(child->source)); - g_free(key); -} - -static void -e_select_names_destroy (GtkObject *object) { - ESelectNames *e_select_names = E_SELECT_NAMES(object); - - gtk_object_unref(GTK_OBJECT(e_select_names->gui)); - g_hash_table_foreach(e_select_names->children, (GHFunc) e_select_names_child_free, e_select_names); - g_hash_table_destroy(e_select_names->children); -} - -GtkWidget* -e_select_names_new (void) -{ - GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_select_names_get_type ())); - return widget; -} - -static void -e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - ESelectNames *editor; - - editor = E_SELECT_NAMES (o); - - switch (arg_id){ - default: - return; - } -} - -static void -e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - ESelectNames *e_select_names; - - e_select_names = E_SELECT_NAMES (object); - - switch (arg_id) { - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -button_clicked(GtkWidget *button, ESelectNamesChild *child) -{ - ESelectNames *names = child->names; - int row = names->currently_selected; - if (row != -1) { - ECard *card = e_addressbook_model_get_card(E_ADDRESSBOOK_MODEL(names->model), row); - ESelectNamesModelData new = {E_SELECT_NAMES_MODEL_DATA_TYPE_CARD, - card, - NULL}; - char *name, *email; - ECardSimple *simple = e_card_simple_new(card); - EIterator *iterator; - - name = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_FULL_NAME); - email = e_card_simple_get(simple, E_CARD_SIMPLE_FIELD_EMAIL); - if (name && *name && email && *email) { - new.string = g_strdup_printf("%s <%s>", name, email); - } else if (email && *email) { - new.string = g_strdup_printf("%s", email); - } else if (name && *name) { - new.string = g_strdup_printf("%s <>", name); - } else { - new.string = g_strdup(""); - } - - iterator = e_list_get_iterator(e_select_names_model_get_data(child->source)); - e_iterator_last(iterator); - e_select_names_model_add_item(child->source, iterator, &new); - - gtk_object_unref(GTK_OBJECT(simple)); - gtk_object_unref(GTK_OBJECT(card)); - g_free(email); - g_free(name); - g_free(new.string); - } -} - -static void -remove_address(ETableScrolled *table, int row, ESelectNamesChild *child) -{ - EIterator *iterator = e_list_get_iterator(e_select_names_model_get_data(child->source)); - e_iterator_reset(iterator); - for (; row > 0; row--) { - e_iterator_next(iterator); - } - e_select_names_model_remove_item(child->source, iterator); -} - -void -e_select_names_add_section(ESelectNames *e_select_names, char *name, char *id, ESelectNamesModel *source) -{ - ESelectNamesChild *child; - GtkWidget *button; - GtkWidget *alignment; - GtkTable *table; - char *label; - - ETableModel *model; - GtkWidget *etable; - ETableHeader *header; - ECell *cell_left_just; - - if (g_hash_table_lookup(e_select_names->children, id)) { - return; - } - - table = GTK_TABLE(glade_xml_get_widget (e_select_names->gui, "table-recipients")); - - child = g_new(ESelectNamesChild, 1); - - child->names = e_select_names; - child->title = g_strdup(_(name)); - - e_select_names->child_count++; - - alignment = gtk_alignment_new(0, 0, 1, 0); - label = g_strdup_printf("%s ->", child->title); - button = gtk_button_new_with_label(label); - g_free(label); - gtk_container_add(GTK_CONTAINER(alignment), button); - gtk_widget_show_all(alignment); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(button_clicked), child); - gtk_table_attach(table, alignment, - 0, 1, - e_select_names->child_count, - e_select_names->child_count + 1, - GTK_FILL, GTK_FILL, - 0, 0); - - model = e_select_names_table_model_new(source); - header = e_table_header_new (); - cell_left_just = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - e_table_header_add_column (header, e_table_col_new (0, "Name", 1.0, 20, cell_left_just, - g_str_compare, TRUE), -1); - e_table_header_add_column (header, e_table_col_new (1, "Email", 1.0, 20, cell_left_just, - g_str_compare, TRUE), -1); - etable = e_table_scrolled_new (header, model, SPEC2); - - gtk_signal_connect(GTK_OBJECT(etable), "double_click", - GTK_SIGNAL_FUNC(remove_address), child); - - gtk_object_set(GTK_OBJECT(etable), - "cursor_mode", E_TABLE_CURSOR_LINE, - NULL); - - child->model = model; - child->source = source; - gtk_object_ref(GTK_OBJECT(child->model)); - gtk_object_ref(GTK_OBJECT(child->source)); - - gtk_widget_show(etable); - - gtk_table_attach(table, etable, - 1, 2, - e_select_names->child_count, - e_select_names->child_count + 1, - GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, - 0, 0); - - g_hash_table_insert(e_select_names->children, g_strdup(id), child); -} - -static void * -card_copy(const void *value, void *closure) -{ - gtk_object_ref(GTK_OBJECT(value)); - return (void *)value; -} - -static void -card_free(void *value, void *closure) -{ - gtk_object_unref(GTK_OBJECT(value)); -} - -EList * -e_select_names_get_section(ESelectNames *e_select_names, char *id) -{ - ESelectNamesChild *child; - int i; - int rows; - EList *list; - - child = g_hash_table_lookup(e_select_names->children, id); - if (!child) - return NULL; - rows = e_table_model_row_count(child->model); - - list = e_list_new(card_copy, card_free, NULL); - for (i = 0; i < rows; i++) { - ECard *card = e_cardlist_model_get(E_CARDLIST_MODEL(child->model), i); - e_list_append(list, card); - gtk_object_unref(GTK_OBJECT(card)); - } - return list; -} - -ESelectNamesModel * -e_select_names_get_source(ESelectNames *e_select_names, - char *id) -{ - ESelectNamesChild *child = g_hash_table_lookup(e_select_names->children, id); - if (child) { - if (child->source) - gtk_object_ref(GTK_OBJECT(child->source)); - return child->source; - } else - return NULL; -} diff --git a/addressbook/gui/component/select-names/e-select-names.h b/addressbook/gui/component/select-names/e-select-names.h deleted file mode 100644 index b1c11eb473..0000000000 --- a/addressbook/gui/component/select-names/e-select-names.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-select-names.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_SELECT_NAMES_H__ -#define __E_SELECT_NAMES_H__ - -#include -#include -#include -#include -#include -#include "e-select-names-model.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* ESelectNames - A dialog displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - */ - -#define E_SELECT_NAMES_TYPE (e_select_names_get_type ()) -#define E_SELECT_NAMES(obj) (GTK_CHECK_CAST ((obj), E_SELECT_NAMES_TYPE, ESelectNames)) -#define E_SELECT_NAMES_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_SELECT_NAMES_TYPE, ESelectNamesClass)) -#define E_IS_SELECT_NAMES(obj) (GTK_CHECK_TYPE ((obj), E_SELECT_NAMES_TYPE)) -#define E_IS_SELECT_NAMES_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_SELECT_NAMES_TYPE)) - -typedef struct _ESelectNames ESelectNames; -typedef struct _ESelectNamesClass ESelectNamesClass; - -struct _ESelectNames -{ - GnomeDialog parent; - - /* item specific fields */ - GladeXML *gui; - - GHashTable *children; /* Of type char * to ESelectNamesChild */ - int child_count; - ETableScrolled *table; - ETableModel *model; - int currently_selected; -}; - -struct _ESelectNamesClass -{ - GnomeDialogClass parent_class; -}; - - -GtkWidget *e_select_names_new (void); -GtkType e_select_names_get_type (void); - -void e_select_names_add_section (ESelectNames *e_select_names, - char *name, - char *id, - ESelectNamesModel *source); -ESelectNamesModel *e_select_names_get_source (ESelectNames *e_select_names, - char *id); -/* Returns a ref counted list of addresses. */ -EList *e_select_names_get_section (ESelectNames *e_select_names, - char *id); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_SELECT_NAMES_H__ */ diff --git a/addressbook/gui/component/select-names/evolution-addressbook-select-names.oafinfo b/addressbook/gui/component/select-names/evolution-addressbook-select-names.oafinfo deleted file mode 100644 index e66c3aa38a..0000000000 --- a/addressbook/gui/component/select-names/evolution-addressbook-select-names.oafinfo +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/addressbook/gui/component/select-names/recipient.glade b/addressbook/gui/component/select-names/recipient.glade deleted file mode 100644 index b60972d094..0000000000 --- a/addressbook/gui/component/select-names/recipient.glade +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Recipient - recipient - - src - pixmaps - C - True - True - True - False - False - False - True - - - - GtkWindow - window1 - False - window1 - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - - - GtkHBox - hbox-top - False - 4 - - - GtkAlignment - alignment1 - 1.08033e-07 - 0 - 1 - 0 - - 0 - False - True - - - - GtkButton - text-button - True - - - - - - - diff --git a/addressbook/gui/component/select-names/select-names.glade b/addressbook/gui/component/select-names/select-names.glade deleted file mode 100644 index 90ca93bd3a..0000000000 --- a/addressbook/gui/component/select-names/select-names.glade +++ /dev/null @@ -1,247 +0,0 @@ - - - - - Select-names - select-names - - src - pixmaps - C - True - True - False - False - False - True - select-names.glade.h - - - - GnomeDialog - dialog-top - False - Select Names - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button1 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button3 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkTable - table-top - 3 - 2 - False - 6 - 6 - - 0 - True - True - - - - GtkHBox - hbox1 - False - 4 - - 0 - 1 - 1 - 2 - 0 - 0 - True - False - False - False - True - True - - - - GtkEntry - entry-find - False - True - True - True - True - 0 - - - 0 - True - True - - - - - GtkButton - button-find - False - True - - - 0 - False - False - - - - - - GtkAccelLabel - accellabel1 - - GTK_JUSTIFY_LEFT - False - 0 - 0 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - True - False - False - False - True - True - - - - - Custom - table-source - e_addressbook_create_ebook_table - 0 - 0 - Sat, 10 Jun 2000 22:02:57 GMT - - 0 - 1 - 2 - 3 - 0 - 0 - True - True - False - False - True - True - - - - - GtkTable - table-recipients - 1 - 2 - False - 4 - 4 - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - True - - - - GtkAccelLabel - accellabel2 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - True - - - - - - - - diff --git a/addressbook/gui/component/select-names/select-names.glade.h b/addressbook/gui/component/select-names/select-names.glade.h deleted file mode 100644 index 1cb9702956..0000000000 --- a/addressbook/gui/component/select-names/select-names.glade.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("Select Names"); -gchar *s = N_("Find..."); -gchar *s = N_("Select name from List:"); -gchar *s = N_("Message Recipients"); diff --git a/addressbook/gui/contact-editor/.cvsignore b/addressbook/gui/contact-editor/.cvsignore deleted file mode 100644 index 6fd0b5075c..0000000000 --- a/addressbook/gui/contact-editor/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -*.lo -*.la -contact-editor-test diff --git a/addressbook/gui/contact-editor/Makefile.am b/addressbook/gui/contact-editor/Makefile.am deleted file mode 100644 index f51a0109ac..0000000000 --- a/addressbook/gui/contact-editor/Makefile.am +++ /dev/null @@ -1,65 +0,0 @@ -CPPFLAGS = \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DDATADIR=\""$(datadir)"\" \ - -DEVOLUTIONDIR=\""$(evolutiondir)"\" - -INCLUDES = \ - $(BONOBO_GNOME_CFLAGS) \ - -I$(top_srcdir) \ - -I$(top_srcdir)/addressbook/ \ - -I$(top_srcdir)/addressbook/backend \ - -I$(top_srcdir)/widgets/e-table \ - -DG_LOG_DOMAIN=\"contact-editor\" - -noinst_LIBRARIES = \ - libecontacteditor.a - -libecontacteditor_a_SOURCES = \ - e-contact-editor-categories.c \ - e-contact-editor-categories.h \ - e-contact-editor-fullname.c \ - e-contact-editor-fullname.h \ - e-contact-editor.c \ - e-contact-editor.h \ - e-contact-save-as.c \ - e-contact-save-as.h - -noinst_PROGRAMS = \ - contact-editor-test - -contact_editor_test_SOURCES = \ - test-editor.c - -contact_editor_test_LDADD = \ - libecontacteditor.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/libversit/libversit.la \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(EXTRA_GNOME_LIBS) - -evolutiondir = $(datadir)/evolution - -evolution_DATA = arrow.png - -gladedir = $(datadir)/evolution/glade - -glade_DATA = \ - contact-editor.glade \ - fullname.glade \ - categories.glade \ - e-contact-editor-confirm-delete.glade - -EXTRA_DIST = $(evolution_DATA) \ - $(glade_DATA) \ - e-contact-editor-strings.h \ - fullname-strings.h \ - categories-strings.h \ - e-contact-editor-confirm-delete.glade.h diff --git a/addressbook/gui/contact-editor/arrow.png b/addressbook/gui/contact-editor/arrow.png deleted file mode 100644 index b102356c78..0000000000 Binary files a/addressbook/gui/contact-editor/arrow.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/briefcase.png b/addressbook/gui/contact-editor/briefcase.png deleted file mode 100644 index dd59b8fd39..0000000000 Binary files a/addressbook/gui/contact-editor/briefcase.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/categories-strings.h b/addressbook/gui/contact-editor/categories-strings.h deleted file mode 100644 index 813018a00e..0000000000 --- a/addressbook/gui/contact-editor/categories-strings.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("categories"); -gchar *s = N_("Item(s) belong to these categories:"); -gchar *s = N_("Available Categories:"); diff --git a/addressbook/gui/contact-editor/categories.glade b/addressbook/gui/contact-editor/categories.glade deleted file mode 100644 index bf78008940..0000000000 --- a/addressbook/gui/contact-editor/categories.glade +++ /dev/null @@ -1,190 +0,0 @@ - - - - - categories - categories - - src - pixmaps - C - True - False - False - False - False - False - False - interface.c - interface.h - callbacks.c - callbacks.h - support.c - support.h - True - categories-strings.h - - - - GnomeDialog - categories - True - False - categories - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - True - False - 8 - - 4 - True - True - - - - GtkTable - table-categories - True - 4 - 1 - False - 0 - 0 - - 0 - True - True - - - - GtkAccelLabel - accellabel1 - True - - GTK_JUSTIFY_LEFT - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel2 - True - - GTK_JUSTIFY_LEFT - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - - GtkEntry - entry-categories - True - True - True - True - 0 - - - 0 - 1 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - True - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button1 - True - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button3 - True - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - - diff --git a/addressbook/gui/contact-editor/contact-editor.glade b/addressbook/gui/contact-editor/contact-editor.glade deleted file mode 100644 index 7c328a72ce..0000000000 --- a/addressbook/gui/contact-editor/contact-editor.glade +++ /dev/null @@ -1,2332 +0,0 @@ - - - - - Contact-editor - contact-editor - - src - pixmaps - C - True - True - True - False - False - False - False - True - e-contact-editor-strings.h - - - - GnomeDialog - dialog2 - 2 - False - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox2 - False - 4 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area2 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button28 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button29 - True - True - GNOME_STOCK_BUTTON_APPLY - - - - GtkButton - button30 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkTable - table2 - 2 - 2 - False - 0 - 2 - - 0 - True - True - - - - GtkEntry - entry2 - True - True - True - 0 - - - 0 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkVBox - vbox1 - False - 2 - - 1 - 2 - 0 - 1 - 0 - 0 - False - True - False - False - True - True - - - - GtkButton - button31 - 2 - True - - - 0 - False - False - - - - - GtkButton - button32 - 2 - True - - - 0 - False - False - - - - - - GtkScrolledWindow - scrolledwindow1 - 200 - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - 1 - 0 - 1 - 0 - 0 - True - True - False - False - True - True - - - - GtkCList - clist1 - True - 1 - 80 - GTK_SELECTION_SINGLE - True - GTK_SHADOW_NONE - - - GtkLabel - CList:title - label20 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - - - - GnomeDialog - dialog-add-phone - False - New phone type - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - vbox2 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - hbuttonbox1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button43 - True - True - True - - GNOME_STOCK_PIXMAP_ADD - - - - GtkButton - button44 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkFrame - frame-add-phone - 4 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkAlignment - alignment9 - 9 - 0.5 - 0.5 - 1 - 1 - - - GtkEntry - entry-add-phone - True - True - True - True - 0 - - - - - - - - - GnomeApp - contact editor - Contact Editor - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - True - - - GnomeDock - GnomeApp:dock - dock1 - True - - 0 - True - True - - - - GtkNotebook - GnomeDock:contents - notebook-contact-editor - True - True - True - GTK_POS_TOP - False - 2 - 2 - False - - - GtkTable - table-contact-editor-general - 7 - 14 - 8 - False - 4 - 4 - - - GtkEntry - entry-phone1 - True - True - True - 0 - - - 7 - 8 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-phone2 - True - True - True - 0 - - - 7 - 8 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-phone3 - True - True - True - 0 - - - 7 - 8 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-phone4 - True - True - True - 0 - - - 7 - 8 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - GtkText - text-address - 1 - 1 - True - True - - - 7 - 8 - 5 - 9 - 0 - 0 - True - False - False - False - True - True - - - - - GtkButton - button-fullname - True - - - 1 - 3 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel-fileas - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 3 - 3 - 4 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel-web - - GTK_JUSTIFY_LEFT - False - 0 - 0.5 - 0 - 0 - - 1 - 3 - 8 - 9 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAlignment - alignment3 - 1 - 0.5 - 0 - 1 - - 2 - 3 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-email1 - - - Placeholder - - - - - - GtkAlignment - alignment5 - 1 - 0.5 - 0 - 0 - - 6 - 7 - 3 - 4 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-phone4 - - - Placeholder - - - - - - GtkAlignment - alignment7 - 1 - 0.5 - 0 - 0 - - 6 - 7 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-phone2 - - - Placeholder - - - - - - GtkAlignment - alignment8 - 1 - 0.5 - 0 - 0 - - 6 - 7 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-phone1 - - - Placeholder - - - - - - GtkHSeparator - hseparator4 - - 4 - 8 - 4 - 5 - 0 - 2 - True - False - False - False - True - False - - - - - GtkAlignment - alignment6 - 1 - 0.5 - 0 - 0 - - 6 - 7 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-phone3 - - - Placeholder - - - - - - GtkEntry - entry-fullname - True - True - True - True - True - 0 - - - 3 - 4 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-jobtitle - True - True - True - 0 - - - 3 - 4 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-company - True - True - True - 0 - - - 3 - 4 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-email1 - True - True - True - 0 - - - 3 - 4 - 5 - 6 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-web - True - True - True - 0 - - - 3 - 4 - 8 - 9 - 0 - 0 - True - False - False - False - True - False - - - - - GtkHSeparator - hseparator5 - - 0 - 4 - 4 - 5 - 0 - 2 - True - False - False - False - True - False - - - - - GtkCombo - combo-file-as - False - True - True - True - False - - - 3 - 4 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - GtkEntry - GtkCombo:entry - entry-file-as - True - True - True - 0 - - - - - - GtkHSeparator - hseparator6 - - 0 - 4 - 7 - 8 - 0 - 2 - True - False - False - False - True - True - - - - - GtkAlignment - alignment10 - 0.5 - 0 - 1 - 1 - - 3 - 4 - 6 - 7 - 0 - 0 - True - False - True - True - True - True - - - - GtkCheckButton - checkbutton-htmlmail - False - - False - True - - - - - GtkAlignment - alignment4 - 1 - 0.5 - 0 - 0 - - 6 - 7 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-address - - - Placeholder - - - - - - GtkLabel - address-label - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - text-address - - 5 - 7 - 6 - 7 - 0 - 0 - False - False - False - False - True - True - - - - - GtkEventBox - eventbox1 - - 5 - 6 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label-phone1 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - - - - GtkEventBox - eventbox2 - - 5 - 6 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label-phone2 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-phone2 - - - - - GtkEventBox - eventbox3 - - 5 - 6 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label-phone3 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-phone3 - - - - - GtkEventBox - eventbox4 - - 5 - 6 - 3 - 4 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label-phone4 - - GTK_JUSTIFY_LEFT - False - 0 - 0.5 - 0 - 0 - entry-phone4 - - - - - GtkEventBox - eventbox5 - - 1 - 2 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label-email1 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-email1 - - - - - GtkEventBox - eventbox-business - - 5 - 6 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label-address - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - text-address - - - - - GtkAlignment - alignment2 - 0 - 0 - 0 - 0 - - 7 - 8 - 9 - 10 - 0 - 0 - True - False - False - False - True - True - - - - GtkCheckButton - checkbutton-mailingaddress - False - - False - True - - - - - GtkHSeparator - hseparator9 - - 0 - 4 - 11 - 12 - 0 - 2 - True - False - False - False - True - True - - - - - GtkHSeparator - hseparator10 - - 4 - 8 - 11 - 12 - 0 - 0 - True - False - False - False - True - True - - - - - GtkAlignment - alignment-contacts - 0.5 - 0.5 - 1 - 0 - - 1 - 3 - 12 - 13 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-contacts - True - - - - - - GtkAlignment - alignment15 - 0.5 - 0.5 - 1 - 0 - - 7 - 8 - 12 - 13 - 0 - 0 - True - False - False - False - True - True - - - - GtkEntry - entry-categories - True - True - True - 0 - - - - - - GtkAlignment - alignment14 - 0.5 - 0.5 - 1 - 0 - - 3 - 4 - 12 - 13 - 0 - 0 - True - False - False - False - True - True - - - - GtkEntry - entry-contacts - True - True - True - 0 - - - - - - GtkAlignment - alignment16 - 0.5 - 0.5 - 1 - 0 - - 5 - 7 - 12 - 13 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button-categories - True - - - - - - GtkEventBox - eventbox7 - - 1 - 3 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - GtkLabel - label34 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-jobtitle - - - - - Custom - custom1 - e_create_image_widget - malehead.png - - 0 - 0 - Thu, 18 May 2000 12:19:47 GMT - - 0 - 1 - 0 - 4 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom2 - e_create_image_widget - cellphone.png - - 0 - 0 - Thu, 18 May 2000 12:20:02 GMT - - 4 - 5 - 0 - 4 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom3 - e_create_image_widget - envelope.png - - 0 - 0 - Thu, 18 May 2000 12:19:51 GMT - - 0 - 1 - 5 - 7 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom4 - e_create_image_widget - house.png - - 0 - 0 - Thu, 18 May 2000 12:20:06 GMT - - 4 - 5 - 5 - 10 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom5 - e_create_image_widget - evolution-contacts.png - - 0 - 0 - Thu, 18 May 2000 12:19:59 GMT - - 0 - 1 - 12 - 14 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom6 - e_create_image_widget - briefcase.png - - 0 - 0 - Thu, 18 May 2000 12:20:09 GMT - - 4 - 5 - 12 - 14 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom10 - e_create_image_widget - globe.png - - 0 - 0 - Thu, 18 May 2000 12:19:56 GMT - - 0 - 1 - 8 - 10 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label35 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-company - - 1 - 3 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - - - GtkLabel - Notebook:tab - label15 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table-contact-editor-details - 7 - 9 - 6 - False - 4 - 4 - - - GtkLabel - label21 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-department - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label22 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-office - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label23 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-profession - - 1 - 2 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label24 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-nickname - - 1 - 2 - 4 - 5 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label25 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-spouse - - 1 - 2 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label31 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 3 - 4 - 4 - 5 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label30 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-assistant - - 3 - 4 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label29 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - entry-manager - - 3 - 4 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label32 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 3 - 4 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - - GtkEntry - entry-spouse - True - True - True - 0 - - - 2 - 3 - 5 - 6 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-department - True - True - True - 0 - - - 2 - 3 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-office - True - True - True - 0 - - - 2 - 3 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-profession - True - True - True - 0 - - - 2 - 3 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-nickname - True - True - True - 0 - - - 2 - 3 - 4 - 5 - 0 - 0 - True - False - False - False - True - False - - - - - GnomeDateEdit - dateedit-anniversary - False - False - False - 7 - 19 - - 4 - 6 - 5 - 6 - 0 - 0 - True - False - False - False - True - False - - - - - GnomeDateEdit - dateedit-birthday - False - False - False - 7 - 19 - - 4 - 6 - 4 - 5 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-assistant - True - True - True - 0 - - - 4 - 6 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-manager - True - True - True - 0 - - - 4 - 6 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkHSeparator - hseparator7 - - 0 - 6 - 3 - 4 - 0 - 2 - False - False - False - False - True - True - - - - - GtkLabel - label33 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 2 - 7 - 8 - 0 - 0 - False - False - False - False - True - True - - - - - GtkHSeparator - hseparator8 - - 0 - 6 - 6 - 7 - 0 - 0 - True - False - False - False - True - True - - - - - Custom - custom7 - e_create_image_widget - briefcase.png - - 0 - 0 - Thu, 18 May 2000 12:20:13 GMT - - 0 - 1 - 0 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - Custom - custom8 - e_create_image_widget - malehead.png - - 0 - 0 - Thu, 18 May 2000 12:20:16 GMT - - 0 - 1 - 4 - 6 - 0 - 0 - False - False - False - False - True - True - - - - - GtkScrolledWindow - scrolledwindow2 - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 1 - 6 - 8 - 9 - 0 - 0 - True - True - False - False - True - True - - - - GtkText - text-comments - True - True - - - - - - Custom - custom9 - e_create_image_widget - globe.png - - 0 - 0 - Thu, 18 May 2000 12:20:19 GMT - - 0 - 1 - 7 - 9 - 0 - 0 - False - False - False - False - True - True - - - - - - GtkLabel - Notebook:tab - label16 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - GnomeAppBar - GnomeApp:appbar - appbar1 - True - True - - 0 - True - True - - - - - diff --git a/addressbook/gui/contact-editor/e-contact-editor-categories.c b/addressbook/gui/contact-editor/e-contact-editor-categories.c deleted file mode 100644 index 9251a86948..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-categories.c +++ /dev/null @@ -1,470 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-editor-categories.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -static void e_contact_editor_categories_init (EContactEditorCategories *card); -static void e_contact_editor_categories_class_init (EContactEditorCategoriesClass *klass); -static void e_contact_editor_categories_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_contact_editor_categories_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_contact_editor_categories_destroy (GtkObject *object); -static int e_contact_editor_categories_col_count (ETableModel *etc, gpointer data); -static int e_contact_editor_categories_row_count (ETableModel *etc, gpointer data); -static void *e_contact_editor_categories_value_at (ETableModel *etc, int col, int row, gpointer data); -static void e_contact_editor_categories_set_value_at (ETableModel *etc, int col, int row, const void *val, gpointer data); -static gboolean e_contact_editor_categories_is_cell_editable (ETableModel *etc, int col, int row, gpointer data); -static void *e_contact_editor_categories_duplicate_value (ETableModel *etc, int col, const void *value, gpointer data); -static void e_contact_editor_categories_free_value (ETableModel *etc, int col, void *value, gpointer data); -static void *e_contact_editor_categories_initialize_value (ETableModel *etc, int col, gpointer data); -static gboolean e_contact_editor_categories_value_is_empty (ETableModel *etc, int col, const void *value, gpointer data); -static char * e_contact_editor_categories_value_to_string (ETableModel *etc, int col, const void *value, gpointer data); - -static GnomeDialogClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_CATEGORIES -}; - -GtkType -e_contact_editor_categories_get_type (void) -{ - static GtkType contact_editor_categories_type = 0; - - if (!contact_editor_categories_type) - { - static const GtkTypeInfo contact_editor_categories_info = - { - "EContactEditorCategories", - sizeof (EContactEditorCategories), - sizeof (EContactEditorCategoriesClass), - (GtkClassInitFunc) e_contact_editor_categories_class_init, - (GtkObjectInitFunc) e_contact_editor_categories_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - contact_editor_categories_type = gtk_type_unique (gnome_dialog_get_type (), &contact_editor_categories_info); - } - - return contact_editor_categories_type; -} - -static void -e_contact_editor_categories_class_init (EContactEditorCategoriesClass *klass) -{ - GtkObjectClass *object_class; - GnomeDialogClass *dialog_class; - - object_class = (GtkObjectClass*) klass; - dialog_class = (GnomeDialogClass *) klass; - - parent_class = gtk_type_class (gnome_dialog_get_type ()); - - gtk_object_add_arg_type ("EContactEditorCategories::categories", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_CATEGORIES); - - object_class->set_arg = e_contact_editor_categories_set_arg; - object_class->get_arg = e_contact_editor_categories_get_arg; - object_class->destroy = e_contact_editor_categories_destroy; -} - -gchar *builtin_categories[] = { - "Business", - "Competition", - "Favorites", - "Gifts", - "Goals/Objectives", - "Holiday", - "Holiday Cards", - "Hot Contacts", - "Ideas", - "International", - "Key Customer", - "Miscellaneous", - "Personal", - "Phone Calls", - "Status", - "Strategies", - "Suppliers", - "Time & Expenses", - "VIP", - "Waiting", -}; - -#define BUILTIN_CATEGORY_COUNT (sizeof(builtin_categories) / sizeof(builtin_categories[0])) - -static void -add_list_unique(EContactEditorCategories *categories, char *string) -{ - int k; - char *temp = e_strdup_strip(string); - char **list = categories->category_list; - - if (!*temp) { - g_free(temp); - return; - } - for (k = 0; k < categories->list_length; k++) { - if (!strcmp(list[k], temp)) { - categories->selected_list[k] = TRUE; - break; - } - } - if (k == categories->list_length) { - categories->selected_list[categories->list_length] = TRUE; - list[categories->list_length++] = temp; - } else { - g_free(temp); - } -} - -static void -do_parse_categories(EContactEditorCategories *categories) -{ - char *str = categories->categories; - int length = strlen(str); - char *copy = g_new(char, length + 1); - int i, j; - char **list; - int count = 1; - - e_table_model_pre_change(categories->model); - - for (i = 0; i < categories->list_length; i++) - g_free(categories->category_list[i]); - g_free(categories->category_list); - g_free(categories->selected_list); - - for (i = 0; str[i]; i++) { - switch (str[i]) { - case '\\': - i++; - if (!str[i]) - i--; - break; - case ',': - count ++; - break; - } - } - list = g_new(char *, count + 1 + BUILTIN_CATEGORY_COUNT); - categories->category_list = list; - - categories->selected_list = g_new(gboolean, count + 1 + BUILTIN_CATEGORY_COUNT); - - for (count = 0; count < BUILTIN_CATEGORY_COUNT; count++) { - list[count] = g_strdup(builtin_categories[count]); - categories->selected_list[count] = 0; - } - - categories->list_length = count; - - for (i = 0, j = 0; str[i]; i++, j++) { - switch (str[i]) { - case '\\': - i++; - if (str[i]) { - copy[j] = str[i]; - } else - i--; - break; - case ',': - copy[j] = 0; - add_list_unique(categories, copy); - j = -1; - break; - default: - copy[j] = str[i]; - break; - } - } - copy[j] = 0; - add_list_unique(categories, copy); - g_free(copy); - e_table_model_changed(categories->model); -} - -static void -e_contact_editor_categories_entry_change (GtkWidget *entry, - EContactEditorCategories *categories) -{ - g_free(categories->categories); - categories->categories = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); - do_parse_categories(categories); -} - - -#define INITIAL_SPEC " \ - \ - 0 \ - 1 \ - \ - \ -" - -static void -e_contact_editor_categories_init (EContactEditorCategories *categories) -{ - GladeXML *gui; - GtkWidget *table; - ECell *cell_left_just; - ECell *cell_checkbox; - ETableHeader *header; - ETableCol *col; - GtkWidget *e_table; - - categories->list_length = 0; - categories->category_list = NULL; - categories->selected_list = NULL; - categories->categories = NULL; - - gnome_dialog_append_button ( GNOME_DIALOG(categories), - GNOME_STOCK_BUTTON_OK); - - gnome_dialog_append_button ( GNOME_DIALOG(categories), - GNOME_STOCK_BUTTON_CANCEL); - - gtk_window_set_policy(GTK_WINDOW(categories), FALSE, TRUE, FALSE); - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/categories.glade", NULL); - categories->gui = gui; - - table = glade_xml_get_widget(gui, "table-categories"); - gtk_widget_ref(table); - gtk_container_remove(GTK_CONTAINER(table->parent), table); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (categories)->vbox), table, TRUE, TRUE, 0); - gtk_widget_unref(table); - - categories->entry = glade_xml_get_widget(gui, "entry-categories"); - - gtk_signal_connect(GTK_OBJECT(categories->entry), "changed", - GTK_SIGNAL_FUNC(e_contact_editor_categories_entry_change), categories); - - categories->model = e_table_simple_new(e_contact_editor_categories_col_count, - e_contact_editor_categories_row_count, - e_contact_editor_categories_value_at, - e_contact_editor_categories_set_value_at, - e_contact_editor_categories_is_cell_editable, - e_contact_editor_categories_duplicate_value, - e_contact_editor_categories_free_value, - e_contact_editor_categories_initialize_value, - e_contact_editor_categories_value_is_empty, - e_contact_editor_categories_value_to_string, - categories); - - header = e_table_header_new(); - - cell_checkbox = e_cell_checkbox_new(); - col = e_table_col_new (0, "", - 0, 20, cell_checkbox, - g_int_compare, TRUE); - e_table_header_add_column (header, col, 0); - - cell_left_just = e_cell_text_new (categories->model, NULL, GTK_JUSTIFY_LEFT); - col = e_table_col_new (1, "Category", - 1.0, 20, cell_left_just, - g_str_compare, TRUE); - e_table_header_add_column (header, col, 1); - - e_table = e_table_scrolled_new (header, categories->model, INITIAL_SPEC); - - gtk_object_sink(GTK_OBJECT(categories->model)); - - gtk_widget_show(e_table); - - gtk_table_attach_defaults(GTK_TABLE(table), - e_table, - 0, 1, - 3, 4); -} - -void -e_contact_editor_categories_destroy (GtkObject *object) -{ - EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(object); - int i; - - if (categories->gui) - gtk_object_unref(GTK_OBJECT(categories->gui)); - - g_free(categories->categories); - for (i = 0; i < categories->list_length; i++) - g_free(categories->category_list[i]); - g_free(categories->category_list); - g_free(categories->selected_list); -} - -GtkWidget* -e_contact_editor_categories_new (char *categories) -{ - GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_editor_categories_get_type ())); - gtk_object_set (GTK_OBJECT(widget), - "categories", categories, - NULL); - return widget; -} - -static void -e_contact_editor_categories_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EContactEditorCategories *e_contact_editor_categories; - - e_contact_editor_categories = E_CONTACT_EDITOR_CATEGORIES (o); - - switch (arg_id){ - case ARG_CATEGORIES: - gtk_entry_set_text(GTK_ENTRY(e_contact_editor_categories->entry), GTK_VALUE_STRING (*arg)); - break; - } -} - -static void -e_contact_editor_categories_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EContactEditorCategories *e_contact_editor_categories; - - e_contact_editor_categories = E_CONTACT_EDITOR_CATEGORIES (object); - - switch (arg_id) { - case ARG_CATEGORIES: - GTK_VALUE_STRING (*arg) = g_strdup(e_contact_editor_categories->categories); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -/* This function returns the number of columns in our ETableModel. */ -static int -e_contact_editor_categories_col_count (ETableModel *etc, gpointer data) -{ - return 2; -} - -/* This function returns the number of rows in our ETableModel. */ -static int -e_contact_editor_categories_row_count (ETableModel *etc, gpointer data) -{ - EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(data); - return categories->list_length; -} - -/* This function returns the value at a particular point in our ETableModel. */ -static void * -e_contact_editor_categories_value_at (ETableModel *etc, int col, int row, gpointer data) -{ - EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(data); - if (col == 0) - return (void *) categories->selected_list[row]; - else - return categories->category_list[row]; -} - -/* This function sets the value at a particular point in our ETableModel. */ -static void -e_contact_editor_categories_set_value_at (ETableModel *etc, int col, int row, const void *val, gpointer data) -{ - EContactEditorCategories *categories = E_CONTACT_EDITOR_CATEGORIES(data); - if ( col == 0 ) { - char **strs; - int i, j; - char *string; - categories->selected_list[row] = (gboolean) val; - strs = g_new(char *, categories->list_length + 1); - for (i = 0, j = 0; i < categories->list_length; i++) { - if (categories->selected_list[i]) - strs[j++] = categories->category_list[i]; - } - strs[j] = 0; - string = g_strjoinv(", ", strs); - gtk_entry_set_text(GTK_ENTRY(categories->entry), string); - g_free(string); - g_free(strs); - } - if ( col == 1 ) - return; -} - -/* This function returns whether a particular cell is editable. */ -static gboolean -e_contact_editor_categories_is_cell_editable (ETableModel *etc, int col, int row, gpointer data) -{ - return col == 0; -} - -/* This function duplicates the value passed to it. */ -static void * -e_contact_editor_categories_duplicate_value (ETableModel *etc, int col, const void *value, gpointer data) -{ - if (col == 0) - return (void *)value; - else - return g_strdup(value); -} - -/* This function frees the value passed to it. */ -static void -e_contact_editor_categories_free_value (ETableModel *etc, int col, void *value, gpointer data) -{ - if (col == 0) - return; - else - g_free(value); -} - -static void * -e_contact_editor_categories_initialize_value (ETableModel *etc, int col, gpointer data) -{ - if (col == 0) - return NULL; - else - return g_strdup(""); -} - -static gboolean -e_contact_editor_categories_value_is_empty (ETableModel *etc, int col, const void *value, gpointer data) -{ - if (col == 0) - return value == NULL; - else - return !(value && *(char *)value); -} - -static char * -e_contact_editor_categories_value_to_string (ETableModel *etc, int col, const void *value, gpointer data) -{ - if (col == 0) - return g_strdup_printf("%d", (int) value); - else - return g_strdup(value); -} diff --git a/addressbook/gui/contact-editor/e-contact-editor-categories.h b/addressbook/gui/contact-editor/e-contact-editor-categories.h deleted file mode 100644 index 529ef71b68..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-categories.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-contact-editor-categories.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_CONTACT_EDITOR_CATEGORIES_H__ -#define __E_CONTACT_EDITOR_CATEGORIES_H__ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EContactEditorCategories - A dialog displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * name ECardName * RW The card currently being edited. Returns a copy. - */ - -#define E_CONTACT_EDITOR_CATEGORIES_TYPE (e_contact_editor_categories_get_type ()) -#define E_CONTACT_EDITOR_CATEGORIES(obj) (GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_CATEGORIES_TYPE, EContactEditorCategories)) -#define E_CONTACT_EDITOR_CATEGORIES_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_CATEGORIES_TYPE, EContactEditorCategoriesClass)) -#define E_IS_CONTACT_EDITOR_CATEGORIES(obj) (GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_CATEGORIES_TYPE)) -#define E_IS_CONTACT_EDITOR_CATEGORIES_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_CATEGORIES_TYPE)) - - -typedef struct _EContactEditorCategories EContactEditorCategories; -typedef struct _EContactEditorCategoriesClass EContactEditorCategoriesClass; - -struct _EContactEditorCategories -{ - GnomeDialog parent; - - /* item specific fields */ - char *categories; - GtkWidget *entry; - ETableModel *model; - - int list_length; - char **category_list; - gboolean *selected_list; - - GladeXML *gui; -}; - -struct _EContactEditorCategoriesClass -{ - GnomeDialogClass parent_class; -}; - - -GtkWidget *e_contact_editor_categories_new(char *categories); -GtkType e_contact_editor_categories_get_type (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_CONTACT_EDITOR_CATEGORIES_H__ */ diff --git a/addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade b/addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade deleted file mode 100644 index 7f52321021..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade +++ /dev/null @@ -1,85 +0,0 @@ - - - - - e-contact-editor-confirm-delete - e-contact-editor-confirm-delete - - src - pixmaps - C - True - True - True - False - False - False - True - True - e-contact-editor-confirm-delete.glade.h - - - - GnomeMessageBox - confirm-dialog - GNOME_MESSAGE_BOX_QUESTION - Are you sure you want -to delete this contact? - Delete Contact? - GTK_WIN_POS_NONE - False - False - False - False - True - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button1 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button2 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - - diff --git a/addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade.h b/addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade.h deleted file mode 100644 index 7168db0a5c..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-confirm-delete.glade.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("Are you sure you want\n" - "to delete this contact?"); -gchar *s = N_("Delete Contact?"); diff --git a/addressbook/gui/contact-editor/e-contact-editor-fullname.c b/addressbook/gui/contact-editor/e-contact-editor-fullname.c deleted file mode 100644 index b2e598fdde..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-fullname.c +++ /dev/null @@ -1,214 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-editor-fullname.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include - -static void e_contact_editor_fullname_init (EContactEditorFullname *card); -static void e_contact_editor_fullname_class_init (EContactEditorFullnameClass *klass); -static void e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_contact_editor_fullname_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_contact_editor_fullname_destroy (GtkObject *object); - -static void fill_in_info(EContactEditorFullname *editor); -static void extract_info(EContactEditorFullname *editor); - -static GnomeDialogClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_NAME -}; - -GtkType -e_contact_editor_fullname_get_type (void) -{ - static GtkType contact_editor_fullname_type = 0; - - if (!contact_editor_fullname_type) - { - static const GtkTypeInfo contact_editor_fullname_info = - { - "EContactEditorFullname", - sizeof (EContactEditorFullname), - sizeof (EContactEditorFullnameClass), - (GtkClassInitFunc) e_contact_editor_fullname_class_init, - (GtkObjectInitFunc) e_contact_editor_fullname_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - contact_editor_fullname_type = gtk_type_unique (gnome_dialog_get_type (), &contact_editor_fullname_info); - } - - return contact_editor_fullname_type; -} - -static void -e_contact_editor_fullname_class_init (EContactEditorFullnameClass *klass) -{ - GtkObjectClass *object_class; - GnomeDialogClass *dialog_class; - - object_class = (GtkObjectClass*) klass; - dialog_class = (GnomeDialogClass *) klass; - - parent_class = gtk_type_class (gnome_dialog_get_type ()); - - gtk_object_add_arg_type ("EContactEditorFullname::name", GTK_TYPE_POINTER, - GTK_ARG_READWRITE, ARG_NAME); - - object_class->set_arg = e_contact_editor_fullname_set_arg; - object_class->get_arg = e_contact_editor_fullname_get_arg; - object_class->destroy = e_contact_editor_fullname_destroy; -} - -static void -e_contact_editor_fullname_init (EContactEditorFullname *e_contact_editor_fullname) -{ - GladeXML *gui; - GtkWidget *widget; - - gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_fullname), - GNOME_STOCK_BUTTON_OK); - - gnome_dialog_append_button ( GNOME_DIALOG(e_contact_editor_fullname), - GNOME_STOCK_BUTTON_CANCEL); - - gtk_window_set_policy(GTK_WINDOW(e_contact_editor_fullname), TRUE, TRUE, FALSE); - - e_contact_editor_fullname->name = NULL; - gui = glade_xml_new (EVOLUTION_GLADEDIR "/fullname.glade", NULL); - e_contact_editor_fullname->gui = gui; - - widget = glade_xml_get_widget(gui, "table-checkfullname"); - gtk_widget_ref(widget); - gtk_container_remove(GTK_CONTAINER(widget->parent), widget); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (e_contact_editor_fullname)->vbox), widget, TRUE, TRUE, 0); - gtk_widget_unref(widget); -} - -void -e_contact_editor_fullname_destroy (GtkObject *object) -{ - EContactEditorFullname *e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME(object); - - if (e_contact_editor_fullname->gui) - gtk_object_unref(GTK_OBJECT(e_contact_editor_fullname->gui)); - e_card_name_free(e_contact_editor_fullname->name); -} - -GtkWidget* -e_contact_editor_fullname_new (ECardName *name) -{ - GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_editor_fullname_get_type ())); - gtk_object_set (GTK_OBJECT(widget), - "name", name, - NULL); - return widget; -} - -static void -e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EContactEditorFullname *e_contact_editor_fullname; - - e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME (o); - - switch (arg_id){ - case ARG_NAME: - if (e_contact_editor_fullname->name) - e_card_name_free(e_contact_editor_fullname->name); - e_contact_editor_fullname->name = e_card_name_copy(GTK_VALUE_POINTER (*arg)); - fill_in_info(e_contact_editor_fullname); - break; - } -} - -static void -e_contact_editor_fullname_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EContactEditorFullname *e_contact_editor_fullname; - - e_contact_editor_fullname = E_CONTACT_EDITOR_FULLNAME (object); - - switch (arg_id) { - case ARG_NAME: - extract_info(e_contact_editor_fullname); - GTK_VALUE_POINTER (*arg) = e_card_name_copy(e_contact_editor_fullname->name); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -fill_in_field(EContactEditorFullname *editor, char *field, char *string) -{ - GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, field)); - if (entry) { - if (string) - gtk_entry_set_text(entry, string); - else - gtk_entry_set_text(entry, ""); - } -} - -static void -fill_in_info(EContactEditorFullname *editor) -{ - ECardName *name = editor->name; - if (name) { - fill_in_field(editor, "entry-title", name->prefix); - fill_in_field(editor, "entry-first", name->given); - fill_in_field(editor, "entry-middle", name->additional); - fill_in_field(editor, "entry-last", name->family); - fill_in_field(editor, "entry-suffix", name->suffix); - } -} - -static char * -extract_field(EContactEditorFullname *editor, char *field) -{ - GtkEntry *entry = GTK_ENTRY(glade_xml_get_widget(editor->gui, field)); - if (entry) - return g_strdup(gtk_entry_get_text(entry)); - else - return NULL; -} - -static void -extract_info(EContactEditorFullname *editor) -{ - ECardName *name = editor->name; - if (!name) - name = e_card_name_new(); - name->prefix = extract_field(editor, "entry-title" ); - name->given = extract_field(editor, "entry-first" ); - name->additional = extract_field(editor, "entry-middle"); - name->family = extract_field(editor, "entry-last" ); - name->suffix = extract_field(editor, "entry-suffix"); -} diff --git a/addressbook/gui/contact-editor/e-contact-editor-fullname.h b/addressbook/gui/contact-editor/e-contact-editor-fullname.h deleted file mode 100644 index 409ffc72d0..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-fullname.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-contact-editor-fullname.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_CONTACT_EDITOR_FULLNAME_H__ -#define __E_CONTACT_EDITOR_FULLNAME_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EContactEditorFullname - A dialog displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * name ECardName * RW The card currently being edited. Returns a copy. - */ - -#define E_CONTACT_EDITOR_FULLNAME_TYPE (e_contact_editor_fullname_get_type ()) -#define E_CONTACT_EDITOR_FULLNAME(obj) (GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE, EContactEditorFullname)) -#define E_CONTACT_EDITOR_FULLNAME_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_FULLNAME_TYPE, EContactEditorFullnameClass)) -#define E_IS_CONTACT_EDITOR_FULLNAME(obj) (GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE)) -#define E_IS_CONTACT_EDITOR_FULLNAME_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_FULLNAME_TYPE)) - - -typedef struct _EContactEditorFullname EContactEditorFullname; -typedef struct _EContactEditorFullnameClass EContactEditorFullnameClass; - -struct _EContactEditorFullname -{ - GnomeDialog parent; - - /* item specific fields */ - ECardName *name; - GladeXML *gui; -}; - -struct _EContactEditorFullnameClass -{ - GnomeDialogClass parent_class; -}; - - -GtkWidget *e_contact_editor_fullname_new(ECardName *name); -GtkType e_contact_editor_fullname_get_type (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_CONTACT_EDITOR_FULLNAME_H__ */ diff --git a/addressbook/gui/contact-editor/e-contact-editor-strings.h b/addressbook/gui/contact-editor/e-contact-editor-strings.h deleted file mode 100644 index d5ac9daf24..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor-strings.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("_Add"); -gchar *s = N_("_Delete"); -gchar *s = N_("Phone Types"); -gchar *s = N_("New phone type"); -gchar *s = N_("Add"); -gchar *s = N_("New phone type"); -gchar *s = N_("Contact Editor"); -gchar *s = N_("_Full Name..."); -gchar *s = N_("File As:"); -gchar *s = N_("Web page address:"); -gchar *s = N_("Wants to receive _HTML mail"); -gchar *s = N_("Address:"); -gchar *s = N_("_Business"); -gchar *s = N_("_Home"); -gchar *s = N_("Business _Fax"); -gchar *s = N_("_Mobile"); -gchar *s = N_("Primary Email"); -gchar *s = N_("B_usiness"); -gchar *s = N_("_This is the mailing address"); -gchar *s = N_("C_ontacts..."); -gchar *s = N_("Ca_tegories..."); -gchar *s = N_("_Job title:"); -gchar *s = N_("_Company:"); -gchar *s = N_("General"); -gchar *s = N_("_Department:"); -gchar *s = N_("_Office:"); -gchar *s = N_("_Profession:"); -gchar *s = N_("_Nickname:"); -gchar *s = N_("_Spouse:"); -gchar *s = N_("_Birthday:"); -gchar *s = N_("_Assistant's name:"); -gchar *s = N_("_Manager's Name:"); -gchar *s = N_("Anni_versary:"); -gchar *s = N_("No_tes:"); -gchar *s = N_("Details"); diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c deleted file mode 100644 index e8062d83b9..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ /dev/null @@ -1,1809 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-editor.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-contact-editor.h" -#include -#include -#include -#include -#include -#include -#include "addressbook/printing/e-contact-print.h" - -/* Signal IDs */ -enum { - ADD_CARD, - COMMIT_CARD, - DELETE_CARD, - EDITOR_CLOSED, - LAST_SIGNAL -}; - -static void e_contact_editor_init (EContactEditor *card); -static void e_contact_editor_class_init (EContactEditorClass *klass); -static void e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_contact_editor_destroy (GtkObject *object); - -#if 0 -static GtkWidget *e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info); -#endif -static void _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor); -static void _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor); -static void _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor); -static void fill_in_info(EContactEditor *editor); -static void extract_info(EContactEditor *editor); -static void set_fields(EContactEditor *editor); -static void set_address_field(EContactEditor *editor, int result); -static void add_field_callback(GtkWidget *widget, EContactEditor *editor); - -static GtkObjectClass *parent_class = NULL; - -static guint contact_editor_signals[LAST_SIGNAL]; - -/* The arguments we take */ -enum { - ARG_0, - ARG_CARD, - ARG_IS_NEW_CARD -}; - -enum { - DYNAMIC_LIST_EMAIL, - DYNAMIC_LIST_PHONE, - DYNAMIC_LIST_ADDRESS -}; - -GtkType -e_contact_editor_get_type (void) -{ - static GtkType contact_editor_type = 0; - - if (!contact_editor_type) - { - static const GtkTypeInfo contact_editor_info = - { - "EContactEditor", - sizeof (EContactEditor), - sizeof (EContactEditorClass), - (GtkClassInitFunc) e_contact_editor_class_init, - (GtkObjectInitFunc) e_contact_editor_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - contact_editor_type = gtk_type_unique (GTK_TYPE_OBJECT, &contact_editor_info); - } - - return contact_editor_type; -} - -static void -e_contact_editor_class_init (EContactEditorClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass*) klass; - - parent_class = gtk_type_class (GTK_TYPE_OBJECT); - - gtk_object_add_arg_type ("EContactEditor::card", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_CARD); - gtk_object_add_arg_type ("EContactEditor::is_new_card", GTK_TYPE_BOOL, - GTK_ARG_READWRITE, ARG_IS_NEW_CARD); - - contact_editor_signals[ADD_CARD] = - gtk_signal_new ("add_card", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EContactEditorClass, add_card), - gtk_marshal_NONE__OBJECT, - GTK_TYPE_NONE, 1, - GTK_TYPE_OBJECT); - - contact_editor_signals[COMMIT_CARD] = - gtk_signal_new ("commit_card", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EContactEditorClass, commit_card), - gtk_marshal_NONE__OBJECT, - GTK_TYPE_NONE, 1, - GTK_TYPE_OBJECT); - - contact_editor_signals[DELETE_CARD] = - gtk_signal_new ("delete_card", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EContactEditorClass, delete_card), - gtk_marshal_NONE__OBJECT, - GTK_TYPE_NONE, 1, - GTK_TYPE_OBJECT); - - contact_editor_signals[EDITOR_CLOSED] = - gtk_signal_new ("editor_closed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EContactEditorClass, editor_closed), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, contact_editor_signals, LAST_SIGNAL); - - object_class->set_arg = e_contact_editor_set_arg; - object_class->get_arg = e_contact_editor_get_arg; - object_class->destroy = e_contact_editor_destroy; -} - -static void -_replace_button(EContactEditor *editor, gchar *button_xml, gchar *image, GtkSignalFunc func) -{ - GladeXML *gui = editor->gui; - GtkWidget *button = glade_xml_get_widget(gui, button_xml); - GtkWidget *pixmap; - gchar *image_temp; - if (button && GTK_IS_BUTTON(button)) { - image_temp = g_strdup_printf("%s/%s", EVOLUTIONDIR, image); - pixmap = e_create_image_widget(NULL, image_temp, NULL, 0, 0); - gtk_container_add(GTK_CONTAINER(button), - pixmap); - g_free(image_temp); - gtk_widget_show(pixmap); - gtk_signal_connect(GTK_OBJECT(button), "button_press_event", func, editor); - } -} - -static void -_replace_buttons(EContactEditor *editor) -{ - _replace_button(editor, "button-phone1", "arrow.png", _phone_arrow_pressed); - _replace_button(editor, "button-phone2", "arrow.png", _phone_arrow_pressed); - _replace_button(editor, "button-phone3", "arrow.png", _phone_arrow_pressed); - _replace_button(editor, "button-phone4", "arrow.png", _phone_arrow_pressed); - _replace_button(editor, "button-address", "arrow.png", _address_arrow_pressed); - _replace_button(editor, "button-email1", "arrow.png", _email_arrow_pressed); -} - -static void -phone_entry_changed (GtkWidget *widget, EContactEditor *editor) -{ - int which; - gchar *string; - GtkEntry *entry = GTK_ENTRY(widget); - ECardPhone *phone; - - if ( widget == glade_xml_get_widget(editor->gui, "entry-phone1") ) { - which = 1; - } else if ( widget == glade_xml_get_widget(editor->gui, "entry-phone2") ) { - which = 2; - } else if ( widget == glade_xml_get_widget(editor->gui, "entry-phone3") ) { - which = 3; - } else if ( widget == glade_xml_get_widget(editor->gui, "entry-phone4") ) { - which = 4; - } else - return; - string = gtk_entry_get_text(entry); - phone = e_card_phone_new(); - phone->number = string; - e_card_simple_set_phone(editor->simple, editor->phone_choice[which - 1], phone); - phone->number = NULL; - e_card_phone_free(phone); - set_fields(editor); -} - -static void -email_entry_changed (GtkWidget *widget, EContactEditor *editor) -{ - gchar *string; - GtkEntry *entry = GTK_ENTRY(widget); - - string = gtk_entry_get_text(entry); - - e_card_simple_set_email(editor->simple, editor->email_choice, string); -} - -static void -address_text_changed (GtkWidget *widget, EContactEditor *editor) -{ - GtkEditable *editable = GTK_EDITABLE(widget); - ECardAddrLabel *address; - - if (editor->address_choice == -1) - return; - - address = e_card_address_label_new(); - address->data = gtk_editable_get_chars(editable, 0, -1); - e_card_simple_set_address(editor->simple, editor->address_choice, address); - e_card_address_label_free(address); -} - -/* This function tells you whether name_to_style will make sense. */ -static gboolean -style_makes_sense(const ECardName *name, char *company, int style) -{ - switch (style) { - case 0: /* Fall Through */ - case 1: - return TRUE; - case 2: - if (company && *company) - return TRUE; - else - return FALSE; - case 3: /* Fall Through */ - case 4: - if (company && *company && ((name->given && *name->given) || (name->family && *name->family))) - return TRUE; - else - return FALSE; - default: - return FALSE; - } -} - -static char * -name_to_style(const ECardName *name, char *company, int style) -{ - char *string; - char *strings[4], **stringptr; - char *substring; - switch (style) { - case 0: - stringptr = strings; - if (name->family && *name->family) - *(stringptr++) = name->family; - if (name->given && *name->given) - *(stringptr++) = name->given; - *stringptr = NULL; - string = g_strjoinv(", ", strings); - break; - case 1: - stringptr = strings; - if (name->given && *name->given) - *(stringptr++) = name->given; - if (name->family && *name->family) - *(stringptr++) = name->family; - *stringptr = NULL; - string = g_strjoinv(" ", strings); - break; - case 2: - string = g_strdup(company); - break; - case 3: /* Fall Through */ - case 4: - stringptr = strings; - if (name->family && *name->family) - *(stringptr++) = name->family; - if (name->given && *name->given) - *(stringptr++) = name->given; - *stringptr = NULL; - substring = g_strjoinv(", ", strings); - if (!(company && *company)) - company = ""; - if (style == 3) - string = g_strdup_printf("%s (%s)", substring, company); - else - string = g_strdup_printf("%s (%s)", company, substring); - g_free(substring); - break; - default: - string = g_strdup(""); - } - return string; -} - -static int -file_as_get_style (EContactEditor *editor) -{ - GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as")); - char *filestring = gtk_entry_get_text(file_as); - char *trystring; - ECardName *name = editor->name; - int i; - int style; - - if (!name) return 0; - - style = -1; - for (i = 0; i < 5; i++) { - trystring = name_to_style(name, editor->company, i); - if (!strcmp(trystring, filestring)) { - g_free(trystring); - return i; - } - g_free(trystring); - } - return -1; -} - -static void -file_as_set_style(EContactEditor *editor, int style) -{ - char *string; - int i; - GList *strings = NULL; - GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as")); - GtkWidget *widget; - - - if (style == -1) { - string = g_strdup(gtk_entry_get_text(file_as)); - strings = g_list_append(strings, string); - } - - for (i = 0; i < 5; i++) { - if (style_makes_sense(editor->name, editor->company, i)) { - string = name_to_style(editor->name, editor->company, i); - strings = g_list_append(strings, string); - } - } - - widget = glade_xml_get_widget(editor->gui, "combo-file-as"); - if (widget && GTK_IS_COMBO(widget)) { - GtkCombo *combo = GTK_COMBO(widget); - gtk_combo_set_popdown_strings(combo, strings); - g_list_foreach(strings, (GFunc) g_free, NULL); - g_list_free(strings); - } - - if (style != -1) { - string = name_to_style(editor->name, editor->company, style); - gtk_entry_set_text(file_as, string); - g_free(string); - } -} - -static void -name_entry_changed (GtkWidget *widget, EContactEditor *editor) -{ - GtkWidget *file_as; - int style = 0; - - file_as = glade_xml_get_widget(editor->gui, "entry-file-as"); - - if (file_as && GTK_IS_ENTRY(file_as)) { - style = file_as_get_style(editor); - } - - e_card_name_free(editor->name); - editor->name = e_card_name_from_string(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (file_as && GTK_IS_ENTRY(file_as)) { - file_as_set_style(editor, style); - } -} - -static void -company_entry_changed (GtkWidget *widget, EContactEditor *editor) -{ - int style = 0; - GtkWidget *file_as; - - file_as = glade_xml_get_widget(editor->gui, "entry-file-as"); - - if (file_as && GTK_IS_ENTRY(file_as)) { - style = file_as_get_style(editor); - } - - g_free(editor->company); - - editor->company = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (file_as && GTK_IS_ENTRY(file_as)) { - file_as_set_style(editor, style); - } -} - -static void -set_entry_changed_signal_phone(EContactEditor *editor, char *id) -{ - GtkWidget *widget = glade_xml_get_widget(editor->gui, id); - if (widget && GTK_IS_ENTRY(widget)) - gtk_signal_connect(GTK_OBJECT(widget), "changed", - phone_entry_changed, editor); -} - -static void -set_entry_changed_signals(EContactEditor *editor) -{ - GtkWidget *widget; - set_entry_changed_signal_phone(editor, "entry-phone1"); - set_entry_changed_signal_phone(editor, "entry-phone2"); - set_entry_changed_signal_phone(editor, "entry-phone3"); - set_entry_changed_signal_phone(editor, "entry-phone4"); - widget = glade_xml_get_widget(editor->gui, "entry-email1"); - if (widget && GTK_IS_ENTRY(widget)) { - gtk_signal_connect(GTK_OBJECT(widget), "changed", - email_entry_changed, editor); - } - widget = glade_xml_get_widget(editor->gui, "text-address"); - if (widget && GTK_IS_TEXT(widget)) { - gtk_signal_connect(GTK_OBJECT(widget), "changed", - address_text_changed, editor); - } - widget = glade_xml_get_widget(editor->gui, "entry-fullname"); - if (widget && GTK_IS_ENTRY(widget)) { - gtk_signal_connect(GTK_OBJECT(widget), "changed", - name_entry_changed, editor); - } - widget = glade_xml_get_widget(editor->gui, "entry-company"); - if (widget && GTK_IS_ENTRY(widget)) { - gtk_signal_connect(GTK_OBJECT(widget), "changed", - company_entry_changed, editor); - } -} - -static void -full_name_clicked(GtkWidget *button, EContactEditor *editor) -{ - GnomeDialog *dialog = GNOME_DIALOG(e_contact_editor_fullname_new(editor->name)); - int result; - gtk_widget_show(GTK_WIDGET(dialog)); - result = gnome_dialog_run_and_close (dialog); - if (result == 0) { - ECardName *name; - GtkWidget *fname_widget; - - gtk_object_get(GTK_OBJECT(dialog), - "name", &name, - NULL); - e_card_name_free(editor->name); - editor->name = e_card_name_copy(name); - - fname_widget = glade_xml_get_widget(editor->gui, "entry-fullname"); - if (fname_widget && GTK_IS_ENTRY(fname_widget)) { - char *full_name = e_card_name_to_string(name); - gtk_entry_set_text(GTK_ENTRY(fname_widget), full_name); - g_free(full_name); - } - } - gtk_object_unref(GTK_OBJECT(dialog)); -} - -static void -categories_clicked(GtkWidget *button, EContactEditor *editor) -{ - char *categories; - GnomeDialog *dialog; - int result; - GtkWidget *entry = glade_xml_get_widget(editor->gui, "entry-categories"); - if (entry && GTK_IS_ENTRY(entry)) - categories = gtk_entry_get_text(GTK_ENTRY(entry)); - else if (editor->card) - gtk_object_get(GTK_OBJECT(editor->card), - "categories", &categories, - NULL); - dialog = GNOME_DIALOG(e_contact_editor_categories_new(categories)); - gtk_widget_show(GTK_WIDGET(dialog)); - result = gnome_dialog_run (dialog); - if (result == 0) { - gtk_object_get(GTK_OBJECT(dialog), - "categories", &categories, - NULL); - if (entry && GTK_IS_ENTRY(entry)) - gtk_entry_set_text(GTK_ENTRY(entry), categories); - else - gtk_object_set(GTK_OBJECT(editor->card), - "categories", categories, - NULL); - g_free(categories); - } - gtk_object_destroy(GTK_OBJECT(dialog)); - if (!entry) - g_free(categories); -} - -/* Emits the signal to request saving a card */ -static void -save_card (EContactEditor *ce) -{ - extract_info (ce); - e_card_simple_sync_card (ce->simple); - - if (ce->is_new_card) - gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[ADD_CARD], - ce->card); - else - gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[COMMIT_CARD], - ce->card); - - /* FIXME: should we set the ce->is_new_card here or have the client code - * set the "is_new_card" argument on the contact editor object? - */ - - ce->is_new_card = FALSE; -} - -/* Closes the dialog box and emits the appropriate signals */ -static void -close_dialog (EContactEditor *ce) -{ - g_assert (ce->app != NULL); - - gtk_widget_destroy (ce->app); - ce->app = NULL; - - gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[EDITOR_CLOSED]); -} - -/* Menu callbacks */ - -/* File/Save callback */ -static void -file_save_cb (GtkWidget *widget, gpointer data) -{ - EContactEditor *ce; - - ce = E_CONTACT_EDITOR (data); - save_card (ce); -} - -/* File/Close callback */ -static void -file_close_cb (GtkWidget *widget, gpointer data) -{ - EContactEditor *ce; - - ce = E_CONTACT_EDITOR (data); - close_dialog (ce); -} - -static void -file_save_as_cb (GtkWidget *widget, gpointer data) -{ - EContactEditor *ce; - ECard *card; - - ce = E_CONTACT_EDITOR (data); - - extract_info (ce); - e_card_simple_sync_card (ce->simple); - - card = ce->card; - e_contact_save_as("Save as VCard", card); -} - -gboolean -e_contact_editor_confirm_delete(void) -{ - GnomeDialog *dialog; - GladeXML *gui; - int result; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/e-contact-editor-confirm-delete.glade", NULL); - - dialog = GNOME_DIALOG(glade_xml_get_widget(gui, "confirm-dialog")); - - result = gnome_dialog_run_and_close(dialog); - - gtk_object_unref(GTK_OBJECT(gui)); - - return !result; -} - -static void -delete_cb (GtkWidget *widget, gpointer data) -{ - EContactEditor *ce; - - if (e_contact_editor_confirm_delete()) { - - ce = E_CONTACT_EDITOR (data); - - extract_info (ce); - e_card_simple_sync_card (ce->simple); - - if (!ce->is_new_card) - gtk_signal_emit (GTK_OBJECT (ce), contact_editor_signals[DELETE_CARD], - ce->card); - - file_close_cb(widget, data); - } -} - -/* Emits the signal to request printing a card */ -static void -print_cb (GtkWidget *widget, gpointer data) -{ - EContactEditor *ce; - - ce = E_CONTACT_EDITOR (data); - - extract_info (ce); - e_card_simple_sync_card (ce->simple); - - gtk_widget_show(e_contact_print_card_dialog_new(ce->card)); -} - - -/* Menu bar */ - -static GnomeUIInfo file_new_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Appointment"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Meeting Re_quest"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Mail Message"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Task"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Task _Request"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Journal Entry"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Note"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_page_setup_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Memo Style"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Define Print _Styles..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_menu[] = { - GNOMEUIINFO_MENU_NEW_SUBTREE (file_new_menu), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: S_end"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_SAVE_ITEM (file_save_cb, NULL), - GNOMEUIINFO_MENU_SAVE_AS_ITEM (file_save_as_cb, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Save Attac_hments..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("_Delete"), NULL, delete_cb), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Move to Folder..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Cop_y to Folder..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("Page Set_up"), file_page_setup_menu), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Print Pre_view"), NULL, NULL), - GNOMEUIINFO_MENU_PRINT_ITEM (print_cb, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_PROPERTIES_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLOSE_ITEM (file_close_cb, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo edit_object_menu[] = { - GNOMEUIINFO_ITEM_NONE ("FIXME: what goes here?", NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo edit_menu[] = { - GNOMEUIINFO_MENU_UNDO_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_REDO_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CUT_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_COPY_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_PASTE_ITEM (NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Paste _Special..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLEAR_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_SELECT_ALL_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Mark as U_nread"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_FIND_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_FIND_AGAIN_ITEM (NULL, NULL), - GNOMEUIINFO_SUBTREE (N_("_Object"), edit_object_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_previous_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Fi_rst Item in Folder"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_next_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Last Item in Folder"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_toolbars_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("FIXME: _Standard"), NULL, NULL, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, - { GNOME_APP_UI_TOGGLEITEM, N_("FIXME: __Formatting"), NULL, NULL, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Customize..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_menu[] = { - GNOMEUIINFO_SUBTREE (N_("Pre_vious"), view_previous_menu), - GNOMEUIINFO_SUBTREE (N_("Ne_xt"), view_next_menu), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("_Toolbars"), view_toolbars_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo insert_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _File..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: It_em..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Object..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo format_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Font..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Paragraph..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo tools_forms_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Desi_gn This Form"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: D_esign a Form..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Publish _Form..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Pu_blish Form As..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Script _Debugger"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo tools_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Spelling..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("_Forms"), tools_forms_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo actions_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _New Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Contact from Same Company"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Letter to Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Message to Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: New Meetin_g with Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Plan a Meeting..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Task for Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: New _Journal Entry for Contact"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Flag for Follow Up..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Display Map of Address"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Open Web Page"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Forward as _vCard"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: For_ward"), NULL, NULL) -}; - -static GnomeUIInfo help_menu[] = { - GNOMEUIINFO_ITEM_NONE ("FIXME: fix Bonobo so it supports help items!", NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo main_menu[] = { - GNOMEUIINFO_MENU_FILE_TREE (file_menu), - GNOMEUIINFO_MENU_EDIT_TREE (edit_menu), - GNOMEUIINFO_MENU_VIEW_TREE (view_menu), - GNOMEUIINFO_SUBTREE (N_("_Insert"), insert_menu), - GNOMEUIINFO_SUBTREE (N_("F_ormat"), format_menu), - GNOMEUIINFO_SUBTREE (N_("_Tools"), tools_menu), - GNOMEUIINFO_SUBTREE (N_("Actio_ns"), actions_menu), - GNOMEUIINFO_MENU_HELP_TREE (help_menu), - GNOMEUIINFO_END -}; - -/* Creates the menu bar for the contact editor */ -static void -create_menu (EContactEditor *ce) -{ - BonoboUIHandlerMenuItem *list; - - bonobo_ui_handler_create_menubar (ce->uih); - - list = bonobo_ui_handler_menu_parse_uiinfo_list_with_data (main_menu, ce); - bonobo_ui_handler_menu_add_list (ce->uih, "/", list); -} - -/* Toolbar/Save and Close callback */ -static void -tb_save_and_close_cb (GtkWidget *widget, gpointer data) -{ - EContactEditor *ce; - - ce = E_CONTACT_EDITOR (data); - save_card (ce); - close_dialog (ce); -} - -/* Toolbar */ - -static GnomeUIInfo toolbar[] = { - GNOMEUIINFO_ITEM_STOCK (N_("Save and Close"), - N_("Save the appointment and close the dialog box"), - tb_save_and_close_cb, - GNOME_STOCK_PIXMAP_SAVE), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_STOCK (N_("Print..."), - N_("Print this item"), print_cb, - GNOME_STOCK_PIXMAP_PRINT), -#if 0 - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Insert File..."), - N_("Insert a file as an attachment"), NULL), -#endif - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_STOCK (N_("Delete"), - N_("Delete this item"), delete_cb, - GNOME_STOCK_PIXMAP_TRASH), - GNOMEUIINFO_SEPARATOR, -#if 0 - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Previous"), - N_("Go to the previous item"), NULL, - GNOME_STOCK_PIXMAP_BACK), - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Next"), - N_("Go to the next item"), NULL, - GNOME_STOCK_PIXMAP_FORWARD), -#endif - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Help"), - N_("See online help"), NULL, GNOME_STOCK_PIXMAP_HELP), - GNOMEUIINFO_END -}; - -/* Creates the toolbar for the contact editor */ -static void -create_toolbar (EContactEditor *ce) -{ - BonoboUIHandlerToolbarItem *list; - GnomeDockItem *dock_item; - GtkWidget *toolbar_child; - - bonobo_ui_handler_create_toolbar (ce->uih, "Toolbar"); - - /* Fetch the toolbar. What a pain in the ass. */ - - dock_item = gnome_app_get_dock_item_by_name (GNOME_APP (ce->app), GNOME_APP_TOOLBAR_NAME); - g_assert (dock_item != NULL); - - toolbar_child = gnome_dock_item_get_child (dock_item); - g_assert (toolbar_child != NULL && GTK_IS_TOOLBAR (toolbar_child)); - - /* Turn off labels as GtkToolbar sucks */ - gtk_toolbar_set_style (GTK_TOOLBAR (toolbar_child), GTK_TOOLBAR_ICONS); - - list = bonobo_ui_handler_toolbar_parse_uiinfo_list_with_data (toolbar, ce); - bonobo_ui_handler_toolbar_add_list (ce->uih, "/Toolbar", list); -} - -/* Callback used when the dialog box is destroyed */ -static gint -app_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data) -{ - EContactEditor *ce; - - ce = E_CONTACT_EDITOR (data); - - close_dialog (ce); - return TRUE; -} - -static GList * -add_to_tab_order(GList *list, GladeXML *gui, char *name) -{ - GtkWidget *widget = glade_xml_get_widget(gui, name); - return g_list_prepend(list, widget); -} - -static void -setup_tab_order(GladeXML *gui) -{ - GtkWidget *container; - GList *list = NULL; - - container = glade_xml_get_widget(gui, "table-contact-editor-general"); - - if (container) { - list = add_to_tab_order(list, gui, "entry-fullname"); - list = add_to_tab_order(list, gui, "entry-jobtitle"); - list = add_to_tab_order(list, gui, "entry-company"); - list = add_to_tab_order(list, gui, "combo-file-as"); - list = add_to_tab_order(list, gui, "entry-phone1"); - list = add_to_tab_order(list, gui, "entry-phone2"); - list = add_to_tab_order(list, gui, "entry-phone3"); - list = add_to_tab_order(list, gui, "entry-phone4"); - list = g_list_reverse(list); - e_container_change_tab_order(GTK_CONTAINER(container), list); - g_list_free(list); - - list = NULL; - list = add_to_tab_order(list, gui, "entry-email1"); - list = add_to_tab_order(list, gui, "entry-web"); - list = add_to_tab_order(list, gui, "text-address"); - list = add_to_tab_order(list, gui, "alignment-contacts"); - list = g_list_reverse(list); - e_container_change_tab_order(GTK_CONTAINER(container), list); - g_list_free(list); - } -} - -static void -e_contact_editor_init (EContactEditor *e_contact_editor) -{ - GladeXML *gui; - GtkWidget *widget; - - e_contact_editor->email_info = NULL; - e_contact_editor->phone_info = NULL; - e_contact_editor->address_info = NULL; - e_contact_editor->email_popup = NULL; - e_contact_editor->phone_popup = NULL; - e_contact_editor->address_popup = NULL; - e_contact_editor->email_list = NULL; - e_contact_editor->phone_list = NULL; - e_contact_editor->address_list = NULL; - e_contact_editor->name = NULL; - e_contact_editor->company = g_strdup(""); - - e_contact_editor->email_choice = 0; - e_contact_editor->phone_choice[0] = E_CARD_SIMPLE_PHONE_ID_BUSINESS; - e_contact_editor->phone_choice[1] = E_CARD_SIMPLE_PHONE_ID_HOME; - e_contact_editor->phone_choice[2] = E_CARD_SIMPLE_PHONE_ID_BUSINESS_FAX; - e_contact_editor->phone_choice[3] = E_CARD_SIMPLE_PHONE_ID_MOBILE; - e_contact_editor->address_choice = 0; - - e_contact_editor->arbitrary_fields = NULL; - - e_contact_editor->simple = e_card_simple_new(NULL); - - e_contact_editor->card = NULL; - - gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL); - e_contact_editor->gui = gui; - - setup_tab_order(gui); - - e_contact_editor->app = glade_xml_get_widget (gui, "contact editor"); - - e_container_foreach_leaf (GTK_CONTAINER (e_contact_editor->app), - (GtkCallback) add_field_callback, - e_contact_editor); - - _replace_buttons(e_contact_editor); - set_entry_changed_signals(e_contact_editor); - - widget = glade_xml_get_widget(e_contact_editor->gui, "button-fullname"); - if (widget && GTK_IS_BUTTON(widget)) - gtk_signal_connect(GTK_OBJECT(widget), "clicked", - full_name_clicked, e_contact_editor); - - widget = glade_xml_get_widget(e_contact_editor->gui, "button-categories"); - if (widget && GTK_IS_BUTTON(widget)) - gtk_signal_connect(GTK_OBJECT(widget), "clicked", - categories_clicked, e_contact_editor); - - /* Build the menu and toolbar */ - - e_contact_editor->uih = bonobo_ui_handler_new (); - if (!e_contact_editor->uih) { - g_message ("e_contact_editor_init(): eeeeek, could not create the UI handler!"); - return; - } - - bonobo_ui_handler_set_app (e_contact_editor->uih, GNOME_APP (e_contact_editor->app)); - - create_menu (e_contact_editor); - create_toolbar (e_contact_editor); - - /* Connect to the deletion of the dialog */ - - gtk_signal_connect (GTK_OBJECT (e_contact_editor->app), "delete_event", - GTK_SIGNAL_FUNC (app_delete_event_cb), e_contact_editor); -} - -void -e_contact_editor_destroy (GtkObject *object) { - EContactEditor *e_contact_editor = E_CONTACT_EDITOR(object); - - if (e_contact_editor->email_list) { - g_list_foreach(e_contact_editor->email_list, (GFunc) g_free, NULL); - g_list_free(e_contact_editor->email_list); - } - if (e_contact_editor->email_info) { - g_free(e_contact_editor->email_info); - } - if (e_contact_editor->email_popup) { - gtk_widget_unref(e_contact_editor->email_popup); - } - - if (e_contact_editor->phone_list) { - g_list_foreach(e_contact_editor->phone_list, (GFunc) g_free, NULL); - g_list_free(e_contact_editor->phone_list); - } - if (e_contact_editor->phone_info) { - g_free(e_contact_editor->phone_info); - } - if (e_contact_editor->phone_popup) { - gtk_widget_unref(e_contact_editor->phone_popup); - } - - if (e_contact_editor->address_list) { - g_list_foreach(e_contact_editor->address_list, (GFunc) g_free, NULL); - g_list_free(e_contact_editor->address_list); - } - if (e_contact_editor->address_info) { - g_free(e_contact_editor->address_info); - } - if (e_contact_editor->address_popup) { - gtk_widget_unref(e_contact_editor->address_popup); - } - - if (e_contact_editor->simple) - gtk_object_unref(GTK_OBJECT(e_contact_editor->simple)); - - g_free (e_contact_editor->company); - - gtk_object_unref(GTK_OBJECT(e_contact_editor->gui)); -} - -EContactEditor * -e_contact_editor_new (ECard *card, gboolean is_new_card) -{ - EContactEditor *ce; - - ce = E_CONTACT_EDITOR (gtk_type_new (E_CONTACT_EDITOR_TYPE)); - - gtk_object_set (GTK_OBJECT (ce), - "card", card, - "is_new_card", is_new_card, - NULL); - - gtk_widget_show (ce->app); - return ce; -} - -static void -e_contact_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EContactEditor *editor; - - editor = E_CONTACT_EDITOR (o); - - switch (arg_id){ - case ARG_CARD: - if (editor->card) - gtk_object_unref(GTK_OBJECT(editor->card)); - editor->card = e_card_duplicate(E_CARD(GTK_VALUE_OBJECT (*arg))); - gtk_object_set(GTK_OBJECT(editor->simple), - "card", editor->card, - NULL); - fill_in_info(editor); - break; - - case ARG_IS_NEW_CARD: - editor->is_new_card = GTK_VALUE_BOOL (*arg) ? TRUE : FALSE; - break; - } -} - -static void -e_contact_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EContactEditor *e_contact_editor; - - e_contact_editor = E_CONTACT_EDITOR (object); - - switch (arg_id) { - case ARG_CARD: - e_card_simple_sync_card(e_contact_editor->simple); - extract_info(e_contact_editor); - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_contact_editor->card); - break; - - case ARG_IS_NEW_CARD: - GTK_VALUE_BOOL (*arg) = e_contact_editor->is_new_card ? TRUE : FALSE; - break; - - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -_popup_position(GtkMenu *menu, - gint *x, - gint *y, - gpointer data) -{ - GtkWidget *button = GTK_WIDGET(data); - GtkRequisition request; - int mh, mw; - gdk_window_get_origin (button->window, x, y); - *x += button->allocation.width; - *y += button->allocation.height; - - gtk_widget_size_request(GTK_WIDGET(menu), &request); - - mh = request.height; - mw = request.width; - - *x -= mw; - if (*x < 0) - *x = 0; - - if (*y < 0) - *y = 0; - - if ((*x + mw) > gdk_screen_width ()) - *x = gdk_screen_width () - mw; - - if ((*y + mh) > gdk_screen_height ()) - *y = gdk_screen_height () - mh; -} - -static gint -_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor, GtkWidget *popup, GList **list, GnomeUIInfo **info, gchar *label, gchar *entry, gchar *dialog_title) -{ - gint menu_item; - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "button_press_event"); - gtk_widget_realize(popup); - menu_item = gnome_popup_menu_do_popup_modal(popup, _popup_position, widget, button, editor); - if ( menu_item != -1 ) { -#if 0 - if (menu_item == g_list_length (*list)) { - e_contact_editor_build_dialog(editor, entry, label, dialog_title, list, info); - } else { -#endif - GtkWidget *label_widget = glade_xml_get_widget(editor->gui, label); - if (label_widget && GTK_IS_LABEL(label_widget)) { - gtk_object_set(GTK_OBJECT(label_widget), - "label", g_list_nth_data(*list, menu_item), - NULL); - } -#if 0 - } -#endif - } - return menu_item; -} - -static void -e_contact_editor_build_ui_info(GList *list, GnomeUIInfo **infop) -{ - GnomeUIInfo *info; - GnomeUIInfo singleton = { GNOME_APP_UI_TOGGLEITEM, NULL, NULL, NULL, NULL, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }; - GnomeUIInfo end = GNOMEUIINFO_END; - int length; - int i; - - info = *infop; - - if ( info ) - g_free(info); - length = g_list_length( list ); - info = g_new(GnomeUIInfo, length + 2); - for (i = 0; i < length; i++) { - info[i] = singleton; - info[i].label = _(list->data); - list = list->next; - } - info[i] = end; - - *infop = info; -} - -#if 0 -static void -_dialog_clicked(GtkWidget *dialog, gint button, EContactEditor *editor) -{ - GtkWidget *label = gtk_object_get_data(GTK_OBJECT(dialog), - "e_contact_editor_label"); - - GtkWidget *dialog_entry = gtk_object_get_data(GTK_OBJECT(dialog), - "e_contact_editor_dialog_entry"); - - GList **list = gtk_object_get_data(GTK_OBJECT(dialog), - "e_contact_editor_list"); - GList **info = gtk_object_get_data(GTK_OBJECT(dialog), - "e_contact_editor_info"); - switch (button) { - case 0: - if (label && GTK_IS_LABEL(label)) { - gtk_object_set(GTK_OBJECT(label), - "label", gtk_entry_get_text(GTK_ENTRY(dialog_entry)), - NULL); - *list = g_list_append(*list, g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog_entry)))); - g_free(*info); - *info = NULL; - } - break; - } - gnome_dialog_close(GNOME_DIALOG(dialog)); -} - -static void -_dialog_destroy(EContactEditor *editor, GtkWidget *dialog) -{ - gnome_dialog_close(GNOME_DIALOG(dialog)); -} - -static GtkWidget * -e_contact_editor_build_dialog(EContactEditor *editor, gchar *entry_id, gchar *label_id, gchar *title, GList **list, GnomeUIInfo **info) -{ - GtkWidget *dialog_entry = gtk_entry_new(); - GtkWidget *entry = glade_xml_get_widget(editor->gui, entry_id); - GtkWidget *label = glade_xml_get_widget(editor->gui, label_id); - - GtkWidget *dialog = gnome_dialog_new(title, - NULL); - - gtk_container_add(GTK_CONTAINER(GNOME_DIALOG(dialog)->vbox), - gtk_widget_new (gtk_frame_get_type(), - "border_width", 4, - "label", title, - "child", gtk_widget_new(gtk_alignment_get_type(), - "child", dialog_entry, - "xalign", .5, - "yalign", .5, - "xscale", 1.0, - "yscale", 1.0, - "border_width", 9, - NULL), - NULL)); - - gnome_dialog_append_button_with_pixmap(GNOME_DIALOG(dialog), - "Add", - GNOME_STOCK_PIXMAP_ADD); - gnome_dialog_append_button(GNOME_DIALOG(dialog), GNOME_STOCK_BUTTON_CANCEL); - gnome_dialog_set_default(GNOME_DIALOG(dialog), 0); - - gtk_signal_connect(GTK_OBJECT(dialog), "clicked", - _dialog_clicked, editor); - gtk_signal_connect_while_alive(GTK_OBJECT(editor), "destroy", - _dialog_destroy, GTK_OBJECT(dialog), GTK_OBJECT(dialog)); - - gtk_object_set_data(GTK_OBJECT(dialog), - "e_contact_editor_entry", entry); - gtk_object_set_data(GTK_OBJECT(dialog), - "e_contact_editor_label", label); - gtk_object_set_data(GTK_OBJECT(dialog), - "e_contact_editor_dialog_entry", dialog_entry); - gtk_object_set_data(GTK_OBJECT(dialog), - "e_contact_editor_list", list); - gtk_object_set_data(GTK_OBJECT(dialog), - "e_contact_editor_info", info); - - gtk_widget_show_all(dialog); - return dialog; -} -#endif - -static void -_phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor) -{ - int which; - int i; - gchar *label; - gchar *entry; - int result; - if ( widget == glade_xml_get_widget(editor->gui, "button-phone1") ) { - which = 1; - } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone2") ) { - which = 2; - } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone3") ) { - which = 3; - } else if ( widget == glade_xml_get_widget(editor->gui, "button-phone4") ) { - which = 4; - } else - return; - - label = g_strdup_printf("label-phone%d", which); - entry = g_strdup_printf("entry-phone%d", which); - - if (editor->phone_list == NULL) { - static char *info[] = { - N_("Assistant"), - N_("Business"), - N_("Business 2"), - N_("Business Fax"), - N_("Callback"), - N_("Car"), - N_("Company"), - N_("Home"), - N_("Home 2"), - N_("Home Fax"), - N_("ISDN"), - N_("Mobile"), - N_("Other"), - N_("Other Fax"), - N_("Pager"), - N_("Primary"), - N_("Radio"), - N_("Telex"), - N_("TTY/TDD") - }; - - for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) { - editor->phone_list = g_list_append(editor->phone_list, g_strdup(info[i])); - } - } - if (editor->phone_info == NULL) { - e_contact_editor_build_ui_info(editor->phone_list, &editor->phone_info); - - if ( editor->phone_popup ) - gtk_widget_unref(editor->phone_popup); - - editor->phone_popup = gnome_popup_menu_new(editor->phone_info); - } - - for(i = 0; i < E_CARD_SIMPLE_PHONE_ID_LAST; i++) { - const ECardPhone *phone = e_card_simple_get_phone(editor->simple, i); - gboolean checked; - checked = phone && phone->number && *phone->number; - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->phone_info[i].widget), - checked); - gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(editor->phone_info[i].widget), - TRUE); - } - - result = _arrow_pressed (widget, button, editor, editor->phone_popup, &editor->phone_list, &editor->phone_info, label, entry, "Add new phone number type"); - - if (result != -1) { - editor->phone_choice[which - 1] = result; - set_fields(editor); - } - - g_free(label); - g_free(entry); -} - -static void -_email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor) -{ - int i; - int result; - if (editor->email_list == NULL) { - static char *info[] = { - N_("Primary Email"), - N_("Email 2"), - N_("Email 3") - }; - - for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) { - editor->email_list = g_list_append(editor->email_list, g_strdup(info[i])); - } - } - if (editor->email_info == NULL) { - e_contact_editor_build_ui_info(editor->email_list, &editor->email_info); - - if ( editor->email_popup ) - gtk_widget_unref(editor->email_popup); - - editor->email_popup = gnome_popup_menu_new(editor->email_info); - } - - for(i = 0; i < E_CARD_SIMPLE_EMAIL_ID_LAST; i++) { - const char *string = e_card_simple_get_email(editor->simple, i); - gboolean checked; - checked = string && *string; - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->email_info[i].widget), - checked); - gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(editor->email_info[i].widget), - TRUE); - } - - result = _arrow_pressed (widget, button, editor, editor->email_popup, &editor->email_list, &editor->email_info, "label-email1", "entry-email1", "Add new Email type"); - - if (result != -1) { - editor->email_choice = result; - set_fields(editor); - } -} - -static void -_address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor) -{ - int i; - int result; - if (editor->address_list == NULL) { - static char *info[] = { - N_("Business"), - N_("Home"), - N_("Other") - }; - - for (i = 0; i < sizeof(info) / sizeof(info[0]); i++) { - editor->address_list = g_list_append(editor->address_list, g_strdup(info[i])); - } - } - if (editor->address_info == NULL) { - e_contact_editor_build_ui_info(editor->address_list, &editor->address_info); - - if ( editor->address_popup ) - gtk_widget_unref(editor->address_popup); - - editor->address_popup = gnome_popup_menu_new(editor->address_info); - } - - for(i = 0; i < E_CARD_SIMPLE_ADDRESS_ID_LAST; i++) { - const ECardAddrLabel *address = e_card_simple_get_address(editor->simple, i); - gboolean checked; - checked = address && address->data && *address->data; - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->address_info[i].widget), - checked); - gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(editor->address_info[i].widget), - TRUE); - } - - result = _arrow_pressed (widget, button, editor, editor->address_popup, &editor->address_list, &editor->address_info, "label-address", "text-address", "Add new Address type"); - - if (result != -1) { - set_address_field(editor, result); - } -} - -static void -set_field(GtkEntry *entry, const char *string) -{ - char *oldstring = gtk_entry_get_text(entry); - if (!string) - string = ""; - if (strcmp(string, oldstring)) - gtk_entry_set_text(entry, string); -} - -static void -set_phone_field(GtkWidget *entry, const ECardPhone *phone) -{ - set_field(GTK_ENTRY(entry), phone ? phone->number : ""); -} - -static void -set_fields(EContactEditor *editor) -{ - GtkWidget *entry; - - entry = glade_xml_get_widget(editor->gui, "entry-phone1"); - if (entry && GTK_IS_ENTRY(entry)) - set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[0])); - - entry = glade_xml_get_widget(editor->gui, "entry-phone2"); - if (entry && GTK_IS_ENTRY(entry)) - set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[1])); - - entry = glade_xml_get_widget(editor->gui, "entry-phone3"); - if (entry && GTK_IS_ENTRY(entry)) - set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[2])); - - entry = glade_xml_get_widget(editor->gui, "entry-phone4"); - if (entry && GTK_IS_ENTRY(entry)) - set_phone_field(entry, e_card_simple_get_phone(editor->simple, editor->phone_choice[3])); - - entry = glade_xml_get_widget(editor->gui, "entry-email1"); - if (entry && GTK_IS_ENTRY(entry)) - set_field(GTK_ENTRY(entry), e_card_simple_get_email(editor->simple, editor->email_choice)); - - set_address_field(editor, -1); -} - -static void -set_address_field(EContactEditor *editor, int result) -{ - GtkWidget *widget; - - widget = glade_xml_get_widget(editor->gui, "text-address"); - - if (widget && GTK_IS_TEXT(widget)) { - int position; - GtkEditable *editable; - const ECardAddrLabel *address; - - if (result == -1) - result = editor->address_choice; - editor->address_choice = -1; - - position = 0; - editable = GTK_EDITABLE(widget); - gtk_editable_delete_text(editable, 0, -1); - address = e_card_simple_get_address(editor->simple, result); - if (address && address->data) - gtk_editable_insert_text(editable, address->data, strlen(address->data), &position); - - editor->address_choice = result; - } -} - -static void -add_field_callback(GtkWidget *widget, EContactEditor *editor) -{ - const char *name; - int i; - static const char *builtins[] = { - "entry-fullname", - "entry-web", - "entry-company", - "entry-department", - "entry-office", - "entry-jobtitle", - "entry-profession", - "entry-manager", - "entry-assistant", - "entry-nickname", - "entry-spouse", - "text-comments", - "entry-categories", - "entry-contacts", - "entry-file-as", - "dateedit-anniversary", - "dateedit-birthday", - "entry-phone1", - "entry-phone2", - "entry-phone3", - "entry-phone4", - "entry-email1", - "text-address", - "checkbutton-mailingaddress", - "checkbutton-htmlmail", - NULL - }; - name = glade_get_widget_name(widget); - if (name) { - for (i = 0; builtins[i]; i++) { - if (!strcmp(name, builtins[i])) - return; - } - if (GTK_IS_ENTRY(widget) || GTK_IS_TEXT(widget)) { - editor->arbitrary_fields = g_list_prepend(editor->arbitrary_fields, g_strdup(name)); - } - } -} - -struct { - char *id; - char *key; -} field_mapping [] = { - { "entry-fullname", "full_name" }, - { "entry-web", "url" }, - { "entry-company", "org" }, - { "entry-department", "org_unit" }, - { "entry-office", "office" }, - { "entry-jobtitle", "title" }, - { "entry-profession", "role" }, - { "entry-manager", "manager" }, - { "entry-assistant", "assistant" }, - { "entry-nickname", "nickname" }, - { "entry-spouse", "spouse" }, - { "text-comments", "note" }, - { "entry-categories", "categories" }, -}; - -static void -fill_in_field(EContactEditor *editor, char *id, char *value) -{ - GtkWidget *widget = glade_xml_get_widget(editor->gui, id); - if (widget && GTK_IS_EDITABLE(widget)) { - int position = 0; - GtkEditable *editable = GTK_EDITABLE(widget); - gtk_editable_delete_text(editable, 0, -1); - if (value) - gtk_editable_insert_text(editable, value, strlen(value), &position); - } -} - -static void -fill_in_card_field(EContactEditor *editor, ECard *card, char *id, char *key) -{ - char *string; - gtk_object_get(GTK_OBJECT(card), - key, &string, - NULL); - fill_in_field(editor, id, string); -} - -static void -fill_in_single_field(EContactEditor *editor, char *name) -{ - ECardSimple *simple = editor->simple; - GtkWidget *widget = glade_xml_get_widget(editor->gui, name); - if (widget && GTK_IS_EDITABLE(widget)) { - int position = 0; - GtkEditable *editable = GTK_EDITABLE(widget); - const ECardArbitrary *arbitrary; - - gtk_editable_delete_text(editable, 0, -1); - arbitrary = e_card_simple_get_arbitrary(simple, - name); - if (arbitrary && arbitrary->value) - gtk_editable_insert_text(editable, arbitrary->value, strlen(arbitrary->value), &position); - } -} - -static void -fill_in_info(EContactEditor *editor) -{ - ECard *card = editor->card; - if (card) { - char *file_as; - ECardName *name; - const ECardDate *anniversary; - const ECardDate *bday; - int i; - GtkWidget *widget; - GList *list; - - gtk_object_get(GTK_OBJECT(card), - "file_as", &file_as, - "name", &name, - "anniversary", &anniversary, - "birth_date", &bday, - NULL); - - for (i = 0; i < sizeof(field_mapping) / sizeof(field_mapping[0]); i++) { - fill_in_card_field(editor, card, field_mapping[i].id, field_mapping[i].key); - } - - for (list = editor->arbitrary_fields; list; list = list->next) { - fill_in_single_field(editor, list->data); - } - - /* File as has to come after company and name or else it'll get messed up when setting them. */ - fill_in_field(editor, "entry-file-as", file_as); - - e_card_name_free(editor->name); - editor->name = e_card_name_copy(name); - - widget = glade_xml_get_widget(editor->gui, "dateedit-anniversary"); - if (anniversary && widget && GNOME_IS_DATE_EDIT(widget)) { - struct tm time_struct = {0,0,0,0,0,0,0,0,0}; - time_t time_val; - GnomeDateEdit *dateedit; - - time_struct.tm_mday = anniversary->day; - time_struct.tm_mon = anniversary->month - 1; - time_struct.tm_year = anniversary->year - 1900; - time_val = mktime(&time_struct); - dateedit = GNOME_DATE_EDIT(widget); - gnome_date_edit_set_time(dateedit, time_val); - } - - widget = glade_xml_get_widget(editor->gui, "dateedit-birthday"); - if (bday && widget && GNOME_IS_DATE_EDIT(widget)) { - struct tm time_struct = {0,0,0,0,0,0,0,0,0}; - time_t time_val; - GnomeDateEdit *dateedit; - time_struct.tm_mday = bday->day; - time_struct.tm_mon = bday->month - 1; - time_struct.tm_year = bday->year - 1900; - time_val = mktime(&time_struct); - dateedit = GNOME_DATE_EDIT(widget); - gnome_date_edit_set_time(dateedit, time_val); - } - - set_fields(editor); - } -} - -static void -extract_field(EContactEditor *editor, ECard *card, char *editable_id, char *key) -{ - GtkWidget *widget = glade_xml_get_widget(editor->gui, editable_id); - if (widget && GTK_IS_EDITABLE(widget)) { - GtkEditable *editable = GTK_EDITABLE(widget); - char *string = gtk_editable_get_chars(editable, 0, -1); - if (string && *string) - gtk_object_set(GTK_OBJECT(card), - key, string, - NULL); - else - gtk_object_set(GTK_OBJECT(card), - key, NULL, - NULL); - g_free(string); - } -} - -static void -extract_single_field(EContactEditor *editor, char *name) -{ - GtkWidget *widget = glade_xml_get_widget(editor->gui, name); - ECardSimple *simple = editor->simple; - if (widget && GTK_IS_EDITABLE(widget)) { - GtkEditable *editable = GTK_EDITABLE(widget); - char *string = gtk_editable_get_chars(editable, 0, -1); - - if (string && *string) - e_card_simple_set_arbitrary(simple, - name, - NULL, - string); - else - e_card_simple_set_arbitrary(simple, - name, - NULL, - NULL); - g_free(string); - } -} - -static void -extract_info(EContactEditor *editor) -{ - ECard *card = editor->card; - if (card) { - ECardDate *anniversary; - ECardDate *bday; - struct tm time_struct; - time_t time_val; - int i; - GtkWidget *widget; - GList *list; - - widget = glade_xml_get_widget(editor->gui, "entry-file-as"); - if (widget && GTK_IS_EDITABLE(widget)) { - GtkEditable *editable = GTK_EDITABLE(widget); - char *string = gtk_editable_get_chars(editable, 0, -1); - if (string && *string) - gtk_object_set(GTK_OBJECT(card), - "file_as", string, - NULL); - g_free(string); - } - - for (i = 0; i < sizeof(field_mapping) / sizeof(field_mapping[0]); i++) { - extract_field(editor, card, field_mapping[i].id, field_mapping[i].key); - } - - for (list = editor->arbitrary_fields; list; list = list->next) { - extract_single_field(editor, list->data); - } - - if (editor->name) - gtk_object_set(GTK_OBJECT(card), - "name", editor->name, - NULL); - - widget = glade_xml_get_widget(editor->gui, "dateedit-anniversary"); - if (widget && GNOME_IS_DATE_EDIT(widget)) { - time_val = gnome_date_edit_get_date(GNOME_DATE_EDIT(widget)); - gmtime_r(&time_val, - &time_struct); - anniversary = g_new(ECardDate, 1); - anniversary->day = time_struct.tm_mday; - anniversary->month = time_struct.tm_mon + 1; - anniversary->year = time_struct.tm_year + 1900; - gtk_object_set(GTK_OBJECT(card), - "anniversary", anniversary, - NULL); - } - - widget = glade_xml_get_widget(editor->gui, "dateedit-birthday"); - if (widget && GNOME_IS_DATE_EDIT(widget)) { - time_val = gnome_date_edit_get_date(GNOME_DATE_EDIT(widget)); - gmtime_r(&time_val, - &time_struct); - bday = g_new(ECardDate, 1); - bday->day = time_struct.tm_mday; - bday->month = time_struct.tm_mon + 1; - bday->year = time_struct.tm_year + 1900; - gtk_object_set(GTK_OBJECT(card), - "birth_date", bday, - NULL); - } - } -} diff --git a/addressbook/gui/contact-editor/e-contact-editor.h b/addressbook/gui/contact-editor/e-contact-editor.h deleted file mode 100644 index de14b84ca3..0000000000 --- a/addressbook/gui/contact-editor/e-contact-editor.h +++ /dev/null @@ -1,114 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-contact-editor.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_CONTACT_EDITOR_H__ -#define __E_CONTACT_EDITOR_H__ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EContactEditor - A dialog displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * card ECard * RW The card currently being edited - */ - -#define E_CONTACT_EDITOR_TYPE (e_contact_editor_get_type ()) -#define E_CONTACT_EDITOR(obj) (GTK_CHECK_CAST ((obj), E_CONTACT_EDITOR_TYPE, EContactEditor)) -#define E_CONTACT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_EDITOR_TYPE, EContactEditorClass)) -#define E_IS_CONTACT_EDITOR(obj) (GTK_CHECK_TYPE ((obj), E_CONTACT_EDITOR_TYPE)) -#define E_IS_CONTACT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_EDITOR_TYPE)) - - -typedef struct _EContactEditor EContactEditor; -typedef struct _EContactEditorClass EContactEditorClass; - -struct _EContactEditor -{ - GtkObject object; - - /* item specific fields */ - ECard *card; - ECardSimple *simple; - - /* UI handler */ - BonoboUIHandler *uih; - - GladeXML *gui; - GtkWidget *app; - GnomeUIInfo *email_info; - GnomeUIInfo *phone_info; - GnomeUIInfo *address_info; - GtkWidget *email_popup; - GtkWidget *phone_popup; - GtkWidget *address_popup; - GList *email_list; - GList *phone_list; - GList *address_list; - - ECardName *name; - char *company; - - ECardSimpleEmailId email_choice; - ECardSimplePhoneId phone_choice[4]; - ECardSimpleAddressId address_choice; - - GList *arbitrary_fields; - - /* Whether we are editing a new card or an existing one */ - guint is_new_card : 1; -}; - -struct _EContactEditorClass -{ - GtkObjectClass parent_class; - - /* Notification signals */ - - void (* add_card) (EContactEditor *ce, ECard *card); - void (* commit_card) (EContactEditor *ce, ECard *card); - void (* delete_card) (EContactEditor *ce, ECard *card); - void (* editor_closed) (EContactEditor *ce); -}; - - -EContactEditor *e_contact_editor_new (ECard *card, gboolean is_new_card); -GtkType e_contact_editor_get_type (void); - - -gboolean e_contact_editor_confirm_delete(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_CONTACT_EDITOR_H__ */ diff --git a/addressbook/gui/contact-editor/e-contact-save-as.c b/addressbook/gui/contact-editor/e-contact-save-as.c deleted file mode 100644 index 51cb2619e7..0000000000 --- a/addressbook/gui/contact-editor/e-contact-save-as.c +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-contact-editor.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include - -typedef struct { - GtkFileSelection *filesel; - ECard *card; -} SaveAsInfo; - -static void -save_it(GtkWidget *widget, SaveAsInfo *info) -{ - char *vcard = e_card_get_vcard(info->card); - const char *filename = gtk_file_selection_get_filename(info->filesel); - e_write_file(filename, vcard, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC); - g_free(vcard); - gtk_object_unref(GTK_OBJECT(info->card)); - gtk_widget_destroy(GTK_WIDGET(info->filesel)); - g_free(info); -} - -static void -close_it(GtkWidget *widget, SaveAsInfo *info) -{ - gtk_object_unref(GTK_OBJECT(info->card)); - gtk_widget_destroy(GTK_WIDGET(info->filesel)); - g_free(info); -} - -static void -delete_it(GtkWidget *widget, SaveAsInfo *info) -{ - gtk_object_unref(GTK_OBJECT(info->card)); - g_free(info); -} - -void -e_contact_save_as(char *title, ECard *card) -{ - GtkFileSelection *filesel; - SaveAsInfo *info = g_new(SaveAsInfo, 1); - - filesel = GTK_FILE_SELECTION(gtk_file_selection_new(title)); - - info->filesel = filesel; - info->card = e_card_duplicate(card); - - gtk_signal_connect(GTK_OBJECT(filesel->ok_button), "clicked", - save_it, info); - gtk_signal_connect(GTK_OBJECT(filesel->cancel_button), "clicked", - close_it, info); - gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", - delete_it, info); - gtk_widget_show(GTK_WIDGET(filesel)); -} diff --git a/addressbook/gui/contact-editor/e-contact-save-as.h b/addressbook/gui/contact-editor/e-contact-save-as.h deleted file mode 100644 index e6af13e8fd..0000000000 --- a/addressbook/gui/contact-editor/e-contact-save-as.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-contact-save-as.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_CONTACT_SAVE_AS_H__ -#define __E_CONTACT_SAVE_AS_H__ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -void -e_contact_save_as(gchar *title, ECard *card); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_CONTACT_EDITOR_H__ */ diff --git a/addressbook/gui/contact-editor/email.png b/addressbook/gui/contact-editor/email.png deleted file mode 100644 index f3ff02e343..0000000000 Binary files a/addressbook/gui/contact-editor/email.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/fullname-strings.h b/addressbook/gui/contact-editor/fullname-strings.h deleted file mode 100644 index 0c84dfdc8f..0000000000 --- a/addressbook/gui/contact-editor/fullname-strings.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("Check Full Name"); -gchar *s = N_("_Title:"); -gchar *s = N_("_First:"); -gchar *s = N_("_Middle:"); -gchar *s = N_("_Last:"); -gchar *s = N_("_Suffix:"); -gchar *s = N_("\n" - "Mr.\n" - "Mrs.\n" - "Dr.\n" - ""); -gchar *s = N_("\n" - "Sr.\n" - "Jr.\n" - "I\n" - "II\n" - "III\n" - "Esq.\n" - ""); diff --git a/addressbook/gui/contact-editor/fullname.glade b/addressbook/gui/contact-editor/fullname.glade deleted file mode 100644 index 8f811c5616..0000000000 --- a/addressbook/gui/contact-editor/fullname.glade +++ /dev/null @@ -1,391 +0,0 @@ - - - - - fullname - fullname - - src - pixmaps - C - True - True - True - False - False - False - True - interface.c - interface.h - callbacks.c - callbacks.h - support.c - support.h - True - fullname-strings.h - - - - GnomeDialog - dialog-checkfullname - False - Check Full Name - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - True - True - True - False - False - False - - - GtkVBox - GnomeDialog:vbox - vbox-container - False - 8 - - 4 - True - True - - - - GtkTable - table-checkfullname - 8 - 5 - 3 - False - 6 - 21 - - 0 - True - True - - - - GtkAccelLabel - accellabel1 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel2 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel3 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel4 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 3 - 4 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAccelLabel - accellabel5 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 4 - 5 - 0 - 0 - False - False - False - False - True - True - - - - - GtkCombo - combo-title - False - True - False - True - False - -Mr. -Mrs. -Dr. - - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - GtkEntry - GtkCombo:entry - entry-title - True - True - True - 0 - - - - - - GtkCombo - combo-suffix - False - True - False - True - False - -Sr. -Jr. -I -II -III -Esq. - - - 1 - 2 - 4 - 5 - 0 - 0 - True - False - False - False - True - False - - - - GtkEntry - GtkCombo:entry - entry-suffix - True - True - True - 0 - - - - - - GtkEntry - entry-first - True - True - True - 0 - - - 1 - 3 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-middle - True - True - True - 0 - - - 1 - 3 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry-last - True - True - True - 0 - - - 1 - 3 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - - GtkHButtonBox - GnomeDialog:action_area - hbuttonbox1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button1 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button2 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - - diff --git a/addressbook/gui/contact-editor/head.png b/addressbook/gui/contact-editor/head.png deleted file mode 100644 index ca00b75f92..0000000000 Binary files a/addressbook/gui/contact-editor/head.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/netfreebusy.png b/addressbook/gui/contact-editor/netfreebusy.png deleted file mode 100644 index 09ec8a2a5c..0000000000 Binary files a/addressbook/gui/contact-editor/netfreebusy.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/netmeeting.png b/addressbook/gui/contact-editor/netmeeting.png deleted file mode 100644 index 4cb90c121e..0000000000 Binary files a/addressbook/gui/contact-editor/netmeeting.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/phone.png b/addressbook/gui/contact-editor/phone.png deleted file mode 100644 index ebec84ba0b..0000000000 Binary files a/addressbook/gui/contact-editor/phone.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/snailmail.png b/addressbook/gui/contact-editor/snailmail.png deleted file mode 100644 index 647ae8f68c..0000000000 Binary files a/addressbook/gui/contact-editor/snailmail.png and /dev/null differ diff --git a/addressbook/gui/contact-editor/test-editor.c b/addressbook/gui/contact-editor/test-editor.c deleted file mode 100644 index 80db2fe848..0000000000 --- a/addressbook/gui/contact-editor/test-editor.c +++ /dev/null @@ -1,142 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * test-editor.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include -#include -#include "e-contact-editor.h" - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@helixcode.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - -static char * -read_file (char *name) -{ - int len; - char buff[65536]; - char line[1024]; - FILE *f; - - f = fopen (name, "r"); - if (f == NULL) - g_error ("Unable to open %s!\n", name); - - len = 0; - while (fgets (line, sizeof (line), f) != NULL) { - strcpy (buff + len, line); - len += strlen (line); - } - - fclose (f); - - return g_strdup (buff); -} - -/* Callback used when a contact editor is closed */ -static void -editor_closed_cb (EContactEditor *ce, gpointer data) -{ - static int count = 2; - - count--; - gtk_object_unref (GTK_OBJECT (ce)); - - if (count == 0) - exit (0); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Contact Editor Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the contact editor canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - char *cardstr; - EContactEditor *ce; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Contact Editor Test", VERSION, argc, argv); - - glade_gnome_init (); - - cardstr = NULL; - if (argc == 2) - cardstr = read_file (argv [1]); - - if (cardstr == NULL) - cardstr = TEST_VCARD; - - ce = e_contact_editor_new (e_card_new (cardstr), TRUE); - gtk_signal_connect (GTK_OBJECT (ce), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), NULL); - - ce = e_contact_editor_new (e_card_new (cardstr), TRUE); - gtk_signal_connect (GTK_OBJECT (ce), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), NULL); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/contact-editor/web.png b/addressbook/gui/contact-editor/web.png deleted file mode 100644 index 3211a11b19..0000000000 Binary files a/addressbook/gui/contact-editor/web.png and /dev/null differ diff --git a/addressbook/gui/minicard/.cvsignore b/addressbook/gui/minicard/.cvsignore deleted file mode 100644 index 472fd2593f..0000000000 --- a/addressbook/gui/minicard/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -*.lo -*.la -minicard-label-test -minicard-test -minicard-view-test -minicard-widget-test -reflow-test diff --git a/addressbook/gui/minicard/Makefile.am b/addressbook/gui/minicard/Makefile.am deleted file mode 100644 index 17f6d00548..0000000000 --- a/addressbook/gui/minicard/Makefile.am +++ /dev/null @@ -1,124 +0,0 @@ -INCLUDES = \ - -DG_LOG_DOMAIN=\"e-minicard\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/addressbook/backend \ - -I$(top_builddir)/addressbook/backend \ - -I$(top_srcdir)/addressbook/contact-editor \ - -I$(top_srcdir)/widgets/e-text \ - -I$(top_srcdir)/widgets/misc \ - $(BONOBO_GNOME_CFLAGS) - -noinst_LIBRARIES = \ - libeminicard.a - -libeminicard_a_SOURCES = \ - e-minicard-control.c \ - e-minicard-control.h \ - e-minicard-label.c \ - e-minicard-label.h \ - e-minicard-view-widget.c \ - e-minicard-view-widget.h \ - e-minicard-view.c \ - e-minicard-view.h \ - e-minicard-widget.c \ - e-minicard-widget.h \ - e-minicard.c \ - e-minicard.h \ - e-reflow-sorted.c \ - e-reflow-sorted.h \ - e-reflow.c \ - e-reflow.h - -noinst_PROGRAMS = \ - minicard-widget-test \ - minicard-label-test \ - minicard-test \ - reflow-test \ - minicard-view-test - -minicard_label_test_SOURCES = \ - test-minicard-label.c - -minicard_label_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - libeminicard.a \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(top_builddir)/e-util/libeutil.la - -minicard_test_SOURCES = \ - test-minicard.c - -minicard_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - libeminicard.a \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a - -reflow_test_SOURCES = \ - test-reflow.c - -reflow_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - libeminicard.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a - -minicard_view_test_SOURCES = \ - test-minicard-view.c - -minicard_view_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - libeminicard.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a - -minicard_widget_test_SOURCES = \ - e-minicard-widget-test.c - -minicard_widget_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - libeminicard.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a diff --git a/addressbook/gui/minicard/e-minicard-control.c b/addressbook/gui/minicard/e-minicard-control.c deleted file mode 100644 index 7c1838b568..0000000000 --- a/addressbook/gui/minicard/e-minicard-control.c +++ /dev/null @@ -1,336 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-control.c - * - * Authors: - * Chris Lahey - * - * Copyright 1999, 2000, Helix Code, Inc. - */ - -#include -#include -#include - -#include "addressbook/backend/ebook/e-book.h" - -#include "e-minicard-control.h" -#include "e-minicard-widget.h" -#include "addressbook/backend/ebook/e-card.h" - -#if 0 -enum { - PROP_RUNNING -} MyArgs; - -#define RUNNING_KEY "Clock::Running" - -static void -get_prop (BonoboPropertyBag *bag, - BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GtkObject *clock = user_data; - - switch (arg_id) { - - case PROP_RUNNING: - { - gboolean b = GPOINTER_TO_UINT (gtk_object_get_data (clock, RUNNING_KEY)); - BONOBO_ARG_SET_BOOLEAN (arg, b); - break; - } - - default: - g_warning ("Unhandled arg %d", arg_id); - break; - } -} - -static void -set_prop (BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GtkClock *clock = user_data; - - switch (arg_id) { - - case PROP_RUNNING: - { - guint i; - - i = BONOBO_ARG_GET_BOOLEAN (arg); - - if (i) - gtk_clock_start (clock); - else - gtk_clock_stop (clock); - - gtk_object_set_data (GTK_OBJECT (clock), RUNNING_KEY, - GUINT_TO_POINTER (i)); - break; - } - - default: - g_warning ("Unhandled arg %d", arg_id); - break; - } -} -#endif - -/* - * Bonobo::PersistStream - * - * These two functions implement the Bonobo::PersistStream load and - * save methods which allow data to be loaded into and out of the - * BonoboObject. - */ -static char * -stream_read (Bonobo_Stream stream) -{ - Bonobo_Stream_iobuf *buffer; - CORBA_Environment ev; - char *data = NULL; - gint length = 0; - - CORBA_exception_init (&ev); - do { -#define READ_CHUNK_SIZE 65536 - Bonobo_Stream_read (stream, READ_CHUNK_SIZE, - &buffer, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - return NULL; - } - - if (buffer->_length <= 0) - break; - - data = g_realloc (data, - length + buffer->_length); - - memcpy (data + length, - buffer->_buffer, buffer->_length); - - length += buffer->_length; - - CORBA_free (buffer); - } while (1); - - CORBA_free (buffer); - CORBA_exception_free (&ev); - - if (data == NULL) - data = g_strdup(""); - - return data; -} /* stream_read */ - -/* - * This function implements the Bonobo::PersistStream:load method. - */ -static void -pstream_load (BonoboPersistStream *ps, const Bonobo_Stream stream, - Bonobo_Persist_ContentType type, void *data, - CORBA_Environment *ev) -{ - ECard *card; - char *vcard; - GtkWidget *minicard = data; - - if (type && g_strcasecmp (type, "text/vCard") != 0 && - g_strcasecmp (type, "text/x-vCard") != 0) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - if ((vcard = stream_read (stream)) == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_FileNotFound, NULL); - return; - } - - card = e_card_new(vcard); - g_free(vcard); - gtk_object_set(GTK_OBJECT(minicard), - "card", card, - NULL); - gtk_object_unref(GTK_OBJECT(card)); -} /* pstream_load */ - -/* - * This function implements the Bonobo::PersistStream:save method. - */ -static void -pstream_save (BonoboPersistStream *ps, const Bonobo_Stream stream, - Bonobo_Persist_ContentType type, void *data, - CORBA_Environment *ev) -{ - char *vcard; - ECard *card; - EMinicardWidget *minicard = data; - int length; - - if (type && g_strcasecmp (type, "text/vCard") != 0 && - g_strcasecmp (type, "text/x-vCard") != 0) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - gtk_object_get (GTK_OBJECT (minicard), - "card", &card, - NULL); - vcard = e_card_get_vcard(card); - length = strlen (vcard); - bonobo_stream_client_write (stream, vcard, length, ev); - g_free (vcard); -} /* pstream_save */ - -static CORBA_long -pstream_get_max_size (BonoboPersistStream *ps, void *data, - CORBA_Environment *ev) -{ - GtkWidget *minicard = data; - ECard *card; - char *vcard; - gint length; - - gtk_object_get (GTK_OBJECT (minicard), - "card", &card, NULL); - vcard = e_card_get_vcard(card); - length = strlen (vcard); - g_free (vcard); - - return length; -} - -static Bonobo_Persist_ContentTypeList * -pstream_get_content_types (BonoboPersistStream *ps, void *closure, - CORBA_Environment *ev) -{ - return bonobo_persist_generate_content_types (2, "text/vCard", "text/x-vCard"); -} - -static void -book_open_cb (EBook *book, EBookStatus status, gpointer closure) -{ - ECard *card = closure; - e_book_add_card(book, card, NULL, NULL); -} - -static void -save_in_addressbook(GtkWidget *button, EMinicardWidget *minicard) -{ - EBook *book; - gchar *path, *uri; - ECard *card; - - book = e_book_new (); - - if (!book) { - printf ("%s: %s(): Couldn't create EBook, bailing.\n", - __FILE__, - __FUNCTION__); - return; - } - - - path = g_concat_dir_and_file (g_get_home_dir (), - "evolution/local/Contacts/addressbook.db"); - uri = g_strdup_printf ("file://%s", path); - g_free (path); - - gtk_object_get(GTK_OBJECT(minicard), - "card", &card, - NULL); - - if (! e_book_load_uri (book, uri, book_open_cb, card)) { - printf ("error calling load_uri!\n"); - } - g_free(uri); -} - -static BonoboObject * -e_minicard_control_factory (BonoboGenericFactory *Factory, void *closure) -{ -#if 0 - BonoboPropertyBag *pb; -#endif - BonoboControl *control; - BonoboPersistStream *stream; - GtkWidget *minicard; - GtkWidget *button; - GtkWidget *vbox; - - /* Create the control. */ - - minicard = e_minicard_widget_new (); - gtk_widget_show (minicard); - - button = gtk_button_new_with_label(_("Save in addressbook")); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(save_in_addressbook), minicard); - gtk_widget_show (button); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), minicard, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); - gtk_widget_show (vbox); - - control = bonobo_control_new (vbox); - - stream = bonobo_persist_stream_new (pstream_load, pstream_save, - pstream_get_max_size, - pstream_get_content_types, - minicard); - -#if 0 - /* Create the properties. */ - pb = bonobo_property_bag_new (get_prop, set_prop, clock); - bonobo_control_set_property_bag (control, pb); - - bonobo_property_bag_add (pb, "running", PROP_RUNNING, - BONOBO_ARG_BOOLEAN, NULL, - "Whether or not the clock is running", 0); -#endif - - if (stream == NULL) { - bonobo_object_unref (BONOBO_OBJECT (control)); - return NULL; - } - - bonobo_object_add_interface (BONOBO_OBJECT (control), - BONOBO_OBJECT (stream)); - - return BONOBO_OBJECT (control); -} - -void -e_minicard_control_factory_init (void) -{ - static BonoboGenericFactory *factory = NULL; - - if (factory != NULL) - return; - -#if USING_OAF - factory = - bonobo_generic_factory_new ( - "OAFIID:control-factory:e_minicard:16bb7c25-c7d2-46dc-a5f0-a0975d0e0595", - e_minicard_control_factory, NULL); -#else - factory = - bonobo_generic_factory_new ( - "control-factory:e-minicard", - e_minicard_control_factory, NULL); -#endif - - if (factory == NULL) - g_error ("I could not register a EMinicard control factory."); -} diff --git a/addressbook/gui/minicard/e-minicard-control.gnorba b/addressbook/gui/minicard/e-minicard-control.gnorba deleted file mode 100644 index 73daffd203..0000000000 --- a/addressbook/gui/minicard/e-minicard-control.gnorba +++ /dev/null @@ -1,24 +0,0 @@ -[control-factory:clock] -type=exe -repo_id=IDL:Bonobo/GenericFactory:1.0 -description=Factory for the sample BonoboClock control -location_info=sample-control-factory - -[control:clock] -type=factory -repo_id=IDL:BonoboControl/clock-control:1.0 IDL:Bonobo/Control:1.0 -description=A sample Bonobo control which displays a clock. -location_info=control-factory:clock - -[control-factory:entry] -type=exe -repo_id=IDL:Bonobo/GenericFactory:1.0 -description=Factory for the sample GtkEntry control -location_info=sample-control-factory - -[control:entry] -type=factory -repo_id=IDL:BonoboControl/entry-control:1.0 IDL:Bonobo/Control:1.0 -description=A sample Bonbobo control wrapping a Gtk Entry widget. -location_info=control-factory:entry - diff --git a/addressbook/gui/minicard/e-minicard-control.h b/addressbook/gui/minicard/e-minicard-control.h deleted file mode 100644 index 4a0da88435..0000000000 --- a/addressbook/gui/minicard/e-minicard-control.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __E_MINICARD_CONTROL_H__ -#define __E_MINICARD_CONTROL_H__ - -#include - -void e_minicard_control_factory_init (void); - -#endif /* __E_MINICARD_CONTROL_H__ */ diff --git a/addressbook/gui/minicard/e-minicard-label.c b/addressbook/gui/minicard/e-minicard-label.c deleted file mode 100644 index e765a89f21..0000000000 --- a/addressbook/gui/minicard/e-minicard-label.c +++ /dev/null @@ -1,446 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-label.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-minicard-label.h" -#include "e-text.h" -#include -#include -#include - -static void e_minicard_label_init (EMinicardLabel *card); -static void e_minicard_label_class_init (EMinicardLabelClass *klass); -static void e_minicard_label_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_label_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static gboolean e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_minicard_label_realize (GnomeCanvasItem *item); -static void e_minicard_label_unrealize (GnomeCanvasItem *item); -static void e_minicard_label_reflow(GnomeCanvasItem *item, int flags); - -static void e_minicard_label_resize_children( EMinicardLabel *e_minicard_label ); - -static GnomeCanvasGroupClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_WIDTH, - ARG_HEIGHT, - ARG_HAS_FOCUS, - ARG_FIELD, - ARG_FIELDNAME, - ARG_TEXT_MODEL, - ARG_MAX_FIELD_NAME_WIDTH, -}; - -GtkType -e_minicard_label_get_type (void) -{ - static GtkType minicard_label_type = 0; - - if (!minicard_label_type) - { - static const GtkTypeInfo minicard_label_info = - { - "EMinicardLabel", - sizeof (EMinicardLabel), - sizeof (EMinicardLabelClass), - (GtkClassInitFunc) e_minicard_label_class_init, - (GtkObjectInitFunc) e_minicard_label_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - minicard_label_type = gtk_type_unique (gnome_canvas_group_get_type (), &minicard_label_info); - } - - return minicard_label_type; -} - -static void -e_minicard_label_class_init (EMinicardLabelClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - gtk_object_add_arg_type ("EMinicardLabel::width", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_WIDTH); - gtk_object_add_arg_type ("EMinicardLabel::height", GTK_TYPE_DOUBLE, - GTK_ARG_READABLE, ARG_HEIGHT); - gtk_object_add_arg_type ("EMinicardLabel::has_focus", GTK_TYPE_BOOL, - GTK_ARG_READWRITE, ARG_HAS_FOCUS); - gtk_object_add_arg_type ("EMinicardLabel::field", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_FIELD); - gtk_object_add_arg_type ("EMinicardLabel::fieldname", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_FIELDNAME); - gtk_object_add_arg_type ("EMinicardLabel::text_model", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_TEXT_MODEL); - gtk_object_add_arg_type ("EMinicardLabel::max_field_name_length", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_MAX_FIELD_NAME_WIDTH); - - object_class->set_arg = e_minicard_label_set_arg; - object_class->get_arg = e_minicard_label_get_arg; - /* object_class->destroy = e_minicard_label_destroy; */ - - /* GnomeCanvasItem method overrides */ - item_class->realize = e_minicard_label_realize; - item_class->unrealize = e_minicard_label_unrealize; - item_class->event = e_minicard_label_event; -} - -static void -e_minicard_label_init (EMinicardLabel *minicard_label) -{ - minicard_label->width = 10; - minicard_label->height = 10; - minicard_label->rect = NULL; - minicard_label->fieldname = NULL; - minicard_label->field = NULL; - - minicard_label->max_field_name_length = -1; - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard_label), e_minicard_label_reflow); -} - -static void -e_minicard_label_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EMinicardLabel *e_minicard_label; - - item = GNOME_CANVAS_ITEM (o); - e_minicard_label = E_MINICARD_LABEL (o); - - switch (arg_id){ - case ARG_WIDTH: - e_minicard_label->width = GTK_VALUE_DOUBLE (*arg); - e_minicard_label_resize_children(e_minicard_label); - e_canvas_item_request_reflow (item); - break; - case ARG_HAS_FOCUS: - if (e_minicard_label->field && (GTK_VALUE_ENUM(*arg) != E_FOCUS_NONE)) - e_canvas_item_grab_focus(e_minicard_label->field); - break; - case ARG_FIELD: - gnome_canvas_item_set( e_minicard_label->field, "text", GTK_VALUE_STRING (*arg), NULL ); - break; - case ARG_FIELDNAME: - gnome_canvas_item_set( e_minicard_label->fieldname, "text", GTK_VALUE_STRING (*arg), NULL ); - break; - case ARG_TEXT_MODEL: - gnome_canvas_item_set( e_minicard_label->field, "model", GTK_VALUE_OBJECT (*arg), NULL); - break; - case ARG_MAX_FIELD_NAME_WIDTH: - e_minicard_label->max_field_name_length = GTK_VALUE_DOUBLE (*arg); - break; - } -} - -static void -e_minicard_label_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardLabel *e_minicard_label; - char *temp; - ETextModel *tempmodel; - - e_minicard_label = E_MINICARD_LABEL (object); - - switch (arg_id) { - case ARG_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_minicard_label->width; - break; - case ARG_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = e_minicard_label->height; - break; - case ARG_HAS_FOCUS: - GTK_VALUE_ENUM (*arg) = e_minicard_label->has_focus ? E_FOCUS_CURRENT : E_FOCUS_NONE; - break; - case ARG_FIELD: - gtk_object_get( GTK_OBJECT( e_minicard_label->field ), "text", &temp, NULL ); - GTK_VALUE_STRING (*arg) = temp; - break; - case ARG_FIELDNAME: - gtk_object_get( GTK_OBJECT( e_minicard_label->fieldname ), "text", &temp, NULL ); - GTK_VALUE_STRING (*arg) = temp; - break; - case ARG_TEXT_MODEL: - gtk_object_get( GTK_OBJECT( e_minicard_label->field ), "model", &tempmodel, NULL ); - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(tempmodel); - break; - case ARG_MAX_FIELD_NAME_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_minicard_label->max_field_name_length; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_label_realize (GnomeCanvasItem *item) -{ - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->realize) - (* GNOME_CANVAS_ITEM_CLASS( parent_class )->realize) (item); - - e_canvas_item_request_reflow(item); - - if (!item->canvas->aa) - { - } -} - -void -e_minicard_label_construct (GnomeCanvasItem *item) -{ - EMinicardLabel *e_minicard_label; - GnomeCanvasGroup *group; - static GdkFont *font = NULL; - - if (font == NULL) { - font = gdk_font_load("lucidasans-10"); - } - - e_minicard_label = E_MINICARD_LABEL (item); - group = GNOME_CANVAS_GROUP( item ); - - e_minicard_label->rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) e_minicard_label->width - 1, - "y2", (double) e_minicard_label->height - 1, - "outline_color", NULL, - NULL ); - e_minicard_label->fieldname = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "clip_width", (double) ( e_minicard_label->width / 2 - 4 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", font, - "fill_color", "black", - NULL ); - e_canvas_item_move_absolute(e_minicard_label->fieldname, 2, 1); - - e_minicard_label->field = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", font, - "fill_color", "black", - "editable", TRUE, - NULL ); - e_canvas_item_move_absolute(e_minicard_label->field, ( e_minicard_label->width / 2 + 2), 1); - - e_canvas_item_request_reflow(item); -} - -static void -e_minicard_label_unrealize (GnomeCanvasItem *item) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (item); - - if (!item->canvas->aa) - { - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->unrealize) - (* GNOME_CANVAS_ITEM_CLASS( parent_class )->unrealize) (item); -} - -static gboolean -e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (item); - - switch( event->type ) - { - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - if ( focus_event->in ) - { - gnome_canvas_item_set( e_minicard_label->rect, - "outline_color", "grey50", - "fill_color", "grey90", - NULL ); - e_minicard_label->has_focus = TRUE; - } - else - { - gnome_canvas_item_set( e_minicard_label->rect, - "outline_color", NULL, - "fill_color", NULL, - NULL ); - e_minicard_label->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - case GDK_MOTION_NOTIFY: - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: { - gboolean return_val; -#if 0 - GnomeCanvasItem *field; - ArtPoint p; - double inv[6], affine[6]; - - field = e_minicard_label->field; - art_affine_identity (affine); - - if (field->xform != NULL) { - if (field->object.flags & GNOME_CANVAS_ITEM_AFFINE_FULL) { - art_affine_multiply (affine, affine, field->xform); - } else { - affine[4] += field->xform[0]; - affine[5] += field->xform[1]; - } - } - - art_affine_invert (inv, affine); - switch(event->type) { - case GDK_MOTION_NOTIFY: - p.x = event->motion.x; - p.y = event->motion.y; - art_affine_point (&p, &p, inv); - event->motion.x = p.x; - event->motion.y = p.y; - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - p.x = event->button.x; - p.y = event->button.y; - art_affine_point (&p, &p, inv); - event->button.x = p.x; - event->button.y = p.y; - break; - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: - p.x = event->crossing.x; - p.y = event->crossing.y; - art_affine_point (&p, &p, inv); - event->crossing.x = p.x; - event->crossing.y = p.y; - break; - default: - break; - } -#endif - gtk_signal_emit_by_name(GTK_OBJECT(e_minicard_label->field), "event", event, &return_val); - return return_val; - break; - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_minicard_label_resize_children(EMinicardLabel *e_minicard_label) -{ - double left_width; - if (e_minicard_label->max_field_name_length != -1 && ((e_minicard_label->width / 2) - 4 > e_minicard_label->max_field_name_length)) - left_width = e_minicard_label->max_field_name_length; - else - left_width = e_minicard_label->width / 2 - 4; - - gnome_canvas_item_set( e_minicard_label->fieldname, - "clip_width", (double) ( left_width ), - NULL ); - gnome_canvas_item_set( e_minicard_label->field, - "clip_width", (double) ( e_minicard_label->width - 8 - left_width ), - NULL ); -} - -static void -e_minicard_label_reflow(GnomeCanvasItem *item, int flags) -{ - EMinicardLabel *e_minicard_label = E_MINICARD_LABEL(item); - - gint old_height; - gdouble text_height; - gdouble left_width; - - old_height = e_minicard_label->height; - - gtk_object_get(GTK_OBJECT(e_minicard_label->fieldname), - "text_height", &text_height, - NULL); - - e_minicard_label->height = text_height; - - - gtk_object_get(GTK_OBJECT(e_minicard_label->field), - "text_height", &text_height, - NULL); - - if (e_minicard_label->height < text_height) - e_minicard_label->height = text_height; - e_minicard_label->height += 3; - - gnome_canvas_item_set( e_minicard_label->rect, - "x2", (double) e_minicard_label->width - 1, - "y2", (double) e_minicard_label->height - 1, - NULL ); - - if (e_minicard_label->max_field_name_length != -1 && ((e_minicard_label->width / 2) - 4 > e_minicard_label->max_field_name_length)) - left_width = e_minicard_label->max_field_name_length; - else - left_width = e_minicard_label->width / 2 - 4; - - e_canvas_item_move_absolute(e_minicard_label->field, left_width + 6, 1); - - if (old_height != e_minicard_label->height) - e_canvas_item_request_parent_reflow(item); -} - -GnomeCanvasItem * -e_minicard_label_new(GnomeCanvasGroup *parent) -{ - GnomeCanvasItem *item = gnome_canvas_item_new(parent, e_minicard_label_get_type(), NULL); - e_minicard_label_construct(item); - return item; -} - diff --git a/addressbook/gui/minicard/e-minicard-label.h b/addressbook/gui/minicard/e-minicard-label.h deleted file mode 100644 index 08eb51ee53..0000000000 --- a/addressbook/gui/minicard/e-minicard-label.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-label.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_LABEL_H__ -#define __E_MINICARD_LABEL_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardLabel - A label doing focus with non-marching ants. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * width double RW width of the label - * height double R height of the label - * field string RW text in the field label - * fieldname string RW text in the fieldname label - */ - -#define E_MINICARD_LABEL_TYPE (e_minicard_label_get_type ()) -#define E_MINICARD_LABEL(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_LABEL_TYPE, EMinicardLabel)) -#define E_MINICARD_LABEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_LABEL_TYPE, EMiniCardLabelClass)) -#define E_IS_MINICARD_LABEL(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_LABEL_TYPE)) -#define E_IS_MINICARD_LABEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_LABEL_TYPE)) - - -typedef struct _EMinicardLabel EMinicardLabel; -typedef struct _EMinicardLabelClass EMinicardLabelClass; - -struct _EMinicardLabel -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - double width; - double height; - double max_field_name_length; - GnomeCanvasItem *fieldname; - GnomeCanvasItem *field; - GnomeCanvasItem *rect; - - gboolean has_focus; -}; - -struct _EMinicardLabelClass -{ - GnomeCanvasGroupClass parent_class; -}; - - -GtkType e_minicard_label_get_type (void); -GnomeCanvasItem *e_minicard_label_new(GnomeCanvasGroup *parent); -void e_minicard_label_construct (GnomeCanvasItem *item); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_LABEL_H__ */ diff --git a/addressbook/gui/minicard/e-minicard-view-widget.c b/addressbook/gui/minicard/e-minicard-view-widget.c deleted file mode 100644 index cd1a999f14..0000000000 --- a/addressbook/gui/minicard/e-minicard-view-widget.c +++ /dev/null @@ -1,267 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-view-widget.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-minicard-view-widget.h" -static void e_minicard_view_widget_init (EMinicardViewWidget *widget); -static void e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass); -static void e_minicard_view_widget_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_view_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_view_widget_destroy (GtkObject *object); -static void e_minicard_view_widget_reflow (ECanvas *canvas); -static void e_minicard_view_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void e_minicard_view_widget_realize (GtkWidget *widget); - -static ECanvasClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_BOOK, - ARG_QUERY -}; - -GtkType -e_minicard_view_widget_get_type (void) -{ - static GtkType type = 0; - - if (!type) - { - static const GtkTypeInfo info = - { - "EMinicardViewWidget", - sizeof (EMinicardViewWidget), - sizeof (EMinicardViewWidgetClass), - (GtkClassInitFunc) e_minicard_view_widget_class_init, - (GtkObjectInitFunc) e_minicard_view_widget_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (e_canvas_get_type (), &info); - } - - return type; -} - -static void -e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *canvas_class; - - object_class = (GtkObjectClass*) klass; - widget_class = GTK_WIDGET_CLASS (klass); - canvas_class = E_CANVAS_CLASS (klass); - - parent_class = gtk_type_class (e_canvas_get_type ()); - - gtk_object_add_arg_type ("EMinicardViewWidget::book", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_BOOK); - gtk_object_add_arg_type ("EMinicardViewWidget::query", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_QUERY); - - object_class->set_arg = e_minicard_view_widget_set_arg; - object_class->get_arg = e_minicard_view_widget_get_arg; - object_class->destroy = e_minicard_view_widget_destroy; - - widget_class->realize = e_minicard_view_widget_realize; - widget_class->size_allocate = e_minicard_view_widget_size_allocate; - - canvas_class->reflow = e_minicard_view_widget_reflow; -} - -static void -e_minicard_view_widget_init (EMinicardViewWidget *view) -{ - view->emv = NULL; - view->rect = NULL; - - view->book = NULL; - view->query = NULL; -} - -GtkWidget * -e_minicard_view_widget_new (void) -{ - return GTK_WIDGET (gtk_type_new (e_minicard_view_widget_get_type ())); -} - -static void -e_minicard_view_widget_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EMinicardViewWidget *emvw; - - emvw = E_MINICARD_VIEW_WIDGET (o); - - switch (arg_id){ - case ARG_BOOK: - if (emvw->book) - gtk_object_unref(GTK_OBJECT(emvw->book)); - emvw->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); - if (emvw->book) - gtk_object_ref(GTK_OBJECT(emvw->book)); - if (emvw->emv) - gtk_object_set(GTK_OBJECT(emvw->emv), - "book", emvw->book, - NULL); - break; - case ARG_QUERY: - emvw->query = g_strdup(GTK_VALUE_STRING (*arg)); - if (emvw->emv) - gtk_object_set(GTK_OBJECT(emvw->emv), - "query", emvw->query, - NULL); - break; - } -} - -static void -e_minicard_view_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardViewWidget *emvw; - - emvw = E_MINICARD_VIEW_WIDGET (object); - - switch (arg_id) { - case ARG_BOOK: - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(emvw->book); - break; - case ARG_QUERY: - GTK_VALUE_STRING (*arg) = g_strdup(emvw->query); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_view_widget_destroy (GtkObject *object) -{ - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(object); - - if (view->book) - gtk_object_unref(GTK_OBJECT(view->book)); - g_free(view->query); - - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} - -static void -e_minicard_view_widget_realize (GtkWidget *widget) -{ - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); - - view->rect = gnome_canvas_item_new( - gnome_canvas_root( GNOME_CANVAS(view) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - - view->emv = gnome_canvas_item_new( - gnome_canvas_root( GNOME_CANVAS(view) ), - e_minicard_view_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - gtk_object_set(GTK_OBJECT(view->emv), - "book", view->book, - "query", view->query, - NULL); - - if (GTK_WIDGET_CLASS(parent_class)->realize) - GTK_WIDGET_CLASS(parent_class)->realize (widget); -} - -static void -e_minicard_view_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation) -{ - if (GTK_WIDGET_CLASS(parent_class)->size_allocate) - GTK_WIDGET_CLASS(parent_class)->size_allocate (widget, allocation); - - if (GTK_WIDGET_REALIZED(widget)) { - double width; - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); - - gnome_canvas_item_set( view->emv, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( view->emv, - "minimum_width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(view->emv), - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region (GNOME_CANVAS (view), 0, 0, width - 1, allocation->height - 1); - gnome_canvas_item_set( view->rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); - } -} - -static void -e_minicard_view_widget_reflow(ECanvas *canvas) -{ - double width; - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(canvas); - - if (E_CANVAS_CLASS(parent_class)->reflow) - E_CANVAS_CLASS(parent_class)->reflow (canvas); - - gtk_object_get(GTK_OBJECT(view->emv), - "width", &width, - NULL); - width = MAX(width, GTK_WIDGET(canvas)->allocation.width); - gnome_canvas_set_scroll_region(GNOME_CANVAS(canvas), 0, 0, width - 1, GTK_WIDGET(canvas)->allocation.width - 1); - gnome_canvas_item_set( view->rect, - "x2", (double) width, - "y2", (double) GTK_WIDGET(canvas)->allocation.height, - NULL ); -} - -void -e_minicard_view_widget_remove_selection(EMinicardViewWidget *view, - EBookCallback cb, - gpointer closure) -{ - if (view->emv) - e_minicard_view_remove_selection(E_MINICARD_VIEW(view->emv), cb, closure); -} - -void e_minicard_view_widget_jump_to_letter (EMinicardViewWidget *view, - char letter) -{ - if (view->emv) - e_minicard_view_jump_to_letter(E_MINICARD_VIEW(view->emv), letter); -} diff --git a/addressbook/gui/minicard/e-minicard-view-widget.h b/addressbook/gui/minicard/e-minicard-view-widget.h deleted file mode 100644 index 340fb1e03c..0000000000 --- a/addressbook/gui/minicard/e-minicard-view-widget.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view-widget.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_VIEW_WIDGET_H__ -#define __E_MINICARD_VIEW_WIDGET_H__ - -#include -#include "e-minicard-view.h" -#include "e-util/e-canvas.h" -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_MINICARD_VIEW_WIDGET_TYPE (e_minicard_view_widget_get_type ()) -#define E_MINICARD_VIEW_WIDGET(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_VIEW_WIDGET_TYPE, EMinicardViewWidget)) -#define E_MINICARD_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_VIEW_WIDGET_TYPE, EMinicardViewWidgetClass)) -#define E_IS_MINICARD_VIEW_WIDGET(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_VIEW_WIDGET_TYPE)) -#define E_IS_MINICARD_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_VIEW_WIDGET_TYPE)) - - -typedef struct _EMinicardViewWidget EMinicardViewWidget; -typedef struct _EMinicardViewWidgetClass EMinicardViewWidgetClass; - -struct _EMinicardViewWidget -{ - ECanvas parent; - - GnomeCanvasItem *rect; - GnomeCanvasItem *emv; - - EBook *book; - char *query; -}; - -struct _EMinicardViewWidgetClass -{ - ECanvasClass parent_class; -}; - -GtkType e_minicard_view_widget_get_type (void); -void e_minicard_view_widget_remove_selection (EMinicardViewWidget *view, - EBookCallback cb, - gpointer closure); -void e_minicard_view_widget_jump_to_letter (EMinicardViewWidget *view, - char letter); - -GtkWidget *e_minicard_view_widget_new (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_MINICARD_VIEW_WIDGET_H__ */ diff --git a/addressbook/gui/minicard/e-minicard-view.c b/addressbook/gui/minicard/e-minicard-view.c deleted file mode 100644 index 011ff9158f..0000000000 --- a/addressbook/gui/minicard/e-minicard-view.c +++ /dev/null @@ -1,432 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-view.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-minicard-view.h" -#include "e-minicard.h" -#include "e-contact-editor.h" -static void e_minicard_view_init (EMinicardView *reflow); -static void e_minicard_view_class_init (EMinicardViewClass *klass); -static void e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_view_destroy (GtkObject *object); -static gboolean e_minicard_view_event (GnomeCanvasItem *item, GdkEvent *event); -static void canvas_destroy (GtkObject *object, EMinicardView *view); -static void disconnect_signals (EMinicardView *view); - -static EReflowSortedClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_BOOK, - ARG_QUERY -}; - -GtkType -e_minicard_view_get_type (void) -{ - static GtkType reflow_type = 0; - - if (!reflow_type) - { - static const GtkTypeInfo reflow_info = - { - "EMinicardView", - sizeof (EMinicardView), - sizeof (EMinicardViewClass), - (GtkClassInitFunc) e_minicard_view_class_init, - (GtkObjectInitFunc) e_minicard_view_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - reflow_type = gtk_type_unique (e_reflow_sorted_get_type (), &reflow_info); - } - - return reflow_type; -} - -static void -e_minicard_view_class_init (EMinicardViewClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (e_reflow_sorted_get_type ()); - - gtk_object_add_arg_type ("EMinicardView::book", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_BOOK); - gtk_object_add_arg_type ("EMinicardView::query", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_QUERY); - - object_class->set_arg = e_minicard_view_set_arg; - object_class->get_arg = e_minicard_view_get_arg; - object_class->destroy = e_minicard_view_destroy; - - item_class->event = e_minicard_view_event; - - /* GnomeCanvasItem method overrides */ -} - -static void -e_minicard_view_init (EMinicardView *view) -{ - view->book = NULL; - view->query = g_strdup("(contains \"x-evolution-any-field\" \"\")"); - view->book_view = NULL; - view->get_view_idle = 0; - view->create_card_id = 0; - view->remove_card_id = 0; - view->modify_card_id = 0; - view->canvas_destroy_id = 0; - - gtk_object_set(GTK_OBJECT(view), - "empty_message", _("\n\nThere are no items to show in this view\n\n" - "Double-click here to create a new Contact."), - NULL); - - E_REFLOW_SORTED(view)->compare_func = (GCompareFunc) e_minicard_compare; - E_REFLOW_SORTED(view)->string_func = (EReflowStringFunc) e_minicard_get_card_id; -} - -static void -create_card(EBookView *book_view, const GList *cards, EMinicardView *view) -{ - for (; cards; cards = g_list_next(cards)) { - GnomeCanvasItem *item = gnome_canvas_item_new(GNOME_CANVAS_GROUP(view), - e_minicard_get_type(), - "card", cards->data, - NULL); - e_reflow_add_item(E_REFLOW(view), item); - } -} - -static void -modify_card(EBookView *book_view, const GList *cards, EMinicardView *view) -{ - for (; cards; cards = g_list_next(cards)) { - ECard *card = cards->data; - gchar *id = e_card_get_id(card); - GnomeCanvasItem *item = e_reflow_sorted_get_item(E_REFLOW_SORTED(view), id); - if (item && !GTK_OBJECT_DESTROYED(item)) { - gnome_canvas_item_set(item, - "card", card, - NULL); - e_reflow_sorted_reorder_item(E_REFLOW_SORTED(view), id); - } - } -} - -static void -remove_card(EBookView *book_view, const char *id, EMinicardView *view) -{ - e_reflow_sorted_remove_item(E_REFLOW_SORTED(view), id); -} - -static void -book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure) -{ - EMinicardView *view = closure; - disconnect_signals(view); - if (view->book_view) - gtk_object_unref(GTK_OBJECT(view->book_view)); - - if (!view->canvas_destroy_id) - view->canvas_destroy_id = - gtk_signal_connect(GTK_OBJECT(GNOME_CANVAS_ITEM(view)->canvas), - "destroy", GTK_SIGNAL_FUNC(canvas_destroy), - view); - - view->book_view = book_view; - if (view->book_view) - gtk_object_ref(GTK_OBJECT(view->book_view)); - - - view->create_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), - "card_added", - GTK_SIGNAL_FUNC(create_card), - view); - view->remove_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), - "card_removed", - GTK_SIGNAL_FUNC(remove_card), - view); - view->modify_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), - "card_changed", - GTK_SIGNAL_FUNC(modify_card), - view); - - g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_unref, NULL); - g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_destroy, NULL); - g_list_free(E_REFLOW(view)->items); - E_REFLOW(view)->items = NULL; - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(view)); -} - -static gboolean -get_view(EMinicardView *view) -{ - if (view->book && view->query) - e_book_get_book_view(view->book, view->query, book_view_loaded, view); - - view->get_view_idle = 0; - return FALSE; -} - -static void -e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EMinicardView *view; - - item = GNOME_CANVAS_ITEM (o); - view = E_MINICARD_VIEW (o); - - switch (arg_id){ - case ARG_BOOK: - if (view->book) - gtk_object_unref(GTK_OBJECT(view->book)); - if (GTK_VALUE_OBJECT (*arg)) { - view->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); - gtk_object_ref(GTK_OBJECT(view->book)); - if (view->get_view_idle == 0) - view->get_view_idle = g_idle_add((GSourceFunc)get_view, view); - } - else - view->book = NULL; - break; - case ARG_QUERY: - g_free(view->query); - view->query = g_strdup(GTK_VALUE_STRING (*arg)); - if (view->get_view_idle == 0) - view->get_view_idle = g_idle_add((GSourceFunc)get_view, view); - break; - } -} - -static void -e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardView *e_minicard_view; - - e_minicard_view = E_MINICARD_VIEW (object); - - switch (arg_id) { - case ARG_BOOK: - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_minicard_view->book); - break; - case ARG_QUERY: - GTK_VALUE_STRING (*arg) = g_strdup(e_minicard_view->query); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_view_destroy (GtkObject *object) -{ - EMinicardView *view = E_MINICARD_VIEW(object); - - if (view->get_view_idle) - g_source_remove(view->get_view_idle); - if (view->canvas_destroy_id) - gtk_signal_disconnect(GTK_OBJECT (GNOME_CANVAS_ITEM(view)->canvas), - view->canvas_destroy_id); - disconnect_signals(view); - g_free(view->query); - if (view->book) - gtk_object_unref(GTK_OBJECT(view->book)); - if (view->book_view) - gtk_object_unref(GTK_OBJECT(view->book_view)); - - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} - -static void -card_added_cb (EBook* book, EBookStatus status, const char *id, - gpointer user_data) -{ - g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__); -} - -static void -card_changed_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - g_print ("%s: %s(): a card was changed with status %d\n", __FILE__, __FUNCTION__, status); -} - -/* Callback for the add_card signal from the contact editor */ -static void -add_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_add_card (book, card, card_added_cb, NULL); -} - -/* Callback for the commit_card signal from the contact editor */ -static void -commit_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_commit_card (book, card, card_changed_cb, NULL); -} - -/* Callback used when the contact editor is closed */ -static void -editor_closed_cb (EContactEditor *ce, gpointer data) -{ - gtk_object_unref (GTK_OBJECT (ce)); -} - -static gboolean -e_minicard_view_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardView *view; - - view = E_MINICARD_VIEW (item); - - switch( event->type ) { - case GDK_2BUTTON_PRESS: - if (((GdkEventButton *)event)->button == 1) - { - ECard *card; - EContactEditor *ce; - EBook *book; - - card = e_card_new(""); - - gtk_object_get(GTK_OBJECT(view), "book", &book, NULL); - g_assert (E_IS_BOOK (book)); - - ce = e_contact_editor_new (card, TRUE); - - gtk_signal_connect (GTK_OBJECT (ce), "add_card", - GTK_SIGNAL_FUNC (add_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "commit_card", - GTK_SIGNAL_FUNC (commit_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), NULL); - - gtk_object_sink(GTK_OBJECT(card)); - } - return TRUE; - default: - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->event) - return GNOME_CANVAS_ITEM_CLASS(parent_class)->event(item, event); - else - return FALSE; - break; - } -} - -static void -disconnect_signals(EMinicardView *view) -{ - if (view->book_view && view->create_card_id) - gtk_signal_disconnect(GTK_OBJECT (view->book_view), - view->create_card_id); - if (view->book_view && view->remove_card_id) - gtk_signal_disconnect(GTK_OBJECT (view->book_view), - view->remove_card_id); - if (view->book_view && view->modify_card_id) - gtk_signal_disconnect(GTK_OBJECT (view->book_view), - view->modify_card_id); - - view->create_card_id = 0; - view->remove_card_id = 0; - view->modify_card_id = 0; -} - -static void -canvas_destroy(GtkObject *object, EMinicardView *view) -{ - disconnect_signals(view); -} - -void -e_minicard_view_remove_selection(EMinicardView *view, - EBookCallback cb, - gpointer closure) -{ - if (view->book) { - EReflow *reflow = E_REFLOW(view); - GList *list; - for (list = reflow->items; list; list = g_list_next(list)) { - GnomeCanvasItem *item = list->data; - gboolean has_focus; - gtk_object_get(GTK_OBJECT(item), - "has_focus", &has_focus, - NULL); - if (has_focus) { - ECard *card; - gtk_object_get(GTK_OBJECT(item), - "card", &card, - NULL); - e_book_remove_card(view->book, card, cb, closure); - return; - } - } - } -} - -static int -compare_to_letter(EMinicard *card, char *letter) -{ - g_return_val_if_fail(card != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(card), 0); - - if (*letter == '1') - return 1; - - if (card->card) { - char *file_as; - gtk_object_get(GTK_OBJECT(card->card), - "file_as", &file_as, - NULL); - if (file_as) - return strncasecmp(file_as, letter, 1); - else - return 0; - } else { - return 0; - } -} - -void e_minicard_view_jump_to_letter (EMinicardView *view, - char letter) -{ - e_reflow_sorted_jump(E_REFLOW_SORTED(view), - (GCompareFunc) compare_to_letter, - &letter); -} diff --git a/addressbook/gui/minicard/e-minicard-view.h b/addressbook/gui/minicard/e-minicard-view.h deleted file mode 100644 index a166a6ade1..0000000000 --- a/addressbook/gui/minicard/e-minicard-view.h +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_VIEW_H__ -#define __E_MINICARD_VIEW_H__ - -#include -#include "e-reflow-sorted.h" -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardView - A canvas item container. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * book EBook RW book to query - * query string RW query string - * - * From EReflowSorted: (you should really know what you're doing if you set these.) - * compare_func GCompareFunc RW compare function - * string_func EReflowStringFunc RW string function - * - * From EReflow: - * minimum_width double RW minimum width of the reflow. width >= minimum_width - * width double R width of the reflow - * height double RW height of the reflow - */ - -#define E_MINICARD_VIEW_TYPE (e_minicard_view_get_type ()) -#define E_MINICARD_VIEW(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_VIEW_TYPE, EMinicardView)) -#define E_MINICARD_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_VIEW_TYPE, EMinicardViewClass)) -#define E_IS_MINICARD_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_VIEW_TYPE)) -#define E_IS_MINICARD_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_VIEW_TYPE)) - - -typedef struct _EMinicardView EMinicardView; -typedef struct _EMinicardViewClass EMinicardViewClass; - -struct _EMinicardView -{ - EReflowSorted parent; - - /* item specific fields */ - EBook *book; - char *query; - EBookView *book_view; - - int get_view_idle; - - int canvas_destroy_id; - - int create_card_id, remove_card_id, modify_card_id; -}; - -struct _EMinicardViewClass -{ - EReflowSortedClass parent_class; -}; - -GtkType e_minicard_view_get_type (void); -void e_minicard_view_remove_selection (EMinicardView *view, - EBookCallback cb, - gpointer closure); -void e_minicard_view_jump_to_letter (EMinicardView *view, - char letter); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_VIEW_H__ */ diff --git a/addressbook/gui/minicard/e-minicard-widget-test.c b/addressbook/gui/minicard/e-minicard-widget-test.c deleted file mode 100644 index f6489f2a6a..0000000000 --- a/addressbook/gui/minicard/e-minicard-widget-test.c +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"ORG:Helix Code, Inc. -" \ -"TITLE:Head Geek -" \ -"ROLE:Programmer/Executive -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@helixcode.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - -#include "config.h" - -#include -#include "e-minicard-widget.h" - -/* This is a horrible thing to do, but it is just a test. */ - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Widget Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the minicard widget" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *minicard; - ECard *card; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Widget Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Widget Test", NULL); - - minicard = e_minicard_widget_new(); - card = e_card_new(TEST_VCARD); - gtk_object_set(GTK_OBJECT(minicard), - "card", card, - NULL); - - gnome_app_set_contents( GNOME_APP( app ), minicard ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/minicard/e-minicard-widget.c b/addressbook/gui/minicard/e-minicard-widget.c deleted file mode 100644 index 3f765425e4..0000000000 --- a/addressbook/gui/minicard/e-minicard-widget.c +++ /dev/null @@ -1,236 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-table-field-chooser.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-minicard-widget.h" -#include "e-minicard.h" - -static void e_minicard_widget_init (EMinicardWidget *card); -static void e_minicard_widget_class_init (EMinicardWidgetClass *klass); -static void e_minicard_widget_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_widget_destroy (GtkObject *object); -static void e_minicard_widget_size_request (GtkWidget *widget, GtkRequisition *requisition); -static void e_minicard_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void e_minicard_widget_reflow (ECanvas *canvas); - -static ECanvasClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_CARD, -}; - -GtkType -e_minicard_widget_get_type (void) -{ - static GtkType type = 0; - - if (!type) - { - static const GtkTypeInfo info = - { - "EMinicardWidget", - sizeof (EMinicardWidget), - sizeof (EMinicardWidgetClass), - (GtkClassInitFunc) e_minicard_widget_class_init, - (GtkObjectInitFunc) e_minicard_widget_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (e_canvas_get_type (), &info); - } - - return type; -} - -static void -e_minicard_widget_class_init (EMinicardWidgetClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *ecanvas_class; - - object_class = GTK_OBJECT_CLASS(klass); - widget_class = GTK_WIDGET_CLASS(klass); - ecanvas_class = E_CANVAS_CLASS(klass); - - parent_class = gtk_type_class (e_canvas_get_type ()); - - object_class->set_arg = e_minicard_widget_set_arg; - object_class->get_arg = e_minicard_widget_get_arg; - object_class->destroy = e_minicard_widget_destroy; - - widget_class->size_request = e_minicard_widget_size_request; - widget_class->size_allocate = e_minicard_widget_size_allocate; - - ecanvas_class->reflow = e_minicard_widget_reflow; - - gtk_object_add_arg_type ("EMinicardWidget::card", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_CARD); -} - -static void -e_minicard_widget_size_request(GtkWidget *widget, GtkRequisition *requisition) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(widget); - gtk_object_get(GTK_OBJECT(emw->item), - "height", &height, - NULL); - if (height <= 0) - height = 1; - widget->requisition.height = height; - widget->requisition.width = 200; - requisition->height = height; - requisition->width = 200; -} - -static void -e_minicard_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(widget); - gnome_canvas_item_set( emw->item, - "width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(emw->item), - "height", &height, - NULL); - height = MAX(height, allocation->height); - gnome_canvas_set_scroll_region(GNOME_CANVAS( emw ), 0, 0, allocation->width - 1, height - 1); - gnome_canvas_item_set( emw->rect, - "x2", (double) allocation->width, - "y2", (double) height, - NULL ); - if (GTK_WIDGET_CLASS(parent_class)->size_allocate) - GTK_WIDGET_CLASS(parent_class)->size_allocate(widget, allocation); -} - -static void e_minicard_widget_reflow(ECanvas *canvas) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(canvas); - gtk_object_get(GTK_OBJECT(emw->item), - "height", &height, - NULL); - - height = MAX(height, GTK_WIDGET(emw)->allocation.height); - - gnome_canvas_set_scroll_region (GNOME_CANVAS(emw), 0, 0, GTK_WIDGET(emw)->allocation.width - 1, height - 1); - gnome_canvas_item_set( emw->rect, - "x2", (double) GTK_WIDGET(emw)->allocation.width, - "y2", (double) height, - NULL ); - - gtk_widget_queue_resize(GTK_WIDGET(canvas)); -} - -static void -e_minicard_widget_init (EMinicardWidget *emw) -{ - emw->rect = gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(emw)), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - - emw->item = gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(emw)), - e_minicard_get_type(), - "width", (double) 100, - NULL ); - - gnome_canvas_set_scroll_region ( GNOME_CANVAS( emw ), - 0, 0, - 100, 100 ); - - emw->card = NULL; -} - -static void -e_minicard_widget_destroy (GtkObject *object) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - if (emw->card) - gtk_object_unref(GTK_OBJECT(emw->card)); - - if (GTK_OBJECT_CLASS(parent_class)->destroy) - GTK_OBJECT_CLASS(parent_class)->destroy(object); -} - -GtkWidget* -e_minicard_widget_new (void) -{ - GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_minicard_widget_get_type ())); - return widget; -} - -static void -e_minicard_widget_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - switch (arg_id){ - case ARG_CARD: - if (emw->card) - gtk_object_unref(GTK_OBJECT(emw->card)); - if (GTK_VALUE_OBJECT(*arg)) { - emw->card = E_CARD(GTK_VALUE_OBJECT(*arg)); - gtk_object_ref(GTK_OBJECT(emw->card)); - } - else - emw->card = NULL; - if (emw->item) - gtk_object_set(GTK_OBJECT(emw->item), - "card", emw->card, - NULL); - break; - default: - break; - } -} - -static void -e_minicard_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - switch (arg_id) { - case ARG_CARD: - if (emw->card) - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(emw->card); - else - GTK_VALUE_OBJECT (*arg) = NULL; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} diff --git a/addressbook/gui/minicard/e-minicard-widget.h b/addressbook/gui/minicard/e-minicard-widget.h deleted file mode 100644 index 8a3ec0ae16..0000000000 --- a/addressbook/gui/minicard/e-minicard-widget.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-widget.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_WIDGET_H__ -#define __E_MINICARD_WIDGET_H__ - -#include -#include "addressbook/backend/ebook/e-card.h" -#include "e-util/e-canvas.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardWidget - A card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - */ - -#define E_MINICARD_WIDGET_TYPE (e_minicard_widget_get_type ()) -#define E_MINICARD_WIDGET(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_WIDGET_TYPE, EMinicardWidget)) -#define E_MINICARD_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_WIDGET_TYPE, EMinicardWidgetClass)) -#define E_IS_MINICARD_WIDGET(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_WIDGET_TYPE)) -#define E_IS_MINICARD_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_WIDGET_TYPE)) - - -typedef struct _EMinicardWidget EMinicardWidget; -typedef struct _EMinicardWidgetClass EMinicardWidgetClass; - -struct _EMinicardWidget -{ - ECanvas parent; - - /* item specific fields */ - GnomeCanvasItem *item; - - GnomeCanvasItem *rect; - ECard *card; -}; - -struct _EMinicardWidgetClass -{ - ECanvasClass parent_class; -}; - - -GtkWidget *e_minicard_widget_new(void); -GtkType e_minicard_widget_get_type (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_WIDGET_H__ */ diff --git a/addressbook/gui/minicard/e-minicard.c b/addressbook/gui/minicard/e-minicard.c deleted file mode 100644 index e9bb85c89d..0000000000 --- a/addressbook/gui/minicard/e-minicard.c +++ /dev/null @@ -1,797 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-minicard.h" -#include "e-minicard-label.h" -#include "e-text.h" -#include -#include -#include -#include -#include -#include "addressbook/printing/e-contact-print.h" -#include "e-contact-editor.h" -#include "e-contact-save-as.h" -#include "e-minicard-view.h" - -static void e_minicard_init (EMinicard *card); -static void e_minicard_class_init (EMinicardClass *klass); -static void e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_destroy (GtkObject *object); -static gboolean e_minicard_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_minicard_realize (GnomeCanvasItem *item); -static void e_minicard_unrealize (GnomeCanvasItem *item); -static void e_minicard_reflow ( GnomeCanvasItem *item, int flags ); - -static void e_minicard_resize_children( EMinicard *e_minicard ); -static void remodel( EMinicard *e_minicard ); - -static GnomeCanvasGroupClass *parent_class = NULL; - -typedef struct _EMinicardField EMinicardField; - -struct _EMinicardField { - ECardSimpleField field; - GnomeCanvasItem *label; -}; - -#define E_MINICARD_FIELD(field) ((EMinicardField *)(field)) - -static void -e_minicard_field_destroy(EMinicardField *field) -{ - gtk_object_destroy(GTK_OBJECT(field->label)); - g_free(field); -} - -/* The arguments we take */ -enum { - ARG_0, - ARG_WIDTH, - ARG_HEIGHT, - ARG_HAS_FOCUS, - ARG_CARD -}; - -GtkType -e_minicard_get_type (void) -{ - static GtkType minicard_type = 0; - - if (!minicard_type) - { - static const GtkTypeInfo minicard_info = - { - "EMinicard", - sizeof (EMinicard), - sizeof (EMinicardClass), - (GtkClassInitFunc) e_minicard_class_init, - (GtkObjectInitFunc) e_minicard_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - minicard_type = gtk_type_unique (gnome_canvas_group_get_type (), &minicard_info); - } - - return minicard_type; -} - -static void -e_minicard_class_init (EMinicardClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - gtk_object_add_arg_type ("EMinicard::width", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_WIDTH); - gtk_object_add_arg_type ("EMinicard::height", GTK_TYPE_DOUBLE, - GTK_ARG_READABLE, ARG_HEIGHT); - gtk_object_add_arg_type ("EMinicard::has_focus", GTK_TYPE_ENUM, - GTK_ARG_READWRITE, ARG_HAS_FOCUS); - gtk_object_add_arg_type ("EMinicard::card", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_CARD); - - object_class->set_arg = e_minicard_set_arg; - object_class->get_arg = e_minicard_get_arg; - object_class->destroy = e_minicard_destroy; - - /* GnomeCanvasItem method overrides */ - item_class->realize = e_minicard_realize; - item_class->unrealize = e_minicard_unrealize; - item_class->event = e_minicard_event; -} - -static void -e_minicard_init (EMinicard *minicard) -{ - /* minicard->card = NULL;*/ - minicard->rect = NULL; - minicard->fields = NULL; - minicard->width = 10; - minicard->height = 10; - minicard->has_focus = FALSE; - - minicard->card = NULL; - minicard->simple = e_card_simple_new(NULL); - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard), e_minicard_reflow); -} - -static void -e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EMinicard *e_minicard; - - item = GNOME_CANVAS_ITEM (o); - e_minicard = E_MINICARD (o); - - switch (arg_id){ - case ARG_WIDTH: - if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) { - e_minicard->width = GTK_VALUE_DOUBLE (*arg); - e_minicard_resize_children(e_minicard); - if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) - e_canvas_item_request_reflow(item); - } - break; - case ARG_HAS_FOCUS: - if (e_minicard->fields) { - if ( GTK_VALUE_ENUM(*arg) == E_FOCUS_START || - GTK_VALUE_ENUM(*arg) == E_FOCUS_CURRENT) { - gnome_canvas_item_set(E_MINICARD_FIELD(e_minicard->fields->data)->label, - "has_focus", GTK_VALUE_ENUM(*arg), - NULL); - } else if ( GTK_VALUE_ENUM(*arg) == E_FOCUS_END ) { - gnome_canvas_item_set(E_MINICARD_FIELD(g_list_last(e_minicard->fields)->data)->label, - "has_focus", GTK_VALUE_ENUM(*arg), - NULL); - } - } - else - e_canvas_item_grab_focus(item); - break; - case ARG_CARD: - if (e_minicard->card) - gtk_object_unref (GTK_OBJECT(e_minicard->card)); - e_minicard->card = E_CARD(GTK_VALUE_OBJECT (*arg)); - if (e_minicard->card) - gtk_object_ref (GTK_OBJECT(e_minicard->card)); - gtk_object_set(GTK_OBJECT(e_minicard->simple), - "card", e_minicard->card, - NULL); - remodel(e_minicard); - e_canvas_item_request_reflow(item); - break; - } -} - -static void -e_minicard_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicard *e_minicard; - - e_minicard = E_MINICARD (object); - - switch (arg_id) { - case ARG_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_minicard->width; - break; - case ARG_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = e_minicard->height; - break; - case ARG_HAS_FOCUS: - GTK_VALUE_ENUM (*arg) = e_minicard->has_focus ? E_FOCUS_CURRENT : E_FOCUS_NONE; - break; - case ARG_CARD: - e_card_simple_sync_card(e_minicard->simple); - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_minicard->card); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_destroy (GtkObject *object) -{ - EMinicard *e_minicard; - - g_return_if_fail (object != NULL); - g_return_if_fail (E_IS_MINICARD (object)); - - e_minicard = E_MINICARD (object); - - g_list_foreach(e_minicard->fields, (GFunc) e_minicard_field_destroy, NULL); - g_list_free(e_minicard->fields); - - if (e_minicard->card) - gtk_object_unref (GTK_OBJECT(e_minicard->card)); - if (e_minicard->simple) - gtk_object_unref (GTK_OBJECT(e_minicard->simple)); - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -static void -e_minicard_realize (GnomeCanvasItem *item) -{ - EMinicard *e_minicard; - GnomeCanvasGroup *group; - GtkWidget *canvas; - - e_minicard = E_MINICARD (item); - group = GNOME_CANVAS_GROUP( item ); - canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (item)->canvas); - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) (item); - - e_minicard->rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) e_minicard->width - 1, - "y2", (double) e_minicard->height - 1, - "outline_color", NULL, - NULL ); - - e_minicard->header_rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 2, - "y1", (double) 2, - "x2", (double) e_minicard->width - 3, - "y2", (double) e_minicard->height - 3, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - - e_minicard->header_text = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "width", (double) ( e_minicard->width - 12 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font", "lucidasans-bold-10", - "fill_color_gdk", &canvas->style->fg[GTK_STATE_NORMAL], - "text", "", - NULL ); - e_canvas_item_move_absolute(e_minicard->header_text, 6, 6); - - remodel(e_minicard); - e_canvas_item_request_reflow(item); - - if (!item->canvas->aa) { - } -} - -static void -e_minicard_unrealize (GnomeCanvasItem *item) -{ - EMinicard *e_minicard; - - e_minicard = E_MINICARD (item); - - if (!item->canvas->aa) - { - } - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item); -} - -static void -card_added_cb (EBook* book, EBookStatus status, const char *id, gpointer user_data) -{ - g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__); -} - -static void -card_changed_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - g_print ("%s: %s(): a card was changed with status %d\n", __FILE__, __FUNCTION__, status); -} - -static void -save_as (GtkWidget *widget, EMinicard *minicard) -{ - e_card_simple_sync_card(minicard->simple); - e_contact_save_as(_("Save as VCard"), minicard->card); -} - -static void -delete (GtkWidget *widget, EMinicard *minicard) -{ - EBook *book; - - if (e_contact_editor_confirm_delete()) { - e_card_simple_sync_card(minicard->simple); - - gtk_object_get(GTK_OBJECT(GNOME_CANVAS_ITEM(minicard)->parent), - "book", &book, - NULL); - - /* Add the card in the contact editor to our ebook */ - e_book_remove_card (book, - minicard->card, - card_changed_cb, - NULL); - } -} - -static void -print (GtkWidget *widget, EMinicard *minicard) -{ - e_card_simple_sync_card(minicard->simple); - - gtk_widget_show(e_contact_print_card_dialog_new(minicard->card)); -} - -/* Callback for the add_card signal from the contact editor */ -static void -add_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_add_card (book, card, card_added_cb, NULL); -} - -/* Callback for the commit_card signal from the contact editor */ -static void -commit_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_commit_card (book, card, card_changed_cb, NULL); -} - -/* Callback for the commit_card signal from the contact editor */ -static void -delete_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_remove_card (book, card, card_changed_cb, NULL); -} - -/* Callback used when the contact editor is closed */ -static void -editor_closed_cb (EContactEditor *ce, gpointer data) -{ - gtk_object_unref (GTK_OBJECT (ce)); -} - -static gboolean -e_minicard_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicard *e_minicard; - GtkWidget *canvas; - - e_minicard = E_MINICARD (item); - canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (item)->canvas); - - switch( event->type ) { - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - if ( focus_event->in ) { - gnome_canvas_item_set( e_minicard->rect, - "outline_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_SELECTED], - NULL ); - gnome_canvas_item_set( e_minicard->header_text, - "fill_color_gdk", &canvas->style->text[GTK_STATE_SELECTED], - NULL ); - e_minicard->has_focus = TRUE; - } else { - EBook *book = NULL; - - e_card_simple_sync_card(e_minicard->simple); - - if (E_IS_MINICARD_VIEW(GNOME_CANVAS_ITEM(e_minicard)->parent)) { - - gtk_object_get(GTK_OBJECT(GNOME_CANVAS_ITEM(e_minicard)->parent), - "book", &book, - NULL); - - } - - if (book) { - - /* Add the card in the contact editor to our ebook */ - e_book_commit_card (book, - e_minicard->card, - card_changed_cb, - NULL); - } else { - remodel(e_minicard); - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_minicard)); - } - - gnome_canvas_item_set( e_minicard->rect, - "outline_color", NULL, - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "fill_color_gdk", - &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - gnome_canvas_item_set( e_minicard->header_text, - "fill_color_gdk", - &canvas->style->fg[GTK_STATE_NORMAL], - NULL ); - e_minicard->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: - if (event->button.button == 1) { - e_canvas_item_grab_focus(item); - } else if (event->button.button == 3) { - if (E_IS_MINICARD_VIEW(item->parent)) { - EPopupMenu menu[] = { {"Save as VCard", NULL, GTK_SIGNAL_FUNC(save_as), 0}, - {"Print", NULL, GTK_SIGNAL_FUNC(print), 0}, - {"Delete", NULL, GTK_SIGNAL_FUNC(delete), 0}, - {NULL, NULL, NULL, 0}}; - e_popup_menu_run (menu, (GdkEventButton *)event, 0, 0, e_minicard); - } else { - EPopupMenu menu[] = { {"Save as VCard", NULL, GTK_SIGNAL_FUNC(save_as), 0}, - {"Print", NULL, GTK_SIGNAL_FUNC(print), 0}, - {NULL, NULL, NULL, 0}}; - e_popup_menu_run (menu, (GdkEventButton *)event, 0, 0, e_minicard); - } - } - break; - - case GDK_2BUTTON_PRESS: - if (event->button.button == 1 && E_IS_MINICARD_VIEW(item->parent)) { - EContactEditor *ce; - EBook *book = NULL; - if (E_IS_MINICARD_VIEW(item->parent)) { - - gtk_object_get(GTK_OBJECT(item->parent), - "book", &book, - NULL); - } - ce = e_contact_editor_new (e_minicard->card, FALSE); - - if (book != NULL) { - gtk_signal_connect (GTK_OBJECT (ce), "add_card", - GTK_SIGNAL_FUNC (add_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "commit_card", - GTK_SIGNAL_FUNC (commit_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "delete_card", - GTK_SIGNAL_FUNC (delete_card_cb), book); - } - - gtk_signal_connect (GTK_OBJECT (ce), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), NULL); - return TRUE; - } - break; - case GDK_KEY_PRESS: - if (event->key.keyval == GDK_Tab || - event->key.keyval == GDK_KP_Tab || - event->key.keyval == GDK_ISO_Left_Tab) { - GList *list; - for (list = e_minicard->fields; list; list = list->next) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - EFocus has_focus; - gtk_object_get(GTK_OBJECT(item), - "has_focus", &has_focus, - NULL); - if (has_focus != E_FOCUS_NONE) { - if (event->key.state & GDK_SHIFT_MASK) - list = list->prev; - else - list = list->next; - if (list) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - gnome_canvas_item_set(item, - "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START, - NULL); - return 1; - } else { - return 0; - } - } - } - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_minicard_resize_children( EMinicard *e_minicard ) -{ - GList *list; - - if (e_minicard->header_text) { - gnome_canvas_item_set( e_minicard->header_text, - "width", (double) e_minicard->width - 12, - NULL ); - } - for ( list = e_minicard->fields; list; list = g_list_next( list ) ) { - gnome_canvas_item_set( E_MINICARD_FIELD( list->data )->label, - "width", (double) e_minicard->width - 4.0, - NULL ); - } -} - -static void -field_changed (EText *text, EMinicard *e_minicard) -{ - ECardSimpleType type; - char *string; - - type = GPOINTER_TO_INT - (gtk_object_get_data(GTK_OBJECT(text), - "EMinicard:field")); - gtk_object_get(GTK_OBJECT(text), - "text", &string, - NULL); - e_card_simple_set(e_minicard->simple, - type, - string); - g_free(string); -} - -static void -add_field (EMinicard *e_minicard, ECardSimpleField field, gdouble left_width) -{ - GnomeCanvasItem *new_item; - GnomeCanvasGroup *group; - ECardSimpleType type; - EMinicardField *minicard_field; - char *name; - char *string; - - group = GNOME_CANVAS_GROUP( e_minicard ); - - type = e_card_simple_type(e_minicard->simple, field); - name = g_strdup_printf("%s:", e_card_simple_get_name(e_minicard->simple, field)); - string = e_card_simple_get(e_minicard->simple, field); - - new_item = e_minicard_label_new(group); - gnome_canvas_item_set( new_item, - "width", e_minicard->width - 4.0, - "fieldname", name, - "field", string, - "max_field_name_length", left_width, - NULL ); - gtk_signal_connect(GTK_OBJECT(E_MINICARD_LABEL(new_item)->field), - "changed", GTK_SIGNAL_FUNC(field_changed), e_minicard); - gtk_object_set_data(GTK_OBJECT(E_MINICARD_LABEL(new_item)->field), - "EMinicard:field", - GINT_TO_POINTER(field)); - - minicard_field = g_new(EMinicardField, 1); - minicard_field->field = field; - minicard_field->label = new_item; - - e_minicard->fields = g_list_append( e_minicard->fields, minicard_field); - e_canvas_item_move_absolute(new_item, 2, e_minicard->height); - g_free(name); - g_free(string); -} - -static gdouble -get_left_width(EMinicard *e_minicard) -{ - gchar *name; - ECardSimpleField field; - gdouble width = -1; - static GdkFont *font = NULL; - - if (font == NULL) { - font = gdk_font_load("lucidasans-10"); - } - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { - gdouble this_width; - name = g_strdup_printf("%s:", e_card_simple_get_name(e_minicard->simple, field)); - this_width = gdk_text_width(font, name, strlen(name)); - if (width < this_width) - width = this_width; - g_free(name); - } - return width; -} - -static void -remodel( EMinicard *e_minicard ) -{ - int count = 0; - if (e_minicard->simple) { - ECardSimpleField field; - GList *list; - char *file_as; - gdouble left_width = -1; - - if (e_minicard->header_text) { - file_as = e_card_simple_get(e_minicard->simple, E_CARD_SIMPLE_FIELD_FILE_AS); - gnome_canvas_item_set( e_minicard->header_text, - "text", file_as ? file_as : "", - NULL ); - g_free(file_as); - } - - list = e_minicard->fields; - e_minicard->fields = NULL; - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST - 2 && count < 5; field++) { - EMinicardField *minicard_field = NULL; - - if (list) - minicard_field = list->data; - if (minicard_field && minicard_field->field == field) { - GList *this_list = list; - char *string; - - string = e_card_simple_get(e_minicard->simple, field); - if (string && *string) { - e_minicard->fields = g_list_append(e_minicard->fields, minicard_field); - gtk_object_set(GTK_OBJECT(minicard_field->label), - "field", string, - NULL); - count ++; - } else { - e_minicard_field_destroy(minicard_field); - } - list = g_list_remove_link(list, this_list); - g_list_free_1(this_list); - g_free(string); - } else { - char *string; - if (left_width == -1) { - left_width = get_left_width(e_minicard); - } - - string = e_card_simple_get(e_minicard->simple, field); - if (string && *string) { - add_field(e_minicard, field, left_width); - count++; - } - g_free(string); - } - } - - g_list_foreach(list, (GFunc) e_minicard_field_destroy, NULL); - g_list_free(list); - } -} - -static void -e_minicard_reflow( GnomeCanvasItem *item, int flags ) -{ - EMinicard *e_minicard = E_MINICARD(item); - if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) { - GList *list; - gdouble text_height; - gint old_height; - - old_height = e_minicard->height; - - gtk_object_get( GTK_OBJECT( e_minicard->header_text ), - "text_height", &text_height, - NULL ); - - e_minicard->height = text_height + 10.0; - - gnome_canvas_item_set( e_minicard->header_rect, - "y2", text_height + 9.0, - NULL ); - - for(list = e_minicard->fields; list; list = g_list_next(list)) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - gtk_object_get (GTK_OBJECT(item), - "height", &text_height, - NULL); - e_canvas_item_move_absolute(item, 2, e_minicard->height); - e_minicard->height += text_height; - } - e_minicard->height += 2; - - gnome_canvas_item_set( e_minicard->rect, - "y2", (double) e_minicard->height - 1, - NULL ); - - gnome_canvas_item_set( e_minicard->rect, - "x2", (double) e_minicard->width - 1.0, - "y2", (double) e_minicard->height - 1.0, - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "x2", (double) e_minicard->width - 3.0, - NULL ); - - if (old_height != e_minicard->height) - e_canvas_item_request_parent_reflow(item); - } -} - -char * -e_minicard_get_card_id (EMinicard *minicard) -{ - g_return_val_if_fail(minicard != NULL, NULL); - g_return_val_if_fail(E_IS_MINICARD(minicard), NULL); - - if (minicard->card) { - return e_card_get_id(minicard->card); - } else { - return ""; - } -} - -int -e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2) -{ - g_return_val_if_fail(minicard1 != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(minicard1), 0); - g_return_val_if_fail(minicard2 != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(minicard2), 0); - - if (minicard1->card && minicard2->card) { - char *file_as1, *file_as2; - gtk_object_get(GTK_OBJECT(minicard1->card), - "file_as", &file_as1, - NULL); - gtk_object_get(GTK_OBJECT(minicard2->card), - "file_as", &file_as2, - NULL); - if (file_as1 && file_as2) - return strcasecmp(file_as1, file_as2); - if (file_as1) - return -1; - if (file_as2) - return 1; - return strcmp(e_minicard_get_card_id(minicard1), e_minicard_get_card_id(minicard2)); - } else { - return 0; - } -} diff --git a/addressbook/gui/minicard/e-minicard.h b/addressbook/gui/minicard/e-minicard.h deleted file mode 100644 index 47da8110c2..0000000000 --- a/addressbook/gui/minicard/e-minicard.h +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_H__ -#define __E_MINICARD_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicard - A small card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * width double RW width of the card - * height double R height of the card - * card ECard* RW Pointer to the ECard - */ - -#define E_MINICARD_TYPE (e_minicard_get_type ()) -#define E_MINICARD(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_TYPE, EMinicard)) -#define E_MINICARD_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_TYPE, EMinicardClass)) -#define E_IS_MINICARD(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_TYPE)) -#define E_IS_MINICARD_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_TYPE)) - - -typedef struct _EMinicard EMinicard; -typedef struct _EMinicardClass EMinicardClass; -typedef enum _EMinicardFocusType EMinicardFocusType; - -enum _EMinicardFocusType { - E_MINICARD_FOCUS_TYPE_START, - E_MINICARD_FOCUS_TYPE_END -}; - -struct _EMinicard -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - ECard *card; - ECardSimple *simple; - - GnomeCanvasItem *rect; - GnomeCanvasItem *header_rect; - GnomeCanvasItem *header_text; - - GList *fields; /* Of type EMinicardField */ - guint needs_remodeling : 1; - - gboolean has_focus; - - double width; - double height; -}; - -struct _EMinicardClass -{ - GnomeCanvasGroupClass parent_class; - - void (* resize) (EMinicard *minicard); -}; - - -GtkType e_minicard_get_type (void); -char *e_minicard_get_card_id (EMinicard *minicard); -int e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_H__ */ diff --git a/addressbook/gui/minicard/e-reflow-sorted.c b/addressbook/gui/minicard/e-reflow-sorted.c deleted file mode 100644 index 2d2dcee787..0000000000 --- a/addressbook/gui/minicard/e-reflow-sorted.c +++ /dev/null @@ -1,272 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-reflow-sorted.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-reflow-sorted.h" -#include -#include -#include - -static void e_reflow_sorted_init (EReflowSorted *card); -static void e_reflow_sorted_class_init (EReflowSortedClass *klass); -static void e_reflow_sorted_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_reflow_sorted_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_reflow_sorted_add_item(EReflow *e_reflow, GnomeCanvasItem *item); - -#define E_REFLOW_DIVIDER_WIDTH 2 -#define E_REFLOW_BORDER_WIDTH 7 -#define E_REFLOW_FULL_GUTTER (E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH * 2) - -static EReflowClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_COMPARE_FUNC, - ARG_STRING_FUNC -}; - -GtkType -e_reflow_sorted_get_type (void) -{ - static GtkType reflow_type = 0; - - if (!reflow_type) - { - static const GtkTypeInfo reflow_info = - { - "EReflowSorted", - sizeof (EReflowSorted), - sizeof (EReflowSortedClass), - (GtkClassInitFunc) e_reflow_sorted_class_init, - (GtkObjectInitFunc) e_reflow_sorted_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - reflow_type = gtk_type_unique (e_reflow_get_type (), &reflow_info); - } - - return reflow_type; -} - -static void -e_reflow_sorted_class_init (EReflowSortedClass *klass) -{ - GtkObjectClass *object_class; - EReflowClass *reflow_class; - - object_class = (GtkObjectClass*) klass; - reflow_class = E_REFLOW_CLASS (klass); - - parent_class = gtk_type_class (e_reflow_get_type ()); - - gtk_object_add_arg_type ("EReflowSorted::compare_func", GTK_TYPE_POINTER, - GTK_ARG_READWRITE, ARG_COMPARE_FUNC); - gtk_object_add_arg_type ("EReflowSorted::string_func", GTK_TYPE_POINTER, - GTK_ARG_READWRITE, ARG_STRING_FUNC); - - reflow_class->add_item = e_reflow_sorted_add_item; - - object_class->set_arg = e_reflow_sorted_set_arg; - object_class->get_arg = e_reflow_sorted_get_arg; -} - -static void -e_reflow_sorted_init (EReflowSorted *reflow) -{ - reflow->compare_func = NULL; - reflow->string_func = NULL; -} - -static void -e_reflow_sorted_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EReflowSorted *e_reflow_sorted; - - item = GNOME_CANVAS_ITEM (o); - e_reflow_sorted = E_REFLOW_SORTED (o); - - switch (arg_id){ - case ARG_COMPARE_FUNC: - e_reflow_sorted->compare_func = GTK_VALUE_POINTER (*arg); - break; - case ARG_STRING_FUNC: - e_reflow_sorted->string_func = GTK_VALUE_POINTER (*arg); - break; - } -} - -static void -e_reflow_sorted_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EReflowSorted *e_reflow_sorted; - - e_reflow_sorted = E_REFLOW_SORTED (object); - - switch (arg_id) { - case ARG_COMPARE_FUNC: - GTK_VALUE_POINTER (*arg) = e_reflow_sorted->compare_func; - break; - case ARG_STRING_FUNC: - GTK_VALUE_POINTER (*arg) = e_reflow_sorted->string_func; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static GList * -e_reflow_sorted_get_list(EReflowSorted *e_reflow_sorted, const gchar *id) -{ - if (e_reflow_sorted->string_func) { - EReflow *reflow = E_REFLOW(e_reflow_sorted); - GList *list; - for (list = reflow->items; list; list = g_list_next(list)) { - GnomeCanvasItem *item = list->data; - char *string = e_reflow_sorted->string_func (item); - if (string && !strcmp(string, id)) { - return list; - } - } - } - return NULL; -} - -void -e_reflow_sorted_remove_item(EReflowSorted *e_reflow_sorted, const gchar *id) -{ - GList *list; - GnomeCanvasItem *item = NULL; - - list = e_reflow_sorted_get_list(e_reflow_sorted, id); - if (list) - item = list->data; - - if (item) { - EReflow *reflow = E_REFLOW(e_reflow_sorted); - reflow->items = g_list_remove_link(reflow->items, list); - g_list_free_1(list); - gtk_object_unref(GTK_OBJECT(item)); - gtk_object_destroy(GTK_OBJECT(item)); - if ( GTK_OBJECT_FLAGS( e_reflow_sorted ) & GNOME_CANVAS_ITEM_REALIZED ) { - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_reflow_sorted)); - e_reflow_post_add_item(E_REFLOW(e_reflow_sorted), NULL); - } - } -} - -void -e_reflow_sorted_replace_item(EReflowSorted *e_reflow_sorted, GnomeCanvasItem *item) -{ - if (e_reflow_sorted->string_func) { - char *string = e_reflow_sorted->string_func (item); - e_reflow_sorted_remove_item(e_reflow_sorted, string); - e_reflow_sorted_add_item(E_REFLOW(e_reflow_sorted), item); - } -} - -GnomeCanvasItem * -e_reflow_sorted_get_item(EReflowSorted *e_reflow_sorted, const gchar *id) -{ - GList *list; - list = e_reflow_sorted_get_list(e_reflow_sorted, id); - if (list) - return list->data; - else - return NULL; -} - -void -e_reflow_sorted_reorder_item(EReflowSorted *e_reflow_sorted, const gchar *id) -{ - GList *list; - GnomeCanvasItem *item = NULL; - - list = e_reflow_sorted_get_list(e_reflow_sorted, id); - if (list) - item = list->data; - if (item) { - EReflow *reflow = E_REFLOW(e_reflow_sorted); - reflow->items = g_list_remove_link(reflow->items, list); - gtk_object_unref(GTK_OBJECT(item)); - g_list_free_1(list); - e_reflow_sorted_add_item(reflow, item); - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_reflow_sorted)); - } -} - -static void -e_reflow_sorted_add_item(EReflow *reflow, GnomeCanvasItem *item) -{ - EReflowSorted *e_reflow_sorted = E_REFLOW_SORTED(reflow); - if ( e_reflow_sorted->compare_func ) { - reflow->items = g_list_insert_sorted(reflow->items, item, e_reflow_sorted->compare_func); - gtk_object_ref(GTK_OBJECT(item)); - - if ( GTK_OBJECT_FLAGS( e_reflow_sorted ) & GNOME_CANVAS_ITEM_REALIZED ) { - gnome_canvas_item_set(item, - "width", (double) reflow->column_width, - NULL); - - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_reflow_sorted)); - } - } - e_reflow_post_add_item(reflow, item); -} - -void e_reflow_sorted_jump (EReflowSorted *sorted, - GCompareFunc compare_func, - void *value) -{ - int columns = 0; - EReflow *reflow = E_REFLOW(sorted); - GList *list; - GtkAdjustment *adjustment; - - for (list = reflow->columns; list; list = g_list_next(list)) { - if (compare_func(((GList *)list->data)->data, value) >= 0) { - GList *last = list->prev; - if (last) { - GList *walk; - for (walk = last->data; walk != list->data; walk = g_list_next(walk)) { - if (compare_func(walk->data, value) >= 0) { - columns --; - break; - } - } - } - adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(GNOME_CANVAS_ITEM(sorted)->canvas)); - gtk_adjustment_set_value(adjustment, (reflow->column_width + E_REFLOW_FULL_GUTTER) * columns); - return; - } - columns ++; - } - columns --; - adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(GNOME_CANVAS_ITEM(sorted)->canvas)); - gtk_adjustment_set_value(adjustment, (reflow->column_width + E_REFLOW_FULL_GUTTER) * columns); -} diff --git a/addressbook/gui/minicard/e-reflow-sorted.h b/addressbook/gui/minicard/e-reflow-sorted.h deleted file mode 100644 index 1be4971fb2..0000000000 --- a/addressbook/gui/minicard/e-reflow-sorted.h +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-reflow-sorted.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_REFLOW_SORTED_H__ -#define __E_REFLOW_SORTED_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EReflowSorted - A canvas item container. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * compare_func GCompareFunc RW compare function - * string_func EReflowStringFunc RW string function - * - * From EReflow: - * minimum_width double RW minimum width of the reflow. width >= minimum_width - * width double R width of the reflow - * height double RW height of the reflow - */ - -#define E_REFLOW_SORTED_TYPE (e_reflow_sorted_get_type ()) -#define E_REFLOW_SORTED(obj) (GTK_CHECK_CAST ((obj), E_REFLOW_SORTED_TYPE, EReflowSorted)) -#define E_REFLOW_SORTED_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_REFLOW_SORTED_TYPE, EReflowSortedClass)) -#define E_IS_REFLOW_SORTED(obj) (GTK_CHECK_TYPE ((obj), E_REFLOW_SORTED_TYPE)) -#define E_IS_REFLOW_SORTED_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_REFLOW_SORTED_TYPE)) - -typedef char * (* EReflowStringFunc) (GnomeCanvasItem *); - -typedef struct _EReflowSorted EReflowSorted; -typedef struct _EReflowSortedClass EReflowSortedClass; - -/* FIXME: Try reimplementing this as a hash table with key as string - and change EReflow to use a GTree. */ -struct _EReflowSorted -{ - EReflow parent; - - /* item specific fields */ - GCompareFunc compare_func; - EReflowStringFunc string_func; -}; - -struct _EReflowSortedClass -{ - EReflowClass parent_class; -}; - -/* - * To be added to a reflow, an item must have the argument "width" as - * a Read/Write argument and "height" as a Read Only argument. It - * should also do an ECanvas parent reflow request if its size - * changes. - */ -void e_reflow_sorted_remove_item (EReflowSorted *sorted, const char *id); -void e_reflow_sorted_replace_item (EReflowSorted *sorted, GnomeCanvasItem *item); -void e_reflow_sorted_reorder_item (EReflowSorted *e_reflow_sorted, const gchar *id); -GnomeCanvasItem *e_reflow_sorted_get_item (EReflowSorted *e_reflow_sorted, const gchar *id); -GtkType e_reflow_sorted_get_type (void); -void e_reflow_sorted_jump (EReflowSorted *sorted, GCompareFunc compare_func, void *value); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_REFLOW_SORTED_H__ */ diff --git a/addressbook/gui/minicard/e-reflow.c b/addressbook/gui/minicard/e-reflow.c deleted file mode 100644 index 0e9c8b92b1..0000000000 --- a/addressbook/gui/minicard/e-reflow.c +++ /dev/null @@ -1,859 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-reflow.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-reflow.h" -#include "e-text.h" -#include -#include -#include - -static void e_reflow_init (EReflow *reflow); -static void e_reflow_class_init (EReflowClass *klass); -static void e_reflow_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_reflow_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_reflow_destroy (GtkObject *object); -static gboolean e_reflow_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_reflow_realize (GnomeCanvasItem *item); -static void e_reflow_unrealize (GnomeCanvasItem *item); -static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable, - int x, int y, int width, int height); -static void e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags); -static double e_reflow_point (GnomeCanvasItem *item, double x, double y, int cx, int cy, GnomeCanvasItem **actual_item); -static void e_reflow_reflow (GnomeCanvasItem *item, int flags); -static void e_reflow_real_add_item(EReflow *e_reflow, GnomeCanvasItem *item); -static void set_empty(EReflow *e_reflow); - -static void e_reflow_resize_children (GnomeCanvasItem *item); - -#define E_REFLOW_DIVIDER_WIDTH 2 -#define E_REFLOW_BORDER_WIDTH 7 -#define E_REFLOW_FULL_GUTTER (E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH * 2) - -static GnomeCanvasGroupClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_MINIMUM_WIDTH, - ARG_WIDTH, - ARG_HEIGHT, - ARG_EMPTY_MESSAGE, -}; - -GtkType -e_reflow_get_type (void) -{ - static GtkType reflow_type = 0; - - if (!reflow_type) - { - static const GtkTypeInfo reflow_info = - { - "EReflow", - sizeof (EReflow), - sizeof (EReflowClass), - (GtkClassInitFunc) e_reflow_class_init, - (GtkObjectInitFunc) e_reflow_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - reflow_type = gtk_type_unique (gnome_canvas_group_get_type (), &reflow_info); - } - - return reflow_type; -} - -static void -e_reflow_class_init (EReflowClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - gtk_object_add_arg_type ("EReflow::minimum_width", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_MINIMUM_WIDTH); - gtk_object_add_arg_type ("EReflow::width", GTK_TYPE_DOUBLE, - GTK_ARG_READABLE, ARG_WIDTH); - gtk_object_add_arg_type ("EReflow::height", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_HEIGHT); - gtk_object_add_arg_type ("EReflow::empty_message", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_EMPTY_MESSAGE); - - klass->add_item = e_reflow_real_add_item; - - object_class->set_arg = e_reflow_set_arg; - object_class->get_arg = e_reflow_get_arg; - object_class->destroy = e_reflow_destroy; - - /* GnomeCanvasItem method overrides */ - item_class->event = e_reflow_event; - item_class->realize = e_reflow_realize; - item_class->unrealize = e_reflow_unrealize; - item_class->draw = e_reflow_draw; - item_class->update = e_reflow_update; - item_class->point = e_reflow_point; -} - -static void -e_reflow_init (EReflow *reflow) -{ - reflow->items = NULL; - reflow->columns = NULL; - reflow->column_width = 150; - - reflow->minimum_width = 10; - reflow->width = 10; - reflow->height = 10; - reflow->idle = 0; - - reflow->empty_message = NULL; - reflow->empty_text = NULL; - - reflow->column_drag = FALSE; - - reflow->need_height_update = FALSE; - reflow->need_column_resize = FALSE; - - reflow->default_cursor_shown = TRUE; - reflow->arrow_cursor = NULL; - reflow->default_cursor = NULL; - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(reflow), e_reflow_reflow); -} - -static void -e_reflow_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EReflow *e_reflow; - - item = GNOME_CANVAS_ITEM (o); - e_reflow = E_REFLOW (o); - - switch (arg_id){ - case ARG_HEIGHT: - e_reflow->height = GTK_VALUE_DOUBLE (*arg); - e_canvas_item_request_reflow(item); - break; - case ARG_MINIMUM_WIDTH: - e_reflow->minimum_width = GTK_VALUE_DOUBLE (*arg); - if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(o)) - set_empty(e_reflow); - e_canvas_item_request_reflow(item); - break; - case ARG_EMPTY_MESSAGE: - g_free(e_reflow->empty_message); - e_reflow->empty_message = g_strdup(GTK_VALUE_STRING (*arg)); - if (GNOME_CANVAS_ITEM_REALIZED & GTK_OBJECT_FLAGS(o)) - set_empty(e_reflow); - } -} - -static void -e_reflow_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EReflow *e_reflow; - - e_reflow = E_REFLOW (object); - - switch (arg_id) { - case ARG_MINIMUM_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_reflow->minimum_width; - break; - case ARG_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_reflow->width; - break; - case ARG_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = e_reflow->height; - break; - case ARG_EMPTY_MESSAGE: - GTK_VALUE_STRING (*arg) = g_strdup(e_reflow->empty_message); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_reflow_destroy (GtkObject *object) -{ - EReflow *reflow = E_REFLOW(object); - - g_list_foreach(reflow->items, (GFunc) gtk_object_unref, NULL); - g_list_free(reflow->items); - reflow->items = NULL; - - g_free(reflow->empty_message); - - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} - -static void -e_reflow_realize (GnomeCanvasItem *item) -{ - EReflow *e_reflow; - GnomeCanvasGroup *group; - GList *list; - GtkAdjustment *adjustment; - - e_reflow = E_REFLOW (item); - group = GNOME_CANVAS_GROUP( item ); - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) (item); - - e_reflow->arrow_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW); - e_reflow->default_cursor = gdk_cursor_new (GDK_LEFT_PTR); - - for(list = e_reflow->items; list; list = g_list_next(list)) { - GnomeCanvasItem *item = GNOME_CANVAS_ITEM(list->data); - gnome_canvas_item_set(item, - "width", (double) e_reflow->column_width, - NULL); - } - - set_empty(e_reflow); - - e_canvas_item_request_reflow(item); - - adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); - adjustment->step_increment = (e_reflow->column_width + E_REFLOW_FULL_GUTTER) / 2; - adjustment->page_increment = adjustment->page_size - adjustment->step_increment; - gtk_adjustment_changed(adjustment); - - if (!item->canvas->aa) { - } -} - -static void -e_reflow_unrealize (GnomeCanvasItem *item) -{ - EReflow *e_reflow; - - e_reflow = E_REFLOW (item); - - if (!item->canvas->aa) - { - } - - gdk_cursor_destroy (e_reflow->arrow_cursor); - gdk_cursor_destroy (e_reflow->default_cursor); - e_reflow->arrow_cursor = NULL; - e_reflow->default_cursor = NULL; - - g_list_free (e_reflow->columns); - e_reflow->columns = NULL; - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item); -} - -static gint -e_reflow_pick_line (EReflow *e_reflow, double x) -{ - x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH; - x /= e_reflow->column_width + E_REFLOW_FULL_GUTTER; - return x; -} - -static gboolean -e_reflow_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EReflow *e_reflow; - - e_reflow = E_REFLOW (item); - - switch( event->type ) - { - case GDK_KEY_PRESS: - if (event->key.keyval == GDK_Tab || - event->key.keyval == GDK_KP_Tab || - event->key.keyval == GDK_ISO_Left_Tab) { - GList *list; - for (list = e_reflow->items; list; list = list->next) { - GnomeCanvasItem *item = GNOME_CANVAS_ITEM (list->data); - EFocus has_focus; - gtk_object_get(GTK_OBJECT(item), - "has_focus", &has_focus, - NULL); - if (has_focus) { - if (event->key.state & GDK_SHIFT_MASK) - list = list->prev; - else - list = list->next; - if (list) { - item = GNOME_CANVAS_ITEM(list->data); - gnome_canvas_item_set(item, - "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START, - NULL); - return 1; - } else { - return 0; - } - } - } - } - break; - case GDK_BUTTON_PRESS: - switch(event->button.button) - { - case 1: - { - GdkEventButton *button = (GdkEventButton *) event; - double n_x, max_x; - n_x = button->x; - n_x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH; - n_x = fmod(n_x,(e_reflow->column_width + E_REFLOW_FULL_GUTTER)); - - max_x = E_REFLOW_BORDER_WIDTH; - max_x += (e_reflow->column_width + E_REFLOW_FULL_GUTTER) * e_reflow->column_count; - if ( button->y >= E_REFLOW_BORDER_WIDTH && button->y <= e_reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER && max_x > button->x ) { - e_reflow->which_column_dragged = e_reflow_pick_line(e_reflow, button->x); - e_reflow->start_x = e_reflow->which_column_dragged * (e_reflow->column_width + E_REFLOW_FULL_GUTTER) - E_REFLOW_DIVIDER_WIDTH / 2; - e_reflow->temp_column_width = e_reflow->column_width; - e_reflow->column_drag = TRUE; - - gnome_canvas_item_grab (item, - GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK, - e_reflow->arrow_cursor, - button->time); - - e_reflow->previous_temp_column_width = -1; - e_reflow->need_column_resize = TRUE; - gnome_canvas_item_request_update(item); - return TRUE; - } - } - break; - case 4: - { - GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); - gdouble new_value = adjustment->value; - new_value -= adjustment->step_increment; - gtk_adjustment_set_value(adjustment, new_value); - } - break; - case 5: - { - GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); - gdouble new_value = adjustment->value; - new_value += adjustment->step_increment; - if ( new_value > adjustment->upper - adjustment->page_size ) - new_value = adjustment->upper - adjustment->page_size; - gtk_adjustment_set_value(adjustment, new_value); - } - break; - } - break; - case GDK_BUTTON_RELEASE: - if (e_reflow->column_drag) { - gdouble old_width = e_reflow->column_width; - GdkEventButton *button = (GdkEventButton *) event; - GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); - e_reflow->temp_column_width = e_reflow->column_width + - (button->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value)); - if ( e_reflow->temp_column_width < 50 ) - e_reflow->temp_column_width = 50; - e_reflow->column_drag = FALSE; - if ( old_width != e_reflow->temp_column_width ) { - gtk_adjustment_set_value(adjustment, adjustment->value + e_reflow_pick_line(e_reflow, adjustment->value) * (e_reflow->temp_column_width - e_reflow->column_width)); - e_reflow->column_width = e_reflow->temp_column_width; - adjustment->step_increment = (e_reflow->column_width + E_REFLOW_FULL_GUTTER) / 2; - adjustment->page_increment = adjustment->page_size - adjustment->step_increment; - gtk_adjustment_changed(adjustment); - e_reflow_resize_children(item); - e_canvas_item_request_reflow(item); - } - e_reflow->need_column_resize = TRUE; - gnome_canvas_item_request_update(item); - gnome_canvas_item_ungrab (item, button->time); - return TRUE; - } - break; - case GDK_MOTION_NOTIFY: - if (e_reflow->column_drag) { - double old_width = e_reflow->temp_column_width; - GdkEventMotion *motion = (GdkEventMotion *) event; - GtkAdjustment *adjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); - e_reflow->temp_column_width = e_reflow->column_width + - (motion->x - e_reflow->start_x)/(e_reflow->which_column_dragged - e_reflow_pick_line(e_reflow, adjustment->value)); - if (e_reflow->temp_column_width < 50) - e_reflow->temp_column_width = 50; - if (old_width != e_reflow->temp_column_width) { - e_reflow->need_column_resize = TRUE; - gnome_canvas_item_request_update(item); - } - return TRUE; - } else { - GdkEventMotion *motion = (GdkEventMotion *) event; - double n_x, max_x; - - n_x = motion->x; - n_x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH; - n_x = fmod(n_x,(e_reflow->column_width + E_REFLOW_FULL_GUTTER)); - - max_x = E_REFLOW_BORDER_WIDTH; - max_x += (e_reflow->column_width + E_REFLOW_FULL_GUTTER) * e_reflow->column_count; - - if ( motion->y >= E_REFLOW_BORDER_WIDTH && motion->y <= e_reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER && max_x > motion->x) { - if ( e_reflow->default_cursor_shown ) { - gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, e_reflow->arrow_cursor); - e_reflow->default_cursor_shown = FALSE; - } - } else - if ( ! e_reflow->default_cursor_shown ) { - gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, e_reflow->default_cursor); - e_reflow->default_cursor_shown = TRUE; - } - - } - break; - case GDK_ENTER_NOTIFY: - if (!e_reflow->column_drag) { - GdkEventCrossing *crossing = (GdkEventCrossing *) event; - double n_x, max_x; - n_x = crossing->x; - n_x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH; - n_x = fmod(n_x,(e_reflow->column_width + E_REFLOW_FULL_GUTTER)); - - max_x = E_REFLOW_BORDER_WIDTH; - max_x += (e_reflow->column_width + E_REFLOW_FULL_GUTTER) * e_reflow->column_count; - if ( crossing->y >= E_REFLOW_BORDER_WIDTH && crossing->y <= e_reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER && max_x > crossing->x) { - if ( e_reflow->default_cursor_shown ) { - gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, e_reflow->arrow_cursor); - e_reflow->default_cursor_shown = FALSE; - } - } - } - break; - case GDK_LEAVE_NOTIFY: - if (!e_reflow->column_drag) { - GdkEventCrossing *crossing = (GdkEventCrossing *) event; - double n_x; - n_x = crossing->x; - n_x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH; - n_x = fmod(n_x,(e_reflow->column_width + E_REFLOW_FULL_GUTTER)); - if ( !( crossing->y >= E_REFLOW_BORDER_WIDTH && crossing->y <= e_reflow->height - E_REFLOW_BORDER_WIDTH && n_x < E_REFLOW_FULL_GUTTER ) ) { - if ( ! e_reflow->default_cursor_shown ) { - gdk_window_set_cursor(GTK_WIDGET(item->canvas)->window, e_reflow->default_cursor); - e_reflow->default_cursor_shown = TRUE; - } - } - } - break; - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_reflow_real_add_item(EReflow *e_reflow, GnomeCanvasItem *item) -{ - e_reflow->items = g_list_append(e_reflow->items, item); - gtk_object_ref(GTK_OBJECT(item)); - if ( GTK_OBJECT_FLAGS( e_reflow ) & GNOME_CANVAS_ITEM_REALIZED ) { - gnome_canvas_item_set(item, - "width", (double) e_reflow->column_width, - NULL); - e_reflow_post_add_item(e_reflow, item); - e_canvas_item_request_reflow(item); - } - -} - -static void e_reflow_draw (GnomeCanvasItem *item, GdkDrawable *drawable, - int x, int y, int width, int height) -{ - int x_rect, y_rect, width_rect, height_rect; - gdouble running_width; - EReflow *e_reflow = E_REFLOW(item); - int i; - double column_width; - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->draw) - GNOME_CANVAS_ITEM_CLASS(parent_class)->draw (item, drawable, x, y, width, height); - column_width = e_reflow->column_width; - running_width = E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - x_rect = running_width; - y_rect = E_REFLOW_BORDER_WIDTH; - width_rect = E_REFLOW_DIVIDER_WIDTH; - height_rect = e_reflow->height - (E_REFLOW_BORDER_WIDTH * 2); - - /* Compute first column to draw. */ - i = x; - i /= column_width + E_REFLOW_FULL_GUTTER; - running_width += i * (column_width + E_REFLOW_FULL_GUTTER); - - for ( ; i < e_reflow->column_count; i++) { - if ( running_width > x + width ) - break; - x_rect = running_width; - gtk_paint_flat_box(GTK_WIDGET(item->canvas)->style, - drawable, - GTK_STATE_ACTIVE, - GTK_SHADOW_NONE, - NULL, - GTK_WIDGET(item->canvas), - "reflow", - x_rect - x, - y_rect - y, - width_rect, - height_rect); - running_width += E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - } - if (e_reflow->column_drag) { - int start_line = e_reflow_pick_line(e_reflow, - gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value); - i = x - start_line * (column_width + E_REFLOW_FULL_GUTTER); - running_width = start_line * (column_width + E_REFLOW_FULL_GUTTER); - column_width = e_reflow->temp_column_width; - running_width -= start_line * (column_width + E_REFLOW_FULL_GUTTER); - i += start_line * (column_width + E_REFLOW_FULL_GUTTER); - running_width += E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - x_rect = running_width; - y_rect = E_REFLOW_BORDER_WIDTH; - width_rect = E_REFLOW_DIVIDER_WIDTH; - height_rect = e_reflow->height - (E_REFLOW_BORDER_WIDTH * 2); - - /* Compute first column to draw. */ - i /= column_width + E_REFLOW_FULL_GUTTER; - running_width += i * (column_width + E_REFLOW_FULL_GUTTER); - - for ( ; i < e_reflow->column_count; i++) { - if ( running_width > x + width ) - break; - x_rect = running_width; - gdk_draw_rectangle(drawable, - GTK_WIDGET(item->canvas)->style->fg_gc[GTK_STATE_NORMAL], - TRUE, - x_rect - x, - y_rect - y, - width_rect - 1, - height_rect - 1); - running_width += E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - } - } -} - -static void -e_reflow_update (GnomeCanvasItem *item, double affine[6], ArtSVP *clip_path, gint flags) -{ - EReflow *e_reflow; - double x0, x1, y0, y1; - - e_reflow = E_REFLOW (item); - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->update) - GNOME_CANVAS_ITEM_CLASS(parent_class)->update (item, affine, clip_path, flags); - - x0 = item->x1; - y0 = item->y1; - x1 = item->x2; - y1 = item->y2; - if ( x1 < x0 + e_reflow->width ) - x1 = x0 + e_reflow->width; - if ( y1 < y0 + e_reflow->height ) - y1 = y0 + e_reflow->height; - item->x2 = x1; - item->y2 = y1; - - if (e_reflow->need_height_update) { - x0 = item->x1; - y0 = item->y1; - x1 = item->x2; - y1 = item->y2; - if ( x0 > 0 ) - x0 = 0; - if ( y0 > 0 ) - y0 = 0; - if ( x1 < E_REFLOW(item)->width ) - x1 = E_REFLOW(item)->width; - if ( x1 < E_REFLOW(item)->height ) - x1 = E_REFLOW(item)->height; - - gnome_canvas_request_redraw(item->canvas, x0, y0, x1, y1); - e_reflow->need_height_update = FALSE; - } else if (e_reflow->need_column_resize) { - int x_rect, y_rect, width_rect, height_rect; - int start_line = e_reflow_pick_line(e_reflow, - gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas))->value); - gdouble running_width; - int i; - double column_width; - - if ( e_reflow->previous_temp_column_width != -1 ) { - running_width = start_line * (e_reflow->column_width + E_REFLOW_FULL_GUTTER); - column_width = e_reflow->previous_temp_column_width; - running_width -= start_line * (column_width + E_REFLOW_FULL_GUTTER); - running_width += E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - y_rect = E_REFLOW_BORDER_WIDTH; - width_rect = E_REFLOW_DIVIDER_WIDTH; - height_rect = e_reflow->height - (E_REFLOW_BORDER_WIDTH * 2); - - for ( i = 0; i < e_reflow->column_count; i++) { - x_rect = running_width; - gnome_canvas_request_redraw(item->canvas, x_rect, y_rect, x_rect + width_rect, y_rect + height_rect); - running_width += E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - } - } - - if ( e_reflow->temp_column_width != -1 ) { - running_width = start_line * (e_reflow->column_width + E_REFLOW_FULL_GUTTER); - column_width = e_reflow->temp_column_width; - running_width -= start_line * (column_width + E_REFLOW_FULL_GUTTER); - running_width += E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - y_rect = E_REFLOW_BORDER_WIDTH; - width_rect = E_REFLOW_DIVIDER_WIDTH; - height_rect = e_reflow->height - (E_REFLOW_BORDER_WIDTH * 2); - - for ( i = 0; i < e_reflow->column_count; i++) { - x_rect = running_width; - gnome_canvas_request_redraw(item->canvas, x_rect, y_rect, x_rect + width_rect, y_rect + height_rect); - running_width += E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH + column_width + E_REFLOW_BORDER_WIDTH; - } - } - - e_reflow->previous_temp_column_width = e_reflow->temp_column_width; - e_reflow->need_column_resize = FALSE; - } -} - -static void -e_reflow_resize_children (GnomeCanvasItem *item) -{ - GList *list; - EReflow *e_reflow; - - e_reflow = E_REFLOW (item); - for ( list = e_reflow->items; list; list = list->next ) { - GnomeCanvasItem *child = GNOME_CANVAS_ITEM(list->data); - gnome_canvas_item_set(child, - "width", (double) e_reflow->column_width, - NULL); - } -} - -static double -e_reflow_point (GnomeCanvasItem *item, - double x, double y, int cx, int cy, - GnomeCanvasItem **actual_item) -{ - double distance = 1; - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->point) - distance = GNOME_CANVAS_ITEM_CLASS(parent_class)->point (item, x, y, cx, cy, actual_item); - if (*actual_item) - return 0; - - *actual_item = item; - return 0; -#if 0 - if (y >= E_REFLOW_BORDER_WIDTH && y <= e_reflow->height - E_REFLOW_BORDER_WIDTH) { - float n_x; - n_x = x; - n_x += E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH; - n_x = fmod(n_x, (e_reflow->column_width + E_REFLOW_FULL_GUTTER)); - if (n_x < E_REFLOW_FULL_GUTTER) { - *actual_item = item; - return 0; - } - } - return distance; -#endif -} - -static void -_reflow( EReflow *e_reflow ) -{ - gdouble running_height; - GList *list; - double item_height; - - if (e_reflow->columns) { - g_list_free (e_reflow->columns); - e_reflow->columns = NULL; - } - - e_reflow->column_count = 0; - - if (e_reflow->items == NULL) { - e_reflow->columns = NULL; - e_reflow->column_count = 0; - return; - } - - list = e_reflow->items; - - gtk_object_get (GTK_OBJECT(list->data), - "height", &item_height, - NULL); - running_height = E_REFLOW_BORDER_WIDTH + item_height + E_REFLOW_BORDER_WIDTH; - e_reflow->columns = g_list_append (e_reflow->columns, list); - e_reflow->column_count = 1; - - list = g_list_next(list); - - for ( ; list; list = g_list_next(list)) { - gtk_object_get (GTK_OBJECT(list->data), - "height", &item_height, - NULL); - if (running_height + item_height + E_REFLOW_BORDER_WIDTH > e_reflow->height) { - running_height = E_REFLOW_BORDER_WIDTH + item_height + E_REFLOW_BORDER_WIDTH; - e_reflow->columns = g_list_append (e_reflow->columns, list); - e_reflow->column_count ++; - } else { - running_height += item_height + E_REFLOW_BORDER_WIDTH; - } - } -} - -static void -set_empty(EReflow *e_reflow) -{ - if (e_reflow->items == NULL) { - if (e_reflow->empty_text) { - if (e_reflow->empty_message) { - gnome_canvas_item_set(e_reflow->empty_text, - "width", e_reflow->minimum_width, - "text", e_reflow->empty_message, - NULL); - e_canvas_item_move_absolute(e_reflow->empty_text, - e_reflow->minimum_width / 2, - 0); - } else { - gtk_object_destroy(GTK_OBJECT(e_reflow->empty_text)); - e_reflow->empty_text = NULL; - } - } else { - if (e_reflow->empty_message) - e_reflow->empty_text = - gnome_canvas_item_new(GNOME_CANVAS_GROUP(e_reflow), - e_text_get_type(), - "anchor", GTK_ANCHOR_N, - "width", e_reflow->minimum_width, - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", GTK_WIDGET(GNOME_CANVAS_ITEM(e_reflow)->canvas)->style->font, - "fill_color", "black", - "justification", GTK_JUSTIFY_CENTER, - "text", e_reflow->empty_message, - NULL); - e_canvas_item_move_absolute(e_reflow->empty_text, - e_reflow->minimum_width / 2, - 0); - } - } else { - if (e_reflow->empty_text) { - gtk_object_destroy(GTK_OBJECT(e_reflow->empty_text)); - e_reflow->empty_text = NULL; - } - } -} - -static void -e_reflow_reflow( GnomeCanvasItem *item, int flags ) -{ - EReflow *e_reflow = E_REFLOW(item); - if ( GTK_OBJECT_FLAGS( e_reflow ) & GNOME_CANVAS_ITEM_REALIZED ) { - - gdouble old_width; - gdouble running_width; - - _reflow (e_reflow); - - old_width = e_reflow->width; - - running_width = E_REFLOW_BORDER_WIDTH; - - if (e_reflow->items == NULL) { - } else { - GList *list; - GList *next_column; - gdouble item_height; - gdouble running_height; - - running_height = E_REFLOW_BORDER_WIDTH; - - list = e_reflow->items; - gtk_object_get (GTK_OBJECT(list->data), - "height", &item_height, - NULL); - e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(list->data), - (double) running_width, - (double) running_height); - running_height += item_height + E_REFLOW_BORDER_WIDTH; - next_column = g_list_next(e_reflow->columns); - list = g_list_next(list); - - for( ; list; list = g_list_next(list)) { - gtk_object_get (GTK_OBJECT(list->data), - "height", &item_height, - NULL); - - if (next_column && (next_column->data == list)) { - next_column = g_list_next (next_column); - running_height = E_REFLOW_BORDER_WIDTH; - running_width += e_reflow->column_width + E_REFLOW_BORDER_WIDTH + E_REFLOW_DIVIDER_WIDTH + E_REFLOW_BORDER_WIDTH; - } - e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(list->data), - (double) running_width, - (double) running_height); - - running_height += item_height + E_REFLOW_BORDER_WIDTH; - } - - } - e_reflow->width = running_width + e_reflow->column_width + E_REFLOW_BORDER_WIDTH; - if ( e_reflow->width < e_reflow->minimum_width ) - e_reflow->width = e_reflow->minimum_width; - if (old_width != e_reflow->width) - e_canvas_item_request_parent_reflow(item); - } -} - -void -e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item) -{ - if (E_REFLOW_CLASS(GTK_OBJECT(e_reflow)->klass)->add_item) - (E_REFLOW_CLASS(GTK_OBJECT(e_reflow)->klass)->add_item) (e_reflow, item); -} - -void -e_reflow_post_add_item(EReflow *e_reflow, GnomeCanvasItem *item) -{ - set_empty(e_reflow); -} diff --git a/addressbook/gui/minicard/e-reflow.h b/addressbook/gui/minicard/e-reflow.h deleted file mode 100644 index eb66b094a5..0000000000 --- a/addressbook/gui/minicard/e-reflow.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-reflow.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_REFLOW_H__ -#define __E_REFLOW_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EReflow - A canvas item container. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * minimum_width double RW minimum width of the reflow. width >= minimum_width - * width double R width of the reflow - * height double RW height of the reflow - */ - -#define E_REFLOW_TYPE (e_reflow_get_type ()) -#define E_REFLOW(obj) (GTK_CHECK_CAST ((obj), E_REFLOW_TYPE, EReflow)) -#define E_REFLOW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_REFLOW_TYPE, EReflowClass)) -#define E_IS_REFLOW(obj) (GTK_CHECK_TYPE ((obj), E_REFLOW_TYPE)) -#define E_IS_REFLOW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_REFLOW_TYPE)) - - -typedef struct _EReflow EReflow; -typedef struct _EReflowClass EReflowClass; - -struct _EReflow -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - GList *items; /* Of type GnomeCanvasItem */ - GList *columns; /* Of type GList of type GnomeCanvasItem (points into items) */ - gint column_count; /* Number of columnns */ - - GnomeCanvasItem *empty_text; - gchar *empty_message; - - double minimum_width; - double width; - double height; - - double column_width; - - int idle; - - /* These are all for when the column is being dragged. */ - gboolean column_drag; - gdouble start_x; - gint which_column_dragged; - double temp_column_width; - double previous_temp_column_width; - - guint need_height_update : 1; - guint need_column_resize : 1; - - guint default_cursor_shown : 1; - GdkCursor *arrow_cursor; - GdkCursor *default_cursor; -}; - -struct _EReflowClass -{ - GnomeCanvasGroupClass parent_class; - - /* Virtual methods. */ - void (* add_item) (EReflow *reflow, GnomeCanvasItem *item); -}; - -/* - * To be added to a reflow, an item must have the argument "width" as - * a Read/Write argument and "height" as a Read Only argument. It - * should also do an ECanvas parent reflow request if its size - * changes. - */ -void e_reflow_add_item(EReflow *e_reflow, GnomeCanvasItem *item); -GtkType e_reflow_get_type (void); - -/* Internal usage only: */ -void e_reflow_post_add_item(EReflow *e_reflow, GnomeCanvasItem *item); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_REFLOW_H__ */ diff --git a/addressbook/gui/minicard/test-minicard-label.c b/addressbook/gui/minicard/test-minicard-label.c deleted file mode 100644 index 57bc69222a..0000000000 --- a/addressbook/gui/minicard/test-minicard-label.c +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard-label.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - - -#include "config.h" - -#include -#include "e-minicard-label.h" -#include - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *label; -GnomeCanvasItem *rect; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, allocation->height ); - gnome_canvas_item_set( label, - "width", (double) allocation->width, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( rect, - "x2", (double) allocation->width, - "y2", (double) allocation->height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Label Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the minicard label canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -static void button_press_callback( GtkWidget *widget, gpointer data ) -{ - gnome_canvas_item_grab_focus( label ); -} - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Label Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Label Test", NULL); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - label = e_minicard_label_new(gnome_canvas_root( GNOME_CANVAS( canvas ) )); - gnome_canvas_item_set( label, - "width", (double) 100, - "height", (double) 100, - "fieldname", "Full Name:", - "field", "Christopher James Lahey", - NULL ); - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gnome_app_set_contents( GNOME_APP( app ), canvas ); - - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "button_press_event", - GTK_SIGNAL_FUNC( button_press_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/minicard/test-minicard-view.c b/addressbook/gui/minicard/test-minicard-view.c deleted file mode 100644 index c03d11d07e..0000000000 --- a/addressbook/gui/minicard/test-minicard-view.c +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-reflow.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "config.h" - -#include -#include -#include -#include -#include "e-minicard-view.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *reflow; -GnomeCanvasItem *rect; -GtkAllocation last_alloc; - -CORBA_Environment ev; -CORBA_ORB orb; - -static void -init_bonobo (int argc, char **argv) -{ - - gnome_CORBA_init_with_popt_table ( - "Reflow Test", VERSION, - &argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); - - orb = gnome_CORBA_ORB (); - - if (bonobo_init (orb, NULL, NULL) == FALSE) - g_error (_("Could not initialize Bonobo")); - -} - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - double width; - last_alloc = *allocation; - gnome_canvas_item_set( reflow, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( reflow, - "minimum_width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, width, allocation->height ); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); -} - -static void resize(GnomeCanvas *canvas, gpointer data) -{ - double width; - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, last_alloc.width); - gnome_canvas_set_scroll_region(canvas , 0, 0, width, last_alloc.height ); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) last_alloc.height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Reflow Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the reflow canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -static void -book_open_cb (EBook *book, EBookStatus status, gpointer closure) -{ - if (status == E_BOOK_STATUS_SUCCESS) - gnome_canvas_item_set(reflow, - "book", book, - NULL); -} - -static guint -ebook_create (void) -{ - EBook *book; - - book = e_book_new (); - - if (!book) { - printf ("%s: %s(): Couldn't create EBook, bailing.\n", - __FILE__, - __FUNCTION__); - return FALSE; - } - - - if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) { - printf ("error calling load_uri!\n"); - } - - - return FALSE; -} - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - GtkWidget *vbox; - GtkWidget *scrollbar; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - CORBA_exception_init (&ev); - init_bonobo (argc, argv); - - app = gnome_app_new("Reflow Test", NULL); - - vbox = gtk_vbox_new(FALSE, 0); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_minicard_view_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - gtk_signal_connect( GTK_OBJECT( canvas ), "reflow", - GTK_SIGNAL_FUNC( resize ), - ( gpointer ) app); - - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gtk_box_pack_start(GTK_BOX(vbox), canvas, TRUE, TRUE, 0); - - scrollbar = gtk_hscrollbar_new(gtk_layout_get_hadjustment(GTK_LAYOUT(canvas))); - - gtk_box_pack_start(GTK_BOX(vbox), scrollbar, FALSE, FALSE, 0); - - gnome_app_set_contents( GNOME_APP( app ), vbox ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - gdk_window_set_back_pixmap( GTK_LAYOUT(canvas)->bin_window, NULL, FALSE); - - gtk_idle_add ((GtkFunction) ebook_create, NULL); - - bonobo_main (); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/minicard/test-minicard.c b/addressbook/gui/minicard/test-minicard.c deleted file mode 100644 index e16ca675b3..0000000000 --- a/addressbook/gui/minicard/test-minicard.c +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - - -#include "config.h" - -#include -#include "e-minicard.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *card; -GnomeCanvasItem *rect; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, allocation->height ); - gnome_canvas_item_set( card, - "width", (double) allocation->width, - NULL ); - gnome_canvas_item_set( rect, - "x2", (double) allocation->width, - "y2", (double) allocation->height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the minicard canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - int i; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Test", NULL); - - canvas = gnome_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - for ( i = 0; i < 1; i++ ) - { - card = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_minicard_get_type(), - "width", (double) 100, - NULL ); - } - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gnome_app_set_contents( GNOME_APP( app ), canvas ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/minicard/test-reflow.c b/addressbook/gui/minicard/test-reflow.c deleted file mode 100644 index 8013c428d5..0000000000 --- a/addressbook/gui/minicard/test-reflow.c +++ /dev/null @@ -1,194 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-reflow.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"TITLE:Head Geek -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@helixcode.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - - -#include "config.h" - -#include -#include -#include "e-reflow.h" -#include "e-minicard.h" -#include "e-scroll-frame.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *reflow; -GnomeCanvasItem *rect; -GtkAllocation last_alloc; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - double width; - last_alloc = *allocation; - gnome_canvas_item_set( reflow, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( reflow, - "minimum_width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, width - 1, allocation->height - 1); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); -} - -static void resize(GnomeCanvas *canvas, gpointer data) -{ - double width; - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, last_alloc.width); - gnome_canvas_set_scroll_region(canvas , 0, 0, width - 1, last_alloc.height - 1); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) last_alloc.height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Reflow Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the reflow canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - GtkWidget *vbox; - GtkWidget *scrollframe; - int i; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Reflow Test", VERSION, argc, argv); - app = gnome_app_new("Reflow Test", NULL); - - vbox = gtk_vbox_new(FALSE, 0); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_reflow_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - gtk_signal_connect( GTK_OBJECT( canvas ), "reflow", - GTK_SIGNAL_FUNC( resize ), - ( gpointer ) app); - for ( i = 0; i < 200; i++ ) - { - GnomeCanvasItem *item; - ECard *card = e_card_new (TEST_VCARD); - item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow), - e_minicard_get_type(), - "card", card, - NULL); - e_reflow_add_item(E_REFLOW(reflow), item); - } - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - scrollframe = e_scroll_frame_new (gtk_layout_get_hadjustment(GTK_LAYOUT(canvas)), - gtk_layout_get_vadjustment(GTK_LAYOUT(canvas))); - e_scroll_frame_set_policy (E_SCROLL_FRAME (scrollframe), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_NEVER); - - gtk_container_add (GTK_CONTAINER (scrollframe), canvas); - - gnome_app_set_contents( GNOME_APP( app ), scrollframe ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - gdk_window_set_back_pixmap( GTK_LAYOUT(canvas)->bin_window, NULL, FALSE); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/search/.cvsignore b/addressbook/gui/search/.cvsignore deleted file mode 100644 index d6c55c7345..0000000000 --- a/addressbook/gui/search/.cvsignore +++ /dev/null @@ -1,7 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -*.lo -*.la diff --git a/addressbook/gui/search/Makefile.am b/addressbook/gui/search/Makefile.am deleted file mode 100644 index 1050da1843..0000000000 --- a/addressbook/gui/search/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -INCLUDES = \ - -DG_LOG_DOMAIN=\"e-addressbook-search\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/addressbook/backend \ - -I$(top_builddir)/addressbook/backend \ - -I$(top_srcdir)/addressbook/contact-editor \ - -I$(top_srcdir)/widgets/e-text \ - -I$(top_srcdir)/widgets/misc \ - $(BONOBO_GNOME_CFLAGS) - -noinst_LIBRARIES = \ - libeaddressbooksearch.a - -libeaddressbooksearch_a_SOURCES = \ - e-addressbook-search-dialog.c \ - e-addressbook-search-dialog.h diff --git a/addressbook/gui/search/addresstypes.xml b/addressbook/gui/search/addresstypes.xml deleted file mode 100644 index d855561cce..0000000000 --- a/addressbook/gui/search/addresstypes.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Sender - - - - - - - - Sender - - - - - - - - Expression - - - - diff --git a/addressbook/gui/search/e-addressbook-search-dialog.c b/addressbook/gui/search/e-addressbook-search-dialog.c deleted file mode 100644 index 4acfd1585c..0000000000 --- a/addressbook/gui/search/e-addressbook-search-dialog.c +++ /dev/null @@ -1,192 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-addressbook-search-dialog.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-addressbook-search-dialog.h" -#include "addressbook/gui/minicard/e-minicard-view-widget.h" -#include "widgets/misc/e-scroll-frame.h" -static void e_addressbook_search_dialog_init (EAddressbookSearchDialog *widget); -static void e_addressbook_search_dialog_class_init (EAddressbookSearchDialogClass *klass); -static void e_addressbook_search_dialog_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_addressbook_search_dialog_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_addressbook_search_dialog_destroy (GtkObject *object); - -static ECanvasClass *parent_class = NULL; - -#define PARENT_TYPE (gnome_dialog_get_type()) - -/* The arguments we take */ -enum { - ARG_0, - ARG_BOOK, -}; - -GtkType -e_addressbook_search_dialog_get_type (void) -{ - static GtkType type = 0; - - if (!type) - { - static const GtkTypeInfo info = - { - "EAddressbookSearchDialog", - sizeof (EAddressbookSearchDialog), - sizeof (EAddressbookSearchDialogClass), - (GtkClassInitFunc) e_addressbook_search_dialog_class_init, - (GtkObjectInitFunc) e_addressbook_search_dialog_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (PARENT_TYPE, &info); - } - - return type; -} - -static void -e_addressbook_search_dialog_class_init (EAddressbookSearchDialogClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *canvas_class; - - object_class = (GtkObjectClass*) klass; - widget_class = GTK_WIDGET_CLASS (klass); - canvas_class = E_CANVAS_CLASS (klass); - - parent_class = gtk_type_class (PARENT_TYPE); - - gtk_object_add_arg_type ("EAddressbookSearchDialog::book", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_BOOK); - - object_class->set_arg = e_addressbook_search_dialog_set_arg; - object_class->get_arg = e_addressbook_search_dialog_get_arg; - object_class->destroy = e_addressbook_search_dialog_destroy; -} - -static GtkWidget * -get_widget () -{ - return gtk_entry_new(); -} - -static char * -get_query () -{ - return "(contains \"email\" \"\")"; -} - -static void -button_press (GtkWidget *widget, EAddressbookSearchDialog *dialog) -{ - char *query; - gtk_widget_show(dialog->scrolled_window); - query = get_query(); - gtk_object_set(GTK_OBJECT(dialog->view), - "query", query, - NULL); - g_free(query); -} - -static void -e_addressbook_search_dialog_init (EAddressbookSearchDialog *view) -{ - GtkWidget *button; - GnomeDialog *dialog = GNOME_DIALOG (view); - - gtk_window_set_policy(GTK_WINDOW(view), FALSE, TRUE, FALSE); - - view->search = get_widget(); - gtk_box_pack_start(GTK_BOX(dialog->vbox), view->search, TRUE, TRUE, 0); - gtk_widget_show(view->search); - - button = gtk_button_new_with_label(_("Search")); - gtk_box_pack_start(GTK_BOX(dialog->vbox), button, FALSE, FALSE, 0); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(button_press), view); - gtk_widget_show(button); - - view->view = e_minicard_view_widget_new(); - gtk_widget_show(view->view); - - view->scrolled_window = e_scroll_frame_new(NULL, NULL); - e_scroll_frame_set_policy(E_SCROLL_FRAME(view->scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); - gtk_container_add(GTK_CONTAINER(view->scrolled_window), view->view); - - gtk_box_pack_start(GTK_BOX(dialog->vbox), view->scrolled_window, TRUE, TRUE, 0); -} - -GtkWidget * -e_addressbook_search_dialog_new (EBook *book) -{ - EAddressbookSearchDialog *view = gtk_type_new (e_addressbook_search_dialog_get_type ()); - gtk_object_set(GTK_OBJECT(view->view), - "book", book, - NULL); - return GTK_WIDGET(view); -} - -static void -e_addressbook_search_dialog_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EAddressbookSearchDialog *emvw; - - emvw = E_ADDRESSBOOK_SEARCH_DIALOG (o); - - switch (arg_id){ - case ARG_BOOK: - gtk_object_set(GTK_OBJECT(emvw->view), - "book", GTK_VALUE_OBJECT (*arg), - NULL); - break; - } -} - -static void -e_addressbook_search_dialog_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EAddressbookSearchDialog *emvw; - - emvw = E_ADDRESSBOOK_SEARCH_DIALOG (object); - - switch (arg_id) { - case ARG_BOOK: - gtk_object_get(GTK_OBJECT(emvw->view), - "book", &(GTK_VALUE_OBJECT (*arg)), - NULL); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_addressbook_search_dialog_destroy (GtkObject *object) -{ - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} diff --git a/addressbook/gui/search/e-addressbook-search-dialog.h b/addressbook/gui/search/e-addressbook-search-dialog.h deleted file mode 100644 index 84af66b4e1..0000000000 --- a/addressbook/gui/search/e-addressbook-search-dialog.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view-widget.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_ADDRESSBOOK_SEARCH_DIALOG_H__ -#define __E_ADDRESSBOOK_SEARCH_DIALOG_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_ADDRESSBOOK_SEARCH_DIALOG_TYPE (e_addressbook_search_dialog_get_type ()) -#define E_ADDRESSBOOK_SEARCH_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_ADDRESSBOOK_SEARCH_DIALOG_TYPE, EAddressbookSearchDialog)) -#define E_ADDRESSBOOK_SEARCH_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_ADDRESSBOOK_SEARCH_DIALOG_TYPE, EAddressbookSearchDialogClass)) -#define E_IS_ADDRESSBOOK_SEARCH_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_ADDRESSBOOK_SEARCH_DIALOG_TYPE)) -#define E_IS_ADDRESSBOOK_SEARCH_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_ADDRESSBOOK_SEARCH_DIALOG_TYPE)) - - -typedef struct _EAddressbookSearchDialog EAddressbookSearchDialog; -typedef struct _EAddressbookSearchDialogClass EAddressbookSearchDialogClass; - -struct _EAddressbookSearchDialog -{ - GnomeDialog parent; - - GtkWidget *search; - GtkWidget *view; - GtkWidget *scrolled_window; -}; - -struct _EAddressbookSearchDialogClass -{ - GnomeDialogClass parent_class; -}; - -GtkType e_addressbook_search_dialog_get_type (void); - -GtkWidget *e_addressbook_search_dialog_new (EBook *book); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_ADDRESSBOOK_SEARCH_DIALOG_H__ */ diff --git a/addressbook/gui/widgets/Makefile.am b/addressbook/gui/widgets/Makefile.am deleted file mode 100644 index 17f6d00548..0000000000 --- a/addressbook/gui/widgets/Makefile.am +++ /dev/null @@ -1,124 +0,0 @@ -INCLUDES = \ - -DG_LOG_DOMAIN=\"e-minicard\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/addressbook/backend \ - -I$(top_builddir)/addressbook/backend \ - -I$(top_srcdir)/addressbook/contact-editor \ - -I$(top_srcdir)/widgets/e-text \ - -I$(top_srcdir)/widgets/misc \ - $(BONOBO_GNOME_CFLAGS) - -noinst_LIBRARIES = \ - libeminicard.a - -libeminicard_a_SOURCES = \ - e-minicard-control.c \ - e-minicard-control.h \ - e-minicard-label.c \ - e-minicard-label.h \ - e-minicard-view-widget.c \ - e-minicard-view-widget.h \ - e-minicard-view.c \ - e-minicard-view.h \ - e-minicard-widget.c \ - e-minicard-widget.h \ - e-minicard.c \ - e-minicard.h \ - e-reflow-sorted.c \ - e-reflow-sorted.h \ - e-reflow.c \ - e-reflow.h - -noinst_PROGRAMS = \ - minicard-widget-test \ - minicard-label-test \ - minicard-test \ - reflow-test \ - minicard-view-test - -minicard_label_test_SOURCES = \ - test-minicard-label.c - -minicard_label_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - libeminicard.a \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(top_builddir)/e-util/libeutil.la - -minicard_test_SOURCES = \ - test-minicard.c - -minicard_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - libeminicard.a \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a - -reflow_test_SOURCES = \ - test-reflow.c - -reflow_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - libeminicard.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a - -minicard_view_test_SOURCES = \ - test-minicard-view.c - -minicard_view_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - libeminicard.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a - -minicard_widget_test_SOURCES = \ - e-minicard-widget-test.c - -minicard_widget_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(GNOMEGNORBA_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - libeminicard.a \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - $(top_builddir)/addressbook/contact-editor/libecontacteditor.a \ - $(top_builddir)/addressbook/printing/libecontactprint.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/widgets/e-text/libetext.a diff --git a/addressbook/gui/widgets/alphabet.glade b/addressbook/gui/widgets/alphabet.glade deleted file mode 100644 index bc6e5f3798..0000000000 --- a/addressbook/gui/widgets/alphabet.glade +++ /dev/null @@ -1,357 +0,0 @@ - - - - - alphabet - alphabet - - src - pixmaps - C - True - True - True - False - False - False - True - True - alphabet.glade.h - - - - GtkWindow - window2 - False - window2 - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - - - GtkScrolledWindow - scrolledwindow-top - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - - GtkViewport - viewport1 - 4 - GTK_SHADOW_NONE - - - GtkVBox - vbox2 - 27 - False - 4 - - - GtkButton - button-1 - - - 0 - False - False - - - - - GtkButton - button-a - - - 0 - False - False - - - - - GtkButton - button-b - - - 0 - False - False - - - - - GtkButton - button-c - - - 0 - False - False - - - - - GtkButton - button-d - - - 0 - False - False - - - - - GtkButton - button-e - - - 0 - False - False - - - - - GtkButton - button-f - - - 0 - False - False - - - - - GtkButton - button-g - - - 0 - False - False - - - - - GtkButton - button-h - - - 0 - False - False - - - - - GtkButton - button-i - - - 0 - False - False - - - - - GtkButton - button-j - - - 0 - False - False - - - - - GtkButton - button-k - - - 0 - False - False - - - - - GtkButton - button-l - - - 0 - False - False - - - - - GtkButton - button-m - - - 0 - False - False - - - - - GtkButton - button-n - - - 0 - False - False - - - - - GtkButton - button-o - - - 0 - False - False - - - - - GtkButton - button-p - - - 0 - False - False - - - - - GtkButton - button-q - - - 0 - False - False - - - - - GtkButton - button-r - - - 0 - False - False - - - - - GtkButton - button-s - - - 0 - False - False - - - - - GtkButton - button-t - - - 0 - False - False - - - - - GtkButton - button-u - - - 0 - False - False - - - - - GtkButton - button-v - - - 0 - False - False - - - - - GtkButton - button-w - True - - - 0 - False - False - - - - - GtkButton - button-x - - - 0 - False - False - - - - - GtkButton - button-y - - - 0 - False - False - - - - - GtkButton - button-z - - - 0 - False - False - - - - - - - - diff --git a/addressbook/gui/widgets/alphabet.glade.h b/addressbook/gui/widgets/alphabet.glade.h deleted file mode 100644 index 2448eeb4fc..0000000000 --- a/addressbook/gui/widgets/alphabet.glade.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("window2"); -gchar *s = N_("123"); -gchar *s = N_("a"); -gchar *s = N_("b"); -gchar *s = N_("c"); -gchar *s = N_("d"); -gchar *s = N_("e"); -gchar *s = N_("f"); -gchar *s = N_("g"); -gchar *s = N_("h"); -gchar *s = N_("i"); -gchar *s = N_("j"); -gchar *s = N_("k"); -gchar *s = N_("l"); -gchar *s = N_("m"); -gchar *s = N_("n"); -gchar *s = N_("o"); -gchar *s = N_("p"); -gchar *s = N_("q"); -gchar *s = N_("r"); -gchar *s = N_("s"); -gchar *s = N_("t"); -gchar *s = N_("u"); -gchar *s = N_("v"); -gchar *s = N_("w"); -gchar *s = N_("x"); -gchar *s = N_("y"); -gchar *s = N_("z"); diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c deleted file mode 100644 index d46b42fe00..0000000000 --- a/addressbook/gui/widgets/e-addressbook-model.c +++ /dev/null @@ -1,421 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * - * Author: - * Christopher James Lahey - * - * (C) 1999 Helix Code, Inc. - */ - -#include -#include "e-addressbook-model.h" -#include -#include -#include -#include - -#define PARENT_TYPE e_table_model_get_type() -ETableModelClass *parent_class; - -/* - * EAddressbookModel callbacks - * These are the callbacks that define the behavior of our custom model. - */ -static void e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_addressbook_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); - - -enum { - ARG_0, - ARG_BOOK, - ARG_QUERY, - ARG_EDITABLE, -}; - -static void -addressbook_destroy(GtkObject *object) -{ - EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); - int i; - - if (model->get_view_idle) - g_source_remove(model->get_view_idle); - if (model->book_view && model->create_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->create_card_id); - if (model->book_view && model->remove_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->remove_card_id); - if (model->book_view && model->modify_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->modify_card_id); - if (model->book) - gtk_object_unref(GTK_OBJECT(model->book)); - if (model->book_view) - gtk_object_unref(GTK_OBJECT(model->book_view)); - - for ( i = 0; i < model->data_count; i++ ) { - gtk_object_unref(GTK_OBJECT(model->data[i])); - } - g_free(model->data); -} - -/* This function returns the number of columns in our ETableModel. */ -static int -addressbook_col_count (ETableModel *etc) -{ - return E_CARD_SIMPLE_FIELD_LAST; -} - -/* This function returns the number of rows in our ETableModel. */ -static int -addressbook_row_count (ETableModel *etc) -{ - EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etc); - return addressbook->data_count; -} - -/* This function returns the value at a particular point in our ETableModel. */ -static void * -addressbook_value_at (ETableModel *etc, int col, int row) -{ - EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etc); - const char *value; - if ( col >= E_CARD_SIMPLE_FIELD_LAST - 1 || row >= addressbook->data_count ) - return NULL; - - value = e_card_simple_get_const(addressbook->data[row], - col + 1); - return (void *)(value ? value : ""); -} - -/* This function sets the value at a particular point in our ETableModel. */ -static void -addressbook_set_value_at (ETableModel *etc, int col, int row, const void *val) -{ - EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etc); - ECard *card; - if (addressbook->editable) { - if ( col >= E_CARD_SIMPLE_FIELD_LAST - 1|| row >= addressbook->data_count ) - return; - e_card_simple_set(addressbook->data[row], - col + 1, - val); - gtk_object_get(GTK_OBJECT(addressbook->data[row]), - "card", &card, - NULL); - e_book_commit_card(addressbook->book, card, NULL, NULL); - - e_table_model_cell_changed(etc, col, row); - } -} - -/* This function returns whether a particular cell is editable. */ -static gboolean -addressbook_is_cell_editable (ETableModel *etc, int col, int row) -{ - return E_ADDRESSBOOK_MODEL(etc)->editable; -} - -static void -addressbook_append_row (ETableModel *etm, ETableModel *source, gint row) -{ - ECard *card; - ECardSimple *simple; - EAddressbookModel *addressbook = E_ADDRESSBOOK_MODEL(etm); - int col; - - card = e_card_new(""); - simple = e_card_simple_new(card); - - for (col = 0; col < E_CARD_SIMPLE_FIELD_LAST - 1; col++) { - const void *val = e_table_model_value_at(source, col, row); - e_card_simple_set(simple, - col + 1, - val); - } - e_card_simple_sync_card(simple); - e_book_add_card(addressbook->book, card, NULL, NULL); - gtk_object_unref(GTK_OBJECT(simple)); - gtk_object_unref(GTK_OBJECT(card)); -} - -/* This function duplicates the value passed to it. */ -static void * -addressbook_duplicate_value (ETableModel *etc, int col, const void *value) -{ - return g_strdup(value); -} - -/* This function frees the value passed to it. */ -static void -addressbook_free_value (ETableModel *etc, int col, void *value) -{ - g_free(value); -} - -static void * -addressbook_initialize_value (ETableModel *etc, int col) -{ - return g_strdup(""); -} - -static gboolean -addressbook_value_is_empty (ETableModel *etc, int col, const void *value) -{ - return !(value && *(char *)value); -} - -static char * -addressbook_value_to_string (ETableModel *etc, int col, const void *value) -{ - return g_strdup(value); -} - -static void -create_card(EBookView *book_view, - const GList *cards, - EAddressbookModel *model) -{ - model->data = g_realloc(model->data, (model->data_count + g_list_length((GList *)cards)) * sizeof(ECard *)); - for ( ; cards; cards = cards->next) { - model->data[model->data_count++] = e_card_simple_new (E_CARD(cards->data)); - e_table_model_row_inserted(E_TABLE_MODEL(model), model->data_count - 1); - } -} - -static void -remove_card(EBookView *book_view, - const char *id, - EAddressbookModel *model) -{ - int i; - for ( i = 0; i < model->data_count; i++) { - if ( !strcmp(e_card_simple_get_id(model->data[i]), id) ) { - gtk_object_unref(GTK_OBJECT(model->data[i])); - memmove(model->data + i, model->data + i + 1, (model->data_count - i - 1) * sizeof (ECard *)); - e_table_model_row_deleted(E_TABLE_MODEL(model), i); - } - } -} - -static void -modify_card(EBookView *book_view, - const GList *cards, - EAddressbookModel *model) -{ - for ( ; cards; cards = cards->next) { - int i; - for ( i = 0; i < model->data_count; i++) { - if ( !strcmp(e_card_simple_get_id(model->data[i]), e_card_get_id(E_CARD(cards->data))) ) { - gtk_object_unref(GTK_OBJECT(model->data[i])); - model->data[i] = e_card_simple_new(E_CARD(cards->data)); - gtk_object_ref(GTK_OBJECT(model->data[i])); - e_table_model_row_changed(E_TABLE_MODEL(model), i); - break; - } - } - } -} - -static void -e_addressbook_model_class_init (GtkObjectClass *object_class) -{ - ETableModelClass *model_class = (ETableModelClass *) object_class; - - parent_class = gtk_type_class (PARENT_TYPE); - - object_class->destroy = addressbook_destroy; - object_class->set_arg = e_addressbook_model_set_arg; - object_class->get_arg = e_addressbook_model_get_arg; - - gtk_object_add_arg_type ("EAddressbookModel::book", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_BOOK); - gtk_object_add_arg_type ("EAddressbookModel::query", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_QUERY); - gtk_object_add_arg_type ("EAddressbookModel::editable", GTK_TYPE_BOOL, - GTK_ARG_READWRITE, ARG_EDITABLE); - - model_class->column_count = addressbook_col_count; - model_class->row_count = addressbook_row_count; - model_class->value_at = addressbook_value_at; - model_class->set_value_at = addressbook_set_value_at; - model_class->is_cell_editable = addressbook_is_cell_editable; - model_class->append_row = addressbook_append_row; - model_class->duplicate_value = addressbook_duplicate_value; - model_class->free_value = addressbook_free_value; - model_class->initialize_value = addressbook_initialize_value; - model_class->value_is_empty = addressbook_value_is_empty; - model_class->value_to_string = addressbook_value_to_string; -} - -static void -e_addressbook_model_init (GtkObject *object) -{ - EAddressbookModel *model = E_ADDRESSBOOK_MODEL(object); - model->book = NULL; - model->query = g_strdup("(contains \"x-evolution-any-field\" \"\")"); - model->book_view = NULL; - model->get_view_idle = 0; - model->create_card_id = 0; - model->remove_card_id = 0; - model->modify_card_id = 0; - model->data = NULL; - model->data_count = 0; - model->editable = TRUE; -} - -static void -book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure) -{ - EAddressbookModel *model = closure; - int i; - if (model->book_view && model->create_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->create_card_id); - if (model->book_view && model->remove_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->remove_card_id); - if (model->book_view && model->modify_card_id) - gtk_signal_disconnect(GTK_OBJECT (model->book_view), - model->modify_card_id); - if (model->book_view) - gtk_object_unref(GTK_OBJECT(model->book_view)); - model->book_view = book_view; - if (model->book_view) - gtk_object_ref(GTK_OBJECT(model->book_view)); - model->create_card_id = gtk_signal_connect(GTK_OBJECT(model->book_view), - "card_added", - GTK_SIGNAL_FUNC(create_card), - model); - model->remove_card_id = gtk_signal_connect(GTK_OBJECT(model->book_view), - "card_removed", - GTK_SIGNAL_FUNC(remove_card), - model); - model->modify_card_id = gtk_signal_connect(GTK_OBJECT(model->book_view), - "card_changed", - GTK_SIGNAL_FUNC(modify_card), - model); - - for ( i = 0; i < model->data_count; i++ ) { - gtk_object_unref(GTK_OBJECT(model->data[i])); - } - - e_table_model_pre_change(E_TABLE_MODEL(model)); - g_free(model->data); - model->data = NULL; - model->data_count = 0; - e_table_model_changed(E_TABLE_MODEL(model)); -} - -static gboolean -get_view(EAddressbookModel *model) -{ - if (model->book && model->query) - e_book_get_book_view(model->book, model->query, book_view_loaded, model); - - model->get_view_idle = 0; - return FALSE; -} - -ECard * -e_addressbook_model_get_card(EAddressbookModel *model, - int row) -{ - if (model->data && row < model->data_count) { - ECard *card; - gtk_object_get(GTK_OBJECT(model->data[row]), - "card", &card, - NULL); - gtk_object_ref(GTK_OBJECT(card)); - return card; - } - return NULL; -} - -static void -e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EAddressbookModel *model; - - model = E_ADDRESSBOOK_MODEL (o); - - switch (arg_id){ - case ARG_BOOK: - if (model->book) - gtk_object_unref(GTK_OBJECT(model->book)); - model->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); - if (model->book) { - gtk_object_ref(GTK_OBJECT(model->book)); - if (model->get_view_idle == 0) - model->get_view_idle = g_idle_add((GSourceFunc)get_view, model); - } - break; - case ARG_QUERY: - if (model->query) - g_free(model->query); - model->query = g_strdup(GTK_VALUE_STRING (*arg)); - if (model->get_view_idle == 0) - model->get_view_idle = g_idle_add((GSourceFunc)get_view, model); - break; - case ARG_EDITABLE: - model->editable = GTK_VALUE_BOOL (*arg); - break; - } -} - -static void -e_addressbook_model_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EAddressbookModel *e_addressbook_model; - - e_addressbook_model = E_ADDRESSBOOK_MODEL (object); - - switch (arg_id) { - case ARG_BOOK: - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_addressbook_model->book); - break; - case ARG_QUERY: - GTK_VALUE_STRING (*arg) = g_strdup(e_addressbook_model->query); - break; - case ARG_EDITABLE: - GTK_VALUE_BOOL (*arg) = e_addressbook_model->editable; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -GtkType -e_addressbook_model_get_type (void) -{ - static GtkType type = 0; - - if (!type){ - GtkTypeInfo info = { - "EAddressbookModel", - sizeof (EAddressbookModel), - sizeof (EAddressbookModelClass), - (GtkClassInitFunc) e_addressbook_model_class_init, - (GtkObjectInitFunc) e_addressbook_model_init, - NULL, /* reserved 1 */ - NULL, /* reserved 2 */ - (GtkClassInitFunc) NULL - }; - - type = gtk_type_unique (PARENT_TYPE, &info); - } - - return type; -} - -ETableModel * -e_addressbook_model_new (void) -{ - EAddressbookModel *et; - - et = gtk_type_new (e_addressbook_model_get_type ()); - - return E_TABLE_MODEL(et); -} diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h deleted file mode 100644 index 8f5f6485cf..0000000000 --- a/addressbook/gui/widgets/e-addressbook-model.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef _E_ADDRESSBOOK_MODEL_H_ -#define _E_ADDRESSBOOK_MODEL_H_ - -#include "e-table-model.h" -#include -#include -#include - -#define E_ADDRESSBOOK_MODEL_TYPE (e_addressbook_model_get_type ()) -#define E_ADDRESSBOOK_MODEL(o) (GTK_CHECK_CAST ((o), E_ADDRESSBOOK_MODEL_TYPE, EAddressbookModel)) -#define E_ADDRESSBOOK_MODEL_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_ADDRESSBOOK_MODEL_TYPE, EAddressbookModelClass)) -#define E_IS_ADDRESSBOOK_MODEL(o) (GTK_CHECK_TYPE ((o), E_ADDRESSBOOK_MODEL_TYPE)) -#define E_IS_ADDRESSBOOK_MODEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_ADDRESSBOOK_MODEL_TYPE)) - -/* Virtual Column list: - 0 Email - 1 Full Name - 2 Street - 3 Phone -*/ - -typedef struct { - ETableModel parent; - - /* item specific fields */ - EBook *book; - char *query; - EBookView *book_view; - - int get_view_idle; - - ECardSimple **data; - int data_count; - - int create_card_id, remove_card_id, modify_card_id; - - guint editable : 1; -} EAddressbookModel; - - -typedef struct { - ETableModelClass parent_class; -} EAddressbookModelClass; - - -GtkType e_addressbook_model_get_type (void); -ETableModel *e_addressbook_model_new (void); - -/* Returns object with ref count of 1. */ -ECard *e_addressbook_model_get_card(EAddressbookModel *model, - int row); - -#endif /* _E_ADDRESSBOOK_MODEL_H_ */ diff --git a/addressbook/gui/widgets/e-minicard-control.c b/addressbook/gui/widgets/e-minicard-control.c deleted file mode 100644 index 7c1838b568..0000000000 --- a/addressbook/gui/widgets/e-minicard-control.c +++ /dev/null @@ -1,336 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-control.c - * - * Authors: - * Chris Lahey - * - * Copyright 1999, 2000, Helix Code, Inc. - */ - -#include -#include -#include - -#include "addressbook/backend/ebook/e-book.h" - -#include "e-minicard-control.h" -#include "e-minicard-widget.h" -#include "addressbook/backend/ebook/e-card.h" - -#if 0 -enum { - PROP_RUNNING -} MyArgs; - -#define RUNNING_KEY "Clock::Running" - -static void -get_prop (BonoboPropertyBag *bag, - BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GtkObject *clock = user_data; - - switch (arg_id) { - - case PROP_RUNNING: - { - gboolean b = GPOINTER_TO_UINT (gtk_object_get_data (clock, RUNNING_KEY)); - BONOBO_ARG_SET_BOOLEAN (arg, b); - break; - } - - default: - g_warning ("Unhandled arg %d", arg_id); - break; - } -} - -static void -set_prop (BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GtkClock *clock = user_data; - - switch (arg_id) { - - case PROP_RUNNING: - { - guint i; - - i = BONOBO_ARG_GET_BOOLEAN (arg); - - if (i) - gtk_clock_start (clock); - else - gtk_clock_stop (clock); - - gtk_object_set_data (GTK_OBJECT (clock), RUNNING_KEY, - GUINT_TO_POINTER (i)); - break; - } - - default: - g_warning ("Unhandled arg %d", arg_id); - break; - } -} -#endif - -/* - * Bonobo::PersistStream - * - * These two functions implement the Bonobo::PersistStream load and - * save methods which allow data to be loaded into and out of the - * BonoboObject. - */ -static char * -stream_read (Bonobo_Stream stream) -{ - Bonobo_Stream_iobuf *buffer; - CORBA_Environment ev; - char *data = NULL; - gint length = 0; - - CORBA_exception_init (&ev); - do { -#define READ_CHUNK_SIZE 65536 - Bonobo_Stream_read (stream, READ_CHUNK_SIZE, - &buffer, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - return NULL; - } - - if (buffer->_length <= 0) - break; - - data = g_realloc (data, - length + buffer->_length); - - memcpy (data + length, - buffer->_buffer, buffer->_length); - - length += buffer->_length; - - CORBA_free (buffer); - } while (1); - - CORBA_free (buffer); - CORBA_exception_free (&ev); - - if (data == NULL) - data = g_strdup(""); - - return data; -} /* stream_read */ - -/* - * This function implements the Bonobo::PersistStream:load method. - */ -static void -pstream_load (BonoboPersistStream *ps, const Bonobo_Stream stream, - Bonobo_Persist_ContentType type, void *data, - CORBA_Environment *ev) -{ - ECard *card; - char *vcard; - GtkWidget *minicard = data; - - if (type && g_strcasecmp (type, "text/vCard") != 0 && - g_strcasecmp (type, "text/x-vCard") != 0) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - if ((vcard = stream_read (stream)) == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_FileNotFound, NULL); - return; - } - - card = e_card_new(vcard); - g_free(vcard); - gtk_object_set(GTK_OBJECT(minicard), - "card", card, - NULL); - gtk_object_unref(GTK_OBJECT(card)); -} /* pstream_load */ - -/* - * This function implements the Bonobo::PersistStream:save method. - */ -static void -pstream_save (BonoboPersistStream *ps, const Bonobo_Stream stream, - Bonobo_Persist_ContentType type, void *data, - CORBA_Environment *ev) -{ - char *vcard; - ECard *card; - EMinicardWidget *minicard = data; - int length; - - if (type && g_strcasecmp (type, "text/vCard") != 0 && - g_strcasecmp (type, "text/x-vCard") != 0) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Bonobo_Persist_WrongDataType, NULL); - return; - } - - gtk_object_get (GTK_OBJECT (minicard), - "card", &card, - NULL); - vcard = e_card_get_vcard(card); - length = strlen (vcard); - bonobo_stream_client_write (stream, vcard, length, ev); - g_free (vcard); -} /* pstream_save */ - -static CORBA_long -pstream_get_max_size (BonoboPersistStream *ps, void *data, - CORBA_Environment *ev) -{ - GtkWidget *minicard = data; - ECard *card; - char *vcard; - gint length; - - gtk_object_get (GTK_OBJECT (minicard), - "card", &card, NULL); - vcard = e_card_get_vcard(card); - length = strlen (vcard); - g_free (vcard); - - return length; -} - -static Bonobo_Persist_ContentTypeList * -pstream_get_content_types (BonoboPersistStream *ps, void *closure, - CORBA_Environment *ev) -{ - return bonobo_persist_generate_content_types (2, "text/vCard", "text/x-vCard"); -} - -static void -book_open_cb (EBook *book, EBookStatus status, gpointer closure) -{ - ECard *card = closure; - e_book_add_card(book, card, NULL, NULL); -} - -static void -save_in_addressbook(GtkWidget *button, EMinicardWidget *minicard) -{ - EBook *book; - gchar *path, *uri; - ECard *card; - - book = e_book_new (); - - if (!book) { - printf ("%s: %s(): Couldn't create EBook, bailing.\n", - __FILE__, - __FUNCTION__); - return; - } - - - path = g_concat_dir_and_file (g_get_home_dir (), - "evolution/local/Contacts/addressbook.db"); - uri = g_strdup_printf ("file://%s", path); - g_free (path); - - gtk_object_get(GTK_OBJECT(minicard), - "card", &card, - NULL); - - if (! e_book_load_uri (book, uri, book_open_cb, card)) { - printf ("error calling load_uri!\n"); - } - g_free(uri); -} - -static BonoboObject * -e_minicard_control_factory (BonoboGenericFactory *Factory, void *closure) -{ -#if 0 - BonoboPropertyBag *pb; -#endif - BonoboControl *control; - BonoboPersistStream *stream; - GtkWidget *minicard; - GtkWidget *button; - GtkWidget *vbox; - - /* Create the control. */ - - minicard = e_minicard_widget_new (); - gtk_widget_show (minicard); - - button = gtk_button_new_with_label(_("Save in addressbook")); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - GTK_SIGNAL_FUNC(save_in_addressbook), minicard); - gtk_widget_show (button); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), minicard, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); - gtk_widget_show (vbox); - - control = bonobo_control_new (vbox); - - stream = bonobo_persist_stream_new (pstream_load, pstream_save, - pstream_get_max_size, - pstream_get_content_types, - minicard); - -#if 0 - /* Create the properties. */ - pb = bonobo_property_bag_new (get_prop, set_prop, clock); - bonobo_control_set_property_bag (control, pb); - - bonobo_property_bag_add (pb, "running", PROP_RUNNING, - BONOBO_ARG_BOOLEAN, NULL, - "Whether or not the clock is running", 0); -#endif - - if (stream == NULL) { - bonobo_object_unref (BONOBO_OBJECT (control)); - return NULL; - } - - bonobo_object_add_interface (BONOBO_OBJECT (control), - BONOBO_OBJECT (stream)); - - return BONOBO_OBJECT (control); -} - -void -e_minicard_control_factory_init (void) -{ - static BonoboGenericFactory *factory = NULL; - - if (factory != NULL) - return; - -#if USING_OAF - factory = - bonobo_generic_factory_new ( - "OAFIID:control-factory:e_minicard:16bb7c25-c7d2-46dc-a5f0-a0975d0e0595", - e_minicard_control_factory, NULL); -#else - factory = - bonobo_generic_factory_new ( - "control-factory:e-minicard", - e_minicard_control_factory, NULL); -#endif - - if (factory == NULL) - g_error ("I could not register a EMinicard control factory."); -} diff --git a/addressbook/gui/widgets/e-minicard-control.h b/addressbook/gui/widgets/e-minicard-control.h deleted file mode 100644 index 4a0da88435..0000000000 --- a/addressbook/gui/widgets/e-minicard-control.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __E_MINICARD_CONTROL_H__ -#define __E_MINICARD_CONTROL_H__ - -#include - -void e_minicard_control_factory_init (void); - -#endif /* __E_MINICARD_CONTROL_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-label.c b/addressbook/gui/widgets/e-minicard-label.c deleted file mode 100644 index e765a89f21..0000000000 --- a/addressbook/gui/widgets/e-minicard-label.c +++ /dev/null @@ -1,446 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-label.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-minicard-label.h" -#include "e-text.h" -#include -#include -#include - -static void e_minicard_label_init (EMinicardLabel *card); -static void e_minicard_label_class_init (EMinicardLabelClass *klass); -static void e_minicard_label_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_label_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static gboolean e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_minicard_label_realize (GnomeCanvasItem *item); -static void e_minicard_label_unrealize (GnomeCanvasItem *item); -static void e_minicard_label_reflow(GnomeCanvasItem *item, int flags); - -static void e_minicard_label_resize_children( EMinicardLabel *e_minicard_label ); - -static GnomeCanvasGroupClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_WIDTH, - ARG_HEIGHT, - ARG_HAS_FOCUS, - ARG_FIELD, - ARG_FIELDNAME, - ARG_TEXT_MODEL, - ARG_MAX_FIELD_NAME_WIDTH, -}; - -GtkType -e_minicard_label_get_type (void) -{ - static GtkType minicard_label_type = 0; - - if (!minicard_label_type) - { - static const GtkTypeInfo minicard_label_info = - { - "EMinicardLabel", - sizeof (EMinicardLabel), - sizeof (EMinicardLabelClass), - (GtkClassInitFunc) e_minicard_label_class_init, - (GtkObjectInitFunc) e_minicard_label_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - minicard_label_type = gtk_type_unique (gnome_canvas_group_get_type (), &minicard_label_info); - } - - return minicard_label_type; -} - -static void -e_minicard_label_class_init (EMinicardLabelClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - gtk_object_add_arg_type ("EMinicardLabel::width", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_WIDTH); - gtk_object_add_arg_type ("EMinicardLabel::height", GTK_TYPE_DOUBLE, - GTK_ARG_READABLE, ARG_HEIGHT); - gtk_object_add_arg_type ("EMinicardLabel::has_focus", GTK_TYPE_BOOL, - GTK_ARG_READWRITE, ARG_HAS_FOCUS); - gtk_object_add_arg_type ("EMinicardLabel::field", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_FIELD); - gtk_object_add_arg_type ("EMinicardLabel::fieldname", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_FIELDNAME); - gtk_object_add_arg_type ("EMinicardLabel::text_model", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_TEXT_MODEL); - gtk_object_add_arg_type ("EMinicardLabel::max_field_name_length", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_MAX_FIELD_NAME_WIDTH); - - object_class->set_arg = e_minicard_label_set_arg; - object_class->get_arg = e_minicard_label_get_arg; - /* object_class->destroy = e_minicard_label_destroy; */ - - /* GnomeCanvasItem method overrides */ - item_class->realize = e_minicard_label_realize; - item_class->unrealize = e_minicard_label_unrealize; - item_class->event = e_minicard_label_event; -} - -static void -e_minicard_label_init (EMinicardLabel *minicard_label) -{ - minicard_label->width = 10; - minicard_label->height = 10; - minicard_label->rect = NULL; - minicard_label->fieldname = NULL; - minicard_label->field = NULL; - - minicard_label->max_field_name_length = -1; - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard_label), e_minicard_label_reflow); -} - -static void -e_minicard_label_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EMinicardLabel *e_minicard_label; - - item = GNOME_CANVAS_ITEM (o); - e_minicard_label = E_MINICARD_LABEL (o); - - switch (arg_id){ - case ARG_WIDTH: - e_minicard_label->width = GTK_VALUE_DOUBLE (*arg); - e_minicard_label_resize_children(e_minicard_label); - e_canvas_item_request_reflow (item); - break; - case ARG_HAS_FOCUS: - if (e_minicard_label->field && (GTK_VALUE_ENUM(*arg) != E_FOCUS_NONE)) - e_canvas_item_grab_focus(e_minicard_label->field); - break; - case ARG_FIELD: - gnome_canvas_item_set( e_minicard_label->field, "text", GTK_VALUE_STRING (*arg), NULL ); - break; - case ARG_FIELDNAME: - gnome_canvas_item_set( e_minicard_label->fieldname, "text", GTK_VALUE_STRING (*arg), NULL ); - break; - case ARG_TEXT_MODEL: - gnome_canvas_item_set( e_minicard_label->field, "model", GTK_VALUE_OBJECT (*arg), NULL); - break; - case ARG_MAX_FIELD_NAME_WIDTH: - e_minicard_label->max_field_name_length = GTK_VALUE_DOUBLE (*arg); - break; - } -} - -static void -e_minicard_label_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardLabel *e_minicard_label; - char *temp; - ETextModel *tempmodel; - - e_minicard_label = E_MINICARD_LABEL (object); - - switch (arg_id) { - case ARG_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_minicard_label->width; - break; - case ARG_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = e_minicard_label->height; - break; - case ARG_HAS_FOCUS: - GTK_VALUE_ENUM (*arg) = e_minicard_label->has_focus ? E_FOCUS_CURRENT : E_FOCUS_NONE; - break; - case ARG_FIELD: - gtk_object_get( GTK_OBJECT( e_minicard_label->field ), "text", &temp, NULL ); - GTK_VALUE_STRING (*arg) = temp; - break; - case ARG_FIELDNAME: - gtk_object_get( GTK_OBJECT( e_minicard_label->fieldname ), "text", &temp, NULL ); - GTK_VALUE_STRING (*arg) = temp; - break; - case ARG_TEXT_MODEL: - gtk_object_get( GTK_OBJECT( e_minicard_label->field ), "model", &tempmodel, NULL ); - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(tempmodel); - break; - case ARG_MAX_FIELD_NAME_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_minicard_label->max_field_name_length; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_label_realize (GnomeCanvasItem *item) -{ - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->realize) - (* GNOME_CANVAS_ITEM_CLASS( parent_class )->realize) (item); - - e_canvas_item_request_reflow(item); - - if (!item->canvas->aa) - { - } -} - -void -e_minicard_label_construct (GnomeCanvasItem *item) -{ - EMinicardLabel *e_minicard_label; - GnomeCanvasGroup *group; - static GdkFont *font = NULL; - - if (font == NULL) { - font = gdk_font_load("lucidasans-10"); - } - - e_minicard_label = E_MINICARD_LABEL (item); - group = GNOME_CANVAS_GROUP( item ); - - e_minicard_label->rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) e_minicard_label->width - 1, - "y2", (double) e_minicard_label->height - 1, - "outline_color", NULL, - NULL ); - e_minicard_label->fieldname = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "clip_width", (double) ( e_minicard_label->width / 2 - 4 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", font, - "fill_color", "black", - NULL ); - e_canvas_item_move_absolute(e_minicard_label->fieldname, 2, 1); - - e_minicard_label->field = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "clip_width", (double) ( ( e_minicard_label->width + 1 ) / 2 - 4 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font_gdk", font, - "fill_color", "black", - "editable", TRUE, - NULL ); - e_canvas_item_move_absolute(e_minicard_label->field, ( e_minicard_label->width / 2 + 2), 1); - - e_canvas_item_request_reflow(item); -} - -static void -e_minicard_label_unrealize (GnomeCanvasItem *item) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (item); - - if (!item->canvas->aa) - { - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->unrealize) - (* GNOME_CANVAS_ITEM_CLASS( parent_class )->unrealize) (item); -} - -static gboolean -e_minicard_label_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardLabel *e_minicard_label; - - e_minicard_label = E_MINICARD_LABEL (item); - - switch( event->type ) - { - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - if ( focus_event->in ) - { - gnome_canvas_item_set( e_minicard_label->rect, - "outline_color", "grey50", - "fill_color", "grey90", - NULL ); - e_minicard_label->has_focus = TRUE; - } - else - { - gnome_canvas_item_set( e_minicard_label->rect, - "outline_color", NULL, - "fill_color", NULL, - NULL ); - e_minicard_label->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - case GDK_MOTION_NOTIFY: - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: { - gboolean return_val; -#if 0 - GnomeCanvasItem *field; - ArtPoint p; - double inv[6], affine[6]; - - field = e_minicard_label->field; - art_affine_identity (affine); - - if (field->xform != NULL) { - if (field->object.flags & GNOME_CANVAS_ITEM_AFFINE_FULL) { - art_affine_multiply (affine, affine, field->xform); - } else { - affine[4] += field->xform[0]; - affine[5] += field->xform[1]; - } - } - - art_affine_invert (inv, affine); - switch(event->type) { - case GDK_MOTION_NOTIFY: - p.x = event->motion.x; - p.y = event->motion.y; - art_affine_point (&p, &p, inv); - event->motion.x = p.x; - event->motion.y = p.y; - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - p.x = event->button.x; - p.y = event->button.y; - art_affine_point (&p, &p, inv); - event->button.x = p.x; - event->button.y = p.y; - break; - case GDK_ENTER_NOTIFY: - case GDK_LEAVE_NOTIFY: - p.x = event->crossing.x; - p.y = event->crossing.y; - art_affine_point (&p, &p, inv); - event->crossing.x = p.x; - event->crossing.y = p.y; - break; - default: - break; - } -#endif - gtk_signal_emit_by_name(GTK_OBJECT(e_minicard_label->field), "event", event, &return_val); - return return_val; - break; - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_minicard_label_resize_children(EMinicardLabel *e_minicard_label) -{ - double left_width; - if (e_minicard_label->max_field_name_length != -1 && ((e_minicard_label->width / 2) - 4 > e_minicard_label->max_field_name_length)) - left_width = e_minicard_label->max_field_name_length; - else - left_width = e_minicard_label->width / 2 - 4; - - gnome_canvas_item_set( e_minicard_label->fieldname, - "clip_width", (double) ( left_width ), - NULL ); - gnome_canvas_item_set( e_minicard_label->field, - "clip_width", (double) ( e_minicard_label->width - 8 - left_width ), - NULL ); -} - -static void -e_minicard_label_reflow(GnomeCanvasItem *item, int flags) -{ - EMinicardLabel *e_minicard_label = E_MINICARD_LABEL(item); - - gint old_height; - gdouble text_height; - gdouble left_width; - - old_height = e_minicard_label->height; - - gtk_object_get(GTK_OBJECT(e_minicard_label->fieldname), - "text_height", &text_height, - NULL); - - e_minicard_label->height = text_height; - - - gtk_object_get(GTK_OBJECT(e_minicard_label->field), - "text_height", &text_height, - NULL); - - if (e_minicard_label->height < text_height) - e_minicard_label->height = text_height; - e_minicard_label->height += 3; - - gnome_canvas_item_set( e_minicard_label->rect, - "x2", (double) e_minicard_label->width - 1, - "y2", (double) e_minicard_label->height - 1, - NULL ); - - if (e_minicard_label->max_field_name_length != -1 && ((e_minicard_label->width / 2) - 4 > e_minicard_label->max_field_name_length)) - left_width = e_minicard_label->max_field_name_length; - else - left_width = e_minicard_label->width / 2 - 4; - - e_canvas_item_move_absolute(e_minicard_label->field, left_width + 6, 1); - - if (old_height != e_minicard_label->height) - e_canvas_item_request_parent_reflow(item); -} - -GnomeCanvasItem * -e_minicard_label_new(GnomeCanvasGroup *parent) -{ - GnomeCanvasItem *item = gnome_canvas_item_new(parent, e_minicard_label_get_type(), NULL); - e_minicard_label_construct(item); - return item; -} - diff --git a/addressbook/gui/widgets/e-minicard-label.h b/addressbook/gui/widgets/e-minicard-label.h deleted file mode 100644 index 08eb51ee53..0000000000 --- a/addressbook/gui/widgets/e-minicard-label.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-label.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_LABEL_H__ -#define __E_MINICARD_LABEL_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardLabel - A label doing focus with non-marching ants. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * width double RW width of the label - * height double R height of the label - * field string RW text in the field label - * fieldname string RW text in the fieldname label - */ - -#define E_MINICARD_LABEL_TYPE (e_minicard_label_get_type ()) -#define E_MINICARD_LABEL(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_LABEL_TYPE, EMinicardLabel)) -#define E_MINICARD_LABEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_LABEL_TYPE, EMiniCardLabelClass)) -#define E_IS_MINICARD_LABEL(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_LABEL_TYPE)) -#define E_IS_MINICARD_LABEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_LABEL_TYPE)) - - -typedef struct _EMinicardLabel EMinicardLabel; -typedef struct _EMinicardLabelClass EMinicardLabelClass; - -struct _EMinicardLabel -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - double width; - double height; - double max_field_name_length; - GnomeCanvasItem *fieldname; - GnomeCanvasItem *field; - GnomeCanvasItem *rect; - - gboolean has_focus; -}; - -struct _EMinicardLabelClass -{ - GnomeCanvasGroupClass parent_class; -}; - - -GtkType e_minicard_label_get_type (void); -GnomeCanvasItem *e_minicard_label_new(GnomeCanvasGroup *parent); -void e_minicard_label_construct (GnomeCanvasItem *item); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_LABEL_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-view-widget.c b/addressbook/gui/widgets/e-minicard-view-widget.c deleted file mode 100644 index cd1a999f14..0000000000 --- a/addressbook/gui/widgets/e-minicard-view-widget.c +++ /dev/null @@ -1,267 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-view-widget.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-minicard-view-widget.h" -static void e_minicard_view_widget_init (EMinicardViewWidget *widget); -static void e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass); -static void e_minicard_view_widget_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_view_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_view_widget_destroy (GtkObject *object); -static void e_minicard_view_widget_reflow (ECanvas *canvas); -static void e_minicard_view_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void e_minicard_view_widget_realize (GtkWidget *widget); - -static ECanvasClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_BOOK, - ARG_QUERY -}; - -GtkType -e_minicard_view_widget_get_type (void) -{ - static GtkType type = 0; - - if (!type) - { - static const GtkTypeInfo info = - { - "EMinicardViewWidget", - sizeof (EMinicardViewWidget), - sizeof (EMinicardViewWidgetClass), - (GtkClassInitFunc) e_minicard_view_widget_class_init, - (GtkObjectInitFunc) e_minicard_view_widget_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (e_canvas_get_type (), &info); - } - - return type; -} - -static void -e_minicard_view_widget_class_init (EMinicardViewWidgetClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *canvas_class; - - object_class = (GtkObjectClass*) klass; - widget_class = GTK_WIDGET_CLASS (klass); - canvas_class = E_CANVAS_CLASS (klass); - - parent_class = gtk_type_class (e_canvas_get_type ()); - - gtk_object_add_arg_type ("EMinicardViewWidget::book", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_BOOK); - gtk_object_add_arg_type ("EMinicardViewWidget::query", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_QUERY); - - object_class->set_arg = e_minicard_view_widget_set_arg; - object_class->get_arg = e_minicard_view_widget_get_arg; - object_class->destroy = e_minicard_view_widget_destroy; - - widget_class->realize = e_minicard_view_widget_realize; - widget_class->size_allocate = e_minicard_view_widget_size_allocate; - - canvas_class->reflow = e_minicard_view_widget_reflow; -} - -static void -e_minicard_view_widget_init (EMinicardViewWidget *view) -{ - view->emv = NULL; - view->rect = NULL; - - view->book = NULL; - view->query = NULL; -} - -GtkWidget * -e_minicard_view_widget_new (void) -{ - return GTK_WIDGET (gtk_type_new (e_minicard_view_widget_get_type ())); -} - -static void -e_minicard_view_widget_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EMinicardViewWidget *emvw; - - emvw = E_MINICARD_VIEW_WIDGET (o); - - switch (arg_id){ - case ARG_BOOK: - if (emvw->book) - gtk_object_unref(GTK_OBJECT(emvw->book)); - emvw->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); - if (emvw->book) - gtk_object_ref(GTK_OBJECT(emvw->book)); - if (emvw->emv) - gtk_object_set(GTK_OBJECT(emvw->emv), - "book", emvw->book, - NULL); - break; - case ARG_QUERY: - emvw->query = g_strdup(GTK_VALUE_STRING (*arg)); - if (emvw->emv) - gtk_object_set(GTK_OBJECT(emvw->emv), - "query", emvw->query, - NULL); - break; - } -} - -static void -e_minicard_view_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardViewWidget *emvw; - - emvw = E_MINICARD_VIEW_WIDGET (object); - - switch (arg_id) { - case ARG_BOOK: - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(emvw->book); - break; - case ARG_QUERY: - GTK_VALUE_STRING (*arg) = g_strdup(emvw->query); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_view_widget_destroy (GtkObject *object) -{ - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(object); - - if (view->book) - gtk_object_unref(GTK_OBJECT(view->book)); - g_free(view->query); - - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} - -static void -e_minicard_view_widget_realize (GtkWidget *widget) -{ - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); - - view->rect = gnome_canvas_item_new( - gnome_canvas_root( GNOME_CANVAS(view) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - - view->emv = gnome_canvas_item_new( - gnome_canvas_root( GNOME_CANVAS(view) ), - e_minicard_view_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - gtk_object_set(GTK_OBJECT(view->emv), - "book", view->book, - "query", view->query, - NULL); - - if (GTK_WIDGET_CLASS(parent_class)->realize) - GTK_WIDGET_CLASS(parent_class)->realize (widget); -} - -static void -e_minicard_view_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation) -{ - if (GTK_WIDGET_CLASS(parent_class)->size_allocate) - GTK_WIDGET_CLASS(parent_class)->size_allocate (widget, allocation); - - if (GTK_WIDGET_REALIZED(widget)) { - double width; - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(widget); - - gnome_canvas_item_set( view->emv, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( view->emv, - "minimum_width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(view->emv), - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region (GNOME_CANVAS (view), 0, 0, width - 1, allocation->height - 1); - gnome_canvas_item_set( view->rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); - } -} - -static void -e_minicard_view_widget_reflow(ECanvas *canvas) -{ - double width; - EMinicardViewWidget *view = E_MINICARD_VIEW_WIDGET(canvas); - - if (E_CANVAS_CLASS(parent_class)->reflow) - E_CANVAS_CLASS(parent_class)->reflow (canvas); - - gtk_object_get(GTK_OBJECT(view->emv), - "width", &width, - NULL); - width = MAX(width, GTK_WIDGET(canvas)->allocation.width); - gnome_canvas_set_scroll_region(GNOME_CANVAS(canvas), 0, 0, width - 1, GTK_WIDGET(canvas)->allocation.width - 1); - gnome_canvas_item_set( view->rect, - "x2", (double) width, - "y2", (double) GTK_WIDGET(canvas)->allocation.height, - NULL ); -} - -void -e_minicard_view_widget_remove_selection(EMinicardViewWidget *view, - EBookCallback cb, - gpointer closure) -{ - if (view->emv) - e_minicard_view_remove_selection(E_MINICARD_VIEW(view->emv), cb, closure); -} - -void e_minicard_view_widget_jump_to_letter (EMinicardViewWidget *view, - char letter) -{ - if (view->emv) - e_minicard_view_jump_to_letter(E_MINICARD_VIEW(view->emv), letter); -} diff --git a/addressbook/gui/widgets/e-minicard-view-widget.h b/addressbook/gui/widgets/e-minicard-view-widget.h deleted file mode 100644 index 340fb1e03c..0000000000 --- a/addressbook/gui/widgets/e-minicard-view-widget.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view-widget.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_VIEW_WIDGET_H__ -#define __E_MINICARD_VIEW_WIDGET_H__ - -#include -#include "e-minicard-view.h" -#include "e-util/e-canvas.h" -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_MINICARD_VIEW_WIDGET_TYPE (e_minicard_view_widget_get_type ()) -#define E_MINICARD_VIEW_WIDGET(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_VIEW_WIDGET_TYPE, EMinicardViewWidget)) -#define E_MINICARD_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_VIEW_WIDGET_TYPE, EMinicardViewWidgetClass)) -#define E_IS_MINICARD_VIEW_WIDGET(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_VIEW_WIDGET_TYPE)) -#define E_IS_MINICARD_VIEW_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_VIEW_WIDGET_TYPE)) - - -typedef struct _EMinicardViewWidget EMinicardViewWidget; -typedef struct _EMinicardViewWidgetClass EMinicardViewWidgetClass; - -struct _EMinicardViewWidget -{ - ECanvas parent; - - GnomeCanvasItem *rect; - GnomeCanvasItem *emv; - - EBook *book; - char *query; -}; - -struct _EMinicardViewWidgetClass -{ - ECanvasClass parent_class; -}; - -GtkType e_minicard_view_widget_get_type (void); -void e_minicard_view_widget_remove_selection (EMinicardViewWidget *view, - EBookCallback cb, - gpointer closure); -void e_minicard_view_widget_jump_to_letter (EMinicardViewWidget *view, - char letter); - -GtkWidget *e_minicard_view_widget_new (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_MINICARD_VIEW_WIDGET_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c deleted file mode 100644 index 011ff9158f..0000000000 --- a/addressbook/gui/widgets/e-minicard-view.c +++ /dev/null @@ -1,432 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard-view.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "e-minicard-view.h" -#include "e-minicard.h" -#include "e-contact-editor.h" -static void e_minicard_view_init (EMinicardView *reflow); -static void e_minicard_view_class_init (EMinicardViewClass *klass); -static void e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_view_destroy (GtkObject *object); -static gboolean e_minicard_view_event (GnomeCanvasItem *item, GdkEvent *event); -static void canvas_destroy (GtkObject *object, EMinicardView *view); -static void disconnect_signals (EMinicardView *view); - -static EReflowSortedClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_BOOK, - ARG_QUERY -}; - -GtkType -e_minicard_view_get_type (void) -{ - static GtkType reflow_type = 0; - - if (!reflow_type) - { - static const GtkTypeInfo reflow_info = - { - "EMinicardView", - sizeof (EMinicardView), - sizeof (EMinicardViewClass), - (GtkClassInitFunc) e_minicard_view_class_init, - (GtkObjectInitFunc) e_minicard_view_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - reflow_type = gtk_type_unique (e_reflow_sorted_get_type (), &reflow_info); - } - - return reflow_type; -} - -static void -e_minicard_view_class_init (EMinicardViewClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (e_reflow_sorted_get_type ()); - - gtk_object_add_arg_type ("EMinicardView::book", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_BOOK); - gtk_object_add_arg_type ("EMinicardView::query", GTK_TYPE_STRING, - GTK_ARG_READWRITE, ARG_QUERY); - - object_class->set_arg = e_minicard_view_set_arg; - object_class->get_arg = e_minicard_view_get_arg; - object_class->destroy = e_minicard_view_destroy; - - item_class->event = e_minicard_view_event; - - /* GnomeCanvasItem method overrides */ -} - -static void -e_minicard_view_init (EMinicardView *view) -{ - view->book = NULL; - view->query = g_strdup("(contains \"x-evolution-any-field\" \"\")"); - view->book_view = NULL; - view->get_view_idle = 0; - view->create_card_id = 0; - view->remove_card_id = 0; - view->modify_card_id = 0; - view->canvas_destroy_id = 0; - - gtk_object_set(GTK_OBJECT(view), - "empty_message", _("\n\nThere are no items to show in this view\n\n" - "Double-click here to create a new Contact."), - NULL); - - E_REFLOW_SORTED(view)->compare_func = (GCompareFunc) e_minicard_compare; - E_REFLOW_SORTED(view)->string_func = (EReflowStringFunc) e_minicard_get_card_id; -} - -static void -create_card(EBookView *book_view, const GList *cards, EMinicardView *view) -{ - for (; cards; cards = g_list_next(cards)) { - GnomeCanvasItem *item = gnome_canvas_item_new(GNOME_CANVAS_GROUP(view), - e_minicard_get_type(), - "card", cards->data, - NULL); - e_reflow_add_item(E_REFLOW(view), item); - } -} - -static void -modify_card(EBookView *book_view, const GList *cards, EMinicardView *view) -{ - for (; cards; cards = g_list_next(cards)) { - ECard *card = cards->data; - gchar *id = e_card_get_id(card); - GnomeCanvasItem *item = e_reflow_sorted_get_item(E_REFLOW_SORTED(view), id); - if (item && !GTK_OBJECT_DESTROYED(item)) { - gnome_canvas_item_set(item, - "card", card, - NULL); - e_reflow_sorted_reorder_item(E_REFLOW_SORTED(view), id); - } - } -} - -static void -remove_card(EBookView *book_view, const char *id, EMinicardView *view) -{ - e_reflow_sorted_remove_item(E_REFLOW_SORTED(view), id); -} - -static void -book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, gpointer closure) -{ - EMinicardView *view = closure; - disconnect_signals(view); - if (view->book_view) - gtk_object_unref(GTK_OBJECT(view->book_view)); - - if (!view->canvas_destroy_id) - view->canvas_destroy_id = - gtk_signal_connect(GTK_OBJECT(GNOME_CANVAS_ITEM(view)->canvas), - "destroy", GTK_SIGNAL_FUNC(canvas_destroy), - view); - - view->book_view = book_view; - if (view->book_view) - gtk_object_ref(GTK_OBJECT(view->book_view)); - - - view->create_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), - "card_added", - GTK_SIGNAL_FUNC(create_card), - view); - view->remove_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), - "card_removed", - GTK_SIGNAL_FUNC(remove_card), - view); - view->modify_card_id = gtk_signal_connect(GTK_OBJECT(view->book_view), - "card_changed", - GTK_SIGNAL_FUNC(modify_card), - view); - - g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_unref, NULL); - g_list_foreach(E_REFLOW(view)->items, (GFunc) gtk_object_destroy, NULL); - g_list_free(E_REFLOW(view)->items); - E_REFLOW(view)->items = NULL; - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(view)); -} - -static gboolean -get_view(EMinicardView *view) -{ - if (view->book && view->query) - e_book_get_book_view(view->book, view->query, book_view_loaded, view); - - view->get_view_idle = 0; - return FALSE; -} - -static void -e_minicard_view_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EMinicardView *view; - - item = GNOME_CANVAS_ITEM (o); - view = E_MINICARD_VIEW (o); - - switch (arg_id){ - case ARG_BOOK: - if (view->book) - gtk_object_unref(GTK_OBJECT(view->book)); - if (GTK_VALUE_OBJECT (*arg)) { - view->book = E_BOOK(GTK_VALUE_OBJECT (*arg)); - gtk_object_ref(GTK_OBJECT(view->book)); - if (view->get_view_idle == 0) - view->get_view_idle = g_idle_add((GSourceFunc)get_view, view); - } - else - view->book = NULL; - break; - case ARG_QUERY: - g_free(view->query); - view->query = g_strdup(GTK_VALUE_STRING (*arg)); - if (view->get_view_idle == 0) - view->get_view_idle = g_idle_add((GSourceFunc)get_view, view); - break; - } -} - -static void -e_minicard_view_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardView *e_minicard_view; - - e_minicard_view = E_MINICARD_VIEW (object); - - switch (arg_id) { - case ARG_BOOK: - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_minicard_view->book); - break; - case ARG_QUERY: - GTK_VALUE_STRING (*arg) = g_strdup(e_minicard_view->query); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_view_destroy (GtkObject *object) -{ - EMinicardView *view = E_MINICARD_VIEW(object); - - if (view->get_view_idle) - g_source_remove(view->get_view_idle); - if (view->canvas_destroy_id) - gtk_signal_disconnect(GTK_OBJECT (GNOME_CANVAS_ITEM(view)->canvas), - view->canvas_destroy_id); - disconnect_signals(view); - g_free(view->query); - if (view->book) - gtk_object_unref(GTK_OBJECT(view->book)); - if (view->book_view) - gtk_object_unref(GTK_OBJECT(view->book_view)); - - GTK_OBJECT_CLASS(parent_class)->destroy (object); -} - -static void -card_added_cb (EBook* book, EBookStatus status, const char *id, - gpointer user_data) -{ - g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__); -} - -static void -card_changed_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - g_print ("%s: %s(): a card was changed with status %d\n", __FILE__, __FUNCTION__, status); -} - -/* Callback for the add_card signal from the contact editor */ -static void -add_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_add_card (book, card, card_added_cb, NULL); -} - -/* Callback for the commit_card signal from the contact editor */ -static void -commit_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_commit_card (book, card, card_changed_cb, NULL); -} - -/* Callback used when the contact editor is closed */ -static void -editor_closed_cb (EContactEditor *ce, gpointer data) -{ - gtk_object_unref (GTK_OBJECT (ce)); -} - -static gboolean -e_minicard_view_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicardView *view; - - view = E_MINICARD_VIEW (item); - - switch( event->type ) { - case GDK_2BUTTON_PRESS: - if (((GdkEventButton *)event)->button == 1) - { - ECard *card; - EContactEditor *ce; - EBook *book; - - card = e_card_new(""); - - gtk_object_get(GTK_OBJECT(view), "book", &book, NULL); - g_assert (E_IS_BOOK (book)); - - ce = e_contact_editor_new (card, TRUE); - - gtk_signal_connect (GTK_OBJECT (ce), "add_card", - GTK_SIGNAL_FUNC (add_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "commit_card", - GTK_SIGNAL_FUNC (commit_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), NULL); - - gtk_object_sink(GTK_OBJECT(card)); - } - return TRUE; - default: - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->event) - return GNOME_CANVAS_ITEM_CLASS(parent_class)->event(item, event); - else - return FALSE; - break; - } -} - -static void -disconnect_signals(EMinicardView *view) -{ - if (view->book_view && view->create_card_id) - gtk_signal_disconnect(GTK_OBJECT (view->book_view), - view->create_card_id); - if (view->book_view && view->remove_card_id) - gtk_signal_disconnect(GTK_OBJECT (view->book_view), - view->remove_card_id); - if (view->book_view && view->modify_card_id) - gtk_signal_disconnect(GTK_OBJECT (view->book_view), - view->modify_card_id); - - view->create_card_id = 0; - view->remove_card_id = 0; - view->modify_card_id = 0; -} - -static void -canvas_destroy(GtkObject *object, EMinicardView *view) -{ - disconnect_signals(view); -} - -void -e_minicard_view_remove_selection(EMinicardView *view, - EBookCallback cb, - gpointer closure) -{ - if (view->book) { - EReflow *reflow = E_REFLOW(view); - GList *list; - for (list = reflow->items; list; list = g_list_next(list)) { - GnomeCanvasItem *item = list->data; - gboolean has_focus; - gtk_object_get(GTK_OBJECT(item), - "has_focus", &has_focus, - NULL); - if (has_focus) { - ECard *card; - gtk_object_get(GTK_OBJECT(item), - "card", &card, - NULL); - e_book_remove_card(view->book, card, cb, closure); - return; - } - } - } -} - -static int -compare_to_letter(EMinicard *card, char *letter) -{ - g_return_val_if_fail(card != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(card), 0); - - if (*letter == '1') - return 1; - - if (card->card) { - char *file_as; - gtk_object_get(GTK_OBJECT(card->card), - "file_as", &file_as, - NULL); - if (file_as) - return strncasecmp(file_as, letter, 1); - else - return 0; - } else { - return 0; - } -} - -void e_minicard_view_jump_to_letter (EMinicardView *view, - char letter) -{ - e_reflow_sorted_jump(E_REFLOW_SORTED(view), - (GCompareFunc) compare_to_letter, - &letter); -} diff --git a/addressbook/gui/widgets/e-minicard-view.h b/addressbook/gui/widgets/e-minicard-view.h deleted file mode 100644 index a166a6ade1..0000000000 --- a/addressbook/gui/widgets/e-minicard-view.h +++ /dev/null @@ -1,95 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-view.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_VIEW_H__ -#define __E_MINICARD_VIEW_H__ - -#include -#include "e-reflow-sorted.h" -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardView - A canvas item container. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * book EBook RW book to query - * query string RW query string - * - * From EReflowSorted: (you should really know what you're doing if you set these.) - * compare_func GCompareFunc RW compare function - * string_func EReflowStringFunc RW string function - * - * From EReflow: - * minimum_width double RW minimum width of the reflow. width >= minimum_width - * width double R width of the reflow - * height double RW height of the reflow - */ - -#define E_MINICARD_VIEW_TYPE (e_minicard_view_get_type ()) -#define E_MINICARD_VIEW(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_VIEW_TYPE, EMinicardView)) -#define E_MINICARD_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_VIEW_TYPE, EMinicardViewClass)) -#define E_IS_MINICARD_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_VIEW_TYPE)) -#define E_IS_MINICARD_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_VIEW_TYPE)) - - -typedef struct _EMinicardView EMinicardView; -typedef struct _EMinicardViewClass EMinicardViewClass; - -struct _EMinicardView -{ - EReflowSorted parent; - - /* item specific fields */ - EBook *book; - char *query; - EBookView *book_view; - - int get_view_idle; - - int canvas_destroy_id; - - int create_card_id, remove_card_id, modify_card_id; -}; - -struct _EMinicardViewClass -{ - EReflowSortedClass parent_class; -}; - -GtkType e_minicard_view_get_type (void); -void e_minicard_view_remove_selection (EMinicardView *view, - EBookCallback cb, - gpointer closure); -void e_minicard_view_jump_to_letter (EMinicardView *view, - char letter); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_VIEW_H__ */ diff --git a/addressbook/gui/widgets/e-minicard-widget-test.c b/addressbook/gui/widgets/e-minicard-widget-test.c deleted file mode 100644 index f6489f2a6a..0000000000 --- a/addressbook/gui/widgets/e-minicard-widget-test.c +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"ORG:Helix Code, Inc. -" \ -"TITLE:Head Geek -" \ -"ROLE:Programmer/Executive -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@helixcode.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - -#include "config.h" - -#include -#include "e-minicard-widget.h" - -/* This is a horrible thing to do, but it is just a test. */ - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Widget Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the minicard widget" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *minicard; - ECard *card; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Widget Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Widget Test", NULL); - - minicard = e_minicard_widget_new(); - card = e_card_new(TEST_VCARD); - gtk_object_set(GTK_OBJECT(minicard), - "card", card, - NULL); - - gnome_app_set_contents( GNOME_APP( app ), minicard ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/e-minicard-widget.c b/addressbook/gui/widgets/e-minicard-widget.c deleted file mode 100644 index 3f765425e4..0000000000 --- a/addressbook/gui/widgets/e-minicard-widget.c +++ /dev/null @@ -1,236 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-table-field-chooser.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-minicard-widget.h" -#include "e-minicard.h" - -static void e_minicard_widget_init (EMinicardWidget *card); -static void e_minicard_widget_class_init (EMinicardWidgetClass *klass); -static void e_minicard_widget_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_widget_destroy (GtkObject *object); -static void e_minicard_widget_size_request (GtkWidget *widget, GtkRequisition *requisition); -static void e_minicard_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -static void e_minicard_widget_reflow (ECanvas *canvas); - -static ECanvasClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0, - ARG_CARD, -}; - -GtkType -e_minicard_widget_get_type (void) -{ - static GtkType type = 0; - - if (!type) - { - static const GtkTypeInfo info = - { - "EMinicardWidget", - sizeof (EMinicardWidget), - sizeof (EMinicardWidgetClass), - (GtkClassInitFunc) e_minicard_widget_class_init, - (GtkObjectInitFunc) e_minicard_widget_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (e_canvas_get_type (), &info); - } - - return type; -} - -static void -e_minicard_widget_class_init (EMinicardWidgetClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - ECanvasClass *ecanvas_class; - - object_class = GTK_OBJECT_CLASS(klass); - widget_class = GTK_WIDGET_CLASS(klass); - ecanvas_class = E_CANVAS_CLASS(klass); - - parent_class = gtk_type_class (e_canvas_get_type ()); - - object_class->set_arg = e_minicard_widget_set_arg; - object_class->get_arg = e_minicard_widget_get_arg; - object_class->destroy = e_minicard_widget_destroy; - - widget_class->size_request = e_minicard_widget_size_request; - widget_class->size_allocate = e_minicard_widget_size_allocate; - - ecanvas_class->reflow = e_minicard_widget_reflow; - - gtk_object_add_arg_type ("EMinicardWidget::card", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_CARD); -} - -static void -e_minicard_widget_size_request(GtkWidget *widget, GtkRequisition *requisition) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(widget); - gtk_object_get(GTK_OBJECT(emw->item), - "height", &height, - NULL); - if (height <= 0) - height = 1; - widget->requisition.height = height; - widget->requisition.width = 200; - requisition->height = height; - requisition->width = 200; -} - -static void -e_minicard_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(widget); - gnome_canvas_item_set( emw->item, - "width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(emw->item), - "height", &height, - NULL); - height = MAX(height, allocation->height); - gnome_canvas_set_scroll_region(GNOME_CANVAS( emw ), 0, 0, allocation->width - 1, height - 1); - gnome_canvas_item_set( emw->rect, - "x2", (double) allocation->width, - "y2", (double) height, - NULL ); - if (GTK_WIDGET_CLASS(parent_class)->size_allocate) - GTK_WIDGET_CLASS(parent_class)->size_allocate(widget, allocation); -} - -static void e_minicard_widget_reflow(ECanvas *canvas) -{ - double height; - EMinicardWidget *emw = E_MINICARD_WIDGET(canvas); - gtk_object_get(GTK_OBJECT(emw->item), - "height", &height, - NULL); - - height = MAX(height, GTK_WIDGET(emw)->allocation.height); - - gnome_canvas_set_scroll_region (GNOME_CANVAS(emw), 0, 0, GTK_WIDGET(emw)->allocation.width - 1, height - 1); - gnome_canvas_item_set( emw->rect, - "x2", (double) GTK_WIDGET(emw)->allocation.width, - "y2", (double) height, - NULL ); - - gtk_widget_queue_resize(GTK_WIDGET(canvas)); -} - -static void -e_minicard_widget_init (EMinicardWidget *emw) -{ - emw->rect = gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(emw)), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - - emw->item = gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(emw)), - e_minicard_get_type(), - "width", (double) 100, - NULL ); - - gnome_canvas_set_scroll_region ( GNOME_CANVAS( emw ), - 0, 0, - 100, 100 ); - - emw->card = NULL; -} - -static void -e_minicard_widget_destroy (GtkObject *object) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - if (emw->card) - gtk_object_unref(GTK_OBJECT(emw->card)); - - if (GTK_OBJECT_CLASS(parent_class)->destroy) - GTK_OBJECT_CLASS(parent_class)->destroy(object); -} - -GtkWidget* -e_minicard_widget_new (void) -{ - GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_minicard_widget_get_type ())); - return widget; -} - -static void -e_minicard_widget_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - switch (arg_id){ - case ARG_CARD: - if (emw->card) - gtk_object_unref(GTK_OBJECT(emw->card)); - if (GTK_VALUE_OBJECT(*arg)) { - emw->card = E_CARD(GTK_VALUE_OBJECT(*arg)); - gtk_object_ref(GTK_OBJECT(emw->card)); - } - else - emw->card = NULL; - if (emw->item) - gtk_object_set(GTK_OBJECT(emw->item), - "card", emw->card, - NULL); - break; - default: - break; - } -} - -static void -e_minicard_widget_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicardWidget *emw = E_MINICARD_WIDGET(object); - - switch (arg_id) { - case ARG_CARD: - if (emw->card) - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(emw->card); - else - GTK_VALUE_OBJECT (*arg) = NULL; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} diff --git a/addressbook/gui/widgets/e-minicard-widget.h b/addressbook/gui/widgets/e-minicard-widget.h deleted file mode 100644 index 8a3ec0ae16..0000000000 --- a/addressbook/gui/widgets/e-minicard-widget.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard-widget.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_WIDGET_H__ -#define __E_MINICARD_WIDGET_H__ - -#include -#include "addressbook/backend/ebook/e-card.h" -#include "e-util/e-canvas.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicardWidget - A card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - */ - -#define E_MINICARD_WIDGET_TYPE (e_minicard_widget_get_type ()) -#define E_MINICARD_WIDGET(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_WIDGET_TYPE, EMinicardWidget)) -#define E_MINICARD_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_WIDGET_TYPE, EMinicardWidgetClass)) -#define E_IS_MINICARD_WIDGET(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_WIDGET_TYPE)) -#define E_IS_MINICARD_WIDGET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_WIDGET_TYPE)) - - -typedef struct _EMinicardWidget EMinicardWidget; -typedef struct _EMinicardWidgetClass EMinicardWidgetClass; - -struct _EMinicardWidget -{ - ECanvas parent; - - /* item specific fields */ - GnomeCanvasItem *item; - - GnomeCanvasItem *rect; - ECard *card; -}; - -struct _EMinicardWidgetClass -{ - ECanvasClass parent_class; -}; - - -GtkWidget *e_minicard_widget_new(void); -GtkType e_minicard_widget_get_type (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_WIDGET_H__ */ diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c deleted file mode 100644 index e9bb85c89d..0000000000 --- a/addressbook/gui/widgets/e-minicard.c +++ /dev/null @@ -1,797 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-minicard.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "e-minicard.h" -#include "e-minicard-label.h" -#include "e-text.h" -#include -#include -#include -#include -#include -#include "addressbook/printing/e-contact-print.h" -#include "e-contact-editor.h" -#include "e-contact-save-as.h" -#include "e-minicard-view.h" - -static void e_minicard_init (EMinicard *card); -static void e_minicard_class_init (EMinicardClass *klass); -static void e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_minicard_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_minicard_destroy (GtkObject *object); -static gboolean e_minicard_event (GnomeCanvasItem *item, GdkEvent *event); -static void e_minicard_realize (GnomeCanvasItem *item); -static void e_minicard_unrealize (GnomeCanvasItem *item); -static void e_minicard_reflow ( GnomeCanvasItem *item, int flags ); - -static void e_minicard_resize_children( EMinicard *e_minicard ); -static void remodel( EMinicard *e_minicard ); - -static GnomeCanvasGroupClass *parent_class = NULL; - -typedef struct _EMinicardField EMinicardField; - -struct _EMinicardField { - ECardSimpleField field; - GnomeCanvasItem *label; -}; - -#define E_MINICARD_FIELD(field) ((EMinicardField *)(field)) - -static void -e_minicard_field_destroy(EMinicardField *field) -{ - gtk_object_destroy(GTK_OBJECT(field->label)); - g_free(field); -} - -/* The arguments we take */ -enum { - ARG_0, - ARG_WIDTH, - ARG_HEIGHT, - ARG_HAS_FOCUS, - ARG_CARD -}; - -GtkType -e_minicard_get_type (void) -{ - static GtkType minicard_type = 0; - - if (!minicard_type) - { - static const GtkTypeInfo minicard_info = - { - "EMinicard", - sizeof (EMinicard), - sizeof (EMinicardClass), - (GtkClassInitFunc) e_minicard_class_init, - (GtkObjectInitFunc) e_minicard_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - minicard_type = gtk_type_unique (gnome_canvas_group_get_type (), &minicard_info); - } - - return minicard_type; -} - -static void -e_minicard_class_init (EMinicardClass *klass) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass*) klass; - item_class = (GnomeCanvasItemClass *) klass; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - gtk_object_add_arg_type ("EMinicard::width", GTK_TYPE_DOUBLE, - GTK_ARG_READWRITE, ARG_WIDTH); - gtk_object_add_arg_type ("EMinicard::height", GTK_TYPE_DOUBLE, - GTK_ARG_READABLE, ARG_HEIGHT); - gtk_object_add_arg_type ("EMinicard::has_focus", GTK_TYPE_ENUM, - GTK_ARG_READWRITE, ARG_HAS_FOCUS); - gtk_object_add_arg_type ("EMinicard::card", GTK_TYPE_OBJECT, - GTK_ARG_READWRITE, ARG_CARD); - - object_class->set_arg = e_minicard_set_arg; - object_class->get_arg = e_minicard_get_arg; - object_class->destroy = e_minicard_destroy; - - /* GnomeCanvasItem method overrides */ - item_class->realize = e_minicard_realize; - item_class->unrealize = e_minicard_unrealize; - item_class->event = e_minicard_event; -} - -static void -e_minicard_init (EMinicard *minicard) -{ - /* minicard->card = NULL;*/ - minicard->rect = NULL; - minicard->fields = NULL; - minicard->width = 10; - minicard->height = 10; - minicard->has_focus = FALSE; - - minicard->card = NULL; - minicard->simple = e_card_simple_new(NULL); - - e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(minicard), e_minicard_reflow); -} - -static void -e_minicard_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EMinicard *e_minicard; - - item = GNOME_CANVAS_ITEM (o); - e_minicard = E_MINICARD (o); - - switch (arg_id){ - case ARG_WIDTH: - if (e_minicard->width != GTK_VALUE_DOUBLE (*arg)) { - e_minicard->width = GTK_VALUE_DOUBLE (*arg); - e_minicard_resize_children(e_minicard); - if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) - e_canvas_item_request_reflow(item); - } - break; - case ARG_HAS_FOCUS: - if (e_minicard->fields) { - if ( GTK_VALUE_ENUM(*arg) == E_FOCUS_START || - GTK_VALUE_ENUM(*arg) == E_FOCUS_CURRENT) { - gnome_canvas_item_set(E_MINICARD_FIELD(e_minicard->fields->data)->label, - "has_focus", GTK_VALUE_ENUM(*arg), - NULL); - } else if ( GTK_VALUE_ENUM(*arg) == E_FOCUS_END ) { - gnome_canvas_item_set(E_MINICARD_FIELD(g_list_last(e_minicard->fields)->data)->label, - "has_focus", GTK_VALUE_ENUM(*arg), - NULL); - } - } - else - e_canvas_item_grab_focus(item); - break; - case ARG_CARD: - if (e_minicard->card) - gtk_object_unref (GTK_OBJECT(e_minicard->card)); - e_minicard->card = E_CARD(GTK_VALUE_OBJECT (*arg)); - if (e_minicard->card) - gtk_object_ref (GTK_OBJECT(e_minicard->card)); - gtk_object_set(GTK_OBJECT(e_minicard->simple), - "card", e_minicard->card, - NULL); - remodel(e_minicard); - e_canvas_item_request_reflow(item); - break; - } -} - -static void -e_minicard_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EMinicard *e_minicard; - - e_minicard = E_MINICARD (object); - - switch (arg_id) { - case ARG_WIDTH: - GTK_VALUE_DOUBLE (*arg) = e_minicard->width; - break; - case ARG_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = e_minicard->height; - break; - case ARG_HAS_FOCUS: - GTK_VALUE_ENUM (*arg) = e_minicard->has_focus ? E_FOCUS_CURRENT : E_FOCUS_NONE; - break; - case ARG_CARD: - e_card_simple_sync_card(e_minicard->simple); - GTK_VALUE_OBJECT (*arg) = GTK_OBJECT(e_minicard->card); - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -e_minicard_destroy (GtkObject *object) -{ - EMinicard *e_minicard; - - g_return_if_fail (object != NULL); - g_return_if_fail (E_IS_MINICARD (object)); - - e_minicard = E_MINICARD (object); - - g_list_foreach(e_minicard->fields, (GFunc) e_minicard_field_destroy, NULL); - g_list_free(e_minicard->fields); - - if (e_minicard->card) - gtk_object_unref (GTK_OBJECT(e_minicard->card)); - if (e_minicard->simple) - gtk_object_unref (GTK_OBJECT(e_minicard->simple)); - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -static void -e_minicard_realize (GnomeCanvasItem *item) -{ - EMinicard *e_minicard; - GnomeCanvasGroup *group; - GtkWidget *canvas; - - e_minicard = E_MINICARD (item); - group = GNOME_CANVAS_GROUP( item ); - canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (item)->canvas); - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) (item); - - e_minicard->rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) e_minicard->width - 1, - "y2", (double) e_minicard->height - 1, - "outline_color", NULL, - NULL ); - - e_minicard->header_rect = - gnome_canvas_item_new( group, - gnome_canvas_rect_get_type(), - "x1", (double) 2, - "y1", (double) 2, - "x2", (double) e_minicard->width - 3, - "y2", (double) e_minicard->height - 3, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - - e_minicard->header_text = - gnome_canvas_item_new( group, - e_text_get_type(), - "anchor", GTK_ANCHOR_NW, - "width", (double) ( e_minicard->width - 12 ), - "clip", TRUE, - "use_ellipsis", TRUE, - "font", "lucidasans-bold-10", - "fill_color_gdk", &canvas->style->fg[GTK_STATE_NORMAL], - "text", "", - NULL ); - e_canvas_item_move_absolute(e_minicard->header_text, 6, 6); - - remodel(e_minicard); - e_canvas_item_request_reflow(item); - - if (!item->canvas->aa) { - } -} - -static void -e_minicard_unrealize (GnomeCanvasItem *item) -{ - EMinicard *e_minicard; - - e_minicard = E_MINICARD (item); - - if (!item->canvas->aa) - { - } - - if (GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) - (* GNOME_CANVAS_ITEM_CLASS(parent_class)->unrealize) (item); -} - -static void -card_added_cb (EBook* book, EBookStatus status, const char *id, gpointer user_data) -{ - g_print ("%s: %s(): a card was added\n", __FILE__, __FUNCTION__); -} - -static void -card_changed_cb (EBook* book, EBookStatus status, gpointer user_data) -{ - g_print ("%s: %s(): a card was changed with status %d\n", __FILE__, __FUNCTION__, status); -} - -static void -save_as (GtkWidget *widget, EMinicard *minicard) -{ - e_card_simple_sync_card(minicard->simple); - e_contact_save_as(_("Save as VCard"), minicard->card); -} - -static void -delete (GtkWidget *widget, EMinicard *minicard) -{ - EBook *book; - - if (e_contact_editor_confirm_delete()) { - e_card_simple_sync_card(minicard->simple); - - gtk_object_get(GTK_OBJECT(GNOME_CANVAS_ITEM(minicard)->parent), - "book", &book, - NULL); - - /* Add the card in the contact editor to our ebook */ - e_book_remove_card (book, - minicard->card, - card_changed_cb, - NULL); - } -} - -static void -print (GtkWidget *widget, EMinicard *minicard) -{ - e_card_simple_sync_card(minicard->simple); - - gtk_widget_show(e_contact_print_card_dialog_new(minicard->card)); -} - -/* Callback for the add_card signal from the contact editor */ -static void -add_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_add_card (book, card, card_added_cb, NULL); -} - -/* Callback for the commit_card signal from the contact editor */ -static void -commit_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_commit_card (book, card, card_changed_cb, NULL); -} - -/* Callback for the commit_card signal from the contact editor */ -static void -delete_card_cb (EContactEditor *ce, ECard *card, gpointer data) -{ - EBook *book; - - book = E_BOOK (data); - e_book_remove_card (book, card, card_changed_cb, NULL); -} - -/* Callback used when the contact editor is closed */ -static void -editor_closed_cb (EContactEditor *ce, gpointer data) -{ - gtk_object_unref (GTK_OBJECT (ce)); -} - -static gboolean -e_minicard_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EMinicard *e_minicard; - GtkWidget *canvas; - - e_minicard = E_MINICARD (item); - canvas = GTK_WIDGET (GNOME_CANVAS_ITEM (item)->canvas); - - switch( event->type ) { - case GDK_FOCUS_CHANGE: - { - GdkEventFocus *focus_event = (GdkEventFocus *) event; - if ( focus_event->in ) { - gnome_canvas_item_set( e_minicard->rect, - "outline_color_gdk", &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "fill_color_gdk", &canvas->style->bg[GTK_STATE_SELECTED], - NULL ); - gnome_canvas_item_set( e_minicard->header_text, - "fill_color_gdk", &canvas->style->text[GTK_STATE_SELECTED], - NULL ); - e_minicard->has_focus = TRUE; - } else { - EBook *book = NULL; - - e_card_simple_sync_card(e_minicard->simple); - - if (E_IS_MINICARD_VIEW(GNOME_CANVAS_ITEM(e_minicard)->parent)) { - - gtk_object_get(GTK_OBJECT(GNOME_CANVAS_ITEM(e_minicard)->parent), - "book", &book, - NULL); - - } - - if (book) { - - /* Add the card in the contact editor to our ebook */ - e_book_commit_card (book, - e_minicard->card, - card_changed_cb, - NULL); - } else { - remodel(e_minicard); - e_canvas_item_request_reflow(GNOME_CANVAS_ITEM(e_minicard)); - } - - gnome_canvas_item_set( e_minicard->rect, - "outline_color", NULL, - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "fill_color_gdk", - &canvas->style->bg[GTK_STATE_NORMAL], - NULL ); - gnome_canvas_item_set( e_minicard->header_text, - "fill_color_gdk", - &canvas->style->fg[GTK_STATE_NORMAL], - NULL ); - e_minicard->has_focus = FALSE; - } - } - break; - case GDK_BUTTON_PRESS: - if (event->button.button == 1) { - e_canvas_item_grab_focus(item); - } else if (event->button.button == 3) { - if (E_IS_MINICARD_VIEW(item->parent)) { - EPopupMenu menu[] = { {"Save as VCard", NULL, GTK_SIGNAL_FUNC(save_as), 0}, - {"Print", NULL, GTK_SIGNAL_FUNC(print), 0}, - {"Delete", NULL, GTK_SIGNAL_FUNC(delete), 0}, - {NULL, NULL, NULL, 0}}; - e_popup_menu_run (menu, (GdkEventButton *)event, 0, 0, e_minicard); - } else { - EPopupMenu menu[] = { {"Save as VCard", NULL, GTK_SIGNAL_FUNC(save_as), 0}, - {"Print", NULL, GTK_SIGNAL_FUNC(print), 0}, - {NULL, NULL, NULL, 0}}; - e_popup_menu_run (menu, (GdkEventButton *)event, 0, 0, e_minicard); - } - } - break; - - case GDK_2BUTTON_PRESS: - if (event->button.button == 1 && E_IS_MINICARD_VIEW(item->parent)) { - EContactEditor *ce; - EBook *book = NULL; - if (E_IS_MINICARD_VIEW(item->parent)) { - - gtk_object_get(GTK_OBJECT(item->parent), - "book", &book, - NULL); - } - ce = e_contact_editor_new (e_minicard->card, FALSE); - - if (book != NULL) { - gtk_signal_connect (GTK_OBJECT (ce), "add_card", - GTK_SIGNAL_FUNC (add_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "commit_card", - GTK_SIGNAL_FUNC (commit_card_cb), book); - gtk_signal_connect (GTK_OBJECT (ce), "delete_card", - GTK_SIGNAL_FUNC (delete_card_cb), book); - } - - gtk_signal_connect (GTK_OBJECT (ce), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), NULL); - return TRUE; - } - break; - case GDK_KEY_PRESS: - if (event->key.keyval == GDK_Tab || - event->key.keyval == GDK_KP_Tab || - event->key.keyval == GDK_ISO_Left_Tab) { - GList *list; - for (list = e_minicard->fields; list; list = list->next) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - EFocus has_focus; - gtk_object_get(GTK_OBJECT(item), - "has_focus", &has_focus, - NULL); - if (has_focus != E_FOCUS_NONE) { - if (event->key.state & GDK_SHIFT_MASK) - list = list->prev; - else - list = list->next; - if (list) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - gnome_canvas_item_set(item, - "has_focus", (event->key.state & GDK_SHIFT_MASK) ? E_FOCUS_END : E_FOCUS_START, - NULL); - return 1; - } else { - return 0; - } - } - } - } - default: - break; - } - - if (GNOME_CANVAS_ITEM_CLASS( parent_class )->event) - return (* GNOME_CANVAS_ITEM_CLASS( parent_class )->event) (item, event); - else - return 0; -} - -static void -e_minicard_resize_children( EMinicard *e_minicard ) -{ - GList *list; - - if (e_minicard->header_text) { - gnome_canvas_item_set( e_minicard->header_text, - "width", (double) e_minicard->width - 12, - NULL ); - } - for ( list = e_minicard->fields; list; list = g_list_next( list ) ) { - gnome_canvas_item_set( E_MINICARD_FIELD( list->data )->label, - "width", (double) e_minicard->width - 4.0, - NULL ); - } -} - -static void -field_changed (EText *text, EMinicard *e_minicard) -{ - ECardSimpleType type; - char *string; - - type = GPOINTER_TO_INT - (gtk_object_get_data(GTK_OBJECT(text), - "EMinicard:field")); - gtk_object_get(GTK_OBJECT(text), - "text", &string, - NULL); - e_card_simple_set(e_minicard->simple, - type, - string); - g_free(string); -} - -static void -add_field (EMinicard *e_minicard, ECardSimpleField field, gdouble left_width) -{ - GnomeCanvasItem *new_item; - GnomeCanvasGroup *group; - ECardSimpleType type; - EMinicardField *minicard_field; - char *name; - char *string; - - group = GNOME_CANVAS_GROUP( e_minicard ); - - type = e_card_simple_type(e_minicard->simple, field); - name = g_strdup_printf("%s:", e_card_simple_get_name(e_minicard->simple, field)); - string = e_card_simple_get(e_minicard->simple, field); - - new_item = e_minicard_label_new(group); - gnome_canvas_item_set( new_item, - "width", e_minicard->width - 4.0, - "fieldname", name, - "field", string, - "max_field_name_length", left_width, - NULL ); - gtk_signal_connect(GTK_OBJECT(E_MINICARD_LABEL(new_item)->field), - "changed", GTK_SIGNAL_FUNC(field_changed), e_minicard); - gtk_object_set_data(GTK_OBJECT(E_MINICARD_LABEL(new_item)->field), - "EMinicard:field", - GINT_TO_POINTER(field)); - - minicard_field = g_new(EMinicardField, 1); - minicard_field->field = field; - minicard_field->label = new_item; - - e_minicard->fields = g_list_append( e_minicard->fields, minicard_field); - e_canvas_item_move_absolute(new_item, 2, e_minicard->height); - g_free(name); - g_free(string); -} - -static gdouble -get_left_width(EMinicard *e_minicard) -{ - gchar *name; - ECardSimpleField field; - gdouble width = -1; - static GdkFont *font = NULL; - - if (font == NULL) { - font = gdk_font_load("lucidasans-10"); - } - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { - gdouble this_width; - name = g_strdup_printf("%s:", e_card_simple_get_name(e_minicard->simple, field)); - this_width = gdk_text_width(font, name, strlen(name)); - if (width < this_width) - width = this_width; - g_free(name); - } - return width; -} - -static void -remodel( EMinicard *e_minicard ) -{ - int count = 0; - if (e_minicard->simple) { - ECardSimpleField field; - GList *list; - char *file_as; - gdouble left_width = -1; - - if (e_minicard->header_text) { - file_as = e_card_simple_get(e_minicard->simple, E_CARD_SIMPLE_FIELD_FILE_AS); - gnome_canvas_item_set( e_minicard->header_text, - "text", file_as ? file_as : "", - NULL ); - g_free(file_as); - } - - list = e_minicard->fields; - e_minicard->fields = NULL; - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST - 2 && count < 5; field++) { - EMinicardField *minicard_field = NULL; - - if (list) - minicard_field = list->data; - if (minicard_field && minicard_field->field == field) { - GList *this_list = list; - char *string; - - string = e_card_simple_get(e_minicard->simple, field); - if (string && *string) { - e_minicard->fields = g_list_append(e_minicard->fields, minicard_field); - gtk_object_set(GTK_OBJECT(minicard_field->label), - "field", string, - NULL); - count ++; - } else { - e_minicard_field_destroy(minicard_field); - } - list = g_list_remove_link(list, this_list); - g_list_free_1(this_list); - g_free(string); - } else { - char *string; - if (left_width == -1) { - left_width = get_left_width(e_minicard); - } - - string = e_card_simple_get(e_minicard->simple, field); - if (string && *string) { - add_field(e_minicard, field, left_width); - count++; - } - g_free(string); - } - } - - g_list_foreach(list, (GFunc) e_minicard_field_destroy, NULL); - g_list_free(list); - } -} - -static void -e_minicard_reflow( GnomeCanvasItem *item, int flags ) -{ - EMinicard *e_minicard = E_MINICARD(item); - if ( GTK_OBJECT_FLAGS( e_minicard ) & GNOME_CANVAS_ITEM_REALIZED ) { - GList *list; - gdouble text_height; - gint old_height; - - old_height = e_minicard->height; - - gtk_object_get( GTK_OBJECT( e_minicard->header_text ), - "text_height", &text_height, - NULL ); - - e_minicard->height = text_height + 10.0; - - gnome_canvas_item_set( e_minicard->header_rect, - "y2", text_height + 9.0, - NULL ); - - for(list = e_minicard->fields; list; list = g_list_next(list)) { - EMinicardField *field = E_MINICARD_FIELD(list->data); - GnomeCanvasItem *item = field->label; - gtk_object_get (GTK_OBJECT(item), - "height", &text_height, - NULL); - e_canvas_item_move_absolute(item, 2, e_minicard->height); - e_minicard->height += text_height; - } - e_minicard->height += 2; - - gnome_canvas_item_set( e_minicard->rect, - "y2", (double) e_minicard->height - 1, - NULL ); - - gnome_canvas_item_set( e_minicard->rect, - "x2", (double) e_minicard->width - 1.0, - "y2", (double) e_minicard->height - 1.0, - NULL ); - gnome_canvas_item_set( e_minicard->header_rect, - "x2", (double) e_minicard->width - 3.0, - NULL ); - - if (old_height != e_minicard->height) - e_canvas_item_request_parent_reflow(item); - } -} - -char * -e_minicard_get_card_id (EMinicard *minicard) -{ - g_return_val_if_fail(minicard != NULL, NULL); - g_return_val_if_fail(E_IS_MINICARD(minicard), NULL); - - if (minicard->card) { - return e_card_get_id(minicard->card); - } else { - return ""; - } -} - -int -e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2) -{ - g_return_val_if_fail(minicard1 != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(minicard1), 0); - g_return_val_if_fail(minicard2 != NULL, 0); - g_return_val_if_fail(E_IS_MINICARD(minicard2), 0); - - if (minicard1->card && minicard2->card) { - char *file_as1, *file_as2; - gtk_object_get(GTK_OBJECT(minicard1->card), - "file_as", &file_as1, - NULL); - gtk_object_get(GTK_OBJECT(minicard2->card), - "file_as", &file_as2, - NULL); - if (file_as1 && file_as2) - return strcasecmp(file_as1, file_as2); - if (file_as1) - return -1; - if (file_as2) - return 1; - return strcmp(e_minicard_get_card_id(minicard1), e_minicard_get_card_id(minicard2)); - } else { - return 0; - } -} diff --git a/addressbook/gui/widgets/e-minicard.h b/addressbook/gui/widgets/e-minicard.h deleted file mode 100644 index 47da8110c2..0000000000 --- a/addressbook/gui/widgets/e-minicard.h +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-minicard.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_MINICARD_H__ -#define __E_MINICARD_H__ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EMinicard - A small card displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * width double RW width of the card - * height double R height of the card - * card ECard* RW Pointer to the ECard - */ - -#define E_MINICARD_TYPE (e_minicard_get_type ()) -#define E_MINICARD(obj) (GTK_CHECK_CAST ((obj), E_MINICARD_TYPE, EMinicard)) -#define E_MINICARD_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_MINICARD_TYPE, EMinicardClass)) -#define E_IS_MINICARD(obj) (GTK_CHECK_TYPE ((obj), E_MINICARD_TYPE)) -#define E_IS_MINICARD_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_MINICARD_TYPE)) - - -typedef struct _EMinicard EMinicard; -typedef struct _EMinicardClass EMinicardClass; -typedef enum _EMinicardFocusType EMinicardFocusType; - -enum _EMinicardFocusType { - E_MINICARD_FOCUS_TYPE_START, - E_MINICARD_FOCUS_TYPE_END -}; - -struct _EMinicard -{ - GnomeCanvasGroup parent; - - /* item specific fields */ - ECard *card; - ECardSimple *simple; - - GnomeCanvasItem *rect; - GnomeCanvasItem *header_rect; - GnomeCanvasItem *header_text; - - GList *fields; /* Of type EMinicardField */ - guint needs_remodeling : 1; - - gboolean has_focus; - - double width; - double height; -}; - -struct _EMinicardClass -{ - GnomeCanvasGroupClass parent_class; - - void (* resize) (EMinicard *minicard); -}; - - -GtkType e_minicard_get_type (void); -char *e_minicard_get_card_id (EMinicard *minicard); -int e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_MINICARD_H__ */ diff --git a/addressbook/gui/widgets/test-minicard-label.c b/addressbook/gui/widgets/test-minicard-label.c deleted file mode 100644 index 57bc69222a..0000000000 --- a/addressbook/gui/widgets/test-minicard-label.c +++ /dev/null @@ -1,126 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard-label.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - - -#include "config.h" - -#include -#include "e-minicard-label.h" -#include - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *label; -GnomeCanvasItem *rect; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, allocation->height ); - gnome_canvas_item_set( label, - "width", (double) allocation->width, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( rect, - "x2", (double) allocation->width, - "y2", (double) allocation->height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Label Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the minicard label canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -static void button_press_callback( GtkWidget *widget, gpointer data ) -{ - gnome_canvas_item_grab_focus( label ); -} - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Label Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Label Test", NULL); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - label = e_minicard_label_new(gnome_canvas_root( GNOME_CANVAS( canvas ) )); - gnome_canvas_item_set( label, - "width", (double) 100, - "height", (double) 100, - "fieldname", "Full Name:", - "field", "Christopher James Lahey", - NULL ); - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gnome_app_set_contents( GNOME_APP( app ), canvas ); - - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "button_press_event", - GTK_SIGNAL_FUNC( button_press_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/test-minicard-view.c b/addressbook/gui/widgets/test-minicard-view.c deleted file mode 100644 index c03d11d07e..0000000000 --- a/addressbook/gui/widgets/test-minicard-view.c +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-reflow.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "config.h" - -#include -#include -#include -#include -#include "e-minicard-view.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *reflow; -GnomeCanvasItem *rect; -GtkAllocation last_alloc; - -CORBA_Environment ev; -CORBA_ORB orb; - -static void -init_bonobo (int argc, char **argv) -{ - - gnome_CORBA_init_with_popt_table ( - "Reflow Test", VERSION, - &argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); - - orb = gnome_CORBA_ORB (); - - if (bonobo_init (orb, NULL, NULL) == FALSE) - g_error (_("Could not initialize Bonobo")); - -} - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - double width; - last_alloc = *allocation; - gnome_canvas_item_set( reflow, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( reflow, - "minimum_width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, width, allocation->height ); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); -} - -static void resize(GnomeCanvas *canvas, gpointer data) -{ - double width; - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, last_alloc.width); - gnome_canvas_set_scroll_region(canvas , 0, 0, width, last_alloc.height ); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) last_alloc.height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Reflow Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the reflow canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -static void -book_open_cb (EBook *book, EBookStatus status, gpointer closure) -{ - if (status == E_BOOK_STATUS_SUCCESS) - gnome_canvas_item_set(reflow, - "book", book, - NULL); -} - -static guint -ebook_create (void) -{ - EBook *book; - - book = e_book_new (); - - if (!book) { - printf ("%s: %s(): Couldn't create EBook, bailing.\n", - __FILE__, - __FUNCTION__); - return FALSE; - } - - - if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) { - printf ("error calling load_uri!\n"); - } - - - return FALSE; -} - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - GtkWidget *vbox; - GtkWidget *scrollbar; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - CORBA_exception_init (&ev); - init_bonobo (argc, argv); - - app = gnome_app_new("Reflow Test", NULL); - - vbox = gtk_vbox_new(FALSE, 0); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_minicard_view_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - gtk_signal_connect( GTK_OBJECT( canvas ), "reflow", - GTK_SIGNAL_FUNC( resize ), - ( gpointer ) app); - - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gtk_box_pack_start(GTK_BOX(vbox), canvas, TRUE, TRUE, 0); - - scrollbar = gtk_hscrollbar_new(gtk_layout_get_hadjustment(GTK_LAYOUT(canvas))); - - gtk_box_pack_start(GTK_BOX(vbox), scrollbar, FALSE, FALSE, 0); - - gnome_app_set_contents( GNOME_APP( app ), vbox ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - gdk_window_set_back_pixmap( GTK_LAYOUT(canvas)->bin_window, NULL, FALSE); - - gtk_idle_add ((GtkFunction) ebook_create, NULL); - - bonobo_main (); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/test-minicard.c b/addressbook/gui/widgets/test-minicard.c deleted file mode 100644 index e16ca675b3..0000000000 --- a/addressbook/gui/widgets/test-minicard.c +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-minicard.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - - -#include "config.h" - -#include -#include "e-minicard.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *card; -GnomeCanvasItem *rect; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, allocation->width, allocation->height ); - gnome_canvas_item_set( card, - "width", (double) allocation->width, - NULL ); - gnome_canvas_item_set( rect, - "x2", (double) allocation->width, - "y2", (double) allocation->height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Minicard Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the minicard canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - int i; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Minicard Test", VERSION, argc, argv); - app = gnome_app_new("Minicard Test", NULL); - - canvas = gnome_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - for ( i = 0; i < 1; i++ ) - { - card = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_minicard_get_type(), - "width", (double) 100, - NULL ); - } - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - gnome_app_set_contents( GNOME_APP( app ), canvas ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/gui/widgets/test-reflow.c b/addressbook/gui/widgets/test-reflow.c deleted file mode 100644 index 8013c428d5..0000000000 --- a/addressbook/gui/widgets/test-reflow.c +++ /dev/null @@ -1,194 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* test-reflow.c - * - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - - -#define TEST_VCARD \ -"BEGIN:VCARD -" \ -"FN:Nat -" \ -"N:Friedman;Nat;D;Mr. -" \ -"TITLE:Head Geek -" \ -"BDAY:1977-08-06 -" \ -"TEL;WORK:617 679 1984 -" \ -"TEL;CELL:123 456 7890 -" \ -"EMAIL;INTERNET:nat@nat.org -" \ -"EMAIL;INTERNET:nat@helixcode.com -" \ -"ADR;WORK;POSTAL:P.O. Box 101;;;Any Town;CA;91921-1234; -" \ -"ADR;HOME;POSTAL;INTL:P.O. Box 202;;;Any Town 2;MI;12344-4321;USA -" \ -"END:VCARD -" \ -" -" - - -#include "config.h" - -#include -#include -#include "e-reflow.h" -#include "e-minicard.h" -#include "e-scroll-frame.h" - -/* This is a horrible thing to do, but it is just a test. */ -GnomeCanvasItem *reflow; -GnomeCanvasItem *rect; -GtkAllocation last_alloc; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - exit(0); -} - -static void allocate_callback(GtkWidget *canvas, GtkAllocation *allocation, gpointer data) -{ - double width; - last_alloc = *allocation; - gnome_canvas_item_set( reflow, - "height", (double) allocation->height, - NULL ); - gnome_canvas_item_set( reflow, - "minimum_width", (double) allocation->width, - NULL ); - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, allocation->width); - gnome_canvas_set_scroll_region(GNOME_CANVAS( canvas ), 0, 0, width - 1, allocation->height - 1); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) allocation->height, - NULL ); -} - -static void resize(GnomeCanvas *canvas, gpointer data) -{ - double width; - gtk_object_get(GTK_OBJECT(reflow), - "width", &width, - NULL); - width = MAX(width, last_alloc.width); - gnome_canvas_set_scroll_region(canvas , 0, 0, width - 1, last_alloc.height - 1); - gnome_canvas_item_set( rect, - "x2", (double) width, - "y2", (double) last_alloc.height, - NULL ); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Reflow Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the reflow canvas item" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - GtkWidget *canvas; - GtkWidget *vbox; - GtkWidget *scrollframe; - int i; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Reflow Test", VERSION, argc, argv); - app = gnome_app_new("Reflow Test", NULL); - - vbox = gtk_vbox_new(FALSE, 0); - - canvas = e_canvas_new(); - rect = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - gnome_canvas_rect_get_type(), - "x1", (double) 0, - "y1", (double) 0, - "x2", (double) 100, - "y2", (double) 100, - "fill_color", "white", - NULL ); - reflow = gnome_canvas_item_new( gnome_canvas_root( GNOME_CANVAS( canvas ) ), - e_reflow_get_type(), - "height", (double) 100, - "minimum_width", (double) 100, - NULL ); - gtk_signal_connect( GTK_OBJECT( canvas ), "reflow", - GTK_SIGNAL_FUNC( resize ), - ( gpointer ) app); - for ( i = 0; i < 200; i++ ) - { - GnomeCanvasItem *item; - ECard *card = e_card_new (TEST_VCARD); - item = gnome_canvas_item_new( GNOME_CANVAS_GROUP(reflow), - e_minicard_get_type(), - "card", card, - NULL); - e_reflow_add_item(E_REFLOW(reflow), item); - } - gnome_canvas_set_scroll_region ( GNOME_CANVAS( canvas ), - 0, 0, - 100, 100 ); - - scrollframe = e_scroll_frame_new (gtk_layout_get_hadjustment(GTK_LAYOUT(canvas)), - gtk_layout_get_vadjustment(GTK_LAYOUT(canvas))); - e_scroll_frame_set_policy (E_SCROLL_FRAME (scrollframe), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_NEVER); - - gtk_container_add (GTK_CONTAINER (scrollframe), canvas); - - gnome_app_set_contents( GNOME_APP( app ), scrollframe ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_signal_connect( GTK_OBJECT( canvas ), "size_allocate", - GTK_SIGNAL_FUNC( allocate_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - gdk_window_set_back_pixmap( GTK_LAYOUT(canvas)->bin_window, NULL, FALSE); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/printing/.cvsignore b/addressbook/printing/.cvsignore deleted file mode 100644 index 96194f7fd7..0000000000 --- a/addressbook/printing/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -*.lo -*.la -contact-print-test -contact-print-style-editor-test diff --git a/addressbook/printing/Makefile.am b/addressbook/printing/Makefile.am deleted file mode 100644 index 62a401dc5d..0000000000 --- a/addressbook/printing/Makefile.am +++ /dev/null @@ -1,67 +0,0 @@ -ecpsdir = $(datadir)/evolution/ecps - -ecps_DATA = \ - smallbook.ecps \ - medbook.ecps \ - phonelist.ecps - -gladedir = $(datadir)/evolution/glade - -glade_DATA = \ - e-contact-print.glade \ - e-contact-print.glade.h - -CPPFLAGS = \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DEVOLUTION_ECPSDIR=\""$(ecpsdir)"\" \ - -DDATADIR=\""$(datadir)"\" \ - $(GNOME_PRINT_CFLAGS) \ - $(BONOBO_GNOME_CFLAGS) - -INCLUDES = \ - $(GNOME_INCLUDEDIR) \ - -DG_LOG_DOMAIN=\"addressbook-printing\" \ - -I$(top_srcdir)/addressbook \ - -I$(top_srcdir) - -noinst_LIBRARIES = \ - libecontactprint.a - -libecontactprint_a_SOURCES = \ - e-contact-print.c \ - e-contact-print.h \ - e-contact-print-style-editor.c \ - e-contact-print-style-editor.h \ - e-contact-print-types.h - -noinst_PROGRAMS = \ - contact-print-test \ - contact-print-style-editor-test - -contact_print_test_SOURCES = \ - test-print.c - -contact_print_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - libecontactprint.a \ - $(GNOME_PRINT_LIBS) - -contact_print_style_editor_test_SOURCES = \ - test-contact-print-style-editor.c - -contact_print_style_editor_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(BONOBO_GNOME_LIBS) \ - $(top_builddir)/addressbook/backend/ebook/libebook.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/addressbook/ename/libename.la \ - libecontactprint.a \ - $(GNOME_PRINT_LIBS) - -EXTRA_DIST = $(glade_DATA) $(ecps_DATA) diff --git a/addressbook/printing/e-contact-print-style-editor.c b/addressbook/printing/e-contact-print-style-editor.c deleted file mode 100644 index 5eb5cadacf..0000000000 --- a/addressbook/printing/e-contact-print-style-editor.c +++ /dev/null @@ -1,150 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-print-style-editor.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include "e-contact-print-style-editor.h" -static void e_contact_print_style_editor_init (EContactPrintStyleEditor *card); -static void e_contact_print_style_editor_class_init (EContactPrintStyleEditorClass *klass); -static void e_contact_print_style_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); -static void e_contact_print_style_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); -static void e_contact_print_style_editor_destroy (GtkObject *object); - -static GtkVBoxClass *parent_class = NULL; - - -/* The arguments we take */ -enum { - ARG_0, - ARG_CARD -}; - -GtkType -e_contact_print_style_editor_get_type (void) -{ - static GtkType contact_print_style_editor_type = 0; - - if (!contact_print_style_editor_type) - { - static const GtkTypeInfo contact_print_style_editor_info = - { - "EContactPrintStyleEditor", - sizeof (EContactPrintStyleEditor), - sizeof (EContactPrintStyleEditorClass), - (GtkClassInitFunc) e_contact_print_style_editor_class_init, - (GtkObjectInitFunc) e_contact_print_style_editor_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - contact_print_style_editor_type = gtk_type_unique (gtk_vbox_get_type (), &contact_print_style_editor_info); - } - - return contact_print_style_editor_type; -} - -static void -e_contact_print_style_editor_class_init (EContactPrintStyleEditorClass *klass) -{ - GtkObjectClass *object_class; - GtkVBoxClass *vbox_class; - - object_class = (GtkObjectClass*) klass; - vbox_class = (GtkVBoxClass *) klass; - - parent_class = gtk_type_class (gtk_vbox_get_type ()); - - object_class->set_arg = e_contact_print_style_editor_set_arg; - object_class->get_arg = e_contact_print_style_editor_get_arg; - object_class->destroy = e_contact_print_style_editor_destroy; -} - -#if 0 -static void -_add_image(GtkTable *table, gchar *image, int left, int right, int top, int bottom) -{ - gtk_table_attach(table, - gtk_widget_new(gtk_alignment_get_type(), - "child", gnome_pixmap_new_from_file(image), - "xalign", (double) 0, - "yalign", (double) 0, - "xscale", (double) 0, - "yscale", (double) 0, - NULL), - left, right, top, bottom, - GTK_FILL, GTK_FILL, - 0, 0); -} -#endif - -static void -e_contact_print_style_editor_init (EContactPrintStyleEditor *e_contact_print_style_editor) -{ - GladeXML *gui; - - /* e_contact_print_style_editor->card = NULL;*/ - gui = glade_xml_new (EVOLUTION_GLADEDIR "/e-contact-print.glade", NULL); - e_contact_print_style_editor->gui = gui; - gtk_widget_reparent(glade_xml_get_widget(gui, "vbox-contact-print-style-editor"), - GTK_WIDGET(e_contact_print_style_editor)); -} - -void -e_contact_print_style_editor_destroy (GtkObject *object) -{ - EContactPrintStyleEditor *e_contact_print_style_editor = E_CONTACT_PRINT_STYLE_EDITOR(object); - gtk_object_unref(GTK_OBJECT(e_contact_print_style_editor->gui)); -} - -GtkWidget* -e_contact_print_style_editor_new (char *filename) -{ - GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_contact_print_style_editor_get_type ())); - return widget; -} - -static void -e_contact_print_style_editor_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - EContactPrintStyleEditor *e_contact_print_style_editor; - - e_contact_print_style_editor = E_CONTACT_PRINT_STYLE_EDITOR (o); - - switch (arg_id){ - default: - break; - } -} - -static void -e_contact_print_style_editor_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - EContactPrintStyleEditor *e_contact_print_style_editor; - - e_contact_print_style_editor = E_CONTACT_PRINT_STYLE_EDITOR (object); - - switch (arg_id) { - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} diff --git a/addressbook/printing/e-contact-print-style-editor.h b/addressbook/printing/e-contact-print-style-editor.h deleted file mode 100644 index cf0f17f889..0000000000 --- a/addressbook/printing/e-contact-print-style-editor.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-contact-print-style-editor.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __E_CONTACT_PRINT_STYLE_EDITOR_H__ -#define __E_CONTACT_PRINT_STYLE_EDITOR_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* EContactPrintStyleEditor - A dialog displaying information about a contact. - * - * The following arguments are available: - * - * name type read/write description - * -------------------------------------------------------------------------------- - * card ECard * R The card currently being edited - */ - -#define E_CONTACT_PRINT_STYLE_EDITOR_TYPE (e_contact_print_style_editor_get_type ()) -#define E_CONTACT_PRINT_STYLE_EDITOR(obj) (GTK_CHECK_CAST ((obj), E_CONTACT_PRINT_STYLE_EDITOR_TYPE, EContactPrintStyleEditor)) -#define E_CONTACT_PRINT_STYLE_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_CONTACT_PRINT_STYLE_EDITOR_TYPE, EContactPrintStyleEditorClass)) -#define E_IS_MINICARD(obj) (GTK_CHECK_TYPE ((obj), E_CONTACT_PRINT_STYLE_EDITOR_TYPE)) -#define E_IS_MINICARD_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_CONTACT_PRINT_STYLE_EDITOR_TYPE)) - - -typedef struct _EContactPrintStyleEditor EContactPrintStyleEditor; -typedef struct _EContactPrintStyleEditorClass EContactPrintStyleEditorClass; - -struct _EContactPrintStyleEditor -{ - GtkVBox parent; - - /* item specific fields */ - GladeXML *gui; -}; - -struct _EContactPrintStyleEditorClass -{ - GtkVBoxClass parent_class; -}; - - -GtkWidget *e_contact_print_style_editor_new(char *filename); -GtkType e_contact_print_style_editor_get_type (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_CONTACT_PRINT_STYLE_EDITOR_H__ */ diff --git a/addressbook/printing/e-contact-print-types.h b/addressbook/printing/e-contact-print-types.h deleted file mode 100644 index e99cfe6d39..0000000000 --- a/addressbook/printing/e-contact-print-types.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-print-types.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef E_CONTACT_PRINT_TYPES_H -#define E_CONTACT_PRINT_TYPES_H - -#include -#include - -typedef struct _EContactPrintStyle EContactPrintStyle; -typedef enum _EContactPrintType EContactPrintType; - -enum _EContactPrintType { - E_CONTACT_PRINT_TYPE_CARDS, - E_CONTACT_PRINT_TYPE_MEMO_STYLE, - E_CONTACT_PRINT_TYPE_PHONE_LIST -}; - -struct _EContactPrintStyle -{ - gchar *title; - EContactPrintType type; - gboolean sections_start_new_page; - guint num_columns; - guint blank_forms; - gboolean letter_tabs; - gboolean letter_headings; - GnomeFont *headings_font; - GnomeFont *body_font; - gboolean print_using_grey; - gint paper_type; - gdouble paper_width; - gdouble paper_height; - gint paper_source; - gdouble top_margin; - gdouble left_margin; - gdouble bottom_margin; - gdouble right_margin; - gint page_size; - gdouble page_width; - gdouble page_height; - gboolean orientation_portrait; - GnomeFont *header_font; - gchar *left_header; - gchar *center_header; - gchar *right_header; - GnomeFont *footer_font; - gchar *left_footer; - gchar *center_footer; - gchar *right_footer; - gboolean reverse_on_even_pages; -}; - -#endif /* E_CONTACT_PRINT_TYPES_H */ - diff --git a/addressbook/printing/e-contact-print.c b/addressbook/printing/e-contact-print.c deleted file mode 100644 index 00a32f0d57..0000000000 --- a/addressbook/printing/e-contact-print.c +++ /dev/null @@ -1,1112 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-print.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#include "e-contact-print.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define SCALE 5 -#define HYPHEN_PIXELS 20 -#define HYPHEN_PENALTY ( (SCALE) * (SCALE) * (HYPHEN_PIXELS) * (HYPHEN_PIXELS) ) - -typedef struct _EContactPrintContext EContactPrintContext; - -struct _EContactPrintContext -{ - GnomePrintContext *pc; - GnomePrintMaster *master; - gdouble x; - gdouble y; - gint column; - EContactPrintStyle *style; - gboolean first_section; - gchar first_char_on_page; - gchar last_char_on_page; - GnomeFont *letter_heading_font; - GnomeFont *letter_tab_font; - char *character; - gboolean first_contact; - - gboolean uses_book; - int type; - EBook *book; - gchar *query; - - GList *cards; -}; - -static gint -e_contact_divide_text(GnomePrintContext *pc, GnomeFont *font, double width, const gchar *text, GList **return_val /* Of type char[] */) -{ - if ( width == -1 || gnome_font_get_width_string(font, text) <= width ) { - if ( return_val ) { - *return_val = g_list_append(*return_val, g_strdup(text)); - } - return 1; - } else { -#if 1 - int i, l; - double x = 0; - int lastend = 0; - int linestart = 0; - int firstword = 1; - int linecount = 0; - l = strlen(text); - for ( i = 0; i < l; i++ ) { - if ( text[i] == ' ' ) { - if ( (!firstword) && x + gnome_font_get_width_string_n(font, text + lastend, i - lastend) > width ) { - if (return_val) { - *return_val = g_list_append(*return_val, g_strndup(text + linestart, lastend - linestart)); - } - x = gnome_font_get_width_string(font, " "); - linestart = lastend + 1; - x += gnome_font_get_width_string_n(font, text + linestart, i - linestart); - lastend = i; - linecount ++; - } else { - x += gnome_font_get_width_string_n(font, text + lastend, i - lastend); - lastend = i; - } - firstword = 0; - } else if ( text[i] == '\n' ) { - if ( (!firstword) && x + gnome_font_get_width_string_n(font, text + lastend, i - lastend) > width ) { - if (return_val) { - *return_val = g_list_append(*return_val, g_strndup(text + linestart, lastend - linestart)); - } - linestart = lastend + 1; - lastend = i; - linecount ++; - } - if (return_val) { - *return_val = g_list_append(*return_val, g_strndup(text + linestart, i - linestart)); - } - linestart = i + 1; - lastend = i + 1; - linecount ++; - x = gnome_font_get_width_string(font, " "); - - firstword = 1; - } - } - if ( (!firstword) && x + gnome_font_get_width_string_n(font, text + lastend, i - lastend) > width ) { - if (return_val) { - *return_val = g_list_append(*return_val, g_strndup(text + linestart, lastend - linestart)); - } - linestart = lastend + 1; - lastend = i; - linecount ++; - } - if (return_val) { - *return_val = g_list_append(*return_val, g_strndup(text + linestart, i - linestart)); - } - linecount ++; - return(linecount); -#else - HnjBreak *breaks; - gint *result; - gint *is; - gint n_breaks = 0, n_actual_breaks = 0; - gint i; - gint l; - gchar *hyphenation; - double x = - gnome_font_get_width_string(font, " ") * SCALE; - HnjParams hnjparams; - - hnjparams.set_width = width * SCALE + x; - hnjparams.max_neg_space = 0; - hnjparams.tab_width = 0; - - l = strlen(text); - - /* find possible line breaks. */ - for (i = 0; i < l; i++) { - if (text[i] == '-') - n_breaks++; - else if (text[i] == ' ') - n_breaks++; -#if 0 - else if (hyphenation[i] & 1) - n_breaks++; -#endif - } - - breaks = g_new( HnjBreak, n_breaks + 1 ); - result = g_new( gint, n_breaks + 1 ); - is = g_new( gint, n_breaks + 1 ); - n_breaks = 0; - /* find possible line breaks. */ - - for (i = 0; i < l; i++) { - if ( text[i] == '-' ) { - x += gnome_font_get_width(font, text[i]) * SCALE; - breaks[n_breaks].x0 = x; - breaks[n_breaks].x1 = x; - breaks[n_breaks].penalty = HYPHEN_PENALTY; - breaks[n_breaks].flags = HNJ_JUST_FLAG_ISHYPHEN; - is[n_breaks] = i + 1; - n_breaks++; - } else if ( text[i] == ' ' ) { - breaks[ n_breaks ].x0 = x; - x += gnome_font_get_width(font, text[i]) * SCALE; - breaks[ n_breaks ].x1 = x; - breaks[ n_breaks ].penalty = 0; - breaks[ n_breaks ].flags = HNJ_JUST_FLAG_ISSPACE; - is[ n_breaks ] = i + 1; - n_breaks++; -#if 0 - } else if (word->hyphenation[i] & 1) { - breaks[n_breaks].x0 = x + gnome_font_get_width(font, '-') * SCALE; - breaks[n_breaks].x1 = x; - breaks[n_breaks].penalty = HYPHEN_PENALTY; - breaks[n_breaks].flags = HNJ_JUST_FLAG_ISHYPHEN; - is[n_breaks] = i + 1; - n_breaks++; -#endif - } else - x += gnome_font_get_width(font, text[i]) * SCALE; - - } - is[n_breaks] = i; - breaks[n_breaks].flags = 0; - n_breaks++; - - /* Calculate optimal line breaks. */ - n_actual_breaks = hnj_hs_just (breaks, n_breaks, - &hnjparams, result); - - if ( return_val ) { - gchar *next_val; - if ( breaks[result[0]].flags == HNJ_JUST_FLAG_ISHYPHEN && text[is[result[0]]] != '-' ) { - next_val = g_new(gchar, is[result[0]] + 2); - strncpy(next_val, text, is[result[0]]); - next_val[is[result[0]]] = 0; - strcat(next_val, "-"); - } else { - next_val = g_new(gchar, is[result[0]] + 1); - strncpy(next_val, text, is[result[0]]); - next_val[is[result[0]]] = 0; - } - *return_val = g_list_append(*return_val, next_val); - - for ( i = 1; i < n_actual_breaks; i++ ) { - if ( (breaks[result[i]].flags & HNJ_JUST_FLAG_ISHYPHEN) && (text[is[result[i]]] != '-') ) { - next_val = g_new(gchar, is[result[i]] - is[result[i - 1]] + 2); - strncpy(next_val, text + is[result[i - 1]], is[result[i]] - is[result[i - 1]]); - next_val[is[result[i]] - is[result[i - 1]]] = 0; - strcat(next_val, "-"); - } else { - next_val = g_new(gchar, is[result[i]] - is[result[i - 1]] + 1); - strncpy(next_val, text + is[result[i - 1]], is[result[i]] - is[result[i - 1]]); - next_val[is[result[i]] - is[result[i - 1]]] = 0; - } - *return_val = g_list_append(*return_val, next_val); - } - } - - g_free (breaks); - g_free (result); - g_free (is); - return n_actual_breaks; -#endif - } -} - -static void -e_contact_output(GnomePrintContext *pc, GnomeFont *font, double x, double y, double width, const gchar *text) -{ - GList *list = NULL, *list_start; - int first_line = 1; - gnome_print_gsave(pc); - gnome_print_setfont(pc, font); - e_contact_divide_text(pc, font, width, text, &list); - for ( list_start = list; list; list = g_list_next(list)) { - y -= gnome_font_get_ascender(font); - gnome_print_moveto(pc, x, y); - gnome_print_show(pc, (char *)list->data); - y -= gnome_font_get_descender(font); - y -= .2 * font->size; - if ( first_line ) { - x += gnome_font_get_width_string(font, " "); - first_line = 0; - } - } - g_list_foreach( list_start, (GFunc) g_free, NULL ); - g_list_free( list_start ); - gnome_print_grestore(pc); -} - -static gdouble -e_contact_text_height(GnomePrintContext *pc, GnomeFont *font, double width, gchar *text) -{ - int line_count = e_contact_divide_text(pc, font, width, text, NULL); - return line_count * (gnome_font_get_ascender(font) + gnome_font_get_descender(font)) + - (line_count - 1) * .2 * font->size; -} - -#if 0 -static void -e_contact_output_and_advance(EContactPrintContext *ctxt, GnomeFont *font, double x, double width, gchar *text) -{ - ctxt->y -= .1 * font->size; - e_contact_output(ctxt->pc, font, x, ctxt->y, width, text); - ctxt->y -= e_contact_text_height(ctxt->pc, font, width, text); - ctxt->y -= .1 * font->size; -} -#endif - -static void -e_contact_rectangle(GnomePrintContext *pc, - gdouble x0, - gdouble y0, - gdouble x1, - gdouble y1, - gdouble r, - gdouble g, - gdouble b) -{ - gnome_print_gsave(pc); - gnome_print_setrgbcolor(pc, r, g, b); - gnome_print_moveto(pc, x0, y0); - gnome_print_lineto(pc, x1, y0); - gnome_print_lineto(pc, x1, y1); - gnome_print_lineto(pc, x0, y1); - gnome_print_lineto(pc, x0, y0); - gnome_print_fill(pc); - gnome_print_grestore(pc); -} - -static double -e_contact_get_letter_tab_width (EContactPrintContext *ctxt) -{ - return gnome_font_get_width_string(ctxt->letter_tab_font, "123") + 4 + 18; -} - -static double -e_contact_print_letter_tab (EContactPrintContext *ctxt) -{ - char character; - gdouble x, y; - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - gdouble tab_height, tab_width; - gdouble font_size; - tab_height = 72 * (ctxt->style->page_height - ctxt->style->top_margin - ctxt->style->bottom_margin) / 27.0; - font_size = tab_height / 2; - tab_width = e_contact_get_letter_tab_width(ctxt) - 18; - x = page_width + 72 * (ctxt->style->left_margin) - tab_width; - y = 72 * (ctxt->style->page_height - ctxt->style->top_margin); - - - gnome_print_gsave( ctxt->pc ); - if ( ctxt->style->print_using_grey ) - e_contact_rectangle( ctxt->pc, x, 72 * (ctxt->style->page_height - ctxt->style->top_margin), x + tab_width, ctxt->style->bottom_margin * 72, .85, .85, .85 ); - for ( character = 'A' - 1; character <= 'Z'; character ++ ) { - char string[] = "123"; - if ( character >= 'A' ) { - string[0] = tolower(character); - string[1] = 0; - } - if ( character >= ctxt->first_char_on_page && character <= ctxt->last_char_on_page ) { - e_contact_rectangle( ctxt->pc, x + 1, y - 1, x + tab_width - 1, y - (tab_height - 1), 0, 0, 0 ); - gnome_print_setrgbcolor( ctxt->pc, 1, 1, 1 ); - e_contact_output( ctxt->pc, ctxt->letter_tab_font, x + tab_width / 2 - gnome_font_get_width_string(ctxt->letter_tab_font, string) / 2, y - (tab_height - font_size) / 2, -1, string ); - } else { - gnome_print_setrgbcolor( ctxt->pc, 0, 0, 0 ); - e_contact_output( ctxt->pc, ctxt->letter_tab_font, x + tab_width / 2 - gnome_font_get_width_string(ctxt->letter_tab_font, string) / 2, y - (tab_height - font_size) / 2, -1, string ); - } - y -= tab_height; - } - gnome_print_grestore( ctxt->pc ); - return gnome_font_get_width_string(ctxt->style->body_font, "123") + ctxt->style->body_font->size / 5; -} - -static double -e_contact_get_letter_heading_height (EContactPrintContext *ctxt) -{ - gdouble ascender, descender; - ascender = gnome_font_get_ascender(ctxt->letter_heading_font); - descender = gnome_font_get_descender(ctxt->letter_heading_font); - return ascender + descender + 9; -} - -static void -e_contact_print_letter_heading (EContactPrintContext *ctxt, gchar *character) -{ - gdouble ascender, descender; - gdouble width; - - width = gnome_font_get_width_string(ctxt->letter_heading_font, "m") * 1.7; - ascender = gnome_font_get_ascender(ctxt->letter_heading_font); - descender = gnome_font_get_descender(ctxt->letter_heading_font); - gnome_print_gsave( ctxt->pc ); - e_contact_rectangle( ctxt->pc, ctxt->x, ctxt->y, ctxt->x + width, ctxt->y - (ascender + descender + 6), 0, 0, 0); - gnome_print_setrgbcolor(ctxt->pc, 1, 1, 1); - ctxt->y -= 4; - e_contact_output(ctxt->pc, ctxt->letter_heading_font, ctxt->x + (width - gnome_font_get_width_string(ctxt->letter_heading_font, character))/ 2, ctxt->y, -1, character); - ctxt->y -= ascender + descender; - ctxt->y -= 2; - ctxt->y -= 3; - gnome_print_grestore( ctxt->pc ); -} - -static void -e_contact_start_new_page(EContactPrintContext *ctxt) -{ - ctxt->x = ctxt->style->left_margin * 72; - ctxt->y = (ctxt->style->page_height - ctxt->style->top_margin) * 72; - ctxt->column = 0; - if ( ctxt->style->letter_tabs ) - e_contact_print_letter_tab(ctxt); - gnome_print_showpage(ctxt->pc); - - ctxt->first_char_on_page = ctxt->last_char_on_page + 1; -} - -static double -e_contact_get_card_size(ECardSimple *simple, EContactPrintContext *ctxt) -{ - gdouble height = 0; - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - gdouble column_width; - char *file_as; - gint field; - if ( ctxt->style->letter_tabs ) - page_width -= e_contact_get_letter_tab_width(ctxt); - column_width = (page_width + 18) / ctxt->style->num_columns - 18; - - height += ctxt->style->headings_font->size * .2; - - height += ctxt->style->headings_font->size * .2; - - gtk_object_get(GTK_OBJECT(simple->card), - "file_as", &file_as, - NULL); - height += e_contact_text_height(ctxt->pc, ctxt->style->headings_font, column_width - 4, file_as); - height += ctxt->style->headings_font->size * .2; - - height += ctxt->style->headings_font->size * .2; - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { - char *string; - string = e_card_simple_get(simple, field); - if (string && *string) { - double xoff = 0; - xoff += gnome_font_get_width_string(ctxt->style->body_font, e_card_simple_get_name(simple, field)); - xoff += gnome_font_get_width_string(ctxt->style->body_font, ": "); - height += e_contact_text_height(ctxt->pc, ctxt->style->body_font, column_width - xoff, string); - height += .2 * ctxt->style->body_font->size; - } - g_free(string); - } - height += ctxt->style->headings_font->size * .4; - return height; -} - - -static void -e_contact_print_card (ECardSimple *simple, EContactPrintContext *ctxt) -{ - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - gdouble column_width; - char *file_as; - int field; - - if ( ctxt->style->letter_tabs ) - page_width -= e_contact_get_letter_tab_width(ctxt); - column_width = (page_width + 18) / ctxt->style->num_columns - 18; - - gnome_print_gsave(ctxt->pc); - - ctxt->y -= ctxt->style->headings_font->size * .2; - - ctxt->y -= ctxt->style->headings_font->size * .2; - - gtk_object_get(GTK_OBJECT(simple->card), - "file_as", &file_as, - NULL); - if (ctxt->style->print_using_grey) - e_contact_rectangle(ctxt->pc, ctxt->x, ctxt->y + ctxt->style->headings_font->size * .3, ctxt->x + column_width, ctxt->y - e_contact_text_height(ctxt->pc, ctxt->style->headings_font, column_width - 4, file_as) - ctxt->style->headings_font->size * .3, .85, .85, .85); - e_contact_output(ctxt->pc, ctxt->style->headings_font, ctxt->x + 2, ctxt->y, column_width - 4, file_as); - ctxt->y -= e_contact_text_height(ctxt->pc, ctxt->style->headings_font, column_width - 4, file_as); - ctxt->y -= ctxt->style->headings_font->size * .2; - - ctxt->y -= ctxt->style->headings_font->size * .2; - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { - char *string; - string = e_card_simple_get(simple, field); - if (string && *string) { - double xoff = 0; - e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x + xoff, ctxt->y, -1, e_card_simple_get_name(simple, field)); - xoff += gnome_font_get_width_string(ctxt->style->body_font, e_card_simple_get_name(simple, field)); - e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x + xoff, ctxt->y, -1, ": "); - xoff += gnome_font_get_width_string(ctxt->style->body_font, ": "); - e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x + xoff, ctxt->y, column_width - xoff, string); - ctxt->y -= e_contact_text_height(ctxt->pc, ctxt->style->body_font, column_width - xoff, string); - ctxt->y -= .2 * ctxt->style->body_font->size; - } - g_free(string); - } - - ctxt->y -= ctxt->style->headings_font->size * .4; - gnome_print_grestore(ctxt->pc); -} - -static void -e_contact_start_new_column (EContactPrintContext *ctxt) -{ - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - gdouble column_offset; - if ( ctxt->style->letter_tabs ) - page_width -= e_contact_get_letter_tab_width(ctxt); - column_offset = (page_width + 18) / ctxt->style->num_columns; - ctxt->column ++; - if (ctxt->column >= ctxt->style->num_columns) { - e_contact_start_new_page(ctxt); - ctxt->column = 0; - } - ctxt->x = (72 * ctxt->style->left_margin) + column_offset * ctxt->column; - ctxt->y = 72 * (ctxt->style->page_height - ctxt->style->top_margin); -} - -static void -complete_sequence(EBookView *book_view, EContactPrintContext *ctxt) -{ - GList *cards = ctxt->cards; - - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - - ctxt->first_contact = TRUE; - ctxt->character = NULL; - ctxt->y = (ctxt->style->page_height - ctxt->style->top_margin) * 72; - ctxt->x = (ctxt->style->left_margin) * 72; - if ( ctxt->style->letter_tabs ) - page_width -= e_contact_get_letter_tab_width(ctxt); - - ctxt->first_char_on_page = 'A' - 1; - - for(; cards; cards = cards->next) { - ECard *card = cards->data; - ECardSimple *simple = e_card_simple_new(card); - gchar *file_as; - - gtk_object_get(GTK_OBJECT(card), - "file_as", &file_as, - NULL); - if ( file_as && (!ctxt->character || *ctxt->character != tolower(*file_as)) ) { - if (ctxt->style->sections_start_new_page && ! ctxt->first_contact) { - e_contact_start_new_page(ctxt); - } - else if ((!ctxt->first_contact) && (ctxt->y - e_contact_get_letter_heading_height(ctxt) - e_contact_get_card_size(simple, ctxt) < ctxt->style->bottom_margin * 72)) - e_contact_start_new_column(ctxt); - if (!ctxt->character) - ctxt->character = g_strdup(" "); - *ctxt->character = tolower(*file_as); - if ( ctxt->style->letter_headings ) - e_contact_print_letter_heading(ctxt, ctxt->character); - ctxt->first_section = FALSE; - } - else if ( (!ctxt->first_contact) && (ctxt->y - e_contact_get_card_size(simple, ctxt) < ctxt->style->bottom_margin * 72)) { - e_contact_start_new_column(ctxt); - if ( ctxt->style->letter_headings ) - e_contact_print_letter_heading(ctxt, ctxt->character); - } - ctxt->last_char_on_page = toupper(*file_as); - if ( ctxt->last_char_on_page < ctxt->first_char_on_page ) - ctxt->first_char_on_page = ctxt->last_char_on_page; - e_contact_print_card(simple, ctxt); - ctxt->first_contact = FALSE; - gtk_object_unref(GTK_OBJECT(simple)); - } - ctxt->last_char_on_page = 'Z'; - if ( ctxt->style->letter_tabs ) - e_contact_print_letter_tab(ctxt); - gnome_print_showpage(ctxt->pc); - gnome_print_context_close(ctxt->pc); - g_free(ctxt->character); - if (book_view) - gtk_object_unref(GTK_OBJECT(book_view)); - if (ctxt->type == GNOME_PRINT_PREVIEW) { - GtkWidget *preview; - preview = GTK_WIDGET(gnome_print_master_preview_new(ctxt->master, "Print Preview")); - gtk_widget_show_all(preview); - } else { - gnome_print_master_print(ctxt->master); - } - gtk_object_unref(GTK_OBJECT(ctxt->pc)); - gtk_object_unref(GTK_OBJECT(ctxt->master)); - if (ctxt->book) - gtk_object_unref(GTK_OBJECT(ctxt->book)); - g_free(ctxt->query); - g_list_foreach(ctxt->cards, (GFunc) gtk_object_unref, NULL); - g_list_free(ctxt->cards); - gtk_object_unref(GTK_OBJECT(ctxt->style->headings_font)); - gtk_object_unref(GTK_OBJECT(ctxt->style->body_font)); - gtk_object_unref(GTK_OBJECT(ctxt->style->header_font)); - gtk_object_unref(GTK_OBJECT(ctxt->style->footer_font)); - gtk_object_unref(GTK_OBJECT(ctxt->letter_heading_font)); - gtk_object_unref(GTK_OBJECT(ctxt->letter_tab_font)); - g_free(ctxt->style); - g_free(ctxt); -} - -static int -card_compare (ECard *card1, ECard *card2) { - if (card1 && card2) { - char *file_as1, *file_as2; - gtk_object_get(GTK_OBJECT(card1), - "file_as", &file_as1, - NULL); - gtk_object_get(GTK_OBJECT(card2), - "file_as", &file_as2, - NULL); - if (file_as1 && file_as2) - return strcasecmp(file_as1, file_as2); - if (file_as1) - return -1; - if (file_as2) - return 1; - return strcmp(e_card_get_id(card1), e_card_get_id(card2)); - } else { - return 0; - } -} - -static void -create_card(EBookView *book_view, const GList *cards, EContactPrintContext *ctxt) -{ - for(; cards; cards = cards->next) { - ECard *card = cards->data; - gtk_object_ref(GTK_OBJECT(card)); - ctxt->cards = g_list_insert_sorted(ctxt->cards, card, (GCompareFunc) card_compare); - } -} - -static void -book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, EContactPrintContext *ctxt) -{ - gtk_object_ref(GTK_OBJECT(book_view)); - - gtk_signal_connect(GTK_OBJECT(book_view), - "card_added", - GTK_SIGNAL_FUNC(create_card), - ctxt); - - gtk_signal_connect(GTK_OBJECT(book_view), - "sequence_complete", - GTK_SIGNAL_FUNC(complete_sequence), - ctxt); -} - -static void -e_contact_do_print_cards (EBook *book, char *query, EContactPrintContext *ctxt) -{ - e_book_get_book_view(book, query, (EBookBookViewCallback) book_view_loaded, ctxt); -} - -#if 0 -static double -e_contact_get_phone_list_size(ECardSimple *simple, EContactPrintContext *ctxt) -{ - double height = 0; - int field; - - height += ctxt->style->headings_font->size * .2; - - height += ctxt->style->headings_font->size * .2; - - for(field = E_CARD_SIMPLE_FIELD_FULL_NAME; field != E_CARD_SIMPLE_FIELD_LAST; field++) { - char *string; - string = e_card_simple_get(simple, field); - if (string && *string) { - if ( 1 ) /* field is a phone field. */ { - gchar *field = string; - height += e_contact_text_height(ctxt->pc, ctxt->style->body_font, 100, field); - height += .2 * ctxt->style->body_font->size; - } - } - g_free(string); - } - height += ctxt->style->headings_font->size * .4; - return height; -} - - -static void -e_contact_print_phone_list (ECard *card, EContactPrintContext *ctxt) -{ - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - gdouble column_width; - double xoff, dotwidth; - int dotcount; - char *dots; - int i; - char *file_as; - if ( ctxt->style->letter_tabs ) - page_width -= e_contact_get_letter_tab_width(ctxt); - column_width = (page_width + 18) / ctxt->style->num_columns - 18; - - gnome_print_gsave(ctxt->pc); - - ctxt->y -= ctxt->style->headings_font->size * .2; - - ctxt->y -= ctxt->style->headings_font->size * .2; - - e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x, ctxt->y, -1, e_card_get_string_fileas(card)); - - xoff = column_width - 9 * ctxt->style->body_font->size; - dotwidth = xoff - - gnome_font_get_width_string(ctxt->style->body_font, e_card_get_string_fileas(card)) - - gnome_font_get_width_string(ctxt->style->body_font, " "); - dotcount = dotwidth / gnome_font_get_width(ctxt->style->body_font, '.'); - dots = g_new(gchar, dotcount + 1); - for (i = 0; i < dotcount; i++) - dots[i] = '.'; - dots[dotcount] = 0; - e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x + xoff - dotcount * gnome_font_get_width(ctxt->style->body_font, '.'), ctxt->y, -1, dots); - g_free(dots); - - for(; shown_fields; shown_fields = g_list_next(shown_fields)) { - if ( 1 ) /* field is a phone field. */ { - gchar *field = e_card_get_string(card, shown_fields->data); - e_contact_output(ctxt->pc, ctxt->style->body_font, ctxt->x + xoff, ctxt->y, -1, shown_fields->data); - e_contact_output(ctxt->pc, ctxt->style->body_font, - ctxt->x + column_width - gnome_font_get_width_string(ctxt->style->body_font, - field), - ctxt->y, - -1, - field); - ctxt->y -= e_contact_text_height(ctxt->pc, ctxt->style->body_font, 100, field); - ctxt->y -= .2 * ctxt->style->body_font->size; - } - } - ctxt->y -= ctxt->style->headings_font->size * .4; - gnome_print_grestore(ctxt->pc); -} - -static void -e_contact_do_print_phone_list (EBook *book, char *query, EContactPrintContext *ctxt) -{ - ECard *card = NULL; - int i; - gdouble page_width = 72 * (ctxt->style->page_width - ctxt->style->left_margin - ctxt->style->right_margin); - gdouble column_width; - ctxt->first_contact = TRUE; - ctxt->character = NULL; - ctxt->y = (ctxt->style->page_height - ctxt->style->top_margin) * 72; - ctxt->x = (ctxt->style->left_margin) * 72; - if ( ctxt->style->letter_tabs ) - page_width -= e_contact_get_letter_tab_width(ctxt); - - ctxt->first_char_on_page = 'A' - 1; - - column_width = (page_width + 18) / ctxt->style->num_columns - 18; - /* - for(card = e_book_get_first(book); card; card = e_book_get_next(book)) { - */ - for (i=0; i < 30; i++) { - gchar *file_as = e_card_get_string_fileas(card); - if ( file_as && (!character || *character != tolower(*file_as)) ) { - if (ctxt->style->sections_start_new_page && ! first_contact) { - e_contact_start_new_page(ctxt); - } - else if ((!first_contact) && (ctxt->y - e_contact_get_letter_heading_height(ctxt) - e_contact_get_phone_list_size(card, ctxt, shown_fields) < ctxt->style->bottom_margin * 72)) - e_contact_start_new_column(ctxt); - if (!character) - character = g_strdup(" "); - *character = tolower(*file_as); - if ( ctxt->style->letter_headings ) - e_contact_print_letter_heading(ctxt, character); - ctxt->first_section = FALSE; - } - else if ( (!first_contact) && (ctxt->y - e_contact_get_card_size(card, ctxt, shown_fields) < ctxt->style->bottom_margin * 72)) { - e_contact_start_new_column(ctxt); - if ( ctxt->style->letter_headings ) - e_contact_print_letter_heading(ctxt, character); - } - ctxt->last_char_on_page = toupper(*file_as); - if ( ctxt->last_char_on_page < ctxt->first_char_on_page ) - ctxt->first_char_on_page = ctxt->last_char_on_page; - e_contact_print_phone_list(card, ctxt, shown_fields); - first_contact = FALSE; - } - ctxt->last_char_on_page = 'Z'; - if ( ctxt->style->letter_tabs ) - e_contact_print_letter_tab(ctxt); - gnome_print_showpage(ctxt->pc); - gnome_print_context_close(ctxt->pc); - g_free(character); -} -#endif - -static void -e_contact_do_print (EBook *book, char *query, EContactPrintContext *ctxt) -{ - switch ( ctxt->style->type ) { - case E_CONTACT_PRINT_TYPE_CARDS: - e_contact_do_print_cards( book, query, ctxt); - break; -#if 0 - case E_CONTACT_PRINT_TYPE_PHONE_LIST: - e_contact_do_print_phone_list( book, query, ctxt ); - break; -#endif - default: - break; - } -} - -static void lowify( char *data ) -{ - for ( ; *data; data++ ) - *data = tolower(*data); -} - -static gboolean get_bool( char *data ) -{ - if ( data ) { - lowify ( data ); - return ! strcmp(data, "true"); - } else - return FALSE; -} - -static void get_string( char *data, char **variable ) -{ - g_free ( *variable ); - if ( data ) - *variable = g_strdup( data ); - else - *variable = g_strdup( "" ); -} - -static int get_integer( char *data ) -{ - if ( data ) - return atoi(data); - else - return 0; -} - -static double get_float( char *data ) -{ - if ( data ) - return atof(data); - else - return 0; -} - -static void get_font( char *data, GnomeFont **variable ) -{ - if ( data ) { - GnomeFont *font = gnome_font_new_from_full_name( data ); - if ( font ) { - gtk_object_unref( GTK_OBJECT(*variable) ); - *variable = font; - } - } -} - - -static void -e_contact_build_style(EContactPrintStyle *style) -{ - xmlDocPtr styledoc; - gchar *filename; - style->title = g_strdup(""); - style->type = E_CONTACT_PRINT_TYPE_CARDS; - style->sections_start_new_page = TRUE; - style->num_columns = 2; - style->blank_forms = 2; - style->letter_tabs = TRUE; - style->letter_headings = FALSE; - style->headings_font = gnome_font_new("Helvetica-Bold", 8); - style->body_font = gnome_font_new("Helvetica", 6); - style->print_using_grey = TRUE; - style->paper_type = 0; - style->paper_width = 8.5; - style->paper_height = 11; - style->paper_source = 0; - style->top_margin = .5; - style->left_margin = .5; - style->bottom_margin = .5; - style->right_margin = .5; - style->page_size = 0; - style->page_width = 2.75; - style->page_height = 4.25; -#if 0 - style->page_width = 4.25; - style->page_height = 5.5; -#endif -#if 0 - style->page_width = 5.5; - style->page_height = 8.5; -#endif - style->orientation_portrait = FALSE; - style->header_font = gnome_font_new("Helvetica", 6); - style->left_header = g_strdup(""); - style->center_header = g_strdup(""); - style->right_header = g_strdup(""); - style->footer_font = gnome_font_new("Helvetica", 6); - style->left_footer = g_strdup(""); - style->center_footer = g_strdup(""); - style->right_footer = g_strdup(""); - style->reverse_on_even_pages = FALSE; - filename = g_concat_dir_and_file(EVOLUTION_ECPSDIR, "medbook.ecps"); - styledoc = xmlParseFile(filename); - g_free(filename); - if (styledoc) { - xmlNodePtr stylenode = xmlDocGetRootElement(styledoc); - xmlNodePtr node; - for (node = stylenode->childs; node; node = node->next) { - char *data = xmlNodeGetContent ( node ); - if ( !strcmp( node->name, "title" ) ) { - get_string(data, &(style->title)); - } else if ( !strcmp( node->name, "type" ) ) { - lowify( data ); - if ( !strcmp( data, "cards" ) ) - style->type = E_CONTACT_PRINT_TYPE_CARDS; - else if ( !strcmp( data, "memo_style" ) ) - style->type = E_CONTACT_PRINT_TYPE_MEMO_STYLE; - else if ( !strcmp( data, "phone_list" ) ) - style->type = E_CONTACT_PRINT_TYPE_PHONE_LIST; - } else if ( !strcmp( node->name, "sections_start_new_page" ) ) { - style->sections_start_new_page = get_bool(data); - } else if ( !strcmp( node->name, "num_columns" ) ) { - style->num_columns = get_integer(data); - } else if ( !strcmp( node->name, "blank_forms" ) ) { - style->blank_forms = get_integer(data); - } else if ( !strcmp( node->name, "letter_tabs" ) ) { - style->letter_tabs = get_bool(data); - } else if ( !strcmp( node->name, "letter_headings" ) ) { - style->letter_headings = get_bool(data); - } else if ( !strcmp( node->name, "headings_font" ) ) { - get_font( data, &(style->headings_font) ); - } else if ( !strcmp( node->name, "body_font" ) ) { - get_font( data, &(style->body_font) ); - } else if ( !strcmp( node->name, "print_using_grey" ) ) { - style->print_using_grey = get_bool(data); - } else if ( !strcmp( node->name, "paper_width" ) ) { - style->paper_width = get_float(data); - } else if ( !strcmp( node->name, "paper_height" ) ) { - style->paper_height = get_float(data); - } else if ( !strcmp( node->name, "top_margin" ) ) { - style->top_margin = get_float(data); - } else if ( !strcmp( node->name, "left_margin" ) ) { - style->left_margin = get_float(data); - } else if ( !strcmp( node->name, "bottom_margin" ) ) { - style->bottom_margin = get_float(data); - } else if ( !strcmp( node->name, "right_margin" ) ) { - style->right_margin = get_float(data); - } else if ( !strcmp( node->name, "page_width" ) ) { - style->page_width = get_float(data); - } else if ( !strcmp( node->name, "page_height" ) ) { - style->page_height = get_float(data); - } else if ( !strcmp( node->name, "orientation" ) ) { - if ( data ) { - lowify(data); - style->orientation_portrait = strcmp(data, "landscape"); - } else { - style->orientation_portrait = TRUE; - } - } else if ( !strcmp( node->name, "header_font" ) ) { - get_font( data, &(style->header_font) ); - } else if ( !strcmp( node->name, "left_header" ) ) { - get_string(data, &(style->left_header)); - } else if ( !strcmp( node->name, "center_header" ) ) { - get_string(data, &(style->center_header)); - } else if ( !strcmp( node->name, "right_header" ) ) { - get_string(data, &(style->right_header)); - } else if ( !strcmp( node->name, "footer_font" ) ) { - get_font( data, &(style->footer_font) ); - } else if ( !strcmp( node->name, "left_footer" ) ) { - get_string(data, &(style->left_footer)); - } else if ( !strcmp( node->name, "center_footer" ) ) { - get_string(data, &(style->center_footer)); - } else if ( !strcmp( node->name, "right_footer" ) ) { - get_string(data, &(style->right_footer)); - } else if ( !strcmp( node->name, "reverse_on_even_pages" ) ) { - style->reverse_on_even_pages = get_bool(data); - } - if ( data ) - xmlFree (data); - } - xmlFreeDoc(styledoc); - } -} - -static gint -e_contact_print_close(GnomeDialog *dialog, gpointer data) -{ - return FALSE; -} - -static void -e_contact_print_button(GnomeDialog *dialog, gint button, gpointer data) -{ - EContactPrintContext *ctxt = g_new(EContactPrintContext, 1); - EContactPrintStyle *style = g_new(EContactPrintStyle, 1); - GnomePrintMaster *master; - GnomePrintContext *pc; - gboolean uses_book = (gint) gtk_object_get_data(GTK_OBJECT(dialog), "uses_book"); - EBook *book = NULL; - char *query = NULL; - ECard *card = NULL; - gdouble font_size; - if (uses_book) { - book = gtk_object_get_data(GTK_OBJECT(dialog), "book"); - query = gtk_object_get_data(GTK_OBJECT(dialog), "query"); - } else { - card = gtk_object_get_data(GTK_OBJECT(dialog), "card"); - } - switch( button ) { - case GNOME_PRINT_PRINT: - master = gnome_print_master_new_from_dialog( GNOME_PRINT_DIALOG(dialog) ); - pc = gnome_print_master_get_context( master ); - e_contact_build_style(style); - - ctxt->x = 0; - ctxt->y = 0; - ctxt->column = 0; - ctxt->style = style; - ctxt->master = master; - ctxt->first_section = TRUE; - ctxt->first_char_on_page = 'A' - 1; - ctxt->type = GNOME_PRINT_PRINT; - - font_size = 72 * ctxt->style->page_height / 27.0 / 2.0; - ctxt->letter_heading_font = gnome_font_new(gnome_font_get_name(ctxt->style->headings_font), ctxt->style->headings_font->size * 1.5); - ctxt->letter_tab_font = gnome_font_new(gnome_font_get_name(ctxt->style->headings_font), font_size); - - ctxt->pc = GNOME_PRINT_CONTEXT(gnome_print_multipage_new_from_sizes(pc, - 72 * style->paper_width, - 72 * style->paper_height, - 72 * style->page_width, - 72 * style->page_height)); - - ctxt->book = book; - ctxt->query = query; - if (uses_book) { - ctxt->cards = NULL; - e_contact_do_print(book, ctxt->query, ctxt); - } else { - ctxt->cards = g_list_append(NULL, card); - complete_sequence(NULL, ctxt); - } - gnome_dialog_close(dialog); - break; - case GNOME_PRINT_PREVIEW: - master = gnome_print_master_new_from_dialog( GNOME_PRINT_DIALOG(dialog) ); - pc = gnome_print_master_get_context( master ); - e_contact_build_style(style); - - ctxt->x = 0; - ctxt->y = 0; - ctxt->column = 0; - ctxt->style = style; - ctxt->master = master; - ctxt->first_section = TRUE; - ctxt->first_char_on_page = 'A' - 1; - ctxt->type = GNOME_PRINT_PREVIEW; - - font_size = 72 * ctxt->style->page_height / 27.0 / 2.0; - ctxt->letter_heading_font = gnome_font_new(gnome_font_get_name(ctxt->style->headings_font), ctxt->style->headings_font->size * 1.5); - ctxt->letter_tab_font = gnome_font_new(gnome_font_get_name(ctxt->style->headings_font), font_size); - - ctxt->pc = GNOME_PRINT_CONTEXT(gnome_print_multipage_new_from_sizes(pc, - 72 * style->paper_width, - 72 * style->paper_height, - 72 * style->page_width, - 72 * style->page_height)); - - ctxt->book = book; - ctxt->query = g_strdup(query); - if (uses_book) { - ctxt->cards = NULL; - gtk_object_ref(GTK_OBJECT(book)); - e_contact_do_print(book, ctxt->query, ctxt); - } else { - ctxt->cards = g_list_append(NULL, card); - gtk_object_ref(GTK_OBJECT(card)); - complete_sequence(NULL, ctxt); - } - break; - case GNOME_PRINT_CANCEL: - if (uses_book) - gtk_object_unref(GTK_OBJECT(book)); - else - gtk_object_unref(GTK_OBJECT(card)); - g_free(query); - gnome_dialog_close(dialog); - g_free(style); - g_free(ctxt); - break; - } -} - -GtkWidget * -e_contact_print_dialog_new(EBook *book, char *query) -{ - GtkWidget *dialog; - - - dialog = gnome_print_dialog_new("Print cards", GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES); - gnome_print_dialog_construct_range_any(GNOME_PRINT_DIALOG(dialog), GNOME_PRINT_RANGE_ALL | GNOME_PRINT_RANGE_SELECTION, - NULL, NULL, NULL); - - gtk_object_ref(GTK_OBJECT(book)); - gtk_object_set_data(GTK_OBJECT(dialog), "uses_book", (void *) 1); - gtk_object_set_data(GTK_OBJECT(dialog), "book", book); - gtk_object_set_data(GTK_OBJECT(dialog), "query", g_strdup(query)); - gtk_signal_connect(GTK_OBJECT(dialog), - "clicked", GTK_SIGNAL_FUNC(e_contact_print_button), NULL); - gtk_signal_connect(GTK_OBJECT(dialog), - "close", GTK_SIGNAL_FUNC(e_contact_print_close), NULL); - return dialog; -} - -GtkWidget * -e_contact_print_card_dialog_new(ECard *card) -{ - GtkWidget *dialog; - - dialog = gnome_print_dialog_new("Print card", GNOME_PRINT_DIALOG_COPIES); - - card = e_card_duplicate(card); - gtk_object_set_data(GTK_OBJECT(dialog), "card", card); - gtk_object_set_data(GTK_OBJECT(dialog), "uses_book", (void *) 0); - gtk_signal_connect(GTK_OBJECT(dialog), - "clicked", GTK_SIGNAL_FUNC(e_contact_print_button), NULL); - gtk_signal_connect(GTK_OBJECT(dialog), - "close", GTK_SIGNAL_FUNC(e_contact_print_close), NULL); - return dialog; -} diff --git a/addressbook/printing/e-contact-print.glade b/addressbook/printing/e-contact-print.glade deleted file mode 100644 index be24c9fc60..0000000000 --- a/addressbook/printing/e-contact-print.glade +++ /dev/null @@ -1,2009 +0,0 @@ - - - - - Printing - printing - - - pixmaps - C - False - False - False - False - False - False - True - interface.c - interface.h - callbacks.c - callbacks.h - support.c - support.h - True - e-contact-print.glade.h - - - - GnomeDialog - print-edit-style - False - Page Setup: - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - False - 8 - - 4 - True - True - - - - GtkVBox - vbox-contact-print-style-editor - False - 5 - - 0 - True - True - - - - GtkHBox - hbox2 - 5 - False - 16 - - 0 - True - True - - - - GtkLabel - label8 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - label-style-name - True - False - True - 0 - - - 0 - False - False - - - - - - GtkNotebook - notebook1 - True - True - True - GTK_POS_TOP - False - 2 - 2 - False - - 0 - True - True - - - - GtkVBox - vbox2 - 5 - False - 5 - - - GtkAlignment - alignment1 - 0.5 - 0.5 - 0 - 0 - - 0 - True - True - - - - GtkFrame - frame5 - - 0 - GTK_SHADOW_ETCHED_IN - - - Placeholder - - - - - - GtkHBox - hbox1 - True - 7 - - 0 - True - True - - - - GtkFrame - frame6 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkAlignment - alignment4 - 0 - 0 - 0 - 0 - - - GtkTable - table1 - 8 - 6 - 5 - False - 0 - 0 - - - GtkLabel - label5 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 4 - 5 - 0 - 0 - False - False - False - False - True - True - - - - - GtkLabel - label4 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAlignment - alignment2 - 0 - 0.5 - 0 - 0 - - 1 - 5 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - GtkRadioButton - radiobutton1 - True - - True - True - - - - - GtkCheckButton - checkbutton1 - True - - False - True - - 1 - 5 - 4 - 5 - 0 - 0 - False - False - False - False - True - True - - - - - GtkCheckButton - checkbutton2 - True - - False - True - - 1 - 5 - 5 - 6 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAlignment - alignment3 - 0 - 0.5 - 0 - 0 - - 1 - 5 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - GtkRadioButton - radiobutton2 - True - - False - True - - - - - GtkLabel - label6 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 3 - 2 - 3 - 0 - 2 - False - False - False - False - True - True - - - - - GtkLabel - label7 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 3 - 3 - 4 - 0 - 2 - False - False - False - False - True - True - - - - - GtkAlignment - alignment6 - 0 - 0.5 - 0 - 0 - - 3 - 4 - 3 - 4 - 0 - 2 - False - False - False - False - True - True - - - - GtkSpinButton - spinbutton2 - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 2 - 0 - 100 - 1 - 10 - 10 - - - - - GtkAlignment - alignment5 - 0 - 0.5 - 0 - 0 - - 3 - 4 - 2 - 3 - 0 - 2 - False - False - False - False - True - True - - - - GtkSpinButton - spinbutton1 - 45 - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 - 0 - 100 - 1 - 10 - 10 - - - - - - - - GtkVBox - vbox3 - False - 8 - - 0 - True - True - - - - GtkFrame - frame7 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkTable - table2 - 8 - 2 - 2 - False - 13 - 8 - - - GtkAlignment - alignment7 - 0.5 - 1 - 1 - 0 - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button6 - True - - - - - - GtkAlignment - alignment8 - 0.5 - 1 - 1 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button5 - 90 - True - - - - - - GtkVBox - vbox4 - False - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - True - False - False - False - True - True - - - - GtkLabel - label10 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry3 - 100 - True - True - True - 0 - 10 pt. Tahoma - - 0 - False - False - - - - - - GtkVBox - vbox5 - False - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - True - False - False - False - True - True - - - - GtkLabel - label9 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry2 - 100 - True - True - True - 0 - 8 pt. Tahoma - - 0 - False - False - - - - - - - - GtkFrame - frame8 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkCheckButton - checkbutton3 - True - - False - True - - - - - - - - GtkLabel - Notebook:tab - label1 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkHBox - hbox3 - True - 0 - - - GtkVBox - vbox6 - False - 0 - - 0 - True - True - - - - GtkFrame - frame9 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkVBox - vbox16 - 10 - False - 0 - - - GtkVBox - vbox17 - False - 0 - - 0 - True - True - - - - GtkLabel - label21 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkScrolledWindow - scrolledwindow1 - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkCList - clist1 - True - 1 - 80 - GTK_SELECTION_SINGLE - False - GTK_SHADOW_IN - - - GtkLabel - CList:title - label26 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - - GtkVBox - vbox18 - False - 0 - - 0 - True - True - - - - GtkLabel - label24 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkHBox - hbox5 - True - 0 - - 0 - True - True - - - - GtkLabel - label27 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry9 - 1 - True - True - True - 0 - - - 0 - True - True - - - - - GtkLabel - label28 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry10 - 1 - True - True - True - 0 - - - 0 - True - True - - - - - - - GtkVBox - vbox19 - False - 0 - - 0 - True - True - - - - GtkLabel - label25 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkCombo - combo1 - False - True - False - True - False - - - 0 - False - False - - - - GtkEntry - GtkCombo:entry - combo-entry1 - True - True - True - 0 - - - - - - - - - GtkFrame - frame10 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkTable - table4 - 15 - 2 - 4 - True - 6 - 9 - - - GtkLabel - label29 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - True - False - False - True - True - - - - - GtkLabel - label30 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - True - False - False - True - True - - - - - GtkLabel - label31 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 2 - 3 - 0 - 1 - 0 - 0 - False - True - False - False - True - True - - - - - GtkEntry - entry11 - 1 - True - True - True - 0 - - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry12 - 1 - True - True - True - 0 - - - 3 - 4 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry13 - 1 - True - True - True - 0 - - - 3 - 4 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry14 - 1 - True - True - True - 0 - - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label32 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 2 - 3 - 1 - 2 - 0 - 0 - False - True - False - False - True - True - - - - - - - - GtkVBox - vbox7 - False - 0 - - 0 - True - True - - - - GtkFrame - frame11 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkVBox - vbox8 - 10 - False - 0 - - - GtkVBox - vbox20 - False - 0 - - 0 - True - True - - - - GtkLabel - label33 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkScrolledWindow - scrolledwindow2 - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkCList - clist2 - True - 1 - 80 - GTK_SELECTION_SINGLE - False - GTK_SHADOW_IN - - - GtkLabel - CList:title - label35 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - - GtkVBox - vbox21 - False - 0 - - 0 - True - True - - - - GtkLabel - label34 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkHBox - hbox6 - True - 0 - - 0 - True - True - - - - GtkLabel - label36 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry15 - 1 - True - True - True - 0 - - - 0 - True - True - - - - - GtkLabel - label37 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry16 - 1 - True - True - True - 0 - - - 0 - True - True - - - - - - - - - GtkFrame - frame12 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - hbox4 - False - 10 - - - Placeholder - - - - GtkVBox - vbox9 - False - 5 - - 0 - True - True - - - - GtkAlignment - alignment9 - 0 - 1 - 0 - 0 - - 0 - True - True - - - - GtkRadioButton - radiobutton3 - True - - False - True - - - - - GtkAlignment - alignment10 - 0 - 0 - 0 - 0 - - 0 - True - True - - - - GtkRadioButton - radiobutton4 - True - - False - True - - - - - - - - - - GtkLabel - Notebook:tab - label2 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkVBox - vbox10 - 8 - False - 0 - - - GtkTable - table5 - 4 - 3 - True - 4 - 4 - - 0 - True - True - - - - GtkAlignment - alignment15 - 0 - 1 - 0 - 0 - - 1 - 2 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button11 - True - - - - - - GtkText - text10 - 50 - True - False - - - 0 - 1 - 1 - 2 - 0 - 0 - False - True - False - False - True - True - - - - - GtkText - text11 - 50 - True - False - - - 2 - 3 - 1 - 2 - 0 - 0 - True - False - False - False - True - True - - - - - GtkText - text12 - 50 - True - False - - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - GtkText - text13 - 50 - True - False - - - 0 - 1 - 3 - 4 - 0 - 0 - False - True - False - False - True - True - - - - - GtkText - text14 - 5 - True - False - - - 1 - 2 - 3 - 4 - 0 - 0 - False - False - False - False - True - True - - - - - GtkText - text15 - 50 - True - False - - - 2 - 3 - 3 - 4 - 0 - 0 - False - False - False - False - True - True - - - - - GtkAlignment - alignment16 - 0.5 - 1 - 1 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - True - False - False - False - True - True - - - - GtkVBox - vbox14 - False - 0 - - - GtkLabel - label14 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry7 - True - True - True - 0 - - - 0 - False - False - - - - - - - GtkAlignment - alignment17 - 0.5 - 1 - 1 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - True - False - False - False - True - True - - - - GtkVBox - vbox15 - False - 0 - - - GtkLabel - label15 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - entry8 - True - True - True - 0 - - - 0 - False - False - - - - - - - GtkAlignment - alignment14 - 0 - 1 - 0 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - True - - - - GtkButton - button10 - True - - - - - - - GtkHBox - hbox7 - False - 0 - - 0 - False - True - - - - GtkToolbar - toolbar1 - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_ICONS - 5 - GTK_TOOLBAR_SPACE_EMPTY - GTK_RELIEF_NORMAL - True - - 0 - True - False - - - - Placeholder - - - - Placeholder - - - - Placeholder - - - - Placeholder - - - - Placeholder - - - - - - GtkCheckButton - checkbutton4 - True - - False - True - - 0 - False - False - - - - - - GtkLabel - Notebook:tab - label3 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button1 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button2 - True - True - GNOME_STOCK_BUTTON_APPLY - - - - GtkButton - button3 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - - diff --git a/addressbook/printing/e-contact-print.glade.h b/addressbook/printing/e-contact-print.glade.h deleted file mode 100644 index b3b03d6d68..0000000000 --- a/addressbook/printing/e-contact-print.glade.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("Page Setup:"); -gchar *s = N_("Style name:"); -gchar *s = N_("Preview:"); -gchar *s = N_("Options"); -gchar *s = N_("Include:"); -gchar *s = N_("Sections:"); -gchar *s = N_("Immediately follow each other"); -gchar *s = N_("Letter tabs on side"); -gchar *s = N_("Headings for each letter"); -gchar *s = N_("Start on a new page"); -gchar *s = N_("Number of columns:"); -gchar *s = N_("Blank forms at end:"); -gchar *s = N_("Fonts"); -gchar *s = N_("Font..."); -gchar *s = N_("Font..."); -gchar *s = N_("Headings"); -gchar *s = N_("10 pt. Tahoma"); -gchar *s = N_("Body"); -gchar *s = N_("8 pt. Tahoma"); -gchar *s = N_("Shading"); -gchar *s = N_("Print using gray shading"); -gchar *s = N_("Format"); -gchar *s = N_("Paper"); -gchar *s = N_("Type:"); -gchar *s = N_("label26"); -gchar *s = N_("Dimensions:"); -gchar *s = N_("Width:"); -gchar *s = N_("Height:"); -gchar *s = N_("Paper source:"); -gchar *s = N_("Margins"); -gchar *s = N_("Top:"); -gchar *s = N_("Bottom:"); -gchar *s = N_("Left:"); -gchar *s = N_("Right:"); -gchar *s = N_("Page"); -gchar *s = N_("Size:"); -gchar *s = N_("label26"); -gchar *s = N_("Dimensions:"); -gchar *s = N_("Width:"); -gchar *s = N_("Height:"); -gchar *s = N_("Orientation"); -gchar *s = N_("Portrait"); -gchar *s = N_("Landscape"); -gchar *s = N_("Paper"); -gchar *s = N_("Font..."); -gchar *s = N_("Header"); -gchar *s = N_("Footer:"); -gchar *s = N_("Font..."); -gchar *s = N_("Reverse on even pages"); -gchar *s = N_("Header/Footer"); diff --git a/addressbook/printing/e-contact-print.h b/addressbook/printing/e-contact-print.h deleted file mode 100644 index fb17271f6b..0000000000 --- a/addressbook/printing/e-contact-print.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-contact-print.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef E_CONTACT_PRINT_H -#define E_CONTACT_PRINT_H - -#include -#include -#include "e-contact-print-types.h" - -GtkWidget *e_contact_print_dialog_new(EBook *book, char *query); -GtkWidget *e_contact_print_card_dialog_new(ECard *card); - -#endif /* E_CONTACT_PRINT_H */ diff --git a/addressbook/printing/medbook.ecps b/addressbook/printing/medbook.ecps deleted file mode 100644 index 72cca146dd..0000000000 --- a/addressbook/printing/medbook.ecps +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/addressbook/printing/phonelist.ecps b/addressbook/printing/phonelist.ecps deleted file mode 100644 index 53ca294d36..0000000000 --- a/addressbook/printing/phonelist.ecps +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/addressbook/printing/smallbook.ecps b/addressbook/printing/smallbook.ecps deleted file mode 100644 index 5844851bfb..0000000000 --- a/addressbook/printing/smallbook.ecps +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/addressbook/printing/test-contact-print-style-editor.c b/addressbook/printing/test-contact-print-style-editor.c deleted file mode 100644 index d4dccc0b87..0000000000 --- a/addressbook/printing/test-contact-print-style-editor.c +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * test-contact-print-style-editor.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include -#include "e-contact-print-style-editor.h" - -/* This is a horrible thing to do, but it is just a test. */ -GtkWidget *editor; - -static void destroy_callback(GtkWidget *app, gpointer data) -{ - static int count = 2; - count --; - if ( count <= 0 ) - exit(0); -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Contact Print Style Editor Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the contact print style editor widget" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GtkWidget *app; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Contact Print Style Editor Test", VERSION, argc, argv); - - glade_gnome_init (); - - app = gnome_app_new("Contact Print Style Editor Test", NULL); - - editor = e_contact_print_style_editor_new(""); - - gnome_app_set_contents( GNOME_APP( app ), editor ); - - /* Connect the signals */ - gtk_signal_connect( GTK_OBJECT( app ), "destroy", - GTK_SIGNAL_FUNC( destroy_callback ), - ( gpointer ) app ); - - gtk_widget_show_all( app ); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/addressbook/printing/test-print.c b/addressbook/printing/test-print.c deleted file mode 100644 index 1b73fda3da..0000000000 --- a/addressbook/printing/test-print.c +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * test-print.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "config.h" - -#include -#include -#include "e-contact-print.h" - -/* This is a horrible thing to do, but it is just a test. */ -GtkWidget *print; - -static gint test_close(GnomeDialog *dialog, gpointer data) -{ - exit(0); - return 1; -} - -#if 0 -static void about_callback( GtkWidget *widget, gpointer data ) -{ - - const gchar *authors[] = - { - "Christopher James Lahey ", - NULL - }; - - GtkWidget *about = - gnome_about_new ( _( "Contact Print Test" ), VERSION, - _( "Copyright (C) 2000, Helix Code, Inc." ), - authors, - _( "This should test the contact print code" ), - NULL); - gtk_widget_show (about); -} -#endif - -int main( int argc, char *argv[] ) -{ - GList *shown_fields = NULL; - - /* bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE);*/ - - gnome_init( "Contact Print Test", VERSION, argc, argv); - - glade_gnome_init (); - - shown_fields = g_list_append(shown_fields, "First field"); - shown_fields = g_list_append(shown_fields, "Second field"); - shown_fields = g_list_append(shown_fields, "Third field"); - shown_fields = g_list_append(shown_fields, "Fourth field"); - - print = e_contact_print_dialog_new(NULL, NULL); - gtk_widget_show_all(print); - gtk_signal_connect(GTK_OBJECT(print), "close", GTK_SIGNAL_FUNC(test_close), NULL); - - gtk_main(); - - /* Not reached. */ - return 0; -} diff --git a/announcement-0.4.1.txt b/announcement-0.4.1.txt deleted file mode 100644 index 6cf35a537b..0000000000 --- a/announcement-0.4.1.txt +++ /dev/null @@ -1,167 +0,0 @@ -Hello, - -In honor of last week's conference and expo: a new development snapshot -release of the Evolution groupware suite (0.4.1, code name "aLeWifE") is -out. - -Evolution is the GNOME mailer, calendar, and addressbook application. - -* Availability - - You can get the Evolution 0.4.1 tarball here: - - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/evolution - - Evolution also requires the latest versions of GtkHTML - (0.6.1), Bonobo (0.18), OAF (0.5.1), GNOME VFS (0.3.1), GConf - (0.8), libunicode (0.4), GNOME Print (0.20) and ORBit (0.5.3). - - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/gtkhtml - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/bonobo - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/oaf - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/gnome-vfs - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/GConf - ftp://ftp.gnome.org/pub/GNOME/unstable/sources/libunicode - ftp://ftp.gnome.org/pub/GNOME/stable/sources/gnome-print - ftp://ftp.gnome.org/pub/GNOME/stable/sources/ORBit - - You can also get Evolution 0.4.1 for Redhat through Helix - Update, or Evolution 0.4.1 for debian through the Helix GNOME - debian distribution. Support for other distributions will be - coming later this week. - -* Changes since version 0.3 - - Shell: - - - Added interfaces to display messages and a progress bar when the - component is busy. (Ettore) - - - Changed the shell BonoboUIHandler code to allow placing menu items - such as "Print" in the right places. (Ettore) - - - Added code to check if an existing `~/evolution' directory - actually has the content we expect and, if not, complain to the - user. (Dan) - - - Fixed some Bonobo-related refcounting problems. (Michael Meeks) - - - Removed the GConf dependency. (JP) - - - Improved the API for the folder selection dialog. (Ettore) - - - Memory leak fixes. (Peter) - - Calendar: - - The calendar is in the middle of major rewrite. Evolution 0.4.1 - ships with essentially the same calendar component as 0.3 did. - - Addressbook: - - - More work on the Palm Pilot conduits. (Chris Toshok) - - - Fixed some LDAP-related crashes. (Chris Toshok) - - - Added support for displaying embedded vCards through a Bonobo - component. (Chris Lahey) - - - Added support for generic fields. (Chris Lahey) - - - Fixed the navigation order for the Tab key in the contact editor - window. (Chris Lahey) - - - Fixed some Bonobo-related bugs and crashes. (Chris Lahey, Michael - Meeks) - - - Only display entries that have an email address in the address - selector dialog. (Chris Lahey) - - - Added an utility program to import vCards from Gnomecard. (Chris - Lahey) - - Mailer: - - Generic - - - Long mailer operations (such as fetching new mail) now run - asynchronously rather than blocking the UI. This involved - a major rewrite of much of the Camel and mailer code. (Peter) - - - GPG/PGP message decryption support (Nathan Thompson-Amato, Dan) - - - Unfinished messages in the composer can be saved to the "Drafts" - folder and finished later. (Jeff) - - - Double-clicking on a message in the message view now opens it in a - separate window. (Jeff) - - - vCards attached to messages now bring up a minicard view with a - button to add the vCard to the addressbook (Chris Lahey, Dan) - - - Inline uuencoded/binhexed "attachment" support (Dan) - - - "Mark All Messages Seen" command. (Cody Russell) - - Filters / VFolders - - - Major filter/vfolder dialog rewrite (Michael Zucchi) VFolders can - now search any (searchable) folder, not just Inbox. - - - Auto-filter/auto-vfolder code (right click on a message in the - list and pick one of the options at the bottom of the menu to - create a filter/vfolder rule for similar messages). (Michael) - - - You can now set the color of messages in the message list, based - on filter rules. (Local stores can also now store arbitrary user - flags, although there is not yet UI code to set/view them.) - (Michael) - - - Added "Save" button to the quicksearch bar to save a search as a - vfolder. (Michael) - - Configuration - - - Major mail config dialog rewrite (JP). - - - The mailer now remembers your threaded/unthreaded message view - setting between sessions. (Jeremy Wise). - - - Support for multiple identities (JP, Jeff), sources (JP, Peter), and - IMAP servers (JP, Dan) - - Providers - - - You can now leave POP mail on the server. (This will [currently] - only work right with POP servers that support the UIDL command. - On other servers, it will never download some messages unless you - never delete mail.) - - - There is now an MH-like local store available, and code to convert - a folder from one type to the other. (Michael) - - - The mbox provider now writes out "From " lines that are more - compatible with other mailers (like Mutt) that are picky about - their exact format. (Michael) - - - The IMAP provider now supports searching (Jeff). Also various - other speed/efficiency/robustness improvements (Jeff), and support - for old IMAP4 servers as well as IMAP4rev1 (Jon K Hellan). - -* Mailing lists - - You can subscribe to the Evolution developers list or the - Evolution users list by going to the Evolution home page on - http://www.helixcode.com/apps/evolution.php3 - -Please note that this is still software in development and should not -be used for production work. We appreciate testers and contributors, -but please remember that Evolution will still be buggy, incomplete, -and temperamental. - -Thanks to the many people who have sent in suggestions and fixes. - -(And of course, this announcement was sent with Evolution. :-)) - -Enjoy, - The Evolution team. \ No newline at end of file diff --git a/art/.cvsignore b/art/.cvsignore deleted file mode 100644 index c038ed7864..0000000000 --- a/art/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in \ No newline at end of file diff --git a/art/Makefile.am b/art/Makefile.am deleted file mode 100644 index 4ec6c2812c..0000000000 --- a/art/Makefile.am +++ /dev/null @@ -1,34 +0,0 @@ -imagesdir = $(datadir)/images/evolution - -images_DATA = \ - evolution-calendar.png \ - evolution-contacts.png \ - evolution-inbox.png \ - evolution-notes.png \ - evolution-tasks.png \ - evolution-calendar-mini.png \ - evolution-contacts-mini.png \ - evolution-inbox-mini.png \ - evolution-notes-mini.png \ - evolution-tasks-mini.png \ - evolution-today.png \ - briefcase.png \ - cellphone.png \ - globe.png \ - house.png \ - envelope.png \ - malehead.png - -EXTRA_DIST = \ - attachment.xpm \ - empty.xpm \ - mail-new.xpm \ - mail-read.xpm \ - mail-replied.xpm \ - mark.xpm \ - meeting.xpm \ - priority-high.xpm \ - priority-low.xpm \ - tree-expanded.xpm \ - tree-unexpanded.xpm \ - $(images_DATA) diff --git a/art/attachment.xpm b/art/attachment.xpm deleted file mode 100644 index 1bcc0386d2..0000000000 --- a/art/attachment.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * attachment_xpm[] = { -"16 16 2 1", -" c None", -". c #000000", -" ", -" ", -" ... ", -" . . . ", -" . . . . ", -" . . . . ", -" . . . . ", -" . . . . ", -" . . . . ", -" . . . . ", -" . . . . ", -" . . . ", -" . . ", -" . . ", -" ... ", -" "}; diff --git a/art/briefcase.png b/art/briefcase.png deleted file mode 100644 index 424ad09632..0000000000 Binary files a/art/briefcase.png and /dev/null differ diff --git a/art/cellphone.png b/art/cellphone.png deleted file mode 100644 index c8d70ae663..0000000000 Binary files a/art/cellphone.png and /dev/null differ diff --git a/art/empty.xpm b/art/empty.xpm deleted file mode 100644 index 93b02c0164..0000000000 --- a/art/empty.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * empty_xpm[] = { -"16 16 2 1", -" c None", -". c #FFFFFF", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................", -"................"}; diff --git a/art/envelope.png b/art/envelope.png deleted file mode 100644 index 77acd63100..0000000000 Binary files a/art/envelope.png and /dev/null differ diff --git a/art/evolution-calendar-mini.png b/art/evolution-calendar-mini.png deleted file mode 100644 index 5386190d96..0000000000 Binary files a/art/evolution-calendar-mini.png and /dev/null differ diff --git a/art/evolution-calendar.png b/art/evolution-calendar.png deleted file mode 100644 index 76afca6b6f..0000000000 Binary files a/art/evolution-calendar.png and /dev/null differ diff --git a/art/evolution-contacts-mini.png b/art/evolution-contacts-mini.png deleted file mode 100644 index 685812c137..0000000000 Binary files a/art/evolution-contacts-mini.png and /dev/null differ diff --git a/art/evolution-contacts.png b/art/evolution-contacts.png deleted file mode 100644 index 0d2cfb7e5f..0000000000 Binary files a/art/evolution-contacts.png and /dev/null differ diff --git a/art/evolution-inbox-mini.png b/art/evolution-inbox-mini.png deleted file mode 100644 index dbc20fcef1..0000000000 Binary files a/art/evolution-inbox-mini.png and /dev/null differ diff --git a/art/evolution-inbox.png b/art/evolution-inbox.png deleted file mode 100644 index 3b0f90b292..0000000000 Binary files a/art/evolution-inbox.png and /dev/null differ diff --git a/art/evolution-notes-mini.png b/art/evolution-notes-mini.png deleted file mode 100644 index f5b5d776d0..0000000000 Binary files a/art/evolution-notes-mini.png and /dev/null differ diff --git a/art/evolution-notes.png b/art/evolution-notes.png deleted file mode 100644 index f82006b894..0000000000 Binary files a/art/evolution-notes.png and /dev/null differ diff --git a/art/evolution-tasks-mini.png b/art/evolution-tasks-mini.png deleted file mode 100644 index d23b5a0be7..0000000000 Binary files a/art/evolution-tasks-mini.png and /dev/null differ diff --git a/art/evolution-tasks.png b/art/evolution-tasks.png deleted file mode 100644 index 0878645f9f..0000000000 Binary files a/art/evolution-tasks.png and /dev/null differ diff --git a/art/evolution-today.png b/art/evolution-today.png deleted file mode 100644 index 010bcb8cc7..0000000000 Binary files a/art/evolution-today.png and /dev/null differ diff --git a/art/globe.png b/art/globe.png deleted file mode 100644 index 84bebd7e9a..0000000000 Binary files a/art/globe.png and /dev/null differ diff --git a/art/house.png b/art/house.png deleted file mode 100644 index df43ec6181..0000000000 Binary files a/art/house.png and /dev/null differ diff --git a/art/mail-new.xpm b/art/mail-new.xpm deleted file mode 100644 index dee13fb6b3..0000000000 --- a/art/mail-new.xpm +++ /dev/null @@ -1,67 +0,0 @@ -/* XPM */ -static char * mail_new_xpm[] = { -"16 16 48 1", -" c None", -". c #000000", -"+ c #202020", -"@ c #817968", -"# c #F5F5F5", -"$ c #4D493C", -"% c #736C5C", -"& c #F5EEEE", -"* c #FFEDC7", -"= c #FAF3EC", -"- c #FCE6B5", -"; c #60594D", -"> c #D3C29E", -", c #746D5D", -"' c #F5F1F1", -") c #FDEECD", -"! c #F8F4ED", -"~ c #FAE3B3", -"{ c #645F4F", -"] c #C9BA98", -"^ c #71685A", -"/ c #FCF5EA", -"( c #FFE8B7", -"_ c #F5DEB2", -": c #FFEABD", -"< c #90856F", -"[ c #7C7361", -"} c #E4D1A9", -"| c #C9B996", -"1 c #FFEBC2", -"2 c #887F6B", -"3 c #726B59", -"4 c #D1BF9C", -"5 c #8B816C", -"6 c #FFE9BA", -"7 c #F9E2B2", -"8 c #FFE8B8", -"9 c #F6DFB3", -"0 c #D4C19D", -"a c #534D42", -"b c #CFBF9C", -"c c #645F51", -"d c #C2B293", -"e c #C4B393", -"f c #C4B495", -"g c #C5B596", -"h c #CCBC99", -"i c #4C483D", -" ", -" ", -" ", -" ", -" .+......... ", -" .@#########$. ", -" .#%&*#*=*-;>. ", -" .#*,')!*~{~]. ", -" .#**^/*({*_]. ", -" .#*:<{#{[-}|. ", -" .#12**{((34|. ", -" .#5*_67890ab. ", -" .cdeeedffghi. ", -" ........... ", -" ", -" "}; diff --git a/art/mail-read.xpm b/art/mail-read.xpm deleted file mode 100644 index 81bcdf8fd3..0000000000 --- a/art/mail-read.xpm +++ /dev/null @@ -1,70 +0,0 @@ -/* XPM */ -static char * mail_read_xpm[] = { -"16 16 51 1", -" c None", -". c #010101", -"+ c #D9D6D0", -"@ c #C3C0B9", -"# c #EFEDE8", -"$ c #F7F7F6", -"% c #FAFAFA", -"& c #B6B4AE", -"* c #737373", -"= c #C2BFB8", -"- c #F5F4F2", -"; c #FAFAF9", -"> c #FFFFFF", -", c #D2CFC9", -"' c #707070", -") c #5D5B57", -"! c #868580", -"~ c #E5E2DB", -"{ c #FBFBF8", -"] c #716E6B", -"^ c #62605C", -"/ c #F8F7F2", -"( c #DDDAD4", -"_ c #929191", -": c #969390", -"< c #92908A", -"[ c #A1A0A0", -"} c #F7F5F1", -"| c #FBFAF7", -"1 c #A5A29D", -"2 c #908D87", -"3 c #F9F7F3", -"4 c #F0EEE8", -"5 c #DDD9D2", -"6 c #797873", -"7 c #F9F8F4", -"8 c #74726E", -"9 c #E3E0D9", -"0 c #7D7A77", -"a c #FAF9F6", -"b c #F8F6F2", -"c c #FAF8F5", -"d c #F7F5F2", -"e c #E2DFD8", -"f c #090808", -"g c #D7D4CE", -"h c #D8D5CF", -"i c #D6D3CD", -"j c #DAD7D1", -"k c #E0DCD5", -"l c #222221", -" ", -" ..... ", -" .+++++. ", -" .++++++@. ", -" .+++++#$%&. ", -" .*==-;>>>>,'. ", -" .>)>>>>>>>!~. ", -" .>{]>>>>>^/(. ", -" .>{{_::<[{}(. ", -" .>{|1{{{2345. ", -" .>|6{{{77895. ", -" .>0{}abcd~8e. ", -" .fghhhi++jkl. ", -" ........... ", -" ", -" "}; diff --git a/art/mail-replied.xpm b/art/mail-replied.xpm deleted file mode 100644 index 9b398da7e0..0000000000 --- a/art/mail-replied.xpm +++ /dev/null @@ -1,52 +0,0 @@ -/* XPM */ -static char * mail_replied_xpm[] = { -"16 16 33 1", -" c None", -". c #010101", -"+ c #2F2F2F", -"@ c #A7A4A0", -"# c #FCFCFC", -"$ c #64625F", -"% c #95938E", -"& c #FBFBFB", -"* c #F9F8F6", -"= c #FBFAFA", -"- c #F6F5F1", -"; c #7D7B78", -"> c #EAE8E3", -", c #969491", -"' c #000000", -") c #928F8B", -"! c #FFFFFF", -"~ c #F7F6F4", -"{ c #B5B2AC", -"] c #003366", -"^ c #EFEFEF", -"/ c #CCCCCC", -"( c #AEABA6", -"_ c #B0ADA7", -": c #F5F3F0", -"< c #83817E", -"[ c #E1DFDA", -"} c #E2DFD9", -"| c #002C59", -"1 c #002850", -"2 c #00254A", -"3 c #181818", -"4 c #090909", -" ", -" ", -" ", -" ", -" .+......... ", -" .@#########$. ", -" .#%&*#*=*-;>. ", -" .#*,=''''''''' ", -" .#**)'!!!!!!!' ", -" .#*~{'!]]]]^/' ", -" .#~(*'!]]]^^/' ", -" .#_*:'!]]]]^/' ", -" .<[}}'!]^]]|/' ", -" ....'!^^^12/' ", -" '!//////3 ", -" ''4'''''' "}; diff --git a/art/malehead.png b/art/malehead.png deleted file mode 100644 index ada9545c85..0000000000 Binary files a/art/malehead.png and /dev/null differ diff --git a/art/mark.xpm b/art/mark.xpm deleted file mode 100644 index 710cd0e872..0000000000 --- a/art/mark.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * mark_xpm[] = { -"16 16 2 1", -" c None", -". c #36592A", -" ", -" ", -" ", -" ", -" . ", -" .. ", -" .. ", -" . .. ", -" .. ... ", -" .... ", -" ... ", -" .. ", -" . ", -" ", -" ", -" "}; diff --git a/art/meeting.xpm b/art/meeting.xpm deleted file mode 100644 index bf182fbd8f..0000000000 --- a/art/meeting.xpm +++ /dev/null @@ -1,64 +0,0 @@ -/* XPM */ -static char * meeting_xpm[] = { -"16 16 45 1", -" c None", -". c #000000", -"+ c #161616", -"@ c #A7A7A7", -"# c #8A8A8A", -"$ c #757575", -"% c #686868", -"& c #555555", -"* c #434343", -"= c #2F2F2F", -"- c #2B2B2B", -"; c #FFFFFF", -"> c #CACACA", -", c #C0C0C0", -"' c #B6B6B6", -") c #D8D5CD", -"! c #CFCFCF", -"~ c #AEADA5", -"{ c #7F7D78", -"] c #85847F", -"^ c #92908A", -"/ c #E0DFD7", -"( c #A09E98", -"_ c #E6E5E0", -": c #E5E3DF", -"< c #A5A49D", -"[ c #9D9B95", -"} c #D5D5D5", -"| c #B4B1AB", -"1 c #83817C", -"2 c #D44D41", -"3 c #A7453E", -"4 c #919089", -"5 c #E2E1DB", -"6 c #9C9A94", -"7 c #DEDBD5", -"8 c #D9D6CE", -"9 c #E79E3C", -"0 c #934238", -"a c #B4B1AA", -"b c #807F79", -"c c #82817C", -"d c #7E7D78", -"e c #ACA9A3", -"f c #A3A09A", -" ", -" ", -" ", -" ", -" ............. ", -" +@#$%&&***=-. ", -" .;;>;;,;;';). ", -" .!~{~~]~~{~^. ", -" .;/(_:<))[)~. ", -" .}|1||2333|4. ", -" .;56783990)~. ", -" .}|1||3000|4. ", -" .)ab~~c~~def. ", -" ............. ", -" ", -" "}; diff --git a/art/priority-high.xpm b/art/priority-high.xpm deleted file mode 100644 index 8858f5bf94..0000000000 --- a/art/priority-high.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * priority_high_xpm[] = { -"16 16 2 1", -" c None", -". c #A7453E", -" ", -" ", -" ", -" . ", -" ... ", -" ... ", -" ... ", -" .. ", -" .. ", -" . ", -" ", -" .. ", -" .. ", -" ", -" ", -" "}; diff --git a/art/priority-low.xpm b/art/priority-low.xpm deleted file mode 100644 index ad53e9e0cc..0000000000 --- a/art/priority-low.xpm +++ /dev/null @@ -1,21 +0,0 @@ -/* XPM */ -static char * priority_low_xpm[] = { -"16 16 2 1", -" c None", -". c #21405A", -" ", -" ", -" ", -" .. ", -" .. ", -" .. ", -" .. ", -" .. ", -" ...... ", -" .... ", -" .... ", -" .. ", -" .. ", -" ", -" ", -" "}; diff --git a/art/tree-expanded.xpm b/art/tree-expanded.xpm deleted file mode 100644 index fc748953eb..0000000000 --- a/art/tree-expanded.xpm +++ /dev/null @@ -1,22 +0,0 @@ -/* XPM */ -static char * tree_expanded_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #FFFFFF", -" ", -" ", -" ", -" ", -" ......... ", -" .+++++++. ", -" .+++++++. ", -" .+++++++. ", -" .+.....+. ", -" .+++++++. ", -" .+++++++. ", -" .+++++++. ", -" ......... ", -" ", -" ", -" "}; diff --git a/art/tree-unexpanded.xpm b/art/tree-unexpanded.xpm deleted file mode 100644 index 0dfb12a0a5..0000000000 --- a/art/tree-unexpanded.xpm +++ /dev/null @@ -1,22 +0,0 @@ -/* XPM */ -static char * tree_unexpanded_xpm[] = { -"16 16 3 1", -" c None", -". c #000000", -"+ c #FFFFFF", -" ", -" ", -" ", -" ", -" ......... ", -" .+++++++. ", -" .+++.+++. ", -" .+++.+++. ", -" .+.....+. ", -" .+++.+++. ", -" .+++.+++. ", -" .+++++++. ", -" ......... ", -" ", -" ", -" "}; diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index eec4b5f56d..0000000000 --- a/autogen.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -PKG_NAME="evolution" - - -. $srcdir/macros/autogen.sh diff --git a/calendar/.cvsignore b/calendar/.cvsignore deleted file mode 100644 index 2497bd97d5..0000000000 --- a/calendar/.cvsignore +++ /dev/null @@ -1,10 +0,0 @@ -Makefile.in -Makefile -.deps -_libs -.libs -*.lo -GnomeCal-stubs.c -GnomeCal-skels.c -GnomeCal-common.c -GnomeCal.h diff --git a/calendar/AUTHORS b/calendar/AUTHORS deleted file mode 100644 index 7e482aef97..0000000000 --- a/calendar/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -Miguel de Icaza -Federico Mena -Arturo Esponosa -Russell Steinthal diff --git a/calendar/ChangeLog b/calendar/ChangeLog deleted file mode 100644 index 8df21920f3..0000000000 --- a/calendar/ChangeLog +++ /dev/null @@ -1,5513 +0,0 @@ -2000-08-21 Federico Mena Quintero - - * gui/calendar-model.c (calendar_model_duplicate_value): Updated - function. - (calendar_model_free_value): Updated function. - (calendar_model_initialize_value): Updated function. - (calendar_model_value_is_empty): Updated function. - (remove_object): Updated function. - (obj_updated_cb): Updated function. - (calendar_model_get_cal_client): Added inline docs. - (calendar_model_delete_task): Updated. - (calendar_model_mark_task_complete): Updated. - (calendar_model_get_cal_object): Updated. - -2000-08-21 Federico Mena Quintero - - * gui/calendar-model.c (set_categories): New function. - (parse_time): Moved over from the old set_time_t(). This just - parses the time and leaves the warning dialog for the caller. - (set_datetime): New function. - (set_geo): Updated old function. - (set_percent): Updated old function. - (set_priority): Updated old function. - (set_summary): New function. - (set_url): New function. - (calendar_model_set_value_at): Updated function. - (calendar_model_is_cell_editable): Updated function. - (calendar_model_append_row): Updated. Added an ugly hack to - accomodate ETable's lack of a real API for adding new items. - Also, don't try to set columns that are not editable. - -2000-08-21 JP Rosevear - - * gui/e-week-view.c (e_week_view_reload_events): - Use CalObjType - - * gui/e-day-view.c (e_day_view_reload_events): ditto - -2000-08-21 JP Rosevear - - * gui/e-day-view-main-item.c (e_day_view_main_item_draw_day_event): - Use CalComponent instead of iCalObject. #if some alarm stuff - -2000-08-21 JP Rosevear - - * gui/e-day-view-top-item.c (e_day_view_top_draw_long_event): - Use CalComponent instead of iCalObject. #if some alarm stuff - -2000-08-21 JP Rosevear - - * gui/e-day-view.h: Update prototypes - - * gui/e-day-view.c (e_day_view_on_unrecur_appointment): - Remove commented out portions. - - * gui/e-week-view.c (e_week_view_on_unrecur_appointment): - Tidy. - -2000-08-21 JP Rosevear - - * gui/e-day-view.c - (e_day_view_update_event): Use CalComponent - instead of iCalObject. Work around not having a compare - dates routine for two CalComponents. - (e_day_view_reshape_long_event): Use CalComponent instead - of iCalObject, #if some alarm stuff - (e_day_view_reshape_day_event): ditto - (e_day_view_reload_events): Use revamped CalClient - (e_day_view_update_event_cb): Use CalComponent - instead of iCalObject - (e_day_view_foreach_event_with_uid): ditto - (e_day_view_remove_event_cb): ditto - (e_day_view_update_event_label): ditto - (e_day_view_find_event_from_uid): ditto - (e_day_view_on_event_click): ditto - (e_day_view_on_event_right_click): ditto - (e_day_view_on_new_appointment): ditto - (e_day_view_on_edit_appointment): ditto - (e_day_view_on_delete_occurrence): ditto - (e_day_view_on_delete_appointment): ditto - (e_day_view_on_unrecur_appointment): ditto - (e_day_view_on_top_canvas_motion): ditto - (e_day_view_on_main_canvas_motion): ditto - (e_day_view_finish_long_event_resize): ditto - (e_day_view_finish_resize): ditto - (e_day_view_free_event_array): ditto - (e_day_view_add_event): ditto - (e_day_view_key_press): ditto - (e_day_view_on_editing_stopped): ditto - (e_day_view_update_top_canvas_drag): ditto - (e_day_view_update_main_canvas_drag): ditto - (e_day_view_on_drag_data_get): ditto - (e_day_view_on_top_canvas_drag_data_received): ditto - (e_day_view_on_main_canvas_drag_data_received): ditto - -2000-08-20 JP Rosevear - - * gui/e-week-view-event-item.c (e_week_view_event_item_draw_icons): - Use CalComponent instead of iCalObject. #if some alarm stuff - -2000-08-20 JP Rosevear - - * gui/e-week-view.c (e_week_view_update_event): Use CalComponent - instead of iCalObject. Work around not having a compare - dates routine for two CalComponents. - (e_week_view_reload_events): Use revamped CalClient - (e_week_view_reshape_event_span): Use CalComponent instead - of iCalObject, #if some alarm stuff - (e_week_view_update_event_cb): Use CalComponent instead of - iCalObject - (e_week_view_foreach_event_with_uid): ditto - (e_week_view_remove_event_cb): ditto - (e_week_view_free_events): ditto - (e_week_view_add_event): ditto - (e_week_view_on_editing_stopped): ditto - (e_week_view_find_event_from_uid): ditto - (e_week_view_key_press): ditto - (e_week_view_show_popup_menu): ditto - (e_week_view_on_new_appointment): ditto - (e_week_view_on_edit_appointment): ditto - (e_week_view_on_delete_occurrence): ditto - (e_week_view_on_delete_appointment): ditto - (e_week_view_on_unrecur_appointment): ditto - - * gui/e-week-view.h: Update prototypes. - -2000-08-18 JP Rosevear - - * gui/event-editor.h: Update prototypes. - - * gui/event-editor.c: Need to come back here later to fix the - alarm stuff. The gui also needs to be completely redone to - support the fancier CalComponent settings (exrules, rdates, etc) - There are some warnings that I put in to mark some of these - spots - (event_editor_destroy): Use Calcomponent instead - of iCalObject - (make_title_from_comp): ditto - (clear_widgets): ditto - (fill_widgets): ditto - (classification_get): ditto - (dialog_to_comp_object): ditto - (save_ical_object): ditto - (close_dialog): ditto - (event_editor_set_ical_object): ditto - -2000-08-17 JP Rosevear - - * gui/gncal-todo.c (ok_button): Use CalComponent instead of - iCalObject - (cancel_button): ditto - (gncal_todo_edit): ditto - (add_todo): ditto - (edit_todo): ditto - (delete_todo): ditto - (insert_in_clist): ditto - (gncal_todo_update): ditto - - * gui/gncal-todo.h: Update prototypes - -2000-08-16 JP Rosevear - - Rework gnome-cal.c - alarms are a tad broken ATM so this - will need more cleaning later. - - * gui/gnome-cal.c (snooze): Use CalComponent instead of - iCalObject - (edit): ditto - (audio_notification): ditto - (display_notification_cb): Use CalComponent member of - alarm_notify_closure rather than iCalObject - (display_notification): ditto - (trigger_alarm_cb): ditto. Use CalComponent alarm types - (gnome_calendar_tag_calendar_cb): New - cal_client_generate_instances callback to - mark_gtk_calendar_day's - (gnome_calendar_tag_calendar): Use above callback - (save_ical_object_cb): Use CalComponent instead of - iCalObject - (gnome_calendar_edit_object): ditto - (gnome_calendar_new_appointment): ditto - -2000-08-15 JP Rosevear - - * gui/mark.c (mark_month_item_cb): Callback used to mark every - event in a month. - (mark_month_item): Use cal_client_generate_instances with - above callback - -2000-08-15 JP Rosevear - - * gui/print.c (print_month_small): Use - cal_client_get_objects_in_range - (print_day_details_cb): Callback used to create columns and fill - events into a day view. Code should be shared with e-day-view - in reality. Maybe need to go back to layout.[hc] a bit later - (print_day_details): Use cal_client_generate_instances with - above callback. Iterate over results to expand events to fit. - (print_day_summary_cb): Callback to build list of event info - for a day - (print_day_summary): Use cal_client_generate_instances with - above callback to generate the required event info for printing - (print_todo_details_cb): Callback used create list of todo info - (print_todo_details): Use cal_client_generate_instances with - above callback to generate required todo info for printing. - - * gui/layout.[hc]: No longer used. - -2000-08-12 Federico Mena Quintero - - * gui/calendar-model.c (get_is_overdue): Finished implementing. - (calendar_model_value_at): Handle the color field. - -2000-08-11 Seth Alves - - * cal-util/cal-component.c (cal_component_get_pilot_id): - (cal_component_set_pilot_id): stubs for pilot id accessors - (cal_component_get_pilot_status): - (cal_component_set_pilot_status): stubs for pilot status accessors - - * conduits/calendar/calendar-conduit.c (transmit): start to - convert to cal-component interface - - * conduits/todo/todo-conduit.c (transmit): same - -2000-08-11 Federico Mena Quintero - - * gui/calendar-model.c (get_geo): Generate a prettier string for - the geographical position. - (get_classification): New function. - (get_categories): New function. - (get_completed): New function. - (get_dtend): New function. - (get_dtstart): New function. - (get_due): New function. - (get_percent): New function. - (get_priority): New function. - (get_summary): New function. - (get_transparency): New function. - (get_url): New function. - (get_has_alarms): New function. - (get_has_recurrences): New function. - (get_is_complete): New function. - (get_is_overdue): New function. - - * cal-util/cal-component.c (scan_property): Handle the GEO - property. - (free_icalcomponent): Likewise. - (cal_component_get_geo): Likewise. - (cal_component_set_geo): Likewise. - (cal_component_free_geo): Likewise. - (cal_component_set_exdate_list): Removed incorrect assertion. - (cal_component_set_exrule_list): Removed incorrect assertion. - (cal_component_get_next_alarm): Oops, this had not been - implemented at all. - (cal_component_has_rdates): New function. - (cal_component_has_rrules): New function. - - * cal-util/cal-component.h (CalComponentField): Added the GEO - property. - -2000-08-11 Federico Mena Quintero - - * cal-util/cal-component.c (scan_property): Handle the - PERCENT-COMPLETE property. - (free_icalcomponent): Likewise. - (cal_component_get_percent): Likewise. - (cal_component_set_percent): Likewise. - (cal_component_free_percent): Likewise. - (scan_property): Handle the PRIORITY property. - (free_icalcomponent): Likewise. - (cal_component_get_priority): Likewise. - (cal_component_set_priority): Likewise. - (cal_component_free_priority): Likewise. - - * cal-util/cal-component.h (CalComponentField): New enumeration - with the list of fields we support for ETable. - -2000-08-10 Dan Winship - - * gui/component-factory.c (owner_set_cb): Update prototype. - -2000-08-10 Federico Mena Quintero - - * gui/gnome-cal.c (gnome_calendar_new_appointment): New function. - Mostly moved over from calendar-commands.c:display_objedit(). - - * gui/calendar-commands.c (calendar_iterate): Removed. Wheee! - (display_objedit): Removed. - (new_appointment_cb): New function. Just call - gnome_calendar_new_appointment(). - (display_objedit_today): Removed. - (calendar_control_activate): Removed the "New appointment for - today" option, since it is pretty useless. - -2000-08-10 Federico Mena Quintero - - * cal-client/cal-client.c (cal_client_generate_instances): There. - A pretty function to generate recurrence instances atomically so - that clients don't have to jump through hoops. Now we can get rid - of the ugly calendar_iterate() function. - -2000-08-09 Cody Russell - - * gui/calendar-commands.c: Make the toolbar honor the user's - gnomecc settings for detachable toolbars. - -2000-08-09 Federico Mena Quintero - - * gui/alarm.c (pop_alarm): Oops, subtract the new alarm's trigger - time from the current time. - -2000-08-09 Christopher James Lahey - - * cal-client/cal-client.c: Fixed a warning. - -2000-08-09 Christopher James Lahey - - * cal-client/cal-client.c, gui/e-calendar-table.c, pcs/cal.c: - Fixed some warnings. - -2000-08-08 Federico Mena Quintero - - * idl/evolution-calendar.idl (Cal): Added a get_objects_in_range() - method. Takes in a time range and the type of component we are - interested in; returns a list of UIDs. The idea is that - ocurrences get computed in the client; we can have multiple - recurrences in iCalendar and we cannot identify them trivially - across the wire. - (Cal): Removed the get_events_in_range() method. - - * pcs/cal-backend.c (cal_backend_free_uid_list): New function. - (cal_backend_get_objects_in_range): New function. - (cal_backend_get_events_in_range): Removed. - - * pcs/cal-backend-file.c (cal_backend_file_get_objects_in_range): - Implemented new method. - (cal_backend_file_get_events_in_range): Removed. - - * pcs/cal.c (Cal_get_events_in_range): Removed. - (uncorba_obj_type): New function. - (Cal_get_uids): Use uncorba_obj_type(). - (Cal_get_n_objects): Likewise. - (Cal_get_objects_in_range): Implemented new method. - - * cal-client/cal-client.c (cal_client_get_events_in_range): Removed. - (cal_client_get_objects_in_range): Implemented. - (corba_obj_type): New function. - (cal_client_get_n_objects): Use corba_obj_type(). - (cal_client_get_uids): Likewise. - -2000-08-07 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_clone): New function. - (cal_component_get_icalcomponent): Ensure that the SEQUENCE - property does not need incrementing. - - * gui/dialogs/alarm-notify-dialog.c (alarm_notify_dialog): Use - CalComponent. Deal with an empty summary property. - -2000-08-07 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_get_as_string): Doh, - libical owns the string's memory, so do not free it. - - * cal-client/client-test.c (create_client): Connect to the destroy - signal of the client here. - - * cal-client/test.ics: New test file, modified from Eric Busboom's - test file from RFC 2445. - -2000-08-05 Federico Mena Quintero - - * cal-client/client-test.c (dump_component): This was gone for - some reason. - (main): Load a new test file. - -2000-08-04 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_commit_sequence): New - function to commit changes to the SEQUENCE property. - (cal_component_get_as_string): Ensure that the sequence has been - committed. - - * cal-client/cal-client.c (cal_client_get_object): Use - CalComponent instead of the old iCalObject. - (cal_client_update_object): Use iCalObject. Commit the SEQUENCE - property before stringifying the object and piping it over to the - Wombat. - -2000-08-04 Seth Alves - - * conduits/todo/todo-conduit.c (conduit_get_gpilot_conduit): if - oaf isn't initialized by the time the conduit starts, start it - up. we do this because we need to start wombat with oaf, and - gpilotd doesn't currently start oaf. - -2000-08-04 Michael Meeks - - * gui/calendar-commands.c (calendar_control_activate): unref. - -2000-08-02 Federico Mena Quintero - - * pcs/cal-backend-file.c (cal_backend_file_get_uid_by_pilot_id): - Added stub for now. - (cal_backend_file_update_pilot_id): Likewise. - - * pcs/Makefile.am (libpcs_a_SOURCES): Removed cal-backend-imc.[ch] - from the list of sources. The idea is to move vCalendar importing - to the GUI as a convenience function. - -2000-08-02 Seth Alves - - * pcs/cal-backend-imc.c (cal_backend_imc_update_pilot_id): call - save (cbimc) after setting the pilot id and status. - -2000-08-02 Joe Shaw - - * pcs/cal-backend-file.c (cal_backend_file_update_pilot_id): - Fixed a g_return_if_fail that had two parameters and thus - wouldn't build. - -2000-08-03 Damon Chaplin - - * gui/calendar-model.c (calendar_model_append_row): updated to match - the new ETableModel append_row. This meant we could also get rid of - the row_being_added and idle_id hack. - -2000-08-02 Christopher James Lahey - - * gui/calendar-model.c: Emit "model_pre_change" signals as - appropriate. - -2000-08-02 Federico Mena Quintero - - * pcs/cal-backend-file.[ch]: New files for the iCalendar file - backend. - - * pcs/Makefile.am (libpcs_a_SOURCES): Added cal-backend-file.[ch]. - - * cal-util/cal-component.c (cal_component_set_icalcomponent): - Return an operation success code for if we are passed a component - of a type we don't support. - -2000-07-31 Federico Mena Quintero - - * cal-util/cal-recur.c (*): Use CalComponent and the new property - types instead of the old iCalObject stuff. - (cal_recur_generate_instances): Renamed from - cal_object_generate_events(). Ensure that the component has the - DTSTART property. - (generate_instances_for_year): Renamed from - cal_object_generate_events_for_year(). - (cal_obj_expand_recurrence): Made static. - (cal_recur_from_icalrecurrencetype): New function. We should - really convert this whole file to use struct icalrecurrencetype - instead. - (cal_recur_free): New function. - - * cal-util/cal-recur.h (CalRecurType): Renamed from CalObjRecurType. - (CalRecurrence): Renamed from CalObjRecurrence. - - * cal-util/timeutil.c (time_from_icaltimetype): New function. - - * cal-util/Makefile.am: Commented out the test-recur program. - -2000-08-01 Damon Chaplin - - * Removed doc directory, since it is the old gnome-pim docs which - aren't used any more. - - * Makefile.am (SUBDIRS): removed doc. - -2000-07-26 Peter Williams - - * gui/calendar-model.c: compile fix for Solaris - (works under Linux, too; don't know about others) - - * this is a test of whether CVS merge does what I - think it will do. - -2000-07-26 Federico Mena Quintero - - OK, it seems that we have all the interesting properties for - single-user calendars now. RFC 2445 can bite me. - - * cal-util/cal-component.c (scan_property): Handle the RRULE - property. Yay!. - (scan_recur): Likewise, yow! - (get_recur_list): Likewise, yeehaw! - (get_recur_list): Likewise, honk honk! - (set_recur_list): Likewise, booooga booooga! - (cal_component_get_rrule_list): Likewise, squeek squeek! - (cal_component_set_rrule_list): That's it, I ran out of sounds. - (cal_component_free_recur_list): Likewise. - (scan_property): Handle the EXRULE property. - (free_icalcomponent): Likewise. - (cal_component_get_exrule_list): Likewise. - (cal_component_set_exrule_list): Likewise. - (set_period_list): Oops, free the old properties as well as - removing them. - (set_text_list): Ditto. - (cal_component_set_exdate_list): Ditto. - - * cal-util/cal-component.c: Put all the functions used to free - returned values all together. - (cal_component_set_rdate_list): Oops, mark SEQUENCE property to be - incremented since the RFC requires it. - (scan_property): Handle the EXDATE property. - (scan_exdate): Likewise. - (free_icalcomponent): Likewise. - (cal_component_get_exdate_list): Likewise. - (cal_component_set_exdate_list): Likewise. - (cal_component_free_exdate_list): Likewise. - -2000-07-26 Jeffrey Stedfast - - * gui/Makefile.am: Fixed a typo - -2000-07-26 Jeffrey Stedfast - - * gui/Makefile.am: Added a few xpm files to the EXTRA DIST section - -2000-07-25 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_free_period_list): New function. - (scan_property): Handle the RDATE property. - (scan_period): Likewise. - (free_icalcomponent): Likewise. - (get_period_list): Likewise. - (set_period_list): Likewise. - (cal_component_get_rdate_list): Likewise. - (cal_component_set_rdate_list): Likewise. - (scan_text): Simplify a bit since we only handle the ALTREP - parameter; there is no need to iterate over all parameters. - (scan_datetime): Simplify; just handle the TZID parameter. - (scan_summary): Simplify; just handle the ALTREP parameter. - (cal_component_get_as_string): New function. - - * idl/evolution-calendar.idl (CalObjType): Removed the TYPE_OTHER; - now we only expose the types of objects we know about. - - * cal-util/cal-util.h (CalObjType): Likewise. - - * cal-client/cal-client.c (cal_client_get_n_objects): Likewise. - (cal_client_get_uids): Likewise. - - * conduits/calendar/calendar-conduit.c (get_calendar_objects): Likewise. - (check_for_slow_setting): Likewise. - - * pcs/cal-backend-imc.c (count_objects): Likewise. - (build_uids_list): Likewise. - - * pcs/cal.c (Cal_get_uids): Likewise. - (Cal_get_n_objects): Likewise. - -2000-07-25 Damon Chaplin - - * gui/e-calendar-table.[hc]: new ECalendarTable to show an ETable view - for Todo/Event items. - - * gui/task-assigned-to.xpm: - * gui/task-recurring.xpm: - * gui/task-assigned.xpm: - * gui/task.xpm: new pixmaps (all the same at present) to go in the - icon column of the ETable. - - * gui/event-editor.c: hid the silly 'Calendar' labels on the - GnomeDateEdits and hid the times when you select 'All day event'. - Also adjusted the time_t's so that when an all day event finishes on - say midnight 13th May, we show 12th May in the dialog, since it - implicitly includes all of that day up to midnight. - - * gui/dialogs/task-editor-dialog.glade: - * gui/dialogs/task-editor.[hc]: unfinished dialog to edit tasks. - - * gui/gncal-todo.c: temporary hack so that we can use the simple dialog - with our new ETable. - -2000-07-23 Damon Chaplin - - * cal-util/calobj.h: added a few more fields. - - * cal-util/calobj.c (ical_object_create_from_vobject): check for a - NULL return from vObjectUStringZValue for URL property to avoid SEGV. - For some reason an empty 'URL:' property appears and causes trouble. - -2000-07-20 Ettore Perazzoli - - * gui/component-factory.c (factory_fn): Update for the new - `evolution_shell_component_new()' arg. - -2000-07-19 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_alarm_set_trigger): - Finish filling the trigger. What a pain, again. - (cal_component_alarm_free_trigger): Implemented. - -2000-07-19 Fatih Demir - - * conduits/calendar/calendar-conduit-control-applet.desktop: - - * conduits/todo/todo-conduit-control-applet.desktop: - Added the Turkish desktop entries. - -2000-07-18 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_alarm_free): Free the - icalcomponent if this is an unattached alarm. - (scan_alarm_property): Handle the TRIGGER property. - (cal_component_alarm_get_trigger): Ditto. Royal pain. - (cal_component_alarm_set_trigger): Ditto. Less pain. - -2000-07-17 Federico Mena Quintero - - * cal-client/cal-client.c (cal_client_get_object): Fixed inline - docs. - (cal_client_new): Ditto. - (cal_client_get_n_objects): Added inline docs. - -2000-07-14 Federico Mena Quintero - - * cal-util/cal-component.c (CalComponentAlarm): New internal - represntation for alarm components. We really don't map them to a - CalComponent because it is more convenient to handle them as - "child" structures. - (make_alarm): New function to create a CalComponentAlarm from an - icalcomponent representing a VALARM. - (scan_alarm_property): New function to scan a property from an - alarm component. We support ACTION. - (cal_component_get_first_alarm): New function to start an iterator - over the alarms in a calendar component. - (cal_component_alarm_get_action): New function. - (cal_component_alarm_set_action): New function. - -2000-07-13 Seth Alves - - * conduits/todo/todo-conduit.c: conduit based on the calendar conduit. - this conduit syncs a pilot's ToDoDB database to wombat's list of "todo" - events. - - * gui/gncal-todo.c (simple_todo_editor): set todo's priority control - based on value from ical object during edit. - -2000-07-12 Federico Mena Quintero - - * gui/print.c: Revert Michael's GnomeFont patch until the - gnome-print API stabilizes. - -2000-07-12 Michael Meeks - - * gui/print.c (titled_box, print_text, print_month_small), - (bound_text): GnomeFont update. - -2000-07-12 Seth Alves - - * conduits/calendar/calendar-conduit.c: fixed various problems - - * cal-client/Makefile.am: build a static version of the library - to link with the conduits - - * cal-util/Makefile.am: same - -2000-07-11 Federico Mena Quintero - - * cal-util/cal-component.c (scan_property): Handle the COMPLETED - property. - (free_icalcomponent): Ditto. - (cal_component_get_completed): Ditto. - (cal_component_set_completed): Ditto. - (scan_property): Handle the TRANSPARENCY property. - (free_icalcomponent): Ditto. - (cal_component_get_transparency): Ditto. - (cal_component_set_transparency): Ditto. - (scan_property): Handle the URL property. - (free_icalcomponent): Ditto. - (cal_component_get_url): Ditto. - (cal_component_set_url): Ditto. - - * pcs/cal-factory.c (queue_load_create_job): Removed unneeded - check for the URI. - (load_fn): Be more paranoid about the URI and notify the listener - if we got passed a bad URI. Simplify the termination code a bit. - (create_fn): Likewise. - (queue_load_create_job): Be more paranoid about the URI. - -2000-07-10 Ettore Perazzoli - - * gui/Makefile.am: Remove pilot stuff for now. - - * Makefile.am (SUBDIRS): Remove `conduits'. - -2000-07-10 Dan Winship - - * gui/Makefile.am (EXTRA_DIST): remove gnomecal.conduit - - * conduits/calendar/Makefile.am (EXTRA_DIST): We want - calendar.conduit.in, not calendar.conduit. - -2000-07-10 Seth Alves - - * gui/Makefile.am (SUBDIRS): - * conduits/calendar/Makefile.am: moved calendar-conduit stuff from - the gui directory to here. - - * Makefile.am (SUBDIRS): added conduits to SIBDIRS - -2000-07-08 Ettore Perazzoli - - * gui/calendar-commands.c (calendar_control_activate): Remove - "close calendar" command. - -2000-07-08 Anders Carlsson - - * gui/e-week-view.c (e_week_view_on_button_press): Handle mouse wheel scrolling. - - * gui/e-day-view.c (e_day_view_on_time_canvas_button_press): New function to handle - mouse wheel scrolling. - (e_day_view_on_main_canvas_button_press): Handle mouse wheel scrolling. - -2000-07-07 Federico Mena Quintero - - * cal-util/cal-component.c (scan_property): Handle the SEQUENCE - property. - (free_icalcomponent): Ditto. - (cal_component_get_sequence): Ditto. - (cal_component_set_sequence): Ditto. - (cal_component_free_sequence): Ditto. - (cal_component_set_last_modified): Removed incorrect assertion. - (CalComponentPrivate): New need_sequence_inc flag. The sequence - number must be incremented when certain properties change, so we - store a flag that says if we need to bump it when piping the - object over the wire. - (free_icalcomponent): Reset need_sequence_inc. - (cal_component_set_dtstart): Set need_sequence_inc. - (cal_component_set_dtend): Ditto. - (cal_component_set_due): Ditto. - -2000-07-06 Federico Mena Quintero - - * cal-util/cal-component.c (scan_property): Handle the - LAST-MODIFIED property. - (free_icalcomponent): Ditto. - (cal_component_get_last_modified): Ditto. - (cal_component_set_last_modified): Ditto. - (get_icaltimetype): New function to get struct icaltimetype - values. - (cal_component_get_created): Use get_icaltimetype(). - (set_icaltimetype): New function to set struct icaltimetype - values. - (cal_component_set_created): Use set_icaltimetype(). - - * cal-util/cal-component.c (scan_property): Handle the CREATED - property. - (free_icalcomponent): Ditto. - (cal_component_free_icaltimetype): Ditto. - (cal_component_get_created): Ditto. - (cal_component_set_created): Ditto. - (cal_component_init): Do not create an UID here. - (ensure_mandatory_properties): New function to ensure that the - mandatory RFC properties are indeed in the component. If they are - not, we create them on the fly. - (cal_component_set_new_vtype): Use ensure_mandatory_properties(). - (cal_component_set_icalcomponent): Ditto. - (cal_component_get_uid): Return the UID in a parameter, not as a - function return value, for consistency's sake. - (scan_property): Handle the DTSTAMP property. - (free_icalcomponent): Ditto. - (cal_component_get_dtstamp): Ditto. - (cal_component_set_dtstamp): Ditto. - -2000-07-04 Damon Chaplin - - * gui/gncal-todo.c (gncal_todo_update): Use &obj instead of &ico in - the call to cal_client_get_object(). The ToDo list should work now. - - * gui/event-editor-dialog.glade: set the toplevel GnomeApp to invisible - so it doesn't appear and then resize. - -2000-07-03 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_get_summary): Use - CalComponentText instead of CalComponentPropSummary. Removed the - latter typedef. - (cal_component_set_summary): Likewise. - (scan_property): Handle the CLASSIFICATION property. - (cal_component_get_classification): Ditto. - (cal_component_set_classification): Ditto. - - * cal-util/cal-component.c (cal_component_free_text_list): Renamed - from cal_component_free_description_list(). We can share this - function since both comments and descriptions have the same form. - (scan_text): Ditto. - (get_text_list): New function. - (set_text_list): New function. - (cal_component_get_description_list): Use get_text_list(). - (cal_component_set_description_list): Use set_text_list(). - (cal_component_set_uid): Add sanity check. - (cal_component_get_summary): Ditto. - (cal_component_get_description_list): Ditto. - (cal_component_get_dtstart): Ditto. - (cal_component_get_dtend): Ditto. - (cal_component_get_due): Ditto. - (scan_property): Handle the COMMENT property. - (cal_component_get_comment_list): Ditto. - (cal_component_set_comment_list): Ditto. - -2000-07-02 Federico Mena Quintero - - * cal-util/cal-component.c (scan_categories): Handle CATEGORIES. - This can appear multiple times, so we maintain a list. We - compress them later to a single property with multiple values. - (cal_component_get_categories_list): Ditto. - (cal_component_set_categories_list): Ditto. - (cal_component_free_categories_list): Ditto. - (free_icalcomponent): Properly free the mappings. - -2000-07-02 Federico Mena Quintero - - * cal-util/cal-component.c (scan_datetime): Handle date/time and - timezone pairs. - (scan_property): Handle DTSTART and DTEND. - (cal_component_free_datetime): Ditto. - (get_datetime): Ditto. - (cal_component_get_dtstart): Ditto. - (set_datetime): Ditto. - (cal_component_set_dtstart): Ditto. - (cal_component_get_dtend): Ditto. - (cal_component_set_dtend): Ditto. - (scan_property): Handle DUE date. - (cal_component_get_due): Ditto. - (cal_component_set_due): Ditto. - -2000-07-01 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_get_description_list): - Handle the DESCRIPTION property. There can be multiple - descriptions with parameters each, so we deal with a list instead - of a single structure. - (cal_component_set_description_list): Ditto. - (cal_component_free_description_list): Ditto. - (scan_property): Ditto. - (scan_description): Ditto. - -2000-06-30 Federico Mena Quintero - - * cal-util/cal-component.c (cal_component_get_summary): To avoid - passing a million parameters to setters/getters for properties - that support parameters, we now pass client-side structures - instead. Here we use CalComponentPropSummary. - (cal_component_set_summary): Ditto. - -2000-06-29 Christopher James Lahey - - * gui/component-factory.c: Make calendar die when evolution quits. - -2000-06-30 Federico Mena Quintero - - * cal-util/cal-component.c: Change of plans. We use an - icalcomponent from libical as our core representation so that we - can preserve extension fields and fields that we don't (yet) - support. CalComponent is just a wrapper with a nice API that - provides non-iterative, random access to the ical's fields. - (cal_component_destroy): Free the thing correctly. - (cal_component_get_vtype): Re-implement in terms of icalcomponent. - (cal_component_set_icalcomponent): New function to set the - CalComponent's data from an existing icalcomponent. - (cal_component_get_icalcomponent): New function. - (cal_component_set_new_vtype): New convenience function to create - an empty component. - (scan_icalcomponent): Core scanning function. - (scan_property): Another core scanning function. - (cal_component_get_uid): Use the property directly. - (cal_component_get_summary): Ditto. Handle the altrep parameter - as well. - (cal_component_set_summary): Ditto. Feel the pain, motherfucker. - It is ridiculous how much code this involves. - (scan_summary): Ditto. - -2000-06-29 Ettore Perazzoli - - * gui/component-factory.c (owner_set_cb): Get an - EvolutionShellClient instead of an Evolution_Shell to match the - changes in libeshell. - -2000-06-29 Federico Mena Quintero - - * gui/Makefile.am: Do not link and include the pilot stuff for the - calendar component, just for the Pilot conduit. Commented out the - Pilot part so that Evolution can build. Sigh, we'll have to - modify gnome-pilot to use OAF. - -2000-06-29 Peter Williams - - * gui/Makefile.am (LINK_FLAGS): Make the calendar-pilot-sync - program conditional on HAVE_GNOME_PILOT, and add - GNOME_PILOT_CFLAGS, GNOME_PILOT_LIBS, and PISOCK_LIBS in the - appropriate places. - -2000-06-29 Seth Alves - - * pcs/cal.c (Cal_get_uid_by_pilot_id): - (Cal_update_pilot_id): - * pcs/cal-backend-imc.c (cal_backend_imc_update_pilot_id): - (cal_backend_imc_get_uid_by_pilot_id): - * pcs/cal-backend.c (cal_backend_get_uid_by_pilot_id): - (cal_backend_update_pilot_id): server code to service these: - - * gui/calendar-pilot-sync.c: updated to make use of cal-client. - also uses dirty bits on both sides to aid in syncing. - - * cal-client/cal-client.c (cal_client_get_uid_by_pilot_id): new - function -- ask the cal server to return uid given an object's - pilot id. - (cal_client_update_pilot_id): new function -- inform the - cal server of an objects pilot id and pilot dirty-flag. - -2000-06-28 Federico Mena Quintero - - * cal-util/cal-component.[ch]: New files for the new iCalendar - component object. Today's properties: basic component type, UID, - SUMMARY. - - * cal-util/Makefile.am: Added cal-component.[ch] to the list of - sources. - -2000-06-27 Michael Meeks - - * pcs/Makefile.am (INCLUDES): use BONOBO_VFS_GNOME_CFLAGS. - -2000-06-26 Christopher James Lahey - - * gui/calendar-model.c: Added an #ifdefed value_to_string handler - assignment. - -2000-06-26 Federico Mena Quintero - - * gui/calendar-model.c (calendar_model_duplicate_value): - Implement. - (calendar_model_initialize_value): Implement. - (calendar_model_value_is_empty): Implement. - -2000-06-21 Damon Chaplin - - * gui/e-day-view.c (e_day_view_reshape_long_event): set event before - using it! - (e_day_view_init): used new colors from tigert. - -2000-06-21 Christopher James Lahey - - * gui/e-day-view.c, gui/e-week-view.c: Remove the usage of the "x" - and "y" arguments. - -2000-06-21 Damon Chaplin - - * gui/gnome-cal.c (gnome_calendar_direction): changed so it keeps the - selection range. It just moves it on one day/week etc. This makes - it very handy for the keyboard shortcut code. - - * gui/calendar-commands.c (calendar_control_activate): fixed bug - setting the radio button active. - - * gui/e-day-view.[hc]: added support for keyboard navigation and - selection of the time range. - -2000-06-20 Federico Mena Quintero - - * gui/calendar-model.c (calendar_model_set_value_at): Implemented. - (calendar_model_is_cell_editable): Implemented. - - * cal-client/cal-client.c (cal_client_update_object): Take in an - iCalObject instead of a stringified version. - - * gui/gnome-cal.c (gnome_calendar_update_object): Removed. - (gnome_calendar_remove_object): Removed. - (save_ical_object_cb): Use the CalClient function. - - * gui/e-day-view.c (e_day_view_on_delete_occurrence): Likewise. - (e_day_view_on_unrecur_appointment): Likewise. - (e_day_view_finish_long_event_resize): Likewise. - (e_day_view_finish_resize): Likewise. - (e_day_view_key_press): Likewise. - (e_day_view_on_editing_stopped): Likewise. - (e_day_view_on_top_canvas_drag_data_received): Likewise. - (e_day_view_on_main_canvas_drag_data_received): Likewise. - (e_day_view_on_delete_appointment): Likewise. - - * gui/e-week-view.c (e_week_view_on_editing_stopped): Likewise. - (e_week_view_key_press): Likewise. - (e_week_view_on_delete_occurrence): Likewise. - (e_week_view_on_unrecur_appointment): Likewise. - (e_week_view_on_delete_appointment): Likewise. - - * gui/gncal-todo.c (ok_button): Likewise. - (delete_todo): Likewise. - -2000-06-19 Damon Chaplin - - * gui/event-editor-dialog.glade: tidied up dialog a bit, adding - space etc. - - * gui/e-week-view.c (e_week_view_reshape_events): removed debug msg. - -2000-06-18 Ettore Perazzoli - - * cal-util/Makefile.am (INCLUDES): Include from - `$(top_builddir)/libical/src/libical' too. [For the generated - libical `icalversion.h' header.] - * cal-client/Makefile.am (INCLUDES): Likewise. - -2000-06-18 Damon Chaplin - - * gui/e-day-view.c (e_day_view_on_top_canvas_drag_data_received): - fixed a DnD bug. - -2000-06-17 Dan Winship - - * cal-client/Makefile.am (INCLUDES): Fix to not depend on - installed ical.h - -2000-06-17 Damon Chaplin - - * gui/e-week-view.c: added little buttons which are shown when there - are more events than will fit in a day. Clicking on the button takes - the user to the 1-Day view and shows the full day. - - * gui/e-day-view.c: - * gui/e-week-view.c: set the "use_ellipsis" arg to TRUE for the EText - items so we get tooltips automatically. Though we may want to use our - own code to show tooltips so we can show the tips when the mouse is - around the edges of the event box, and we may want to show the start - and end times of the event in full. - - * gui/calendar-commands.c (calendar_control_activate): - * gui/gnome-cal.h: added view_toolbar_buttons[] so we can access the - radio buttons in the code easily. We need this if we want to jump to - another view programmatically. - -2000-06-16 Damon Chaplin - - * gui/jump.xpm: new icon for the EWeekView to jump to the day. - - * gui/Makefile.am (EXTRA_DIST): added jump.xpm - -2000-06-16 Damon Chaplin - - * gui/calendar-model.c (calendar_model_class_init): #ifdef'ed out - references to functions which don't exist yet, so evolution still - compiles. - -2000-06-16 Damon Chaplin - - * cal-util/test-recur.c: updated. - - * cal-util/cal-recur.[hc]: mostly finished, though it depends on the - iCalObject struct being updated to support more of iCalendar. - -2000-06-16 Damon Chaplin - - * pcs/.cvsignore: added icalendar-test. - -2000-06-15 Damon Chaplin - - * cal-util/Makefile.am (test_recur_LDADD): use libical.a - -2000-06-15 Dan Winship - - * cal-util/Makefile.am (noinst_PROGRAMS): merge the two separate - noinst_PROGRAMS declarations into one so automake accepts it. - (INCLUDES): include libical src dir so we don't depend on having - ical.h already installed - -2000-06-14 Federico Mena Quintero - - * gui/calendar-model.c: GPtrArray cannot insert stuff in the - middle of the array (!), so use plain GArray everywhere. Sigh. - -2000-06-13 Federico Mena Quintero - - * cal-client/cal-client.c (cal_client_get_object): Use vCalendar - again. - - * cal-util/calobj.c (ical_object_find_in_string): From Seth, make - it use vCalendar again. - -2000-06-13 Federico Mena Quintero - - * gui/calendar-model.c (obj_updated_cb): Juggle some eggs in - asynchronous fashion. Finished implementing. - (obj_removed_cb): Implemented. This one needs no juggling. - (calendar_model_set_cal_client): Only load the objects if we have - a client. - (calendar_model_destroy): Disconnect from the client's signals. - - * gui/Makefile.am (evolution_calendar_SOURCES): Added - calendar-model.[ch] to the list of sources. - - * pcs/cal-backend-imc.c (cal_backend_imc_get_n_objects): Doh, - return the computed value. - -2000-06-13 Federico Mena Quintero - - * gui/calendar-model.c (CalendarModelPrivate): Added the array of - objects and the hash table of UID->array index. - (calendar_model_row_count): Return the length directly from the - array instead of asking the Wombat. - (calendar_model_value_at): Implemented. - (calendar_model_new): Create an empty model. We provide a new - setter function now. - (calendar_model_construct): Removed function. - (calendar_model_set_cal_client): New function to set the calendar - client and object type at any time. This lets us reuse a calendar - model object. - - * cal-util/calobj.h (iCalObjectField): Just report whether the - object has alarms; not every single alarm. - -2000-06-13 Ettore Perazzoli - - * gui/Makefile.am (SHELL_OBJS): Removed. - (evolution_calendar_LDADD): Link with - `$(top_builddir)/shell/libeshell.a'. - -2000-06-09 Ettore Perazzoli - - * gui/component-factory.c (factory_fn): Pass NULL for the new args - @create_folder_fn and @remove_folder_fn. - (create_view): Updated to match the new - `EvolutionShellComponentCreateViewFn'. Return - `EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE' if type is not - "calendar". - -2000-06-09 Federico Mena Quintero - - * idl/evolution-calendar.idl (Cal): Added a get_n_objects() - method. - - * pcs/cal-backend.c (cal_backend_get_n_objects): New function. - - * pcs/cal-backend-imc.c (cal_backend_imc_get_n_objects): - Implemented. - - * pcs/cal.c (Cal_get_n_objects): Implemented. - - * cal-client/cal-client.c (cal_client_get_uids): Free the ev. - (cal_client_get_n_objects): Implemented. - - * cal-util/calobj.h (iCalObjectField): New enumeration to identify - the fields in an iCalObject. - -2000-06-08 Federico Mena Quintero - - * gui/event-editor.c (event_editor_destroy): Free the private - structure. - -2000-06-08 Federico Mena Quintero - - * cal-util/calobj.c (ical_object_to_vobject): Allow for NULL - summaries. - -2000-06-07 Federico Mena Quintero - - * gui/event-editor.c (toolbar): Added missing tooltips. We still - need icons, though. - -2000-06-07 Seth Alves - - * cal-util/calobj.c (ical_object_find_in_string): put this back in, - it's still used in cal-backend-imc.c:cal_backend_imc_update_object - - * cal-client/cal-client.c (cal_client_get_object): instead of - returning a text representation, decode the text and return an - iCalObject. Also added CalClientGetStatus which indicates - success or type of failure. - - * cal-util/calobj.c (ical_object_find_in_string): #ifed out - ical_object_find_in_string since it is unused now. - - * cal-client/client-test.c (list_uids): track get_object change - * gui/calendar-commands.c (calendar_iterate): same - * gui/e-day-view.c (e_day_view_update_event): same - * gui/e-week-view.c (e_week_view_update_event): same - * gui/print.c (print_day_details): same - (print_day_summary): same - (print_todo_details): same - * gui/gnome-cal.c (trigger_alarm_cb): same - * gui/gncal-todo.c (gncal_todo_update): same - -2000-06-06 Seth Alves - - * cal-util/icalendar.c, icalendar-save.c: fixed a bunch of problems - * cal-util/calobj.c (ical_object_find_in_string): use libical - instead of libversit - (ical_object_to_string): same - (dump_icalobject): prints the contents of an icalobject for debugging - - * gui/Makefile.am (LINK_FLAGS): link libical.a instead of libical.la - so we don't have to modify the build system of the released libical - * cal-client/Makefile.am (client_test_LDADD): same - * cal-util/Makefile.am (icalendar_test_LDADD): same - -2000-06-06 Federico Mena Quintero - - * cal-util/calobj.c (ical_object_destroy): Removed from the public - header; made static. Now everyone should use refcounting. - - * pcs/cal-backend-imc.c (free_ical_object): Use - ical_object_unref(). - (remove_object): Likewise. - -2000-06-02 Federico Mena Quintero - - * gui/calendar-commands.c (print): New function to call the print - engine. - (calendar_toolbar): Added the Print button. - (calendar_control_activate): Added the File/Print item. - - * gui/e-day-view.c (e_day_view_get_selected_time_range): Allow - start_time and end_time to be NULL. - - * gui/e-week-view.c (e_week_view_get_selected_time_range): - Likewise. - - * gui/print.c (range_selector_new): Show the range selector - widgets. Use the correct radio group for all of them! - (print_calendar): Do the dialog box here. We may want to split - this function later into smaller chunks. - -2000-06-05 Damon Chaplin - - * gui/e-week-view-event-item.c (e_week_view_event_item_button_press): - allow the right button to popup the menu, even when the event is - being edited. - - * gui/e-week-view.c: - * gui/e-day-view.c: Set the keyboard focus to the EDayView/EWeekView - when the right button is clicked, so that any event being edited is - saved before any action (e.g. opening the Event Editor dialog) is - started. Note that this won't work if we switch to asynchronous - notification. - -2000-06-02 Federico Mena Quintero - - * gui/event-editor.c (tb_save_and_close_cb): Implemented. - (toolbar): Added an icon for the Save and Close command. - (save_ical_object): Recompute the title of the window here. Maybe - it would be better to do it when we actually get the - "object_changed" signal from the CalClient. - (file_close_cb): Implemented. - -2000-06-02 Federico Mena Quintero - - * gui/gnome-cal.c (save_ical_object_cb): Implemented. - (gnome_calendar_add_object): Removed function, since it was - identical to gnome_calendar_update_object(). Modified the rest - of the code to use only the latter. - (gnome_calendar_remove_object): Be more paranoid about the UID. - (gnome_calendar_update_object): Ditto. Also, renamed this - function from gnome_calendar_object_changed(), for consistency - with the lower-level CalClient interface. - - * gui/event-editor.c (event_editor_class_init): New - "save_ical_object" signal to ask that our parent store the - calendar object to the backend. - (save_ical_object): New function to save the calendar object, - actually if just emits the signal. - (file_save_cb): Implemented. - (dialog_to_ical_object): We want priv-> - alarm_program_run_program_entry (i.e. the entry inside the - GnomeFileEntry), not the file entry itself. - (dialog_to_ical_object): Only insert the recurrence ending date if - the event is recurrent! - -2000-06-02 Christopher James Lahey - - * gui/Makefile.am: Fixed EXTRA_DIST. - -2000-06-01 Federico Mena Quintero - - * gui/gnome-cal.c (editor_closed_cb): Handler for the - "editor_closed" signal of the event editor; we just destroy it - then. - - * gui/event-editor.c (app_delete_event_cb): Callback used when the - dialog is closed. Release the iCalObject here instead of the - event editor's destroy handler, and emit the new "editor_closed" - signal. - -2000-06-01 Federico Mena Quintero - - * gui/event-editor-dialog.glade: Change of plans. The toplevel - GnomeApp is now generated with Glade instead of being created in - the program code. Otherwise we can't migrate the accelerators to - the new toplevel and they won't work. - - * gui/event-editor.[ch]: EventEditor now derives from GtkObject. - This lets us use the GnomeApp created by libglade and still have - signals and stuff. - - * gui/event-editor.c (create_menu): Tell the UI handler that the - menubar is the GnomeApp's existing one, not to create a new one. - (create_toolbar): Tell the UI handler to use the GnomeApp's - existing toolbar. - (event_editor_focus): New function to raise/focus an event editor. - - * gui/gnome-cal.c (gnome_calendar_edit_object): Use - event_editor_focus(). - -2000-06-01 Ettore Perazzoli - - * gui/calendar-commands.c (calendar_control_activate): Put the - toolbar into a frame to make it look like standard GNOME toolbars. - Also, set `GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL' so that it does not - do evil things when its moved to the left or the right of the - window. - -2000-05-31 Federico Mena Quintero - - * gui/gnome-cal.h (GnomeCalendar): Added a hash table to map - calendar objects to their respective event editors. - - * gui/gnome-cal.c (gnome_calendar_init): Create the - object_editor_hash. - (gnome_calendar_destroy): Free the object_editor_hash. - (gnome_calendar_edit_object): New function to centralize the - launching of event editors; if one already exists for a particular - calendar object, we just raise its window. - (edit): Use gnome_calendar_edit_object(). - - * gui/calendar-commands.c (display_objedit): Use - gnome_calendar_edit_object(). - (display_objedit_today): Likewise. - - * gui/e-day-view.c (e_day_view_on_new_appointment): Likewise. - (e_day_view_on_edit_appointment): Likewise. - - * gui/e-week-view.c (e_week_view_on_new_appointment): Likewise. - (e_week_view_on_edit_appointment): Likewise. - - * gui/event-editor.c (event_editor_new): Do not take in an - iCalObject; rather provide an event_editor_set_ical_object() - function. We need this because a single editor may be switched - between different calendar objects. Also, do not show the event - editor; leave it up to the client code. - (event_editor_construct): Likewise. - (clear_widgets): New function to clear the widgets to default - values. - (fill_widgets): New function to fill in the widgets from the - iCalObject. We don't do this in init_widgets() anymore. - (free_exception_clist_data): New function to free the exceptions - clist data. We were leaking the row data. - (init_widgets): Hook to the destroy signal of the exceptions - clist. - (event_editor_set_ical_object): New function. Now it also makes a - copy of the calendar object for the event editor; clients do not - need to copy it anymore. - (event_editor_destroy): Unref the UI handler as well. - (event_editor_class_init): New "ical_object_released" signal to - notify the parent that we are no longer editing the calendar - object. - (make_title_from_ico): Handle NULL objects. - - * gui/event-editor.h (EventEditor): Removed fields that are no - longer used. - -2000-05-31 Damon Chaplin - - * cal-util/Makefile.am: added test-recur test program. - - * cal-util/test-recur.c: new file to test the recurrence code. - - * cal-util/.cvsignore: added test-recur. - - * cal-util/cal-recur.c: updated. - -2000-05-30 Federico Mena Quintero - - * gui/event-editor.c (event_editor_construct): Create the UI - handler after we have constructed the parent GnomeApp. - (main_menu): Menu template is now in place. - (toolbar): Tollbar template is now in place. - (create_toolbar): Turn off labels in the toolbar since it sucks; - it should support non-homogeneous buttons with horizontal icons - and text. - -2000-05-29 Federico Mena Quintero - - * gui/gnome-cal.c (gnome_calendar_object_changed): Removed the - flags argument, since now we just proxy the calendar object to the - calendar client. - - * gui/event-editor.c (alarm_unit_get): Moved over from - event-editor-utils.c. - - * gui/event-editor-utils.[ch]: Removed files, since the two - functions that were left there (i.e. the ones not present in - e-dialog-widgets) can simply be moved to event-editor.c. - - * gui/Makefile.am (evolution_calendar_SOURCES): Removed - event-editor-utils.[ch] from the list of sources. - -2000-05-27 Federico Mena Quintero - - * gui/event-editor-utils.c: Moved many functions to - e-util/e-dialog-widgets.c. - -2000-05-25 Federico Mena Quintero - - * gui/event-editor-dialog.glade: Put the main notebook directly - under a simple GtkWindow. We are going to pull out the notebook - and slap it into our custom-built GnomeApp, anwyays. - - * gui/event-editor.c: Made the EventEditor derive from GnomeApp. - Added a BonoboUIHandler for its menu and toolbar. - (make_title_from_ico): Create a nice title for the window. - (get_widgets): Fetch the Glade widgets here instead of all over - the place. - (event_editor_new): Temporary hack to show the dialog here, just - so that I can test it. - - * gui/Makefile.am (EXTRA_DIST): Added the Glade messages file. - -2000-05-25 Federico Mena Quintero - - * gui/main.c (init_bonobo): Do not initialize libglade twice. - - * gui/component-factory.c (create_view): Set the folder_uri - property, otherwise the calendar will not get loaded into the - view. - -2000-05-25 Christopher James Lahey - - * gui/main.c: Make it so that warnings don't crash calendar. - -2000-05-25 Ettore Perazzoli - - * gui/evolution-calendar-control.c: Removed. - - * gui/main.c: New. - - * gui/control-factory.c: New. - * gui/control-factory.h: New. - - * gui/calendar-component-factory.c: New. - * gui/calendar-component-factory.c: New. - - * gui/evolution-calendar-control.c (calendar_control_factory): - Renamed from `calendar_factory'. - (calendar_control_factory_init): Renamed from - `calendar_factory_init'. - - * gui/Makefile.am: Link with the files from `$(builddir)/shell'. - - * gui/evolution-calendar.gnorba: New. - * gui/evolution-calendar.oafinfo: New. - -2000-05-24 Federico Mena Quintero - - * gui/print.c (range_selector_new): New function to create the - custom range selector. - (print_dialog): New function to show the print dialog. - (print_calendar): Use the print dialog. - -2000-05-24 Christopher James Lahey - - * gui/Makefile.am: Added libepaned.a. - - * gui/gnome-cal.c: Switched from GtkPaned to EPaned. - -2000-05-22 Federico Mena Quintero - - * gui/calendar-commands.c (calendar_get_events_in_range): Removed - function. - - * gui/mark.c (mark_month_item): Use - cal_client_get_events_in_range(). - - * gui/calendar-commands.c (show_year_view_clicked): Comment out, - since we don't have a year view. - - * gui/gnome-cal.c (setup_widgets): Removed the year view stuff. - (gnome_calendar_get_current_view_name): Likewise. - (gnome_calendar_update_view_times): Likewise. - (gnome_calendar_direction): Likewise. - (gnome_calendar_set_view): Likewise. - (gnome_calendar_update_all): Likewise. - (gnome_calendar_object_updated_cb): Likewise. - (gnome_calendar_object_removed_cb): Likewise. - (gnome_calendar_time_format_changed): Likewise. - (gnome_calendar_get_current_time_range): Likewise. - - * gui/gnome-cal.h (GnomeCalendar): Removed the year view stuff. - - * gui/Makefile.am (evolution_calendar_SOURCES): Added layout.[ch], - print.[ch]. Removed quick-view.[ch], year-view.[ch] since they - are no longer used. Removed all the old Pilot crap. - -2000-05-20 Damon Chaplin - - * cal-util/cal-recur.[hc]: new files to implement iCalendar recurrence - rules. These are only part finished, but people may like to check that - the architecture seems OK. - -2000-05-17 Damon Chaplin - - * gui/e-day-view.c (e_day_view_on_delete_occurrence): - * gui/e-week-view.c (e_week_view_on_delete_occurrence): use a copy of - the iCalObject so we detect the change in the "update_event" callback. - Maybe we should just update the view ourselves and then we wouldn't - need to detect any change in the callback. - - * cal-util/calobj.c (ical_object_reset_recurrence): new function to - get rid of any recurrence rules. Used when we 'unrecur' an event. - - * gui/e-day-view.c (e_day_view_key_press): don't add a new event if it - won't fit, or we end up adding a new event for each key press. - (e_day_view_update_event_label): don't update it if it doesn't have - an EText item (i.e. it isn't visible). - - * gui/e-day-view-time-item.c: allow selection of times using this - column. - -2000-05-19 Federico Mena Quintero - - * cal-util/timeutil.c (time_add_minutes): Fixed warning message. - (time_add_day): Likewise. - (time_add_month): Likewise. - (time_add_year): Likewise. - (time_from_day): Of all functions, *this* one had to have a bug. - Set the tm.tm_isdst to -1 to specify that we don't know whether - the time is in DST or not. This fixes *many* bugs upstream. - (time_week_begin): Likewise. We never noticed this since the week - functions are never used. - (time_week_end): Likewise. - -2000-05-17 Seth Alves - - * gui/event-editor.c: hooked up more widget signals to callbacks - to the gladified dialog acts more like the original one. - -2000-05-16 Seth Alves - - * gui/event-editor.c (recurrence_toggled): hook the radio buttons - to the pages of the notebook. - (append_exception): - (recurrence_exception_added): - (recurrence_exception_deleted): - (recurrence_exception_changed): code to deal with the recurrence - exception list. - -2000-05-15 Seth Alves - - * gui/event-editor.[ch]: gladeified replacement for eventedit.c - - * gui/event-editor-utils.[ch]: utilities used by event-editor.c - - * gui/event-editor-dialog.glade: glade file used by event-editor.c - -2000-05-14 Federico Mena Quintero - - * gui/gnome-cal.c (display_notification): Use the alarm - notification dialog. - (display_notification_cb): New callback for the result of the - alarm notification dialog. - - * gui/dialogs/alarm-notify.glade: New file with the alarm - notification dialog. - - * gui/dialogs/alarm-notify-dialog.[ch]: New file. - - * gui/dialogs/Makefile.am: New file. - - * gui/Makefile.am (SUBDIRS): Added the dialogs directory. - -2000-05-13 Federico Mena Quintero - - * gui/gnome-cal.c (trigger_alarm_cb): Better error checking, and - plug leaks of str_ico and ico. - - * gui/evolution-calendar-control.c (main): Initialize libglade. - -2000-05-13 Ettore Perazzoli - - * pcs/Makefile.am (INCLUDES): Add - `-I$(top_builddir)/libical/src/libical'. - -2000-05-12 Federico Mena Quintero - - * cal-util/calobj.c (generate): Use a (dtend - dtstart) offset to - compute the ending time of the occurrence. This takes care of - recurring events that span multiple days. Also, removed the DST - condition since it did not look right at all: if you have a daily - appointment at 18:00, it still should happen at 18:00 even during - daylight savings. - - * gui/gnome-cal.c (gnome_calendar_tag_calendar): Use the timeutil - functions instead of calculating the month's times by hand. Use - cal_obj_instance_list_free() instead of freeing the list by hand. - Clip the range we pass to mark_gtk_calendar_day(). - (mark_gtk_calendar_day): Fixed off-by-one error at the end of the - month by adding real day offsets. - -2000-05-11 Federico Mena Quintero - - * gui/gnome-cal.c (add_alarms_for_object): New function to add - today's alarms for a single object. - (gnome_calendar_object_updated_cb): Update the object's alarms. - - * idl/evolution-calendar.idl (Cal): Added a - get_alarms_for_object() method. - - * pcs/cal.c (Cal_get_alarms_for_object): Implemented method. - - * pcs/cal-backend.c (cal_backend_get_alarms_for_object): New - function. - - * pcs/cal-backend-imc.c (cal_backend_imc_get_alarms_for_object): - Implemented. - - * cal-client/cal-client.c (cal_client_get_alarms_for_object): New - function. - -2000-05-11 Dan Winship - - * gui/calendar-commands.c (calendar_control_activate): Now that we - depend on current gnome-libs we can make the toolbar detachable - again. - - * pcs/icalendar-save.c (timet_to_icaltime): remove unused timezone - variable to make this compile on BSD systems (where timezone is - the name of a function) - -2000-05-11 Federico Mena Quintero - - * gui/gnome-cal.c (gnome_calendar_update_all): Removed unused - arguments. Load the initial alarms here. - (load_alarms): New function to load a day's worth of alarms. - (gnome_calendar_class_init): Eeeek! This was taking in an - incorrect argument type. - (gnome_calendar_init): Now the calendar keeps a hash table of - UIDs->queued alarms. Create the hash table here. - (gnome_calendar_destroy): Destroy the alarms hash table. - (gnome_calendar_object_updated_cb): Remove the alarms for the - object and regenerate them. - (gnome_calendar_object_removed_cb): Remove the alarms for the - object. - - * gui/alarm.c (alarm_add): Do not take in a CalendarAlarm, just - the trigger time, the callback and the closure data. Return an - opaque identifier for the alarm so that it can be removed by the - client code if needed. Use the queue_alarm() helper function. - (queue_alarm): Helper function to actually queue the alarm and set - up the itimer. Deal with a nonzero return value from - setitimer(). - (alarm_remove): New function to remove an alarm based on its ID. - (pop_alarm): New helper function; pops the first alarm of the - queue and resets the timer as appropriate. - (alarm_ready): Simplified a lot by using pop_alarm(). - - * idl/evolution-calendar.idl (Cal): Added get_alarms_in_range(). - - * pcs/cal.c (build_instance_seq): New function to build a CORBA - sequence from the internal list of instances. - (Cal_get_events_in_range): Use build_instance_seq(). - (Cal_get_alarms_in_range): Implemented new method. - - * pcs/cal-backend.c (cal_backend_get_alarms_in_range): New - function with the get_alarms_in_range() engine. - - * pcs/cal-backend-imc.c (cal_backend_imc_get_alarms_in_range): - Implemented the get_alarms_in_range() method. - - * cal-client/cal-client.c (cal_client_get_alarms_in_range): New - client-side function for getting the alarms. - (build_instance_list): New helper function to build the - CalObjInstance list from the CORBA sequence. - (cal_client_get_events_in_range): Use build_instance_list(). - - * gui/calendar-commands.h: #include . #include - "gnome-cal.h". - - * gui/e-week-view.c: #include "calendar-commands.h" instead of - main.h; the latter is an obsolete file and will be killed. - - * gui/evolution-calendar-control.c (main): Call init_bonobo() - before anything else. We need the GTK+ object system initialized. - - * gui/Makefile.am (evolution_calendar_SOURCES): Do not use main.h. - - * cal-util/cal-util.c (cal_alarm_instance_list_free): New function. - -2000-05-10 Matt Loper - - * gui/calendar-commands.c (calendar_control_activate): Move - "about" menuitem to the help menu. - -2000-05-10 Christopher James Lahey - - * gui/Makefile.am: Added main.h. Combined the two EXTRA_DIST - sections. - -2000-05-09 Christopher James Lahey - - * pcs/cal-backend-imc.c: Set the format when creating a new - calendar. - -2000-05-09 Christopher James Lahey - - * pcs/cal-factory.c: Removed double free of method_string in - uri->method_string. - -2000-05-08 Ettore Perazzoli - - * pcs/cal.h: Include "calendar/pcs/evolution-calendar.h" instead - of "evolution-calendar.h". - - * pcs/cal-backend.h: Include "calendar/pcs/evolution-calendar.h" - instead of "evolution-calendar.h". - -2000-05-08 Seth Alves - - * gui/e-day-view.c (e_day_view_on_delete_appointment): call - e_day_view_stop_editing_event here to avoid a divide by zero - a bit further on. i'm not sure if this is the best fix for this. - -2000-05-08 Federico Mena Quintero - - * pcs/cal-backend.h (CalBackendClass): CalBackendClass now is just - an interface for calendar backends; this is an abstract class. - Put in the vtable for the backend methods. - - * pcs/cal-backend.c (cal_backend_new): Removed function, since - CalBackend is not just an abstract class. - Removed implementation-specific functions and made public - functions call the virtual methods instead. - - * pcs/cal-backend-imc.[ch]: New files with the CalBackendIMC - implementation; this implements a backend for iCalendar and - vCalendar files. Moved the implementation-specific stuff from - cal-backend.[ch] to here. - - * pcs/cal-backend-imc.c (CalendarFormat): Moved enumeration to - here. Added a CAL_UNKNOWN value for when the backend is not - loaded yet. - (cal_backend_imc_init): Initialize priv->format as CAL_UNKNOWN. - (save_to_vcal): Use the same VCProdIdProp value as in - cal-util/calobj.c. Use "1.0" as the VCVersionProp as per the - vCalendar spec. - (ensure_uid): Return nothing, since the result value need not be - used anymore. - (add_object): Since we mark the calendar as dirty anyways, we do - not need to check the result value of ensure_uid() anymore. - (remove_object): Asssert that we know how to handle the object's - type. We do this in add_object() anyways. - - * pcs/Makefile.am (libpcs_a_SOURCES): Added cal-backend-imc.[ch]. - - * gui/gnome-cal.c: Replaced debugging printf()s with g_message() - so that we can see the line number where they occur. - - * gui/gnome-cal.c (gnome_calendar_load_cb): Sort of handle the - LOAD_METHOD_NOT_SUPPORTED result code, and added a default for the - switch. - - * cal-client/cal-listener.h (CalListenerLoadStatus): Removed - enumeration; it is stupid to translate all values for the - CalClient when it is going to translate them again. - (CalListenerClass::cal_loaded): This signal now passes the - LoadStatus directly from the CORBA side. - - * cal-client/cal-listener.c (Listener_cal_loaded): Do not - translate the status value. - - * cal-client/cal-client.h (CalClientLoadStatus): Added the - CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED error code. - - * cal-client/cal-client.c (cal_loaded_cb): Translate the CORBA - version of the LoadStatus result code. - - * pcs/cal-factory.c (CalFactoryPrivate): New methods field for the - hash table from method strings to the GtkTypes for backend class - types. - (cal_factory_init): Create the priv->methods hash table. - (cal_factory_destroy): Free the priv->methods hash table. - (cal_factory_register_method): New function to register a backend - class for a particular URI method. - (launch_backend_for_uri): New function to launch a backend for a - particular URI's method. - (load_backend): Use launch_backend_for_uri(). Move the error - notification code from load_fn() to here. - (create_backend): Use launch_backend_for_uri(). Move the error - notification code form create_fn() to here; it is #ifdefed out - since currently cal_backend_create() does not have any error - reporting capabilities. - - * idl/evolution-calendar.idl (Listener::LoadStatus): Added a - PROTOCOL_NOT_SUPPORTED error code. - - * pcs/cal-factory.c (cal_factory_load cal_factory_create): Removed - functions, since they were supposed to be internal only. - (CalFactory_load): Call queue_load_create_job() directly. - (CalFactory_create): Likewise. - -2000-05-08 Damon Chaplin - - * gui/e-week-view.c (e_week_view_remove_event_cb): - * gui/e-day-view.c (e_day_view_remove_event_cb): don't set the ico->uid - to NULL or we won't find any other occurrences of the event. Set the - editing_event_day/num to -1 instead. - - * gui/e-week-view-event-item.c (e_week_view_event_item_draw): fixed the - positioning of the icons for long events. - - * cal-util/calobj.c (ical_object_normalize_summary): forgot to - terminate the string. - -2000-05-07 Damon Chaplin - - * gui/e-day-view.c (e_day_view_on_main_canvas_drag_data_received): - (e_day_view_on_top_canvas_drag_data_received): show the EText item, - just in case it hasn't moved, otherwise it won't appear. - - * gui/e-day-view.h (E_DAY_VIEW_BAR_WIDTH): increased from 6 to 8 to - make it easier to drag an event. Also increased E_DAY_VIEW_GAP_WIDTH - since it must be >= the BAR_WIDTH. - -2000-05-07 Matt Loper - - * gui/evolution-calendar-control.c (PROPERTY_CALENDAR_URI): - Changed to "folder_uri" from "calendar_uri". - (set_prop): The uri given to us is a directory, so we append a - filename onto the end before we use it. - -2000-05-06 Damon Chaplin - - * cal-util/timeutil.c (time_day_begin): - (time_day_end): changed these so they just do a simple localtime(), - update the struct tm, then do a mktime(). I don't know why it used to - look at the tm_isdst flags etc. From a little test program I wrote - which steps through testing every hour for a year it wasn't working - correctly, and the new code does. - (time_add_day): also got rid of the stuff that looked at tm_isdst here. - My test program now works better. - -2000-05-06 Chris Toshok - * gui/.cvsignore: ignore evolution-calendar.pure - - * gui/Makefile.am: add support for building evolution-calendar.pure - -2000-05-06 Damon Chaplin - - * gui/e-day-view.c: - * gui/e-week-view.c: finish editing event when user hits Return key. - (e_week_view_on_text_item_event): stop event signals after doing any - other calls, since otherwise it will also stop any other resulting - event signals. - - * gui/e-week-view-event-item.c (e_week_view_event_item_draw): don't - draw the start/end times while editing. - - * gui/eventedit.c: changed the Summary field to a GtkEntry, since we - now only want a single line of text. - - * cal-util/calobj.c (ical_object_normalize_summary): new function to - convert the summary field to a single line of text, by converting any - sequence of CR & LF characters to a single space. - (ical_object_create_from_vobject): call the above function. I think - all functions that load iCalObjects go through this. - (ical_new): called it here as well just in case. - -2000-05-06 Damon Chaplin - - * gui/week-view.[hc]: removed. - -2000-05-06 Damon Chaplin - - * gui/gncal-day-panel.[hc]: - * gui/gncal-day-view.[hc]: - * gui/gncal-full-day.[hc]: - * gui/gncal-week-view.[hc]: - * gui/layout.[hc]: - * gui/view-utils.[hc]: removed old calendar view files. - -2000-05-06 Damon Chaplin - - * cal-util/calobj.[hc]: added guint ref_count to iCalObject struct, - and ical_object_ref/unref() functions. I've updated all the gui/ - stuff to use ref_counts but I haven't touched the pcs/ stuff. Maybe - just using ical_object_destroy() is OK there. - - * gui/gncal-todo.c: - * gui/calendar-commands.c: - * gui/eventedit.c: - * gui/e-week-view.c: - * gui/e-day-view.c: use refcounting for iCalObjects. - - * gui/e-day-view-main-item.c: - * gui/e-day-view-top-item.c: - * gui/e-day-view.c: try not to ever draw outside the event, even when - the event is very small. - -2000-05-05 Damon Chaplin - - * gui/e-day-view.c: don't allow recurring events to be resized or - dragged, and don't show the resize/drag cursors. Actually it may be - better to let the user do the resize/drag and then ask them what they - want to do - change the single occurrence or the entire series. - - * gui/e-day-view-time-item.c (e_day_view_time_item_show_popup_menu): - use e_auto_kill_popup_menu_on_hide() to destroy the popup menu. - - * gui/popup-menu.c: include e-gui-utils.h - -2000-05-04 Damon Chaplin - - * gui/e-day-view.c (e_day_view_foreach_event_with_uid): for the long - events pass E_DAY_VIEW_LONG_EVENT as the day. Fixes SEGV. - - * gui/calendar-commands.c: when we switch views, grab the focus. - - * gui/gnome-cal.c (gnome_calendar_tag_calendar): - (gnome_calendar_mark_gtk_calendar_day): changed this so it uses - cal_client_get_events_in_range(), and doesn't load any objects. - Also just return if it isn't visible. - - * gui/calendar-commands.c (calendar_get_events_in_range): call - g_list_sort() to sort the list rather than g_list_insert_sorted() for - each element. It is much more efficient. - Also changed it so that the co->ev_start/end fields are copied from - the CalObjInstance rather than the parameters to the function - (that is right, isn't it?) - Also freed the list elements, and finally the list. - (calendar_iterate): changed this to use cal_client_get_events_in_range - since that is more efficient than getting all the uids and then loading - and parsing all the events. - - * pcs/cal-backend.c (save): output the '... saved' message before - freeing the string! - - * gui/gncal-todo.c (gncal_todo_update): - * gui/e-week-view.c (e_week_view_update_event): - * gui/e-day-view.c (e_day_view_update_event): - * gui/calendar-commands.c (calendar_get_events_in_range): - (calendar_iterate): free obj_string after it is parsed. - -2000-05-02 Damon Chaplin - - * gui/calendar-commands.c (calendar_control_activate): set the active - radio button here. Oops - it wasn't a Bonobo problem after all. - - * gui/popup-menu.c (popup_menu): added call to - e_auto_kill_popup_menu_on_hide() to destroy the menu. - - * gui/e-week-view.c (e_week_view_show_popup_menu): - * gui/e-day-view.c (e_day_view_on_event_right_click): ico->user_data - isn't useful any more, since the event editor keeps its own iCalObject. - So for now we make the menu commands available even when the event is - being edited in the event editor. - Also corrected misspellings of 'occurance' -> 'occurrence'. - - * gui/eventedit.c (event_editor_destroy): destroy the iCalObject. - The event editor now uses its own independent iCalObject. - - * gui/e-week-view.c (e_week_view_on_unrecur_appointment): - * gui/e-day-view.c (e_day_view_on_unrecur_appointment): create a new - uid for the new single instance. I'm not sure what we should do about - the creation/last modification times of the objects. - - * gui/e-week-view.c (e_week_view_on_edit_appointment): - * gui/e-day-view.c (e_day_view_on_edit_appointment): duplicate the - iCalObject before passing it to the event editor, since it will change - the fields. If we don't duplicate it we won't know what has changed - when we get the "update_event" callback. - - * gui/e-week-view.c (e_week_view_key_press): - * gui/e-day-view.c (e_day_view_key_press): set the created and last_mod - times of the new iCalObject. We may want to set the default alarm as - well. - - * cal-util/calobj.c (ical_gen_uid): made this function public so we - can generate new uids if necessary. - -2000-05-01 Damon Chaplin - - * gui/gnome-cal.[hc] (gnome_calendar_get_current_time_range): new - function to get the currently seleted time range form the current view. - - * gui/calendar-commands.c (display_objedit): use the above function - to get the time for the new appointment. - - * gui/e-week-view.c: - * gui/e-day-view.c: use a shallow copy of the ico when we update the - times (when resizing/dragging). Otherwise we won't detect that the - time has changed in the "update_event" callback. - - Also added functions to get the currently selected time range. - -2000-04-30 Seth Alves - - * pcs/icalendar-save.c (icalcomponent_create_from_ical_object): set - attendee and contact address correctly. - - * pcs/cal-backend.c (icalendar_calendar_load): init priv->object_hash - when loading. - (cal_get_type_from_filename): if file extension is .ical, consider - the file an ical file. - -2000-05-01 Damon Chaplin - - * cal-util/calobj.c (ical_object_compare_dates): new function to see - if the event dates have changed (including any recurrence rules). - It is used for optimization when we get the "object_changed" signal. - We have to do far less work if the dates are unchanged. - - * gui/e-week-view.c: - * gui/e-day-view.c: only draw the selection when we have the keyboard - focus, since the user expects to be able to type in a new event when - the selection is shown. Also keep the selection when we lose focus, - but just don't show it. - - Also quite a few changes to cope with the new client/server - architecture. - - * gui/e-day-view-top-item.c (e_day_view_top_item_draw): - * gui/e-day-view-main-item.c (e_day_view_main_item_draw): - * gui/e-week-view-main-item.c (e_week_view_main_item_draw_day): - only draw the selection if the widget has the keyboard focus. - - * gui/gnome-cal.c (mark_gtk_calendar_day): fixed so it works with - events longer than one day. And changed the code for updating events - in the new views. - -2000-04-27 Ettore Perazzoli - - * gui/evolution-calendar-control.c - (init_bonobo): OAFized. - - * gui/main.c (main): Initialize with OAF if `USING_OAF'. - - * gui/evolution-calendar-control.c: New #define - `CONTROL_FACTORY_ID', varying according to whether we are - `USING_OAF'. - (calendar_factory_init): Use `CONTROL_FACTORY_ID'. - - * gui/Makefile.am: Updated for OAF. - - * pcs/cal-factory.h: Explicitly #include - "calendar/pcs/evolution-calendar.h" instead of just - "evolution-calendar.h". - - * cal-client/cal-client.c (cal_client_construct) [USING_OAF]: Use - OAF. - - * cal-client/client-test.c (init_corba): New function, implemented - differently depending on `USING_OAF'. - -2000-04-27 - - * pcs/cal-backend.c (cal_backend_load): fix memory leak - (save_to_vcal): same - (save): same - (cal_backend_load): same - -2000-04-26 Christopher James Lahey - - * cal-util/.cvsignore: Replaced libcal-util.la with *.la - - * pcs/.cvsignore: Added *.la and *.lo. - -2000-04-25 Federico Mena Quintero - - * pcs/cal-factory.c (backend_last_client_gone_cb): Renamed from - backend_destroy_cb. Now we use it for the "last_client_gone" - signal from the backend. Also, unref the backend to destroy it. - (add_backend): Connect to the "last_client_gone" signal of the - backend. - (cal_factory_get_n_backends): New function to query the number of - running backends. - - * pcs/cal-backend.c (cal_backend_class_init): Register the new - "last_client_gone" signal. It is emitted when the last Cal client - goes away. It is used to notify the factory when a backend may be - safely destroyed. - (cal_destroy_cb): Emit the "last_client_gone" signal when the last - client disconnects from the backend. - -2000-04-25 Seth Alves - - * gui/e-day-view.c (e_day_view_find_event_from_ico): compare - iCalObjects by their UIDs instead of by their pointers. - - * pcs/cal-backend.c (cal_backend_destroy): don't save on destroy. - -2000-04-25 Ettore Perazzoli - - * cal-client/Makefile.am: Add `$(datadir)/idl'. - - * pcs/Makefile.am (idl_flags): Add `$(datadir)/idl'. - (INCLUDES): Use `$(BONOBO_GNOME_CFLAGS)'. - -2000-04-25 Seth Alves - - * gui/gnome-cal.c (gnome_calendar_destroy): hook for widget - destroy -- used to unref the CalClient so wombat knows we are gone. - (gnome_calendar_class_init): added a class init for this widget. - - * gui/e-day-view.c (e_day_view_update_event): allow for null ico - - * gui/e-week-view.c (e_week_view_update_event): allow for null ico - -2000-04-24 Federico Mena Quintero - - * cal-client/client-test.c (main): The path to the test calendar - changed when we moved stuff around. Users will have to tweak this - for their CVS setup, anyways. - (create_client): Create or load the calendar as appropriate. - (client_destroy_cb): Exit the main loop if both clients are gone. - (main): Connect to the "destroy" signal of the clients so that we - can terminate the test program. - -2000-04-24 Seth Alves - - * pcs/icalendar.c (parse_person): allow for null CN - (parse_person): allow for null sent_by - - * pcs/Makefile.am: build icalendar-test - - * pcs/icalendar-test.c: a test which loads an ical file and - converts it to our internal format, and then saves it back out. - -2000-04-24 Damon Chaplin - - * gui/Makefile.am: added new source files and pixmaps, and removed - old source files, which can be deleted. - - * gui/e-week-view-titles-item.[hc]: - * gui/e-week-view-main-item.[hc]: - * gui/e-week-view-event-item.[hc]: - * gui/e-week-view.[hc]: new files implementing the week/month views. - - * gui/yearview.xpm: - * gui/monthview.xpm: - * gui/weekview.xpm: - * gui/workweekview.xpm: - * gui/dayview.xpm: new pixmaps for the toolbar buttons. These aren't - intended to be the final pixmaps. - - * gui/calendar-commands.c: added radio buttons to the toolbar to - switch between the calendar views, and moved the am_pm_flag here so we - can get rid of view-utils.c. - - * gui/gnome-cal.[hc]: made it a subclass of GtkVBox, rearranged the - widgets into 2 notebooks, and added the selection_start_time and - selection_end_time fields. - - * gui/goto.c: updated to use new selection time range. - - * gui/quick-view.c: added '#include ' so it compiles. - - * gui/e-day-view.[hc]: changed the interface to support the new - selection time range, got rid of a few debugging messages and changed - a few bits. - -2000-04-21 Seth Alves - - * pcs/icalendar-save.c: start on code to do the opposite of - icalendar.c (convert from iCalObjects to libical's icalcomponents). - - * gui/calendar-commands.c (calendar_control_activate): moved - "About Calendar" into the View menu so it shows up. - -2000-04-20 Seth Alves - - * gui/gnome-cal.c (gnome_calendar_changed_cb): new function: callback - for listener's object updated signal. - (gnome_calendar_object_removed_cb): new function: callback for - listener's object removed signal. - (gnome_calendar_new): hook up listener's "obj_updated" and - "obj_removed" signals so if evolution is running twice, - they will both see changes right away. - (gnome_calendar_object_changed): don't call update_all, since - it will be called by the listener. - (gnome_calendar_remove_object): don't call update_all - (gnome_calendar_add_object): don't call update_all - - * gui/gncal-full-day.c (child_realize): create fullday's gcs - even if pixmap_bell has already been created. this was - causing crashes if the calendar was run twice. - -2000-04-19 Seth Alves - - * gui/eventedit.c (ee_rp_init_rule): changed the order around - a bit to avoid a Gtk-CRITICAL crash - - * gui/gncal-todo.c (gncal_todo_update): fixed code to populate - the todo clist - - * cal-client/cal-client.c (cal_client_get_uids): don't check - type against CALOBJ_TYPE_ANY since it will always match. - (cal_client_get_uids): same (re: CALOBJ_TYPE_ANY) - - * pcs/cal-backend.c (build_uids_list): same (re: CALOBJ_TYPE_ANY) - - * pcs/cal.c (Cal_get_uids): same (re: CALOBJ_TYPE_ANY) - - * pcs/cal-backend.c (remove_object): don't call save from here - because in all cases the caller of remove_object calls save - - * gui/calendar-commands.c (calendar_set_uri): calls gnome_calendar_open - instead of checking on disk and calling load or create. - - * gui/gnome-cal.c (gnome_calendar_object_changed): fixed to use - cal_client_update_object -- editing and dragging events works again - (gnome_calendar_open): collapsed gnome_calendar_load and - gnome_calendar_create into this function. added new type - GnomeCalendarOpenMode which has the value CALENDAR_OPEN or - CALENDAR_OPEN_OR_CREATE. - - * gui/evolution-calendar-control.c (calendar_properties_init): create - a property bag for this control - (set_prop): callback for property sets - (get_prop): callback for proprety gets - - * gui/calendar-commands.c (calendar_set_uri): new function, - called when the "calendar_uri" property is set on the calendar- - control's property bag. - -2000-04-18 Federico Mena Quintero - - * cal-util/Makefile.am (INCLUDES): Fix include path. - -2000-04-16 Federico Mena Quintero - - * pcs/cal-factory.h (CalFactoryClass): We have a new - "last_calendar_gone" signal that Wombat can use to terminate - itself properly. - - * pcs/cal-factory.c (cal_factory_class_init): Register the - "last_calendar_gone" signal. - (backend_destroy_cb): Emit the "last_calendar_gone" signal instead - of killing the factory. - - * pcs/Makefile.am: Added $(CORBA_GENERATED) to BUILT_SOURCES. - (INCLUDES): Make the log domain be "wombat-pcs". - -2000-04-17 Seth Alves - - * pcs/cal-backend.c (add_object): removed implicit save, since - we don't want to save as we load from disk. - (cal_backend_update_object): added a call to save, since it - isn't done by add_object now. - -2000-04-16 Federico Mena Quintero - - * cal-util/Makefile.am: Renamed library from libcalutil to - libcal-util, to be consistent with libcal-client. Install header - files in $(includedir)/evolution/cal-util. - (INCLUDES): Add "cal-util" log domain for glib. - (libcal_clientincludedir): The header files are now installed in - $(includedir)/evolution/cal-client. - - * cal-util/cal-util.h: Fix includes. - - * cal-client/client-test.c: Fix includes. - - * pcs/Makefile.am: Create libpcs.a, not a shared library, because - it is for internal use by Wombat only. The header files should - not be installed, either. Removed all the old Tlacuache stuff. - - * gui/Makefile.am (EXTRA_DIST): We no longer distribute - gncal.desktop. - (evolution_calendar_INCLUDES): Add "calendar-gui" for the glib log - domain. - - * gui/*.[ch]: Fix cal-util and cal-client includes. - - * pcs/Makefile.am (INCLUDES): Added "pcs" log domain for glib. - - * pcs/*.[ch]: Fix cal-util includes. - -2000-04-11 Chris Toshok - - * pcs/icalendar.c (icaltime_to_timet): use HAVE_TIMEZONE to switch - between linux's timezone variable and *bsd's method of getting the - gmt offset. - -2000-04-10 Seth Alves - - * pcs/cal-backend.c (save_to_vcal): create and save an actual - vcalendar instead of a list of vcal objects. - -2000-04-10 Damon Chaplin - - * gui/Makefile.am (INCLUDES): moved srcdir directories to the top so - we search headers in the evolution tree before installed headers. - (Otherwise when you do 'make install' lots of files in gui/ get - rebuilt, since they depend on the installed cal-client.h which has just - been updated.) - -2000-04-09 Seth Alves - - * gui/gnome-cal.c (gnome_calendar_load): catch cal_loaded signal - on the cal client. - (gnome_calendar_load_cb): callback for cal_loaded signal. moved - gnome_calendar_update_all from gnome_calendar_load to here. - - * gui/calendar-commands.c: minor cleanups - - * pcs/cal-backend.c (save_to_vcal): copied code from gnome-pim - to write vcal to a file - (save): filled it with more gnome-pim code - (add_object): call save () after changing - (remove_object): same - (cal_backend_create): same - (cal_backend_remove_object): same - -2000-04-08 Christopher James Lahey - - * gui/Makefile.am: Removed linking with libetable and libeminicard - since they weren't being used. - -2000-04-08 Seth Alves - - * gui/gnome-cal.c (gnome_calendar_create): new function: - friendly wrapper for cal_client_create_calendar - - * gui/calendar-commands.c (new_calendar): call gnome_calendar_create - if no filename is provided - - * gui/prop.c (properties): calendar is a frame - - * gui/calendar-commands.c (calendar_control_activate): sort out the - menus a bit, more of them show up now. - - * gui/Makefile.am: don't build library or test, just the bonobo control - - * gui/gncal-todo.c (simple_todo_editor): calendar is a frame instead - of a window, now. - - * gui/gnome-cal.c (gnome_calendar_new): same - - * gui/goto.c (goto_dialog): same - -2000-04-06 Seth Alves - - * gui/calendar-commands.c (calendar_control_activate): removed - uih from the argument list, added cal. use cal as user_data - in callbacks rather than the control. - (calendar_control_deactivate): removed uih from argument list - -2000-04-05 Seth Alves - - * gui/calendar-commands.c (setup_menu): removed - (setup_appbar): removed - (calendar_control_activate): new function -- does the work - that setup_appbar and setup_menu used to do. - (calendar_control_deactivate): undoes what calendar_control_activate - does by removing the toolbar items and menu items. - - * gui/Makefile.am: build test-calendar-widget and evolution-calendar, - common stuff is in a library - - * gui/gnome-cal.c (gnome_calendar_get_type): made the calendar widget - based on a gtk_frame rather than a gnome_app - - * gui/calendar-commands.c: split out some of main.c - - * gui/evolution-calendar-control.c: bonobo bung so evolution - can use the calendar widget - -2000-04-01 Matt Loper - - * pcs/.cvsignore: Added *.lo. - -2000-03-30 Seth Alves - - * gui/main.c (calendar_get_events_in_range): - cal_client_get_events_in_range returns a list of CalObjInstance *, not - a list of (char *) uid. - - * Makefile.am (SUBDIRS): readded the gui directory - - * gui/main.c: temporarily added alarm_defaults back in, - since the calendar doesn't link without it - -2000-03-29 Matt Loper - - * Makefile.am: remove the gui directory, which doesn't compile. - -2000-03-28 Matt Loper - - * pcs/Makefile.am: create a libpcs.la library, for use in the - wombat. - -2000-03-28 Seth Alves - - * gui/Makefile.am (LINK_FLAGS): added libeutil.la and libetext.a - - * gui/main.c (calendar_iterate): switch from string_to_ical_object to - ical_object_find_in_string - (calendar_get_events_in_range): same - (session_save_state): commented out references - to gcal->client->filename - -2000-03-27 Federico Mena Quintero - - * pcs/cal-backend.c (cal_backend_get_object): Use - ical_object_to_string(). - - * cal-util/calobj.c (ical_object_to_string): Moved over from - pcs/cal-backend.c (was string_from_ical_object). - (get_calendar_base_vobject): Likewise, moved over from - pcs/cal-backend.c. - - * cal-util/cal-util.c: Removed string_to_ical_object(); the - correct function is in calobj.[ch], called - ical_object_find_in_string(). Removed ical_object_to_string, - since we now implement it in calobj.c. - - * cal-util/calobj.c: Removed ical_object_new_from_string(); see - above. - - * idl/evolution-calendar.idl (CalObjInstance): Calendar object - instances now contain only the UID for the object, not the whole - string representation of the object. This allows clients to - implement caching of objects if they wish. - - * pcs/cal.c (Cal_get_events_in_range): Likewise. - - * pcs/cal-backend.c (build_event_list): Likewise. - - * cal-client/cal-client.c (cal_client_get_events_in_range): - Likewise. - - * cal-util/cal-util.h (CalObjInstance): Likewise. - - * cal-util/cal-util.c (cal_obj_instance_list_free): Likewise. - (cal_obj_uid_list_free): Assert that the UIDs in the list are not - NULL. - - * pcs/tlacuache.gnorba (repo_id): The calendar factory also - supports the Unknown interface. - -2000-03-17 Federico Mena Quintero - - * gui/e-day-view.c: Fix includes. - (e_day_view_on_delete_occurance): Do not call save_default_calendar(). - (e_day_view_on_delete_appointment): Likewise. - (e_day_view_on_unrecur_appointment): Likewise. - (e_day_view_finish_long_event_resize): Likewise. - (e_day_view_finish_resize): Likewise. - (e_day_view_key_press): Likewise. - (e_day_view_on_editing_stopped): Likewise. - (e_day_view_on_top_canvas_drag_data_received): Likewise. - (e_day_view_on_main_canvas_drag_data_received): Likewise. - -2000-03-13 Damon Chaplin - - * gui/e-day-view*.[hc]: new files for the Day/Work-Week views. - -2000-03-12 Federico Mena Quintero - - * gui/main.c (gnome_calendar_locate): Removed function now that it - is no CORBA server in the GUI. - (save_default_calendar): Removed function. Now the personal - calendar server will take care of saving modified calendars when - appropriate. - (close_cmd): Do not call unregister_calendar_services(). - - * gui/eventedit.c (ee_ok): Do not save the calendar. - - * gui/gncal-day-panel.c (day_view_range_activated): Likewise. - - * gui/gncal-todo.c (ok_button): Likewise. - (delete_todo): Likewise. - - * gui/gncal-full-day.c (delete_occurance): Likewise. - (delete_appointment): Likewise. - (unrecur_appointment): Likewise. - (child_focus_out): Likewise. - (update_from_drag_info): Likewise. - - * gui/gnome-cal.c (gnome_calendar_new): Removed obsolete call to - create the CORBA server. - - * gui/gnome-cal.h (GnomeCalendar): Renamed `calc' field to - `client'. - - * cal-client/cal-client.h (CalClient): Removed filename and - corba_server fields. - -2000-03-10 Federico Mena Quintero - - * gui/main.c (main): Do not pass the INIT_SERVER flag to - gnome_CORBA_init_with_popt_table(). Check for exceptions - properly. - (main): Initialize Bonobo. - (main): Call process_dates() to parse the dates from the command - line before we dump the events or the TODOs. - (main): Use bonobo_main() instead of gtk_main(). - - * cal-util/calobj.c (ical_new): Initialize the alarm types here. - Do not call default_alarm() anymore, since that is a GUI issue. - (default_alarm): Removed function. - (alarm_defaults): Removed defaults data. - - * pcs/tlacuache.c (calendar_notify): Removed stubs for - alarm_defaults, calendar_notify(), debug_alarms. - -2000-03-09 Federico Mena Quintero - - * gui/Makefile.am: Removed the corba-cal stuff. Commented out the - Pilot conduit stuff for now. - - * gui/calendar.c: Random #ifdefs to make it build, although this - file is going away. - - * gui/Makefile.am: Removed referenes to calobj.[ch] and timeutil.[ch]. - - * gui/calendar-conduit.c: Fixup includes. - - * gui/calendar-conduit.h: Fixup includes. - -2000-03-09 Seth Alves - - * gui/gnome-cal.h: replaced "Calendar *cal" with "CalClient *calc" - in the GnomeCalendar struct. - - * gui/*.c: tracked change from Calendar * to CalClient - - * gui/main.c: moved alarm_defaults from here to cal-util/calobj.c - (calendar_get_events_in_range): pulled this out of calendar.c and - fixed it up to use cal-client stuff. i'm not sure where to put it yet. - - * gui/main.c (calendar_iterate): pulled this one out of calendar.c also - -2000-03-07 Federico Mena Quintero - - * cal-client/Makefile.am: Removed cal-client-alarm.[ch] from the - list of sources. This was a miscommunication on our part. - -2000-03-05 Seth Alves - - * cal-client/cal-client-alarm.c: stubs for client side - access to alarm structures. this will probably change, - since i don't know what i'm doing. - - * cal-util/alarm-enums.h: enums for alarms needed by - both the client and the server - - * remaining source files in calendar/... have been moved - to calendar/gui. - - * gui/alarm.c: start to decouple the view from the model - in the alarm editing code - -2000-03-03 Seth Alves - - * cal-util/Makefile.am: new file -- things shared between - the client and server go in this directory - - * calobj.c calobj.h icalendar.c icalendar.h - timeutil.c timeutil.h cal-util.c cal-util.h where moved - backend stuff went into pcs. shared stuff went into - cal-util. - -2000-03-02 Federico Mena Quintero - - At this point the calendar client and personal calendar server - files were moved to the idl/, cal-client/, and pcs/ directories. - - * idl/Makefile.am: New file. - - * cal-client/Makefile.am: New file. Moved the libcal-client stuff - from calendar/Makefile.am to here. - - * pcs/Makefile.am: New file. Moved the tlacuache stuff from - calendar/Makefile.am to here. - - * Makefile.am (SUBDIRS): Added the idl and cal-client directories. - - * calendar.h: Removed the references to cal-backend.h and its - stuff. This file is going away soon! - - * icalendar.c: #include . Also, we don't need to - include cal-backend.h or gnome.h. - - * icalendar.h: Protect from multiple inclusions. - -2000-03-01 Federico Mena Quintero - - * Makefile.am: Use the gnome-config flags for orbit-idl. - Create a libcal-client library with the calendar client object. - -2000-02-29 Federico Mena Quintero - - * Makefile.am: Removed stale rule for the conduit. - -2000-02-21 Matt Loper - - * .cvsignore: Added *.lo. - -2000-02-19 Matt Loper - - * .cvsignore: Added tlacuache and tl-test. - -2000-02-18 Miguel de Icaza - - * Makefile.am (INCLUDES): Use BONOBO_VFS_GNOME_CFLAGS instead of - GNOMEUI_INCLUDES, as we use Bonobo and VFS. - -2000-02-17 Seth Alves - - * cal-backend.h: moved CalendarFormat type def here - - * cal-backend.c (cal_backend_load): if extension suggests - an ical file, attempt to load an iCal file. - (cal_get_type_from_filename): returns CAL_ICAL if file - extension is 'ics' or 'ifb', else returns CAL_VCAL - (icalendar_calendar_load): moved this here from - icalendar.c because it needs to call the static function - add_object. - -2000-02-17 Federico Mena Quintero - - * cal-client.c (cal_client_remove_object): Implemented. - - * cal.c (cal_notify_remove): Implemented. - (Cal_remove_object): Implemented. - (cal_get_epv): Fill in the remove_object field in the epv. - - * cal-backend.c (cal_backend_remove_object): Implemented. - (notify_remove): New function to notify clients that an object was - removed. - -2000-02-16 Russell Steinthal - - * calobj.[ch], eventedit.c, main.c: Change iCalObject.organizer - from char* to iCalPerson* - - * calobj.[ch]: Change iCalObject.related from list of char* to - list of iCalRelation*; assorted related fixes - - * icalendar.c: interface between libical and the gnomecal - internal representation - -2000-02-11 Federico Mena Quintero - - * cal-client.c (cal_client_update_object): Implemented. - - * cal.c (cal_notify_update): New function to notify the listener - about an updated object. - (Cal_update_object): Implemented. - (Cal_get_uids): set_release() the sequence to TRUE. - (Cal_get_events_in_range): Likewise. - - * cal-backend.c (remove_object): New function to remove objects - from a calendar backend. - (cal_backend_update_object): New public function to update an - object and notify clients about it. - - * evolution-calendar.idl (Cal): Added update_object() and - delete_object() methods. - (Listener): Removed the obj_changed method and renamed obj_added - to obj_updated. We now only have updated and removed notifiers. - - * cal-listener.[ch]: Removed the "changed" notification code. - Changed the "added" notification code to the "updated" - notification. - - * cal-client.c: Likewise. - - * tlacuache.c (create_cal_factory): Connect to "destroy" on the - factory and exit the main loop when the factory is destroyed. - - * cal-factory.c (backend_destroy_cb): New callback used when a - backend is destroyed. Removes the backend from the factory's hash - table and unrefs the factory if all backends go away. - (add_calendar_client): Free the environment. - - * cal.c (cal_new): Use bonobo_object_unref() if we fail to - initialize. - - * cal-listener.c (cal_listener_new): Likewise. - - * layout.c (layout_events): Plug li.partition memory leak. - -2000-02-10 Federico Mena Quintero - - * cal-backend.c (cal_backend_add_cal): Connect to the Cal's - destroy signal. - (cal_backend_remove_cal): Killed function now that removal of Cal - objects is done in their destroy callback. - (cal_destroy_cb): New callback to remove a Cal from the backend's - list of clients. Also, the backend destroys itself when there are - no more clients connected to it. - (save): New placeholder function to save a backend. - (destroy): New function to destroy a backend's data. - (cal_backend_destroy): Save the calendar and destroy it. - - * cal.c (cal_destroy): Reset the priv->backend to NULL. - - * cal-factory.c (add_calendar_client): There is no need to call - cal_backend_remove_cal(); we can now just destroy the Cal object. - (create_fn): Make sure we always unref the URI. - (load_fn): Move the URI unref to the end of the function for - safety. - - * cal-factory.c (add_calendar_client): Unref the Cal only if - notification of the listener was unsuccessful. Otherwise, the - calendar user agent (Listener side) keeps the reference. - - * tl-test.c (list_uids): Free the calobj. - - * cal-client.c (cal_loaded_cb): Use bonobo_object_unref() to get - rid of the listener. - (load_or_create): Likewise. - (destroy_factory): New function to get rid of the factory. - (destroy_listener): New function to get rid of the listener. - (destroy_cal): New function to get rid of the calendar client - interface object. - (cal_client_destroy): Free all resources. - (cal_client_get_object): CORBA_free() the calobj string. Boy, I - love memprof. - - * cal-listener.c (cal_listener_destroy): Reset the priv->cal to - CORBA_OBJECT_NIL. - - * cal-backend.c (cal_backend_remove_cal): Do not unref the Cal, - since the calendar user agent owns it. - (cal_backend_add_cal): Do not ref the Cal, since the calendar user - agent owns it. - - * cal-factory.c (add_calendar_client): Use bonobo_object_unref() - to get rid of the calendar client interface object. - - * calobj.c (ical_object_create_from_vobject): Duplicate the - default "PUBLIC" string. - -2000-02-09 Federico Mena Quintero - - * cal-factory.c (cal_factory_load): Added documentation comment. - (load_fn): Do not print a message if the backend could not be - loaded due to a non-fatal error. - (queue_load_create_job): Moved the stuff from cal_factory_load() - to here. Now this function serves to queue load or create - requests. - (cal_factory_load): Use queue_load_create_job(). - (cal_factory_create): Implemented; use queue_load_create_job(). - (create_fn): New job handler for creating new calendars. - (create_backend): New function to create a new backend with a new - calendar. - (add_backend): New helper function to add backends to the - factory's hash table. - (load_backend): Use add_backend() instead of adding the backend by - ourselves. - - * cal-client.c (load_or_create): Moved the functionality from - cal_client_load_calendar() to here, and added an option to create - a new calendar instead of loading an existing one. - (cal_client_load_calendar): Use load_or_create(). - (cal_client_create_calendar): Implemented. - - * cal-backend.c (cal_backend_create): Implemented. - - * evolution-calendar.idl (LoadStatus): Added an IN_USE error for - create requests. - - * cal-listener.h (CalListenerLoadStatus): Added CAL_LISTENER_LOAD_IN_USE. - - * cal-listener.c (Listener_cal_loaded): Convert the IN_USE error. - - * cal-client.h (CalClientLoadStatus): Added CAL_CLIENT_LOAD_IN_USE. - - * cal-client.c (cal_loaded_cb): Handle CAL_LISTENER_LOAD_IN_USE. - - * tl-test.c: New test program for the calendar client side; it - also exercises the server side by sending commands to it. - - * Makefile.am: Added the tl-test program. - - * tlacuache.gnorba: Updated. - - * tlacuache.c (create_cal_factory): Use the right GOAD id. - - * cal-client.c (cal_client_construct): Use the right GOAD id. - -2000-02-08 Federico Mena Quintero - - * evolution-calendar.idl (Cal): Added get_uids() method to get a - list of UIDs based on object types. - - * cal-backend.c (cal_backend_get_uids): Implemented get_uids() in - the backend. - - * cal.c (Cal_get_uids): Implemented get_uids() method. - - * cal-client.c (cal_client_get_uids): Implemented client-side - function. - - * cal-util.c (cal_obj_instance_list_free): Doh. Free the list, - not the last link. - (cal_obj_uid_list_free): New function to free a list of UIDs. - - * GnomeCal.idl (Repository): Removed unused method - get_object_by_id_list(). This is just for cleanup purposes and to - remind me exactly of what needs to be moved over to - evolution-calendar.idl. - (Repository): Removed unused get_objects() method. - - * corba-cal.c (init_calendar_repo_class): Removed the unused - get_objects method. - - * calobj.h (CalObjFindStatus): New status value enumeration for - the find function. - - * calobj.c (ical_object_find_in_string): New function to parse a - complete calendar and find a calendar object in it. This should - be used instead ical_object_new_from_string() in the future. - - * evolution-calendar.idl (CalObjInstance): Added an uid field. - Now the idea is that whenever calendar object strings are passed - around, their UIDs are passed along with them so that the actual - object can be pulled from the whole VCAL object using its UID to - identify it. - - * cal-util.h (CalObjInstance): Added uid field. - - * cal-util.c (cal_obj_instance_list_free): Free the UIDs. - - * cal-backend.c (build_event_list): Store the object's UID in the - instance structure. - - * cal.c (Cal_get_events_in_range): Copy the UID field to the CORBA - structure. - - * cal-client.c (cal_client_get_events_in_range): Copy the UID - field from the CORBA structure. - - * main.c (gnome_cal_file_menu): Removed unfinished html-month stuff. - - * Makefile.am (gnomecal_SOURCES): Removed html-month.c. - - * gnome-cal.c: #include "alarm.h" - (mail_notify): Made static. - - * alarm.h: #include "calobj.h" - - * corba-cal-factory.h (init_corba_server): Fixed prototype. - - * quick-view.c (create_items_for_event): Made static. - - * gncal-todo.c (column_resized): Made static. - - * layout.c (find_index): Made static. - -2000-02-08 Federico Mena Quintero - - * evolution-calendar.idl (CalObjInstance): New struct to wrap - instances of calendar objects for recurrencies and alarms. - (Cal::get_events_in_range): New method to get ocurring and - recurring events by time range. - - * cal-backend.c (cal_backend_get_events_in_range): New function to - get a list of event instances in a time range. - (string_from_ical_object): New internal function. - (cal_backend_get_object): Use string_from_ical_object() instead of - doing everything ourselves. - (cal_backend_get_events_in_range): New function to get a list of - the events that occur or recur in a specified time range. - - * cal-client.c (cal_client_get_events_in_range): Implemented - client-side function. - - * cal-util.h: - * cal-util.c: New files with utilities and types common to the - client and server parts. - (CalObjInstance): New structure to hold an instance of an actual - occurrence, recurrence, or alarm trigger of a calendar object. - (cal_obj_instance_list_free): New function to free a list of - calendar object instances. - - * cal.c (Cal_get_events_in_range): Implemented new method. - - * corba-cal.c (cal_repo_get_updated_objects): Free `str' with - free(), not g_free(), since calendar_get_as_vcal_string() uses - writeMemVObject(), which uses realloc(). Fixed in gnome-pim as - well. - -2000-02-04 Federico Mena Quintero - - * cal-backend.c (get_calendar_base_vobject): New function to - create the base VObject for a calendar. - (cal_backend_get_object): Create the base calendar and add the - sought object to it, then stringify it. - - * evolution-calendar.idl (Listener::obj_added - Listener::obj_changed): Now these pass in just the UIDs, not the - complete objects. - - * cal-listener.c (Listener_obj_added): Changed to pass in the uid, - not the object. - (Listener_obj_changed): Likewise. - - * cal-client.h (CalClientClass): Made the obj_added and - obj_changed signals take in the UIDs, not the full objects. - - * cal-client.c (obj_added_cb): Likewise. - (obj_changed_cb): Likewise. - -2000-02-04 Federico Mena Quintero - - * cal-backend.c (CalBackendPrivate): Renamed the event_hash field - to object_hash. Now we hash all the calendar's objects here based - on their UIDs. - (ensure_uid): New function to create UIDs for calendar objects - that don't have them. - (add_object): Ensure the object has an UID before inserting it in - the calendar. - (cal_backend_get_object): New function. - -2000-02-03 Federico Mena Quintero - - * evolution-calendar.idl (Cal): Added the get_object() method. - - * cal-client.c (cal_client_get_object): New function to get a - calendar object by its UID. - - * cal.c (Cal_get_object): Implemented. - - * cal-backend.c (cal_backend_get_object): New unfinished backend - function. We need some reorganizing of how the calendar objects - are stored. - -2000-02-02 Federico Mena Quintero - - * Makefile.am (gnomecal_SOURCES): Added the CORBA generated - sources. - -2000-02-01 Federico Mena Quintero - - * cal-client.c (cal_loaded): Handle the cal_loaded signal from the - listener. Store the calendar client interface object, and emit - our own cal_loaded signal. - (cal_client_load_calendar): Connect to the listener's signals. - (cal_client_class_init): Added the "obj_added", "obj_removed", - öbj_changed" signals. - (obj_added_cb): Handle the signal from the listener. - (obj_removed_cb): Likewise. - (obj_changed_cb): Likewise. - -2000-01-30 Federico Mena Quintero - - * Makefile.am (gnomecal_SOURCES): Added cal-client.[ch] and - cal-listener.[ch]. - -2000-01-30 Federico Mena Quintero - - * evolution-calendar.idl: Changed the namespace from - GNOME::Calendar to Evolution::Calendar. - (Listener::LoadStatus): Fixed SUCESSS -> SUCCESS typo. And I - never noticed it in the implementation. Ain't M-/ grand? - - * Makefile.am: Changed ocurrences of gnome-calendar.idl to - evolution-calendar.idl. - - * *.[ch]: Changed GNOME_Calendar_foo identifiers to - Evolution_Calendar_foo. - -2000-01-25 Federico Mena Quintero - - * cal-client.c cal-client.h: New files with the calendar client - object. - -2000-01-25 Federico Mena Quintero - - * cal-factory.c (CalFactory_load): Check that the listener is not - nil and emit and exception if it is. - - * gnome-calendar.idl (CalFactory::load CalFactory::create): Now - these raise the NilListener exception. - - * tlacuache.c (calendar_notify): Error stub for alarms. - (alarm_defaults): Stub array. - (debug_alarms): Stub variable. - (main): Initialize gnome-vfs. - -2000-01-24 Federico Mena Quintero - - * tlacuache.c: New main module for the Tlacuache personal calendar - server. - - * tlacuache.gnorba: New gnorba file for Tlacuache, the GNOME - personal calendar server. - - * Makefile.am: Added the stuff necessary to build Tlacuache. - - * cal.c (Cal_get_uri): Convert the URI to a string before - returning it. - - * cal-factory.c (CalFactory_create): Doh, this function is void. - - * job.c (job_add): Use g_idle_add(), not gtk_idle_add(). - -2000-01-24 Federico Mena Quintero - - * cal-backend.c (cal_backend_remove_cal): New function to remove a - calendar client interface object from a backend. - (cal_backend_load): Convert the URI to string and use - Parse_MIME_FromFileName(). The conversion is not very smart, - though. - - * cal-factory.c (load_backend): Moved most of the error handling - upstream to load_fn(). - (load_fn): Handle failure in case the backend could not be loaded. - (cal_factory_destroy): Free the backends and the backend hash - table. - (add_calendar_client): Implemented. We create a Cal client - interface object and attach it to the backend, and we notify the - listener. - -2000-01-22 Federico Mena Quintero - - * cal-factory.c (lookup_backend): Renamed from lookup_calendar(). - Also, return a backend instead of a Cal client object. - - * cal-backend.c (cal_backend_load): Take in a GnomeVFSURI, not a - string. - - * cal-listener.c (Listener_cal_loaded): Pass the load status to - the signal. - (cal_listener_destroy): Better error checking. - (cal_listener_new): Better error checking. - - * cal-listener.h (CalListenerLoadStatus): New enum for the load - status of a calendar. - (CalListenerClass): Added the status argument to the cal_loaded - signal. - - * gnome-calendar.idl (cal_loaded): Added a load status code. - - * cal-backend.h (CalBackendLoadStatus): Renamed from - CalBackendLoadResult. - -2000-01-18 Federico Mena Quintero - - * cal-backend.c cal-backend.h: Moved the calendar backend here. - This is the actual calendar-handling object. - (load_from_vobject): Moved over from calendar.c. Modified to use - a CalBackend instead of the old Calendar structure. - (add_object): Likewise. - - * cal.c: Now the Cal object is just a calendar client interface - object; we use it as a "viewport" onto a CalBackend. This also - lets us do correct resource management. - - * cal-common.h: New file with common forward declarations; we - can't have circular dependencies between headers. - -2000-01-18 Federico Mena Quintero - - * cal-factory.c (cal_factory_load): Queue a load job. - (load_fn): Load job handler. Lookup the calendar by URI, load it - if it is not loaded, or just report it to the new listener if it is. - - * job.c job.h: New files with a simple job queue manager. - - * gnome-calendar.idl (Listener::cal_loaded): Do not return the - whole calendar object string. The client will be able to query - the calendar for the events it needs. - - * cal-listener.c (Listener_cal_loaded): Ref the calendar GNOME - object. We unref it when the listener is destroyed. - -2000-01-17 Federico Mena Quintero - - The files from the gncal directory of the gnome-pim module on CVS - were moved here, to evolution/calendar, in preparation for the - Evolution work. The calendar is being split into a model/view - architecture. The model is a personal calendar server (PAS): it - provides storage, notification, and event generation; the - views/controllers are the calendar user agents and things like - Pilot synchronizers. - -2000-01-11 Federico Mena Quintero - - * cal.c: Removed the CORBA listener methods, adjusted for the new - IDL. - - * cal-listener.c (cal_listener_init): Create the private - structure. In it we hold a reference to the calendar the listener - is watching. - (cal_listener_destroy): Destroy the private structure and unref - the calendar. - (Listener_cal_loaded): Stuff the calendar into our private data. - (Listener_obj_added): Adjusted for new IDL. - (Listener_obj_removed): Likewise. - - * gnome-calendar.idl: New IDL for the personal calendar server. - - * cal.h cal.c: New files with the calendar object. - - * cal-listener.h cal-listener.c: New files with the calendar - listener object. - - * cal-factory.h cal-factory.c: New files with the calendar factory - object. - -2000-01-09 Eskil Heyn Olsen - - * Makefile.am: Changes to remove todo capplet stuff from distro. - -2000-01-08 Vadim Strizhevsky - - * calendar-conduit-control-applet.c: Added pilotID argument to - gpilotd_conduit_mgmt_new. - - -2000-01-05 Eskil Heyn Olsen - - * GnomeCal.idl: Added an argument to get_number_of_objects, so you - can choose which state the object should have - (any/new/modified/...). Will also add one to choose type - (event/journal etc). - - * corba-cal.c (cal_repo_get_number_of_objects): Implemented the - new version of get_number_of_objects. - - * calendar-conduit.c (pre_sync): Calls various - gnome_pilot_conduit_standard_abs_set_num_yadayda to get progress bars. - -2000-01-04 Eskil Heyn Olsen - - * calendar-conduit.c (start_calendar_server): Let's not call - g_error, but g_warning instead. - (pre_sync): Get record numbers info, total, new, deleted etc, and - tell gpilotd. - -1999-12-31 Eskil Heyn Olsen - - * eventedit.c (ee_store_recur_end_to_ical): Adds 86400 secs (1 - day) to the date chooses by the user. This ensures the recurrence - also occurs on that date. - (ee_rp_init_ending_date): And subtracts 86400 secs when about to - redisplay the box. - - * calendar.h: Added an argument to calendar_new, to enable certain - features, such as initing alarms or nor. - - * calendar.c (calendar_new): Implemented support for the - CALENDAR_INIT_ALARMS option to calendar_new. - - * corba-cal.c (cal_repo_get_updated_objects): Added - CALENDAR_INIT_ALARMS to calendar_new calls. - - * main.c: Added CALENDAR_INIT_ALARMS to calendar_new calls. This - should probably be CALENDAR_INIT_NIL, but I'm not sure, guess - steintr should check it. - - * gnome-cal.c: Added CALENDAR_INIT_ALARMS to calendar_new calls. - - * calendar-pilot-sync.c: Added CALENDAR_INIT_NIL to calendar_new calls. - -1999-12-10 Russell Steinthal - - * eventedit.c (ee_create_ae): Fix sensitivity bug when used to - create default alarm box (widgets in that box should always be - sensitive, even if the enabled checkbutton is not set) - -1999-12-08 Eskil Heyn Olsen - - * calendar-conduit-control-applet.c (setSettings): Capplets now - sets first_sync on enable, this should make the conduit copy old - entries from the pilot to gnomecal. - -1999-12-07 Eskil Heyn Olsen - - * calendar-conduit.c (pre_sync): Check if local store is - empty. If, force slow sync. - - * GnomeCal.idl (GNOME): Added get_number_of_objects. - - * corba-cal.c (cal_repo_get_number_of_objects): implemented the - get_number_of_objects. - - * calendar-conduit-control-applet.c (setStateCfg): Fixed bug that - caused the capplet to always set the sync action to Disable upon start. - -1999-12-05 Eskil Heyn Olsen - - * Makefile.am (Conduits_second_DATA): Also install .desktop files - for conduit capplets in the gnome/apps menu dir. - -1999-12-04 Eskil Heyn Olsen - - * Makefile.am (EXTRA_DIST): Added .desktop files to EXTRA_DIST. - -1999-10-12 Clifford R. Conover - - * gncal-todo.c Todo List improvements. - - Cleaned up todo item highlighting, added support for highlighting - events due today, and events not due yet. Colors are configurable - on the Colors Tab of the properties window. - - Renamed Frame in Properties window to Colors rather then Month - Colors since we are now asking for Todo item colors. - - Added ability to display time until todo item is due in list, it - automatically selects the best denomination of time (up to weeks) - and down to seconds to display. This should be made configurable - in a future version. - - Changed Todo dialog to ask for time that event is due. This - allows more accurate tracking of then the item is due, before the - dialog was only asking for the date of the todo item. - -1999-12-03 Eskil Heyn Olsen - - * calendar-conduit.c: undef DEBUG_CALCONDUT, suppresses debug output. - -1999-12-02 Russell Steinthal - - * alarm.c: Enhanced debug support: can be toggled on and off by - SIGUSR1, reports alarms which could not be added - - * gnome-cal.c, main.[ch], prop.c: Add snooze capability for audio - and display alarms. Snooze interval can be configured in the - Properties box. - -1999-11-30 Eskil Heyn Olsen - - * calendar-conduit.c (compare): Fixed compare bug. Also neated up - some of the if's in set_status. - -1999-11-22 Russell Steinthal - - * Merged todo list coloring patch from stable - * Added myself to AUTHORS, about box (per Miguel) - -1999-11-22 Eskil Heyn Olsen - - * calendar-conduit.c (pre_sync): Writes some warning - messages when pre_sync fails. - -1999-11-14 Eskil Heyn Olsen - - * Makefile.am: Stupid misplaced endif cause gncal to depend on an - install gnome-pilot... fixed... sorry. - -1999-11-12 Eskil Heyn Olsen - - * Makefile.am (extra_pilot_bins): Fixed the if then else problem, - using solution suggested by James Henstridge, appears to be caused - by a (by now fixed) bug in my automake. - -1999-11-12 Russell Steinthal - - * prop.c: Config code for timeout, make Alarms property page use a - vbox instead of an hbox so that the propbox stays a reasonable width. - - * gnome-cal.c, main.[ch]: Add timeout for audio alarms, code to load - from config file - - * eventedit.c: Give some static functions external linkage so they - can be used elsewhere (make_spin_button); add some prototypes to - appease gcc. - -1999-11-11 Russell Steinthal - - * calendar.c (calendar_day_change): Add call to - calendar_init_alarms() to schedule another day change alarm. - -1999-11-09 Eskil Heyn Olsen - - * calendar-conduit.c: Enabled debug output. Sets a g_log_domain, - now version 0.8.5. Consistent use of GSList/GList. Implemented - compare, default uses one that compares the contents of a struct - Appointment, but also has #ifdeffed code that does a field level - comparison, not complete, but perhaps educational. - - * Makefile.am (#todo_conduit_control_applet_SOURCES): Fixed an - unwanted conditional on libcalendar_conduit_la_LDFLAGS - -1999-11-05 Eskil Heyn Olsen - - * calendar-conduit-control-applet.c (readStateCfg): Commented the - code out, thus the capplet works again. - -1999-11-04 Eskil Olsen - - * Makefile.am: Uses the PISOCK_LIBDIR, for people with odd install - dirs for their pilot-link. Also install a pretty icon for the - calendar-conduit. - - * calendar-conduit-control-applet.c: Modfied the - try/revert/ok/cancel scheme to be more intuitive, also uses a - GtkOptionMenu for the possible sync methods. - - * calendar-conduit-control-applet.desktop: use the nice icon... - - * calendar-conduit.c: Ack, had to define debug_alarms and - alarm_default, otherwise they are undefined. Is gncal code messy - or is this considered a way of configuring the cal engine ? - Implemented delete_all syncabs methods. - - * calendar-pilot-sync.c: also had to declare debug_alarms and - alarm_defaults, just as ugly. - -1999-11-02 Russell Steinthal - - * prop.c: Add new alarm page to properties box - - * prop.c, calobj.c, main.[ch] eventedit.c: New support for default - alarms, configurable in the properties box. - - * gnome-cal.c, prop.c, main.[ch]: add option to beep on Display - alarms - -1999-10-23 Russell Steinthal - - * calendar.c (calendar_new): Correctly initialize calendar_day_end - and calendar_day_begin *before* installing day-change alarm. - -1999-10-21 Russell Steinthal - - * alarm.c, main.c: Added alarm debugging code - - * main.c (open_ok): Show an error box if the user tries to open a - non-existent file; fixes bug #1818 - -1999-10-19 Russell Steinthal - - * gnome-cal.c (calendar_notify): Fix typos which were causing - invalid times in audio notification dialogs; fixes Bug #2561 - -1999-10-18 Russell Steinthal - - * gncal-day-panel.c (gncal_day_panel_new): Placed the various - elements of the day view in paned windows so that the user can - adjust the relative sizes of the daily schedule, monthly calendar, - and to-do list. - -1999-10-18 Martin Norbäck - - * gncal.desktop: Added swedish translation - -1999-10-13 Eskil Olsen - - * Makefile.am: Hopefully the fixes the much-hated - gnome-pilot dependency. - -1999-10-07 Eskil Olsen - - * calendar.c (calendar_object_changed): moved the pilot_status = - MOD up, so even a CHANGE_SUMMARY will set the modified flag. - - * calendar-conduit.c: more _free calls, vamped the noise on output. - -1999-10-06 Eskil Olsen - - * *conduit*[ch]: checks return values from gpilotd_init/connect. - - * calender.c (vcalendar_create_from_calendar): removed a set - of cleanVObject cleanStrTbl, since the freed memory that the - function returned. - -1999-09-27 Timur Bakeyev - - * timeutil.c (time_from_isodate): Use tm.gmtoff or timezone to get - correct offset from UTC, according to HAVE_TM_GMTOFF or HAVE_TIMEZONE. - See also 1999-07-19 Matt Martin - -1999-09-27 Miguel de Icaza - - * month-view.c (add_event): ditto - (mark_current_day): ditto - (month_view_set): ditto - - * goto.c (goto_dialog): ditto. - - * gnome-month-item.c (gnome_month_item_init): ditto. - - * gncal-day-panel.c (gncal_day_panel_new): ditto. - - * getdate.c (RelativeDate): ditto. - - * eventedit.c (set_all_day): ditto. - (ee_rp_init_rule): ditto. - - * calendar.c (vcalendar_create_from_calendar): ditto. - - * calendar-conduit.c (update_record): ditto. - - * calobj.c (ical_object_generate_events): Get rid of pointers to - values returned from localtime, as it uses a static buffer. - -1999-09-26 Eskil Olsen - - * corba-cal.c: the g_free that was commented out since glib said - was a duplicate free, was supposed to be a free. - - * GnomeCal.idl/corba-cal.c: added a get_object_id_list and a - get_objects_by_id_list. Latter is not done. - - * calendar-conduit.c: rewrote the way the conduit iterates over - records. It no longers fetches all entries (since that didn't work - with more then 285 entries. It now fetches the id list, and gets - each record. (will be using get_objects_by_id_list to get records - in amounts of 10 or so later, to reduce amount of corba calls). - - * calendar-conduit.c: now sets alarm parameters when transferring - from gnomecal to pilot. - -1999-09-23 Eskil Olsen - - * calendar-conduit.c: better merge of summary/description - when doing ical_from_remote (update_record), also handles - import from gnomecal to pilot better, and on both ways, repeat - events are much better now. - -1999-09-22 Eskil Olsen - - * corba-cal.c: commented out a g_free that glib reported - as being a duplicate free. - * calendar-conduit.c: got gnomecal->pilot up and runnning. - -1999-02-06 Lauris Kaplinski - - * gncal.desktop: Added Estonian translations. - -1999-09-14 Federico Mena Quintero - - * gncal-full-day.c (child_popup_menu): Set the data pointers for - all the items. - -1999-09-14 Kjartan Maraas - - * doc/C/gnomecal.sgml: Merge from gnome-pim-1-0. Synced with newest - user-guide. - -1999-09-01 Miguel de Icaza - - * eventedit.c (ee_create_buttons): Make the OK button the default - button per Russell's suggestion. - -1999-08-30 Miguel de Icaza - - * calendar.c (calendar_object_changed): Modify the - object->last_mod field. - (calendar_add_object): Ditto. - - Closes bug #676 - - * main.c (save_calendar_cmd): Fix problem in which we warned the - user about the calendar being modified the first time the calendar - was used. - -1999-08-22 Tomas Ogren - - * gnomecal.gnorba: "GenericFactoy" is wrong... - -1999-08-15 Miguel de Icaza - - * calobj.c (ical_gen_uid): Fix the hostname part. - -1999-08-07 Peter Teichman - - * calendar-pilot-sync.c (sync_pilot): sync correctly for objects - created on the pilot, but not dirty (because they have been synced - with some other program in the past) - -1999-07-30 Miguel de Icaza - - * month-view.c (month_view_init): Release points here. - -1999-08-02 Peter Teichman - - * Makefile.am (libcalendar_conduit_la_LDFLAGS): - libcalendar_conduit now installs - - * calendar-pilot-sync.c (sync_pilot): do deletion of appointments - correctly, when they are deleted on the pilot - (conduit_free_Appointment): protect against double-freeing parts - of the Appointment structure - (update_record): all-day events from the pilot are handled a bit - more reasonably - -1999-08-01 Peter Teichman - - * calendar-pilot-sync.c (sync_object_to_pilot): The multi-day - appointment corruption bug is dead. Whoo! - -1999-07-31 Peter Teichman - - * Makefile.am: fixed this up slightly with respect to pilot conduits - -1999-07-30 Jonathan Blandford - - * Makefile.am (libcalendar_conduit_la_LIBADD): More autoconf-stuff - -1999-07-29 Jonathan Blandford - - * gnome-cal.c (setup_widgets): Add scrolling to the yearview. - -1999-07-28 Miguel de Icaza - - * calendar-pilot-sync.c: (sync_object_to_pilot): If the enddate is - not set, set the repeatForever to 1. This fixes all of the - birthdays problems I had. - - Make the code not take arguments - (sync_cal_to_pilot): Nice event update information - - * calendar.c (calendar_new): Add Event UID hash table. - (calendar_add_object): Add events to the hash table here. - (calendar_remove_object): Remove events here. - (calendar_object_find_event): Use the hash table here. - - * main.c (save_calendar_cmd): The object is already destroyed by - gnome_dialog_run. - - * calendar-pilot-sync.c (sync_object_to_pilot): Do not turn - archived bit on. - - * calobj.c (ical_gen_uid): Use the hostname, not the domain name. - (ical_gen_uid): Add a serial number. Isodates can be small. - - * corba-cal.c (cal_repo_update_pilot_id): New method to update the - pilot status. - (cal_repo_get_updated_objects): New method. Returns a list of - modified and not-sycned objects - - * calendar-pilot-sync.c (sync_cal_to_pilot): New function to sync - from the GnomeCalendar to the pilot. - (sync_object_to_pilot): Sync a single event to the pilot. - (try_alarm): Alarm syncing code. - -1999-07-27 Miguel de Icaza - - * calendar-pilot-sync.c: New file. Implements PalmPilot - syncronization with the Gnome Calendar. - - * calobj.c (ical_object_new_from_string): New function. Creates - an iCalObject from a vCalendar string that is supposed to contain - only one vEvent. - - * calendar.c: - (calendar_save): Split this routine in two. - - * gnome-cal.c (gnome_calendar_new): Create the corba server here. - - * main.c: Include gnorba.h, and corba-cal-factory.h here - (close_cmd): Kill the calendar server on shutdown. - - * calobj.c (load_recur_yearly_day): Added a fixme comment. WE - need to handle intervals in the years. - - * calendar.c (calendar_object_find_in_list, calendar_object_find, - calendar_object_find_todo, calendar_object_find_event): New - functions for looking up information. - - * main.c (gnome_calendar_locate): New function. - - * corba-cal.c (calendar_create_object): New file. Implements the - corba server. - - * calendar.c (calendar_object_changed): Flag pilot-status as changed. - - * calobj.c (ical_object_to_vobject): Save pilot information for syncing. - (ical_object_create_from_vobject): Load syncing information for - pilot. Do it in a way compatible with KOrganizer. - -1999-07-26 Miguel de Icaza - - * calobj.c (ical_object_create_from_vobject): Generate unique IDs - on Vevents we load that lack it. WE need this for the old - gnome calendar generated files (ie, before now :-). - - Required to sync with the Palm - -1999-07-26 Miguel de Icaza - - * calobj.c (ical_object_create_from_vobject): Generate unique IDs - on Vevents we load that lack it. WE need this for the old - gnome calendar generated files (ie, before now :-). - - Required to sync with the Palm - -1999-07-19 Matt Martin - - * timeutil.c (time_from_isodate): Handle the 'Z' parameter to the - ISO date format to convert from GMT time. - -1999-07-17 Nat Friedman - - * calendar.c (calendar_add_object): Copy the new UID into the - iCalObject structure. - -1999-07-16 Miguel de Icaza - - * gnome-month-item.c (gnome_month_item_set_arg): Merge fix from - gnome-pim-1-0: Fixed cut&paste bug for day fontsets. - -1999-07-14 Miguel de Icaza - - * calobj.c (ical_gen_uid): Returns a UID. - (ical_object_new): Use a UID when creating an event. Should get - syncing done easier. - -1999-07-14 Nicholas J Kreucher - - * calobj.c (skip_numbers): Actually skip over the numbers. - (ical_object_to_vobject): Test the proper variable for storing the - proper information. - -1999-07-14 Jean-Noel Guiheneuf - - * timeutil.c (time_add_month): Fixed the problem with next month - going from a 31-day to a 30-day by adjusting the date to the - closest day at the end of the month. - -1999-06-07 Mike McEwan - - * timeutil.c (time_add_month): Tell ktime' that we don't know - about daylight saving time so that it does *not* make adjustments - when we traverse a DST boundary. - (time_year_begin): ditto. - (time_year_end): ditto. - (time_month_begin): ditto. - (time_month_end): ditto. - -1999-06-16 Anders Carlsson - - * main.c (new_calendar): Realize the toplevel widget when - --hidden is passed to gnomecal. This fixes a segfault. - -1999-06-04 Robert Brady - - * gnome-cal.h, gnome-cal.c: Fix abort() problem with the year view. - (Bug #1367). Thanks to Owen Cliffe for - helping track it down. - -1999-06-03 Miguel de Icaza - - * calobj.c (daynumberlist): One line bug fix from Sergey I Panov. - -1999-06-02 Miguel de Icaza - - * view-utils.c (nicetime): Use %H instead of %k, as %k is a GNU - extension, not available in other systems. - -1999-06-01 Miguel de Icaza - - * calobj.c (daynumberlist): Work around broken software that - writes a broken month-of-day as "zero". Use the dtstart date for - this on this event. - -1999-05-28 Miguel de Icaza - - * Makefile.am (install-data-local): help files be gone. They are - now installed from the Docbook stuff. - -1999-05-26 Russell Steinthal - - * gncal-todo.c main.c main.h prop.c: Added support for priorities - for todo items. Doesn't do much, but you can set them and sort by - them. (Use the properties box to enable them; should they be on - by default?) - -1999-05-25 Miguel de Icaza - - * main.c (parse_an_arg): Added missing break here. It was causing - core dumps when invoked with --userfile. - - * gnome-cal.c (gnome_calendar_set_view): Add some assertions here, - to pin point the bug reported on gnome-list. - - * calobj.c (load_recurrence): Make intervals always exist. a 0 - interval is wrong. - -1999-05-25 Federico Mena Quintero - - * year-view.c: Removed unused macro CALENDAR_HEIGHT. - -1999-05-25 Federico Mena Quintero - - * year-view.c (idle_handler): Set the canvas scroll region here, - not in size_allocate(). Also, use the correct width and height - based on the allocation and the precomputed minimum width/height - values. - - * gnome-cal.c (setup_widgets): Set the scrollbar policy of the - scrolled window. - - * main.c (setup_appbar): Use the correct type for the appbar. - - * gncal-day-view.c: Removed unused function switch_to_day(). - - * gncal-day-panel.c (calendar_day_selected): Removed unused variable. - -1999-05-25 Nat Friedman - - * doc/C/gnomecal.sgml: Fixed a typo. - - * gnome-cal.c (setup_widgets): Added a scrolled window widget into - which the year view is placed. - - * year-view.c (CALENDAR_HEIGHT): The height of the total year view - inside the scrolled window. - (idle_handler): Set the height of the year view to - CALENDAR_HEIGHT. - (year_view_size_allocate): Set the scroll region of the year view - canvas to allocation->width, CALENDAR_HEIGHT. - -1999-04-25 Miguel de Icaza - - * main.c (dump_todo): Add --todo flag to dump the todo contents. - -1999-04-19 Miguel de Icaza - - * gncal-todo.c (add_activated): Use same hack used in edit_activated - -1999-04-16 Miguel de Icaza - - * gncal-todo.c (edit_activated): Kill all grabs from the CList - before running the new dialog box. - - This fixes the problem of button-3/Edit on the todo item blocking - the GUI (actually, the main window responds, but not the todo - window). - -1999-04-08 Miguel de Icaza - - * gncal-todo.c (gncal_todo_init): Make sure we can get events for - button3. The code for the nice popup menu was there but was not - getting invoked. - -1999-04-01 Steve Murphy - - * calobj.c (weekdaynum): Added this routine so Monthly recurrences - use the weekday field as a simple integer for a single weekday. - - * calobj.c (load_recur_monthly_pos): Call weekdaynum instead of - weekdaylist. The interface only lets the user input a single value - anyway. - - * calobj.c (ical_object_to_vobject): instead of code to output day - names from a bit array, use instead the value as an int and output - a single dayname. - - * calobj.c (ical_object_generate_events): first_week_day gets the - day int instead of the first entry in the bit field. I inserted a - fair chunk of code to avoid calling generate if the day is out of - range for a month. It may be unneccessary, because mktime will - turn the extra days into a valid date the next month. But not all - mktimes are equal, I fear. - - * eventedit.c (ee_store_recur_rule_to_ical): For case 3, - (Monthly), I added code to set the interval slot of the recur - struct; without this value, selecting a monthly recursing, by - date, would lead to an infinite loop broken only by a failure to - alloc more memory. Also, in the "by position" case, both - u.month_pos and u.month_day were being assigned values. This is a - mistake, as they are both part of an union, and the same - thing. The weekday field should get the recur_rr_month_weekday - value. - - * eventedit.c (ee_rp_init_rule): set default day from the weekday - field instead of the u.month_day field, which is really the - month_pos value. - - * gnome-cal.c (gnome_calendar_tag_calendar): Month days start with - 1, not 0; thus, setting tm.tm_mday = 0, and then calling mktime - will generate a time corresponding to the end of the previous - month, which may have a mday anywhere from 28 to 31. The end time - just adds 1 to the month, so your end time may not cover the last - few days of this month, depending on what the biggest mday of last - month was. I changed it so tm_mday is set to 1 instead. - -1999-03-30 Federico Mena Quintero - - * gncal-todo.c (convert_time_t_to_char): Made static. Make it use - the full year format for strftime(). - -1999-03-27 Nuno Ferreira - - * calobj.c: Include So that strings get translated. - -1999-03-26 Tomas Ogren - - * prop.c (build_hours_menu): Made it respect 12/24h settings.. - Doesn't show until next time you open the dialog.. yet.. - -1999-03-24 Tomas Ogren - - * gncal-week-view.c (gncal_week_view_set): Did some i18n work - * eventedit.c (get_exception_string): Did some i18n work - -1999-03-24 Tomas Ogren - - * gncal-todo.c (gncal_todo_init): Made clist titles i18n:able - * main.c (poptOption): Added which views that are possible for - --view in the --help text (closes #367) - * main.c (dump_events): Added (short) month to the strftime and made - the strings i18n:able - -1999-03-23 Tomas Ogren - - * gncal/calobj.c: Added 2 paranthesis.. - "foobar = d / 60*60" is _NOT_ the same as "foobar = d / (60*60)" - which caused heavy alarm-corruption with alarms between 2 hrs and - 2 days. - -1999-03-23 Nat Friedman - - * eventedit.c (ee_store_recur_rule_to_ical): Set the - recur->interval to the value of the recur_rr_month_period spin - button if the event is being set "by day." This closes bug #675 - as reported by bagfors@hpc2n.umu.se. Thanks for the report! - -1999-03-10 Clifford R. Conover - - * gncal-todo.c (simple_todo_editor): Add support for Due Date when - adding a TODO item here. - (column_resized): New function - (init_column_sorting): New function. - (todo_click_column): New function. - (convert_time_t_to_char, make_overdue_todo_style): New functions. - - * gnome-cal.c (gnome_calendar_todo_properties_changed): New - function used to update the TODO when the properties have been - chagned for it. - - * prop.c (prop_apply_todo): Apply TODO properties. - - * gncal-day-panel.c (todo_list_properties_changed): Update the - TODO display here. - - * eventedit.c (date_edit_new): Made public - -1999-03-10 Craig A Soules (soules+@andrew.cmu.edu) - - * timeutil.c, calendar.c, calobj.c, gncal-day-panel.c: Add support - for daylight time savings. - -1999-02-28 Martin Baulig - - * gncal-full-day.c (recompute_motion): For DRAG_MOVE, DRAG_SIZE_TOP - and DRAG_SIZE_BOTTOM: call child_focus_out () if the child currently - has the focus. - -1999-02-27 Changwoo Ryu - - * quick-view.c (QUICK_VIEW_FONTSET): Added Korean font to the - fontset string. - * mark.h (*_FONTSET): Likewise. - -1999-02-23 Miguel de Icaza - - * calobj.c (ical_object_to_vobject): Save the owner/organizer of - the event. - (ical_object_create_from_vobject): Load the owner/organizer of the event. - - * gncal-full-day.c (delete_occurance): Assign child to data (fixes - crash on "delete this occurrance"). - -1999-02-22 Timur Bakeyev - - * calendar.c: According to configured values, use either tm.tm_zone - or tzname. In last case, also declare it extern. - - * prop.c: langinfo.h not available everywhere. Wrapped. BTW, works - fine without it. - -1999-02-20 Tomas Ogren - - * main.c (init_username): Made use of g_get_{user,real}_name() instead - of our own home-brew... - -1999-02-17 Sergey Panov - - * gnome-month-item.c,gnome-month-item.h,goto.c,mark.h, - month-view.c,prop.c,quick-view.c,year-view.c: will define - fonts via fontset. Friendlier to locales that use iso8859-[^1] - and koi8-r encodings. Does not solve problem for Asian languiges - --- better solution is needed (e.g. standart GNOME fontstyles - defined in gtkrc). - -1999-02-16 Sergey Panov - - * main.c: Use N_() macro for color settings labels in - color_props structure. - -1999-02-15 Federico Mena Quintero - - * goto.c (goto_dialog): Indentation fixes. - -1999-02-15 Tomas Ogren - - * goto.c: Made a private copy of what localtime() returns, to be able - to keep the data after more calls to localtime(). - -1999-02-11 Miguel de Icaza - - * main.c (save_default_calendar): New function. Saves the - calendar if it is the user's default calendar - - * gncal-full-day.c (unrecur_appointment): - * gncal-day-panel.c (day_view_range_activated): - * eventedit.c (ee_ok): - * gncal-todo.c (ok_button): Added autosave for the default - calendar. - -1999-02-09 Tomas Ogren - - * main.c: Removed the gtk_widget_realize call. - -1999-02-06 Changwoo Ryu - - * gncal.desktop: Added Korean translations. - -1999-02-04 Federico Mena Quintero - - * eventedit.c (date_edit_new): New convenience function to create - a properly-configured date editor widget. - -1999-02-03 Federico Mena Quintero - - * gncal-week-view.c (gncal_week_view_new): Make the calendar start - weeks on Monday if appropriate. - (gncal_week_view_time_format_changed): New function to notify the - week view that the time format has changed. - - * gncal-day-panel.c (gncal_day_panel_new): Make the calendar start - weeks on Monday if appropriate. - (gncal_day_panel_time_format_changed): New function to notify the - day panel that the time format has changed. - - * gnome-cal.c (gnome_calendar_time_format_changed): Tell the day - and week views that the time format has changed. - -1999-02-01 Federico Mena Quintero - - * eventedit.c (event_editor_init): Set the title of the event - editor window. - -1999-01-31 Federico Mena Quintero - - * gncal-day-view.c (gncal_day_view_expose): Do not remove the - clipping rectangle here. - - * view-utils.c (view_utils_draw_events): Remove the clipping - rectangle here, since the user of this function should not know - about it. - -1999-01-30 Miguel de Icaza - - * view-utils.c (view_utils_draw_events): Improve this draw - routine. Now it can split the text in lines and fit as many - events as possible. - (nicetime): Return strings without spaces at the beginning. - - * gncal-day-view.c (gncal_day_view_expose): Move clip-clear - operation here. - -1999-01-29 Jason Tackaberry - - * gncal-full-day.c (child_popup_menu): if the user clicks on an - event that is an occurance, the menu will allow the user to delete - all occurances of this event, or just the selected occurance. - (delete_occurance): added. - - * eventedit.c (append_exception): force the clist to select the - new exception. (fixes segfault) - (delete_exception): if the last exception in the clist is deleted, - move the selection index up. (fixes segfault) - -1999-01-28 Miguel de Icaza - - * main.c (parse_an_arg): Add --hidden key to hide the calendar at - startup. Only works with GNOME window managers though :-( - - * calendar.c (calendar_day_change): Reschedule alarms for the new day. - - (calendar_init_alarms): Schedule an alarm for midnight to change - the calendar_day_begin/calendar_day_end. - - * alarm.c (alarm_ready): If we reschedule, there is no need to - activate any pending alarms. - -1999-01-28 Federico Mena Quintero - - * gncal-full-day.c (child_new): Insert the summary text here. - (child_focus_in): No need to raise the window, since we have - Spiffo(tm) layout code. Boy, this is old code. - (gncal_full_day_focus_child): Now that GtkText works better, we - can avoid synthesizing a click which was causing grief, anyway. - (child_button_press): Grab the focus before popping up the menu. - - * layout.c (find_index): Added a sanity check. - - * gncal-full-day.c (child_destroy): Unmap and unrealize the child - before unparenting/destroying it. - (child_unrealize): Unrealize the widget. What was I thinking? - (child_new): Save the focus_out_event signal connection id in - Child structure (in a new field). - (child_destroy): Disconnect from the focus_out_event signal, since - we don't want to get such an event when the widget is destroyed. - (gncal_full_day_destroy): Destroy the children properly; it was - leaking memory. - -1999-01-27 Miguel de Icaza - - * main.c (save_calendar_cmd): Warn if the calendar file has - changed. - - * calendar.c (calendar_load, calendar_save): Keep track of the - modification time for the calendar file. - -1999-01-20 Nat Friedman - - * gncal-full-day.c (gncal_full_day_key_press): Only trap printable - characters such that hotkeys work. - (UNSELECT_TIMEOUT): Changed to 0. Much saner behavior. - - * prop.c (properties): Connect gnome_help_pbox_display to the - GnomePropertyBox help button. - -1999-01-19 Federico Mena Quintero - - * quick-view.c (quick_view_do_popup): Do not grab the mouse here - (it was being grabbed incorrectly, anyways). - (quick_view_map_event): Grab the mouse when the window is mapped. - This avoids the ugly "while (xGrabPointer () != Success)" hack. - (quick_view_button_release): Handle button releases here. - -1999-01-19 Tomas Ogren - - * main.c: do gtk_widget_realize on the toplevel window.. - -1999-01-13 Federico Mena Quintero - - * gncal-day-panel.c (gncal_day_panel_new): Make the little - calendar start up with the correct date. - - * gncal-week-view.c (gncal_week_view_set): Add the month to the - date range display label. - -1999-01-08 Nat Friedman - - * main.c: Converted some more stuff to use the standards. - -1999-01-08 Nat Friedman - - * main.c (setup_appbar): New function to create the status bar. - (setup_menu): Install menu hints. - - Menu items updated to match the standards. New Settings menu - created. - -1998-12-30 Jeff Garzik - - * gncal/calendar.c, gncal/gnome-cal.c, gncal/main.c, - gncal/quick-view.c: - s/g_copy_strings/g_strconcat/ - -1998-12-16 Miguel de Icaza - - Rewrote the old and broken alarm system. It never actually - worked properly. Now it works properly, and I figured a nice way - to get the Audio alarm do something nicer (it is now like an alarm - clock :-). - - * gnome-cal.c (calendar_notify): Now we take a CalendarAlarm to - actually distinguish which alarm was triggered. - - * alarm.c (alarm_ready): The code was only activating the first - alarm. Reschedule the timer upon delivery of an alarm. - -1998-12-14 Federico Mena Quintero - - * year-view.c (idle_handler): Use the allocation size instead of - the old fields in the canvas structure. - - * goto.c (create_days): Use gtk_widget_set_usize() instead of - gnome_canvas_set_size(). - * quick-view.c (setup_event_list): Likewise. - -1998-12-09 Miguel de Icaza - - * gncal-todo.c (simple_todo_editor): Use gnome_dialog_set_parent. - * goto.c (goto_dialog): ditto - * prop.c (properties): ditto. - -1998-11-23 Miguel de Icaza - - * eventedit.c (ee_rp_init_exceptions): Update GtkClist usage. - -1998-11-23 Andrew T. Veliath - - * gncal-day-panel.c (gncal_day_panel_new): Use - gtk_scrolled_window_add_with_viewport instead of - gtk_container_add (gtk changes). - -1998-11-23 Herbert V. Riedel - - * eventedit.c: use GPOINTER_TO_INT - - * gncal-todo.c: same. - -1998-11-22 Matthew Wilson - - * main.c: Fixed the popt event parsing callback to have the - correct number of arguments. This stops it from segfaulting. - -1998-11-16 Federico Mena Quintero - - * eventedit.c (ee_classification_widgets): Doh. Fixed stupid bug - where the classification buttons were not being set correctly. - (ee_store_general_values_to_ical): Take into account the fact that - radio group lists are stored in reverse order of insertion. - - * gncal-todo.c (gncal_todo_init): Use a scrolled window to put the - clist into. - -1998-11-11 Miguel de Icaza - - * calendar.c (calendar_save): Backup the old file before saving - the caledar. - -1998-11-06 Miguel de Icaza - - * calobj.c: Add ctype.h - -1998-10-31 Federico Mena Quintero - - * gnome-cal.c (gnome_calendar_direction): Add the offset from the - beginning of the current time unit (day/month/etc), otherwise it - does not work right, for example, you are on the 31st day of a - month and the next month is a 30-day one and you jump to the next - month. - -1998-10-16 Federico Mena Quintero - - * month-view.c: Changed a lot of stuff not to use the layout code - -- the month view's days are too small to display layout - usefully. Now they display a little list of the events in each - day. We also have a popup menu for the days in the month view. - - * calendar.c (calendar_get_objects_in_range): Reverse the list so - that it is returned in increasing order. - - * eventedit.c (event_editor_new_whole_day): New public function to - create an event for the complete span of day_begin to day_end. - - * year-view.c (new_appointment): Use event_editor_new_whole_day(). - - * year-view.c (yv_popup_menu): Mark strings for i18n. - -1998-10-12 Ji Lee - - * eventedit.c (ee_store_recur_rule_to_ical): The interval was - never being loaded from the spin button. - -1998-10-09 Federico Mena Quintero - - * month-view.c (month_view_update): Create a list of children and - lay them out nicely. Lots of functions added for this purpose. - (adjust_segment): Main event segment adjustment routine. - (adjust_children): Adjusts all the children in the month view. - (child_create_segments): Creates the segments for a particular event. - (layout_children): Uses the generic layout engine to organize the children. - -1998-10-08 Federico Mena Quintero - - * gncal-todo.c (clist_row_selected): Set the sensitivity of the - edit/delete buttons. - (gncal_todo_update): Likewise. Thanks to Dirk Luetjens for the - bug report. - - * layout.c: Do some cleanup; now we pass a struct with the layout - algorithm's state instead of passing a trillion parameters around. - - * gncal-full-day.c (layout_children): Use the new generic layout - engine. - (child_compare): Sort keys are start time then end time, not just - start time. This produces somewhat nicer results for the layout - algorithm. - - The new layout code uses a partition of the time range occupied by - the events, rather than using a fixed time granularity. This is - better since the different parts of the program that use the - layout module will have different semantics regarding snapping the - event bounds to a fixed "time grid". - -1998-10-07 Federico Mena Quintero - - * layout.[ch]: New files that abstract the event layout code from - gncal-full-day.c into something useful for other parts of the - program. Now all event layout is done here. - - * Makefile.am (gnomecal_SOURCES): Added layout.[ch] to the list of - sources. - -1998-10-07 Carsten Schaar - - * main.c (main): Replaced the 'gnome_client_new_default' call with - 'gnome_master_client'. - -1998-10-02 Federico Mena Quintero - - * timeutil.c (time_day_begin): Changed name from - time_start_of_day() to be consistent with the other begin/end functions. - (time_day_end): Likewise. - - * calobj.c (ical_object_get_first_weekday): New public function to - get the first toggled day in a weekday mask. Since we do not - support multiple weekdays in a monthly-by-pos rule, we just fetch - the first toggled one. - (ical_object_generate_events): Added a missing break statement. - - * timeutil.c (time_month_end): Made it consistent with the rest of - the time begin/end functions -- now it returns the first second of - the *next* month. - (time_week_end): Actually implemented this function. It will be - used when the week view is rewritten. - - * calobj.c (time_in_range): Fix off-by-one in the comparison of - the time against the end time. - - * gncal-full-day.c (expand_space): Fixed bug where the columns not - were being expanded due to a missing "slot + j". - -1998-10-01 Federico Mena Quintero - - * month-view.c (month_view_init): Use the font #defines. - (month_view_new): Set the colors of the month view upon creation. - (mark_current_day): New function to mark the current day in the - month view. - (month_view_set): Mark the current day. - (month_view_colors_changed): Mark the current day and colorify the - month item appropriately. - - * month-view.h: Added year and month fields to the MonthView - structure. - - * main.c: Renamed the Appointments color property, since it will - be used by the month view as well. - - * goto.c (update): Set the current day's font and color. - - * year-view.c (year_view_init): Set the fonts of the month items - when creating them. - - * mark.h: Added new #defines for HEADING_FONT and TITLE_FONT. - - * year-view.c (year_view_init): Use the new font #defines. - - * prop.c (prop_apply_colors): Fixed to work with the - I-am-paranoid-and-I-need-to-size-my-ints changes to - GnomeColorPicker. - (color_spec_from_picker): Likewise. - -1998-09-30 Federico Mena Quintero - - * goto.c (create_days): Colorify the month item and prepare it for - prelighting here. - - * main.c (color_props): Changed the default colors to something - not dull. - - * year-view.c (compute_min_size): New function to compute the - minimum size of the year view properly. - (year_view_size_request): Added two new fields to the year view - structure that contain the minimum size. Return this in the - size_request method. - (year_view_new): Call compute_min_size to save the minimum size - for later use. - (idle_handler): Make it resize the items correctly. - - * gnome-month-item.c (gnome_month_item_set_arg): Reshape when - necessary. This is needed becaues we now actually calculate a - minimum size for the month item based on the font sizes and paddings. - (check_heading_sizes): New function to calculate a minimum size - based on the headings' dimensions. - (check_day_sizes): New function to calculate a minimum size based - on the day number labels' dimensions. - (check_sizes): New function that computes a minimum size for the - month item. - (reshape): Now calls check_sizes() to ensure a minimum size for - the month item. - - * year-view.c (mark_current_day): New function to mark the current - day in the year view. - - * mark.c: Removed mark_current_day from here. - -1998-09-29 Federico Mena Quintero - - * prop.c (fetch_color_spec): Changed name from fetch_prelight_spec - and made it conform to the new prelighting mechanism. - (fake_mark_days): Set the proper day attributes. - (reconfigure_month): Use colorify_month_item(). - (fake_mark_days): Use mark_month_item_index(). - - * mark.c (colorify_month_item): New public function to reset the - colors in a month item. - (get_attributes): New internal function that creates an array of - attributes for the days in a month item. This is the basis of all - the new optimizations to month item marking. - (unmark_month_item): Now it uses the attributes array to unmark - only the days that need unmarking. - (mark_event_in_month): Update the day attributes array. - (month_item_prepare_prelight): Changed the definition of the - prelight color query function. Use the new function. - (day_event): Do color changes based on the day attributes array. - (mark_month_item_index): New public function to mark a single day - by index. - (mark_event_in_month): Use mark_month_item_index(). - - * gnome-month-item.c (gnome_month_item_num2child): Now takes an - int, not a GnomeMonthItemChild. - (gnome_month_item_child2num): Now returns an int, not a - GnomeMonthItemChild. - (gnome_month_item_num2day): Now takes an int, not a - GnomeMonthItemChild. - - * goto.c (goto_dialog): Create the days before the year spin - button, because the year_changed callback expects the month item - to be created. The new semantics of the spin button cause it to - emit a value_changed signal on the adjustment upon creation -- is - this the behavior we want from it? - (goto_dialog): Use gtk_window_set_modal() instead of the - deprectaed gnome_dialog_set_modal(). - - * quick-view.c (quick_view_new): Make it look not as crappy by - putting the title inside the frame. - (quick_view_do_popup): Fixed the pointer grab and added a cursor. - (create_items_for_event): Query the text width/height from the - text item using the new object arguments, so that the size of the - popup window can be set properly. - - * year-view.c (do_quick_view_popup): Calculate a nice date string - for the popup window. - -1998-09-28 Federico Mena Quintero - - * quick-view.[ch]: New file that presents a quick view of the - events in a particular day when the mouse is clicked on the year - view. Work in progress. - - * year-view.c (do_quick_view_popup): New function that creates a - quick view for the events in a day. - - * Makefile.am (gnomecal_SOURCES): Added quick-view.[ch] to the - list of sources. - -1998-09-27 Federico Mena Quintero - - * main.c: Hotkey for File/Exit should be C-q, not C-x. - -1998-09-24 Federico Mena Quintero - - * year-view.c (do_popup_menu): New function to execute the popup - menu in the year view. - (day_event): Invoke the popup menu with the context set to days. - (new_appointment): New function to create a new appointment from - the year view. - (do_jump): New function to do the appropriate view/date jumping - from the popup menu. - - * main.c: Fixed two icons in the File menu. - -1998-09-21 Federico Mena Quintero - - * main.c: Added underlined shortcuts and accelerators to the main menu. - -1998-09-16 Raja R Harinath - - * gncal-week-view.c (): Include. - * gncal-week-view.h (): Include. - -1998-09-06 Miguel de Icaza - - * gnome-cal.c (mail_notify): Fixed the bug reported about the mail - notification not beint sent until the program was terminated. - -1998-09-03 Federico Mena Quintero - - * gncal-full-day.c (gncal_full_day_forall): Updated foreach -> - forall from Gtk changes, bleah. - - * year-view.c (day_event): New function to handle events from - days. Jumps to the day that is clicked. - - * main.c: Use a watch cursor while the previous/today/next - functions are doing their job. - - * mark.c (month_item_prepare_prelight): New public utility - function to prepare a month item for prelighting. It will store - the proper prelight information and attach the appropriate signals. - (mark_current_day): Make the current day bold as well (useful for - color-blind people, I guess). - - * prop.c (set_current_day): Reset the date in the sample calendar - and mark the current day. - (fake_mark_days): Mark fake events in the sample calendar. - - * year-view.c (year_view_set): Use the general prelighting engine. - - * goto.c (day_event): Just process button presses, as prelighting - is done behind the scenes now. - (update): Use the general prelighting engine. - - * prop.c (create_colors_page): We can now configure the colors of - the monthly calendars! Wheeeeee! There are still some nits to be - fixed, which are listed in the TODO file. - (build_color_spec): New function to build color specifications. - (parse_color_spec): New function to parse color specifications. - - * mark.c: Modified all functions to use the configured colors. - * goto.c: Likewise. - - * main.c (colors_changed): New function that notifies all - calendars that colors have changed. - - * gnome-cal.c (gnome_calendar_colors_changed): New function that - notifies all the views that the colors have changed. - - * month-view.c (month_view_colors_changed): New function that - notifies the month view that colors have changed. - - * year-view.c (year_view_colors_changed): New function that - notifies the year view that colors have changed. - - * gnome-month-item.h (struct _GnomeMonthItem): Added fields for - outline and day box colors. - - * gnome-month-item.c (gnome_month_item_set_arg): Added - outline_color, outline_color_gdk, day_box_color, and - day_box_color_gdk arguments to month items. These are convenient - to quickly set the colors of the month item. - (gnome_month_item_get_arg): Likewise. - - * main.[ch]: Added a global array of structures for color preferences. - -1998-08-31 Federico Mena Quintero - - * goto.c: Small code cleanup. - (day_event): Upon receiving a LeaveNotify event, Reset the day's - background to the correct color. - -1998-08-29 Federico Mena Quintero - - * mark.[ch]: New files with utility functions to mark calendars - with their events. - - * mark.c (mark_month_item): New public function to mark a month - item with events. - (unmark_month_item): New public function to unmark all the days in - a month item to their default appearance. - - * year-view.c (year_view_set): Use the new unmark_month_item() and - mark_month_item() to mark the months with events. - - * goto.c (update): New function that updates the calendar in the - Go-to dialog by marking the days. - - * timeutil.c (time_year_begin): Modified to take a time_t value. - (time_year_end): Likewise. - (time_month_begin): Actually implemented this function, which was - in the header file but not here. - (time_days_in_month): New public function that returns the number - of days in a month. - - * Makefile.am (gnomecal_SOURCES): Added mark.[ch] to the sources. - - * year-view.c (unmark_days): Use unmark_month_item(). - - * gncal-full-day.c (gncal_full_day_destroy): Fixed crash when - destroying the full day view. The full day's destroy method is - unusual in that it destroys the list of child widgets itself, as - it does not have a remove method, so it needs to reset the list to - NULL. - -1998-08-27 Federico Mena Quintero - - * gnome-month-item.c (build_month): Now does the correct thing - when the user wants weeks to start on Monday. Now all the Monday - special casing, as far as day numbering is concerned, is only in - this function. - - * year-view.c (mark_days): This function marks the days that have - events in them. It also fixes a memory leak in the old - implementation (it was leaking the whole list). - (unmark_days): New function used to unmark all the days in the - year view. - (mark_event): New function that marks all the days that are - spanned by a time range. It also fixes the bug in the old - implementation where it could possibly mark days past the ends of - the year (if the event crosses year boundaries, for example). - - * timeutil.c (time_year_begin): Take the year parameter since year - 1, not 1900. - (time_year_end): Likewise. - - * year-view.c (year_view_size_allocate): Now changing the size of - the calendars is done in the idle loop. - (idle_handler): This function actually does the resizing of the items. - - * year-view.h (struct _YearView): Added idle_id and need_resize - fields. - -1998-08-26 Federico Mena Quintero - - * year-view.c: Beginning of the new year view. Sizing and event - marking needs to be finished. - - * gnome-cal.c: Updated for year-view. - (gnome_calendar_time_format_changed): Use year_view_time_format_changed(). - - * year-view.[ch]: Renamed the gncal-year-view.[ch] files to - year-view.[ch]. - - * Makefile.am (gnomecal_SOURCES): Updated year-view.[ch] in the - list of source files. - -1998-08-25 Federico Mena Quintero - - * goto.c (create_days): Set the heading color of the month item. - - * main.c: Use GNOME_STOCK_PIXMAP_JUMP_TO, now that it exists, - instead of goto.xpm. Also, removed goto.xpm from cvs. - - * gnome-month-item.h (struct _GnomeMonthItem): Added fields for - the heading and day number fonts. Added fields for heading and - day number label colors. - - * gnome-month-item.c (gnome_month_item_class_init): ARG_DAY_NAMES - should be write-only. Also, added arguments for heading and day - number fonts. Added arguments for heading and day number colors. - -1998-08-24 Federico Mena Quintero - - * prop.c (build_two_radio_group): Doh. Set the state of the radio - buttons properly. - - * month-view.c (month_view_time_format_changed): New public - function that notifies the month view of a time format change. - - * gnome-cal.c (gnome_calendar_time_format_changed): New public - function that notifies the calendar of a time format change. - - * main.c (time_format_changed): Use gnome_calendar_time_format_changed(). - - * month-view.c (month_view_update): New public function to update - the month view when an event changes. This is still unfinished. - (month_view_set): New public function to set the month in the - month view. - - * gnome-cal.c (gnome_calendar_direction): Add case for month view. - (gnome_calendar_set_view): Likewise. - (gnome_calendar_update_all): Likewise. - - * timeutil.c (time_add_week): Implemented the time_add_week() - function, which was on the header file. - (time_add_month): Added public month-adding routine. - - * gnome-cal.c (gnome_calendar_get_current_view_name): Add case for - month view. - (gnome_calendar_goto): Likewise, and set the time on the month view. - - * month-view.c (month_view_new): Now it takes the calendar plus - the time_t representing the month. - - * gnome-month-item.h: Added documentation on the object arguments - for the month item. - - * month-view.c (month_view_init): Added a month/year heading to - the month view. - - * TODO: Updated the TODO list a bit. - - * main.c (gnome_cal_file_menu): The preferences menu option should - go in the File menu. - (gnome_cal_edit_menu): Added stock pixmaps to the menu items. - (gnome_cal_menu): Renamed the Calendar menu to Edit. - (gnome_cal_help_menu): Use "About Gnomecal", not just "About". - - * prop.c (hour_activated): Notify the property box that it has changed. - - * main.c: Changed the Properties menu item to Preferences. These - are global application preferences, not a single calendar's - properties. - - * prop.c (prop_apply): Save the week_starts_on_monday flag to the - configuration file. - (properties): Added a check button for weeks starting on Monday. - (properties): Beautified the Preferences dialog. - - * month-view.c (month_view_init): - * goto.c (create_days): Set the month item to start weeks on - Monday if appropriate. - - * main.c (init_calendar): A boolean is not an hour, so don't - range_check_hour() on it. - (init_calendar): Added a global week_starts_on_monday flag. - - * main.h: Added global week_starts_on_monday flag. - -1998-08-21 Miguel de Icaza - - * calobj.c (ical_object_create_from_vobject): If mail alarm or - program alarm are missing the action, then set an empty default. - -1998-08-18 Federico Mena Quintero - - * gnome-month-item.c (gnome_month_item_day2index): New public - function to get the displayed day index of the specified date. - - * gnome-cal.c (gnome_calendar_goto_today): New public function to - jump to the current day. - - * goto.c (day_event): Jump to the selected day when the user - clicks the mouse, and prelight days as appropriate. - - * timeutil.c (time_from_day): New public function to build a - time_t from a year/month/day triplet. - - * gnome-month-item.c (gnome_month_item_num2child): - (gnome_month_item_child2num): New public functions to convert an - index into a child and vice-versa, respectively. - (gnome_month_item_num2day): New public function to convert a child - number into a displayed day number. - - * goto.c (goto_dialog): Doh, use gnome-dialog properly :-) - - * gnome-month-item.c (create_items): Use g_strdup()ed day names - from the start. - -1998-08-17 Federico Mena Quintero - - * main.c (gnome_toolbar): Made it use goto.xpm. - - * Makefile.am (EXTRA_DIST): Added goto.xpm to the list of files. - -1998-08-13 Federico Mena Quintero - - * gnome-month-item.c (gnome_month_item_set_arg): Doh. Actually - recalculate the days using the month and year. - - * main.c: Added "Go to" button to quickly jump to a specific date. - - * goto.c: New file that defines the quick go-to date dialog. - - * Makefile.am (gnomecal_SOURCES): Added goto.c to the sources. - -1998-08-11 Nuno Ferreira - - * main.c (new_calendar): Made title i18n friendly. This was bug - #215. - - * eventedit.c (ee_store_recur_end_to_ical): Set recur->enddate to - recur->_enddate, not to itself, when adding recurring event and - supplying an end date. This fixes (at least part of) bug #99. - -1998-08-10 Federico Mena Quintero - - * month-view.[ch]: Start of the month view widget. This will use - the generic month item and extend it to have the semantics desired - for the gnomecal month view. - - * gnome-month-item.[ch]: New generic canvas item for the month - view and the "small calendars". This is intended to be a - high-level display engine for monthly calendars. This is a work - in progress. - - * gnome-cal.h (GnomeCalendar): Added a month_view field. - - * gnome-cal.c (setup_widgets): Create the month view and insert it - into the notebook. - - * Makefile.am: Added month-view.[ch] and gnome-month-item.[ch] to - the sources. - -1998-08-03 Federico Mena Quintero - - * main.c (about_calendar_cmd): Use an array of const strings to - keep gcc happy. - - * alarm.c (alarm_compare_by_time): Use gconstpointer to keep gcc happy. - * calendar.c (calendar_object_compare_by_start): Likewise. - * gncal-full-day.c (child_compare_by_start): Likewise. - -1998-07-07 Miguel de Icaza - - * main.c: Add support for --view flag. - (session_save_state): Save the view mode; - (new_calendar): Now takes a view mode flag. - - * gnome-cal.c (gnome_calendar_get_current_view_name): New - function for enhancing the session management support for - gnomecal. - (gnome_calendar_set_view): New function that makes a given page - active. - -1998-07-01 Nuno Ferreira - - * gncal.desktop: Added Portuguese translation. - -Mon Jun 22 13:01:16 1998 Havoc Pennington - - * main.c (session_save_state): Use gnome_geometry_string to get - the geometry string. - -1998-06-04 Federico Mena Quintero - - * eventedit.c (ee_rp_init_rule): Do not subtract 1 from - tm->tm_mday for the default_day. - - * gnome-cal.c (gnome_calendar_new): - (gnome_calendar_goto): Use the start of the day -- things expect - it to be that way. - -1998-05-27 Nuno Ferreira - - * eventedit.c (ee_store_recur_rule_to_ical): Fill in - ical->recur->interval from value in spin_button. This ixed an - infinnite loop. - -1998-05-30 Federico Mena Quintero - - * gncal-full-day.c (child_draw): Paint the decorations correctly. - (child_draw_decor): Paint the recurrence/bell icons correctly. - -1998-05-25 Miguel de Icaza - - * eventedit.c (ee_rp_init_rule): Use the contents of - ee->ical->dtstart for computing the predefined values of the recurrence. - - * gncal-full-day.c (gncal_full_day_unrealize): Fix the gc - destruction in the unrealization code and fix the pixmap unrefing. - - * main.c (close_cmd): Remove a bad hack that disabled calendar - widget destruction. - - * calobj.c (ical_object_generate_events): Fix for the weekly event - generation. Was reported on the bug tracking system. - -1998-05-18 Miguel de Icaza - - * gncal-full-day.c (layout_children): Implemented ultra-cool - layout for the events that share the same time range. Gals and - guys you can now drop Outlook on the recycle bin. - - Which reminds me. We do not have a recycle bin. How could that - happen in a project as cool as this one? Someone explain this to - me. - -1998-05-18 Federico Mena - - * gncal-full-day.c (paint_back): Eliminated unnecessary border repainting. - -Sun May 17 17:55:03 1998 Havoc Pennington - - * gncal-todo.c (simple_todo_editor): Close dialog when return is pressed. - -1998-05-15 Miguel de Icaza - - * gnome-cal.c (mark_gtk_calendar_day): Bug free version of the - range computation in place. - - * gncal-year-view.c (year_view_mark_day): Use the same new version - of the range computation here. - - * calobj.c (ical_object_generate_events): Fix the begin/end - condition. - -1998-05-14 Miguel de Icaza - - * timeutil.c (isodate_from_time_t): Do not add the spurious - padding. - - * calobj.c (store_date_list): Bug fix: I was using the wrong - pointer when saving the exception date list. - (set_date_list): Bug fix: load correctly the complete exception - date list. - (set_date_list): Use ',' for the exception date separator as the - versit people can not get their standard right. - - * gncal-full-day.c (unrecur_appointment): Support for making an - existing recurrent event `movable' for a day. - - * calobj.c (ical_object_add_exdate): New routine, used to add - exception dates. - (ical_object_duplicate): New routine: used to do the magic - recur->no-recur event. - -1998-05-08 Miguel de Icaza - - * gncal-full-day.c (new_appointment): Use gtk_calendar freeze/thaw - - * gncal-year-view.c (gncal_year_view_set_year): Use gtkcalendar freeze/thaw. - - * eventedit.c (event_editor_init): Use gnome_dialog_set_close to - avoid the ugly warning. - - * main.c (display_objedit): Default to the day the user is looking - at. - -1998-05-05 Miguel de Icaza - - * gncal-day-panel.c (full_day_size_allocated): Do not emit a value - changed signal if the value is the same. - -1998-05-04 Miguel de Icaza - - * prop.c (prop_apply): Only run the apply code once. - -1998-05-03 Miguel de Icaza - - * gncal-day-panel.c (update): Draw the day at startup. - (gncal_day_panel_set): Fix selected-day display. - (gncal_day_panel_new): Switch day on double clicks, not on single - clicks. - - * calobj.c (ical_object_compute_end): Removed debug messages. - -1998-04-30 Miguel de Icaza - - * prop.c (prop_apply): Do not call prop_cancel, ths is now using - GnomePropertyDialog. - -1998-04-29 Miguel de Icaza - - * gncal-week-view.c (sync_week): Use gnome_calendar_tag_calendar. - - * gnome-cal.c (gnome_calendar_tag_calendar): New routine used to - fill a gtk_calendar with the events on a GnomeCalendar object. - - * gncal-week-view.c (gncal_week_view_new): Set the week to the day - we double clicked. - -1998-04-28 Miguel de Icaza - - * gnome-cal.c (calendar_notify): Apply black magic to get mail - notifications to work. - - * gncal-full-day.c (child_focus_out): Temporary optimization, the - child_focus_out is constantly calling the - gnome_calendar_object_changed when the property editor has been - invoked. This happens every time the mouse moves crosses the main - window. - - * calendar.c (calendar_object_changed): Reschedule alarms when a - calendar object has changed its times. - -Sat Apr 25 22:20:45 1998 Havoc Pennington - - * eventedit.c, eventedit.h: Descend from GnomeDialog. Took vbox - out of class structure; use GnomeDialog vbox - instead. gnome_dialog_set_destroy instead of destroying in button - callbacks. Don't create buttons, separator, or vbox manually. - #include . - -1998-04-24 Miguel de Icaza - - * calobj.c (ical_object_create_from_vobject): Fixed alarm loading; - Load snooze time and snooze count - -1998-04-23 Federico Mena Quintero - - * calendar.c (calendar_save): Actually save the to-do entries. - - * gncal-todo.c (simple_todo_editor): Now you can add and edit - to-do entries. - -1998-04-22 Federico Mena Quintero - - * gncal-full-day.c: Made it use popup_menu(). - - * popup-menu.c: New file with utility functions for creating popup - menus. Maybe such a thing would be useful in libgnomeui, a la - gnome-app-helper? - - * Makefile.am (gnomecal_SOURCES): Added popup-menu.[ch] to the sources. - -1998-04-22 Miguel de Icaza - - * prop.c (properties): Added Calendar properties editor. - (properties): Make the code use a propery box. - - * main.c: Save/load properties (fix to old commit). - -1998-04-21 Federico Mena Quintero - - * gncal-todo.c: New widget for editing TODO lists. This will be - worked on a lot. - - * Makefile.am (gnomecal_SOURCES): Added gncal-todo.[ch] to the sources. - - * gncal-day-panel.c: Make it use the new TODO widget. - -1998-04-21 Miguel de Icaza - - * timeutil.c (isodate_from_time_t): Do not save with the global - time flag (Z at the end of the isodate). When we figure out a way - to load times in GMT time, we will add this back - - * view-utils.c (popup_menu): Moved this routine here as there are - more users of this code. - - * gncal-day-view.c (gncal_day_view_class_init): Add button press - handler. - (new_appointment): New routine for creating appointments on a day. - - - - * main.c (save_ok): Added call to gtk_window_set_wmclass. - - * gncal-day-panel.c (calendar_day_selected): Fix, years for mktime - should substract 1900 and gtk_calendar stores years relative to - year 0. - - * gncal-week-view.c (gncal_week_view_new): Make the week view - descend from VBox so that we can add a label to it. - (gncal_week_view_set): Display the ending day of the week - correctly. - - Added a label that displays the week range. - -1998-04-21 Federico Mena Quintero - - * gnome-cal.c: Made it use GncalDayPanel. - - * gncal-day-panel.c: New widget for the day view in the main - calendar toplevel. It basically takes care of everything - gnome-cal did by hand with respect to the day view. - - * Makefile.am (gnomecal_SOURCES): Added gncal-day-panel.[ch] to - the rules. - - * main.c: Added a separator between the About menu item and the - help topics. - -1998-04-20 Miguel de Icaza - - * eventedit.c (ee_ok): Mark the event as non-new after accepting changes. - -1998-04-20 Federico Mena Quintero - - * gncal-full-day.c (gncal_full_day_get_day_start_yoffset): New - public function that returns the y offset for the row - corresponding to the "day begin" time. - - * gncal-full-day.c (gncal_full_day_key_press): Now any printable - keystroke (not just Return) will activate the selected range. - - * gncal-full-day.c (paint_back): Made it use the new paint_row - function instead of painting everything directly. We calculate - areas in a smarter way so there is even less flicker than before, - especially when selecting regions. - - * eventedit.c: Sensitize recurrence widgets properly. - - * calobj.c (duration_callback): Pass the correct pointer type to - is_date_in_list(). - -1998-04-20 Miguel de Icaza - - * calobj.c (duration_callback): Take exception dates into - account. - - * gncal-full-day.c (new_appointment): Setup the event editor dates - to those of the currently displayed day. - (gncal_full_day_selection_range): Use sensible values in the case - no range is selected. - (new_appointment): Events now use the current day for event creation. - - * view-utils.c: Pretty up the time display. - - * calobj.c (ical_object_compute_end): Initialize - ico->recur->enddate, otherwise we loop forever during final date computation. - - * eventedit.c: Now recurrence is toggled by a radio button in the - recurrence page, as the checkbox is confusing. - - * calobj.c (is_date_in_list): Add support for the exclussion - dates. - -1998-04-18 Miguel de Icaza - - * gncal-year-view.c (double_click): Fix this routine as well. - - * gncal-week-view.c (jump_to_day): Bind the gtkcalendar signals to - the week. - - * gncal-year-view.c (gncal_year_view_set_year): Put things in the - proper range. Now the year view actually matches this year. - - * gnome-cal.html: Added small documentation. - - * main.c: Add more icons to the menus; Rename some menubar - entries; Add `new' icon to the toolbar. - (dump_events): Added argument handling and dumping of events from - the command line. Extremely cool. - - * getdate.y: Taken from the CVS source code. Used for date - parsing in the command line. - - Internationalized getdate.y. Wee! It even works with spanish. - - * calobj.c (ical_object_to_vobject): Add Quoted printable property - to items containing new lines. - (duration): Use unsigned integers, to work around buggy calendar - files generated by korganizer. - - * main.c (save_calendar_cmd): Do not ask for file name if we are - saving. - (save_as_calendar_cmd): New command. - - -1998-04-17 Miguel de Icaza - - * alarm.c (alarm_kill, alarm_init, alarm_add): Implement the alarm - management framework. - -1998-04-17 Federico Mena Quintero - - * calobj.c (ical_new): Added mandatory status property. - (ical_object_to_vobject): Only store "related" list if it exists. - (store_list): Add terminating null char and free the correct data. - - * main.c (save_calendar_cmd): Implemented calendar saving. - (open_calendar_cmd): Implemented calendar loading. - (new_calendar_cmd): Implemented calendar creation. - (new_calendar): Don't load our test calendar by default. - - * gncal-full-day.c (delete_appointment): Delete appointment implemented. - - * eventedit.c (ee_store_recur_values_to_ical): Free/create - ical's recurrence appropriately. - (ee_rp_init_rule): Initialize all missing parameters from ical. - (ee_rp_init_ending_date): Initialize missing fields from ical. - -1998-04-17 Miguel de Icaza - - * gnome-cal.c (gnome_calendar_remove_object): Add support for - removing objects. - -1998-04-17 Federico Mena Quintero - - * eventedit.c (ee_init_recurrence_page): New function that creates - the recurrence page in the toplevel notebook. - (ee_store_recur_values_to_ical): Now we can also store the recurrences. - -1998-04-17 Miguel de Icaza - - * calobj.c (ical_object_generate_events): Implement - RECUR_MONTHLY_BY_POS implemented. - (ical_object_create_from_vobject): Fix the alarm - initialization code. - (save_alarm): Save alarms. - (ical_object_generate_events): Fixed the recurrent code to take - into account the recur->endate field (if at all specified). - - (ical_object_to_vobject): Implement recurrence rule saving. - -1998-04-16 Federico Mena Quintero - - * eventedit.c (ee_store_alarm): Use menu_shell->children, not - menu->children. Why does GtkMenu have a children field in the - object structure? - (check_dates): New function that insures that start_date < end_date. - (check_times): In addition to checking whether the event spans the - whole day, now it insures that start_time < end_time. - - * gncal-full-day.c (child_set_size): Now children get bigger - temporarily while they are focused. This allows the handles not - to "overlap" the rows used by the child and thus allow editing of - very thin events. - (recompute_motion): Fix for new child coordinates. - (gncal_full_day_expose): Make it use find_child_by_window() - instead of looking for it by hand. - - * bell.xpm recur.xpm: XPM files for events with alarm and - recurrence, respectively. - -1998-04-15 Federico Mena Quintero - - * gncal-full-day.c (button_1): Preserve the up/down cursor while dragging. - - * gncal-full-day.c (child_draw): Now children have a vertical - handle as well. This can be used to move the child anytime, not - only when it is focused. - (recompute_motion): Modified for new drag behavior. - - * eventedit.c (ee_init_general_page): The general_owner may be - null. Do the proper thing when creating the label. - (ee_ok): Update the gnome calendar appropriately. - - * timeutil.h: - * gncal-year-view.h: Add some missing prototypes. - - * gncal-full-day.c (child_popup_menu): Set the sensitivity of menu - items according to whether the ical object is being edited or not. - - * eventedit.c (event_editor_new): Set the "being edited" flag on - the ical object (stored as the ical object's user data). - (event_editor_destroy): Release the flag. - - * calobj.h: The iCalObject structure now has a generic user_data pointer. - * calobj.c (ical_object_set_user_data ical_object_get_user_data): - Functions to set this data. - - * gncal-full-day.c (child_button_press): Do child popup menu correctly. - - * main.c (about_calendar_cmd): Fixed my address and added Arturo - to the authors in the about box. - - * gncal-full-day.c (find_child_by_window): Compare child's widget - windows by user_data (which will be the parent widget, that is, - the text widget). We cannot assume that child->widget->window - will be *the* window we are interested on because there may be - child widgets with multiple windows. - -1998-04-15 Miguel de Icaza - - * calobj.c (ical_foreach): Define iterator routine. - -1998-04-15 Arturo Espinosa Aldama - - * gncal-year-view.[hc]: Now using time_t for new and set. - Random fixes, as well. - -1998-04-15 Federico Mena Quintero - - * gncal-full-day.c (button_3): New popup menus activated with - mouse button 3. - (create_appointment): Create a new appointment from the popup - menus. See the FIXME. - -1998-04-15 Miguel de Icaza - - * gncal-full-day.c (layout_kill_rows): Routine to destory rows - array properly. - - * gncal-year-view.c (gncal_year_view_new): Add missing year in - call to strftime. - - * calobj.c (ical_object_create_from_vobject): Fixed memory leaks - from the return values of versit's fakeCString. - -1998-04-14 Arturo Espinosa Aldama - - * gncal-year-view.[hc]: New widget for the year view. - * Makefile.am: added required compilation of the new files. - -1998-04-14 Federico Mena Quintero - - * eventedit.c (event_editor_setup_time_frame): Fixed some table - expansions to make the dialog look nicer when resized. - - * calobj.c (ignore_space): Fixed compiler warning about unused - computed value. - (ocurrencelist): Replace str by p confusion. Removed unused - variables value and q. - (daynumber): Fixed a couple of warnings about unused values. - (load_recurrence): Removed unused variable c. Added a default - clause to the switch(type). - - * eventedit.c (ee_rp_init_frequency): Removed unused variable content. - Fixed a compiler warning by adding a missing cast. - - * calobj.c (ical_object_create_from_vobject): Make the - load_recurrence() part work correctly. Eliminated use of - syntax_error variable. - -1998-04-13 Federico Mena Quintero - - * gncal-full-day.c (child_key_press): Unfocus the child and focus - the parent fullday widget when the user presses Esc. - - * gncal-week-view.c (gncal_week_view_update): Now takes object and - flags parameters. - * gncal-day-view.c (gncal_day_view_update): Likewise. - * gncal-full-day.c (gncal_full_day_update): Likewise. - (child_focus_in): New function. In conjunction with - child_focus_out(), these only display the handles in the child - when it is focused. The result is that the user can see more of - the child's text when nothing is focused, and we can also display - fatter and nicer drag handles. - - * gnome-cal.c (gnome_calendar_object_changed): Now takes an - additional flags parameter - (gnome_calendar_update_all): Made function static. Now takes - changed object and flags parameters as well. - (gnome_calendar_object_changed): Now takes additional flags - parameter to indicate what changed in the specified object. - - * calobj.h (CalObjectChange): New enum with flags to describe what - has been changed in an object. - - * gncal-full-day.h: - * gncal-full-day.c (gncal_full_day_focus_child): New function to - let the outside world decide which child to focus. - (gncal_full_day_focus_child): Bleah. We have to synthesize a - click because GtkText will not set the cursor when you focus it. - - * gnome-cal.c (day_view_range_activated): Focus the new child in - the full day widget. - - * eventedit.c (event_editor_setup_time_frame): Re-aligned some - widgets to make it look prettier. - (ee_alarm_widgets): Likewise. - (ee_init_general_page): Likewise. - (ee_classification_widgets): Likewise. - (event_editor_init_widgets): Likewise. - - * gnome-cal.c (day_view_range_activated): Create new object and - add it to the calendar. You can now select a range in the - full-day view, hit Return, and a new event will be added at the - selected range. I still have to figure out how to focus this new child. - - * gncal-full-day.c (paint_back): Rewrote function to avoid - painting an area more than once -- eliminate flicker. - (paint_back_rows): New function that calls paint_back() only for - the area of the specified rows. - (gncal_full_day_button_press): - (gncal_full_day_button_release): - (gncal_full_day_motion): Made these functions use - paint_back_rows() instead of paint_back(), to eliminate flicker. Wheee! - -1998-04-12 Federico Mena Quintero - - * gnome-cal.c (setup_day_view): We now connect to the - range_activated signal of the fullday widget instead of catching - key presses ourselves. - (day_view_range_activated): New function that creates a new - iCalObject and inserts it into the calendar, not finished yet. - -1998-04-11 Federico Mena Quintero - - * gncal-full-day.c (get_time_from_rows): New function, calculates - a pair of time_t values from the specified start and number of rows. - - * gncal-full-day.h (GncalFullDayClass): New signal - "range_activated". It is emitted when a range is selected and the - user hits Return. - (gncal_full_day_selection_range): New function, returns the - selected range. - - * gncal-full-day.c (struct drag_info): Moved selection information - to their own fields instead of sharing the child's drag fields. - This allows us to keep the selection when a child is moved. - (recompute_motion): Made the case when (row < di->sel_click_row) - work correctly. - -1998-04-11 Miguel de Icaza - - * gnome-cal.c (gnome_calendar_goto): Add support for navigating - on the day view. - - * timeutil.c (time_start_of_day, time_end_of_day, time_day_hour): - New time manipulation functions. - - * eventedit.c (ee_rp_init_frequency): Add the different frequency - editors to a notebook. Make the notebook startup on the entry - selected recurrence type; - -1998-04-11 Federico Mena Quintero - - * gncal-full-day.c (recompute_motion): Now we support selecting a - range in the main window (by clicking+dragging). It flickers - horribly and is not perfect, but it is a start. - -1998-04-09 Federico Mena Quintero - - * gncal-full-day.c: #include - - * gncal-full-day.c (child_map): Show instead of just map the child - widget (otherwise the text widget gets confused and will not focus). - - * calobj.c (ical_object_to_vobject): Quote chars as 'x', not "x". - - * calobj.h: Added prototype for ical_object_to_vobject(). - - * gnome-cal.c (gnome_calendar_object_changed): New function. This - should be called when a calendar object is changed. - - * gncal-full-day.c (update_from_drag_info): Call - gnome_calendar_object_changed() instead of updating manually. - - * calendar.c (calendar_add_object): - (calendar_remove_object): Set the modified flag to true. - - * gncal-full-day.c (gncal_full_day_draw): Finished implementing - this function. - -1998-04-08 Raja R Harinath - - * gncal.c (update_calendar): Say `#if 0', not `#ifdef 0'. - -1998-04-07 Federico Mena Quintero - - * eventedit.c: Removed unused global variable parent_class. - - * eventedit.h: Renamed gtk_window field to window. - Made the parent_class field in the EventEditorClass structure be a - GtkWindowClass, not a gnome property box class. - Added prototype for event_editor_get_type(). - -1998-04-06 Federico Mena Quintero - - * gncal-week-view.c (gncal_week_view_new): Use the new - gtk_table_set_homogeneous() instead of setting the variable directly. - -1998-04-03 Federico Mena Quintero - - * eventedit.c (ee_create_ae): Make it return void. - (ee_alarm_widgets): Remove some unused variables. - (ee_store_alarm): Make it return void. - #include - - * eventedit.h: #include "gnome-cal.h" - - * calobj.c (list_free): Don't use g_free in the g_list_foreach. - - * calendar.h: Add prototype for calendar_load(). - - * timeutil.h: Add prototypes for time_add_*(). - - * calendar.c: - * calobj.c: - * eventedit.c: - * gnome-cal.c: #include "timeutil.h" - - * gncal-day-view.c (gncal_day_view_size_request): Make the minimum - width equal or larger to the title width. - - * main.c: #include "eventedit.h" - (main): Add a return statement. - (new_calendar): Show stuff *after* the calendar has been loaded. - - * gnome-cal.c (gnome_calendar_load): Update the day view. - (setup_widgets): Hackish setup of a day view widget - will fix later. - (gnome_calendar_init): Initialize all fields. - - * gnome-cal.h: Added day_view field. Maybe this should be changed - when the a complete day view panel is complete. - - * gncal-day-view.c (gncal_day_view_update): Draw after update, not - before. - -1998-04-06 Carsten Schaar - - * versit/.cvsignore: New file. - -Fri Apr 3 22:31:54 1998 Tom Tromey - - * calendar.c: Include . - -1998-04-03 Miguel de Icaza - - * timeutil.c (time_add_year, time_add_year, time_add_week): - Routines for time manipulation. - - * calobj.c (ical_object_destroy): Full destruction of the object. - - * eventedit.c: Finished the main event editor form; It still - lacks the details and the recurrence bits. It now adds events - and cancels. - -1998-04-03 Federico Mena Quintero - - * view-utils.c (view_utils_draw_events): The "better" format - string for strftime() wasn't better, after all :-( - -1998-04-02 Federico Mena Quintero - - * gncal-full-day.c: New full-day widget. It is still a work in - progress. It will be similar to M$ Schedule's nifty full day view - widget, but with Gtk's elegance :-) - - * Makefile.am (gnomecal_SOURCES): Added gncal-full-day.[ch] to the sources. - -1998-04-02 Miguel de Icaza - - * eventedit.c: Object editor widget. We dropped ObjEdit. - - * timeutil.c (time_from_isodate): Fix. - - * view-utils.c (view_utils_draw_events): Changed the display - formats. - -1998-04-02 Federico Mena Quintero - - * view-utils.c (view_utils_draw_events): Use better format - specifier for strftime(). - (view_utils_draw_textured_frame): Ultra-nifty function to draw - textured "metal" frames, like Netscape's handles. - -1998-04-02 Miguel de Icaza - - * gncal-day-view.c (gncal_day_view_update): Day events are now - cached inside the widget. They get initialized at this time. - - * view-utils.c (view_utils_draw_events): Use the list of events. - -1998-04-02 Federico Mena Quintero - - * gncal-day-view.c (gncal_day_view_set_shadow): New customization - function. We can't decide on a stupid border type :-) - (gncal_day_view_init): Made GTK_SHADOW_ETCHED_IN be the default - shadow type. Looks good. - -1998-04-02 Miguel de Icaza - - * main.c: New main program that uses our new datatypes and - objects. - - * calendar.c (calendar_load_from_vobject, calendar_load): - Implement loading of vCalendar objects and vCalendar files. - - * calobj.c (ical_object_create_from_vobject): Implement loading of - vCalendar event and todo objects. - - * timeutil.c (isodate_from_time_t): New function. - - * gnome-cal.c, gnome-cal.h: Implement a toplevel widget, derived - from GnomeApp. It holds all of the day views and arbitrates the - display. - -1998-04-02 Federico Mena Quintero - - * gncal-week-view.[ch]: New week view composite widget. This - provides a full week view (7 day views plus busy time display -- - the latter is currently unimplemented). - -1998-04-01 Federico Mena Quintero - - * gncal-day-view.c: New day view widget. It is intended to be a - child widget of the week view composite widget. - - * calendar.c (calendar_get_objects_in_range): - (calendar_get_events_in_range): - (calendar_get_journal_in_range): - (calendar_get_journal_in_range): These functions now take a - sort_func parameter, which is of type GCompareFunc. If the - specified value is non-NULL, it will return a sorted list. - Otherwise, it will return an unordered list. - (calendar_compare_by_dtstart): Provide a generic sorting routine - for calendar objects. - -1998-04-01 Miguel de Icaza - - * Start from scratch - -Tue Mar 31 23:46:50 1998 Tom Tromey - - * timeutil.c (format_simple_hour): `buf' now static. - -1998-03-31 Federico Mena Quintero - - * gncal.c: Removed #include "gtkcalendar.h", because it now comes - from libgnomeui. - - * Makefile.am (gncal_SOURCES): Added new source files to the rules. - - * timeutil.c (format_simple_hour): New function, formats an - hour/am_pm pair into a string of the form "3am", "12pm", "05h", - "19h", etc. It is used by the day view widget for its labels. - -1998-03-31 Craig Small - - * Now has (non working) session maangement - * Uses a clist for the dailylist like gtt - -Sat Mar 21 15:43:20 1998 Tom Tromey - - * gncal.c: Use gnome_message_box_*, not gnome_messagebox_*. - -1998-03-12 Craig Small - - * Now linked (in some horrible way) to the gtkcalendar widget. - -Sun Mar 8 16:38:10 1998 Tom Tromey - - * Makefile.am (INCLUDES): Added GNOME_INCLUDEDIR. - (gncal_LDADD): Don't include libsupport.a. - - * gncal.c (main): Use new gnome_init. - -1998-02-19 Federico Mena Quintero - - * gncal.c (main): Added app_id "gncal". - -1998-02-19 Carsten Schaar - - * Makefile.am (gncal_LDADD): Added '$(INTLLIBS)' - -1998-02-18 Raja R Harinath - - * Makefile.am (gncal_LDADD): Include `libsupport.a'. - - * calcs.c (month_atoi): Replace buggy explicit loop string compare - with strcasecmp. - (day_atoi): Likewise. - -Sun Jan 25 23:38:30 1998 Miguel de Icaza - - * menus.c: Replace "Quit" with "Exit". diff --git a/calendar/Makefile.am b/calendar/Makefile.am deleted file mode 100644 index 82accbfda5..0000000000 --- a/calendar/Makefile.am +++ /dev/null @@ -1,2 +0,0 @@ -SUBDIRS = idl cal-util pcs cal-client -#SUBDIRS = idl cal-util pcs cal-client gui conduits diff --git a/calendar/TODO b/calendar/TODO deleted file mode 100644 index 4a5dd6c6ff..0000000000 --- a/calendar/TODO +++ /dev/null @@ -1,88 +0,0 @@ -Cal-util: - -- calobj.h depends on libversit/vcc.h, because it uses a VObject for - ical_object_create_from_vobject(). This should be an internal - function in the PCS and nothing else (we do not install libversit, - so our public libraries should not depend on it). - -- Or maybe we *should* install libversit, since the addressbook code - uses it as well. - -- timeutil has a lot of crap and some namespace pollution. Clean it - up. - -PCS: - -- When loading a calendar, substitute duplicated UIDs by new ones, and - possibly print out a warning message. - ------ Old Gnomecal TODO starts here ----- - -Pilot: - -* Better support for untimed events (we have none now). - -* Hash objects based on their UIDs. - -* Add placeholders for deleted events, so that we can kill those - when syncing to the pilot. - -BUGS: - -- Recurrence end date is wrong. An event that repeats daily will not - be included in the ending date of the recurrence (off-by-one - error?). - -- X-fields (extensions) are stripped from a vCal file when it is - saved. They should be preserved. - -Features: - -- Add a calendar-week so that people know which week of the year it is - -Year view: - -- See why it is so fucking slow when opening its notebook page for the - first time. - -Month view: - -- Popup menu like in the year view. - -- Double click on a day takes you to the day view. - -- DnD of appointments to move them around. - -Week view: - -- Nice display as in the Palm Pilot. - -Day view: - -- Rewrite in terms of the canvas and make it pretty. - -Preferences: - -- BUG: 12/24 hours stuff is not consistent - I remember that on editing - new appointment you get the time-selectors always on 12-hr format - -Event editor dialog: - -- Make it figure out whether the alarm is in - minutes/hours/days/etc. (via a cascade of conditions) and set the - widgets appropriately. - -Gnome date selection widget: - -- Make the displayed date be localized properly -- use strftime(). - -General: - -- Write online help. Nice help. Lots of help. - -- If you leave the calendar running overnight, the "current day" - marker in the GnomeMonthItems does not get updated. - -- Add categories support. Color-coded categories. - -- Untimed events diff --git a/calendar/cal-client/.cvsignore b/calendar/cal-client/.cvsignore deleted file mode 100644 index 6ac95f13c4..0000000000 --- a/calendar/cal-client/.cvsignore +++ /dev/null @@ -1,17 +0,0 @@ -Makefile.in -.deps -.libs -.pure -Makefile -evolution-calendar-stubs.c -evolution-calendar-skels.c -evolution-calendar-common.c -evolution-calendar.h -evolution-calendar-common.lo -evolution-calendar-skels.lo -evolution-calendar-stubs.lo -cal-client.lo -cal-listener.lo -libcal-client.la -client-test -libcal-client-static.la \ No newline at end of file diff --git a/calendar/cal-client/Makefile.am b/calendar/cal-client/Makefile.am deleted file mode 100644 index 8a88215257..0000000000 --- a/calendar/cal-client/Makefile.am +++ /dev/null @@ -1,71 +0,0 @@ -# -# libcal-client -# - -CORBA_GENERATED = \ - evolution-calendar.h \ - evolution-calendar-common.c \ - evolution-calendar-skels.c \ - evolution-calendar-stubs.c - -idls = \ - $(srcdir)/../idl/evolution-calendar.idl - -idl_flags = `$(GNOME_CONFIG) --cflags idl` -I $(datadir)/idl - -$(CORBA_GENERATED): $(idls) - $(ORBIT_IDL) $(idl_flags) $(srcdir)/../idl/evolution-calendar.idl - -INCLUDES = \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ - -DG_LOG_DOMAIN=\"cal-client\" \ - -I$(top_srcdir)/calendar \ - -I$(srcdir) -I$(top_srcdir) \ - -I. \ - -I.. \ - -I$(top_builddir) \ - -I$(top_builddir)/libical/src/libical \ - -I$(top_srcdir)/libical/src/libical \ - $(BONOBO_GNOME_CFLAGS) - -lib_LTLIBRARIES = libcal-client.la - -libcal_clientincludedir = $(includedir)/evolution/cal-client - -libcal_client_la_SOURCES = \ - $(CORBA_GENERATED) \ - cal-client.c \ - cal-listener.c \ - cal-listener.h - -libcal_clientinclude_HEADERS = \ - cal-client.h - - -# -# make a static library for use by calendar conduit's shared library -# -noinst_LTLIBRARIES = libcal-client-static.la -libcal_client_static_la_SOURCES = $(libcal_client_la_SOURCES) -libcal_client_static_la_LDFLAGS = --all-static - - -# -# client-test program -# - -noinst_PROGRAMS = client-test - -client_test_SOURCES = \ - client-test.c - -client_test_INCLUDES = \ - $(INCLUDES) \ - -DG_LOG_DOMAIN=\"client-test\" - -client_test_LDADD = \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(top_builddir)/calendar/cal-util/libcal-util.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/libical/src/libical/libical.a \ - libcal-client.la diff --git a/calendar/cal-client/cal-client.c b/calendar/cal-client/cal-client.c deleted file mode 100644 index b038c26752..0000000000 --- a/calendar/cal-client/cal-client.c +++ /dev/null @@ -1,1396 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* Evolution calendar client - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include - -#ifdef USING_OAF -#include -#else -#include -#endif - -#include "cal-client.h" -#include "cal-listener.h" - - - -/* Loading state for the calendar client */ -typedef enum { - LOAD_STATE_NOT_LOADED, - LOAD_STATE_LOADING, - LOAD_STATE_LOADED -} LoadState; - -/* Private part of the CalClient structure */ -typedef struct { - /* Load state to avoid multiple loads */ - LoadState load_state; - - /* The calendar factory we are contacting */ - Evolution_Calendar_CalFactory factory; - - /* Our calendar listener */ - CalListener *listener; - - /* The calendar client interface object we are contacting */ - Evolution_Calendar_Cal cal; -} CalClientPrivate; - - - -/* Signal IDs */ -enum { - CAL_LOADED, - OBJ_UPDATED, - OBJ_REMOVED, - LAST_SIGNAL -}; - -static void cal_client_class_init (CalClientClass *class); -static void cal_client_init (CalClient *client); -static void cal_client_destroy (GtkObject *object); - -static guint cal_client_signals[LAST_SIGNAL]; - -static GtkObjectClass *parent_class; - - - -/** - * cal_client_get_type: - * @void: - * - * Registers the #CalClient class if necessary, and returns the type ID assigned - * to it. - * - * Return value: The type ID of the #CalClient class. - **/ -GtkType -cal_client_get_type (void) -{ - static GtkType cal_client_type = 0; - - if (!cal_client_type) { - static const GtkTypeInfo cal_client_info = { - "CalClient", - sizeof (CalClient), - sizeof (CalClientClass), - (GtkClassInitFunc) cal_client_class_init, - (GtkObjectInitFunc) cal_client_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_client_type = gtk_type_unique (GTK_TYPE_OBJECT, &cal_client_info); - } - - return cal_client_type; -} - -/* Class initialization function for the calendar client */ -static void -cal_client_class_init (CalClientClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (GTK_TYPE_OBJECT); - - cal_client_signals[CAL_LOADED] = - gtk_signal_new ("cal_loaded", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalClientClass, cal_loaded), - gtk_marshal_NONE__ENUM, - GTK_TYPE_NONE, 1, - GTK_TYPE_ENUM); - cal_client_signals[OBJ_UPDATED] = - gtk_signal_new ("obj_updated", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalClientClass, obj_updated), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - cal_client_signals[OBJ_REMOVED] = - gtk_signal_new ("obj_removed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalClientClass, obj_removed), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - - gtk_object_class_add_signals (object_class, cal_client_signals, LAST_SIGNAL); - - object_class->destroy = cal_client_destroy; -} - -/* Object initialization function for the calendar client */ -static void -cal_client_init (CalClient *client) -{ - CalClientPrivate *priv; - - priv = g_new0 (CalClientPrivate, 1); - client->priv = priv; - - priv->factory = CORBA_OBJECT_NIL; - priv->load_state = LOAD_STATE_NOT_LOADED; -} - -/* Gets rid of the factory that a client knows about */ -static void -destroy_factory (CalClient *client) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - int result; - - priv = client->priv; - - CORBA_exception_init (&ev); - result = CORBA_Object_is_nil (priv->factory, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("destroy_factory(): could not see if the factory was nil"); - priv->factory = CORBA_OBJECT_NIL; - CORBA_exception_free (&ev); - return; - } - CORBA_exception_free (&ev); - - if (result) - return; - - CORBA_exception_init (&ev); - CORBA_Object_release (priv->factory, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("destroy_factory(): could not release the factory"); - - CORBA_exception_free (&ev); - priv->factory = CORBA_OBJECT_NIL; -} - -/* Gets rid of the listener that a client knows about */ -static void -destroy_listener (CalClient *client) -{ - CalClientPrivate *priv; - - priv = client->priv; - - if (!priv->listener) - return; - - bonobo_object_unref (BONOBO_OBJECT (priv->listener)); - priv->listener = NULL; -} - -/* Gets rid of the calendar client interface object that a client knows about */ -static void -destroy_cal (CalClient *client) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - int result; - - priv = client->priv; - - CORBA_exception_init (&ev); - result = CORBA_Object_is_nil (priv->cal, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("destroy_cal(): could not see if the " - "calendar client interface object was nil"); - priv->cal = CORBA_OBJECT_NIL; - CORBA_exception_free (&ev); - return; - } - CORBA_exception_free (&ev); - - if (result) - return; - - CORBA_exception_init (&ev); - Evolution_Calendar_Cal_unref (priv->cal, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("destroy_cal(): could not unref the calendar client interface object"); - - CORBA_exception_free (&ev); - - CORBA_exception_init (&ev); - CORBA_Object_release (priv->cal, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("destroy_cal(): could not release the calendar client interface object"); - - CORBA_exception_free (&ev); - priv->cal = CORBA_OBJECT_NIL; - -} - -/* Destroy handler for the calendar client */ -static void -cal_client_destroy (GtkObject *object) -{ - CalClient *client; - CalClientPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_CLIENT (object)); - - client = CAL_CLIENT (object); - priv = client->priv; - - destroy_factory (client); - destroy_listener (client); - destroy_cal (client); - - priv->load_state = LOAD_STATE_NOT_LOADED; - - g_free (priv); - client->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* Signal handlers for the listener's signals */ - -/* Handle the cal_loaded signal from the listener */ -static void -cal_loaded_cb (CalListener *listener, - Evolution_Calendar_Listener_LoadStatus status, - Evolution_Calendar_Cal cal, - gpointer data) -{ - CalClient *client; - CalClientPrivate *priv; - CORBA_Environment ev; - Evolution_Calendar_Cal cal_copy; - CalClientLoadStatus client_status; - - client = CAL_CLIENT (data); - priv = client->priv; - - g_assert (priv->load_state == LOAD_STATE_LOADING); - - client_status = CAL_CLIENT_LOAD_ERROR; - - switch (status) { - case Evolution_Calendar_Listener_SUCCESS: - CORBA_exception_init (&ev); - cal_copy = CORBA_Object_duplicate (cal, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_loaded(): could not duplicate the calendar client interface"); - CORBA_exception_free (&ev); - goto error; - } - CORBA_exception_free (&ev); - - priv->cal = cal_copy; - priv->load_state = LOAD_STATE_LOADED; - - client_status = CAL_CLIENT_LOAD_SUCCESS; - goto out; - - case Evolution_Calendar_Listener_ERROR: - client_status = CAL_CLIENT_LOAD_ERROR; - goto error; - - case Evolution_Calendar_Listener_IN_USE: - client_status = CAL_CLIENT_LOAD_IN_USE; - goto error; - - case Evolution_Calendar_Listener_METHOD_NOT_SUPPORTED: - client_status = CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED; - goto error; - - default: - g_assert_not_reached (); - } - - error: - - bonobo_object_unref (BONOBO_OBJECT (priv->listener)); - priv->listener = NULL; - priv->load_state = LOAD_STATE_NOT_LOADED; - - out: - - g_assert (priv->load_state != LOAD_STATE_LOADING); - - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[CAL_LOADED], - client_status); -} - -/* Handle the obj_updated signal from the listener */ -static void -obj_updated_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) -{ - CalClient *client; - - client = CAL_CLIENT (data); - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_UPDATED], uid); -} - -/* Handle the obj_removed signal from the listener */ -static void -obj_removed_cb (CalListener *listener, const Evolution_Calendar_CalObjUID uid, gpointer data) -{ - CalClient *client; - - client = CAL_CLIENT (data); - gtk_signal_emit (GTK_OBJECT (client), cal_client_signals[OBJ_REMOVED], uid); -} - - - -/** - * cal_client_construct: - * @client: A calendar client. - * - * Constructs a calendar client object by contacting the calendar factory of the - * calendar server. - * - * Return value: The same object as the @client argument, or NULL if the - * calendar factory could not be contacted. - **/ -CalClient * -cal_client_construct (CalClient *client) -{ - CalClientPrivate *priv; - Evolution_Calendar_CalFactory factory, factory_copy; - CORBA_Environment ev; - int result; - - CORBA_exception_init (&ev); - g_return_val_if_fail (client != NULL, NULL); - g_return_val_if_fail (IS_CAL_CLIENT (client), NULL); - - priv = client->priv; - -#ifdef USING_OAF - factory = (Evolution_Calendar_CalFactory) oaf_activate_from_id ( - "OAFIID:evolution:calendar-factory:1c915858-ece3-4a6f-9d81-ea0f108a9554", - OAF_FLAG_NO_LOCAL, NULL, &ev); -#else - factory = (Evolution_Calendar_CalFactory) goad_server_activate_with_id ( - NULL, - "evolution:calendar-factory", - GOAD_ACTIVATE_REMOTE, - NULL); -#endif - - result = CORBA_Object_is_nil (factory, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_construct(): could not see if the factory is NIL"); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); - - if (result) { - g_message ("cal_client_construct(): could not contact Wombat, " - "the personal calendar server"); - return NULL; - } - - CORBA_exception_init (&ev); - factory_copy = CORBA_Object_duplicate (factory, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_construct(): could not duplicate the calendar factory"); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); - - priv->factory = factory_copy; - return client; -} - -/** - * cal_client_new: - * - * Creates a new calendar client. It should be initialized by calling - * cal_client_load_calendar() or cal_client_create_calendar(). - * - * Return value: A newly-created calendar client, or NULL if the client could - * not be constructed because it could not contact the calendar server. - **/ -CalClient * -cal_client_new (void) -{ - CalClient *client; - - client = gtk_type_new (CAL_CLIENT_TYPE); - - if (!cal_client_construct (client)) { - g_message ("cal_client_new(): could not construct the calendar client"); - gtk_object_unref (GTK_OBJECT (client)); - return NULL; - } - - return client; -} - -/* Issues a load or create request */ -static gboolean -load_or_create (CalClient *client, const char *str_uri, gboolean load) -{ - CalClientPrivate *priv; - Evolution_Calendar_Listener corba_listener; - CORBA_Environment ev; - - g_return_val_if_fail (client != NULL, FALSE); - g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_NOT_LOADED, FALSE); - - g_return_val_if_fail (str_uri != NULL, FALSE); - - priv->listener = cal_listener_new (); - if (!priv->listener) { - g_message ("load_or_create(): could not create the listener"); - return FALSE; - } - - gtk_signal_connect (GTK_OBJECT (priv->listener), "cal_loaded", - GTK_SIGNAL_FUNC (cal_loaded_cb), - client); - gtk_signal_connect (GTK_OBJECT (priv->listener), "obj_updated", - GTK_SIGNAL_FUNC (obj_updated_cb), - client); - gtk_signal_connect (GTK_OBJECT (priv->listener), "obj_removed", - GTK_SIGNAL_FUNC (obj_removed_cb), - client); - - corba_listener = (Evolution_Calendar_Listener) bonobo_object_corba_objref ( - BONOBO_OBJECT (priv->listener)); - - CORBA_exception_init (&ev); - - priv->load_state = LOAD_STATE_LOADING; - - if (load) - Evolution_Calendar_CalFactory_load (priv->factory, str_uri, corba_listener, &ev); - else - Evolution_Calendar_CalFactory_create (priv->factory, str_uri, corba_listener, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("load_or_create(): load/create request failed"); - bonobo_object_unref (BONOBO_OBJECT (priv->listener)); - priv->listener = NULL; - priv->load_state = LOAD_STATE_NOT_LOADED; - CORBA_exception_free (&ev); - return FALSE; - } - CORBA_exception_free (&ev); - - return TRUE; -} - -/** - * cal_client_load_calendar: - * @client: A calendar client. - * @str_uri: URI of calendar to load. - * - * Makes a calendar client initiate a request to load a calendar. The calendar - * client will emit the "cal_loaded" signal when the response from the server is - * received. - * - * Return value: TRUE on success, FALSE on failure to issue the load request. - **/ -gboolean -cal_client_load_calendar (CalClient *client, const char *str_uri) -{ - return load_or_create (client, str_uri, TRUE); -} - -/** - * cal_client_create_calendar: - * @client: A calendar client. - * @str_uri: URI that will contain the calendar data. - * - * Makes a calendar client initiate a request to create a new calendar. The - * calendar client will emit the "cal_loaded" signal when the response from the - * server is received. - * - * Return value: TRUE on success, FALSE on failure to issue the create request. - **/ -gboolean -cal_client_create_calendar (CalClient *client, const char *str_uri) -{ - return load_or_create (client, str_uri, FALSE); -} - -/* Converts our representation of a calendar component type into its CORBA representation */ -static Evolution_Calendar_CalObjType -corba_obj_type (CalObjType type) -{ - return (((type & CALOBJ_TYPE_EVENT) ? Evolution_Calendar_TYPE_EVENT : 0) - | ((type & CALOBJ_TYPE_TODO) ? Evolution_Calendar_TYPE_TODO : 0) - | ((type & CALOBJ_TYPE_JOURNAL) ? Evolution_Calendar_TYPE_JOURNAL : 0)); -} - -/** - * cal_client_get_n_objects: - * @client: A calendar client. - * @type: Type of objects that will be counted. - * - * Counts the number of calendar components of the specified @type. This can be - * used to count how many events, to-dos, or journals there are, for example. - * - * Return value: Number of components. - **/ -int -cal_client_get_n_objects (CalClient *client, CalObjType type) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - int n; - int t; - - g_return_val_if_fail (client != NULL, -1); - g_return_val_if_fail (IS_CAL_CLIENT (client), -1); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, -1); - - t = corba_obj_type (type); - - CORBA_exception_init (&ev); - n = Evolution_Calendar_Cal_get_n_objects (priv->cal, t, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_n_objects(): could not get the number of objects"); - CORBA_exception_free (&ev); - return -1; - } - - CORBA_exception_free (&ev); - return n; -} - -/** - * cal_client_get_object: - * @client: A calendar client. - * @uid: Unique identifier for a calendar component. - * @comp: Return value for the calendar component object. - * - * Queries a calendar for a calendar component object based on its unique - * identifier. - * - * Return value: Result code based on the status of the operation. - **/ -CalClientGetStatus -cal_client_get_object (CalClient *client, const char *uid, CalComponent **comp) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - Evolution_Calendar_CalObj calobj_str; - CalClientGetStatus retval; - icalcomponent *icalcomp; - - g_return_val_if_fail (client != NULL, CAL_CLIENT_GET_NOT_FOUND); - g_return_val_if_fail (IS_CAL_CLIENT (client), CAL_CLIENT_GET_NOT_FOUND); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, CAL_CLIENT_GET_NOT_FOUND); - - g_return_val_if_fail (uid != NULL, CAL_CLIENT_GET_NOT_FOUND); - g_return_val_if_fail (comp != NULL, CAL_CLIENT_GET_NOT_FOUND); - - retval = CAL_CLIENT_GET_NOT_FOUND; - *comp = NULL; - - CORBA_exception_init (&ev); - calobj_str = Evolution_Calendar_Cal_get_object (priv->cal, (char *) uid, &ev); - - if (ev._major == CORBA_USER_EXCEPTION - && strcmp (CORBA_exception_id (&ev), ex_Evolution_Calendar_Cal_NotFound) == 0) - goto out; - else if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_object(): could not get the object"); - goto out; - } - - icalcomp = icalparser_parse_string (calobj_str); - CORBA_free (calobj_str); - - if (!icalcomp) { - retval = CAL_CLIENT_GET_SYNTAX_ERROR; - goto out; - } - - *comp = cal_component_new (); - if (!cal_component_set_icalcomponent (*comp, icalcomp)) { - icalcomponent_free (icalcomp); - gtk_object_unref (GTK_OBJECT (*comp)); - *comp = NULL; - - retval = CAL_CLIENT_GET_SYNTAX_ERROR; - goto out; - } - - retval = CAL_CLIENT_GET_SUCCESS; - - out: - - CORBA_exception_free (&ev); - return retval; -} - -CalClientGetStatus -cal_client_get_uid_by_pilot_id (CalClient *client, - unsigned long pilot_id, - char **uid) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - CalClientGetStatus retval; - char *uid_str; - - g_return_val_if_fail (client != NULL, CAL_CLIENT_GET_NOT_FOUND); - g_return_val_if_fail (IS_CAL_CLIENT (client), - CAL_CLIENT_GET_NOT_FOUND); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, - CAL_CLIENT_GET_NOT_FOUND); - - retval = CAL_CLIENT_GET_NOT_FOUND; - *uid = NULL; - - CORBA_exception_init (&ev); - uid_str = Evolution_Calendar_Cal_get_uid_by_pilot_id (priv->cal, pilot_id, &ev); - - if (ev._major == CORBA_USER_EXCEPTION && - strcmp (CORBA_exception_id (&ev), - ex_Evolution_Calendar_Cal_NotFound) == 0) - goto out; - else if (ev._major != CORBA_NO_EXCEPTION) { - //g_message ("cal_client_get_object(): could not get the object"); - goto out; - } - - if (uid_str) { - retval = CAL_CLIENT_GET_SUCCESS; - (*uid) = g_strdup (uid_str); - CORBA_free (uid_str); - } - - out: - - CORBA_exception_free (&ev); - return retval; -} - - - -void cal_client_update_pilot_id (CalClient *client, char *uid, - unsigned long pilot_id, - unsigned long pilot_status) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - - g_return_if_fail (client != NULL); - g_return_if_fail (IS_CAL_CLIENT (client)); - - priv = client->priv; - g_return_if_fail (priv->load_state == LOAD_STATE_LOADED); - - CORBA_exception_init (&ev); - Evolution_Calendar_Cal_update_pilot_id (priv->cal, uid, - pilot_id, pilot_status, - &ev); - - CORBA_exception_free (&ev); -} - -/* Builds an UID list out of a CORBA UID sequence */ -static GList * -build_uid_list (Evolution_Calendar_CalObjUIDSeq *seq) -{ - GList *uids; - int i; - - uids = NULL; - - for (i = 0; i < seq->_length; i++) - uids = g_list_prepend (uids, g_strdup (seq->_buffer[i])); - - return uids; -} - -/** - * cal_client_get_uids: - * @client: A calendar client. - * @type: Bitmask with types of objects to return. - * - * Queries a calendar for a list of unique identifiers corresponding to calendar - * objects whose type matches one of the types specified in the @type flags. - * - * Return value: A list of strings that are the sought UIDs. - **/ -GList * -cal_client_get_uids (CalClient *client, CalObjType type) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - Evolution_Calendar_CalObjUIDSeq *seq; - int t; - GList *uids; - - g_return_val_if_fail (client != NULL, NULL); - g_return_val_if_fail (IS_CAL_CLIENT (client), NULL); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, NULL); - - t = corba_obj_type (type); - - CORBA_exception_init (&ev); - - seq = Evolution_Calendar_Cal_get_uids (priv->cal, t, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_uids(): could not get the list of UIDs"); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - uids = build_uid_list (seq); - CORBA_free (seq); - - return uids; -} - -/* FIXME: Not used? */ -#if 0 -/* Builds a GList of CalObjInstance structures from the CORBA sequence */ -static GList * -build_object_instance_list (Evolution_Calendar_CalObjInstanceSeq *seq) -{ - GList *list; - int i; - - /* Create the list in reverse order */ - - list = NULL; - for (i = 0; i < seq->_length; i++) { - Evolution_Calendar_CalObjInstance *corba_icoi; - CalObjInstance *icoi; - - corba_icoi = &seq->_buffer[i]; - icoi = g_new (CalObjInstance, 1); - - icoi->uid = g_strdup (corba_icoi->uid); - icoi->start = corba_icoi->start; - icoi->end = corba_icoi->end; - - list = g_list_prepend (list, icoi); - } - - list = g_list_reverse (list); - return list; -} -#endif - -/** - * cal_client_get_objects_in_range: - * @client: A calendar client. - * @type: Bitmask with types of objects to return. - * @start: Start time for query. - * @end: End time for query. - * - * Queries a calendar for the objects that occur or recur in the specified range - * of time. - * - * Return value: A list of UID strings. This should be freed using the - * cal_obj_uid_list_free() function. - **/ -GList * -cal_client_get_objects_in_range (CalClient *client, CalObjType type, time_t start, time_t end) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - Evolution_Calendar_CalObjUIDSeq *seq; - GList *uids; - int t; - - g_return_val_if_fail (client != NULL, NULL); - g_return_val_if_fail (IS_CAL_CLIENT (client), NULL); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, NULL); - - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - CORBA_exception_init (&ev); - - t = corba_obj_type (type); - - seq = Evolution_Calendar_Cal_get_objects_in_range (priv->cal, t, start, end, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_objects_in_range(): could not get the objects"); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); - - uids = build_uid_list (seq); - CORBA_free (seq); - - return uids; -} - -/* Callback used when an object is updated and we must update the copy we have */ -static void -generate_instances_obj_updated_cb (CalClient *client, const char *uid, gpointer data) -{ - GHashTable *uid_comp_hash; - CalComponent *comp; - CalClientGetStatus status; - const char *comp_uid; - - uid_comp_hash = data; - - comp = g_hash_table_lookup (uid_comp_hash, uid); - if (!comp) - /* OK, so we don't care about new objects that may indeed be in - * the requested time range. We only care about the ones that - * were returned by the first query to - * cal_client_get_objects_in_range(). - */ - return; - - g_hash_table_remove (uid_comp_hash, uid); - gtk_object_unref (GTK_OBJECT (comp)); - - status = cal_client_get_object (client, uid, &comp); - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - /* The hash key comes from the component's internal data */ - cal_component_get_uid (comp, &comp_uid); - g_hash_table_insert (uid_comp_hash, (char *) comp_uid, comp); - break; - - case CAL_CLIENT_GET_NOT_FOUND: - /* No longer in the server, too bad */ - break; - - case CAL_CLIENT_GET_SYNTAX_ERROR: - g_message ("obj_updated_cb(): Syntax error when getting " - "object `%s'; ignoring...", uid); - break; - - } -} - -/* Callback used when an object is removed and we must delete the copy we have */ -static void -generate_instances_obj_removed_cb (CalClient *client, const char *uid, gpointer data) -{ - GHashTable *uid_comp_hash; - CalComponent *comp; - - uid_comp_hash = data; - - comp = g_hash_table_lookup (uid_comp_hash, uid); - if (!comp) - return; - - g_hash_table_remove (uid_comp_hash, uid); - gtk_object_unref (GTK_OBJECT (comp)); -} - -/* Adds a component to the list; called from g_hash_table_foreach() */ -static void -add_component (gpointer key, gpointer value, gpointer data) -{ - CalComponent *comp; - GList **list; - - comp = CAL_COMPONENT (value); - list = data; - - *list = g_list_prepend (*list, comp); -} - -/* Gets a list of components that recur within the specified range of time. It - * ensures that the resulting list of CalComponent objects contains only objects - * that are actually in the server at the time the initial - * cal_client_get_objects_in_range() query ends. - */ -static GList * -get_objects_atomically (CalClient *client, CalObjType type, time_t start, time_t end) -{ - GList *uids; - GHashTable *uid_comp_hash; - GList *objects; - guint obj_updated_id; - guint obj_removed_id; - GList *l; - - uids = cal_client_get_objects_in_range (client, type, start, end); - - uid_comp_hash = g_hash_table_new (g_str_hash, g_str_equal); - - /* While we are getting the actual object data, keep track of changes */ - - obj_updated_id = gtk_signal_connect (GTK_OBJECT (client), "obj_updated", - GTK_SIGNAL_FUNC (generate_instances_obj_updated_cb), - uid_comp_hash); - - obj_removed_id = gtk_signal_connect (GTK_OBJECT (client), "obj_removed", - GTK_SIGNAL_FUNC (generate_instances_obj_removed_cb), - uid_comp_hash); - - /* Get the objects */ - - for (l = uids; l; l = l->next) { - CalComponent *comp; - CalClientGetStatus status; - char *uid; - const char *comp_uid; - - uid = l->data; - - status = cal_client_get_object (client, uid, &comp); - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - /* The hash key comes from the component's internal data - * instead of the duped UID from the list of UIDS. - */ - cal_component_get_uid (comp, &comp_uid); - g_hash_table_insert (uid_comp_hash, (char *) comp_uid, comp); - break; - - case CAL_CLIENT_GET_NOT_FOUND: - /* Object disappeared from the server, so don't log it */ - break; - - case CAL_CLIENT_GET_SYNTAX_ERROR: - g_message ("get_objects_atomically(): Syntax error when getting " - "object `%s'; ignoring...", uid); - break; - - default: - g_assert_not_reached (); - } - } - - cal_obj_uid_list_free (uids); - - /* Now our state is consistent with the server, so disconnect from the - * notification signals and generate the final list of components. - */ - - gtk_signal_disconnect (GTK_OBJECT (client), obj_updated_id); - gtk_signal_disconnect (GTK_OBJECT (client), obj_removed_id); - - objects = NULL; - g_hash_table_foreach (uid_comp_hash, add_component, &objects); - g_hash_table_destroy (uid_comp_hash); - - return objects; -} - -struct comp_instance { - CalComponent *comp; - time_t start; - time_t end; -}; - -/* Called from cal_recur_generate_instances(); adds an instance to the list */ -static gboolean -add_instance (CalComponent *comp, time_t start, time_t end, gpointer data) -{ - GList **list; - struct comp_instance *ci; - - list = data; - - ci = g_new (struct comp_instance, 1); - - ci->comp = comp; - gtk_object_ref (GTK_OBJECT (ci->comp)); - - ci->start = start; - ci->end = end; - - return TRUE; -} - -/* Used from g_list_sort(); compares two struct comp_instance structures */ -static gint -compare_comp_instance (gconstpointer a, gconstpointer b) -{ - const struct comp_instance *cia, *cib; - time_t diff; - - cia = a; - cib = b; - - diff = cia->start - cib->start; - return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; -} - -/** - * cal_client_generate_instances: - * @client: A calendar client. - * @type: Bitmask with types of objects to return. - * @start: Start time for query. - * @end: End time for query. - * @cb: Callback for each generated instance. - * @cb_data: Closure data for the callback. - * - * Does a combination of cal_client_get_objects_in_range() and - * cal_recur_generate_instances(). It fetches the list of objects in an atomic - * way so that the generated instances are actually in the server at the time - * the initial cal_client_get_objects_in_range() query ends. - * - * The callback function should do a gtk_object_ref() of the calendar component - * it gets passed if it intends to keep it around. - **/ -void -cal_client_generate_instances (CalClient *client, CalObjType type, - time_t start, time_t end, - CalRecurInstanceFn cb, gpointer cb_data) -{ - CalClientPrivate *priv; - GList *objects; - GList *instances; - GList *l; - - g_return_if_fail (client != NULL); - g_return_if_fail (IS_CAL_CLIENT (client)); - - priv = client->priv; - g_return_if_fail (priv->load_state == LOAD_STATE_LOADED); - - g_return_if_fail (start != -1 && end != -1); - g_return_if_fail (start <= end); - g_return_if_fail (cb != NULL); - - /* Generate objects */ - - objects = get_objects_atomically (client, type, start, end); - instances = NULL; - - for (l = objects; l; l = l->next) { - CalComponent *comp; - - comp = l->data; - cal_recur_generate_instances (comp, start, end, add_instance, &instances); - } - - g_list_free (objects); - - /* Generate instances and spew them out */ - - instances = g_list_sort (instances, compare_comp_instance); - - for (l = instances; l; l = l->next) { - struct comp_instance *ci; - gboolean result; - - ci = l->data; - - result = (* cb) (ci->comp, ci->start, ci->end, cb_data); - - if (!result) - break; - } - - /* Clean up */ - - for (l = instances; l; l = l->next) { - struct comp_instance *ci; - - ci = l->data; - gtk_object_unref (GTK_OBJECT (ci->comp)); - g_free (ci); - } - - g_list_free (instances); -} - - -#if 0 -/* Translates the CORBA representation of an AlarmType */ -static enum AlarmType -uncorba_alarm_type (Evolution_Calendar_AlarmType corba_type) -{ - switch (corba_type) { - case Evolution_Calendar_MAIL: - return ALARM_MAIL; - - case Evolution_Calendar_PROGRAM: - return ALARM_PROGRAM; - - case Evolution_Calendar_DISPLAY: - return ALARM_DISPLAY; - - case Evolution_Calendar_AUDIO: - return ALARM_AUDIO; - - default: - g_assert_not_reached (); - return ALARM_DISPLAY; - } -} -#endif - -/* Builds a GList of CalAlarmInstance structures from the CORBA sequence */ -static GList * -build_alarm_instance_list (Evolution_Calendar_CalAlarmInstanceSeq *seq) -{ - GList *list; - int i; - - /* Create the list in reverse order */ - - list = NULL; - for (i = 0; i < seq->_length; i++) { - Evolution_Calendar_CalAlarmInstance *corba_ai; - CalAlarmInstance *ai; - - corba_ai = &seq->_buffer[i]; - ai = g_new (CalAlarmInstance, 1); - - ai->uid = g_strdup (corba_ai->uid); -#if 0 - ai->type = uncorba_alarm_type (corba_ai->type); -#endif - ai->trigger = corba_ai->trigger; - ai->occur = corba_ai->occur; - - list = g_list_prepend (list, ai); - } - - list = g_list_reverse (list); - return list; -} - -/** - * cal_client_get_alarms_in_range: - * @client: A calendar client. - * @start: Start time for query. - * @end: End time for query. - * - * Queries a calendar for the alarms that trigger in the specified range of - * time. - * - * Return value: A list of #CalAlarmInstance structures. - **/ -GList * -cal_client_get_alarms_in_range (CalClient *client, time_t start, time_t end) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - Evolution_Calendar_CalAlarmInstanceSeq *seq; - GList *alarms; - - g_return_val_if_fail (client != NULL, NULL); - g_return_val_if_fail (IS_CAL_CLIENT (client), NULL); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, NULL); - - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - CORBA_exception_init (&ev); - - seq = Evolution_Calendar_Cal_get_alarms_in_range (priv->cal, start, end, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_alarms_in_range(): could not get the alarm range"); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); - - alarms = build_alarm_instance_list (seq); - CORBA_free (seq); - - return alarms; -} - -/** - * cal_client_get_alarms_for_object: - * @client: A calendar client. - * @uid: Unique identifier for a calendar object. - * @start: Start time for query. - * @end: End time for query. - * @alarms: Return value for the list of alarm instances. - * - * Queries a calendar for the alarms of a particular object that trigger in the - * specified range of time. - * - * Return value: TRUE on success, FALSE if the object was not found. - **/ -gboolean -cal_client_get_alarms_for_object (CalClient *client, const char *uid, - time_t start, time_t end, - GList **alarms) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - Evolution_Calendar_CalAlarmInstanceSeq *seq; - gboolean retval; - - g_return_val_if_fail (client != NULL, FALSE); - g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (start != -1 && end != -1, FALSE); - g_return_val_if_fail (start <= end, FALSE); - g_return_val_if_fail (alarms != NULL, FALSE); - - *alarms = NULL; - retval = FALSE; - - CORBA_exception_init (&ev); - - seq = Evolution_Calendar_Cal_get_alarms_for_object (priv->cal, (char *) uid, start, end, &ev); - if (ev._major == CORBA_USER_EXCEPTION - && strcmp (CORBA_exception_id (&ev), ex_Evolution_Calendar_Cal_NotFound) == 0) - goto out; - else if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_get_alarms_for_object(): could not get the alarm range"); - goto out; - } - - retval = TRUE; - *alarms = build_alarm_instance_list (seq); - CORBA_free (seq); - - out: - CORBA_exception_free (&ev); - return retval; - -} - -/** - * cal_client_update_object: - * @client: A calendar client. - * @comp: A calendar component object. - * - * Asks a calendar to update a component. Any existing component with the - * specified component's UID will be replaced. The client program should not - * assume that the object is actually in the server's storage until it has - * received the "obj_updated" notification signal. - * - * Return value: TRUE on success, FALSE on specifying an invalid component. - **/ -gboolean -cal_client_update_object (CalClient *client, CalComponent *comp) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - gboolean retval; - char *obj_string; - const char *uid; - - g_return_val_if_fail (client != NULL, FALSE); - g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, FALSE); - - g_return_val_if_fail (comp != NULL, FALSE); - - retval = FALSE; - - cal_component_commit_sequence (comp); - obj_string = cal_component_get_as_string (comp); - - cal_component_get_uid (comp, &uid); - - CORBA_exception_init (&ev); - Evolution_Calendar_Cal_update_object (priv->cal, (char *) uid, obj_string, &ev); - g_free (obj_string); - - if (ev._major == CORBA_USER_EXCEPTION && - strcmp (CORBA_exception_id (&ev), ex_Evolution_Calendar_Cal_InvalidObject) == 0) - goto out; - else if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_update_object(): could not update the object"); - goto out; - } - - retval = TRUE; - - out: - CORBA_exception_free (&ev); - return retval; -} - -gboolean -cal_client_remove_object (CalClient *client, const char *uid) -{ - CalClientPrivate *priv; - CORBA_Environment ev; - gboolean retval; - - g_return_val_if_fail (client != NULL, FALSE); - g_return_val_if_fail (IS_CAL_CLIENT (client), FALSE); - - priv = client->priv; - g_return_val_if_fail (priv->load_state == LOAD_STATE_LOADED, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - - retval = FALSE; - - CORBA_exception_init (&ev); - Evolution_Calendar_Cal_remove_object (priv->cal, (char *) uid, &ev); - - if (ev._major == CORBA_USER_EXCEPTION && - strcmp (CORBA_exception_id (&ev), ex_Evolution_Calendar_Cal_NotFound) == 0) - goto out; - else if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_client_remove_object(): could not remove the object"); - goto out; - } - - retval = TRUE; - - out: - CORBA_exception_free (&ev); - return retval; -} diff --git a/calendar/cal-client/cal-client.h b/calendar/cal-client/cal-client.h deleted file mode 100644 index 24cc170350..0000000000 --- a/calendar/cal-client/cal-client.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Evolution calendar client - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_CLIENT_H -#define CAL_CLIENT_H - -#include -#include -#include -#include - -BEGIN_GNOME_DECLS - - - -#define CAL_CLIENT_TYPE (cal_client_get_type ()) -#define CAL_CLIENT(obj) (GTK_CHECK_CAST ((obj), CAL_CLIENT_TYPE, CalClient)) -#define CAL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_CLIENT_TYPE, CalClientClass)) -#define IS_CAL_CLIENT(obj) (GTK_CHECK_TYPE ((obj), CAL_CLIENT_TYPE)) -#define IS_CAL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_CLIENT_TYPE)) - -typedef struct _CalClient CalClient; -typedef struct _CalClientClass CalClientClass; - -/* Load status for the cal_loaded signal */ -typedef enum { - CAL_CLIENT_LOAD_SUCCESS, - CAL_CLIENT_LOAD_ERROR, - CAL_CLIENT_LOAD_IN_USE, - CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED -} CalClientLoadStatus; - -typedef enum { - CAL_CLIENT_GET_SUCCESS, - CAL_CLIENT_GET_NOT_FOUND, - CAL_CLIENT_GET_SYNTAX_ERROR -} CalClientGetStatus; - - -struct _CalClient { - GtkObject object; - - /* Private data */ - gpointer priv; -}; - -struct _CalClientClass { - GtkObjectClass parent_class; - - /* Notification signals */ - - void (* cal_loaded) (CalClient *client, CalClientLoadStatus status); - - void (* obj_updated) (CalClient *client, const char *uid); - void (* obj_removed) (CalClient *client, const char *uid); -}; - -GtkType cal_client_get_type (void); - -CalClient *cal_client_construct (CalClient *client); - -CalClient *cal_client_new (void); - -gboolean cal_client_load_calendar (CalClient *client, const char *str_uri); -gboolean cal_client_create_calendar (CalClient *client, const char *str_uri); - -int cal_client_get_n_objects (CalClient *client, CalObjType type); - -CalClientGetStatus cal_client_get_object (CalClient *client, - const char *uid, - CalComponent **comp); - -CalClientGetStatus cal_client_get_uid_by_pilot_id (CalClient *client, - unsigned long pilot_id, - char **uid); - -void cal_client_update_pilot_id (CalClient *client, char *uid, - unsigned long pilot_id, - unsigned long pilot_status); - -GList *cal_client_get_uids (CalClient *client, CalObjType type); - -GList *cal_client_get_objects_in_range (CalClient *client, CalObjType type, - time_t start, time_t end); - -void cal_client_generate_instances (CalClient *client, CalObjType type, - time_t start, time_t end, - CalRecurInstanceFn cb, gpointer cb_data); - -GList *cal_client_get_alarms_in_range (CalClient *client, time_t start, time_t end); - -gboolean cal_client_get_alarms_for_object (CalClient *client, const char *uid, - time_t start, time_t end, - GList **alarms); - -gboolean cal_client_update_object (CalClient *client, CalComponent *comp); - -gboolean cal_client_remove_object (CalClient *client, const char *uid); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/cal-client/cal-listener.c b/calendar/cal-client/cal-listener.c deleted file mode 100644 index d9a028b20d..0000000000 --- a/calendar/cal-client/cal-listener.c +++ /dev/null @@ -1,403 +0,0 @@ -/* Evolution calendar listener - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "cal-listener.h" - - - -/* Private part of the CalListener structure */ -typedef struct { - /* The calendar this listener refers to */ - Evolution_Calendar_Cal cal; -} CalListenerPrivate; - - - -/* Signal IDs */ -enum { - CAL_LOADED, - OBJ_UPDATED, - OBJ_REMOVED, - LAST_SIGNAL -}; - -static void cal_listener_class_init (CalListenerClass *class); -static void cal_listener_init (CalListener *listener); -static void cal_listener_destroy (GtkObject *object); - -static void marshal_cal_loaded (GtkObject *object, GtkSignalFunc func, gpointer data, GtkArg *args); - -static POA_Evolution_Calendar_Listener__vepv cal_listener_vepv; - -static guint cal_listener_signals[LAST_SIGNAL]; - -static BonoboObjectClass *parent_class; - - - -/** - * cal_listener_get_type: - * @void: - * - * Registers the #CalListener class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalListener class. - **/ -GtkType -cal_listener_get_type (void) -{ - static GtkType cal_listener_type = 0; - - if (!cal_listener_type) { - static const GtkTypeInfo cal_listener_info = { - "CalListener", - sizeof (CalListener), - sizeof (CalListenerClass), - (GtkClassInitFunc) cal_listener_class_init, - (GtkObjectInitFunc) cal_listener_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_listener_type = gtk_type_unique (bonobo_object_get_type (), &cal_listener_info); - } - - return cal_listener_type; -} - -/* CORBA class initialization function for the calendar listener */ -static void -init_cal_listener_corba_class (void) -{ - cal_listener_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - cal_listener_vepv.Evolution_Calendar_Listener_epv = cal_listener_get_epv (); -} - -/* Class initialization function for the calendar listener */ -static void -cal_listener_class_init (CalListenerClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (bonobo_object_get_type ()); - - cal_listener_signals[CAL_LOADED] = - gtk_signal_new ("cal_loaded", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalListenerClass, cal_loaded), - marshal_cal_loaded, - GTK_TYPE_NONE, 2, - GTK_TYPE_ENUM, - GTK_TYPE_POINTER); - cal_listener_signals[OBJ_UPDATED] = - gtk_signal_new ("obj_updated", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalListenerClass, obj_updated), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - cal_listener_signals[OBJ_REMOVED] = - gtk_signal_new ("obj_removed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalListenerClass, obj_removed), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - - gtk_object_class_add_signals (object_class, cal_listener_signals, LAST_SIGNAL); - - object_class->destroy = cal_listener_destroy; - - init_cal_listener_corba_class (); -} - -/* Object initialization function for the calendar listener */ -static void -cal_listener_init (CalListener *listener) -{ - CalListenerPrivate *priv; - - priv = g_new0 (CalListenerPrivate, 1); - listener->priv = priv; - - priv->cal = CORBA_OBJECT_NIL; -} - -/* Destroy handler for the calendar listener */ -static void -cal_listener_destroy (GtkObject *object) -{ - CalListener *listener; - CalListenerPrivate *priv; - CORBA_Environment ev; - gboolean result; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_LISTENER (object)); - - listener = CAL_LISTENER (object); - priv = listener->priv; - - CORBA_exception_init (&ev); - result = CORBA_Object_is_nil (priv->cal, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("cal_listener_destroy(): could not see if the calendar was NIL"); - else if (!result) { - CORBA_exception_free (&ev); - - CORBA_exception_init (&ev); - CORBA_Object_release (priv->cal, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("cal_listener_destroy(): could not release the calendar"); - - priv->cal = CORBA_OBJECT_NIL; - } - CORBA_exception_free (&ev); - - g_free (priv); - listener->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* Marshalers */ - -typedef void (* CalLoadedFunc) (GtkObject *object, gint status, gpointer cal, gpointer data); - -static void -marshal_cal_loaded (GtkObject *object, GtkSignalFunc func, gpointer data, GtkArg *args) -{ - CalLoadedFunc rfunc; - - rfunc = (CalLoadedFunc) func; - (* rfunc) (object, GTK_VALUE_ENUM (args[0]), GTK_VALUE_POINTER (args[1]), data); -} - - - -/* CORBA servant implementation */ - -/* Listener::cal_loaded method */ -static void -Listener_cal_loaded (PortableServer_Servant servant, - Evolution_Calendar_Listener_LoadStatus status, - Evolution_Calendar_Cal cal, - CORBA_Environment *ev) -{ - CalListener *listener; - CalListenerPrivate *priv; - CORBA_Environment aev; - Evolution_Calendar_Cal cal_copy; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - priv = listener->priv; - - if (priv->cal != CORBA_OBJECT_NIL) { - g_message ("Listener_cal_loaded(): calendar was already loaded!"); - return; - } - - CORBA_exception_init (&aev); - cal_copy = CORBA_Object_duplicate (cal, &aev); - - if (aev._major != CORBA_NO_EXCEPTION) { - g_message ("Listener_cal_loaded(): could not duplicate the calendar"); - CORBA_exception_free (&aev); - return; - } - CORBA_exception_free (&aev); - - priv->cal = cal_copy; - - gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[CAL_LOADED], - status, cal); -} - -/* Listener::obj_updated method */ -static void -Listener_obj_updated (PortableServer_Servant servant, - Evolution_Calendar_CalObjUID uid, - CORBA_Environment *ev) -{ - CalListener *listener; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[OBJ_UPDATED], - uid); -} - -/* Listener::obj_removed method */ -static void -Listener_obj_removed (PortableServer_Servant servant, - Evolution_Calendar_CalObjUID uid, - CORBA_Environment *ev) -{ - CalListener *listener; - - listener = CAL_LISTENER (bonobo_object_from_servant (servant)); - gtk_signal_emit (GTK_OBJECT (listener), cal_listener_signals[OBJ_REMOVED], - uid); -} - -/** - * cal_listener_get_epv: - * @void: - * - * Creates an EPV for the Listener CORBA class. - * - * Return value: A newly-allocated EPV. - **/ -POA_Evolution_Calendar_Listener__epv * -cal_listener_get_epv (void) -{ - POA_Evolution_Calendar_Listener__epv *epv; - - epv = g_new0 (POA_Evolution_Calendar_Listener__epv, 1); - epv->cal_loaded = Listener_cal_loaded; - epv->obj_updated = Listener_obj_updated; - epv->obj_removed = Listener_obj_removed; - return epv; -} - - - -/** - * cal_listener_construct: - * @listener: A calendar listener. - * @corba_listener: CORBA object for the calendar listener. - * - * Constructs a calendar listener by binding the corresponding CORBA object to - * it. - * - * Return value: the same object as the @listener argument. - **/ -CalListener * -cal_listener_construct (CalListener *listener, Evolution_Calendar_Listener corba_listener) -{ - g_return_val_if_fail (listener != NULL, NULL); - g_return_val_if_fail (IS_CAL_LISTENER (listener), NULL); - - bonobo_object_construct (BONOBO_OBJECT (listener), corba_listener); - return listener; -} - -/** - * cal_listener_corba_object_create: - * @object: #BonoboObject that will wrap the CORBA object. - * - * Creates and activates the CORBA object that is wrapped by the specified - * calendar listener @object. - * - * Return value: An activated object reference or #CORBA_OBJECT_NIL in case of - * failure. - **/ -Evolution_Calendar_Listener -cal_listener_corba_object_create (BonoboObject *object) -{ - POA_Evolution_Calendar_Listener *servant; - CORBA_Environment ev; - - g_return_val_if_fail (object != NULL, CORBA_OBJECT_NIL); - g_return_val_if_fail (IS_CAL_LISTENER (object), CORBA_OBJECT_NIL); - - servant = (POA_Evolution_Calendar_Listener *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &cal_listener_vepv; - - CORBA_exception_init (&ev); - POA_Evolution_Calendar_Listener__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (Evolution_Calendar_Listener) bonobo_object_activate_servant (object, servant); -} - -/** - * cal_listener_new: - * @void: - * - * Creates a new #CalListener object. - * - * Return value: A newly-created #CalListener, or NULL if its corresponding - * CORBA object could not be created. - **/ -CalListener * -cal_listener_new (void) -{ - CalListener *listener; - CORBA_Environment ev; - Evolution_Calendar_Listener corba_listener; - gboolean result; - - listener = gtk_type_new (CAL_LISTENER_TYPE); - - corba_listener = cal_listener_corba_object_create (BONOBO_OBJECT (listener)); - - CORBA_exception_init (&ev); - result = CORBA_Object_is_nil (corba_listener, &ev); - - if (ev._major != CORBA_NO_EXCEPTION || result) { - g_message ("cal_listener_new(): could not create the CORBA listener"); - bonobo_object_unref (BONOBO_OBJECT (listener)); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); - - return cal_listener_construct (listener, corba_listener); -} - -/** - * cal_listener_get_calendar: - * @listener: A calendar listener. - * - * Queries the calendar that a listener is watching. - * - * Return value: The calendar that the listener is watching. - **/ -Evolution_Calendar_Cal -cal_listener_get_calendar (CalListener *listener) -{ - CalListenerPrivate *priv; - - g_return_val_if_fail (listener != NULL, CORBA_OBJECT_NIL); - g_return_val_if_fail (IS_CAL_LISTENER (listener), CORBA_OBJECT_NIL); - - priv = listener->priv; - return priv->cal; -} diff --git a/calendar/cal-client/cal-listener.h b/calendar/cal-client/cal-listener.h deleted file mode 100644 index 171da0d5c3..0000000000 --- a/calendar/cal-client/cal-listener.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Evolution calendar listener - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_LISTENER_H -#define CAL_LISTENER_H - -#include -#include -#include "evolution-calendar.h" - -BEGIN_GNOME_DECLS - - - -#define CAL_LISTENER_TYPE (cal_listener_get_type ()) -#define CAL_LISTENER(obj) (GTK_CHECK_CAST ((obj), CAL_LISTENER_TYPE, CalListener)) -#define CAL_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_LISTENER_TYPE, \ - CalListenerClass)) -#define IS_CAL_LISTENER(obj) (GTK_CHECK_TYPE ((obj), CAL_LISTENER_TYPE)) -#define IS_CAL_LISTENER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_LISTENER_TYPE)) - -typedef struct _CalListener CalListener; -typedef struct _CalListenerClass CalListenerClass; - -struct _CalListener { - BonoboObject object; - - /* Private data */ - gpointer priv; -}; - -struct _CalListenerClass { - BonoboObjectClass parent_class; - - /* Notification signals */ - - void (* cal_loaded) (CalListener *listener, - Evolution_Calendar_Listener_LoadStatus status, - Evolution_Calendar_Cal cal); - void (* obj_updated) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); - void (* obj_removed) (CalListener *listener, const Evolution_Calendar_CalObjUID uid); -}; - -GtkType cal_listener_get_type (void); - -CalListener *cal_listener_construct (CalListener *listener, - Evolution_Calendar_Listener corba_listener); - -Evolution_Calendar_Listener cal_listener_corba_object_create (BonoboObject *object); - -CalListener *cal_listener_new (void); - -Evolution_Calendar_Cal cal_listener_get_calendar (CalListener *listener); - -POA_Evolution_Calendar_Listener__epv *cal_listener_get_epv (void); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/cal-client/client-test.c b/calendar/cal-client/client-test.c deleted file mode 100644 index 7f79b58266..0000000000 --- a/calendar/cal-client/client-test.c +++ /dev/null @@ -1,243 +0,0 @@ -/* Evolution calendar client - test program - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include - -static CalClient *client1; -static CalClient *client2; - -/* Prints a message with a client identifier */ -static void -cl_printf (CalClient *client, const char *format, ...) -{ - va_list args; - - va_start (args, format); - printf ("Client %s: ", - client == client1 ? "1" : - client == client2 ? "2" : - "UNKNOWN"); - vprintf (format, args); - va_end (args); -} - -/* Dumps some interesting data from a component */ -static void -dump_component (CalComponent *comp) -{ - const char *uid; - CalComponentText summary; - - cal_component_get_uid (comp, &uid); - - printf ("UID %s\n", uid); - - cal_component_get_summary (comp, &summary); - if (summary.value) - printf ("\tSummary: `%s', altrep `%s'\n", - summary.value, - summary.altrep ? summary.altrep : "NONE"); - else - printf ("\tNo summary\n"); -} - -/* Lists the UIDs of objects in a calendar, called as an idle handler */ -static gboolean -list_uids (gpointer data) -{ - CalClient *client; - GList *uids; - GList *l; - - client = CAL_CLIENT (data); - - uids = cal_client_get_uids (client, CALOBJ_TYPE_ANY); - - cl_printf (client, "UIDs: "); - - if (!uids) - printf ("none\n"); - else { - for (l = uids; l; l = l->next) { - char *uid; - - uid = l->data; - printf ("`%s' ", uid); - } - - printf ("\n"); - - for (l = uids; l; l = l->next) { - char *uid; - CalComponent *comp; - CalClientGetStatus status; - - uid = l->data; - status = cal_client_get_object (client, uid, &comp); - - if (status == CAL_CLIENT_GET_SUCCESS) { - printf ("------------------------------\n"); - dump_component (comp); - printf ("------------------------------\n"); - gtk_object_unref (GTK_OBJECT (comp)); - } else { - printf ("FAILED: %d\n", status); - } - } - } - - cal_obj_uid_list_free (uids); - - gtk_object_unref (GTK_OBJECT (client)); - - return FALSE; -} - -/* Callback used when a calendar is loaded */ -static void -cal_loaded (CalClient *client, CalClientLoadStatus status, gpointer data) -{ - cl_printf (client, "Load/create %s\n", - ((status == CAL_CLIENT_LOAD_SUCCESS) ? "success" : - (status == CAL_CLIENT_LOAD_ERROR) ? "error" : - (status == CAL_CLIENT_LOAD_IN_USE) ? "in use" : - "unknown status value")); - - if (status == CAL_CLIENT_LOAD_SUCCESS) - g_idle_add (list_uids, client); - else - gtk_object_unref (GTK_OBJECT (client)); -} - -/* Callback used when an object is updated */ -static void -obj_updated (CalClient *client, const char *uid, gpointer data) -{ - cl_printf (client, "Object updated: %s\n", uid); -} - -/* Callback used when a client is destroyed */ -static void -client_destroy_cb (GtkObject *object, gpointer data) -{ - if (CAL_CLIENT (object) == client1) - client1 = NULL; - else if (CAL_CLIENT (object) == client2) - client2 = NULL; - else - g_assert_not_reached (); - - if (!client1 && !client2) - gtk_main_quit (); -} - -/* Creates a calendar client and tries to load the specified URI into it */ -static void -create_client (CalClient **client, const char *uri, gboolean load) -{ - gboolean result; - - *client = cal_client_new (); - if (!*client) { - g_message ("create_client(): could not create the client"); - exit (1); - } - - gtk_signal_connect (GTK_OBJECT (*client), "destroy", - client_destroy_cb, - NULL); - - gtk_signal_connect (GTK_OBJECT (*client), "cal_loaded", - GTK_SIGNAL_FUNC (cal_loaded), - NULL); - gtk_signal_connect (GTK_OBJECT (*client), "obj_updated", - GTK_SIGNAL_FUNC (obj_updated), - NULL); - - printf ("Calendar loading `%s'...\n", uri); - - if (load) - result = cal_client_load_calendar (*client, uri); - else - result = cal_client_create_calendar (*client, uri); - - if (!result) { - g_message ("create_client(): failure when issuing calendar %s request `%s'", - load ? "load" : "create", - uri); - exit (1); - } -} - -#ifdef USING_OAF - -#include - -static void -init_corba (int *argc, char **argv) -{ - gnome_init ("tl-test", VERSION, *argc, argv); - oaf_init (*argc, argv); -} - -#else - -#include - -static void -init_corba (int *argc, char **argv) -{ - CORBA_Environment ev; - - CORBA_exception_init (&ev); - gnome_CORBA_init ("tl-test", VERSION, &argc, argv, 0, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("main(): could not initialize the ORB"); - CORBA_exception_free (&ev); - exit (1); - } - CORBA_exception_free (&ev); -} - -#endif - -int -main (int argc, char **argv) -{ - bindtextdomain (PACKAGE, GNOMELOCALEDIR); - textdomain (PACKAGE); - - init_corba (&argc, argv); - - if (!bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL)) { - g_message ("main(): could not initialize Bonobo"); - exit (1); - } - - create_client (&client1, "/cvs/evolution/calendar/cal-client/test.ics", TRUE); - create_client (&client2, "/cvs/evolution/calendar/cal-client/test.ics", FALSE); - - bonobo_main (); - return 0; -} diff --git a/calendar/cal-client/test.ics b/calendar/cal-client/test.ics deleted file mode 100644 index 128251ee11..0000000000 --- a/calendar/cal-client/test.ics +++ /dev/null @@ -1,318 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN - -BEGIN:VEVENT -DTSTART:19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123401@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970903T163000Z -DTEND:19970903T190000Z -SUMMARY:Annual Employee Review -CLASS:PRIVATE -CATEGORIES:BUSINESS,HUMAN RESOURCES -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123402@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970401T163000Z -DTEND:19970402T010000Z -SUMMARY:Laurel is in sensitivity awareness class. -CLASS:PUBLIC -CATEGORIES:BUSINESS,HUMAN RESOURCES -TRANSP:TRANSPARENT -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123403@host.com -DTSTAMP:19970901T1300Z -DTSTART:19971102 -SUMMARY:Our Blissful Anniversary -CLASS:CONFIDENTIAL -CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION -RRULE:FREQ=YEARLY -END:VEVENT - -BEGIN:VTODO -UID:19970901T130000Z-123404@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970415T133000Z -DUE:19970416T045959Z -SUMMARY:1996 Income Tax Preparation -CLASS:CONFIDENTIAL -CATEGORIES:FAMILY,FINANCE -PRIORITY:1 -STATUS:NEEDS-ACTION -END:VTODO - -BEGIN:VJOURNAL -UID:19970901T130000Z-123405@host.com -DTSTAMP:19970901T1300Z -DTSTART;VALUE=DATE:19970317 -SUMMARY:Staff meeting minutes -DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa - and Bob. Aurora project plans were reviewed. There is currently - no budget reserves for this project. Lisa will escalate to - management. Next meeting on Tuesday.\n - 2. Telephone Conference: ABC Corp. sales representative called - to discuss new printer. Promised to get us a demo by Friday.\n - 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. - Is looking into a loaner car. 654-2323 (tel). -END:VJOURNAL - -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jane_doe@host1.com -ATTENDEE:MAILTO:john_public@host2.com -DTSTART:19971015T050000Z -DTEND:19971016T050000Z -DTSTAMP:19970901T083000Z -END:VFREEBUSY - -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jane_doe@host1.com -ATTENDEE:MAILTO:john_public@host2.com -DTSTAMP:19970901T100000Z -FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, - 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M -URL:http://host2.com/pub/busy/jpublic-01.ifb -COMMENT:This iCalendar file contains busy time information for - the next three months. -END:VFREEBUSY - -BEGIN:VFREEBUSY -ORGANIZER:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711Z -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000Z/19980318T040000Z -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY - -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19971026T020000 -RDATE:19971026T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19971026T020000 -RDATE:19970406T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE - -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -TZURL:http://zones.stds_r_us.net/tz/US-Eastern -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE - -BEGIN:VTIMEZONE -TZID:US--Fictitious-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE - -BEGIN:VTIMEZONE -TZID:US--Fictitious-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -BEGIN:DAYLIGHT -DTSTART:19990424T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE - -BEGIN:VALARM -TRIGGER;VALUE=DATE-TIME:19970317T133000Z -REPEAT:4 -DURATION:PT15M -ACTION:AUDIO -ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud -END:VALARM -BEGIN:VALARM -TRIGGER:-PT30M -REPEAT:2 -DURATION:PT15M -ACTION:DISPLAY -DESCRIPTION:Breakfast meeting with executive\n - team at 8:30 AM EST. -END:VALARM - -BEGIN:VALARM -TRIGGER:-P2D -ACTION:EMAIL -ATTENDEE:MAILTO:john_doe@host.com -SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** -DESCRIPTION:A draft agenda needs to be sent out to the attendees - to the weekly managers meeting (MGR-LIST). Attached is a - pointer the document template for the agenda file. -ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen - da.doc -END:VALARM - -BEGIN:VALARM -TRIGGER;VALUE=DATE-TIME:19980101T050000Z -REPEAT:23 -DURATION:PT1H -ACTION:PROCEDURE -ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- - procs/felizano.exe -END:VALARM - -BEGIN:VTIMEZONE -TZID:US-Eastern -BEGIN:STANDARD -DTSTART:19981025T020000 -RDATE:19981025T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19990404T020000 -RDATE:19990404T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE - -BEGIN:VEVENT -DTSTAMP:19980309T231000Z -UID:guid-1.host1.com -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: - MAILTO:employee-A@host.com -DESCRIPTION:Project XYZ Review Meeting -CATEGORIES:MEETING -CLASS:PUBLIC -CREATED:19980309T130000Z -SUMMARY:XYZ Project Review -DTSTART;TZID=US-Eastern:19980312T083000 -DTEND;TZID=US-Eastern:19980312T093000 -LOCATION:1CP Conference Room 4350 -END:VEVENT - -BEGIN:VEVENT -DTSTAMP:19970324T1200Z -SEQUENCE:0 -UID:uid3@host1.com -ORGANIZER:MAILTO:jdoe@host1.com -DTSTART:19970324T123000Z -DTEND:19970324T210000Z -CATEGORIES:MEETING,PROJECT -CLASS:PUBLIC -SUMMARY:Calendaring Interoperability Planning Meeting -DESCRIPTION:Discuss how we can test c&s interoperability\n - using iCalendar and other IETF standards. -LOCATION:LDB Lobby -ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ - conf/bkgrnd.ps -END:VEVENT - -BEGIN:VTODO -DTSTAMP:19980130T134500Z -SEQUENCE:2 -UID:uid4@host1.com -ORGANIZER:MAILTO:unclesam@us.gov -ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com -DUE:19980415T235959 -STATUS:NEEDS-ACTION -SUMMARY:Submit Income Taxes -BEGIN:VALARM -ACTION:AUDIO -TRIGGER:19980403T120000 -ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- - files/ssbanner.aud -REPEAT:4 -DURATION:PT1H -END:VALARM -END:VTODO - -BEGIN:VJOURNAL -DTSTAMP:19970324T120000Z -UID:uid5@host1.com -ORGANIZER:MAILTO:jsmith@host.com -STATUS:DRAFT -CLASS:PUBLIC -CATEGORIES:Project Report, XYZ, Weekly Meeting -DESCRIPTION:Project xyz Review Meeting Minutes\n - Agenda\n1. Review of project version 1.0 requirements.\n2. - Definition - of project processes.\n3. Review of project schedule.\n - Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was - decided that the requirements need to be signed off by - product marketing.\n-Project processes were accepted.\n - -Project schedule needs to account for scheduled holidays - and employee vacation time. Check with HR for specific - dates.\n-New schedule will be distributed by Friday.\n- - Next weeks meeting is cancelled. No meeting until 3/23. -END:VJOURNAL - -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711Z -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000Z/19980318T040000Z -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY -END:VCALENDAR diff --git a/calendar/cal-util/.cvsignore b/calendar/cal-util/.cvsignore deleted file mode 100644 index edf21e8e74..0000000000 --- a/calendar/cal-util/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -.libs -Makefile.in -Makefile -.deps -*.lo -*.la -test-recur -icalendar-test diff --git a/calendar/cal-util/Makefile.am b/calendar/cal-util/Makefile.am deleted file mode 100644 index 2c95bcaec5..0000000000 --- a/calendar/cal-util/Makefile.am +++ /dev/null @@ -1,73 +0,0 @@ -noinst_PROGRAMS = icalendar-test -#noinst_PROGRAMS = test-recur icalendar-test - -INCLUDES = \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ - -DG_LOG_DOMAIN=\"cal-util\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/calendar \ - -I. \ - -I.. \ - -I$(top_builddir) \ - -I$(top_srcdir)/libical/src/libical \ - -I$(top_builddir)/libical/src/libical \ - $(GNOME_INCLUDEDIR) - -# -# cal util library -# - -lib_LTLIBRARIES = libcal-util.la - -libcal_util_la_SOURCES = \ - cal-component.c \ - cal-recur.c \ - cal-util.c \ - calobj.c \ - icalendar.c \ - icalendar.h \ - icalendar-save.c \ - icalendar-save.h \ - timeutil.c - -libcal_utilincludedir = $(includedir)/evolution/cal-util - -libcal_utilinclude_HEADERS = \ - cal-component.h \ - cal-recur.h \ - cal-util.h \ - calobj.h \ - timeutil.h - -# -# static library for use in conduits' shared libraries -# -noinst_LTLIBRARIES = libcal-util-static.la -libcal_util_static_la_SOURCES = $(libcal_util_la_SOURCES) -libcal_util_static_la_LDFLAGS = --all-static - - -# -# test program -# - -icalendar_test_SOURCES = \ - icalendar-test.c \ - icalendar.c \ - icalendar-save.c - -icalendar_test_LDADD = \ - $(EXTRA_GNOME_LIBS) \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/libical/src/libical/libical.a - -# $(top_builddir)/calendar/cal-util/libcal-util.la \ - -#test_recur_SOURCES = \ -# test-recur.c -# -#test_recur_LDADD = \ -# libcal-util.la \ -# $(top_builddir)/libversit/libversit.la \ -# $(top_builddir)/libical/src/libical/libical.a \ -# $(EXTRA_GNOME_LIBS) diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c deleted file mode 100644 index 7db5e348e4..0000000000 --- a/calendar/cal-util/cal-component.c +++ /dev/null @@ -1,3480 +0,0 @@ -/* Evolution calendar - iCalendar component object - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include "cal-component.h" -#include "timeutil.h" - - - -/* Private part of the CalComponent structure */ -struct _CalComponentPrivate { - /* The icalcomponent we wrap */ - icalcomponent *icalcomp; - - /* Properties */ - - icalproperty *uid; - - struct categories { - icalproperty *prop; - }; - GSList *categories_list; /* list of struct categories */ - - icalproperty *classification; - - struct text { - icalproperty *prop; - icalparameter *altrep_param; - }; - - GSList *comment_list; /* list of struct text */ - - icalproperty *completed; - icalproperty *created; - - GSList *description_list; /* list of struct text */ - - struct datetime { - icalproperty *prop; - icalparameter *tzid_param; - }; - - struct datetime dtstart; - struct datetime dtend; - - icalproperty *dtstamp; - - struct datetime due; - - GSList *exdate_list; /* list of icalproperty objects */ - GSList *exrule_list; /* list of icalproperty objects */ - - icalproperty *geo; - icalproperty *last_modified; - icalproperty *percent; - icalproperty *priority; - - struct period { - icalproperty *prop; - icalparameter *value_param; - }; - - GSList *rdate_list; /* list of struct period */ - - GSList *rrule_list; /* list of icalproperty objects */ - - icalproperty *sequence; - - struct { - icalproperty *prop; - icalparameter *altrep_param; - } summary; - - icalproperty *transparency; - icalproperty *url; - - /* Whether we should increment the sequence number when piping the - * object over the wire. - */ - guint need_sequence_inc : 1; -}; - -/* Private structure for alarms */ -struct _CalComponentAlarm { - /* Our parent component */ - CalComponent *parent; - - /* Alarm icalcomponent we wrap */ - icalcomponent *icalcomp; - - /* Properties */ - - icalproperty *action; - icalproperty *trigger; -}; - - - -static void cal_component_class_init (CalComponentClass *class); -static void cal_component_init (CalComponent *comp); -static void cal_component_destroy (GtkObject *object); - -static GtkObjectClass *parent_class; - - - -/** - * cal_component_get_type: - * - * Registers the #CalComponent class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalComponent class. - **/ -GtkType -cal_component_get_type (void) -{ - static GtkType cal_component_type = 0; - - if (!cal_component_type) { - static const GtkTypeInfo cal_component_info = { - "CalComponent", - sizeof (CalComponent), - sizeof (CalComponentClass), - (GtkClassInitFunc) cal_component_class_init, - (GtkObjectInitFunc) cal_component_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_component_type = gtk_type_unique (GTK_TYPE_OBJECT, &cal_component_info); - } - - return cal_component_type; -} - -/* Class initialization function for the calendar component object */ -static void -cal_component_class_init (CalComponentClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (GTK_TYPE_OBJECT); - - object_class->destroy = cal_component_destroy; -} - -/* Object initialization function for the calendar component object */ -static void -cal_component_init (CalComponent *comp) -{ - CalComponentPrivate *priv; - - priv = g_new0 (CalComponentPrivate, 1); - comp->priv = priv; -} - -/* Does a simple g_free() of the elements of a GSList and then frees the list - * itself. Returns NULL. - */ -static GSList * -free_slist (GSList *slist) -{ - GSList *l; - - for (l = slist; l; l = l->next) - g_free (l->data); - - g_slist_free (slist); - return NULL; -} - -/* Frees the internal icalcomponent only if it does not have a parent. If it - * does, it means we don't own it and we shouldn't free it. - */ -static void -free_icalcomponent (CalComponent *comp) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - - if (!priv->icalcomp) - return; - - /* Free the icalcomponent */ - - if (icalcomponent_get_parent (priv->icalcomp) != NULL) - icalcomponent_free (priv->icalcomp); - - priv->icalcomp = NULL; - - /* Free the mappings */ - - priv->uid = NULL; - - priv->categories_list = free_slist (priv->categories_list); - - priv->classification = NULL; - priv->comment_list = NULL; - priv->completed = NULL; - priv->created = NULL; - - priv->description_list = free_slist (priv->description_list); - - priv->dtend.prop = NULL; - priv->dtend.tzid_param = NULL; - - priv->dtstamp = NULL; - - priv->dtstart.prop = NULL; - priv->dtstart.tzid_param = NULL; - - priv->due.prop = NULL; - priv->due.tzid_param = NULL; - - g_slist_free (priv->exdate_list); - priv->exdate_list = NULL; - - g_slist_free (priv->exrule_list); - priv->exrule_list = NULL; - - priv->geo = NULL; - priv->last_modified = NULL; - priv->percent = NULL; - priv->priority = NULL; - - priv->rdate_list = free_slist (priv->rdate_list); - - g_slist_free (priv->rrule_list); - priv->rrule_list = NULL; - - priv->sequence = NULL; - - priv->summary.prop = NULL; - priv->summary.altrep_param = NULL; - - priv->transparency = NULL; - priv->url = NULL; - - /* Clean up */ - - priv->need_sequence_inc = FALSE; -} - -/* Destroy handler for the calendar component object */ -static void -cal_component_destroy (GtkObject *object) -{ - CalComponent *comp; - CalComponentPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_COMPONENT (object)); - - comp = CAL_COMPONENT (object); - priv = comp->priv; - - free_icalcomponent (comp); - - g_free (priv); - comp->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/** - * cal_component_gen_uid: - * - * Generates a unique identifier suitable for calendar components. - * - * Return value: A unique identifier string. Every time this function is called - * a different string is returned. - **/ -char * -cal_component_gen_uid (void) -{ - static char *hostname; - time_t t = time (NULL); - static int serial; - - if (!hostname) { - static char buffer [512]; - - if ((gethostname (buffer, sizeof (buffer) - 1) == 0) && - (buffer [0] != 0)) - hostname = buffer; - else - hostname = "localhost"; - } - - return g_strdup_printf ( - "%s-%d-%d-%d-%d@%s", - isodate_from_time_t (t), - getpid (), - getgid (), - getppid (), - serial++, - hostname); -} - -/** - * cal_component_new: - * - * Creates a new empty calendar component object. You should set it from an - * #icalcomponent structure by using cal_component_set_icalcomponent() or with a - * new empty component type by using cal_component_set_new_vtype(). - * - * Return value: A newly-created calendar component object. - **/ -CalComponent * -cal_component_new (void) -{ - return CAL_COMPONENT (gtk_type_new (CAL_COMPONENT_TYPE)); -} - -/** - * cal_component_clone: - * @comp: A calendar component object. - * - * Creates a new calendar component object by copying the information from - * another one. - * - * Return value: A newly-created calendar component with the same values as the - * original one. - **/ -CalComponent * -cal_component_clone (CalComponent *comp) -{ - CalComponentPrivate *priv; - CalComponent *new_comp; - icalcomponent *new_icalcomp; - - g_return_val_if_fail (comp != NULL, NULL); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), NULL); - - priv = comp->priv; - g_return_val_if_fail (priv->need_sequence_inc == FALSE, NULL); - - new_comp = cal_component_new (); - - if (priv->icalcomp) { - new_icalcomp = icalcomponent_new_clone (priv->icalcomp); - cal_component_set_icalcomponent (new_comp, new_icalcomp); - } - - return new_comp; -} - -/* Scans the categories property */ -static void -scan_categories (CalComponent *comp, icalproperty *prop) -{ - CalComponentPrivate *priv; - struct categories *categ; - - priv = comp->priv; - - categ = g_new (struct categories, 1); - categ->prop = prop; - - priv->categories_list = g_slist_append (priv->categories_list, categ); -} - -/* Scans a date/time and timezone pair property */ -static void -scan_datetime (CalComponent *comp, struct datetime *datetime, icalproperty *prop) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - - datetime->prop = prop; - datetime->tzid_param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER); -} - -/* Scans an exception date property */ -static void -scan_exdate (CalComponent *comp, icalproperty *prop) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - priv->exdate_list = g_slist_append (priv->exdate_list, prop); -} - -/* Scans an icalperiodtype property */ -static void -scan_period (CalComponent *comp, GSList **list, icalproperty *prop) -{ - struct period *period; - - period = g_new (struct period, 1); - period->prop = prop; - period->value_param = icalproperty_get_first_parameter (prop, ICAL_VALUE_PARAMETER); - - *list = g_slist_append (*list, period); -} - -/* Scans an icalrecurtype property */ -static void -scan_recur (CalComponent *comp, GSList **list, icalproperty *prop) -{ - *list = g_slist_append (*list, prop); -} - -/* Scans the summary property */ -static void -scan_summary (CalComponent *comp, icalproperty *prop) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - - priv->summary.prop = prop; - priv->summary.altrep_param = icalproperty_get_first_parameter (prop, ICAL_ALTREP_PARAMETER); -} - -/* Scans a text (i.e. text + altrep) property */ -static void -scan_text (CalComponent *comp, GSList **text_list, icalproperty *prop) -{ - struct text *text; - - text = g_new (struct text, 1); - text->prop = prop; - text->altrep_param = icalproperty_get_first_parameter (prop, ICAL_ALTREP_PARAMETER); - - *text_list = g_slist_append (*text_list, text); -} - -/* Scans an icalproperty and adds its mapping to the component */ -static void -scan_property (CalComponent *comp, icalproperty *prop) -{ - CalComponentPrivate *priv; - icalproperty_kind kind; - - priv = comp->priv; - - kind = icalproperty_isa (prop); - - switch (kind) { - case ICAL_CATEGORIES_PROPERTY: - scan_categories (comp, prop); - break; - - case ICAL_CLASS_PROPERTY: - priv->classification = prop; - break; - - case ICAL_COMMENT_PROPERTY: - scan_text (comp, &priv->comment_list, prop); - break; - - case ICAL_COMPLETED_PROPERTY: - priv->completed = prop; - break; - - case ICAL_CREATED_PROPERTY: - priv->created = prop; - break; - - case ICAL_DESCRIPTION_PROPERTY: - scan_text (comp, &priv->description_list, prop); - break; - - case ICAL_DTEND_PROPERTY: - scan_datetime (comp, &priv->dtend, prop); - break; - - case ICAL_DTSTAMP_PROPERTY: - priv->dtstamp = prop; - break; - - case ICAL_DTSTART_PROPERTY: - scan_datetime (comp, &priv->dtstart, prop); - break; - - case ICAL_DUE_PROPERTY: - scan_datetime (comp, &priv->due, prop); - break; - - case ICAL_EXDATE_PROPERTY: - scan_exdate (comp, prop); - break; - - case ICAL_EXRULE_PROPERTY: - scan_recur (comp, &priv->exrule_list, prop); - break; - - case ICAL_GEO_PROPERTY: - priv->geo = prop; - break; - - case ICAL_LASTMODIFIED_PROPERTY: - priv->last_modified = prop; - break; - - case ICAL_PERCENTCOMPLETE_PROPERTY: - priv->percent = prop; - break; - - case ICAL_PRIORITY_PROPERTY: - priv->priority = prop; - break; - - case ICAL_RDATE_PROPERTY: - scan_period (comp, &priv->rdate_list, prop); - break; - - case ICAL_RRULE_PROPERTY: - scan_recur (comp, &priv->rrule_list, prop); - break; - - case ICAL_SEQUENCE_PROPERTY: - priv->sequence = prop; - break; - - case ICAL_SUMMARY_PROPERTY: - scan_summary (comp, prop); - break; - - case ICAL_TRANSP_PROPERTY: - priv->transparency = prop; - break; - - case ICAL_UID_PROPERTY: - priv->uid = prop; - break; - - case ICAL_URL_PROPERTY: - priv->url = prop; - break; - - default: - break; - } -} - -/* Scans an icalcomponent for its properties so that we can provide - * random-access to them. - */ -static void -scan_icalcomponent (CalComponent *comp) -{ - CalComponentPrivate *priv; - icalproperty *prop; - - priv = comp->priv; - - g_assert (priv->icalcomp != NULL); - - for (prop = icalcomponent_get_first_property (priv->icalcomp, ICAL_ANY_PROPERTY); - prop; - prop = icalcomponent_get_next_property (priv->icalcomp, ICAL_ANY_PROPERTY)) - scan_property (comp, prop); - - /* We don't scan for alarm subcomponents since they can be iterated - * through using cal_component_get_{first,next}_alarm(). - */ -} - -/* Ensures that the mandatory calendar component properties (uid, dtstamp) do - * exist. If they don't exist, it creates them automatically. - */ -static void -ensure_mandatory_properties (CalComponent *comp) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - g_assert (priv->icalcomp != NULL); - - if (!priv->uid) { - char *uid; - - uid = cal_component_gen_uid (); - priv->uid = icalproperty_new_uid (uid); - g_free (uid); - - icalcomponent_add_property (priv->icalcomp, priv->uid); - } - - if (!priv->dtstamp) { - time_t tim; - struct icaltimetype t; - - tim = time (NULL); - t = icaltimetype_from_timet (tim, FALSE); - - priv->dtstamp = icalproperty_new_dtstamp (t); - icalcomponent_add_property (priv->icalcomp, priv->dtstamp); - } -} - -/** - * cal_component_set_new_vtype: - * @comp: A calendar component object. - * @type: Type of calendar component to create. - * - * Clears any existing component data from a calendar component object and - * creates a new #icalcomponent of the specified type for it. The only property - * that will be set in the new component will be its unique identifier. - **/ -void -cal_component_set_new_vtype (CalComponent *comp, CalComponentVType type) -{ - CalComponentPrivate *priv; - icalcomponent *icalcomp; - icalcomponent_kind kind; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - - free_icalcomponent (comp); - - if (type == CAL_COMPONENT_NO_TYPE) - return; - - /* Figure out the kind and create the icalcomponent */ - - switch (type) { - case CAL_COMPONENT_EVENT: - kind = ICAL_VEVENT_COMPONENT; - break; - - case CAL_COMPONENT_TODO: - kind = ICAL_VTODO_COMPONENT; - break; - - case CAL_COMPONENT_JOURNAL: - kind = ICAL_VJOURNAL_COMPONENT; - break; - - case CAL_COMPONENT_FREEBUSY: - kind = ICAL_VFREEBUSY_COMPONENT; - break; - - case CAL_COMPONENT_TIMEZONE: - kind = ICAL_VTIMEZONE_COMPONENT; - break; - - default: - g_assert_not_reached (); - kind = ICAL_NO_COMPONENT; - } - - icalcomp = icalcomponent_new (kind); - if (!icalcomp) { - g_message ("cal_component_set_new_vtype(): Could not create the icalcomponent!"); - return; - } - - /* Scan the component to build our mapping table */ - - priv->icalcomp = icalcomp; - scan_icalcomponent (comp); - - /* Add missing stuff */ - - ensure_mandatory_properties (comp); -} - -/** - * cal_component_set_icalcomponent: - * @comp: A calendar component object. - * @icalcomp: An #icalcomponent. - * - * Sets the contents of a calendar component object from an #icalcomponent - * structure. If the @comp already had an #icalcomponent set into it, it will - * will be freed automatically if the #icalcomponent does not have a parent - * component itself. - * - * Supported component types are VEVENT, VTODO, VJOURNAL, VFREEBUSY, and VTIMEZONE. - * - * Return value: TRUE on success, FALSE if @icalcomp is an unsupported component - * type. - **/ -gboolean -cal_component_set_icalcomponent (CalComponent *comp, icalcomponent *icalcomp) -{ - CalComponentPrivate *priv; - icalcomponent_kind kind; - - g_return_val_if_fail (comp != NULL, FALSE); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), FALSE); - - priv = comp->priv; - - if (priv->icalcomp == icalcomp) - return TRUE; - - free_icalcomponent (comp); - - if (!icalcomp) { - priv->icalcomp = NULL; - return TRUE; - } - - kind = icalcomponent_isa (icalcomp); - - if (!(kind == ICAL_VEVENT_COMPONENT - || kind == ICAL_VTODO_COMPONENT - || kind == ICAL_VJOURNAL_COMPONENT - || kind == ICAL_VFREEBUSY_COMPONENT - || kind == ICAL_VTIMEZONE_COMPONENT)) - return FALSE; - - priv->icalcomp = icalcomp; - - scan_icalcomponent (comp); - ensure_mandatory_properties (comp); - - return TRUE; -} - -/** - * cal_component_get_icalcomponent: - * @comp: A calendar component object. - * - * Queries the #icalcomponent structure that a calendar component object is - * wrapping. - * - * Return value: An #icalcomponent structure, or NULL if the @comp has no - * #icalcomponent set to it. - **/ -icalcomponent * -cal_component_get_icalcomponent (CalComponent *comp) -{ - CalComponentPrivate *priv; - - g_return_val_if_fail (comp != NULL, NULL); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), NULL); - - priv = comp->priv; - g_return_val_if_fail (priv->need_sequence_inc == FALSE, NULL); - - return priv->icalcomp; -} - -/** - * cal_component_get_vtype: - * @comp: A calendar component object. - * - * Queries the type of a calendar component object. - * - * Return value: The type of the component, as defined by RFC 2445. - **/ -CalComponentVType -cal_component_get_vtype (CalComponent *comp) -{ - CalComponentPrivate *priv; - icalcomponent_kind kind; - - g_return_val_if_fail (comp != NULL, CAL_COMPONENT_NO_TYPE); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), CAL_COMPONENT_NO_TYPE); - - priv = comp->priv; - g_return_val_if_fail (priv->icalcomp != NULL, CAL_COMPONENT_NO_TYPE); - - kind = icalcomponent_isa (priv->icalcomp); - switch (kind) { - case ICAL_VEVENT_COMPONENT: - return CAL_COMPONENT_EVENT; - - case ICAL_VTODO_COMPONENT: - return CAL_COMPONENT_TODO; - - case ICAL_VJOURNAL_COMPONENT: - return CAL_COMPONENT_JOURNAL; - - case ICAL_VFREEBUSY_COMPONENT: - return CAL_COMPONENT_FREEBUSY; - - case ICAL_VTIMEZONE_COMPONENT: - return CAL_COMPONENT_TIMEZONE; - - default: - /* We should have been loaded with a supported type! */ - g_assert_not_reached (); - return CAL_COMPONENT_NO_TYPE; - } -} - -/** - * cal_component_get_as_string: - * @comp: A calendar component. - * - * Gets the iCalendar string representation of a calendar component. You should - * call cal_component_commit_sequence() before this function to ensure that the - * component's sequence number is consistent with the state of the object. - * - * Return value: String representation of the calendar component according to - * RFC 2445. - **/ -char * -cal_component_get_as_string (CalComponent *comp) -{ - CalComponentPrivate *priv; - char *str, *buf; - - g_return_val_if_fail (comp != NULL, NULL); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), NULL); - - priv = comp->priv; - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - - /* Ensure that the user has committed the new SEQUENCE */ - g_return_val_if_fail (priv->need_sequence_inc == FALSE, NULL); - - /* We dup the string; libical owns that memory */ - - str = icalcomponent_as_ical_string (priv->icalcomp); - - if (str) - buf = g_strdup (str); - else - buf = NULL; - - return buf; -} - -/** - * cal_component_commit_sequence: - * @comp: - * - * Increments the sequence number property in a calendar component object if it - * needs it. This needs to be done when any of a number of properties listed in - * RFC 2445 change values, such as the start and end dates of a component. - * - * This function must be called before calling cal_component_get_as_string() to - * ensure that the component is fully consistent. - **/ -void -cal_component_commit_sequence (CalComponent *comp) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!priv->need_sequence_inc) - return; - - if (priv->sequence) { - int seq; - - seq = icalproperty_get_sequence (priv->sequence); - icalproperty_set_sequence (priv->sequence, seq + 1); - } else { - /* The component had no SEQUENCE property, so assume that the - * default would have been zero. Since it needed incrementing - * anyways, we use a value of 1 here. - */ - priv->sequence = icalproperty_new_sequence (1); - icalcomponent_add_property (priv->icalcomp, priv->sequence); - } - - priv->need_sequence_inc = FALSE; -} - -/** - * cal_component_get_uid: - * @comp: A calendar component object. - * @uid: Return value for the UID string. - * - * Queries the unique identifier of a calendar component object. - **/ -void -cal_component_get_uid (CalComponent *comp, const char **uid) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (uid != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - /* This MUST exist, since we ensured that it did */ - g_assert (priv->uid != NULL); - - *uid = icalproperty_get_uid (priv->uid); -} - -/** - * cal_component_set_uid: - * @comp: A calendar component object. - * @uid: Unique identifier. - * - * Sets the unique identifier string of a calendar component object. - **/ -void -cal_component_set_uid (CalComponent *comp, const char *uid) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (uid != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - /* This MUST exist, since we ensured that it did */ - g_assert (priv->uid != NULL); - - icalproperty_set_uid (priv->uid, (char *) uid); -} - -/** - * cal_component_get_categories_list: - * @comp: A calendar component object. - * @categ_list: Return value for the list of strings, where each string is a - * category. This should be freed using cal_component_free_categories_list(). - * - * Queries the list of categories of a calendar component object. Each element - * in the returned categ_list is a string with the corresponding category. - **/ -void -cal_component_get_categories_list (CalComponent *comp, GSList **categ_list) -{ - CalComponentPrivate *priv; - const char *categories; - const char *p; - const char *cat_start; - char *str; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (categ_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!priv->categories_list) { - *categ_list = NULL; - return; - } - - categories = icalproperty_get_categories (priv->categories_list); - g_assert (categories != NULL); - - cat_start = categories; - - *categ_list = NULL; - - for (p = categories; *p; p++) - if (*p == ',') { - str = g_strndup (cat_start, p - cat_start); - *categ_list = g_slist_prepend (*categ_list, str); - - cat_start = p + 1; - } - - str = g_strndup (cat_start, p - cat_start); - *categ_list = g_slist_prepend (*categ_list, str); - - *categ_list = g_slist_reverse (*categ_list); -} - -/* Creates a comma-delimited string of categories */ -static char * -stringify_categories (GSList *categ_list) -{ - GString *s; - GSList *l; - char *str; - - s = g_string_new (NULL); - - for (l = categ_list; l; l = l->next) { - g_string_append (s, l->data); - - if (l->next != NULL) - g_string_append (s, ","); - } - - str = s->str; - g_string_free (s, FALSE); - - return str; -} - -/** - * cal_component_set_categories_list: - * @comp: A calendar component object. - * @categ_list: List of strings, one for each category. - * - * Sets the list of categories of a calendar component object. - **/ -void -cal_component_set_categories_list (CalComponent *comp, GSList *categ_list) -{ - CalComponentPrivate *priv; - struct categories *cat; - char *categories_str; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - /* Free the old list */ - - if (!categ_list) { - if (priv->categories_list) { - GSList *l; - - for (l = priv->categories_list; l; l = l->next) { - struct categories *c; - - c = l->data; - icalcomponent_remove_property (priv->icalcomp, c->prop); - icalproperty_free (c->prop); - - g_free (c); - } - - g_slist_free (priv->categories_list); - priv->categories_list = NULL; - } - - return; - } - - /* Create a single string of categories */ - - categories_str = stringify_categories (categ_list); - - /* Set the categories */ - - cat = g_new (struct categories, 1); - cat->prop = icalproperty_new_categories (categories_str); - g_free (categories_str); - - icalcomponent_add_property (priv->icalcomp, cat->prop); -} - -/** - * cal_component_get_classification: - * @comp: A calendar component object. - * @classif: Return value for the classification. - * - * Queries the classification of a calendar component object. If the - * classification property is not set on this component, this function returns - * #CAL_COMPONENT_CLASS_NONE. - **/ -void -cal_component_get_classification (CalComponent *comp, CalComponentClassification *classif) -{ - CalComponentPrivate *priv; - const char *class; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (classif != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!priv->classification) { - *classif = CAL_COMPONENT_CLASS_NONE; - return; - } - - class = icalproperty_get_class (priv->classification); - - if (strcasecmp (class, "PUBLIC") == 0) - *classif = CAL_COMPONENT_CLASS_PUBLIC; - else if (strcasecmp (class, "PRIVATE") == 0) - *classif = CAL_COMPONENT_CLASS_PRIVATE; - else if (strcasecmp (class, "CONFIDENTIAL") == 0) - *classif = CAL_COMPONENT_CLASS_CONFIDENTIAL; - else - *classif = CAL_COMPONENT_CLASS_UNKNOWN; -} - -/** - * cal_component_set_classification: - * @comp: A calendar component object. - * @classif: Classification to use. - * - * Sets the classification property of a calendar component object. To unset - * the property, specify CAL_COMPONENT_CLASS_NONE for @classif. - **/ -void -cal_component_set_classification (CalComponent *comp, CalComponentClassification classif) -{ - CalComponentPrivate *priv; - char *str; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (classif != CAL_COMPONENT_CLASS_UNKNOWN); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (classif == CAL_COMPONENT_CLASS_NONE) { - if (priv->classification) { - icalcomponent_remove_property (priv->icalcomp, priv->classification); - icalproperty_free (priv->classification); - priv->classification = NULL; - } - - return; - } - - switch (classif) { - case CAL_COMPONENT_CLASS_PUBLIC: - str = "PUBLIC"; - break; - - case CAL_COMPONENT_CLASS_PRIVATE: - str = "PRIVATE"; - break; - - case CAL_COMPONENT_CLASS_CONFIDENTIAL: - str = "CONFIDENTIAL"; - break; - - default: - g_assert_not_reached (); - str = NULL; - } - - if (priv->classification) - icalproperty_set_class (priv->classification, str); - else { - priv->classification = icalproperty_new_class (str); - icalcomponent_add_property (priv->icalcomp, priv->classification); - } -} - -/* Gets a text list value */ -static void -get_text_list (GSList *text_list, - char *(* get_prop_func) (icalproperty *prop), - GSList **tl) -{ - GSList *l; - - *tl = NULL; - - if (!text_list) - return; - - for (l = text_list; l; l = l->next) { - struct text *text; - CalComponentText *t; - - text = l->data; - g_assert (text->prop != NULL); - - t = g_new (CalComponentText, 1); - t->value = (* get_prop_func) (text->prop); - - if (text->altrep_param) - t->altrep = icalparameter_get_altrep (text->altrep_param); - else - t->altrep = NULL; - - *tl = g_slist_prepend (*tl, t); - } - - *tl = g_slist_reverse (*tl); -} - -/* Sets a text list value */ -static void -set_text_list (CalComponent *comp, - icalproperty *(* new_prop_func) (char *value), - GSList **text_list, - GSList *tl) -{ - CalComponentPrivate *priv; - GSList *l; - - priv = comp->priv; - - /* Remove old texts */ - - for (l = *text_list; l; l = l->next) { - struct text *text; - - text = l->data; - g_assert (text->prop != NULL); - - icalcomponent_remove_property (priv->icalcomp, text->prop); - icalproperty_free (text->prop); - g_free (text); - } - - g_slist_free (*text_list); - *text_list = NULL; - - /* Add in new texts */ - - for (l = tl; l; l = l->next) { - CalComponentText *t; - struct text *text; - - t = l->data; - g_return_if_fail (t->value != NULL); - - text = g_new (struct text, 1); - - text->prop = (* new_prop_func) ((char *) t->value); - icalcomponent_add_property (priv->icalcomp, text->prop); - - if (t->altrep) { - text->altrep_param = icalparameter_new_altrep ((char *) t->altrep); - icalproperty_add_parameter (text->prop, text->altrep_param); - } else - text->altrep_param = NULL; - - *text_list = g_slist_prepend (*text_list, text); - } - - *text_list = g_slist_reverse (*text_list); -} - -/** - * cal_component_get_comment_list: - * @comp: A calendar component object. - * @text_list: Return value for the comment properties and their parameters, as - * a list of #CalComponentText structures. This should be freed using the - * cal_component_free_text_list() function. - * - * Queries the comment of a calendar component object. The comment property can - * appear several times inside a calendar component, and so a list of - * #CalComponentText is returned. - **/ -void -cal_component_get_comment_list (CalComponent *comp, GSList **text_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (text_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_text_list (priv->comment_list, icalproperty_get_comment, text_list); -} - -/** - * cal_component_set_comment_list: - * @comp: A calendar component object. - * @text_list: List of #CalComponentText structures. - * - * Sets the comment of a calendar component object. The comment property can - * appear several times inside a calendar component, and so a list of - * #CalComponentText structures is used. - **/ -void -cal_component_set_comment_list (CalComponent *comp, GSList *text_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_text_list (comp, icalproperty_new_comment, &priv->comment_list, text_list); -} - -/* Gets a struct icaltimetype value */ -static void -get_icaltimetype (icalproperty *prop, - struct icaltimetype (* get_prop_func) (icalproperty *prop), - struct icaltimetype **t) -{ - if (!prop) { - *t = NULL; - return; - } - - *t = g_new (struct icaltimetype, 1); - **t = (* get_prop_func) (prop); -} - -/* Sets a struct icaltimetype value */ -static void -set_icaltimetype (CalComponent *comp, icalproperty **prop, - icalproperty *(* prop_new_func) (struct icaltimetype v), - void (* prop_set_func) (icalproperty *prop, struct icaltimetype v), - struct icaltimetype *t) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - - if (!t) { - if (*prop) { - icalcomponent_remove_property (priv->icalcomp, *prop); - icalproperty_free (*prop); - *prop = NULL; - } - - return; - } - - if (*prop) - (* prop_set_func) (*prop, *t); - else { - *prop = (* prop_new_func) (*t); - icalcomponent_add_property (priv->icalcomp, *prop); - } -} - -/** - * cal_component_get_completed: - * @comp: A calendar component object. - * @t: Return value for the completion date. This should be freed using the - * cal_component_free_icaltimetype() function. - * - * Queries the date at which a calendar compoment object was completed. - **/ -void -cal_component_get_completed (CalComponent *comp, struct icaltimetype **t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (t != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_icaltimetype (priv->completed, icalproperty_get_completed, t); -} - -/** - * cal_component_set_completed: - * @comp: A calendar component object. - * @t: Value for the completion date. - * - * Sets the date at which a calendar component object was completed. - **/ -void -cal_component_set_completed (CalComponent *comp, struct icaltimetype *t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_icaltimetype (comp, &priv->completed, - icalproperty_new_completed, - icalproperty_set_completed, - t); -} - - -/** - * cal_component_get_created: - * @comp: A calendar component object. - * @t: Return value for the creation date. This should be freed using the - * cal_component_free_icaltimetype() function. - * - * Queries the date in which a calendar component object was created in the - * calendar store. - **/ -void -cal_component_get_created (CalComponent *comp, struct icaltimetype **t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (t != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_icaltimetype (priv->created, icalproperty_get_created, t); -} - -/** - * cal_component_set_created: - * @comp: A calendar component object. - * @t: Value for the creation date. - * - * Sets the date in which a calendar component object is created in the calendar - * store. This should only be used inside a calendar store application, i.e. - * not by calendar user agents. - **/ -void -cal_component_set_created (CalComponent *comp, struct icaltimetype *t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_icaltimetype (comp, &priv->created, - icalproperty_new_created, - icalproperty_set_created, - t); -} - -/** - * cal_component_get_description_list: - * @comp: A calendar component object. - * @text_list: Return value for the description properties and their parameters, - * as a list of #CalComponentText structures. This should be freed using the - * cal_component_free_text_list() function. - * - * Queries the description of a calendar component object. Journal components - * may have more than one description, and as such this function returns a list - * of #CalComponentText structures. All other types of components can have at - * most one description. - **/ -void -cal_component_get_description_list (CalComponent *comp, GSList **text_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (text_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_text_list (priv->description_list, icalproperty_get_description, text_list); -} - -/** - * cal_component_set_description_list: - * @comp: A calendar component object. - * @text_list: List of #CalComponentSummary structures. - * - * Sets the description of a calendar component object. Journal components may - * have more than one description, and as such this function takes in a list of - * #CalComponentDescription structures. All other types of components can have - * at most one description. - **/ -void -cal_component_set_description_list (CalComponent *comp, GSList *text_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_text_list (comp, icalproperty_new_description, &priv->description_list, text_list); -} - -/* Gets a date/time and timezone pair */ -static void -get_datetime (struct datetime *datetime, - struct icaltimetype (* get_prop_func) (icalproperty *prop), - CalComponentDateTime *dt) -{ - if (datetime->prop) { - dt->value = g_new (struct icaltimetype, 1); - *dt->value = (* get_prop_func) (datetime->prop); - } else - dt->value = NULL; - - if (datetime->tzid_param) - dt->tzid = icalparameter_get_tzid (datetime->tzid_param); - else - dt->tzid = NULL; -} - -/* Sets a date/time and timezone pair */ -static void -set_datetime (CalComponent *comp, struct datetime *datetime, - icalproperty *(* prop_new_func) (struct icaltimetype v), - void (* prop_set_func) (icalproperty * prop, struct icaltimetype v), - CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - priv = comp->priv; - - if (!dt) { - if (datetime->prop) { - icalcomponent_remove_property (priv->icalcomp, datetime->prop); - icalproperty_free (datetime->prop); - - datetime->prop = NULL; - datetime->tzid_param = NULL; - } - - return; - } - - g_return_if_fail (dt->value != NULL); - - if (datetime->prop) - (* prop_set_func) (datetime->prop, *dt->value); - else { - datetime->prop = (* prop_new_func) (*dt->value); - icalcomponent_add_property (priv->icalcomp, datetime->prop); - } - - if (dt->tzid) { - g_assert (datetime->prop != NULL); - - if (datetime->tzid_param) - icalparameter_set_tzid (datetime->tzid_param, (char *) dt->tzid); - else { - datetime->tzid_param = icalparameter_new_tzid ((char *) dt->tzid); - icalproperty_add_parameter (datetime->prop, datetime->tzid_param); - } - } else if (datetime->tzid_param) { -#if 0 - /* FIXME: this fucking routine will assert(0) since it is not implemented */ - icalproperty_remove_parameter (datetime->prop, ICAL_TZID_PARAMETER); - icalparameter_free (datetime->tzid_param); -#endif - datetime->tzid_param = NULL; - } -} - -/** - * cal_component_get_dtend: - * @comp: A calendar component object. - * @dt: Return value for the date/time end. This should be freed with the - * cal_component_free_datetime() function. - * - * Queries the date/time end of a calendar component object. - **/ -void -cal_component_get_dtend (CalComponent *comp, CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (dt != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_datetime (&priv->dtend, icalproperty_get_dtend, dt); -} - -/** - * cal_component_set_dtend: - * @comp: A calendar component object. - * @dt: End date/time. - * - * Sets the date/time end property of a calendar component object. - **/ -void -cal_component_set_dtend (CalComponent *comp, CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_datetime (comp, &priv->dtend, - icalproperty_new_dtend, - icalproperty_set_dtend, - dt); - - priv->need_sequence_inc = TRUE; -} - -/** - * cal_component_get_dtstamp: - * @comp: A calendar component object. - * @t: Return value for the date/timestamp. - * - * Queries the date/timestamp property of a calendar component object, which is - * the last time at which the object was modified by a calendar user agent. - **/ -void -cal_component_get_dtstamp (CalComponent *comp, struct icaltimetype *t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (t != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - /* This MUST exist, since we ensured that it did */ - g_assert (priv->dtstamp != NULL); - - *t = icalproperty_get_dtstamp (priv->dtstamp); -} - -/** - * cal_component_set_dtstamp: - * @comp: A calendar component object. - * @t: Date/timestamp value. - * - * Sets the date/timestamp of a calendar component object. This should be - * called whenever a calendar user agent makes a change to a component's - * properties. - **/ -void -cal_component_set_dtstamp (CalComponent *comp, struct icaltimetype *t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (t != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - /* This MUST exist, since we ensured that it did */ - g_assert (priv->dtstamp != NULL); - - icalproperty_set_dtstamp (priv->dtstamp, *t); -} - -/** - * cal_component_get_dtstart: - * @comp: A calendar component object. - * @dt: Return value for the date/time start. This should be freed with the - * cal_component_free_datetime() function. - * - * Queries the date/time start of a calendar component object. - **/ -void -cal_component_get_dtstart (CalComponent *comp, CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (dt != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_datetime (&priv->dtstart, icalproperty_get_dtstart, dt); -} - -/** - * cal_component_set_dtstart: - * @comp: A calendar component object. - * @dt: Start date/time. - * - * Sets the date/time start property of a calendar component object. - **/ -void -cal_component_set_dtstart (CalComponent *comp, CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_datetime (comp, &priv->dtstart, - icalproperty_new_dtstart, - icalproperty_set_dtstart, - dt); - - priv->need_sequence_inc = TRUE; -} - -/** - * cal_component_get_due: - * @comp: A calendar component object. - * @dt: Return value for the due date/time. This should be freed with the - * cal_component_free_datetime() function. - * - * Queries the due date/time of a calendar component object. - **/ -void -cal_component_get_due (CalComponent *comp, CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (dt != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_datetime (&priv->due, icalproperty_get_due, dt); -} - -/** - * cal_component_set_due: - * @comp: A calendar component object. - * @dt: End date/time. - * - * Sets the due date/time property of a calendar component object. - **/ -void -cal_component_set_due (CalComponent *comp, CalComponentDateTime *dt) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_datetime (comp, &priv->due, - icalproperty_new_due, - icalproperty_set_due, - dt); - - priv->need_sequence_inc = TRUE; -} - -/* Builds a list of CalComponentPeriod structures based on a list of icalproperties */ -static void -get_period_list (GSList *period_list, - struct icalperiodtype (* get_prop_func) (icalproperty *prop), - GSList **list) -{ - GSList *l; - - *list = NULL; - - if (!period_list) - return; - - for (l = period_list; l; l = l->next) { - struct period *period; - CalComponentPeriod *p; - struct icalperiodtype ip; - - period = l->data; - g_assert (period->prop != NULL); - - p = g_new (CalComponentPeriod, 1); - - /* Get value parameter */ - - if (period->value_param) { - icalparameter_value value_type; - - value_type = icalparameter_get_value (period->value_param); - - if (value_type == ICAL_VALUE_DATE || value_type == ICAL_VALUE_DATETIME) - p->type = CAL_COMPONENT_PERIOD_DATETIME; - else if (value_type == ICAL_VALUE_DURATION) - p->type = CAL_COMPONENT_PERIOD_DURATION; - else { - g_message ("get_period_list(): Unknown value for period %d; " - "using DATETIME", value_type); - p->type = CAL_COMPONENT_PERIOD_DATETIME; - } - } else - p->type = CAL_COMPONENT_PERIOD_DATETIME; - - /* Get start and end/duration */ - - ip = (* get_prop_func) (period->prop); - - p->start = ip.start; - - if (p->type == CAL_COMPONENT_PERIOD_DATETIME) - p->u.end = ip.end; - else if (p->type == CAL_COMPONENT_PERIOD_DURATION) - p->u.duration = ip.duration; - else - g_assert_not_reached (); - - /* Put in list */ - - *list = g_slist_prepend (*list, p); - } - - *list = g_slist_reverse (*list); -} - -/* Sets a period list value */ -static void -set_period_list (CalComponent *comp, - icalproperty *(* new_prop_func) (struct icalperiodtype period), - GSList **period_list, - GSList *pl) -{ - CalComponentPrivate *priv; - GSList *l; - - priv = comp->priv; - - /* Remove old periods */ - - for (l = *period_list; l; l = l->next) { - struct period *period; - - period = l->data; - g_assert (period->prop != NULL); - - icalcomponent_remove_property (priv->icalcomp, period->prop); - icalproperty_free (period->prop); - g_free (period); - } - - g_slist_free (*period_list); - *period_list = NULL; - - /* Add in new periods */ - - for (l = pl; l; l = l->next) { - CalComponentPeriod *p; - struct period *period; - struct icalperiodtype ip; - icalparameter_value value_type; - - g_assert (l->data != NULL); - p = l->data; - - /* Create libical value */ - - ip.start = p->start; - - if (p->type == CAL_COMPONENT_PERIOD_DATETIME) { - value_type = ICAL_VALUE_DATETIME; - ip.end = p->u.end; - } else if (p->type == CAL_COMPONENT_PERIOD_DURATION) { - value_type = ICAL_VALUE_DURATION; - ip.duration = p->u.duration; - } else { - g_assert_not_reached (); - return; - } - - /* Create property */ - - period = g_new (struct period, 1); - - period->prop = (* new_prop_func) (ip); - period->value_param = icalparameter_new_value (value_type); - icalproperty_add_parameter (period->prop, period->value_param); - - /* Add to list */ - - *period_list = g_slist_prepend (*period_list, period); - } - - *period_list = g_slist_reverse (*period_list); -} - -/** - * cal_component_get_exdate_list: - * @comp: A calendar component object. - * @exdate_list: Return value for the list of exception dates, as a list of - * struct #icaltimetype structures. This should be freed using the - * cal_component_free_exdate_list() function. - * - * Queries the list of exception date properties in a calendar component object. - **/ -void -cal_component_get_exdate_list (CalComponent *comp, GSList **exdate_list) -{ - CalComponentPrivate *priv; - GSList *l; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (exdate_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - *exdate_list = NULL; - - for (l = priv->exdate_list; l; l = l->next) { - icalproperty *prop; - struct icaltimetype *t; - - prop = l->data; - - t = g_new (struct icaltimetype, 1); - *t = icalproperty_get_exdate (prop); - - *exdate_list = g_slist_prepend (*exdate_list, t); - } - - *exdate_list = g_slist_reverse (*exdate_list); -} - -/** - * cal_component_set_exdate_list: - * @comp: A calendar component object. - * @exdate_list: List of struct #icaltimetype structures. - * - * Sets the list of exception dates in a calendar component object. - **/ -void -cal_component_set_exdate_list (CalComponent *comp, GSList *exdate_list) -{ - CalComponentPrivate *priv; - GSList *l; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - /* Remove old exception dates */ - - for (l = priv->exdate_list; l; l = l->next) { - icalproperty *prop; - - prop = l->data; - icalcomponent_remove_property (priv->icalcomp, prop); - icalproperty_free (prop); - } - - g_slist_free (priv->exdate_list); - priv->exdate_list = NULL; - - /* Add in new exception dates */ - - for (l = exdate_list; l; l = l->next) { - icalproperty *prop; - struct icaltimetype *t; - - g_assert (l->data != NULL); - t = l->data; - - prop = icalproperty_new_exdate (*t); - icalcomponent_add_property (priv->icalcomp, prop); - - priv->exdate_list = g_slist_prepend (priv->exdate_list, prop); - } - - priv->exdate_list = g_slist_reverse (priv->exdate_list); - - priv->need_sequence_inc = TRUE; -} - -/* Gets a list of recurrence rules */ -static void -get_recur_list (GSList *recur_list, - struct icalrecurrencetype (* get_prop_func) (icalproperty *prop), - GSList **list) -{ - GSList *l; - - *list = NULL; - - for (l = recur_list; l; l = l->next) { - icalproperty *prop; - struct icalrecurrencetype *r; - - prop = l->data; - - r = g_new (struct icalrecurrencetype, 1); - *r = (* get_prop_func) (prop); - - *list = g_slist_prepend (*list, r); - } - - *list = g_slist_reverse (*list); -} - -/* Sets a list of recurrence rules */ -static void -set_recur_list (CalComponent *comp, - icalproperty *(* new_prop_func) (struct icalrecurrencetype recur), - GSList **recur_list, - GSList *rl) -{ - CalComponentPrivate *priv; - GSList *l; - - priv = comp->priv; - - /* Remove old recurrences */ - - for (l = *recur_list; l; l = l->next) { - icalproperty *prop; - - prop = l->data; - icalcomponent_remove_property (priv->icalcomp, prop); - icalproperty_free (prop); - } - - g_slist_free (*recur_list); - *recur_list = NULL; - - /* Add in new recurrences */ - - for (l = rl; l; l = l->next) { - icalproperty *prop; - struct icalrecurrencetype *recur; - - g_assert (l->data != NULL); - recur = l->data; - - prop = (* new_prop_func) (*recur); - icalcomponent_add_property (priv->icalcomp, prop); - - *recur_list = g_slist_prepend (*recur_list, prop); - } - - *recur_list = g_slist_reverse (*recur_list); -} - -/** - * cal_component_get_exrule_list: - * @comp: A calendar component object. - * @recur_list: List of exception rules as struct #icalrecurrencetype - * structures. This should be freed using the cal_component_free_recur_list() - * function. - * - * Queries the list of exception rule properties of a calendar component - * object. - **/ -void -cal_component_get_exrule_list (CalComponent *comp, GSList **recur_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (recur_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_recur_list (priv->exrule_list, icalproperty_get_exrule, recur_list); -} - -/** - * cal_component_set_exrule_list: - * @comp: A calendar component object. - * @recur_list: List of struct #icalrecurrencetype structures. - * - * Sets the list of exception rules in a calendar component object. - **/ -void -cal_component_set_exrule_list (CalComponent *comp, GSList *recur_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_recur_list (comp, icalproperty_new_exrule, &priv->exrule_list, recur_list); - - priv->need_sequence_inc = TRUE; -} - -/** - * cal_component_get_geo: - * @comp: A calendar component object. - * @geo: Return value for the geographic position property. This should be - * freed using the cal_component_free_geo() function. - * - * Sets the geographic position property of a calendar component object. - **/ -void -cal_component_get_geo (CalComponent *comp, struct icalgeotype **geo) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (geo != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (priv->geo) { - *geo = g_new (struct icalgeotype, 1); - **geo = icalproperty_get_geo (priv->geo); - } else - *geo = NULL; -} - -/** - * cal_component_set_geo: - * @comp: A calendar component object. - * @geo: Value for the geographic position property. - * - * Sets the geographic position property on a calendar component object. - **/ -void -cal_component_set_geo (CalComponent *comp, struct icalgeotype *geo) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!geo) { - if (priv->geo) { - icalcomponent_remove_property (priv->icalcomp, priv->geo); - icalproperty_free (priv->geo); - priv->geo = NULL; - } - - return; - } - - if (priv->geo) - icalproperty_set_geo (priv->geo, *geo); - else { - priv->geo = icalproperty_new_geo (*geo); - icalcomponent_add_property (priv->icalcomp, priv->geo); - } -} - -/** - * cal_component_get_last_modified: - * @comp: A calendar component object. - * @t: Return value for the last modified time value. - * - * Queries the time at which a calendar component object was last modified in - * the calendar store. - **/ -void -cal_component_get_last_modified (CalComponent *comp, struct icaltimetype **t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (t != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_icaltimetype (priv->last_modified, icalproperty_get_lastmodified, t); -} - -/** - * cal_component_set_last_modified: - * @comp: A calendar component object. - * @t: Value for the last time modified. - * - * Sets the time at which a calendar component object was last stored in the - * calendar store. This should not be called by plain calendar user agents. - **/ -void -cal_component_set_last_modified (CalComponent *comp, struct icaltimetype *t) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_icaltimetype (comp, &priv->last_modified, - icalproperty_new_lastmodified, - icalproperty_set_lastmodified, - t); -} - -/** - * cal_component_get_percent: - * @comp: A calendar component object. - * @percent: Return value for the percent-complete property. This should be - * freed using the cal_component_free_percent() function. - * - * Queries the percent-complete property of a calendar component object. - **/ -void -cal_component_get_percent (CalComponent *comp, int **percent) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (percent != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (priv->percent) { - *percent = g_new (int, 1); - **percent = icalproperty_get_percentcomplete (priv->percent); - } else - *percent = NULL; -} - -/** - * cal_component_set_percent: - * @comp: A calendar component object. - * @percent: Value for the percent-complete property. - * - * Sets the percent-complete property of a calendar component object. - **/ -void -cal_component_set_percent (CalComponent *comp, int *percent) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!percent) { - if (priv->percent) { - icalcomponent_remove_property (priv->icalcomp, priv->percent); - icalproperty_free (priv->percent); - priv->percent = NULL; - } - - return; - } - - g_return_if_fail (*percent >= 0 && *percent <= 100); - - if (priv->percent) - icalproperty_set_percentcomplete (priv->percent, *percent); - else { - priv->percent = icalproperty_new_percentcomplete (*percent); - icalcomponent_add_property (priv->icalcomp, priv->percent); - } -} - -/** - * cal_component_get_priority: - * @comp: A calendar component object. - * @priority: Return value for the priority property. This should be freed using - * the cal_component_free_priority() function. - * - * Queries the priority property of a calendar component object. - **/ -void -cal_component_get_priority (CalComponent *comp, int **priority) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (priority != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (priv->priority) { - *priority = g_new (int, 1); - **priority = icalproperty_get_priority (priv->priority); - } else - *priority = NULL; -} - -/** - * cal_component_set_priority: - * @comp: A calendar component object. - * @priority: Value for the priority property. - * - * Sets the priority property of a calendar component object. - **/ -void -cal_component_set_priority (CalComponent *comp, int *priority) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!priority) { - if (priv->priority) { - icalcomponent_remove_property (priv->icalcomp, priv->priority); - icalproperty_free (priv->priority); - priv->priority = NULL; - } - - return; - } - - g_return_if_fail (*priority >= 0 && *priority <= 9); - - if (priv->priority) - icalproperty_set_priority (priv->priority, *priority); - else { - priv->priority = icalproperty_new_priority (*priority); - icalcomponent_add_property (priv->icalcomp, priv->priority); - } -} - -/** - * cal_component_get_rdate_list: - * @comp: A calendar component object. - * @period_list: Return value for the list of recurrence dates, as a list of - * #CalComponentPeriod structures. This should be freed using the - * cal_component_free_period_list() function. - * - * Queries the list of recurrence date properties in a calendar component - * object. - **/ -void -cal_component_get_rdate_list (CalComponent *comp, GSList **period_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (period_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_period_list (priv->rdate_list, icalproperty_get_rdate, period_list); -} - -/** - * cal_component_set_rdate_list: - * @comp: A calendar component object. - * @period_list: List of #CalComponentPeriod structures. - * - * Sets the list of recurrence dates in a calendar component object. - **/ -void -cal_component_set_rdate_list (CalComponent *comp, GSList *period_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (period_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_period_list (comp, icalproperty_new_rdate, &priv->rdate_list, period_list); - - priv->need_sequence_inc = TRUE; -} - -/** - * cal_component_has_rdates: - * @comp: A calendar component object. - * - * Queries whether a calendar component object has any recurrence dates defined - * for it. - * - * Return value: TRUE if the component has recurrence dates, FALSE otherwise. - **/ -gboolean -cal_component_has_rdates (CalComponent *comp) -{ - CalComponentPrivate *priv; - - g_return_val_if_fail (comp != NULL, FALSE); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), FALSE); - - priv = comp->priv; - g_return_val_if_fail (priv->icalcomp != NULL, FALSE); - - return (priv->rdate_list != NULL); -} - -/** - * cal_component_get_rrule_list: - * @comp: A calendar component object. - * @recur_list: List of recurrence rules as struct #icalrecurrencetype - * structures. This should be freed using the cal_component_free_recur_list() - * function. - * - * Queries the list of recurrence rule properties of a calendar component - * object. - **/ -void -cal_component_get_rrule_list (CalComponent *comp, GSList **recur_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (recur_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - get_recur_list (priv->rrule_list, icalproperty_get_rrule, recur_list); -} - -/** - * cal_component_set_rrule_list: - * @comp: A calendar component object. - * @recur_list: List of struct #icalrecurrencetype structures. - * - * Sets the list of recurrence rules in a calendar component object. - **/ -void -cal_component_set_rrule_list (CalComponent *comp, GSList *recur_list) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (recur_list != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - set_recur_list (comp, icalproperty_new_rrule, &priv->rrule_list, recur_list); - - priv->need_sequence_inc = TRUE; -} - -/** - * cal_component_has_rrules: - * @comp: A calendar component object. - * - * Queries whether a calendar component object has any recurrence rules defined - * for it. - * - * Return value: TRUE if the component has recurrence rules, FALSE otherwise. - **/ -gboolean -cal_component_has_rrules (CalComponent *comp) -{ - CalComponentPrivate *priv; - - g_return_val_if_fail (comp != NULL, FALSE); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), FALSE); - - priv = comp->priv; - g_return_val_if_fail (priv->icalcomp != NULL, FALSE); - - return (priv->rrule_list != NULL); -} - -/** - * cal_component_get_sequence: - * @comp: A calendar component object. - * @sequence: Return value for the sequence number. This should be freed using - * cal_component_free_sequence(). - * - * Queries the sequence number of a calendar component object. - **/ -void -cal_component_get_sequence (CalComponent *comp, int **sequence) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (sequence != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!priv->sequence) { - *sequence = NULL; - return; - } - - *sequence = g_new (int, 1); - **sequence = icalproperty_get_sequence (priv->sequence); -} - -/** - * cal_component_set_sequence: - * @comp: A calendar component object. - * @sequence: Sequence number value. - * - * Sets the sequence number of a calendar component object. Normally this - * function should not be called, since the sequence number is incremented - * automatically at the proper times. - **/ -void -cal_component_set_sequence (CalComponent *comp, int *sequence) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - priv->need_sequence_inc = FALSE; - - if (!sequence) { - if (priv->sequence) { - icalcomponent_remove_property (priv->icalcomp, priv->sequence); - icalproperty_free (priv->sequence); - priv->sequence = NULL; - } - - return; - } - - if (priv->sequence) - icalproperty_set_sequence (priv->sequence, *sequence); - else { - priv->sequence = icalproperty_new_sequence (*sequence); - icalcomponent_add_property (priv->icalcomp, priv->sequence); - } -} - -/** - * cal_component_get_summary: - * @comp: A calendar component object. - * @summary: Return value for the summary property and its parameters. - * - * Queries the summary of a calendar component object. - **/ -void -cal_component_get_summary (CalComponent *comp, CalComponentText *summary) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (summary != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (priv->summary.prop) - summary->value = icalproperty_get_summary (priv->summary.prop); - else - summary->value = NULL; - - if (priv->summary.altrep_param) - summary->altrep = icalparameter_get_altrep (priv->summary.altrep_param); - else - summary->altrep = NULL; -} - -/** - * cal_component_set_summary: - * @comp: A calendar component object. - * @summary: Summary property and its parameters. - * - * Sets the summary of a calendar component object. - **/ -void -cal_component_set_summary (CalComponent *comp, CalComponentText *summary) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!summary) { - if (priv->summary.prop) { - icalcomponent_remove_property (priv->icalcomp, priv->summary.prop); - icalproperty_free (priv->summary.prop); - - priv->summary.prop = NULL; - priv->summary.altrep_param = NULL; - } - - return; - } - - g_return_if_fail (summary->value != NULL); - - if (priv->summary.prop) - icalproperty_set_summary (priv->summary.prop, (char *) summary->value); - else { - priv->summary.prop = icalproperty_new_summary ((char *) summary->value); - icalcomponent_add_property (priv->icalcomp, priv->summary.prop); - } - - if (summary->altrep) { - g_assert (priv->summary.prop != NULL); - - if (priv->summary.altrep_param) - icalparameter_set_altrep (priv->summary.altrep_param, - (char *) summary->altrep); - else { - priv->summary.altrep_param = icalparameter_new_altrep ( - (char *) summary->altrep); - icalproperty_add_parameter (priv->summary.prop, - priv->summary.altrep_param); - } - } else if (priv->summary.altrep_param) { -#if 0 - /* FIXME: this fucking routine will assert(0) since it is not implemented */ - icalproperty_remove_parameter (priv->summary.prop, ICAL_ALTREP_PARAMETER); - icalparameter_free (priv->summary.altrep_param); -#endif - priv->summary.altrep_param = NULL; - } -} - -/** - * cal_component_get_transparency: - * @comp: A calendar component object. - * @transp: Return value for the time transparency. - * - * Queries the time transparency of a calendar component object. - **/ -void -cal_component_get_transparency (CalComponent *comp, CalComponentTransparency *transp) -{ - CalComponentPrivate *priv; - const char *val; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (transp != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!priv->transparency) { - *transp = CAL_COMPONENT_TRANSP_NONE; - return; - } - - val = icalproperty_get_transp (priv->transparency); - - if (strcasecmp (val, "TRANSPARENT")) - *transp = CAL_COMPONENT_TRANSP_TRANSPARENT; - else if (strcasecmp (val, "OPAQUE")) - *transp = CAL_COMPONENT_TRANSP_OPAQUE; - else - *transp = CAL_COMPONENT_TRANSP_UNKNOWN; -} - -/** - * cal_component_set_transparency: - * @comp: A calendar component object. - * @transp: Time transparency value. - * - * Sets the time transparency of a calendar component object. - **/ -void -cal_component_set_transparency (CalComponent *comp, CalComponentTransparency transp) -{ - CalComponentPrivate *priv; - char *str; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (transp != CAL_COMPONENT_TRANSP_UNKNOWN); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - - if (transp == CAL_COMPONENT_TRANSP_NONE) { - if (priv->transparency) { - icalcomponent_remove_property (priv->icalcomp, priv->transparency); - icalproperty_free (priv->transparency); - priv->transparency = NULL; - } - - return; - } - - switch (transp) { - case CAL_COMPONENT_TRANSP_TRANSPARENT: - str = "TRANSPARENT"; - break; - - case CAL_COMPONENT_TRANSP_OPAQUE: - str = "OPAQUE"; - break; - - default: - g_assert_not_reached (); - str = NULL; - } - - if (priv->transparency) - icalproperty_set_transp (priv->transparency, str); - else { - priv->transparency = icalproperty_new_transp (str); - icalcomponent_add_property (priv->icalcomp, priv->transparency); - } -} - -/** - * cal_component_get_url: - * @comp: A calendar component object. - * @url: Return value for the URL. - * - * Queries the uniform resource locator property of a calendar component object. - **/ -void -cal_component_get_url (CalComponent *comp, const char **url) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - g_return_if_fail (url != NULL); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (priv->url) - *url = icalproperty_get_url (priv->url); - else - *url = NULL; -} - -/** - * cal_component_set_url: - * @comp: A calendar component object. - * @url: URL value. - * - * Sets the uniform resource locator property of a calendar component object. - **/ -void -cal_component_set_url (CalComponent *comp, const char *url) -{ - CalComponentPrivate *priv; - - g_return_if_fail (comp != NULL); - g_return_if_fail (IS_CAL_COMPONENT (comp)); - - priv = comp->priv; - g_return_if_fail (priv->icalcomp != NULL); - - if (!url) { - if (priv->url) { - icalcomponent_remove_property (priv->icalcomp, priv->url); - icalproperty_free (priv->url); - priv->url = NULL; - } - - return; - } - - if (priv->url) - icalproperty_set_url (priv->url, (char *) url); - else { - priv->url = icalproperty_new_url ((char *) url); - icalcomponent_add_property (priv->icalcomp, priv->url); - } -} - -/** - * cal_component_get_pilot_id: - * @comp: A calendar component object. - * @pilot_id: Return value for the pilot ID. - * - * Queries the pilot id of a calendar component object, if any. - **/ -void -cal_component_get_pilot_id (CalComponent *comp, unsigned long *pilot_id) -{ - /* pilot_id maybe should be recordid_t */ - /* FIX ME */ - *pilot_id = 0; -} - -/** - * cal_component_set_pilot_id: - * @comp: A calendar component object. - * @pilot_id: Return value for the pilot ID. - * - * Sets the pilot id of a clanedar component object. - **/ -void -cal_component_set_pilot_id (CalComponent *comp, unsigned long pilot_id) -{ - /* pilot_id maybe should be recordid_t */ - /* FIX ME */ -} - -/** - * cal_component_get_pilot_status: - * @comp: A calendar component object. - * @pilot_status: Return value for the pilot sync status. - * - * Queries the pilot status of a calendar component object, if any. - **/ -void -cal_component_get_pilot_status (CalComponent *comp, unsigned long *pilot_status) -{ - /* FIX ME */ - /* pilot_status should be iCalPilotState ? */ - *pilot_status = 0; -} - -/** - * cal_component_set_pilot_id: - * @comp: A calendar component object. - * @pilot_id: Return value for the pilot ID. - * - * Sets the pilot id of a clanedar component object. - **/ -void -cal_component_set_pilot_status (CalComponent *comp, unsigned long pilot_status) -{ - /* pilot_id maybe should be recordid_t */ - /* FIX ME */ -} - - - - - -/** - * cal_component_free_categories_list: - * @categ_list: List of category strings. - * - * Frees a list of category strings. - **/ -void -cal_component_free_categories_list (GSList *categ_list) -{ - GSList *l; - - for (l = categ_list; l; l = l->next) - g_free (l->data); - - g_slist_free (categ_list); -} - -/** - * cal_component_free_datetime: - * @dt: A date/time structure. - * - * Frees a date/time structure. - **/ -void -cal_component_free_datetime (CalComponentDateTime *dt) -{ - g_return_if_fail (dt != NULL); - - if (dt->value) - g_free (dt->value); -} - -/** - * cal_component_free_exdate_list: - * @exdate_list: List of struct #icaltimetype structures. - * - * Frees a list of struct #icaltimetype structures. - **/ -void -cal_component_free_exdate_list (GSList *exdate_list) -{ - GSList *l; - - for (l = exdate_list; l; l = l->next) { - struct icaltimetype *t; - - g_assert (l->data != NULL); - t = l->data; - - g_free (t); - } - - g_slist_free (exdate_list); -} - -/** - * cal_component_free_geo: - * @geo: An #icalgeotype structure. - * - * Frees a struct #icalgeotype structure as returned by the calendar component - * functions. - **/ -void -cal_component_free_geo (struct icalgeotype *geo) -{ - g_return_if_fail (geo != NULL); - - g_free (geo); -} - -/** - * cal_component_free_icaltimetype: - * @t: An #icaltimetype structure. - * - * Frees a struct #icaltimetype value as returned by the calendar component - * functions. - **/ -void -cal_component_free_icaltimetype (struct icaltimetype *t) -{ - g_return_if_fail (t != NULL); - - g_free (t); -} - -/** - * cal_component_free_percent: - * @percent: Percent value. - * - * Frees a percent value as returned by the cal_component_get_percent() - * function. - **/ -void -cal_component_free_percent (int *percent) -{ - g_return_if_fail (percent != NULL); - - g_free (percent); -} - -/** - * cal_component_free_priority: - * @priority: Priority value. - * - * Frees a priority value as returned by the cal_component_get_priority() - * function. - **/ -void -cal_component_free_priority (int *priority) -{ - g_return_if_fail (priority != NULL); - - g_free (priority); -} - -/** - * cal_component_free_period_list: - * @period_list: List of #CalComponentPeriod structures. - * - * Frees a list of #CalComponentPeriod structures. - **/ -void -cal_component_free_period_list (GSList *period_list) -{ - GSList *l; - - for (l = period_list; l; l = l->next) { - CalComponentPeriod *period; - - g_assert (l->data != NULL); - - period = l->data; - g_free (period); - } - - g_slist_free (period_list); -} - -/** - * cal_component_free_recur_list: - * @recur_list: List of struct #icalrecurrencetype structures. - * - * Frees a list of struct #icalrecurrencetype structures. - **/ -void -cal_component_free_recur_list (GSList *recur_list) -{ - GSList *l; - - for (l = recur_list; l; l = l->next) { - struct icalrecurrencetype *r; - - g_assert (l->data != NULL); - r = l->data; - - g_free (l); - } - - g_slist_free (recur_list); -} - -/** - * cal_component_free_sequence: - * @sequence: Sequence number value. - * - * Frees a sequence number value. - **/ -void -cal_component_free_sequence (int *sequence) -{ - g_return_if_fail (sequence != NULL); - - g_free (sequence); -} - -/** - * cal_component_free_text_list: - * @text_list: List of #CalComponentText structures. - * - * Frees a list of #CalComponentText structures. This function should only be - * used to free lists of text values as returned by the other getter functions - * of #CalComponent. - **/ -void -cal_component_free_text_list (GSList *text_list) -{ - GSList *l; - - for (l = text_list; l; l = l->next) { - CalComponentText *text; - - g_assert (l->data != NULL); - - text = l->data; - g_return_if_fail (text != NULL); - g_free (text); - } - - g_slist_free (text_list); -} - - - -/* Scans an icalproperty from a calendar component and adds its mapping to our - * own alarm structure. - */ -static void -scan_alarm_property (CalComponentAlarm *alarm, icalproperty *prop) -{ - icalproperty_kind kind; - - kind = icalproperty_isa (prop); - - switch (kind) { - case ICAL_ACTION_PROPERTY: - alarm->action = prop; - break; - - case ICAL_TRIGGER_PROPERTY: - alarm->trigger = prop; - break; - - default: - break; - } -} - -/* Creates a CalComponentAlarm from a libical alarm subcomponent */ -static CalComponentAlarm * -make_alarm (CalComponent *comp, icalcomponent *subcomp) -{ - CalComponentAlarm *alarm; - icalproperty *prop; - - alarm = g_new (CalComponentAlarm, 1); - - alarm->parent = comp; - alarm->icalcomp = subcomp; - - for (prop = icalcomponent_get_first_property (subcomp, ICAL_ANY_PROPERTY); - prop; - prop = icalcomponent_get_next_property (subcomp, ICAL_ANY_PROPERTY)) - scan_alarm_property (alarm, prop); - - return alarm; -} - -/** - * cal_component_get_first_alarm: - * @comp: A calendar component object. - * - * Starts an iterator for the alarms in a calendar component object. Subsequent - * alarms can be obtained with the cal_component_get_next_alarm() function. - * - * Return value: The first alarm in the component, or NULL if the component has - * no alarms. This should be freed using the cal_component_alarm_free() - * function. - **/ -CalComponentAlarm * -cal_component_get_first_alarm (CalComponent *comp) -{ - CalComponentPrivate *priv; - icalcomponent *subcomp; - - g_return_val_if_fail (comp != NULL, NULL); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), NULL); - - priv = comp->priv; - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - - subcomp = icalcomponent_get_first_component (priv->icalcomp, ICAL_VALARM_COMPONENT); - if (!subcomp) - return NULL; - - return make_alarm (comp, subcomp); -} - -/** - * cal_component_get_next_alarm: - * @comp: A calendar component object. - * - * Gets the next alarm on a calendar component object. This should be used as - * an iterator function after calling cal_component_get_first_alarm(). - * - * Return value: The next alarm in the component, or NULL if the component has - * no more alarms. This should be freed using the cal_component_alarm_free() - * function. - **/ -CalComponentAlarm * -cal_component_get_next_alarm (CalComponent *comp) -{ - CalComponentPrivate *priv; - icalcomponent *subcomp; - - g_return_val_if_fail (comp != NULL, NULL); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), NULL); - - priv = comp->priv; - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - - subcomp = icalcomponent_get_next_component (priv->icalcomp, ICAL_VALARM_COMPONENT); - if (!subcomp) - return NULL; - - return make_alarm (comp, subcomp); -} - -/** - * cal_component_alarm_free: - * @alarm: A calendar alarm. - * - * Frees an alarm structure. - **/ -void -cal_component_alarm_free (CalComponentAlarm *alarm) -{ - g_return_if_fail (alarm != NULL); - - g_assert (alarm->icalcomp != NULL); - - if (icalcomponent_get_parent (alarm->icalcomp) != NULL) - icalcomponent_free (alarm->icalcomp); - - alarm->icalcomp = NULL; - - alarm->parent = NULL; - alarm->action = NULL; - - g_free (alarm); -} - -/** - * cal_component_alarm_get_action: - * @alarm: An alarm. - * @action: Return value for the alarm's action type. - * - * Queries the action type of an alarm. - **/ -void -cal_component_alarm_get_action (CalComponentAlarm *alarm, CalComponentAlarmAction *action) -{ - const char *str; - - g_return_if_fail (alarm != NULL); - g_return_if_fail (action != NULL); - - g_assert (alarm->icalcomp != NULL); - - if (!alarm->action) { - *action = CAL_COMPONENT_ALARM_NONE; - return; - } - - str = icalproperty_get_action (alarm->action); - - if (strcasecmp (str, "AUDIO") == 0) - *action = CAL_COMPONENT_ALARM_AUDIO; - else if (strcasecmp (str, "DISPLAY") == 0) - *action = CAL_COMPONENT_ALARM_DISPLAY; - else if (strcasecmp (str, "EMAIL") == 0) - *action = CAL_COMPONENT_ALARM_EMAIL; - else if (strcasecmp (str, "PROCEDURE") == 0) - *action = CAL_COMPONENT_ALARM_PROCEDURE; - else - *action = CAL_COMPONENT_ALARM_UNKNOWN; -} - -/** - * cal_component_alarm_set_action: - * @alarm: An alarm. - * @action: Action type. - * - * Sets the action type for an alarm. - **/ -void -cal_component_alarm_set_action (CalComponentAlarm *alarm, CalComponentAlarmAction action) -{ - char *str; - - g_return_if_fail (alarm != NULL); - g_return_if_fail (action != CAL_COMPONENT_ALARM_NONE); - g_return_if_fail (action != CAL_COMPONENT_ALARM_UNKNOWN); - - g_assert (alarm->icalcomp != NULL); - - switch (action) { - case CAL_COMPONENT_ALARM_AUDIO: - str = "AUDIO"; - break; - - case CAL_COMPONENT_ALARM_DISPLAY: - str = "DISPLAY"; - break; - - case CAL_COMPONENT_ALARM_EMAIL: - str = "EMAIL"; - break; - - case CAL_COMPONENT_ALARM_PROCEDURE: - str = "PROCEDURE"; - break; - - default: - g_assert_not_reached (); - str = NULL; - } - - if (alarm->action) - icalproperty_set_action (alarm->action, str); - else { - alarm->action = icalproperty_new_action (str); - icalcomponent_add_property (alarm->icalcomp, alarm->action); - } -} - -/** - * cal_component_alarm_get_trigger: - * @alarm: An alarm. - * @trigger: Return value for the trigger time. This should be freed using the - * cal_component_alarm_free_trigger() function. - * - * Queries the trigger time for an alarm. - **/ -void -cal_component_alarm_get_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrigger **trigger) -{ - icalparameter *param; - union icaltriggertype t; - - g_return_if_fail (alarm != NULL); - g_return_if_fail (trigger != NULL); - - g_assert (alarm->icalcomp != NULL); - - if (!alarm->trigger) { - *trigger = NULL; - return; - } - - *trigger = g_new (CalComponentAlarmTrigger, 1); - - /* Get trigger type */ - - param = icalproperty_get_first_parameter (alarm->trigger, ICAL_VALUE_PARAMETER); - - if (param) { - icalparameter_value value; - - value = icalparameter_get_value (param); - - switch (value) { - case ICAL_VALUE_DURATION: - (*trigger)->type = CAL_COMPONENT_ALARM_TRIGGER_RELATIVE; - break; - - case ICAL_VALUE_DATETIME: - (*trigger)->type = CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE; - break; - - default: - g_message ("cal_component_alarm_get_trigger(): Unknown value for trigger " - "value %d; using RELATIVE", value); - - (*trigger)->type = CAL_COMPONENT_ALARM_TRIGGER_RELATIVE; - break; - } - } else - (*trigger)->type = CAL_COMPONENT_ALARM_TRIGGER_RELATIVE; - - /* Get trigger value and the RELATED parameter */ - - t = icalproperty_get_trigger (alarm->trigger); - - switch ((*trigger)->type) { - case CAL_COMPONENT_ALARM_TRIGGER_RELATIVE: - (*trigger)->u.relative.duration = t.duration; - - param = icalproperty_get_first_parameter (alarm->trigger, ICAL_RELATED_PARAMETER); - if (param) { - icalparameter_related rel; - - rel = icalparameter_get_related (param); - - switch (rel) { - case ICAL_RELATED_START: - (*trigger)->u.relative.related = - CAL_COMPONENT_ALARM_TRIGGER_RELATED_START; - break; - - case ICAL_RELATED_END: - (*trigger)->u.relative.related = - CAL_COMPONENT_ALARM_TRIGGER_RELATED_END; - break; - - default: - g_assert_not_reached (); - } - } else - (*trigger)->u.relative.related = CAL_COMPONENT_ALARM_TRIGGER_RELATED_START; - - break; - - case CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE: - (*trigger)->u.absolute = t.time; - break; - - default: - g_assert_not_reached (); - } -} - -/** - * cal_component_alarm_set_trigger: - * @alarm: An alarm. - * @trigger: Trigger time structure. - * - * Sets the trigger time of an alarm. - **/ -void -cal_component_alarm_set_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrigger *trigger) -{ - union icaltriggertype t; - icalparameter *param; - icalparameter_value value_type; - icalparameter_related related; - - g_return_if_fail (alarm != NULL); - g_return_if_fail (trigger != NULL); - - g_assert (alarm->icalcomp != NULL); - - /* Delete old trigger */ - - if (alarm->trigger) { - icalcomponent_remove_property (alarm->icalcomp, alarm->trigger); - icalproperty_free (alarm->trigger); - alarm->trigger = NULL; - } - - /* Set the value */ - - value_type = ICAL_DURATION_VALUE; /* Keep GCC happy */ - related = ICAL_RELATED_START; /* Ditto */ - - switch (trigger->type) { - case CAL_COMPONENT_ALARM_TRIGGER_RELATIVE: - t.duration = trigger->u.relative.duration; - value_type = ICAL_DURATION_VALUE; - - switch (trigger->u.relative.related) { - case CAL_COMPONENT_ALARM_TRIGGER_RELATED_START: - related = ICAL_RELATED_START; - break; - - case CAL_COMPONENT_ALARM_TRIGGER_RELATED_END: - related = ICAL_RELATED_END; - break; - - default: - g_assert_not_reached (); - return; - } - - break; - - case CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE: - t.time = trigger->u.absolute; - value_type = ICAL_DATETIME_VALUE; - break; - - default: - g_assert_not_reached (); - return; - } - - alarm->trigger = icalproperty_new_trigger (t); - icalcomponent_add_property (alarm->icalcomp, alarm->trigger); - - /* Value parameters */ - - param = icalproperty_get_first_parameter (alarm->trigger, ICAL_VALUE_PARAMETER); - if (param) - icalparameter_set_value (param, value_type); - else { - param = icalparameter_new_value (value_type); - icalproperty_add_parameter (alarm->trigger, param); - } - - /* Related parameter */ - - if (trigger->type == CAL_COMPONENT_ALARM_TRIGGER_RELATIVE) { - param = icalproperty_get_first_parameter (alarm->trigger, ICAL_RELATED_PARAMETER); - - if (param) - icalparameter_set_related (param, related); - else { - param = icalparameter_new_related (related); - icalproperty_add_parameter (alarm->trigger, param); - } - } -} - -/** - * cal_component_alarm_free_trigger: - * @trigger: A #CalComponentAlarmTrigger structure. - * - * Frees a #CalComponentAlarmTrigger structure. - **/ -void -cal_component_alarm_free_trigger (CalComponentAlarmTrigger *trigger) -{ - g_return_if_fail (trigger != NULL); - - g_free (trigger); -} diff --git a/calendar/cal-util/cal-component.h b/calendar/cal-util/cal-component.h deleted file mode 100644 index c8e2627448..0000000000 --- a/calendar/cal-util/cal-component.h +++ /dev/null @@ -1,306 +0,0 @@ -/* Evolution calendar - iCalendar component object - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_COMPONENT_H -#define CAL_COMPONENT_H - -#include -#include -#include -#include - -BEGIN_GNOME_DECLS - - - -#define CAL_COMPONENT_TYPE (cal_component_get_type ()) -#define CAL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), CAL_COMPONENT_TYPE, CalComponent)) -#define CAL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_COMPONENT_TYPE, \ - CalComponentClass)) -#define IS_CAL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), CAL_COMPONENT_TYPE)) -#define IS_CAL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_COMPONENT_TYPE)) - -/* Types of calendar components to be stored by a CalComponent, as per RFC 2445. - * We don't put the alarm component type here since we store alarms as separate - * structures inside the other "real" components. - */ -typedef enum { - CAL_COMPONENT_NO_TYPE, - CAL_COMPONENT_EVENT, - CAL_COMPONENT_TODO, - CAL_COMPONENT_JOURNAL, - CAL_COMPONENT_FREEBUSY, - CAL_COMPONENT_TIMEZONE -} CalComponentVType; - -/* Field identifiers for a calendar component */ -typedef enum { - CAL_COMPONENT_FIELD_CATEGORIES, /* concatenation of the categories list */ - CAL_COMPONENT_FIELD_CLASSIFICATION, - CAL_COMPONENT_FIELD_COMPLETED, - CAL_COMPONENT_FIELD_DTEND, - CAL_COMPONENT_FIELD_DTSTART, - CAL_COMPONENT_FIELD_DUE, - CAL_COMPONENT_FIELD_GEO, - CAL_COMPONENT_FIELD_PERCENT, - CAL_COMPONENT_FIELD_PRIORITY, - CAL_COMPONENT_FIELD_SUMMARY, - CAL_COMPONENT_FIELD_TRANSPARENCY, - CAL_COMPONENT_FIELD_URL, - CAL_COMPONENT_FIELD_HAS_ALARMS, /* not a real field */ - CAL_COMPONENT_FIELD_ICON, /* not a real field */ - CAL_COMPONENT_FIELD_COMPLETE, /* not a real field */ - CAL_COMPONENT_FIELD_RECURRING, /* not a real field */ - CAL_COMPONENT_FIELD_OVERDUE, /* not a real field */ - CAL_COMPONENT_FIELD_COLOR, /* not a real field */ - CAL_COMPONENT_FIELD_NUM_FIELDS -} CalComponentField; - -/* Structures to return properties and their parameters */ - -typedef enum { - CAL_COMPONENT_CLASS_NONE, - CAL_COMPONENT_CLASS_PUBLIC, - CAL_COMPONENT_CLASS_PRIVATE, - CAL_COMPONENT_CLASS_CONFIDENTIAL, - CAL_COMPONENT_CLASS_UNKNOWN -} CalComponentClassification; - -typedef struct { - /* Actual date/time value */ - struct icaltimetype *value; - - /* Timezone ID */ - const char *tzid; -} CalComponentDateTime; - -typedef enum { - CAL_COMPONENT_PERIOD_DATETIME, - CAL_COMPONENT_PERIOD_DURATION -} CalComponentPeriodType; - -typedef struct { - CalComponentPeriodType type; - - struct icaltimetype start; - - union { - struct icaltimetype end; - struct icaldurationtype duration; - } u; -} CalComponentPeriod; - -typedef struct { - /* Description string */ - const char *value; - - /* Alternate representation URI */ - const char *altrep; -} CalComponentText; - -typedef enum { - CAL_COMPONENT_TRANSP_NONE, - CAL_COMPONENT_TRANSP_TRANSPARENT, - CAL_COMPONENT_TRANSP_OPAQUE, - CAL_COMPONENT_TRANSP_UNKNOWN -} CalComponentTransparency; - -typedef struct _CalComponentAlarm CalComponentAlarm; - -typedef struct _CalComponent CalComponent; -typedef struct _CalComponentClass CalComponentClass; - -typedef struct _CalComponentPrivate CalComponentPrivate; - -struct _CalComponent { - GtkObject object; - - /* Private data */ - CalComponentPrivate *priv; -}; - -struct _CalComponentClass { - GtkObjectClass parent_class; -}; - -/* Calendar component */ - -GtkType cal_component_get_type (void); - -char *cal_component_gen_uid (void); - -CalComponent *cal_component_new (void); - -CalComponent *cal_component_clone (CalComponent *comp); - -void cal_component_set_new_vtype (CalComponent *comp, CalComponentVType type); - -gboolean cal_component_set_icalcomponent (CalComponent *comp, icalcomponent *icalcomp); -icalcomponent *cal_component_get_icalcomponent (CalComponent *comp); - -CalComponentVType cal_component_get_vtype (CalComponent *comp); - -char *cal_component_get_as_string (CalComponent *comp); - -void cal_component_commit_sequence (CalComponent *comp); - -void cal_component_get_uid (CalComponent *comp, const char **uid); -void cal_component_set_uid (CalComponent *comp, const char *uid); - -void cal_component_get_categories_list (CalComponent *comp, GSList **categ_list); -void cal_component_set_categories_list (CalComponent *comp, GSList *categ_list); - -void cal_component_get_classification (CalComponent *comp, CalComponentClassification *classif); -void cal_component_set_classification (CalComponent *comp, CalComponentClassification classif); - -void cal_component_get_comment_list (CalComponent *comp, GSList **text_list); -void cal_component_set_comment_list (CalComponent *comp, GSList *text_list); - -void cal_component_get_completed (CalComponent *comp, struct icaltimetype **t); -void cal_component_set_completed (CalComponent *comp, struct icaltimetype *t); - -void cal_component_get_created (CalComponent *comp, struct icaltimetype **t); -void cal_component_set_created (CalComponent *comp, struct icaltimetype *t); - -void cal_component_get_description_list (CalComponent *comp, GSList **text_list); -void cal_component_set_description_list (CalComponent *comp, GSList *text_list); - -void cal_component_get_dtend (CalComponent *comp, CalComponentDateTime *dt); -void cal_component_set_dtend (CalComponent *comp, CalComponentDateTime *dt); - -void cal_component_get_dtstamp (CalComponent *comp, struct icaltimetype *t); -void cal_component_set_dtstamp (CalComponent *comp, struct icaltimetype *t); - -void cal_component_get_dtstart (CalComponent *comp, CalComponentDateTime *dt); -void cal_component_set_dtstart (CalComponent *comp, CalComponentDateTime *dt); - -void cal_component_get_due (CalComponent *comp, CalComponentDateTime *dt); -void cal_component_set_due (CalComponent *comp, CalComponentDateTime *dt); - -void cal_component_get_exdate_list (CalComponent *comp, GSList **exdate_list); -void cal_component_set_exdate_list (CalComponent *comp, GSList *exdate_list); - -void cal_component_get_exrule_list (CalComponent *comp, GSList **recur_list); -void cal_component_set_exrule_list (CalComponent *comp, GSList *recur_list); - -void cal_component_get_geo (CalComponent *comp, struct icalgeotype **geo); -void cal_component_set_geo (CalComponent *comp, struct icalgeotype *geo); - -void cal_component_get_last_modified (CalComponent *comp, struct icaltimetype **t); -void cal_component_set_last_modified (CalComponent *comp, struct icaltimetype *t); - -void cal_component_get_percent (CalComponent *comp, int **percent); -void cal_component_set_percent (CalComponent *comp, int *percent); - -void cal_component_get_priority (CalComponent *comp, int **priority); -void cal_component_set_priority (CalComponent *comp, int *priority); - -void cal_component_get_rdate_list (CalComponent *comp, GSList **period_list); -void cal_component_set_rdate_list (CalComponent *comp, GSList *period_list); -gboolean cal_component_has_rdates (CalComponent *comp); - -void cal_component_get_rrule_list (CalComponent *comp, GSList **recur_list); -void cal_component_set_rrule_list (CalComponent *comp, GSList *recur_list); -gboolean cal_component_has_rrules (CalComponent *comp); - -void cal_component_get_sequence (CalComponent *comp, int **sequence); -void cal_component_set_sequence (CalComponent *comp, int *sequence); - -void cal_component_get_summary (CalComponent *comp, CalComponentText *summary); -void cal_component_set_summary (CalComponent *comp, CalComponentText *summary); - -void cal_component_get_transparency (CalComponent *comp, CalComponentTransparency *transp); -void cal_component_set_transparency (CalComponent *comp, CalComponentTransparency transp); - -void cal_component_get_url (CalComponent *comp, const char **url); -void cal_component_set_url (CalComponent *comp, const char *url); - -void cal_component_get_pilot_id (CalComponent *comp, unsigned long *pilot_id); -void cal_component_set_pilot_id (CalComponent *comp, unsigned long pilot_id); - -void cal_component_get_pilot_status (CalComponent *comp, unsigned long *pilot_status); -void cal_component_set_pilot_status (CalComponent *comp, unsigned long pilot_status); - -/* Functions to free returned values */ - -void cal_component_free_categories_list (GSList *categ_list); -void cal_component_free_datetime (CalComponentDateTime *dt); -void cal_component_free_exdate_list (GSList *exdate_list); -void cal_component_free_geo (struct icalgeotype *geo); -void cal_component_free_icaltimetype (struct icaltimetype *t); -void cal_component_free_percent (int *percent); -void cal_component_free_priority (int *priority); -void cal_component_free_period_list (GSList *period_list); -void cal_component_free_recur_list (GSList *recur_list); -void cal_component_free_sequence (int *sequence); -void cal_component_free_text_list (GSList *text_list); - -/* Alarms */ - -typedef enum { - CAL_COMPONENT_ALARM_NONE, - CAL_COMPONENT_ALARM_AUDIO, - CAL_COMPONENT_ALARM_DISPLAY, - CAL_COMPONENT_ALARM_EMAIL, - CAL_COMPONENT_ALARM_PROCEDURE, - CAL_COMPONENT_ALARM_UNKNOWN -} CalComponentAlarmAction; - -typedef enum { - CAL_COMPONENT_ALARM_TRIGGER_RELATIVE, - CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE -} CalComponentAlarmTriggerType; - -typedef enum { - CAL_COMPONENT_ALARM_TRIGGER_RELATED_START, - CAL_COMPONENT_ALARM_TRIGGER_RELATED_END -} CalComponentAlarmTriggerRelated; - -typedef struct { - CalComponentAlarmTriggerType type; - - union { - struct { - struct icaldurationtype duration; - CalComponentAlarmTriggerRelated related; - } relative; - - struct icaltimetype absolute; - } u; -} CalComponentAlarmTrigger; - -CalComponentAlarm *cal_component_get_first_alarm (CalComponent *comp); -CalComponentAlarm *cal_component_get_next_alarm (CalComponent *comp); - -void cal_component_alarm_free (CalComponentAlarm *alarm); - -void cal_component_alarm_get_action (CalComponentAlarm *alarm, CalComponentAlarmAction *action); -void cal_component_alarm_set_action (CalComponentAlarm *alarm, CalComponentAlarmAction action); - -void cal_component_alarm_get_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrigger **trigger); -void cal_component_alarm_set_trigger (CalComponentAlarm *alarm, CalComponentAlarmTrigger *trigger); -void cal_component_alarm_free_trigger (CalComponentAlarmTrigger *trigger); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c deleted file mode 100644 index 164ffdbfc6..0000000000 --- a/calendar/cal-util/cal-recur.c +++ /dev/null @@ -1,3054 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Evolution calendar recurrence rule functions - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Damon Chaplin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include - - -/* - * Introduction to The Recurrence Generation Functions: - * - * Note: This is pretty complicated. See the iCalendar spec (RFC 2445) for - * the specification of the recurrence rules and lots of examples - * (sections 4.3.10 & 4.8.5). We also want to support the older - * vCalendar spec, though this should be easy since it is basically a - * subset of iCalendar. - * - * o An iCalendar event can have any number of recurrence rules specifying - * occurrences of the event, as well as dates & times of specific - * occurrences. It can also have any number of recurrence rules and - * specific dates & times specifying exceptions to the occurrences. - * So we first merge all the occurrences generated, eliminating any - * duplicates, then we generate all the exceptions and remove these to - * form the final set of occurrences. - * - * o There are 7 frequencies of occurrences: YEARLY, MONTHLY, WEEKLY, DAILY, - * HOURLY, MINUTELY & SECONDLY. The 'interval' property specifies the - * multiples of the frequency which we step by. We generate a 'set' of - * occurrences for each period defined by the frequency & interval. - * So for a YEARLY frequency with an interval of 3, we generate a set of - * occurrences for every 3rd year. We use complete years here - any - * generated occurrences that occur before the event's start (or after its - * end) are just discarded. - * - * o There are 8 frequency modifiers: BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, - * BYDAY, BYHOUR, BYMINUTE & BYSECOND. These can either add extra occurrences - * or filter out occurrences. For example 'FREQ=YEARLY;BYMONTH=1,2' produces - * 2 occurrences for each year rather than the default 1. And - * 'FREQ=DAILY;BYMONTH=1' filters out all occurrences except those in Jan. - * If the modifier works on periods which are less than the recurrence - * frequency, then extra occurrences are added, otherwise occurrences are - * filtered. So we have 2 functions for each modifier - one to expand events - * and the other to filter. We use a table of functions for each frequency - * which points to the appropriate function to use for each modifier. - * - * o Any number of frequency modifiers can be used in a recurrence rule. - * (Though the iCalendar spec says that BYWEEKNO can only be used in a YEARLY - * rule, and some modifiers aren't appropriate for some frequencies - e.g. - * BYMONTHDAY is not really useful in a WEEKLY frequency, and BYYEARDAY is - * not useful in a MONTHLY or WEEKLY frequency). - * The frequency modifiers are applied in the order given above. The first 5 - * modifier rules (BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY & BYDAY) all - * produce the days on which the occurrences take place, and so we have to - * compute some of these in parallel rather than sequentially, or we may end - * up with too many days. - * - * o Note that some expansion functions may produce days which are invalid, - * e.g. 31st September, 30th Feb. These invalid days are removed before the - * BYHOUR, BYMINUTE & BYSECOND modifier functions are applied. - * - * o After the set of occurrences for the frequency interval are generated, - * the BYSETPOS property is used to select which of the occurrences are - * finally output. If BYSETPOS is not specified then all the occurrences are - * output. - */ - - -/* This is what we use to pass to all the filter functions. */ -typedef struct _RecurData RecurData; -struct _RecurData { - CalRecurrence *recur; - - /* This is used for the WEEKLY frequency. */ - gint weekday; - - /* This is used for fast lookup in BYMONTH filtering. */ - guint8 months[12]; - - /* This is used for fast lookup in BYYEARDAY filtering. */ - guint8 yeardays[367], neg_yeardays[367]; /* Days are 1 - 366. */ - - /* This is used for fast lookup in BYMONTHDAY filtering. */ - guint8 monthdays[32], neg_monthdays[32]; /* Days are 1 to 31. */ - - /* This is used for fast lookup in BYDAY filtering. */ - guint8 weekdays[7]; - - /* This is used for fast lookup in BYHOUR filtering. */ - guint8 hours[24]; - - /* This is used for fast lookup in BYMINUTE filtering. */ - guint8 minutes[60]; - - /* This is used for fast lookup in BYSECOND filtering. */ - guint8 seconds[61]; -}; - - - -typedef gboolean (*CalObjFindStartFn) (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -typedef gboolean (*CalObjFindNextFn) (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); -typedef GArray* (*CalObjFilterFn) (RecurData *recur_data, - GArray *occs); - -typedef struct _CalRecurVTable CalRecurVTable; -struct _CalRecurVTable { - CalObjFindStartFn find_start_position; - CalObjFindNextFn find_next_position; - - CalObjFilterFn bymonth_filter; - CalObjFilterFn byweekno_filter; - CalObjFilterFn byyearday_filter; - CalObjFilterFn bymonthday_filter; - CalObjFilterFn byday_filter; - CalObjFilterFn byhour_filter; - CalObjFilterFn byminute_filter; - CalObjFilterFn bysecond_filter; -}; - - -/* This is used to specify which parts of the CalObjTime to compare in - cal_obj_time_compare(). */ -typedef enum { - CALOBJ_YEAR, - CALOBJ_MONTH, - CALOBJ_DAY, - CALOBJ_HOUR, - CALOBJ_MINUTE, - CALOBJ_SECOND -} CalObjTimeComparison; - -static void cal_object_compute_duration (CalObjTime *start, - CalObjTime *end, - gint *days, - gint *seconds); - -static gboolean generate_instances_for_year (CalComponent *comp, - time_t comp_dtstart, - GSList *rrules, - GSList *rdates, - GSList *exrules, - GSList *exdates, - CalObjTime *event_start, - CalObjTime *interval_start, - CalObjTime *interval_end, - time_t interval_start_time, - time_t interval_end_time, - gint duration_days, - gint duration_seconds, - CalRecurInstanceFn cb, - gpointer cb_data); - -static GArray* cal_obj_expand_recurrence (CalObjTime *event_start, - CalRecurrence *recur, - CalObjTime *interval_start, - CalObjTime *interval_end); - -static GArray* cal_obj_generate_set_yearly (RecurData *recur_data, - CalRecurVTable *vtable, - CalObjTime *occ); -static GArray* cal_obj_generate_set_monthly (RecurData *recur_data, - CalRecurVTable *vtable, - CalObjTime *occ); -static GArray* cal_obj_generate_set_default (RecurData *recur_data, - CalRecurVTable *vtable, - CalObjTime *occ); - - -static CalRecurVTable* cal_obj_get_vtable (CalRecurType recur_type); -static void cal_obj_initialize_recur_data (RecurData *recur_data, - CalRecurrence *recur, - CalObjTime *event_start); -static void cal_obj_sort_occurrences (GArray *occs); -static gint cal_obj_time_compare_func (const void *arg1, - const void *arg2); -static void cal_obj_remove_duplicates_and_invalid_dates (GArray *occs); -static void cal_obj_remove_exceptions (GArray *occs, - GArray *ex_occs); -static GArray* cal_obj_bysetpos_filter (CalRecurrence *recur, - GArray *occs); - - -static gboolean cal_obj_yearly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_yearly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static gboolean cal_obj_monthly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_monthly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static gboolean cal_obj_weekly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_weekly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static gboolean cal_obj_daily_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_daily_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static gboolean cal_obj_hourly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_hourly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static gboolean cal_obj_minutely_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_minutely_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static gboolean cal_obj_secondly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime); -static gboolean cal_obj_secondly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end); - -static GArray* cal_obj_bymonth_expand (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_bymonth_filter (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byweekno_expand (RecurData *recur_data, - GArray *occs); -#if 0 -/* This isn't used at present. */ -static GArray* cal_obj_byweekno_filter (RecurData *recur_data, - GArray *occs); -#endif -static GArray* cal_obj_byyearday_expand (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byyearday_filter (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_bymonthday_expand (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_bymonthday_filter (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byday_expand_yearly (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byday_expand_monthly (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byday_expand_weekly (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byday_filter (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byhour_expand (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byhour_filter (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byminute_expand (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_byminute_filter (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_bysecond_expand (RecurData *recur_data, - GArray *occs); -static GArray* cal_obj_bysecond_filter (RecurData *recur_data, - GArray *occs); - -static void cal_obj_time_add_months (CalObjTime *cotime, - gint months); -static void cal_obj_time_add_days (CalObjTime *cotime, - gint days); -static void cal_obj_time_subtract_days (CalObjTime *cotime, - gint days); -static void cal_obj_time_add_hours (CalObjTime *cotime, - gint hours); -static void cal_obj_time_add_minutes (CalObjTime *cotime, - gint minutes); -static void cal_obj_time_add_seconds (CalObjTime *cotime, - gint seconds); -static gint cal_obj_time_compare (CalObjTime *cotime1, - CalObjTime *cotime2, - CalObjTimeComparison type); -static gint cal_obj_time_weekday (CalObjTime *cotime, - CalRecurrence *recur); -static gint cal_obj_time_day_of_year (CalObjTime *cotime); -static void cal_obj_time_find_first_week (CalObjTime *cotime, - RecurData *recur_data); -static void cal_object_time_from_time (CalObjTime *cotime, - time_t t); - - -CalRecurVTable cal_obj_yearly_vtable = { - cal_obj_yearly_find_start_position, - cal_obj_yearly_find_next_position, - - cal_obj_bymonth_expand, - cal_obj_byweekno_expand, - cal_obj_byyearday_expand, - cal_obj_bymonthday_expand, - cal_obj_byday_expand_yearly, - cal_obj_byhour_expand, - cal_obj_byminute_expand, - cal_obj_bysecond_expand -}; - -CalRecurVTable cal_obj_monthly_vtable = { - cal_obj_monthly_find_start_position, - cal_obj_monthly_find_next_position, - - cal_obj_bymonth_filter, - NULL, /* BYWEEKNO is only applicable to YEARLY frequency. */ - NULL, /* BYYEARDAY is not useful in a MONTHLY frequency. */ - cal_obj_bymonthday_expand, - cal_obj_byday_expand_monthly, - cal_obj_byhour_expand, - cal_obj_byminute_expand, - cal_obj_bysecond_expand -}; - -CalRecurVTable cal_obj_weekly_vtable = { - cal_obj_weekly_find_start_position, - cal_obj_weekly_find_next_position, - - cal_obj_bymonth_filter, - NULL, /* BYWEEKNO is only applicable to YEARLY frequency. */ - NULL, /* BYYEARDAY is not useful in a WEEKLY frequency. */ - NULL, /* BYMONTHDAY is not useful in a WEEKLY frequency. */ - cal_obj_byday_expand_weekly, - cal_obj_byhour_expand, - cal_obj_byminute_expand, - cal_obj_bysecond_expand -}; - -CalRecurVTable cal_obj_daily_vtable = { - cal_obj_daily_find_start_position, - cal_obj_daily_find_next_position, - - cal_obj_bymonth_filter, - NULL, /* BYWEEKNO is only applicable to YEARLY frequency. */ - cal_obj_byyearday_filter, - cal_obj_bymonthday_filter, - cal_obj_byday_filter, - cal_obj_byhour_expand, - cal_obj_byminute_expand, - cal_obj_bysecond_expand -}; - -CalRecurVTable cal_obj_hourly_vtable = { - cal_obj_hourly_find_start_position, - cal_obj_hourly_find_next_position, - - cal_obj_bymonth_filter, - NULL, /* BYWEEKNO is only applicable to YEARLY frequency. */ - cal_obj_byyearday_filter, - cal_obj_bymonthday_filter, - cal_obj_byday_filter, - cal_obj_byhour_filter, - cal_obj_byminute_expand, - cal_obj_bysecond_expand -}; - -CalRecurVTable cal_obj_minutely_vtable = { - cal_obj_minutely_find_start_position, - cal_obj_minutely_find_next_position, - - cal_obj_bymonth_filter, - NULL, /* BYWEEKNO is only applicable to YEARLY frequency. */ - cal_obj_byyearday_filter, - cal_obj_bymonthday_filter, - cal_obj_byday_filter, - cal_obj_byhour_filter, - cal_obj_byminute_filter, - cal_obj_bysecond_expand -}; - -CalRecurVTable cal_obj_secondly_vtable = { - cal_obj_secondly_find_start_position, - cal_obj_secondly_find_next_position, - - cal_obj_bymonth_filter, - NULL, /* BYWEEKNO is only applicable to YEARLY frequency. */ - cal_obj_byyearday_filter, - cal_obj_bymonthday_filter, - cal_obj_byday_filter, - cal_obj_byhour_filter, - cal_obj_byminute_filter, - cal_obj_bysecond_filter -}; - -/* - * Calls the given callback function for each occurrence of the event between - * the given start and end times. If end is 0 it continues until the event - * ends or forever if the event has an infinite recurrence rule. - * If the callback routine return 0 the occurrence generation stops. - */ -void -cal_recur_generate_instances (CalComponent *comp, - time_t start, - time_t end, - CalRecurInstanceFn cb, - gpointer cb_data) -{ - CalComponentDateTime dtstart, dtend; - time_t dtstart_time; - GSList *rrules, *rdates, *exrules, *exdates; - CalObjTime interval_start, interval_end, event_start; - CalObjTime chunk_start, chunk_end; - gint days, seconds, year; - - g_return_if_fail (comp != NULL); - g_return_if_fail (cb != NULL); - - /* Get dtstart, dtend, recurrences, and exceptions */ - - cal_component_get_dtstart (comp, &dtstart); - cal_component_get_dtend (comp, &dtend); - - if (!dtstart.value) { - g_message ("cal_recur_generate_instances(): bogus component, does not have " - "DTSTART. Skipping..."); - goto out; - } - - dtstart_time = time_from_icaltimetype (*dtstart.value); - - cal_component_get_rrule_list (comp, &rrules); - cal_component_get_rdate_list (comp, &rdates); - cal_component_get_exrule_list (comp, &exrules); - cal_component_get_exdate_list (comp, &exdates); - - /* If there is no recurrence, just call the callback if the event - intersects the given interval. */ - - if (!(rrules || rdates || exrules || exdates)) { - time_t dtend_time; - - if (dtend.value) - dtend_time = time_from_icaltimetype (*dtend.value); - else - dtend_time = time_day_end (dtstart_time); - - if ((end && dtstart_time < end && dtend_time > start) - || (end == 0 && dtend_time > start)) { - (* cb) (comp, dtstart_time, dtend_time, cb_data); - } - - goto out; - } - - /* Convert the interval start & end to CalObjTime. */ - cal_object_time_from_time (&interval_start, start); - cal_object_time_from_time (&interval_end, end); - - cal_object_time_from_time (&event_start, dtstart_time); - - /* Calculate the duration of the event, which we use for all - occurrences. We can't just subtract start from end since that may - be affected by daylight-saving time. We also don't want to just - use the number of seconds, since leap seconds will then cause a - problem. So we want a value of days + seconds. */ - cal_object_compute_duration (&interval_start, &interval_end, - &days, &seconds); - - /* Expand the recurrence for each year between start & end, or until - the callback returns 0 if end is 0. */ - for (year = interval_start.year; year <= interval_end.year; year++) { - chunk_start = interval_start; - chunk_start.year = year; - chunk_end = interval_end; - chunk_end.year = year; - - if (year != interval_start.year) { - chunk_start.month = 0; - chunk_start.day = 0; - chunk_start.hour = 0; - chunk_start.minute = 0; - chunk_start.second = 0; - } - if (year != interval_end.year) { - chunk_end.year++; - chunk_end.month = 0; - chunk_end.day = 0; - chunk_end.hour = 0; - chunk_end.minute = 0; - chunk_end.second = 0; - } - - if (!generate_instances_for_year (comp, dtstart_time, - rrules, rdates, - exrules, exdates, - &event_start, - &interval_start, - &interval_end, - start, end, - days, seconds, - cb, cb_data)) - break; - } - - out: - cal_component_free_datetime (&dtstart); - cal_component_free_datetime (&dtend); -} - -/* Builds a list of GINT_TO_POINTER() elements out of a short array from a - * struct icalrecurrencetype. - */ -static GList * -array_to_list (short *array, int max_elements) -{ - GList *l; - int i; - - l = NULL; - - for (i = 0; i < max_elements && array[i] != SHRT_MAX; i++) - l = g_list_prepend (l, GINT_TO_POINTER ((int) (array[i]))); - - return g_list_reverse (l); -} - -/** - * cal_recur_from_icalrecurrencetype: - * @ir: A struct #icalrecurrencetype. - * - * Converts a struct #icalrecurrencetype to a #CalRecurrence. This should be - * freed using the cal_recur_free() function. - * - * Return value: #CalRecurrence structure. - **/ -CalRecurrence * -cal_recur_from_icalrecurrencetype (struct icalrecurrencetype *ir) -{ - CalRecurrence *r; - - g_return_val_if_fail (ir != NULL, NULL); - - r = g_new (CalRecurrence, 1); - - switch (ir->freq) { - case ICAL_SECONDLY_RECURRENCE: - r->type = CAL_RECUR_SECONDLY; - break; - - case ICAL_MINUTELY_RECURRENCE: - r->type = CAL_RECUR_MINUTELY; - break; - - case ICAL_HOURLY_RECURRENCE: - r->type = CAL_RECUR_HOURLY; - break; - - case ICAL_DAILY_RECURRENCE: - r->type = CAL_RECUR_DAILY; - break; - - case ICAL_WEEKLY_RECURRENCE: - r->type = CAL_RECUR_WEEKLY; - break; - - case ICAL_MONTHLY_RECURRENCE: - r->type = CAL_RECUR_MONTHLY; - break; - - case ICAL_YEARLY_RECURRENCE: - r->type = CAL_RECUR_YEARLY; - break; - - default: - g_message ("cal_recur_from_icalrecurrencetype(): Unknown recurrence frequency %d", - (int) ir->freq); - g_free (r); - return NULL; - } - - r->interval = ir->interval; - - /* FIXME: we don't deal with ir->count. Also, how does libical - * distinguish between n-occurrences and until-some-date rules? - */ - r->enddate = time_from_icaltimetype (ir->until); - - switch (ir->week_start) { - case ICAL_MONDAY_WEEKDAY: - r->week_start_day = 0; - break; - - case ICAL_TUESDAY_WEEKDAY: - r->week_start_day = 1; - break; - - case ICAL_WEDNESDAY_WEEKDAY: - r->week_start_day = 2; - break; - - case ICAL_THURSDAY_WEEKDAY: - r->week_start_day = 3; - break; - - case ICAL_FRIDAY_WEEKDAY: - r->week_start_day = 4; - break; - - case ICAL_SATURDAY_WEEKDAY: - r->week_start_day = 5; - break; - - case ICAL_SUNDAY_WEEKDAY: - r->week_start_day = 6; - break; - - default: - g_message ("cal_recur_from_icalrecurrencetype(): Unknown week day %d", - ir->week_start); - g_free (r); - return NULL; - } - - r->bymonth = array_to_list (ir->by_month, - sizeof (ir->by_month) / sizeof (ir->by_month[0])); - - r->byweekno = array_to_list (ir->by_week_no, - sizeof (ir->by_week_no) / sizeof (ir->by_week_no[0])); - - r->byyearday = array_to_list (ir->by_year_day, - sizeof (ir->by_year_day) / sizeof (ir->by_year_day[0])); - - r->bymonthday = array_to_list (ir->by_month_day, - sizeof (ir->by_month_day) / sizeof (ir->by_month_day[0])); - - r->byday = NULL; /* FIXME: libical sucks in this respect */ - - r->byhour = array_to_list (ir->by_hour, - sizeof (ir->by_hour) / sizeof (ir->by_hour[0])); - - r->byminute = array_to_list (ir->by_minute, - sizeof (ir->by_minute) / sizeof (ir->by_minute[0])); - - r->bysecond = array_to_list (ir->by_second, - sizeof (ir->by_second) / sizeof (ir->by_second[0])); - - r->bysetpos = array_to_list (ir->by_set_pos, - sizeof (ir->by_set_pos) / sizeof (ir->by_set_pos[0])); - - return r; -} - -/** - * cal_recur_free: - * @r: A #CalRecurrence structure. - * - * Frees a #CalRecurrence structure. - **/ -void -cal_recur_free (CalRecurrence *r) -{ - g_return_if_fail (r != NULL); - - g_list_free (r->bymonth); - g_list_free (r->byweekno); - g_list_free (r->byyearday); - g_list_free (r->bymonthday); - g_list_free (r->byday); - g_list_free (r->byhour); - g_list_free (r->byminute); - g_list_free (r->bysecond); - g_list_free (r->bysetpos); - - g_free (r); -} - -/* Generates one year's worth of recurrence instances. Returns TRUE if all the - * callback invocations returned TRUE, or FALSE when any one of them returns - * FALSE, i.e. meaning that the instance generation should be stopped. - */ -static gboolean -generate_instances_for_year (CalComponent *comp, - time_t comp_dtstart, - GSList *rrules, - GSList *rdates, - GSList *exrules, - GSList *exdates, - CalObjTime *event_start, - CalObjTime *interval_start, - CalObjTime *interval_end, - time_t interval_start_time, - time_t interval_end_time, - gint duration_days, - gint duration_seconds, - CalRecurInstanceFn cb, - gpointer cb_data) -{ - GArray *occs, *ex_occs, *tmp_occs; - CalObjTime cotime, *occ; - GSList *elem; - gint i, status; - time_t start_time, end_time; - struct tm start_tm, end_tm; - - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - ex_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - /* Expand each of the recurrence rules. */ - for (elem = rrules; elem; elem = elem->next) { - struct icalrecurrencetype *ir; - CalRecurrence *r; - - ir = elem->data; - r = cal_recur_from_icalrecurrencetype (ir); - - tmp_occs = cal_obj_expand_recurrence (event_start, r, - interval_start, - interval_end); - cal_recur_free (r); - - g_array_append_vals (occs, tmp_occs->data, tmp_occs->len); - g_array_free (tmp_occs, TRUE); - } - - /* Add on specific occurrence dates. */ - for (elem = rdates; elem; elem = elem->next) { - CalComponentPeriod *period; - time_t t; - - /* FIXME: this only deals with the start time */ - - period = elem->data; - t = time_from_icaltimetype (period->start); - - cal_object_time_from_time (&cotime, t); - g_array_append_val (occs, cotime); - } - - /* Expand each of the exception rules. */ - for (elem = exrules; elem; elem = elem->next) { - struct icalrecurrencetype *ir; - CalRecurrence *r; - - ir = elem->data; - r = cal_recur_from_icalrecurrencetype (ir); - - tmp_occs = cal_obj_expand_recurrence (event_start, r, - interval_start, - interval_end); - cal_recur_free (r); - - g_array_append_vals (ex_occs, tmp_occs->data, tmp_occs->len); - g_array_free (tmp_occs, TRUE); - } - - /* Add on specific exception dates. */ - for (elem = exdates; elem; elem = elem->next) { - CalComponentPeriod *period; - time_t t; - - /* FIXME: this only deals with the start time */ - - period = elem->data; - t = time_from_icaltimetype (period->start); - - cal_object_time_from_time (&cotime, t); - g_array_append_val (ex_occs, cotime); - } - - - /* Sort both arrays. */ - cal_obj_sort_occurrences (occs); - cal_obj_sort_occurrences (ex_occs); - - /* Create the final array, by removing the exceptions from the - occurrences, and removing any duplicates. */ - cal_obj_remove_exceptions (occs, ex_occs); - - - /* Call the callback for each occurrence. If it returns 0 we break - out of the loop. */ - for (i = 0; i < occs->len; i++) { - /* Convert each CalObjTime into a start & end time_t, and - check it is within the bounds of the event & interval. */ - occ = &g_array_index (occs, CalObjTime, i); - - start_tm.tm_year = occ->year - 1900; - start_tm.tm_mon = occ->month; - start_tm.tm_mday = occ->day; - start_tm.tm_hour = occ->hour; - start_tm.tm_min = occ->minute; - start_tm.tm_sec = occ->second; - start_time = mktime (&start_tm); - - if (start_time < comp_dtstart - || start_time >= interval_end_time) - continue; - - cal_obj_time_add_days (occ, duration_days); - cal_obj_time_add_seconds (occ, duration_seconds); - - end_tm.tm_year = occ->year - 1900; - end_tm.tm_mon = occ->month; - end_tm.tm_mday = occ->day; - end_tm.tm_hour = occ->hour; - end_tm.tm_min = occ->minute; - end_tm.tm_sec = occ->second; - end_time = mktime (&end_tm); - - if (end_time < interval_start_time) - continue; - - status = (*cb) (comp, start_time, end_time, cb_data); - if (!status) - return FALSE; - } - - return TRUE; -} - - -static void -cal_object_compute_duration (CalObjTime *start, - CalObjTime *end, - gint *days, - gint *seconds) -{ - GDate start_date, end_date; - gint start_seconds, end_seconds; - - g_date_clear (&start_date, 1); - g_date_clear (&end_date, 1); - g_date_set_dmy (&start_date, start->day, start->month + 1, - start->year); - g_date_set_dmy (&end_date, end->day, end->month + 1, - end->year); - - *days = g_date_julian (&end_date) - g_date_julian (&start_date); - start_seconds = start->hour * 3600 + start->minute * 60 - + start->second; - end_seconds = end->hour * 3600 + end->minute * 60 + end->second; - - *seconds = end_seconds - start_seconds; - if (*seconds < 0) { - *days = *days - 1; - *seconds += 24 * 60 * 60; - } -} - - -/* Returns an unsorted GArray of CalObjTime's resulting from expanding the - given recurrence rule within the given interval. Note that it doesn't - clip the generated occurrences to the interval, i.e. if the interval - starts part way through the year this function still returns all the - occurrences for the year. Clipping is done later. */ -static GArray* -cal_obj_expand_recurrence (CalObjTime *event_start, - CalRecurrence *recur, - CalObjTime *interval_start, - CalObjTime *interval_end) -{ - CalRecurVTable *vtable; - CalObjTime *event_end = NULL, event_end_cotime; - RecurData recur_data; - CalObjTime occ, *cotime; - GArray *all_occs, *occs; - gint len; - - vtable = cal_obj_get_vtable (recur->type); - - /* This is the resulting array of CalObjTime elements. */ - all_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - /* Calculate some useful data such as some fast lookup tables. */ - cal_obj_initialize_recur_data (&recur_data, recur, event_start); - - /* Compute the event_end, if the recur's enddate is set. */ - if (recur->enddate) { - cal_object_time_from_time (&event_end_cotime, - recur->enddate); - event_end = &event_end_cotime; - } - - /* Get the first period based on the frequency and the interval that - intersects the interval between start and end. */ - if ((*vtable->find_start_position) (event_start, event_end, - &recur_data, - interval_start, interval_end, - &occ)) - return all_occs; - - /* Loop until the event ends or we go past the end of the required - interval. */ - for (;;) { - /* Generate the set of occurrences for this period. */ - switch (recur->type) { - case CAL_RECUR_YEARLY: - occs = cal_obj_generate_set_yearly (&recur_data, - vtable, &occ); - break; - case CAL_RECUR_MONTHLY: - occs = cal_obj_generate_set_monthly (&recur_data, - vtable, &occ); - break; - default: - occs = cal_obj_generate_set_default (&recur_data, - vtable, &occ); - break; - } - - /* Sort the occurrences and remove duplicates. */ - cal_obj_sort_occurrences (occs); - cal_obj_remove_duplicates_and_invalid_dates (occs); - - /* Apply the BYSETPOS property. */ - occs = cal_obj_bysetpos_filter (recur, occs); - - /* Remove any occs after event_end. */ - len = occs->len - 1; - if (event_end) { - while (len >= 0) { - cotime = &g_array_index (occs, CalObjTime, - len); - if (cal_obj_time_compare_func (cotime, - event_end) <= 0) - break; - len--; - } - } - - /* Add the occurrences onto the main array. */ - if (len >= 0) - g_array_append_vals (all_occs, occs->data, len + 1); - - g_array_free (occs, TRUE); - - /* Skip to the next period, or exit the loop if finished. */ - if ((*vtable->find_next_position) (&occ, event_end, - &recur_data, interval_end)) - break; - } - - return all_occs; -} - - -static GArray* -cal_obj_generate_set_yearly (RecurData *recur_data, - CalRecurVTable *vtable, - CalObjTime *occ) -{ - CalRecurrence *recur = recur_data->recur; - GArray *occs_arrays[4], *occs, *occs2; - gint num_occs_arrays = 0, i; - - /* This is a bit complicated, since the iCalendar spec says that - several BYxxx modifiers can be used simultaneously. So we have to - be quite careful when determining the days of the occurrences. - The BYHOUR, BYMINUTE & BYSECOND modifiers are no problem at all. - - The modifiers we have to worry about are: BYMONTH, BYWEEKNO, - BYYEARDAY, BYMONTHDAY & BYDAY. We can't do these sequentially - since each filter will mess up the results of the previous one. - But they aren't all completely independant, e.g. BYMONTHDAY and - BYDAY are related to BYMONTH, and BYDAY is related to BYWEEKNO. - - BYDAY & BYMONTHDAY can also be applied independently, which makes - it worse. So we assume that if BYMONTH or BYWEEKNO is used, then - the BYDAY modifier applies to those, else it is applied - independantly. - - We expand the occurrences in parallel into the occs_arrays[] array, - and then merge them all into one GArray before expanding BYHOUR, - BYMINUTE & BYSECOND. */ - - if (recur->bymonth) { - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->bymonth_filter) (recur_data, occs); - - /* If BYMONTHDAY & BYDAY are both set we need to expand them - in parallel and add the results. */ - if (recur->bymonthday && recur->byday) { - /* Copy the occs array. */ - occs2 = g_array_new (FALSE, FALSE, - sizeof (CalObjTime)); - g_array_append_vals (occs2, occs->data, occs->len); - - occs = (*vtable->bymonthday_filter) (recur_data, occs); - /* Note that we explicitly call the monthly version - of the BYDAY expansion filter. */ - occs2 = cal_obj_byday_expand_monthly (recur_data, - occs2); - - /* Add the 2 resulting arrays together. */ - g_array_append_vals (occs, occs2->data, occs2->len); - g_array_free (occs2, TRUE); - } else { - occs = (*vtable->bymonthday_filter) (recur_data, occs); - /* Note that we explicitly call the monthly version - of the BYDAY expansion filter. */ - occs = cal_obj_byday_expand_monthly (recur_data, occs); - } - - occs_arrays[num_occs_arrays++] = occs; - } - - if (recur->byweekno) { - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->byweekno_filter) (recur_data, occs); - /* Note that we explicitly call the weekly version of the - BYDAY expansion filter. */ - occs = cal_obj_byday_expand_weekly (recur_data, occs); - - occs_arrays[num_occs_arrays++] = occs; - } - - if (recur->byyearday) { - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->byyearday_filter) (recur_data, occs); - - occs_arrays[num_occs_arrays++] = occs; - } - - /* If BYMONTHDAY is set, and BYMONTH is not set, we need to - expand BYMONTHDAY independantly. */ - if (recur->bymonthday && !recur->bymonth) { - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->bymonthday_filter) (recur_data, occs); - - occs_arrays[num_occs_arrays++] = occs; - } - - /* If BYDAY is set, and BYMONTH and BYWEEKNO are not set, we need to - expand BYDAY independantly. */ - if (recur->byday && !recur->bymonth && !recur->byweekno) { - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->byday_filter) (recur_data, occs); - - occs_arrays[num_occs_arrays++] = occs; - } - - /* Add all the arrays together. */ - occs = occs_arrays[0]; - for (i = 1; i < num_occs_arrays; i++) { - occs2 = occs_arrays[i]; - g_array_append_vals (occs, occs2->data, occs2->len); - g_array_free (occs2, TRUE); - } - - /* Now expand BYHOUR, BYMINUTE & BYSECOND. */ - occs = (*vtable->byhour_filter) (recur_data, occs); - occs = (*vtable->byminute_filter) (recur_data, occs); - occs = (*vtable->bysecond_filter) (recur_data, occs); - - return occs; -} - - -static GArray* -cal_obj_generate_set_monthly (RecurData *recur_data, - CalRecurVTable *vtable, - CalObjTime *occ) -{ - GArray *occs, *occs2; - - /* We start with just the one time in each set. */ - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->bymonth_filter) (recur_data, occs); - - /* We need to combine the output of BYMONTHDAY & BYDAY, by doing them - in parallel rather than sequentially. If we did them sequentially - then we would lose the occurrences generated by BYMONTHDAY, and - instead have repetitions of the occurrences from BYDAY. */ - if (recur_data->recur->bymonthday && recur_data->recur->byday) { - occs2 = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs2, occs->data, occs->len); - - occs = (*vtable->bymonthday_filter) (recur_data, occs); - occs2 = (*vtable->byday_filter) (recur_data, occs2); - - g_array_append_vals (occs, occs2->data, occs2->len); - g_array_free (occs2, TRUE); - } else { - occs = (*vtable->bymonthday_filter) (recur_data, occs); - occs = (*vtable->byday_filter) (recur_data, occs); - } - - occs = (*vtable->byhour_filter) (recur_data, occs); - occs = (*vtable->byminute_filter) (recur_data, occs); - occs = (*vtable->bysecond_filter) (recur_data, occs); - - return occs; -} - - -static GArray* -cal_obj_generate_set_default (RecurData *recur_data, - CalRecurVTable *vtable, - CalObjTime *occ) -{ - GArray *occs; -#if 0 - g_print ("Generating set for %i/%i/%i %02i:%02i:%02i\n", - occ->day, occ->month, occ->year, occ->hour, occ->minute, - occ->second); -#endif - /* We start with just the one time in the set. */ - occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - g_array_append_vals (occs, occ, 1); - - occs = (*vtable->bymonth_filter) (recur_data, occs); - if (vtable->byweekno_filter) - occs = (*vtable->byweekno_filter) (recur_data, occs); - if (vtable->byyearday_filter) - occs = (*vtable->byyearday_filter) (recur_data, occs); - if (vtable->bymonthday_filter) - occs = (*vtable->bymonthday_filter) (recur_data, occs); - occs = (*vtable->byday_filter) (recur_data, occs); - - occs = (*vtable->byhour_filter) (recur_data, occs); - occs = (*vtable->byminute_filter) (recur_data, occs); - occs = (*vtable->bysecond_filter) (recur_data, occs); - - return occs; -} - - - -/* Returns the function table corresponding to the recurrence frequency. */ -static CalRecurVTable* -cal_obj_get_vtable (CalRecurType recur_type) -{ - switch (recur_type) { - case CAL_RECUR_YEARLY: - return &cal_obj_yearly_vtable; - case CAL_RECUR_MONTHLY: - return &cal_obj_monthly_vtable; - case CAL_RECUR_WEEKLY: - return &cal_obj_weekly_vtable; - case CAL_RECUR_DAILY: - return &cal_obj_daily_vtable; - case CAL_RECUR_HOURLY: - return &cal_obj_hourly_vtable; - case CAL_RECUR_MINUTELY: - return &cal_obj_minutely_vtable; - case CAL_RECUR_SECONDLY: - return &cal_obj_secondly_vtable; - } - return NULL; -} - - -/* This creates a number of fast lookup tables used when filtering with the - modifier properties BYMONTH, BYYEARDAY etc. */ -static void -cal_obj_initialize_recur_data (RecurData *recur_data, - CalRecurrence *recur, - CalObjTime *event_start) -{ - GList *elem; - gint month, yearday, monthday, weekday, week_num, hour, minute, second; - - /* Clear the entire RecurData. */ - memset (recur_data, 0, sizeof (RecurData)); - - recur_data->recur = recur; - - /* Set the weekday, used for the WEEKLY frequency and the BYWEEKNO - modifier. */ - recur_data->weekday = cal_obj_time_weekday (event_start, recur); - - /* Create an array of months from bymonths for fast lookup. */ - elem = recur->bymonth; - while (elem) { - month = GPOINTER_TO_INT (elem->data); - recur_data->months[month] = 1; - elem = elem->next; - } - - /* Create an array of yeardays from byyearday for fast lookup. - We create a second array to handle the negative values. The first - element there corresponds to the last day of the year. */ - elem = recur->byyearday; - while (elem) { - yearday = GPOINTER_TO_INT (elem->data); - if (yearday >= 0) - recur_data->yeardays[yearday] = 1; - else - recur_data->neg_yeardays[-yearday] = 1; - elem = elem->next; - } - - /* Create an array of monthdays from bymonthday for fast lookup. - We create a second array to handle the negative values. The first - element there corresponds to the last day of the month. */ - elem = recur->bymonthday; - while (elem) { - monthday = GPOINTER_TO_INT (elem->data); - if (monthday >= 0) - recur_data->monthdays[monthday] = 1; - else - recur_data->neg_monthdays[-monthday] = 1; - elem = elem->next; - } - - /* Create an array of weekdays from byday for fast lookup. */ - elem = recur->byday; - while (elem) { - weekday = GPOINTER_TO_INT (elem->data); - elem = elem->next; - /* The week number is not used when filtering. */ - week_num = GPOINTER_TO_INT (elem->data); - elem = elem->next; - - recur_data->weekdays[weekday] = 1; - } - - /* Create an array of hours from byhour for fast lookup. */ - elem = recur->byhour; - while (elem) { - hour = GPOINTER_TO_INT (elem->data); - recur_data->hours[hour] = 1; - elem = elem->next; - } - - /* Create an array of minutes from byminutes for fast lookup. */ - elem = recur->byminute; - while (elem) { - minute = GPOINTER_TO_INT (elem->data); - recur_data->minutes[minute] = 1; - elem = elem->next; - } - - /* Create an array of seconds from byseconds for fast lookup. */ - elem = recur->bysecond; - while (elem) { - second = GPOINTER_TO_INT (elem->data); - recur_data->seconds[second] = 1; - elem = elem->next; - } -} - - -static void -cal_obj_sort_occurrences (GArray *occs) -{ - qsort (occs->data, occs->len, sizeof (CalObjTime), - cal_obj_time_compare_func); -} - - -static void -cal_obj_remove_duplicates_and_invalid_dates (GArray *occs) -{ - static const int days_in_month[12] = { - 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 - }; - - CalObjTime *occ, *prev_occ = NULL; - gint len, i, j = 0, year, month, days; - gboolean keep_occ; - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - keep_occ = TRUE; - - if (prev_occ && cal_obj_time_compare_func (occ, - prev_occ) == 0) - keep_occ = FALSE; - - year = occ->year; - month = occ->month; - days = days_in_month[occ->month]; - /* If it is february and a leap year, add a day. */ - if (month == 1 && (year % 4 == 0 - && (year % 100 != 0 - || year % 400 == 0))) - days++; - if (occ->day > days) - keep_occ = FALSE; - - if (keep_occ) { - if (i != j) - g_array_index (occs, CalObjTime, j) - = g_array_index (occs, CalObjTime, i); - j++; - } - - prev_occ = occ; - } - - g_array_set_size (occs, j); -} - - -/* Removes the exceptions from the ex_occs array from the occurrences in the - occs array, and removes any duplicates. Both arrays are sorted. */ -static void -cal_obj_remove_exceptions (GArray *occs, - GArray *ex_occs) -{ - CalObjTime *occ, *prev_occ = NULL, *ex_occ; - gint i, j = 0, cmp, ex_index, occs_len, ex_occs_len; - gboolean keep_occ; - - if (occs->len == 0 || ex_occs->len == 0) - return; - - ex_index = 0; - occs_len = occs->len; - ex_occs_len = ex_occs->len; - - ex_occ = &g_array_index (ex_occs, CalObjTime, ex_index); - for (i = 0; i < occs_len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - keep_occ = TRUE; - - /* If the occurrence is a duplicate of the previous one, skip - it. */ - if (prev_occ - && cal_obj_time_compare_func (occ, prev_occ) == 0) { - keep_occ = FALSE; - } else if (ex_occ) { - /* Step through the exceptions until we come to one - that matches or follows this occurrence. */ - while (ex_occ) { - cmp = cal_obj_time_compare_func (ex_occ, occ); - if (cmp > 0) - break; - - /* Move to the next exception, or set ex_occ - to NULL when we reach the end of array. */ - ex_index++; - if (ex_index < ex_occs_len) - ex_occ = &g_array_index (ex_occs, - CalObjTime, - ex_index); - else - ex_occ = NULL; - - /* If the current exception matches this - occurrence we remove it. */ - if (cmp == 0) { - keep_occ = FALSE; - break; - } - } - } - - if (keep_occ) { - if (i != j) - g_array_index (occs, CalObjTime, j) - = g_array_index (occs, CalObjTime, i); - j++; - } - - prev_occ = occ; - } - - g_array_set_size (occs, j); -} - - - -static GArray* -cal_obj_bysetpos_filter (CalRecurrence *recur, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, pos; - - /* If BYSETPOS has not been specified, or the array is empty, just - return the array. */ - elem = recur->bysetpos; - if (!elem || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - /* Iterate over the indices given in bysetpos, adding the corresponding - element from occs to new_occs. */ - len = occs->len; - while (elem) { - pos = GPOINTER_TO_INT (elem->data); - - /* Negative values count back from the end of the array. */ - if (pos < 0) - pos += len; - - if (pos >= 0 && pos < len) { - occ = &g_array_index (occs, CalObjTime, pos); - g_array_append_vals (new_occs, occ, 1); - } - elem = elem->next; - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - - -/* Finds the first year from the event_start, counting in multiples of the - recurrence interval, that intersects the given interval. It returns TRUE - if there is no intersection. */ -static gboolean -cal_obj_yearly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - *cotime = *event_start; - - /* Move on to the next interval, if the event starts before the - given interval. */ - if (cotime->year < interval_start->year) { - gint years = interval_start->year - cotime->year - + recur_data->recur->interval - 1; - years -= years % recur_data->recur->interval; - /* NOTE: The day may now be invalid, e.g. 29th Feb. */ - cotime->year += years; - } - - if ((event_end && cotime->year > event_end->year) - || (interval_end && cotime->year > interval_end->year)) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_yearly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - /* NOTE: The day may now be invalid, e.g. 29th Feb. */ - cotime->year += recur_data->recur->interval; - - if ((event_end && cotime->year > event_end->year) - || (interval_end && cotime->year > interval_end->year)) - return TRUE; - - return FALSE; -} - - - -static gboolean -cal_obj_monthly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - *cotime = *event_start; - - /* Move on to the next interval, if the event starts before the - given interval. */ - if (cal_obj_time_compare (cotime, interval_start, CALOBJ_MONTH) < 0) { - gint months = (interval_start->year - cotime->year) * 12 - + interval_start->month - cotime->month - + recur_data->recur->interval - 1; - months -= months % recur_data->recur->interval; - /* NOTE: The day may now be invalid, e.g. 31st Sep. */ - cal_obj_time_add_months (cotime, months); - } - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_MONTH) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_MONTH) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_monthly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - /* NOTE: The day may now be invalid, e.g. 31st Sep. */ - cal_obj_time_add_months (cotime, recur_data->recur->interval); - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_MONTH) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_MONTH) > 0) - return TRUE; - - return FALSE; -} - - - -static gboolean -cal_obj_weekly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - GDate event_start_date, interval_start_date; - guint32 event_start_julian, interval_start_julian; - gint interval_start_weekday; - CalObjTime week_start; - - if (event_end && cal_obj_time_compare (event_end, interval_start, - CALOBJ_DAY) < 0) - return TRUE; - if (interval_end && cal_obj_time_compare (event_start, interval_end, - CALOBJ_DAY) > 0) - return TRUE; - - *cotime = *event_start; - - /* Convert the event start and interval start to GDates, so we can - easily find the number of days between them. */ - g_date_clear (&event_start_date, 1); - g_date_set_dmy (&event_start_date, event_start->day, - event_start->month + 1, event_start->year); - g_date_clear (&interval_start_date, 1); - g_date_set_dmy (&interval_start_date, interval_start->day, - interval_start->month + 1, interval_start->year); - - /* Calculate the start of the weeks corresponding to the event start - and interval start. */ - event_start_julian = g_date_julian (&event_start_date); - event_start_julian -= recur_data->weekday; - - interval_start_julian = g_date_julian (&interval_start_date); - interval_start_weekday = cal_obj_time_weekday (interval_start, - recur_data->recur); - interval_start_julian -= interval_start_weekday; - - /* We want to find the first full week using the recurrence interval - that intersects the given interval dates. */ - if (event_start_julian < interval_start_julian) { - gint weeks = (interval_start_julian - event_start_julian) / 7; - weeks += recur_data->recur->interval - 1; - weeks -= weeks % recur_data->recur->interval; - cal_obj_time_add_days (cotime, weeks * 7); - } - - week_start = *cotime; - cal_obj_time_subtract_days (&week_start, recur_data->weekday); - - if (event_end && cal_obj_time_compare (&week_start, event_end, - CALOBJ_DAY) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (&week_start, interval_end, - CALOBJ_DAY) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_weekly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - CalObjTime week_start; - - cal_obj_time_add_days (cotime, recur_data->recur->interval * 7); - - /* Return TRUE if the start of this week is after the event finishes - or is after the end of the required interval. */ - week_start = *cotime; - cal_obj_time_subtract_days (&week_start, recur_data->weekday); - - if (event_end && cal_obj_time_compare (&week_start, event_end, - CALOBJ_DAY) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (&week_start, interval_end, - CALOBJ_DAY) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_daily_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - GDate event_start_date, interval_start_date; - guint32 event_start_julian, interval_start_julian, days; - - if (interval_end && cal_obj_time_compare (event_start, interval_end, - CALOBJ_DAY) > 0) - return TRUE; - if (event_end && cal_obj_time_compare (event_end, interval_start, - CALOBJ_DAY) < 0) - return TRUE; - - *cotime = *event_start; - - /* Convert the event start and interval start to GDates, so we can - easily find the number of days between them. */ - g_date_clear (&event_start_date, 1); - g_date_set_dmy (&event_start_date, event_start->day, - event_start->month + 1, event_start->year); - g_date_clear (&interval_start_date, 1); - g_date_set_dmy (&interval_start_date, interval_start->day, - interval_start->month + 1, interval_start->year); - - event_start_julian = g_date_julian (&event_start_date); - interval_start_julian = g_date_julian (&interval_start_date); - - if (event_start_julian < interval_start_julian) { - days = interval_start_julian - event_start_julian - + recur_data->recur->interval - 1; - days -= days % recur_data->recur->interval; - cal_obj_time_add_days (cotime, days); - } - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_DAY) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_DAY) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_daily_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - cal_obj_time_add_days (cotime, recur_data->recur->interval); - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_DAY) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_DAY) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_hourly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - GDate event_start_date, interval_start_date; - guint32 event_start_julian, interval_start_julian, hours; - - if (interval_end && cal_obj_time_compare (event_start, interval_end, - CALOBJ_HOUR) > 0) - return TRUE; - if (event_end && cal_obj_time_compare (event_end, interval_start, - CALOBJ_HOUR) < 0) - return TRUE; - - *cotime = *event_start; - - if (cal_obj_time_compare (event_start, interval_start, - CALOBJ_HOUR) < 0) { - /* Convert the event start and interval start to GDates, so we - can easily find the number of days between them. */ - g_date_clear (&event_start_date, 1); - g_date_set_dmy (&event_start_date, event_start->day, - event_start->month + 1, event_start->year); - g_date_clear (&interval_start_date, 1); - g_date_set_dmy (&interval_start_date, interval_start->day, - interval_start->month + 1, - interval_start->year); - - event_start_julian = g_date_julian (&event_start_date); - interval_start_julian = g_date_julian (&interval_start_date); - - hours = (interval_start_julian - event_start_julian) * 24; - hours += interval_start->hour - event_start->hour; - hours += recur_data->recur->interval - 1; - hours -= hours % recur_data->recur->interval; - cal_obj_time_add_hours (cotime, hours); - } - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_HOUR) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_HOUR) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_hourly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - cal_obj_time_add_hours (cotime, recur_data->recur->interval); - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_HOUR) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_HOUR) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_minutely_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - GDate event_start_date, interval_start_date; - guint32 event_start_julian, interval_start_julian, minutes; - - if (interval_end && cal_obj_time_compare (event_start, interval_end, - CALOBJ_MINUTE) > 0) - return TRUE; - if (event_end && cal_obj_time_compare (event_end, interval_start, - CALOBJ_MINUTE) < 0) - return TRUE; - - *cotime = *event_start; - - if (cal_obj_time_compare (event_start, interval_start, - CALOBJ_MINUTE) < 0) { - /* Convert the event start and interval start to GDates, so we - can easily find the number of days between them. */ - g_date_clear (&event_start_date, 1); - g_date_set_dmy (&event_start_date, event_start->day, - event_start->month + 1, event_start->year); - g_date_clear (&interval_start_date, 1); - g_date_set_dmy (&interval_start_date, interval_start->day, - interval_start->month + 1, - interval_start->year); - - event_start_julian = g_date_julian (&event_start_date); - interval_start_julian = g_date_julian (&interval_start_date); - - minutes = (interval_start_julian - event_start_julian) - * 24 * 60; - minutes += (interval_start->hour - event_start->hour) * 24; - minutes += interval_start->minute - event_start->minute; - minutes += recur_data->recur->interval - 1; - minutes -= minutes % recur_data->recur->interval; - cal_obj_time_add_minutes (cotime, minutes); - } - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_MINUTE) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_MINUTE) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_minutely_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - cal_obj_time_add_minutes (cotime, recur_data->recur->interval); - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_MINUTE) > 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_MINUTE) > 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_secondly_find_start_position (CalObjTime *event_start, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_start, - CalObjTime *interval_end, - CalObjTime *cotime) -{ - GDate event_start_date, interval_start_date; - guint32 event_start_julian, interval_start_julian, seconds; - - if (interval_end && cal_obj_time_compare (event_start, interval_end, - CALOBJ_SECOND) > 0) - return TRUE; - if (event_end && cal_obj_time_compare (event_end, interval_start, - CALOBJ_SECOND) < 0) - return TRUE; - - *cotime = *event_start; - - if (cal_obj_time_compare (event_start, interval_start, - CALOBJ_SECOND) < 0) { - /* Convert the event start and interval start to GDates, so we - can easily find the number of days between them. */ - g_date_clear (&event_start_date, 1); - g_date_set_dmy (&event_start_date, event_start->day, - event_start->month + 1, event_start->year); - g_date_clear (&interval_start_date, 1); - g_date_set_dmy (&interval_start_date, interval_start->day, - interval_start->month + 1, - interval_start->year); - - event_start_julian = g_date_julian (&event_start_date); - interval_start_julian = g_date_julian (&interval_start_date); - - seconds = (interval_start_julian - event_start_julian) - * 24 * 60 * 60; - seconds += (interval_start->hour - event_start->hour) - * 24 * 60; - seconds += (interval_start->minute - event_start->minute) * 60; - seconds += interval_start->second - event_start->second; - seconds += recur_data->recur->interval - 1; - seconds -= seconds % recur_data->recur->interval; - cal_obj_time_add_seconds (cotime, seconds); - } - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_SECOND) >= 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_SECOND) >= 0) - return TRUE; - - return FALSE; -} - - -static gboolean -cal_obj_secondly_find_next_position (CalObjTime *cotime, - CalObjTime *event_end, - RecurData *recur_data, - CalObjTime *interval_end) -{ - cal_obj_time_add_seconds (cotime, recur_data->recur->interval); - - if (event_end && cal_obj_time_compare (cotime, event_end, - CALOBJ_SECOND) >= 0) - return TRUE; - if (interval_end && cal_obj_time_compare (cotime, interval_end, - CALOBJ_SECOND) >= 0) - return TRUE; - - return FALSE; -} - - - - - -/* If the BYMONTH rule is specified it expands each occurrence in occs, by - using each of the months in the bymonth list. */ -static GArray* -cal_obj_bymonth_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i; - - /* If BYMONTH has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->bymonth || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->bymonth; - while (elem) { - /* NOTE: The day may now be invalid, e.g. 31st Feb. */ - occ->month = GPOINTER_TO_INT (elem->data); - g_array_append_vals (new_occs, occ, 1); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* If the BYMONTH rule is specified it filters out all occurrences in occs - which do not match one of the months in the bymonth list. */ -static GArray* -cal_obj_bymonth_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint len, i; - - /* If BYMONTH has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->bymonth || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - if (recur_data->months[occ->month]) - g_array_append_vals (new_occs, occ, 1); - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - -static GArray* -cal_obj_byweekno_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ, year_start_cotime, year_end_cotime, cotime; - GList *elem; - gint len, i, weekno; - - /* If BYWEEKNO has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byweekno || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - /* Find the day that would correspond to week 1 (note that - week 1 is the first week starting from the specified week - start day that has 4 days in the new year). */ - year_start_cotime = *occ; - cal_obj_time_find_first_week (&year_start_cotime, - recur_data); - - /* Find the day that would correspond to week 1 of the next - year, which we use for -ve week numbers. */ - year_end_cotime = *occ; - year_end_cotime.year++; - cal_obj_time_find_first_week (&year_end_cotime, - recur_data); - - /* Now iterate over the week numbers in byweekno, generating a - new occurrence for each one. */ - elem = recur_data->recur->byweekno; - while (elem) { - weekno = GPOINTER_TO_INT (elem->data); - if (weekno > 0) { - cotime = year_start_cotime; - cal_obj_time_add_days (&cotime, - (weekno - 1) * 7); - } else { - cotime = year_end_cotime; - cal_obj_time_subtract_days (&cotime, - -weekno * 7); - } - - /* Skip occurrences if they fall outside the year. */ - if (cotime.year == occ->year) - g_array_append_val (new_occs, cotime); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -#if 0 -/* This isn't used at present. */ -static GArray* -cal_obj_byweekno_filter (RecurData *recur_data, - GArray *occs) -{ - - return occs; -} -#endif - - -static GArray* -cal_obj_byyearday_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ, year_start_cotime, year_end_cotime, cotime; - GList *elem; - gint len, i, dayno; - - /* If BYYEARDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byyearday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - /* Find the day that would correspond to day 1. */ - year_start_cotime = *occ; - year_start_cotime.month = 0; - year_start_cotime.day = 1; - - /* Find the day that would correspond to day 1 of the next - year, which we use for -ve day numbers. */ - year_end_cotime = *occ; - year_end_cotime.year++; - year_end_cotime.month = 0; - year_end_cotime.day = 1; - - /* Now iterate over the day numbers in byyearday, generating a - new occurrence for each one. */ - elem = recur_data->recur->byyearday; - while (elem) { - dayno = GPOINTER_TO_INT (elem->data); - if (dayno > 0) { - cotime = year_start_cotime; - cal_obj_time_add_days (&cotime, dayno - 1); - } else { - cotime = year_end_cotime; - cal_obj_time_subtract_days (&cotime, -dayno); - } - - /* Skip occurrences if they fall outside the year. */ - if (cotime.year == occ->year) - g_array_append_val (new_occs, cotime); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* Note: occs must not contain invalid dates, e.g. 31st September. */ -static GArray* -cal_obj_byyearday_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint yearday, len, i, days_in_year; - - /* If BYYEARDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byyearday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - yearday = cal_obj_time_day_of_year (occ); - if (recur_data->yeardays[yearday]) { - g_array_append_vals (new_occs, occ, 1); - } else { - days_in_year = g_date_is_leap_year (occ->year) - ? 366 : 365; - if (recur_data->neg_yeardays[days_in_year + 1 - - yearday]) - g_array_append_vals (new_occs, occ, 1); - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - -static GArray* -cal_obj_bymonthday_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ, month_start_cotime, month_end_cotime, cotime; - GList *elem; - gint len, i, dayno; - - /* If BYMONTHDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->bymonthday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - /* Find the day that would correspond to day 1. */ - month_start_cotime = *occ; - month_start_cotime.day = 1; - - /* Find the day that would correspond to day 1 of the next - month, which we use for -ve day numbers. */ - month_end_cotime = *occ; - month_end_cotime.month++; - month_end_cotime.day = 1; - - /* Now iterate over the day numbers in bymonthday, generating a - new occurrence for each one. */ - elem = recur_data->recur->bymonthday; - while (elem) { - dayno = GPOINTER_TO_INT (elem->data); - if (dayno > 0) { - cotime = month_start_cotime; - cal_obj_time_add_days (&cotime, dayno - 1); - } else { - cotime = month_end_cotime; - cal_obj_time_subtract_days (&cotime, -dayno); - } - - /* Skip occurrences if they fall outside the month. */ - if (cotime.month == occ->month) - g_array_append_val (new_occs, cotime); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -static GArray* -cal_obj_bymonthday_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint len, i, days_in_month; - - /* If BYMONTHDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->bymonthday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - if (recur_data->monthdays[occ->day]) { - g_array_append_vals (new_occs, occ, 1); - } else { - days_in_month = time_days_in_month (occ->year, - occ->month); - if (recur_data->neg_monthdays[days_in_month + 1 - - occ->day]) - g_array_append_vals (new_occs, occ, 1); - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - -static GArray* -cal_obj_byday_expand_yearly (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i, weekday, week_num; - gint first_weekday, last_weekday, offset; - guint16 year; - - /* If BYDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->byday; - while (elem) { - weekday = GPOINTER_TO_INT (elem->data); - elem = elem->next; - week_num = GPOINTER_TO_INT (elem->data); - elem = elem->next; - - year = occ->year; - if (week_num == 0) { - occ->month = 0; - occ->day = 1; - first_weekday = cal_obj_time_weekday (occ, recur_data->recur); - offset = (weekday + 7 - first_weekday) % 7; - cal_obj_time_add_days (occ, offset); - - while (occ->year == year) { - g_array_append_vals (new_occs, occ, 1); - cal_obj_time_add_days (occ, 7); - } - - } else if (week_num > 0) { - occ->month = 0; - occ->day = 1; - first_weekday = cal_obj_time_weekday (occ, recur_data->recur); - offset = (weekday + 7 - first_weekday) % 7; - offset += (week_num - 1) * 7; - cal_obj_time_add_days (occ, offset); - if (occ->year == year) - g_array_append_vals (new_occs, occ, 1); - - } else { - occ->month = 11; - occ->day = 31; - last_weekday = cal_obj_time_weekday (occ, recur_data->recur); - offset = (last_weekday + 7 - weekday) % 7; - offset += (week_num - 1) * 7; - cal_obj_time_subtract_days (occ, offset); - if (occ->year == year) - g_array_append_vals (new_occs, occ, 1); - } - - /* Reset the year, as we may have gone past the end. */ - occ->year = year; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -static GArray* -cal_obj_byday_expand_monthly (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i, weekday, week_num; - gint first_weekday, last_weekday, offset; - guint16 year; - guint8 month; - - /* If BYDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->byday; - while (elem) { - weekday = GPOINTER_TO_INT (elem->data); - elem = elem->next; - week_num = GPOINTER_TO_INT (elem->data); - elem = elem->next; - - year = occ->year; - month = occ->month; - if (week_num == 0) { - occ->day = 1; - first_weekday = cal_obj_time_weekday (occ, recur_data->recur); - offset = (weekday + 7 - first_weekday) % 7; - cal_obj_time_add_days (occ, offset); - - while (occ->year == year - && occ->month == month) { - g_array_append_vals (new_occs, occ, 1); - cal_obj_time_add_days (occ, 7); - } - - } else if (week_num > 0) { - occ->day = 1; - first_weekday = cal_obj_time_weekday (occ, recur_data->recur); - offset = (weekday + 7 - first_weekday) % 7; - offset += (week_num - 1) * 7; - cal_obj_time_add_days (occ, offset); - if (occ->year == year && occ->month == month) - g_array_append_vals (new_occs, occ, 1); - - } else { - occ->day = time_days_in_month (occ->year, - occ->month); - last_weekday = cal_obj_time_weekday (occ, recur_data->recur); - offset = (last_weekday + 7 - weekday) % 7; - offset += (week_num - 1) * 7; - cal_obj_time_subtract_days (occ, offset); - if (occ->year == year && occ->month == month) - g_array_append_vals (new_occs, occ, 1); - } - - /* Reset the year & month, as we may have gone past - the end. */ - occ->year = year; - occ->month = month; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* Note: occs must not contain invalid dates, e.g. 31st September. */ -static GArray* -cal_obj_byday_expand_weekly (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i, weekday, week_num; - gint current_weekday; - gint day_of_week, new_day_of_week, days_to_add; - - /* If BYDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->byday; - while (elem) { - weekday = GPOINTER_TO_INT (elem->data); - elem = elem->next; - week_num = GPOINTER_TO_INT (elem->data); - elem = elem->next; - - current_weekday = cal_obj_time_weekday (occ, recur_data->recur); - day_of_week = (current_weekday + 7 - - recur_data->recur->week_start_day) % 7; - new_day_of_week = (weekday + 7 - - recur_data->recur->week_start_day) % 7; - days_to_add = new_day_of_week - day_of_week; - if (days_to_add > 0) - cal_obj_time_add_days (occ, days_to_add); - else if (days_to_add < 0) - cal_obj_time_subtract_days (occ, -days_to_add); - g_array_append_vals (new_occs, occ, 1); - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* Note: occs must not contain invalid dates, e.g. 31st September. */ -static GArray* -cal_obj_byday_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint len, i, weekday; - - /* If BYDAY has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byday || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - weekday = cal_obj_time_weekday (occ, recur_data->recur); - - /* See if the weekday on its own is set. */ - if (recur_data->weekdays[weekday]) - g_array_append_vals (new_occs, occ, 1); - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - -/* If the BYHOUR rule is specified it expands each occurrence in occs, by - using each of the hours in the byhour list. */ -static GArray* -cal_obj_byhour_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i; - - /* If BYHOUR has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byhour || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->byhour; - while (elem) { - occ->hour = GPOINTER_TO_INT (elem->data); - g_array_append_vals (new_occs, occ, 1); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* If the BYHOUR rule is specified it filters out all occurrences in occs - which do not match one of the hours in the byhour list. */ -static GArray* -cal_obj_byhour_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint len, i; - - /* If BYHOUR has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byhour || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - if (recur_data->hours[occ->hour]) - g_array_append_vals (new_occs, occ, 1); - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - -/* If the BYMINUTE rule is specified it expands each occurrence in occs, by - using each of the minutes in the byminute list. */ -static GArray* -cal_obj_byminute_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i; - - /* If BYMINUTE has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byminute || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->byminute; - while (elem) { - occ->minute = GPOINTER_TO_INT (elem->data); - g_array_append_vals (new_occs, occ, 1); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* If the BYMINUTE rule is specified it filters out all occurrences in occs - which do not match one of the minutes in the byminute list. */ -static GArray* -cal_obj_byminute_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint len, i; - - /* If BYMINUTE has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->byminute || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - if (recur_data->minutes[occ->minute]) - g_array_append_vals (new_occs, occ, 1); - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - -/* If the BYSECOND rule is specified it expands each occurrence in occs, by - using each of the seconds in the bysecond list. */ -static GArray* -cal_obj_bysecond_expand (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - GList *elem; - gint len, i; - - /* If BYSECOND has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->bysecond || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - elem = recur_data->recur->bysecond; - while (elem) { - occ->second = GPOINTER_TO_INT (elem->data); - g_array_append_vals (new_occs, occ, 1); - elem = elem->next; - } - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - -/* If the BYSECOND rule is specified it filters out all occurrences in occs - which do not match one of the seconds in the bysecond list. */ -static GArray* -cal_obj_bysecond_filter (RecurData *recur_data, - GArray *occs) -{ - GArray *new_occs; - CalObjTime *occ; - gint len, i; - - /* If BYSECOND has not been specified, or the array is empty, just - return the array. */ - if (!recur_data->recur->bysecond || occs->len == 0) - return occs; - - new_occs = g_array_new (FALSE, FALSE, sizeof (CalObjTime)); - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - if (recur_data->seconds[occ->second]) - g_array_append_vals (new_occs, occ, 1); - } - - g_array_free (occs, TRUE); - - return new_occs; -} - - - - - -/* Adds a positive number of months to the given CalObjTime, updating the year - appropriately so we end up with a valid month. Note that the day may be - invalid. */ -static void -cal_obj_time_add_months (CalObjTime *cotime, - gint months) -{ - guint month; - - /* We use a guint to avoid overflow on the guint8. */ - month = cotime->month + months; - cotime->year += month / 12; - cotime->month = month % 12; -} - - -/* Adds a positive number of days to the given CalObjTime, updating the month - and year appropriately so we end up with a valid day. */ -static void -cal_obj_time_add_days (CalObjTime *cotime, - gint days) -{ - guint day, days_in_month; - - /* We use a guint to avoid overflow on the guint8. */ - day = (guint) cotime->day; - day += days; - - for (;;) { - days_in_month = time_days_in_month (cotime->year, - cotime->month); - if (day <= days_in_month) - break; - - cotime->month++; - if (cotime->month >= 12) { - cotime->year++; - cotime->month = 0; - } - - day -= days_in_month; - } - - cotime->day = (guint8) day; -} - - -/* Subtracts a positive number of days from the given CalObjTime, updating the - month and year appropriately so we end up with a valid day. */ -static void -cal_obj_time_subtract_days (CalObjTime *cotime, - gint days) -{ - gint day, days_in_month; - - /* We use a gint to avoid overflow on the guint8. */ - day = (gint) cotime->day; - day -= days; - - while (day <= 0) { - if (cotime->month == 0) { - cotime->year--; - cotime->month = 11; - } else { - cotime->month--; - } - - days_in_month = time_days_in_month (cotime->year, - cotime->month); - - day += days_in_month; - } - - cotime->day = (guint8) day; -} - - -/* Adds a positive number of hours to the given CalObjTime, updating the day, - month & year appropriately so we end up with a valid time. */ -static void -cal_obj_time_add_hours (CalObjTime *cotime, - gint hours) -{ - guint hour; - - /* We use a guint to avoid overflow on the guint8. */ - hour = cotime->hour + hours; - cotime->hour = hour % 24; - if (hour >= 24) - cal_obj_time_add_days (cotime, hour / 24); -} - - -/* Adds a positive number of minutes to the given CalObjTime, updating the - rest of the CalObjTime appropriately. */ -static void -cal_obj_time_add_minutes (CalObjTime *cotime, - gint minutes) -{ - guint minute; - - /* We use a guint to avoid overflow on the guint8. */ - minute = cotime->minute + minutes; - cotime->minute = minute % 60; - if (minute >= 60) - cal_obj_time_add_hours (cotime, minute / 60); -} - - -/* Adds a positive number of seconds to the given CalObjTime, updating the - rest of the CalObjTime appropriately. */ -static void -cal_obj_time_add_seconds (CalObjTime *cotime, - gint seconds) -{ - guint second; - - /* We use a guint to avoid overflow on the guint8. */ - second = cotime->second + seconds; - cotime->second = second % 60; - if (second >= 60) - cal_obj_time_add_minutes (cotime, second / 60); -} - - -/* Compares 2 CalObjTimes. Returns -1 if the cotime1 is before cotime2, 0 if - they are the same, or 1 if cotime1 is after cotime2. The comparison type - specifies which parts of the times we are interested in, e.g. if CALOBJ_DAY - is used we only want to know if the days are different. */ -static gint -cal_obj_time_compare (CalObjTime *cotime1, - CalObjTime *cotime2, - CalObjTimeComparison type) -{ - if (cotime1->year < cotime2->year) - return -1; - if (cotime1->year > cotime2->year) - return 1; - - if (type == CALOBJ_YEAR) - return 0; - - if (cotime1->month < cotime2->month) - return -1; - if (cotime1->month > cotime2->month) - return 1; - - if (type == CALOBJ_MONTH) - return 0; - - if (cotime1->day < cotime2->day) - return -1; - if (cotime1->day > cotime2->day) - return 1; - - if (type == CALOBJ_DAY) - return 0; - - if (cotime1->hour < cotime2->hour) - return -1; - if (cotime1->hour > cotime2->hour) - return 1; - - if (type == CALOBJ_HOUR) - return 0; - - if (cotime1->minute < cotime2->minute) - return -1; - if (cotime1->minute > cotime2->minute) - return 1; - - if (type == CALOBJ_MINUTE) - return 0; - - if (cotime1->second < cotime2->second) - return -1; - if (cotime1->second > cotime2->second) - return 1; - - return 0; -} - - -/* This is the same as the above function, but without the comparison type. - It is used for qsort(). */ -static gint -cal_obj_time_compare_func (const void *arg1, - const void *arg2) -{ - CalObjTime *cotime1, *cotime2; - - cotime1 = (CalObjTime*) arg1; - cotime2 = (CalObjTime*) arg2; - - if (cotime1->year < cotime2->year) - return -1; - if (cotime1->year > cotime2->year) - return 1; - - if (cotime1->month < cotime2->month) - return -1; - if (cotime1->month > cotime2->month) - return 1; - - if (cotime1->day < cotime2->day) - return -1; - if (cotime1->day > cotime2->day) - return 1; - - if (cotime1->hour < cotime2->hour) - return -1; - if (cotime1->hour > cotime2->hour) - return 1; - - if (cotime1->minute < cotime2->minute) - return -1; - if (cotime1->minute > cotime2->minute) - return 1; - - if (cotime1->second < cotime2->second) - return -1; - if (cotime1->second > cotime2->second) - return 1; - - return 0; -} - - -/* Returns the weekday of the given CalObjTime, from 0 - 6. The week start - day is Monday by default, but can be set in the recurrence rule. */ -static gint -cal_obj_time_weekday (CalObjTime *cotime, - CalRecurrence *recur) -{ - GDate date; - gint weekday; - - g_date_clear (&date, 1); - g_date_set_dmy (&date, cotime->day, cotime->month + 1, cotime->year); - - /* This results in a value of 0 (Monday) - 6 (Sunday). */ - weekday = g_date_weekday (&date) - 1; - - /* This calculates the offset of our day from the start of the week. - We just add on a week (to avoid any possible negative values) and - then subtract the specified week start day, then convert it into a - value from 0-6. */ - weekday = (weekday + 7 - recur->week_start_day) % 7; - - return weekday; -} - - -/* Returns the day of the year of the given CalObjTime, from 1 - 366. */ -static gint -cal_obj_time_day_of_year (CalObjTime *cotime) -{ - GDate date; - - g_date_clear (&date, 1); - g_date_set_dmy (&date, cotime->day, cotime->month + 1, cotime->year); - - return g_date_day_of_year (&date); -} - - -/* Finds the first week in the given CalObjTime's year, using the same weekday - as the event start day (i.e. from the RecurData). - The first week of the year is the first week starting from the specified - week start day that has 4 days in the new year. It may be in the previous - year. */ -static void -cal_obj_time_find_first_week (CalObjTime *cotime, - RecurData *recur_data) -{ - GDate date; - gint weekday, week_start_day, offset; - - /* Find out the weekday of the 1st of the year. */ - g_date_clear (&date, 1); - g_date_set_dmy (&date, 1, 1, cotime->year); - - /* This results in a value of 0 (Monday) - 6 (Sunday). */ - weekday = g_date_weekday (&date) - 1; - - /* Calculate the first day of the year that starts a new week. */ - week_start_day = recur_data->recur->week_start_day; - offset = (week_start_day + 7 - weekday) % 7; - - /* Now see if we have to move backwards 1 week, i.e. if the week - starts on or after Jan 5th (since the previous week has 4 days in - this year and so will be the first week of the year). */ - if (offset >= 4) - offset -= 7; - - /* Now move to the required day. */ - offset += (recur_data->weekday + 7 - week_start_day) % 7; - - /* Now move the cotime to the appropriate day. */ - cotime->month = 0; - cotime->day = 1; - if (offset > 0) - cal_obj_time_add_days (cotime, offset); - else - cal_obj_time_subtract_days (cotime, offset); -} - - -static void -cal_object_time_from_time (CalObjTime *cotime, - time_t t) -{ - struct tm *tmp_tm; - time_t tmp_time_t; - - tmp_time_t = t; - tmp_tm = localtime (&tmp_time_t); - - cotime->year = tmp_tm->tm_year + 1900; - cotime->month = tmp_tm->tm_mon; - cotime->day = tmp_tm->tm_mday; - cotime->hour = tmp_tm->tm_hour; - cotime->minute = tmp_tm->tm_min; - cotime->second = tmp_tm->tm_sec; -} diff --git a/calendar/cal-util/cal-recur.h b/calendar/cal-util/cal-recur.h deleted file mode 100644 index 621985b71b..0000000000 --- a/calendar/cal-util/cal-recur.h +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Evolution calendar recurrence rule functions - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Damon Chaplin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_RECUR_H -#define CAL_RECUR_H - -#include -#include -#include - -BEGIN_GNOME_DECLS - -typedef enum { - CAL_RECUR_YEARLY, - CAL_RECUR_MONTHLY, - CAL_RECUR_WEEKLY, - CAL_RECUR_DAILY, - CAL_RECUR_HOURLY, - CAL_RECUR_MINUTELY, - CAL_RECUR_SECONDLY -} CalRecurType; - -typedef struct { - CalRecurType type; - - int interval; - - /* Specifies the end of the recurrence. No occurrences are generated - after this date. If it is 0, the event recurs forever. */ - time_t enddate; - - /* WKST property - the week start day: 0 = Monday to 6 = Sunday. */ - gint week_start_day; - - - /* NOTE: I've used GList's here, but it doesn't matter if we use - other data structures like arrays. The code should be easy to - change. So long as it is easy to see if the modifier is set. */ - - /* For BYMONTH modifier. A list of GINT_TO_POINTERs, 0-11. */ - GList *bymonth; - - /* For BYWEEKNO modifier. A list of GINT_TO_POINTERs, [+-]1-53. */ - GList *byweekno; - - /* For BYYEARDAY modifier. A list of GINT_TO_POINTERs, [+-]1-366. */ - GList *byyearday; - - /* For BYMONTHDAY modifier. A list of GINT_TO_POINTERs, [+-]1-31. */ - GList *bymonthday; - - /* For BYDAY modifier. A list of GINT_TO_POINTERs, in pairs. - The first of each pair is the weekday, 0 = Monday to 6 = Sunday. - The second of each pair is the week number [+-]0-53. */ - GList *byday; - - /* For BYHOUR modifier. A list of GINT_TO_POINTERs, 0-23. */ - GList *byhour; - - /* For BYMINUTE modifier. A list of GINT_TO_POINTERs, 0-59. */ - GList *byminute; - - /* For BYSECOND modifier. A list of GINT_TO_POINTERs, 0-60. */ - GList *bysecond; - - /* For BYSETPOS modifier. A list of GINT_TO_POINTERs, +ve or -ve. */ - GList *bysetpos; -} CalRecurrence; - -/* This is what we use to represent a date & time. */ -typedef struct _CalObjTime CalObjTime; -struct _CalObjTime { - guint16 year; - guint8 month; /* 0 - 11 */ - guint8 day; /* 1 - 31 */ - guint8 hour; /* 0 - 23 */ - guint8 minute; /* 0 - 59 */ - guint8 second; /* 0 - 59 (maybe 60 for leap second) */ -}; - -typedef gboolean (* CalRecurInstanceFn) (CalComponent *comp, - time_t instance_start, - time_t instace_end, - gpointer data); - -void cal_recur_generate_instances (CalComponent *comp, - time_t start, - time_t end, - CalRecurInstanceFn cb, - gpointer cb_data); - -CalRecurrence *cal_recur_from_icalrecurrencetype (struct icalrecurrencetype *ir); -void cal_recur_free (CalRecurrence *r); - -END_GNOME_DECLS - -#endif diff --git a/calendar/cal-util/cal-util.c b/calendar/cal-util/cal-util.c deleted file mode 100644 index 40c4fe5bfe..0000000000 --- a/calendar/cal-util/cal-util.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Evolution calendar utilities and types - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "cal-util.h" -#include "libversit/vcc.h" - - - -/** - * cal_obj_instance_list_free: - * @list: List of #CalObjInstance structures. - * - * Frees a list of #CalObjInstance structures. - **/ -void -cal_obj_instance_list_free (GList *list) -{ - CalObjInstance *i; - GList *l; - - for (l = list; l; l = l->next) { - i = l->data; - - g_assert (i != NULL); - g_assert (i->uid != NULL); - - g_free (i->uid); - g_free (i); - } - - g_list_free (list); -} - -/** - * cal_alarm_instance_list_free: - * @list: List of #CalAlarmInstance structures. - * - * Frees a list of #CalAlarmInstance structures. - **/ -void -cal_alarm_instance_list_free (GList *list) -{ - CalAlarmInstance *i; - GList *l; - - for (l = list; l; l = l->next) { - i = l->data; - - g_assert (i != NULL); - g_assert (i->uid != NULL); - - g_free (i->uid); - g_free (i); - } - - g_list_free (list); -} - -/** - * cal_obj_uid_list_free: - * @list: List of strings with unique identifiers. - * - * Frees a list of unique identifiers for calendar objects. - **/ -void -cal_obj_uid_list_free (GList *list) -{ - GList *l; - - for (l = list; l; l = l->next) { - char *uid; - - uid = l->data; - - g_assert (uid != NULL); - g_free (uid); - } - - g_list_free (list); -} diff --git a/calendar/cal-util/cal-util.h b/calendar/cal-util/cal-util.h deleted file mode 100644 index 154f4c2ad5..0000000000 --- a/calendar/cal-util/cal-util.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Evolution calendar utilities and types - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_UTIL_H -#define CAL_UTIL_H - -#include -#include -#include - -BEGIN_GNOME_DECLS - - - -/* Instance of a calendar object. This can be an actual occurrence, a - * recurrence, or an alarm trigger of a `real' calendar object. - */ -typedef struct { - char *uid; /* UID of the object */ - time_t start; /* Start time of instance */ - time_t end; /* End time of instance */ -} CalObjInstance; - -void cal_obj_instance_list_free (GList *list); - -/* Instance of an alarm trigger */ -typedef struct { - char *uid; /* UID of object */ -#if 0 - enum AlarmType type; /* Type of alarm */ -#endif - time_t trigger; /* Alarm trigger time */ - time_t occur; /* Occurrence time */ -} CalAlarmInstance; - -void cal_alarm_instance_list_free (GList *list); - -/* Used for multiple UID queries */ -typedef enum { - CALOBJ_TYPE_EVENT = 1 << 0, - CALOBJ_TYPE_TODO = 1 << 1, - CALOBJ_TYPE_JOURNAL = 1 << 2, - CALOBJ_TYPE_ANY = 0x07 -} CalObjType; - -void cal_obj_uid_list_free (GList *list); - -END_GNOME_DECLS - -#endif diff --git a/calendar/cal-util/calobj.c b/calendar/cal-util/calobj.c deleted file mode 100644 index 0ede42ebc6..0000000000 --- a/calendar/cal-util/calobj.c +++ /dev/null @@ -1,2008 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Calendar objects implementations. - * Copyright (C) 1998 the Free Software Foundation - * - * Authors: - * Miguel de Icaza (miguel@gnu.org) - * Federico Mena (quartic@gimp.org) - */ -#include -#include -#include -#include -#include -#include -#include "calobj.h" -#include "timeutil.h" -#include "libversit/vcc.h" -#include "icalendar-save.h" -#include "icalendar.h" - - - -/* VCalendar product ID */ -#define PRODID "-//Helix Code//NONSGML Evolution Calendar//EN" - -static gint compare_exdates (gconstpointer a, gconstpointer b); -static void ical_object_normalize_summary (iCalObject *ico); -static void list_free (GList *list); - - - -char * -ical_gen_uid (void) -{ - static char *hostname; - time_t t = time (NULL); - static int serial; - - if (!hostname){ - char buffer [128]; - - if ((gethostname (buffer, sizeof (buffer)-1) == 0) && - (buffer [0] != 0)) - hostname = g_strdup (buffer); - else - hostname = g_strdup ("localhost"); - } - - return g_strdup_printf ( - "%s-%d-%d-%d-%d@%s", - isodate_from_time_t (t), - getpid (), - getgid (), - getppid (), - serial++, - hostname); -} - -iCalObject * -ical_object_new (void) -{ - iCalObject *ico; - - ico = g_new0 (iCalObject, 1); - - ico->seq = -1; - ico->dtstamp = time (NULL); - ico->uid = ical_gen_uid (); - - ico->pilot_id = 0; - ico->pilot_status = ICAL_PILOT_SYNC_MOD; - - ico->ref_count = 1; - - return ico; -} - -iCalObject * -ical_new (char *comment, char *organizer, char *summary) -{ - iCalObject *ico; - - ico = ical_object_new (); - - ico->comment = g_strdup (comment); - ico->organizer = g_new0 (iCalPerson, 1); - ico->organizer->addr = g_strdup (organizer); - ico->summary = g_strdup (summary); - ico->class = g_strdup ("PUBLIC"); - ico->status = g_strdup ("NEEDS ACTION"); - - ico->dalarm.type = ALARM_DISPLAY; - ico->palarm.type = ALARM_PROGRAM; - ico->malarm.type = ALARM_MAIL; - ico->aalarm.type = ALARM_AUDIO; - - ical_object_normalize_summary (ico); - - return ico; -} - - -void -ical_object_ref (iCalObject *ico) -{ - ico->ref_count++; -} - - -#define free_if_defined(x) if (x){ g_free (x); x = 0; } -#define lfree_if_defined(x) if (x){ list_free (x); x = 0; } -static void -ical_object_destroy (iCalObject *ico) -{ - /* Regular strings */ - free_if_defined (ico->comment); - free_if_defined (ico->organizer); - free_if_defined (ico->summary); - free_if_defined (ico->uid); - free_if_defined (ico->status); - free_if_defined (ico->class); - free_if_defined (ico->url); - free_if_defined (ico->recur); - - /* Lists */ - lfree_if_defined (ico->exdate); - lfree_if_defined (ico->categories); - lfree_if_defined (ico->resources); - lfree_if_defined (ico->related); - lfree_if_defined (ico->attach); - - /* Alarms */ - g_free (ico->dalarm.data); - g_free (ico->palarm.data); - g_free (ico->malarm.data); - g_free (ico->aalarm.data); - - g_free (ico); -} - -void -ical_object_unref (iCalObject *ico) -{ - ico->ref_count--; - if (ico->ref_count == 0) - ical_object_destroy (ico); -} - - -static void -my_free (gpointer data, gpointer user_dat_ignored) -{ - g_free (data); -} - -static void -list_free (GList *list) -{ - g_list_foreach (list, my_free, 0); - g_list_free (list); -} - -/* This resets any recurrence rules of the iCalObject. */ -void -ical_object_reset_recurrence (iCalObject *ico) -{ - free_if_defined (ico->recur); - lfree_if_defined (ico->exdate); -} - -static GList * -set_list (char *str) -{ - GList *list = 0; - char *s; - - for (s = strtok (str, ";"); s; s = strtok (NULL, ";")) - list = g_list_prepend (list, g_strdup (s)); - - return list; -} - -static GList * -set_date_list (char *str) -{ - GList *list = 0; - char *s; - - for (s = strtok (str, ";,"); s; s = strtok (NULL, ";,")){ - time_t *t = g_new (time_t, 1); - - while (*s && isspace (*s)) - s++; - *t = time_from_isodate (s); - list = g_list_prepend (list, t); - } - return list; -} - -void -ical_object_add_exdate (iCalObject *o, time_t t) -{ - time_t *pt = g_new (time_t, 1); - - *pt = t; - o->exdate = g_list_prepend (o->exdate, pt); -} - -static void -ignore_space(char **str) -{ - while (**str && isspace (**str)) - (*str)++; -} - -static void -skip_numbers (char **str) -{ - while (**str){ - ignore_space (str); - if (!isdigit (**str)) - return; - while (**str && isdigit (**str)) - (*str)++; - } -} - -static void -weekdaylist (iCalObject *o, char **str) -{ - int i; - struct { - char first_letter, second_letter; - int index; - } days [] = { - { 'S', 'U', 0 }, - { 'M', 'O', 1 }, - { 'T', 'U', 2 }, - { 'W', 'E', 3 }, - { 'T', 'H', 4 }, - { 'F', 'R', 5 }, - { 'S', 'A', 6 } - }; - - ignore_space (str); - do { - for (i = 0; i < 7; i++){ - if (**str == days [i].first_letter && *(*str+1) == days [i].second_letter){ - o->recur->weekday |= 1 << i; - *str += 2; - if (**str == ' ') - (*str)++; - } - } - } while (isalpha (**str)); - - if (o->recur->weekday == 0){ - struct tm tm = *localtime (&o->dtstart); - - o->recur->weekday = 1 << tm.tm_wday; - } -} - -static void -weekdaynum (iCalObject *o, char **str) -{ - int i; - struct { - char first_letter, second_letter; - int index; - } days [] = { - { 'S', 'U', 0 }, - { 'M', 'O', 1 }, - { 'T', 'U', 2 }, - { 'W', 'E', 3 }, - { 'T', 'H', 4 }, - { 'F', 'R', 5 }, - { 'S', 'A', 6 } - }; - - ignore_space (str); - do { - for (i = 0; i < 7; i++){ - if (**str == days [i].first_letter && *(*str+1) == days [i].second_letter){ - o->recur->weekday = i; - *str += 2; - if (**str == ' ') - (*str)++; - } - } - } while (isalpha (**str)); -} - -static void -ocurrencelist (iCalObject *o, char **str) -{ - char *p; - - ignore_space (str); - p = *str; - if (!isdigit (*p)) - return; - - if (!(*p >= '1' && *p <= '5')) - return; - - if (!(*(p+1) == '+' || *(p+1) == '-')) - return; - - o->recur->u.month_pos = (*p-'0') * (*(p+1) == '+' ? 1 : -1); - *str += 2; -} - -#if 0 - -static void -daynumber (iCalObject *o, char **str) -{ - int val = 0; - char *p = *str; - - ignore_space (str); - if (strcmp (p, "LD")){ - o->recur->u.month_day = DAY_LASTDAY; - *str += 2; - return; - } - - if (!(isdigit (*p))) - return; - - while (**str && isdigit (**str)){ - val = val * 10 + (**str - '0'); - (*str)++; - } - - if (**str == '+') - (*str)++; - - if (**str == '-') - val *= -1; - o->recur->u.month_day = val; -} - -#endif - -static void -daynumberlist (iCalObject *o, char **str) -{ - int first = 0; - int val = 0; - - ignore_space (str); - - while (**str){ - if (!isdigit (**str)) - return; - while (**str && isdigit (**str)){ - val = 10 * val + (**str - '0'); - (*str)++; - } - if (!first){ - /* - * Some broken applications set this to zero - */ - if (val == 0){ - struct tm day = *localtime (&o->dtstart); - - val = day.tm_mday; - } - o->recur->u.month_day = val; - first = 1; - val = 0; - } - } -} - -static void -load_recur_weekly (iCalObject *o, char **str) -{ - weekdaylist (o, str); -} - -static void -load_recur_monthly_pos (iCalObject *o, char **str) -{ - ocurrencelist (o, str); - weekdaynum (o, str); -} - -static void -load_recur_monthly_day (iCalObject *o, char **str) -{ - daynumberlist (o, str); -} - -static void -load_recur_yearly_month (iCalObject *o, char **str) -{ - /* Skip as we do not support multiple months and we do expect - * the dtstart to agree with the value on this field - */ - skip_numbers (str); -} - -static void -load_recur_yearly_day (iCalObject *o, char **str) -{ - /* Skip as we do not support multiple days and we do expect - * the dtstart to agree with the value on this field - * - * FIXME: we should support every-n-years - */ - skip_numbers (str); -} - -static void -duration (iCalObject *o, char **str) -{ - unsigned int duration = 0; - - ignore_space (str); - if (**str != '#') - return; - (*str)++; - while (**str && isdigit (**str)){ - duration = duration * 10 + (**str - '0'); - (*str)++; - } - o->recur->duration = duration; -} - -static void -enddate (iCalObject *o, char **str) -{ - ignore_space (str); - if (isdigit (**str)){ - o->recur->_enddate = time_from_isodate (*str); - *str += 16; - } -} - -static int -load_recurrence (iCalObject *o, char *str) -{ - enum RecurType type; - int interval = 0; - - type = -1; - switch (*str++){ - case 'D': - type = RECUR_DAILY; - break; - - case 'W': - type = RECUR_WEEKLY; - break; - - case 'M': - if (*str == 'P') - type = RECUR_MONTHLY_BY_POS; - else if (*str == 'D') - type = RECUR_MONTHLY_BY_DAY; - str++; - break; - - case 'Y': - if (*str == 'M') - type = RECUR_YEARLY_BY_MONTH; - else if (*str == 'D') - type = RECUR_YEARLY_BY_DAY; - str++; - break; - } - if (type == -1) - return 0; - - o->recur = g_new0 (Recurrence, 1); - o->recur->type = type; - ignore_space (&str); - - /* Get the interval */ - for (;*str && isdigit (*str);str++) - interval = interval * 10 + (*str-'0'); - - if (interval == 0) - interval = 1; - - o->recur->interval = interval; - - /* this is the default per the spec */ - o->recur->duration = 2; - - ignore_space (&str); - - switch (type){ - case RECUR_DAILY: - break; - case RECUR_WEEKLY: - load_recur_weekly (o, &str); - break; - case RECUR_MONTHLY_BY_POS: - load_recur_monthly_pos (o, &str); - break; - case RECUR_MONTHLY_BY_DAY: - load_recur_monthly_day (o, &str); - break; - case RECUR_YEARLY_BY_MONTH: - load_recur_yearly_month (o, &str); - break; - case RECUR_YEARLY_BY_DAY: - load_recur_yearly_day (o, &str); - break; - default: - g_warning ("Unimplemented recurrence type %d", (int) type); - break; - } - duration (o, &str); - enddate (o, &str); - - /* Compute the enddate */ - if (o->recur->_enddate == 0){ - if (o->recur->duration != 0){ - ical_object_compute_end (o); - } else - o->recur->enddate = 0; - } else { - o->recur->enddate = o->recur->_enddate; - } - return 1; -} - -#define is_a_prop_of(obj,prop) isAPropertyOf (obj,prop) -#define str_val(obj) the_str = fakeCString (vObjectUStringZValue (obj)) -#define has(obj,prop) (vo = isAPropertyOf (obj, prop)) - -/* - * FIXME: This is loosing precission. Enhanec the thresholds - */ -#define HOURS(n) (n*(60*60)) - -static void -setup_alarm_at (iCalObject *ico, CalendarAlarm *alarm, char *iso_time, VObject *vo) -{ - time_t alarm_time = time_from_isodate (iso_time); - time_t base = ico->dtstart; - int d = difftime (base, alarm_time); - VObject *a; - char *the_str; - - alarm->enabled = 1; - if (d > HOURS (2)){ - if (d > HOURS (48)){ - alarm->count = d / HOURS (24); - alarm->units = ALARM_DAYS; - } else { - alarm->count = d / (60*60); - alarm->units = ALARM_HOURS; - } - } else { - alarm->count = d / 60; - alarm->units = ALARM_MINUTES; - } - - if ((a = is_a_prop_of (vo, VCSnoozeTimeProp))){ - alarm->snooze_secs = isodiff_to_secs (str_val (a)); - free (the_str); - } - - if ((a = is_a_prop_of (vo, VCRepeatCountProp))){ - alarm->snooze_repeat = atoi (str_val (a)); - free (the_str); - } -} - -/* - * Duplicates an iCalObject. Implementation is a grand hack. - * If you need the new ICalObject to have a new uid, free the current one, - * and call ical_gen_uid() to generate a new one. - */ -iCalObject * -ical_object_duplicate (iCalObject *o) -{ - VObject *vo; - iCalObject *new; - - vo = ical_object_to_vobject (o); - switch (o->type){ - case ICAL_EVENT: - new = ical_object_create_from_vobject (vo, VCEventProp); - break; - case ICAL_TODO: - new = ical_object_create_from_vobject (vo, VCTodoProp); - break; - default: - new = NULL; - } - - cleanVObject (vo); - return new; -} - -/* FIXME: we need to load the recurrence properties */ -iCalObject * -ical_object_create_from_vobject (VObject *o, const char *object_name) -{ - time_t now = time (NULL); - iCalObject *ical; - VObject *vo, *a; - VObjectIterator i; - char *the_str; - - ical = g_new0 (iCalObject, 1); - - if (strcmp (object_name, VCEventProp) == 0) - ical->type = ICAL_EVENT; - else if (strcmp (object_name, VCTodoProp) == 0) - ical->type = ICAL_TODO; - else { - g_free (ical); - return 0; - } - - ical->ref_count = 1; - - /* uid */ - if (has (o, VCUniqueStringProp)){ - ical->uid = g_strdup (str_val (vo)); - free (the_str); - } else { - ical->uid = ical_gen_uid (); - } - - /* seq */ - if (has (o, VCSequenceProp)){ - ical->seq = atoi (str_val (vo)); - free (the_str); - } else - ical->seq = 0; - - /* dtstart */ - if (has (o, VCDTstartProp)){ - ical->dtstart = time_from_isodate (str_val (vo)); - free (the_str); - } else - ical->dtstart = 0; - - /* dtend */ - ical->dtend = 0; /* default value */ - if (ical->type == ICAL_EVENT){ - if (has (o, VCDTendProp)){ - ical->dtend = time_from_isodate (str_val (vo)); - free (the_str); - } - } else if (ical->type == ICAL_TODO){ - if (has (o, VCDueProp)){ - ical->dtend = time_from_isodate (str_val (vo)); - free (the_str); - } - } - - /* dcreated */ - if (has (o, VCDCreatedProp)){ - ical->created = time_from_isodate (str_val (vo)); - free (the_str); - } - - /* completed */ - if (has (o, VCCompletedProp)){ - ical->completed = time_from_isodate (str_val (vo)); - free (the_str); - } - - /* last_mod */ - if (has (o, VCLastModifiedProp)){ - ical->last_mod = time_from_isodate (str_val (vo)); - free (the_str); - } else - ical->last_mod = now; - - /* exdate */ - if (has (o, VCExpDateProp)){ - ical->exdate = set_date_list (str_val (vo)); - free (the_str); - } - - /* description/comment */ - if (has (o, VCDescriptionProp)){ - ical->comment = g_strdup (str_val (vo)); - free (the_str); - } - - /* summary */ - if (has (o, VCSummaryProp)){ - ical->summary = g_strdup (str_val (vo)); - free (the_str); - - /* Convert any CR/LF/CRLF sequences in the summary field to - spaces so we just have a one-line field. */ - ical_object_normalize_summary (ical); - } else - ical->summary = g_strdup (""); - - /* status */ - if (has (o, VCStatusProp)){ - ical->status = g_strdup (str_val (vo)); - free (the_str); - } else - ical->status = g_strdup ("NEEDS ACTION"); - - if (has (o, VCClassProp)){ - ical->class = g_strdup (str_val (vo)); - free (the_str); - } else - ical->class = g_strdup ("PUBLIC"); - - /* categories */ - if (has (o, VCCategoriesProp)){ - ical->categories = set_list (str_val (vo)); - free (the_str); - } - - /* resources */ - if (has (o, VCResourcesProp)){ - ical->resources = set_list (str_val (vo)); - free (the_str); - } - - /* priority */ - if (has (o, VCPriorityProp)){ - ical->priority = atoi (str_val (vo)); - free (the_str); - } - - /* tranparency */ - if (has (o, VCTranspProp)){ - ical->transp = atoi (str_val (vo)) ? ICAL_TRANSPARENT : ICAL_OPAQUE; - free (the_str); - } - - /* Organizer */ - if (has (o, VCOrgNameProp)){ - ical->organizer = g_new0 (iCalPerson, 1); - ical->organizer->addr = g_strdup (str_val (vo)); - free (the_str); - } - - /* related */ - if (has (o, VCRelatedToProp)){ - char *str; - char *s; - iCalRelation *rel; - str = str_val (vo); - for (s = strtok (str, ";"); s; s = strtok (NULL, ";")) { - rel = g_new0 (iCalRelation, 1); - rel->uid = g_strdup (s); - rel->reltype = g_strdup ("PARENT"); - ical->related = g_list_prepend (ical->related, rel); - } - free (the_str); - } - - /* attach */ - initPropIterator (&i, o); - while (moreIteration (&i)){ - vo = nextVObject (&i); - if (strcmp (vObjectName (vo), VCAttachProp) == 0){ - ical->attach = g_list_prepend (ical->attach, g_strdup (str_val (vo))); - free (the_str); - } - } - - /* url */ - if (has (o, VCURLProp)){ - /* There seems to be a problem with the URL property. For some - reason an empty property gets saved, vObjectUStringZValue - returns NULL and fakeCString crashes. So we check for NULL. - */ - const wchar_t *zval; - - zval = vObjectUStringZValue (o); - if (zval) { - the_str = fakeCString (zval); - ical->url = g_strdup (the_str); - free (the_str); - } - } - - /* dalarm */ - ical->dalarm.type = ALARM_DISPLAY; - ical->dalarm.enabled = 0; - if (has (o, VCDAlarmProp)){ - if ((a = is_a_prop_of (vo, VCRunTimeProp))){ - setup_alarm_at (ical, &ical->dalarm, str_val (a), vo); - free (the_str); - } - } - - /* aalarm */ - ical->aalarm.type = ALARM_AUDIO; - ical->aalarm.enabled = 0; - if (has (o, VCAAlarmProp)){ - if ((a = is_a_prop_of (vo, VCRunTimeProp))){ - setup_alarm_at (ical, &ical->aalarm, str_val (a), vo); - free (the_str); - } - } - - /* palarm */ - ical->palarm.type = ALARM_PROGRAM; - ical->palarm.enabled = 0; - if (has (o, VCPAlarmProp)){ - ical->palarm.type = ALARM_PROGRAM; - if ((a = is_a_prop_of (vo, VCRunTimeProp))){ - setup_alarm_at (ical, &ical->palarm, str_val (a), vo); - free (the_str); - - if ((a = is_a_prop_of (vo, VCProcedureNameProp))){ - ical->palarm.data = g_strdup (str_val (a)); - free (the_str); - } else - ical->palarm.data = g_strdup (""); - } - } - - /* malarm */ - ical->malarm.type = ALARM_MAIL; - ical->malarm.enabled = 0; - if (has (o, VCMAlarmProp)){ - ical->malarm.type = ALARM_MAIL; - if ((a = is_a_prop_of (vo, VCRunTimeProp))){ - setup_alarm_at (ical, &ical->malarm, str_val (a), vo); - free (the_str); - - if ((a = is_a_prop_of (vo, VCEmailAddressProp))){ - ical->malarm.data = g_strdup (str_val (a)); - free (the_str); - } else - ical->malarm.data = g_strdup (""); - } - } - - /* rrule */ - if (has (o, VCRRuleProp)){ - if (!load_recurrence (ical, str_val (vo))) { - ical_object_unref (ical); - return NULL; - } - free (the_str); - } - - /* - * Pilot - */ - if (has (o, XPilotIdProp)){ - ical->pilot_id = atoi (str_val (vo)); - free (the_str); - } else - ical->pilot_id = 0; - - if (has (o, XPilotStatusProp)){ - ical->pilot_status = atoi (str_val (vo)); - free (the_str); - } else - ical->pilot_status = ICAL_PILOT_SYNC_MOD; - - return ical; -} - -static char * -to_str (int num) -{ - static char buf [40]; - - sprintf (buf, "%d", num); - return buf; -} - -/* - * stores a GList in the property. - */ -static void -store_list (VObject *o, char *prop, GList *values) -{ - GList *l; - int len; - char *result, *p; - - for (len = 0, l = values; l; l = l->next) - len += strlen (l->data) + 1; - - result = g_malloc (len); - - for (p = result, l = values; l; l = l->next) { - int len = strlen (l->data); - - strcpy (p, l->data); - - if (l->next) { - p [len] = ';'; - p += len+1; - } else - p += len; - } - - *p = 0; - - addPropValue (o, prop, result); - g_free (result); -} - -static void -store_rel_list (VObject *o, char *prop, GList *values) -{ - GList *l; - int len; - char *result, *p; - - for (len = 0, l = values; l; l = l->next) - len += strlen (((iCalRelation*)(l->data))->uid) + 1; - - result = g_malloc (len); - - for (p = result, l = values; l; l = l->next) { - int len = strlen (((iCalRelation*)(l->data))->uid); - - strcpy (p, ((iCalRelation*)(l->data))->uid); - - if (l->next) { - p [len] = ';'; - p += len+1; - } else - p += len; - } - - *p = 0; - - addPropValue (o, prop, result); - g_free (result); -} - -static void -store_date_list (VObject *o, char *prop, GList *values) -{ - GList *l; - int size, len; - char *s, *p; - - size = g_list_length (values); - s = p = g_malloc ((size * 17 + 1) * sizeof (char)); - - for (l = values; l; l = l->next){ - strcpy (s, isodate_from_time_t (*(time_t *)l->data)); - len = strlen (s); - s [len] = ','; - s += len + 1; - } - s--; - *s = 0; - addPropValue (o, prop, p); - g_free (p); -} - -static char *recur_type_name [] = { "D", "W", "MP", "MD", "YM", "YD" }; -static char *recur_day_list [] = { "SU", "MO", "TU","WE", "TH", "FR", "SA" }; -static char *alarm_names [] = { VCMAlarmProp, VCPAlarmProp, VCDAlarmProp, VCAAlarmProp }; - -static VObject * -save_alarm (VObject *o, CalendarAlarm *alarm, iCalObject *ical) -{ - VObject *alarm_object; - struct tm tm; - time_t alarm_time; - - if (!alarm->enabled) - return NULL; - tm = *localtime (&ical->dtstart); - switch (alarm->units){ - case ALARM_MINUTES: - tm.tm_min -= alarm->count; - break; - - case ALARM_HOURS: - tm.tm_hour -= alarm->count; - break; - - case ALARM_DAYS: - tm.tm_mday -= alarm->count; - break; - } - - alarm_time = mktime (&tm); - alarm_object = addProp (o, alarm_names [alarm->type]); - addPropValue (alarm_object, VCRunTimeProp, isodate_from_time_t (alarm_time)); - - if (alarm->snooze_secs) - addPropValue (alarm_object, VCSnoozeTimeProp, isodiff_from_secs (alarm->snooze_secs)); - else - addPropValue (alarm_object, VCSnoozeTimeProp, ""); - - if (alarm->snooze_repeat){ - char buf [20]; - - sprintf (buf, "%d", alarm->snooze_repeat); - addPropValue (alarm_object, VCRepeatCountProp, buf); - } else - addPropValue (alarm_object, VCRepeatCountProp, ""); - return alarm_object; -} - -VObject * -ical_object_to_vobject (iCalObject *ical) -{ - VObject *o, *alarm, *s; - GList *l; - - if (ical->type == ICAL_EVENT) - o = newVObject (VCEventProp); - else - o = newVObject (VCTodoProp); - - /* uid */ - if (ical->uid) - addPropValue (o, VCUniqueStringProp, ical->uid); - - /* seq */ - addPropValue (o, VCSequenceProp, to_str (ical->seq)); - - /* dtstart */ - addPropValue (o, VCDTstartProp, isodate_from_time_t (ical->dtstart)); - - /* dtend */ - if (ical->type == ICAL_EVENT){ - addPropValue (o, VCDTendProp, isodate_from_time_t (ical->dtend)); - } else if (ical->type == ICAL_TODO){ - addPropValue (o, VCDueProp, isodate_from_time_t (ical->dtend)); - } - - /* dcreated */ - addPropValue (o, VCDCreatedProp, isodate_from_time_t (ical->created)); - - /* completed */ - if (ical->completed) - addPropValue (o, VCDTendProp, isodate_from_time_t (ical->completed)); - - /* last_mod */ - addPropValue (o, VCLastModifiedProp, isodate_from_time_t (ical->last_mod)); - - /* exdate */ - if (ical->exdate) - store_date_list (o, VCExpDateProp, ical->exdate); - - /* description/comment */ - if (ical->comment && strlen (ical->comment)){ - s = addPropValue (o, VCDescriptionProp, ical->comment); - if (strchr (ical->comment, '\n')) - addProp (s, VCQuotedPrintableProp); - } - - /* summary */ - if (ical->summary && strlen (ical->summary)) { - s = addPropValue (o, VCSummaryProp, ical->summary); - if (strchr (ical->summary, '\n')) - addProp (s, VCQuotedPrintableProp); - } - - /* status */ - addPropValue (o, VCStatusProp, ical->status); - - /* class */ - addPropValue (o, VCClassProp, ical->class); - - /* categories */ - if (ical->categories) - store_list (o, VCCategoriesProp, ical->categories); - - /* resources */ - if (ical->resources) - store_list (o, VCCategoriesProp, ical->resources); - - /* priority */ - addPropValue (o, VCPriorityProp, to_str (ical->priority)); - - /* transparency */ - addPropValue (o, VCTranspProp, to_str (ical->transp)); - - /* Owner/organizer */ - if (ical->organizer && ical->organizer->addr) - addPropValue (o, VCOrgNameProp, ical->organizer->addr); - - /* related */ - if (ical->related) - store_rel_list (o, VCRelatedToProp, ical->related); - - /* attach */ - for (l = ical->attach; l; l = l->next) - addPropValue (o, VCAttachProp, l->data); - - /* url */ - if (ical->url) - addPropValue (o, VCURLProp, ical->url); - - if (ical->recur){ - char result [256]; - char buffer [80]; - int i; - - sprintf (result, "%s%d ", recur_type_name [ical->recur->type], ical->recur->interval); - switch (ical->recur->type){ - case RECUR_DAILY: - break; - - case RECUR_WEEKLY: - for (i = 0; i < 7; i++){ - if (ical->recur->weekday & (1 << i)){ - sprintf (buffer, "%s ", recur_day_list [i]); - strcat (result, buffer); - } - } - break; - - case RECUR_MONTHLY_BY_POS: { - int nega = ical->recur->u.month_pos < 0; - - sprintf (buffer, "%d%s ", nega ? -ical->recur->u.month_pos : ical->recur->u.month_pos, - nega ? "-" : "+"); - strcat (result, buffer); - /* the gui is set up for a single day, not a set here in this case */ - sprintf (buffer, "%s ", recur_day_list [ical->recur->weekday]); - strcat (result, buffer); - } - break; - - case RECUR_MONTHLY_BY_DAY: - sprintf (buffer, "%d ", ical->recur->u.month_pos); - strcat (result, buffer); - break; - - case RECUR_YEARLY_BY_MONTH: - break; - - case RECUR_YEARLY_BY_DAY: - break; - } - if (ical->recur->_enddate == 0) - sprintf (buffer, "#%d ",ical->recur->duration); - else - sprintf (buffer, "%s ", isodate_from_time_t (ical->recur->_enddate)); - strcat (result, buffer); - addPropValue (o, VCRRuleProp, result); - } - - save_alarm (o, &ical->aalarm, ical); - save_alarm (o, &ical->dalarm, ical); - - if ((alarm = save_alarm (o, &ical->palarm, ical))) - addPropValue (alarm, VCProcedureNameProp, ical->palarm.data); - if ((alarm = save_alarm (o, &ical->malarm, ical))) - addPropValue (alarm, VCEmailAddressProp, ical->malarm.data); - - /* Pilot */ - { - char buffer [20]; - - sprintf (buffer, "%d", ical->pilot_id); - addPropValue (o, XPilotIdProp, buffer); - sprintf (buffer, "%d", ical->pilot_status); - addPropValue (o, XPilotStatusProp, buffer); - } - - return o; -} - -void -ical_foreach (GList *events, calendarfn fn, void *closure) -{ - for (; events; events = events->next){ - iCalObject *ical = events->data; - - (*fn) (ical, ical->dtstart, ical->dtend, closure); - } -} - -static int -is_date_in_list (GList *list, struct tm *date) -{ - struct tm tm; - - for (; list; list = list->next){ - time_t *timep = list->data; - - tm = *localtime (timep); - if (date->tm_mday == tm.tm_mday && - date->tm_mon == tm.tm_mon && - date->tm_year == tm.tm_year){ - return 1; - } - } - return 0; -} - -/* Generates an event instance based on the reference time */ -static gboolean -generate (iCalObject *ico, time_t reference, calendarfn cb, void *closure) -{ - time_t offset; - struct tm tm_start, ref; - time_t start, end; - - offset = ico->dtend - ico->dtstart; - - tm_start = *localtime (&ico->dtstart); - ref = *localtime (&reference); - - tm_start.tm_mday = ref.tm_mday; - tm_start.tm_mon = ref.tm_mon; - tm_start.tm_year = ref.tm_year; - - start = mktime (&tm_start); - if (start == -1) { - g_message ("generate(): Produced invalid start date!"); - return FALSE; - } - - end = start + offset; - -#if 0 - /* FIXME: I think this is not needed, since we are offsetting by full day values, - * and the times should remain the same --- if you have a daily appointment - * at 18:00, it is always at 18:00 even during daylight savings. - * - * However, what should happen on the exact change-of-savings day with - * appointments in the early morning hours? - */ - - if (ref.tm_isdst > tm_start.tm_isdst) { - tm_start.tm_hour--; - tm_end.tm_hour--; - } else if (ref.tm_isdst < tm_start.tm_isdst) { - tm_start.tm_hour++; - tm_end.tm_hour++; - } -#endif - - if (ico->exdate && is_date_in_list (ico->exdate, &tm_start)) - return TRUE; - - return (*cb) (ico, start, end, closure); -} - -int -ical_object_get_first_weekday (int weekday_mask) -{ - int i; - - for (i = 0; i < 7; i++) - if (weekday_mask & (1 << i)) - return i; - - return -1; -} - -#define time_in_range(t, a, b) ((t >= a) && (b ? (t < b) : 1)) -#define recur_in_range(t, r) (r->enddate ? (t < r->enddate) : 1) - -/* - * Generate every possible event. Invokes the callback routine for - * every occurrence of the event in the [START, END] time interval. - * - * If END is zero, the event is generated forever. - * The callback routine is expected to return 0 when no further event - * generation is requested. - */ -void -ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendarfn cb, void *closure) -{ - time_t current; - int first_week_day; - - /* If there is no recurrence, just check ranges */ - - if (!ico->recur) { - if ((end && (ico->dtstart < end) && (ico->dtend > start)) - || ((end == 0) && (ico->dtend > start))) { - /* The new calendar views expect the times to not be - clipped, so they can show that it continues past - the end of the viewable area. */ -#if 0 - time_t ev_s, ev_e; - - /* Clip range */ - - ev_s = MAX (ico->dtstart, start); - ev_e = MIN (ico->dtend, end); - - (* cb) (ico, ev_s, ev_e, closure); -#else - (* cb) (ico, ico->dtstart, ico->dtend, closure); -#endif - } - return; - } - - /* The event has a recurrence rule -- check that we will generate at least one instance */ - - if (end != 0) { - if (ico->dtstart > end) - return; - - if (!IS_INFINITE (ico->recur) && (ico->recur->enddate < start)) - return; - } - - /* Generate the instances */ - - current = ico->dtstart; - - switch (ico->recur->type) { - case RECUR_DAILY: - do { - if (time_in_range (current, start, end) && recur_in_range (current, ico->recur)) - if (!generate (ico, current, cb, closure)) - return; - - /* Advance */ - - current = time_add_day (current, ico->recur->interval); - - if (current == -1) { - g_warning ("RECUR_DAILY: time_add_day() returned invalid time"); - return; - } - } while ((current < end) || (end == 0)); - - break; - - case RECUR_WEEKLY: - do { - struct tm tm; - - tm = *localtime (¤t); - - if (time_in_range (current, start, end) && recur_in_range (current, ico->recur)) { - /* Weekdays to recur on are specified as a bitmask */ - if (ico->recur->weekday & (1 << tm.tm_wday)) { - if (!generate (ico, current, cb, closure)) - return; - } - } - - /* Advance by day for scanning the week or by interval at week end */ - - if (tm.tm_wday == 6) - current = time_add_day (current, (ico->recur->interval - 1) * 7 + 1); - else - current = time_add_day (current, 1); - - if (current == -1) { - g_warning ("RECUR_WEEKLY: time_add_day() returned invalid time\n"); - return; - } - } while (current < end || (end == 0)); - - break; - - case RECUR_MONTHLY_BY_POS: - /* FIXME: We only deal with positives now */ - if (ico->recur->u.month_pos < 0) { - g_warning ("RECUR_MONTHLY_BY_POS does not support negative positions yet"); - return; - } - - if (ico->recur->u.month_pos == 0) - return; - - first_week_day = /* ical_object_get_first_weekday (ico->recur->weekday); */ - ico->recur->weekday; /* the i/f only lets you choose a single day of the week! */ - - /* This should not happen, but take it into account */ - if (first_week_day == -1) { - g_warning ("ical_object_get_first_weekday() returned -1"); - return; - } - - do { - struct tm tm; - time_t t; - int week_day_start; - - tm = *localtime (¤t); - tm.tm_mday = 1; - t = mktime (&tm); - tm = *localtime (&t); - week_day_start = tm.tm_wday; - - tm.tm_mday = (7 * (ico->recur->u.month_pos - ((week_day_start <= first_week_day ) ? 1 : 0)) - - (week_day_start - first_week_day) + 1); - if( tm.tm_mday > 31 ) - { - tm.tm_mday = 1; - tm.tm_mon += ico->recur->interval; - current = mktime (&tm); - continue; - } - - switch( tm.tm_mon ) - { - case 3: - case 5: - case 8: - case 10: - if( tm.tm_mday > 30 ) - { - tm.tm_mday = 1; - tm.tm_mon += ico->recur->interval; - current = mktime (&tm); - continue; - } - break; - case 1: - if( ((tm.tm_year+1900)%4) == 0 - && ((tm.tm_year+1900)%400) != 100 - && ((tm.tm_year+1900)%400) != 200 - && ((tm.tm_year+1900)%400) != 300 ) - { - - if( tm.tm_mday > 29 ) - { - tm.tm_mday = 1; - tm.tm_mon += ico->recur->interval; - current = mktime (&tm); - continue; - } - } - else - { - if( tm.tm_mday > 28 ) - { - tm.tm_mday = 1; - tm.tm_mon += ico->recur->interval; - current = mktime (&tm); - continue; - } - } - break; - } - - t = mktime (&tm); - - if (time_in_range (t, start, end) && recur_in_range (current, ico->recur)) - if (!generate (ico, t, cb, closure)) - return; - - /* Advance by the appropriate number of months */ - - current = mktime (&tm); - - tm.tm_mday = 1; - tm.tm_mon += ico->recur->interval; - current = mktime (&tm); - - if (current == -1) { - g_warning ("RECUR_MONTHLY_BY_DAY: mktime error\n"); - return; - } - } while ((current < end) || (end == 0)); - - break; - - case RECUR_MONTHLY_BY_DAY: - do { - struct tm tm; - time_t t; - int p; - - tm = *localtime (¤t); - - p = tm.tm_mday; - tm.tm_mday = ico->recur->u.month_day; - t = mktime (&tm); - if (time_in_range (t, start, end) && recur_in_range (current, ico->recur)) - if (!generate (ico, t, cb, closure)) - return; - - /* Advance by the appropriate number of months */ - - tm.tm_mday = p; - tm.tm_mon += ico->recur->interval; - current = mktime (&tm); - - if (current == -1) { - g_warning ("RECUR_MONTHLY_BY_DAY: mktime error\n"); - return; - } - } while (current < end || (end == 0)); - - break; - - case RECUR_YEARLY_BY_MONTH: - case RECUR_YEARLY_BY_DAY: - do { - if (time_in_range (current, start, end) && recur_in_range (current, ico->recur)) - if (!generate (ico, current, cb, closure)) - return; - - /* Advance */ - - current = time_add_year (current, ico->recur->interval); - } while (current < end || (end == 0)); - - break; - - default: - g_assert_not_reached (); - } -} - -static int -duration_callback (iCalObject *ico, time_t start, time_t end, void *closure) -{ - int *count = closure; - struct tm tm; - - tm = *localtime (&start); - - (*count)++; - if (ico->recur->duration == *count) { - ico->recur->enddate = time_day_end (end); - return 0; - } - return 1; -} - -/* Computes ico->recur->enddate from ico->recur->duration */ -void -ical_object_compute_end (iCalObject *ico) -{ - int count = 0; - - g_return_if_fail (ico->recur != NULL); - - ico->recur->_enddate = 0; - ico->recur->enddate = 0; - ical_object_generate_events (ico, ico->dtstart, 0, duration_callback, &count); -} - -int -alarm_compute_offset (CalendarAlarm *a) -{ - if (!a->enabled) - return -1; - switch (a->units){ - case ALARM_MINUTES: - a->offset = a->count * 60; - break; - case ALARM_HOURS: - a->offset = a->count * 3600; - break; - case ALARM_DAYS: - a->offset = a->count * 24 * 3600; - } - return a->offset; -} - - -/** - * ical_object_find_in_string: - * @uid: Unique identifier of the sought object. - * @vcalobj: String representation of a complete calendar object. - * @ico: The resulting #iCalObject is stored here. - * - * Parses a complete vCalendar object string and tries to find the calendar - * object that matches the specified @uid. If found, it stores the resulting - * #iCalObject in the @ico parameter. - * - * Return value: A result code depending on whether the parse and search were - * successful. - **/ -CalObjFindStatus -ical_object_find_in_string (const char *uid, const char *vcalobj, iCalObject **ico) -{ -#if 0 - icalcomponent* comp = NULL; - icalcomponent *subcomp; - iCalObject *ical; - - g_return_val_if_fail (vcalobj != NULL, CAL_OBJ_FIND_NOT_FOUND); - - comp = icalparser_parse_string (vcalobj); - - if (!comp) { - printf ("CAL_OBJ_FIND_SYNTAX_ERROR #1\n"); - return CAL_OBJ_FIND_SYNTAX_ERROR; - } - - subcomp = icalcomponent_get_first_component (comp, - ICAL_ANY_COMPONENT); - if (!subcomp) { - printf ("CAL_OBJ_FIND_SYNTAX_ERROR #2\n"); - return CAL_OBJ_FIND_SYNTAX_ERROR; - } - - while (subcomp) { - ical = ical_object_create_from_icalcomponent (subcomp); - if (ical->type != ICAL_EVENT && - ical->type != ICAL_TODO && - ical->type != ICAL_JOURNAL) { - g_warning ("Skipping unsupported iCalendar component"); - } else { - if (strcasecmp (ical->uid, uid) == 0) { - (*ico) = ical; - (*ico)->ref_count = 1; - printf ("CAL_OBJ_FIND_SUCCESS\n"); - - printf ("ical_object_find_in_string:\n"); - printf ("-----------------------------------------------------\n"); - dump_icalobject (*ico); - printf ("-----------------------------------------------------\n"); - - - return CAL_OBJ_FIND_SUCCESS; - } - } - subcomp = icalcomponent_get_next_component (comp, - ICAL_ANY_COMPONENT); - } - - printf ("CAL_OBJ_FIND_NOT_FOUND\n"); - return CAL_OBJ_FIND_NOT_FOUND; - -#else /* 1 */ - VObject *vcal; - VObjectIterator i; - CalObjFindStatus status; - - g_return_val_if_fail (uid != NULL, CAL_OBJ_FIND_SYNTAX_ERROR); - g_return_val_if_fail (vcalobj != NULL, CAL_OBJ_FIND_SYNTAX_ERROR); - g_return_val_if_fail (ico != NULL, CAL_OBJ_FIND_SYNTAX_ERROR); - - *ico = NULL; - status = CAL_OBJ_FIND_NOT_FOUND; - - vcal = Parse_MIME (vcalobj, strlen (vcalobj)); - - if (!vcal) - return CAL_OBJ_FIND_SYNTAX_ERROR; - - initPropIterator (&i, vcal); - - while (moreIteration (&i)) { - VObject *vobj; - VObject *uid_prop; - char *the_str; - - vobj = nextVObject (&i); - - uid_prop = isAPropertyOf (vobj, VCUniqueStringProp); - if (!uid_prop) - continue; - - /* str_val() sets the_str to the string representation of the - * property. - */ - str_val (uid_prop); - - if (strcmp (the_str, uid) == 0) { - const char *object_name; - - object_name = vObjectName (vobj); - *ico = ical_object_create_from_vobject (vobj, object_name); - - if (*ico) - status = CAL_OBJ_FIND_SUCCESS; - } - - free (the_str); - - if (status == CAL_OBJ_FIND_SUCCESS) - break; - } - - cleanVObject (vcal); - cleanStrTbl (); - - return status; -#endif /* 1 */ -} - - -#if 1 -/* Creates a VObject with the base information of a calendar */ -static VObject * -get_calendar_base_vobject (void) -{ - VObject *vobj; - time_t now; - struct tm tm; - - /* We call localtime for the side effect of setting tzname */ - - now = time (NULL); - tm = *localtime (&now); - - vobj = newVObject (VCCalProp); - - addPropValue (vobj, VCProdIdProp, PRODID); - -#if defined (HAVE_TM_ZONE) - addPropValue (vobj, VCTimeZoneProp, tm.tm_zone); -#elif defined (HAVE_TZNAME) - addPropValue (vobj, VCTimeZoneProp, tzname[0]); -#endif - - /* Per the vCalendar spec, this must be "1.0" */ - addPropValue (vobj, VCVersionProp, "1.0"); - - return vobj; -} -#endif /* 0 */ - -/** - * ical_object_to_string: - * @ico: A calendar object. - * - * Converts a vCalendar object to its string representation. It is wrapped - * inside a complete VCALENDAR object because other auxiliary information such - * as timezones may appear there. - * - * Return value: String representation of the object. - **/ -char * -ical_object_to_string (iCalObject *ico) -{ -#if 0 - icalcomponent *top = icalcomponent_new (ICAL_VCALENDAR_COMPONENT); - char *out_cal_string; - icalcomponent *comp; - - printf ("ical_object_to_string:\n"); - printf ("-----------------------------------------------------\n"); - dump_icalobject (ico); - printf ("-----------------------------------------------------\n"); - - comp = icalcomponent_create_from_ical_object (ico); - icalcomponent_add_component (top, comp); - out_cal_string = icalcomponent_as_ical_string (top); - return g_strdup (out_cal_string); - -#else /* 1 */ - VObject *vcalobj, *vobj; - char *buf, *gbuf; - - vcalobj = get_calendar_base_vobject (); - vobj = ical_object_to_vobject (ico); - addVObjectProp (vcalobj, vobj); - - buf = writeMemVObject (NULL, NULL, vcalobj); - - cleanVObject (vcalobj); - cleanStrTbl (); - - /* We have to g_strdup() it because libversit uses malloc()/realloc(), - * and we want clients to be able to use g_free(). Sigh. - */ - gbuf = g_strdup (buf); - free (buf); - - return gbuf; -#endif /* 1 */ -} - - -/** - * ical_object_compare_dates: - * @ico1: A calendar event. - * @ico2: A calendar event to compare with @ico1. - * - * Returns TRUE if the dates of both objects match, including any recurrence - * rules. Both calendar objects must have a type of ICAL_EVENT. - * - * Return value: TRUE if both calendar objects have the same dates. - **/ -gboolean -ical_object_compare_dates (iCalObject *ico1, - iCalObject *ico2) -{ - Recurrence *recur1, *recur2; - gint num_exdates; - GList *elem1, *elem2; - time_t *time1, *time2; - - g_return_val_if_fail (ico1 != NULL, FALSE); - g_return_val_if_fail (ico2 != NULL, FALSE); - g_return_val_if_fail (ico1->type == ICAL_EVENT, FALSE); - g_return_val_if_fail (ico2->type == ICAL_EVENT, FALSE); - - /* First check the base dates. */ - if (ico1->dtstart != ico2->dtstart - || ico1->dtend != ico2->dtend) - return FALSE; - - recur1 = ico1->recur; - recur2 = ico2->recur; - - /* If the event doesn't recur, we already know it matches. */ - if (!recur1 && !recur2) - return TRUE; - - /* Check that both recur. */ - if (!(recur1 && recur2)) - return FALSE; - - /* Now we need to see if the recurrence rules are the same. */ - if (recur1->type != recur2->type - || recur1->interval != recur2->interval - || recur1->enddate != recur2->enddate - || recur1->weekday != recur2->weekday - || recur1->duration != recur2->duration - || recur1->_enddate != recur2->_enddate - || recur1->__count != recur2->__count) - return FALSE; - - switch (recur1->type) { - case RECUR_MONTHLY_BY_POS: - if (recur1->u.month_pos != recur2->u.month_pos) - return FALSE; - break; - case RECUR_MONTHLY_BY_DAY: - if (recur1->u.month_day != recur2->u.month_day) - return FALSE; - break; - default: - break; - } - - /* Now check if the excluded dates match. */ - num_exdates = g_list_length (ico1->exdate); - if (g_list_length (ico2->exdate) != num_exdates) - return FALSE; - if (num_exdates == 0) - return TRUE; - - ico1->exdate = g_list_sort (ico1->exdate, compare_exdates); - ico2->exdate = g_list_sort (ico2->exdate, compare_exdates); - - elem1 = ico1->exdate; - elem2 = ico2->exdate; - while (elem1) { - time1 = (time_t*) elem1->data; - time2 = (time_t*) elem2->data; - - if (*time1 != *time2) - return FALSE; - - elem1 = elem1->next; - elem2 = elem2->next; - } - - return TRUE; -} - - -static gint -compare_exdates (gconstpointer a, gconstpointer b) -{ - const time_t *ca = a, *cb = b; - time_t diff = *ca - *cb; - return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; -} - - -/* Converts any CR/LF sequences in the summary field to spaces so we just - have a one-line field. The iCalObjects summary field is changed. */ -static void -ical_object_normalize_summary (iCalObject *ico) -{ - gchar *src, *dest, ch; - gboolean just_output_space = FALSE; - - src = dest = ico->summary; - while ((ch = *src++)) { - if (ch == '\n' || ch == '\r') { - /* We only output 1 space for each sequence of CR & LF - characters. */ - if (!just_output_space) { - *dest++ = ' '; - just_output_space = TRUE; - } - } else { - *dest++ = ch; - just_output_space = FALSE; - } - } - *dest = '\0'; -} - - -void dump_icalobject (iCalObject *ico) -{ - if (!ico) { - printf ("<>\n"); - return; - } - - printf ("type "); - switch (ico->type) { - case ICAL_EVENT: printf ("event"); break; - case ICAL_TODO: printf ("todo"); break; - case ICAL_JOURNAL: printf ("journal"); break; - case ICAL_FBREQUEST: printf ("fbrequest"); break; - case ICAL_FBREPLY: printf ("fbreply"); break; - case ICAL_BUSYTIME: printf ("busytime"); break; - case ICAL_TIMEZONE: printf ("timezone"); break; - } - printf ("\n"); - - printf ("attach-length %d\n", g_list_length (ico->attach)); - - printf ("attendee-length %d\n", g_list_length (ico->attendee)); - - printf ("catagories-length %d\n", g_list_length (ico->categories)); - - printf ("class '%s'\n", ico->class ? ico->class : "NULL"); - - printf ("comment '%s'\n", ico->comment ? ico->comment : "NULL"); - - printf ("completed %ld=%s", - ico->completed, ctime (&ico->completed)); - - printf ("created %ld=%s", ico->created, ctime (&ico->created)); - - printf ("contact-length %d\n", g_list_length (ico->contact)); - - printf ("desc '%s'\n", ico->desc ? ico->desc : "NULL"); - - printf ("dtstamp %ld=%s", ico->dtstamp, ctime (&ico->dtstamp)); - - printf ("dtstart %ld=%s", ico->dtstart, ctime (&ico->dtstart)); - - printf ("dtend %ld=%s", ico->dtend, ctime (&ico->dtend)); - - printf ("date_only %d\n", ico->date_only); - - printf ("exdate-length %d\n", g_list_length (ico->exdate)); - - printf ("exrule-length %d\n", g_list_length (ico->exrule)); - - printf ("iCalGeo %d %f %f\n", - ico->geo.valid, ico->geo.latitude, ico->geo.longitude); - - printf ("last_mod %ld=%s", ico->last_mod, ctime (&ico->last_mod)); - - printf ("location '%s'\n", ico->location ? ico->location : "NULL"); - - printf ("organizer %p\n", ico->organizer); - - printf ("percent %d\n", ico->percent); - - printf ("priority %d\n", ico->priority); - - printf ("rstatus '%s'\n", ico->rstatus ? ico->rstatus : "NULL"); - - printf ("related-length %d\n", g_list_length (ico->related)); - - printf ("resources-length %d\n", g_list_length (ico->resources)); - - printf ("rdate-length %d\n", g_list_length (ico->rdate)); - - printf ("rrule-length %d\n", g_list_length (ico->rrule)); - - printf ("seq %d\n", ico->seq); - - printf ("status '%s'\n", ico->status ? ico->status : "NULL"); - - printf ("summary '%s'\n", ico->summary ? ico->summary : "NULL"); - - printf ("transp "); - switch (ico->transp) { - case ICAL_OPAQUE: printf ("opaque"); break; - case ICAL_TRANSPARENT: printf ("transparent"); break; - } - printf ("\n"); - - printf ("uid '%s'\n", ico->uid ? ico->uid : "NULL"); - - printf ("url '%s'\n", ico->url ? ico->url : "NULL"); - - printf ("recurid %ld=%s", ico->recurid, ctime (&ico->recurid)); - - printf ("dalarm %d\n", ico->dalarm.enabled); - - printf ("aalarm %d\n", ico->aalarm.enabled); - - printf ("palarm %d\n", ico->palarm.enabled); - - printf ("malarm %d\n", ico->malarm.enabled); - - printf ("alarms-length %d\n", g_list_length (ico->alarms)); - - printf ("recur %p\n", ico->recur); - - printf ("new %d\n", ico->new); - - printf ("user_data %p\n", ico->user_data); - - printf ("ref_count %d\n", ico->ref_count); -} diff --git a/calendar/cal-util/calobj.h b/calendar/cal-util/calobj.h deleted file mode 100644 index 3caef945e2..0000000000 --- a/calendar/cal-util/calobj.h +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Internal representation of a Calendar object. This is modeled after the - * iCalendar/vCalendar specificiation - * - * Authors: Miguel de Icaza (miguel@gnu.org) - * Federico Mena (quartic@gimp.org). - */ -#ifndef CALOBJ_H -#define CALOBJ_H - -#include -#include "libversit/vcc.h" - -BEGIN_GNOME_DECLS - -/* Alarm types */ -enum AlarmType { - ALARM_MAIL, - ALARM_PROGRAM, - ALARM_DISPLAY, - ALARM_AUDIO -}; - -/* Whether the alarm should trigger N mins/hours/days before its due time */ -enum AlarmUnit { - ALARM_MINUTES, - ALARM_HOURS, - ALARM_DAYS -}; - -/* Field identifiers for the iCalObject structure. These are also used to - identify columns in ECalendarTable, so be careful when reordering them. */ -typedef enum { - ICAL_OBJECT_FIELD_COMMENT, - ICAL_OBJECT_FIELD_COMPLETED, - ICAL_OBJECT_FIELD_CREATED, - ICAL_OBJECT_FIELD_DESCRIPTION, - ICAL_OBJECT_FIELD_DTSTAMP, - ICAL_OBJECT_FIELD_DTSTART, - ICAL_OBJECT_FIELD_DTEND, - ICAL_OBJECT_FIELD_GEO, - ICAL_OBJECT_FIELD_LAST_MOD, - ICAL_OBJECT_FIELD_LOCATION, - ICAL_OBJECT_FIELD_ORGANIZER, - ICAL_OBJECT_FIELD_PERCENT, - ICAL_OBJECT_FIELD_PRIORITY, - ICAL_OBJECT_FIELD_SUMMARY, - ICAL_OBJECT_FIELD_URL, - ICAL_OBJECT_FIELD_HAS_ALARMS, /* not a real field */ - ICAL_OBJECT_FIELD_ICON, /* not a real field */ - ICAL_OBJECT_FIELD_COMPLETE, /* not a real field */ - ICAL_OBJECT_FIELD_RECURRING, /* not a real field */ - ICAL_OBJECT_FIELD_OVERDUE, /* not a real field */ - ICAL_OBJECT_FIELD_COLOR, /* not a real field */ - ICAL_OBJECT_FIELD_NUM_FIELDS -} iCalObjectField; - -typedef struct { - enum AlarmType type; - int enabled; - int count; - enum AlarmUnit units; - char *data; /* not used for iCalendar alarms */ - - /* the following pointers are used for iCalendar alarms */ - - char *attach; /* AUDIO, EMAIL, PROC */ - char *desc; /* DISPLAY, EMAIL, PROC */ - char *summary; /* EMAIL */ - char *attendee; /* EMAIL */ - - /* Does not get saved, internally used */ - time_t offset; - time_t trigger; - - int snooze_secs; - int snooze_repeat; - - /* Widgets */ - void *w_count; /* A GtkEntry */ - void *w_enabled; /* A GtkChecButton */ - void *w_timesel; /* A GtkMenu */ - void *w_entry; /* A GnomeEntryFile/GtkEntry for PROGRAM/MAIL */ - void *w_label; -} CalendarAlarm; - -/* Calendar object type */ -typedef enum { - ICAL_EVENT, - ICAL_TODO, - ICAL_JOURNAL, - ICAL_FBREQUEST, - ICAL_FBREPLY, - ICAL_BUSYTIME, - ICAL_TIMEZONE -} iCalType; - -/* For keys that might contain binary or text/binary */ -typedef struct { - char *data; - int len; -} iCalValue; - -typedef enum { - ICAL_PILOT_SYNC_NONE = 0, - ICAL_PILOT_SYNC_MOD = 1, - ICAL_PILOT_SYNC_DEL = 3 -} iCalPilotState; - -typedef struct { - int valid; /* true if the Geography was specified */ - double latitude; - double longitude; -} iCalGeo; - -typedef enum { - ICAL_OPAQUE, - ICAL_TRANSPARENT -} iCalTransp; - -typedef struct { - char *uid; - char *reltype; -} iCalRelation; - -typedef char NotYet; - -enum RecurType { - RECUR_DAILY, - RECUR_WEEKLY, - RECUR_MONTHLY_BY_POS, - RECUR_MONTHLY_BY_DAY, - RECUR_YEARLY_BY_MONTH, - RECUR_YEARLY_BY_DAY, -}; - -#define DAY_LASTDAY 10000 - -typedef struct { - enum RecurType type; - - int interval; - - /* Used for recur computation */ - time_t enddate; /* If the value is zero, it is an infinite event - * otherwise, it is either the _enddate value (if - * this is what got specified) or it is our computed - * ending date (computed from the duration item). - */ - - int weekday; - - union { - int month_pos; - int month_day; - } u; - - int duration; - time_t _enddate; /* As found on the vCalendar file */ - int __count; -} Recurrence; - -/* - NOTE: iCalPerson is used for various property values which specify - people (e.g. ATTENDEE, ORGANIZER, etc. Not all fields are valid - under RFC 2445 for all property values, but iCalPerson can store - them anyway. Enforcing the RFC is a job for the parser. -*/ - -typedef struct { - char *addr; - char *name; - char *role; - char *partstat; - gboolean rsvp; - char *cutype; /* calendar user type */ - GList *member; /* group memberships */ - GList *deleg_to; - GList *deleg_from; - char *sent_by; - char *directory; - GList *altrep; /* list of char* URI's */ -} iCalPerson; - -#define IS_INFINITE(r) (r->duration == 0) - -/* Flags to indicate what has changed in an object */ -typedef enum { - CHANGE_NEW = 1 << 0, /* new object */ - CHANGE_SUMMARY = 1 << 1, /* summary */ - CHANGE_DATES = 1 << 2, /* dtstart / dtend */ - CHANGE_ALL = CHANGE_SUMMARY | CHANGE_DATES -} CalObjectChange; - -/* - * This describes an iCalendar object, note that we never store durations, instead we - * always compute the end time computed from the start + duration. - */ -typedef struct { - iCalType type; - - GList *attach; /* type: one or more URIs or binary data */ - GList *attendee; /* type: CAL-ADDRESS (list of iCalPerson) */ - GList *categories; /* type: one or more TEXT */ - char *class; - - char *comment; /* we collapse one or more TEXTs into one */ - time_t completed; - time_t created; - GList *contact; /* type: one or more TEXT */ - char *desc; - time_t dtstamp; - time_t dtstart; - time_t dtend; /* also duedate for todo's */ - gboolean date_only; /* set if the start/end times were - specified using dates, not times (internal use, not stored to disk) */ - GList *exdate; /* type: one or more time_t's */ - GList *exrule; /* type: one or more RECUR */ - iCalGeo geo; - time_t last_mod; - char *location; - iCalPerson *organizer; - int percent; - int priority; - char *rstatus; /* request status for freebusy */ - GList *related; /* type: one or more TEXT */ - GList *resources; /* type: one or more TEXT */ - GList *rdate; /* type: one or more recurrence date */ - GList *rrule; /* type: one or more recurrence rules */ - int seq; - char *status; - char *summary; - iCalTransp transp; - char *uid; - char *url; - time_t recurid; - - CalendarAlarm dalarm; - CalendarAlarm aalarm; - CalendarAlarm palarm; - CalendarAlarm malarm; - - GList *alarms; - - Recurrence *recur; - - int new; - void *user_data; /* Generic data pointer */ - - /* Pilot */ - iCalPilotState pilot_status; /* Status information */ - guint32 pilot_id; /* Pilot ID */ - - guint ref_count; -} iCalObject; - -/* The callback for the recurrence generator */ -typedef int (*calendarfn) (iCalObject *, time_t, time_t, void *); - -iCalObject *ical_new (char *comment, char *organizer, char *summary); -iCalObject *ical_object_new (void); - -void ical_object_ref (iCalObject *ico); -void ical_object_unref (iCalObject *ico); - -iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name); -VObject *ical_object_to_vobject (iCalObject *ical); -iCalObject *ical_object_duplicate (iCalObject *o); -void ical_foreach (GList *events, calendarfn fn, void *closure); -void ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendarfn cb, void *closure); -void ical_object_add_exdate (iCalObject *o, time_t t); - -/* Computes the enddate field of the recurrence based on the duration */ -void ical_object_compute_end (iCalObject *ico); - -typedef enum { - CAL_OBJ_FIND_SUCCESS, - CAL_OBJ_FIND_SYNTAX_ERROR, - CAL_OBJ_FIND_NOT_FOUND -} CalObjFindStatus; - -CalObjFindStatus ical_object_find_in_string (const char *uid, const char *vcalobj, iCalObject **ico); - -char *ical_object_to_string (iCalObject *ico); - - -/* Returns the first toggled day in a weekday mask -- we do this because we do not support multiple - * days on a monthly-by-pos recurrence. If no days are toggled, it returns -1. - */ -int ical_object_get_first_weekday (int weekday_mask); - -/* Returns the number of seconds configured to trigger the alarm in advance to an event */ -int alarm_compute_offset (CalendarAlarm *a); - - -/* Returns TRUE if the dates of both objects match, including any recurrence - rules. */ -gboolean ical_object_compare_dates (iCalObject *ico1, iCalObject *ico2); - -/* Generates a new uid for a calendar object. Should be g_free'd eventually. */ -char *ical_gen_uid (void); - -/* This resets any recurrence rules of the iCalObject. */ -void ical_object_reset_recurrence (iCalObject *ico); - - -void dump_icalobject (iCalObject *ico); - -END_GNOME_DECLS - -#endif - diff --git a/calendar/cal-util/icalendar-save.c b/calendar/cal-util/icalendar-save.c deleted file mode 100644 index 8f2335763f..0000000000 --- a/calendar/cal-util/icalendar-save.c +++ /dev/null @@ -1,516 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include -#include -#include -#include "icalendar-save.h" - - -static void unparse_person (iCalPerson *person, icalproperty *person_prop); -static struct icaltimetype timet_to_icaltime (time_t tt); -static icalproperty *unparse_related (iCalRelation *rel); -static icalcomponent *unparse_alarm (CalendarAlarm *alarm); - - -icalcomponent* -icalcomponent_create_from_ical_object (iCalObject *ical) -{ - icalcomponent_kind kind; - icalcomponent *comp; - icalproperty *prop; - - switch (ical->type) { - case ICAL_EVENT: kind = ICAL_VEVENT_COMPONENT; break; - case ICAL_TODO: kind = ICAL_VTODO_COMPONENT; break; - case ICAL_JOURNAL: kind = ICAL_VJOURNAL_COMPONENT; break; - case ICAL_FBREQUEST: kind = ICAL_VFREEBUSY_COMPONENT; break; - case ICAL_TIMEZONE: kind = ICAL_VTIMEZONE_COMPONENT; break; - default: - kind = ICAL_NO_COMPONENT; break; - } - - comp = icalcomponent_new (kind); - - /*** calscale ***/ - prop = icalproperty_new_calscale ("GREGORIAN"); - icalcomponent_add_property (comp, prop); - - /*** catagories ***/ - if (ical->categories) { - /* ical->categories is a GList of (char *) */ - GList *cur; - for (cur = ical->categories; cur; cur = cur->next) { - prop = icalproperty_new_categories ((char *) cur); - icalcomponent_add_property (comp, prop); - } - } - - /*** class ***/ - if (ical->class) { - prop = icalproperty_new_class (ical->class); - icalcomponent_add_property (comp, prop); - } - - /*** comment ***/ - if (ical->comment) { - prop = icalproperty_new_comment (ical->comment); - icalcomponent_add_property (comp, prop); - } - - /*** description ***/ - if (ical->desc) { - prop = icalproperty_new_description (ical->desc); - icalcomponent_add_property (comp, prop); - } - - /*** geo ***/ - if (ical->geo.valid) { - struct icalgeotype v; - v.lat = ical->geo.latitude; - v.lon = ical->geo.longitude; - prop = icalproperty_new_geo (v); - icalcomponent_add_property (comp, prop); - } - - /*** location ***/ - if (ical->location) { - prop = icalproperty_new_location (ical->location); - icalcomponent_add_property (comp, prop); - } - - /*** percentcomplete ***/ - prop = icalproperty_new_percentcomplete (ical->percent); - icalcomponent_add_property (comp, prop); - - /*** priority ***/ - if (ical->priority) { - prop = icalproperty_new_priority (ical->priority); - icalcomponent_add_property (comp, prop); - } - - /*** resources ***/ - if (ical->resources) { - /* ical->resources is a GList of (char *) */ - GList *cur; - for (cur = ical->resources; cur; cur = cur->next) { - prop = icalproperty_new_resources ((char *) cur); - icalcomponent_add_property (comp, prop); - } - } - - /*** status ***/ - if (ical->status) { - prop = icalproperty_new_status (ical->status); - icalcomponent_add_property (comp, prop); - } - - /*** summary ***/ - if (ical->summary) { - prop = icalproperty_new_summary (ical->summary); - icalcomponent_add_property (comp, prop); - } - - /*** completed ***/ - if (ical->completed) { - struct icaltimetype ictime; - ictime = timet_to_icaltime (ical->completed); - prop = icalproperty_new_completed (ictime); - icalcomponent_add_property (comp, prop); - } - - /*** dtend ***/ /*** due ***/ - if (ical->dtend) { - /* FIXME: We should handle timezone specifiers */ - struct icaltimetype ictime; - ictime = timet_to_icaltime (ical->dtend); - if (ical->type == ICAL_TODO) - prop = icalproperty_new_due (ictime); - else - prop = icalproperty_new_dtend (ictime); - if (ical->date_only) { - icalparameter *param; - param = icalparameter_new (ICAL_VALUE_PARAMETER); - icalparameter_set_value (param, ICAL_VALUE_DATE); - icalproperty_add_parameter (prop, param); - } - icalcomponent_add_property (comp, prop); - } - - /*** dtstart ***/ - if (ical->dtstart) { - /* FIXME: We should handle timezone specifiers */ - struct icaltimetype ictime; - ictime = timet_to_icaltime (ical->dtstart); - prop = icalproperty_new_dtstart (ictime); - if (ical->date_only) { - icalparameter *param; - param = icalparameter_new (ICAL_VALUE_PARAMETER); - icalparameter_set_value (param, ICAL_VALUE_DATE); - icalproperty_add_parameter (prop, param); - } - icalcomponent_add_property (comp, prop); - } - - /*** duration ***/ - { - /* FIX ME */ - } - - /*** freebusy ***/ - { - /* FIX ME */ - } - - /*** transp ***/ - { - if (ical->transp == ICAL_TRANSP_PROPERTY) - prop = icalproperty_new_transp ("TRANSPARENT"); - else - prop = icalproperty_new_transp ("OPAQUE"); - icalcomponent_add_property (comp, prop); - } - - /* - ICAL_TZID_PROPERTY: - ICAL_TZNAME_PROPERTY: - ICAL_TZOFFSETFROM_PROPERTY: - ICAL_TZOFFSETTO_PROPERTY: - ICAL_TZURL_PROPERTY: - */ - - /*** attendee ***/ - if (ical->attendee) { - /* a list of (iCalPerson *) */ - GList *cur; - for (cur = ical->attendee; cur; cur = cur->next) { - iCalPerson *person = (iCalPerson *) cur->data; - prop = icalproperty_new_attendee (person->addr); - unparse_person (person, prop); - icalcomponent_add_property (comp, prop); - } - } - - /*** contact ***/ - if (ical->contact) { - /* a list of (iCalPerson *) */ - GList *cur; - for (cur = ical->contact; cur; cur = cur->next) { - iCalPerson *person = (iCalPerson *) cur->data; - prop = icalproperty_new_contact (person->addr); - unparse_person (person, prop); - icalcomponent_add_property (comp, prop); - } - } - - /*** organizer ***/ - if (ical->organizer) { - prop = icalproperty_new_organizer (ical->organizer->addr); - unparse_person (ical->organizer, prop); - icalcomponent_add_property (comp, prop); - } - - /*** recurrenceid ***/ - if (ical->recurid) { - struct icaltimetype ictime; - ictime = timet_to_icaltime (ical->recurid); - prop = icalproperty_new_recurrenceid (ictime); - } - - /*** relatedto ***/ - - if (ical->related) { - /* a list of (iCalPerson *) */ - GList *cur; - for (cur = ical->related; cur; cur = cur->next) { - iCalRelation *related = (iCalRelation *) cur->data; - prop = unparse_related (related); - icalcomponent_add_property (comp, prop); - } - } - - - /*** url ***/ - if (ical->url) { - prop = icalproperty_new_url (ical->url); - icalcomponent_add_property (comp, prop); - } - - /*** uid ***/ - if (ical->uid) { - prop = icalproperty_new_uid (ical->uid); - icalcomponent_add_property (comp, prop); - } - - /*** exdate ***/ - if (ical->exdate) { - struct icaltimetype v; - GList *cur; - for (cur = ical->exdate; cur; cur = cur->next) { - time_t t = (time_t) cur->data; - v = timet_to_icaltime (t); - prop = icalproperty_new_exdate (v); - icalcomponent_add_property (comp, prop); - } - } - - /*** created ***/ - if (ical->created) { - struct icaltimetype v; - v = timet_to_icaltime (ical->created); - prop = icalproperty_new_created (v); - icalcomponent_add_property (comp, prop); - } - - /*** dtstamp ***/ - if (ical->dtstamp) { - struct icaltimetype v; - v = timet_to_icaltime (ical->dtstamp); - prop = icalproperty_new_created (v); - icalcomponent_add_property (comp, prop); - } - - /*** lastmodified ***/ - if (ical->last_mod) { - struct icaltimetype v; - v = timet_to_icaltime (ical->last_mod); - prop = icalproperty_new_created (v); - icalcomponent_add_property (comp, prop); - } - - /*** sequence ***/ - if (ical->seq) { - prop = icalproperty_new_sequence (ical->seq); - icalcomponent_add_property (comp, prop); - } - - /*** requeststatus ***/ - if (ical->rstatus) { - prop = icalproperty_new_requeststatus (ical->rstatus); - icalcomponent_add_property (comp, prop); - } - - /* if there is a VALARM subcomponent, add it here */ - - if (ical->alarms) { - GList *cur; - for (cur = ical->alarms; cur; cur = cur->next) { - CalendarAlarm *alarm = (CalendarAlarm *) cur->data; - icalcomponent *subcomp = unparse_alarm (alarm); - icalcomponent_add_component (comp, subcomp); - } - } - - return comp; -} - - -/* FIX ME -- same as icaltimetype_from_timet in icaltypes.c */ -static -struct icaltimetype timet_to_icaltime (time_t tt) -{ - struct tm *t; - struct icaltimetype i; - - //t = gmtime (&tt); - t = localtime (&tt); - - /*return tt - (i->is_utc ? timezone : 0); */ - i.is_utc = 0; - - i.year = t->tm_year + 1900; - i.month = t->tm_mon + 1; - i.day = t->tm_mday; - - if (t->tm_hour == 0 && t->tm_min == 0 && t->tm_sec == 0) { - i.is_date = 1; - i.hour = 0; - i.minute = 0; - i.second = 0; - } else { - i.is_date = 0; - i.hour = t->tm_hour; - i.minute = t->tm_min; - i.second = t->tm_sec; - } - - return i; -} - - -/* fills in "person_prop" with information from "person" */ - -static -void unparse_person (iCalPerson *person, icalproperty *person_prop) -{ - icalparameter *param; - GList *cur; - - /* convert iCalPerson to an icalproperty */ - - if (person->name) { - param = icalparameter_new_cn (person->name); - icalproperty_add_parameter (person_prop, param); - } - - if (person->role) { - if (g_strcasecmp (person->role, "CHAIR") == 0) - param = icalparameter_new_role (ICAL_ROLE_CHAIR); - else if (g_strcasecmp (person->role, "REQPARTICIPANT") == 0) - param = icalparameter_new_role (ICAL_ROLE_REQPARTICIPANT); - else if (g_strcasecmp (person->role, "OPTPARTICIPANT") == 0) - param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT); - else if (g_strcasecmp (person->role, "NONPARTICIPANT") == 0) - param = icalparameter_new_role (ICAL_ROLE_NONPARTICIPANT); - else - param = icalparameter_new_role (ICAL_ROLE_XNAME); - icalproperty_add_parameter (person_prop, param); - } - - if (person->partstat) { - if (g_strcasecmp (person->partstat, "NEEDSACTION") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_NEEDSACTION); - else if (g_strcasecmp (person->partstat, "ACCEPTED") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_ACCEPTED); - else if (g_strcasecmp (person->partstat, "DECLINED") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_DECLINED); - else if (g_strcasecmp (person->partstat, "TENTATIVE") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_TENTATIVE); - else if (g_strcasecmp (person->partstat, "DELEGATED") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_DELEGATED); - else if (g_strcasecmp (person->partstat, "COMPLETED") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_COMPLETED); - else if (g_strcasecmp (person->partstat, "INPROCESS") == 0) - param = icalparameter_new_partstat (ICAL_PARTSTAT_INPROCESS); - else /* FIX ME, NEEDSACTION instead? */ - param = icalparameter_new_partstat (ICAL_PARTSTAT_XNAME); - icalproperty_add_parameter (person_prop, param); - } - - if (person->rsvp != FALSE) { - param = icalparameter_new_rsvp (TRUE); - icalproperty_add_parameter (person_prop, param); - } - - if (person->cutype) { - if (g_strcasecmp (person->cutype, "INDIVIDUAL") == 0) - param = icalparameter_new_cutype (ICAL_CUTYPE_INDIVIDUAL); - else if (g_strcasecmp (person->cutype, "GROUP") == 0) - param = icalparameter_new_cutype (ICAL_CUTYPE_GROUP); - else if (g_strcasecmp (person->cutype, "RESOURCE") == 0) - param = icalparameter_new_cutype (ICAL_CUTYPE_RESOURCE); - else if (g_strcasecmp (person->cutype, "ROOM") == 0) - param = icalparameter_new_cutype (ICAL_CUTYPE_ROOM); - else /* FIX ME, INDIVIDUAL instead? */ - param = icalparameter_new_cutype (ICAL_CUTYPE_UNKNOWN); - icalproperty_add_parameter (person_prop, param); - } - - /* person->member is a list of ICAL_MEMBER_PARAMETER */ - for (cur = person->member; cur; cur = cur->next) { - gchar *member = (gchar *) cur->data; - param = icalparameter_new_member (member); - icalproperty_add_parameter (person_prop, param); - } - - /* person->deleg_to is a list of ICAL_DELEGATEDTO_PARAMETER */ - for (cur = person->deleg_to; cur; cur = cur->next) { - gchar *deleg_to = (gchar *) cur->data; - param = icalparameter_new_delegatedto (deleg_to); - icalproperty_add_parameter (person_prop, param); - } - - /* ret->deleg_from is a list of ICAL_DELEGATEDFROM_PARAMETER */ - for (cur = person->deleg_from; cur; cur = cur->next) { - gchar *deleg_from = (gchar *) cur->data; - param = icalparameter_new_delegatedfrom (deleg_from); - icalproperty_add_parameter (person_prop, param); - } - - if (person->sent_by) { - param = icalparameter_new_sentby (person->sent_by); - icalproperty_add_parameter (person_prop, param); - } - - /* ret->deleg_to is a list of ICAL_DIR_PARAMETER */ - /* FIX ME ... */ -} - - -static -icalproperty *unparse_related (iCalRelation *rel) -{ - icalproperty *prop; - - prop = icalproperty_new_relatedto (rel->reltype); - - icalproperty_set_relatedto (prop, rel->uid); - - /* FIX ME RELTYPE_XNAME ? */ - - return prop; -} - - -static -icalcomponent *unparse_alarm (CalendarAlarm *alarm) -{ - icalcomponent *comp = icalcomponent_new (ICAL_VALARM_COMPONENT); - icalproperty *prop; - - prop = NULL; - switch (alarm->type){ - case ALARM_AUDIO: - prop = icalproperty_new_action ("AUDIO"); - break; - case ALARM_DISPLAY: - prop = icalproperty_new_action ("DISPLAY"); - break; - case ALARM_MAIL: - prop = icalproperty_new_action ("EMAIL"); - break; - case ALARM_PROGRAM: - prop = icalproperty_new_action ("PROCEDURE"); - break; - default: - g_warning ("Unsupported alarm type!"); - break; - } - if (prop) - icalcomponent_add_property (comp, prop); - - if (alarm->snooze_repeat) - prop = icalproperty_new_repeat (alarm->snooze_repeat); - - if (alarm->snooze_secs) { - struct icaldurationtype dur; - dur = icaldurationtype_from_timet (alarm->snooze_secs); - prop = icalproperty_new_duration (dur); - icalcomponent_add_property (comp, prop); - } - - if (alarm->attach) { - struct icalattachtype *attach; - attach = icalattachtype_new (); - icalattachtype_set_url (attach, alarm->attach); - prop = icalproperty_new_attach (*attach); - icalattachtype_free (attach); - icalcomponent_add_property (comp, prop); - } - - if (alarm->desc) { - prop = icalproperty_new_description (alarm->desc); - icalcomponent_add_property (comp, prop); - } - - if (alarm->summary) { - prop = icalproperty_new_summary (alarm->summary); - icalcomponent_add_property (comp, prop); - } - - if (alarm->attendee) { - icalproperty_new_attendee (alarm->attendee); - icalcomponent_add_property (comp, prop); - } - - return comp; -} diff --git a/calendar/cal-util/icalendar-save.h b/calendar/cal-util/icalendar-save.h deleted file mode 100644 index 1e0ab59e70..0000000000 --- a/calendar/cal-util/icalendar-save.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef ICALENDAR_SAVE_H -#define ICALENDAR_SAVE_H - -#include -#include - - - -icalcomponent *icalcomponent_create_from_ical_object (iCalObject *ical); - - - -#endif diff --git a/calendar/cal-util/icalendar-test.c b/calendar/cal-util/icalendar-test.c deleted file mode 100644 index 921e109a2c..0000000000 --- a/calendar/cal-util/icalendar-test.c +++ /dev/null @@ -1,146 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include -#include -#include - -#include -#include -#include -#include "libversit/vcc.h" - -#include "icalendar-save.h" -#include "icalendar.h" - - -static icalcomponent* -icalendar_parse_file (char* fname) -{ - FILE* fp; - icalcomponent* comp = NULL; - gchar* str; - struct stat st; - int n; - - fp = fopen (fname, "r"); - if (!fp) { - g_warning ("Cannot open open calendar file."); - return NULL; - } - - stat (fname, &st); - - str = g_malloc (st.st_size + 2); - - n = fread ((gchar*) str, 1, st.st_size, fp); - if (n != st.st_size) { - g_warning ("Read error."); - } - str[n] = '\0'; - - fclose (fp); - - comp = icalparser_parse_string (str); - g_free (str); - - return comp; -} - - -static GList * -icalendar_calendar_load (GList *icals, char *fname) -{ - icalcomponent *comp; - icalcomponent *subcomp; - iCalObject *ical; - - comp = icalendar_parse_file (fname); - subcomp = icalcomponent_get_first_component (comp, - ICAL_ANY_COMPONENT); - while (subcomp) { - ical = ical_object_create_from_icalcomponent (subcomp); - if (ical->type != ICAL_EVENT && - ical->type != ICAL_TODO && - ical->type != ICAL_JOURNAL) { - g_warning ("Skipping unsupported iCalendar component"); - } else { - printf ("prepending %p\n", ical); - icals = g_list_prepend (icals, ical); - } - subcomp = icalcomponent_get_next_component (comp, - ICAL_ANY_COMPONENT); - } - - return icals; -} - - - - -static void -icalendar_calendar_save (GList *icals, char *fname) -{ - GList *cur; - icalcomponent *top = icalcomponent_new (ICAL_VCALENDAR_COMPONENT); - char *out_cal_string; - - for (cur=icals; cur; cur=cur->next) { - iCalObject *ical = (iCalObject *) cur->data; - icalcomponent *comp; - comp = icalcomponent_create_from_ical_object (ical); - icalcomponent_add_component (top, comp); - } - - out_cal_string = icalcomponent_as_ical_string (top); - - printf ("---------------------------------------------------------\n"); - printf ("%s", out_cal_string); -} - - - -int main (int argc, char *argv[]) -{ - GList *icals = NULL; - int i; - long int n0, n1; - struct icaldurationtype dt; - - - /* test icaldurationtype_from_timet */ - srandom (time (0)); - - for (i=0; i<10; i++) { - n0 = random () % ((60 * 60 * 24 * 7) * 4); - dt = icaldurationtype_from_timet (n0); - n1 = icaldurationtype_as_timet (dt); - - printf ("%ld -> (%d %d %d %d %d) -> %ld\n", - n0, - dt.weeks, dt.days, dt.hours, dt.minutes, dt.seconds, - n1); - if (n0 != n1) abort (); - } - - /*****************/ - /* test conversion of icalcomponents to and from iCalObjects */ - /*****************/ - - /* load an ical file */ - - if (argc < 2) { - printf ("give ical file as argument.\n"); - return 1; - } - - icals = icalendar_calendar_load (icals, argv[ 1 ]); - - printf ("loaded %d ical components\n", g_list_length (icals)); - - - /* save it back out */ - - icalendar_calendar_save (icals, "out.ical"); - - return 0; -} diff --git a/calendar/cal-util/icalendar.c b/calendar/cal-util/icalendar.c deleted file mode 100644 index c43d0fba77..0000000000 --- a/calendar/cal-util/icalendar.c +++ /dev/null @@ -1,673 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * icalendar server for gnomecal - * - * This module interfaces between libical and the gnomecal internal - * representation - * - * Copyright (C) 1999 The Free Software Foundation - * Authors: - * Russell Steinthal (rms39@columbia.edu) - * - */ - -#include -#include -#include -#include "icalendar.h" - -static time_t icaltime_to_timet (struct icaltimetype* i); -static CalendarAlarm* parse_alarm (icalproperty *prop); -static iCalPerson* parse_person (icalproperty *prop, gchar *value); -static iCalRelation* parse_related (icalproperty *prop); - -/* Duplicate a string without memory leaks */ -static gchar* copy_str (gchar** store, gchar* src) -{ - if (*store) - g_free (*store); - return (*store = g_strdup (src)); -} - -static GList* -copy_to_list (GList** store, gchar* src) -{ - *store = g_list_prepend (*store, g_strdup (src)); - return *store; -} - - -iCalObject * -ical_object_create_from_icalcomponent (icalcomponent* comp) -{ - iCalObject *ical = NULL; - iCalPerson *person; - icalcomponent *subcomp; - icalproperty *prop; - icalparameter *param; - struct icaltimetype ictime; - time_t *pt; - CalendarAlarm *alarm = NULL; - icalcomponent_kind compType; - struct icalgeotype geo; - struct icalperiodtype period; - - gboolean root = FALSE; - gboolean attachment = FALSE; - - char *tmpStr; /* this is a library-owned string */ - - ical = g_new0 (iCalObject, 1); - - compType = icalcomponent_isa (comp); - - switch (compType) { - case ICAL_XROOT_COMPONENT: - root = TRUE; - break; - case ICAL_XATTACH_COMPONENT: - attachment = TRUE; - break; - case ICAL_VEVENT_COMPONENT: - ical->type = ICAL_EVENT; - break; - case ICAL_VTODO_COMPONENT: - ical->type = ICAL_TODO; - break; - case ICAL_VJOURNAL_COMPONENT: - ical->type = ICAL_JOURNAL; - break; - case ICAL_VCALENDAR_COMPONENT: - /* FIXME: what does this mean? */ - break; - case ICAL_VFREEBUSY_COMPONENT: - ical->type = ICAL_FBREQUEST; - /* NOTE: This is not conclusive- you need to analyze - properties to determine whether this is an - FBREQUEST or an FBREPLY */ - break; - case ICAL_VTIMEZONE_COMPONENT: - ical->type = ICAL_TIMEZONE; - break; - case ICAL_VALARM_COMPONENT: - case ICAL_XAUDIOALARM_COMPONENT: - case ICAL_XDISPLAYALARM_COMPONENT: - case ICAL_XEMAILALARM_COMPONENT: - case ICAL_XPROCEDUREALARM_COMPONENT: - /* this should not be reached, since this loop should - only be processing first level components */ - break; - case ICAL_XSTANDARD_COMPONENT: - /* FIXME: what does this mean? */ - break; - case ICAL_XDAYLIGHT_COMPONENT: - /* FIXME: what does this mean? */ - break; - case ICAL_X_COMPONENT: - /* FIXME: what does this mean? */ - break; - case ICAL_VSCHEDULE_COMPONENT: - /* FIXME: what does this mean? */ - break; - case ICAL_XLICINVALID_COMPONENT: - /* FIXME: what does this mean? */ - break; - case ICAL_NO_COMPONENT: - case ICAL_ANY_COMPONENT: - /* should not occur */ - break; - case ICAL_VQUERY_COMPONENT: - case ICAL_VCAR_COMPONENT: - case ICAL_VCOMMAND_COMPONENT: - /* FIXME: what does this mean? */ - break; - } - - prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); - while (prop) { - switch (icalproperty_isa (prop)) { - case ICAL_CALSCALE_PROPERTY: - if (g_strcasecmp (icalproperty_get_calscale (prop), - "GREGORIAN")) - g_warning ("Unknown calendar format."); - break; - case ICAL_METHOD_PROPERTY: - /* FIXME: implement something here */ - break; - case ICAL_ATTACH_PROPERTY: - /* FIXME: not yet implemented */ - break; - case ICAL_CATEGORIES_PROPERTY: - copy_to_list (&ical->categories, - icalproperty_get_categories (prop)); - break; - case ICAL_CLASS_PROPERTY: - copy_str (&ical->class, icalproperty_get_class (prop)); - break; - case ICAL_COMMENT_PROPERTY: - /*tmpStr = icalproperty_get_comment (prop);*/ - tmpStr = g_strconcat (icalproperty_get_comment (prop), - ical->comment, - NULL); - if (ical->comment) - g_free (ical->comment); - ical->comment = tmpStr; - break; - case ICAL_DESCRIPTION_PROPERTY: - copy_str (&ical->desc, - icalproperty_get_description (prop)); - break; - case ICAL_GEO_PROPERTY: - geo = icalproperty_get_geo (prop); - ical->geo.latitude = geo.lat; - ical->geo.longitude = geo.lon; - ical->geo.valid = TRUE; - break; - case ICAL_LOCATION_PROPERTY: - copy_str (&ical->location, - icalproperty_get_location (prop)); - break; - case ICAL_PERCENTCOMPLETE_PROPERTY: - ical->percent = icalproperty_get_percentcomplete (prop); - break; - case ICAL_PRIORITY_PROPERTY: - ical->priority = icalproperty_get_priority (prop); - if (ical->priority < 0 || ical->priority > 9) - g_warning ("Priority out-of-range (see RFC2445)"); - break; - case ICAL_RESOURCES_PROPERTY: - copy_to_list (&ical->resources, - icalproperty_get_resources (prop)); - break; - case ICAL_STATUS_PROPERTY: - copy_str (&ical->status, - icalproperty_get_status (prop)); - break; - case ICAL_SUMMARY_PROPERTY: - copy_str (&ical->summary, - icalproperty_get_summary (prop)); - break; - case ICAL_COMPLETED_PROPERTY: - ictime = icalproperty_get_completed (prop); - ical->completed = icaltime_to_timet (&ictime); - break; - case ICAL_DTEND_PROPERTY: - ictime = icalproperty_get_dtend (prop); - ical->dtend = icaltime_to_timet (&ictime); - param = icalproperty_get_first_parameter (prop, - ICAL_VALUE_PARAMETER); - if (param) - ical->date_only = (icalparameter_get_value (param) == ICAL_VALUE_DATE); - /* FIXME: We should handle timezone specifiers */ - break; - case ICAL_DUE_PROPERTY: - ictime = icalproperty_get_due (prop); - ical->dtend = icaltime_to_timet (&ictime); - param = icalproperty_get_first_parameter (prop, - ICAL_VALUE_PARAMETER); - ical->date_only = (icalparameter_get_value (param) == - ICAL_VALUE_DATE); - /* FIXME: We should handle timezone specifiers */ - break; - case ICAL_DTSTART_PROPERTY: - ictime = icalproperty_get_dtstart (prop); - ical->dtstart = icaltime_to_timet (&ictime); - param = icalproperty_get_first_parameter (prop, - ICAL_VALUE_PARAMETER); - if (param) - ical->date_only = (icalparameter_get_value (param) == ICAL_VALUE_DATE); - /* FIXME: We should handle timezone specifiers */ - break; - case ICAL_DURATION_PROPERTY: - /* FIXME: I don't see the necessary libical function */ - break; - case ICAL_FREEBUSY_PROPERTY: - period = icalproperty_get_freebusy (prop); - ical->dtstart = icaltime_to_timet (&(period.start)); - /* FIXME: period.end is specified as being relative - to start, so this may not be correct */ - ical->dtend = icaltime_to_timet (&(period.end)); - break; - case ICAL_TRANSP_PROPERTY: - tmpStr = icalproperty_get_transp (prop); - /* do not i18n the following string constant! */ - if (!g_strcasecmp (tmpStr, "TRANSPARENT")) - ical->transp = ICAL_TRANSPARENT; - else - ical->transp = ICAL_OPAQUE; - break; - case ICAL_TZID_PROPERTY: - case ICAL_TZNAME_PROPERTY: - case ICAL_TZOFFSETFROM_PROPERTY: - case ICAL_TZOFFSETTO_PROPERTY: - case ICAL_TZURL_PROPERTY: - /* no implementation for now */ - break; - case ICAL_ATTENDEE_PROPERTY: - tmpStr = icalproperty_get_attendee (prop); - person = parse_person (prop, tmpStr); - ical->attendee = g_list_prepend (ical->attendee, - person); - break; - case ICAL_CONTACT_PROPERTY: - tmpStr = icalproperty_get_contact (prop); - person = parse_person (prop, tmpStr); - ical->contact = g_list_prepend (ical->contact, person); - break; - case ICAL_ORGANIZER_PROPERTY: - tmpStr = icalproperty_get_organizer (prop); - person = parse_person (prop, tmpStr); - if (ical->organizer) - g_free (ical->organizer); - ical->organizer = person; - break; - case ICAL_RECURRENCEID_PROPERTY: - ictime = icalproperty_get_recurrenceid (prop); - ical->recurid = icaltime_to_timet (&ictime); - /* FIXME: Range parameter not implemented */ - break; - case ICAL_RELATEDTO_PROPERTY: - ical->related = g_list_prepend (ical->related, - parse_related (prop)); - break; - case ICAL_URL_PROPERTY: - copy_str (&ical->url, - icalproperty_get_url (prop)); - break; - case ICAL_UID_PROPERTY: - copy_str (&ical->uid, - icalproperty_get_uid (prop)); - break; - case ICAL_EXDATE_PROPERTY: - /* FIXME: This does not appear to parse - multiple exdate values in one property, as - allowed by the RFC; needs a libical fix */ - ictime = icalproperty_get_exdate (prop); - pt = g_new0 (time_t, 1); - *pt = icaltime_to_timet (&ictime); - ical->exdate = g_list_prepend (ical->exdate, pt); - break; - case ICAL_EXRULE_PROPERTY: - case ICAL_RDATE_PROPERTY: - case ICAL_RRULE_PROPERTY: - /* FIXME: need recursion processing */ - break; - case ICAL_ACTION_PROPERTY: - case ICAL_REPEAT_PROPERTY: - case ICAL_TRIGGER_PROPERTY: - /* should only occur in VALARM's, handled below */ - g_assert_not_reached(); - break; - case ICAL_CREATED_PROPERTY: - ictime = icalproperty_get_created (prop); - ical->created = icaltime_to_timet (&ictime); - break; - case ICAL_DTSTAMP_PROPERTY: - ictime = icalproperty_get_dtstamp (prop); - ical->dtstamp = icaltime_to_timet (&ictime); - break; - case ICAL_LASTMODIFIED_PROPERTY: - ictime = icalproperty_get_lastmodified (prop); - ical->last_mod = icaltime_to_timet (&ictime); - break; - case ICAL_SEQUENCE_PROPERTY: - ical->seq = icalproperty_get_sequence (prop); - break; - case ICAL_REQUESTSTATUS_PROPERTY: - copy_str (&ical->rstatus, - icalproperty_get_requeststatus (prop)); - break; - case ICAL_X_PROPERTY: - g_warning ("Unsupported X-property: %s", - icalproperty_as_ical_string (prop)); - break; - case ICAL_XLICERROR_PROPERTY: - g_warning ("Unsupported property: %s", - icalproperty_get_xlicerror (prop)); - break; - case ICAL_PRODID_PROPERTY: - case ICAL_VERSION_PROPERTY: - /* nothing to do for this property */ - break; - default: - g_warning ("Unsupported property: %s", icalproperty_as_ical_string (prop)); - break; - - } - - prop = icalcomponent_get_next_property (comp, - ICAL_ANY_PROPERTY); - } - - /* now parse subcomponents --- should only be VALARM's */ - subcomp = icalcomponent_get_first_component (comp, - ICAL_ANY_COMPONENT); - while (subcomp) { - compType = icalcomponent_isa (subcomp); - switch (compType) { - case ICAL_VALARM_COMPONENT: - alarm = parse_alarm (subcomp); - if (alarm) - ical->alarms = g_list_prepend (ical->alarms, - alarm); - break; - default: - g_warning ("Only nested VALARM components are supported."); - } - - subcomp = icalcomponent_get_next_component (comp, - ICAL_ANY_COMPONENT); - } - - return ical; -} - - -static time_t icaltime_to_timet (struct icaltimetype* i) -{ - struct tm t; - time_t ret; - - t.tm_year = i->year - 1900; - t.tm_mon = i->month - 1; - t.tm_mday = i->day; - if (!i->is_date) { - t.tm_hour = i->hour; - t.tm_min = i->minute; - t.tm_sec = i->second; - } else { - t.tm_hour = 0; - t.tm_min = 0; - t.tm_sec = 0; - } - - ret = mktime(&t); - - if (i->is_utc) { -#ifdef HAVE_TIMEZONE - extern long timezone; - ret -= timezone; -#else - struct tm *tmp; - time_t tod = time(NULL); - tmp = localtime (&tod); - ret += tmp->tm_gmtoff; -#endif - } - - return ret; -} - -static iCalPerson* -parse_person (icalproperty* prop, gchar* value) -{ - icalparameter* param; - icalparameter_role role; - icalparameter_partstat partstat; - icalparameter_cutype cutype; - - iCalPerson* ret; - - ret = g_new0 (iCalPerson, 1); - - ret->addr = g_strdup (value); - - param = icalproperty_get_first_parameter (prop, - ICAL_CN_PARAMETER); - if (param) - ret->name = g_strdup (icalparameter_get_cn (param)); - else - ret->name = NULL; - - - param = icalproperty_get_first_parameter (prop, - ICAL_ROLE_PARAMETER); - if (param) { - role = icalparameter_get_role (param); - switch (role) { - case ICAL_ROLE_CHAIR: - ret->role = g_strdup ("CHAIR"); - break; - case ICAL_ROLE_REQPARTICIPANT: - ret->role = g_strdup ("REQPARTICIPANT"); - break; - case ICAL_ROLE_OPTPARTICIPANT: - ret->role = g_strdup ("OPTPARTICIPANT"); - break; - case ICAL_ROLE_NONPARTICIPANT: - ret->role = g_strdup ("NONPARTICIPANT"); - break; - case ICAL_ROLE_XNAME: - default: - ret->role = g_strdup ("UNKNOWN"); - break; - } - } else - ret->role = g_strdup ("REQPARTICIPANT"); - - param = icalproperty_get_first_parameter (prop, ICAL_PARTSTAT_PARAMETER); - if (param) { - partstat = icalparameter_get_partstat (param); - switch (partstat) { - case ICAL_PARTSTAT_NEEDSACTION: - ret->partstat = g_strdup ("NEEDSACTION"); - break; - case ICAL_PARTSTAT_ACCEPTED: - ret->partstat = g_strdup ("ACCEPTED"); - break; - case ICAL_PARTSTAT_DECLINED: - ret->partstat = g_strdup ("DECLINED"); - break; - case ICAL_PARTSTAT_TENTATIVE: - ret->partstat = g_strdup ("TENTATIVE"); - break; - case ICAL_PARTSTAT_DELEGATED: - ret->partstat = g_strdup ("DELEGATED"); - break; - case ICAL_PARTSTAT_COMPLETED: - ret->partstat = g_strdup ("COMPLETED"); - break; - case ICAL_PARTSTAT_INPROCESS: - ret->partstat = g_strdup ("INPROCESS"); - break; - case ICAL_PARTSTAT_XNAME: - ret->partstat = g_strdup (icalparameter_get_xvalue (param)); - break; - default: - ret->partstat = g_strdup ("UNKNOWN"); - break; - } - } else - ret->partstat = g_strdup ("NEEDSACTION"); - - param = icalproperty_get_first_parameter (prop, ICAL_RSVP_PARAMETER); - if (param) - ret->rsvp = icalparameter_get_rsvp (param); - else - ret->rsvp = FALSE; - - param = icalproperty_get_first_parameter (prop, ICAL_CUTYPE_PARAMETER -); - if (param) { - cutype = icalparameter_get_cutype (param); - switch (cutype) { - case ICAL_CUTYPE_INDIVIDUAL: - ret->cutype = g_strdup ("INDIVIDUAL"); - break; - case ICAL_CUTYPE_GROUP: - ret->cutype = g_strdup ("GROUP"); - break; - case ICAL_CUTYPE_RESOURCE: - ret->cutype = g_strdup ("RESOURCE"); - break; - case ICAL_CUTYPE_ROOM: - ret->cutype = g_strdup ("ROOM"); - break; - case ICAL_CUTYPE_UNKNOWN: - case ICAL_CUTYPE_XNAME: - default: - ret->cutype = g_strdup ("UNKNOWN"); - break; - } - } else - ret->cutype = g_strdup ("INDIVIDUAL"); - - param = icalproperty_get_first_parameter (prop, ICAL_MEMBER_PARAMETER -); - while (param) { - copy_to_list (&ret->member, icalparameter_get_member (param)); - param = icalproperty_get_next_parameter (prop, - ICAL_MEMBER_PARAMETER); - } - - param = icalproperty_get_first_parameter (prop, ICAL_DELEGATEDTO_PARAMETER); - while (param) { - copy_to_list (&ret->deleg_to, - icalparameter_get_delegatedto (param)); - param = icalproperty_get_next_parameter (prop, - ICAL_DELEGATEDTO_PARAMETER); - } - - param = icalproperty_get_first_parameter (prop, ICAL_DELEGATEDFROM_PARAMETER); - while (param) { - copy_to_list (&ret->deleg_from, - icalparameter_get_delegatedfrom (param)); - param = icalproperty_get_next_parameter (prop, - ICAL_DELEGATEDFROM_PARAMETER); - } - - param = icalproperty_get_first_parameter (prop, ICAL_SENTBY_PARAMETER); - if (param) - copy_str (&ret->sent_by, icalparameter_get_sentby (param)); - else - ret->sent_by = NULL; - - param = icalproperty_get_first_parameter (prop, ICAL_DIR_PARAMETER); - while (param) { - copy_to_list (&ret->deleg_to, - icalparameter_get_delegatedto (param)); - param = icalproperty_get_next_parameter (prop, - ICAL_DIR_PARAMETER); - } - - return ret; -} - -static iCalRelation* -parse_related (icalproperty* prop) -{ - iCalRelation* rel; - icalparameter* param; - icalparameter_reltype type; - - rel = g_new0 (iCalRelation, 1); - rel->uid = g_strdup (icalproperty_get_relatedto (prop)); - - param = icalproperty_get_first_parameter (prop, - ICAL_RELTYPE_PARAMETER); - if (param) { - type = icalparameter_get_reltype (param); - switch (type) { - case ICAL_RELTYPE_PARENT: - rel->reltype = g_strdup ("PARENT"); - break; - case ICAL_RELTYPE_CHILD: - rel->reltype = g_strdup ("CHILD"); - break; - case ICAL_RELTYPE_SIBLING: - rel->reltype = g_strdup ("SIBLING"); - break; - case ICAL_RELTYPE_XNAME: - rel->reltype = g_strdup (icalparameter_get_xvalue (param)); - break; - default: - rel->reltype = g_strdup ("UNKNOWN"); - break; - } - } else - rel->reltype = g_strdup ("PARENT"); - - return rel; -} - -#ifdef TEST - -int main(int argc, char* argv[]) -{ - icalcomponent* comp; - comp = icalendar_parse_file (argv[1]); - printf ("%s\n", icalcomponent_as_ical_string (comp)); - return 0; -} - -#endif - - -static CalendarAlarm* -parse_alarm (icalcomponent* comp) -{ - CalendarAlarm *alarm; - icalproperty *prop; - char *tmpStr; - struct icaldurationtype dur; - struct icalattachtype attach; - - g_return_val_if_fail (comp != NULL, NULL); - - alarm = g_new0 (CalendarAlarm, 1); - - prop = icalcomponent_get_first_property (comp, ICAL_ANY_PROPERTY); - while (prop) { - switch (icalproperty_isa (prop)) { - case ICAL_ACTION_PROPERTY: - tmpStr = icalproperty_get_action (prop); - if (!g_strcasecmp (tmpStr, "AUDIO")) - alarm->type = ALARM_AUDIO; - else if (!g_strcasecmp (tmpStr, "DISPLAY")) - alarm->type = ALARM_DISPLAY; - else if (!g_strcasecmp (tmpStr, "EMAIL")) - alarm->type = ALARM_MAIL; - else if (!g_strcasecmp (tmpStr, "PROCEDURE")) - alarm->type = ALARM_PROGRAM; - else - g_warning ("Unsupported alarm type!"); - break; - case ICAL_TRIGGER_PROPERTY: - /* FIXME: waiting on proper libical support */ - break; - case ICAL_REPEAT_PROPERTY: - alarm->snooze_repeat = icalproperty_get_repeat (prop); - break; - case ICAL_DURATION_PROPERTY: - dur = icalproperty_get_duration (prop); - alarm->snooze_secs = icaldurationtype_as_timet (dur); - break; - case ICAL_ATTACH_PROPERTY: - attach = icalproperty_get_attach (prop); - copy_str (&alarm->attach, - icalattachtype_get_url (&attach)); - break; - case ICAL_DESCRIPTION_PROPERTY: - copy_str (&alarm->desc, - icalproperty_get_description (prop)); - break; - case ICAL_SUMMARY_PROPERTY: - copy_str (&alarm->summary, - icalproperty_get_summary (prop)); - break; - case ICAL_ATTENDEE_PROPERTY: - copy_str (&alarm->attendee, - icalproperty_get_attendee (prop)); - break; - default: - g_warning ("Unsupported alarm property: %s", - icalproperty_as_ical_string (prop)); - break; - } - - prop = icalcomponent_get_next_property (comp, - ICAL_ANY_PROPERTY); - } - - return alarm; -} diff --git a/calendar/cal-util/icalendar.h b/calendar/cal-util/icalendar.h deleted file mode 100644 index 2a22fbab71..0000000000 --- a/calendar/cal-util/icalendar.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef ICALENDAR_H -#define ICALENDAR_H - -#include -#include - - - -iCalObject *ical_object_create_from_icalcomponent (icalcomponent* comp); - - - -#endif diff --git a/calendar/cal-util/test-recur.c b/calendar/cal-util/test-recur.c deleted file mode 100644 index 83602bb0d6..0000000000 --- a/calendar/cal-util/test-recur.c +++ /dev/null @@ -1,337 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 2000, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * This tests the recurrence rule expansion functions. - */ - -#include -#include -#include -#include -#include "cal-recur.h" - -static void set_time (CalObjTime *cotime, gint year, gint month, gint day, - gint hour, gint minute, gint second); -static void display_occs (GArray *occs); -static GList* build_list (gint first, ...); -static gchar* time_to_string (CalObjTime *cotime); -static void do_test (gchar *description, - CalObjTime *event_start, - CalObjRecurrence *recur, - CalObjTime *interval_start, - CalObjTime *interval_end); - -#define LIST_END 999 - -static void -test_yearly () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 0, 0, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2010, 0, 1, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_YEARLY; - recur.interval = 3; - recur.byweekno = build_list (3, 9, 24, LIST_END); - recur.byday = build_list (3, 0, 5, 0, LIST_END); - do_test ("YEARLY every 3 years in weeks 3, 9, 24 on Thu/Sat", - &event_start, &recur, &interval_start, &interval_end); - - - set_time (&interval_end, 2002, 0, 1, 0, 0, 0); - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_YEARLY; - recur.interval = 1; - recur.bymonth = build_list (0, 6, LIST_END); - recur.byday = build_list (0, 0, 6, 0, LIST_END); - do_test ("YEARLY every year in Jan/Jul on Mon/Sun", - &event_start, &recur, &interval_start, &interval_end); - - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_YEARLY; - recur.interval = 1; - recur.bymonthday = build_list (3, 7, LIST_END); - do_test ("YEARLY every year on 3rd & 7th of the month", - &event_start, &recur, &interval_start, &interval_end); - - - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_YEARLY; - recur.interval = 1; - recur.byyearday = build_list (15, 126, 360, LIST_END); - do_test ("YEARLY every year on 15th, 126th & 360th day of the year", - &event_start, &recur, &interval_start, &interval_end); - -} - - -static void -test_monthly () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 0, 0, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2002, 0, 1, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_MONTHLY; - recur.interval = 1; - do_test ("MONTHLY every month", - &event_start, &recur, &interval_start, &interval_end); - -} - -static void -test_weekly () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 0, 0, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2002, 0, 1, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_WEEKLY; - recur.interval = 1; - do_test ("WEEKLY every week", - &event_start, &recur, &interval_start, &interval_end); - -} - -static void -test_daily () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 0, 0, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2000, 6, 1, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_DAILY; - recur.interval = 1; - do_test ("DAILY every day", - &event_start, &recur, &interval_start, &interval_end); - -} - -static void -test_hourly () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 2, 15, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2002, 0, 1, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_HOURLY; - recur.interval = 3; - recur.bymonth = build_list (3, 11, LIST_END); - recur.byday = build_list (2, 0, 4, 0, LIST_END); - do_test ("HOURLY every 3 hours in Apr/Dec on Wed & Fri", - &event_start, &recur, &interval_start, &interval_end); -} - -static void -test_minutely () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 0, 0, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2000, 0, 2, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_MINUTELY; - recur.interval = 45; - do_test ("MINUTELY every 45 minutes", - &event_start, &recur, &interval_start, &interval_end); -} - -static void -test_secondly () -{ - CalObjTime event_start, interval_start, interval_end; - CalObjRecurrence recur; - - set_time (&event_start, 2000, 0, 1, 0, 0, 0); - - /* We set the interval to a wide range so we just test the event. */ - set_time (&interval_start, 2000, 0, 1, 0, 0, 0); - set_time (&interval_end, 2000, 0, 2, 0, 0, 0); - - memset (&recur, 0, sizeof (recur)); - recur.type = CAL_RECUR_SECONDLY; - recur.interval = 15; - recur.byhour = build_list (2, 4, 6, LIST_END); - recur.byminute = build_list (0, 30, LIST_END); - do_test ("SECONDLY every 15 seconds at 2:00,2:30,4:00,4:30,6:00,6:30", - &event_start, &recur, &interval_start, &interval_end); -} - -int -main (int argc, char *argv[]) -{ - - test_yearly (); - test_monthly (); - test_weekly (); - test_daily (); - test_hourly (); - test_minutely (); - test_secondly (); - - return 0; -} - - -static void -set_time (CalObjTime *cotime, gint year, gint month, gint day, - gint hour, gint minute, gint second) -{ - cotime->year = year; - cotime->month = month; - cotime->day = day; - cotime->hour = hour; - cotime->minute = minute; - cotime->second = second; -} - - -static GList* -build_list (gint first, ...) -{ - va_list args; - GList *list; - gint num; - - va_start (args, first); - - list = g_list_prepend (NULL, GINT_TO_POINTER (first)); - - num = va_arg (args, gint); - while (num != LIST_END) { - list = g_list_prepend (list, GINT_TO_POINTER (num)); - num = va_arg (args, gint); - } - - list = g_list_reverse (list); - - va_end (args); - - return list; -} - - -static void -do_test (gchar *description, - CalObjTime *event_start, - CalObjRecurrence *recur, - CalObjTime *interval_start, - CalObjTime *interval_end) -{ - GArray *occs; - - g_print ("========================================================\n"); - g_print ("%s\n", description); - g_print ("(From %s", time_to_string (interval_start)); - g_print (" To %s)\n\n", time_to_string (interval_end)); - - occs = cal_obj_expand_recurrence (event_start, recur, - interval_start, interval_end); - display_occs (occs); - g_array_free (occs, TRUE); -} - - -static gchar* -time_to_string (CalObjTime *cotime) -{ - static gchar buffer[64]; - gint month; - gchar *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "XXX" }; - - month = cotime->month; - if (month < 0 || month > 12) - month = 12; - - sprintf (buffer, "%s %2i %02i:%02i:%02i %4i", - months[month], cotime->day, - cotime->hour, cotime->minute, cotime->second, - cotime->year); - - return buffer; -} - -static void -display_occs (GArray *occs) -{ - CalObjTime *occ; - gint len, i; - struct tm t; - - len = occs->len; - for (i = 0; i < len; i++) { - occ = &g_array_index (occs, CalObjTime, i); - - t.tm_sec = occ->second; - t.tm_min = occ->minute; - t.tm_hour = occ->hour; - t.tm_mday = occ->day; - t.tm_mon = occ->month; - t.tm_year = occ->year - 1900; - t.tm_isdst = -1; - - mktime (&t); - - g_print ("%s", asctime (&t)); - } -} diff --git a/calendar/cal-util/timeutil.c b/calendar/cal-util/timeutil.c deleted file mode 100644 index bbce9b82d6..0000000000 --- a/calendar/cal-util/timeutil.c +++ /dev/null @@ -1,590 +0,0 @@ -/* Miscellaneous time-related utilities - * - * Copyright (C) 1998 The Free Software Foundation - * - * Authors: Federico Mena - * Miguel de Icaza - */ - -#include -#include -#include "timeutil.h" - - - -/** - * time_from_icaltimetype: - * @itt: A struct icaltimetype value. - * - * Converts a struct icaltimetype value into a time_t value. Does not deal with - * timezones. - * - * Return value: A time_t value. - **/ -time_t -time_from_icaltimetype (struct icaltimetype itt) -{ - struct tm tm; - - /* FIXME: this does not handle timezones */ - - memset (&tm, 0, sizeof (tm)); - - tm.tm_year = itt.year - 1900; - tm.tm_mon = itt.month - 1; - tm.tm_mday = itt.day; - - if (!itt.is_date) { - tm.tm_hour = itt.hour; - tm.tm_min = itt.minute; - tm.tm_sec = itt.second; - } - - return mktime (&tm); -} - -#define digit_at(x,y) (x [y] - '0') - -time_t -time_from_isodate (char *str) -{ - struct tm my_tm; - time_t t; - - if (strlen (str) < 14) - return -1; - - my_tm.tm_year = (digit_at (str, 0) * 1000 + digit_at (str, 1) * 100 + - digit_at (str, 2) * 10 + digit_at (str, 3)) - 1900; - - my_tm.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) - 1; - my_tm.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7); - my_tm.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10); - my_tm.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12); - my_tm.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14); - my_tm.tm_isdst = -1; - - t = mktime (&my_tm); - - if (str [15] == 'Z') -#if defined(HAVE_TM_GMTOFF) - t -= my_tm.tm_gmtoff -#elsif defined(HAVE_TIMEZONE) - t -= timezone -#endif - ; - - return t; -} - -void -print_time_t (time_t t) -{ - struct tm *tm = localtime (&t); - - printf ("TIEMPO: %d/%d/%d %d:%d:%d\n", - tm->tm_mon+1, tm->tm_mday, tm->tm_year, - tm->tm_hour, tm->tm_min, tm->tm_sec); -} - -int -get_time_t_hour (time_t t) -{ - struct tm *tm; - - tm = localtime (&t); - return tm->tm_hour; -} - -char * -isodate_from_time_t (time_t t) -{ - struct tm *tm; - static char isotime [40]; - - tm = localtime (&t); - strftime (isotime, sizeof (isotime)-1, "%Y%m%dT%H%M%S", tm); - return isotime; -} - -time_t -time_from_start_duration (time_t start, char *duration) -{ - printf ("Not yet implemented\n"); - return 0; -} - -char * -format_simple_hour (int hour, int use_am_pm) -{ - static char buf[256]; - - /* I don't know whether this is the best way to internationalize it. - * Does any language use different conventions? - Federico - */ - - if (use_am_pm) - g_snprintf (buf, sizeof(buf), "%d%s", - (hour == 0) ? 12 : (hour > 12) ? (hour - 12) : hour, - (hour < 12) ? _("am") : _("pm")); - else - g_snprintf (buf, sizeof(buf), "%02d%s", hour, _("h")); - - return buf; - -} - -time_t -time_add_minutes (time_t time, int minutes) -{ - struct tm *tm = localtime (&time); - time_t new_time; - - tm->tm_min += minutes; - if ((new_time = mktime (tm)) == -1){ - g_message ("time_add_minutes(): mktime() could not handle " - "adding %d minutes with\n", minutes); - print_time_t (time); - return time; - } - return new_time; -} - -/* Adds a day onto the time, using local time. - Note that if clocks go forward due to daylight savings time, there are - some non-existent local times, so the hour may be changed to make it a - valid time. This also means that it may not be wise to keep calling - time_add_day() to step through a certain period - if the hour gets changed - to make it valid time, any further calls to time_add_day() will also return - this hour, which may not be what you want. */ -time_t -time_add_day (time_t time, int days) -{ - struct tm *tm = localtime (&time); - time_t new_time; -#if 0 - int dst_flag = tm->tm_isdst; -#endif - - tm->tm_mday += days; - - if ((new_time = mktime (tm)) == -1){ - g_message ("time_add_day(): mktime() could not handling adding %d days with\n", - days); - print_time_t (time); - return time; - } - -#if 0 - /* I don't know what this is for. See also time_day_begin() and - time_day_end(). - Damon. */ - if (dst_flag > tm->tm_isdst){ - tm->tm_hour++; - new_time += 3600; - } else if (dst_flag < tm->tm_isdst){ - tm->tm_hour--; - new_time -= 3600; - } -#endif - - return new_time; -} - -time_t -time_add_week (time_t time, int weeks) -{ - return time_add_day (time, weeks * 7); -} - -time_t -time_add_month (time_t time, int months) -{ - struct tm *tm = localtime (&time); - time_t new_time; - int mday; - - mday = tm->tm_mday; - - tm->tm_mon += months; - tm->tm_isdst = -1; - if ((new_time = mktime (tm)) == -1){ - g_message ("time_add_month(): mktime() could not handling adding %d months with\n", - months); - print_time_t (time); - return time; - } - tm = localtime (&new_time); - if (tm->tm_mday < mday){ - tm->tm_mon--; - tm->tm_mday = time_days_in_month (tm->tm_year+1900, tm->tm_mon); - return new_time = mktime (tm); - } - else - return new_time; -} - -time_t -time_add_year (time_t time, int years) -{ - struct tm *tm = localtime (&time); - time_t new_time; - - tm->tm_year += years; - if ((new_time = mktime (tm)) == -1){ - g_message ("time_add_year(): mktime() could not handling adding %d years with\n", - years); - print_time_t (time); - return time; - } - return new_time; -} - -time_t -time_day_hour (time_t t, int hour) -{ - struct tm tm; - - tm = *localtime (&t); - tm.tm_hour = hour; - tm.tm_min = 0; - tm.tm_sec = 0; - - return mktime (&tm); -} - -/* Number of days in a month, for normal and leap years */ -static const int days_in_month[2][12] = { - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -}; - -/* Returns whether the specified year is a leap year */ -static int -is_leap_year (int year) -{ - if (year <= 1752) - return !(year % 4); - else - return (!(year % 4) && (year % 100)) || !(year % 400); -} - -int -time_days_in_month (int year, int month) -{ - g_return_val_if_fail (year >= 1900, 0); - g_return_val_if_fail ((month >= 0) && (month < 12), 0); - - return days_in_month [is_leap_year (year)][month]; -} - -time_t -time_from_day (int year, int month, int day) -{ - struct tm tm; - - memset (&tm, 0, sizeof (tm)); - tm.tm_year = year - 1900; - tm.tm_mon = month; - tm.tm_mday = day; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -time_t -time_year_begin (time_t t) -{ - struct tm tm; - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_mon = 0; - tm.tm_mday = 1; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -time_t -time_year_end (time_t t) -{ - struct tm tm; - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_mon = 0; - tm.tm_mday = 1; - tm.tm_year++; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -time_t -time_month_begin (time_t t) -{ - struct tm tm; - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_mday = 1; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -time_t -time_month_end (time_t t) -{ - struct tm tm; - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_mday = 1; - tm.tm_mon++; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -time_t -time_week_begin (time_t t) -{ - struct tm tm; - - /* FIXME: make it take week_starts_on_monday into account */ - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_mday -= tm.tm_wday; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -time_t -time_week_end (time_t t) -{ - struct tm tm; - - /* FIXME: make it take week_starts_on_monday into account */ - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_mday += 7 - tm.tm_wday; - tm.tm_isdst = -1; - - return mktime (&tm); -} - -/* Returns the start of the day, according to the local time. */ -time_t -time_day_begin (time_t t) -{ -#if 1 - struct tm tm; - - tm = *localtime (&t); - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_isdst = -1; - - return mktime (&tm); - -#else - /* This is the original code which sometimes produces a time of 1:00. - I don't understand why it looked at the tm_isdst flags at all. - - Damon. */ - - struct tm tm; - time_t temp = t - 43200; - int dstflag, dstflag2; - - tm = *localtime(&temp); /* one day */ - dstflag = tm.tm_isdst; - - tm = *localtime (&t); - dstflag2 = tm.tm_isdst; - - if (dstflag < dstflag2) - tm.tm_hour = 1; - else - tm.tm_hour = 0; - - tm.tm_min = 0; - tm.tm_sec = 0; - - temp = mktime(&tm); - if (dstflag > dstflag2){ - temp += 3600; - } - - return temp; -#endif -} - -/* Returns the end of the day, according to the local time. */ -time_t -time_day_end (time_t t) -{ -#if 1 - struct tm tm; - - tm = *localtime (&t); - tm.tm_mday++; - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_isdst = -1; - - return mktime (&tm); - -#else - /* This is the original code which has more problems than - time_day_begin(). - Damon. */ - - struct tm tm; - time_t temp; - int dstflag, dstflag2; - - t += 10800; - temp = t - 86400; - - tm = *localtime(&temp); /* one day */ - dstflag = tm.tm_isdst; - - tm = *localtime (&t); - dstflag2 = tm.tm_isdst; - - if (dstflag < dstflag2) - tm.tm_hour = 23; - else { - tm.tm_mday++; - tm.tm_hour = 0; - } - tm.tm_min = 0; - tm.tm_sec = 0; - - temp = mktime(&tm); - if(dstflag > dstflag2) { - } - return temp; -#endif -} - -static char * -pcat (char *dest, int num, char key) -{ - int c; - - c = sprintf (dest, "%d%c", num, key); - return dest + c; -} - -/* Converts secs into the ISO difftime representation */ -char * -isodiff_from_secs (int secs) -{ - static char buffer [60], *p; - int years, months, weeks, days, hours, minutes; - - years = months = weeks = days = hours = minutes = 0; - - years = secs / (365 * 86400); - secs %= (365 * 86400); - months = secs / (30 * 86400); - secs %= (30 * 86400); - weeks = secs / (7 * 86400); - secs %= (7 * 86400); - days = secs / 86400; - secs %= 86400; - hours = secs / 3600; - secs %= 3600; - minutes = secs / 60; - secs %= 60; - - strcpy (buffer, "P"); - p = buffer + 1; - if (years) - p = pcat (p, years, 'Y'); - if (months) - p = pcat (p, months, 'M'); - if (weeks) - p = pcat (p, weeks, 'W'); - if (days) - p = pcat (p, days, 'D'); - if (hours || minutes || secs){ - *p++ = 'T'; - if (hours) - p = pcat (p, hours, 'H'); - if (minutes) - p = pcat (p, minutes, 'M'); - if (secs) - p = pcat (p, secs, 'S'); - } - - return buffer; -} - -int -isodiff_to_secs (char *str) -{ - int value, time; - int years, months, weeks, days, hours, minutes, seconds; - - value = years = months = weeks = days = hours = minutes = time = seconds = 0; - if (*str != 'P') - return 0; - - str++; - while (*str){ - switch (*str){ - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - value = value * 10 + (*str - '0'); - break; - case 'Y': - years = value; value = 0; - break; - case 'M': - if (time) - minutes = value; - else - months = value; - value = 0; - break; - case 'W': - weeks = value; value = 0; - break; - case 'D': - days = value; value = 0; - break; - case 'T': - value = 0; time = 1; - break; - case 'H': - hours = value; value = 0; - break; - case 'S': - seconds = value; value = 0; - break; - } - str++; - } - return seconds + (minutes * 60) + (hours * 3600) + - (days * 86400) + (weeks * 7 * 86400) + - (months * 30 * 86400) + (years * 365 * 86400); -} diff --git a/calendar/cal-util/timeutil.h b/calendar/cal-util/timeutil.h deleted file mode 100644 index 37b70ee6cf..0000000000 --- a/calendar/cal-util/timeutil.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Miscellaneous time-related utilities - * - * Copyright (C) 1998 The Free Software Foundation - * - * Authors: Federico Mena - * Miguel de Icaza - */ - -#ifndef TIMEUTIL_H -#define TIMEUTIL_H - - -#include -#include - - -time_t time_from_icaltimetype (struct icaltimetype itt); -time_t time_from_isodate (char *str); -time_t time_from_start_duration (time_t start, char *duration); -char *isodate_from_time_t (time_t t); -int get_time_t_hour (time_t t); -int isodiff_to_secs (char *str); -char *isodiff_from_secs (int secs); - -time_t time_add_minutes (time_t time, int minutes); -time_t time_add_day (time_t time, int days); -time_t time_add_week (time_t time, int weeks); -time_t time_add_month (time_t time, int months); -time_t time_add_year (time_t time, int years); - - -/* Returns pointer to a statically-allocated buffer with a string of the form - * 3am, 4am, 12pm, 08h, 17h, etc. - * The string is internationalized, hopefully correctly. - */ -char *format_simple_hour (int hour, int use_am_pm); - -/* Returns the number of days in the specified month. Years are full years (starting from year 1). - * Months are in [0, 11]. - */ -int time_days_in_month (int year, int month); - -/* Converts the specified date to a time_t at the start of the specified day. Years are full years - * (starting from year 1). Months are in [0, 11]. Days are 1-based. - */ -time_t time_from_day (int year, int month, int day); - -time_t time_day_hour (time_t t, int hour); - -/* For the functions below, time ranges are considered to contain the start time, but not the end - * time. - */ - -/* These two functions take a time value and return the beginning or end of the corresponding year, - * respectively. - */ -time_t time_year_begin (time_t t); -time_t time_year_end (time_t t); - -/* These two functions take a time value and return the beginning or end of the corresponding month, - * respectively. - */ -time_t time_month_begin (time_t t); -time_t time_month_end (time_t t); - -/* These functions take a time value and return the beginning or end of the corresponding week, - * respectively. This takes into account the global week_starts_on_monday flag. - */ -time_t time_week_begin (time_t t); -time_t time_week_end (time_t t); - -/* These two functions take a time value and return the beginning or end of the corresponding day, - * respectively. - */ -time_t time_day_begin (time_t t); -time_t time_day_end (time_t t); - -time_t parse_date (char *str); -void print_time_t (time_t t); - - -#endif diff --git a/calendar/conduits/.cvsignore b/calendar/conduits/.cvsignore deleted file mode 100644 index b840c21800..0000000000 --- a/calendar/conduits/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile.in -Makefile \ No newline at end of file diff --git a/calendar/conduits/Makefile.am b/calendar/conduits/Makefile.am deleted file mode 100644 index 906ea61971..0000000000 --- a/calendar/conduits/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = calendar todo diff --git a/calendar/conduits/calendar/.cvsignore b/calendar/conduits/calendar/.cvsignore deleted file mode 100644 index 0029a85a37..0000000000 --- a/calendar/conduits/calendar/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -Makefile.in -Makefile -.deps -calendar.conduit -*.lo -.libs -libcalendar_conduit.la -calendar-conduit-control-applet diff --git a/calendar/conduits/calendar/Makefile.am b/calendar/conduits/calendar/Makefile.am deleted file mode 100644 index 1aa9abecd6..0000000000 --- a/calendar/conduits/calendar/Makefile.am +++ /dev/null @@ -1,81 +0,0 @@ -# -# -# - -INCLUDES = \ - -I$(top_srcdir)/calendar \ - $(GNOME_PILOT_CFLAGS) - -file_conduitsdir=$(libdir)/gnome-pilot/conduits - -bin_PROGRAMS = calendar-conduit-control-applet - -calendar_conduit_control_applet_SOURCES = calendar-conduit-control-applet.c - -calendar_conduit_control_applet_LDADD = \ - $(CAPPLET_LIBS) \ - $(GNOME_LIBDIR) \ - -lgpilotdcm \ - -lgpilotd \ - -lgpilotdconduit \ - $(GNOME_CAPPLET_LIBS) \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(GNOME_XML_LIB) \ - $(GNOMEUI_LIBS) \ - $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ - $(INTLLIBS) - - -# $(top_builddir)/libgpilotdCM/libgpilotdcm.la \ -# $(top_builddir)/gpilotd/libgpilotd.la \ -# $(top_builddir)/gpilotd/libgpilotdconduit.la \ - - -# calendar_conduit -calendar_conduitsdir=$(libdir)/gnome-pilot/conduits -calendar_conduits_LTLIBRARIES = libcalendar_conduit.la - -libcalendar_conduit_la_SOURCES = \ - calendar-conduit.c - -# calendar-conduit.c: my_gnomecal_idl - -calendar.conduit: calendar.conduit.in Makefile - sed -e 's^\@prefix\@^$(prefix)^g' < $(srcdir)/calendar.conduit.in > calendar.conduit.tmp \ - && mv calendar.conduit.tmp calendar.conduit - -# -# conduit -# - -libcalendar_conduit_la_LDFLAGS = \ - -rpath $(libdir) - -libcalendar_conduit_la_LIBADD = \ - $(top_builddir)/calendar/cal-client/libcal-client-static.la \ - $(top_builddir)/calendar/cal-util/libcal-util-static.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/libical/src/libical/libical-static.la \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ - $(GNOME_LIBDIR) \ - $(GNOME_LIBS) - -ccenterdir = $(datadir)/control-center -ccenterPalmPilotdir = $(ccenterdir)/Peripherals -ccenterConduitsdir = $(ccenterPalmPilotdir)/Conduits -ccenterConduits_DATA = calendar-conduit-control-applet.desktop - -panelConduitsdir = $(datadir)/gnome/apps/Settings/Peripherals/Conduits -panelConduits_DATA = $(ccenterConduits_DATA) - -Conduitdir = $(datadir)/gnome-pilot/conduits/ -Conduit_DATA = calendar.conduit - -EXTRA_DIST = \ - calendar.conduit.in \ - $(ccenterConduits_DATA) - -install-data-local: - $(mkinstalldirs) $(ccenterConduitsdir) - $(mkinstalldirs) $(Conduitdir) diff --git a/calendar/conduits/calendar/calendar-conduit-control-applet.c b/calendar/conduits/calendar/calendar-conduit-control-applet.c deleted file mode 100644 index 291d429bab..0000000000 --- a/calendar/conduits/calendar/calendar-conduit-control-applet.c +++ /dev/null @@ -1,387 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* Control applet ("capplet") for the gnome-pilot calendar conduit, */ -/* based on */ -/* gpilotd control applet ('capplet') for use with the GNOME control center */ - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include "calendar-conduit.h" - - -/* tell changes callbacks to ignore changes or not */ -static gboolean ignore_changes=FALSE; - -/* capplet widget */ -static GtkWidget *capplet=NULL; - -/* host/device/pilot configuration windows */ -GtkWidget *cfgOptionsWindow=NULL; -GtkWidget *cfgStateWindow=NULL; -GtkWidget *dialogWindow=NULL; - -gboolean activated,org_activation_state; -GnomePilotConduitManagement *conduit; -GnomePilotConduitConfig *conduit_config; -GCalConduitCfg *origState = NULL; -GCalConduitCfg *curState = NULL; - -static void doTrySettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg); -static void doRevertSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg); -static void doSaveSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg); - -//static void readStateCfg (GtkWidget *w, GCalConduitCfg *c); -static void setStateCfg (GtkWidget *w, GCalConduitCfg *c); - -gint pilotId; -/* CORBA_Environment ev; */ -static GnomePilotClient *gpc; - - - -/* This array must be in the same order as enumerations - in GnomePilotConduitSyncType as they are used as index. - Custom type implies Disabled state. -*/ -static gchar* sync_options[] ={ N_("Disabled"), - N_("Synchronize"), - N_("Copy From Pilot"), - N_("Copy To Pilot"), - N_("Merge From Pilot"), - N_("Merge To Pilot")}; -#define SYNC_OPTIONS_COUNT 6 - - - - -/* Saves the configuration data. */ -static void -gcalconduit_save_configuration(GCalConduitCfg *c) -{ - gchar prefix[256]; - - g_snprintf(prefix,255,"/gnome-pilot.d/calendar-conduit/Pilot_%u/",c->pilotId); - - gnome_config_push_prefix(prefix); - gnome_config_set_bool ("open_secret", c->open_secret); - gnome_config_pop_prefix(); - - gnome_config_sync(); - gnome_config_drop_all(); -} - -/* Creates a duplicate of the configuration data */ -static GCalConduitCfg* -gcalconduit_dupe_configuration(GCalConduitCfg *c) { - GCalConduitCfg *retval; - g_return_val_if_fail(c!=NULL,NULL); - retval = g_new0(GCalConduitCfg,1); - retval->sync_type = c->sync_type; - retval->open_secret = c->open_secret; - retval->pilotId = c->pilotId; - return retval; -} - - -static void -doTrySettings(GtkWidget *widget, GCalConduitCfg *c) -{ - /* - readStateCfg (cfgStateWindow, curState); - if (activated) - gnome_pilot_conduit_config_enable (conduit_config, GnomePilotConduitSyncTypeCustom); - else - gnome_pilot_conduit_config_disable (conduit_config); - */ - - if (c->sync_type!=GnomePilotConduitSyncTypeCustom) - gnome_pilot_conduit_config_enable_with_first_sync (conduit_config, - c->sync_type, - c->sync_type, - TRUE); - else - gnome_pilot_conduit_config_disable (conduit_config); - - gcalconduit_save_configuration (c); -} - - -static void -doSaveSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg) -{ - doTrySettings(widget, GCalConduitCfg); - gcalconduit_save_configuration(GCalConduitCfg); -} - - -static void -doCancelSettings(GtkWidget *widget, GCalConduitCfg *c) -{ - doSaveSettings (widget, c); -} - - -static void -doRevertSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg) -{ - activated = org_activation_state; - setStateCfg (cfgStateWindow, curState); -} - -static void -about_cb (GtkWidget *widget, gpointer data) -{ - GtkWidget *about; - const gchar *authors[] = {_("Eskil Heyn Olsen "),NULL}; - - about = gnome_about_new (_("Gpilotd calendar conduit"), VERSION, - _("(C) 1998 the Free Software Foundation"), - authors, - _("Configuration utility for the calendar conduit.\n"), - _("gnome-unknown.xpm")); - gtk_widget_show (about); - - return; -} - - -/* called by the sync_type GtkOptionMenu */ -static void -sync_action_selection(GtkMenuShell *widget, gpointer unused) -{ - if (!ignore_changes) { - capplet_widget_state_changed(CAPPLET_WIDGET (capplet), TRUE); - } -} - - -/* called by the sync_type GtkOptionMenu */ -static void -activate_sync_type(GtkMenuItem *widget, gpointer data) -{ - curState->sync_type = GPOINTER_TO_INT(data); - if(!ignore_changes) - capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); -} - - -static GtkWidget -*createStateCfgWindow(void) -{ - GtkWidget *vbox, *table; - GtkWidget *label; - GtkWidget *optionMenu,*menuItem; - GtkMenu *menu; - gint i; - - vbox = gtk_vbox_new(FALSE, GNOME_PAD); - - table = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); - - label = gtk_label_new(_("Synchronize Action")); - gtk_box_pack_start(GTK_BOX(table), label, FALSE, FALSE, GNOME_PAD); - - optionMenu=gtk_option_menu_new(); - gtk_object_set_data(GTK_OBJECT(vbox), "conduit_state", optionMenu); - menu = GTK_MENU(gtk_menu_new()); - - for (i=0; isync_type); - ignore_changes = FALSE; -} - - -#if 0 -static void -readStateCfg (GtkWidget *w, GCalConduitCfg *c) -{ - /* - GtkWidget *button; - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); - g_assert(button!=NULL); - activated = GTK_TOGGLE_BUTTON(button)->active; - */ -} -#endif /* 0 */ - - -static void -pilot_capplet_setup(void) -{ - GtkWidget *frame, *table; - - capplet = capplet_widget_new(); - - table = gtk_table_new(1, 2, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); - gtk_container_add(GTK_CONTAINER(capplet), table); - - frame = gtk_frame_new(_("Conduit state")); - gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); - gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); - cfgStateWindow = createStateCfgWindow(); - gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); - - gtk_signal_connect(GTK_OBJECT(capplet), "try", - GTK_SIGNAL_FUNC(doTrySettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "revert", - GTK_SIGNAL_FUNC(doRevertSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "ok", - GTK_SIGNAL_FUNC(doSaveSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "cancel", - GTK_SIGNAL_FUNC(doCancelSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "help", - GTK_SIGNAL_FUNC(about_cb), NULL); - - - setStateCfg (cfgStateWindow, curState); - - gtk_widget_show_all (capplet); -} - - -static void -run_error_dialog(gchar *mesg,...) -{ - char tmp[80]; - va_list ap; - - va_start(ap,mesg); - vsnprintf(tmp,79,mesg,ap); - dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); - gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); - va_end(ap); -} - - -static gint -get_pilot_id_from_gpilotd() -{ - GList *pilots=NULL; - gint pilot; - int i,err; - - i=0; - /* we don't worry about leaking here, so pilots isn't freed */ - switch(err = gnome_pilot_client_get_pilots(gpc,&pilots)) { - case GPILOTD_OK: { - if(pilots) { - for(i=0;idata); - } - if(i==0) { - run_error_dialog(_("No pilot configured, please choose the\n'Pilot Link Properties' capplet first.")); - return -1; - } else { - gnome_pilot_client_get_pilot_id_by_name(gpc, - pilots->data, /* this is the first pilot */ - &pilot); - if(i>1) { - g_message("too many pilots..."); - /* need a choose here */ - } - return pilot; - } - } else { - run_error_dialog(_("No pilot configured, please choose the\n'Pilot Link Properties' capplet first.")); - return -1; - } - break; - } - case GPILOTD_ERR_NOT_CONNECTED: - run_error_dialog(_("Not connected to the gnome-pilot daemon")); - return -1; - break; - default: - g_warning("gnome_pilot_client_get_pilot_ids(...) = %d",err); - run_error_dialog(_("An error occured when trying to fetch\npilot list from the gnome-pilot daemon")); - return -1; - break; - } -} - - -int -main (int argc, char *argv[]) -{ - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_LEVEL_WARNING); - - /* we're a capplet */ - gnome_capplet_init ("calendar conduit control applet", NULL, argc, argv, - NULL, 0, NULL); - - - gpc = gnome_pilot_client_new(); - gnome_pilot_client_connect_to_daemon(gpc); - pilotId = get_pilot_id_from_gpilotd(); - if(!pilotId) return -1; - - /* put all code to set things up in here */ - gcalconduit_load_configuration (&origState, pilotId); - - conduit = gnome_pilot_conduit_management_new ("Calendar", GNOME_PILOT_CONDUIT_MGMT_ID); - if (conduit == NULL) return -1; - conduit_config = gnome_pilot_conduit_config_new (conduit, pilotId); - org_activation_state = gnome_pilot_conduit_config_is_enabled (conduit_config, - &origState->sync_type); - activated = org_activation_state; - - //gpilotd_conduit_mgmt_get_sync_type (conduit, pilotId, &origState->sync_type); - - curState = gcalconduit_dupe_configuration(origState); - - pilot_capplet_setup (); - - - /* done setting up, now run main loop */ - capplet_gtk_main(); - - gnome_pilot_conduit_management_destroy(conduit); - - return 0; -} diff --git a/calendar/conduits/calendar/calendar-conduit-control-applet.desktop b/calendar/conduits/calendar/calendar-conduit-control-applet.desktop deleted file mode 100644 index 15fd0dc77b..0000000000 --- a/calendar/conduits/calendar/calendar-conduit-control-applet.desktop +++ /dev/null @@ -1,13 +0,0 @@ -[Desktop Entry] -Name=Calendar conduit -Name[da]=Gnome kalender -Name[no]=GNOME kalender -Name[tr]=Takvim parçasý -Comment=Configure the GnomeCal conduit -Comment[da]=Konfigurér GnomeCal-komponent -Comment[no]=Konfigurér GnomeCal-komponent -Comment[tr]=GnomeCal takvim parçasý ayarlarý -Exec=calendar-conduit-control-applet --cap-id=1 -Terminal=0 -Type=Application -Icon=gnome-calendar-conduit.png diff --git a/calendar/conduits/calendar/calendar-conduit.c b/calendar/conduits/calendar/calendar-conduit.c deleted file mode 100644 index 8094fee315..0000000000 --- a/calendar/conduits/calendar/calendar-conduit.c +++ /dev/null @@ -1,1727 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include -#include -#include -#include -#include -#include -#include - -#include -// #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -GnomePilotConduit * conduit_get_gpilot_conduit (guint32); -void conduit_destroy_gpilot_conduit (GnomePilotConduit*); -void local_record_from_icalobject (GCalLocalRecord *local, CalComponent *obj); - -#define CONDUIT_VERSION "0.8.11" -#ifdef G_LOG_DOMAIN -#undef G_LOG_DOMAIN -#endif -#define G_LOG_DOMAIN "gcalconduit" - -#define DEBUG_CALCONDUIT -#undef DEBUG_CALCONDUIT - -#ifdef DEBUG_CALCONDUIT -#define show_exception(e) g_warning ("Exception: %s\n", CORBA_exception_id (e)) -#define LOG(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e) -#else -#define show_exception(e) -#define LOG(e...) -#endif - -#define WARN(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_WARNING, e) -#define INFO(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e) - -#define catch_ret_val(_env,ret) \ - if (_env._major != CORBA_NO_EXCEPTION) { \ - g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE,"%s:%d: Caught exception",__FILE__,__LINE__); \ - g_warning ("Exception: %s\n", CORBA_exception_id (&(_env))); \ - CORBA_exception_free(&(_env)); \ - return ret; \ - } - - - - -/* debug spew DELETE ME */ -static char *print_ical (CalComponent *obj) -{ - static char buff[ 4096 ]; - CalComponentText summary; - GSList *comments; - CalComponentText *first_comment = NULL; - - if (obj == NULL) { - sprintf (buff, "[NULL]"); - return buff; - } - - cal_component_get_summary (obj, &summary); - cal_component_get_comment_list (obj, &comments); - if (comments) - first_comment = (CalComponentText *) comments->data; - - - sprintf (buff, "['%s' '%s']", - summary.value, /* description */ - first_comment ? first_comment->value : "" /* note */); - return buff; -} - - -/* debug spew DELETE ME */ -static char *print_local (GCalLocalRecord *local) -{ - static char buff[ 4096 ]; - - if (local == NULL) { - sprintf (buff, "[NULL]"); - return buff; - } - - if (local->a && local->a->description) { - sprintf (buff, "['%s' '%s']", - local->a->description, - local->a->note); - return buff; - } - - return print_ical (local->ical); -} - - -/* debug spew DELETE ME */ -static char *print_remote (PilotRecord *remote) -{ - static char buff[ 4096 ]; - struct Appointment a; - - if (remote == NULL) { - sprintf (buff, "[NULL]"); - return buff; - } - - memset (&a, 0, sizeof (struct Appointment)); - unpack_Appointment (&a, remote->record, remote->length); - - sprintf (buff, "['%s' '%s']", - a.description, - a.note); - - return buff; -} - - - -/* Destroys any data allocated by gcalconduit_load_configuration - and deallocates the given configuration. */ -static void -gcalconduit_destroy_configuration(GCalConduitCfg **c) -{ - g_return_if_fail(c!=NULL); - g_return_if_fail(*c!=NULL); - g_free(*c); - *c = NULL; -} - - -/* Given a GCalConduitContxt*, allocates the structure */ -static void -gcalconduit_new_context(GCalConduitContext **ctxt, - GCalConduitCfg *c) -{ - *ctxt = g_new0(GCalConduitContext,1); - g_assert(ctxt!=NULL); - (*ctxt)->cfg = c; - CORBA_exception_init (&((*ctxt)->ev)); -} - - -/* Destroys any data allocated by gcalconduit_new_context - and deallocates its data. */ -static void -gcalconduit_destroy_context(GCalConduitContext **ctxt) -{ - g_return_if_fail(ctxt!=NULL); - g_return_if_fail(*ctxt!=NULL); -/* - if ((*ctxt)->cfg!=NULL) - gcalconduit_destroy_configuration(&((*ctxt)->cfg)); -*/ - g_free(*ctxt); - *ctxt = NULL; -} - - -static void -gnome_calendar_load_cb (GtkWidget *cal_client, - CalClientLoadStatus status, - GCalConduitContext *ctxt) -{ - CalClient *client = CAL_CLIENT (cal_client); - - printf (" calendar-conduit entering " - "gnome_calendar_load_cb, tried=%d\n", - ctxt->calendar_load_tried); - - if (status == CAL_CLIENT_LOAD_SUCCESS) { - ctxt->calendar_load_success = TRUE; - printf (" success\n"); - gtk_main_quit (); /* end the sub event loop */ - } else { - if (ctxt->calendar_load_tried) { - printf (" load and create of calendar failed\n"); - gtk_main_quit (); /* end the sub event loop */ - return; - } - - cal_client_create_calendar (client, ctxt->calendar_file); - ctxt->calendar_load_tried = 1; - } -} - - - - - -static int -start_calendar_server (GnomePilotConduitStandardAbs *conduit, - GCalConduitContext *ctxt) -{ - - g_return_val_if_fail(conduit!=NULL,-2); - g_return_val_if_fail(ctxt!=NULL,-2); - - ctxt->client = cal_client_new (); - - /* FIX ME */ - ctxt->calendar_file = g_concat_dir_and_file (g_get_home_dir (), - "evolution/local/Calendar/calendar.vcf"); - - gtk_signal_connect (GTK_OBJECT (ctxt->client), "cal_loaded", - gnome_calendar_load_cb, ctxt); - - printf (" calling cal_client_load_calendar\n"); - cal_client_load_calendar (ctxt->client, ctxt->calendar_file); - - /* run a sub event loop to turn cal-client's async load - notification into a synchronous call */ - gtk_main (); - - if (ctxt->calendar_load_success) - return 0; - - return -1; -} - - -#if 0 -/* Just a stub to link with */ -void calendar_notify (time_t time, CalendarAlarm *which, void *data); -void calendar_notify (time_t time, CalendarAlarm *which, void *data) { } -#endif /* 0 */ - - -static GSList * -get_calendar_objects(GnomePilotConduitStandardAbs *conduit, - gboolean *status, - GCalConduitContext *ctxt) -{ - GList *uids; - GSList *result = NULL; - - g_return_val_if_fail (conduit != NULL, NULL); - g_return_val_if_fail (ctxt != NULL, NULL); - - /* uids = cal_client_get_uids (ctxt->client, CALOBJ_TYPE_ANY); */ - uids = cal_client_get_uids (ctxt->client, - CALOBJ_TYPE_EVENT | - /*CALOBJ_TYPE_TODO |*/ - CALOBJ_TYPE_JOURNAL); - - if (status != NULL) - (*status) = TRUE; - - if (! uids) - INFO ("No entries found"); - else { - GList *c; - for (c=uids; c; c=c->next) - result = g_slist_prepend (result, (gchar *) c->data); - /* FIX ME free uids */ - } - - return result; -} - - -static void -local_record_from_ical_uid (GCalLocalRecord *local, - char *uid, - GCalConduitContext *ctxt) -{ - CalComponent *obj; - CalClientGetStatus status; - - g_assert (local != NULL); - - status = cal_client_get_object (ctxt->client, uid, &obj); - - if (status == CAL_CLIENT_GET_SUCCESS) - local_record_from_icalobject (local, obj); - else - INFO ("Object did not exist"); -} - - -/* - * converts a CalComponent to a GCalLocalRecord - */ - -void -local_record_from_icalobject (GCalLocalRecord *local, - CalComponent *obj) -{ - unsigned long int pilot_status; - - g_return_if_fail(local!=NULL); - g_return_if_fail(obj!=NULL); - - local->ical = obj; - cal_component_get_pilot_id (obj, &local->local.ID); - cal_component_get_pilot_status (obj, &pilot_status); - -/* - LOG ("local->Id = %ld [%s], status = %d", - local->local.ID,obj->summary,local->ical->pilot_status); -*/ - switch (pilot_status) { - case ICAL_PILOT_SYNC_NONE: - local->local.attr = GnomePilotRecordNothing; - break; - case ICAL_PILOT_SYNC_MOD: - local->local.attr = GnomePilotRecordModified; - break; - case ICAL_PILOT_SYNC_DEL: - local->local.attr = GnomePilotRecordDeleted; - break; - } - - /* Records without a pilot_id are new */ - if (local->local.ID == 0) - local->local.attr = GnomePilotRecordNew; - - /* - local->local.secret = 0; - if(obj->class!=NULL) - if(strcmp(obj->class,"PRIVATE")==0) - local->local.secret = 1; - */ - - local->local.archived = 0; -} - - -/* - * Given a PilotRecord, find the matching record in - * the calendar repository. If no match, return NULL - */ -static GCalLocalRecord * -find_record_in_repository(GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - char *uid = NULL; - GCalLocalRecord *loc; - CalClientGetStatus status; - CalComponent *obj; - - g_return_val_if_fail(conduit!=NULL,NULL); - g_return_val_if_fail(remote!=NULL,NULL); - - printf ("find_record_in_repository: remote=%s... ", - print_remote (remote)); - - status = cal_client_get_uid_by_pilot_id (ctxt->client, remote->ID, &uid); - - if (status == CAL_CLIENT_GET_SUCCESS) { - status = cal_client_get_object (ctxt->client, uid, &obj); - if (status == CAL_CLIENT_GET_SUCCESS) { - printf ("found %s\n", print_ical (obj)); - loc = g_new0(GCalLocalRecord,1); - /* memory allocated in new_from_string is freed in free_match */ - local_record_from_icalobject (loc, obj); - return loc; - } - } - - printf ("not found\n"); - return NULL; -} - - -/* - * updates an given CalComponent in the repository - */ -static void -update_calendar_entry_in_repository(GnomePilotConduitStandardAbs *conduit, - CalComponent *obj, - GCalConduitContext *ctxt) -{ - gboolean success; - - g_return_if_fail(conduit!=NULL); - g_return_if_fail(obj!=NULL); - - printf (" update_calendar_entry_in_repository " - "saving %s to desktop\n", - print_ical (obj)); - - success = cal_client_update_object (ctxt->client, obj); - - if (! success) { - WARN (_("Error while communicating with calendar server")); - } -} - - -static CalComponent * -ical_from_remote_record(GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - CalComponent *in_obj) -{ - CalComponent *obj; - // int i; - struct Appointment a; - struct icaltimetype now = icaltimetype_from_timet (time (NULL), FALSE); - - CalComponentText summary = {NULL, NULL}; - CalComponentText comment = {NULL, NULL}; - GSList *comment_list; - - g_return_val_if_fail(remote!=NULL,NULL); - memset(&a,0,sizeof(struct Appointment)); - unpack_Appointment(&a,remote->record,remote->length); - - printf (" ical_from_remote_record: " - "merging remote %s into local %s\n", - print_remote (remote), print_ical (in_obj)); - - - if (in_obj == NULL) { - obj = cal_component_new (); - } else { - obj = in_obj; - } - - summary.value = a.description; - cal_component_set_summary (obj, &summary); - - comment.value = a.note; - comment_list = g_slist_append (NULL, &comment); - cal_component_set_comment_list (obj, comment_list); - g_slist_free (comment_list); - - cal_component_set_new_vtype (obj, CAL_COMPONENT_EVENT); - - //obj->created = now; - cal_component_set_created (obj, &now); - //obj->last_mod = now; - cal_component_set_last_modified (obj, &now); - //obj->priority = 0; - //obj->transp = 0; - cal_component_set_transparency (obj, - /*CalComponentTransparency transp*/ - CAL_COMPONENT_TRANSP_NONE); - //obj->related = NULL; - - // obj->pilot_id = remote->ID; - // cal_component_set_pilot_status (obj, ICAL_PILOT_SYNC_NONE); - - /* - * Begin and end - */ - - if (a.event) - { - /* turn day-long events into a full day's appointment - FIXME: get settings from gnomecal */ - a.begin.tm_sec = 0; - a.begin.tm_min = 0; - a.begin.tm_hour = 0; - - a.end.tm_sec = 0; - a.end.tm_min =59; - a.end.tm_hour = 23; - } - - //obj->dtstart = mktime (&a.begin); - { - /* do i need to malloc these? FIX ME */ - struct icaltimetype dtstart_ictt; - CalComponentDateTime dtstart; - - dtstart_ictt = icaltimetype_from_timet (mktime (& a.begin), FALSE); - dtstart.value = &dtstart_ictt; - dtstart.tzid = NULL; - cal_component_set_dtstart (obj, &dtstart); - } - - //obj->dtend = mktime (&a.end); - { - /* do i need to malloc these? FIX ME */ - struct icaltimetype dtend_ictt; - CalComponentDateTime dtend; - - dtend_ictt = icaltimetype_from_timet (mktime (& a.end), FALSE); - dtend.value = &dtend_ictt; - dtend.tzid = NULL; - cal_component_set_dtend (obj, &dtend); - } - - - /* Special case: daily repetitions are converted to a multi-day event */ - /* This sucketh, a pilot event scheduled for dailyRepeat, freq 1, end on - whatever is cleary converted wrong - if (a.repeatType == repeatDaily){ - time_t newt = time_add_day (obj->dtend, a.repeatFrequency); - - obj->dtend = newt; - } - */ - -#warning "finish alarms here" -#if 0 - /* - * Alarm - */ - if (a.alarm){ - obj->aalarm.type = ALARM_AUDIO; - obj->aalarm.enabled = 1; - obj->aalarm.count = a.advance; - - switch (a.advanceUnits){ - case advMinutes: - obj->aalarm.units = ALARM_MINUTES; - break; - - case advHours: - obj->aalarm.units = ALARM_HOURS; - break; - - case advDays: - obj->aalarm.units = ALARM_DAYS; - break; - default: - } - } -#endif /* 0 */ - -#warning "finish recurrence here" -#if 0 - /* - * Recurrence - */ - if (a.repeatFrequency) { - obj->recur = g_new0 (Recurrence, 1); - - switch (a.repeatType){ - case repeatDaily: - /* - * In the Pilot daily repetitions are actually - * multi-day events - */ - obj->recur->type = RECUR_DAILY; - break; - - case repeatMonthlyByDate: - obj->recur->type = RECUR_MONTHLY_BY_DAY; - obj->recur->u.month_day = a.repeatFrequency; - break; - - case repeatWeekly: - { - int wd; - - obj->recur->type = RECUR_WEEKLY; - for (wd = 0; wd < 7; wd++) - if (a.repeatDays [wd]) - obj->recur->weekday |= 1 << wd; - - if (obj->recur->weekday == 0){ - struct tm tm = *localtime (&obj->dtstart); - - obj->recur->weekday = 1 << tm.tm_wday; - } - break; - } - - case repeatMonthlyByDay: - obj->recur->type = RECUR_MONTHLY_BY_POS; - obj->recur->u.month_pos = a.repeatFrequency; - obj->recur->weekday = (a.repeatDay / 7); - break; - - case repeatYearly: - obj->recur->type = RECUR_YEARLY_BY_DAY; - break; - - default: - g_assert_not_reached(); - } - - if (a.repeatForever) - obj->recur->duration = 0; - else - obj->recur->_enddate = mktime (&a.repeatEnd); - - obj->recur->interval = a.repeatFrequency; - } - - /* - * Load exception dates - */ - obj->exdate = NULL; - for (i = 0; i < a.exceptions; i++){ - time_t *t = g_new (time_t, 1); - - *t = mktime (&(a.exception [i])); - obj->exdate = g_list_prepend (obj->exdate, t); - } -#endif /* 0 */ - - // g_free (obj->class); - - if (remote->attr & dlpRecAttrSecret) - cal_component_set_classification (obj, CAL_COMPONENT_CLASS_PRIVATE); - else - cal_component_set_classification (obj, CAL_COMPONENT_CLASS_PUBLIC); - - free_Appointment(&a); - - return obj; -} - - -/* Code blatantly stolen from - * calendar-pilot-sync.c: - * - * (C) 1999 International GNOME Support - * - * Author: - * Miguel de Icaza (miguel@gnome-support.com) - * - */ -static gint -update_record (GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - CalComponent *obj; - struct Appointment a; - CalClientGetStatus status; - char *uid; - - CalComponentText summary = {NULL, NULL}; - CalComponentText comment = {NULL, NULL}; - GSList *comment_list; - - g_return_val_if_fail(remote!=NULL,-1); - - memset(&a,0,sizeof(struct Appointment)); - unpack_Appointment(&a,remote->record,remote->length); - - printf (" cal_client_get_uid_by_pilot_id... "); - - status = cal_client_get_uid_by_pilot_id (ctxt->client, - remote->ID, &uid); - if (status == CAL_CLIENT_GET_SUCCESS) { - printf (" succeeded with '%s'\n", uid); - printf (" cal_client_get_object... "); - status = cal_client_get_object (ctxt->client, uid, &obj); - } - - if (status != CAL_CLIENT_GET_SUCCESS) { - struct icaltimetype now = icaltimetype_from_timet (time (NULL), FALSE); - - printf ("failed, making a new one.\n"); - - obj = cal_component_new (); - - summary.value = a.description; - cal_component_set_summary (obj, &summary); - - comment.value = a.note; - comment_list = g_slist_append (NULL, &comment); - cal_component_set_comment_list (obj, comment_list); - g_slist_free (comment_list); - - // obj->type = ICAL_TODO; - cal_component_set_new_vtype (obj, CAL_COMPONENT_TODO); - // obj->new = TRUE; - // obj->created = now; - cal_component_set_created (obj, &now); - // obj->last_mod = now; - cal_component_set_last_modified (obj, &now); - // obj->priority = 0; - // obj->transp = 0; - cal_component_set_transparency (obj, - /*CalComponentTransparency transp*/ - CAL_COMPONENT_TRANSP_NONE); - // obj->related = NULL; - //obj->pilot_id = remote->ID; - //obj->pilot_status = ICAL_PILOT_SYNC_NONE; - cal_component_set_pilot_id (obj, remote->ID); - cal_component_set_pilot_status (obj, ICAL_PILOT_SYNC_NONE); - } else { - CalComponent *new_obj; - - printf ("succeeded %s\n", print_ical (obj)); - - new_obj = ical_from_remote_record (conduit, remote, obj); - obj = new_obj; - } - - /* update record on server */ - { - const char *uid; - unsigned long pilot_id; - - cal_component_get_uid (obj, &uid); - cal_component_get_pilot_id (obj, &pilot_id); - - update_calendar_entry_in_repository (conduit, obj, ctxt); - cal_client_update_pilot_id (ctxt->client, (char *) uid, pilot_id, - ICAL_PILOT_SYNC_NONE); - } - - /* - * Shutdown - */ - //ical_object_unref (obj); - free_Appointment(&a); - - return 0; -} - -static void -check_for_slow_setting (GnomePilotConduit *c, GCalConduitContext *ctxt) -{ - GList *uids; - unsigned long int entry_number; - - /* get all but TODOs, those are handled by the todo conduit */ - /* uids = cal_client_get_uids (ctxt->client, CALOBJ_TYPE_ANY); */ - uids = cal_client_get_uids (ctxt->client, - CALOBJ_TYPE_EVENT | - /*CALOBJ_TYPE_TODO |*/ - CALOBJ_TYPE_JOURNAL); - - entry_number = g_list_length (uids); - - /* If the local base is empty, do a slow sync */ - if (entry_number == 0) { - GnomePilotConduitStandard *conduit; - printf (" doing slow sync\n"); - conduit = GNOME_PILOT_CONDUIT_STANDARD (c); - gnome_pilot_conduit_standard_set_slow (conduit); - } else { - printf (" doing fast sync\n"); - } -} - -static gint -pre_sync (GnomePilotConduit *c, - GnomePilotDBInfo *dbi, - GCalConduitContext *ctxt) -{ - int l; - unsigned char *buf; - GnomePilotConduitStandardAbs *conduit; - - - /* - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_LEVEL_WARNING); - */ - - - conduit = GNOME_PILOT_CONDUIT_STANDARD_ABS(c); - - - printf ("---------------------------------------------------------\n"); - printf ("pre_sync: Calendar Conduit v.%s\n", CONDUIT_VERSION); - g_message ("Calendar Conduit v.%s", CONDUIT_VERSION); - - ctxt->client = NULL; - - if (start_calendar_server (GNOME_PILOT_CONDUIT_STANDARD_ABS(c), ctxt) != 0) { - WARN(_("Could not start gnomecal server")); - gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c), - _("Could not start gnomecal server")); - return -1; - } - - -#if 0 - /* Set the counters for the progress bar crap */ - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_ANY, &(ctxt->ev)); - - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_MODIFIED, &(ctxt->ev)); - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_updated_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_NEW, &(ctxt->ev)); - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_new_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_DELETED, &(ctxt->ev)); - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_deleted_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); -#endif /* 0 */ - - gtk_object_set_data(GTK_OBJECT(c),"dbinfo",dbi); - - /* load_records(c); */ - - buf = (unsigned char*)g_malloc(0xffff); - if((l=dlp_ReadAppBlock(dbi->pilot_socket,dbi->db_handle,0,(unsigned char *)buf,0xffff)) < 0) { - WARN(_("Could not read pilot's DateBook application block")); - WARN("dlp_ReadAppBlock(...) = %d",l); - gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c), - _("Could not read pilot's DateBook application block")); - return -1; - } - unpack_AppointmentAppInfo(&(ctxt->ai),buf,l); - g_free(buf); - - check_for_slow_setting(c,ctxt); - - return 0; -} - -/** - * Find (if possible) the local record which matches - * the given PilotRecord. - * if successfull, return non-zero and set *local to - * a non-null value (the located local record), - * otherwise return 0 and set *local = NULL; - */ - -static gint -match_record (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - printf ("match_record: looking for local copy of %s\n", - print_remote (remote)); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - - *local = find_record_in_repository(conduit,remote,ctxt); - - if (*local == NULL) - printf (" match_record: not found.\n"); - else - printf (" match_record: found, %s\n", print_local (*local)); - - if (*local==NULL) return -1; - return 0; -} - -/** - * Free the data allocated by a previous match_record call. - * If successfull, return non-zero and ser *local=NULL, otherwise - * return 0. - */ -static gint -free_match (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - GCalConduitContext *ctxt) -{ - printf ("free_match: %s\n", print_local (*local)); - - g_return_val_if_fail (local!=NULL, -1); - g_return_val_if_fail (*local!=NULL, -1); - - // ical_object_unref (GCAL_LOCALRECORD(*local)->ical); - g_free (*local); - - *local = NULL; - return 0; -} - -/* - Move to archive and set status to Nothing - */ -static gint -archive_local (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - GCalConduitContext *ctxt) -{ - printf ("archive_local: doing nothing with %s\n", print_local (local)); - - g_return_val_if_fail(local!=NULL,-1); - - return -1; -} - -/* - Store in archive and set status to Nothing - */ -static gint -archive_remote (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - printf ("archive_remote: doing nothing with %s\n", - print_local (local)); - - //g_return_val_if_fail(remote!=NULL,-1); - //g_return_val_if_fail(local!=NULL,-1); - - return -1; -} - -/* - Store and set status to Nothing - */ -static gint -store_remote (GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - printf ("store_remote: copying pilot record %s to desktop\n", - print_remote (remote)); - - g_return_val_if_fail(remote!=NULL,-1); - remote->attr = GnomePilotRecordNothing; - - return update_record(conduit,remote,ctxt); -} - -static gint -clear_status_archive_local (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - GCalConduitContext *ctxt) -{ - printf ("clear_status_archive_local: doing nothing\n"); - - g_return_val_if_fail(local!=NULL,-1); - - return -1; -} - -static gint -iterate (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - GCalConduitContext *ctxt) -{ - static GSList *events,*iterator; - static int hest; - - g_return_val_if_fail(local!=NULL,-1); - - if(*local==NULL) { - LOG ("beginning iteration"); - - events = get_calendar_objects(conduit,NULL,ctxt); - hest = 0; - - if(events!=NULL) { - LOG ("iterating over %d records", g_slist_length (events)); - *local = g_new0(GCalLocalRecord,1); - - local_record_from_ical_uid(*local,(gchar*)events->data,ctxt); - iterator = events; - } else { - LOG ("no events"); - (*local) = NULL; - } - } else { - hest++; - if(g_slist_next(iterator)==NULL) { - GSList *l; - - LOG ("ending"); - /** free stuff allocated for iteration */ - g_free((*local)); - - LOG ("iterated over %d records", hest); - for(l=events;l;l=l->next) - g_free(l->data); - - g_slist_free(events); - - /* ends iteration */ - (*local) = NULL; - return 0; - } else { - iterator = g_slist_next(iterator); - local_record_from_ical_uid(*local,(gchar*)(iterator->data),ctxt); - } - } - return 1; -} - - -static gint -iterate_specific (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - gint flag, - gint archived, - GCalConduitContext *ctxt) -{ - (*local) = NULL; - - /* debugging */ - { - gchar *tmp; - switch (flag) { - case GnomePilotRecordNothing: - tmp = g_strdup("RecordNothing"); break; - case GnomePilotRecordModified: - tmp = g_strdup("RecordModified"); break; - case GnomePilotRecordDeleted: - tmp = g_strdup("RecordDeleted"); break; - case GnomePilotRecordNew: - tmp = g_strdup("RecordNew"); break; - default: tmp = g_strdup_printf("0x%x",flag); break; - } - printf ("\niterate_specific: (flag = %s)... ", tmp); - g_free(tmp); - } - - - g_return_val_if_fail(local!=NULL,-1); - - /* iterate until a record meets the criteria */ - while (gnome_pilot_conduit_standard_abs_iterate (conduit, - (LocalRecord**)local)) { - if((*local)==NULL) break; - if(archived && ((*local)->local.archived==archived)) break; - if(((*local)->local.attr == flag)) break; - } - - if ((*local)) { - printf (" found %s\n", print_local (*local)); - } else { - printf (" no more found.\n"); - } - - return (*local)==NULL?0:1; -} - - -static gint -purge (GnomePilotConduitStandardAbs *conduit, - GCalConduitContext *ctxt) -{ - printf ("purge: doing nothing\n"); - - /* HEST, gem posterne her */ - - return -1; -} - - -static char *gnome_pilot_status_to_string (gint status) -{ - switch(status) { - case GnomePilotRecordPending: return "GnomePilotRecordPending"; - case GnomePilotRecordNothing: return "GnomePilotRecordNothing"; - case GnomePilotRecordDeleted: return "GnomePilotRecordDeleted"; - case GnomePilotRecordNew: return "GnomePilotRecordNew"; - case GnomePilotRecordModified: return "GnomePilotRecordModified"; - } - - return "Unknown"; -} - - -static gint -set_status (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - gint status, - GCalConduitContext *ctxt) -{ - gboolean success; - iCalPilotState new_state; - - printf ("set_status: %s status is now '%s'\n", - print_local (local), - gnome_pilot_status_to_string (status)); - - g_return_val_if_fail(local!=NULL,-1); - g_assert(local->ical!=NULL); - - local->local.attr = status; - switch(status) { - case GnomePilotRecordPending: - case GnomePilotRecordNothing: - new_state = ICAL_PILOT_SYNC_NONE; - break; - case GnomePilotRecordDeleted: - break; - case GnomePilotRecordNew: - case GnomePilotRecordModified: - new_state = ICAL_PILOT_SYNC_MOD; - break; - } - - if (status == GnomePilotRecordDeleted) { - const char *uid; - cal_component_get_uid (local->ical, &uid); - success = cal_client_remove_object (ctxt->client, uid); - } else { - const char *uid; - unsigned long pilot_id; - - cal_component_get_uid (local->ical, &uid); - cal_component_get_pilot_id (local->ical, &pilot_id); - - success = cal_client_update_object (ctxt->client, local->ical); - cal_client_update_pilot_id (ctxt->client, (char *) uid, - pilot_id, new_state); - } - - if (! success) { - WARN (_("Error while communicating with calendar server")); - } - - return 0; -} - -static gint -set_archived (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - gint archived, - GCalConduitContext *ctxt) -{ - printf ("set_archived: %s archived flag is now '%d'\n", - print_local (local), archived); - - g_return_val_if_fail(local!=NULL,-1); - g_assert(local->ical!=NULL); - - local->local.archived = archived; - update_calendar_entry_in_repository(conduit,local->ical,ctxt); - /* FIXME: This should move the entry into a speciel - calendar file, eg. Archive, or (by config option), simply - delete it */ - return 0; -} - -static gint -set_pilot_id (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - guint32 ID, - GCalConduitContext *ctxt) -{ - const char *uid; - unsigned long int pilot_status; - - printf ("set_pilot_id: %s pilot ID is now '%d'\n", - print_local (local), ID); - - g_return_val_if_fail(local!=NULL,-1); - g_assert(local->ical!=NULL); - - local->local.ID = ID; - cal_component_set_pilot_id (local->ical, ID); - - cal_component_get_uid (local->ical, &uid); - cal_component_get_pilot_status (local->ical, &pilot_status); - - cal_client_update_pilot_id (ctxt->client, - (char *) uid, - local->local.ID, - pilot_status); - - return 0; -} - -static gint -transmit (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord **remote, - GCalConduitContext *ctxt) -{ - PilotRecord *p; - //int daycount; - - CalComponentText summary; - GSList *comment_list = NULL; - CalComponentText *comment; - - printf ("transmit: encoding local %s\n", print_local (local)); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - g_assert(local->ical!=NULL); - - p = g_new0(PilotRecord,1); - - p->ID = local->local.ID; - p->attr = local->local.attr; - p->archived = local->local.archived; - p->secret = local->local.secret; - - local->a = g_new0(struct Appointment,1); - - local->a->event = 0; /* if no start time, leave at 1 */ - //local->a->begin = *localtime(&local->ical->dtstart); - { - CalComponentDateTime dtstart; - time_t dtstart_time_t; - - cal_component_get_dtstart (local->ical, &dtstart); - dtstart_time_t = time_from_icaltimetype (*dtstart.value); - - local->a->begin = *localtime (&dtstart_time_t); - } - - //local->a->end = *localtime(&local->ical->dtend); - { - CalComponentDateTime dtend; - time_t dtend_time_t; - - cal_component_get_dtend (local->ical, &dtend); - dtend_time_t = time_from_icaltimetype (*dtend.value); - - local->a->end = *localtime (&dtend_time_t); - } - -#warning "finish alarm and recurrence here" -#if 0 - /* set the Audio Alarm parameters */ - if(local->ical->aalarm.enabled) { - local->a->alarm = 1; - local->a->advance = local->ical->aalarm.count; - switch(local->ical->aalarm.units) { - case ALARM_MINUTES: - local->a->advanceUnits = advMinutes; - break; - case ALARM_HOURS: - local->a->advanceUnits = advHours; - break; - case ALARM_DAYS: - local->a->advanceUnits = advDays; - break; - } - } else { - local->a->alarm = 0; - local->a->advance = 0; - local->a->advanceUnits = advMinutes; - } - - /* set the recurrence parameters */ - if (local->ical->recur != NULL) { - switch (local->ical->recur->type) { - case RECUR_DAILY: - local->a->repeatType = repeatDaily; - break; - case RECUR_WEEKLY: - local->a->repeatType = repeatWeekly; - break; - case RECUR_MONTHLY_BY_POS: - local->a->repeatType = repeatMonthlyByDate; - break; - case RECUR_MONTHLY_BY_DAY: - local->a->repeatType = repeatMonthlyByDay; - break; - case RECUR_YEARLY_BY_MONTH: - local->a->repeatType = repeatYearly; - break; - case RECUR_YEARLY_BY_DAY: - local->a->repeatType = repeatYearly; - break; - } - if (local->ical->recur->duration == 0) { - local->a->repeatForever = 1; - } else { - local->a->repeatForever = 0; - local->a->repeatEnd = *localtime(&local->ical->recur->_enddate); - } - local->a->repeatFrequency = local->ical->recur->interval; - - - for ( daycount=0; daycount<7; daycount++ ) { - if (local->ical->recur->weekday & (1 << daycount)) - local->a->repeatDays[daycount] = 1; - } - } else { - local->a->repeatType = repeatNone; - local->a->repeatForever = 0; - local->a->repeatEnd = local->a->end; - local->a->repeatFrequency = 0; - local->a->repeatDay = dom1stSun; - local->a->repeatDays[0] = 0; - local->a->repeatDays[1] = 0; - local->a->repeatDays[2] = 0; - local->a->repeatDays[3] = 0; - local->a->repeatDays[4] = 0; - local->a->repeatDays[5] = 0; - local->a->repeatDays[6] = 0; - local->a->repeatWeekstart = 0; - local->a->exceptions = 0; - local->a->exception = NULL; - } -#endif /* 0 */ - - /* STOP: don't replace these with g_strdup, since free_Appointment - uses free to deallocte */ - - cal_component_get_summary (local->ical, &summary); - local->a->note = - //local->ical->comment==NULL?NULL:strdup(local->ical->comment); - strdup ((char *) summary.value); - - /* local->a->description = - local->ical->summary==NULL?NULL:strdup(local->ical->summary); */ - - cal_component_get_comment_list (local->ical, &comment_list); - if (comment_list) { - comment = (CalComponentText *) comment_list->data; - if (comment && comment->value) - local->a->description = strdup (comment->value); - else - local->a->description = NULL; - } else { - local->a->note = NULL; - } - - /* Generate pilot record structure */ - p->record = g_new0(char,0xffff); - p->length = pack_Appointment(local->a,p->record,0xffff); - -#if 0 - /* This is some debug code that hexdumps the calendar entry... - You won't need this. */ - { - int x,y; - g_message("calconduit: new item from %s to %s",asctime(&(local->a->begin)),asctime(&(local->a->end))); - - g_message("local->a->note = %s",local->a->note); - g_message("local->a->description = %s",local->a->description); - g_message("sizeof(p->record) = %d, length is %d",sizeof(p->record),p->length); - for(x=0;xlength;x+=32) { - for(y=x;yrecord[y]<33 || p->record[y]>128) - printf("%02X",p->record[y]); - else - printf(" %c",p->record[y]); - printf("\n"); - } - } -#endif - - *remote = p; - - return 0; -} - -static gint -free_transmit (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord **remote, - GCalConduitContext *ctxt) -{ - LOG ("entering free_transmit"); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - - /* free_Appointment(local->a); */ /* FIX ME is this needed? */ - g_free((*remote)->record); - *remote = NULL; - return 0; -} - - -static gint -compare (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - /* used by the quick compare */ - PilotRecord *remoteOfLocal; - int err; - int retval; - - /* used by the tedious compare */ - //struct Appointment a; - - printf ("compare: local=%s remote=%s...\n", - print_local (local), print_remote (remote)); - - g_return_val_if_fail (local!=NULL,-1); - g_return_val_if_fail (remote!=NULL,-1); -#if 1 - err = transmit(conduit,local,&remoteOfLocal,ctxt); - if (err != 0) return err; - - retval = 0; - if (remote->length == remoteOfLocal->length) { - if (memcmp (remoteOfLocal->record, - remote->record, remote->length)!=0) { - printf (" compare failed on contents\n"); - retval = 1; - } - } else { - g_message("compare failed on length"); - retval = 1; - } - - - if (retval == 0) { - printf (" match.\n"); - } else { - /* debug spew */ - printf (" local:%s\n", print_remote (remoteOfLocal)); - printf (" remote:%s\n", print_remote (remote)); - } - - free_transmit(conduit,local,&remoteOfLocal,ctxt); - return retval; - -#else - /** FIXME: All the { LOG("yadayada"); return 1; } bloat is for debug purposes. - Once this is known to work, compact to return 1;'s */ - - /* Check record attributes */ - if (local->local.ID != remote->ID) { - LOG("failed local->local.ID == remote->ID"); - return 1; - } - if (local->local.attr != remote->attr) { - LOG("failed local->local.attr == remote->attr"); - return 1; - } - if (local->local.archived != remote->archived) { - LOG("failed local->local.archived == remote->archived"); - return 1; - } - if (local->local.secret != remote->secret) { - LOG("failed local->local.secret == remote->secret"); - return 1; - } - - unpack_Appointment(&a,remote->record,remote->length); - - /* Check records begin/end time */ - if (a.event==0) { -/* FIXME - if (a.begin != *localtime(&local->ical->dtstart)) { - LOG("a.begin == *localtime(&local->ical->dtstart)"); - return 1; - } - if (a.end != *localtime(&local->ical->dtend)) { - LOG("a.end == *localtime(&local->ical->dtend)"); - return 1; - } -*/ - } else { - LOG("failed local->a.event != 0, unsupported by gnomecal"); - return 1; - } - - /* Check records alarm settings */ - if(a.alarm == 1) { - if (local->ical->aalarm.enabled == 1) { - if (a.advance != local->ical->aalarm.count) { - LOG("failed a.advance == local->ical->aalarm.count"); - return 1; - } - switch(local->ical->aalarm.units) { - case ALARM_MINUTES: - if (a.advanceUnits != advMinutes) { - LOG("failed local->ical->aalarm.units == a.advanceUnits"); - return 1; - } - break; - case ALARM_HOURS: - if (a.advanceUnits != advHours) { - LOG("failed local->ical->aalarm.units == a.advanceUnits"); - return 1; - } - break; - case ALARM_DAYS: - if (a.advanceUnits != advDays) { - LOG("failed local->ical->aalarm.units == a.advanceUnits"); - return 1; - } - break; - } - } else { - LOG("failed a.alarm == 1 && local->ical->aalarm.enabled == 1"); - return 1; - } - } else if (local->ical->aalarm.enabled == 1) { - LOG("failed a.alarm != 1 && local->ical->aalarm.enabled != 1"); - return 1; - } - - /* Check records recurrence settings */ - /* If this code is broken, a more or less safe although not efficient - approach is (other the fixing the bug), if either has recurrence, - return 1, thus failing the comparision */ - if (local->ical->recur != NULL) { - if (a.repeatType == repeatNone) { - LOG("failed: local->ical->recur != NULL && a.repeatType != repeatNone"); - return 1; - } - switch (local->ical->recur->type) { - case RECUR_DAILY: - if (a.repeatType != repeatDaily) { - LOG("failed a.repeatType == repeatDaily"); - return 1; } - break; - case RECUR_WEEKLY: - if (a.repeatType != repeatWeekly) { - LOG("failed a.repeatType == repeatWeekly"); - return 1; } - break; - case RECUR_MONTHLY_BY_POS: - if (a.repeatType != repeatMonthlyByDate) { - LOG("failed a.repeatType == repeatMonthlyByDate"); - return 1; } - break; - case RECUR_MONTHLY_BY_DAY: - if (a.repeatType != repeatMonthlyByDay) { - LOG("failed a.repeatType == repeatMonthlyByDay"); - return 1; } - break; - case RECUR_YEARLY_BY_MONTH: - if (a.repeatType != repeatYearly) { - LOG("failed a.repeatType == repeatYearly"); - return 1; } - break; - case RECUR_YEARLY_BY_DAY: - if (a.repeatType != repeatYearly) { - LOG("failed a.repeatType == repeatYearly"); - return 1; } - break; - } - if (local->ical->recur->duration == 0) { - if(a.repeatForever != 1) { - LOG("failed local->ical->recur->duration == 0 && a.repeatForever == 1"); - return 1; - } - } else { - if(a.repeatForever != 0) { - LOG("failed local->ical->recur->duration != 0 && ! a.repeatForever == 0"); - return 1; - } -/* FIXME - if(a.repeatEnd != *localtime(&local->ical->recur->_enddate)) { - LOG("failed a.repeatEnd == *localtime(&local->ical->recur->_enddate)"); - return 1; - } -*/ - } - if (a.repeatFrequency != local->ical->recur->interval) { - LOG("failed a.repeatFrequency == local->ical->recur->interval"); - return 1; - } - for (daycount = 0; daycount<7; daycount++) { - if(local->ical->recur->weekday & (1<ical->recur->weekday & (1<ical->recur->weekday &! (1<ical->recur == NULL && a.repeatType == repeatNone"); - return 1; - } - - /* check the note and description */ - if(a.note!=NULL) { - if(local->ical->comment==NULL) { - LOG("failed a.note != NULL && local->ical->coment != NULL"); - return 1; - } - if(strcmp(local->ical->comment,a.note)!=0) { - LOG("failed strcmp(local->ical->comment,a.note)==0"); - return 1; - } - } if(local->ical->comment!=NULL) { - LOG("failed a.note == NULL && local->ical->coment == NULL"); - return 1; - } - if(a.description!=NULL) { - if(local->ical->summary==NULL) { - LOG("failed a.description != NULL && local->ical->coment != NULL"); - return 1; - } - if(strcmp(local->ical->summary,a.description)!=0) { - LOG("failed strcmp(local->ical->summary,a.description)==0"); - return 1; - } - } if(local->ical->summary!=NULL) { - LOG("failed a.description == NULL && local->ical->coment == NULL"); - return 1; - } -#endif - return 0; -} - -static gint -compare_backup (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - printf ("compare_backup: doing nothing\n"); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - - return -1; -} - - -static gint -delete_all (GnomePilotConduitStandardAbs *conduit, - GCalConduitContext *ctxt) -{ - GSList *events,*it; - gboolean error; - gboolean success; - - events = get_calendar_objects(conduit,&error,ctxt); - - printf ("delete_all: deleting all objects from desktop\n"); - - if (error == FALSE) return -1; - for (it=events; it; it = g_slist_next (it)) { - success = cal_client_remove_object (ctxt->client, it->data); - - if (!success) - INFO ("Object did not exist"); - - g_free (it->data); - } - - g_slist_free (events); - return -1; -} - - -static ORBit_MessageValidationResult -accept_all_cookies (CORBA_unsigned_long request_id, - CORBA_Principal *principal, - CORBA_char *operation) -{ - /* allow ALL cookies */ - return ORBIT_MESSAGE_ALLOW_ALL; -} - - -GnomePilotConduit * -conduit_get_gpilot_conduit (guint32 pilotId) -{ - GtkObject *retval; - GCalConduitCfg *cfg; - GCalConduitContext *ctxt; - - printf ("in calendar's conduit_get_gpilot_conduit\n"); - - /* we need to find wombat with oaf, so make sure oaf - is initialized here. once the desktop is converted - to oaf and gpilotd is built with oaf, this can go away */ - if (! oaf_is_initialized ()) - { - char *argv[ 1 ] = {"hi"}; - oaf_init (1, argv); - - if (bonobo_init (CORBA_OBJECT_NIL, - CORBA_OBJECT_NIL, - CORBA_OBJECT_NIL) == FALSE) - g_error (_("Could not initialize Bonobo")); - - ORBit_set_request_validation_handler (accept_all_cookies); - } - - - retval = gnome_pilot_conduit_standard_abs_new ("DatebookDB", 0x64617465); - g_assert (retval != NULL); - gnome_pilot_conduit_construct(GNOME_PILOT_CONDUIT(retval),"GnomeCalConduit"); - - gcalconduit_load_configuration(&cfg,pilotId); - gtk_object_set_data(retval,"gcalconduit_cfg",cfg); - - gcalconduit_new_context(&ctxt,cfg); - gtk_object_set_data(GTK_OBJECT(retval),"gcalconduit_context",ctxt); - - gtk_signal_connect (retval, "match_record", (GtkSignalFunc) match_record, ctxt); - gtk_signal_connect (retval, "free_match", (GtkSignalFunc) free_match, ctxt); - gtk_signal_connect (retval, "archive_local", (GtkSignalFunc) archive_local, ctxt); - gtk_signal_connect (retval, "archive_remote", (GtkSignalFunc) archive_remote, ctxt); - gtk_signal_connect (retval, "store_remote", (GtkSignalFunc) store_remote, ctxt); - gtk_signal_connect (retval, "clear_status_archive_local", (GtkSignalFunc) clear_status_archive_local, ctxt); - gtk_signal_connect (retval, "iterate", (GtkSignalFunc) iterate, ctxt); - gtk_signal_connect (retval, "iterate_specific", (GtkSignalFunc) iterate_specific, ctxt); - gtk_signal_connect (retval, "purge", (GtkSignalFunc) purge, ctxt); - gtk_signal_connect (retval, "set_status", (GtkSignalFunc) set_status, ctxt); - gtk_signal_connect (retval, "set_archived", (GtkSignalFunc) set_archived, ctxt); - gtk_signal_connect (retval, "set_pilot_id", (GtkSignalFunc) set_pilot_id, ctxt); - gtk_signal_connect (retval, "compare", (GtkSignalFunc) compare, ctxt); - gtk_signal_connect (retval, "compare_backup", (GtkSignalFunc) compare_backup, ctxt); - gtk_signal_connect (retval, "free_transmit", (GtkSignalFunc) free_transmit, ctxt); - gtk_signal_connect (retval, "delete_all", (GtkSignalFunc) delete_all, ctxt); - gtk_signal_connect (retval, "transmit", (GtkSignalFunc) transmit, ctxt); - gtk_signal_connect (retval, "pre_sync", (GtkSignalFunc) pre_sync, ctxt); - - return GNOME_PILOT_CONDUIT (retval); -} - -void -conduit_destroy_gpilot_conduit (GnomePilotConduit *conduit) -{ - GCalConduitCfg *cc; - GCalConduitContext *ctxt; - - cc = GET_GCALCONFIG(conduit); - ctxt = GET_GCALCONTEXT(conduit); - - if (ctxt->client != NULL) { - gtk_object_unref (GTK_OBJECT (ctxt->client)); - //pi_close (ctxt->link); - //GNOME_Calendar_Repository_done (ctxt->calendar, &(ctxt->ev)); - } - - gcalconduit_destroy_configuration (&cc); - - gcalconduit_destroy_context (&ctxt); - - gtk_object_destroy (GTK_OBJECT (conduit)); -} diff --git a/calendar/conduits/calendar/calendar-conduit.h b/calendar/conduits/calendar/calendar-conduit.h deleted file mode 100644 index a8a1c81a50..0000000000 --- a/calendar/conduits/calendar/calendar-conduit.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* $Id$ */ - -#ifndef __CALENDAR_CONDUIT_H__ -#define __CALENDAR_CONDUIT_H__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef USING_OAF -#include -#else -#include -#endif - - -/* This is the local record structure for the GnomeCal conduit. */ -typedef struct _GCalLocalRecord GCalLocalRecord; -struct _GCalLocalRecord { - /* The stuff from gnome-pilot-conduit-standard-abs.h - Must be first in the structure, or instances of this - structure cannot be used by gnome-pilot-conduit-standard-abs. - */ - LocalRecord local; - /* The corresponding iCal object, as found by GnomeCal. */ - CalComponent *ical; - /* pilot-link appointment structure, used for implementing Transmit. */ - struct Appointment *a; -}; -#define GCAL_LOCALRECORD(s) ((GCalLocalRecord*)(s)) - -/* This is the configuration of the GnomeCal conduit. */ -typedef struct _GCalConduitCfg GCalConduitCfg; -struct _GCalConduitCfg { - gboolean open_secret; - guint32 pilotId; - GnomePilotConduitSyncType sync_type; /* only used by capplet */ -}; -#define GET_GCALCONFIG(c) ((GCalConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"gcalconduit_cfg")) - -/* This is the context for all the GnomeCal conduit methods. */ -typedef struct _GCalConduitContext GCalConduitContext; -struct _GCalConduitContext { - struct AppointmentAppInfo ai; - GCalConduitCfg *cfg; - CalClient *client; - CORBA_Environment ev; - CORBA_ORB orb; - gboolean calendar_load_tried; - gboolean calendar_load_success; - - char *calendar_file; -}; -#define GET_GCALCONTEXT(c) ((GCalConduitContext*)gtk_object_get_data(GTK_OBJECT(c),"gcalconduit_context")) - - -/* Given a GCalConduitCfg*, allocates the structure and - loads the configuration data for the given pilot. - this is defined in the header file because it is used by - both calendar-conduit and calendar-conduit-control-applet, - and we don't want to export any symbols we don't have to. */ -static void -gcalconduit_load_configuration(GCalConduitCfg **c, - guint32 pilotId) -{ - gchar prefix[256]; - g_snprintf(prefix,255,"/gnome-pilot.d/calendard-conduit/Pilot_%u/",pilotId); - - *c = g_new0(GCalConduitCfg,1); - g_assert(*c != NULL); - gnome_config_push_prefix(prefix); - (*c)->open_secret = gnome_config_get_bool("open_secret=FALSE"); - (*c)->sync_type = GnomePilotConduitSyncTypeCustom; /* set in capplets main */ - gnome_config_pop_prefix(); - - (*c)->pilotId = pilotId; -} - - -#endif __CALENDAR_CONDUIT_H__ diff --git a/calendar/conduits/calendar/calendar.conduit.in b/calendar/conduits/calendar/calendar.conduit.in deleted file mode 100644 index fb48e00584..0000000000 --- a/calendar/conduits/calendar/calendar.conduit.in +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/calendar/conduits/todo/.cvsignore b/calendar/conduits/todo/.cvsignore deleted file mode 100644 index 2820c43c3b..0000000000 --- a/calendar/conduits/todo/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -Makefile.in -Makefile -.deps -.libs -*.lo -*.la -todo-conduit-control-applet -todo.conduit diff --git a/calendar/conduits/todo/Makefile.am b/calendar/conduits/todo/Makefile.am deleted file mode 100644 index 6801c6150d..0000000000 --- a/calendar/conduits/todo/Makefile.am +++ /dev/null @@ -1,81 +0,0 @@ -# -# -# - -INCLUDES = \ - -I$(top_srcdir)/calendar \ - $(GNOME_PILOT_CFLAGS) - -file_conduitsdir=$(libdir)/gnome-pilot/conduits - -bin_PROGRAMS = todo-conduit-control-applet - -todo_conduit_control_applet_SOURCES = todo-conduit-control-applet.c - -todo_conduit_control_applet_LDADD = \ - $(CAPPLET_LIBS) \ - $(GNOME_LIBDIR) \ - -lgpilotdcm \ - -lgpilotd \ - -lgpilotdconduit \ - $(GNOME_CAPPLET_LIBS) \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(GNOME_XML_LIB) \ - $(GNOMEUI_LIBS) \ - $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ - $(INTLLIBS) - - -# $(top_builddir)/libgpilotdCM/libgpilotdcm.la \ -# $(top_builddir)/gpilotd/libgpilotd.la \ -# $(top_builddir)/gpilotd/libgpilotdconduit.la \ - - -# todo_conduit -todo_conduitsdir=$(libdir)/gnome-pilot/conduits -todo_conduits_LTLIBRARIES = libtodo_conduit.la - -libtodo_conduit_la_SOURCES = \ - todo-conduit.c - -# todo-conduit.c: my_gnomecal_idl - -todo.conduit: todo.conduit.in Makefile - sed -e 's^\@prefix\@^$(prefix)^g' < $(srcdir)/todo.conduit.in > todo.conduit.tmp \ - && mv todo.conduit.tmp todo.conduit - -# -# conduit -# - -libtodo_conduit_la_LDFLAGS = \ - -rpath $(libdir) - -libtodo_conduit_la_LIBADD = \ - $(top_builddir)/calendar/cal-client/libcal-client-static.la \ - $(top_builddir)/calendar/cal-util/libcal-util-static.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/libical/src/libical/libical-static.la \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(PISOCK_LIBDIR) $(PISOCK_LIBS) \ - $(GNOME_LIBDIR) \ - $(GNOME_LIBS) - -ccenterdir = $(datadir)/control-center -ccenterPalmPilotdir = $(ccenterdir)/Peripherals -ccenterConduitsdir = $(ccenterPalmPilotdir)/Conduits -ccenterConduits_DATA = todo-conduit-control-applet.desktop - -panelConduitsdir = $(datadir)/gnome/apps/Settings/Peripherals/Conduits -panelConduits_DATA = $(ccenterConduits_DATA) - -Conduitdir = $(datadir)/gnome-pilot/conduits/ -Conduit_DATA = todo.conduit - -EXTRA_DIST = \ - todo.conduit.in \ - $(ccenterConduits_DATA) - -install-data-local: - $(mkinstalldirs) $(ccenterConduitsdir) - $(mkinstalldirs) $(Conduitdir) diff --git a/calendar/conduits/todo/todo-conduit-control-applet.c b/calendar/conduits/todo/todo-conduit-control-applet.c deleted file mode 100644 index 188aadc16e..0000000000 --- a/calendar/conduits/todo/todo-conduit-control-applet.c +++ /dev/null @@ -1,386 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* Control applet ("capplet") for the gnome-pilot todo conduit, */ -/* based on */ -/* gpilotd control applet ('capplet') for use with the GNOME control center */ - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#include "todo-conduit.h" - - -/* tell changes callbacks to ignore changes or not */ -static gboolean ignore_changes=FALSE; - -/* capplet widget */ -static GtkWidget *capplet=NULL; - -/* host/device/pilot configuration windows */ -GtkWidget *cfgOptionsWindow=NULL; -GtkWidget *cfgStateWindow=NULL; -GtkWidget *dialogWindow=NULL; - -gboolean activated,org_activation_state; -GnomePilotConduitManagement *conduit; -GnomePilotConduitConfig *conduit_config; -GCalConduitCfg *origState = NULL; -GCalConduitCfg *curState = NULL; - -static void doTrySettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg); -static void doRevertSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg); -static void doSaveSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg); - -//static void readStateCfg (GtkWidget *w, GCalConduitCfg *c); -static void setStateCfg (GtkWidget *w, GCalConduitCfg *c); - -gint pilotId; -CORBA_Environment ev; -static GnomePilotClient *gpc; - - - -/* This array must be in the same order as enumerations - in GnomePilotConduitSyncType as they are used as index. - Custom type implies Disabled state. -*/ -static gchar* sync_options[] ={ N_("Disabled"), - N_("Synchronize"), - N_("Copy From Pilot"), - N_("Copy To Pilot"), - N_("Merge From Pilot"), - N_("Merge To Pilot")}; -#define SYNC_OPTIONS_COUNT 6 - - - - -/* Saves the configuration data. */ -static void -gcalconduit_save_configuration(GCalConduitCfg *c) -{ - gchar prefix[256]; - - g_snprintf(prefix,255,"/gnome-pilot.d/todo-conduit/Pilot_%u/",c->pilotId); - - gnome_config_push_prefix(prefix); - gnome_config_set_bool ("open_secret", c->open_secret); - gnome_config_pop_prefix(); - - gnome_config_sync(); - gnome_config_drop_all(); -} - -/* Creates a duplicate of the configuration data */ -static GCalConduitCfg* -gcalconduit_dupe_configuration(GCalConduitCfg *c) { - GCalConduitCfg *retval; - g_return_val_if_fail(c!=NULL,NULL); - retval = g_new0(GCalConduitCfg,1); - retval->sync_type = c->sync_type; - retval->open_secret = c->open_secret; - retval->pilotId = c->pilotId; - return retval; -} - - -static void -doTrySettings(GtkWidget *widget, GCalConduitCfg *c) -{ - /* - readStateCfg (cfgStateWindow, curState); - if (activated) - gnome_pilot_conduit_config_enable (conduit_config, GnomePilotConduitSyncTypeCustom); - else - gnome_pilot_conduit_config_disable (conduit_config); - */ - - if (c->sync_type!=GnomePilotConduitSyncTypeCustom) - gnome_pilot_conduit_config_enable_with_first_sync (conduit_config, - c->sync_type, - c->sync_type, - TRUE); - else - gnome_pilot_conduit_config_disable (conduit_config); - - gcalconduit_save_configuration (c); -} - - -static void -doSaveSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg) -{ - doTrySettings(widget, GCalConduitCfg); - gcalconduit_save_configuration(GCalConduitCfg); -} - - -static void -doCancelSettings(GtkWidget *widget, GCalConduitCfg *c) -{ - doSaveSettings (widget, c); -} - - -static void -doRevertSettings(GtkWidget *widget, GCalConduitCfg *GCalConduitCfg) -{ - activated = org_activation_state; - setStateCfg (cfgStateWindow, curState); -} - -static void -about_cb (GtkWidget *widget, gpointer data) -{ - GtkWidget *about; - const gchar *authors[] = {_("Eskil Heyn Olsen "),NULL}; - - about = gnome_about_new (_("Gpilotd todo conduit"), VERSION, - _("(C) 1998 the Free Software Foundation"), - authors, - _("Configuration utility for the todo conduit.\n"), - _("gnome-unknown.xpm")); - gtk_widget_show (about); - - return; -} - - -/* called by the sync_type GtkOptionMenu */ -static void -sync_action_selection(GtkMenuShell *widget, gpointer unused) -{ - if (!ignore_changes) { - capplet_widget_state_changed(CAPPLET_WIDGET (capplet), TRUE); - } -} - - -/* called by the sync_type GtkOptionMenu */ -static void -activate_sync_type(GtkMenuItem *widget, gpointer data) -{ - curState->sync_type = GPOINTER_TO_INT(data); - if(!ignore_changes) - capplet_widget_state_changed(CAPPLET_WIDGET(capplet), TRUE); -} - - -static GtkWidget -*createStateCfgWindow(void) -{ - GtkWidget *vbox, *table; - GtkWidget *label; - GtkWidget *optionMenu,*menuItem; - GtkMenu *menu; - gint i; - - vbox = gtk_vbox_new(FALSE, GNOME_PAD); - - table = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, GNOME_PAD); - - label = gtk_label_new(_("Synchronize Action")); - gtk_box_pack_start(GTK_BOX(table), label, FALSE, FALSE, GNOME_PAD); - - optionMenu=gtk_option_menu_new(); - gtk_object_set_data(GTK_OBJECT(vbox), "conduit_state", optionMenu); - menu = GTK_MENU(gtk_menu_new()); - - for (i=0; isync_type); - ignore_changes = FALSE; -} - - -#if 0 -static void -readStateCfg (GtkWidget *w, GCalConduitCfg *c) -{ - /* - GtkWidget *button; - button = gtk_object_get_data(GTK_OBJECT(cfg), "conduit_on_off"); - g_assert(button!=NULL); - activated = GTK_TOGGLE_BUTTON(button)->active; - */ -} -#endif /* 0 */ - - -static void -pilot_capplet_setup(void) -{ - GtkWidget *frame, *table; - - capplet = capplet_widget_new(); - - table = gtk_table_new(1, 2, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), GNOME_PAD); - gtk_container_add(GTK_CONTAINER(capplet), table); - - frame = gtk_frame_new(_("Conduit state")); - gtk_container_border_width(GTK_CONTAINER(frame), GNOME_PAD_SMALL); - gtk_table_attach_defaults(GTK_TABLE(table), frame, 0, 1, 0, 1); - cfgStateWindow = createStateCfgWindow(); - gtk_container_add(GTK_CONTAINER(frame), cfgStateWindow); - - gtk_signal_connect(GTK_OBJECT(capplet), "try", - GTK_SIGNAL_FUNC(doTrySettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "revert", - GTK_SIGNAL_FUNC(doRevertSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "ok", - GTK_SIGNAL_FUNC(doSaveSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "cancel", - GTK_SIGNAL_FUNC(doCancelSettings), curState); - gtk_signal_connect(GTK_OBJECT(capplet), "help", - GTK_SIGNAL_FUNC(about_cb), NULL); - - - setStateCfg (cfgStateWindow, curState); - - gtk_widget_show_all (capplet); -} - - -static void -run_error_dialog(gchar *mesg,...) -{ - char tmp[80]; - va_list ap; - - va_start(ap,mesg); - vsnprintf(tmp,79,mesg,ap); - dialogWindow = gnome_message_box_new(mesg,GNOME_MESSAGE_BOX_ERROR,GNOME_STOCK_BUTTON_OK,NULL); - gnome_dialog_run_and_close(GNOME_DIALOG(dialogWindow)); - va_end(ap); -} - - -static gint -get_pilot_id_from_gpilotd() -{ - GList *pilots=NULL; - gint pilot; - int i,err; - - i=0; - /* we don't worry about leaking here, so pilots isn't freed */ - switch(err = gnome_pilot_client_get_pilots(gpc,&pilots)) { - case GPILOTD_OK: { - if(pilots) { - for(i=0;idata); - } - if(i==0) { - run_error_dialog(_("No pilot configured, please choose the\n'Pilot Link Properties' capplet first.")); - return -1; - } else { - gnome_pilot_client_get_pilot_id_by_name(gpc, - pilots->data, /* this is the first pilot */ - &pilot); - if(i>1) { - g_message("too many pilots..."); - /* need a choose here */ - } - return pilot; - } - } else { - run_error_dialog(_("No pilot configured, please choose the\n'Pilot Link Properties' capplet first.")); - return -1; - } - break; - } - case GPILOTD_ERR_NOT_CONNECTED: - run_error_dialog(_("Not connected to the gnome-pilot daemon")); - return -1; - break; - default: - g_warning("gnome_pilot_client_get_pilot_ids(...) = %d",err); - run_error_dialog(_("An error occured when trying to fetch\npilot list from the gnome-pilot daemon")); - return -1; - break; - } -} - - -int -main (int argc, char *argv[]) -{ - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_LEVEL_WARNING); - - /* we're a capplet */ - gnome_capplet_init ("todo conduit control applet", NULL, argc, argv, - NULL, 0, NULL); - - gpc = gnome_pilot_client_new(); - gnome_pilot_client_connect_to_daemon(gpc); - pilotId = get_pilot_id_from_gpilotd(); - if(!pilotId) return -1; - - /* put all code to set things up in here */ - gcalconduit_load_configuration (&origState, pilotId); - - conduit = gnome_pilot_conduit_management_new ("todo_conduit", GNOME_PILOT_CONDUIT_MGMT_ID); - if (conduit == NULL) return -1; - conduit_config = gnome_pilot_conduit_config_new (conduit, pilotId); - org_activation_state = gnome_pilot_conduit_config_is_enabled (conduit_config, - &origState->sync_type); - activated = org_activation_state; - - //gpilotd_conduit_mgmt_get_sync_type (conduit, pilotId, &origState->sync_type); - - curState = gcalconduit_dupe_configuration(origState); - - pilot_capplet_setup (); - - - /* done setting up, now run main loop */ - capplet_gtk_main(); - - gnome_pilot_conduit_management_destroy(conduit); - - return 0; -} diff --git a/calendar/conduits/todo/todo-conduit-control-applet.desktop b/calendar/conduits/todo/todo-conduit-control-applet.desktop deleted file mode 100644 index 28bbeebde3..0000000000 --- a/calendar/conduits/todo/todo-conduit-control-applet.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Name=Todo conduit -Name[da]=Udstående -Name[no]=Oppgaver -Name[tr]=Yapýlacaklar parçasý -Comment=Configure the todo conduit -Comment[da]=Konfigurér Udstående -Comment[no]=Konfigurér oppgavelisten -Comment[tr]=Yapýlacaklar parçasý ayarlarý -Exec=todo-conduit-control-applet --cap-id=1 -Terminal=0 -Type=Application diff --git a/calendar/conduits/todo/todo-conduit.c b/calendar/conduits/todo/todo-conduit.c deleted file mode 100644 index 2a3c643a3d..0000000000 --- a/calendar/conduits/todo/todo-conduit.c +++ /dev/null @@ -1,1355 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include -#include -#include -#include -#include -#include -#include - -#include -// #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -//#include "GnomeCal.h" - -GnomePilotConduit * conduit_get_gpilot_conduit (guint32); -void conduit_destroy_gpilot_conduit (GnomePilotConduit*); -void local_record_from_icalobject (GCalLocalRecord *local, CalComponent *obj); - -#define CONDUIT_VERSION "0.8.11" -#ifdef G_LOG_DOMAIN -#undef G_LOG_DOMAIN -#endif -#define G_LOG_DOMAIN "todoconduit" - -#define DEBUG_CALCONDUIT 1 -/* #undef DEBUG_CALCONDUIT */ - -#ifdef DEBUG_CALCONDUIT -#define show_exception(e) g_warning ("Exception: %s\n", CORBA_exception_id (e)) -#define LOG(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e) -#else -#define show_exception(e) -#define LOG(e...) -#endif - -#define WARN(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_WARNING, e) -#define INFO(e...) g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE, e) - -#define catch_ret_val(_env,ret) \ - if (_env._major != CORBA_NO_EXCEPTION) { \ - g_log(G_LOG_DOMAIN,G_LOG_LEVEL_MESSAGE,"%s:%d: Caught exception",__FILE__,__LINE__); \ - g_warning ("Exception: %s\n", CORBA_exception_id (&(_env))); \ - CORBA_exception_free(&(_env)); \ - return ret; \ - } - - - -/* debug spew DELETE ME */ -static char *print_ical (CalComponent *obj - /*iCalObject *obj*/) -{ - static char buff[ 4096 ]; - - int indefinite; - CalComponentDateTime dtend; - int priority; - struct icaltimetype *complete; - CalComponentText summary; - GSList *comments; - CalComponentText *first_comment = NULL; - - if (obj == NULL) { - sprintf (buff, "[NULL]"); - return buff; - } - - indefinite = 0; /* FIX ME how do i get this */ - cal_component_get_dtend (obj, &dtend); - priority = 1; /* FIX ME how do i get this */ - cal_component_get_completed (obj, &complete); - - cal_component_get_summary (obj, &summary); - cal_component_get_comment_list (obj, &comments); - if (comments) - first_comment = (CalComponentText *) comments->data; - - sprintf (buff, "[%d %d-%d-%d %d %d-%d-%d '%s' '%s']", - indefinite, - dtend.value->year, dtend.value->month, dtend.value->day, - priority, - complete->year, complete->month, complete->day, - summary.value, /* description */ - first_comment ? first_comment->value : "" /* note */ - ); - return buff; -} - - -/* debug spew DELETE ME */ -static char *print_local (GCalLocalRecord *local) -{ - static char buff[ 4096 ]; - - if (local == NULL) { - sprintf (buff, "[NULL]"); - return buff; - } - - if (local->todo && local->todo->description) { - sprintf (buff, "[%d %ld %d %d '%s' '%s']", - local->todo->indefinite, - mktime (& local->todo->due), - local->todo->priority, - local->todo->complete, - local->todo->description, - local->todo->note); - return buff; - } - - return print_ical (local->ical); -} - - -/* debug spew DELETE ME */ -static char *print_remote (PilotRecord *remote) -{ - static char buff[ 4096 ]; - struct ToDo todo; - - if (remote == NULL) { - sprintf (buff, "[NULL]"); - return buff; - } - - memset (&todo, 0, sizeof (struct ToDo)); - unpack_ToDo (&todo, remote->record, remote->length); - - sprintf (buff, "[%d %ld %d %d '%s' '%s']", - todo.indefinite, - mktime (& todo.due), - todo.priority, - todo.complete, - todo.description, - todo.note); - - return buff; -} - - - - -/* Destroys any data allocated by gcalconduit_load_configuration - and deallocates the given configuration. */ -static void -gcalconduit_destroy_configuration(GCalConduitCfg **c) -{ - g_return_if_fail(c!=NULL); - g_return_if_fail(*c!=NULL); - g_free(*c); - *c = NULL; -} - - -/* Given a GCalConduitContxt*, allocates the structure */ -static void -gcalconduit_new_context(GCalConduitContext **ctxt, - GCalConduitCfg *c) -{ - *ctxt = g_new0(GCalConduitContext,1); - g_assert(ctxt!=NULL); - (*ctxt)->cfg = c; - CORBA_exception_init (&((*ctxt)->ev)); -} - - -/* Destroys any data allocated by gcalconduit_new_context - and deallocates its data. */ -static void -gcalconduit_destroy_context(GCalConduitContext **ctxt) -{ - g_return_if_fail(ctxt!=NULL); - g_return_if_fail(*ctxt!=NULL); -/* - if ((*ctxt)->cfg!=NULL) - gcalconduit_destroy_configuration(&((*ctxt)->cfg)); -*/ - g_free(*ctxt); - *ctxt = NULL; -} - - -static void -gnome_calendar_load_cb (GtkWidget *cal_client, - CalClientLoadStatus status, - GCalConduitContext *ctxt) -{ - CalClient *client = CAL_CLIENT (cal_client); - - LOG (" todo-conduit entering gnome_calendar_load_cb, tried=%d\n", - ctxt->calendar_load_tried); - - if (status == CAL_CLIENT_LOAD_SUCCESS) { - ctxt->calendar_load_success = TRUE; - LOG (" success\n"); - gtk_main_quit (); /* end the sub event loop */ - } else { - if (ctxt->calendar_load_tried) { - LOG (" load and create of calendar failed\n"); - gtk_main_quit (); /* end the sub event loop */ - return; - } - - cal_client_create_calendar (client, ctxt->calendar_file); - ctxt->calendar_load_tried = 1; - } -} - - - - - -static int -start_calendar_server (GnomePilotConduitStandardAbs *conduit, - GCalConduitContext *ctxt) -{ - - g_return_val_if_fail(conduit!=NULL,-2); - g_return_val_if_fail(ctxt!=NULL,-2); - - ctxt->client = cal_client_new (); - - /* FIX ME */ - ctxt->calendar_file = g_concat_dir_and_file (g_get_home_dir (), - "evolution/local/Calendar/calendar.vcf"); - - gtk_signal_connect (GTK_OBJECT (ctxt->client), "cal_loaded", - gnome_calendar_load_cb, ctxt); - - LOG (" calling cal_client_load_calendar\n"); - cal_client_load_calendar (ctxt->client, ctxt->calendar_file); - - /* run a sub event loop to turn cal-client's async load - notification into a synchronous call */ - gtk_main (); - - if (ctxt->calendar_load_success) - return 0; - - return -1; -} - - -#if 0 -/* Just a stub to link with */ -void calendar_notify (time_t time, CalendarAlarm *which, void *data); -void calendar_notify (time_t time, CalendarAlarm *which, void *data) { } -#endif /* 0 */ - - -static GSList * -get_calendar_objects(GnomePilotConduitStandardAbs *conduit, - gboolean *status, - GCalConduitContext *ctxt) -{ - GList *uids; - GSList *result = NULL; - - g_return_val_if_fail (conduit != NULL, NULL); - g_return_val_if_fail (ctxt != NULL, NULL); - - uids = cal_client_get_uids (ctxt->client, CALOBJ_TYPE_TODO); - - // LOG ("got %d todo entries from cal server\n", g_list_length (uids)); - - if (status != NULL) - (*status) = TRUE; - - if (! uids) - INFO ("No entries found"); - else { - GList *c; - for (c=uids; c; c=c->next) - result = g_slist_prepend (result, (gchar *) c->data); - /* FIX ME free uids */ - } - - return result; -} - - -static void -local_record_from_ical_uid (GCalLocalRecord *local, - char *uid, - GCalConduitContext *ctxt) -{ - //iCalObject *obj; - CalComponent *obj; - CalClientGetStatus status; - - g_assert(local!=NULL); - - status = cal_client_get_object (ctxt->client, uid, &obj); - - if (status == CAL_CLIENT_GET_SUCCESS) - local_record_from_icalobject (local, obj); - else - INFO ("Object did not exist"); -} - - - -static char *gnome_pilot_status_to_string (gint status) -{ - switch(status) { - case GnomePilotRecordPending: return "GnomePilotRecordPending"; - case GnomePilotRecordNothing: return "GnomePilotRecordNothing"; - case GnomePilotRecordDeleted: return "GnomePilotRecordDeleted"; - case GnomePilotRecordNew: return "GnomePilotRecordNew"; - case GnomePilotRecordModified: return "GnomePilotRecordModified"; - } - - return "Unknown"; -} - - - -/* - * converts a iCalObject to a GCalLocalRecord - */ - -void -local_record_from_icalobject(GCalLocalRecord *local, - CalComponent *obj) -{ - //iCalPilotState pilot_status; - unsigned long int pilot_status; - - g_return_if_fail(local!=NULL); - g_return_if_fail(obj!=NULL); - - local->ical = obj; - local->todo = NULL; /* ??? */ - cal_component_get_pilot_id (obj, &local->local.ID); - cal_component_get_pilot_status (obj, &pilot_status); - - switch (pilot_status) { - case ICAL_PILOT_SYNC_NONE: - local->local.attr = GnomePilotRecordNothing; - break; - case ICAL_PILOT_SYNC_MOD: - local->local.attr = GnomePilotRecordModified; - break; - case ICAL_PILOT_SYNC_DEL: - local->local.attr = GnomePilotRecordDeleted; - break; - default: - g_warning ("unhandled pilot status: %ld\n", pilot_status); - } - - /* Records without a pilot_id are new */ - if(local->local.ID == 0) - local->local.attr = GnomePilotRecordNew; - - /* - local->local.secret = 0; - if (obj->class!=NULL) - if (strcmp(obj->class,"PRIVATE")==0) - local->local.secret = 1; - */ - - local->local.archived = 0; -} - - -/* - * Given a PilotRecord, find the matching record in - * the calendar repository. If no match, return NULL - */ -static GCalLocalRecord * -find_record_in_repository(GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - char *uid = NULL; - GCalLocalRecord *loc; - CalClientGetStatus status; - //iCalObject *obj; - CalComponent *obj; - - g_return_val_if_fail(conduit!=NULL,NULL); - g_return_val_if_fail(remote!=NULL,NULL); - - LOG ("find_record_in_repository: remote=%s... ", - print_remote (remote)); - - // LOG ("requesting %ld", remote->ID); - - status = cal_client_get_uid_by_pilot_id (ctxt->client, remote->ID, &uid); - - if (status == CAL_CLIENT_GET_SUCCESS) { - status = cal_client_get_object (ctxt->client, uid, &obj); - if (status == CAL_CLIENT_GET_SUCCESS) { - LOG ("found %s\n", print_ical (obj)); - loc = g_new0(GCalLocalRecord,1); - /* memory allocated in new_from_string is freed in free_match */ - local_record_from_icalobject (loc, obj); - return loc; - } - } - - // INFO ("Object did not exist"); - LOG ("not found\n"); - return NULL; -} - - -/* - * updates an given iCalObject in the repository - */ -static void -update_calendar_entry_in_repository(GnomePilotConduitStandardAbs *conduit, - CalComponent *obj, - GCalConduitContext *ctxt) -{ - gboolean success; - - g_return_if_fail (conduit!=NULL); - g_return_if_fail (obj!=NULL); - - LOG (" update_calendar_entry_in_repository " - "saving %s to desktop\n", - print_ical (obj)); - - success = cal_client_update_object (ctxt->client, obj); - - if (! success) { - WARN (_("Error while communicating with calendar server")); - } -} - - -static CalComponent * -ical_from_remote_record (GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - CalComponent *in_obj) -{ - CalComponent *obj; - struct ToDo todo; - struct icaltimetype now = icaltimetype_from_timet (time (NULL), FALSE); - - CalComponentText summary = {NULL, NULL}; - CalComponentText comment = {NULL, NULL}; - GSList *comment_list; - - g_return_val_if_fail(remote!=NULL,NULL); - memset (&todo, 0, sizeof (struct ToDo)); - unpack_ToDo (&todo, remote->record, remote->length); - - LOG (" ical_from_remote_record: " - "merging remote %s into local %s\n", - print_remote (remote), print_ical (in_obj)); - - if (in_obj == NULL) { - obj = cal_component_new (); - } else { - obj = in_obj; - } - - summary.value = todo.description; - cal_component_set_summary (obj, &summary); - - comment.value = todo.note; - comment_list = g_slist_append (NULL, &comment); - cal_component_set_comment_list (obj, comment_list); - g_slist_free (comment_list); - - cal_component_set_new_vtype (obj, CAL_COMPONENT_TODO); - // obj->new = TRUE; - // obj->created = now; - cal_component_set_created (obj, &now); - // obj->last_mod = now; - cal_component_set_last_modified (obj, &now); - /* obj->priority = 0; */ - // obj->transp = 0; - cal_component_set_transparency (obj, - /*CalComponentTransparency transp*/ - CAL_COMPONENT_TRANSP_NONE); - /* obj->related = NULL; */ - - // cal_component_set_pilot_status (obj, ICAL_PILOT_SYNC_NONE); - - /* - * Begin and end - */ - - // obj->dtend = mktime (& todo.due); - { - /* do i need to malloc these? FIX ME */ - struct icaltimetype dtend_ictt; - CalComponentDateTime dtend; - - dtend_ictt = icaltimetype_from_timet (mktime (& todo.due), FALSE); - dtend.value = &dtend_ictt; - dtend.tzid = NULL; - cal_component_set_dtend (obj, &dtend); - } - - - /* - if (todo.complete) { - obj->completed = now-5; - obj->percent = 100; - } - */ - { - cal_component_set_completed (obj, &now); - } - - /* - LOG ("[%s] from pilot, complete=%d/%ld\n", - todo.description, - todo.complete, - obj->completed); - */ - - - //obj->priority = todo.priority; FIX ME - - /* g_free (obj->class); */ - - /* - if (remote->attr & dlpRecAttrSecret) - obj->class = g_strdup ("PRIVATE"); - else - obj->class = g_strdup ("PUBLIC"); - */ - - if (remote->attr & dlpRecAttrSecret) - cal_component_set_classification (obj, CAL_COMPONENT_CLASS_PRIVATE); - else - cal_component_set_classification (obj, CAL_COMPONENT_CLASS_PUBLIC); - - free_ToDo(&todo); - - return obj; -} - - -/* Code blatantly stolen from - * calendar-pilot-sync.c: - * - * (C) 1999 International GNOME Support - * - * Author: - * Miguel de Icaza (miguel@gnome-support.com) - * - * store a copy of a pilot record in the desktop database - * - */ -static gint -update_record (GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - //iCalObject *obj; - CalComponent *obj; - struct ToDo todo; - CalClientGetStatus status; - char *uid; - - CalComponentText summary = {NULL, NULL}; - CalComponentText comment = {NULL, NULL}; - GSList *comment_list; - - g_return_val_if_fail(remote!=NULL,-1); - - memset (&todo, 0, sizeof (struct ToDo)); - unpack_ToDo (&todo, remote->record, remote->length); - - LOG (" cal_client_get_uid_by_pilot_id... "); - - status = cal_client_get_uid_by_pilot_id (ctxt->client, - remote->ID, &uid); - if (status == CAL_CLIENT_GET_SUCCESS) { - LOG (" succeeded with '%s'\n", uid); - LOG (" cal_client_get_object... "); - status = cal_client_get_object (ctxt->client, uid, &obj); - } - - if (status != CAL_CLIENT_GET_SUCCESS) { - struct icaltimetype now = icaltimetype_from_timet (time (NULL), FALSE); - - LOG ("failed, making a new one.\n"); - - obj = cal_component_new (); - - summary.value = todo.description; - cal_component_set_summary (obj, &summary); - - comment.value = todo.note; - comment_list = g_slist_append (NULL, &comment); - cal_component_set_comment_list (obj, comment_list); - g_slist_free (comment_list); - - // obj->type = ICAL_TODO; - cal_component_set_new_vtype (obj, CAL_COMPONENT_TODO); - // obj->new = TRUE; - // obj->created = now; - cal_component_set_created (obj, &now); - // obj->last_mod = now; - cal_component_set_last_modified (obj, &now); - // obj->priority = 0; - // obj->transp = 0; - cal_component_set_transparency (obj, - /*CalComponentTransparency transp*/ - CAL_COMPONENT_TRANSP_NONE); - // obj->related = NULL; - //obj->pilot_id = remote->ID; - //obj->pilot_status = ICAL_PILOT_SYNC_NONE; - cal_component_set_pilot_id (obj, remote->ID); - cal_component_set_pilot_status (obj, ICAL_PILOT_SYNC_NONE); - } else { - CalComponent *new_obj; - - LOG ("succeeded %s\n", print_ical (obj)); - - new_obj = ical_from_remote_record (conduit, remote, obj); - obj = new_obj; - } - - /* update record on server */ - { - const char *uid; - unsigned long pilot_id; - - cal_component_get_uid (obj, &uid); - cal_component_get_pilot_id (obj, &pilot_id); - - update_calendar_entry_in_repository (conduit, obj, ctxt); - cal_client_update_pilot_id (ctxt->client, (char *) uid, pilot_id, - ICAL_PILOT_SYNC_NONE); - } - - /* - * Shutdown - */ - //ical_object_unref (obj); - free_ToDo(&todo); - - return 0; -} - -static void -check_for_slow_setting (GnomePilotConduit *c, GCalConduitContext *ctxt) -{ - GList *uids; - unsigned long int entry_number; - - uids = cal_client_get_uids (ctxt->client, CALOBJ_TYPE_TODO); - - entry_number = g_list_length (uids); - - /* If the local base is empty, do a slow sync */ - if (entry_number == 0) { - GnomePilotConduitStandard *conduit; - LOG (" doing slow sync\n"); - conduit = GNOME_PILOT_CONDUIT_STANDARD (c); - gnome_pilot_conduit_standard_set_slow (conduit); - } else { - LOG (" doing fast sync\n"); - } -} - -static gint -pre_sync (GnomePilotConduit *c, - GnomePilotDBInfo *dbi, - GCalConduitContext *ctxt) -{ - int l; - unsigned char *buf; - GnomePilotConduitStandardAbs *conduit; - /* gint num_records; */ - //GList *uids; - - /* - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_LEVEL_WARNING); - */ - - - conduit = GNOME_PILOT_CONDUIT_STANDARD_ABS(c); - - LOG ("---------------------------------------------------------\n"); - LOG ("pre_sync: ToDo Conduit v.%s", CONDUIT_VERSION); - g_message ("ToDo Conduit v.%s", CONDUIT_VERSION); - - ctxt->client = NULL; - - if (start_calendar_server (GNOME_PILOT_CONDUIT_STANDARD_ABS(c), ctxt) != 0) { - WARN(_("Could not start gnomecal server")); - gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c), - _("Could not start gnomecal server")); - return -1; - } - - -#if 0 - /* Set the counters for the progress bar crap */ - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_ANY, &(ctxt->ev)); - - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_MODIFIED, &(ctxt->ev)); - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_updated_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_NEW, &(ctxt->ev)); - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_new_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); - num_records = GNOME_Calendar_Repository_get_number_of_objects (ctxt->calendar, GNOME_Calendar_Repository_DELETED, &(ctxt->ev)); - catch_ret_val (ctxt->ev, -1); - gnome_pilot_conduit_standard_abs_set_num_deleted_local_records(GNOME_PILOT_CONDUIT_STANDARD_ABS(c), num_records); -#endif /* 0 */ - - gtk_object_set_data(GTK_OBJECT(c),"dbinfo",dbi); - - /* load_records(c); */ - - buf = (unsigned char*)g_malloc(0xffff); - if((l=dlp_ReadAppBlock(dbi->pilot_socket,dbi->db_handle,0,(unsigned char *)buf,0xffff)) < 0) { - WARN(_("Could not read pilot's ToDo application block")); - WARN("dlp_ReadAppBlock(...) = %d",l); - gnome_pilot_conduit_error(GNOME_PILOT_CONDUIT(c), - _("Could not read pilot's ToDo application block")); - return -1; - } - unpack_ToDoAppInfo(&(ctxt->ai),buf,l); - g_free(buf); - - check_for_slow_setting(c,ctxt); - - return 0; -} - -/** - * Find (if possible) the local record which matches - * the given PilotRecord. - * if successfull, return non-zero and set *local to - * a non-null value (the located local record), - * otherwise return 0 and set *local = NULL; - */ - -static gint -match_record (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - LOG ("match_record: looking for local copy of %s\n", - print_remote (remote)); - - g_return_val_if_fail (local != NULL, -1); - g_return_val_if_fail (remote != NULL, -1); - - *local = find_record_in_repository(conduit,remote,ctxt); - - if (*local == NULL) - LOG (" match_record: not found.\n"); - else - LOG (" match_record: found, %s\n", print_local (*local)); - - if (*local==NULL) return -1; - return 0; -} - -/** - * Free the data allocated by a previous match_record call. - * If successfull, return non-zero and ser *local=NULL, otherwise - * return 0. - */ -static gint -free_match (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - GCalConduitContext *ctxt) -{ - LOG ("free_match: %s\n", print_local (*local)); - - g_return_val_if_fail (local!=NULL, -1); - g_return_val_if_fail (*local!=NULL, -1); - - // ical_object_unref (GCAL_LOCALRECORD(*local)->ical); - g_free (*local); - - *local = NULL; - return 0; -} - -/* - Move to archive and set status to Nothing - */ -static gint -archive_local (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - GCalConduitContext *ctxt) -{ - LOG ("archive_local: doing nothing with %s\n", print_local (local)); - - g_return_val_if_fail(local!=NULL,-1); - - return -1; -} - -/* - Store in archive and set status to Nothing - */ -static gint -archive_remote (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - LOG ("archive_remote: doing nothing with %s\n", - print_local (local)); - - //g_return_val_if_fail(remote!=NULL,-1); - //g_return_val_if_fail(local!=NULL,-1); - - return -1; -} - -/* - Store and set status to Nothing - */ -static gint -store_remote (GnomePilotConduitStandardAbs *conduit, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - LOG ("store_remote: copying pilot record %s to desktop\n", - print_remote (remote)); - - g_return_val_if_fail(remote!=NULL,-1); - remote->attr = GnomePilotRecordNothing; - - return update_record(conduit,remote,ctxt); -} - -static gint -clear_status_archive_local (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - GCalConduitContext *ctxt) -{ - LOG ("clear_status_archive_local: doing nothing\n"); - - g_return_val_if_fail(local!=NULL,-1); - - return -1; -} - -static gint -iterate (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - GCalConduitContext *ctxt) -{ - static GSList *events,*iterator; - static int hest; - - g_return_val_if_fail(local!=NULL,-1); - - if(*local==NULL) { - // LOG ("beginning iteration"); - - events = get_calendar_objects(conduit,NULL,ctxt); - hest = 0; - - if(events!=NULL) { - // LOG ("iterating over %d records", g_slist_length (events)); - *local = g_new0(GCalLocalRecord,1); - - local_record_from_ical_uid(*local,(gchar*)events->data,ctxt); - iterator = events; - } else { - // LOG ("no events"); - (*local) = NULL; - } - } else { - /* LOG ("continuing iteration\n"); */ - hest++; - if(g_slist_next(iterator)==NULL) { - GSList *l; - - // LOG ("ending"); - /** free stuff allocated for iteration */ - g_free((*local)); - - // LOG ("iterated over %d records", hest); - for(l=events;l;l=l->next) - g_free(l->data); - - g_slist_free(events); - - /* ends iteration */ - (*local) = NULL; - return 0; - } else { - iterator = g_slist_next(iterator); - local_record_from_ical_uid(*local,(gchar*)(iterator->data),ctxt); - } - } - return 1; -} - - -static gint -iterate_specific (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord **local, - gint flag, - gint archived, - GCalConduitContext *ctxt) -{ - (*local) = NULL; /* ??? */ - - /* debugging */ - { - gchar *tmp; - switch (flag) { - case GnomePilotRecordNothing: - tmp = g_strdup("RecordNothing"); break; - case GnomePilotRecordModified: - tmp = g_strdup("RecordModified"); break; - case GnomePilotRecordDeleted: - tmp = g_strdup("RecordDeleted"); break; - case GnomePilotRecordNew: - tmp = g_strdup("RecordNew"); break; - default: tmp = g_strdup_printf("0x%x",flag); break; - } - LOG ("\niterate_specific: (flag = %s)... ", tmp); - g_free(tmp); - } - - g_return_val_if_fail(local!=NULL,-1); - - /* iterate until a record meets the criteria */ - while (gnome_pilot_conduit_standard_abs_iterate (conduit, - (LocalRecord**)local)) { - if((*local)==NULL) break; - if(archived && ((*local)->local.archived==archived)) break; - if(((*local)->local.attr == flag)) break; - } - - if ((*local)) { - LOG (" found %s\n", print_local (*local)); - } else { - LOG (" no more found.\n"); - } - - return (*local)==NULL?0:1; -} - -static gint -purge (GnomePilotConduitStandardAbs *conduit, - GCalConduitContext *ctxt) -{ - LOG ("purge: doing nothing\n"); - - /* HEST, gem posterne her */ - - return -1; -} - - -static gint -set_status (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - gint status, - GCalConduitContext *ctxt) -{ - gboolean success; - iCalPilotState new_state; - - LOG ("set_status: %s status is now '%s'\n", - print_local (local), - gnome_pilot_status_to_string (status)); - - g_return_val_if_fail(local!=NULL,-1); - g_assert(local->ical!=NULL); - - local->local.attr = status; - switch(status) { - case GnomePilotRecordPending: - case GnomePilotRecordNothing: - new_state = ICAL_PILOT_SYNC_NONE; - break; - case GnomePilotRecordDeleted: - break; - case GnomePilotRecordNew: - case GnomePilotRecordModified: - new_state = ICAL_PILOT_SYNC_MOD; - break; - } - - if (status == GnomePilotRecordDeleted) { - const char *uid; - cal_component_get_uid (local->ical, &uid); - success = cal_client_remove_object (ctxt->client, uid); - } else { - const char *uid; - unsigned long pilot_id; - - cal_component_get_uid (local->ical, &uid); - cal_component_get_pilot_id (local->ical, &pilot_id); - - success = cal_client_update_object (ctxt->client, local->ical); - cal_client_update_pilot_id (ctxt->client, (char *) uid, - pilot_id, new_state); - } - - if (! success) { - WARN (_("Error while communicating with calendar server")); - } - - return 0; -} - -static gint -set_archived (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - gint archived, - GCalConduitContext *ctxt) -{ - LOG ("set_archived: %s archived flag is now '%d'\n", - print_local (local), archived); - - g_return_val_if_fail(local!=NULL,-1); - g_assert(local->ical!=NULL); - - local->local.archived = archived; - update_calendar_entry_in_repository(conduit,local->ical,ctxt); - /* FIXME: This should move the entry into a speciel - calendar file, eg. Archive, or (by config option), simply - delete it */ - return 0; -} - -static gint -set_pilot_id (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - guint32 ID, - GCalConduitContext *ctxt) -{ - const char *uid; - unsigned long int pilot_status; - - LOG ("set_pilot_id: %s pilot ID is now '%d'\n", - print_local (local), ID); - - g_return_val_if_fail(local!=NULL,-1); - g_assert(local->ical!=NULL); - - local->local.ID = ID; - cal_component_set_pilot_id (local->ical, ID); - - cal_component_get_uid (local->ical, &uid); - cal_component_get_pilot_status (local->ical, &pilot_status); - - cal_client_update_pilot_id (ctxt->client, - (char *) uid, - local->local.ID, - pilot_status); - - return 0; -} - -static gint -transmit (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord **remote, - GCalConduitContext *ctxt) -{ - PilotRecord *p; - /* priority; FIX ME */ - struct icaltimetype *completed; - CalComponentText summary; - GSList *comment_list = NULL; - CalComponentText *comment; - - LOG ("transmit: encoding local %s\n", print_local (local)); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - g_assert(local->ical!=NULL); - - p = g_new0(PilotRecord,1); - - p->ID = local->local.ID; - p->attr = local->local.attr; - p->archived = local->local.archived; - p->secret = local->local.secret; - - local->todo = g_new0(struct ToDo,1); - - { - CalComponentDateTime dtend; - time_t dtend_time_t; - - cal_component_get_dtend (local->ical, &dtend); - dtend_time_t = time_from_icaltimetype (*dtend.value); - - local->todo->due = *localtime (&dtend_time_t); - local->todo->indefinite = (dtend.value->year == 0); - } - - //local->todo->priority = local->ical->priority; - local->todo->priority = 1; /* FIX ME */ - - cal_component_get_completed (local->ical, &completed); - if (completed->year > 0) - local->todo->complete = 1; /* FIX ME */ - - /* STOP: don't replace these with g_strdup, since free_ToDo - uses free to deallocte */ - - cal_component_get_summary (local->ical, &summary); - local->todo->description = - //local->ical->summary == NULL ? NULL : strdup (summary.value); - strdup ((char *) summary.value); - - - cal_component_get_comment_list (local->ical, &comment_list); - if (comment_list) { - comment = (CalComponentText *) comment_list->data; - if (comment && comment->value) - local->todo->note = strdup (comment->value); - else - local->todo->note = NULL; - } else { - local->todo->note = NULL; - } - - /* - LOG ("transmitting todo to pilot [%s] complete=%d/%ld\n", - local->ical->summary==NULL?"NULL":local->ical->summary, - local->todo->complete, local->ical->completed); - */ - - /* Generate pilot record structure */ - p->record = g_new0(char,0xffff); - p->length = pack_ToDo(local->todo,p->record,0xffff); - - *remote = p; - - return 0; -} - -static gint -free_transmit (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord **remote, - GCalConduitContext *ctxt) -{ - LOG ("free_transmit: freeing %s\n", - print_local (local)); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - - /* free_ToDo(local->todo); */ /* FIX ME is this needed? */ - g_free((*remote)->record); - *remote = NULL; - return 0; -} - - -static gint -compare (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - /* used by the quick compare */ - PilotRecord *remoteOfLocal; - int err; - int retval; - - LOG ("compare: local=%s remote=%s...\n", - print_local (local), print_remote (remote)); - - g_return_val_if_fail (local!=NULL,-1); - g_return_val_if_fail (remote!=NULL,-1); - - err = transmit(conduit,local,&remoteOfLocal,ctxt); - if (err != 0) return err; - - retval = 0; - if (remote->length == remoteOfLocal->length) { - if (memcmp (remoteOfLocal->record, - remote->record, remote->length)!=0) { - LOG (" compare failed on contents\n"); - retval = 1; - } - } else { - LOG(" compare failed on length\n"); - retval = 1; - } - - - if (retval == 0) { - LOG (" match.\n"); - } else { - /* debug spew */ - LOG (" local:%s\n", print_remote (remoteOfLocal)); - LOG (" remote:%s\n", print_remote (remote)); - } - - free_transmit(conduit,local,&remoteOfLocal,ctxt); - return retval; -} - - -static gint -compare_backup (GnomePilotConduitStandardAbs *conduit, - GCalLocalRecord *local, - PilotRecord *remote, - GCalConduitContext *ctxt) -{ - LOG ("compare_backup: doing nothing\n"); - - g_return_val_if_fail(local!=NULL,-1); - g_return_val_if_fail(remote!=NULL,-1); - - return -1; -} - - -static gint -delete_all (GnomePilotConduitStandardAbs *conduit, - GCalConduitContext *ctxt) -{ - GSList *events,*it; - gboolean error; - gboolean success; - - events = get_calendar_objects(conduit,&error,ctxt); - - LOG ("delete_all: deleting all objects from desktop\n"); - - if (error == FALSE) return -1; - for (it=events; it; it = g_slist_next (it)) { - success = cal_client_remove_object (ctxt->client, it->data); - - if (!success) - INFO ("Object did not exist"); - - g_free (it->data); - } - - g_slist_free (events); - return -1; -} - - -static ORBit_MessageValidationResult -accept_all_cookies (CORBA_unsigned_long request_id, - CORBA_Principal *principal, - CORBA_char *operation) -{ - /* allow ALL cookies */ - return ORBIT_MESSAGE_ALLOW_ALL; -} - - -GnomePilotConduit * -conduit_get_gpilot_conduit (guint32 pilotId) -{ - GtkObject *retval; - GCalConduitCfg *cfg; - GCalConduitContext *ctxt; - - LOG ("in todo's conduit_get_gpilot_conduit\n"); - - /* we need to find wombat with oaf, so make sure oaf - is initialized here. once the desktop is converted - to oaf and gpilotd is built with oaf, this can go away */ - if (! oaf_is_initialized ()) - { - char *argv[ 1 ] = {"hi"}; - oaf_init (1, argv); - - if (bonobo_init (CORBA_OBJECT_NIL, - CORBA_OBJECT_NIL, - CORBA_OBJECT_NIL) == FALSE) - g_error (_("Could not initialize Bonobo")); - - ORBit_set_request_validation_handler (accept_all_cookies); - } - - retval = gnome_pilot_conduit_standard_abs_new ("ToDoDB", 0x746F646F); - g_assert (retval != NULL); - gnome_pilot_conduit_construct(GNOME_PILOT_CONDUIT(retval),"ToDoConduit"); - - gcalconduit_load_configuration(&cfg,pilotId); - gtk_object_set_data(retval,"todoconduit_cfg",cfg); - - gcalconduit_new_context(&ctxt,cfg); - gtk_object_set_data(GTK_OBJECT(retval),"todoconduit_context",ctxt); - - gtk_signal_connect (retval, "match_record", (GtkSignalFunc) match_record, ctxt); - gtk_signal_connect (retval, "free_match", (GtkSignalFunc) free_match, ctxt); - gtk_signal_connect (retval, "archive_local", (GtkSignalFunc) archive_local, ctxt); - gtk_signal_connect (retval, "archive_remote", (GtkSignalFunc) archive_remote, ctxt); - gtk_signal_connect (retval, "store_remote", (GtkSignalFunc) store_remote, ctxt); - gtk_signal_connect (retval, "clear_status_archive_local", (GtkSignalFunc) clear_status_archive_local, ctxt); - gtk_signal_connect (retval, "iterate", (GtkSignalFunc) iterate, ctxt); - gtk_signal_connect (retval, "iterate_specific", (GtkSignalFunc) iterate_specific, ctxt); - gtk_signal_connect (retval, "purge", (GtkSignalFunc) purge, ctxt); - gtk_signal_connect (retval, "set_status", (GtkSignalFunc) set_status, ctxt); - gtk_signal_connect (retval, "set_archived", (GtkSignalFunc) set_archived, ctxt); - gtk_signal_connect (retval, "set_pilot_id", (GtkSignalFunc) set_pilot_id, ctxt); - gtk_signal_connect (retval, "compare", (GtkSignalFunc) compare, ctxt); - gtk_signal_connect (retval, "compare_backup", (GtkSignalFunc) compare_backup, ctxt); - gtk_signal_connect (retval, "free_transmit", (GtkSignalFunc) free_transmit, ctxt); - gtk_signal_connect (retval, "delete_all", (GtkSignalFunc) delete_all, ctxt); - gtk_signal_connect (retval, "transmit", (GtkSignalFunc) transmit, ctxt); - gtk_signal_connect (retval, "pre_sync", (GtkSignalFunc) pre_sync, ctxt); - - return GNOME_PILOT_CONDUIT (retval); -} - -void -conduit_destroy_gpilot_conduit (GnomePilotConduit *conduit) -{ - GCalConduitCfg *cc; - GCalConduitContext *ctxt; - - cc = GET_GCALCONFIG(conduit); - ctxt = GET_GCALCONTEXT(conduit); - - if (ctxt->client != NULL) { - gtk_object_unref (GTK_OBJECT (ctxt->client)); - //pi_close (ctxt->link); - //GNOME_Calendar_Repository_done (ctxt->calendar, &(ctxt->ev)); - } - - gcalconduit_destroy_configuration (&cc); - - gcalconduit_destroy_context (&ctxt); - - gtk_object_destroy (GTK_OBJECT (conduit)); -} diff --git a/calendar/conduits/todo/todo-conduit.h b/calendar/conduits/todo/todo-conduit.h deleted file mode 100644 index f01b52173d..0000000000 --- a/calendar/conduits/todo/todo-conduit.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#ifndef __TODO_CONDUIT_H__ -#define __TODO_CONDUIT_H__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* -#ifdef USING_OAF -#include -#else -#include -#endif -*/ - -#include -#include - -/* This is the local record structure for the GnomeCal conduit. */ -typedef struct _GCalLocalRecord GCalLocalRecord; -struct _GCalLocalRecord { - /* The stuff from gnome-pilot-conduit-standard-abs.h - Must be first in the structure, or instances of this - structure cannot be used by gnome-pilot-conduit-standard-abs. - */ - LocalRecord local; - /* The corresponding iCal object, as found by GnomeCal. */ - //iCalObject *ical; - CalComponent *ical; - - /* pilot-link todo structure, used for implementing Transmit. */ - struct ToDo *todo; -}; -#define GCAL_LOCALRECORD(s) ((GCalLocalRecord*)(s)) - -/* This is the configuration of the GnomeCal conduit. */ -typedef struct _GCalConduitCfg GCalConduitCfg; -struct _GCalConduitCfg { - gboolean open_secret; - guint32 pilotId; - GnomePilotConduitSyncType sync_type; /* only used by capplet */ -}; -#define GET_GCALCONFIG(c) ((GCalConduitCfg*)gtk_object_get_data(GTK_OBJECT(c),"todoconduit_cfg")) - -/* This is the context for all the GnomeCal conduit methods. */ -typedef struct _GCalConduitContext GCalConduitContext; -struct _GCalConduitContext { - struct ToDoAppInfo ai; - GCalConduitCfg *cfg; - CalClient *client; - CORBA_Environment ev; - CORBA_ORB orb; - gboolean calendar_load_tried; - gboolean calendar_load_success; - - char *calendar_file; -}; -#define GET_GCALCONTEXT(c) ((GCalConduitContext*)gtk_object_get_data(GTK_OBJECT(c),"todoconduit_context")) - - -/* Given a GCalConduitCfg*, allocates the structure and - loads the configuration data for the given pilot. - this is defined in the header file because it is used by - both todo-conduit and todo-conduit-control-applet, - and we don't want to export any symbols we don't have to. */ -static void -gcalconduit_load_configuration(GCalConduitCfg **c, - guint32 pilotId) -{ - gchar prefix[256]; - g_snprintf(prefix,255,"/gnome-pilot.d/todo-conduit/Pilot_%u/",pilotId); - - *c = g_new0(GCalConduitCfg,1); - g_assert(*c != NULL); - gnome_config_push_prefix(prefix); - (*c)->open_secret = gnome_config_get_bool("open_secret=FALSE"); - (*c)->sync_type = GnomePilotConduitSyncTypeCustom; /* set in capplets main */ - gnome_config_pop_prefix(); - - (*c)->pilotId = pilotId; -} - - -#endif __TODO_CONDUIT_H__ diff --git a/calendar/conduits/todo/todo.conduit.in b/calendar/conduits/todo/todo.conduit.in deleted file mode 100644 index b940c2b498..0000000000 --- a/calendar/conduits/todo/todo.conduit.in +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/calendar/gui/.cvsignore b/calendar/gui/.cvsignore deleted file mode 100644 index c55e5d266f..0000000000 --- a/calendar/gui/.cvsignore +++ /dev/null @@ -1,21 +0,0 @@ -Makefile.in -Makefile -.deps -_libs -.libs -.pure -gncal -evolution-calendar -evolution-calendar.pure -test-calendar-widget -getdate.c -GnomeCal-skels.c -GnomeCal-common.c -GnomeCal.h -calendar-pilot-sync -evolution-calendar-stubs.c -evolution-calendar-skels.c -evolution-calendar-common.c -evolution-calendar.h -GnomeCal-stubs.c -*.lo diff --git a/calendar/gui/GNOME_Evolution_Calendar.oaf.in b/calendar/gui/GNOME_Evolution_Calendar.oaf.in deleted file mode 100644 index c8a4907854..0000000000 --- a/calendar/gui/GNOME_Evolution_Calendar.oaf.in +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/GNOME_Evolution_Calendar.oafinfo b/calendar/gui/GNOME_Evolution_Calendar.oafinfo deleted file mode 100644 index c8a4907854..0000000000 --- a/calendar/gui/GNOME_Evolution_Calendar.oafinfo +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/GNOME_Evolution_Calendar_Control.oaf.in b/calendar/gui/GNOME_Evolution_Calendar_Control.oaf.in deleted file mode 100644 index fb0f138caf..0000000000 --- a/calendar/gui/GNOME_Evolution_Calendar_Control.oaf.in +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/GNOME_Evolution_Calendar_Control.oafinfo b/calendar/gui/GNOME_Evolution_Calendar_Control.oafinfo deleted file mode 100644 index fb0f138caf..0000000000 --- a/calendar/gui/GNOME_Evolution_Calendar_Control.oafinfo +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/GNOME_Evolution_Calendar_gnomecal.oaf.in b/calendar/gui/GNOME_Evolution_Calendar_gnomecal.oaf.in deleted file mode 100644 index c8a4907854..0000000000 --- a/calendar/gui/GNOME_Evolution_Calendar_gnomecal.oaf.in +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/GNOME_Evolution_Calendar_gnomecal.oafinfo b/calendar/gui/GNOME_Evolution_Calendar_gnomecal.oafinfo deleted file mode 100644 index c8a4907854..0000000000 --- a/calendar/gui/GNOME_Evolution_Calendar_gnomecal.oafinfo +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am deleted file mode 100644 index 4927f7c6b6..0000000000 --- a/calendar/gui/Makefile.am +++ /dev/null @@ -1,143 +0,0 @@ -SUBDIRS = dialogs - -help_base = $(datadir)/gnome/help/cal - -bin_PROGRAMS = evolution-calendar - -CPPFLAGS = \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" - -INCLUDES = \ - -DG_LOG_DOMAIN=\"calendar-gui\" \ - -I$(top_builddir)/shell \ - -I$(top_srcdir)/shell \ - -I$(top_srcdir) \ - -I$(top_srcdir)/calendar \ - -I$(top_srcdir)/libical/src/libical \ - -I$(top_srcdir)/widgets \ - -I$(includedir) \ - $(BONOBO_VFS_GNOME_CFLAGS) \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" - -LINK_FLAGS = \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(INTLLIBS) \ - dialogs/libcal-dialogs.a \ - $(top_builddir)/calendar/cal-client/libcal-client.la \ - $(top_builddir)/calendar/cal-util/libcal-util.la \ - $(top_builddir)/widgets/e-paned/libepaned.a \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(top_builddir)/widgets/e-table/libetable.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libversit/libversit.la \ - $(top_builddir)/libical/src/libical/libical.a - -gladedir = $(datadir)/evolution/glade - -glade_DATA = \ - event-editor-dialog.glade - -glade_messages = event-editor-dialog.glade.h - -evolution_calendar_SOURCES = \ - alarm.c \ - alarm.h \ - calendar-commands.c \ - calendar-commands.h \ - calendar-model.c \ - calendar-model.h \ - control-factory.c \ - control-factory.h \ - component-factory.c \ - component-factory.h \ - e-calendar-table.h \ - e-calendar-table.c \ - e-day-view-main-item.c \ - e-day-view-main-item.h \ - e-day-view-time-item.c \ - e-day-view-time-item.h \ - e-day-view-top-item.c \ - e-day-view-top-item.h \ - e-day-view.c \ - e-day-view.h \ - e-week-view-event-item.c \ - e-week-view-event-item.h \ - e-week-view-main-item.c \ - e-week-view-main-item.h \ - e-week-view-titles-item.c \ - e-week-view-titles-item.h \ - e-week-view.c \ - e-week-view.h \ - event-editor.c \ - event-editor.h \ - getdate.y \ - gncal-todo.c \ - gncal-todo.h \ - gnome-cal.c \ - gnome-cal.h \ - gnome-month-item.c \ - gnome-month-item.h \ - goto.c \ - main.c \ - mark.c \ - mark.h \ - popup-menu.c \ - popup-menu.h \ - print.c \ - print.h \ - prop.c - -evolution_calendar_LDADD = \ - $(top_builddir)/shell/libeshell.a \ - $(EXTRA_GNOME_LIBS) \ - $(BONOBO_HTML_GNOME_LIBS) \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(top_builddir)/e-util/libeutil.la \ - $(LINK_FLAGS) - -evolution_calendar_LDFLAGS = `gnome-config --libs gdk_pixbuf` - -if USING_OAF -oafdir = $(datadir)/oaf -oaf_DATA = calendar-control.oafinfo evolution-calendar.oafinfo -else -gnorbadir = $(sysconfdir)/CORBA/servers -gnorba_DATA = calendar-control.gnorba evolution-calendar.gnorba -endif - -OAF_GNORBA_EXTRAS = calendar-control.oafinfo evolution-calendar.oafinfo calendar-control.gnorba evolution-calendar.gnorba -EXTRA_DIST = \ - $(OAF_GNORBA_EXTRAS) \ - $(glade_DATA) \ - bell.xpm \ - dayview.xpm \ - jump.xpm \ - monthview.xpm \ - recur.xpm \ - task-assigned-to.xpm \ - task-assigned.xpm \ - task-recurring.xpm \ - task.xpm \ - weekview.xpm \ - workweekview.xpm \ - yearview.xpm \ - calendar-control.gnorba \ - calendar-control.oafinfo - - -install-data-local: - $(mkinstalldirs) $(DESTDIR)$(help_base)/C - $(mkinstalldirs) $(Conduitsdir) - -if ENABLE_PURIFY -PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ - -all-local: evolution-calendar.pure - -evolution-calendar.pure: evolution-calendar - @rm -f evolution-calendar.pure - $(PLINK) $(evolution_calendar_LDFLAGS) $(evolution_calendar_OBJECTS) $(evolution_calendar_LDADD) $(LIBS) - -endif diff --git a/calendar/gui/alarm-notify/alarm-notify-dialog.c b/calendar/gui/alarm-notify/alarm-notify-dialog.c deleted file mode 100644 index 7d8357599c..0000000000 --- a/calendar/gui/alarm-notify/alarm-notify-dialog.c +++ /dev/null @@ -1,225 +0,0 @@ -/* Evolution calendar - alarm notification dialog - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "alarm-notify-dialog.h" - - - -/* The useful contents of the alarm notify dialog */ -typedef struct { - GladeXML *xml; - - GtkWidget *dialog; - GtkWidget *close; - GtkWidget *snooze; - GtkWidget *edit; - GtkWidget *heading; - GtkWidget *summary; - GtkWidget *snooze_time; - - AlarmNotifyFunc func; - gpointer func_data; -} AlarmNotify; - - - -/* Callback used when the notify dialog is destroyed */ -static void -dialog_destroy_cb (GtkObject *object, gpointer data) -{ - AlarmNotify *an; - - an = data; - gtk_object_unref (GTK_OBJECT (an->xml)); - g_free (an); -} - -/* Delete_event handler for the alarm notify dialog */ -static gint -delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data) -{ - AlarmNotify *an; - - an = data; - g_assert (an->func != NULL); - - (* an->func) (ALARM_NOTIFY_CLOSE, -1, an->func_data); - - gtk_widget_destroy (widget); - return TRUE; -} - -/* Callback for the close button */ -static void -close_clicked_cb (GtkWidget *widget, gpointer data) -{ - AlarmNotify *an; - - an = data; - g_assert (an->func != NULL); - - (* an->func) (ALARM_NOTIFY_CLOSE, -1, an->func_data); - - gtk_widget_destroy (an->dialog); -} - -/* Callback for the snooze button */ -static void -snooze_clicked_cb (GtkWidget *widget, gpointer data) -{ - AlarmNotify *an; - int snooze_time; - - an = data; - g_assert (an->func != NULL); - - snooze_time = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (an->snooze_time)); - (* an->func) (ALARM_NOTIFY_SNOOZE, snooze_time, an->func_data); - - gtk_widget_destroy (an->dialog); -} - -/* Callback for the edit button */ -static void -edit_clicked_cb (GtkWidget *widget, gpointer data) -{ - AlarmNotify *an; - - an = data; - g_assert (an->func != NULL); - - (* an->func) (ALARM_NOTIFY_EDIT, -1, an->func_data); - - gtk_widget_destroy (an->dialog); -} - -/** - * alarm_notify_dialog: - * @trigger: Trigger time for the alarm. - * @occur: Occurrence time for the event. - * @comp: Calendar component object which corresponds to the alarm. - * @func: Function to be called when a dialog action is invoked. - * @func_data: Closure data for @func. - * - * Runs the alarm notification dialog. The specified @func will be used to - * notify the client about result of the actions in the dialog. - * - * Return value: TRUE on success, FALSE if the dialog could not be created. - **/ -gboolean -alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, - AlarmNotifyFunc func, gpointer func_data) -{ - AlarmNotify *an; - char buf[256]; - struct tm tm_trigger; - struct tm tm_occur; - CalComponentText summary; - - g_return_val_if_fail (trigger != -1, FALSE); - g_return_val_if_fail (occur != -1, FALSE); - g_return_val_if_fail (comp != NULL, FALSE); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), FALSE); - g_return_val_if_fail (func != NULL, FALSE); - - an = g_new0 (AlarmNotify, 1); - - an->func = func; - an->func_data = func_data; - - an->xml = glade_xml_new (EVOLUTION_GLADEDIR "/alarm-notify.glade", NULL); - if (!an->xml) { - g_message ("alarm_notify_dialog(): Could not load the Glade XML file!"); - g_free (an); - return FALSE; - } - - an->dialog = glade_xml_get_widget (an->xml, "alarm-notify"); - an->close = glade_xml_get_widget (an->xml, "close"); - an->snooze = glade_xml_get_widget (an->xml, "snooze"); - an->edit = glade_xml_get_widget (an->xml, "edit"); - an->heading = glade_xml_get_widget (an->xml, "heading"); - an->summary = glade_xml_get_widget (an->xml, "summary"); - an->snooze_time = glade_xml_get_widget (an->xml, "snooze-time"); - - if (!(an->dialog && an->close && an->snooze && an->edit && an->heading && an->summary - && an->snooze_time)) { - g_message ("alarm_notify_dialog(): Could not find all widgets in Glade file!"); - gtk_object_unref (GTK_OBJECT (an->xml)); - g_free (an); - return FALSE; - } - - gtk_object_set_data (GTK_OBJECT (an->dialog), "alarm-notify", an); - gtk_signal_connect (GTK_OBJECT (an->dialog), "destroy", - GTK_SIGNAL_FUNC (dialog_destroy_cb), an); - - /* Title */ - - /* FIXME: use am_pm_flag or 24-hour time */ - - tm_trigger = *localtime (&trigger); - strftime (buf, sizeof (buf), _("Alarm on %A %b %d %Y %H:%M"), &tm_trigger); - gtk_window_set_title (GTK_WINDOW (an->dialog), buf); - - /* Heading */ - - tm_occur = *localtime (&occur); - strftime (buf, sizeof (buf), - _("Notification about your appointment on %A %b %d %Y %H:%M"), - &tm_occur); - gtk_label_set_text (GTK_LABEL (an->heading), buf); - - /* Summary */ - - cal_component_get_summary (comp, &summary); - - if (summary.value) - gtk_label_set_text (GTK_LABEL (an->summary), summary.value); - else - gtk_label_set_text (GTK_LABEL (an->summary), _("No summary available.")); - - /* Connect actions */ - - gtk_signal_connect (GTK_OBJECT (an->dialog), "delete_event", - GTK_SIGNAL_FUNC (delete_event_cb), - an); - - gtk_signal_connect (GTK_OBJECT (an->close), "clicked", - GTK_SIGNAL_FUNC (close_clicked_cb), - an); - - gtk_signal_connect (GTK_OBJECT (an->snooze), "clicked", - GTK_SIGNAL_FUNC (snooze_clicked_cb), - an); - - gtk_signal_connect (GTK_OBJECT (an->edit), "clicked", - GTK_SIGNAL_FUNC (edit_clicked_cb), - an); - - /* Run! */ - - gtk_widget_show (an->dialog); - return TRUE; -} diff --git a/calendar/gui/alarm-notify/alarm-notify-dialog.h b/calendar/gui/alarm-notify/alarm-notify-dialog.h deleted file mode 100644 index 1e56f1c586..0000000000 --- a/calendar/gui/alarm-notify/alarm-notify-dialog.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Evolution calendar - alarm notification dialog - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef ALARM_NOTIFY_DIALOG_H -#define ALARM_NOTIFY_DIALOG_H - -#include -#include -#include - - - -typedef enum { - ALARM_NOTIFY_CLOSE, - ALARM_NOTIFY_SNOOZE, - ALARM_NOTIFY_EDIT -} AlarmNotifyResult; - -typedef void (* AlarmNotifyFunc) (AlarmNotifyResult result, int snooze_mins, gpointer data); - -gboolean alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, - AlarmNotifyFunc func, gpointer func_data); - - - -#endif diff --git a/calendar/gui/alarm-notify/alarm-notify.glade b/calendar/gui/alarm-notify/alarm-notify.glade deleted file mode 100644 index 32d7e03f8b..0000000000 --- a/calendar/gui/alarm-notify/alarm-notify.glade +++ /dev/null @@ -1,230 +0,0 @@ - - - - - Evolution Calendar - evolution-calendar - - src - pixmaps - C - True - True - False - True - True - True - True - interface.c - interface.h - callbacks.c - callbacks.h - support.c - support.h - True - alarm-notify.glade.h - - - - GtkWindow - alarm-notify - True - - GTK_WINDOW_DIALOG - GTK_WIN_POS_CENTER - False - False - False - False - - - GtkVBox - vbox2 - 4 - True - False - 4 - - - GtkHBox - hbox3 - True - False - 8 - - 0 - True - True - - - - GtkVBox - vbox5 - True - False - 4 - - 0 - True - True - - - - GtkLabel - heading - True - - GTK_JUSTIFY_LEFT - True - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkLabel - summary - True - - GTK_JUSTIFY_LEFT - True - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - GtkVBox - vbox4 - True - False - 4 - - 0 - True - True - - - - GtkButton - close - True - True - - - 0 - False - False - - - - - GtkButton - snooze - True - True - - - 0 - False - False - - - - - GtkButton - edit - True - True - - - 0 - False - False - - - - - - - GtkHSeparator - hseparator1 - True - - 0 - True - True - - - - - GtkHBox - hbox4 - True - False - 4 - - 0 - True - True - - - - GtkLabel - label4 - True - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkSpinButton - snooze-time - True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 5 - 1 - 1440 - 1 - 5 - 5 - - 0 - False - False - - - - - - - diff --git a/calendar/gui/alarm-notify/alarm.c b/calendar/gui/alarm-notify/alarm.c deleted file mode 100644 index c89b65ff5e..0000000000 --- a/calendar/gui/alarm-notify/alarm.c +++ /dev/null @@ -1,304 +0,0 @@ -/* Evolution calendar - alarm notification support - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Miguel de Icaza - * Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include -#include "alarm.h" - - - -/* The pipes used to notify about an alarm */ -static int alarm_pipes [2]; - -/* The list of pending alarms */ -static GList *alarms; - -/* A queued alarm structure */ -typedef struct { - time_t trigger; - AlarmFunction alarm_fn; - gpointer data; - AlarmDestroyNotify destroy_notify_fn; -} AlarmRecord; - - - -/* SIGALRM handler. Notifies the callback about the alarm. */ -static void -alarm_signal (int arg) -{ - char c = 0; - - write (alarm_pipes [1], &c, 1); -} - -/* Sets up an itimer and returns a success code */ -static gboolean -setup_itimer (time_t diff) -{ - struct itimerval itimer; - int v; - - itimer.it_interval.tv_sec = 0; - itimer.it_interval.tv_usec = 0; - itimer.it_value.tv_sec = diff; - itimer.it_value.tv_usec = 0; - - v = setitimer (ITIMER_REAL, &itimer, NULL); - - return (v == 0) ? TRUE : FALSE; -} - -/* Removes the head alarm, returns it, and schedules the next alarm in the - * queue. - */ -static AlarmRecord * -pop_alarm (void) -{ - AlarmRecord *ar; - GList *l; - - if (!alarms) - return NULL; - - ar = alarms->data; - - l = alarms; - alarms = g_list_remove_link (alarms, l); - g_list_free_1 (l); - - if (alarms) { - time_t now; - AlarmRecord *new_ar; - - now = time (NULL); - new_ar = alarms->data; - - if (!setup_itimer (new_ar->trigger - now)) { - g_message ("pop_alarm(): Could not reset the timer! " - "Weird things will happen."); - - /* FIXME: should we free the alarm list? What - * about further alarm removal requests that - * will fail? - */ - } - } else { - struct itimerval itimer; - int v; - - itimer.it_interval.tv_sec = 0; - itimer.it_interval.tv_usec = 0; - itimer.it_value.tv_sec = 0; - itimer.it_value.tv_usec = 0; - - v = setitimer (ITIMER_REAL, &itimer, NULL); - if (v != 0) - g_message ("pop_alarm(): Could not clear the timer! " - "Weird things may happen."); - } - - return ar; -} - -/* Input handler for our own alarm notification pipe */ -static void -alarm_ready (gpointer data, gint fd, GdkInputCondition cond) -{ - AlarmRecord *ar; - char c; - - if (read (alarm_pipes [0], &c, 1) != 1) { - g_message ("alarm_ready(): Uh? Could not read from notification pipe."); - return; - } - - g_assert (alarms != NULL); - ar = pop_alarm (); - - g_message ("alarm_ready(): Notifying about alarm on %s", ctime (&ar->trigger)); - - (* ar->alarm_fn) (ar, ar->trigger, ar->data); - - if (ar->destroy_notify_fn) - (* ar->destroy_notify_fn) (ar->data); - - g_free (ar); -} - -static int -compare_alarm_by_time (gconstpointer a, gconstpointer b) -{ - const AlarmRecord *ara = a; - const AlarmRecord *arb = b; - time_t diff; - - diff = ara->trigger - arb->trigger; - return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; -} - -/* Adds an alarm to the queue and sets up the timer */ -static gboolean -queue_alarm (time_t now, AlarmRecord *ar) -{ - time_t diff; - AlarmRecord *old_head; - - if (alarms) - old_head = alarms->data; - else - old_head = NULL; - - alarms = g_list_insert_sorted (alarms, ar, compare_alarm_by_time); - - if (old_head == alarms->data) - return TRUE; - - /* Set the timer for removal upon activation */ - - diff = ar->trigger - now; - if (!setup_itimer (diff)) { - GList *l; - - g_message ("queue_alarm(): Could not set up timer! Not queueing alarm."); - - l = g_list_find (alarms, ar); - g_assert (l != NULL); - - alarms = g_list_remove_link (alarms, l); - g_list_free_1 (l); - return FALSE; - } - - return TRUE; -} - -/** - * alarm_add: - * @trigger: Time at which alarm will trigger. - * @alarm_fn: Callback for trigger. - * @data: Closure data for callback. - * - * Adds an alarm to trigger at the specified time. The @alarm_fn will be called - * with the provided data and the alarm will be removed from the trigger list. - * - * Return value: An identifier for this alarm; it can be used to remove the - * alarm later with alarm_remove(). If the trigger time occurs in the past, then - * the alarm will not be queued and the function will return NULL. - **/ -gpointer -alarm_add (time_t trigger, AlarmFunction alarm_fn, gpointer data, - AlarmDestroyNotify destroy_notify_fn) -{ - time_t now; - AlarmRecord *ar; - - now = time (NULL); - if (trigger < now) - return NULL; - - ar = g_new (AlarmRecord, 1); - ar->trigger = trigger; - ar->alarm_fn = alarm_fn; - ar->data = data; - ar->destroy_notify_fn = destroy_notify_fn; - - g_message ("alarm_add(): Adding alarm for %s", ctime (&trigger)); - - if (!queue_alarm (now, ar)) { - if (ar->destroy_notify_fn) - (* ar->destroy_notify_fn) (ar->data); - - g_free (ar); - ar = NULL; - } - - return ar; -} - -/** - * alarm_remove: - * @alarm: A queued alarm identifier. - * - * Removes an alarm from the alarm queue. - **/ -void -alarm_remove (gpointer alarm) -{ - AlarmRecord *ar; - AlarmRecord *old_head; - GList *l; - - ar = alarm; - - l = g_list_find (alarms, ar); - if (!l) { - g_message ("alarm_remove(): Requested removal of nonexistent alarm!"); - return; - } - - old_head = alarms->data; - - if (old_head == ar) - pop_alarm (); - else { - alarms = g_list_remove_link (alarms, l); - g_list_free_1 (l); - } - - if (ar->destroy_notify_fn) - (* ar->destroy_notify_fn) (ar->data); - - g_free (ar); -} - -/** - * alarm_init: - * @void: - * - * Initializes the alarm notification system. This must be called near the - * beginning of the program. - **/ -void -alarm_init (void) -{ - struct sigaction sa; - int flags; - - pipe (alarm_pipes); - - /* set non blocking mode */ - flags = 0; - fcntl (alarm_pipes [0], F_GETFL, &flags); - fcntl (alarm_pipes [0], F_SETFL, flags | O_NONBLOCK); - gdk_input_add (alarm_pipes [0], GDK_INPUT_READ, alarm_ready, NULL); - - /* Setup the signal handler */ - sa.sa_handler = alarm_signal; - sigemptyset (&sa.sa_mask); - sa.sa_flags = SA_RESTART; - sigaction (SIGALRM, &sa, NULL); -} diff --git a/calendar/gui/alarm-notify/alarm.h b/calendar/gui/alarm-notify/alarm.h deleted file mode 100644 index 2394d28024..0000000000 --- a/calendar/gui/alarm-notify/alarm.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Evolution calendar - alarm notification support - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Miguel de Icaza - * Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef ALARM_H -#define ALARM_H - -#include - - - -typedef void (* AlarmFunction) (gpointer alarm_id, time_t trigger, gpointer data); -typedef void (* AlarmDestroyNotify) (gpointer data); - -void alarm_init (void); -gpointer alarm_add (time_t trigger, AlarmFunction alarm_fn, gpointer data, - AlarmDestroyNotify destroy_notify_fn); -void alarm_remove (gpointer alarm); - - - -#endif diff --git a/calendar/gui/alarm.c b/calendar/gui/alarm.c deleted file mode 100644 index c89b65ff5e..0000000000 --- a/calendar/gui/alarm.c +++ /dev/null @@ -1,304 +0,0 @@ -/* Evolution calendar - alarm notification support - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Miguel de Icaza - * Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include -#include "alarm.h" - - - -/* The pipes used to notify about an alarm */ -static int alarm_pipes [2]; - -/* The list of pending alarms */ -static GList *alarms; - -/* A queued alarm structure */ -typedef struct { - time_t trigger; - AlarmFunction alarm_fn; - gpointer data; - AlarmDestroyNotify destroy_notify_fn; -} AlarmRecord; - - - -/* SIGALRM handler. Notifies the callback about the alarm. */ -static void -alarm_signal (int arg) -{ - char c = 0; - - write (alarm_pipes [1], &c, 1); -} - -/* Sets up an itimer and returns a success code */ -static gboolean -setup_itimer (time_t diff) -{ - struct itimerval itimer; - int v; - - itimer.it_interval.tv_sec = 0; - itimer.it_interval.tv_usec = 0; - itimer.it_value.tv_sec = diff; - itimer.it_value.tv_usec = 0; - - v = setitimer (ITIMER_REAL, &itimer, NULL); - - return (v == 0) ? TRUE : FALSE; -} - -/* Removes the head alarm, returns it, and schedules the next alarm in the - * queue. - */ -static AlarmRecord * -pop_alarm (void) -{ - AlarmRecord *ar; - GList *l; - - if (!alarms) - return NULL; - - ar = alarms->data; - - l = alarms; - alarms = g_list_remove_link (alarms, l); - g_list_free_1 (l); - - if (alarms) { - time_t now; - AlarmRecord *new_ar; - - now = time (NULL); - new_ar = alarms->data; - - if (!setup_itimer (new_ar->trigger - now)) { - g_message ("pop_alarm(): Could not reset the timer! " - "Weird things will happen."); - - /* FIXME: should we free the alarm list? What - * about further alarm removal requests that - * will fail? - */ - } - } else { - struct itimerval itimer; - int v; - - itimer.it_interval.tv_sec = 0; - itimer.it_interval.tv_usec = 0; - itimer.it_value.tv_sec = 0; - itimer.it_value.tv_usec = 0; - - v = setitimer (ITIMER_REAL, &itimer, NULL); - if (v != 0) - g_message ("pop_alarm(): Could not clear the timer! " - "Weird things may happen."); - } - - return ar; -} - -/* Input handler for our own alarm notification pipe */ -static void -alarm_ready (gpointer data, gint fd, GdkInputCondition cond) -{ - AlarmRecord *ar; - char c; - - if (read (alarm_pipes [0], &c, 1) != 1) { - g_message ("alarm_ready(): Uh? Could not read from notification pipe."); - return; - } - - g_assert (alarms != NULL); - ar = pop_alarm (); - - g_message ("alarm_ready(): Notifying about alarm on %s", ctime (&ar->trigger)); - - (* ar->alarm_fn) (ar, ar->trigger, ar->data); - - if (ar->destroy_notify_fn) - (* ar->destroy_notify_fn) (ar->data); - - g_free (ar); -} - -static int -compare_alarm_by_time (gconstpointer a, gconstpointer b) -{ - const AlarmRecord *ara = a; - const AlarmRecord *arb = b; - time_t diff; - - diff = ara->trigger - arb->trigger; - return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; -} - -/* Adds an alarm to the queue and sets up the timer */ -static gboolean -queue_alarm (time_t now, AlarmRecord *ar) -{ - time_t diff; - AlarmRecord *old_head; - - if (alarms) - old_head = alarms->data; - else - old_head = NULL; - - alarms = g_list_insert_sorted (alarms, ar, compare_alarm_by_time); - - if (old_head == alarms->data) - return TRUE; - - /* Set the timer for removal upon activation */ - - diff = ar->trigger - now; - if (!setup_itimer (diff)) { - GList *l; - - g_message ("queue_alarm(): Could not set up timer! Not queueing alarm."); - - l = g_list_find (alarms, ar); - g_assert (l != NULL); - - alarms = g_list_remove_link (alarms, l); - g_list_free_1 (l); - return FALSE; - } - - return TRUE; -} - -/** - * alarm_add: - * @trigger: Time at which alarm will trigger. - * @alarm_fn: Callback for trigger. - * @data: Closure data for callback. - * - * Adds an alarm to trigger at the specified time. The @alarm_fn will be called - * with the provided data and the alarm will be removed from the trigger list. - * - * Return value: An identifier for this alarm; it can be used to remove the - * alarm later with alarm_remove(). If the trigger time occurs in the past, then - * the alarm will not be queued and the function will return NULL. - **/ -gpointer -alarm_add (time_t trigger, AlarmFunction alarm_fn, gpointer data, - AlarmDestroyNotify destroy_notify_fn) -{ - time_t now; - AlarmRecord *ar; - - now = time (NULL); - if (trigger < now) - return NULL; - - ar = g_new (AlarmRecord, 1); - ar->trigger = trigger; - ar->alarm_fn = alarm_fn; - ar->data = data; - ar->destroy_notify_fn = destroy_notify_fn; - - g_message ("alarm_add(): Adding alarm for %s", ctime (&trigger)); - - if (!queue_alarm (now, ar)) { - if (ar->destroy_notify_fn) - (* ar->destroy_notify_fn) (ar->data); - - g_free (ar); - ar = NULL; - } - - return ar; -} - -/** - * alarm_remove: - * @alarm: A queued alarm identifier. - * - * Removes an alarm from the alarm queue. - **/ -void -alarm_remove (gpointer alarm) -{ - AlarmRecord *ar; - AlarmRecord *old_head; - GList *l; - - ar = alarm; - - l = g_list_find (alarms, ar); - if (!l) { - g_message ("alarm_remove(): Requested removal of nonexistent alarm!"); - return; - } - - old_head = alarms->data; - - if (old_head == ar) - pop_alarm (); - else { - alarms = g_list_remove_link (alarms, l); - g_list_free_1 (l); - } - - if (ar->destroy_notify_fn) - (* ar->destroy_notify_fn) (ar->data); - - g_free (ar); -} - -/** - * alarm_init: - * @void: - * - * Initializes the alarm notification system. This must be called near the - * beginning of the program. - **/ -void -alarm_init (void) -{ - struct sigaction sa; - int flags; - - pipe (alarm_pipes); - - /* set non blocking mode */ - flags = 0; - fcntl (alarm_pipes [0], F_GETFL, &flags); - fcntl (alarm_pipes [0], F_SETFL, flags | O_NONBLOCK); - gdk_input_add (alarm_pipes [0], GDK_INPUT_READ, alarm_ready, NULL); - - /* Setup the signal handler */ - sa.sa_handler = alarm_signal; - sigemptyset (&sa.sa_mask); - sa.sa_flags = SA_RESTART; - sigaction (SIGALRM, &sa, NULL); -} diff --git a/calendar/gui/alarm.h b/calendar/gui/alarm.h deleted file mode 100644 index 2394d28024..0000000000 --- a/calendar/gui/alarm.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Evolution calendar - alarm notification support - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Miguel de Icaza - * Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef ALARM_H -#define ALARM_H - -#include - - - -typedef void (* AlarmFunction) (gpointer alarm_id, time_t trigger, gpointer data); -typedef void (* AlarmDestroyNotify) (gpointer data); - -void alarm_init (void); -gpointer alarm_add (time_t trigger, AlarmFunction alarm_fn, gpointer data, - AlarmDestroyNotify destroy_notify_fn); -void alarm_remove (gpointer alarm); - - - -#endif diff --git a/calendar/gui/bell.xpm b/calendar/gui/bell.xpm deleted file mode 100644 index b1ab537a17..0000000000 --- a/calendar/gui/bell.xpm +++ /dev/null @@ -1,83 +0,0 @@ -/* XPM */ -static char * bell_xpm[] = { -"16 16 64 1", -" c None", -". c #000000", -"+ c #E3BB43", -"@ c #E6C049", -"# c #EED275", -"$ c #F4E193", -"% c #F4DF8C", -"& c #EAC95C", -"* c #EFD57A", -"= c #FAEFBB", -"- c #FDF6D3", -"; c #FDF5C6", -"> c #F4E18F", -", c #E4BD43", -"' c #F6E295", -") c #FEF9D8", -"! c #FFFFFF", -"~ c #FFFADA", -"{ c #FCEEAA", -"] c #EBCA5A", -"^ c #E9C550", -"/ c #FAEA9C", -"( c #FEF7CB", -"_ c #FFF8CC", -": c #FDF1A8", -"< c #EED060", -"[ c #D39D12", -"} c #F2D55D", -"| c #FCEC91", -"1 c #FFF4AE", -"2 c #FFF5B6", -"3 c #FEEF97", -"4 c #F3D65E", -"5 c #D5A216", -"6 c #FAE05C", -"7 c #FFED7C", -"8 c #FFEF8C", -"9 c #FFF092", -"0 c #FDEB7A", -"a c #F4D750", -"b c #D8A717", -"c c #EAC01D", -"d c #F6D83E", -"e c #FAE255", -"f c #FAE362", -"g c #F9E161", -"h c #F6DE5B", -"i c #F1D145", -"j c #E6BE28", -"k c #D09B09", -"l c #B67E00", -"m c #CE9100", -"n c #D69F04", -"o c #E0B011", -"p c #E6BA1D", -"q c #E3B721", -"r c #E0B21E", -"s c #DCAB16", -"t c #D7A20D", -"u c #CC9303", -"v c #BE8400", -"w c #AC7500", -"x c #A06B00", -"y c #FFDD00", -" ", -" .. ", -" .+@. ", -" .#$%&. ", -" .*=-;>,. ", -" .')!~{]. ", -" .^/(~_:<[. ", -" .}|121345. ", -" .678980ab. ", -" .cdefghijkl. ", -" .mnopqrstuvwx. ", -" .............. ", -" .8y. ", -" .. ", -" ", -" "}; diff --git a/calendar/gui/calendar-commands.c b/calendar/gui/calendar-commands.c deleted file mode 100644 index 2dd63f832c..0000000000 --- a/calendar/gui/calendar-commands.c +++ /dev/null @@ -1,855 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Main file for the GNOME Calendar program - * Copyright (C) 1998 the Free Software Foundation - * - * Authors: - * Miguel de Icaza (miguel@kernel.org) - * Federico Mena (federico@helixcode.com) - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "gnome-cal.h" -#include "calendar-commands.h" -#include "print.h" - -#include "dayview.xpm" -#include "workweekview.xpm" -#include "weekview.xpm" -#include "monthview.xpm" - -#if 0 -#include "yearview.xpm" -#endif - -/* The username, used to set the `owner' field of the event */ -char *user_name; - -/* The full user name from the Gecos field */ -char *full_name; - -/* a gnome-config string prefix that can be used to access the calendar config info */ -char *calendar_settings; - -/* Day begin, day end parameters */ -int day_begin, day_end; - -/* Whether weeks starts on Sunday or Monday */ -int week_starts_on_monday; - -/* If AM/PM indicators should be used. This may not be supported by the new - views. */ -int am_pm_flag = 0; - -/* The array of color properties -- keep in sync with the enumeration defined in main.h. The color - * values specified here are the defaults for the program. - */ -struct color_prop color_props[] = { - { 0x3e72, 0x35ec, 0x8ba2, N_("Outline:"), "/calendar/Colors/outline" }, - { 0xffff, 0xffff, 0xffff, N_("Headings:"), "/calendar/Colors/headings" }, - { 0xf26c, 0xecec, 0xbbe7, N_("Empty days:"), "/calendar/Colors/empty_bg" }, - { 0xfc1e, 0xf87f, 0x5f80, N_("Appointments:"), "/calendar/Colors/mark_bg" }, - { 0xd364, 0xc6b7, 0x7969, N_("Highlighted day:"), "/calendar/Colors/prelight_bg" }, - { 0x01f0, 0x01f0, 0x01f0, N_("Day numbers:"), "/calendar/Colors/day_fg" }, - { 0x0000, 0x0000, 0xffff, N_("Current day's number:"), "/calendar/Colors/current_fg" }, - { 0xbbbb, 0xbbbb, 0x0000, N_("To-Do item that is not yet due:"), "/calendar/Colors/todo_not_yet" }, - { 0xdddd, 0xbbbb, 0x0000, N_("To-Do item that is due today:"), "/calendar/Colors/todo_today" }, - { 0xbbbb, 0xdddd, 0x0000, N_("To-Do item that is overdue:"), "/calendar/Colors/todo_overdue" } -}; - -/* Number of active calendars */ -int active_calendars = 0; - -/* A list of all of the calendars started */ -GList *all_calendars = NULL; - -/* If set, beep on display alarms */ -gboolean beep_on_display = 0; - -/* If true, timeout the beeper on audio alarms */ - -gboolean enable_aalarm_timeout = 0; -guint audio_alarm_timeout = 0; -const guint MAX_AALARM_TIMEOUT = 3600; -const guint MAX_SNOOZE_SECS = 3600; -gboolean enable_snooze = 0; -guint snooze_secs = 60; - -#if 0 -CalendarAlarm alarm_defaults[4] = { - { ALARM_MAIL, 0, 15, ALARM_MINUTES }, - { ALARM_PROGRAM, 0, 15, ALARM_MINUTES }, - { ALARM_DISPLAY, 0, 15, ALARM_MINUTES }, - { ALARM_AUDIO, 0, 15, ALARM_MINUTES } -}; -#endif - -static void -init_username (void) -{ - user_name = g_strdup(g_get_user_name()); - full_name = g_strdup(g_get_real_name()); -} - -static int -range_check_hour (int hour) -{ - if (hour < 0) - hour = 0; - else if (hour >= 24) - hour = 23; - - return hour; -} - -#if 0 -static void -init_default_alarms (void) -{ - int i; - gboolean def; - - alarm_defaults [ALARM_DISPLAY].type = ALARM_DISPLAY; - alarm_defaults [ALARM_AUDIO].type = ALARM_AUDIO; - alarm_defaults [ALARM_PROGRAM].type = ALARM_PROGRAM; - alarm_defaults [ALARM_MAIL].type = ALARM_MAIL; - - for (i = 0; i < 4; i++) { - switch (alarm_defaults [i].type) { - case ALARM_DISPLAY: - gnome_config_push_prefix ("/calendar/alarms/def_disp_"); - break; - case ALARM_AUDIO: - gnome_config_push_prefix ("/calendar/alarms/def_audio_"); - break; - case ALARM_PROGRAM: - gnome_config_push_prefix ("/calendar/alarms/def_prog_"); - break; - case ALARM_MAIL: - gnome_config_push_prefix ("/calendar/alarms/def_mail_"); - break; - } - - alarm_defaults[i].enabled = gnome_config_get_int ("enabled=0"); - if (alarm_defaults[i].type != ALARM_MAIL) { - alarm_defaults[i].count = gnome_config_get_int ("count=15"); - alarm_defaults[i].units = gnome_config_get_int ("units=0"); - } else { - alarm_defaults[i].count = gnome_config_get_int ("count=1"); - alarm_defaults[i].count = gnome_config_get_int ("count=2"); - } - - alarm_defaults[i].data = gnome_config_get_string_with_default ("data=", - &def); - if (def) - alarm_defaults[i].data = NULL; - - gnome_config_pop_prefix (); - } -} -#endif - -static void -about_calendar_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GtkWidget *about; - const gchar *authors[] = { - "Miguel de Icaza (miguel@kernel.org)", - "Federico Mena (federico@gimp.org)", - "Arturo Espinosa (arturo@nuclecu.unam.mx)", - "Russell Steinthal (rms39@columbia.edu)", - NULL - }; - - about = gnome_about_new (_("Gnome Calendar"), VERSION, - "(C) 1998 the Free Software Foundation", - authors, - _("The GNOME personal calendar and schedule manager."), - NULL); - gtk_window_set_modal (GTK_WINDOW (about), TRUE); - gnome_dialog_set_close (GNOME_DIALOG (about), TRUE); - gtk_widget_show (about); -} - -/* Callback for the new appointment command */ -static void -new_appointment_cb (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal; - - gcal = GNOME_CALENDAR (user_data); - gnome_calendar_new_appointment (gcal); -} - -/* Prints the calendar at its current view and time range */ -static void -print (GnomeCalendar *gcal, gboolean preview) -{ - time_t start; - const char *view; - PrintView print_view; - - gnome_calendar_get_current_time_range (gcal, &start, NULL); - view = gnome_calendar_get_current_view_name (gcal); - - if (strcmp (view, "dayview") == 0) - print_view = PRINT_VIEW_DAY; - else if (strcmp (view, "workweekview") == 0 || strcmp (view, "weekview") == 0) - print_view = PRINT_VIEW_WEEK; - else if (strcmp (view, "monthview") == 0) - print_view = PRINT_VIEW_MONTH; - else { - g_assert_not_reached (); - print_view = PRINT_VIEW_DAY; - } - - print_calendar (gcal, preview, start, print_view); -} - -/* Toolbar/Print callback */ -static void -tb_print_cb (GtkWidget *widget, gpointer data) -{ - GnomeCalendar *gcal; - - gcal = GNOME_CALENDAR (data); - print (gcal, FALSE); -} - -/* File/Print callback */ -static void -file_print_cb (BonoboUIHandler *uih, void *data, const char *path) -{ - GnomeCalendar *gcal; - - gcal = GNOME_CALENDAR (data); - print (gcal, FALSE); -} - -void -time_format_changed (void) -{ - GList *l; - - for (l = all_calendars; l; l = l->next) - gnome_calendar_time_format_changed (GNOME_CALENDAR (l->data)); -} - -void -colors_changed (void) -{ - GList *l; - - for (l = all_calendars; l; l = l->next) - gnome_calendar_colors_changed (GNOME_CALENDAR (l->data)); -} - -void -todo_properties_changed(void) -{ - GList *l; - - for (l = all_calendars; l; l = l->next) - gnome_calendar_todo_properties_changed (GNOME_CALENDAR (l->data)); -} - -/* Sets a clock cursor for the specified calendar window */ -static void -set_clock_cursor (GnomeCalendar *gcal) -{ - GdkCursor *cursor; - - cursor = gdk_cursor_new (GDK_WATCH); - gdk_window_set_cursor (GTK_WIDGET (gcal)->window, cursor); - gdk_cursor_destroy (cursor); - gdk_flush (); -} - -/* Resets the normal cursor for the specified calendar window */ -static void -set_normal_cursor (GnomeCalendar *gcal) -{ - gdk_window_set_cursor (GTK_WIDGET (gcal)->window, NULL); - gdk_flush (); -} - -static void -previous_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - set_clock_cursor (gcal); - gnome_calendar_previous (gcal); - set_normal_cursor (gcal); -} - -static void -next_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - set_clock_cursor (gcal); - gnome_calendar_next (gcal); - set_normal_cursor (gcal); -} - -static void -today_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - set_clock_cursor (gcal); - gnome_calendar_goto_today (gcal); - set_normal_cursor (gcal); -} - -static void -goto_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - goto_dialog (gcal); -} - -static void -show_day_view_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - gnome_calendar_set_view (gcal, "dayview"); - gtk_widget_grab_focus (gcal->day_view); -} - -static void -show_work_week_view_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - gnome_calendar_set_view (gcal, "workweekview"); - gtk_widget_grab_focus (gcal->work_week_view); -} - -static void -show_week_view_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - gnome_calendar_set_view (gcal, "weekview"); - gtk_widget_grab_focus (gcal->week_view); -} - -static void -show_month_view_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - gnome_calendar_set_view (gcal, "monthview"); - gtk_widget_grab_focus (gcal->month_view); -} - -#if 0 -static void -show_year_view_clicked (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - gnome_calendar_set_view (gcal, "yearview"); - gtk_widget_grab_focus (gcal->year_view); -} -#endif - -static void -new_calendar_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - new_calendar (full_name, NULL, NULL, FALSE); -} - -static void -close_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - all_calendars = g_list_remove (all_calendars, gcal); - - gtk_widget_destroy (GTK_WIDGET (gcal)); - active_calendars--; - - if (active_calendars == 0) - gtk_main_quit (); -} - - -void -quit_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - while (all_calendars){ - GnomeCalendar *cal = GNOME_CALENDAR (all_calendars->data); - - close_cmd (uih, cal, path); - } -} - - -static void -open_ok (GtkWidget *widget, GtkFileSelection *fs) -{ - GtkWidget *error_dialog; - int ret; - if(!g_file_exists (gtk_file_selection_get_filename (fs))) { - error_dialog = gnome_message_box_new ( - _("File not found"), - GNOME_MESSAGE_BOX_ERROR, - GNOME_STOCK_BUTTON_OK, - NULL); - - gnome_dialog_set_parent (GNOME_DIALOG (error_dialog), GTK_WINDOW (fs)); - ret = gnome_dialog_run (GNOME_DIALOG (error_dialog)); - } else { - /* FIXME: find out who owns this calendar and use that name */ -#warning "FIXME: find out who owns this calendar and use that name" - /* - new_calendar ("Somebody", gtk_file_selection_get_filename (fs), NULL, NULL, FALSE); - */ - gtk_widget_destroy (GTK_WIDGET (fs)); - } -} - -static void -open_calendar_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GtkFileSelection *fs; - - fs = GTK_FILE_SELECTION (gtk_file_selection_new (_("Open calendar"))); - - gtk_signal_connect (GTK_OBJECT (fs->ok_button), "clicked", - (GtkSignalFunc) open_ok, - fs); - gtk_signal_connect_object (GTK_OBJECT (fs->cancel_button), "clicked", - (GtkSignalFunc) gtk_widget_destroy, - GTK_OBJECT (fs)); - - gtk_widget_show (GTK_WIDGET (fs)); - gtk_grab_add (GTK_WIDGET (fs)); /* Yes, it is modal, so sue me */ -} - -static void -save_ok (GtkWidget *widget, GtkFileSelection *fs) -{ - GnomeCalendar *gcal; - gchar *fname; - - gcal = GNOME_CALENDAR (gtk_object_get_user_data (GTK_OBJECT (fs))); - gtk_window_set_wmclass (GTK_WINDOW (gcal), "gnomecal", "gnomecal"); - - fname = g_strdup (gtk_file_selection_get_filename (fs)); - g_free(fname); - gtk_main_quit (); -} - -static gint -close_save (GtkWidget *w) -{ - gtk_main_quit (); - return TRUE; -} - -static void -save_as_calendar_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GtkFileSelection *fs; - - fs = GTK_FILE_SELECTION (gtk_file_selection_new (_("Save calendar"))); - gtk_object_set_user_data (GTK_OBJECT (fs), user_data); - - gtk_signal_connect (GTK_OBJECT (fs->ok_button), "clicked", - (GtkSignalFunc) save_ok, - fs); - gtk_signal_connect_object (GTK_OBJECT (fs->cancel_button), "clicked", - (GtkSignalFunc) close_save, - GTK_OBJECT (fs)); - gtk_signal_connect_object (GTK_OBJECT (fs), "delete_event", - GTK_SIGNAL_FUNC (close_save), - GTK_OBJECT (fs)); - gtk_widget_show (GTK_WIDGET (fs)); - gtk_grab_add (GTK_WIDGET (fs)); /* Yes, it is modal, so sue me even more */ - gtk_main (); - gtk_widget_destroy (GTK_WIDGET (fs)); -} - -static void -properties_cmd (BonoboUIHandler *uih, void *user_data, const char *path) -{ - GnomeCalendar *gcal = GNOME_CALENDAR (user_data); - properties (GTK_WIDGET (gcal)); -} - - -static GnomeUIInfo gnome_toolbar_view_buttons [] = { - GNOMEUIINFO_RADIOITEM (N_("Day"), N_("Show 1 day"), - show_day_view_clicked, - dayview_xpm), - GNOMEUIINFO_RADIOITEM (N_("5 Days"), N_("Show the working week"), - show_work_week_view_clicked, - workweekview_xpm), - GNOMEUIINFO_RADIOITEM (N_("Week"), N_("Show 1 week"), - show_week_view_clicked, - weekview_xpm), - GNOMEUIINFO_RADIOITEM (N_("Month"), N_("Show 1 month"), - show_month_view_clicked, - monthview_xpm), -#if 0 - GNOMEUIINFO_RADIOITEM (N_("Year"), N_("Show 1 year"), - show_year_view_clicked, - yearview_xpm), -#endif - GNOMEUIINFO_END -}; - - -static GnomeUIInfo calendar_toolbar [] = { - GNOMEUIINFO_ITEM_STOCK (N_("New"), N_("Create a new appointment"), - new_appointment_cb, GNOME_STOCK_PIXMAP_NEW), - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print this calendar"), tb_print_cb, GNOME_STOCK_PIXMAP_PRINT), - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_ITEM_STOCK (N_("Prev"), N_("Go back in time"), previous_clicked, GNOME_STOCK_PIXMAP_BACK), - GNOMEUIINFO_ITEM_STOCK (N_("Today"), N_("Go to present time"), today_clicked, GNOME_STOCK_PIXMAP_HOME), - GNOMEUIINFO_ITEM_STOCK (N_("Next"), N_("Go forward in time"), next_clicked, GNOME_STOCK_PIXMAP_FORWARD), - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_ITEM_STOCK (N_("Go to"), N_("Go to a specific date"), goto_clicked, GNOME_STOCK_PIXMAP_JUMP_TO), - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_RADIOLIST (gnome_toolbar_view_buttons), - - GNOMEUIINFO_END -}; - - - -/* Performs signal connection as appropriate for interpreters or native bindings */ -static void -do_ui_signal_connect (GnomeUIInfo *uiinfo, gchar *signal_name, - GnomeUIBuilderData *uibdata) -{ - if (uibdata->is_interp) - gtk_signal_connect_full (GTK_OBJECT (uiinfo->widget), - signal_name, NULL, uibdata->relay_func, - uibdata->data ? - uibdata->data : uiinfo->user_data, - uibdata->destroy_func, FALSE, FALSE); - - else if (uiinfo->moreinfo) - gtk_signal_connect (GTK_OBJECT (uiinfo->widget), - signal_name, uiinfo->moreinfo, uibdata->data ? - uibdata->data : uiinfo->user_data); -} - - -void -calendar_control_activate (BonoboControl *control, - GnomeCalendar *cal) -{ - Bonobo_UIHandler remote_uih; - GtkWidget *toolbar, *toolbar_frame; - BonoboControl *toolbar_control; - GnomeUIBuilderData uibdata; - BonoboUIHandler *uih; - gchar *page_name; - gint button, i; - int behavior; - - uih = bonobo_control_get_ui_handler (control); - g_assert (uih != NULL); - - uibdata.connect_func = do_ui_signal_connect; - uibdata.data = cal; - uibdata.is_interp = FALSE; - uibdata.relay_func = NULL; - uibdata.destroy_func = NULL; - - g_print ("In calendar_control_activate\n"); - - remote_uih = bonobo_control_get_remote_ui_handler (control); - bonobo_ui_handler_set_container (uih, remote_uih); - bonobo_object_release_unref (remote_uih, NULL); - - toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, - GTK_TOOLBAR_BOTH); - gnome_app_fill_toolbar_custom (GTK_TOOLBAR (toolbar), - calendar_toolbar, &uibdata, - /*app->accel_group*/ NULL); - - /*gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));*/ - - for (i = 0; i < GNOME_CALENDAR_NUM_VIEWS; i++) - cal->view_toolbar_buttons[i] = gnome_toolbar_view_buttons[i].widget; - - /* Note that these indices should correspond with the button indices - in gnome_toolbar_view_buttons. */ - page_name = gnome_calendar_get_current_view_name (cal); - if (!strcmp (page_name, "dayview")) { - button = 0; - } else if (!strcmp (page_name, "workweekview")) { - button = 1; - } else if (!strcmp (page_name, "weekview")) { - button = 2; - } else if (!strcmp (page_name, "monthview")) { - button = 3; -#if 0 - } else if (!strcmp (page_name, "yearview")) { - button = 4; -#endif - } else { - g_warning ("Unknown calendar view: %s", page_name); - button = 0; - } - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cal->view_toolbar_buttons[button]), TRUE); - - gtk_widget_show_all (toolbar); - - toolbar_frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (toolbar_frame), GTK_SHADOW_OUT); - gtk_container_add (GTK_CONTAINER (toolbar_frame), toolbar); - gtk_widget_show (toolbar_frame); - - gtk_widget_show_all (toolbar_frame); - - behavior = GNOME_DOCK_ITEM_BEH_EXCLUSIVE | GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL; - - if (!gnome_preferences_get_toolbar_detachable ()) - behavior |= GNOME_DOCK_ITEM_BEH_LOCKED; - - toolbar_control = bonobo_control_new (toolbar_frame); - - bonobo_ui_handler_dock_add (uih, "/Toolbar", - bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)), - behavior, - GNOME_DOCK_TOP, - 1, 1, 0); - - /* file menu */ - bonobo_ui_handler_menu_new_item (uih, "/File/New/Calendar", N_("New Ca_lendar"), - N_("Create a new calendar"), - -1, BONOBO_UI_HANDLER_PIXMAP_NONE, - NULL, 0, 0, new_calendar_cmd, cal); - bonobo_ui_handler_menu_new_item (uih, "/File/Open/Calendar", N_("Open Ca_lendar"), - N_("Open a calendar"), -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, open_calendar_cmd, cal); - bonobo_ui_handler_menu_new_item (uih, "/File/Save Calendar As", - N_("Save Calendar As"), - N_("Save Calendar As"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, save_as_calendar_cmd, cal); - bonobo_ui_handler_menu_new_item (uih, "/File/Print", N_("Print..."), - N_("Print this calendar"), -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_PIXMAP_PRINT, - 'p', GDK_CONTROL_MASK, - file_print_cb, cal); - - /* edit menu */ - bonobo_ui_handler_menu_new_item (uih, "/Edit/New Appointment", - N_("_New appointment..."), N_("Create a new appointment"), - -1, BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_NEW, 0, 0, - new_appointment_cb, cal); - - //bonobo_ui_handler_menu_new_separator (uih, "/Edit", -1); - - bonobo_ui_handler_menu_new_item (uih, "/Edit/Preferences", - N_("Preferences"), N_("Preferences"), - -1, BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, properties_cmd, cal); - /* help menu */ - - bonobo_ui_handler_menu_new_item (uih, - "/Help/About Calendar", - N_("About Calendar"), - N_("About Calendar"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, about_calendar_cmd, cal); - -} - - -void -calendar_control_deactivate (BonoboControl *control) -{ - BonoboUIHandler *uih = bonobo_control_get_ui_handler (control); - g_assert (uih); - - g_print ("In calendar_control_deactivate\n"); - - bonobo_ui_handler_dock_remove (uih, "/Toolbar"); - bonobo_ui_handler_unset_container (uih); -} - - - - -static gint -calendar_close_event (GtkWidget *widget, GdkEvent *event, GnomeCalendar *gcal) -{ - close_cmd (NULL, gcal, NULL); - return TRUE; -} - - -GnomeCalendar * -new_calendar (char *full_name, char *geometry, char *page, gboolean hidden) -{ - GtkWidget *toplevel; - char title[128]; - int xpos, ypos, width, height; - - - /* i18n: This "%s%s" indicates possession. Languages where the order is - * the inverse should translate it to "%2$s%1$s". - */ - g_snprintf(title, 128, _("%s%s"), full_name, _("'s calendar")); - - toplevel = gnome_calendar_new (title); - - if (gnome_parse_geometry (geometry, &xpos, &ypos, &width, &height)){ - if (xpos != -1) - gtk_widget_set_uposition (toplevel, xpos, ypos); - } - - if (page) - gnome_calendar_set_view (GNOME_CALENDAR (toplevel), page); - - gtk_signal_connect (GTK_OBJECT (toplevel), "delete_event", - GTK_SIGNAL_FUNC(calendar_close_event), toplevel); - - active_calendars++; - all_calendars = g_list_prepend (all_calendars, toplevel); - - if (hidden){ - GnomeWinState state; - - /* Realize the toplevel window to prevent a segfault */ - gtk_widget_realize (toplevel); - state = gnome_win_hints_get_state (toplevel); - - state |= WIN_STATE_MINIMIZED; - gnome_win_hints_set_state (toplevel, state); - } - - gtk_widget_show (toplevel); - - return GNOME_CALENDAR (toplevel); -} - - -void calendar_set_uri (GnomeCalendar *gcal, char *calendar_file) -{ - gboolean success; - - g_return_if_fail (gcal); - g_return_if_fail (calendar_file); - - printf ("calendar_set_uri: calendar_file is '%s'\n", calendar_file); - - success = gnome_calendar_open (gcal, - calendar_file, - CALENDAR_OPEN_OR_CREATE); - - printf (" load or create returned %d\n", success); -} - - - - - -/* - * Initializes the calendar internal variables, loads defaults - */ -void -init_calendar (void) -{ - int i; - char *cspec, *color; - char *str; - - init_username (); - /*user_calendar_file = g_concat_dir_and_file (gnome_util_user_home (), ".gnome/user-cal.vcf");*/ - - gnome_config_push_prefix (calendar_settings); - - /* Read calendar settings */ - - day_begin = range_check_hour (gnome_config_get_int ("/calendar/Calendar/Day start=8")); - day_end = range_check_hour (gnome_config_get_int ("/calendar/Calendar/Day end=17")); - am_pm_flag = gnome_config_get_bool ("/calendar/Calendar/AM PM flag=0"); - week_starts_on_monday = gnome_config_get_bool ("/calendar/Calendar/Week starts on Monday=0"); - - if (day_end < day_begin){ - day_begin = 8; - day_end = 17; - } - - /* Read color settings */ - - for (i = 0; i < COLOR_PROP_LAST; i++) { - cspec = build_color_spec (color_props[i].r, color_props[i].g, color_props[i].b); - str = g_strconcat (color_props[i].key, "=", cspec, NULL); - - color = gnome_config_get_string (str); - parse_color_spec (color, &color_props[i].r, &color_props[i].g, &color_props[i].b); - - g_free (str); - g_free (color); - } - - /* read todolist settings */ - - todo_show_time_remaining = gnome_config_get_bool("/calendar/Todo/show_time_remain"); - todo_show_due_date = gnome_config_get_bool("/calendar/Todo/show_due_date"); - - todo_item_dstatus_highlight_overdue = gnome_config_get_bool("/calendar/Todo/highlight_overdue"); - - todo_item_dstatus_highlight_due_today = gnome_config_get_bool("/calendar/Todo/highlight_due_today"); - - todo_item_dstatus_highlight_not_due_yet = gnome_config_get_bool("/calendar/Todo/highlight_not_due_yet"); - - todo_current_sort_column = gnome_config_get_int("/calendar/Todo/sort_column"); - - todo_current_sort_type = gnome_config_get_int("/calendar/Todo/sort_type"); - - todo_show_priority = gnome_config_get_bool("/calendar/Todo/show_priority"); - - /* read alarm settings */ - beep_on_display = gnome_config_get_bool ("/calendar/alarms/beep_on_display=FALSE"); - enable_aalarm_timeout = gnome_config_get_bool ("/calendar/alarms/enable_audio_timeout=FALSE"); - audio_alarm_timeout = gnome_config_get_int ("/calendar/alarms/audio_alarm_timeout=60"); - if (audio_alarm_timeout < 1) - audio_alarm_timeout = 1; - if (audio_alarm_timeout > MAX_AALARM_TIMEOUT) - audio_alarm_timeout = MAX_AALARM_TIMEOUT; - enable_snooze = gnome_config_get_bool ("/calendar/alarms/enable_snooze=FALSE"); - snooze_secs = gnome_config_get_int ("/calendar/alarms/snooze_secs=300"); - if (snooze_secs < 1) - snooze_secs = 1; - if (snooze_secs > MAX_SNOOZE_SECS) - snooze_secs = MAX_SNOOZE_SECS; - -#if 0 - init_default_alarms (); -#endif - - /* Done */ - - gnome_config_pop_prefix (); -} diff --git a/calendar/gui/calendar-commands.h b/calendar/gui/calendar-commands.h deleted file mode 100644 index f48ba333bc..0000000000 --- a/calendar/gui/calendar-commands.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef CALENDAR_COMMANDS_H -#define CALENDAR_COMMANDS_H - -#include -#include "gnome-cal.h" - -/* This enum and the following array define the color preferences */ - -typedef enum { - COLOR_PROP_OUTLINE_COLOR, /* Color of calendar outline */ - COLOR_PROP_HEADING_COLOR, /* Color for headings */ - COLOR_PROP_EMPTY_DAY_BG, /* Background color for empty days */ - COLOR_PROP_MARK_DAY_BG, /* Background color for days with appointments */ - COLOR_PROP_PRELIGHT_DAY_BG, /* Background color for prelighted day */ - COLOR_PROP_DAY_FG, /* Color for day numbers */ - COLOR_PROP_CURRENT_DAY_FG, /* Color for current day's number */ - COLOR_PROP_TODO_NOT_DUE_YET, /* Color for Todo items not yet due */ - COLOR_PROP_TODO_DUE_TODAY, /* Color for Todo items due today */ - COLOR_PROP_TODO_OVERDUE, /* Color for Todo items that are overdue */ - COLOR_PROP_LAST /* Number of color properties */ -} ColorProp; - -struct color_prop { - int r; /* Values are in [0, 65535] */ - int g; - int b; - char *label; /* Label for properties dialog */ - char *key; /* Key for gnome_config */ -}; - -extern struct color_prop color_props[]; - - -#define COOKIE_USER_HOME_DIR ((char *) -1) - - -/* Calendar preferences */ - -extern int day_begin, day_end; -extern char *user_name; -extern int am_pm_flag; -extern int week_starts_on_monday; - -/* todo preferences */ -extern int todo_show_due_date; - -extern int todo_item_dstatus_highlight_overdue; -extern int todo_item_dstatus_highlight_due_today; -extern int todo_item_dstatus_highlight_not_due_yet; - -extern int todo_show_time_remaining; -extern int todo_show_priority; -extern char *todo_overdue_font_text; -extern gboolean todo_style_changed; -extern gint todo_current_sort_column; -extern gint todo_current_sort_type; - -/* alarm stuff */ -#if 0 -extern CalendarAlarm alarm_defaults[4]; -#endif -extern gboolean beep_on_display; -extern gboolean enable_aalarm_timeout; -extern guint audio_alarm_timeout; -extern const guint MAX_AALARM_TIMEOUT; -extern gboolean enable_snooze; -extern guint snooze_secs; -extern const guint MAX_SNOOZE_SECS; - -/* Creates and runs the preferences dialog box */ -void properties (GtkWidget *toplevel); - -/* Asks for all the time-related displays to be updated when the user changes the time format - * preferences. - */ -void time_format_changed (void); - -/* Asks for all the month items' colors to be reset */ -void colors_changed (void); - -/* Asks for all todo lists to reflect the accurate properties */ -void todo_properties_changed(void); - -/* Creates and runs the Go-to date dialog */ -void goto_dialog (GnomeCalendar *gcal); - -/* Returns a pointer to a statically-allocated string with a representation of the specified color. - * Values must be in [0, 65535]. - */ -char *build_color_spec (int r, int g, int b); - -/* Parses a color specification of the form "#%04x%04x%04x" and returns the color components. */ -void parse_color_spec (char *spec, int *r, int *g, int *b); - -/* Calls build_color_spec() for the color in the specified property number */ -char *color_spec_from_prop (ColorProp propnum); - -GnomeCalendar *new_calendar (char *full_name, - char *geometry, - char *page, - gboolean hidden); - -void calendar_set_uri (GnomeCalendar *gcal, char *calendar_file); - - -/*----------------------------------------------------------------------*/ -/* FIXME -- where should this stuff go? */ -/*----------------------------------------------------------------------*/ - -void init_calendar (void); - -void calendar_control_activate (BonoboControl *control, - GnomeCalendar *cal); -void calendar_control_deactivate (BonoboControl *control); - -void quit_cmd (BonoboUIHandler *uih, void *user_data, const char *path); - -/*extern char *user_calendar_file;*/ -extern char *user_name; -extern char *full_name; -extern int debug_alarms; -extern int active_calendars; -extern GList *all_calendars; - -#endif /* CALENDAR_COMMANDS_H */ diff --git a/calendar/gui/calendar-component.c b/calendar/gui/calendar-component.c deleted file mode 100644 index 8644b8928c..0000000000 --- a/calendar/gui/calendar-component.c +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* component-factory.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#include -#include -#include "evolution-shell-component.h" -#include "component-factory.h" -#include "control-factory.h" - - - -#ifdef USING_OAF -#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921" -#else -#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:evolution-calendar" -#endif - -static BonoboGenericFactory *factory = NULL; - -static const EvolutionShellComponentFolderType folder_types[] = { - { "calendar", "evolution-calendar.png" }, - { NULL, NULL } -}; - - -/* EvolutionShellComponent methods and signals. */ - -static EvolutionShellComponentResult -create_view (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - BonoboControl **control_return, - void *closure) -{ - BonoboControl *control; - - if (g_strcasecmp (type, "calendar") != 0) - return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE; - - control = control_factory_new_control (); - bonobo_control_set_property (control, "folder_uri", physical_uri, NULL); - - *control_return = control; - - return EVOLUTION_SHELL_COMPONENT_OK; -} - -static gint owner_count = 0; - -static void -owner_set_cb (EvolutionShellComponent *shell_component, - Evolution_Shell shell_interface, - const char *evolution_homedir) -{ - owner_count ++; -} - -static void -owner_unset_cb (EvolutionShellComponent *shell_component, - Evolution_Shell shell_interface, - EvolutionShellClient shell_client, - void *data) -{ - owner_count --; - if (owner_count <= 0) - gtk_main_quit(); -} - - -/* The factory function. */ - -static BonoboObject * -factory_fn (BonoboGenericFactory *factory, - void *closure) -{ - EvolutionShellComponent *shell_component; - - shell_component = evolution_shell_component_new (folder_types, create_view, NULL, NULL, NULL, NULL); - - gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set", - GTK_SIGNAL_FUNC (owner_set_cb), NULL); - gtk_signal_connect (GTK_OBJECT (shell_component), "owner_unset", - GTK_SIGNAL_FUNC (owner_unset_cb), NULL); - - return BONOBO_OBJECT (shell_component); -} - - -void -component_factory_init (void) -{ - if (factory != NULL) - return; - - factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL); - - if (factory == NULL) - g_error ("Cannot initialize Evolution's calendar component."); -} diff --git a/calendar/gui/calendar-component.h b/calendar/gui/calendar-component.h deleted file mode 100644 index f83a849452..0000000000 --- a/calendar/gui/calendar-component.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* component-factory.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _COMPONENT_FACTORY_H_ -#define _COMPONENT_FACTORY_H_ - -void component_factory_init (void); - -#endif /* _COMPONENT_FACTORY_H_ */ diff --git a/calendar/gui/calendar-control.gnorba b/calendar/gui/calendar-control.gnorba deleted file mode 100644 index ed504d8f5b..0000000000 --- a/calendar/gui/calendar-control.gnorba +++ /dev/null @@ -1,11 +0,0 @@ -[control-factory:calendar] -type=exe -repo_id=IDL:Bonobo/GenericFactory:1.0 -description=Factory for the sample Calendar control -location_info=evolution-calendar - -[control:calendar] -type=factory -repo_id=IDL:BonoboControl/calendar-control:1.0 IDL:Bonobo/Control:1.0 -description=A sample Bonobo control which displays an calendar. -location_info=control-factory:calendar diff --git a/calendar/gui/calendar-control.oafinfo b/calendar/gui/calendar-control.oafinfo deleted file mode 100644 index fb0f138caf..0000000000 --- a/calendar/gui/calendar-control.oafinfo +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/calendar-model.c b/calendar/gui/calendar-model.c deleted file mode 100644 index a39044f7e6..0000000000 --- a/calendar/gui/calendar-model.c +++ /dev/null @@ -1,1782 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* Evolution calendar - Data model for ETable - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -/* We need this for strptime. */ -#define _XOPEN_SOURCE - -#include -#include -#include -#undef _XOPEN_SOURCE -#include -#define _XOPEN_SOURCE -#include -#include -#include -#include "calendar-model.h" -#include "calendar-commands.h" - - - -/* Private part of the ECalendarModel structure */ -typedef struct { - /* Calendar client we are using */ - CalClient *client; - - /* Types of objects we are dealing with */ - CalObjType type; - - /* Array of pointers to calendar objects */ - GArray *objects; - - /* UID -> array index hash */ - GHashTable *uid_index_hash; - - /* HACK: so that ETable can do its stupid append_row() thing */ - guint appending_row : 1; -} CalendarModelPrivate; - - - -static void calendar_model_class_init (CalendarModelClass *class); -static void calendar_model_init (CalendarModel *model); -static void calendar_model_destroy (GtkObject *object); - -static int calendar_model_column_count (ETableModel *etm); -static int calendar_model_row_count (ETableModel *etm); -static void *calendar_model_value_at (ETableModel *etm, int col, int row); -static void calendar_model_set_value_at (ETableModel *etm, int col, int row, const void *value); -static gboolean calendar_model_is_cell_editable (ETableModel *etm, int col, int row); -static void calendar_model_append_row (ETableModel *etm, ETableModel *source, gint row); -static void *calendar_model_duplicate_value (ETableModel *etm, int col, const void *value); -static void calendar_model_free_value (ETableModel *etm, int col, void *value); -static void *calendar_model_initialize_value (ETableModel *etm, int col); -static gboolean calendar_model_value_is_empty (ETableModel *etm, int col, const void *value); -#if 0 -static char * calendar_model_value_to_string (ETableModel *etm, int col, const void *value); -#endif -static void load_objects (CalendarModel *model); -static int remove_object (CalendarModel *model, const char *uid); - -static ETableModelClass *parent_class; - - - -/** - * calendar_model_get_type: - * @void: - * - * Registers the #CalendarModel class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalendarModel class. - **/ -GtkType -calendar_model_get_type (void) -{ - static GtkType calendar_model_type = 0; - - if (!calendar_model_type) { - static GtkTypeInfo calendar_model_info = { - "CalendarModel", - sizeof (CalendarModel), - sizeof (CalendarModelClass), - (GtkClassInitFunc) calendar_model_class_init, - (GtkObjectInitFunc) calendar_model_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - calendar_model_type = gtk_type_unique (E_TABLE_MODEL_TYPE, &calendar_model_info); - } - - return calendar_model_type; -} - -/* Class initialization function for the calendar table model */ -static void -calendar_model_class_init (CalendarModelClass *class) -{ - GtkObjectClass *object_class; - ETableModelClass *etm_class; - - object_class = (GtkObjectClass *) class; - etm_class = (ETableModelClass *) class; - - parent_class = gtk_type_class (E_TABLE_MODEL_TYPE); - - object_class->destroy = calendar_model_destroy; - - etm_class->column_count = calendar_model_column_count; - etm_class->row_count = calendar_model_row_count; - etm_class->value_at = calendar_model_value_at; - etm_class->set_value_at = calendar_model_set_value_at; - etm_class->is_cell_editable = calendar_model_is_cell_editable; - etm_class->append_row = calendar_model_append_row; - etm_class->duplicate_value = calendar_model_duplicate_value; - etm_class->free_value = calendar_model_free_value; - etm_class->initialize_value = calendar_model_initialize_value; - etm_class->value_is_empty = calendar_model_value_is_empty; -#if 0 - etm_class->value_to_string = calendar_model_value_to_string; -#endif -} - -/* Object initialization function for the calendar table model */ -static void -calendar_model_init (CalendarModel *model) -{ - CalendarModelPrivate *priv; - - priv = g_new0 (CalendarModelPrivate, 1); - model->priv = priv; - - priv->objects = g_array_new (FALSE, TRUE, sizeof (CalComponent *)); - priv->uid_index_hash = g_hash_table_new (g_str_hash, g_str_equal); -} - -/* Called from g_hash_table_foreach_remove(), frees a stored UID->index - * mapping. - */ -static gboolean -free_uid_index (gpointer key, gpointer value, gpointer data) -{ - int *idx; - - idx = value; - g_free (idx); - - return TRUE; -} - -/* Frees the objects stored in the calendar model */ -static void -free_objects (CalendarModel *model) -{ - CalendarModelPrivate *priv; - int i; - - priv = model->priv; - - g_hash_table_foreach_remove (priv->uid_index_hash, free_uid_index, NULL); - - for (i = 0; i < priv->objects->len; i++) { - CalComponent *comp; - - comp = g_array_index (priv->objects, CalComponent *, i); - g_assert (comp != NULL); - gtk_object_unref (GTK_OBJECT (comp)); - } - - g_array_set_size (priv->objects, 0); -} - -/* Destroy handler for the calendar table model */ -static void -calendar_model_destroy (GtkObject *object) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CALENDAR_MODEL (object)); - - model = CALENDAR_MODEL (object); - priv = model->priv; - - /* Free the calendar client interface object */ - - if (priv->client) { - gtk_signal_disconnect_by_data (GTK_OBJECT (priv->client), model); - gtk_object_unref (GTK_OBJECT (priv->client)); - priv->client = NULL; - } - - /* Free the uid->index hash data and the array of UIDs */ - - free_objects (model); - - g_hash_table_destroy (priv->uid_index_hash); - priv->uid_index_hash = NULL; - - g_array_free (priv->objects, TRUE); - priv->objects = NULL; - - /* Free the private structure */ - - g_free (priv); - model->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* ETableModel methods */ - -/* column_count handler for the calendar table model */ -static int -calendar_model_column_count (ETableModel *etm) -{ - return CAL_COMPONENT_FIELD_NUM_FIELDS; -} - -/* row_count handler for the calendar table model */ -static int -calendar_model_row_count (ETableModel *etm) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - - model = CALENDAR_MODEL (etm); - priv = model->priv; - - return priv->objects->len; -} - -/* Creates a nice string representation of a time value */ -static char* -get_time_t (time_t *t, gboolean skip_midnight) -{ - static char buffer[32]; - struct tm *tmp_tm; - - if (*t <= 0) { - buffer[0] = '\0'; - } else { - tmp_tm = localtime (t); - - if (skip_midnight && tmp_tm->tm_hour == 0 - && tmp_tm->tm_min == 0 && tmp_tm->tm_sec == 0) - strftime (buffer, 32, "%a %x", tmp_tm); - else - strftime (buffer, 32, "%a %x %T", tmp_tm); - } - - return buffer; -} - -/* Builds a string based on the list of CATEGORIES properties of a calendar - * component. - */ -static char * -get_categories (CalComponent *comp) -{ - GSList *categories; - GString *str; - char *s; - GSList *l; - - cal_component_get_categories_list (comp, &categories); - - str = g_string_new (NULL); - - for (l = categories; l; l = l->next) { - const char *category; - - category = l->data; - g_string_append (str, category); - - if (l->next != NULL) - g_string_append (str, ", "); - } - - s = str->str; - - g_string_free (str, FALSE); - cal_component_free_categories_list (categories); - - return s; -} - -/* Returns a string based on the CLASSIFICATION property of a calendar component */ -static char * -get_classification (CalComponent *comp) -{ - CalComponentClassification classif; - - cal_component_get_classification (comp, &classif); - - switch (classif) { - case CAL_COMPONENT_CLASS_NONE: - return ""; - - case CAL_COMPONENT_CLASS_PUBLIC: - return _("Public"); - - case CAL_COMPONENT_CLASS_PRIVATE: - return _("Private"); - - case CAL_COMPONENT_CLASS_CONFIDENTIAL: - return _("Confidential"); - - case CAL_COMPONENT_CLASS_UNKNOWN: - return _("Unknown"); - - default: - g_assert_not_reached (); - return NULL; - } -} - -/* Builds a string for the COMPLETED property of a calendar component */ -static char * -get_completed (CalComponent *comp) -{ - struct icaltimetype *completed; - time_t t; - - cal_component_get_completed (comp, &completed); - - if (!completed) - t = 0; - else { - t = time_from_icaltimetype (*completed); - cal_component_free_icaltimetype (completed); - } - - return get_time_t (&t, FALSE); -} - -/* Builds a string for and frees a date/time value */ -static char * -get_and_free_datetime (CalComponentDateTime dt) -{ - time_t t; - - if (!dt.value) - t = 0; - else - t = time_from_icaltimetype (*dt.value); - - cal_component_free_datetime (&dt); - - return get_time_t (&t, FALSE); -} - -/* Builds a string for the DTEND property of a calendar component */ -static char * -get_dtend (CalComponent *comp) -{ - CalComponentDateTime dt; - - cal_component_get_dtend (comp, &dt); - return get_and_free_datetime (dt); -} - -/* Builds a string for the DTSTART property of a calendar component */ -static char * -get_dtstart (CalComponent *comp) -{ - CalComponentDateTime dt; - - cal_component_get_dtstart (comp, &dt); - return get_and_free_datetime (dt); -} - -/* Builds a string for the DUE property of a calendar component */ -static char * -get_due (CalComponent *comp) -{ - CalComponentDateTime dt; - - cal_component_get_due (comp, &dt); - return get_and_free_datetime (dt); -} - -/* Builds a string for the GEO property of a calendar component */ -static char* -get_geo (CalComponent *comp) -{ - struct icalgeotype *geo; - static gchar buf[32]; - - cal_component_get_geo (comp, &geo); - - if (!geo) - buf[0] = '\0'; - else { - g_snprintf (buf, sizeof (buf), "%g %s, %g %s", - fabs (geo->lat), - geo->lat >= 0.0 ? _("N") : _("S"), - fabs (geo->lon), - geo->lon >= 0.0 ? _("E") : _("W")); - cal_component_free_geo (geo); - } - - return buf; -} - -/* Builds a string for the PERCENT property of a calendar component */ -static char * -get_percent (CalComponent *comp) -{ - int *percent; - static char buf[32]; - - cal_component_get_percent (comp, &percent); - - if (!percent) - buf[0] = '\0'; - else { - g_snprintf (buf, sizeof (buf), "%d%%", *percent); - cal_component_free_percent (percent); - } - - return buf; -} - -/* Builds a string for the PRIORITY property of a calendar component */ -static char * -get_priority (CalComponent *comp) -{ - int *priority; - static char buf[32]; - - cal_component_get_priority (comp, &priority); - - if (!priority) - buf[0] = '\0'; - else { - g_snprintf (buf, sizeof (buf), "%d", *priority); - cal_component_free_priority (priority); - } - - return buf; -} - -/* Builds a string for the SUMMARY property of a calendar component */ -static char * -get_summary (CalComponent *comp) -{ - CalComponentText summary; - - cal_component_get_summary (comp, &summary); - - if (summary.value) - return (char *) summary.value; - else - return ""; -} - -/* Builds a string for the TRANSPARENCY property of a calendar component */ -static char * -get_transparency (CalComponent *comp) -{ - CalComponentTransparency transp; - - cal_component_get_transparency (comp, &transp); - - switch (transp) { - case CAL_COMPONENT_TRANSP_NONE: - return ""; - - case CAL_COMPONENT_TRANSP_TRANSPARENT: - return _("Transparent"); - - case CAL_COMPONENT_TRANSP_OPAQUE: - return _("Opaque"); - - case CAL_COMPONENT_TRANSP_UNKNOWN: - return _("Unknown"); - - default: - g_assert_not_reached (); - return NULL; - } -} - -/* Builds a string for the URL property of a calendar component */ -static char * -get_url (CalComponent *comp) -{ - const char *url; - - cal_component_get_url (comp, &url); - - if (url) - return (char *) url; - else - return ""; -} - -/* Returns whether the component has any alarms defined for it */ -static gboolean -get_has_alarms (CalComponent *comp) -{ - CalComponentAlarm *alarm; - gboolean retval; - - alarm = cal_component_get_first_alarm (comp); - retval = (alarm != NULL); - - cal_component_alarm_free (alarm); - return retval; -} - -/* Returns whether the component has any recurrences defined for it */ -static gboolean -get_has_recurrences (CalComponent *comp) -{ - return cal_component_has_rdates (comp) || cal_component_has_rrules (comp); -} - -/* Returns whether the completion date has been set on a component */ -static gboolean -get_is_complete (CalComponent *comp) -{ - struct icaltimetype *t; - gboolean retval; - - cal_component_get_completed (comp, &t); - retval = (t != NULL); - - cal_component_free_icaltimetype (t); - return retval; -} - -/* Returns whether a calendar component is overdue. - * - * FIXME: This will only get called when the component is scrolled into the - * ETable. There should be some sort of dynamic update thingy for if a component - * becomes overdue while it is being viewed. - */ -static gboolean -get_is_overdue (CalComponent *comp) -{ - CalComponentDateTime dt; - gboolean retval; - - cal_component_get_due (comp, &dt); - - /* First, do we have a due date? */ - - if (!dt.value) - retval = FALSE; - else { - struct icaltimetype *completed; - time_t t; - - /* Second, is it already completed? */ - - cal_component_get_completed (comp, &completed); - - if (completed) { - retval = FALSE; - - cal_component_free_icaltimetype (completed); - goto out; - } - - /* Third, are we overdue as of right now? - * - * FIXME: should we check the PERCENT as well? If it is at 100% - * but the COMPLETED property is not set, is the component - * really overdue? - **/ - - t = time_from_icaltimetype (*dt.value); - - if (t < time (NULL)) - retval = TRUE; - else - retval = FALSE; - } - - out: - - cal_component_free_datetime (&dt); - - return retval; -} - -/* value_at handler for the calendar table model */ -static void * -calendar_model_value_at (ETableModel *etm, int col, int row) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - CalComponent *comp; - - model = CALENDAR_MODEL (etm); - priv = model->priv; - - g_return_val_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS, NULL); - g_return_val_if_fail (row >= 0 && row < priv->objects->len, NULL); - - comp = g_array_index (priv->objects, CalComponent *, row); - g_assert (comp != NULL); - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - return get_categories (comp); - - case CAL_COMPONENT_FIELD_CLASSIFICATION: - return get_classification (comp); - - case CAL_COMPONENT_FIELD_COMPLETED: - return get_completed (comp); - - case CAL_COMPONENT_FIELD_DTEND: - return get_dtend (comp); - - case CAL_COMPONENT_FIELD_DTSTART: - return get_dtstart (comp); - - case CAL_COMPONENT_FIELD_DUE: - return get_due (comp); - - case CAL_COMPONENT_FIELD_GEO: - return get_geo (comp); - - case CAL_COMPONENT_FIELD_PERCENT: - return get_percent (comp); - - case CAL_COMPONENT_FIELD_PRIORITY: - return get_priority (comp); - - case CAL_COMPONENT_FIELD_SUMMARY: - return get_summary (comp); - - case CAL_COMPONENT_FIELD_TRANSPARENCY: - return get_transparency (comp); - - case CAL_COMPONENT_FIELD_URL: - return get_url (comp); - - case CAL_COMPONENT_FIELD_HAS_ALARMS: - return GINT_TO_POINTER (get_has_alarms (comp)); - - case CAL_COMPONENT_FIELD_ICON: - /* FIXME: Also support 'Assigned to me' & 'Assigned to someone - else'. */ - if (get_has_recurrences (comp)) - return GINT_TO_POINTER (1); - else - return GINT_TO_POINTER (0); - - case CAL_COMPONENT_FIELD_COMPLETE: - return GINT_TO_POINTER (get_is_complete (comp)); - - case CAL_COMPONENT_FIELD_RECURRING: - return GINT_TO_POINTER (get_has_recurrences (comp)); - - case CAL_COMPONENT_FIELD_OVERDUE: - return GINT_TO_POINTER (get_is_overdue (comp)); - - case CAL_COMPONENT_FIELD_COLOR: - if (get_is_overdue (comp)) - return "red"; - else - return NULL; - - default: - g_message ("calendar_model_value_at(): Requested invalid column %d", col); - return NULL; - } -} - -/* Returns whether a string is NULL, empty, or full of whitespace */ -static gboolean -string_is_empty (const char *value) -{ - const char *p; - gboolean empty = TRUE; - - if (value) { - p = value; - while (*p) { - if (!isspace (*p)) { - empty = FALSE; - break; - } - p++; - } - } - return empty; -} - - -/* FIXME: We need to set the "transient_for" property for the dialog, but - the model doesn't know anything about the windows. */ -static void -show_date_warning (void) -{ - GtkWidget *dialog; - char buffer[32], message[256]; - time_t t; - struct tm *tmp_tm; - - t = time (NULL); - tmp_tm = localtime (&t); - strftime (buffer, 32, "%a %x %T", tmp_tm); - - g_snprintf (message, 256, - _("The date must be entered in the format: \n\n%s"), - buffer); - - dialog = gnome_message_box_new (message, - GNOME_MESSAGE_BOX_ERROR, - GNOME_STOCK_BUTTON_OK, NULL); - gtk_widget_show (dialog); -} - -/* Builds a list of categories from a comma-delimited string */ -static GSList * -categories_from_string (const char *value) -{ - GSList *list; - const char *categ_start; - const char *categ_end; - const char *p; - - if (!value) - return NULL; - - list = NULL; - - categ_start = categ_end = NULL; - - for (p = value; *p; p++) { - if (categ_start) { - if (*p == ',') { - char *c; - - c = g_strndup (categ_start, categ_end - categ_start + 1); - list = g_slist_prepend (list, c); - - categ_start = categ_end = NULL; - } else if (!isspace (*p)) - categ_end = p; - } else if (!isspace (*p) && *p != ',') - categ_start = categ_end = p; - } - - if (categ_start) { - char *c; - - c = g_strndup (categ_start, categ_end - categ_start + 1); - list = g_slist_prepend (list, c); - } - - return g_slist_reverse (list); -} - -/* Sets the list of categories from a comma-delimited string */ -static void -set_categories (CalComponent *comp, const char *value) -{ - GSList *list; - GSList *l; - - list = categories_from_string (value); - - cal_component_set_categories_list (comp, list); - - for (l = list; l; l = l->next) { - char *s; - - s = l->data; - g_free (s); - } - - g_slist_free (list); -} - -/* Parses a time value entered by the user; returns -1 if it could not be - * parsed. Returns 0 for an empty time. - */ -static time_t -parse_time (const char *value) -{ - struct tm tmp_tm; - struct tm *today_tm; - time_t t; - const char *p; - - if (string_is_empty (value)) - return 0; - - /* Skip any weekday name. */ - p = strptime (value, "%a", &tmp_tm); - if (!p) - p = value; - - /* Try to match the full date & time, or without the seconds, - or just the date, or just the time with/without seconds. - The info pages say we should clear the tm before calling - strptime. It also means that if we don't match a time we - get 00:00:00 which is good. */ - memset (&tmp_tm, 0, sizeof (tmp_tm)); - if (!strptime (value, "%x %T", &tmp_tm)) { - memset (&tmp_tm, 0, sizeof (tmp_tm)); - if (!strptime (value, "%x %H:%M", &tmp_tm)) { - memset (&tmp_tm, 0, sizeof (tmp_tm)); - if (!strptime (value, "%x", &tmp_tm)) { - memset (&tmp_tm, 0, sizeof (tmp_tm)); - if (!strptime (value, "%T", &tmp_tm)) { - memset (&tmp_tm, 0, sizeof (tmp_tm)); - if (!strptime (value, "%H:%M", &tmp_tm)) - return -1; /* Could not parse it */ - } - - /* We only got a time, so we use the - current day. */ - t = time (NULL); - today_tm = localtime (&t); - tmp_tm.tm_mday = today_tm->tm_mday; - tmp_tm.tm_mon = today_tm->tm_mon; - tmp_tm.tm_year = today_tm->tm_year; - } - } - } - - tmp_tm.tm_isdst = -1; - return mktime (&tmp_tm); -} - -/* Sets the completion time of a component */ -static void -set_completed (CalComponent *comp, const char *value) -{ - time_t t; - struct icaltimetype itt; - - t = parse_time (value); - if (t == -1) { - show_date_warning (); - return; - } else if (t == 0) { - cal_component_set_completed (comp, NULL); - return; - } else { - itt = icaltimetype_from_timet (t, FALSE); - cal_component_set_completed (comp, &itt); - } -} - -/* Sets a CalComponentDateTime value */ -static void -set_datetime (CalComponent *comp, const char *value, - void (* set_func) (CalComponent *comp, CalComponentDateTime *dt)) -{ - time_t t; - - t = parse_time (value); - if (t == -1) { - show_date_warning (); - return; - } else if (t == 0) { - (* set_func) (comp, NULL); - return; - } else { - CalComponentDateTime dt; - struct icaltimetype itt; - - itt = icaltimetype_from_timet (t, FALSE); - dt.value = &itt; - dt.tzid = NULL; - - (* set_func) (comp, &dt); - } -} - -/* FIXME: We need to set the "transient_for" property for the dialog, but the - * model doesn't know anything about the windows. - */ -static void -show_geo_warning (void) -{ - GtkWidget *dialog; - - dialog = gnome_message_box_new (_("The geographical position must be entered " - "in the format: \n\n45.436845,125.862501"), - GNOME_MESSAGE_BOX_ERROR, - GNOME_STOCK_BUTTON_OK, NULL); - gtk_widget_show (dialog); -} - -/* Sets the geographical position value of a component */ -static void -set_geo (CalComponent *comp, const char *value) -{ - double latitude, longitude; - int matched; - struct icalgeotype geo; - - if (string_is_empty (value)) { - cal_component_set_geo (comp, NULL); - return; - } - - matched = sscanf (value, "%lg , %lg", &latitude, &longitude); - - if (matched != 2) { - show_geo_warning (); - return; - } - - geo.lat = latitude; - geo.lon = longitude; - cal_component_set_geo (comp, &geo); -} - -/* FIXME: We need to set the "transient_for" property for the dialog, but the - * model doesn't know anything about the windows. - */ -static void -show_percent_warning (void) -{ - GtkWidget *dialog; - - dialog = gnome_message_box_new (_("The percent value must be between 0 and 100, inclusive"), - GNOME_MESSAGE_BOX_ERROR, - GNOME_STOCK_BUTTON_OK, NULL); - gtk_widget_show (dialog); -} - -/* Sets the percent value of a calendar component */ -static void -set_percent (CalComponent *comp, const char *value) -{ - int matched, percent; - - if (string_is_empty (value)) { - cal_component_set_percent (comp, NULL); - return; - } - - matched = sscanf (value, "%i", &percent); - - if (matched != 1 || percent < 0 || percent > 100) { - show_percent_warning (); - return; - } - - cal_component_set_percent (comp, &percent); -} - -/* FIXME: We need to set the "transient_for" property for the dialog, but the - * model doesn't know anything about the windows. */ -static void -show_priority_warning (void) -{ - GtkWidget *dialog; - - dialog = gnome_message_box_new (_("The priority must be between 1 and 9, inclusive"), - GNOME_MESSAGE_BOX_ERROR, - GNOME_STOCK_BUTTON_OK, NULL); - gtk_widget_show (dialog); -} - -/* Sets the priority of a calendar component */ -static void -set_priority (CalComponent *comp, const char *value) -{ - int matched, priority; - - if (string_is_empty (value)) { - cal_component_set_priority (comp, NULL); - return; - } - - matched = sscanf (value, "%i", &priority); - - if (matched != 1 || priority < 1 || priority > 9) { - show_priority_warning (); - return; - } - - cal_component_set_priority (comp, &priority); -} - -/* Sets the summary of a calendar component */ -static void -set_summary (CalComponent *comp, const char *value) -{ - CalComponentText text; - - if (string_is_empty (value)) { - cal_component_set_summary (comp, NULL); - return; - } - - text.value = value; - text.altrep = NULL; /* FIXME: should we preserve the old ALTREP? */ - - cal_component_set_summary (comp, &text); -} - -/* Sets the URI of a calendar component */ -static void -set_url (CalComponent *comp, const char *value) -{ - if (string_is_empty (value)) { - cal_component_set_url (comp, NULL); - return; - } - - cal_component_set_url (comp, value); -} - -/* set_value_at handler for the calendar table model */ -static void -calendar_model_set_value_at (ETableModel *etm, int col, int row, const void *value) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - CalComponent *comp; - - model = CALENDAR_MODEL (etm); - priv = model->priv; - - g_return_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS); - g_return_if_fail (row >= 0 && row < priv->objects->len); - - comp = g_array_index (priv->objects, CalComponent *, row); - g_assert (comp != NULL); - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - set_categories (comp, value); - break; - - /* FIXME: CLASSIFICATION requires an option menu cell renderer */ - - case CAL_COMPONENT_FIELD_COMPLETED: - set_completed (comp, value); - break; - - case CAL_COMPONENT_FIELD_DTEND: - /* FIXME: Need to reset dtstart if dtend happens before it */ - set_datetime (comp, value, cal_component_set_dtend); - break; - - case CAL_COMPONENT_FIELD_DTSTART: - /* FIXME: Need to reset dtend if dtstart happens after it */ - set_datetime (comp, value, cal_component_set_dtstart); - break; - - case CAL_COMPONENT_FIELD_DUE: - set_datetime (comp, value, cal_component_set_due); - break; - - case CAL_COMPONENT_FIELD_GEO: - set_geo (comp, value); - break; - - case CAL_COMPONENT_FIELD_PERCENT: - set_percent (comp, value); - break; - - case CAL_COMPONENT_FIELD_PRIORITY: - set_priority (comp, value); - break; - - case CAL_COMPONENT_FIELD_SUMMARY: - set_summary (comp, value); - break; - - /* FIXME: TRANSPARENCY requires an option menu cell renderer */ - - case CAL_COMPONENT_FIELD_URL: - set_url (comp, value); - break; - - default: - g_message ("calendar_model_set_value_at(): Requested invalid column %d", col); - break; - } - - /* FIXME: this is an ugly HACK. ETable needs a better API for the - * "click here to add an element" thingy. - */ - if (priv->appending_row) - return; - - if (!cal_client_update_object (priv->client, comp)) - g_message ("calendar_model_set_value_at(): Could not update the object!"); -} - -/* is_cell_editable handler for the calendar table model */ -static gboolean -calendar_model_is_cell_editable (ETableModel *etm, int col, int row) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - - model = CALENDAR_MODEL (etm); - priv = model->priv; - - g_return_val_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS, FALSE); - - /* FIXME: We can't check this as 'click-to-add' passes row 0. */ - /*g_return_val_if_fail (row >= 0 && row < priv->objects->len, FALSE);*/ - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - case CAL_COMPONENT_FIELD_COMPLETED: - case CAL_COMPONENT_FIELD_DTEND: - case CAL_COMPONENT_FIELD_DTSTART: - case CAL_COMPONENT_FIELD_DUE: - case CAL_COMPONENT_FIELD_GEO: - case CAL_COMPONENT_FIELD_PERCENT: - case CAL_COMPONENT_FIELD_PRIORITY: - case CAL_COMPONENT_FIELD_SUMMARY: - case CAL_COMPONENT_FIELD_URL: - return TRUE; - - default: - return FALSE; - } -} - -/* append_row handler for the calendar model */ -static void -calendar_model_append_row (ETableModel *etm, ETableModel *source, gint row) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - CalComponent *comp; - int *new_idx, col; - const char *uid; - - model = CALENDAR_MODEL (etm); - priv = model->priv; - - /* This is a HACK */ - priv->appending_row = TRUE; - - /* FIXME: This should support other types of components, but for now it - * is only used for the task list. - */ - comp = cal_component_new (); - cal_component_set_new_vtype (comp, CAL_COMPONENT_TODO); - - cal_component_get_uid (comp, &uid); - - g_array_append_val (priv->objects, comp); - new_idx = g_new (int, 1); - *new_idx = priv->objects->len - 1; - g_hash_table_insert (priv->uid_index_hash, (char *) uid, new_idx); - - /* Notify the views about the new row. I think we have to do that here, - or the views may become confused when they start getting - "row_changed" or "cell_changed" signals for this new row. */ - e_table_model_row_inserted (etm, *new_idx); - - for (col = 0; col < CAL_COMPONENT_FIELD_NUM_FIELDS; col++) { - const void *val; - - if (!e_table_model_is_cell_editable (etm, col, *new_idx)) - continue; - - val = e_table_model_value_at(source, col, row); - e_table_model_set_value_at (etm, col, *new_idx, val); - } - - /* This is the end of the HACK */ - priv->appending_row = FALSE; - - if (!cal_client_update_object (priv->client, comp)) { - /* FIXME: Show error dialog. */ - g_message ("calendar_model_append_row(): Could not add new object!"); - remove_object (model, uid); - e_table_model_row_deleted (etm, *new_idx); - } -} - -/* Duplicates a string value */ -static char * -dup_string (const char *value) -{ - return g_strdup (value); -} - -/* duplicate_value handler for the calendar table model */ -static void * -calendar_model_duplicate_value (ETableModel *etm, int col, const void *value) -{ - g_return_val_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS, NULL); - - /* They are almost all dup_string()s for now, but we'll have real fields - * later. - */ - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - return dup_string (value); - - case CAL_COMPONENT_FIELD_CLASSIFICATION: - return (void *) value; - - case CAL_COMPONENT_FIELD_COMPLETED: - case CAL_COMPONENT_FIELD_DTEND: - case CAL_COMPONENT_FIELD_DTSTART: - case CAL_COMPONENT_FIELD_DUE: - case CAL_COMPONENT_FIELD_GEO: - case CAL_COMPONENT_FIELD_PERCENT: - case CAL_COMPONENT_FIELD_PRIORITY: - return dup_string (value); - - case CAL_COMPONENT_FIELD_TRANSPARENCY: - return (void *) value; - - case CAL_COMPONENT_FIELD_URL: - return dup_string (value); - - case CAL_COMPONENT_FIELD_HAS_ALARMS: - case CAL_COMPONENT_FIELD_ICON: - case CAL_COMPONENT_FIELD_COMPLETE: - case CAL_COMPONENT_FIELD_RECURRING: - case CAL_COMPONENT_FIELD_OVERDUE: - case CAL_COMPONENT_FIELD_COLOR: - return (void *) value; - - default: - g_message ("calendar_model_duplicate_value(): Requested invalid column %d", col); - return NULL; - } -} - -/* free_value handler for the calendar table model */ -static void -calendar_model_free_value (ETableModel *etm, int col, void *value) -{ - g_return_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS); - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - g_free (value); - - case CAL_COMPONENT_FIELD_CLASSIFICATION: - return; - - case CAL_COMPONENT_FIELD_COMPLETED: - case CAL_COMPONENT_FIELD_DTEND: - case CAL_COMPONENT_FIELD_DTSTART: - case CAL_COMPONENT_FIELD_DUE: - case CAL_COMPONENT_FIELD_GEO: - case CAL_COMPONENT_FIELD_PERCENT: - case CAL_COMPONENT_FIELD_PRIORITY: - g_free (value); - - case CAL_COMPONENT_FIELD_TRANSPARENCY: - return; - - case CAL_COMPONENT_FIELD_URL: - g_free (value); - - case CAL_COMPONENT_FIELD_HAS_ALARMS: - case CAL_COMPONENT_FIELD_ICON: - case CAL_COMPONENT_FIELD_COMPLETE: - case CAL_COMPONENT_FIELD_RECURRING: - case CAL_COMPONENT_FIELD_OVERDUE: - case CAL_COMPONENT_FIELD_COLOR: - return; - - default: - g_message ("calendar_model_free_value(): Requested invalid column %d", col); - return; - } -} - -/* Initializes a string value */ -static char * -init_string (void) -{ - return g_strdup (""); -} - -/* initialize_value handler for the calendar table model */ -static void * -calendar_model_initialize_value (ETableModel *etm, int col) -{ - g_return_val_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS, NULL); - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - return init_string (); - - case CAL_COMPONENT_FIELD_CLASSIFICATION: - return NULL; - - case CAL_COMPONENT_FIELD_COMPLETED: - case CAL_COMPONENT_FIELD_DTEND: - case CAL_COMPONENT_FIELD_DTSTART: - case CAL_COMPONENT_FIELD_DUE: - case CAL_COMPONENT_FIELD_GEO: - case CAL_COMPONENT_FIELD_PERCENT: - case CAL_COMPONENT_FIELD_PRIORITY: - return init_string (); - - case CAL_COMPONENT_FIELD_TRANSPARENCY: - return NULL; - - case CAL_COMPONENT_FIELD_URL: - return init_string (); - - case CAL_COMPONENT_FIELD_HAS_ALARMS: - case CAL_COMPONENT_FIELD_ICON: - case CAL_COMPONENT_FIELD_COMPLETE: - case CAL_COMPONENT_FIELD_RECURRING: - case CAL_COMPONENT_FIELD_OVERDUE: - case CAL_COMPONENT_FIELD_COLOR: - return NULL; - - default: - g_message ("calendar_model_initialize_value(): Requested invalid column %d", col); - return NULL; - } -} - -/* value_is_empty handler for the calendar model. This should return TRUE - unless a significant value has been set. The 'click-to-add' feature - checks all fields to see if any are not empty and if so it adds a new - row, so we only want to return FALSE if we have a useful object. */ -static gboolean -calendar_model_value_is_empty (ETableModel *etm, int col, const void *value) -{ - g_return_val_if_fail (col >= 0 && col < CAL_COMPONENT_FIELD_NUM_FIELDS, TRUE); - - switch (col) { - case CAL_COMPONENT_FIELD_CATEGORIES: - case CAL_COMPONENT_FIELD_CLASSIFICATION: /* actually goes here, not by itself */ - case CAL_COMPONENT_FIELD_COMPLETED: - case CAL_COMPONENT_FIELD_DTEND: - case CAL_COMPONENT_FIELD_DTSTART: - case CAL_COMPONENT_FIELD_DUE: - case CAL_COMPONENT_FIELD_GEO: - case CAL_COMPONENT_FIELD_PERCENT: - case CAL_COMPONENT_FIELD_PRIORITY: - case CAL_COMPONENT_FIELD_TRANSPARENCY: - case CAL_COMPONENT_FIELD_URL: - return string_is_empty (value); - - case CAL_COMPONENT_FIELD_HAS_ALARMS: - case CAL_COMPONENT_FIELD_ICON: - case CAL_COMPONENT_FIELD_COMPLETE: - case CAL_COMPONENT_FIELD_RECURRING: - case CAL_COMPONENT_FIELD_OVERDUE: - case CAL_COMPONENT_FIELD_COLOR: - return TRUE; - - default: - g_message ("calendar_model_value_is_empty(): Requested invalid column %d", col); - return TRUE; - } -} - - - -/** - * calendar_model_new: - * - * Creates a new calendar model. It must be told about the calendar client - * interface object it will monitor with calendar_model_set_cal_client(). - * - * Return value: A newly-created calendar model. - **/ -CalendarModel * -calendar_model_new (void) -{ - return CALENDAR_MODEL (gtk_type_new (TYPE_CALENDAR_MODEL)); -} - - -/* Callback used when a calendar is loaded into the server */ -static void -cal_loaded_cb (CalClient *client, - CalClientLoadStatus status, - CalendarModel *model) -{ - g_return_if_fail (IS_CALENDAR_MODEL (model)); - - e_table_model_pre_change (E_TABLE_MODEL (model)); - load_objects (model); - e_table_model_changed (E_TABLE_MODEL (model)); -} - - -/* Removes an object from the model and updates all the indices that follow. - * Returns the index of the object that was removed, or -1 if no object with - * such UID was found. - */ -static int -remove_object (CalendarModel *model, const char *uid) -{ - CalendarModelPrivate *priv; - int *idx; - CalComponent *orig_comp; - int i; - int n; - - priv = model->priv; - - /* Find the index of the object to be removed */ - - idx = g_hash_table_lookup (priv->uid_index_hash, uid); - if (!idx) - return -1; - - orig_comp = g_array_index (priv->objects, CalComponent *, *idx); - g_assert (orig_comp != NULL); - - /* Decrease the indices of all the objects that follow in the array */ - - for (i = *idx + 1; i < priv->objects->len; i++) { - CalComponent *comp; - int *comp_idx; - const char *comp_uid; - - comp = g_array_index (priv->objects, CalComponent *, i); - g_assert (comp != NULL); - - cal_component_get_uid (comp, &comp_uid); - - comp_idx = g_hash_table_lookup (priv->uid_index_hash, comp_uid); - g_assert (comp_idx != NULL); - - (*comp_idx)--; - g_assert (*comp_idx >= 0); - } - - /* Remove this object from the array and hash */ - - g_hash_table_remove (priv->uid_index_hash, uid); - g_array_remove_index (priv->objects, *idx); - - gtk_object_unref (GTK_OBJECT (orig_comp)); - - n = *idx; - g_free (idx); - - return n; -} - -/* Callback used when an object is updated in the server */ -static void -obj_updated_cb (CalClient *client, const char *uid, gpointer data) -{ - CalendarModel *model; - CalendarModelPrivate *priv; - int orig_idx; - CalComponent *new_comp; - const char *new_comp_uid; - int *new_idx; - CalClientGetStatus status; - gboolean added; - - model = CALENDAR_MODEL (data); - priv = model->priv; - - orig_idx = remove_object (model, uid); - - status = cal_client_get_object (priv->client, uid, &new_comp); - - added = FALSE; - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - cal_component_get_uid (new_comp, &new_comp_uid); - - if (orig_idx == -1) { - /* The object not in the model originally, so we just append it */ - - g_array_append_val (priv->objects, new_comp); - - new_idx = g_new (int, 1); - *new_idx = priv->objects->len - 1; - - g_hash_table_insert (priv->uid_index_hash, (char *) new_comp_uid, new_idx); - } else { - int i; - - /* Insert the new version of the object in its old position */ - - g_array_insert_val (priv->objects, orig_idx, new_comp); - - new_idx = g_new (int, 1); - *new_idx = orig_idx; - g_hash_table_insert (priv->uid_index_hash, (char *) new_comp_uid, new_idx); - - /* Increase the indices of all subsequent objects */ - - for (i = orig_idx + 1; i < priv->objects->len; i++) { - CalComponent *comp; - int *comp_idx; - const char *comp_uid; - - comp = g_array_index (priv->objects, CalComponent *, i); - g_assert (comp != NULL); - - cal_component_get_uid (comp, &comp_uid); - - comp_idx = g_hash_table_lookup (priv->uid_index_hash, comp_uid); - g_assert (comp_idx != NULL); - - (*comp_idx)++; - } - } - - e_table_model_row_changed (E_TABLE_MODEL (model), *new_idx); - break; - - case CAL_CLIENT_GET_NOT_FOUND: - /* Nothing; the object may have been removed from the server. We just - * notify that the old object was deleted. - */ - if (orig_idx != -1) - e_table_model_row_deleted (E_TABLE_MODEL (model), orig_idx); - - break; - - case CAL_CLIENT_GET_SYNTAX_ERROR: - g_message ("obj_updated_cb(): Syntax error when getting object `%s'", uid); - - /* Same notification as above */ - if (orig_idx != -1) - e_table_model_row_deleted (E_TABLE_MODEL (model), orig_idx); - - break; - - default: - g_assert_not_reached (); - } -} - -/* Callback used when an object is removed in the server */ -static void -obj_removed_cb (CalClient *client, const char *uid, gpointer data) -{ - CalendarModel *model; - int idx; - - model = CALENDAR_MODEL (data); - - idx = remove_object (model, uid); - - if (idx != -1) - e_table_model_row_deleted (E_TABLE_MODEL (model), idx); -} - -/* Loads the required objects from the calendar client */ -static void -load_objects (CalendarModel *model) -{ - CalendarModelPrivate *priv; - GList *uids; - GList *l; - - priv = model->priv; - - uids = cal_client_get_uids (priv->client, priv->type); - - for (l = uids; l; l = l->next) { - char *uid; - CalComponent *comp; - const char *comp_uid; - CalClientGetStatus status; - int *idx; - - uid = l->data; - status = cal_client_get_object (priv->client, uid, &comp); - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - break; - - case CAL_CLIENT_GET_NOT_FOUND: - /* Nothing; the object may have been removed from the server */ - continue; - - case CAL_CLIENT_GET_SYNTAX_ERROR: - g_message ("load_objects(): Syntax error when getting object `%s'", uid); - continue; - - default: - g_assert_not_reached (); - } - - idx = g_new (int, 1); - - g_array_append_val (priv->objects, comp); - *idx = priv->objects->len - 1; - - cal_component_get_uid (comp, &comp_uid); - g_hash_table_insert (priv->uid_index_hash, (char *) comp_uid, idx); - } - - cal_obj_uid_list_free (uids); -} - -/** - * calendar_model_get_cal_client: - * @model: A calendar model. - * - * Queries the calendar client interface object that a calendar model is using. - * - * Return value: A calendar client interface object. - **/ -CalClient * -calendar_model_get_cal_client (CalendarModel *model) -{ - CalendarModelPrivate *priv; - - g_return_val_if_fail (model != NULL, NULL); - g_return_val_if_fail (IS_CALENDAR_MODEL (model), NULL); - - priv = model->priv; - - return priv->client; -} - - -/** - * calendar_model_set_cal_client: - * @model: A calendar model. - * @client: A calendar client interface object. - * @type: Type of objects to present. - * - * Sets the calendar client interface object that a calendar model will monitor. - * It also sets the types of objects this model will present to an #ETable. - **/ -void -calendar_model_set_cal_client (CalendarModel *model, CalClient *client, CalObjType type) -{ - CalendarModelPrivate *priv; - - g_return_if_fail (model != NULL); - g_return_if_fail (IS_CALENDAR_MODEL (model)); - - if (client) - g_return_if_fail (IS_CAL_CLIENT (client)); - - priv = model->priv; - - if (priv->client == client && priv->type == type) - return; - - e_table_model_pre_change (E_TABLE_MODEL(model)); - - if (client) - gtk_object_ref (GTK_OBJECT (client)); - - if (priv->client) { - gtk_signal_disconnect_by_data (GTK_OBJECT (priv->client), model); - gtk_object_unref (GTK_OBJECT (priv->client)); - } - - free_objects (model); - - priv->client = client; - priv->type = type; - - if (priv->client) { - gtk_signal_connect (GTK_OBJECT (priv->client), "cal_loaded", - GTK_SIGNAL_FUNC (cal_loaded_cb), model); - gtk_signal_connect (GTK_OBJECT (priv->client), "obj_updated", - GTK_SIGNAL_FUNC (obj_updated_cb), model); - gtk_signal_connect (GTK_OBJECT (priv->client), "obj_removed", - GTK_SIGNAL_FUNC (obj_removed_cb), model); - - load_objects (model); - } - - e_table_model_changed (E_TABLE_MODEL (model)); -} - - -void -calendar_model_delete_task (CalendarModel *model, - gint row) -{ - CalendarModelPrivate *priv; - CalComponent *comp; - const char *uid; - - g_return_if_fail (model != NULL); - g_return_if_fail (IS_CALENDAR_MODEL (model)); - - priv = model->priv; - - g_return_if_fail (row >= 0 && row < priv->objects->len); - - comp = g_array_index (priv->objects, CalComponent *, row); - g_assert (comp != NULL); - - cal_component_get_uid (comp, &uid); - - if (!cal_client_remove_object (priv->client, uid)) - g_message ("calendar_model_delete_task(): Could not remove the object!"); -} - - -void -calendar_model_mark_task_complete (CalendarModel *model, - gint row) -{ - CalendarModelPrivate *priv; - CalComponent *comp; - int percent; - struct icaltimetype itt; - - g_return_if_fail (model != NULL); - g_return_if_fail (IS_CALENDAR_MODEL (model)); - - priv = model->priv; - - g_return_if_fail (row >= 0 && row < priv->objects->len); - - comp = g_array_index (priv->objects, CalComponent *, row); - g_assert (comp != NULL); - - percent = 100; - cal_component_set_percent (comp, &percent); - - itt = icaltimetype_from_timet (time (NULL), FALSE); - cal_component_set_completed (comp, &itt); - - if (!cal_client_update_object (priv->client, comp)) - g_message ("calendar_model_mark_task_complete(): Could not update the object!"); -} - - -/* Frees the objects stored in the calendar model */ -CalComponent * -calendar_model_get_cal_object (CalendarModel *model, - gint row) -{ - CalendarModelPrivate *priv; - - g_return_val_if_fail (model != NULL, NULL); - g_return_val_if_fail (IS_CALENDAR_MODEL (model), NULL); - - priv = model->priv; - - g_return_val_if_fail (row >= 0 && row < priv->objects->len, NULL); - - return g_array_index (priv->objects, CalComponent *, row); -} diff --git a/calendar/gui/calendar-model.h b/calendar/gui/calendar-model.h deleted file mode 100644 index d1481a4ece..0000000000 --- a/calendar/gui/calendar-model.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Evolution calendar - Data model for ETable - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CALENDAR_MODEL_H -#define CALENDAR_MODEL_H - -#include -#include -#include - -BEGIN_GNOME_DECLS - - - -#define TYPE_CALENDAR_MODEL (calendar_model_get_type ()) -#define CALENDAR_MODEL(obj) (GTK_CHECK_CAST ((obj), TYPE_CALENDAR_MODEL, CalendarModel)) -#define CALENDAR_MODEL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_CALENDAR_MODEL, \ - CalendarModelClass)) -#define IS_CALENDAR_MODEL(obj) (GTK_CHECK_TYPE ((obj), TYPE_CALENDAR_MODEL)) -#define IS_CALENDAR_MODEL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_CALENDAR_MODEL)) - -typedef struct _CalendarModel CalendarModel; -typedef struct _CalendarModelClass CalendarModelClass; - -struct _CalendarModel { - ETableModel model; - - /* Private data */ - gpointer priv; -}; - -struct _CalendarModelClass { - ETableModelClass parent_class; -}; - -GtkType calendar_model_get_type (void); - -CalendarModel* calendar_model_new (void); - -CalClient* calendar_model_get_cal_client (CalendarModel *model); -void calendar_model_set_cal_client (CalendarModel *model, - CalClient *client, - CalObjType type); - -void calendar_model_mark_task_complete (CalendarModel *model, - gint row); -void calendar_model_delete_task (CalendarModel *model, - gint row); - -CalComponent* calendar_model_get_cal_object (CalendarModel *model, - gint row); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/gui/component-factory.c b/calendar/gui/component-factory.c deleted file mode 100644 index 8644b8928c..0000000000 --- a/calendar/gui/component-factory.c +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* component-factory.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#include -#include -#include "evolution-shell-component.h" -#include "component-factory.h" -#include "control-factory.h" - - - -#ifdef USING_OAF -#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921" -#else -#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:evolution-calendar" -#endif - -static BonoboGenericFactory *factory = NULL; - -static const EvolutionShellComponentFolderType folder_types[] = { - { "calendar", "evolution-calendar.png" }, - { NULL, NULL } -}; - - -/* EvolutionShellComponent methods and signals. */ - -static EvolutionShellComponentResult -create_view (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - BonoboControl **control_return, - void *closure) -{ - BonoboControl *control; - - if (g_strcasecmp (type, "calendar") != 0) - return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE; - - control = control_factory_new_control (); - bonobo_control_set_property (control, "folder_uri", physical_uri, NULL); - - *control_return = control; - - return EVOLUTION_SHELL_COMPONENT_OK; -} - -static gint owner_count = 0; - -static void -owner_set_cb (EvolutionShellComponent *shell_component, - Evolution_Shell shell_interface, - const char *evolution_homedir) -{ - owner_count ++; -} - -static void -owner_unset_cb (EvolutionShellComponent *shell_component, - Evolution_Shell shell_interface, - EvolutionShellClient shell_client, - void *data) -{ - owner_count --; - if (owner_count <= 0) - gtk_main_quit(); -} - - -/* The factory function. */ - -static BonoboObject * -factory_fn (BonoboGenericFactory *factory, - void *closure) -{ - EvolutionShellComponent *shell_component; - - shell_component = evolution_shell_component_new (folder_types, create_view, NULL, NULL, NULL, NULL); - - gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set", - GTK_SIGNAL_FUNC (owner_set_cb), NULL); - gtk_signal_connect (GTK_OBJECT (shell_component), "owner_unset", - GTK_SIGNAL_FUNC (owner_unset_cb), NULL); - - return BONOBO_OBJECT (shell_component); -} - - -void -component_factory_init (void) -{ - if (factory != NULL) - return; - - factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL); - - if (factory == NULL) - g_error ("Cannot initialize Evolution's calendar component."); -} diff --git a/calendar/gui/component-factory.h b/calendar/gui/component-factory.h deleted file mode 100644 index f83a849452..0000000000 --- a/calendar/gui/component-factory.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* component-factory.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _COMPONENT_FACTORY_H_ -#define _COMPONENT_FACTORY_H_ - -void component_factory_init (void); - -#endif /* _COMPONENT_FACTORY_H_ */ diff --git a/calendar/gui/control-factory.c b/calendar/gui/control-factory.c deleted file mode 100644 index d7626d21f3..0000000000 --- a/calendar/gui/control-factory.c +++ /dev/null @@ -1,188 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* control-factory.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#include -#include -#include -#include -#include -#include - -#ifdef USING_OAF -#include -#else -#include -#endif - -#include -#include -#include -#include - -#include "control-factory.h" - -#define PROPERTY_CALENDAR_URI "folder_uri" - -#define PROPERTY_CALENDAR_URI_IDX 1 - -#ifdef USING_OAF -#define CONTROL_FACTORY_ID "OAFIID:control-factory:calendar:f4f90989-0f50-4af2-ad94-8bbdf331f0bc" -#else -#define CONTROL_FACTORY_ID "control-factory:calendar" -#endif - - -CORBA_Environment ev; -CORBA_ORB orb; - - -static void -control_activate_cb (BonoboControl *control, - gboolean activate, - gpointer user_data) -{ - if (activate) - calendar_control_activate (control, user_data); - else - calendar_control_deactivate (control); -} - - -static void -get_prop (BonoboPropertyBag *bag, - BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - /*GnomeCalendar *gcal = user_data;*/ - - switch (arg_id) { - - case PROPERTY_CALENDAR_URI_IDX: - /* - if (fb && fb->uri) - BONOBO_ARG_SET_STRING (arg, fb->uri); - else - BONOBO_ARG_SET_STRING (arg, ""); - */ - break; - - default: - g_warning ("Unhandled arg %d\n", arg_id); - } -} - - -static void -set_prop (BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GnomeCalendar *gcal = user_data; - char *filename; - - switch (arg_id) { - - case PROPERTY_CALENDAR_URI_IDX: - printf ("set_prop: '%s'\n", BONOBO_ARG_GET_STRING (arg)); - filename = g_strdup_printf ("%s/calendar.vcf", - BONOBO_ARG_GET_STRING (arg)); - calendar_set_uri (gcal, filename); - g_free (filename); - break; - - default: - g_warning ("Unhandled arg %d\n", arg_id); - break; - } -} - - -static void -calendar_properties_init (GnomeCalendar *gcal) -{ - gcal->properties = bonobo_property_bag_new (get_prop, set_prop, gcal); - - bonobo_property_bag_add (gcal->properties, - PROPERTY_CALENDAR_URI, - PROPERTY_CALENDAR_URI_IDX, - BONOBO_ARG_STRING, - NULL, - _("The URI that the calendar will display"), - 0); - - bonobo_control_set_property_bag (gcal->control, gcal->properties); -} - - -static BonoboControl * -create_control (void) -{ - BonoboControl *control; - GnomeCalendar *cal; - - cal = new_calendar (full_name, NULL, NULL, 0); - gtk_widget_show (GTK_WIDGET (cal)); - - control = bonobo_control_new (GTK_WIDGET (cal)); - cal->control = control; - - calendar_properties_init (cal); - - gtk_signal_connect (GTK_OBJECT (control), "activate", - control_activate_cb, cal); - - return control; -} - - -static BonoboObject * -control_factory (BonoboGenericFactory *Factory, void *closure) -{ - return BONOBO_OBJECT (create_control ()); -} - - -void -control_factory_init (void) -{ - static BonoboGenericFactory *factory = NULL; - - if (factory != NULL) - return; - - puts ("XXXXXX - initializing calendar factory!!!"); - - factory = bonobo_generic_factory_new (CONTROL_FACTORY_ID, control_factory, NULL); - - if (factory == NULL) - g_error ("I could not register a Calendar control factory."); -} - - -BonoboControl * -control_factory_new_control (void) -{ - return create_control (); -} diff --git a/calendar/gui/control-factory.h b/calendar/gui/control-factory.h deleted file mode 100644 index bacd2d3d90..0000000000 --- a/calendar/gui/control-factory.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* control-factory.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Federico Mena Quintero - */ - -#ifndef _CONTROL_FACTORY_H_ -#define _CONTROL_FACTORY_H_ - -void control_factory_init (void); -BonoboControl *control_factory_new_control (void); - -#endif /* _CONTROL_FACTORY_H_ */ diff --git a/calendar/gui/dayview.xpm b/calendar/gui/dayview.xpm deleted file mode 100644 index bc8e74e4d6..0000000000 --- a/calendar/gui/dayview.xpm +++ /dev/null @@ -1,42 +0,0 @@ -/* XPM */ -static char * dayview_xpm[] = { -"24 24 15 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #D1D1D1", -"# c #AAAFE2", -"$ c #C7CAEB", -"% c #A3A6C7", -"& c #0010A8", -"* c #555FC5", -"= c #1725AC", -"- c #4550B5", -"; c #E3E4F5", -"> c #8B90C3", -", c #3945BB", -"' c #BABBCC", -" ", -" ", -" ", -" ", -" ...................... ", -" .............+.++.++.. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .++@++@++@#$@++@++@++. ", -" .++@++@++%&*@++@++@++. ", -" .@@@@@@@%=&-@@@@@@@@@. ", -" .++@++@++@&*@++@++@++. ", -" .++@++@++@&*@++@++@++. ", -" .@@@@@@@@@&-@@@@@@@@@. ", -" .++@++@++@&*@++@++@++. ", -" .++@++@+;>&,>++@++@++. ", -" .@@@@@@@'>>>>@@@@@@@@. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" ...................... ", -" ", -" ", -" "}; diff --git a/calendar/gui/dialogs/.cvsignore b/calendar/gui/dialogs/.cvsignore deleted file mode 100644 index e995588475..0000000000 --- a/calendar/gui/dialogs/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -.deps -Makefile -Makefile.in diff --git a/calendar/gui/dialogs/Makefile.am b/calendar/gui/dialogs/Makefile.am deleted file mode 100644 index 227cb5aa07..0000000000 --- a/calendar/gui/dialogs/Makefile.am +++ /dev/null @@ -1,31 +0,0 @@ -gladedir = $(datadir)/evolution/glade - -INCLUDES = \ - -DG_LOG_DOMAIN=\"calendar-gui\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/calendar \ - -I$(top_srcdir)/libical/src/libical \ - -I$(includedir) \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - $(BONOBO_VFS_GNOME_CFLAGS) \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" - -noinst_LIBRARIES = libcal-dialogs.a - -libcal_dialogs_a_SOURCES = \ - alarm-notify-dialog.c \ - alarm-notify-dialog.h \ - task-editor.c \ - task-editor.h - -glade_DATA = \ - alarm-notify.glade \ - task-editor-dialog.glade - -glade_messages = \ - alarm-notify.glade.h \ - task-editor-dialog.glade.h - -EXTRA_DIST = \ - $(glade_DATA) \ - $(glade_messages) diff --git a/calendar/gui/dialogs/alarm-notify-dialog.c b/calendar/gui/dialogs/alarm-notify-dialog.c deleted file mode 100644 index 7d8357599c..0000000000 --- a/calendar/gui/dialogs/alarm-notify-dialog.c +++ /dev/null @@ -1,225 +0,0 @@ -/* Evolution calendar - alarm notification dialog - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "alarm-notify-dialog.h" - - - -/* The useful contents of the alarm notify dialog */ -typedef struct { - GladeXML *xml; - - GtkWidget *dialog; - GtkWidget *close; - GtkWidget *snooze; - GtkWidget *edit; - GtkWidget *heading; - GtkWidget *summary; - GtkWidget *snooze_time; - - AlarmNotifyFunc func; - gpointer func_data; -} AlarmNotify; - - - -/* Callback used when the notify dialog is destroyed */ -static void -dialog_destroy_cb (GtkObject *object, gpointer data) -{ - AlarmNotify *an; - - an = data; - gtk_object_unref (GTK_OBJECT (an->xml)); - g_free (an); -} - -/* Delete_event handler for the alarm notify dialog */ -static gint -delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data) -{ - AlarmNotify *an; - - an = data; - g_assert (an->func != NULL); - - (* an->func) (ALARM_NOTIFY_CLOSE, -1, an->func_data); - - gtk_widget_destroy (widget); - return TRUE; -} - -/* Callback for the close button */ -static void -close_clicked_cb (GtkWidget *widget, gpointer data) -{ - AlarmNotify *an; - - an = data; - g_assert (an->func != NULL); - - (* an->func) (ALARM_NOTIFY_CLOSE, -1, an->func_data); - - gtk_widget_destroy (an->dialog); -} - -/* Callback for the snooze button */ -static void -snooze_clicked_cb (GtkWidget *widget, gpointer data) -{ - AlarmNotify *an; - int snooze_time; - - an = data; - g_assert (an->func != NULL); - - snooze_time = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (an->snooze_time)); - (* an->func) (ALARM_NOTIFY_SNOOZE, snooze_time, an->func_data); - - gtk_widget_destroy (an->dialog); -} - -/* Callback for the edit button */ -static void -edit_clicked_cb (GtkWidget *widget, gpointer data) -{ - AlarmNotify *an; - - an = data; - g_assert (an->func != NULL); - - (* an->func) (ALARM_NOTIFY_EDIT, -1, an->func_data); - - gtk_widget_destroy (an->dialog); -} - -/** - * alarm_notify_dialog: - * @trigger: Trigger time for the alarm. - * @occur: Occurrence time for the event. - * @comp: Calendar component object which corresponds to the alarm. - * @func: Function to be called when a dialog action is invoked. - * @func_data: Closure data for @func. - * - * Runs the alarm notification dialog. The specified @func will be used to - * notify the client about result of the actions in the dialog. - * - * Return value: TRUE on success, FALSE if the dialog could not be created. - **/ -gboolean -alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, - AlarmNotifyFunc func, gpointer func_data) -{ - AlarmNotify *an; - char buf[256]; - struct tm tm_trigger; - struct tm tm_occur; - CalComponentText summary; - - g_return_val_if_fail (trigger != -1, FALSE); - g_return_val_if_fail (occur != -1, FALSE); - g_return_val_if_fail (comp != NULL, FALSE); - g_return_val_if_fail (IS_CAL_COMPONENT (comp), FALSE); - g_return_val_if_fail (func != NULL, FALSE); - - an = g_new0 (AlarmNotify, 1); - - an->func = func; - an->func_data = func_data; - - an->xml = glade_xml_new (EVOLUTION_GLADEDIR "/alarm-notify.glade", NULL); - if (!an->xml) { - g_message ("alarm_notify_dialog(): Could not load the Glade XML file!"); - g_free (an); - return FALSE; - } - - an->dialog = glade_xml_get_widget (an->xml, "alarm-notify"); - an->close = glade_xml_get_widget (an->xml, "close"); - an->snooze = glade_xml_get_widget (an->xml, "snooze"); - an->edit = glade_xml_get_widget (an->xml, "edit"); - an->heading = glade_xml_get_widget (an->xml, "heading"); - an->summary = glade_xml_get_widget (an->xml, "summary"); - an->snooze_time = glade_xml_get_widget (an->xml, "snooze-time"); - - if (!(an->dialog && an->close && an->snooze && an->edit && an->heading && an->summary - && an->snooze_time)) { - g_message ("alarm_notify_dialog(): Could not find all widgets in Glade file!"); - gtk_object_unref (GTK_OBJECT (an->xml)); - g_free (an); - return FALSE; - } - - gtk_object_set_data (GTK_OBJECT (an->dialog), "alarm-notify", an); - gtk_signal_connect (GTK_OBJECT (an->dialog), "destroy", - GTK_SIGNAL_FUNC (dialog_destroy_cb), an); - - /* Title */ - - /* FIXME: use am_pm_flag or 24-hour time */ - - tm_trigger = *localtime (&trigger); - strftime (buf, sizeof (buf), _("Alarm on %A %b %d %Y %H:%M"), &tm_trigger); - gtk_window_set_title (GTK_WINDOW (an->dialog), buf); - - /* Heading */ - - tm_occur = *localtime (&occur); - strftime (buf, sizeof (buf), - _("Notification about your appointment on %A %b %d %Y %H:%M"), - &tm_occur); - gtk_label_set_text (GTK_LABEL (an->heading), buf); - - /* Summary */ - - cal_component_get_summary (comp, &summary); - - if (summary.value) - gtk_label_set_text (GTK_LABEL (an->summary), summary.value); - else - gtk_label_set_text (GTK_LABEL (an->summary), _("No summary available.")); - - /* Connect actions */ - - gtk_signal_connect (GTK_OBJECT (an->dialog), "delete_event", - GTK_SIGNAL_FUNC (delete_event_cb), - an); - - gtk_signal_connect (GTK_OBJECT (an->close), "clicked", - GTK_SIGNAL_FUNC (close_clicked_cb), - an); - - gtk_signal_connect (GTK_OBJECT (an->snooze), "clicked", - GTK_SIGNAL_FUNC (snooze_clicked_cb), - an); - - gtk_signal_connect (GTK_OBJECT (an->edit), "clicked", - GTK_SIGNAL_FUNC (edit_clicked_cb), - an); - - /* Run! */ - - gtk_widget_show (an->dialog); - return TRUE; -} diff --git a/calendar/gui/dialogs/alarm-notify-dialog.h b/calendar/gui/dialogs/alarm-notify-dialog.h deleted file mode 100644 index 1e56f1c586..0000000000 --- a/calendar/gui/dialogs/alarm-notify-dialog.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Evolution calendar - alarm notification dialog - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef ALARM_NOTIFY_DIALOG_H -#define ALARM_NOTIFY_DIALOG_H - -#include -#include -#include - - - -typedef enum { - ALARM_NOTIFY_CLOSE, - ALARM_NOTIFY_SNOOZE, - ALARM_NOTIFY_EDIT -} AlarmNotifyResult; - -typedef void (* AlarmNotifyFunc) (AlarmNotifyResult result, int snooze_mins, gpointer data); - -gboolean alarm_notify_dialog (time_t trigger, time_t occur, CalComponent *comp, - AlarmNotifyFunc func, gpointer func_data); - - - -#endif diff --git a/calendar/gui/dialogs/alarm-notify.glade b/calendar/gui/dialogs/alarm-notify.glade deleted file mode 100644 index 32d7e03f8b..0000000000 --- a/calendar/gui/dialogs/alarm-notify.glade +++ /dev/null @@ -1,230 +0,0 @@ - - - - - Evolution Calendar - evolution-calendar - - src - pixmaps - C - True - True - False - True - True - True - True - interface.c - interface.h - callbacks.c - callbacks.h - support.c - support.h - True - alarm-notify.glade.h - - - - GtkWindow - alarm-notify - True - - GTK_WINDOW_DIALOG - GTK_WIN_POS_CENTER - False - False - False - False - - - GtkVBox - vbox2 - 4 - True - False - 4 - - - GtkHBox - hbox3 - True - False - 8 - - 0 - True - True - - - - GtkVBox - vbox5 - True - False - 4 - - 0 - True - True - - - - GtkLabel - heading - True - - GTK_JUSTIFY_LEFT - True - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkLabel - summary - True - - GTK_JUSTIFY_LEFT - True - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - GtkVBox - vbox4 - True - False - 4 - - 0 - True - True - - - - GtkButton - close - True - True - - - 0 - False - False - - - - - GtkButton - snooze - True - True - - - 0 - False - False - - - - - GtkButton - edit - True - True - - - 0 - False - False - - - - - - - GtkHSeparator - hseparator1 - True - - 0 - True - True - - - - - GtkHBox - hbox4 - True - False - 4 - - 0 - True - True - - - - GtkLabel - label4 - True - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkSpinButton - snooze-time - True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 5 - 1 - 1440 - 1 - 5 - 5 - - 0 - False - False - - - - - - - diff --git a/calendar/gui/dialogs/alarm-notify.glade.h b/calendar/gui/dialogs/alarm-notify.glade.h deleted file mode 100644 index c7b8918e06..0000000000 --- a/calendar/gui/dialogs/alarm-notify.glade.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("Close"); -gchar *s = N_("Snooze"); -gchar *s = N_("Edit appointment"); -gchar *s = N_("Snooze time (minutes)"); diff --git a/calendar/gui/dialogs/task-editor-dialog.glade b/calendar/gui/dialogs/task-editor-dialog.glade deleted file mode 100644 index 56f7f83422..0000000000 --- a/calendar/gui/dialogs/task-editor-dialog.glade +++ /dev/null @@ -1,822 +0,0 @@ - - - - - task-editor-dialog - task-editor-dialog - - src - pixmaps - C - True - True - True - task-editor-dialog.glade.h - - - - GnomeApp - task-editor-dialog - False - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - True - - - GnomeDock - GnomeApp:dock - dock1 - True - - 0 - True - True - - - - GtkNotebook - GnomeDock:contents - notebook1 - 2 - True - True - True - GTK_POS_TOP - False - 2 - 2 - False - - - GtkVBox - vbox1 - 4 - False - 4 - - - GtkTable - table3 - 2 - 2 - False - 4 - 4 - - 0 - False - True - - - - GtkLabel - label3 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - entry1 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkEntry - entry1 - True - True - True - 0 - - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label10 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label11 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - - GtkHSeparator - hseparator1 - - 0 - False - True - - - - - GtkHBox - hbox4 - False - 0 - - 0 - False - True - - - - GtkTable - table1 - 2 - 2 - False - 2 - 4 - - 0 - False - True - - - - GnomeDateEdit - dateedit1 - True - False - False - 7 - 19 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GnomeDateEdit - dateedit2 - True - True - False - 7 - 19 - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label6 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label5 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - - - GtkHSeparator - hseparator2 - - 0 - False - True - - - - - GtkHBox - hbox3 - False - 4 - - 0 - False - True - - - - GtkLabel - label7 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - combo-entry1 - - 0 - False - False - - - - - GtkCombo - combo1 - False - True - False - True - False - Not Started -In Progress -Completed -Cancelled - - - 0 - True - True - - - - GtkEntry - GtkCombo:entry - combo-entry1 - 60 - True - True - True - 0 - Not Started - - - - - GtkLabel - label8 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - combo-entry2 - - 0 - False - False - - - - - GtkCombo - combo2 - False - True - False - True - False - High -Normal -Low - - - 0 - True - True - - - - GtkEntry - GtkCombo:entry - combo-entry2 - 60 - True - False - True - 0 - High - - - - - GtkLabel - label9 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - spinbutton1 - - 0 - False - False - - - - - GtkSpinButton - spinbutton1 - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 0 - 0 - 100 - 10 - 10 - 10 - - 0 - True - True - - - - - - GtkScrolledWindow - scrolledwindow1 - GTK_POLICY_NEVER - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkText - text1 - 150 - True - True - - - - - - GtkHBox - hbox2 - False - 2 - - 0 - False - True - - - - GtkButton - button3 - True - - - 0 - False - False - - - - - GtkEntry - entry2 - True - True - True - 0 - - - 0 - True - True - - - - - GtkButton - button4 - True - - - 0 - False - False - - - - - GtkEntry - entry3 - True - True - True - 0 - - - 0 - True - True - - - - - GtkCheckButton - checkbutton1 - True - - False - True - - 0 - False - False - - - - - - - GtkLabel - Notebook:tab - label1 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table4 - 4 - 4 - 2 - False - 2 - 4 - - - GnomeDateEdit - dateedit3 - True - True - False - 7 - 19 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label12 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label14 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - entry4 - True - True - True - 0 - - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry5 - True - True - True - 0 - - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label15 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 3 - 4 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - entry6 - True - True - True - 0 - - - 1 - 2 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - - GtkLabel - Notebook:tab - label2 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - diff --git a/calendar/gui/dialogs/task-editor-dialog.glade.h b/calendar/gui/dialogs/task-editor-dialog.glade.h deleted file mode 100644 index 9ee959817f..0000000000 --- a/calendar/gui/dialogs/task-editor-dialog.glade.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("S_ubject:"); -gchar *s = N_("Owner:"); -gchar *s = N_("Sta_rt Date:"); -gchar *s = N_("_Due Date:"); -gchar *s = N_("_Status:"); -gchar *s = N_("Not Started\n" - "In Progress\n" - "Completed\n" - "Cancelled\n" - ""); -gchar *s = N_("Not Started"); -gchar *s = N_("_Priority:"); -gchar *s = N_("High\n" - "Normal\n" - "Low\n" - ""); -gchar *s = N_("High"); -gchar *s = N_("% Comp_lete:"); -gchar *s = N_("_Contacts..."); -gchar *s = N_("Ca_tegories..."); -gchar *s = N_("Private"); -gchar *s = N_("Task"); -gchar *s = N_("Date Completed:"); -gchar *s = N_("Location:"); -gchar *s = N_("URL:"); -gchar *s = N_("Resources:"); -gchar *s = N_("Details"); diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c deleted file mode 100644 index dd40c1b9df..0000000000 --- a/calendar/gui/dialogs/task-editor.c +++ /dev/null @@ -1,481 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 2000, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * TaskEditor - a GtkObject which handles a libglade-loaded dialog to edit - * tasks. - */ - -#include -#include -#include -#include -#include -#include "task-editor.h" - - -typedef struct { - /* Glade XML data */ - GladeXML *xml; - - /* UI handler */ - BonoboUIHandler *uih; - - /* Calendar component we are editing; this is an internal copy and is - * not one of the read-only objects from the parent calendar. - */ - CalComponent *comp; - - /* Widgets from the Glade file */ - - GtkWidget *app; -} TaskEditorPrivate; - - -static void task_editor_class_init (TaskEditorClass *class); -static void task_editor_init (TaskEditor *tedit); -TaskEditor * task_editor_construct (TaskEditor *tedit); -static gboolean get_widgets (TaskEditor *tedit); -static void init_widgets (TaskEditor *tedit); -static void create_menu (TaskEditor *tedit); -static void create_toolbar (TaskEditor *tedit); -static void task_editor_destroy (GtkObject *object); - -static GtkObjectClass *parent_class; - -E_MAKE_TYPE(task_editor, "TaskEditor", TaskEditor, - task_editor_class_init, task_editor_init, GTK_TYPE_OBJECT) - - -static void -task_editor_class_init (TaskEditorClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (GTK_TYPE_OBJECT); - - - object_class->destroy = task_editor_destroy; -} - - -static void -task_editor_init (TaskEditor *tedit) -{ - TaskEditorPrivate *priv; - - priv = g_new0 (TaskEditorPrivate, 1); - tedit->priv = priv; -} - - -/** - * task_editor_new: - * @Returns: a new #TaskEditor. - * - * Creates a new #TaskEditor. - **/ -TaskEditor * -task_editor_new (void) -{ - TaskEditor *tedit; - - tedit = TASK_EDITOR (gtk_type_new (task_editor_get_type ())); - - return task_editor_construct (tedit); -} - - -/** - * task_editor_construct: - * @tedit: A #TaskEditor. - * - * Constructs a task editor by loading its Glade XML file. - * - * Return value: The same object as @tedit, or NULL if the widgets could not be - * created. In the latter case, the task editor will automatically be - * destroyed. - **/ -TaskEditor * -task_editor_construct (TaskEditor *tedit) -{ - TaskEditorPrivate *priv; - - g_return_val_if_fail (tedit != NULL, NULL); - g_return_val_if_fail (IS_TASK_EDITOR (tedit), NULL); - - priv = tedit->priv; - - /* Load the content widgets */ - - priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/task-editor-dialog.glade", NULL); - if (!priv->xml) { - g_message ("task_editor_construct(): Could not load the Glade XML file!"); - goto error; - } - - if (!get_widgets (tedit)) { - g_message ("task_editor_construct(): Could not find all widgets in the XML file!"); - goto error; - } - - init_widgets (tedit); - - /* Construct the app */ - - priv->uih = bonobo_ui_handler_new (); - if (!priv->uih) { - g_message ("task_editor_construct(): Could not create the UI handler"); - goto error; - } - - bonobo_ui_handler_set_app (priv->uih, GNOME_APP (priv->app)); - - create_menu (tedit); - create_toolbar (tedit); - - /* Hook to destruction of the dialog */ - -#if 0 - gtk_signal_connect (GTK_OBJECT (priv->app), "delete_event", - GTK_SIGNAL_FUNC (app_delete_event_cb), tedit); -#endif - - /* Show the dialog */ - - gtk_widget_show (priv->app); - - return tedit; - - error: - - gtk_object_unref (GTK_OBJECT (tedit)); - return NULL; -} - - -/* Gets the widgets from the XML file and returns if they are all available. - * For the widgets whose values can be simply set with e-dialog-utils, it does - * that as well. - */ -static gboolean -get_widgets (TaskEditor *tedit) -{ - TaskEditorPrivate *priv; - - priv = tedit->priv; - -#define GW(name) glade_xml_get_widget (priv->xml, name) - - priv->app = GW ("task-editor-dialog"); - - return TRUE; -} - - -/* Hooks the widget signals */ -static void -init_widgets (TaskEditor *tedit) -{ - TaskEditorPrivate *priv; - - priv = tedit->priv; - -} - - -/* Menu bar */ - -static GnomeUIInfo file_new_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Task"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Task _Request"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Mail Message"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Appointment"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Meeting Re_quest"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Task"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Task _Request"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Journal Entry"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Note"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_page_setup_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Memo Style"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Define Print _Styles..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_menu[] = { - GNOMEUIINFO_MENU_NEW_SUBTREE (file_new_menu), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: S_end"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_SAVE_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_SAVE_AS_ITEM (NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Save Attac_hments..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Delete"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Move to Folder..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Cop_y to Folder..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("Page Set_up"), file_page_setup_menu), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Print Pre_view"), NULL, NULL), - GNOMEUIINFO_MENU_PRINT_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_PROPERTIES_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLOSE_ITEM (NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo edit_object_menu[] = { - GNOMEUIINFO_ITEM_NONE ("FIXME: what goes here?", NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo edit_menu[] = { - GNOMEUIINFO_MENU_UNDO_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_REDO_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CUT_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_COPY_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_PASTE_ITEM (NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Paste _Special..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLEAR_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_SELECT_ALL_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Mark as U_nread"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_FIND_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_FIND_AGAIN_ITEM (NULL, NULL), - GNOMEUIINFO_SUBTREE (N_("_Object"), edit_object_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_previous_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: In_complete Task"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Fi_rst Item in Folder"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_next_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: In_complete Task"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Last Item in Folder"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_toolbars_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("FIXME: _Standard"), NULL, NULL, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, - { GNOME_APP_UI_TOGGLEITEM, N_("FIXME: __Formatting"), NULL, NULL, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Customize..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_menu[] = { - GNOMEUIINFO_SUBTREE (N_("Pre_vious"), view_previous_menu), - GNOMEUIINFO_SUBTREE (N_("Ne_xt"), view_next_menu), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("_Toolbars"), view_toolbars_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo insert_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _File..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: It_em..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Object..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo format_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Font..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Paragraph..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo tools_forms_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Desi_gn This Form"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: D_esign a Form..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Publish _Form..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Pu_blish Form As..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Script _Debugger"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo tools_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Spelling..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Chec_k Names"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Address _Book..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("_Forms"), tools_forms_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo actions_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _New Task"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: S_end Status Report"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Mark Complete"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Rec_urrence..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: S_kip Occurrence"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Assig_n Task"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Reply"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Reply to A_ll"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: For_ward"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo help_menu[] = { - GNOMEUIINFO_ITEM_NONE ("FIXME: fix Bonobo so it supports help items!", NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo main_menu[] = { - GNOMEUIINFO_MENU_FILE_TREE (file_menu), - GNOMEUIINFO_MENU_EDIT_TREE (edit_menu), - GNOMEUIINFO_MENU_VIEW_TREE (view_menu), - GNOMEUIINFO_SUBTREE (N_("_Insert"), insert_menu), - GNOMEUIINFO_SUBTREE (N_("F_ormat"), format_menu), - GNOMEUIINFO_SUBTREE (N_("_Tools"), tools_menu), - GNOMEUIINFO_SUBTREE (N_("Actio_ns"), actions_menu), - GNOMEUIINFO_MENU_HELP_TREE (help_menu), - GNOMEUIINFO_END -}; - - -/* Creates the menu bar for the event editor */ -static void -create_menu (TaskEditor *tedit) -{ - TaskEditorPrivate *priv; - BonoboUIHandlerMenuItem *list; - - priv = tedit->priv; - - bonobo_ui_handler_create_menubar (priv->uih); - - list = bonobo_ui_handler_menu_parse_uiinfo_list_with_data (main_menu, - tedit); - bonobo_ui_handler_menu_add_list (priv->uih, "/", list); -} - - -/* Toolbar */ - -static GnomeUIInfo toolbar[] = { - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Save and Close"), - N_("Save the task and close the dialog box"), - NULL, - GNOME_STOCK_PIXMAP_SAVE), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Print..."), - N_("Print this item"), NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Insert File..."), - N_("Insert a file as an attachment"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Recurrence..."), - N_("Configure recurrence rules"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Assign Task..."), - N_("Assign the task to someone"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Delete"), - N_("Delete this item"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Previous"), - N_("Go to the previous item"), NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Next"), - N_("Go to the next item"), NULL), - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Help"), - N_("See online help"), NULL, GNOME_STOCK_PIXMAP_HELP), - GNOMEUIINFO_END -}; - - -/* Creates the toolbar for the event editor */ -static void -create_toolbar (TaskEditor *tedit) -{ - TaskEditorPrivate *priv; - BonoboUIHandlerToolbarItem *list; - GnomeDockItem *dock_item; - GtkWidget *toolbar_child; - - priv = tedit->priv; - - bonobo_ui_handler_create_toolbar (priv->uih, "Toolbar"); - - /* Fetch the toolbar. What a pain in the ass. */ - - dock_item = gnome_app_get_dock_item_by_name (GNOME_APP (priv->app), GNOME_APP_TOOLBAR_NAME); - g_assert (dock_item != NULL); - - toolbar_child = gnome_dock_item_get_child (dock_item); - g_assert (toolbar_child != NULL && GTK_IS_TOOLBAR (toolbar_child)); - - /* Turn off labels as GtkToolbar sucks */ - gtk_toolbar_set_style (GTK_TOOLBAR (toolbar_child), GTK_TOOLBAR_ICONS); - - list = bonobo_ui_handler_toolbar_parse_uiinfo_list_with_data (toolbar, - tedit); - bonobo_ui_handler_toolbar_add_list (priv->uih, "/Toolbar", list); -} - - -static void -task_editor_destroy (GtkObject *object) -{ - TaskEditor *tedit; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_TASK_EDITOR (object)); - - tedit = TASK_EDITOR (object); - - -} - - diff --git a/calendar/gui/dialogs/task-editor.h b/calendar/gui/dialogs/task-editor.h deleted file mode 100644 index 159b969ab9..0000000000 --- a/calendar/gui/dialogs/task-editor.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 2000, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _TASK_EDITOR_H_ -#define _TASK_EDITOR_H_ - -#include -#include -#include - -BEGIN_GNOME_DECLS - - -#define TASK_EDITOR(obj) GTK_CHECK_CAST (obj, task_editor_get_type (), TaskEditor) -#define TASK_EDITOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, task_editor_get_type (), TaskEditorClass) -#define IS_TASK_EDITOR(obj) GTK_CHECK_TYPE (obj, task_editor_get_type ()) - - -typedef struct _TaskEditor TaskEditor; -typedef struct _TaskEditorClass TaskEditorClass; - -struct _TaskEditor -{ - GtkObject object; - - /* Private data */ - gpointer priv; -}; - -struct _TaskEditorClass -{ - GtkObjectClass parent_class; -}; - - -GtkType task_editor_get_type (void); -TaskEditor* task_editor_new (void); - - - -END_GNOME_DECLS - -#endif /* _TASK_EDITOR_H_ */ diff --git a/calendar/gui/dialogs/task-page.glade b/calendar/gui/dialogs/task-page.glade deleted file mode 100644 index 56f7f83422..0000000000 --- a/calendar/gui/dialogs/task-page.glade +++ /dev/null @@ -1,822 +0,0 @@ - - - - - task-editor-dialog - task-editor-dialog - - src - pixmaps - C - True - True - True - task-editor-dialog.glade.h - - - - GnomeApp - task-editor-dialog - False - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - True - - - GnomeDock - GnomeApp:dock - dock1 - True - - 0 - True - True - - - - GtkNotebook - GnomeDock:contents - notebook1 - 2 - True - True - True - GTK_POS_TOP - False - 2 - 2 - False - - - GtkVBox - vbox1 - 4 - False - 4 - - - GtkTable - table3 - 2 - 2 - False - 4 - 4 - - 0 - False - True - - - - GtkLabel - label3 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - entry1 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkEntry - entry1 - True - True - True - 0 - - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label10 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label11 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - - GtkHSeparator - hseparator1 - - 0 - False - True - - - - - GtkHBox - hbox4 - False - 0 - - 0 - False - True - - - - GtkTable - table1 - 2 - 2 - False - 2 - 4 - - 0 - False - True - - - - GnomeDateEdit - dateedit1 - True - False - False - 7 - 19 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GnomeDateEdit - dateedit2 - True - True - False - 7 - 19 - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label6 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label5 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - - - GtkHSeparator - hseparator2 - - 0 - False - True - - - - - GtkHBox - hbox3 - False - 4 - - 0 - False - True - - - - GtkLabel - label7 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - combo-entry1 - - 0 - False - False - - - - - GtkCombo - combo1 - False - True - False - True - False - Not Started -In Progress -Completed -Cancelled - - - 0 - True - True - - - - GtkEntry - GtkCombo:entry - combo-entry1 - 60 - True - True - True - 0 - Not Started - - - - - GtkLabel - label8 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - combo-entry2 - - 0 - False - False - - - - - GtkCombo - combo2 - False - True - False - True - False - High -Normal -Low - - - 0 - True - True - - - - GtkEntry - GtkCombo:entry - combo-entry2 - 60 - True - False - True - 0 - High - - - - - GtkLabel - label9 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - spinbutton1 - - 0 - False - False - - - - - GtkSpinButton - spinbutton1 - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 0 - 0 - 100 - 10 - 10 - 10 - - 0 - True - True - - - - - - GtkScrolledWindow - scrolledwindow1 - GTK_POLICY_NEVER - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkText - text1 - 150 - True - True - - - - - - GtkHBox - hbox2 - False - 2 - - 0 - False - True - - - - GtkButton - button3 - True - - - 0 - False - False - - - - - GtkEntry - entry2 - True - True - True - 0 - - - 0 - True - True - - - - - GtkButton - button4 - True - - - 0 - False - False - - - - - GtkEntry - entry3 - True - True - True - 0 - - - 0 - True - True - - - - - GtkCheckButton - checkbutton1 - True - - False - True - - 0 - False - False - - - - - - - GtkLabel - Notebook:tab - label1 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table4 - 4 - 4 - 2 - False - 2 - 4 - - - GnomeDateEdit - dateedit3 - True - True - False - 7 - 19 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label12 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label14 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - entry4 - True - True - True - 0 - - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - entry5 - True - True - True - 0 - - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label15 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 3 - 4 - 0 - 0 - False - False - False - False - True - False - - - - - GtkEntry - entry6 - True - True - True - 0 - - - 1 - 2 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - - GtkLabel - Notebook:tab - label2 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - diff --git a/calendar/gui/e-calendar-table.c b/calendar/gui/e-calendar-table.c deleted file mode 100644 index 1a9e00de12..0000000000 --- a/calendar/gui/e-calendar-table.c +++ /dev/null @@ -1,482 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 2000, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * ECalendarTable - displays the iCalendar objects in a table (an ETable). - * Used for calendar events and tasks. - */ - -#include -#include -#include -#include -#include -#include -#include -#include "e-calendar-table.h" -#include "calendar-model.h" -#include "gncal-todo.h" - -/* Pixmaps. */ -#include "task.xpm" -#include "task-recurring.xpm" -#include "task-assigned.xpm" -#include "task-assigned-to.xpm" - -#include - - -static void e_calendar_table_class_init (ECalendarTableClass *class); -static void e_calendar_table_init (ECalendarTable *cal_table); -static void e_calendar_table_destroy (GtkObject *object); - -static void e_calendar_table_on_double_click (ETable *table, - gint row, - ECalendarTable *cal_table); -static gint e_calendar_table_on_right_click (ETable *table, - gint row, - gint col, - GdkEventButton *event, - ECalendarTable *cal_table); -static void e_calendar_table_on_open_task (GtkWidget *menuitem, - gpointer data); -static void e_calendar_table_on_mark_task_complete (GtkWidget *menuitem, - gpointer data); -static void e_calendar_table_on_delete_task (GtkWidget *menuitem, - gpointer data); -static gint e_calendar_table_on_key_press (ETable *table, - gint row, - gint col, - GdkEventKey *event, - ECalendarTable *cal_table); - -static void e_calendar_table_open_task (ECalendarTable *cal_table, - gint row); - -/* The icons to represent the task. */ -#define E_CALENDAR_MODEL_NUM_ICONS 4 -static char** icon_xpm_data[E_CALENDAR_MODEL_NUM_ICONS] = { - task_xpm, task_recurring_xpm, task_assigned_xpm, task_assigned_to_xpm -}; -static GdkPixbuf* icon_pixbufs[E_CALENDAR_MODEL_NUM_ICONS] = { 0 }; - -static GtkTableClass *parent_class; - - -GtkType -e_calendar_table_get_type (void) -{ - static GtkType e_calendar_table_type = 0; - - if (!e_calendar_table_type){ - GtkTypeInfo e_calendar_table_info = { - "ECalendarTable", - sizeof (ECalendarTable), - sizeof (ECalendarTableClass), - (GtkClassInitFunc) e_calendar_table_class_init, - (GtkObjectInitFunc) e_calendar_table_init, - NULL, /* reserved 1 */ - NULL, /* reserved 2 */ - (GtkClassInitFunc) NULL - }; - - parent_class = gtk_type_class (GTK_TYPE_TABLE); - e_calendar_table_type = gtk_type_unique (GTK_TYPE_TABLE, - &e_calendar_table_info); - } - - return e_calendar_table_type; -} - - -static void -e_calendar_table_class_init (ECalendarTableClass *class) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GtkObjectClass *) class; - widget_class = (GtkWidgetClass *) class; - - /* Method override */ - object_class->destroy = e_calendar_table_destroy; - -#if 0 - widget_class->realize = e_calendar_table_realize; - widget_class->unrealize = e_calendar_table_unrealize; - widget_class->style_set = e_calendar_table_style_set; - widget_class->size_allocate = e_calendar_table_size_allocate; - widget_class->focus_in_event = e_calendar_table_focus_in; - widget_class->focus_out_event = e_calendar_table_focus_out; - widget_class->key_press_event = e_calendar_table_key_press; -#endif -} - - -#define E_CALENDAR_TABLE_SPEC \ - "" \ - "" \ - " 16 " \ - " 17 " \ - " 13 " \ - "" \ - " " \ - "" - -#define e_cell_time_new e_cell_text_new -#define e_cell_time_compare g_str_compare -#define e_cell_geo_pos_new e_cell_text_new -#define e_cell_geo_pos_compare g_str_compare - -static void -e_calendar_table_init (ECalendarTable *cal_table) -{ - GtkWidget *table; - ETableModel *model; - ETableHeader *header; - ECell *cell; - ETableCol *column; - gint i; - GdkPixbuf *pixbuf; - GdkColormap *colormap; - gboolean success[E_CALENDAR_TABLE_COLOR_LAST]; - gint nfailed; - - /* Allocate the colors we need. */ - colormap = gtk_widget_get_colormap (GTK_WIDGET (cal_table)); - - cal_table->colors[E_CALENDAR_TABLE_COLOR_OVERDUE].red = 65535; - cal_table->colors[E_CALENDAR_TABLE_COLOR_OVERDUE].green = 0; - cal_table->colors[E_CALENDAR_TABLE_COLOR_OVERDUE].blue = 0; - - nfailed = gdk_colormap_alloc_colors (colormap, cal_table->colors, - E_CALENDAR_TABLE_COLOR_LAST, - FALSE, TRUE, success); - if (nfailed) - g_warning ("Failed to allocate all colors"); - - - cal_table->model = calendar_model_new (); - model = E_TABLE_MODEL (cal_table->model); - - header = e_table_header_new (); - gtk_object_ref (GTK_OBJECT (header)); - gtk_object_sink (GTK_OBJECT (header)); - - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_COMMENT, _("Comment"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_COMMENT); - - cell = e_cell_time_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_COMPLETED, _("Completed"), - 1.0, 10, cell, e_cell_time_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_COMPLETED); - - cell = e_cell_time_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_CREATED, _("Created"), - 1.0, 10, cell, e_cell_time_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_CREATED); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_DESCRIPTION, _("Description"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_DESCRIPTION); - - cell = e_cell_time_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_DTSTAMP, _("Timestamp"), - 1.0, 10, cell, e_cell_time_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_DTSTAMP); - - cell = e_cell_time_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_DTSTART, _("Start Date"), - 1.0, 10, cell, e_cell_time_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_DTSTART); - - cell = e_cell_time_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_DTEND, _("End Date"), - 1.0, 10, cell, e_cell_time_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_DTEND); - - cell = e_cell_geo_pos_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_GEO, _("Geographical Position"), - 1.0, 10, cell, e_cell_geo_pos_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_GEO); - - cell = e_cell_time_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_LAST_MOD, _("Last Modification Date"), - 1.0, 10, cell, e_cell_time_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_LAST_MOD); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_LOCATION, _("Location"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_LOCATION); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_ORGANIZER, _("Organizer"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_ORGANIZER); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_PERCENT, _("% Complete"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_PERCENT); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_PRIORITY, _("Priority"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_PRIORITY); - - /* FIXME: This should really be 'Subject' in the big view. */ - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - gtk_object_set (GTK_OBJECT (cell), - "strikeout_column", ICAL_OBJECT_FIELD_COMPLETE, - "bold_column", ICAL_OBJECT_FIELD_OVERDUE, - "color_column", ICAL_OBJECT_FIELD_COLOR, - NULL); - column = e_table_col_new (ICAL_OBJECT_FIELD_SUMMARY, _("TaskPad"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_SUMMARY); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_URL, _("URL"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_URL); - - cell = e_cell_text_new (model, NULL, GTK_JUSTIFY_LEFT); - column = e_table_col_new (ICAL_OBJECT_FIELD_HAS_ALARMS, _("Reminder"), - 1.0, 10, cell, g_str_compare, TRUE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_HAS_ALARMS); - - /* Create pixmaps. */ - if (!icon_pixbufs[0]) { - for (i = 0; i < E_CALENDAR_MODEL_NUM_ICONS; i++) { - icon_pixbufs[i] = gdk_pixbuf_new_from_xpm_data ( - (const char **) icon_xpm_data[i]); - } - } - - cell = e_cell_toggle_new (0, 4, icon_pixbufs); - column = e_table_col_new_with_pixbuf (ICAL_OBJECT_FIELD_ICON, - icon_pixbufs[0], 0.0, 16, cell, - g_int_compare, FALSE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_ICON); - - cell = e_cell_checkbox_new (); - pixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) check_filled_xpm); - column = e_table_col_new_with_pixbuf (ICAL_OBJECT_FIELD_COMPLETE, - pixbuf, 0.0, 16, cell, - g_int_compare, FALSE); - e_table_header_add_column (header, column, ICAL_OBJECT_FIELD_COMPLETE); - - - table = e_table_scrolled_new (header, model, E_CALENDAR_TABLE_SPEC); - gtk_object_set (GTK_OBJECT (table), - "click_to_add_message", "Click here to add a new Task", - NULL); - gtk_table_attach (GTK_TABLE (cal_table), table, 0, 1, 0, 1, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (table); - - gtk_signal_connect (GTK_OBJECT (table), "double_click", - GTK_SIGNAL_FUNC (e_calendar_table_on_double_click), - cal_table); - gtk_signal_connect (GTK_OBJECT (table), "right_click", - GTK_SIGNAL_FUNC (e_calendar_table_on_right_click), - cal_table); - gtk_signal_connect (GTK_OBJECT (table), "key_press", - GTK_SIGNAL_FUNC (e_calendar_table_on_key_press), - cal_table); -} - - -/** - * e_calendar_table_new: - * @Returns: a new #ECalendarTable. - * - * Creates a new #ECalendarTable. - **/ -GtkWidget * -e_calendar_table_new (void) -{ - GtkWidget *cal_table; - - cal_table = GTK_WIDGET (gtk_type_new (e_calendar_table_get_type ())); - - return cal_table; -} - - -static void -e_calendar_table_destroy (GtkObject *object) -{ - ECalendarTable *cal_table; - - cal_table = E_CALENDAR_TABLE (object); - - - - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - - -void -e_calendar_table_set_cal_client (ECalendarTable *cal_table, - CalClient *client) -{ - g_print ("In e_calendar_table_set_cal_client\n"); - - calendar_model_set_cal_client (cal_table->model, client, - CALOBJ_TYPE_TODO); -} - - -static void -e_calendar_table_on_double_click (ETable *table, - gint row, - ECalendarTable *cal_table) -{ - g_print ("In e_calendar_table_on_double_click row:%i\n", row); - - e_calendar_table_open_task (cal_table, row); -} - - -static GnomeUIInfo e_calendar_table_popup_uiinfo[] = { - { GNOME_APP_UI_ITEM, N_("Open..."), - N_("Open the task"), e_calendar_table_on_open_task, - NULL, NULL, 0, 0, 0, 0 }, - { GNOME_APP_UI_ITEM, N_("Mark Complete"), - N_("Mark the task complete"), e_calendar_table_on_mark_task_complete, - NULL, NULL, 0, 0, 0, 0 }, - { GNOME_APP_UI_ITEM, N_("Delete"), - N_("Delete the task"), e_calendar_table_on_delete_task, - NULL, NULL, 0, 0, 0, 0 }, - - GNOMEUIINFO_END -}; - - -typedef struct _ECalendarMenuData ECalendarMenuData; -struct _ECalendarMenuData { - ECalendarTable *cal_table; - gint row; -}; - -static gint -e_calendar_table_on_right_click (ETable *table, - gint row, - gint col, - GdkEventButton *event, - ECalendarTable *cal_table) -{ - ECalendarMenuData menu_data; - GtkWidget *popup_menu; - - menu_data.cal_table = cal_table; - menu_data.row = row; - - popup_menu = gnome_popup_menu_new (e_calendar_table_popup_uiinfo); - gnome_popup_menu_do_popup_modal (popup_menu, NULL, NULL, event, - &menu_data); - - gtk_widget_destroy (popup_menu); - - return TRUE; -} - - -static void -e_calendar_table_on_open_task (GtkWidget *menuitem, - gpointer data) -{ - ECalendarMenuData *menu_data = (ECalendarMenuData*) data; - - e_calendar_table_open_task (menu_data->cal_table, - menu_data->row); -} - - -static void -e_calendar_table_on_mark_task_complete (GtkWidget *menuitem, - gpointer data) -{ - ECalendarMenuData *menu_data = (ECalendarMenuData*) data; - - calendar_model_mark_task_complete (menu_data->cal_table->model, - menu_data->row); -} - - -static void -e_calendar_table_on_delete_task (GtkWidget *menuitem, - gpointer data) -{ - ECalendarMenuData *menu_data = (ECalendarMenuData*) data; - - calendar_model_delete_task (menu_data->cal_table->model, - menu_data->row); -} - - - -static gint -e_calendar_table_on_key_press (ETable *table, - gint row, - gint col, - GdkEventKey *event, - ECalendarTable *cal_table) -{ - g_print ("In e_calendar_table_on_key_press\n"); - - if (event->keyval == GDK_Delete) { - g_print (" delete key!!!\n"); - - calendar_model_delete_task (cal_table->model, row); - } - - return FALSE; -} - - -static void -e_calendar_table_open_task (ECalendarTable *cal_table, - gint row) -{ - iCalObject *ico; - -#if 0 - task_editor_new (); - /* FIXME: Set iCalObject to edit. */ -#endif - - ico = calendar_model_get_cal_object (cal_table->model, row); - - gncal_todo_edit (calendar_model_get_cal_client (cal_table->model), - ico); -} - - diff --git a/calendar/gui/e-calendar-table.h b/calendar/gui/e-calendar-table.h deleted file mode 100644 index eed021e846..0000000000 --- a/calendar/gui/e-calendar-table.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 2000, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_CALENDAR_TABLE_H_ -#define _E_CALENDAR_TABLE_H_ - -#include -#include "calendar-model.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * ECalendarTable - displays the iCalendar objects in a table (an ETable). - * Used for calendar events and tasks. - */ - -/* These index our colors array. */ -typedef enum -{ - E_CALENDAR_TABLE_COLOR_OVERDUE, - - E_CALENDAR_TABLE_COLOR_LAST -} ECalendarTableColors; - - -#define E_CALENDAR_TABLE(obj) GTK_CHECK_CAST (obj, e_calendar_table_get_type (), ECalendarTable) -#define E_CALENDAR_TABLE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, e_calendar_table_get_type (), ECalendarTableClass) -#define E_IS_CALENDAR_TABLE(obj) GTK_CHECK_TYPE (obj, e_calendar_table_get_type ()) - - -typedef struct _ECalendarTable ECalendarTable; -typedef struct _ECalendarTableClass ECalendarTableClass; - -struct _ECalendarTable -{ - GtkTable table; - - CalendarModel *model; - - /* Colors for drawing. */ - GdkColor colors[E_CALENDAR_TABLE_COLOR_LAST]; -}; - -struct _ECalendarTableClass -{ - GtkTableClass parent_class; -}; - - -GtkType e_calendar_table_get_type (void); -GtkWidget* e_calendar_table_new (void); - - -void e_calendar_table_set_cal_client (ECalendarTable *cal_table, - CalClient *client); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_CALENDAR_TABLE_H_ */ diff --git a/calendar/gui/e-day-view-main-item.c b/calendar/gui/e-day-view-main-item.c deleted file mode 100644 index 8353c0497e..0000000000 --- a/calendar/gui/e-day-view-main-item.c +++ /dev/null @@ -1,651 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EDayViewMainItem - canvas item which displays most of the appointment - * data in the main Day/Work Week display. - */ - -#include -#include "e-day-view-main-item.h" - -static void e_day_view_main_item_class_init (EDayViewMainItemClass *class); -static void e_day_view_main_item_init (EDayViewMainItem *dvtitem); - -static void e_day_view_main_item_set_arg (GtkObject *o, GtkArg *arg, - guint arg_id); -static void e_day_view_main_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, int flags); -static void e_day_view_main_item_draw (GnomeCanvasItem *item, - GdkDrawable *drawable, - int x, int y, - int width, int height); -static double e_day_view_main_item_point (GnomeCanvasItem *item, - double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item); -static gint e_day_view_main_item_event (GnomeCanvasItem *item, - GdkEvent *event); - -static void e_day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, - int y, - int width, - int height); -static void e_day_view_main_item_draw_events_in_vbars (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, - int width, int height, - gint day); -static void e_day_view_main_item_draw_day_events (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, - int width, int height, - gint day); -static void e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, - int width, int height, - gint day, gint event_num); - -static GnomeCanvasItemClass *parent_class; - -/* The arguments we take */ -enum { - ARG_0, - ARG_DAY_VIEW -}; - - -GtkType -e_day_view_main_item_get_type (void) -{ - static GtkType e_day_view_main_item_type = 0; - - if (!e_day_view_main_item_type) { - GtkTypeInfo e_day_view_main_item_info = { - "EDayViewMainItem", - sizeof (EDayViewMainItem), - sizeof (EDayViewMainItemClass), - (GtkClassInitFunc) e_day_view_main_item_class_init, - (GtkObjectInitFunc) e_day_view_main_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - e_day_view_main_item_type = gtk_type_unique (gnome_canvas_item_get_type (), &e_day_view_main_item_info); - } - - return e_day_view_main_item_type; -} - - -static void -e_day_view_main_item_class_init (EDayViewMainItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - parent_class = gtk_type_class (gnome_canvas_item_get_type()); - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - gtk_object_add_arg_type ("EDayViewMainItem::day_view", - GTK_TYPE_POINTER, GTK_ARG_WRITABLE, - ARG_DAY_VIEW); - - object_class->set_arg = e_day_view_main_item_set_arg; - - /* GnomeCanvasItem method overrides */ - item_class->update = e_day_view_main_item_update; - item_class->draw = e_day_view_main_item_draw; - item_class->point = e_day_view_main_item_point; - item_class->event = e_day_view_main_item_event; -} - - -static void -e_day_view_main_item_init (EDayViewMainItem *dvtitem) -{ - dvtitem->day_view = NULL; -} - - -static void -e_day_view_main_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EDayViewMainItem *dvmitem; - - item = GNOME_CANVAS_ITEM (o); - dvmitem = E_DAY_VIEW_MAIN_ITEM (o); - - switch (arg_id){ - case ARG_DAY_VIEW: - dvmitem->day_view = GTK_VALUE_POINTER (*arg); - break; - } -} - - -static void -e_day_view_main_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags) -{ - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update) - (* GNOME_CANVAS_ITEM_CLASS (parent_class)->update) (item, affine, clip_path, flags); - - /* The item covers the entire canvas area. */ - item->x1 = 0; - item->y1 = 0; - item->x2 = INT_MAX; - item->y2 = INT_MAX; -} - - -/* - * DRAWING ROUTINES - functions to paint the canvas item. - */ - -static void -e_day_view_main_item_draw (GnomeCanvasItem *canvas_item, GdkDrawable *drawable, - int x, int y, int width, int height) -{ - EDayViewMainItem *dvmitem; - EDayView *day_view; - GtkStyle *style; - GdkGC *fg_gc, *bg_gc, *light_gc, *dark_gc, *gc; - GdkFont *font; - gint row, row_y, grid_x1, grid_x2; - gint day, grid_y1, grid_y2; - gint work_day_start_row, work_day_end_row; - gint work_day_start_y, work_day_end_y; - gint work_day_x, work_day_w; - gint start_row, end_row, rect_x, rect_y, rect_width, rect_height; - -#if 0 - g_print ("In e_day_view_main_item_draw %i,%i %ix%i\n", - x, y, width, height); -#endif - dvmitem = E_DAY_VIEW_MAIN_ITEM (canvas_item); - day_view = dvmitem->day_view; - g_return_if_fail (day_view != NULL); - - style = GTK_WIDGET (day_view)->style; - font = style->font; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - bg_gc = style->bg_gc[GTK_STATE_NORMAL]; - light_gc = style->light_gc[GTK_STATE_NORMAL]; - dark_gc = style->dark_gc[GTK_STATE_NORMAL]; - - /* Paint the background colors. */ - gc = day_view->main_gc; - work_day_start_row = e_day_view_convert_time_to_row (day_view, day_view->work_day_start_hour, day_view->work_day_start_minute); - work_day_start_y = work_day_start_row * day_view->row_height - y; - work_day_end_row = e_day_view_convert_time_to_row (day_view, day_view->work_day_end_hour, day_view->work_day_end_minute); - work_day_end_y = work_day_end_row * day_view->row_height - y; - - work_day_x = day_view->day_offsets[0] - x; - work_day_w = width - work_day_x; - gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING]); - gdk_draw_rectangle (drawable, gc, TRUE, - work_day_x, 0 - y, - work_day_w, work_day_start_y - (0 - y)); - gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING]); - gdk_draw_rectangle (drawable, gc, TRUE, - work_day_x, work_day_start_y, - work_day_w, work_day_end_y - work_day_start_y); - gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING]); - gdk_draw_rectangle (drawable, gc, TRUE, - work_day_x, work_day_end_y, - work_day_w, height - work_day_end_y); - - /* Paint the selection background. */ - if (GTK_WIDGET_HAS_FOCUS (day_view) - && day_view->selection_start_day != -1 - && !day_view->selection_in_top_canvas) { - for (day = day_view->selection_start_day; - day <= day_view->selection_end_day; - day++) { - if (day == day_view->selection_start_day - && day_view->selection_start_row != -1) - start_row = day_view->selection_start_row; - else - start_row = 0; - if (day == day_view->selection_end_day - && day_view->selection_end_row != -1) - end_row = day_view->selection_end_row; - else - end_row = day_view->rows - 1; - - rect_x = day_view->day_offsets[day] - x; - rect_width = day_view->day_widths[day]; - rect_y = start_row * day_view->row_height - y; - rect_height = (end_row - start_row + 1) * day_view->row_height; - - gc = style->bg_gc[GTK_STATE_SELECTED]; - gdk_draw_rectangle (drawable, gc, TRUE, - rect_x, rect_y, - rect_width, rect_height); - } - } - - /* Drawing the horizontal grid lines. */ - grid_x1 = day_view->day_offsets[0] - x; - grid_x2 = day_view->day_offsets[day_view->days_shown] - x; - - for (row = 0, row_y = 0 - y; - row < day_view->rows && row_y < height; - row++, row_y += day_view->row_height) { - if (row_y >= 0 && row_y < height) - gdk_draw_line (drawable, dark_gc, - grid_x1, row_y, grid_x2, row_y); - } - - /* Draw the vertical bars down the left of each column. */ - grid_y1 = 0; - grid_y2 = height; - for (day = 0; day < day_view->days_shown; day++) { - grid_x1 = day_view->day_offsets[day] - x; - - /* Skip if it isn't visible. */ - if (grid_x1 >= width || grid_x1 + E_DAY_VIEW_BAR_WIDTH <= 0) - continue; - - gdk_draw_line (drawable, fg_gc, - grid_x1, grid_y1, - grid_x1, grid_y2); - gdk_draw_line (drawable, fg_gc, - grid_x1 + E_DAY_VIEW_BAR_WIDTH - 1, grid_y1, - grid_x1 + E_DAY_VIEW_BAR_WIDTH - 1, grid_y2); - gdk_draw_rectangle (drawable, style->white_gc, TRUE, - grid_x1 + 1, grid_y1, - E_DAY_VIEW_BAR_WIDTH - 2, grid_y2 - grid_y1); - - /* Fill in the bars when the user is busy. */ - e_day_view_main_item_draw_events_in_vbars (dvmitem, drawable, - x, y, - width, height, - day); - } - - /* Fill in the vertical bars corresponding to the busy times from the - long events. */ - e_day_view_main_item_draw_long_events_in_vbars (dvmitem, drawable, - x, y, width, height); - - /* Draw the event borders and backgrounds, and the vertical bars - down the left edges. */ - for (day = 0; day < day_view->days_shown; day++) { - e_day_view_main_item_draw_day_events (dvmitem, drawable, - x, y, width, height, - day); - } -} - - -static void -e_day_view_main_item_draw_events_in_vbars (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, - int width, int height, - gint day) -{ - EDayView *day_view; - EDayViewEvent *event; - GdkGC *gc; - gint grid_x, event_num, bar_y, bar_h; - - day_view = dvmitem->day_view; - - gc = day_view->main_gc; - gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]); - - grid_x = day_view->day_offsets[day] + 1 - x; - - /* Draw the busy times corresponding to the events in the day. */ - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* We can skip the events in the first column since they will - draw over this anyway. */ - if (event->num_columns > 0 && event->start_row_or_col == 0) - continue; - - bar_y = event->start_minute * day_view->row_height / day_view->mins_per_row; - bar_h = event->end_minute * day_view->row_height / day_view->mins_per_row - bar_y; - bar_y -= y; - - /* Skip it if it isn't visible. */ - if (bar_y >= height || bar_y + bar_h <= 0) - continue; - - gdk_draw_rectangle (drawable, gc, TRUE, - grid_x, bar_y, - E_DAY_VIEW_BAR_WIDTH - 2, bar_h); - } -} - - -static void -e_day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, - int width, int height) -{ - EDayView *day_view; - EDayViewEvent *event; - gint event_num, start_day, end_day, day, bar_y1, bar_y2, grid_x; - GdkGC *gc; - - day_view = dvmitem->day_view; - - gc = day_view->main_gc; - gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]); - - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - if (!e_day_view_find_long_event_days (day_view, event, - &start_day, &end_day)) - continue; - - for (day = start_day; day <= end_day; day++) { - grid_x = day_view->day_offsets[day] + 1 - x; - - /* Skip if it isn't visible. */ - if (grid_x >= width - || grid_x + E_DAY_VIEW_BAR_WIDTH <= 0) - continue; - - if (event->start <= day_view->day_starts[day]) { - bar_y1 = 0; - } else { - bar_y1 = event->start_minute * day_view->row_height / day_view->mins_per_row - y; - } - - if (event->end >= day_view->day_starts[day + 1]) { - bar_y2 = height; - } else { - bar_y2 = event->end_minute * day_view->row_height / day_view->mins_per_row - y; - } - - if (bar_y1 < height && bar_y2 > 0 && bar_y2 > bar_y1) { - gdk_draw_rectangle (drawable, gc, TRUE, - grid_x, bar_y1, - E_DAY_VIEW_BAR_WIDTH - 2, - bar_y2 - bar_y1); - } - } - - - } -} - - -static void -e_day_view_main_item_draw_day_events (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, int width, int height, - gint day) -{ - EDayView *day_view; - gint event_num; - - day_view = dvmitem->day_view; - - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - e_day_view_main_item_draw_day_event (dvmitem, drawable, - x, y, width, height, - day, event_num); - } -} - - -static void -e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem, - GdkDrawable *drawable, - int x, int y, int width, int height, - gint day, gint event_num) -{ - EDayView *day_view; - EDayViewEvent *event; - gint item_x, item_y, item_w, item_h, bar_y1, bar_y2; - GtkStyle *style; - GdkGC *gc; - CalComponent *comp; - gint num_icons, icon_x, icon_y, icon_x_inc, icon_y_inc; - gint max_icon_w, max_icon_h; - gboolean draw_reminder_icon, draw_recurrence_icon; - - day_view = dvmitem->day_view; - - /* If the event is currently being dragged, don't draw it. It will - be drawn in the special drag items. */ - if (day_view->drag_event_day == day - && day_view->drag_event_num == event_num) - return; - - style = GTK_WIDGET (day_view)->style; - - gc = day_view->main_gc; - gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]); - - /* Get the position of the event. If it is not shown skip it.*/ - if (!e_day_view_get_event_position (day_view, day, event_num, - &item_x, &item_y, - &item_w, &item_h)) - return; - - item_x -= x; - item_y -= y; - - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* Fill in the white background. Note that for events in the first - column of the day, we might not want to paint over the vertical bar, - since that is used for multiple events. But then you can't see - where the event in the first column finishes. */ -#if 0 - if (event->start_row_or_col == 0) - gdk_draw_rectangle (drawable, style->white_gc, TRUE, - item_x + E_DAY_VIEW_BAR_WIDTH, item_y + 1, - MAX (item_w - E_DAY_VIEW_BAR_WIDTH - 1, 0), - item_h - 2); - else -#endif - gdk_draw_rectangle (drawable, style->white_gc, TRUE, - item_x + 1, item_y + 1, - MAX (item_w - 2, 0), item_h - 2); - - /* Draw the right edge of the vertical bar. */ - gdk_draw_line (drawable, style->black_gc, - item_x + E_DAY_VIEW_BAR_WIDTH - 1, - item_y + 1, - item_x + E_DAY_VIEW_BAR_WIDTH - 1, - item_y + item_h - 2); - - /* Draw the vertical colored bar showing when the appointment - begins & ends. */ - bar_y1 = event->start_minute * day_view->row_height / day_view->mins_per_row - y; - bar_y2 = event->end_minute * day_view->row_height / day_view->mins_per_row - y; - - /* When an item is being resized, we fill the bar up to the new row. */ - if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE - && day_view->resize_event_day == day - && day_view->resize_event_num == event_num) { - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_TOP_EDGE) - bar_y1 = item_y + 1; - else if (day_view->resize_drag_pos == E_DAY_VIEW_POS_BOTTOM_EDGE) - bar_y2 = item_y + item_h - 1; - } - - gdk_draw_rectangle (drawable, gc, TRUE, - item_x + 1, bar_y1, - E_DAY_VIEW_BAR_WIDTH - 2, bar_y2 - bar_y1); - - /* Draw the box around the entire event. Do this after drawing - the colored bar so we don't have to worry about being 1 - pixel out. */ - gdk_draw_rectangle (drawable, style->black_gc, FALSE, - item_x, item_y, MAX (item_w - 1, 0), item_h - 1); - -#if 0 - /* Draw the horizontal bars above and beneath the event if it - is currently being edited. */ - if (day_view->editing_event_day == day - && day_view->editing_event_num == event_num) { - gdk_draw_rectangle (drawable, gc, TRUE, - item_x, - item_y - E_DAY_VIEW_BAR_HEIGHT, - item_w, - E_DAY_VIEW_BAR_HEIGHT); - gdk_draw_rectangle (drawable, gc, TRUE, - item_x, item_y + item_h, - item_w, E_DAY_VIEW_BAR_HEIGHT); - } -#endif - - /* Draw the reminder & recurrence icons, if needed. */ - num_icons = 0; - draw_reminder_icon = FALSE; - draw_recurrence_icon = FALSE; - icon_x = item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_ICON_X_PAD; - icon_y = item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT - + E_DAY_VIEW_ICON_Y_PAD; - comp = event->comp; - -#if 0 - if (ico->dalarm.enabled || ico->malarm.enabled - || ico->palarm.enabled || ico->aalarm.enabled) { - draw_reminder_icon = TRUE; - num_icons++; - } -#endif - - if (cal_component_has_rrules (comp) - || cal_component_has_rdates (comp)) { - draw_recurrence_icon = TRUE; - num_icons++; - } - - if (num_icons != 0) { - if (item_h >= (E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD) - * num_icons) { - icon_x_inc = 0; - icon_y_inc = E_DAY_VIEW_ICON_HEIGHT - + E_DAY_VIEW_ICON_Y_PAD; - } else { - icon_x_inc = E_DAY_VIEW_ICON_WIDTH - + E_DAY_VIEW_ICON_X_PAD; - icon_y_inc = 0; - } - - if (draw_reminder_icon) { - max_icon_w = item_x + item_w - icon_x - - E_DAY_VIEW_EVENT_BORDER_WIDTH; - max_icon_h = item_y + item_h - icon_y - - E_DAY_VIEW_EVENT_BORDER_HEIGHT; - - gdk_gc_set_clip_origin (gc, icon_x, icon_y); - gdk_gc_set_clip_mask (gc, day_view->reminder_mask); - gdk_draw_pixmap (drawable, gc, - day_view->reminder_icon, - 0, 0, icon_x, icon_y, - MIN (E_DAY_VIEW_ICON_WIDTH, - max_icon_w), - MIN (E_DAY_VIEW_ICON_HEIGHT, - max_icon_h)); - icon_x += icon_x_inc; - icon_y += icon_y_inc; - } - - if (draw_recurrence_icon) { - max_icon_w = item_x + item_w - icon_x - - E_DAY_VIEW_EVENT_BORDER_WIDTH; - max_icon_h = item_y + item_h - icon_y - - E_DAY_VIEW_EVENT_BORDER_HEIGHT; - - gdk_gc_set_clip_origin (gc, icon_x, icon_y); - gdk_gc_set_clip_mask (gc, day_view->recurrence_mask); - gdk_draw_pixmap (drawable, gc, - day_view->recurrence_icon, - 0, 0, icon_x, icon_y, - MIN (E_DAY_VIEW_ICON_WIDTH, - max_icon_w), - MIN (E_DAY_VIEW_ICON_HEIGHT, - max_icon_h)); - } - gdk_gc_set_clip_mask (gc, NULL); - } -} - - -/* This is supposed to return the nearest item to the point and the distance. - Since we are the only item we just return ourself and 0 for the distance. - This is needed so that we get button/motion events. */ -static double -e_day_view_main_item_point (GnomeCanvasItem *item, double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item) -{ - *actual_item = item; - return 0.0; -} - - -static gint -e_day_view_main_item_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EDayViewMainItem *dvtitem; - - dvtitem = E_DAY_VIEW_MAIN_ITEM (item); - - switch (event->type) { - case GDK_BUTTON_PRESS: - - case GDK_BUTTON_RELEASE: - - case GDK_MOTION_NOTIFY: - - default: - break; - } - - return FALSE; -} - - diff --git a/calendar/gui/e-day-view-main-item.h b/calendar/gui/e-day-view-main-item.h deleted file mode 100644 index d8305e594d..0000000000 --- a/calendar/gui/e-day-view-main-item.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_DAY_VIEW_MAIN_ITEM_H_ -#define _E_DAY_VIEW_MAIN_ITEM_H_ - -#include "e-day-view.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EDayViewMainItem - canvas item which displays most of the appointment - * data in the main Day/Work Week display. - */ - -#define E_DAY_VIEW_MAIN_ITEM(obj) (GTK_CHECK_CAST((obj), \ - e_day_view_main_item_get_type (), EDayViewMainItem)) -#define E_DAY_VIEW_MAIN_ITEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k),\ - e_day_view_main_item_get_type ())) -#define E_IS_DAY_VIEW_MAIN_ITEM(o) (GTK_CHECK_TYPE((o), \ - e_day_view_main_item_get_type ())) - -typedef struct { - GnomeCanvasItem canvas_item; - - /* The parent EDayView widget. */ - EDayView *day_view; -} EDayViewMainItem; - -typedef struct { - GnomeCanvasItemClass parent_class; - -} EDayViewMainItemClass; - - -GtkType e_day_view_main_item_get_type (void); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_DAY_VIEW_MAIN_ITEM_H_ */ diff --git a/calendar/gui/e-day-view-time-item.c b/calendar/gui/e-day-view-time-item.c deleted file mode 100644 index c2dcf55727..0000000000 --- a/calendar/gui/e-day-view-time-item.c +++ /dev/null @@ -1,531 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EDayViewTimeItem - canvas item which displays the times down the left of - * the EDayView. - */ - -#include -#include -#include -#include "e-day-view-time-item.h" -#include "../../e-util/e-gui-utils.h" - - -/* The spacing between items in the time column. GRID_X_PAD is the space down - either side of the column, i.e. outside the main horizontal grid lines. - HOUR_L_PAD & HOUR_R_PAD are the spaces on the left & right side of the - big hour number (this is inside the horizontal grid lines). - MIN_X_PAD is the spacing either side of the minute number. The smaller - horizontal grid lines match with this. - 60_MIN_X_PAD is the space either side of the HH:MM display used when - we are displaying 60 mins per row (inside the main grid lines). */ -#define E_DVTMI_TIME_GRID_X_PAD 4 -#define E_DVTMI_HOUR_L_PAD 4 -#define E_DVTMI_HOUR_R_PAD 2 -#define E_DVTMI_MIN_X_PAD 2 -#define E_DVTMI_60_MIN_X_PAD 4 - - -static void e_day_view_time_item_class_init (EDayViewTimeItemClass *class); -static void e_day_view_time_item_init (EDayViewTimeItem *dvtmitem); -static void e_day_view_time_item_set_arg (GtkObject *o, - GtkArg *arg, - guint arg_id); - -static void e_day_view_time_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, int flags); -static void e_day_view_time_item_draw (GnomeCanvasItem *item, - GdkDrawable *drawable, - int x, int y, - int width, int height); -static double e_day_view_time_item_point (GnomeCanvasItem *item, - double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item); -static gint e_day_view_time_item_event (GnomeCanvasItem *item, - GdkEvent *event); -static void e_day_view_time_item_show_popup_menu (EDayViewTimeItem *dvtmitem, - GdkEvent *event); -static void e_day_view_time_item_on_set_divisions (GtkWidget *item, - EDayViewTimeItem *dvtmitem); -static void e_day_view_time_item_on_button_press (EDayViewTimeItem *dvtmitem, - GdkEvent *event); -static void e_day_view_time_item_on_button_release (EDayViewTimeItem *dvtmitem, - GdkEvent *event); -static void e_day_view_time_item_on_motion_notify (EDayViewTimeItem *dvtmitem, - GdkEvent *event); -static gint e_day_view_time_item_convert_position_to_row (EDayViewTimeItem *dvtmitem, - gint y); - - -static GnomeCanvasItemClass *parent_class; - - -/* The arguments we take */ -enum { - ARG_0, - ARG_DAY_VIEW -}; - - -GtkType -e_day_view_time_item_get_type (void) -{ - static GtkType e_day_view_time_item_type = 0; - - if (!e_day_view_time_item_type) { - GtkTypeInfo e_day_view_time_item_info = { - "EDayViewTimeItem", - sizeof (EDayViewTimeItem), - sizeof (EDayViewTimeItemClass), - (GtkClassInitFunc) e_day_view_time_item_class_init, - (GtkObjectInitFunc) e_day_view_time_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - e_day_view_time_item_type = gtk_type_unique (gnome_canvas_item_get_type (), &e_day_view_time_item_info); - } - - return e_day_view_time_item_type; -} - - -static void -e_day_view_time_item_class_init (EDayViewTimeItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - parent_class = gtk_type_class (gnome_canvas_item_get_type()); - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - gtk_object_add_arg_type ("EDayViewTimeItem::day_view", - GTK_TYPE_POINTER, GTK_ARG_WRITABLE, - ARG_DAY_VIEW); - - object_class->set_arg = e_day_view_time_item_set_arg; - - /* GnomeCanvasItem method overrides */ - item_class->update = e_day_view_time_item_update; - item_class->draw = e_day_view_time_item_draw; - item_class->point = e_day_view_time_item_point; - item_class->event = e_day_view_time_item_event; -} - - -static void -e_day_view_time_item_init (EDayViewTimeItem *dvtmitem) -{ - dvtmitem->dragging_selection = FALSE; -} - - -static void -e_day_view_time_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EDayViewTimeItem *dvtmitem; - - item = GNOME_CANVAS_ITEM (o); - dvtmitem = E_DAY_VIEW_TIME_ITEM (o); - - switch (arg_id){ - case ARG_DAY_VIEW: - dvtmitem->day_view = GTK_VALUE_POINTER (*arg); - break; - } -} - - -static void -e_day_view_time_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags) -{ - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update) - (* GNOME_CANVAS_ITEM_CLASS (parent_class)->update) (item, affine, clip_path, flags); - - /* The item covers the entire canvas area. */ - item->x1 = 0; - item->y1 = 0; - item->x2 = INT_MAX; - item->y2 = INT_MAX; -} - - -/* Returns the minimum width needed for the column, by adding up all the - maximum widths of the strings. The string widths are all calculated in - the style_set handlers of EDayView and EDayViewTimeCanvas. */ -gint -e_day_view_time_item_get_column_width (EDayViewTimeItem *dvtmitem) -{ - EDayView *day_view; - - day_view = dvtmitem->day_view; - g_return_val_if_fail (day_view != NULL, 0); - - /* Calculate the width of each time column. */ - if (day_view->mins_per_row == 60) { - dvtmitem->column_width = day_view->max_small_hour_width - + day_view->colon_width - + day_view->max_minute_width - + E_DVTMI_60_MIN_X_PAD * 2 - + E_DVTMI_TIME_GRID_X_PAD * 2; - } else { - dvtmitem->column_width = day_view->max_large_hour_width - + day_view->max_minute_width - + E_DVTMI_MIN_X_PAD * 2 - + E_DVTMI_HOUR_L_PAD - + E_DVTMI_HOUR_R_PAD - + E_DVTMI_TIME_GRID_X_PAD * 2; - } - - return dvtmitem->column_width; -} - - -/* - * DRAWING ROUTINES - functions to paint the canvas item. - */ - -static void -e_day_view_time_item_draw (GnomeCanvasItem *canvas_item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height) -{ - EDayView *day_view; - EDayViewTimeItem *dvtmitem; - gint time_hour_x1, time_hour_x2, time_min_x1; - gint hour, minute, hour_y, min_y, hour_r, min_r, start_y; - gint row, row_y, min_width, hour_width; - GtkStyle *style; - GdkFont *small_font, *large_font; - GdkGC *fg_gc, *dark_gc; - gchar buffer[16]; - - dvtmitem = E_DAY_VIEW_TIME_ITEM (canvas_item); - day_view = dvtmitem->day_view; - g_return_if_fail (day_view != NULL); - - style = GTK_WIDGET (day_view)->style; - small_font = style->font; - large_font = day_view->large_font; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - dark_gc = style->dark_gc[GTK_STATE_NORMAL]; - - /* Step through each row, drawing the horizontal grid lines for each - day column and the times. */ - time_hour_x1 = E_DVTMI_TIME_GRID_X_PAD - x; - time_hour_x2 = dvtmitem->column_width - E_DVTMI_TIME_GRID_X_PAD - x; - if (day_view->mins_per_row == 60) { - min_r = time_hour_x2 - E_DVTMI_60_MIN_X_PAD; - } else { - time_min_x1 = time_hour_x2 - E_DVTMI_MIN_X_PAD * 2 - - day_view->max_minute_width; - hour_r = time_min_x1 - E_DVTMI_HOUR_R_PAD; - min_r = time_hour_x2 - E_DVTMI_MIN_X_PAD; - } - - hour = day_view->first_hour_shown; - hour_y = large_font->ascent + 2; /* FIXME */ - minute = day_view->first_minute_shown; - min_y = small_font->ascent + 2; /* FIXME */ - start_y = 0 - MAX (day_view->row_height, hour_y + large_font->descent); - for (row = 0, row_y = 0 - y; - row < day_view->rows && row_y < height; - row++, row_y += day_view->row_height) { - if (row_y > start_y) { - /* Draw the times down the left if needed. */ - if (min_r <= 0) - continue; - - if (day_view->mins_per_row == 60) { - gdk_draw_line (drawable, dark_gc, - time_hour_x1, row_y, - time_hour_x2, row_y); - sprintf (buffer, "%02i:%02i", hour, minute); - min_width = day_view->small_hour_widths[hour] + day_view->minute_widths[minute / 5] + day_view->colon_width; - gdk_draw_string (drawable, small_font, fg_gc, - min_r - min_width, - row_y + min_y, buffer); - } else { - if (minute == 0) { - gdk_draw_line (drawable, dark_gc, - time_hour_x1, row_y, - time_hour_x2, row_y); - sprintf (buffer, "%02i", hour); - hour_width = day_view->large_hour_widths[hour]; - gdk_draw_string (drawable, large_font, - fg_gc, - hour_r - hour_width, - row_y + hour_y, - buffer); - } else { - gdk_draw_line (drawable, dark_gc, - time_min_x1, row_y, - time_hour_x2, row_y); - } - - if (day_view->mins_per_row != 30 - || minute != 30) { - sprintf (buffer, "%02i", minute); - min_width = day_view->minute_widths[minute / 5]; - gdk_draw_string (drawable, small_font, - fg_gc, - min_r - min_width, - row_y + min_y, - buffer); - } - } - } - - minute += day_view->mins_per_row; - if (minute >= 60) { - hour++; - minute -= 60; - } - } -} - - -static double -e_day_view_time_item_point (GnomeCanvasItem *item, double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item) -{ - *actual_item = item; - return 0.0; -} - - -static gint -e_day_view_time_item_event (GnomeCanvasItem *item, - GdkEvent *event) -{ - EDayViewTimeItem *dvtmitem; - - dvtmitem = E_DAY_VIEW_TIME_ITEM (item); - - switch (event->type) { - case GDK_BUTTON_PRESS: - if (event->button.button == 1) { - e_day_view_time_item_on_button_press (dvtmitem, event); - } else if (event->button.button == 3) { - e_day_view_time_item_show_popup_menu (dvtmitem, event); - return TRUE; - } - break; - case GDK_BUTTON_RELEASE: - if (event->button.button == 1) - e_day_view_time_item_on_button_release (dvtmitem, - event); - break; - - case GDK_MOTION_NOTIFY: - e_day_view_time_item_on_motion_notify (dvtmitem, event); - break; - - default: - break; - } - - return FALSE; -} - - -static void -e_day_view_time_item_show_popup_menu (EDayViewTimeItem *dvtmitem, - GdkEvent *event) -{ - static gint divisions[] = { 60, 30, 15, 10, 5 }; - EDayView *day_view; - gint num_divisions = sizeof (divisions) / sizeof (divisions[0]); - GtkWidget *menu, *item; - gchar buffer[256]; - GSList *group = NULL; - gint current_divisions, i; - - day_view = dvtmitem->day_view; - g_return_if_fail (day_view != NULL); - - current_divisions = e_day_view_get_mins_per_row (day_view); - - menu = gtk_menu_new (); - - /* Make sure the menu is destroyed when it disappears. */ - e_auto_kill_popup_menu_on_hide (GTK_MENU (menu)); - - for (i = 0; i < num_divisions; i++) { - sprintf (buffer, _("%02i minute divisions"), divisions[i]); - item = gtk_radio_menu_item_new_with_label (group, buffer); - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item)); - gtk_widget_show (item); - gtk_menu_append (GTK_MENU (menu), item); - - if (current_divisions == divisions[i]) - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), TRUE); - - gtk_object_set_data (GTK_OBJECT (item), "divisions", - GINT_TO_POINTER (divisions[i])); - - gtk_signal_connect (GTK_OBJECT (item), "toggled", - e_day_view_time_item_on_set_divisions, - dvtmitem); - } - - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - event->button.button, event->button.time); -} - - -static void -e_day_view_time_item_on_set_divisions (GtkWidget *item, - EDayViewTimeItem *dvtmitem) -{ - EDayView *day_view; - gint divisions; - - day_view = dvtmitem->day_view; - g_return_if_fail (day_view != NULL); - - if (!GTK_CHECK_MENU_ITEM (item)->active) - return; - - divisions = GPOINTER_TO_INT (gtk_object_get_data (GTK_OBJECT (item), - "divisions")); - e_day_view_set_mins_per_row (day_view, divisions); -} - - -static void -e_day_view_time_item_on_button_press (EDayViewTimeItem *dvtmitem, - GdkEvent *event) -{ - EDayView *day_view; - GnomeCanvas *canvas; - gint row; - - day_view = dvtmitem->day_view; - g_return_if_fail (day_view != NULL); - - canvas = GNOME_CANVAS_ITEM (dvtmitem)->canvas; - - row = e_day_view_time_item_convert_position_to_row (dvtmitem, - event->button.y); - - if (row == -1) - return; - - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - if (gdk_pointer_grab (GTK_LAYOUT (canvas)->bin_window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - FALSE, NULL, event->button.time) == 0) { - e_day_view_start_selection (day_view, -1, row); - dvtmitem->dragging_selection = TRUE; - } -} - - -static void -e_day_view_time_item_on_button_release (EDayViewTimeItem *dvtmitem, - GdkEvent *event) -{ - EDayView *day_view; - - day_view = dvtmitem->day_view; - g_return_if_fail (day_view != NULL); - - if (dvtmitem->dragging_selection) { - gdk_pointer_ungrab (event->button.time); - e_day_view_finish_selection (day_view); - e_day_view_stop_auto_scroll (day_view); - } - - dvtmitem->dragging_selection = FALSE; -} - - -static void -e_day_view_time_item_on_motion_notify (EDayViewTimeItem *dvtmitem, - GdkEvent *event) -{ - EDayView *day_view; - GnomeCanvas *canvas; - gdouble window_y; - gint y, row; - - if (!dvtmitem->dragging_selection) - return; - - day_view = dvtmitem->day_view; - g_return_if_fail (day_view != NULL); - - canvas = GNOME_CANVAS_ITEM (dvtmitem)->canvas; - - y = event->motion.y; - row = e_day_view_time_item_convert_position_to_row (dvtmitem, y); - - if (row != -1) { - gnome_canvas_world_to_window (canvas, 0, event->motion.y, - NULL, &window_y); - e_day_view_update_selection (day_view, -1, row); - e_day_view_check_auto_scroll (day_view, -1, (gint) window_y); - } -} - - -/* Returns the row corresponding to the y position, or -1. */ -static gint -e_day_view_time_item_convert_position_to_row (EDayViewTimeItem *dvtmitem, - gint y) -{ - EDayView *day_view; - gint row; - - day_view = dvtmitem->day_view; - g_return_val_if_fail (day_view != NULL, -1); - - if (y < 0) - return -1; - - row = y / day_view->row_height; - if (row >= day_view->rows) - return -1; - - return row; -} diff --git a/calendar/gui/e-day-view-time-item.h b/calendar/gui/e-day-view-time-item.h deleted file mode 100644 index 8b20fe999e..0000000000 --- a/calendar/gui/e-day-view-time-item.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_DAY_VIEW_TIME_ITEM_H_ -#define _E_DAY_VIEW_TIME_ITEM_H_ - -#include "e-day-view.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EDayViewTimeItem - canvas item which displays the times down the left of - * the EDayView. - */ - -#define E_DAY_VIEW_TIME_ITEM(obj) (GTK_CHECK_CAST((obj), \ - e_day_view_time_item_get_type (), EDayViewTimeItem)) -#define E_DAY_VIEW_TIME_ITEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k),\ - e_day_view_time_item_get_type ())) -#define E_IS_DAY_VIEW_TIME_ITEM(o) (GTK_CHECK_TYPE((o), \ - e_day_view_time_item_get_type ())) - -typedef struct { - GnomeCanvasItem canvas_item; - - /* The parent EDayView widget. */ - EDayView *day_view; - - /* The width of the time column. */ - gint column_width; - - /* TRUE if we are currently dragging the selection times. */ - gboolean dragging_selection; -} EDayViewTimeItem; - -typedef struct { - GnomeCanvasItemClass parent_class; - -} EDayViewTimeItemClass; - - -GtkType e_day_view_time_item_get_type (void); - - -gint e_day_view_time_item_get_column_width (EDayViewTimeItem *dvtmitem); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_DAY_VIEW_TIME_ITEM_H_ */ diff --git a/calendar/gui/e-day-view-top-item.c b/calendar/gui/e-day-view-top-item.c deleted file mode 100644 index 88e30885ca..0000000000 --- a/calendar/gui/e-day-view-top-item.c +++ /dev/null @@ -1,586 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EDayViewTopItem - displays the top part of the Day/Work Week calendar view. - */ - -#include -#include "e-day-view-top-item.h" - -static void e_day_view_top_item_class_init (EDayViewTopItemClass *class); -static void e_day_view_top_item_init (EDayViewTopItem *dvtitem); - -static void e_day_view_top_item_set_arg (GtkObject *o, - GtkArg *arg, - guint arg_id); -static void e_day_view_top_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags); -static void e_day_view_top_item_draw (GnomeCanvasItem *item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height); -static void e_day_view_top_item_draw_long_event (EDayViewTopItem *dvtitem, - gint event_num, - GdkDrawable *drawable, - int x, - int y, - int width, - int height); -static void e_day_view_top_item_draw_triangle (EDayViewTopItem *dvtitem, - GdkDrawable *drawable, - gint x, - gint y, - gint w, - gint h); -static double e_day_view_top_item_point (GnomeCanvasItem *item, - double x, - double y, - int cx, - int cy, - GnomeCanvasItem **actual_item); -static gint e_day_view_top_item_event (GnomeCanvasItem *item, - GdkEvent *event); - - -static GnomeCanvasItemClass *parent_class; - -/* The arguments we take */ -enum { - ARG_0, - ARG_DAY_VIEW -}; - - -GtkType -e_day_view_top_item_get_type (void) -{ - static GtkType e_day_view_top_item_type = 0; - - if (!e_day_view_top_item_type) { - GtkTypeInfo e_day_view_top_item_info = { - "EDayViewTopItem", - sizeof (EDayViewTopItem), - sizeof (EDayViewTopItemClass), - (GtkClassInitFunc) e_day_view_top_item_class_init, - (GtkObjectInitFunc) e_day_view_top_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - e_day_view_top_item_type = gtk_type_unique (gnome_canvas_item_get_type (), &e_day_view_top_item_info); - } - - return e_day_view_top_item_type; -} - - -static void -e_day_view_top_item_class_init (EDayViewTopItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - parent_class = gtk_type_class (gnome_canvas_item_get_type()); - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - gtk_object_add_arg_type ("EDayViewTopItem::day_view", - GTK_TYPE_POINTER, GTK_ARG_WRITABLE, - ARG_DAY_VIEW); - - object_class->set_arg = e_day_view_top_item_set_arg; - - /* GnomeCanvasItem method overrides */ - item_class->update = e_day_view_top_item_update; - item_class->draw = e_day_view_top_item_draw; - item_class->point = e_day_view_top_item_point; - item_class->event = e_day_view_top_item_event; -} - - -static void -e_day_view_top_item_init (EDayViewTopItem *dvtitem) -{ - dvtitem->day_view = NULL; -} - - -static void -e_day_view_top_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EDayViewTopItem *dvtitem; - - item = GNOME_CANVAS_ITEM (o); - dvtitem = E_DAY_VIEW_TOP_ITEM (o); - - switch (arg_id){ - case ARG_DAY_VIEW: - dvtitem->day_view = GTK_VALUE_POINTER (*arg); - break; - } -} - - -static void -e_day_view_top_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags) -{ - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update) - (* GNOME_CANVAS_ITEM_CLASS (parent_class)->update) (item, affine, clip_path, flags); - - /* The item covers the entire canvas area. */ - item->x1 = 0; - item->y1 = 0; - item->x2 = INT_MAX; - item->y2 = INT_MAX; -} - - -/* - * DRAWING ROUTINES - functions to paint the canvas item. - */ - -static void -e_day_view_top_item_draw (GnomeCanvasItem *canvas_item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height) -{ - EDayViewTopItem *dvtitem; - EDayView *day_view; - GtkStyle *style; - GdkGC *fg_gc, *bg_gc, *light_gc, *dark_gc; - gchar buffer[128]; - GdkRectangle clip_rect; - GdkFont *font; - gint canvas_width, canvas_height, left_edge, day, date_width, date_x; - gint item_height, event_num; - struct tm *day_start; - -#if 0 - g_print ("In e_day_view_top_item_draw %i,%i %ix%i\n", - x, y, width, height); -#endif - dvtitem = E_DAY_VIEW_TOP_ITEM (canvas_item); - day_view = dvtitem->day_view; - g_return_if_fail (day_view != NULL); - - style = GTK_WIDGET (day_view)->style; - font = style->font; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - bg_gc = style->bg_gc[GTK_STATE_NORMAL]; - light_gc = style->light_gc[GTK_STATE_NORMAL]; - dark_gc = style->dark_gc[GTK_STATE_NORMAL]; - canvas_width = GTK_WIDGET (canvas_item->canvas)->allocation.width; - canvas_height = GTK_WIDGET (canvas_item->canvas)->allocation.height; - left_edge = 0; - item_height = day_view->top_row_height - E_DAY_VIEW_TOP_CANVAS_Y_GAP; - - /* Clear the entire background. */ - gdk_draw_rectangle (drawable, dark_gc, TRUE, - left_edge - x, 0, - canvas_width - left_edge, height); - - /* Draw the shadow around the dates. */ - gdk_draw_line (drawable, light_gc, - left_edge + 1 - x, 1 - y, - canvas_width - 2 - x, 1 - y); - gdk_draw_line (drawable, light_gc, - left_edge + 1 - x, 2 - y, - left_edge + 1 - x, item_height - 1 - y); - - /* Draw the background for the dates. */ - gdk_draw_rectangle (drawable, bg_gc, TRUE, - left_edge + 2 - x, 2 - y, - canvas_width - left_edge - 3, - item_height - 3); - - /* Draw the selection background. */ - if (GTK_WIDGET_HAS_FOCUS (day_view) - && day_view->selection_start_day != -1) { - gint start_col, end_col, rect_x, rect_y, rect_w, rect_h; - - start_col = day_view->selection_start_day; - end_col = day_view->selection_end_day; - - if (end_col > start_col - || day_view->selection_start_row == -1 - || day_view->selection_end_row == -1) { - rect_x = day_view->day_offsets[start_col]; - rect_y = item_height; - rect_w = day_view->day_offsets[end_col + 1] - rect_x; - rect_h = canvas_height - 1 - rect_y; - - gdk_draw_rectangle (drawable, style->white_gc, TRUE, - rect_x - x, rect_y - y, - rect_w, rect_h); - } - } - - /* Draw the date. Set a clipping rectangle so we don't draw over the - next day. */ - for (day = 0; day < day_view->days_shown; day++) { - day_start = localtime (&day_view->day_starts[day]); - - if (day_view->date_format == E_DAY_VIEW_DATE_FULL) - strftime (buffer, 128, "%d %B", day_start); - else if (day_view->date_format == E_DAY_VIEW_DATE_ABBREVIATED) - strftime (buffer, 128, "%d %b", day_start); - else - strftime (buffer, 128, "%d", day_start); - - clip_rect.x = day_view->day_offsets[day] - x; - clip_rect.y = 2 - y; - clip_rect.width = day_view->day_widths[day]; - clip_rect.height = item_height - 2; - gdk_gc_set_clip_rectangle (fg_gc, &clip_rect); - - date_width = gdk_string_width (font, buffer); - date_x = day_view->day_offsets[day] + (day_view->day_widths[day] - date_width) / 2; - gdk_draw_string (drawable, font, fg_gc, - date_x - x, 3 + font->ascent - y, buffer); - - gdk_gc_set_clip_rectangle (fg_gc, NULL); - - /* Draw the lines down the left and right of the date cols. */ - if (day != 0) { - gdk_draw_line (drawable, light_gc, - day_view->day_offsets[day] - x, - 4 - y, - day_view->day_offsets[day] - x, - item_height - 4 - y); - - gdk_draw_line (drawable, dark_gc, - day_view->day_offsets[day] - 1 - x, - 4 - y, - day_view->day_offsets[day] - 1 - x, - item_height - 4 - y); - } - - /* Draw the lines between each column. */ - if (day != 0) { - gdk_draw_line (drawable, style->black_gc, - day_view->day_offsets[day] - x, - item_height - y, - day_view->day_offsets[day] - x, - canvas_height - y); - } - } - - /* Draw the long events. */ - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - e_day_view_top_item_draw_long_event (dvtitem, event_num, - drawable, - x, y, width, height); - } -} - - -/* This draws one event in the top canvas. */ -static void -e_day_view_top_item_draw_long_event (EDayViewTopItem *dvtitem, - gint event_num, - GdkDrawable *drawable, - int x, - int y, - int width, - int height) -{ - EDayView *day_view; - EDayViewEvent *event; - GtkStyle *style; - GdkGC *gc, *fg_gc, *bg_gc; - GdkFont *font; - gint start_day, end_day; - gint item_x, item_y, item_w, item_h; - gint text_x, icon_x, icon_y, icon_x_inc; - CalComponent *comp; - gchar buffer[16]; - gint hour, minute, offset, time_width, time_x, min_end_time_x; - gboolean draw_start_triangle, draw_end_triangle; - GdkRectangle clip_rect; - - day_view = dvtitem->day_view; - - /* If the event is currently being dragged, don't draw it. It will - be drawn in the special drag items. */ - if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT - && day_view->drag_event_num == event_num) - return; - - if (!e_day_view_get_long_event_position (day_view, event_num, - &start_day, &end_day, - &item_x, &item_y, - &item_w, &item_h)) - return; - - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - style = GTK_WIDGET (day_view)->style; - font = style->font; - gc = day_view->main_gc; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - bg_gc = style->bg_gc[GTK_STATE_NORMAL]; - comp = event->comp; - - /* Draw the lines across the top & bottom of the entire event. */ - gdk_draw_line (drawable, fg_gc, - item_x - x, item_y - y, - item_x + item_w - 1 - x, item_y - y); - gdk_draw_line (drawable, fg_gc, - item_x - x, item_y + item_h - 1 - y, - item_x + item_w - 1 - x, item_y + item_h - 1 - y); - - /* Fill it in. */ - gdk_draw_rectangle (drawable, bg_gc, TRUE, - item_x - x, item_y + 1 - y, - item_w, item_h - 2); - - /* When resizing we don't draw the triangles.*/ - draw_start_triangle = TRUE; - draw_end_triangle = TRUE; - if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE - && day_view->resize_event_day == E_DAY_VIEW_LONG_EVENT - && day_view->resize_event_num == event_num) { - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_LEFT_EDGE) - draw_start_triangle = FALSE; - - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_RIGHT_EDGE) - draw_end_triangle = FALSE; - } - - /* If the event starts before the first day shown, draw a triangle, - else just draw a vertical line down the left. */ - if (draw_start_triangle - && event->start < day_view->day_starts[start_day]) { - e_day_view_top_item_draw_triangle (dvtitem, drawable, - item_x - x, item_y - y, - -E_DAY_VIEW_BAR_WIDTH, - item_h); - } else { - gdk_draw_line (drawable, fg_gc, - item_x - x, item_y - y, - item_x - x, item_y + item_h - 1 - y); - } - - /* Similar for the event end. */ - if (draw_end_triangle - && event->end > day_view->day_starts[end_day + 1]) { - e_day_view_top_item_draw_triangle (dvtitem, drawable, - item_x + item_w - 1 - x, - item_y - y, - E_DAY_VIEW_BAR_WIDTH, - item_h); - } else { - gdk_draw_line (drawable, fg_gc, - item_x + item_w - 1 - x, - item_y - y, - item_x + item_w - 1 - x, - item_y + item_h - 1 - y); - } - - /* If we are editing the event we don't show the icons or the start - & end times. */ - if (day_view->editing_event_day == E_DAY_VIEW_LONG_EVENT - && day_view->editing_event_num == event_num) - return; - - /* Determine the position of the label, so we know where to place the - icons. Note that since the top canvas never scrolls we don't need - to take the scroll offset into account. It will always be 0. */ - text_x = event->canvas_item->x1; - - /* Draw the icons. */ - icon_x_inc = E_DAY_VIEW_ICON_WIDTH + E_DAY_VIEW_ICON_X_PAD; - icon_x = text_x - icon_x_inc - x; - icon_y = item_y + 1 + E_DAY_VIEW_ICON_Y_PAD - y; - - if (cal_component_has_rrules (comp) - || cal_component_has_rdates (comp)) { - gdk_gc_set_clip_origin (gc, icon_x, icon_y); - gdk_gc_set_clip_mask (gc, day_view->recurrence_mask); - gdk_draw_pixmap (drawable, gc, - day_view->recurrence_icon, - 0, 0, icon_x, icon_y, - E_DAY_VIEW_ICON_WIDTH, - E_DAY_VIEW_ICON_HEIGHT); - icon_x -= icon_x_inc; - } - -#if 0 - if (ico->dalarm.enabled || ico->malarm.enabled - || ico->palarm.enabled || ico->aalarm.enabled) { - gdk_gc_set_clip_origin (gc, icon_x, icon_y); - gdk_gc_set_clip_mask (gc, day_view->reminder_mask); - gdk_draw_pixmap (drawable, gc, - day_view->reminder_icon, - 0, 0, icon_x, icon_y, - E_DAY_VIEW_ICON_WIDTH, - E_DAY_VIEW_ICON_HEIGHT); - icon_x -= icon_x_inc; - } - gdk_gc_set_clip_mask (gc, NULL); -#endif - - /* Draw the start & end times, if necessary. - Note that GtkLabel adds 1 to the ascent so we must do that to be - level with it. */ - min_end_time_x = item_x + E_DAY_VIEW_LONG_EVENT_X_PAD - x; - - if (event->start > day_view->day_starts[start_day]) { - offset = day_view->first_hour_shown * 60 - + day_view->first_minute_shown + event->start_minute; - hour = offset / 60; - minute = offset % 60; - sprintf (buffer, "%02i:%02i", hour, minute); - - clip_rect.x = item_x - x; - clip_rect.y = item_y - y; - clip_rect.width = item_w - E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH; - clip_rect.height = item_h; - gdk_gc_set_clip_rectangle (fg_gc, &clip_rect); - - gdk_draw_string (drawable, font, fg_gc, - item_x + E_DAY_VIEW_LONG_EVENT_X_PAD - x, - item_y + E_DAY_VIEW_LONG_EVENT_Y_PAD + font->ascent + 1 - y, - buffer); - - gdk_gc_set_clip_rectangle (fg_gc, NULL); - - min_end_time_x += day_view->small_hour_widths[hour] + 2 - + day_view->max_minute_width + day_view->colon_width; - } - - if (event->end < day_view->day_starts[end_day + 1]) { - offset = day_view->first_hour_shown * 60 - + day_view->first_minute_shown - + event->end_minute; - hour = offset / 60; - minute = offset % 60; - time_width = day_view->small_hour_widths[hour] - + day_view->max_minute_width + day_view->colon_width; - time_x = item_x + item_w - E_DAY_VIEW_LONG_EVENT_X_PAD - time_width - E_DAY_VIEW_LONG_EVENT_TIME_X_PAD - x; - - if (time_x >= min_end_time_x) { - sprintf (buffer, "%02i:%02i", hour, minute); - gdk_draw_string (drawable, font, fg_gc, - time_x, - item_y + E_DAY_VIEW_LONG_EVENT_Y_PAD - + font->ascent + 1 - y, - buffer); - } - } -} - - -/* This draws a little triangle to indicate that an event extends past - the days visible on screen. */ -static void -e_day_view_top_item_draw_triangle (EDayViewTopItem *dvtitem, - GdkDrawable *drawable, - gint x, - gint y, - gint w, - gint h) -{ - EDayView *day_view; - GtkStyle *style; - GdkGC *fg_gc, *bg_gc; - GdkPoint points[3]; - gint c1, c2; - - day_view = dvtitem->day_view; - - style = GTK_WIDGET (day_view)->style; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - bg_gc = style->bg_gc[GTK_STATE_NORMAL]; - - points[0].x = x; - points[0].y = y; - points[1].x = x + w; - points[1].y = y + (h / 2) - 1; - points[2].x = x; - points[2].y = y + h - 1; - - /* If the height is odd we can use the same central point for both - lines. If it is even we use different end-points. */ - c1 = c2 = y + (h / 2); - if (h % 2 == 0) - c1--; - - gdk_draw_polygon (drawable, bg_gc, TRUE, points, 3); - gdk_draw_line (drawable, fg_gc, x, y, x + w, c1); - gdk_draw_line (drawable, fg_gc, x, y + h - 1, x + w, c2); -} - - -/* This is supposed to return the nearest item the the point and the distance. - Since we are the only item we just return ourself and 0 for the distance. - This is needed so that we get button/motion events. */ -static double -e_day_view_top_item_point (GnomeCanvasItem *item, double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item) -{ - *actual_item = item; - return 0.0; -} - - -static gint -e_day_view_top_item_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EDayViewTopItem *dvtitem; - - dvtitem = E_DAY_VIEW_TOP_ITEM (item); - - switch (event->type) { - case GDK_BUTTON_PRESS: - - case GDK_BUTTON_RELEASE: - - case GDK_MOTION_NOTIFY: - - default: - break; - } - - return FALSE; -} - - diff --git a/calendar/gui/e-day-view-top-item.h b/calendar/gui/e-day-view-top-item.h deleted file mode 100644 index 435ef12b58..0000000000 --- a/calendar/gui/e-day-view-top-item.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_DAY_VIEW_TOP_ITEM_H_ -#define _E_DAY_VIEW_TOP_ITEM_H_ - -#include "e-day-view.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EDayViewTopItem - displays the top part of the Day/Work Week calendar view. - */ - -#define E_DAY_VIEW_TOP_ITEM(obj) (GTK_CHECK_CAST((obj), \ - e_day_view_top_item_get_type (), EDayViewTopItem)) -#define E_DAY_VIEW_TOP_ITEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k),\ - e_day_view_top_item_get_type ())) -#define E_IS_DAY_VIEW_TOP_ITEM(o) (GTK_CHECK_TYPE((o), \ - e_day_view_top_item_get_type ())) - -typedef struct { - GnomeCanvasItem canvas_item; - - /* The parent EDayView widget. */ - EDayView *day_view; -} EDayViewTopItem; - -typedef struct { - GnomeCanvasItemClass parent_class; - -} EDayViewTopItemClass; - - -GtkType e_day_view_top_item_get_type (void); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_DAY_VIEW_TOP_ITEM_H_ */ diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c deleted file mode 100644 index c14da5f58f..0000000000 --- a/calendar/gui/e-day-view.c +++ /dev/null @@ -1,5716 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EDayView - displays the Day & Work-Week views of the calendar. - */ - -#include -#include -#include -#include -#include -#include -#include "e-day-view.h" -#include "e-day-view-time-item.h" -#include "e-day-view-top-item.h" -#include "e-day-view-main-item.h" -#include "calendar-commands.h" -#include "popup-menu.h" -#include "../e-util/e-canvas.h" -#include "../widgets/e-text/e-text.h" -#include "e-util/e-canvas-utils.h" - -/* Images */ -#include "bell.xpm" -#include "recur.xpm" - -/* The minimum amount of space wanted on each side of the date string. */ -#define E_DAY_VIEW_DATE_X_PAD 4 - -#define E_DAY_VIEW_LARGE_FONT \ - "-adobe-utopia-regular-r-normal-*-*-240-*-*-p-*-iso8859-*" -#define E_DAY_VIEW_LARGE_FONT_FALLBACK \ - "-adobe-helvetica-bold-r-normal-*-*-240-*-*-p-*-iso8859-*" - -/* The offset from the top/bottom of the canvas before auto-scrolling starts.*/ -#define E_DAY_VIEW_AUTO_SCROLL_OFFSET 16 - -/* The time between each auto-scroll, in milliseconds. */ -#define E_DAY_VIEW_AUTO_SCROLL_TIMEOUT 50 - -/* The number of timeouts we skip before we start scrolling. */ -#define E_DAY_VIEW_AUTO_SCROLL_DELAY 5 - -/* The number of pixels the mouse has to be moved with the button down before - we start a drag. */ -#define E_DAY_VIEW_DRAG_START_OFFSET 4 - -/* Drag and Drop stuff. */ -enum { - TARGET_CALENDAR_EVENT -}; -static GtkTargetEntry target_table[] = { - { "application/x-e-calendar-event", 0, TARGET_CALENDAR_EVENT } -}; -static guint n_targets = sizeof(target_table) / sizeof(target_table[0]); - -static void e_day_view_class_init (EDayViewClass *class); -static void e_day_view_init (EDayView *day_view); -static void e_day_view_destroy (GtkObject *object); -static void e_day_view_realize (GtkWidget *widget); -static void e_day_view_unrealize (GtkWidget *widget); -static void e_day_view_style_set (GtkWidget *widget, - GtkStyle *previous_style); -static void e_day_view_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static gboolean e_day_view_update_scroll_regions (EDayView *day_view); -static gint e_day_view_focus_in (GtkWidget *widget, - GdkEventFocus *event); -static gint e_day_view_focus_out (GtkWidget *widget, - GdkEventFocus *event); -static gint e_day_view_key_press (GtkWidget *widget, - GdkEventKey *event); -static void e_day_view_cursor_key_up_shifted (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_down_shifted (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_left_shifted (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_right_shifted (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_up (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_down (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_left (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_cursor_key_right (EDayView *day_view, - GdkEventKey *event); -static void e_day_view_ensure_rows_visible (EDayView *day_view, - gint start_row, - gint end_row); - -static gboolean e_day_view_check_if_new_event_fits (EDayView *day_view); - -static void e_day_view_on_canvas_realized (GtkWidget *widget, - EDayView *day_view); - -static gboolean e_day_view_on_top_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view); -static gboolean e_day_view_on_top_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view); -static gboolean e_day_view_on_top_canvas_motion (GtkWidget *widget, - GdkEventMotion *event, - EDayView *day_view); - -static gboolean e_day_view_on_main_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view); -static gboolean e_day_view_on_main_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view); - -static gboolean e_day_view_on_time_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view); - -static void e_day_view_update_calendar_selection_time (EDayView *day_view); -static gboolean e_day_view_on_main_canvas_motion (GtkWidget *widget, - GdkEventMotion *event, - EDayView *day_view); -static gboolean e_day_view_convert_event_coords (EDayView *day_view, - GdkEvent *event, - GdkWindow *window, - gint *x_return, - gint *y_return); -static void e_day_view_update_long_event_resize (EDayView *day_view, - gint day); -static void e_day_view_update_resize (EDayView *day_view, - gint row); -static void e_day_view_finish_long_event_resize (EDayView *day_view); -static void e_day_view_finish_resize (EDayView *day_view); -static void e_day_view_abort_resize (EDayView *day_view, - guint32 time); - - -static gboolean e_day_view_on_long_event_button_press (EDayView *day_view, - gint event_num, - GdkEventButton *event, - EDayViewPosition pos, - gint event_x, - gint event_y); -static gboolean e_day_view_on_event_button_press (EDayView *day_view, - gint day, - gint event_num, - GdkEventButton *event, - EDayViewPosition pos, - gint event_x, - gint event_y); -static void e_day_view_on_long_event_click (EDayView *day_view, - gint event_num, - GdkEventButton *bevent, - EDayViewPosition pos, - gint event_x, - gint event_y); -static void e_day_view_on_event_click (EDayView *day_view, - gint day, - gint event_num, - GdkEventButton *event, - EDayViewPosition pos, - gint event_x, - gint event_y); -static void e_day_view_on_event_double_click (EDayView *day_view, - gint day, - gint event_num); -static void e_day_view_on_event_right_click (EDayView *day_view, - GdkEventButton *bevent, - gint day, - gint event_num); - -static void e_day_view_recalc_day_starts (EDayView *day_view, - time_t start_time); -static void e_day_view_recalc_num_rows (EDayView *day_view); - -static EDayViewPosition e_day_view_convert_position_in_top_canvas (EDayView *day_view, - gint x, - gint y, - gint *day_return, - gint *event_num_return); -static EDayViewPosition e_day_view_convert_position_in_main_canvas (EDayView *day_view, - gint x, - gint y, - gint *day_return, - gint *row_return, - gint *event_num_return); -static gboolean e_day_view_find_event_from_item (EDayView *day_view, - GnomeCanvasItem *item, - gint *day_return, - gint *event_num_return); -static gboolean e_day_view_find_event_from_uid (EDayView *day_view, - const gchar *uid, - gint *day_return, - gint *event_num_return); - -typedef gboolean (* EDayViewForeachEventCallback) (EDayView *day_view, - gint day, - gint event_num, - gpointer data); - -static void e_day_view_foreach_event_with_uid (EDayView *day_view, - const gchar *uid, - EDayViewForeachEventCallback callback, - gpointer data); - -static void e_day_view_reload_events (EDayView *day_view); -static void e_day_view_free_events (EDayView *day_view); -static void e_day_view_free_event_array (EDayView *day_view, - GArray *array); -static int e_day_view_add_event (CalComponent *comp, - time_t start, - time_t end, - gpointer data); -static void e_day_view_update_event_label (EDayView *day_view, - gint day, - gint event_num); -static void e_day_view_update_long_event_label (EDayView *day_view, - gint event_num); - -static void e_day_view_layout_long_events (EDayView *day_view); -static void e_day_view_layout_long_event (EDayView *day_view, - EDayViewEvent *event, - guint8 *grid); -static void e_day_view_reshape_long_events (EDayView *day_view); -static void e_day_view_reshape_long_event (EDayView *day_view, - gint event_num); -static void e_day_view_layout_day_events (EDayView *day_view, - gint day); -static void e_day_view_layout_day_event (EDayView *day_view, - gint day, - EDayViewEvent *event, - guint8 *grid, - guint16 *group_starts); -static void e_day_view_expand_day_event (EDayView *day_view, - gint day, - EDayViewEvent *event, - guint8 *grid); -static void e_day_view_recalc_cols_per_row (EDayView *day_view, - gint day, - guint16 *group_starts); -static void e_day_view_reshape_day_events (EDayView *day_view, - gint day); -static void e_day_view_reshape_day_event (EDayView *day_view, - gint day, - gint event_num); -static void e_day_view_reshape_main_canvas_resize_bars (EDayView *day_view); -static void e_day_view_reshape_resize_long_event_rect_item (EDayView *day_view); -static void e_day_view_reshape_resize_rect_item (EDayView *day_view); - -static void e_day_view_ensure_events_sorted (EDayView *day_view); -static gint e_day_view_event_sort_func (const void *arg1, - const void *arg2); - -static void e_day_view_start_editing_event (EDayView *day_view, - gint day, - gint event_num, - gchar *initial_text); -static void e_day_view_stop_editing_event (EDayView *day_view); -static gboolean e_day_view_on_text_item_event (GnomeCanvasItem *item, - GdkEvent *event, - EDayView *day_view); -static void e_day_view_on_editing_started (EDayView *day_view, - GnomeCanvasItem *item); -static void e_day_view_on_editing_stopped (EDayView *day_view, - GnomeCanvasItem *item); - -static time_t e_day_view_convert_grid_position_to_time (EDayView *day_view, - gint col, - gint row); -static gboolean e_day_view_convert_time_to_grid_position (EDayView *day_view, - time_t time, - gint *col, - gint *row); - -static void e_day_view_start_auto_scroll (EDayView *day_view, - gboolean scroll_up); -static gboolean e_day_view_auto_scroll_handler (gpointer data); - -static void e_day_view_on_new_appointment (GtkWidget *widget, - gpointer data); -static void e_day_view_on_edit_appointment (GtkWidget *widget, - gpointer data); -static void e_day_view_on_delete_occurrence (GtkWidget *widget, - gpointer data); -static void e_day_view_on_delete_appointment (GtkWidget *widget, - gpointer data); -static void e_day_view_on_unrecur_appointment (GtkWidget *widget, - gpointer data); -static EDayViewEvent* e_day_view_get_popup_menu_event (EDayView *day_view); - -static gint e_day_view_on_top_canvas_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - EDayView *day_view); -static void e_day_view_update_top_canvas_drag (EDayView *day_view, - gint day); -static void e_day_view_reshape_top_canvas_drag_item (EDayView *day_view); -static gint e_day_view_on_main_canvas_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - EDayView *day_view); -static void e_day_view_reshape_main_canvas_drag_item (EDayView *day_view); -static void e_day_view_update_main_canvas_drag (EDayView *day_view, - gint row, - gint day); -static void e_day_view_on_top_canvas_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time, - EDayView *day_view); -static void e_day_view_on_main_canvas_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time, - EDayView *day_view); -static void e_day_view_on_drag_begin (GtkWidget *widget, - GdkDragContext *context, - EDayView *day_view); -static void e_day_view_on_drag_end (GtkWidget *widget, - GdkDragContext *context, - EDayView *day_view); -static void e_day_view_on_drag_data_get (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - EDayView *day_view); -static void e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *data, - guint info, - guint time, - EDayView *day_view); -static void e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *data, - guint info, - guint time, - EDayView *day_view); -static gboolean e_day_view_update_event_cb (EDayView *day_view, - gint day, - gint event_num, - gpointer data); -static gboolean e_day_view_remove_event_cb (EDayView *day_view, - gint day, - gint event_num, - gpointer data); -static void e_day_view_normalize_selection (EDayView *day_view); - - -static GtkTableClass *parent_class; - - -GtkType -e_day_view_get_type (void) -{ - static GtkType e_day_view_type = 0; - - if (!e_day_view_type){ - GtkTypeInfo e_day_view_info = { - "EDayView", - sizeof (EDayView), - sizeof (EDayViewClass), - (GtkClassInitFunc) e_day_view_class_init, - (GtkObjectInitFunc) e_day_view_init, - NULL, /* reserved 1 */ - NULL, /* reserved 2 */ - (GtkClassInitFunc) NULL - }; - - parent_class = gtk_type_class (GTK_TYPE_TABLE); - e_day_view_type = gtk_type_unique (GTK_TYPE_TABLE, - &e_day_view_info); - } - - return e_day_view_type; -} - - -static void -e_day_view_class_init (EDayViewClass *class) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GtkObjectClass *) class; - widget_class = (GtkWidgetClass *) class; - - /* Method override */ - object_class->destroy = e_day_view_destroy; - - widget_class->realize = e_day_view_realize; - widget_class->unrealize = e_day_view_unrealize; - widget_class->style_set = e_day_view_style_set; - widget_class->size_allocate = e_day_view_size_allocate; - widget_class->focus_in_event = e_day_view_focus_in; - widget_class->focus_out_event = e_day_view_focus_out; - widget_class->key_press_event = e_day_view_key_press; -} - - -static void -e_day_view_init (EDayView *day_view) -{ - GdkColormap *colormap; - gboolean success[E_DAY_VIEW_COLOR_LAST]; - gint day, nfailed; - GnomeCanvasGroup *canvas_group; - - GTK_WIDGET_SET_FLAGS (day_view, GTK_CAN_FOCUS); - - colormap = gtk_widget_get_colormap (GTK_WIDGET (day_view)); - - day_view->calendar = NULL; - - day_view->long_events = g_array_new (FALSE, FALSE, - sizeof (EDayViewEvent)); - day_view->long_events_sorted = TRUE; - day_view->long_events_need_layout = FALSE; - day_view->long_events_need_reshape = FALSE; - - for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) { - day_view->events[day] = g_array_new (FALSE, FALSE, - sizeof (EDayViewEvent)); - day_view->events_sorted[day] = TRUE; - day_view->need_layout[day] = FALSE; - day_view->need_reshape[day] = FALSE; - } - - /* These indicate that the times haven't been set. */ - day_view->lower = 0; - day_view->upper = 0; - - /* FIXME: Initialize day_starts. */ - day_view->days_shown = 1; - - day_view->mins_per_row = 30; - day_view->date_format = E_DAY_VIEW_DATE_FULL; - day_view->rows_in_top_display = 0; - - /* Note that these don't work yet. It would need a few fixes to the - way event->start_minute and event->end_minute are used, and there - may be problems with events that go outside the visible times. */ - day_view->first_hour_shown = 0; - day_view->first_minute_shown = 0; - day_view->last_hour_shown = 24; - day_view->last_minute_shown = 0; - - day_view->main_gc = NULL; - e_day_view_recalc_num_rows (day_view); - - day_view->work_day_start_hour = 9; - day_view->work_day_start_minute = 0; - day_view->work_day_end_hour = 17; - day_view->work_day_end_minute = 0; - day_view->scroll_to_work_day = TRUE; - - day_view->editing_event_day = -1; - day_view->editing_event_num = -1; - day_view->editing_new_event = FALSE; - - day_view->resize_bars_event_day = -1; - day_view->resize_bars_event_num = -1; - - day_view->selection_start_row = -1; - day_view->selection_start_day = -1; - day_view->selection_end_row = -1; - day_view->selection_end_day = -1; - day_view->selection_is_being_dragged = FALSE; - day_view->selection_drag_pos = E_DAY_VIEW_DRAG_END; - day_view->selection_in_top_canvas = FALSE; - - day_view->resize_drag_pos = E_DAY_VIEW_POS_NONE; - - day_view->pressed_event_day = -1; - - day_view->drag_event_day = -1; - day_view->drag_last_day = -1; - - day_view->auto_scroll_timeout_id = 0; - - /* Create the large font. */ - day_view->large_font = gdk_font_load (E_DAY_VIEW_LARGE_FONT); - if (!day_view->large_font) - day_view->large_font = gdk_font_load (E_DAY_VIEW_LARGE_FONT_FALLBACK); - if (!day_view->large_font) - g_warning ("Couldn't load font"); - - - /* Allocate the colors. */ -#if 1 - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING].red = 247 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING].green = 247 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING].blue = 244 * 257; - - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING].red = 216 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING].green = 216 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING].blue = 214 * 257; -#else - - /* FG: MistyRose1, LightPink3 | RosyBrown | MistyRose3. */ - - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING].red = 255 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING].green = 228 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_WORKING].blue = 225 * 257; - - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING].red = 238 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING].green = 162 * 257; - day_view->colors[E_DAY_VIEW_COLOR_BG_NOT_WORKING].blue = 173 * 257; -#endif - - day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR].red = 0; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR].green = 0; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR].blue = 65535; - - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].red = 65535; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].green = 65535; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND].blue = 65535; - - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER].red = 0; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER].green = 0; - day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER].blue = 0; - - nfailed = gdk_colormap_alloc_colors (colormap, day_view->colors, - E_DAY_VIEW_COLOR_LAST, FALSE, - TRUE, success); - if (nfailed) - g_warning ("Failed to allocate all colors"); - - - - /* - * Top Canvas - */ - day_view->top_canvas = e_canvas_new (); - gtk_table_attach (GTK_TABLE (day_view), day_view->top_canvas, - 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - gtk_widget_show (day_view->top_canvas); - gtk_signal_connect_after (GTK_OBJECT (day_view->top_canvas), "button_press_event", - GTK_SIGNAL_FUNC (e_day_view_on_top_canvas_button_press), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->top_canvas), "button_release_event", - GTK_SIGNAL_FUNC (e_day_view_on_top_canvas_button_release), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->top_canvas), "motion_notify_event", - GTK_SIGNAL_FUNC (e_day_view_on_top_canvas_motion), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->top_canvas), - "drag_motion", - GTK_SIGNAL_FUNC (e_day_view_on_top_canvas_drag_motion), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->top_canvas), - "drag_leave", - GTK_SIGNAL_FUNC (e_day_view_on_top_canvas_drag_leave), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->top_canvas), - "drag_begin", - GTK_SIGNAL_FUNC (e_day_view_on_drag_begin), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->top_canvas), - "drag_end", - GTK_SIGNAL_FUNC (e_day_view_on_drag_end), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->top_canvas), - "drag_data_get", - GTK_SIGNAL_FUNC (e_day_view_on_drag_data_get), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->top_canvas), - "drag_data_received", - GTK_SIGNAL_FUNC (e_day_view_on_top_canvas_drag_data_received), - day_view); - - canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->top_canvas)->root); - - day_view->top_canvas_item = - gnome_canvas_item_new (canvas_group, - e_day_view_top_item_get_type (), - "EDayViewTopItem::day_view", day_view, - NULL); - - day_view->resize_long_event_rect_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type(), - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->resize_long_event_rect_item); - - day_view->drag_long_event_rect_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type (), - "width_pixels", 1, - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->drag_long_event_rect_item); - - day_view->drag_long_event_item = - gnome_canvas_item_new (canvas_group, - e_text_get_type (), - "anchor", GTK_ANCHOR_NW, - "line_wrap", TRUE, - "clip", TRUE, - "max_lines", 1, - "editable", TRUE, - NULL); - gnome_canvas_item_hide (day_view->drag_long_event_item); - - /* - * Main Canvas - */ - day_view->main_canvas = e_canvas_new (); - gtk_table_attach (GTK_TABLE (day_view), day_view->main_canvas, - 1, 2, 1, 2, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (day_view->main_canvas); - gtk_signal_connect (GTK_OBJECT (day_view->main_canvas), "realize", - GTK_SIGNAL_FUNC (e_day_view_on_canvas_realized), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->main_canvas), - "button_press_event", - GTK_SIGNAL_FUNC (e_day_view_on_main_canvas_button_press), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->main_canvas), - "button_release_event", - GTK_SIGNAL_FUNC (e_day_view_on_main_canvas_button_release), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->main_canvas), - "motion_notify_event", - GTK_SIGNAL_FUNC (e_day_view_on_main_canvas_motion), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->main_canvas), - "drag_motion", - GTK_SIGNAL_FUNC (e_day_view_on_main_canvas_drag_motion), - day_view); - gtk_signal_connect_after (GTK_OBJECT (day_view->main_canvas), - "drag_leave", - GTK_SIGNAL_FUNC (e_day_view_on_main_canvas_drag_leave), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->main_canvas), - "drag_begin", - GTK_SIGNAL_FUNC (e_day_view_on_drag_begin), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->main_canvas), - "drag_end", - GTK_SIGNAL_FUNC (e_day_view_on_drag_end), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->main_canvas), - "drag_data_get", - GTK_SIGNAL_FUNC (e_day_view_on_drag_data_get), - day_view); - gtk_signal_connect (GTK_OBJECT (day_view->main_canvas), - "drag_data_received", - GTK_SIGNAL_FUNC (e_day_view_on_main_canvas_drag_data_received), - day_view); - - canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->main_canvas)->root); - - day_view->main_canvas_item = - gnome_canvas_item_new (canvas_group, - e_day_view_main_item_get_type (), - "EDayViewMainItem::day_view", day_view, - NULL); - - day_view->resize_rect_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type(), - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->resize_rect_item); - - day_view->resize_bar_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type(), - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->resize_bar_item); - - day_view->main_canvas_top_resize_bar_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type (), - "width_pixels", 1, - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - - day_view->main_canvas_bottom_resize_bar_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type (), - "width_pixels", 1, - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - - - day_view->drag_rect_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type (), - "width_pixels", 1, - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BACKGROUND], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->drag_rect_item); - - day_view->drag_bar_item = - gnome_canvas_item_new (canvas_group, - gnome_canvas_rect_get_type (), - "width_pixels", 1, - "fill_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR], - "outline_color_gdk", &day_view->colors[E_DAY_VIEW_COLOR_EVENT_BORDER], - NULL); - gnome_canvas_item_hide (day_view->drag_bar_item); - - day_view->drag_item = - gnome_canvas_item_new (canvas_group, - e_text_get_type (), - "anchor", GTK_ANCHOR_NW, - "line_wrap", TRUE, - "clip", TRUE, - "editable", TRUE, - NULL); - gnome_canvas_item_hide (day_view->drag_item); - - - /* - * Times Canvas - */ - day_view->time_canvas = e_canvas_new (); - gtk_layout_set_vadjustment (GTK_LAYOUT (day_view->time_canvas), - GTK_LAYOUT (day_view->main_canvas)->vadjustment); - gtk_table_attach (GTK_TABLE (day_view), day_view->time_canvas, - 0, 1, 1, 2, - GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (day_view->time_canvas); - gtk_signal_connect_after (GTK_OBJECT (day_view->time_canvas), - "button_press_event", - GTK_SIGNAL_FUNC (e_day_view_on_time_canvas_button_press), - day_view); - - canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->time_canvas)->root); - - day_view->time_canvas_item = - gnome_canvas_item_new (canvas_group, - e_day_view_time_item_get_type (), - "EDayViewTimeItem::day_view", day_view, - NULL); - - - /* - * Scrollbar. - */ - day_view->vscrollbar = gtk_vscrollbar_new (GTK_LAYOUT (day_view->main_canvas)->vadjustment); - gtk_table_attach (GTK_TABLE (day_view), day_view->vscrollbar, - 2, 3, 1, 2, 0, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (day_view->vscrollbar); - - - /* Create the pixmaps. */ - day_view->reminder_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &day_view->reminder_mask, NULL, bell_xpm); - day_view->recurrence_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &day_view->recurrence_mask, NULL, recur_xpm); - - - /* Create the cursors. */ - day_view->normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); - day_view->move_cursor = gdk_cursor_new (GDK_FLEUR); - day_view->resize_width_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW); - day_view->resize_height_cursor = gdk_cursor_new (GDK_SB_V_DOUBLE_ARROW); - day_view->last_cursor_set_in_top_canvas = NULL; - day_view->last_cursor_set_in_main_canvas = NULL; - - /* Set up the drop sites. */ - gtk_drag_dest_set (day_view->top_canvas, - GTK_DEST_DEFAULT_ALL, - target_table, n_targets, - GDK_ACTION_COPY | GDK_ACTION_MOVE); - gtk_drag_dest_set (day_view->main_canvas, - GTK_DEST_DEFAULT_ALL, - target_table, n_targets, - GDK_ACTION_COPY | GDK_ACTION_MOVE); -} - - -/* Turn off the background of the canvas windows. This reduces flicker - considerably when scrolling. (Why isn't it in GnomeCanvas?). */ -static void -e_day_view_on_canvas_realized (GtkWidget *widget, - EDayView *day_view) -{ - gdk_window_set_back_pixmap (GTK_LAYOUT (widget)->bin_window, - NULL, FALSE); -} - - -/** - * e_day_view_new: - * @Returns: a new #EDayView. - * - * Creates a new #EDayView. - **/ -GtkWidget * -e_day_view_new (void) -{ - GtkWidget *day_view; - - day_view = GTK_WIDGET (gtk_type_new (e_day_view_get_type ())); - - return day_view; -} - - -static void -e_day_view_destroy (GtkObject *object) -{ - EDayView *day_view; - gint day; - - day_view = E_DAY_VIEW (object); - - e_day_view_stop_auto_scroll (day_view); - - if (day_view->large_font) - gdk_font_unref (day_view->large_font); - - gdk_cursor_destroy (day_view->normal_cursor); - gdk_cursor_destroy (day_view->move_cursor); - gdk_cursor_destroy (day_view->resize_width_cursor); - gdk_cursor_destroy (day_view->resize_height_cursor); - - e_day_view_free_events (day_view); - g_array_free (day_view->long_events, TRUE); - for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) - g_array_free (day_view->events[day], TRUE); - - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - - -static void -e_day_view_realize (GtkWidget *widget) -{ - EDayView *day_view; - - if (GTK_WIDGET_CLASS (parent_class)->realize) - (*GTK_WIDGET_CLASS (parent_class)->realize)(widget); - - day_view = E_DAY_VIEW (widget); - day_view->main_gc = gdk_gc_new (widget->window); -} - - -static void -e_day_view_unrealize (GtkWidget *widget) -{ - EDayView *day_view; - - day_view = E_DAY_VIEW (widget); - - gdk_gc_unref (day_view->main_gc); - day_view->main_gc = NULL; - - if (GTK_WIDGET_CLASS (parent_class)->unrealize) - (*GTK_WIDGET_CLASS (parent_class)->unrealize)(widget); -} - - -static void -e_day_view_style_set (GtkWidget *widget, - GtkStyle *previous_style) -{ - EDayView *day_view; - GdkFont *font; - gint top_rows, top_canvas_height; - gint month, max_month_width, max_abbr_month_width, number_width; - gint hour, max_large_hour_width, month_width; - gint minute, max_minute_width, i; - GDate date; - gchar buffer[128]; - gint times_width; - - if (GTK_WIDGET_CLASS (parent_class)->style_set) - (*GTK_WIDGET_CLASS (parent_class)->style_set)(widget, previous_style); - - day_view = E_DAY_VIEW (widget); - font = widget->style->font; - - /* Recalculate the height of each row based on the font size. */ - day_view->row_height = font->ascent + font->descent + E_DAY_VIEW_EVENT_BORDER_HEIGHT * 2 + E_DAY_VIEW_EVENT_Y_PAD * 2 + 2 /* FIXME */; - day_view->row_height = MAX (day_view->row_height, E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD + 2); - GTK_LAYOUT (day_view->main_canvas)->vadjustment->step_increment = day_view->row_height; - - day_view->top_row_height = font->ascent + font->descent + E_DAY_VIEW_LONG_EVENT_BORDER_HEIGHT * 2 + E_DAY_VIEW_LONG_EVENT_Y_PAD * 2 + E_DAY_VIEW_TOP_CANVAS_Y_GAP; - day_view->top_row_height = MAX (day_view->top_row_height, E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD + 2 + E_DAY_VIEW_TOP_CANVAS_Y_GAP); - - /* Set the height of the top canvas based on the row height and the - number of rows needed (min 1 + 1 for the dates + 1 space for DnD).*/ - top_rows = MAX (1, day_view->rows_in_top_display); - top_canvas_height = (top_rows + 2) * day_view->top_row_height; - gtk_widget_set_usize (day_view->top_canvas, -1, top_canvas_height); - - /* Find the biggest full month name. */ - g_date_clear (&date, 1); - g_date_set_dmy (&date, 20, 1, 2000); - max_month_width = 0; - max_abbr_month_width = 0; - for (month = 1; month <= 12; month++) { - g_date_set_month (&date, month); - - g_date_strftime (buffer, 128, "%B", &date); - month_width = gdk_string_width (font, buffer); - max_month_width = MAX (max_month_width, month_width); - - g_date_strftime (buffer, 128, "%b", &date); - month_width = gdk_string_width (font, buffer); - max_abbr_month_width = MAX (max_abbr_month_width, month_width); - } - number_width = gdk_string_width (font, "31 "); - day_view->long_format_width = number_width + max_month_width - + E_DAY_VIEW_DATE_X_PAD; - day_view->abbreviated_format_width = number_width - + max_abbr_month_width + E_DAY_VIEW_DATE_X_PAD; - - /* Calculate the widths of all the time strings necessary. */ - day_view->max_small_hour_width = 0; - max_large_hour_width = 0; - for (hour = 0; hour < 24; hour++) { - sprintf (buffer, "%02i", hour); - day_view->small_hour_widths[hour] = gdk_string_width (font, buffer); - day_view->large_hour_widths[hour] = gdk_string_width (day_view->large_font, buffer); - day_view->max_small_hour_width = MAX (day_view->max_small_hour_width, day_view->small_hour_widths[hour]); - max_large_hour_width = MAX (max_large_hour_width, day_view->large_hour_widths[hour]); - } - day_view->max_large_hour_width = max_large_hour_width; - - max_minute_width = 0; - for (minute = 0, i = 0; minute < 60; minute += 5, i++) { - sprintf (buffer, "%02i", minute); - day_view->minute_widths[i] = gdk_string_width (font, buffer); - max_minute_width = MAX (max_minute_width, day_view->minute_widths[i]); - } - day_view->max_minute_width = max_minute_width; - day_view->colon_width = gdk_string_width (font, ":"); - - /* Calculate the width of the time column. */ - times_width = e_day_view_time_item_get_column_width (E_DAY_VIEW_TIME_ITEM (day_view->time_canvas_item)); - gtk_widget_set_usize (day_view->time_canvas, times_width, -1); -} - - -/* This recalculates the sizes of each column. */ -static void -e_day_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation) -{ - EDayView *day_view; - gfloat width, offset; - gint col, day, scroll_y; - gboolean need_reshape; - gdouble old_x2, old_y2, new_x2, new_y2; - -#if 0 - g_print ("In e_day_view_size_allocate\n"); -#endif - day_view = E_DAY_VIEW (widget); - - (*GTK_WIDGET_CLASS (parent_class)->size_allocate) (widget, allocation); - - /* Calculate the column sizes, using floating point so that pixels - get divided evenly. Note that we use one more element than the - number of columns, to make it easy to get the column widths. */ - width = day_view->main_canvas->allocation.width; - width /= day_view->days_shown; - offset = 0; - for (col = 0; col <= day_view->days_shown; col++) { - day_view->day_offsets[col] = floor (offset + 0.5); - offset += width; - } - - /* Calculate the days widths based on the offsets. */ - for (col = 0; col < day_view->days_shown; col++) { - day_view->day_widths[col] = day_view->day_offsets[col + 1] - day_view->day_offsets[col]; - } - - /* Determine which date format to use, based on the column widths. */ - if (day_view->day_widths[0] > day_view->long_format_width) - day_view->date_format = E_DAY_VIEW_DATE_FULL; - else if (day_view->day_widths[0] > day_view->abbreviated_format_width) - day_view->date_format = E_DAY_VIEW_DATE_ABBREVIATED; - else - day_view->date_format = E_DAY_VIEW_DATE_SHORT; - - /* Set the scroll region of the top canvas to its allocated size. */ - gnome_canvas_get_scroll_region (GNOME_CANVAS (day_view->top_canvas), - NULL, NULL, &old_x2, &old_y2); - new_x2 = day_view->top_canvas->allocation.width - 1; - new_y2 = day_view->top_canvas->allocation.height - 1; - if (old_x2 != new_x2 || old_y2 != new_y2) - gnome_canvas_set_scroll_region (GNOME_CANVAS (day_view->top_canvas), - 0, 0, new_x2, new_y2); - - need_reshape = e_day_view_update_scroll_regions (day_view); - - /* Scroll to the start of the working day, if this is the initial - allocation. */ - if (day_view->scroll_to_work_day) { - scroll_y = e_day_view_convert_time_to_position (day_view, day_view->work_day_start_hour, day_view->work_day_start_minute); - gnome_canvas_scroll_to (GNOME_CANVAS (day_view->main_canvas), - 0, scroll_y); - day_view->scroll_to_work_day = FALSE; - } - - /* Flag that we need to reshape the events. Note that changes in height - don't matter, since the rows are always the same height. */ - if (need_reshape) { - day_view->long_events_need_reshape = TRUE; - for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) - day_view->need_reshape[day] = TRUE; - - e_day_view_check_layout (day_view); - } -} - - -static gint -e_day_view_focus_in (GtkWidget *widget, GdkEventFocus *event) -{ - EDayView *day_view; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (E_IS_DAY_VIEW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - day_view = E_DAY_VIEW (widget); - - GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); - - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - - return FALSE; -} - - -static gint -e_day_view_focus_out (GtkWidget *widget, GdkEventFocus *event) -{ - EDayView *day_view; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (E_IS_DAY_VIEW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - day_view = E_DAY_VIEW (widget); - - GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); - - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - - return FALSE; -} - - -void -e_day_view_set_calendar (EDayView *day_view, - GnomeCalendar *calendar) -{ - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - - day_view->calendar = calendar; - - /* FIXME: free current events? */ -} - - -/* This reloads all calendar events. */ -void -e_day_view_update_all_events (EDayView *day_view) -{ - e_day_view_reload_events (day_view); -} - - -/* This is called when one event has been added or updated. */ -void -e_day_view_update_event (EDayView *day_view, - const gchar *uid) -{ - EDayViewEvent *event; - CalComponent *comp; - CalClientGetStatus status; - gint day, event_num; - - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - -#if 0 - /* FIXME: Just for testing. */ - chdir ("/home/damon/tmp"); - g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL); - - g_print ("In e_day_view_update_event day_view:%p uid:%s\n", - day_view, uid); -#endif - - /* If our calendar or time hasn't been set yet, just return. */ - if (!day_view->calendar - || (day_view->lower == 0 && day_view->upper == 0)) - return; - - /* Get the event from the server. */ - status = cal_client_get_object (day_view->calendar->client, uid, &comp); - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - /* Do nothing. */ - break; - case CAL_CLIENT_GET_SYNTAX_ERROR: - g_warning ("syntax error uid=%s\n", uid); - return; - case CAL_CLIENT_GET_NOT_FOUND: - g_warning ("obj not found uid=%s\n", uid); - return; - } - - /* We only care about events. */ - if (comp && cal_component_get_vtype (comp) == CAL_COMPONENT_EVENT) { - gtk_object_unref (GTK_OBJECT (comp)); - return; - } - - /* If the event already exists and the dates didn't change, we can - update the event fairly easily without changing the events arrays - or computing a new layout. */ - if (e_day_view_find_event_from_uid (day_view, uid, &day, &event_num)) { - if (day == E_DAY_VIEW_LONG_EVENT) - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - else - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); -#warning "FIX ME" - /* Do this the long way every time for now */ -#if 0 - if (ical_object_compare_dates (event->ico, ico)) { - g_print ("updated object's dates unchanged\n"); - e_day_view_foreach_event_with_uid (day_view, uid, e_day_view_update_event_cb, ico); - ical_object_unref (ico); - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - return; - } -#endif - /* The dates have changed, so we need to remove the - old occurrrences before adding the new ones. */ - g_print ("dates changed - removing occurrences\n"); - e_day_view_foreach_event_with_uid (day_view, uid, - e_day_view_remove_event_cb, - NULL); - } - - /* Add the occurrences of the event. */ - cal_recur_generate_instances (comp, day_view->lower, - day_view->upper, - e_day_view_add_event, - day_view); - gtk_object_unref (GTK_OBJECT (comp)); - - e_day_view_check_layout (day_view); - - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static gboolean -e_day_view_update_event_cb (EDayView *day_view, - gint day, - gint event_num, - gpointer data) -{ - EDayViewEvent *event; - CalComponent *comp; - - comp = data; -#if 0 - g_print ("In e_day_view_update_event_cb day:%i event_num:%i\n", - day, event_num); -#endif - if (day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - } else { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - } - - gtk_object_unref (GTK_OBJECT (event->comp)); - event->comp = comp; - gtk_object_ref (GTK_OBJECT (comp)); - - /* If we are editing an event which we have just created, we will get - an update_event callback from the server. But we need to ignore it - or we will lose the text the user has already typed in. */ - if (day_view->editing_new_event - && day_view->editing_event_day == day - && day_view->editing_event_num == event_num) { - return TRUE; - } - - if (day == E_DAY_VIEW_LONG_EVENT) { - e_day_view_update_long_event_label (day_view, event_num); - e_day_view_reshape_long_event (day_view, event_num); - } else { - e_day_view_update_event_label (day_view, day, event_num); - e_day_view_reshape_day_event (day_view, day, event_num); - } - return TRUE; -} - - -/* This calls a given function for each event instance that matches the given - uid. Note that it is safe for the callback to remove the event (since we - step backwards through the arrays). */ -static void -e_day_view_foreach_event_with_uid (EDayView *day_view, - const gchar *uid, - EDayViewForeachEventCallback callback, - gpointer data) -{ - EDayViewEvent *event; - gint day, event_num; - const char *u; - - for (day = 0; day < day_view->days_shown; day++) { - for (event_num = day_view->events[day]->len - 1; - event_num >= 0; - event_num--) { - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); - - cal_component_get_uid (event->comp, &u); - if (uid && !strcmp (uid, u)) { - if (!(*callback) (day_view, day, event_num, - data)) - return; - } - } - } - - for (event_num = day_view->long_events->len - 1; - event_num >= 0; - event_num--) { - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - - cal_component_get_uid (event->comp, &u); - if (u && !strcmp (uid, u)) { - if (!(*callback) (day_view, E_DAY_VIEW_LONG_EVENT, - event_num, data)) - return; - } - } -} - - -/* This removes all the events associated with the given uid. Note that for - recurring events there may be more than one. If any events are found and - removed we need to layout the events again. */ -void -e_day_view_remove_event (EDayView *day_view, - const gchar *uid) -{ - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - -#if 1 - g_print ("In e_day_view_remove_event day_view:%p uid:%s\n", - day_view, uid); -#endif - - e_day_view_foreach_event_with_uid (day_view, uid, - e_day_view_remove_event_cb, NULL); - - e_day_view_check_layout (day_view); - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static gboolean -e_day_view_remove_event_cb (EDayView *day_view, - gint day, - gint event_num, - gpointer data) -{ - EDayViewEvent *event; - -#if 1 - g_print ("In e_day_view_remove_event_cb day:%i event_num:%i\n", - day, event_num); -#endif - - if (day == E_DAY_VIEW_LONG_EVENT) - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - else - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); - - /* If we were editing this event, set editing_event_num to -1 so - on_editing_stopped doesn't try to update the event. */ - if (day_view->editing_event_day == day - && day_view->editing_event_num == event_num) - day_view->editing_event_day = -1; - - if (event->canvas_item) - gtk_object_destroy (GTK_OBJECT (event->canvas_item)); - gtk_object_unref (GTK_OBJECT (event->comp)); - - if (day == E_DAY_VIEW_LONG_EVENT) { - g_array_remove_index (day_view->long_events, event_num); - day_view->long_events_need_layout = TRUE; - } else { - g_array_remove_index (day_view->events[day], event_num); - day_view->need_layout[day] = TRUE; - } - return TRUE; -} - - -/* This updates the text shown for an event. If the event start or end do not - lie on a row boundary, the time is displayed before the summary. */ -static void -e_day_view_update_event_label (EDayView *day_view, - gint day, - gint event_num) -{ - EDayViewEvent *event; - gchar *text; - gboolean free_text = FALSE, editing_event = FALSE; - gint offset, start_minute, end_minute; - CalComponentText summary; - - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* If the event isn't visible just return. */ - if (!event->canvas_item) - return; - - cal_component_get_summary (event->comp, &summary); - text = summary.value ? summary.value : ""; - - if (day_view->editing_event_day == day - && day_view->editing_event_num == event_num) - editing_event = TRUE; - - if (!editing_event - && (event->start_minute % day_view->mins_per_row != 0 - || event->end_minute % day_view->mins_per_row != 0)) { - offset = day_view->first_hour_shown * 60 - + day_view->first_minute_shown; - start_minute = offset + event->start_minute; - end_minute = offset + event->end_minute; - text = g_strdup_printf ("%02i:%02i-%02i:%02i %s", - start_minute / 60, - start_minute % 60, - end_minute / 60, - end_minute % 60, - text); - free_text = TRUE; - } - - gnome_canvas_item_set (event->canvas_item, - "text", text, - NULL); - - if (free_text) - g_free (text); -} - - -static void -e_day_view_update_long_event_label (EDayView *day_view, - gint event_num) -{ - EDayViewEvent *event; - CalComponentText summary; - - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - /* If the event isn't visible just return. */ - if (!event->canvas_item) - return; - - cal_component_get_summary (event->comp, &summary); - gnome_canvas_item_set (event->canvas_item, - "text", summary.value ? summary.value : "", - NULL); -} - - -/* Finds the day and index of the event with the given canvas item. - If is is a long event, -1 is returned as the day. - Returns TRUE if the event was found. */ -static gboolean -e_day_view_find_event_from_item (EDayView *day_view, - GnomeCanvasItem *item, - gint *day_return, - gint *event_num_return) -{ - EDayViewEvent *event; - gint day, event_num; - - for (day = 0; day < day_view->days_shown; day++) { - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); - if (event->canvas_item == item) { - *day_return = day; - *event_num_return = event_num; - return TRUE; - } - } - } - - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - if (event->canvas_item == item) { - *day_return = E_DAY_VIEW_LONG_EVENT; - *event_num_return = event_num; - return TRUE; - } - } - - return FALSE; -} - - -/* Finds the day and index of the event with the given uid. - If is is a long event, E_DAY_VIEW_LONG_EVENT is returned as the day. - Returns TRUE if an event with the uid was found. - Note that for recurring events there may be several EDayViewEvents, one - for each instance, all with the same iCalObject and uid. So only use this - function if you know the event doesn't recur or you are just checking to - see if any events with the uid exist. */ -static gboolean -e_day_view_find_event_from_uid (EDayView *day_view, - const gchar *uid, - gint *day_return, - gint *event_num_return) -{ - EDayViewEvent *event; - gint day, event_num; - const char *u; - - for (day = 0; day < day_view->days_shown; day++) { - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); - - cal_component_get_uid (event->comp, &u); - if (u && !strcmp (uid, u)) { - *day_return = day; - *event_num_return = event_num; - return TRUE; - } - } - } - - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - - cal_component_get_uid (event->comp, &u); - if (u && !strcmp (uid, u)) { - *day_return = E_DAY_VIEW_LONG_EVENT; - *event_num_return = event_num; - return TRUE; - } - } - - return FALSE; -} - - -/* This sets the selected time range. The EDayView will show the day or week - corresponding to the start time. If the start_time & end_time are not equal - and are both visible in the view, then the selection is set to those times, - otherwise it is set to 1 hour from the start of the working day. */ -void -e_day_view_set_selected_time_range (EDayView *day_view, - time_t start_time, - time_t end_time) -{ - GDate date; - time_t lower; - gint start_row, start_col, end_row, end_col; - gboolean need_redraw = FALSE, start_in_grid, end_in_grid; - - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - - /* Calculate the first day that should be shown, based on start_time - and the days_shown setting. If we are showing 1 day it is just the - start of the day given by start_time, otherwise it is the previous - Monday. */ - if (day_view->days_shown == 1) - lower = time_day_begin (start_time); - else { - g_date_clear (&date, 1); - g_date_set_time (&date, start_time); - g_date_subtract_days (&date, g_date_weekday (&date) - 1); - lower = time_from_day (g_date_year (&date), - g_date_month (&date) - 1, - g_date_day (&date)); - } - - /* See if we need to change the days shown. */ - if (lower != day_view->lower) { - e_day_view_recalc_day_starts (day_view, lower); - e_day_view_reload_events (day_view); - need_redraw = TRUE; - } - - /* Set the selection. */ - start_in_grid = e_day_view_convert_time_to_grid_position (day_view, - start_time, - &start_col, - &start_row); - end_in_grid = e_day_view_convert_time_to_grid_position (day_view, - end_time - 60, - &end_col, - &end_row); - - /* If either of the times isn't in the grid, or the selection covers - an entire day, we set the selection to 1 row from the start of the - working day, in the day corresponding to the start time. */ - if (!start_in_grid || !end_in_grid - || (start_row == 0 && end_row == day_view->rows - 1)) { - end_col = start_col; - - start_row = e_day_view_convert_time_to_row (day_view, day_view->work_day_start_hour, day_view->work_day_start_minute); - start_row = CLAMP (start_row, 0, day_view->rows - 1); - end_row = start_row; - } - - if (start_row != day_view->selection_start_row - || start_col != day_view->selection_start_day) { - need_redraw = TRUE; - day_view->selection_in_top_canvas = FALSE; - day_view->selection_start_row = start_row; - day_view->selection_start_day = start_col; - } - - if (end_row != day_view->selection_end_row - || end_col != day_view->selection_end_day) { - need_redraw = TRUE; - day_view->selection_in_top_canvas = FALSE; - day_view->selection_end_row = end_row; - day_view->selection_end_day = end_col; - } - - if (need_redraw) { - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - } -} - - -/* Returns the selected time range. */ -void -e_day_view_get_selected_time_range (EDayView *day_view, - time_t *start_time, - time_t *end_time) -{ - gint start_col, start_row, end_col, end_row; - time_t start, end; - - start_col = day_view->selection_start_day; - start_row = day_view->selection_start_row; - end_col = day_view->selection_end_day; - end_row = day_view->selection_end_row; - - if (start_col == -1) { - start_col = 0; - start_row = 0; - end_col = 0; - end_row = 0; - } - - /* Check if the selection is only in the top canvas, in which case - we can simply use the day_starts array. */ - if (day_view->selection_in_top_canvas) { - start = day_view->day_starts[start_col]; - end = day_view->day_starts[end_col + 1]; - } else { - /* Convert the start col + row into a time. */ - start = e_day_view_convert_grid_position_to_time (day_view, start_col, start_row); - end = e_day_view_convert_grid_position_to_time (day_view, end_col, end_row + 1); - } - - if (start_time) - *start_time = start; - - if (end_time) - *end_time = end; -} - - -static void -e_day_view_recalc_day_starts (EDayView *day_view, - time_t start_time) -{ - gint day; - - day_view->day_starts[0] = start_time; - for (day = 1; day <= day_view->days_shown; day++) { - day_view->day_starts[day] = time_add_day (day_view->day_starts[day - 1], 1); - } - - day_view->lower = start_time; - day_view->upper = day_view->day_starts[day_view->days_shown]; -} - - -gint -e_day_view_get_days_shown (EDayView *day_view) -{ - g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1); - - return day_view->days_shown; -} - - -void -e_day_view_set_days_shown (EDayView *day_view, - gint days_shown) -{ - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - g_return_if_fail (days_shown >= 1); - g_return_if_fail (days_shown <= E_DAY_VIEW_MAX_DAYS); - - if (day_view->days_shown != days_shown) { - day_view->days_shown = days_shown; - - /* FIXME: Update everything. */ - } -} - - -gint -e_day_view_get_mins_per_row (EDayView *day_view) -{ - g_return_val_if_fail (E_IS_DAY_VIEW (day_view), -1); - - return day_view->mins_per_row; -} - - -void -e_day_view_set_mins_per_row (EDayView *day_view, - gint mins_per_row) -{ - gint day; - - g_return_if_fail (E_IS_DAY_VIEW (day_view)); - - if (mins_per_row != 5 && mins_per_row != 10 && mins_per_row != 15 - && mins_per_row != 30 && mins_per_row != 60) { - g_warning ("Invalid minutes per row setting"); - return; - } - - if (day_view->mins_per_row == mins_per_row) - return; - - day_view->mins_per_row = mins_per_row; - e_day_view_recalc_num_rows (day_view); - - /* If we aren't visible, we'll sort it out later. */ - if (!GTK_WIDGET_VISIBLE (day_view)) - return; - - for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) - day_view->need_layout[day] = TRUE; - - /* We must layout the events before updating the scroll region, since - that will result in a redraw which would crash otherwise. */ - e_day_view_check_layout (day_view); - gtk_widget_queue_draw (day_view->time_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - - e_day_view_update_scroll_regions (day_view); -} - - -static gboolean -e_day_view_update_scroll_regions (EDayView *day_view) -{ - gdouble old_x2, old_y2, new_x2, new_y2; - gboolean need_reshape = FALSE; - - /* Set the scroll region of the time canvas to its allocated width, - but with the height the same as the main canvas. */ - gnome_canvas_get_scroll_region (GNOME_CANVAS (day_view->time_canvas), - NULL, NULL, &old_x2, &old_y2); - new_x2 = day_view->time_canvas->allocation.width - 1; - new_y2 = MAX (day_view->rows * day_view->row_height, - day_view->main_canvas->allocation.height) - 1; - if (old_x2 != new_x2 || old_y2 != new_y2) - gnome_canvas_set_scroll_region (GNOME_CANVAS (day_view->time_canvas), - 0, 0, new_x2, new_y2); - - /* Set the scroll region of the main canvas to its allocated width, - but with the height depending on the number of rows needed. */ - gnome_canvas_get_scroll_region (GNOME_CANVAS (day_view->main_canvas), - NULL, NULL, &old_x2, &old_y2); - new_x2 = day_view->main_canvas->allocation.width - 1; - if (old_x2 != new_x2 || old_y2 != new_y2) { - need_reshape = TRUE; - gnome_canvas_set_scroll_region (GNOME_CANVAS (day_view->main_canvas), - 0, 0, new_x2, new_y2); - } - - return need_reshape; -} - - -/* This recalculates the number of rows to display, based on the time range - shown and the minutes per row. */ -static void -e_day_view_recalc_num_rows (EDayView *day_view) -{ - gint hours, minutes, total_minutes; - - hours = day_view->last_hour_shown - day_view->first_hour_shown; - /* This could be negative but it works out OK. */ - minutes = day_view->last_minute_shown - day_view->first_minute_shown; - total_minutes = hours * 60 + minutes; - day_view->rows = total_minutes / day_view->mins_per_row; -} - - -/* Converts an hour and minute to a row in the canvas. Note that if we aren't - showing all 24 hours of the day, the returned row may be negative or - greater than day_view->rows. */ -gint -e_day_view_convert_time_to_row (EDayView *day_view, - gint hour, - gint minute) -{ - gint total_minutes, start_minute, offset; - - total_minutes = hour * 60 + minute; - start_minute = day_view->first_hour_shown * 60 - + day_view->first_minute_shown; - offset = total_minutes - start_minute; - if (offset < 0) - return -1; - else - return offset / day_view->mins_per_row; -} - - -/* Converts an hour and minute to a y coordinate in the canvas. */ -gint -e_day_view_convert_time_to_position (EDayView *day_view, - gint hour, - gint minute) -{ - gint total_minutes, start_minute, offset; - - total_minutes = hour * 60 + minute; - start_minute = day_view->first_hour_shown * 60 - + day_view->first_minute_shown; - offset = total_minutes - start_minute; - - return offset * day_view->row_height / day_view->mins_per_row; -} - - -static gboolean -e_day_view_on_top_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view) -{ - gint event_x, event_y, scroll_x, scroll_y, day, event_num; - EDayViewPosition pos; - - /* Convert the coords to the main canvas window, or return if the - window is not found. */ - if (!e_day_view_convert_event_coords (day_view, (GdkEvent*) event, - GTK_LAYOUT (widget)->bin_window, - &event_x, &event_y)) - return FALSE; - - /* The top canvas doesn't scroll, but just in case. */ - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - event_x += scroll_x; - event_y += scroll_y; - - pos = e_day_view_convert_position_in_top_canvas (day_view, - event_x, event_y, - &day, &event_num); - - if (pos == E_DAY_VIEW_POS_OUTSIDE) - return FALSE; - - if (pos != E_DAY_VIEW_POS_NONE) - return e_day_view_on_long_event_button_press (day_view, - event_num, - event, pos, - event_x, - event_y); - - e_day_view_stop_editing_event (day_view); - - if (event->button == 1) { - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - if (gdk_pointer_grab (GTK_LAYOUT (widget)->bin_window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - FALSE, NULL, event->time) == 0) { - e_day_view_start_selection (day_view, day, -1); - } - } else if (event->button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - e_day_view_on_event_right_click (day_view, event, -1, -1); - } - - return TRUE; -} - - -static gboolean -e_day_view_convert_event_coords (EDayView *day_view, - GdkEvent *event, - GdkWindow *window, - gint *x_return, - gint *y_return) -{ - gint event_x, event_y, win_x, win_y; - GdkWindow *event_window;; - - /* Get the event window, x & y from the appropriate event struct. */ - switch (event->type) { - case GDK_BUTTON_PRESS: - case GDK_2BUTTON_PRESS: - case GDK_3BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - event_x = event->button.x; - event_y = event->button.y; - event_window = event->button.window; - break; - case GDK_MOTION_NOTIFY: - event_x = event->motion.x; - event_y = event->motion.y; - event_window = event->motion.window; - break; - default: - /* Shouldn't get here. */ - g_assert_not_reached (); - return FALSE; - } - - while (event_window && event_window != window - && event_window != GDK_ROOT_PARENT()) { - gdk_window_get_position (event_window, &win_x, &win_y); - event_x += win_x; - event_y += win_y; - event_window = gdk_window_get_parent (event_window); - } - - *x_return = event_x; - *y_return = event_y; - - if (event_window != window) - g_warning ("Couldn't find event window\n"); - - return (event_window == window) ? TRUE : FALSE; -} - - -static gboolean -e_day_view_on_main_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view) -{ - gint event_x, event_y, scroll_x, scroll_y, row, day, event_num; - EDayViewPosition pos; - - /* Handle scroll wheel events */ - if (event->button == 4 || event->button == 5) { - GtkAdjustment *adj = GTK_LAYOUT (day_view->main_canvas)->vadjustment; - gfloat new_value; - - new_value = adj->value + ((event->button == 4) ? - -adj->page_increment / 2: - adj->page_increment / 2); - new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size); - gtk_adjustment_set_value (adj, new_value); - - return TRUE; - } - - /* Convert the coords to the main canvas window, or return if the - window is not found. */ - if (!e_day_view_convert_event_coords (day_view, (GdkEvent*) event, - GTK_LAYOUT (widget)->bin_window, - &event_x, &event_y)) - return FALSE; - - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - event_x += scroll_x; - event_y += scroll_y; - - /* Find out where the mouse is. */ - pos = e_day_view_convert_position_in_main_canvas (day_view, - event_x, event_y, - &day, &row, - &event_num); - - if (pos == E_DAY_VIEW_POS_OUTSIDE) - return FALSE; - - if (pos != E_DAY_VIEW_POS_NONE) - return e_day_view_on_event_button_press (day_view, day, - event_num, event, pos, - event_x, event_y); - - e_day_view_stop_editing_event (day_view); - - /* Start the selection drag. */ - if (event->button == 1) { - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - if (gdk_pointer_grab (GTK_LAYOUT (widget)->bin_window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - FALSE, NULL, event->time) == 0) { - e_day_view_start_selection (day_view, day, row); - } - } else if (event->button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - e_day_view_on_event_right_click (day_view, event, -1, -1); - } - - return TRUE; -} - - -static gboolean -e_day_view_on_time_canvas_button_press (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view) -{ - /* Handle scroll wheel events */ - if (event->button == 4 || event->button == 5) { - GtkAdjustment *adj = GTK_LAYOUT (day_view->main_canvas)->vadjustment; - gfloat new_value; - - new_value = adj->value + ((event->button == 4) ? - -adj->page_increment / 2: - adj->page_increment / 2); - new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size); - gtk_adjustment_set_value (adj, new_value); - - return TRUE; - } - - return FALSE; -} - - -static gboolean -e_day_view_on_long_event_button_press (EDayView *day_view, - gint event_num, - GdkEventButton *event, - EDayViewPosition pos, - gint event_x, - gint event_y) -{ - if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) { - e_day_view_on_long_event_click (day_view, event_num, - event, pos, - event_x, event_y); - return TRUE; - } else if (event->type == GDK_2BUTTON_PRESS) { - e_day_view_on_event_double_click (day_view, -1, - event_num); - return TRUE; - } - } else if (event->button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - e_day_view_on_event_right_click (day_view, event, - E_DAY_VIEW_LONG_EVENT, - event_num); - return TRUE; - } - return FALSE; -} - - -static gboolean -e_day_view_on_event_button_press (EDayView *day_view, - gint day, - gint event_num, - GdkEventButton *event, - EDayViewPosition pos, - gint event_x, - gint event_y) -{ - if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) { - e_day_view_on_event_click (day_view, day, event_num, - event, pos, - event_x, event_y); - return TRUE; - } else if (event->type == GDK_2BUTTON_PRESS) { - e_day_view_on_event_double_click (day_view, day, - event_num); - return TRUE; - } - } else if (event->button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - e_day_view_on_event_right_click (day_view, event, - day, event_num); - return TRUE; - } - return FALSE; -} - - -static void -e_day_view_on_long_event_click (EDayView *day_view, - gint event_num, - GdkEventButton *bevent, - EDayViewPosition pos, - gint event_x, - gint event_y) -{ - EDayViewEvent *event; - gint start_day, end_day, day; - gint item_x, item_y, item_w, item_h; - - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - /* Ignore clicks on the EText while editing. */ - if (pos == E_DAY_VIEW_POS_EVENT - && E_TEXT (event->canvas_item)->editing) - return; - - if (!(cal_component_has_rrules (event->comp) - && cal_component_has_rdates (event->comp)) - && (pos == E_DAY_VIEW_POS_LEFT_EDGE - || pos == E_DAY_VIEW_POS_RIGHT_EDGE)) { - if (!e_day_view_find_long_event_days (day_view, event, - &start_day, &end_day)) - return; - - /* Grab the keyboard focus, so the event being edited is saved - and we can use the Escape key to abort the resize. */ - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - if (gdk_pointer_grab (GTK_LAYOUT (day_view->top_canvas)->bin_window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - FALSE, NULL, bevent->time) == 0) { - - day_view->resize_event_day = E_DAY_VIEW_LONG_EVENT; - day_view->resize_event_num = event_num; - day_view->resize_drag_pos = pos; - day_view->resize_start_row = start_day; - day_view->resize_end_row = end_day; - - /* Create the edit rect if necessary. */ - e_day_view_reshape_resize_long_event_rect_item (day_view); - - /* Make sure the text item is on top. */ - gnome_canvas_item_raise_to_top (day_view->resize_long_event_rect_item); - - /* Raise the event's item, above the rect as well. */ - gnome_canvas_item_raise_to_top (event->canvas_item); - } - } else if (e_day_view_get_long_event_position (day_view, event_num, - &start_day, &end_day, - &item_x, &item_y, - &item_w, &item_h)) { - /* Remember the item clicked and the mouse position, - so we can start a drag if the mouse moves. */ - day_view->pressed_event_day = E_DAY_VIEW_LONG_EVENT; - day_view->pressed_event_num = event_num; - - day_view->drag_event_x = event_x; - day_view->drag_event_y = event_y; - - e_day_view_convert_position_in_top_canvas (day_view, - event_x, event_y, - &day, NULL); - day_view->drag_event_offset = day - start_day; - } -} - - -static void -e_day_view_on_event_click (EDayView *day_view, - gint day, - gint event_num, - GdkEventButton *bevent, - EDayViewPosition pos, - gint event_x, - gint event_y) -{ - EDayViewEvent *event; - gint tmp_day, row, start_row; - - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* Ignore clicks on the EText while editing. */ - if (pos == E_DAY_VIEW_POS_EVENT - && E_TEXT (event->canvas_item)->editing) - return; - - if (!(cal_component_has_rrules (event->comp) - && cal_component_has_rdates (event->comp)) - && (pos == E_DAY_VIEW_POS_TOP_EDGE - || pos == E_DAY_VIEW_POS_BOTTOM_EDGE)) { - /* Grab the keyboard focus, so the event being edited is saved - and we can use the Escape key to abort the resize. */ - if (!GTK_WIDGET_HAS_FOCUS (day_view)) - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - if (gdk_pointer_grab (GTK_LAYOUT (day_view->main_canvas)->bin_window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - FALSE, NULL, bevent->time) == 0) { - - day_view->resize_event_day = day; - day_view->resize_event_num = event_num; - day_view->resize_drag_pos = pos; - day_view->resize_start_row = event->start_minute / day_view->mins_per_row; - day_view->resize_end_row = (event->end_minute - 1) / day_view->mins_per_row; - - day_view->resize_bars_event_day = day; - day_view->resize_bars_event_num = event_num; - - /* Create the edit rect if necessary. */ - e_day_view_reshape_resize_rect_item (day_view); - - e_day_view_reshape_main_canvas_resize_bars (day_view); - - /* Make sure the text item is on top. */ - gnome_canvas_item_raise_to_top (day_view->resize_rect_item); - gnome_canvas_item_raise_to_top (day_view->resize_bar_item); - - /* Raise the event's item, above the rect as well. */ - gnome_canvas_item_raise_to_top (event->canvas_item); - } - - } else { - /* Remember the item clicked and the mouse position, - so we can start a drag if the mouse moves. */ - day_view->pressed_event_day = day; - day_view->pressed_event_num = event_num; - - day_view->drag_event_x = event_x; - day_view->drag_event_y = event_y; - - e_day_view_convert_position_in_main_canvas (day_view, - event_x, event_y, - &tmp_day, &row, - NULL); - start_row = event->start_minute / day_view->mins_per_row; - day_view->drag_event_offset = row - start_row; - } -} - - -static void -e_day_view_reshape_resize_long_event_rect_item (EDayView *day_view) -{ - gint day, event_num, start_day, end_day; - gint item_x, item_y, item_w, item_h; - gdouble x1, y1, x2, y2; - - day = day_view->resize_event_day; - event_num = day_view->resize_event_num; - - /* If we're not resizing an event, or the event is not shown, - hide the resize bars. */ - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_NONE - || !e_day_view_get_long_event_position (day_view, event_num, - &start_day, &end_day, - &item_x, &item_y, - &item_w, &item_h)) { - gnome_canvas_item_hide (day_view->resize_long_event_rect_item); - return; - } - - x1 = item_x; - y1 = item_y; - x2 = item_x + item_w - 1; - y2 = item_y + item_h - 1; - - gnome_canvas_item_set (day_view->resize_long_event_rect_item, - "x1", x1, - "y1", y1, - "x2", x2, - "y2", y2, - NULL); - gnome_canvas_item_show (day_view->resize_long_event_rect_item); -} - - -static void -e_day_view_reshape_resize_rect_item (EDayView *day_view) -{ - gint day, event_num; - gint item_x, item_y, item_w, item_h; - gdouble x1, y1, x2, y2; - - day = day_view->resize_event_day; - event_num = day_view->resize_event_num; - - /* If we're not resizing an event, or the event is not shown, - hide the resize bars. */ - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_NONE - || !e_day_view_get_event_position (day_view, day, event_num, - &item_x, &item_y, - &item_w, &item_h)) { - gnome_canvas_item_hide (day_view->resize_rect_item); - return; - } - - x1 = item_x; - y1 = item_y; - x2 = item_x + item_w - 1; - y2 = item_y + item_h - 1; - - gnome_canvas_item_set (day_view->resize_rect_item, - "x1", x1 + E_DAY_VIEW_BAR_WIDTH - 1, - "y1", y1, - "x2", x2, - "y2", y2, - NULL); - gnome_canvas_item_show (day_view->resize_rect_item); - - gnome_canvas_item_set (day_view->resize_bar_item, - "x1", x1, - "y1", y1, - "x2", x1 + E_DAY_VIEW_BAR_WIDTH - 1, - "y2", y2, - NULL); - gnome_canvas_item_show (day_view->resize_bar_item); -} - - -static void -e_day_view_on_event_double_click (EDayView *day_view, - gint day, - gint event_num) -{ -#if 0 - g_print ("In e_day_view_on_event_double_click\n"); -#endif - -} - - -static void -e_day_view_on_event_right_click (EDayView *day_view, - GdkEventButton *bevent, - gint day, - gint event_num) -{ - EDayViewEvent *event; - int have_selection, not_being_edited, items, i; - struct menu_item *context_menu; - - static struct menu_item main_items[] = { - { N_("New appointment..."), (GtkSignalFunc) e_day_view_on_new_appointment, NULL, TRUE } - }; - - static struct menu_item child_items[] = { - { N_("Edit this appointment..."), (GtkSignalFunc) e_day_view_on_edit_appointment, NULL, TRUE }, - { N_("Delete this appointment"), (GtkSignalFunc) e_day_view_on_delete_appointment, NULL, TRUE }, - { NULL, NULL, NULL, TRUE }, - { N_("New appointment..."), (GtkSignalFunc) e_day_view_on_new_appointment, NULL, TRUE } - }; - - static struct menu_item recur_child_items[] = { - { N_("Edit this appointment..."), (GtkSignalFunc) e_day_view_on_edit_appointment, NULL, TRUE }, - { N_("Make this appointment movable"), (GtkSignalFunc) e_day_view_on_unrecur_appointment, NULL, TRUE }, - { N_("Delete this occurrence"), (GtkSignalFunc) e_day_view_on_delete_occurrence, NULL, TRUE }, - { N_("Delete all occurrences"), (GtkSignalFunc) e_day_view_on_delete_appointment, NULL, TRUE }, - { NULL, NULL, NULL, TRUE }, - { N_("New appointment..."), (GtkSignalFunc) e_day_view_on_new_appointment, NULL, TRUE } - }; - - have_selection = GTK_WIDGET_HAS_FOCUS (day_view) - && day_view->selection_start_day != -1; - - if (event_num == -1) { - items = 1; - context_menu = &main_items[0]; - context_menu[0].sensitive = have_selection; - } else { - if (day == E_DAY_VIEW_LONG_EVENT) - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - else - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); - - /* This used to be set only if the event wasn't being edited - in the event editor, but we can't check that at present. - We could possibly set up another method of checking it. */ - not_being_edited = TRUE; - - if (cal_component_has_rrules (event->comp) - || cal_component_has_rdates (event->comp)) { - items = 6; - context_menu = &recur_child_items[0]; - context_menu[0].sensitive = not_being_edited; - context_menu[1].sensitive = not_being_edited; - context_menu[2].sensitive = not_being_edited; - context_menu[3].sensitive = not_being_edited; - context_menu[5].sensitive = have_selection; - } else { - items = 4; - context_menu = &child_items[0]; - context_menu[0].sensitive = not_being_edited; - context_menu[1].sensitive = not_being_edited; - context_menu[3].sensitive = have_selection; - } - } - - for (i = 0; i < items; i++) - context_menu[i].data = day_view; - - day_view->popup_event_day = day; - day_view->popup_event_num = event_num; - popup_menu (context_menu, items, bevent); -} - - -static void -e_day_view_on_new_appointment (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - CalComponent *comp; - CalComponentDateTime date; - time_t dtstart, dtend; - - day_view = E_DAY_VIEW (data); - - comp = cal_component_new (); - e_day_view_get_selected_time_range (day_view, &dtstart, &dtend); - - date.value = g_new (struct icaltimetype, 1); - *date.value = icaltimetype_from_timet (dtstart, FALSE); - cal_component_set_dtstart (comp, &date); - *date.value = icaltimetype_from_timet (dtend, FALSE); - cal_component_set_dtend (comp, &date); - g_free (date.value); - - gnome_calendar_edit_object (day_view->calendar, comp); - gtk_object_unref (GTK_OBJECT (comp)); -} - - -static void -e_day_view_on_edit_appointment (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - gnome_calendar_edit_object (day_view->calendar, event->comp); -} - - -static void -e_day_view_on_delete_occurrence (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - CalComponent *comp; - CalComponentDateTime *date=NULL; - GSList *list; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - /* We must duplicate the CalComponent, or we won't know it has changed - when we get the "update_event" callback. */ - comp = cal_component_clone (event->comp); - cal_component_get_exdate_list (comp, &list); - list = g_slist_append (list, date); - date = g_new0 (CalComponentDateTime, 1); - date->value = g_new (struct icaltimetype, 1); - *date->value = icaltimetype_from_timet (event->start, TRUE); - cal_component_set_exdate_list (comp, list); - cal_component_free_exdate_list (list); - - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_on_delete_occurrence(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); -} - - -static void -e_day_view_on_delete_appointment (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - const char *uid; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - if (day_view->editing_event_day >= 0) - e_day_view_stop_editing_event (day_view); - - cal_component_get_uid (event->comp, &uid); - if (!cal_client_remove_object (day_view->calendar->client, uid)) - g_message ("e_day_view_on_delete_appointment(): Could not remove the object!"); -} - - -static void -e_day_view_on_unrecur_appointment (GtkWidget *widget, gpointer data) -{ - EDayView *day_view; - EDayViewEvent *event; - CalComponent *comp, *new_comp; - CalComponentDateTime *date; - GSList *list; - - day_view = E_DAY_VIEW (data); - - event = e_day_view_get_popup_menu_event (day_view); - if (event == NULL) - return; - - /* For the recurring object, we add a exception to get rid of the - instance. */ - comp = cal_component_clone (event->comp); - cal_component_get_exdate_list (comp, &list); - date = g_new0 (CalComponentDateTime, 1); - date->value = g_new (struct icaltimetype, 1); - *date->value = icaltimetype_from_timet (event->start, TRUE); - list = g_slist_append (list, date); - cal_component_set_exdate_list (comp, list); - cal_component_free_exdate_list (list); - - /* For the unrecurred instance we duplicate the original object, - create a new uid for it, get rid of the recurrence rules, and set - the start & end times to the instances times. */ - new_comp = cal_component_clone (event->comp); - cal_component_set_uid (new_comp, cal_component_gen_uid ()); - cal_component_set_exdate_list (new_comp, NULL); - cal_component_set_exrule_list (new_comp, NULL); - - date = g_new0 (CalComponentDateTime, 1); - date->value = g_new (struct icaltimetype, 1); - - *date->value = icaltimetype_from_timet (event->start, FALSE); - cal_component_set_dtstart (new_comp, date); - *date->value = icaltimetype_from_timet (event->end, FALSE); - cal_component_set_dtend (new_comp, date); - - cal_component_free_datetime (date); - - /* Now update both CalComponents. Note that we do this last since at - * present the updates happen synchronously so our event may disappear. - */ - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_on_unrecur_appointment(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - if (!cal_client_update_object (day_view->calendar->client, new_comp)) - g_message ("e_day_view_on_unrecur_appointment(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (new_comp)); -} - - -static EDayViewEvent* -e_day_view_get_popup_menu_event (EDayView *day_view) -{ - if (day_view->popup_event_num == -1) - return NULL; - - if (day_view->popup_event_day == E_DAY_VIEW_LONG_EVENT) - return &g_array_index (day_view->long_events, - EDayViewEvent, - day_view->popup_event_num); - else - return &g_array_index (day_view->events[day_view->popup_event_day], - EDayViewEvent, - day_view->popup_event_num); -} - - -static gboolean -e_day_view_on_top_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view) -{ - if (day_view->selection_is_being_dragged) { - gdk_pointer_ungrab (event->time); - e_day_view_finish_selection (day_view); - } else if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE) { - e_day_view_finish_long_event_resize (day_view); - gdk_pointer_ungrab (event->time); - } else if (day_view->pressed_event_day != -1) { - e_day_view_start_editing_event (day_view, - day_view->pressed_event_day, - day_view->pressed_event_num, - NULL); - } - - day_view->pressed_event_day = -1; - - return FALSE; -} - - -static gboolean -e_day_view_on_main_canvas_button_release (GtkWidget *widget, - GdkEventButton *event, - EDayView *day_view) -{ - if (day_view->selection_is_being_dragged) { - gdk_pointer_ungrab (event->time); - e_day_view_finish_selection (day_view); - e_day_view_stop_auto_scroll (day_view); - } else if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE) { - e_day_view_finish_resize (day_view); - gdk_pointer_ungrab (event->time); - e_day_view_stop_auto_scroll (day_view); - } else if (day_view->pressed_event_day != -1) { - e_day_view_start_editing_event (day_view, - day_view->pressed_event_day, - day_view->pressed_event_num, - NULL); - } - - day_view->pressed_event_day = -1; - - return FALSE; -} - - -static void -e_day_view_update_calendar_selection_time (EDayView *day_view) -{ - time_t start, end; - - e_day_view_get_selected_time_range (day_view, &start, &end); - gnome_calendar_set_selected_time_range (day_view->calendar, - start, end); -} - - -static gboolean -e_day_view_on_top_canvas_motion (GtkWidget *widget, - GdkEventMotion *mevent, - EDayView *day_view) -{ - EDayViewEvent *event = NULL; - EDayViewPosition pos; - gint event_x, event_y, scroll_x, scroll_y, canvas_x, canvas_y; - gint day, event_num; - GdkCursor *cursor; - -#if 0 - g_print ("In e_day_view_on_top_canvas_motion\n"); -#endif - - /* Convert the coords to the main canvas window, or return if the - window is not found. */ - if (!e_day_view_convert_event_coords (day_view, (GdkEvent*) mevent, - GTK_LAYOUT (widget)->bin_window, - &event_x, &event_y)) - return FALSE; - - /* The top canvas doesn't scroll, but just in case. */ - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - canvas_x = event_x + scroll_x; - canvas_y = event_y + scroll_y; - - pos = e_day_view_convert_position_in_top_canvas (day_view, - canvas_x, canvas_y, - &day, &event_num); - if (event_num != -1) - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - if (day_view->selection_is_being_dragged) { - e_day_view_update_selection (day_view, day, -1); - return TRUE; - } else if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE) { - if (pos != E_DAY_VIEW_POS_OUTSIDE) { - e_day_view_update_long_event_resize (day_view, day); - return TRUE; - } - } else if (day_view->pressed_event_day == E_DAY_VIEW_LONG_EVENT) { - GtkTargetList *target_list; - - event = &g_array_index (day_view->long_events, EDayViewEvent, - day_view->pressed_event_num); - - if (!(cal_component_has_rdates (event->comp) - && cal_component_has_rrules (event->comp)) - && (abs (canvas_x - day_view->drag_event_x) > E_DAY_VIEW_DRAG_START_OFFSET - || abs (canvas_y - day_view->drag_event_y) > E_DAY_VIEW_DRAG_START_OFFSET)) { - day_view->drag_event_day = day_view->pressed_event_day; - day_view->drag_event_num = day_view->pressed_event_num; - day_view->pressed_event_day = -1; - - /* Hide the horizontal bars. */ - if (day_view->resize_bars_event_day != -1) { - day_view->resize_bars_event_day = -1; - day_view->resize_bars_event_num = -1; - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - } - - target_list = gtk_target_list_new (target_table, - n_targets); - gtk_drag_begin (widget, target_list, - GDK_ACTION_COPY | GDK_ACTION_MOVE, - 1, (GdkEvent*)mevent); - gtk_target_list_unref (target_list); - } - } else { - cursor = day_view->normal_cursor; - - /* Recurring events can't be resized. */ - if (event && - !(cal_component_has_rrules (event->comp) - && cal_component_has_rdates (event->comp))) { - switch (pos) { - case E_DAY_VIEW_POS_LEFT_EDGE: - case E_DAY_VIEW_POS_RIGHT_EDGE: - cursor = day_view->resize_width_cursor; - break; - default: - break; - } - } - - /* Only set the cursor if it is different to last one set. */ - if (day_view->last_cursor_set_in_top_canvas != cursor) { - day_view->last_cursor_set_in_top_canvas = cursor; - gdk_window_set_cursor (widget->window, cursor); - } - - } - - return FALSE; -} - - -static gboolean -e_day_view_on_main_canvas_motion (GtkWidget *widget, - GdkEventMotion *mevent, - EDayView *day_view) -{ - EDayViewEvent *event = NULL; - EDayViewPosition pos; - gint event_x, event_y, scroll_x, scroll_y, canvas_x, canvas_y; - gint row, day, event_num; - GdkCursor *cursor; - -#if 0 - g_print ("In e_day_view_on_main_canvas_motion\n"); -#endif - - /* Convert the coords to the main canvas window, or return if the - window is not found. */ - if (!e_day_view_convert_event_coords (day_view, (GdkEvent*) mevent, - GTK_LAYOUT (widget)->bin_window, - &event_x, &event_y)) - return FALSE; - - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - canvas_x = event_x + scroll_x; - canvas_y = event_y + scroll_y; - - pos = e_day_view_convert_position_in_main_canvas (day_view, - canvas_x, canvas_y, - &day, &row, - &event_num); - if (event_num != -1) - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - if (day_view->selection_is_being_dragged) { - if (pos != E_DAY_VIEW_POS_OUTSIDE) { - e_day_view_update_selection (day_view, day, row); - e_day_view_check_auto_scroll (day_view, - event_x, event_y); - return TRUE; - } - } else if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE) { - if (pos != E_DAY_VIEW_POS_OUTSIDE) { - e_day_view_update_resize (day_view, row); - e_day_view_check_auto_scroll (day_view, - event_x, event_y); - return TRUE; - } - } else if (day_view->pressed_event_day != -1 - && day_view->pressed_event_day != E_DAY_VIEW_LONG_EVENT) { - GtkTargetList *target_list; - - event = &g_array_index (day_view->events[day_view->pressed_event_day], EDayViewEvent, day_view->pressed_event_num); - - if (!(cal_component_has_rrules (event->comp) - && cal_component_has_rdates (event->comp)) - && (abs (canvas_x - day_view->drag_event_x) > E_DAY_VIEW_DRAG_START_OFFSET - || abs (canvas_y - day_view->drag_event_y) > E_DAY_VIEW_DRAG_START_OFFSET)) { - day_view->drag_event_day = day_view->pressed_event_day; - day_view->drag_event_num = day_view->pressed_event_num; - day_view->pressed_event_day = -1; - - /* Hide the horizontal bars. */ - if (day_view->resize_bars_event_day != -1) { - day_view->resize_bars_event_day = -1; - day_view->resize_bars_event_num = -1; - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - } - - target_list = gtk_target_list_new (target_table, - n_targets); - gtk_drag_begin (widget, target_list, - GDK_ACTION_COPY | GDK_ACTION_MOVE, - 1, (GdkEvent*)mevent); - gtk_target_list_unref (target_list); - } - } else { - cursor = day_view->normal_cursor; - - /* Recurring events can't be resized. */ - if (event && - !(cal_component_has_rrules (event->comp) - && cal_component_has_rdates (event->comp))) { - switch (pos) { - case E_DAY_VIEW_POS_LEFT_EDGE: - cursor = day_view->move_cursor; - break; - case E_DAY_VIEW_POS_TOP_EDGE: - case E_DAY_VIEW_POS_BOTTOM_EDGE: - cursor = day_view->resize_height_cursor; - break; - default: - break; - } - } - - /* Only set the cursor if it is different to last one set. */ - if (day_view->last_cursor_set_in_main_canvas != cursor) { - day_view->last_cursor_set_in_main_canvas = cursor; - gdk_window_set_cursor (widget->window, cursor); - } - } - - return FALSE; -} - - -/* This sets the selection to a single cell. If day is -1 then the current - start day is reused. If row is -1 then the selection is in the top canvas. -*/ -void -e_day_view_start_selection (EDayView *day_view, - gint day, - gint row) -{ - if (day == -1) { - day = day_view->selection_start_day; - if (day == -1) - day = 0; - } - - day_view->selection_start_day = day; - day_view->selection_end_day = day; - - day_view->selection_start_row = row; - day_view->selection_end_row = row; - - day_view->selection_is_being_dragged = TRUE; - day_view->selection_drag_pos = E_DAY_VIEW_DRAG_END; - day_view->selection_in_top_canvas = (row == -1) ? TRUE : FALSE; - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -/* Updates the selection during a drag. If day is -1 the selection day is - unchanged. */ -void -e_day_view_update_selection (EDayView *day_view, - gint day, - gint row) -{ - gboolean need_redraw = FALSE; - -#if 0 - g_print ("Updating selection %i,%i\n", day, row); -#endif - - day_view->selection_in_top_canvas = (row == -1) ? TRUE : FALSE; - - if (day == -1) - day = (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) - ? day_view->selection_start_day - : day_view->selection_end_day; - - if (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) { - if (row != day_view->selection_start_row - || day != day_view->selection_start_day) { - need_redraw = TRUE; - day_view->selection_start_row = row; - day_view->selection_start_day = day; - } - } else { - if (row != day_view->selection_end_row - || day != day_view->selection_end_day) { - need_redraw = TRUE; - day_view->selection_end_row = row; - day_view->selection_end_day = day; - } - } - - e_day_view_normalize_selection (day_view); - - /* FIXME: Optimise? */ - if (need_redraw) { - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - } -} - - -static void -e_day_view_normalize_selection (EDayView *day_view) -{ - gint tmp_row, tmp_day; - - /* Switch the drag position if necessary. */ - if (day_view->selection_start_day > day_view->selection_end_day - || (day_view->selection_start_day == day_view->selection_end_day - && day_view->selection_start_row > day_view->selection_end_row)) { - tmp_row = day_view->selection_start_row; - tmp_day = day_view->selection_start_day; - day_view->selection_start_day = day_view->selection_end_day; - day_view->selection_start_row = day_view->selection_end_row; - day_view->selection_end_day = tmp_day; - day_view->selection_end_row = tmp_row; - if (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) - day_view->selection_drag_pos = E_DAY_VIEW_DRAG_END; - else - day_view->selection_drag_pos = E_DAY_VIEW_DRAG_START; - } -} - - -void -e_day_view_finish_selection (EDayView *day_view) -{ - day_view->selection_is_being_dragged = FALSE; - e_day_view_update_calendar_selection_time (day_view); -} - - -static void -e_day_view_update_long_event_resize (EDayView *day_view, - gint day) -{ - EDayViewEvent *event; - gint event_num; - gboolean need_reshape = FALSE; - -#if 0 - g_print ("Updating resize Day:%i\n", day); -#endif - - event_num = day_view->resize_event_num; - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_LEFT_EDGE) { - day = MIN (day, day_view->resize_end_row); - if (day != day_view->resize_start_row) { - need_reshape = TRUE; - day_view->resize_start_row = day; - - } - } else { - day = MAX (day, day_view->resize_start_row); - if (day != day_view->resize_end_row) { - need_reshape = TRUE; - day_view->resize_end_row = day; - } - } - - /* FIXME: Optimise? */ - if (need_reshape) { - e_day_view_reshape_long_event (day_view, event_num); - e_day_view_reshape_resize_long_event_rect_item (day_view); - gtk_widget_queue_draw (day_view->top_canvas); - } -} - - -static void -e_day_view_update_resize (EDayView *day_view, - gint row) -{ - EDayViewEvent *event; - gint day, event_num; - gboolean need_reshape = FALSE; - -#if 0 - g_print ("Updating resize Row:%i\n", row); -#endif - - day = day_view->resize_event_day; - event_num = day_view->resize_event_num; - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_TOP_EDGE) { - row = MIN (row, day_view->resize_end_row); - if (row != day_view->resize_start_row) { - need_reshape = TRUE; - day_view->resize_start_row = row; - - } - } else { - row = MAX (row, day_view->resize_start_row); - if (row != day_view->resize_end_row) { - need_reshape = TRUE; - day_view->resize_end_row = row; - } - } - - /* FIXME: Optimise? */ - if (need_reshape) { - e_day_view_reshape_day_event (day_view, day, event_num); - e_day_view_reshape_resize_rect_item (day_view); - e_day_view_reshape_main_canvas_resize_bars (day_view); - gtk_widget_queue_draw (day_view->main_canvas); - } -} - - -/* This converts the resize start or end row back to a time and updates the - event. */ -static void -e_day_view_finish_long_event_resize (EDayView *day_view) -{ - EDayViewEvent *event; - gint event_num; - CalComponent *comp; - CalComponentDateTime date; - time_t dt; - - event_num = day_view->resize_event_num; - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - /* We use a temporary shallow copy of the ico since we don't want to - change the original ico here. Otherwise we would not detect that - the event's time had changed in the "update_event" callback. */ - comp = cal_component_clone (event->comp); - - date.value = g_new (struct icaltimetype, 1); - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_LEFT_EDGE) { - dt = day_view->day_starts[day_view->resize_start_row]; - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtstart (comp, &date); - } else { - dt = day_view->day_starts[day_view->resize_end_row + 1]; - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtend (comp, &date); - } - g_free (date.value); - - gnome_canvas_item_hide (day_view->resize_long_event_rect_item); - - day_view->resize_drag_pos = E_DAY_VIEW_POS_NONE; - - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_finish_long_event_resize(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); -} - - -/* This converts the resize start or end row back to a time and updates the - event. */ -static void -e_day_view_finish_resize (EDayView *day_view) -{ - EDayViewEvent *event; - gint day, event_num; - CalComponent *comp; - CalComponentDateTime date; - time_t dt; - - day = day_view->resize_event_day; - event_num = day_view->resize_event_num; - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* We use a temporary shallow copy of the ico since we don't want to - change the original ico here. Otherwise we would not detect that - the event's time had changed in the "update_event" callback. */ - comp = cal_component_clone (event->comp); - - date.value = g_new (struct icaltimetype, 1); - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_TOP_EDGE) { - dt = e_day_view_convert_grid_position_to_time (day_view, day, day_view->resize_start_row); - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtstart (comp, &date); - } else { - dt = e_day_view_convert_grid_position_to_time (day_view, day, day_view->resize_end_row + 1); - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtend (comp, &date); - } - g_free (date.value); - - gnome_canvas_item_hide (day_view->resize_rect_item); - gnome_canvas_item_hide (day_view->resize_bar_item); - - /* Hide the horizontal bars. */ - day_view->resize_bars_event_day = -1; - day_view->resize_bars_event_num = -1; - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - - day_view->resize_drag_pos = E_DAY_VIEW_POS_NONE; - - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_finish_resize(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); -} - - -static void -e_day_view_abort_resize (EDayView *day_view, - guint32 time) -{ - gint day, event_num; - - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_NONE) - return; - - day_view->resize_drag_pos = E_DAY_VIEW_POS_NONE; - gdk_pointer_ungrab (time); - - day = day_view->resize_event_day; - event_num = day_view->resize_event_num; - - if (day == E_DAY_VIEW_LONG_EVENT) { - e_day_view_reshape_long_event (day_view, event_num); - gtk_widget_queue_draw (day_view->top_canvas); - - day_view->last_cursor_set_in_top_canvas = day_view->normal_cursor; - gdk_window_set_cursor (day_view->top_canvas->window, - day_view->normal_cursor); - gnome_canvas_item_hide (day_view->resize_long_event_rect_item); - } else { - e_day_view_reshape_day_event (day_view, day, event_num); - e_day_view_reshape_main_canvas_resize_bars (day_view); - gtk_widget_queue_draw (day_view->main_canvas); - - day_view->last_cursor_set_in_main_canvas = day_view->normal_cursor; - gdk_window_set_cursor (day_view->main_canvas->window, - day_view->normal_cursor); - gnome_canvas_item_hide (day_view->resize_rect_item); - gnome_canvas_item_hide (day_view->resize_bar_item); - } -} - - -static void -e_day_view_reload_events (EDayView *day_view) -{ - e_day_view_free_events (day_view); - - /* Reset all our indices. */ - day_view->editing_event_day = -1; - day_view->popup_event_day = -1; - day_view->resize_bars_event_day = -1; - day_view->resize_event_day = -1; - day_view->pressed_event_day = -1; - day_view->drag_event_day = -1; - - /* If both lower & upper are 0, then the time range hasn't been set, - so we don't try to load any events. */ - if (day_view->calendar - && (day_view->lower != 0 || day_view->upper != 0)) { - cal_client_generate_instances (day_view->calendar->client, - CALOBJ_TYPE_EVENT, - day_view->lower, - day_view->upper, - e_day_view_add_event, - day_view); - } - - /* We need to do this to make sure the top canvas is resized. */ - day_view->long_events_need_layout = TRUE; - - e_day_view_check_layout (day_view); - e_day_view_reshape_main_canvas_resize_bars (day_view); - - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_free_events (EDayView *day_view) -{ - gint day; - - e_day_view_free_event_array (day_view, day_view->long_events); - - for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) - e_day_view_free_event_array (day_view, day_view->events[day]); -} - - -static void -e_day_view_free_event_array (EDayView *day_view, - GArray *array) -{ - EDayViewEvent *event; - gint event_num; - - for (event_num = 0; event_num < array->len; event_num++) { - event = &g_array_index (array, EDayViewEvent, event_num); - if (event->canvas_item) - gtk_object_destroy (GTK_OBJECT (event->canvas_item)); - gtk_object_unref (GTK_OBJECT (event->comp)); - } - - g_array_set_size (array, 0); -} - - -/* This adds one event to the view, adding it to the appropriate array. */ -static gboolean -e_day_view_add_event (CalComponent *comp, - time_t start, - time_t end, - gpointer data) - -{ - EDayView *day_view; - EDayViewEvent event; - gint day, offset; - struct tm start_tm, end_tm; - - day_view = E_DAY_VIEW (data); - - /* Check that the event times are valid. */ - g_return_val_if_fail (start <= end, TRUE); - g_return_val_if_fail (start < day_view->upper, TRUE); - g_return_val_if_fail (end > day_view->lower, TRUE); - - start_tm = *(localtime (&start)); - end_tm = *(localtime (&end)); - - event.comp = comp; - gtk_object_ref (GTK_OBJECT (comp)); - event.start = start; - event.end = end; - event.canvas_item = NULL; - - /* Calculate the start & end minute, relative to the top of the - display. */ - offset = day_view->first_hour_shown * 60 - + day_view->first_minute_shown; - event.start_minute = start_tm.tm_hour * 60 + start_tm.tm_min - offset; - event.end_minute = end_tm.tm_hour * 60 + end_tm.tm_min - offset; - - event.start_row_or_col = -1; - event.num_columns = -1; - - /* Find out which array to add the event to. */ - for (day = 0; day < day_view->days_shown; day++) { - if (start >= day_view->day_starts[day] - && end <= day_view->day_starts[day + 1]) { - - /* Special case for when the appointment ends at - midnight, i.e. the start of the next day. */ - if (end == day_view->day_starts[day + 1]) { - - /* If the event last the entire day, then we - skip it here so it gets added to the top - canvas. */ - if (start == day_view->day_starts[day]) - break; - - event.end_minute = 24 * 60; - } - - g_array_append_val (day_view->events[day], event); - day_view->events_sorted[day] = FALSE; - day_view->need_layout[day] = TRUE; - return TRUE; - } - } - - /* The event wasn't within one day so it must be a long event, - i.e. shown in the top canvas. */ - g_array_append_val (day_view->long_events, event); - day_view->long_events_sorted = FALSE; - day_view->long_events_need_layout = TRUE; - return TRUE; -} - - -/* This lays out the short (less than 1 day) events in the columns. - Any long events are simply skipped. */ -void -e_day_view_check_layout (EDayView *day_view) -{ - gint day; - - /* Don't bother if we aren't visible. */ - if (!GTK_WIDGET_VISIBLE (day_view)) - return; - - /* Make sure the events are sorted (by start and size). */ - e_day_view_ensure_events_sorted (day_view); - - for (day = 0; day < day_view->days_shown; day++) { - if (day_view->need_layout[day]) - e_day_view_layout_day_events (day_view, day); - - if (day_view->need_layout[day] - || day_view->need_reshape[day]) { - e_day_view_reshape_day_events (day_view, day); - - if (day_view->resize_bars_event_day == day) - e_day_view_reshape_main_canvas_resize_bars (day_view); - } - - day_view->need_layout[day] = FALSE; - day_view->need_reshape[day] = FALSE; - } - - if (day_view->long_events_need_layout) - e_day_view_layout_long_events (day_view); - - if (day_view->long_events_need_layout - || day_view->long_events_need_reshape) - e_day_view_reshape_long_events (day_view); - - day_view->long_events_need_layout = FALSE; - day_view->long_events_need_reshape = FALSE; -} - - -static void -e_day_view_layout_long_events (EDayView *day_view) -{ - EDayViewEvent *event; - gint event_num, old_rows_in_top_display, top_canvas_height, top_rows; - guint8 *grid; - - /* This is a temporary 2-d grid which is used to place events. - Each element is 0 if the position is empty, or 1 if occupied. - We allocate the maximum size possible here, assuming that each - event will need its own row. */ - grid = g_new0 (guint8, - day_view->long_events->len * E_DAY_VIEW_MAX_DAYS); - - /* Reset the number of rows in the top display to 0. It will be - updated as events are layed out below. */ - old_rows_in_top_display = day_view->rows_in_top_display; - day_view->rows_in_top_display = 0; - - /* Iterate over the events, finding which days they cover, and putting - them in the first free row available. */ - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - e_day_view_layout_long_event (day_view, event, grid); - } - - /* Free the grid. */ - g_free (grid); - - /* Set the height of the top canvas based on the row height and the - number of rows needed (min 1 + 1 for the dates + 1 space for DnD).*/ - if (day_view->rows_in_top_display != old_rows_in_top_display) { - top_rows = MAX (1, day_view->rows_in_top_display); - top_canvas_height = (top_rows + 2) * day_view->top_row_height; - gtk_widget_set_usize (day_view->top_canvas, -1, - top_canvas_height); - } -} - - -static void -e_day_view_layout_long_event (EDayView *day_view, - EDayViewEvent *event, - guint8 *grid) -{ - gint start_day, end_day, free_row, day, row; - - event->num_columns = 0; - - if (!e_day_view_find_long_event_days (day_view, event, - &start_day, &end_day)) - return; - - /* Try each row until we find a free one. */ - row = 0; - do { - free_row = row; - for (day = start_day; day <= end_day; day++) { - if (grid[row * E_DAY_VIEW_MAX_DAYS + day]) { - free_row = -1; - break; - } - } - row++; - } while (free_row == -1); - - event->start_row_or_col = free_row; - event->num_columns = 1; - - /* Mark the cells as full. */ - for (day = start_day; day <= end_day; day++) { - grid[free_row * E_DAY_VIEW_MAX_DAYS + day] = 1; - } - - /* Update the number of rows in the top canvas if necessary. */ - day_view->rows_in_top_display = MAX (day_view->rows_in_top_display, - free_row + 1); -} - - -static void -e_day_view_reshape_long_events (EDayView *day_view) -{ - EDayViewEvent *event; - gint event_num; - - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - if (event->num_columns == 0) { - if (event->canvas_item) { - gtk_object_destroy (GTK_OBJECT (event->canvas_item)); - event->canvas_item = NULL; - } - } else { - e_day_view_reshape_long_event (day_view, event_num); - } - } -} - - -static void -e_day_view_reshape_long_event (EDayView *day_view, - gint event_num) -{ - EDayViewEvent *event; - GdkFont *font; - gint start_day, end_day, item_x, item_y, item_w, item_h; - gint text_x, text_w, num_icons, icons_width, width, time_width; - CalComponent *comp; - gint min_text_x, max_text_w, text_width, line_len; - gchar *text, *end_of_line; - gboolean show_icons = TRUE, use_max_width = FALSE; - - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - if (!e_day_view_get_long_event_position (day_view, event_num, - &start_day, &end_day, - &item_x, &item_y, - &item_w, &item_h)) { - if (event->canvas_item) { - gtk_object_destroy (GTK_OBJECT (event->canvas_item)); - event->canvas_item = NULL; - } - return; - } - - /* Take off the border and padding. */ - item_x += E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH + E_DAY_VIEW_LONG_EVENT_X_PAD; - item_w -= (E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH + E_DAY_VIEW_LONG_EVENT_X_PAD) * 2; - item_y += E_DAY_VIEW_LONG_EVENT_BORDER_HEIGHT + E_DAY_VIEW_LONG_EVENT_Y_PAD; - item_h -= (E_DAY_VIEW_LONG_EVENT_BORDER_HEIGHT + E_DAY_VIEW_LONG_EVENT_Y_PAD) * 2; - - /* We don't show the icons while resizing, since we'd have to - draw them on top of the resize rect. Nor when editing. */ - num_icons = 0; - comp = event->comp; - font = GTK_WIDGET (day_view)->style->font; - - if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE - && day_view->resize_event_day == E_DAY_VIEW_LONG_EVENT - && day_view->resize_event_num == event_num) - show_icons = FALSE; - - if (day_view->editing_event_day == E_DAY_VIEW_LONG_EVENT - && day_view->editing_event_num == event_num) { - show_icons = FALSE; - use_max_width = TRUE; - } - -#if 0 - if (show_icons) { - if (ico->dalarm.enabled || ico->malarm.enabled - || ico->palarm.enabled || ico->aalarm.enabled) - num_icons++; - if (ico->recur) - num_icons++; - } -#endif - - if (!event->canvas_item) { - event->canvas_item = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->top_canvas)->root), - e_text_get_type (), - "font_gdk", GTK_WIDGET (day_view)->style->font, - "anchor", GTK_ANCHOR_NW, - "clip", TRUE, - "max_lines", 1, - "editable", TRUE, - "use_ellipsis", TRUE, - NULL); - gtk_signal_connect (GTK_OBJECT (event->canvas_item), "event", - GTK_SIGNAL_FUNC (e_day_view_on_text_item_event), - day_view); - e_day_view_update_long_event_label (day_view, event_num); - } - - /* Calculate its position. We first calculate the ideal position which - is centered with the icons. We then make sure we haven't gone off - the left edge of the available space. Finally we make sure we don't - go off the right edge. */ - icons_width = (E_DAY_VIEW_ICON_WIDTH + E_DAY_VIEW_ICON_X_PAD) - * num_icons; - time_width = day_view->max_small_hour_width + day_view->colon_width - + day_view->max_minute_width; - - if (use_max_width) { - text_x = item_x; - text_w = item_w; - } else { - /* Get the requested size of the label. */ - gtk_object_get (GTK_OBJECT (event->canvas_item), - "text", &text, - NULL); - text_width = 0; - if (text) { - end_of_line = strchr (text, '\n'); - if (end_of_line) - line_len = end_of_line - text; - else - line_len = strlen (text); - text_width = gdk_text_width (font, text, line_len); - g_free (text); - } - - width = text_width + icons_width; - text_x = item_x + (item_w - width) / 2; - - min_text_x = item_x; - if (event->start > day_view->day_starts[start_day]) - min_text_x += time_width + E_DAY_VIEW_LONG_EVENT_TIME_X_PAD; - - text_x = MAX (text_x, min_text_x); - - max_text_w = item_x + item_w - text_x; - if (event->end < day_view->day_starts[end_day + 1]) - max_text_w -= time_width + E_DAY_VIEW_LONG_EVENT_TIME_X_PAD; - - text_w = MIN (width, max_text_w); - - /* Now take out the space for the icons. */ - text_x += icons_width; - text_w -= icons_width; - } - - text_w = MAX (text_w, 0); - gnome_canvas_item_set (event->canvas_item, - "clip_width", (gdouble) text_w, - "clip_height", (gdouble) item_h, - NULL); - e_canvas_item_move_absolute(event->canvas_item, - text_x, item_y); -} - - -/* Find the start and end days for the event. */ -gboolean -e_day_view_find_long_event_days (EDayView *day_view, - EDayViewEvent *event, - gint *start_day_return, - gint *end_day_return) -{ - gint day, start_day, end_day; - - start_day = -1; - end_day = -1; - - for (day = 0; day < day_view->days_shown; day++) { - if (start_day == -1 - && event->start < day_view->day_starts[day + 1]) - start_day = day; - if (event->end > day_view->day_starts[day]) - end_day = day; - } - - /* Sanity check. */ - if (start_day < 0 || start_day >= day_view->days_shown - || end_day < 0 || end_day >= day_view->days_shown - || end_day < start_day) { - g_warning ("Invalid date range for event"); - return FALSE; - } - - *start_day_return = start_day; - *end_day_return = end_day; - - return TRUE; -} - - -static void -e_day_view_layout_day_events (EDayView *day_view, - gint day) -{ - EDayViewEvent *event; - gint row, event_num; - guint8 *grid; - - /* This is a temporary array which keeps track of rows which are - connected. When an appointment spans multiple rows then the number - of columns in each of these rows must be the same (i.e. the maximum - of all of them). Each element in the array corresponds to one row - and contains the index of the first row in the group of connected - rows. */ - guint16 group_starts[12 * 24]; - - /* Reset the cols_per_row array, and initialize the connected rows. */ - for (row = 0; row < day_view->rows; row++) { - day_view->cols_per_row[day][row] = 0; - group_starts[row] = row; - } - - /* This is a temporary 2-d grid which is used to place events. - Each element is 0 if the position is empty, or 1 if occupied. */ - grid = g_new0 (guint8, day_view->rows * E_DAY_VIEW_MAX_COLUMNS); - - - /* Iterate over the events, finding which rows they cover, and putting - them in the first free column available. Increment the number of - events in each of the rows it covers, and make sure they are all - in one group. */ - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - e_day_view_layout_day_event (day_view, day, event, - grid, group_starts); - } - - /* Recalculate the number of columns needed in each row. */ - e_day_view_recalc_cols_per_row (day_view, day, group_starts); - - /* Iterate over the events again, trying to expand events horizontally - if there is enough space. */ - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - e_day_view_expand_day_event (day_view, day, event, grid); - } - - /* Free the grid. */ - g_free (grid); -} - - -/* Finds the first free position to place the event in. - Increments the number of events in each of the rows it covers, and makes - sure they are all in one group. */ -static void -e_day_view_layout_day_event (EDayView *day_view, - gint day, - EDayViewEvent *event, - guint8 *grid, - guint16 *group_starts) -{ - gint start_row, end_row, free_col, col, row, group_start; - - start_row = event->start_minute / day_view->mins_per_row; - end_row = (event->end_minute - 1) / day_view->mins_per_row; - - event->num_columns = 0; - - /* If the event can't currently be seen, just return. */ - if (start_row >= day_view->rows || end_row < 0) - return; - - /* Make sure we don't go outside the visible times. */ - start_row = CLAMP (start_row, 0, day_view->rows - 1); - end_row = CLAMP (end_row, 0, day_view->rows - 1); - - /* Try each column until we find a free one. */ - for (col = 0; col < E_DAY_VIEW_MAX_COLUMNS; col++) { - free_col = col; - for (row = start_row; row <= end_row; row++) { - if (grid[row * E_DAY_VIEW_MAX_COLUMNS + col]) { - free_col = -1; - break; - } - } - - if (free_col != -1) - break; - } - - /* If we can't find space for the event, just return. */ - if (free_col == -1) - return; - - /* The event is assigned 1 col initially, but may be expanded later. */ - event->start_row_or_col = free_col; - event->num_columns = 1; - - /* Determine the start index of the group. */ - group_start = group_starts[start_row]; - - /* Increment number of events in each of the rows the event covers. - We use the cols_per_row array for this. It will be sorted out after - all the events have been layed out. Also make sure all the rows that - the event covers are in one group. */ - for (row = start_row; row <= end_row; row++) { - grid[row * E_DAY_VIEW_MAX_COLUMNS + free_col] = 1; - day_view->cols_per_row[day][row]++; - group_starts[row] = group_start; - } - - /* If any following rows should be in the same group, add them. */ - for (row = end_row + 1; row < day_view->rows; row++) { - if (group_starts[row] > end_row) - break; - group_starts[row] = group_start; - } -} - - -/* For each group of rows, find the max number of events in all the - rows, and set the number of cols in each of the rows to that. */ -static void -e_day_view_recalc_cols_per_row (EDayView *day_view, - gint day, - guint16 *group_starts) -{ - gint start_row = 0, row, next_start_row, max_events; - - while (start_row < day_view->rows) { - - max_events = 0; - for (row = start_row; row < day_view->rows && group_starts[row] == start_row; row++) - max_events = MAX (max_events, day_view->cols_per_row[day][row]); - - next_start_row = row; - - for (row = start_row; row < next_start_row; row++) - day_view->cols_per_row[day][row] = max_events; - - start_row = next_start_row; - } -} - - -/* Expands the event horizontally to fill any free space. */ -static void -e_day_view_expand_day_event (EDayView *day_view, - gint day, - EDayViewEvent *event, - guint8 *grid) -{ - gint start_row, end_row, col, row; - gboolean clashed; - - start_row = event->start_minute / day_view->mins_per_row; - end_row = (event->end_minute - 1) / day_view->mins_per_row; - - /* Try each column until we find a free one. */ - clashed = FALSE; - for (col = event->start_row_or_col + 1; col < day_view->cols_per_row[day][start_row]; col++) { - for (row = start_row; row <= end_row; row++) { - if (grid[row * E_DAY_VIEW_MAX_COLUMNS + col]) { - clashed = TRUE; - break; - } - } - - if (clashed) - break; - - event->num_columns++; - } -} - - -/* This creates or updates the sizes of the canvas items for one day of the - main canvas. */ -static void -e_day_view_reshape_day_events (EDayView *day_view, - gint day) -{ - gint event_num; - - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - e_day_view_reshape_day_event (day_view, day, event_num); - } -} - - -static void -e_day_view_reshape_day_event (EDayView *day_view, - gint day, - gint event_num) -{ - EDayViewEvent *event; - gint item_x, item_y, item_w, item_h; - gint num_icons, icons_offset; - CalComponent *comp; - - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - comp = event->comp; - - if (!e_day_view_get_event_position (day_view, day, event_num, - &item_x, &item_y, - &item_w, &item_h)) { - if (event->canvas_item) { - gtk_object_destroy (GTK_OBJECT (event->canvas_item)); - event->canvas_item = NULL; - } - } else { - /* Skip the border and padding. */ - item_x += E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_EVENT_X_PAD; - item_w -= E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_EVENT_X_PAD * 2; - item_y += E_DAY_VIEW_EVENT_BORDER_HEIGHT + E_DAY_VIEW_EVENT_Y_PAD; - item_h -= (E_DAY_VIEW_EVENT_BORDER_HEIGHT + E_DAY_VIEW_EVENT_Y_PAD) * 2; - - /* We don't show the icons while resizing, since we'd have to - draw them on top of the resize rect. */ - num_icons = 0; - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_NONE - || day_view->resize_event_day != day - || day_view->resize_event_num != event_num) { -#if 0 - if (ico->dalarm.enabled || ico->malarm.enabled - || ico->palarm.enabled || ico->aalarm.enabled) - num_icons++; -#endif - if (cal_component_has_rrules (comp) - || cal_component_has_rdates (comp)) - num_icons++; - } - - if (num_icons > 0) { - if (item_h >= (E_DAY_VIEW_ICON_HEIGHT + E_DAY_VIEW_ICON_Y_PAD) * num_icons) - icons_offset = E_DAY_VIEW_ICON_WIDTH + E_DAY_VIEW_ICON_X_PAD * 2; - else - icons_offset = (E_DAY_VIEW_ICON_WIDTH + E_DAY_VIEW_ICON_X_PAD) * num_icons + E_DAY_VIEW_ICON_X_PAD; - item_x += icons_offset; - item_w -= icons_offset; - } - - if (!event->canvas_item) { - event->canvas_item = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (day_view->main_canvas)->root), - e_text_get_type (), - "font_gdk", GTK_WIDGET (day_view)->style->font, - "anchor", GTK_ANCHOR_NW, - "line_wrap", TRUE, - "editable", TRUE, - "clip", TRUE, - "use_ellipsis", TRUE, - NULL); - gtk_signal_connect (GTK_OBJECT (event->canvas_item), - "event", - GTK_SIGNAL_FUNC (e_day_view_on_text_item_event), - day_view); - e_day_view_update_event_label (day_view, day, - event_num); - } - - item_w = MAX (item_w, 0); - gnome_canvas_item_set (event->canvas_item, - "clip_width", (gdouble) item_w, - "clip_height", (gdouble) item_h, - NULL); - e_canvas_item_move_absolute(event->canvas_item, - item_x, item_y); - } -} - - -/* This creates or resizes the horizontal bars used to resize events in the - main canvas. */ -static void -e_day_view_reshape_main_canvas_resize_bars (EDayView *day_view) -{ - gint day, event_num; - gint item_x, item_y, item_w, item_h; - gdouble x, y, w, h; - - day = day_view->resize_bars_event_day; - event_num = day_view->resize_bars_event_num; - - /* If we're not editing an event, or the event is not shown, - hide the resize bars. */ - if (day != -1 && day == day_view->drag_event_day - && event_num == day_view->drag_event_num) { - gtk_object_get (GTK_OBJECT (day_view->drag_rect_item), - "x1", &x, - "y1", &y, - "x2", &w, - "y2", &h, - NULL); - w -= x; - x++; - h -= y; - } else if (day != -1 - && e_day_view_get_event_position (day_view, day, event_num, - &item_x, &item_y, - &item_w, &item_h)) { - x = item_x + E_DAY_VIEW_BAR_WIDTH; - y = item_y; - w = item_w - E_DAY_VIEW_BAR_WIDTH; - h = item_h; - } else { - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - return; - } - - gnome_canvas_item_set (day_view->main_canvas_top_resize_bar_item, - "x1", x - E_DAY_VIEW_BAR_WIDTH, - "y1", y - E_DAY_VIEW_BAR_HEIGHT, - "x2", x + w - 1, - "y2", y - 1, - NULL); - gnome_canvas_item_show (day_view->main_canvas_top_resize_bar_item); - - gnome_canvas_item_set (day_view->main_canvas_bottom_resize_bar_item, - "x1", x - E_DAY_VIEW_BAR_WIDTH, - "y1", y + h, - "x2", x + w - 1, - "y2", y + h + E_DAY_VIEW_BAR_HEIGHT - 1, - NULL); - gnome_canvas_item_show (day_view->main_canvas_bottom_resize_bar_item); -} - - -static void -e_day_view_ensure_events_sorted (EDayView *day_view) -{ - gint day; - - /* Sort the long events. */ - if (!day_view->long_events_sorted) { - qsort (day_view->long_events->data, - day_view->long_events->len, - sizeof (EDayViewEvent), - e_day_view_event_sort_func); - day_view->long_events_sorted = TRUE; - } - - /* Sort the events for each day. */ - for (day = 0; day < day_view->days_shown; day++) { - if (!day_view->events_sorted[day]) { - qsort (day_view->events[day]->data, - day_view->events[day]->len, - sizeof (EDayViewEvent), - e_day_view_event_sort_func); - day_view->events_sorted[day] = TRUE; - } - } -} - - -static gint -e_day_view_event_sort_func (const void *arg1, - const void *arg2) -{ - EDayViewEvent *event1, *event2; - - event1 = (EDayViewEvent*) arg1; - event2 = (EDayViewEvent*) arg2; - - if (event1->start < event2->start) - return -1; - if (event1->start > event2->start) - return 1; - - if (event1->end > event2->end) - return -1; - if (event1->end < event2->end) - return 1; - - return 0; -} - - -static gint -e_day_view_key_press (GtkWidget *widget, GdkEventKey *event) -{ - EDayView *day_view; - CalComponent *comp; - gint day, event_num; - gchar *initial_text; - guint keyval; - gboolean stop_emission; - time_t dtstart, dtend; - const char *uid; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (E_IS_DAY_VIEW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - day_view = E_DAY_VIEW (widget); - keyval = event->keyval; - - /* The Escape key aborts a resize operation. */ - if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE) { - if (keyval == GDK_Escape) { - e_day_view_abort_resize (day_view, event->time); - } - return FALSE; - } - - /* Handle the cursor keys for moving & extending the selection. */ - stop_emission = TRUE; - if (event->state & GDK_SHIFT_MASK) { - switch (keyval) { - case GDK_Up: - e_day_view_cursor_key_up_shifted (day_view, event); - break; - case GDK_Down: - e_day_view_cursor_key_down_shifted (day_view, event); - break; - case GDK_Left: - e_day_view_cursor_key_left_shifted (day_view, event); - break; - case GDK_Right: - e_day_view_cursor_key_right_shifted (day_view, event); - break; - default: - stop_emission = FALSE; - break; - } - } else { - switch (keyval) { - case GDK_Up: - e_day_view_cursor_key_up (day_view, event); - break; - case GDK_Down: - e_day_view_cursor_key_down (day_view, event); - break; - case GDK_Left: - e_day_view_cursor_key_left (day_view, event); - break; - case GDK_Right: - e_day_view_cursor_key_right (day_view, event); - break; - default: - stop_emission = FALSE; - break; - } - } - if (stop_emission) - return TRUE; - - if (day_view->selection_start_day == -1) - return FALSE; - - /* Check if there is room for a new event to be typed in. If there - isn't we don't want to add an event as we will then add a new - event for every key press. */ - if (!e_day_view_check_if_new_event_fits (day_view)) { - return FALSE; - } - - /* We only want to start an edit with a return key or a simple - character. */ - if (keyval == GDK_Return) { - initial_text = NULL; - } else if ((keyval < 0x20) - || (keyval > 0xFF) - || (event->length == 0) - || (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK))) { - return FALSE; - } else { - initial_text = event->string; - } - - /* Add a new event covering the selected range. - Note that user_name is a global variable. */ - comp = cal_component_new (); - - e_day_view_get_selected_time_range (day_view, &dtstart, &dtend); - - /* We add the event locally and start editing it. When we get the - "update_event" callback from the server, we basically ignore it. - If we were to wait for the "update_event" callback it wouldn't be - as responsive and we may lose a few keystrokes. */ - e_day_view_add_event (comp, dtstart, dtend, day_view); - e_day_view_check_layout (day_view); - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - - cal_component_get_uid (comp, &uid); - if (e_day_view_find_event_from_uid (day_view, uid, &day, &event_num)) { - e_day_view_start_editing_event (day_view, day, event_num, - initial_text); - day_view->editing_new_event = TRUE; - } else { - g_warning ("Couldn't find event to start editing.\n"); - } - - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_key_press(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - return TRUE; -} - - -static void -e_day_view_cursor_key_up_shifted (EDayView *day_view, GdkEventKey *event) -{ - gint *row; - - if (day_view->selection_in_top_canvas) - return; - - if (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) - row = &day_view->selection_start_row; - else - row = &day_view->selection_end_row; - - if (*row == 0) - return; - - *row = *row - 1; - - e_day_view_ensure_rows_visible (day_view, *row, *row); - - e_day_view_normalize_selection (day_view); - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_cursor_key_down_shifted (EDayView *day_view, GdkEventKey *event) -{ - gint *row; - - if (day_view->selection_in_top_canvas) - return; - - if (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) - row = &day_view->selection_start_row; - else - row = &day_view->selection_end_row; - - if (*row >= day_view->rows - 1) - return; - - *row = *row + 1; - - e_day_view_ensure_rows_visible (day_view, *row, *row); - - e_day_view_normalize_selection (day_view); - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_cursor_key_left_shifted (EDayView *day_view, GdkEventKey *event) -{ - gint *day; - - if (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) - day = &day_view->selection_start_day; - else - day = &day_view->selection_end_day; - - if (*day == 0) - return; - - *day = *day - 1; - - e_day_view_normalize_selection (day_view); - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_cursor_key_right_shifted (EDayView *day_view, GdkEventKey *event) -{ - gint *day; - - if (day_view->selection_drag_pos == E_DAY_VIEW_DRAG_START) - day = &day_view->selection_start_day; - else - day = &day_view->selection_end_day; - - if (*day >= day_view->days_shown - 1) - return; - - *day = *day + 1; - - e_day_view_normalize_selection (day_view); - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_cursor_key_up (EDayView *day_view, GdkEventKey *event) -{ - if (day_view->selection_start_day == -1) { - day_view->selection_start_day = 0; - day_view->selection_start_row = 0; - } - day_view->selection_end_day = day_view->selection_start_day; - - if (day_view->selection_in_top_canvas) { - return; - } else if (day_view->selection_start_row == 0) { - day_view->selection_in_top_canvas = TRUE; - day_view->selection_start_row = -1; - } else { - day_view->selection_start_row--; - } - day_view->selection_end_row = day_view->selection_start_row; - - if (!day_view->selection_in_top_canvas) - e_day_view_ensure_rows_visible (day_view, - day_view->selection_start_row, - day_view->selection_end_row); - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_cursor_key_down (EDayView *day_view, GdkEventKey *event) -{ - if (day_view->selection_start_day == -1) { - day_view->selection_start_day = 0; - day_view->selection_start_row = 0; - } - day_view->selection_end_day = day_view->selection_start_day; - - if (day_view->selection_in_top_canvas) { - day_view->selection_in_top_canvas = FALSE; - day_view->selection_start_row = 0; - } else if (day_view->selection_start_row >= day_view->rows - 1) { - return; - } else { - day_view->selection_start_row++; - } - day_view->selection_end_row = day_view->selection_start_row; - - if (!day_view->selection_in_top_canvas) - e_day_view_ensure_rows_visible (day_view, - day_view->selection_start_row, - day_view->selection_end_row); - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); -} - - -static void -e_day_view_cursor_key_left (EDayView *day_view, GdkEventKey *event) -{ - if (day_view->selection_start_day == 0) { - gnome_calendar_previous (day_view->calendar); - } else { - day_view->selection_start_day--; - day_view->selection_end_day--; - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - } -} - - -static void -e_day_view_cursor_key_right (EDayView *day_view, GdkEventKey *event) -{ - if (day_view->selection_end_day == day_view->days_shown - 1) { - gnome_calendar_next (day_view->calendar); - } else { - day_view->selection_start_day++; - day_view->selection_end_day++; - - e_day_view_update_calendar_selection_time (day_view); - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); - } -} - - -static gboolean -e_day_view_check_if_new_event_fits (EDayView *day_view) -{ - gint day, start_row, end_row, row; - - day = day_view->selection_start_day; - start_row = day_view->selection_start_row; - end_row = day_view->selection_end_row; - - /* Long events always fit, since we keep adding rows to the top - canvas. */ - if (day != day_view->selection_end_day) - return FALSE; - if (start_row == 0 && end_row == day_view->rows) - return FALSE; - - /* If any of the rows already have E_DAY_VIEW_MAX_COLUMNS columns, - return FALSE. */ - for (row = start_row; row <= end_row; row++) { - if (day_view->cols_per_row[day][row] >= E_DAY_VIEW_MAX_COLUMNS) - return FALSE; - } - - return TRUE; -} - - -static void -e_day_view_ensure_rows_visible (EDayView *day_view, - gint start_row, - gint end_row) -{ - GtkAdjustment *adj; - gfloat value, min_value, max_value; - - adj = GTK_LAYOUT (day_view->main_canvas)->vadjustment; - - value = adj->value; - - min_value = (end_row + 1) * day_view->row_height - adj->page_size; - if (value < min_value) - value = min_value; - - max_value = start_row * day_view->row_height; - if (value > max_value) - value = max_value; - - if (value != adj->value) { - adj->value = value; - gtk_adjustment_value_changed (adj); - } -} - - -static void -e_day_view_start_editing_event (EDayView *day_view, - gint day, - gint event_num, - gchar *initial_text) -{ - EDayViewEvent *event; - ETextEventProcessor *event_processor = NULL; - ETextEventProcessorCommand command; - - /* If we are already editing the event, just return. */ - if (day == day_view->editing_event_day - && event_num == day_view->editing_event_num) - return; - - if (day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - } else { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - } - - /* If the event is not shown, don't try to edit it. */ - if (!event->canvas_item) - return; - - /* We must grab the focus before setting the initial text, since - grabbing the focus will result in a call to - e_day_view_on_editing_started(), which will reset the text to get - rid of the start and end times. */ - e_canvas_item_grab_focus (event->canvas_item); - - if (initial_text) { - gnome_canvas_item_set (event->canvas_item, - "text", initial_text, - NULL); - } - - /* Try to move the cursor to the end of the text. */ - gtk_object_get (GTK_OBJECT (event->canvas_item), - "event_processor", &event_processor, - NULL); - if (event_processor) { - command.action = E_TEP_MOVE; - command.position = E_TEP_END_OF_BUFFER; - gtk_signal_emit_by_name (GTK_OBJECT (event_processor), - "command", &command); - } -} - - -/* This stops the current edit. If accept is TRUE the event summary is update, - else the edit is cancelled. */ -static void -e_day_view_stop_editing_event (EDayView *day_view) -{ - GtkWidget *toplevel; - - /* Check we are editing an event. */ - if (day_view->editing_event_day == -1) - return; - - /* Set focus to the toplevel so the item loses focus. */ - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (day_view)); - if (toplevel && GTK_IS_WINDOW (toplevel)) - gtk_window_set_focus (GTK_WINDOW (toplevel), NULL); -} - - -static gboolean -e_day_view_on_text_item_event (GnomeCanvasItem *item, - GdkEvent *event, - EDayView *day_view) -{ - switch (event->type) { - case GDK_KEY_PRESS: - if (event && event->key.keyval == GDK_Return) { - /* We set the keyboard focus to the EDayView, so the - EText item loses it and stops the edit. */ - gtk_widget_grab_focus (GTK_WIDGET (day_view)); - - /* Stop the signal last or we will also stop any - other events getting to the EText item. */ - gtk_signal_emit_stop_by_name (GTK_OBJECT (item), - "event"); - return TRUE; - } - break; - case GDK_BUTTON_PRESS: - case GDK_BUTTON_RELEASE: - /* Only let the EText handle the event while editing. */ - if (!E_TEXT (item)->editing) - gtk_signal_emit_stop_by_name (GTK_OBJECT (item), - "event"); - break; - case GDK_FOCUS_CHANGE: - if (event->focus_change.in) - e_day_view_on_editing_started (day_view, item); - else - e_day_view_on_editing_stopped (day_view, item); - - return FALSE; - default: - break; - } - - return FALSE; -} - - -static void -e_day_view_on_editing_started (EDayView *day_view, - GnomeCanvasItem *item) -{ - gint day, event_num; - - if (!e_day_view_find_event_from_item (day_view, item, - &day, &event_num)) - return; - -#if 0 - g_print ("In e_day_view_on_editing_started Day:%i Event:%i\n", - day, event_num); -#endif - - /* FIXME: This is a temporary workaround for a bug which seems to stop - us getting focus_out signals. It is not a complete fix since if we - don't get focus_out signals we don't save the appointment text so - this may be lost. */ - if (day_view->editing_event_day == day - && day_view->editing_event_num == event_num) - return; - - day_view->editing_event_day = day; - day_view->editing_event_num = event_num; - - if (day == E_DAY_VIEW_LONG_EVENT) { - e_day_view_reshape_long_event (day_view, event_num); - } else { - day_view->resize_bars_event_day = day; - day_view->resize_bars_event_num = event_num; - e_day_view_update_event_label (day_view, day, event_num); - e_day_view_reshape_main_canvas_resize_bars (day_view); - } -} - - -static void -e_day_view_on_editing_stopped (EDayView *day_view, - GnomeCanvasItem *item) -{ - gint day, event_num; - gboolean editing_long_event = FALSE; - EDayViewEvent *event; - gchar *text = NULL; - CalComponentText summary; - const char *uid; - - /* Note: the item we are passed here isn't reliable, so we just stop - the edit of whatever item was being edited. We also receive this - event twice for some reason. */ - day = day_view->editing_event_day; - event_num = day_view->editing_event_num; - - /* If no item is being edited, just return. */ - if (day == -1) - return; - -#if 0 - g_print ("In e_day_view_on_editing_stopped Day:%i Event:%i\n", - day, event_num); -#endif - - if (day == E_DAY_VIEW_LONG_EVENT) { - editing_long_event = TRUE; - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - } else { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* Hide the horizontal bars. */ - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - } - - /* Reset the edit fields. */ - day_view->editing_event_day = -1; - day_view->editing_event_num = -1; - day_view->editing_new_event = FALSE; - - day_view->resize_bars_event_day = -1; - day_view->resize_bars_event_num = -1; - - /* Check that the event is still valid. */ - cal_component_get_uid (event->comp, &uid); - if (!uid) - return; - - gtk_object_get (GTK_OBJECT (event->canvas_item), - "text", &text, - NULL); - - /* Only update the summary if necessary. */ - cal_component_get_summary (event->comp, &summary); - if (text && summary.value && !strcmp (text, summary.value)) { - g_free (text); - - if (day == E_DAY_VIEW_LONG_EVENT) - e_day_view_reshape_long_event (day_view, event_num); - return; - } - - cal_component_set_summary (event->comp, &summary); - g_free (text); - - if (!cal_client_update_object (day_view->calendar->client, event->comp)) - g_message ("e_day_view_on_editing_stopped(): Could not update the object!"); -} - - -/* FIXME: It is possible that we may produce an invalid time due to daylight - saving times (i.e. when clocks go forward there is a range of time which - is not valid). I don't know the best way to handle daylight saving time. */ -static time_t -e_day_view_convert_grid_position_to_time (EDayView *day_view, - gint col, - gint row) -{ - struct tm *tmp_tm; - time_t val; - gint minutes; - - /* Calulate the number of minutes since the start of the day. */ - minutes = day_view->first_hour_shown * 60 - + day_view->first_minute_shown - + row * day_view->mins_per_row; - - /* A special case for midnight, where we can use the start of the - next day. */ - if (minutes == 60 * 24) - return day_view->day_starts[col + 1]; - - /* We convert the start of the day to a struct tm, then set the - hour and minute, then convert it back to a time_t. */ - tmp_tm = localtime (&day_view->day_starts[col]); - - tmp_tm->tm_hour = minutes / 60; - tmp_tm->tm_min = minutes % 60; - tmp_tm->tm_isdst = -1; - - val = mktime (tmp_tm); - return val; -} - - -static gboolean -e_day_view_convert_time_to_grid_position (EDayView *day_view, - time_t time, - gint *col, - gint *row) -{ - struct tm *tmp_tm; - gint day, minutes; - - *col = *row = 0; - - if (time < day_view->lower || time >= day_view->upper) - return FALSE; - - /* We can find the column easily using the day_starts array. */ - for (day = 1; day <= day_view->days_shown; day++) { - if (time < day_view->day_starts[day]) { - *col = day - 1; - break; - } - } - - /* To find the row we need to convert the time to a struct tm, - calculate the offset in minutes from the top of the display and - divide it by the mins per row setting. */ - tmp_tm = localtime (&time); - minutes = tmp_tm->tm_hour * 60 + tmp_tm->tm_min; - minutes -= day_view->first_hour_shown * 60 - + day_view->first_minute_shown; - - *row = minutes / day_view->mins_per_row; - - if (*row < 0 || *row >= day_view->rows) - return FALSE; - - return TRUE; -} - - -/* This starts or stops auto-scrolling when dragging a selection or resizing - an event. */ -void -e_day_view_check_auto_scroll (EDayView *day_view, - gint event_x, - gint event_y) -{ - day_view->last_mouse_x = event_x; - day_view->last_mouse_y = event_y; - - if (event_y < E_DAY_VIEW_AUTO_SCROLL_OFFSET) - e_day_view_start_auto_scroll (day_view, TRUE); - else if (event_y >= day_view->main_canvas->allocation.height - - E_DAY_VIEW_AUTO_SCROLL_OFFSET) - e_day_view_start_auto_scroll (day_view, FALSE); - else - e_day_view_stop_auto_scroll (day_view); -} - - -static void -e_day_view_start_auto_scroll (EDayView *day_view, - gboolean scroll_up) -{ - if (day_view->auto_scroll_timeout_id == 0) { - day_view->auto_scroll_timeout_id = g_timeout_add (E_DAY_VIEW_AUTO_SCROLL_TIMEOUT, e_day_view_auto_scroll_handler, day_view); - day_view->auto_scroll_delay = E_DAY_VIEW_AUTO_SCROLL_DELAY; - } - day_view->auto_scroll_up = scroll_up; -} - - -void -e_day_view_stop_auto_scroll (EDayView *day_view) -{ - if (day_view->auto_scroll_timeout_id != 0) { - gtk_timeout_remove (day_view->auto_scroll_timeout_id); - day_view->auto_scroll_timeout_id = 0; - } -} - - -static gboolean -e_day_view_auto_scroll_handler (gpointer data) -{ - EDayView *day_view; - EDayViewPosition pos; - gint scroll_x, scroll_y, new_scroll_y, canvas_x, canvas_y, row, day; - GtkAdjustment *adj; - - g_return_val_if_fail (E_IS_DAY_VIEW (data), FALSE); - - day_view = E_DAY_VIEW (data); - - GDK_THREADS_ENTER (); - - if (day_view->auto_scroll_delay > 0) { - day_view->auto_scroll_delay--; - GDK_THREADS_LEAVE (); - return TRUE; - } - - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (day_view->main_canvas), - &scroll_x, &scroll_y); - - adj = GTK_LAYOUT (day_view->main_canvas)->vadjustment; - - if (day_view->auto_scroll_up) - new_scroll_y = MAX (scroll_y - adj->step_increment, 0); - else - new_scroll_y = MIN (scroll_y + adj->step_increment, - adj->upper - adj->page_size); - - if (new_scroll_y != scroll_y) { - /* NOTE: This reduces flicker, but only works if we don't use - canvas items which have X windows. */ - gtk_layout_freeze (GTK_LAYOUT (day_view->main_canvas)); - - gnome_canvas_scroll_to (GNOME_CANVAS (day_view->main_canvas), - scroll_x, new_scroll_y); - - gtk_layout_thaw (GTK_LAYOUT (day_view->main_canvas)); - } - - canvas_x = day_view->last_mouse_x + scroll_x; - canvas_y = day_view->last_mouse_y + new_scroll_y; - - /* The last_mouse_x position is set to -1 when we are selecting using - the time column. In this case we set canvas_x to 0 and we ignore - the resulting day. */ - if (day_view->last_mouse_x == -1) - canvas_x = 0; - - /* Update the selection/resize/drag if necessary. */ - pos = e_day_view_convert_position_in_main_canvas (day_view, - canvas_x, canvas_y, - &day, &row, NULL); - - if (day_view->last_mouse_x == -1) - day = -1; - - if (pos != E_DAY_VIEW_POS_OUTSIDE) { - if (day_view->selection_is_being_dragged) { - e_day_view_update_selection (day_view, day, row); - } else if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE) { - e_day_view_update_resize (day_view, row); - } else if (day_view->drag_item->object.flags - & GNOME_CANVAS_ITEM_VISIBLE) { - e_day_view_update_main_canvas_drag (day_view, row, - day); - } - } - - GDK_THREADS_LEAVE (); - return TRUE; -} - - -gboolean -e_day_view_get_event_position (EDayView *day_view, - gint day, - gint event_num, - gint *item_x, - gint *item_y, - gint *item_w, - gint *item_h) -{ - EDayViewEvent *event; - gint start_row, end_row, cols_in_row, start_col, num_columns; - - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* If the event is flagged as not displayed, return FALSE. */ - if (event->num_columns == 0) - return FALSE; - - start_row = event->start_minute / day_view->mins_per_row; - end_row = (event->end_minute - 1) / day_view->mins_per_row; - cols_in_row = day_view->cols_per_row[day][start_row]; - start_col = event->start_row_or_col; - num_columns = event->num_columns; - - if (cols_in_row == 0) - return FALSE; - - /* If the event is being resize, use the resize position. */ - if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE - && day_view->resize_event_day == day - && day_view->resize_event_num == event_num) { - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_TOP_EDGE) - start_row = day_view->resize_start_row; - else if (day_view->resize_drag_pos == E_DAY_VIEW_POS_BOTTOM_EDGE) - end_row = day_view->resize_end_row; - } - - *item_x = day_view->day_offsets[day] + day_view->day_widths[day] * start_col / cols_in_row; - *item_w = day_view->day_widths[day] * num_columns / cols_in_row - E_DAY_VIEW_GAP_WIDTH; - *item_w = MAX (*item_w, 0); - *item_y = start_row * day_view->row_height; - *item_h = (end_row - start_row + 1) * day_view->row_height; - - return TRUE; -} - - -gboolean -e_day_view_get_long_event_position (EDayView *day_view, - gint event_num, - gint *start_day, - gint *end_day, - gint *item_x, - gint *item_y, - gint *item_w, - gint *item_h) -{ - EDayViewEvent *event; - - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - /* If the event is flagged as not displayed, return FALSE. */ - if (event->num_columns == 0) - return FALSE; - - if (!e_day_view_find_long_event_days (day_view, event, - start_day, end_day)) - return FALSE; - - /* If the event is being resize, use the resize position. */ - if (day_view->resize_drag_pos != E_DAY_VIEW_POS_NONE - && day_view->resize_event_day == E_DAY_VIEW_LONG_EVENT - && day_view->resize_event_num == event_num) { - if (day_view->resize_drag_pos == E_DAY_VIEW_POS_LEFT_EDGE) - *start_day = day_view->resize_start_row; - else if (day_view->resize_drag_pos == E_DAY_VIEW_POS_RIGHT_EDGE) - *end_day = day_view->resize_end_row; - } - - *item_x = day_view->day_offsets[*start_day] + E_DAY_VIEW_BAR_WIDTH; - *item_w = day_view->day_offsets[*end_day + 1] - *item_x - - E_DAY_VIEW_GAP_WIDTH; - *item_w = MAX (*item_w, 0); - *item_y = (event->start_row_or_col + 1) * day_view->top_row_height; - *item_h = day_view->top_row_height - E_DAY_VIEW_TOP_CANVAS_Y_GAP; - return TRUE; -} - - -/* Converts a position within the entire top canvas to a day & event and - a place within the event if appropriate. If event_num_return is NULL, it - simply returns the grid position without trying to find the event. */ -static EDayViewPosition -e_day_view_convert_position_in_top_canvas (EDayView *day_view, - gint x, - gint y, - gint *day_return, - gint *event_num_return) -{ - EDayViewEvent *event; - gint day, row, col; - gint event_num, start_day, end_day, item_x, item_y, item_w, item_h; - - *day_return = -1; - if (event_num_return) - *event_num_return = -1; - - if (x < 0 || y < 0) - return E_DAY_VIEW_POS_OUTSIDE; - - row = y / day_view->top_row_height - 1; - - day = -1; - for (col = 1; col <= day_view->days_shown; col++) { - if (x < day_view->day_offsets[col]) { - day = col - 1; - break; - } - } - if (day == -1) - return E_DAY_VIEW_POS_OUTSIDE; - - *day_return = day; - - /* If only the grid position is wanted, return. */ - if (event_num_return == NULL) - return E_DAY_VIEW_POS_NONE; - - for (event_num = 0; event_num < day_view->long_events->len; - event_num++) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - - if (event->start_row_or_col != row) - continue; - - if (!e_day_view_get_long_event_position (day_view, event_num, - &start_day, &end_day, - &item_x, &item_y, - &item_w, &item_h)) - continue; - - if (x < item_x) - continue; - - if (x >= item_x + item_w) - continue; - - *event_num_return = event_num; - - if (x < item_x + E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH - + E_DAY_VIEW_LONG_EVENT_X_PAD) - return E_DAY_VIEW_POS_LEFT_EDGE; - - if (x >= item_x + item_w - E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH - - E_DAY_VIEW_LONG_EVENT_X_PAD) - return E_DAY_VIEW_POS_RIGHT_EDGE; - - return E_DAY_VIEW_POS_EVENT; - } - - return E_DAY_VIEW_POS_NONE; -} - - -/* Converts a position within the entire main canvas to a day, row, event and - a place within the event if appropriate. If event_num_return is NULL, it - simply returns the grid position without trying to find the event. */ -static EDayViewPosition -e_day_view_convert_position_in_main_canvas (EDayView *day_view, - gint x, - gint y, - gint *day_return, - gint *row_return, - gint *event_num_return) -{ - gint day, row, col, event_num; - gint item_x, item_y, item_w, item_h; - - *day_return = -1; - *row_return = -1; - if (event_num_return) - *event_num_return = -1; - - /* Check the position is inside the canvas, and determine the day - and row. */ - if (x < 0 || y < 0) - return E_DAY_VIEW_POS_OUTSIDE; - - row = y / day_view->row_height; - if (row >= day_view->rows) - return E_DAY_VIEW_POS_OUTSIDE; - - day = -1; - for (col = 1; col <= day_view->days_shown; col++) { - if (x < day_view->day_offsets[col]) { - day = col - 1; - break; - } - } - if (day == -1) - return E_DAY_VIEW_POS_OUTSIDE; - - *day_return = day; - *row_return = row; - - /* If only the grid position is wanted, return. */ - if (event_num_return == NULL) - return E_DAY_VIEW_POS_NONE; - - /* Check the selected item first, since the horizontal resizing bars - may be above other events. */ - if (day_view->resize_bars_event_day == day) { - if (e_day_view_get_event_position (day_view, day, - day_view->resize_bars_event_num, - &item_x, &item_y, - &item_w, &item_h)) { - if (x >= item_x && x < item_x + item_w) { - *event_num_return = day_view->resize_bars_event_num; - if (y >= item_y - E_DAY_VIEW_BAR_HEIGHT - && y < item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT) - return E_DAY_VIEW_POS_TOP_EDGE; - if (y >= item_y + item_h - E_DAY_VIEW_EVENT_BORDER_HEIGHT - && y < item_y + item_h + E_DAY_VIEW_BAR_HEIGHT) - return E_DAY_VIEW_POS_BOTTOM_EDGE; - } - } - } - - /* Try to find the event at the found position. */ - *event_num_return = -1; - for (event_num = 0; event_num < day_view->events[day]->len; - event_num++) { - if (!e_day_view_get_event_position (day_view, day, event_num, - &item_x, &item_y, - &item_w, &item_h)) - continue; - - if (x < item_x || x >= item_x + item_w - || y < item_y || y >= item_y + item_h) - continue; - - *event_num_return = event_num; - - if (x < item_x + E_DAY_VIEW_BAR_WIDTH) - return E_DAY_VIEW_POS_LEFT_EDGE; - - if (y < item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT - + E_DAY_VIEW_EVENT_Y_PAD) - return E_DAY_VIEW_POS_TOP_EDGE; - - if (y >= item_y + item_h - E_DAY_VIEW_EVENT_BORDER_HEIGHT - - E_DAY_VIEW_EVENT_Y_PAD) - return E_DAY_VIEW_POS_BOTTOM_EDGE; - - return E_DAY_VIEW_POS_EVENT; - } - - return E_DAY_VIEW_POS_NONE; -} - - -static gint -e_day_view_on_top_canvas_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - EDayView *day_view) -{ - gint scroll_x, scroll_y; - - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - day_view->drag_event_x = x + scroll_x; - day_view->drag_event_y = y + scroll_y; - - e_day_view_reshape_top_canvas_drag_item (day_view); - - return TRUE; -} - - -static void -e_day_view_reshape_top_canvas_drag_item (EDayView *day_view) -{ - EDayViewPosition pos; - gint x, y, day; - - /* Calculate the day & start row of the event being dragged, using - the current mouse position. */ - x = day_view->drag_event_x; - y = day_view->drag_event_y; - pos = e_day_view_convert_position_in_top_canvas (day_view, x, y, - &day, NULL); - /* This shouldn't really happen in a drag. */ - if (pos == E_DAY_VIEW_POS_OUTSIDE) - return; - - if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT) - day -= day_view->drag_event_offset; - day = MAX (day, 0); - - e_day_view_update_top_canvas_drag (day_view, day); -} - - -static void -e_day_view_update_top_canvas_drag (EDayView *day_view, - gint day) -{ - EDayViewEvent *event = NULL; - gint row, num_days, start_day, end_day; - gdouble item_x, item_y, item_w, item_h; - GdkFont *font; - gchar *text; - - - /* Calculate the event's position. If the event is in the same - position we started in, we use the same columns. */ - row = day_view->rows_in_top_display + 1; - num_days = 1; - - if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - day_view->drag_event_num); - row = event->start_row_or_col + 1; - - if (!e_day_view_find_long_event_days (day_view, event, - &start_day, &end_day)) - return; - - num_days = end_day - start_day + 1; - - /* Make sure we don't go off the screen. */ - day = MIN (day, day_view->days_shown - num_days); - - } else if (day_view->drag_event_day != -1) { - event = &g_array_index (day_view->events[day_view->drag_event_day], - EDayViewEvent, - day_view->drag_event_num); - } - - /* If the position hasn't changed, just return. */ - if (day_view->drag_last_day == day - && (day_view->drag_long_event_item->object.flags - & GNOME_CANVAS_ITEM_VISIBLE)) - return; - - day_view->drag_last_day = day; - - - item_x = day_view->day_offsets[day] + E_DAY_VIEW_BAR_WIDTH; - item_w = day_view->day_offsets[day + num_days] - item_x - - E_DAY_VIEW_GAP_WIDTH; - item_y = row * day_view->top_row_height; - item_h = day_view->top_row_height - E_DAY_VIEW_TOP_CANVAS_Y_GAP; - - - /* Set the positions of the event & associated items. */ - gnome_canvas_item_set (day_view->drag_long_event_rect_item, - "x1", item_x, - "y1", item_y, - "x2", item_x + item_w - 1, - "y2", item_y + item_h - 1, - NULL); - - font = GTK_WIDGET (day_view)->style->font; - gnome_canvas_item_set (day_view->drag_long_event_item, - "font_gdk", font, - "clip_width", item_w - (E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH + E_DAY_VIEW_LONG_EVENT_X_PAD) * 2, - "clip_height", item_h - (E_DAY_VIEW_LONG_EVENT_BORDER_HEIGHT + E_DAY_VIEW_LONG_EVENT_Y_PAD) * 2, - NULL); - e_canvas_item_move_absolute(day_view->drag_long_event_item, - item_x + E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH + E_DAY_VIEW_LONG_EVENT_X_PAD, - item_y + E_DAY_VIEW_LONG_EVENT_BORDER_HEIGHT + E_DAY_VIEW_LONG_EVENT_Y_PAD); - - if (!(day_view->drag_long_event_rect_item->object.flags & GNOME_CANVAS_ITEM_VISIBLE)) { - gnome_canvas_item_raise_to_top (day_view->drag_long_event_rect_item); - gnome_canvas_item_show (day_view->drag_long_event_rect_item); - } - - /* Set the text, if necessary. We don't want to set the text every - time it moves, so we check if it is currently invisible and only - set the text then. */ - if (!(day_view->drag_long_event_item->object.flags - & GNOME_CANVAS_ITEM_VISIBLE)) { - CalComponentText summary; - - cal_component_get_summary (event->comp, &summary); - if (event) { - cal_component_get_summary (event->comp, &summary); - text = g_strdup (summary.value); - } else { - text = NULL; - } - - gnome_canvas_item_set (day_view->drag_long_event_item, - "text", text ? text : "", - NULL); - gnome_canvas_item_raise_to_top (day_view->drag_long_event_item); - gnome_canvas_item_show (day_view->drag_long_event_item); - - g_free (text); - } -} - - -static gint -e_day_view_on_main_canvas_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time, - EDayView *day_view) -{ - gint scroll_x, scroll_y; - - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - day_view->drag_event_x = x + scroll_x; - day_view->drag_event_y = y + scroll_y; - - e_day_view_reshape_main_canvas_drag_item (day_view); - e_day_view_reshape_main_canvas_resize_bars (day_view); - - e_day_view_check_auto_scroll (day_view, x, y); - - return TRUE; -} - - -static void -e_day_view_reshape_main_canvas_drag_item (EDayView *day_view) -{ - EDayViewPosition pos; - gint x, y, day, row; - - /* Calculate the day & start row of the event being dragged, using - the current mouse position. */ - x = day_view->drag_event_x; - y = day_view->drag_event_y; - pos = e_day_view_convert_position_in_main_canvas (day_view, x, y, - &day, &row, NULL); - /* This shouldn't really happen in a drag. */ - if (pos == E_DAY_VIEW_POS_OUTSIDE) - return; - - if (day_view->drag_event_day != -1 - && day_view->drag_event_day != E_DAY_VIEW_LONG_EVENT) - row -= day_view->drag_event_offset; - row = MAX (row, 0); - - e_day_view_update_main_canvas_drag (day_view, row, day); -} - - -static void -e_day_view_update_main_canvas_drag (EDayView *day_view, - gint row, - gint day) -{ - EDayViewEvent *event = NULL; - gint cols_in_row, start_col, num_columns, num_rows, start_row, end_row; - gdouble item_x, item_y, item_w, item_h; - GdkFont *font; - gchar *text; - - /* If the position hasn't changed, just return. */ - if (day_view->drag_last_day == day - && day_view->drag_last_row == row - && (day_view->drag_item->object.flags & GNOME_CANVAS_ITEM_VISIBLE)) - return; - - day_view->drag_last_day = day; - day_view->drag_last_row = row; - - /* Calculate the event's position. If the event is in the same - position we started in, we use the same columns. */ - cols_in_row = 1; - start_col = 0; - num_columns = 1; - num_rows = 1; - - if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - day_view->drag_event_num); - } else if (day_view->drag_event_day != -1) { - event = &g_array_index (day_view->events[day_view->drag_event_day], - EDayViewEvent, - day_view->drag_event_num); - start_row = event->start_minute / day_view->mins_per_row; - end_row = (event->end_minute - 1) / day_view->mins_per_row; - num_rows = end_row - start_row + 1; - } - - if (day_view->drag_event_day == day && start_row == row) { - cols_in_row = day_view->cols_per_row[day][row]; - start_col = event->start_row_or_col; - num_columns = event->num_columns; - } - - item_x = day_view->day_offsets[day] - + day_view->day_widths[day] * start_col / cols_in_row; - item_w = day_view->day_widths[day] * num_columns / cols_in_row - - E_DAY_VIEW_GAP_WIDTH; - item_y = row * day_view->row_height; - item_h = num_rows * day_view->row_height; - - /* Set the positions of the event & associated items. */ - gnome_canvas_item_set (day_view->drag_rect_item, - "x1", item_x + E_DAY_VIEW_BAR_WIDTH - 1, - "y1", item_y, - "x2", item_x + item_w - 1, - "y2", item_y + item_h - 1, - NULL); - - gnome_canvas_item_set (day_view->drag_bar_item, - "x1", item_x, - "y1", item_y, - "x2", item_x + E_DAY_VIEW_BAR_WIDTH - 1, - "y2", item_y + item_h - 1, - NULL); - - font = GTK_WIDGET (day_view)->style->font; - gnome_canvas_item_set (day_view->drag_item, - "font_gdk", font, - "clip_width", item_w - E_DAY_VIEW_BAR_WIDTH - E_DAY_VIEW_EVENT_X_PAD * 2, - "clip_height", item_h - (E_DAY_VIEW_EVENT_BORDER_HEIGHT + E_DAY_VIEW_EVENT_Y_PAD) * 2, - NULL); - e_canvas_item_move_absolute(event->canvas_item, - item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_EVENT_X_PAD, - item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT + E_DAY_VIEW_EVENT_Y_PAD); - - if (!(day_view->drag_bar_item->object.flags & GNOME_CANVAS_ITEM_VISIBLE)) { - gnome_canvas_item_raise_to_top (day_view->drag_bar_item); - gnome_canvas_item_show (day_view->drag_bar_item); - } - - if (!(day_view->drag_rect_item->object.flags & GNOME_CANVAS_ITEM_VISIBLE)) { - gnome_canvas_item_raise_to_top (day_view->drag_rect_item); - gnome_canvas_item_show (day_view->drag_rect_item); - } - - /* Set the text, if necessary. We don't want to set the text every - time it moves, so we check if it is currently invisible and only - set the text then. */ - if (!(day_view->drag_item->object.flags & GNOME_CANVAS_ITEM_VISIBLE)) { - CalComponentText summary; - - if (event) { - cal_component_get_summary (event->comp, &summary); - text = g_strdup (summary.value); - } else { - text = NULL; - } - - gnome_canvas_item_set (day_view->drag_item, - "text", text ? text : "", - NULL); - gnome_canvas_item_raise_to_top (day_view->drag_item); - gnome_canvas_item_show (day_view->drag_item); - - g_free (text); - } -} - - -static void -e_day_view_on_top_canvas_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time, - EDayView *day_view) -{ - day_view->drag_last_day = -1; - - gnome_canvas_item_hide (day_view->drag_long_event_rect_item); - gnome_canvas_item_hide (day_view->drag_long_event_item); -} - - -static void -e_day_view_on_main_canvas_drag_leave (GtkWidget *widget, - GdkDragContext *context, - guint time, - EDayView *day_view) -{ - day_view->drag_last_day = -1; - - e_day_view_stop_auto_scroll (day_view); - - gnome_canvas_item_hide (day_view->drag_rect_item); - gnome_canvas_item_hide (day_view->drag_bar_item); - gnome_canvas_item_hide (day_view->drag_item); - - /* Hide the resize bars if they are being used in the drag. */ - if (day_view->drag_event_day == day_view->resize_bars_event_day - && day_view->drag_event_num == day_view->resize_bars_event_num) { - gnome_canvas_item_hide (day_view->main_canvas_top_resize_bar_item); - gnome_canvas_item_hide (day_view->main_canvas_bottom_resize_bar_item); - } -} - - -static void -e_day_view_on_drag_begin (GtkWidget *widget, - GdkDragContext *context, - EDayView *day_view) -{ - EDayViewEvent *event; - gint day, event_num; - - day = day_view->drag_event_day; - event_num = day_view->drag_event_num; - - /* These should both be set. */ - g_return_if_fail (day != -1); - g_return_if_fail (event_num != -1); - - if (day == E_DAY_VIEW_LONG_EVENT) - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - else - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - - /* Hide the text item, since it will be shown in the special drag - items. */ - gnome_canvas_item_hide (event->canvas_item); -} - - -static void -e_day_view_on_drag_end (GtkWidget *widget, - GdkDragContext *context, - EDayView *day_view) -{ - EDayViewEvent *event; - gint day, event_num; - - day = day_view->drag_event_day; - event_num = day_view->drag_event_num; - - /* If the calendar has already been updated in drag_data_received() - we just return. */ - if (day == -1 || event_num == -1) - return; - - if (day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - event_num); - gtk_widget_queue_draw (day_view->top_canvas); - } else { - event = &g_array_index (day_view->events[day], EDayViewEvent, - event_num); - gtk_widget_queue_draw (day_view->main_canvas); - } - - /* Show the text item again. */ - gnome_canvas_item_show (event->canvas_item); - - day_view->drag_event_day = -1; - day_view->drag_event_num = -1; -} - - -static void -e_day_view_on_drag_data_get (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint time, - EDayView *day_view) -{ - EDayViewEvent *event; - gint day, event_num; - const char *event_uid; - - day = day_view->drag_event_day; - event_num = day_view->drag_event_num; - - /* These should both be set. */ - g_return_if_fail (day != -1); - g_return_if_fail (event_num != -1); - - if (day == E_DAY_VIEW_LONG_EVENT) - event = &g_array_index (day_view->long_events, - EDayViewEvent, event_num); - else - event = &g_array_index (day_view->events[day], - EDayViewEvent, event_num); - - - cal_component_get_uid (event->comp, &event_uid); - - g_return_if_fail (event_uid != NULL); - - if (info == TARGET_CALENDAR_EVENT) { - gtk_selection_data_set (selection_data, selection_data->target, - 8, event_uid, strlen (event_uid)); - } -} - - -static void -e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *data, - guint info, - guint time, - EDayView *day_view) -{ - EDayViewEvent *event=NULL; - EDayViewPosition pos; - gint day, start_day, end_day, num_days; - gint start_offset, end_offset; - gchar *event_uid; - CalComponent *comp; - CalComponentDateTime date; - time_t dt; - - if ((data->length >= 0) && (data->format == 8)) { - pos = e_day_view_convert_position_in_top_canvas (day_view, - x, y, &day, - NULL); - if (pos != E_DAY_VIEW_POS_OUTSIDE) { - const char *uid; - num_days = 1; - start_offset = 0; - end_offset = -1; - - if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - day_view->drag_event_num); - day -= day_view->drag_event_offset; - day = MAX (day, 0); - - e_day_view_find_long_event_days (day_view, - event, - &start_day, - &end_day); - num_days = end_day - start_day + 1; - /* Make sure we don't go off the screen. */ - day = MIN (day, day_view->days_shown - num_days); - - start_offset = event->start_minute; - end_offset = event->end_minute; - } else if (day_view->drag_event_day != -1) { - event = &g_array_index (day_view->events[day_view->drag_event_day], - EDayViewEvent, - day_view->drag_event_num); - } - - event_uid = data->data; - - cal_component_get_uid (event->comp, &uid); - - if (!event_uid || !uid || strcmp (event_uid, uid)) - g_warning ("Unexpected event UID"); - - /* We use a temporary shallow of the comp since we - don't want to change the original comp here. - Otherwise we would not detect that the event's time - had changed in the "update_event" callback. */ - - comp = cal_component_clone (event->comp); - - date.value = g_new (struct icaltimetype, 1); - dt = day_view->day_starts[day] + start_offset * 60; - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtstart (comp, &date); - if (end_offset == -1 || end_offset == 0) - dt = day_view->day_starts[day + num_days]; - else - dt = day_view->day_starts[day + num_days - 1] + end_offset * 60; - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtend (comp, &date); - g_free (date.value); - - gtk_drag_finish (context, TRUE, TRUE, time); - - /* Reset this since it will be invalid. */ - day_view->drag_event_day = -1; - - /* Show the text item again, just in case it hasn't - moved. If we don't do this it may not appear. */ - if (event->canvas_item) - gnome_canvas_item_show (event->canvas_item); - - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_on_top_canvas_drag_data_received(): Could " - "not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - return; - } - } - - gtk_drag_finish (context, FALSE, FALSE, time); -} - - -static void -e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - GtkSelectionData *data, - guint info, - guint time, - EDayView *day_view) -{ - EDayViewEvent *event = NULL; - EDayViewPosition pos; - gint day, row, start_row, end_row, num_rows, scroll_x, scroll_y; - gint start_offset, end_offset; - gchar *event_uid; - CalComponent *comp; - CalComponentDateTime date; - time_t dt; - - gnome_canvas_get_scroll_offsets (GNOME_CANVAS (widget), - &scroll_x, &scroll_y); - x += scroll_x; - y += scroll_y; - - if ((data->length >= 0) && (data->format == 8)) { - pos = e_day_view_convert_position_in_main_canvas (day_view, - x, y, &day, - &row, NULL); - if (pos != E_DAY_VIEW_POS_OUTSIDE) { - const char *uid; - num_rows = 1; - start_offset = 0; - end_offset = 0; - - if (day_view->drag_event_day == E_DAY_VIEW_LONG_EVENT) { - event = &g_array_index (day_view->long_events, EDayViewEvent, - day_view->drag_event_num); - } else if (day_view->drag_event_day != -1) { - event = &g_array_index (day_view->events[day_view->drag_event_day], - EDayViewEvent, - day_view->drag_event_num); - row -= day_view->drag_event_offset; - - /* Calculate time offset from start row. */ - start_row = event->start_minute / day_view->mins_per_row; - end_row = (event->end_minute - 1) / day_view->mins_per_row; - num_rows = end_row - start_row + 1; - - start_offset = event->start_minute % day_view->mins_per_row; - end_offset = event->end_minute % day_view->mins_per_row; - if (end_offset != 0) - end_offset = day_view->mins_per_row - end_offset; - } - - event_uid = data->data; - - cal_component_get_uid (event->comp, &uid); - if (!event_uid || !uid || strcmp (event_uid, uid)) - g_warning ("Unexpected event UID"); - - /* We use a temporary shallow copy of comp since we - don't want to change the original comp here. - Otherwise we would not detect that the event's time - had changed in the "update_event" callback. */ - comp = cal_component_clone (event->comp); - - date.value = g_new (struct icaltimetype, 1); - dt = e_day_view_convert_grid_position_to_time (day_view, day, row) + start_offset * 60; - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtstart (comp, &date); - dt = e_day_view_convert_grid_position_to_time (day_view, day, row + num_rows) - end_offset * 60; - *date.value = icaltimetype_from_timet (dt, FALSE); - cal_component_set_dtend (comp, &date); - g_free (date.value); - - gtk_drag_finish (context, TRUE, TRUE, time); - - /* Reset this since it will be invalid. */ - day_view->drag_event_day = -1; - - /* Show the text item again, just in case it hasn't - moved. If we don't do this it may not appear. */ - if (event->canvas_item) - gnome_canvas_item_show (event->canvas_item); - - if (!cal_client_update_object (day_view->calendar->client, comp)) - g_message ("e_day_view_on_main_canvas_drag_data_received(): " - "Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - return; - } - } - - gtk_drag_finish (context, FALSE, FALSE, time); -} - - - - - diff --git a/calendar/gui/e-day-view.h b/calendar/gui/e-day-view.h deleted file mode 100644 index 955ef0541c..0000000000 --- a/calendar/gui/e-day-view.h +++ /dev/null @@ -1,504 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_DAY_VIEW_H_ -#define _E_DAY_VIEW_H_ - -#include -#include -#include - -#include "gnome-cal.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EDayView - displays the Day & Work-Week views of the calendar. - */ - -/* The maximum number of days shown. We use 7 since we only show 1 week max. */ -#define E_DAY_VIEW_MAX_DAYS 7 - -/* This is used as a special code to signify a long event instead of the day - of a normal event. */ -#define E_DAY_VIEW_LONG_EVENT E_DAY_VIEW_MAX_DAYS - -/* The maximum number of columns of appointments within a day. */ -#define E_DAY_VIEW_MAX_COLUMNS 6 - -/* The width of the gap between appointments. This should be at least - E_DAY_VIEW_BAR_WIDTH, since in the top canvas we use this space to draw - the triangle to represent continuing events. */ -#define E_DAY_VIEW_GAP_WIDTH 8 - -/* The width of the bars down the left of each column and appointment. - This includes the borders on each side of it. */ -#define E_DAY_VIEW_BAR_WIDTH 8 - -/* The height of the horizontal bar above & beneath the selected event. - This includes the borders on the top and bottom. */ -#define E_DAY_VIEW_BAR_HEIGHT 6 - -/* The size of the reminder & recurrence icons, and padding around them. */ -#define E_DAY_VIEW_ICON_WIDTH 16 -#define E_DAY_VIEW_ICON_HEIGHT 16 -#define E_DAY_VIEW_ICON_X_PAD 0 -#define E_DAY_VIEW_ICON_Y_PAD 0 - -/* The size of the border around the event. */ -#define E_DAY_VIEW_EVENT_BORDER_WIDTH 1 -#define E_DAY_VIEW_EVENT_BORDER_HEIGHT 1 - -/* The padding on each side of the event text. */ -#define E_DAY_VIEW_EVENT_X_PAD 2 -#define E_DAY_VIEW_EVENT_Y_PAD 1 - -/* The padding on each side of the event text for events in the top canvas. */ -#define E_DAY_VIEW_LONG_EVENT_X_PAD 2 -#define E_DAY_VIEW_LONG_EVENT_Y_PAD 2 - -/* The size of the border around the long events in the top canvas. */ -#define E_DAY_VIEW_LONG_EVENT_BORDER_WIDTH 1 -#define E_DAY_VIEW_LONG_EVENT_BORDER_HEIGHT 1 - -/* The space between the time and the icon/text in the top canvas. */ -#define E_DAY_VIEW_LONG_EVENT_TIME_X_PAD 2 - -/* The gap between rows in the top canvas. */ -#define E_DAY_VIEW_TOP_CANVAS_Y_GAP 2 - - -/* These are used to specify the type of an appointment. They match those - used in EMeetingTimeSelector. */ -typedef enum -{ - E_DAY_VIEW_BUSY_TENTATIVE = 0, - E_DAY_VIEW_BUSY_OUT_OF_OFFICE = 1, - E_DAY_VIEW_BUSY_BUSY = 2, - - E_DAY_VIEW_BUSY_LAST = 3 -} EDayViewBusyType; - -/* This is used to specify the format used when displaying the dates. - The full format is like 'September 12'. The abbreviated format is like - 'Sep 12'. The short format is like '12'. The actual format used is - determined in style_set(), once we know the font being used. */ -typedef enum -{ - E_DAY_VIEW_DATE_FULL, - E_DAY_VIEW_DATE_ABBREVIATED, - E_DAY_VIEW_DATE_SHORT -} EDayViewDateFormat; - -/* These index our colors array. */ -typedef enum -{ - E_DAY_VIEW_COLOR_BG_WORKING, - E_DAY_VIEW_COLOR_BG_NOT_WORKING, - E_DAY_VIEW_COLOR_EVENT_VBAR, - - E_DAY_VIEW_COLOR_EVENT_BACKGROUND, - E_DAY_VIEW_COLOR_EVENT_BORDER, - - E_DAY_VIEW_COLOR_LAST -} EDayViewColors; - -/* These specify which part of the selection we are dragging, if any. */ -typedef enum -{ - E_DAY_VIEW_DRAG_START, - E_DAY_VIEW_DRAG_END -} EDayViewDragPosition; - -/* Specifies the position of the mouse. */ -typedef enum -{ - E_DAY_VIEW_POS_OUTSIDE, - E_DAY_VIEW_POS_NONE, - E_DAY_VIEW_POS_EVENT, - E_DAY_VIEW_POS_LEFT_EDGE, - E_DAY_VIEW_POS_RIGHT_EDGE, - E_DAY_VIEW_POS_TOP_EDGE, - E_DAY_VIEW_POS_BOTTOM_EDGE -} EDayViewPosition; - -typedef struct _EDayViewEvent EDayViewEvent; -struct _EDayViewEvent { - CalComponent *comp; - time_t start; - time_t end; - guint8 start_row_or_col;/* The start column for normal events, or the - start row for long events. */ - guint8 num_columns; /* 0 indicates not displayed. For long events - this is just 1 if the event is shown. */ - guint16 start_minute; /* Offsets from the start of the display. */ - guint16 end_minute; - GnomeCanvasItem *canvas_item; -}; - - -#define E_DAY_VIEW(obj) GTK_CHECK_CAST (obj, e_day_view_get_type (), EDayView) -#define E_DAY_VIEW_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, e_day_view_get_type (), EDayViewClass) -#define E_IS_DAY_VIEW(obj) GTK_CHECK_TYPE (obj, e_day_view_get_type ()) - - -typedef struct _EDayView EDayView; -typedef struct _EDayViewClass EDayViewClass; - -struct _EDayView -{ - GtkTable table; - - /* The top canvas where the dates and long appointments are shown. */ - GtkWidget *top_canvas; - GnomeCanvasItem *top_canvas_item; - - /* The main canvas where the rest of the appointments are shown. */ - GtkWidget *main_canvas; - GnomeCanvasItem *main_canvas_item; - - /* The canvas displaying the times of the day. */ - GtkWidget *time_canvas; - GnomeCanvasItem *time_canvas_item; - - GtkWidget *vscrollbar; - - /* The calendar we are associated with. */ - GnomeCalendar *calendar; - - /* The start and end of the day shown. */ - time_t lower; - time_t upper; - - /* The number of days we are showing. Usually 1 or 5. Maybe 6 or 7. */ - gint days_shown; - - /* The start of each day & an extra element to hold the last time. */ - time_t day_starts[E_DAY_VIEW_MAX_DAYS + 1]; - - - /* An array of EDayViewEvent elements for the top view and each day. */ - GArray *long_events; - GArray *events[E_DAY_VIEW_MAX_DAYS]; - - /* These are set to FALSE whenever an event in the corresponding array - is changed. Any function that needs the events sorted calls - e_day_view_ensure_events_sorted(). */ - gboolean long_events_sorted; - gboolean events_sorted[E_DAY_VIEW_MAX_DAYS]; - - /* This is TRUE if we need to relayout the events before drawing. */ - gboolean long_events_need_layout; - gboolean need_layout[E_DAY_VIEW_MAX_DAYS]; - - /* This is TRUE if we need to reshape the canvas items, but a full - layout is not necessary. */ - gboolean long_events_need_reshape; - gboolean need_reshape[E_DAY_VIEW_MAX_DAYS]; - - /* The number of minutes per row. 5, 10, 15, 30 or 60. */ - gint mins_per_row; - - /* The number of rows needed, depending on the times shown and the - minutes per row. */ - gint rows; - - /* The height of each row. */ - gint row_height; - - /* The number of rows in the top display. */ - gint rows_in_top_display; - - /* The height of each row in the top canvas. */ - gint top_row_height; - - /* The first and last times shown in the display. The last time isn't - included in the range. Default is 0:00-24:00 */ - gint first_hour_shown; - gint first_minute_shown; - gint last_hour_shown; - gint last_minute_shown; - - /* The start and end of the work day, rounded to the nearest row. */ - gint work_day_start_hour; - gint work_day_start_minute; - gint work_day_end_hour; - gint work_day_end_minute; - - /* This is set to TRUE when the widget is created, so it scrolls to - the start of the working day when first shown. */ - gboolean scroll_to_work_day; - - /* This is the width & offset of each of the day columns in the - display. */ - gint day_widths[E_DAY_VIEW_MAX_DAYS]; - gint day_offsets[E_DAY_VIEW_MAX_DAYS + 1]; - - /* An array holding the number of columns in each row, in each day. */ - guint8 cols_per_row[E_DAY_VIEW_MAX_DAYS][12 * 24]; - - /* Sizes of the various time strings. */ - gint large_hour_widths[24]; - gint small_hour_widths[24]; - gint minute_widths[12]; /* intervals of 5 minutes. */ - gint max_small_hour_width; - gint max_large_hour_width; - gint max_minute_width; - gint colon_width; - - /* This specifies how we are displaying the dates at the top. */ - EDayViewDateFormat date_format; - - /* These are the maximum widths of the different types of dates. */ - gint long_format_width; - gint abbreviated_format_width; - - /* The large font use to display the hours. I don't think we need a - fontset since we only display numbers. */ - GdkFont *large_font; - - /* The GC used for painting in different colors. */ - GdkGC *main_gc; - - /* The icons. */ - GdkPixmap *reminder_icon; - GdkBitmap *reminder_mask; - GdkPixmap *recurrence_icon; - GdkBitmap *recurrence_mask; - - /* Colors for drawing. */ - GdkColor colors[E_DAY_VIEW_COLOR_LAST]; - - /* The normal & resizing cursors. */ - GdkCursor *normal_cursor; - GdkCursor *move_cursor; - GdkCursor *resize_width_cursor; - GdkCursor *resize_height_cursor; - - /* This remembers the last cursor set on the window. */ - GdkCursor *last_cursor_set_in_top_canvas; - GdkCursor *last_cursor_set_in_main_canvas; - - /* - * Editing, Selection & Dragging data - */ - - /* The horizontal bars to resize events in the main canvas. */ - GnomeCanvasItem *main_canvas_top_resize_bar_item; - GnomeCanvasItem *main_canvas_bottom_resize_bar_item; - - /* The event currently being edited. The day is -1 if no event is - being edited, or E_DAY_VIEW_LONG_EVENT if a long event is edited. */ - gint editing_event_day; - gint editing_event_num; - - /* This is TRUE if we are editing an event which we have just created. - We ignore the "update_event" callback which we will get from the - server when the event is added. */ - gboolean editing_new_event; - - /* This is a GnomeCanvasRect which is placed around an item while it - is being resized, so we can raise it above all other EText items. */ - GnomeCanvasItem *resize_long_event_rect_item; - GnomeCanvasItem *resize_rect_item; - GnomeCanvasItem *resize_bar_item; - - /* The event for which a popup menu is being displayed, as above. */ - gint popup_event_day; - gint popup_event_num; - - /* The currently selected region. If selection_start_day is -1 there is - no current selection. If start_row or end_row is -1 then the - selection is in the top canvas. */ - gint selection_start_day; - gint selection_end_day; - gint selection_start_row; - gint selection_end_row; - - /* This is TRUE if the selection is currently being dragged using the - mouse. */ - gboolean selection_is_being_dragged; - - /* This specifies which end of the selection is being dragged. */ - EDayViewDragPosition selection_drag_pos; - - /* This is TRUE if the selection is in the top canvas only (i.e. if the - last motion event was in the top canvas). */ - gboolean selection_in_top_canvas; - - /* The last mouse position, relative to the main canvas window. - Used when auto-scrolling to update the selection. */ - gint last_mouse_x; - gint last_mouse_y; - - /* Auto-scroll info for when selecting an area or dragging an item. */ - gint auto_scroll_timeout_id; - gint auto_scroll_delay; - gboolean auto_scroll_up; - - /* These are used for the resize bars. */ - gint resize_bars_event_day; - gint resize_bars_event_num; - - /* These are used when resizing events. */ - gint resize_event_day; - gint resize_event_num; - EDayViewPosition resize_drag_pos; - gint resize_start_row; - gint resize_end_row; - - /* This is the event the mouse button was pressed on. If the button - is released we start editing it, but if the mouse is dragged we set - this to -1. */ - gint pressed_event_day; - gint pressed_event_num; - - /* These are used when dragging events. If drag_event_day is not -1 we - know that we are dragging one of the EDayView events around. */ - gint drag_event_day; - gint drag_event_num; - - /* The last mouse position when dragging, in the entire canvas. */ - gint drag_event_x; - gint drag_event_y; - - /* The offset of the mouse from the top of the event, in rows. - In the top canvas this is the offset from the left, in days. */ - gint drag_event_offset; - - /* The last day & row dragged to, so we know when we need to update - the dragged event's position. */ - gint drag_last_day; - gint drag_last_row; - - /* This is a GnomeCanvasRect which is placed around an item while it - is being resized, so we can raise it above all other EText items. */ - GnomeCanvasItem *drag_long_event_rect_item; - GnomeCanvasItem *drag_long_event_item; - GnomeCanvasItem *drag_rect_item; - GnomeCanvasItem *drag_bar_item; - GnomeCanvasItem *drag_item; -}; - -struct _EDayViewClass -{ - GtkTableClass parent_class; -}; - - -GtkType e_day_view_get_type (void); -GtkWidget* e_day_view_new (void); - -void e_day_view_set_calendar (EDayView *day_view, - GnomeCalendar *calendar); - -/* This sets the selected time range. The EDayView will show the day or week - corresponding to the start time. If the start_time & end_time are not equal - and are both visible in the view, then the selection is set to those times, - otherwise it is set to 1 hour from the start of the working day. */ -void e_day_view_set_selected_time_range (EDayView *day_view, - time_t start_time, - time_t end_time); - -/* Returns the selected time range. */ -void e_day_view_get_selected_time_range (EDayView *day_view, - time_t *start_time, - time_t *end_time); - -/* This reloads all calendar events. */ -void e_day_view_update_all_events (EDayView *day_view); - -/* This is called when one event has been added or updated. */ -void e_day_view_update_event (EDayView *day_view, - const gchar *uid); - -/* This removes all the events associated with the given uid. Note that for - recurring events there may be more than one. If any events are found and - removed we need to layout the events again. */ -void e_day_view_remove_event (EDayView *day_view, - const gchar *uid); - -/* The number of days shown in the EDayView, from 1 to 7. This is normally - either 1 or 5 (for the Work-Week view). */ -gint e_day_view_get_days_shown (EDayView *day_view); -void e_day_view_set_days_shown (EDayView *day_view, - gint days_shown); - -/* This specifies how many minutes are represented by one row in the display. - It can be 60, 30, 15, 10 or 5. The default is 30. */ -gint e_day_view_get_mins_per_row (EDayView *day_view); -void e_day_view_set_mins_per_row (EDayView *day_view, - gint mins_per_row); - - - -/* - * Internal functions called by the associated canvas items. - */ -void e_day_view_check_layout (EDayView *day_view); -gint e_day_view_convert_time_to_row (EDayView *day_view, - gint hour, - gint minute); -gint e_day_view_convert_time_to_position (EDayView *day_view, - gint hour, - gint minute); -gboolean e_day_view_get_event_position (EDayView *day_view, - gint day, - gint event_num, - gint *item_x, - gint *item_y, - gint *item_w, - gint *item_h); -gboolean e_day_view_get_long_event_position (EDayView *day_view, - gint event_num, - gint *start_day, - gint *end_day, - gint *item_x, - gint *item_y, - gint *item_w, - gint *item_h); -gboolean e_day_view_find_long_event_days (EDayView *day_view, - EDayViewEvent *event, - gint *start_day, - gint *end_day); - -void e_day_view_start_selection (EDayView *day_view, - gint day, - gint row); -void e_day_view_update_selection (EDayView *day_view, - gint day, - gint row); -void e_day_view_finish_selection (EDayView *day_view); - -void e_day_view_check_auto_scroll (EDayView *day_view, - gint event_x, - gint event_y); -void e_day_view_stop_auto_scroll (EDayView *day_view); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_DAY_VIEW_H_ */ diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c deleted file mode 100644 index f8812f6c33..0000000000 --- a/calendar/gui/e-week-view-event-item.c +++ /dev/null @@ -1,753 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EWeekViewEventItem - displays the background, times and icons for an event - * in the week/month views. A separate EText canvas item is used to display & - * edit the text. - */ - -#include -#include "../widgets/e-text/e-text.h" -#include "e-week-view-event-item.h" - -static void e_week_view_event_item_class_init (EWeekViewEventItemClass *class); -static void e_week_view_event_item_init (EWeekViewEventItem *wveitem); - -static void e_week_view_event_item_set_arg (GtkObject *o, - GtkArg *arg, - guint arg_id); -static void e_week_view_event_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags); -static void e_week_view_event_item_draw (GnomeCanvasItem *item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height); -static void e_week_view_event_item_draw_icons (EWeekViewEventItem *wveitem, - GdkDrawable *drawable, - gint icon_x, - gint icon_y, - gint x2, - gboolean right_align); -static void e_week_view_event_item_draw_triangle (EWeekViewEventItem *wveitem, - GdkDrawable *drawable, - gint x, - gint y, - gint w, - gint h); -static double e_week_view_event_item_point (GnomeCanvasItem *item, - double x, - double y, - int cx, - int cy, - GnomeCanvasItem **actual_item); -static gint e_week_view_event_item_event (GnomeCanvasItem *item, - GdkEvent *event); -static gboolean e_week_view_event_item_button_press (EWeekViewEventItem *wveitem, - GdkEvent *event); -static gboolean e_week_view_event_item_button_release (EWeekViewEventItem *wveitem, - GdkEvent *event); -static EWeekViewPosition e_week_view_event_item_get_position (EWeekViewEventItem *wveitem, - gdouble x, - gdouble y); - - -static GnomeCanvasItemClass *parent_class; - -/* The arguments we take */ -enum { - ARG_0, - ARG_EVENT_NUM, - ARG_SPAN_NUM -}; - - -GtkType -e_week_view_event_item_get_type (void) -{ - static GtkType e_week_view_event_item_type = 0; - - if (!e_week_view_event_item_type) { - GtkTypeInfo e_week_view_event_item_info = { - "EWeekViewEventItem", - sizeof (EWeekViewEventItem), - sizeof (EWeekViewEventItemClass), - (GtkClassInitFunc) e_week_view_event_item_class_init, - (GtkObjectInitFunc) e_week_view_event_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - e_week_view_event_item_type = gtk_type_unique (gnome_canvas_item_get_type (), &e_week_view_event_item_info); - } - - return e_week_view_event_item_type; -} - - -static void -e_week_view_event_item_class_init (EWeekViewEventItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - parent_class = gtk_type_class (gnome_canvas_item_get_type()); - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - gtk_object_add_arg_type ("EWeekViewEventItem::event_num", - GTK_TYPE_INT, GTK_ARG_WRITABLE, - ARG_EVENT_NUM); - gtk_object_add_arg_type ("EWeekViewEventItem::span_num", - GTK_TYPE_INT, GTK_ARG_WRITABLE, - ARG_SPAN_NUM); - - object_class->set_arg = e_week_view_event_item_set_arg; - - /* GnomeCanvasItem method overrides */ - item_class->update = e_week_view_event_item_update; - item_class->draw = e_week_view_event_item_draw; - item_class->point = e_week_view_event_item_point; - item_class->event = e_week_view_event_item_event; -} - - -static void -e_week_view_event_item_init (EWeekViewEventItem *wveitem) -{ - wveitem->event_num = -1; - wveitem->span_num = -1; -} - - -static void -e_week_view_event_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EWeekViewEventItem *wveitem; - gboolean needs_update = FALSE; - - item = GNOME_CANVAS_ITEM (o); - wveitem = E_WEEK_VIEW_EVENT_ITEM (o); - - switch (arg_id){ - case ARG_EVENT_NUM: - wveitem->event_num = GTK_VALUE_INT (*arg); - needs_update = TRUE; - break; - case ARG_SPAN_NUM: - wveitem->span_num = GTK_VALUE_INT (*arg); - needs_update = TRUE; - break; - } - - if (needs_update) - gnome_canvas_item_request_update (item); -} - - -static void -e_week_view_event_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags) -{ - EWeekViewEventItem *wveitem; - EWeekView *week_view; - gint span_x, span_y, span_w; - -#if 0 - g_print ("In e_week_view_event_item_update\n"); -#endif - - wveitem = E_WEEK_VIEW_EVENT_ITEM (item); - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update) - (* GNOME_CANVAS_ITEM_CLASS (parent_class)->update) (item, affine, clip_path, flags); - - item->x1 = 0; - item->y1 = 0; - item->x2 = 0; - item->y2 = 0; - - if (wveitem->event_num != -1 && wveitem->span_num != -1) { - if (e_week_view_get_span_position (week_view, - wveitem->event_num, - wveitem->span_num, - &span_x, &span_y, - &span_w)) { -#if 0 - g_print (" Event:%i Span:%i %i,%i W:%i\n", - wveitem->event_num, wveitem->span_num, - span_x, span_y, span_w); -#endif - item->x1 = span_x; - item->y1 = span_y; - item->x2 = span_x + span_w - 1; - item->y2 = span_y + week_view->row_height - 1; - } - } -} - - -/* - * DRAWING ROUTINES - functions to paint the canvas item. - */ - -static void -e_week_view_event_item_draw (GnomeCanvasItem *canvas_item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height) -{ - EWeekViewEventItem *wveitem; - EWeekView *week_view; - EWeekViewEvent *event; - EWeekViewEventSpan *span; - GtkStyle *style; - GdkGC *fg_gc, *gc; - GdkFont *font; - gint x1, y1, x2, y2, time_x, time_y, time_y_small_min; - gint icon_x, icon_y, time_width, min_end_time_x; - gint rect_x, rect_w, rect_x2; - gboolean one_day_event, editing_span = FALSE; - gint start_minute, end_minute; - gchar buffer[128]; - gboolean draw_start_triangle = FALSE, draw_end_triangle = FALSE; - GdkRectangle clip_rect; - -#if 0 - g_print ("In e_week_view_event_item_draw %i,%i %ix%i\n", - x, y, width, height); -#endif - - wveitem = E_WEEK_VIEW_EVENT_ITEM (canvas_item); - week_view = E_WEEK_VIEW (GTK_WIDGET (canvas_item->canvas)->parent); - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - if (wveitem->event_num == -1 || wveitem->span_num == -1) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, - wveitem->event_num); - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + wveitem->span_num); - - style = GTK_WIDGET (week_view)->style; - font = style->font; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - gc = week_view->main_gc; - - x1 = canvas_item->x1 - x; - y1 = canvas_item->y1 - y; - x2 = canvas_item->x2 - x; - y2 = canvas_item->y2 - y; - - if (x1 == x2 || y1 == y2) - return; - - icon_y = y1 + E_WEEK_VIEW_EVENT_BORDER_HEIGHT + E_WEEK_VIEW_ICON_Y_PAD; - start_minute = event->start_minute; - end_minute = event->end_minute; - time_y = y1 + E_WEEK_VIEW_EVENT_BORDER_HEIGHT - + E_WEEK_VIEW_EVENT_TEXT_Y_PAD + font->ascent; - if (week_view->small_font) - time_y_small_min = y1 + E_WEEK_VIEW_EVENT_BORDER_HEIGHT - + E_WEEK_VIEW_EVENT_TEXT_Y_PAD - + week_view->small_font->ascent; - if (week_view->use_small_font && week_view->small_font) - time_width = week_view->digit_width * 2 - + week_view->small_digit_width * 2; - else - time_width = week_view->digit_width * 4 - + week_view->colon_width; - - one_day_event = e_week_view_is_one_day_event (week_view, - wveitem->event_num); - if (one_day_event) { - time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD; - - /* Convert the time into a string. We use different parts of - the string for the different time formats. Notice that the - string is always 11 characters long. */ - sprintf (buffer, "%02i:%02i %02i:%02i", - start_minute / 60, start_minute % 60, - end_minute / 60, end_minute % 60); - - /* Draw the start and end times, as required. */ - switch (week_view->time_format) { - case E_WEEK_VIEW_TIME_BOTH_SMALL_MIN: - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, buffer, 2); - gdk_draw_text (drawable, week_view->small_font, fg_gc, - time_x + week_view->digit_width * 2, - time_y_small_min, buffer + 3, 2); - gdk_draw_text (drawable, font, fg_gc, - time_x + week_view->digit_width * 4 - 2, - time_y, buffer + 6, 2); - gdk_draw_text (drawable, week_view->small_font, fg_gc, - time_x + week_view->digit_width * 6 - 2, - time_y_small_min, buffer + 9, 2); - - icon_x = x1 + time_width * 2 + week_view->space_width - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - break; - case E_WEEK_VIEW_TIME_START_SMALL_MIN: - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, buffer, 2); - gdk_draw_text (drawable, week_view->small_font, fg_gc, - time_x + week_view->digit_width * 2, - time_y_small_min, buffer + 3, 2); - - icon_x = x1 + time_width - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - break; - case E_WEEK_VIEW_TIME_BOTH: - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, buffer, 11); - icon_x = x1 + time_width * 2 + week_view->space_width - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - break; - case E_WEEK_VIEW_TIME_START: - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, buffer, 5); - icon_x = x1 + time_width - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - break; - case E_WEEK_VIEW_TIME_NONE: - icon_x = x1 + E_WEEK_VIEW_EVENT_L_PAD; - break; - } - - /* Draw the icons. */ - e_week_view_event_item_draw_icons (wveitem, drawable, - icon_x, icon_y, - x2, FALSE); - - } else { - rect_x = x1 + E_WEEK_VIEW_EVENT_L_PAD; - rect_w = x2 - x1 - E_WEEK_VIEW_EVENT_L_PAD - - E_WEEK_VIEW_EVENT_R_PAD + 1; - - /* Draw the triangles at the start & end, if needed. */ - if (event->start < week_view->day_starts[span->start_day]) { - draw_start_triangle = TRUE; - rect_x += 2; - rect_w -= 2; - } - - if (event->end > week_view->day_starts[span->start_day - + span->num_days]) { - draw_end_triangle = TRUE; - rect_w -= 2; - } - - gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); - gdk_draw_rectangle (drawable, gc, TRUE, - rect_x, y1 + 1, rect_w, y2 - y1 - 1); - - gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]); - rect_x2 = rect_x + rect_w - 1; - gdk_draw_line (drawable, gc, rect_x, y1, rect_x2, y1); - gdk_draw_line (drawable, gc, rect_x, y2, rect_x2, y2); - - if (draw_start_triangle) { - e_week_view_event_item_draw_triangle (wveitem, drawable, x1 + E_WEEK_VIEW_EVENT_L_PAD + 2, y1, -3, y2 - y1 + 1); - } else { - gdk_draw_line (drawable, gc, rect_x, y1, rect_x, y2); - } - - if (draw_end_triangle) { - e_week_view_event_item_draw_triangle (wveitem, drawable, x2 - E_WEEK_VIEW_EVENT_R_PAD - 2, y1, 3, y2 - y1 + 1); - } else { - gdk_draw_line (drawable, gc, rect_x2, y1, rect_x2, y2); - } - - if (span->text_item && E_TEXT (span->text_item)->editing) - editing_span = TRUE; - - /* Draw the start & end times, if necessary. */ - min_end_time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD - + E_WEEK_VIEW_EVENT_BORDER_WIDTH - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - if (!editing_span - && event->start > week_view->day_starts[span->start_day]) { - sprintf (buffer, "%02i:%02i", - start_minute / 60, start_minute % 60); - time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD - + E_WEEK_VIEW_EVENT_BORDER_WIDTH - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - - clip_rect.x = x1; - clip_rect.y = y1; - clip_rect.width = x2 - x1 - E_WEEK_VIEW_EVENT_R_PAD - - E_WEEK_VIEW_EVENT_BORDER_WIDTH + 1; - clip_rect.height = y2 - y1 + 1; - gdk_gc_set_clip_rectangle (fg_gc, &clip_rect); - - if (week_view->use_small_font - && week_view->small_font) { - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, buffer, 2); - gdk_draw_text (drawable, week_view->small_font, - fg_gc, - time_x + week_view->digit_width * 2, - time_y_small_min, - buffer + 3, 2); - } else { - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, buffer, 5); - } - - gdk_gc_set_clip_rectangle (fg_gc, NULL); - - min_end_time_x += time_width + 2; - } - - if (!editing_span - && event->end < week_view->day_starts[span->start_day - + span->num_days]) { - sprintf (buffer, "%02i:%02i", - end_minute / 60, end_minute % 60); - time_x = x2 - E_WEEK_VIEW_EVENT_R_PAD - - E_WEEK_VIEW_EVENT_BORDER_WIDTH - - E_WEEK_VIEW_EVENT_TEXT_X_PAD - 1 - - time_width; - - if (time_x >= min_end_time_x) { - if (week_view->use_small_font - && week_view->small_font) { - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, - buffer, 2); - gdk_draw_text (drawable, - week_view->small_font, - fg_gc, - time_x + week_view->digit_width * 2, - time_y_small_min, - buffer + 3, 2); - } else { - gdk_draw_text (drawable, font, fg_gc, - time_x, time_y, - buffer, 5); - } - } - } - - /* Draw the icons. */ - if (span->text_item) { - icon_x = span->text_item->x1 - x; - e_week_view_event_item_draw_icons (wveitem, drawable, - icon_x, icon_y, - x2, TRUE); - } - } -} - - -static void -e_week_view_event_item_draw_icons (EWeekViewEventItem *wveitem, - GdkDrawable *drawable, - gint icon_x, - gint icon_y, - gint x2, - gboolean right_align) -{ - EWeekView *week_view; - EWeekViewEvent *event; - EWeekViewEventSpan *span; - CalComponent *comp; - GdkGC *gc; - gint num_icons = 0, icon_x_inc; - gboolean draw_reminder_icon = FALSE, draw_recurrence_icon = FALSE; - - week_view = E_WEEK_VIEW (GTK_WIDGET (GNOME_CANVAS_ITEM (wveitem)->canvas)->parent); - - event = &g_array_index (week_view->events, EWeekViewEvent, - wveitem->event_num); - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + wveitem->span_num); - comp = event->comp; - - gc = week_view->main_gc; - -#if 0 - if (ico->dalarm.enabled || ico->malarm.enabled - || ico->palarm.enabled || ico->aalarm.enabled) { - draw_reminder_icon = TRUE; - num_icons++; - } -#endif - - if (cal_component_has_rdates (comp) - || cal_component_has_rrules (comp)) { - draw_recurrence_icon = TRUE; - num_icons++; - } - - icon_x_inc = E_WEEK_VIEW_ICON_WIDTH + E_WEEK_VIEW_ICON_X_PAD; - - if (right_align) - icon_x -= icon_x_inc * num_icons; - - if (draw_reminder_icon && icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { - gdk_gc_set_clip_origin (gc, icon_x, icon_y); - gdk_gc_set_clip_mask (gc, week_view->reminder_mask); - gdk_draw_pixmap (drawable, gc, - week_view->reminder_icon, - 0, 0, icon_x, icon_y, - E_WEEK_VIEW_ICON_WIDTH, - E_WEEK_VIEW_ICON_HEIGHT); - icon_x += icon_x_inc; - } - - if (draw_recurrence_icon && icon_x + E_WEEK_VIEW_ICON_WIDTH <= x2) { - gdk_gc_set_clip_origin (gc, icon_x, icon_y); - gdk_gc_set_clip_mask (gc, week_view->recurrence_mask); - gdk_draw_pixmap (drawable, gc, - week_view->recurrence_icon, - 0, 0, icon_x, icon_y, - E_WEEK_VIEW_ICON_WIDTH, - E_WEEK_VIEW_ICON_HEIGHT); - icon_x += icon_x_inc; - } - - gdk_gc_set_clip_mask (gc, NULL); -} - - -/* This draws a little triangle to indicate that an event extends past - the days visible on screen. */ -static void -e_week_view_event_item_draw_triangle (EWeekViewEventItem *wveitem, - GdkDrawable *drawable, - gint x, - gint y, - gint w, - gint h) -{ - EWeekView *week_view; - GdkGC *gc; - GdkPoint points[3]; - gint c1, c2; - - week_view = E_WEEK_VIEW (GTK_WIDGET (GNOME_CANVAS_ITEM (wveitem)->canvas)->parent); - - gc = week_view->main_gc; - - points[0].x = x; - points[0].y = y; - points[1].x = x + w; - points[1].y = y + (h / 2) - 1; - points[2].x = x; - points[2].y = y + h - 1; - - gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]); - gdk_draw_polygon (drawable, gc, TRUE, points, 3); - - gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]); - - /* If the height is odd we can use the same central point for both - lines. If it is even we use different end-points. */ - c1 = c2 = y + (h / 2); - if (h % 2 == 0) - c1--; - - gdk_draw_line (drawable, gc, x, y, x + w, c1); - gdk_draw_line (drawable, gc, x, y + h - 1, x + w, c2); -} - - -/* This is supposed to return the nearest item the the point and the distance. - Since we are the only item we just return ourself and 0 for the distance. - This is needed so that we get button/motion events. */ -static double -e_week_view_event_item_point (GnomeCanvasItem *item, double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item) -{ - *actual_item = item; - return 0.0; -} - - -static gint -e_week_view_event_item_event (GnomeCanvasItem *item, GdkEvent *event) -{ - EWeekViewEventItem *wveitem; - - wveitem = E_WEEK_VIEW_EVENT_ITEM (item); - - switch (event->type) { - case GDK_BUTTON_PRESS: - return e_week_view_event_item_button_press (wveitem, event); - case GDK_BUTTON_RELEASE: - return e_week_view_event_item_button_release (wveitem, event); - case GDK_MOTION_NOTIFY: - break; - default: - break; - } - - return FALSE; -} - - -static gboolean -e_week_view_event_item_button_press (EWeekViewEventItem *wveitem, - GdkEvent *bevent) -{ - EWeekView *week_view; - EWeekViewPosition pos; - EWeekViewEvent *event; - EWeekViewEventSpan *span; - GnomeCanvasItem *item; - - item = GNOME_CANVAS_ITEM (wveitem); - - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); - - event = &g_array_index (week_view->events, EWeekViewEvent, - wveitem->event_num); - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + wveitem->span_num); - -#if 0 - g_print ("In e_week_view_event_item_button_press\n"); -#endif - - pos = e_week_view_event_item_get_position (wveitem, bevent->button.x, - bevent->button.y); - if (pos == E_WEEK_VIEW_POS_NONE) - return FALSE; - - week_view->pressed_event_num = wveitem->event_num; - week_view->pressed_span_num = wveitem->span_num; - - if (bevent->button.button == 1) { - /* Ignore clicks on the event while editing. */ - if (E_TEXT (span->text_item)->editing) - return FALSE; - - /* Remember the item clicked and the mouse position, - so we can start a drag if the mouse moves. */ - week_view->drag_event_x = bevent->button.x; - week_view->drag_event_y = bevent->button.y; - - /* FIXME: Remember the day offset from the start of the event. - */ - } else if (bevent->button.button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (week_view)) - gtk_widget_grab_focus (GTK_WIDGET (week_view)); - e_week_view_show_popup_menu (week_view, - (GdkEventButton*) bevent, - wveitem->event_num); - gtk_signal_emit_stop_by_name (GTK_OBJECT (item->canvas), - "button_press_event"); - } - - return TRUE; -} - - -static gboolean -e_week_view_event_item_button_release (EWeekViewEventItem *wveitem, - GdkEvent *event) -{ - EWeekView *week_view; - GnomeCanvasItem *item; - - item = GNOME_CANVAS_ITEM (wveitem); - - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); - -#if 0 - g_print ("In e_week_view_event_item_button_release\n"); -#endif - - if (week_view->pressed_event_num != -1 - && week_view->pressed_event_num == wveitem->event_num - && week_view->pressed_span_num == wveitem->span_num) { - e_week_view_start_editing_event (week_view, - wveitem->event_num, - wveitem->span_num, - NULL); - week_view->pressed_event_num = -1; - return TRUE; - } - - week_view->pressed_event_num = -1; - - return FALSE; -} - - -static EWeekViewPosition -e_week_view_event_item_get_position (EWeekViewEventItem *wveitem, - gdouble x, - gdouble y) -{ - EWeekView *week_view; - GnomeCanvasItem *item; - - item = GNOME_CANVAS_ITEM (wveitem); - - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), E_WEEK_VIEW_POS_NONE); - -#if 0 - g_print ("In e_week_view_event_item_get_position item: %g,%g %g,%g point: %g,%g\n", item->x1, item->y1, item->x2, item->y2, x, y); -#endif - - if (x < item->x1 + E_WEEK_VIEW_EVENT_L_PAD - || x >= item->x2 - E_WEEK_VIEW_EVENT_R_PAD) - return E_WEEK_VIEW_POS_NONE; - - /* Support left/right edge for long events only. */ - if (!e_week_view_is_one_day_event (week_view, wveitem->event_num)) { - if (x < item->x1 + E_WEEK_VIEW_EVENT_L_PAD - + E_WEEK_VIEW_EVENT_BORDER_WIDTH - + E_WEEK_VIEW_EVENT_TEXT_X_PAD) - return E_WEEK_VIEW_POS_LEFT_EDGE; - - if (x >= item->x2 - E_WEEK_VIEW_EVENT_R_PAD - - E_WEEK_VIEW_EVENT_BORDER_WIDTH - - E_WEEK_VIEW_EVENT_TEXT_X_PAD) - return E_WEEK_VIEW_POS_RIGHT_EDGE; - } - - return E_WEEK_VIEW_POS_EVENT; -} diff --git a/calendar/gui/e-week-view-event-item.h b/calendar/gui/e-week-view-event-item.h deleted file mode 100644 index cfe58699b0..0000000000 --- a/calendar/gui/e-week-view-event-item.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_WEEK_VIEW_EVENT_ITEM_H_ -#define _E_WEEK_VIEW_EVENT_ITEM_H_ - -#include "e-week-view.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EWeekViewEventItem - displays the background, times and icons for an event - * in the week/month views. A separate EText canvas item is used to display & - * edit the text. - */ - -#define E_WEEK_VIEW_EVENT_ITEM(obj) (GTK_CHECK_CAST((obj), \ - e_week_view_event_item_get_type (), EWeekViewEventItem)) -#define E_WEEK_VIEW_EVENT_ITEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k),\ - e_week_view_event_item_get_type ())) -#define E_IS_WEEK_VIEW_EVENT_ITEM(o) (GTK_CHECK_TYPE((o), \ - e_week_view_event_item_get_type ())) - -typedef struct { - GnomeCanvasItem canvas_item; - - /* The event index in the EWeekView events array. */ - gint event_num; - - /* The span index within the event. */ - gint span_num; -} EWeekViewEventItem; - -typedef struct { - GnomeCanvasItemClass parent_class; - -} EWeekViewEventItemClass; - - -GtkType e_week_view_event_item_get_type (void); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_WEEK_VIEW_EVENT_ITEM_H_ */ diff --git a/calendar/gui/e-week-view-main-item.c b/calendar/gui/e-week-view-main-item.c deleted file mode 100644 index 49c2ca3d7d..0000000000 --- a/calendar/gui/e-week-view-main-item.c +++ /dev/null @@ -1,367 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EWeekViewMainItem - displays the background grid and dates for the Week and - * Month calendar views. - */ - -#include -#include "e-week-view-main-item.h" - -static void e_week_view_main_item_class_init (EWeekViewMainItemClass *class); -static void e_week_view_main_item_init (EWeekViewMainItem *wvmitem); - -static void e_week_view_main_item_set_arg (GtkObject *o, - GtkArg *arg, - guint arg_id); -static void e_week_view_main_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags); -static void e_week_view_main_item_draw (GnomeCanvasItem *item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height); -static void e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem, - gint day, - GDate *date, - GdkDrawable *drawable, - gint x, - gint y, - gint width, - gint height); -static double e_week_view_main_item_point (GnomeCanvasItem *item, - double x, - double y, - int cx, - int cy, - GnomeCanvasItem **actual_item); - - -static GnomeCanvasItemClass *parent_class; - -/* The arguments we take */ -enum { - ARG_0, - ARG_WEEK_VIEW -}; - - -GtkType -e_week_view_main_item_get_type (void) -{ - static GtkType e_week_view_main_item_type = 0; - - if (!e_week_view_main_item_type) { - GtkTypeInfo e_week_view_main_item_info = { - "EWeekViewMainItem", - sizeof (EWeekViewMainItem), - sizeof (EWeekViewMainItemClass), - (GtkClassInitFunc) e_week_view_main_item_class_init, - (GtkObjectInitFunc) e_week_view_main_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - e_week_view_main_item_type = gtk_type_unique (gnome_canvas_item_get_type (), &e_week_view_main_item_info); - } - - return e_week_view_main_item_type; -} - - -static void -e_week_view_main_item_class_init (EWeekViewMainItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - parent_class = gtk_type_class (gnome_canvas_item_get_type()); - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - gtk_object_add_arg_type ("EWeekViewMainItem::week_view", - GTK_TYPE_POINTER, GTK_ARG_WRITABLE, - ARG_WEEK_VIEW); - - object_class->set_arg = e_week_view_main_item_set_arg; - - /* GnomeCanvasItem method overrides */ - item_class->update = e_week_view_main_item_update; - item_class->draw = e_week_view_main_item_draw; - item_class->point = e_week_view_main_item_point; -} - - -static void -e_week_view_main_item_init (EWeekViewMainItem *wvmitem) -{ - wvmitem->week_view = NULL; -} - - -static void -e_week_view_main_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EWeekViewMainItem *wvmitem; - - item = GNOME_CANVAS_ITEM (o); - wvmitem = E_WEEK_VIEW_MAIN_ITEM (o); - - switch (arg_id){ - case ARG_WEEK_VIEW: - wvmitem->week_view = GTK_VALUE_POINTER (*arg); - break; - } -} - - -static void -e_week_view_main_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags) -{ - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update) - (* GNOME_CANVAS_ITEM_CLASS (parent_class)->update) (item, affine, clip_path, flags); - - /* The item covers the entire canvas area. */ - item->x1 = 0; - item->y1 = 0; - item->x2 = INT_MAX; - item->y2 = INT_MAX; -} - - -/* - * DRAWING ROUTINES - functions to paint the canvas item. - */ - -static void -e_week_view_main_item_draw (GnomeCanvasItem *canvas_item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height) -{ - EWeekViewMainItem *wvmitem; - EWeekView *week_view; - GDate date; - gint num_days, day, day_x, day_y, day_w, day_h; - -#if 0 - g_print ("In e_week_view_main_item_draw %i,%i %ix%i\n", - x, y, width, height); -#endif - - wvmitem = E_WEEK_VIEW_MAIN_ITEM (canvas_item); - week_view = wvmitem->week_view; - g_return_if_fail (week_view != NULL); - - /* Step through each of the days. */ - date = week_view->first_day_shown; - - /* If no date has been set, we just use Dec 1999/January 2000. */ - if (!g_date_valid (&date)) - g_date_set_dmy (&date, 27, 12, 1999); - - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - for (day = 0; day < num_days; day++) { - e_week_view_get_day_position (week_view, day, - &day_x, &day_y, - &day_w, &day_h); - /* Skip any days which are outside the area. */ - if (day_x < x + width && day_x + day_w >= x - && day_y < y + height && day_y + day_h >= y) { - e_week_view_main_item_draw_day (wvmitem, day, &date, - drawable, - day_x - x, day_y - y, - day_w, day_h); - } - g_date_add_days (&date, 1); - } -} - - -static void -e_week_view_main_item_draw_day (EWeekViewMainItem *wvmitem, - gint day, - GDate *date, - GdkDrawable *drawable, - gint x, - gint y, - gint width, - gint height) -{ - EWeekView *week_view; - GtkStyle *style; - GdkGC *fg_gc, *bg_gc, *light_gc, *dark_gc, *gc, *date_gc; - GdkGC *selected_fg_gc, *selected_bg_gc; - GdkFont *font; - gint right_edge, bottom_edge, date_width, date_x, line_y; - gboolean show_day_name, show_month_name, selected; - gchar buffer[128], *format_string; - gint month, day_of_month, max_width; - GdkColor *bg_color; - -#if 0 - g_print ("Drawing Day:%i at %i,%i\n", day, x, y); -#endif - week_view = wvmitem->week_view; - style = GTK_WIDGET (week_view)->style; - font = style->font; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - bg_gc = style->bg_gc[GTK_STATE_PRELIGHT]; - light_gc = style->light_gc[GTK_STATE_NORMAL]; - dark_gc = style->dark_gc[GTK_STATE_NORMAL]; - selected_fg_gc = style->fg_gc[GTK_STATE_SELECTED]; - selected_bg_gc = style->bg_gc[GTK_STATE_SELECTED]; - gc = week_view->main_gc; - - month = g_date_month (date); - day_of_month = g_date_day (date); - line_y = y + E_WEEK_VIEW_DATE_T_PAD + font->ascent - + font->descent + E_WEEK_VIEW_DATE_LINE_T_PAD; - - /* Draw the background of the day. In the month view odd months are - one color and even months another, so you can easily see when each - month starts (defaults are white for odd - January, March, ... and - light gray for even). In the week view the background is always the - same color, the color used for the odd months in the month view. */ - if (week_view->display_month && (month % 2 == 0)) - bg_color = &week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS]; - else - bg_color = &week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS]; - - gdk_gc_set_foreground (gc, bg_color); - gdk_draw_rectangle (drawable, gc, TRUE, x, y, width, height); - - /* Draw the lines on the right and bottom of the cell. The canvas is - sized so that the lines on the right & bottom edges will be off the - edge of the canvas, so we don't have to worry about them. */ - right_edge = x + width - 1; - bottom_edge = y + height - 1; - - gdk_draw_line (drawable, fg_gc, - right_edge, y, right_edge, bottom_edge); - gdk_draw_line (drawable, fg_gc, - x, bottom_edge, right_edge, bottom_edge); - - /* If the day is selected, draw the blue background. */ - selected = TRUE; - if (!GTK_WIDGET_HAS_FOCUS (week_view) - || week_view->selection_start_day == -1 - || week_view->selection_start_day > day - || week_view->selection_end_day < day) - selected = FALSE; - if (selected) { - if (week_view->display_month) - gdk_draw_rectangle (drawable, selected_bg_gc, TRUE, - x + 2, y + 1, - width - 5, - E_WEEK_VIEW_DATE_T_PAD - 1 - + font->ascent + font->descent); - else - gdk_draw_rectangle (drawable, selected_bg_gc, TRUE, - x + 2, y + 1, - width - 5, line_y - y); - } - - /* Display the date in the top of the cell. - In the week view, display the long format "10 January" in all cells, - or abbreviate it to "10 Jan" or "10" if that doesn't fit. - In the month view, only use the long format for the first cell and - the 1st of each month, otherwise use "10". */ - show_day_name = FALSE; - show_month_name = FALSE; - if (!week_view->display_month) { - show_day_name = TRUE; - show_month_name = TRUE; - } else if (day == 0 || day_of_month == 1) { - show_month_name = TRUE; - } - - /* Now find the longest form of the date that will fit. */ - max_width = width - 4; - format_string = NULL; - if (show_day_name) { - if (week_view->max_abbr_day_width + - week_view->digit_width * 2 + week_view->space_width * 2 - + week_view->month_widths[month - 1] < max_width) - format_string = "%a %d %B"; - } - if (!format_string && show_month_name) { - if (week_view->digit_width * 2 + week_view->space_width - + week_view->month_widths[month - 1] < max_width) - format_string = "%d %B"; - else if (week_view->digit_width * 2 + week_view->space_width - + week_view->abbr_month_widths[month - 1] < max_width) - format_string = "%d %b"; - } - - g_date_strftime (buffer, 128, format_string ? format_string : "%d", - date); - date_width = gdk_string_width (font, buffer); - date_x = x + width - date_width - E_WEEK_VIEW_DATE_R_PAD; - date_x = MAX (date_x, x + 1); - - if (selected) - date_gc = selected_fg_gc; - else - date_gc = fg_gc; - gdk_draw_string (drawable, font, date_gc, - date_x, y + E_WEEK_VIEW_DATE_T_PAD + font->ascent, - buffer); - - /* Draw the line under the date. */ - if (!week_view->display_month) { - gdk_draw_line (drawable, fg_gc, - x + E_WEEK_VIEW_DATE_LINE_L_PAD, line_y, - right_edge, line_y); - } -} - - - - -/* This is supposed to return the nearest item the the point and the distance. - Since we are the only item we just return ourself and 0 for the distance. - This is needed so that we get button/motion events. */ -static double -e_week_view_main_item_point (GnomeCanvasItem *item, double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item) -{ - *actual_item = item; - return 0.0; -} - - diff --git a/calendar/gui/e-week-view-main-item.h b/calendar/gui/e-week-view-main-item.h deleted file mode 100644 index f75dcb0ec9..0000000000 --- a/calendar/gui/e-week-view-main-item.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_WEEK_VIEW_MAIN_ITEM_H_ -#define _E_WEEK_VIEW_MAIN_ITEM_H_ - -#include "e-week-view.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EWeekViewMainItem - displays the background grid and dates for the Week and - * Month calendar views. - */ - -#define E_WEEK_VIEW_MAIN_ITEM(obj) (GTK_CHECK_CAST((obj), \ - e_week_view_main_item_get_type (), EWeekViewMainItem)) -#define E_WEEK_VIEW_MAIN_ITEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k),\ - e_week_view_main_item_get_type ())) -#define E_IS_WEEK_VIEW_MAIN_ITEM(o) (GTK_CHECK_TYPE((o), \ - e_week_view_main_item_get_type ())) - -typedef struct { - GnomeCanvasItem canvas_item; - - /* The parent EWeekView widget. */ - EWeekView *week_view; -} EWeekViewMainItem; - -typedef struct { - GnomeCanvasItemClass parent_class; - -} EWeekViewMainItemClass; - - -GtkType e_week_view_main_item_get_type (void); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_WEEK_VIEW_MAIN_ITEM_H_ */ diff --git a/calendar/gui/e-week-view-titles-item.c b/calendar/gui/e-week-view-titles-item.c deleted file mode 100644 index 14f47e4bcf..0000000000 --- a/calendar/gui/e-week-view-titles-item.c +++ /dev/null @@ -1,300 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EWeekViewTitlesItem - displays the 'Monday', 'Tuesday' etc. at the top of - * the Month calendar view. - */ - -#include -#include "e-week-view-titles-item.h" - -static void e_week_view_titles_item_class_init (EWeekViewTitlesItemClass *class); -static void e_week_view_titles_item_init (EWeekViewTitlesItem *wvtitem); - -static void e_week_view_titles_item_set_arg (GtkObject *o, - GtkArg *arg, - guint arg_id); -static void e_week_view_titles_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags); -static void e_week_view_titles_item_draw (GnomeCanvasItem *item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height); -static double e_week_view_titles_item_point (GnomeCanvasItem *item, - double x, - double y, - int cx, - int cy, - GnomeCanvasItem **actual_item); - - -static GnomeCanvasItemClass *parent_class; - -/* The arguments we take */ -enum { - ARG_0, - ARG_WEEK_VIEW -}; - - -GtkType -e_week_view_titles_item_get_type (void) -{ - static GtkType e_week_view_titles_item_type = 0; - - if (!e_week_view_titles_item_type) { - GtkTypeInfo e_week_view_titles_item_info = { - "EWeekViewTitlesItem", - sizeof (EWeekViewTitlesItem), - sizeof (EWeekViewTitlesItemClass), - (GtkClassInitFunc) e_week_view_titles_item_class_init, - (GtkObjectInitFunc) e_week_view_titles_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - e_week_view_titles_item_type = gtk_type_unique (gnome_canvas_item_get_type (), &e_week_view_titles_item_info); - } - - return e_week_view_titles_item_type; -} - - -static void -e_week_view_titles_item_class_init (EWeekViewTitlesItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - parent_class = gtk_type_class (gnome_canvas_item_get_type()); - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - gtk_object_add_arg_type ("EWeekViewTitlesItem::week_view", - GTK_TYPE_POINTER, GTK_ARG_WRITABLE, - ARG_WEEK_VIEW); - - object_class->set_arg = e_week_view_titles_item_set_arg; - - /* GnomeCanvasItem method overrides */ - item_class->update = e_week_view_titles_item_update; - item_class->draw = e_week_view_titles_item_draw; - item_class->point = e_week_view_titles_item_point; -} - - -static void -e_week_view_titles_item_init (EWeekViewTitlesItem *wvtitem) -{ - wvtitem->week_view = NULL; -} - - -static void -e_week_view_titles_item_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) -{ - GnomeCanvasItem *item; - EWeekViewTitlesItem *wvtitem; - - item = GNOME_CANVAS_ITEM (o); - wvtitem = E_WEEK_VIEW_TITLES_ITEM (o); - - switch (arg_id){ - case ARG_WEEK_VIEW: - wvtitem->week_view = GTK_VALUE_POINTER (*arg); - break; - } -} - - -static void -e_week_view_titles_item_update (GnomeCanvasItem *item, - double *affine, - ArtSVP *clip_path, - int flags) -{ - if (GNOME_CANVAS_ITEM_CLASS (parent_class)->update) - (* GNOME_CANVAS_ITEM_CLASS (parent_class)->update) (item, affine, clip_path, flags); - - /* The item covers the entire canvas area. */ - item->x1 = 0; - item->y1 = 0; - item->x2 = INT_MAX; - item->y2 = INT_MAX; -} - - -/* - * DRAWING ROUTINES - functions to paint the canvas item. - */ - -static void -e_week_view_titles_item_draw (GnomeCanvasItem *canvas_item, - GdkDrawable *drawable, - int x, - int y, - int width, - int height) -{ - EWeekViewTitlesItem *wvtitem; - EWeekView *week_view; - GtkStyle *style; - GdkGC *fg_gc, *bg_gc, *light_gc, *dark_gc; - GdkFont *font; - gint canvas_width, canvas_height, col_width, col, date_width, date_x; - gchar buffer[128], *date_format; - GDate date; - GdkRectangle clip_rect; - gboolean long_format; - -#if 0 - g_print ("In e_week_view_titles_item_draw %i,%i %ix%i\n", - x, y, width, height); -#endif - - wvtitem = E_WEEK_VIEW_TITLES_ITEM (canvas_item); - week_view = wvtitem->week_view; - g_return_if_fail (week_view != NULL); - - style = GTK_WIDGET (week_view)->style; - font = style->font; - fg_gc = style->fg_gc[GTK_STATE_NORMAL]; - bg_gc = style->bg_gc[GTK_STATE_NORMAL]; - light_gc = style->light_gc[GTK_STATE_NORMAL]; - dark_gc = style->dark_gc[GTK_STATE_NORMAL]; - canvas_width = GTK_WIDGET (canvas_item->canvas)->allocation.width; - canvas_height = GTK_WIDGET (canvas_item->canvas)->allocation.height; - - /* Draw the shadow around the dates. */ - gdk_draw_line (drawable, light_gc, - 1 - x, 1 - y, - canvas_width - 2 - x, 1 - y); - gdk_draw_line (drawable, light_gc, - 1 - x, 2 - y, - 1 - x, canvas_height - 1 - y); - - gdk_draw_rectangle (drawable, dark_gc, FALSE, - 0 - x, 0 - y, - canvas_width - 1, canvas_height); - - /* Determine the format to use. */ - col_width = canvas_width / week_view->columns; - if (col_width > week_view->max_day_width + 2) { - date_format = "%A"; - long_format = TRUE; - } else { - date_format = "%a"; - long_format = FALSE; - } - - /* Shift right one pixel to account for the shadow around the main - canvas. */ - x--; - - /* Draw the date. Set a clipping rectangle so we don't draw over the - next day. */ - g_date_clear (&date, 1); - g_date_set_dmy (&date, 27, 3, 2000); /* Must be a Monday. */ - for (col = 0; col < week_view->columns; col++) { - if (col == 5 && week_view->compress_weekend) { - g_date_strftime (buffer, 128, "%a/", &date); - g_date_add_days (&date, 1); - g_date_strftime (buffer + strlen (buffer), 100, - "%a", &date); - } else { - g_date_strftime (buffer, 128, date_format, &date); - } - - clip_rect.x = week_view->col_offsets[col] - x; - clip_rect.y = 2 - y; - clip_rect.width = week_view->col_widths[col]; - clip_rect.height = canvas_height - 2; - gdk_gc_set_clip_rectangle (fg_gc, &clip_rect); - - if (col == 5 && week_view->compress_weekend) - date_width = week_view->abbr_day_widths[5] - + week_view->slash_width - + week_view->abbr_day_widths[6]; - else if (long_format) - date_width = week_view->day_widths[col]; - else - date_width = week_view->abbr_day_widths[col]; - - date_x = week_view->col_offsets[col] - + (week_view->col_widths[col] - date_width) / 2; - date_x = MAX (date_x, week_view->col_offsets[col]); - gdk_draw_string (drawable, font, fg_gc, - date_x - x, 3 + font->ascent - y, buffer); - - gdk_gc_set_clip_rectangle (fg_gc, NULL); - - /* Draw the lines down the left and right of the date cols. */ - if (col != 0) { - gdk_draw_line (drawable, light_gc, - week_view->col_offsets[col] - x, - 4 - y, - week_view->col_offsets[col] - x, - canvas_height - 4 - y); - - gdk_draw_line (drawable, dark_gc, - week_view->col_offsets[col] - 1 - x, - 4 - y, - week_view->col_offsets[col] - 1 - x, - canvas_height - 4 - y); - } - - /* Draw the lines between each column. */ - if (col != 0) { - gdk_draw_line (drawable, style->black_gc, - week_view->col_offsets[col] - x, - canvas_height - y, - week_view->col_offsets[col] - x, - canvas_height - y); - } - - g_date_add_days (&date, 1); - } -} - - -/* This is supposed to return the nearest item the the point and the distance. - Since we are the only item we just return ourself and 0 for the distance. - This is needed so that we get button/motion events. */ -static double -e_week_view_titles_item_point (GnomeCanvasItem *item, double x, double y, - int cx, int cy, - GnomeCanvasItem **actual_item) -{ - *actual_item = item; - return 0.0; -} - - diff --git a/calendar/gui/e-week-view-titles-item.h b/calendar/gui/e-week-view-titles-item.h deleted file mode 100644 index 7ce1ccd386..0000000000 --- a/calendar/gui/e-week-view-titles-item.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_WEEK_VIEW_TITLES_ITEM_H_ -#define _E_WEEK_VIEW_TITLES_ITEM_H_ - -#include "e-week-view.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EWeekViewTitlesItem - displays the 'Monday', 'Tuesday' etc. at the top of - * the Month calendar view. - */ - -#define E_WEEK_VIEW_TITLES_ITEM(obj) (GTK_CHECK_CAST((obj), \ - e_week_view_titles_item_get_type (), EWeekViewTitlesItem)) -#define E_WEEK_VIEW_TITLES_ITEM_CLASS(k) (GTK_CHECK_CLASS_CAST ((k),\ - e_week_view_titles_item_get_type ())) -#define E_IS_WEEK_VIEW_TITLES_ITEM(o) (GTK_CHECK_TYPE((o), \ - e_week_view_titles_item_get_type ())) - -typedef struct { - GnomeCanvasItem canvas_item; - - /* The parent EWeekView widget. */ - EWeekView *week_view; -} EWeekViewTitlesItem; - -typedef struct { - GnomeCanvasItemClass parent_class; - -} EWeekViewTitlesItemClass; - - -GtkType e_week_view_titles_item_get_type (void); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_WEEK_VIEW_TITLES_ITEM_H_ */ diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c deleted file mode 100644 index faf78db567..0000000000 --- a/calendar/gui/e-week-view.c +++ /dev/null @@ -1,2925 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - * EWeekView - displays the Week & Month views of the calendar. - */ - -#include -#include -#include -#include -#include -#include "calendar-commands.h" -#include "e-week-view.h" -#include "e-week-view-event-item.h" -#include "e-week-view-main-item.h" -#include "e-week-view-titles-item.h" -#include -#include "popup-menu.h" -#include "../e-util/e-canvas.h" -#include "../widgets/e-text/e-text.h" -#include "e-util/e-canvas-utils.h" - -/* Images */ -#include "bell.xpm" -#include "recur.xpm" - -#include "jump.xpm" - -#define E_WEEK_VIEW_SMALL_FONT \ - "-adobe-utopia-regular-r-normal-*-*-100-*-*-p-*-iso8859-*" -#define E_WEEK_VIEW_SMALL_FONT_FALLBACK \ - "-adobe-helvetica-medium-r-normal-*-*-80-*-*-p-*-iso8859-*" - -/* We use a 7-bit field to store row numbers in EWeekViewEventSpan, so the - maximum number or rows we can allow is 127. It is very unlikely to be - reached anyway. */ -#define E_WEEK_VIEW_MAX_ROWS_PER_CELL 127 - -#define E_WEEK_VIEW_JUMP_BUTTON_WIDTH 16 -#define E_WEEK_VIEW_JUMP_BUTTON_HEIGHT 8 - -#define E_WEEK_VIEW_JUMP_BUTTON_X_PAD 3 -#define E_WEEK_VIEW_JUMP_BUTTON_Y_PAD 3 - -static void e_week_view_class_init (EWeekViewClass *class); -static void e_week_view_init (EWeekView *week_view); -static void e_week_view_destroy (GtkObject *object); -static void e_week_view_realize (GtkWidget *widget); -static void e_week_view_unrealize (GtkWidget *widget); -static void e_week_view_style_set (GtkWidget *widget, - GtkStyle *previous_style); -static void e_week_view_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void e_week_view_recalc_cell_sizes (EWeekView *week_view); -static gint e_week_view_focus_in (GtkWidget *widget, - GdkEventFocus *event); -static gint e_week_view_focus_out (GtkWidget *widget, - GdkEventFocus *event); -static gint e_week_view_expose_event (GtkWidget *widget, - GdkEventExpose *event); -static void e_week_view_draw (GtkWidget *widget, - GdkRectangle *area); -static void e_week_view_draw_shadow (EWeekView *week_view); - -static gboolean e_week_view_on_button_press (GtkWidget *widget, - GdkEventButton *event, - EWeekView *week_view); -static gboolean e_week_view_on_button_release (GtkWidget *widget, - GdkEventButton *event, - EWeekView *week_view); -static gboolean e_week_view_on_motion (GtkWidget *widget, - GdkEventMotion *event, - EWeekView *week_view); -static gint e_week_view_convert_position_to_day (EWeekView *week_view, - gint x, - gint y); -static void e_week_view_update_selection (EWeekView *week_view, - gint day); - -static void e_week_view_reload_events (EWeekView *week_view); -static void e_week_view_free_events (EWeekView *week_view); -static gboolean e_week_view_add_event (CalComponent *comp, - time_t start, - time_t end, - gpointer data); -static void e_week_view_check_layout (EWeekView *week_view); -static void e_week_view_layout_events (EWeekView *week_view); -static void e_week_view_layout_event (EWeekView *week_view, - EWeekViewEvent *event, - guint8 *grid, - GArray *spans); -static void e_week_view_ensure_events_sorted (EWeekView *week_view); -static gint e_week_view_event_sort_func (const void *arg1, - const void *arg2); -static void e_week_view_reshape_events (EWeekView *week_view); -static void e_week_view_reshape_event_span (EWeekView *week_view, - gint event_num, - gint span_num); -static gint e_week_view_find_day (EWeekView *week_view, - time_t time_to_find, - gboolean include_midnight_in_prev_day); -static gint e_week_view_find_span_end (EWeekView *week_view, - gint day); -static void e_week_view_recalc_day_starts (EWeekView *week_view, - time_t lower); -static void e_week_view_on_adjustment_changed (GtkAdjustment *adjustment, - EWeekView *week_view); -static void e_week_view_on_editing_started (EWeekView *week_view, - GnomeCanvasItem *item); -static void e_week_view_on_editing_stopped (EWeekView *week_view, - GnomeCanvasItem *item); -static gboolean e_week_view_find_event_from_item (EWeekView *week_view, - GnomeCanvasItem *item, - gint *event_num, - gint *span_num); -static gboolean e_week_view_find_event_from_uid (EWeekView *week_view, - const gchar *uid, - gint *event_num_return); -typedef gboolean (* EWeekViewForeachEventCallback) (EWeekView *week_view, - gint event_num, - gpointer data); - -static void e_week_view_foreach_event_with_uid (EWeekView *week_view, - const gchar *uid, - EWeekViewForeachEventCallback callback, - gpointer data); -static gboolean e_week_view_on_text_item_event (GnomeCanvasItem *item, - GdkEvent *event, - EWeekView *week_view); -static gboolean e_week_view_on_jump_button_event (GnomeCanvasItem *item, - GdkEvent *event, - EWeekView *week_view); -static gint e_week_view_key_press (GtkWidget *widget, GdkEventKey *event); -static void e_week_view_on_new_appointment (GtkWidget *widget, - gpointer data); -static void e_week_view_on_edit_appointment (GtkWidget *widget, - gpointer data); -static void e_week_view_on_delete_occurrence (GtkWidget *widget, - gpointer data); -static void e_week_view_on_delete_appointment (GtkWidget *widget, - gpointer data); -static void e_week_view_on_unrecur_appointment (GtkWidget *widget, - gpointer data); - -static gboolean e_week_view_update_event_cb (EWeekView *week_view, - gint event_num, - gpointer data); -static gboolean e_week_view_remove_event_cb (EWeekView *week_view, - gint event_num, - gpointer data); - -static GtkTableClass *parent_class; - - -GtkType -e_week_view_get_type (void) -{ - static GtkType e_week_view_type = 0; - - if (!e_week_view_type){ - GtkTypeInfo e_week_view_info = { - "EWeekView", - sizeof (EWeekView), - sizeof (EWeekViewClass), - (GtkClassInitFunc) e_week_view_class_init, - (GtkObjectInitFunc) e_week_view_init, - NULL, /* reserved 1 */ - NULL, /* reserved 2 */ - (GtkClassInitFunc) NULL - }; - - parent_class = gtk_type_class (GTK_TYPE_TABLE); - e_week_view_type = gtk_type_unique (GTK_TYPE_TABLE, - &e_week_view_info); - } - - return e_week_view_type; -} - - -static void -e_week_view_class_init (EWeekViewClass *class) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GtkObjectClass *) class; - widget_class = (GtkWidgetClass *) class; - - /* Method override */ - object_class->destroy = e_week_view_destroy; - - widget_class->realize = e_week_view_realize; - widget_class->unrealize = e_week_view_unrealize; - widget_class->style_set = e_week_view_style_set; - widget_class->size_allocate = e_week_view_size_allocate; - widget_class->focus_in_event = e_week_view_focus_in; - widget_class->focus_out_event = e_week_view_focus_out; - widget_class->key_press_event = e_week_view_key_press; - widget_class->expose_event = e_week_view_expose_event; - widget_class->draw = e_week_view_draw; -} - - -static void -e_week_view_init (EWeekView *week_view) -{ - GdkColormap *colormap; - gboolean success[E_WEEK_VIEW_COLOR_LAST]; - gint nfailed; - GnomeCanvasGroup *canvas_group; - GtkObject *adjustment; - GdkPixbuf *pixbuf; - gint i; - - GTK_WIDGET_SET_FLAGS (week_view, GTK_CAN_FOCUS); - - colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view)); - - week_view->calendar = NULL; - - week_view->events = g_array_new (FALSE, FALSE, - sizeof (EWeekViewEvent)); - week_view->events_sorted = TRUE; - week_view->events_need_layout = FALSE; - week_view->events_need_reshape = FALSE; - - week_view->spans = NULL; - - week_view->display_month = FALSE; - week_view->rows = 6; - week_view->columns = 2; - week_view->compress_weekend = TRUE; - - g_date_clear (&week_view->base_date, 1); - g_date_clear (&week_view->first_day_shown, 1); - - week_view->row_height = 10; - week_view->rows_per_cell = 1; - - week_view->selection_start_day = -1; - week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_NONE; - - week_view->pressed_event_num = -1; - week_view->editing_event_num = -1; - week_view->editing_new_event = FALSE; - - /* Create the small font. */ - week_view->use_small_font = TRUE; - week_view->small_font = gdk_font_load (E_WEEK_VIEW_SMALL_FONT); - if (!week_view->small_font) - week_view->small_font = gdk_font_load (E_WEEK_VIEW_SMALL_FONT_FALLBACK); - if (!week_view->small_font) - g_warning ("Couldn't load font"); - - /* Allocate the colors. */ - week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS].red = 0xeded; - week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS].green = 0xeded; - week_view->colors[E_WEEK_VIEW_COLOR_EVEN_MONTHS].blue = 0xeded; - - week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS].red = 65535; - week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS].green = 65535; - week_view->colors[E_WEEK_VIEW_COLOR_ODD_MONTHS].blue = 65535; - - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].red = 0xd6d6; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].green = 0xd6d6; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND].blue = 0xd6d6; - - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER].red = 0; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER].green = 0; - week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER].blue = 0; - - nfailed = gdk_colormap_alloc_colors (colormap, week_view->colors, - E_WEEK_VIEW_COLOR_LAST, FALSE, - TRUE, success); - if (nfailed) - g_warning ("Failed to allocate all colors"); - - - /* - * Titles Canvas. Note that we don't show it is only shown in the - * Month view. - */ - week_view->titles_canvas = e_canvas_new (); - gtk_table_attach (GTK_TABLE (week_view), week_view->titles_canvas, - 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); - - canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->titles_canvas)->root); - - week_view->titles_canvas_item = - gnome_canvas_item_new (canvas_group, - e_week_view_titles_item_get_type (), - "EWeekViewTitlesItem::week_view", week_view, - NULL); - - /* - * Main Canvas - */ - week_view->main_canvas = e_canvas_new (); - gtk_table_attach (GTK_TABLE (week_view), week_view->main_canvas, - 1, 2, 1, 2, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 1, 1); - gtk_widget_show (week_view->main_canvas); - - canvas_group = GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->main_canvas)->root); - - week_view->main_canvas_item = - gnome_canvas_item_new (canvas_group, - e_week_view_main_item_get_type (), - "EWeekViewMainItem::week_view", week_view, - NULL); - - gtk_signal_connect_after (GTK_OBJECT (week_view->main_canvas), - "button_press_event", - GTK_SIGNAL_FUNC (e_week_view_on_button_press), - week_view); - gtk_signal_connect_after (GTK_OBJECT (week_view->main_canvas), - "button_release_event", - GTK_SIGNAL_FUNC (e_week_view_on_button_release), - week_view); - gtk_signal_connect_after (GTK_OBJECT (week_view->main_canvas), - "motion_notify_event", - GTK_SIGNAL_FUNC (e_week_view_on_motion), - week_view); - - /* Create the buttons to jump to each days. */ - pixbuf = gdk_pixbuf_new_from_xpm_data ((const char**) jump_xpm); - - for (i = 0; i < E_WEEK_VIEW_MAX_WEEKS * 7; i++) { - week_view->jump_buttons[i] = gnome_canvas_item_new - (canvas_group, - gnome_canvas_pixbuf_get_type (), - "GnomeCanvasPixbuf::pixbuf", pixbuf, - NULL); - - gtk_signal_connect (GTK_OBJECT (week_view->jump_buttons[i]), - "event", - GTK_SIGNAL_FUNC (e_week_view_on_jump_button_event), - week_view); - } - - - /* - * Scrollbar. - */ - adjustment = gtk_adjustment_new (0, -52, 52, 1, 1, 1); - gtk_signal_connect (adjustment, "value_changed", - GTK_SIGNAL_FUNC (e_week_view_on_adjustment_changed), - week_view); - - week_view->vscrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (adjustment)); - gtk_table_attach (GTK_TABLE (week_view), week_view->vscrollbar, - 2, 3, 1, 2, 0, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_show (week_view->vscrollbar); - - - /* Create the pixmaps. */ - week_view->reminder_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &week_view->reminder_mask, NULL, bell_xpm); - week_view->recurrence_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &week_view->recurrence_mask, NULL, recur_xpm); - - - /* Create the cursors. */ - week_view->normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW); - week_view->move_cursor = gdk_cursor_new (GDK_FLEUR); - week_view->resize_width_cursor = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW); - week_view->last_cursor_set = NULL; -} - - -/** - * e_week_view_new: - * @Returns: a new #EWeekView. - * - * Creates a new #EWeekView. - **/ -GtkWidget * -e_week_view_new (void) -{ - GtkWidget *week_view; - - week_view = GTK_WIDGET (gtk_type_new (e_week_view_get_type ())); - - return week_view; -} - - -static void -e_week_view_destroy (GtkObject *object) -{ - EWeekView *week_view; - - week_view = E_WEEK_VIEW (object); - - /* FIXME: free the colors. In EDayView as well. */ - /* FIXME: free the events and the spans. In EDayView as well? */ - - if (week_view->small_font) - gdk_font_unref (week_view->small_font); - - gdk_cursor_destroy (week_view->normal_cursor); - gdk_cursor_destroy (week_view->move_cursor); - gdk_cursor_destroy (week_view->resize_width_cursor); - - GTK_OBJECT_CLASS (parent_class)->destroy (object); -} - - -static void -e_week_view_realize (GtkWidget *widget) -{ - EWeekView *week_view; - - if (GTK_WIDGET_CLASS (parent_class)->realize) - (*GTK_WIDGET_CLASS (parent_class)->realize)(widget); - - week_view = E_WEEK_VIEW (widget); - week_view->main_gc = gdk_gc_new (widget->window); -} - - -static void -e_week_view_unrealize (GtkWidget *widget) -{ - EWeekView *week_view; - - week_view = E_WEEK_VIEW (widget); - - gdk_gc_unref (week_view->main_gc); - week_view->main_gc = NULL; - - if (GTK_WIDGET_CLASS (parent_class)->unrealize) - (*GTK_WIDGET_CLASS (parent_class)->unrealize)(widget); -} - - -static void -e_week_view_style_set (GtkWidget *widget, - GtkStyle *previous_style) -{ - EWeekView *week_view; - GdkFont *font; - gint day, day_width, max_day_width, max_abbr_day_width; - gint month, month_width, max_month_width, max_abbr_month_width; - GDate date; - gchar buffer[128]; - - if (GTK_WIDGET_CLASS (parent_class)->style_set) - (*GTK_WIDGET_CLASS (parent_class)->style_set)(widget, previous_style); - - week_view = E_WEEK_VIEW (widget); - font = widget->style->font; - - /* Recalculate the height of each row based on the font size. */ - week_view->row_height = font->ascent + font->descent + E_WEEK_VIEW_EVENT_BORDER_HEIGHT * 2 + E_WEEK_VIEW_EVENT_TEXT_Y_PAD * 2; - week_view->row_height = MAX (week_view->row_height, E_WEEK_VIEW_ICON_HEIGHT + E_WEEK_VIEW_ICON_Y_PAD + E_WEEK_VIEW_EVENT_BORDER_HEIGHT * 2); - - /* Set the height of the top canvas. */ - gtk_widget_set_usize (week_view->titles_canvas, -1, - font->ascent + font->descent + 5); - - /* Save the sizes of various strings in the font, so we can quickly - decide which date formats to use. */ - g_date_clear (&date, 1); - g_date_set_dmy (&date, 27, 3, 2000); /* Must be a Monday. */ - - max_day_width = 0; - max_abbr_day_width = 0; - for (day = 0; day < 7; day++) { - g_date_strftime (buffer, 128, "%A", &date); - day_width = gdk_string_width (font, buffer); - week_view->day_widths[day] = day_width; - max_day_width = MAX (max_day_width, day_width); - - g_date_strftime (buffer, 128, "%a", &date); - day_width = gdk_string_width (font, buffer); - week_view->abbr_day_widths[day] = day_width; - max_abbr_day_width = MAX (max_abbr_day_width, day_width); - - g_date_add_days (&date, 1); - } - - max_month_width = 0; - max_abbr_month_width = 0; - for (month = 0; month < 12; month++) { - g_date_set_month (&date, month + 1); - - g_date_strftime (buffer, 128, "%B", &date); - month_width = gdk_string_width (font, buffer); - week_view->month_widths[month] = month_width; - max_month_width = MAX (max_month_width, month_width); - - g_date_strftime (buffer, 128, "%b", &date); - month_width = gdk_string_width (font, buffer); - week_view->abbr_month_widths[month] = month_width; - max_abbr_month_width = MAX (max_abbr_month_width, month_width); - } - - week_view->space_width = gdk_string_width (font, " "); - week_view->colon_width = gdk_string_width (font, ":"); - week_view->slash_width = gdk_string_width (font, "/"); - week_view->digit_width = gdk_string_width (font, "5"); - if (week_view->small_font) - week_view->small_digit_width = gdk_string_width (week_view->small_font, "5"); - week_view->max_day_width = max_day_width; - week_view->max_abbr_day_width = max_abbr_day_width; - week_view->max_month_width = max_month_width; - week_view->max_abbr_month_width = max_abbr_month_width; -} - - -/* This recalculates the sizes of each column. */ -static void -e_week_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation) -{ - EWeekView *week_view; - gint width, height, time_width; - gdouble old_x2, old_y2, new_x2, new_y2; - GdkFont *font; - - week_view = E_WEEK_VIEW (widget); - font = widget->style->font; - - (*GTK_WIDGET_CLASS (parent_class)->size_allocate) (widget, allocation); - - e_week_view_recalc_cell_sizes (week_view); - - /* Calculate the number of rows of events in each cell, for the large - cells and the compressed weekend cells. */ - if (week_view->display_month) { - week_view->events_y_offset = E_WEEK_VIEW_DATE_T_PAD - + font->ascent + font->descent - + E_WEEK_VIEW_DATE_B_PAD; - } else { - week_view->events_y_offset = E_WEEK_VIEW_DATE_T_PAD - + font->ascent + font->descent - + E_WEEK_VIEW_DATE_LINE_T_PAD + 1 - + E_WEEK_VIEW_DATE_LINE_B_PAD; - } - - height = week_view->row_heights[0]; - week_view->rows_per_cell = (height * 2 - week_view->events_y_offset) - / (week_view->row_height + E_WEEK_VIEW_EVENT_Y_SPACING); - week_view->rows_per_cell = MIN (week_view->rows_per_cell, - E_WEEK_VIEW_MAX_ROWS_PER_CELL); - - week_view->rows_per_compressed_cell = - (height - week_view->events_y_offset) - / (week_view->row_height + E_WEEK_VIEW_EVENT_Y_SPACING); - week_view->rows_per_compressed_cell = MIN (week_view->rows_per_compressed_cell, - E_WEEK_VIEW_MAX_ROWS_PER_CELL); - - /* Determine which time format to use, based on the width of the cells. - We only allow the time to take up about half of the width. */ - width = week_view->col_widths[0]; - - week_view->time_format = E_WEEK_VIEW_TIME_NONE; - if (week_view->use_small_font && week_view->small_font) { - time_width = week_view->digit_width * 2 - + week_view->small_digit_width * 2; - if (width / 2 > time_width * 2 + week_view->space_width) - week_view->time_format = E_WEEK_VIEW_TIME_BOTH_SMALL_MIN; - else if (width / 2 > time_width) - week_view->time_format = E_WEEK_VIEW_TIME_START_SMALL_MIN; - } else { - time_width = week_view->digit_width * 4 - + week_view->colon_width; - if (width / 2 > time_width * 2 + week_view->space_width) - week_view->time_format = E_WEEK_VIEW_TIME_BOTH; - else if (width / 2 > time_width) - week_view->time_format = E_WEEK_VIEW_TIME_START; - } - - /* Set the scroll region of the top canvas to its allocated size. */ - gnome_canvas_get_scroll_region (GNOME_CANVAS (week_view->titles_canvas), - NULL, NULL, &old_x2, &old_y2); - new_x2 = week_view->titles_canvas->allocation.width - 1; - new_y2 = week_view->titles_canvas->allocation.height - 1; - if (old_x2 != new_x2 || old_y2 != new_y2) - gnome_canvas_set_scroll_region (GNOME_CANVAS (week_view->titles_canvas), - 0, 0, new_x2, new_y2); - - - /* Set the scroll region of the main canvas to its allocated width, - but with the height depending on the number of rows needed. */ - gnome_canvas_get_scroll_region (GNOME_CANVAS (week_view->main_canvas), - NULL, NULL, &old_x2, &old_y2); - new_x2 = week_view->main_canvas->allocation.width - 1; - new_y2 = week_view->main_canvas->allocation.height - 1; - if (old_x2 != new_x2 || old_y2 != new_y2) - gnome_canvas_set_scroll_region (GNOME_CANVAS (week_view->main_canvas), - 0, 0, new_x2, new_y2); - - /* Flag that we need to reshape the events. */ - if (old_x2 != new_x2 || old_y2 != new_y2) { - week_view->events_need_reshape = TRUE; - e_week_view_check_layout (week_view); - } -} - - -static void -e_week_view_recalc_cell_sizes (EWeekView *week_view) -{ - gfloat width, height, offset; - gint row, col; - - if (week_view->display_month) { - week_view->rows = 10; - week_view->columns = 6; - } else { - week_view->rows = 6; - week_view->columns = 2; - } - - /* Calculate the column sizes, using floating point so that pixels - get divided evenly. Note that we use one more element than the - number of columns, to make it easy to get the column widths. - We also add one to the width so that the right border of the last - column is off the edge of the displayed area. */ - width = week_view->main_canvas->allocation.width + 1; - width /= week_view->columns; - offset = 0; - for (col = 0; col <= week_view->columns; col++) { - week_view->col_offsets[col] = floor (offset + 0.5); - offset += width; - } - - /* Calculate the cell widths based on the offsets. */ - for (col = 0; col < week_view->columns; col++) { - week_view->col_widths[col] = week_view->col_offsets[col + 1] - - week_view->col_offsets[col]; - } - - /* Now do the same for the row heights. */ - height = week_view->main_canvas->allocation.height + 1; - height /= week_view->rows; - offset = 0; - for (row = 0; row <= week_view->rows; row++) { - week_view->row_offsets[row] = floor (offset + 0.5); - offset += height; - } - - /* Calculate the cell heights based on the offsets. */ - for (row = 0; row < week_view->rows; row++) { - week_view->row_heights[row] = week_view->row_offsets[row + 1] - - week_view->row_offsets[row]; - } -} - - -static gint -e_week_view_focus_in (GtkWidget *widget, GdkEventFocus *event) -{ - EWeekView *week_view; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (E_IS_WEEK_VIEW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - week_view = E_WEEK_VIEW (widget); - - GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); - - gtk_widget_queue_draw (week_view->main_canvas); - - return FALSE; -} - - -static gint -e_week_view_focus_out (GtkWidget *widget, GdkEventFocus *event) -{ - EWeekView *week_view; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (E_IS_WEEK_VIEW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - week_view = E_WEEK_VIEW (widget); - - GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); - - gtk_widget_queue_draw (week_view->main_canvas); - - return FALSE; -} - - -/* This draws a shadow around the top display and main display. */ -static gint -e_week_view_expose_event (GtkWidget *widget, - GdkEventExpose *event) -{ - EWeekView *week_view; - - week_view = E_WEEK_VIEW (widget); - - e_week_view_draw_shadow (week_view); - - if (GTK_WIDGET_CLASS (parent_class)->expose_event) - (*GTK_WIDGET_CLASS (parent_class)->expose_event)(widget, event); - - return FALSE; -} - - -static void -e_week_view_draw (GtkWidget *widget, - GdkRectangle *area) -{ - EWeekView *week_view; - - week_view = E_WEEK_VIEW (widget); - - e_week_view_draw_shadow (week_view); - - if (GTK_WIDGET_CLASS (parent_class)->draw) - (*GTK_WIDGET_CLASS (parent_class)->draw)(widget, area); -} - - -static void -e_week_view_draw_shadow (EWeekView *week_view) -{ - gint x1, y1, x2, y2; - GtkStyle *style; - GdkGC *light_gc, *dark_gc; - GdkWindow *window; - - /* Draw the shadow around the graphical displays. */ - x1 = week_view->main_canvas->allocation.x - 1; - y1 = week_view->main_canvas->allocation.y - 1; - x2 = x1 + week_view->main_canvas->allocation.width + 2; - y2 = y1 + week_view->main_canvas->allocation.height + 2; - - style = GTK_WIDGET (week_view)->style; - dark_gc = style->dark_gc[GTK_STATE_NORMAL]; - light_gc = style->light_gc[GTK_STATE_NORMAL]; - - window = GTK_WIDGET (week_view)->window; - gdk_draw_line (window, dark_gc, x1, y1, x1, y2); - gdk_draw_line (window, dark_gc, x1, y1, x2, y1); - gdk_draw_line (window, light_gc, x2, y1, x2, y2); - gdk_draw_line (window, light_gc, x1, y2, x2, y2); -} - - -void -e_week_view_set_calendar (EWeekView *week_view, - GnomeCalendar *calendar) -{ - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - week_view->calendar = calendar; - - /* FIXME: free current events? */ -} - - -/* This sets the selected time range. The EWeekView will show the corresponding - month and the days between start_time and end_time will be selected. - To select a single day, use the same value for start_time & end_time. */ -void -e_week_view_set_selected_time_range (EWeekView *week_view, - time_t start_time, - time_t end_time) -{ - GDate date, base_date, end_date; - gint day_offset, num_days; - gboolean update_adjustment_value = FALSE; - - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - g_date_clear (&date, 1); - g_date_set_time (&date, start_time); - - if (week_view->display_month) { - /* Find the number of days since the start of the month. */ - day_offset = g_date_day (&date) - 1; - - /* Find the 1st Monday at or before the start of the month. */ - base_date = date; - g_date_set_day (&base_date, 1); - day_offset += g_date_weekday (&base_date) - 1; - } else { - /* Find the 1st Monday at or before the given day. */ - day_offset = g_date_weekday (&date) - 1; - } - - /* Calculate the base date, i.e. the first day shown when the - scrollbar adjustment value is 0. */ - base_date = date; - g_date_subtract_days (&base_date, day_offset); - - /* See if we need to update the base date. */ - if (!g_date_valid (&week_view->base_date) - || g_date_compare (&week_view->base_date, &base_date)) { - week_view->base_date = base_date; - update_adjustment_value = TRUE; - } - - /* See if we need to update the first day shown. */ - if (!g_date_valid (&week_view->first_day_shown) - || g_date_compare (&week_view->first_day_shown, &base_date)) { - week_view->first_day_shown = base_date; - start_time = time_add_day (start_time, -day_offset); - start_time = time_day_begin (start_time); - e_week_view_recalc_day_starts (week_view, start_time); - e_week_view_reload_events (week_view); - } - - /* Set the selection to the given days. */ - week_view->selection_start_day = g_date_julian (&date) - - g_date_julian (&base_date); - if (end_time == start_time - || end_time <= time_add_day (start_time, 1)) - week_view->selection_end_day = week_view->selection_start_day; - else { - g_date_clear (&end_date, 1); - g_date_set_time (&end_date, end_time - 60); - week_view->selection_end_day = g_date_julian (&end_date) - - g_date_julian (&base_date); - } - - /* Make sure the selection is valid. */ - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - num_days--; - week_view->selection_start_day = CLAMP (week_view->selection_start_day, - 0, num_days); - week_view->selection_end_day = CLAMP (week_view->selection_end_day, - week_view->selection_start_day, - num_days); - - /* Reset the adjustment value to 0 if the base address has changed. - Note that we do this after updating first_day_shown so that our - signal handler will not try to reload the events. */ - if (update_adjustment_value) - gtk_adjustment_set_value (GTK_RANGE (week_view->vscrollbar)->adjustment, 0); - - - gtk_widget_queue_draw (week_view->main_canvas); -} - - -/* Returns the selected time range. */ -void -e_week_view_get_selected_time_range (EWeekView *week_view, - time_t *start_time, - time_t *end_time) -{ - gint start_day, end_day; - - start_day = week_view->selection_start_day; - end_day = week_view->selection_end_day; - - if (start_day == -1) { - start_day = 0; - end_day = 0; - } - - if (start_time) - *start_time = week_view->day_starts[start_day]; - - if (end_time) - *end_time = week_view->day_starts[end_day + 1]; -} - - -/* Recalculates the time_t corresponding to the start of each day. */ -static void -e_week_view_recalc_day_starts (EWeekView *week_view, - time_t lower) -{ - gint num_days, day; - time_t tmp_time; - - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - - tmp_time = lower; - week_view->day_starts[0] = tmp_time; - for (day = 1; day <= num_days; day++) { - /* FIXME: There is a bug in time_add_day(). */ -#if 0 - g_print ("Day:%i - %s\n", day, ctime (&tmp_time)); -#endif - tmp_time = time_add_day (tmp_time, 1); - week_view->day_starts[day] = tmp_time; - } -} - - -gboolean -e_week_view_get_display_month (EWeekView *week_view) -{ - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); - - return week_view->display_month; -} - - -void -e_week_view_set_display_month (EWeekView *week_view, - gboolean display_month) -{ - GtkAdjustment *adjustment; - gint page_increment, page_size; - - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - if (week_view->display_month == display_month) - return; - - week_view->display_month = display_month; - - if (display_month) { - gtk_widget_show (week_view->titles_canvas); - page_increment = 4; - page_size = 5; - } else { - gtk_widget_hide (week_view->titles_canvas); - page_increment = page_size = 1; - } - - adjustment = GTK_RANGE (week_view->vscrollbar)->adjustment; - adjustment->page_increment = page_increment; - adjustment->page_size = page_size; - gtk_adjustment_changed (adjustment); - - /* FIXME: Need to change start date and adjustment value? */ - - e_week_view_recalc_day_starts (week_view, week_view->day_starts[0]); - e_week_view_recalc_cell_sizes (week_view); - e_week_view_reload_events (week_view); -} - - -gboolean -e_week_view_get_compress_weekend (EWeekView *week_view) -{ - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); - - return week_view->compress_weekend; -} - - -void -e_week_view_set_compress_weekend (EWeekView *week_view, - gboolean compress) -{ - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - if (week_view->compress_weekend == compress) - return; - - week_view->compress_weekend = compress; - - /* The option only affects the month view. */ - if (!week_view->display_month) - return; - - /* FIXME: Need to update layout. */ -} - - -/* This reloads all calendar events. */ -void -e_week_view_update_all_events (EWeekView *week_view) -{ - e_week_view_reload_events (week_view); -} - - -/* This is called when one event has been added or updated. */ -void -e_week_view_update_event (EWeekView *week_view, - const gchar *uid) -{ - EWeekViewEvent *event; - gint event_num, num_days; - CalComponent *comp; - CalClientGetStatus status; - - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - -#if 0 - g_print ("In e_week_view_update_event\n"); -#endif - - /* If we don't have a calendar or valid date set yet, just return. */ - if (!week_view->calendar - || !g_date_valid (&week_view->first_day_shown)) - return; - - /* Get the event from the server. */ - status = cal_client_get_object (week_view->calendar->client, uid, &comp); - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - /* Do nothing. */ - break; - case CAL_CLIENT_GET_SYNTAX_ERROR: - g_warning ("syntax error uid=%s\n", uid); - return; - case CAL_CLIENT_GET_NOT_FOUND: - g_warning ("obj not found uid=%s\n", uid); - return; - } - - /* We only care about events. */ - if (comp && cal_component_get_vtype (comp) != CAL_COMPONENT_EVENT) { - gtk_object_unref (GTK_OBJECT (comp)); - return; - } - - /* If the event already exists and the dates didn't change, we can - update the event fairly easily without changing the events arrays - or computing a new layout. */ - if (e_week_view_find_event_from_uid (week_view, uid, &event_num)) { -#warning "FIX ME" - /* Do this the long way every time for now */ -#if 0 - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - - if (ical_object_compare_dates (event->ico, ico)) { - e_week_view_foreach_event_with_uid (week_view, uid, e_week_view_update_event_cb, comp); - gtk_object_unref (GTK_OBJECT (comp)); - gtk_widget_queue_draw (week_view->main_canvas); - return; - } -#endif - /* The dates have changed, so we need to remove the - old occurrrences before adding the new ones. */ - e_week_view_foreach_event_with_uid (week_view, uid, - e_week_view_remove_event_cb, - NULL); - } - - /* Add the occurrences of the event. */ - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - - cal_recur_generate_instances (comp, - week_view->day_starts[0], - week_view->day_starts[num_days], - e_week_view_add_event, - week_view); - - gtk_object_unref (GTK_OBJECT (comp)); - - e_week_view_check_layout (week_view); - - gtk_widget_queue_draw (week_view->main_canvas); -} - - -static gboolean -e_week_view_update_event_cb (EWeekView *week_view, - gint event_num, - gpointer data) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gint span_num; - gchar *text; - CalComponent *comp; - - comp = data; - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - event->comp = comp; - gtk_object_ref (GTK_OBJECT (comp)); - - /* If we are editing an event which we have just created, we will get - an update_event callback from the server. But we need to ignore it - or we will lose the text the user has already typed in. */ - if (week_view->editing_new_event - && week_view->editing_event_num == event_num) { - return TRUE; - } - - for (span_num = 0; span_num < event->num_spans; span_num++) { - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + span_num); - - if (span->text_item) { - CalComponentText t; - - cal_component_get_summary (event->comp, &t); - text = g_strdup (t.value); - gnome_canvas_item_set (span->text_item, - "text", text ? text : "", - NULL); - g_free (text); - - e_week_view_reshape_event_span (week_view, event_num, - span_num); - } - } - - return TRUE; -} - - -/* This calls a given function for each event instance that matches the given - uid. Note that it is safe for the callback to remove the event (since we - step backwards through the arrays). */ -static void -e_week_view_foreach_event_with_uid (EWeekView *week_view, - const gchar *uid, - EWeekViewForeachEventCallback callback, - gpointer data) -{ - EWeekViewEvent *event; - gint event_num; - - for (event_num = week_view->events->len - 1; - event_num >= 0; - event_num--) { - const char *u; - - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - - cal_component_get_uid (event->comp, &u); - if (u && !strcmp (uid, u)) { - if (!(*callback) (week_view, event_num, data)) - return; - } - } -} - - -/* This removes all the events associated with the given uid. Note that for - recurring events there may be more than one. If any events are found and - removed we need to layout the events again. */ -void -e_week_view_remove_event (EWeekView *week_view, - const gchar *uid) -{ - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); - - e_week_view_foreach_event_with_uid (week_view, uid, - e_week_view_remove_event_cb, NULL); - - e_week_view_check_layout (week_view); - gtk_widget_queue_draw (week_view->main_canvas); -} - - -static gboolean -e_week_view_remove_event_cb (EWeekView *week_view, - gint event_num, - gpointer data) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gint span_num; - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - - /* If we were editing this event, set editing_event_num to -1 so - on_editing_stopped doesn't try to update the event. */ - if (week_view->editing_event_num == event_num) - week_view->editing_event_num = -1; - - /* We leave the span elements in the array, but set the canvas item - pointers to NULL. */ - for (span_num = 0; span_num < event->num_spans; span_num++) { - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + span_num); - - if (span->text_item) { - gtk_object_destroy (GTK_OBJECT (span->text_item)); - span->text_item = NULL; - } - if (span->background_item) { - gtk_object_destroy (GTK_OBJECT (span->background_item)); - span->background_item = NULL; - } - } - - gtk_object_unref (GTK_OBJECT (event->comp)); - - g_array_remove_index (week_view->events, event_num); - week_view->events_need_layout = TRUE; - - return TRUE; -} - - -void -e_week_view_get_day_position (EWeekView *week_view, - gint day, - gint *day_x, - gint *day_y, - gint *day_w, - gint *day_h) -{ - gint week, day_of_week, row; - - *day_x = *day_y = *day_w = *day_h = 0; - g_return_if_fail (day >= 0); - - if (week_view->display_month) { - g_return_if_fail (day < E_WEEK_VIEW_MAX_WEEKS * 7); - - week = day / 7; - day_of_week = day % 7; - if (week_view->compress_weekend && day_of_week >= 5) { - /* In the compressed view Saturday is above Sunday and - both have just one row as opposed to 2 for all the - other days. */ - if (day_of_week == 5) { - *day_y = week_view->row_offsets[week * 2]; - *day_h = week_view->row_heights[week * 2]; - } else { - *day_y = week_view->row_offsets[week * 2 + 1]; - *day_h = week_view->row_heights[week * 2 + 1]; - } - /* Both Saturday and Sunday are in the 6th column. */ - *day_x = week_view->col_offsets[5]; - *day_w = week_view->col_widths[5]; - } else { - *day_y = week_view->row_offsets[week * 2]; - *day_h = week_view->row_heights[week * 2] - + week_view->row_heights[week * 2 + 1]; - *day_x = week_view->col_offsets[day_of_week]; - *day_w = week_view->col_widths[day_of_week]; - } - } else { - g_return_if_fail (day < 7); - - /* The week view has Mon, Tue & Wed down the left column and - Thu, Fri & Sat/Sun down the right. */ - if (day < 3) { - *day_x = week_view->col_offsets[0]; - *day_w = week_view->col_widths[0]; - } else { - *day_x = week_view->col_offsets[1]; - *day_w = week_view->col_widths[1]; - } - - if (day < 5) { - row = (day % 3) * 2; - *day_y = week_view->row_offsets[row]; - *day_h = week_view->row_heights[row] - + week_view->row_heights[row + 1]; - } else { - /* Saturday & Sunday. */ - *day_y = week_view->row_offsets[day - 1]; - *day_h = week_view->row_heights[day - 1]; - } - } -} - - -/* Returns the bounding box for a span of an event. Usually this can easily - be determined by the start & end days and row of the span, which are set in - e_week_view_layout_event(). Though we need a special case for the weekends - when they are compressed, since the span may not fit. */ -gboolean -e_week_view_get_span_position (EWeekView *week_view, - gint event_num, - gint span_num, - gint *span_x, - gint *span_y, - gint *span_w) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gint end_day_of_week, num_days; - gint start_x, start_y, start_w, start_h; - gint end_x, end_y, end_w, end_h; - - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); - g_return_val_if_fail (event_num < week_view->events->len, FALSE); - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - - g_return_val_if_fail (span_num < event->num_spans, FALSE); - - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + span_num); - - if (span->row >= week_view->rows_per_cell) - return FALSE; - - end_day_of_week = (span->start_day + span->num_days - 1) % 7; - num_days = span->num_days; - /* Check if the row will not be visible in compressed cells. */ - if (span->row >= week_view->rows_per_compressed_cell) { - if (week_view->display_month) { - if (week_view->compress_weekend) { - /* If it ends on a Saturday and is 1 day long - we skip it, else we shorten it. If it ends - on a Sunday it must be 1 day long and we - skip it. */ - if (end_day_of_week == 5) { /* Sat */ - if (num_days == 1) { - return FALSE; - } else { - num_days--; - } - } else if (end_day_of_week == 6) { /* Sun */ - return FALSE; - } - } - } else { - /* All spans are 1 day long in the week view, so we - just skip it. */ - if (end_day_of_week > 4) - return FALSE; - } - } - - e_week_view_get_day_position (week_view, span->start_day, - &start_x, &start_y, &start_w, &start_h); - *span_y = start_y + week_view->events_y_offset - + span->row * (week_view->row_height - + E_WEEK_VIEW_EVENT_Y_SPACING); - if (num_days == 1) { - *span_x = start_x; - *span_w = start_w; - } else { - e_week_view_get_day_position (week_view, - span->start_day + num_days - 1, - &end_x, &end_y, &end_w, &end_h); - *span_x = start_x; - *span_w = end_x - start_x + end_w; - } - - return TRUE; -} - - - -static gboolean -e_week_view_on_button_press (GtkWidget *widget, - GdkEventButton *event, - EWeekView *week_view) -{ - gint x, y, day; - -#if 0 - g_print ("In e_week_view_on_button_press\n"); -#endif - - /* Handle scroll wheel events */ - if (event->button == 4 || event->button == 5) { - GtkAdjustment *adj = GTK_RANGE (week_view->vscrollbar)->adjustment; - gfloat new_value; - - new_value = adj->value + ((event->button == 4) ? - -adj->page_increment: - adj->page_increment); - new_value = CLAMP (new_value, adj->lower, adj->upper - adj->page_size); - gtk_adjustment_set_value (adj, new_value); - - return TRUE; - } - - /* If an event is pressed just return. */ - if (week_view->pressed_event_num != -1) - return FALSE; - - /* Convert the mouse position to a week & day. */ - x = event->x; - y = event->y; - day = e_week_view_convert_position_to_day (week_view, x, y); - if (day == -1) - return FALSE; - - /* Start the selection drag. */ - if (event->button == 1) { - if (!GTK_WIDGET_HAS_FOCUS (week_view)) - gtk_widget_grab_focus (GTK_WIDGET (week_view)); - - if (gdk_pointer_grab (GTK_LAYOUT (widget)->bin_window, FALSE, - GDK_POINTER_MOTION_MASK - | GDK_BUTTON_RELEASE_MASK, - FALSE, NULL, event->time) == 0) { - week_view->selection_start_day = day; - week_view->selection_end_day = day; - week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_END; - - /* FIXME: Optimise? */ - gtk_widget_queue_draw (week_view->main_canvas); - } - } else if (event->button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (week_view)) - gtk_widget_grab_focus (GTK_WIDGET (week_view)); - e_week_view_show_popup_menu (week_view, event, -1); - } - - return FALSE; -} - - -static gboolean -e_week_view_on_button_release (GtkWidget *widget, - GdkEventButton *event, - EWeekView *week_view) -{ - time_t start, end; - -#if 0 - g_print ("In e_week_view_on_button_release\n"); -#endif - - if (week_view->selection_drag_pos != E_WEEK_VIEW_DRAG_NONE) { - week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_NONE; - gdk_pointer_ungrab (event->time); - start = week_view->day_starts[week_view->selection_start_day]; - end = week_view->day_starts[week_view->selection_end_day + 1]; - gnome_calendar_set_selected_time_range (week_view->calendar, - start, end); - } - - return FALSE; -} - - -static gboolean -e_week_view_on_motion (GtkWidget *widget, - GdkEventMotion *mevent, - EWeekView *week_view) -{ - gint x, y, day; - -#if 0 - g_print ("In e_week_view_on_motion\n"); -#endif - - /* Convert the mouse position to a week & day. */ - x = mevent->x; - y = mevent->y; - day = e_week_view_convert_position_to_day (week_view, x, y); - if (day == -1) - return FALSE; - - if (week_view->selection_drag_pos != E_WEEK_VIEW_DRAG_NONE) { - e_week_view_update_selection (week_view, day); - return TRUE; - } - - return FALSE; -} - - -/* Converts a position in the canvas window to a day offset from the first - day displayed. Returns -1 if the position is outside the grid. */ -static gint -e_week_view_convert_position_to_day (EWeekView *week_view, - gint x, - gint y) -{ - gint col, row, grid_x = -1, grid_y = -1, week, day; - - /* First we convert it to a grid position. */ - for (col = 0; col <= week_view->columns; col++) { - if (x < week_view->col_offsets[col]) { - grid_x = col - 1; - break; - } - } - - for (row = 0; row <= week_view->rows; row++) { - if (y < week_view->row_offsets[row]) { - grid_y = row - 1; - break; - } - } - - /* If the mouse is outside the grid return FALSE. */ - if (grid_x == -1 || grid_y == -1) - return -1; - - /* Now convert the grid position to a week and day. */ - if (week_view->display_month) { - week = grid_y / 2; - if (week_view->compress_weekend && grid_x == 5 - && grid_y % 2 == 1) - day = 6; - else - day = grid_x; - } else { - week = 0; - if (grid_x == 0) - day = grid_y / 2; - else if (grid_y == 5) - day = 6; - else - day = grid_y / 2 + 3; - } - - return week * 7 + day; -} - - -static void -e_week_view_update_selection (EWeekView *week_view, - gint day) -{ - gint tmp_day; - gboolean need_redraw = FALSE; - -#if 0 - g_print ("Updating selection %i,%i\n", week, day); -#endif - - if (week_view->selection_drag_pos == E_WEEK_VIEW_DRAG_START) { - if (day != week_view->selection_start_day) { - need_redraw = TRUE; - week_view->selection_start_day = day; - } - } else { - if (day != week_view->selection_end_day) { - need_redraw = TRUE; - week_view->selection_end_day = day; - } - } - - /* Switch the drag position if necessary. */ - if (week_view->selection_start_day > week_view->selection_end_day) { - tmp_day = week_view->selection_start_day; - week_view->selection_start_day = week_view->selection_end_day; - week_view->selection_end_day = tmp_day; - if (week_view->selection_drag_pos == E_WEEK_VIEW_DRAG_START) - week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_END; - else - week_view->selection_drag_pos = E_WEEK_VIEW_DRAG_START; - } - - /* FIXME: Optimise? */ - if (need_redraw) { - gtk_widget_queue_draw (week_view->main_canvas); - } -} - - -static void -e_week_view_reload_events (EWeekView *week_view) -{ - gint num_days; - - e_week_view_free_events (week_view); - - if (week_view->calendar - && g_date_valid (&week_view->first_day_shown)) { - num_days = week_view->display_month - ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - - cal_client_generate_instances (week_view->calendar->client, - CALOBJ_TYPE_EVENT, - week_view->day_starts[0], - week_view->day_starts[num_days], - e_week_view_add_event, - week_view); - } - - e_week_view_check_layout (week_view); - - gtk_widget_queue_draw (week_view->main_canvas); -} - - -static void -e_week_view_free_events (EWeekView *week_view) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gint event_num, span_num; - - for (event_num = 0; event_num < week_view->events->len; event_num++) { - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - gtk_object_unref (GTK_OBJECT (event->comp)); - } - - g_array_set_size (week_view->events, 0); - - /* Destroy all the old canvas items. */ - if (week_view->spans) { - for (span_num = 0; span_num < week_view->spans->len; - span_num++) { - span = &g_array_index (week_view->spans, - EWeekViewEventSpan, span_num); - if (span->background_item) - gtk_object_destroy (GTK_OBJECT (span->background_item)); - if (span->text_item) - gtk_object_destroy (GTK_OBJECT (span->text_item)); - } - g_array_free (week_view->spans, TRUE); - week_view->spans = NULL; - } -} - - -/* This adds one event to the view, adding it to the appropriate array. */ -static gboolean -e_week_view_add_event (CalComponent *comp, - time_t start, - time_t end, - gpointer data) - -{ - EWeekView *week_view; - EWeekViewEvent event; - gint num_days; - struct tm start_tm, end_tm; - - week_view = E_WEEK_VIEW (data); - - /* Check that the event times are valid. */ - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - -#if 0 - g_print ("View start:%li end:%li Event start:%li end:%li\n", - week_view->day_starts[0], week_view->day_starts[num_days], - start, end); -#endif - - g_return_val_if_fail (start <= end, TRUE); - g_return_val_if_fail (start < week_view->day_starts[num_days], TRUE); - g_return_val_if_fail (end > week_view->day_starts[0], TRUE); - - start_tm = *(localtime (&start)); - end_tm = *(localtime (&end)); - - event.comp = comp; - gtk_object_ref (GTK_OBJECT (event.comp)); - event.start = start; - event.end = end; - event.spans_index = 0; - event.num_spans = 0; - - event.start_minute = start_tm.tm_hour * 60 + start_tm.tm_min; - event.end_minute = end_tm.tm_hour * 60 + end_tm.tm_min; - if (event.end_minute == 0 && start != end) - event.end_minute = 24 * 60; - - g_array_append_val (week_view->events, event); - week_view->events_sorted = FALSE; - week_view->events_need_layout = TRUE; - - return TRUE; -} - - -/* This lays out the events, or reshapes them, as necessary. */ -static void -e_week_view_check_layout (EWeekView *week_view) -{ - /* Don't bother if we aren't visible. */ - if (!GTK_WIDGET_VISIBLE (week_view)) - return; - - /* Make sure the events are sorted (by start and size). */ - e_week_view_ensure_events_sorted (week_view); - - if (week_view->events_need_layout) - e_week_view_layout_events (week_view); - - if (week_view->events_need_layout || week_view->events_need_reshape) - e_week_view_reshape_events (week_view); - - week_view->events_need_layout = FALSE; - week_view->events_need_reshape = FALSE; -} - - -static void -e_week_view_layout_events (EWeekView *week_view) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gint num_days, day, event_num, span_num; - guint8 *grid; - GArray *spans, *old_spans; - - /* This is a temporary 2-d grid which is used to place events. - Each element is 0 if the position is empty, or 1 if occupied. - We allocate the maximum size possible here, assuming that each - event will need its own row. */ - grid = g_new0 (guint8, E_WEEK_VIEW_MAX_ROWS_PER_CELL * 7 - * E_WEEK_VIEW_MAX_WEEKS); - - /* We create a new array of spans, which will replace the old one. */ - spans = g_array_new (FALSE, FALSE, sizeof (EWeekViewEventSpan)); - - /* Clear the number of rows used per day. */ - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - for (day = 0; day <= num_days; day++) { - week_view->rows_per_day[day] = 0; - } - - /* Iterate over the events, finding which weeks they cover, and putting - them in the first free row available. */ - for (event_num = 0; event_num < week_view->events->len; event_num++) { - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - e_week_view_layout_event (week_view, event, grid, spans); - } - - /* Free the grid. */ - g_free (grid); - - /* Replace the spans array. */ - old_spans = week_view->spans; - week_view->spans = spans; - - /* Destroy the old spans array, destroying any unused canvas items. */ - if (old_spans) { - for (span_num = 0; span_num < old_spans->len; span_num++) { - span = &g_array_index (old_spans, EWeekViewEventSpan, - span_num); - if (span->background_item) - gtk_object_destroy (GTK_OBJECT (span->background_item)); - if (span->text_item) - gtk_object_destroy (GTK_OBJECT (span->text_item)); - } - g_array_free (old_spans, TRUE); - } -} - - -static void -e_week_view_layout_event (EWeekView *week_view, - EWeekViewEvent *event, - guint8 *grid, - GArray *spans) -{ - gint start_day, end_day, span_start_day, span_end_day, rows_per_cell; - gint free_row, row, day, span_num, spans_index, num_spans, max_day; - EWeekViewEventSpan span, *old_span; - - start_day = e_week_view_find_day (week_view, event->start, FALSE); - end_day = e_week_view_find_day (week_view, event->end, TRUE); - max_day = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 - 1 - : 7 - 1; - start_day = CLAMP (start_day, 0, max_day); - end_day = CLAMP (end_day, 0, max_day); - -#if 0 - g_print ("In e_week_view_layout_event Start:%i End: %i\n", - start_day, end_day); -#endif - - /* Iterate through each of the spans of the event, where each span - is a sequence of 1 or more days displayed next to each other. */ - span_start_day = start_day; - rows_per_cell = E_WEEK_VIEW_MAX_ROWS_PER_CELL; - span_num = 0; - spans_index = spans->len; - num_spans = 0; - while (span_start_day <= end_day) { - span_end_day = e_week_view_find_span_end (week_view, - span_start_day); - span_end_day = MIN (span_end_day, end_day); -#if 0 - g_print (" Span start:%i end:%i\n", span_start_day, - span_end_day); -#endif - /* Try each row until we find a free one or we fall off the - bottom of the available rows. */ - row = 0; - free_row = -1; - while (free_row == -1 && row < rows_per_cell) { - free_row = row; - for (day = span_start_day; day <= span_end_day; - day++) { - if (grid[day * rows_per_cell + row]) { - free_row = -1; - break; - } - } - row++; - }; - - if (free_row != -1) { - /* Mark the cells as full. */ - for (day = span_start_day; day <= span_end_day; - day++) { - grid[day * rows_per_cell + free_row] = 1; - week_view->rows_per_day[day] = MAX (week_view->rows_per_day[day], free_row + 1); - } -#if 0 - g_print (" Span start:%i end:%i row:%i\n", - span_start_day, span_end_day, free_row); -#endif - /* Add the span to the array, and try to reuse any - canvas items from the old spans. */ - span.start_day = span_start_day; - span.num_days = span_end_day - span_start_day + 1; - span.row = free_row; - span.background_item = NULL; - span.text_item = NULL; - if (event->num_spans > span_num) { - old_span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + span_num); - span.background_item = old_span->background_item; - span.text_item = old_span->text_item; - old_span->background_item = NULL; - old_span->text_item = NULL; - } - - g_array_append_val (spans, span); - num_spans++; - } - - span_start_day = span_end_day + 1; - span_num++; - } - - /* Set the event's spans. */ - event->spans_index = spans_index; - event->num_spans = num_spans; -} - - -static void -e_week_view_ensure_events_sorted (EWeekView *week_view) -{ - if (!week_view->events_sorted) { - qsort (week_view->events->data, - week_view->events->len, - sizeof (EWeekViewEvent), - e_week_view_event_sort_func); - week_view->events_sorted = TRUE; - } -} - - -static gint -e_week_view_event_sort_func (const void *arg1, - const void *arg2) -{ - EWeekViewEvent *event1, *event2; - - event1 = (EWeekViewEvent*) arg1; - event2 = (EWeekViewEvent*) arg2; - - if (event1->start < event2->start) - return -1; - if (event1->start > event2->start) - return 1; - - if (event1->end > event2->end) - return -1; - if (event1->end < event2->end) - return 1; - - return 0; -} - - -static void -e_week_view_reshape_events (EWeekView *week_view) -{ - EWeekViewEvent *event; - gint event_num, span_num; - gint num_days, day, day_x, day_y, day_w, day_h, max_rows; - gboolean is_weekend; - - for (event_num = 0; event_num < week_view->events->len; event_num++) { - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - for (span_num = 0; span_num < event->num_spans; span_num++) { - e_week_view_reshape_event_span (week_view, event_num, - span_num); - } - } - - /* Reshape the jump buttons and show/hide them as appropriate. */ - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - for (day = 0; day < num_days; day++) { - - is_weekend = (day % 7 >= 5) ? TRUE : FALSE; - if (!is_weekend || (week_view->display_month - && !week_view->compress_weekend)) - max_rows = week_view->rows_per_cell; - else - max_rows = week_view->rows_per_compressed_cell; - - /* Determine whether the jump button should be shown. */ - if (week_view->rows_per_day[day] <= max_rows) { - gnome_canvas_item_hide (week_view->jump_buttons[day]); - } else { - e_week_view_get_day_position (week_view, day, - &day_x, &day_y, - &day_w, &day_h); - - gnome_canvas_item_set (week_view->jump_buttons[day], - "GnomeCanvasPixbuf::x", (gdouble) (day_x + day_w - E_WEEK_VIEW_JUMP_BUTTON_X_PAD - E_WEEK_VIEW_JUMP_BUTTON_WIDTH), - "GnomeCanvasPixbuf::y", (gdouble) (day_y + day_h - E_WEEK_VIEW_JUMP_BUTTON_Y_PAD - E_WEEK_VIEW_JUMP_BUTTON_HEIGHT), - NULL); - - gnome_canvas_item_show (week_view->jump_buttons[day]); - gnome_canvas_item_raise_to_top (week_view->jump_buttons[day]); - } - } - - for (day = num_days; day < E_WEEK_VIEW_MAX_WEEKS * 7; day++) { - gnome_canvas_item_hide (week_view->jump_buttons[day]); - } -} - - -static void -e_week_view_reshape_event_span (EWeekView *week_view, - gint event_num, - gint span_num) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - GdkFont *font; - gint span_x, span_y, span_w, num_icons, icons_width, time_width; - gint min_text_x, max_text_w, width; - gboolean show_icons = TRUE, use_max_width = FALSE; - gboolean one_day_event; - CalComponent *comp; - gdouble text_x, text_y, text_w, text_h; - gchar *text, *end_of_line; - gint line_len, text_width; - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + span_num); - comp = event->comp; - font = GTK_WIDGET (week_view)->style->font; - - one_day_event = e_week_view_is_one_day_event (week_view, event_num); - - /* If the span will not be visible destroy the canvas items and - return. */ - if (!e_week_view_get_span_position (week_view, event_num, span_num, - &span_x, &span_y, &span_w)) { - if (span->background_item) - gtk_object_destroy (GTK_OBJECT (span->background_item)); - if (span->text_item) - gtk_object_destroy (GTK_OBJECT (span->text_item)); - span->background_item = NULL; - span->text_item = NULL; - return; - } - - if (!one_day_event && week_view->editing_event_num == event_num - && week_view->editing_span_num == span_num) { - show_icons = FALSE; - use_max_width = TRUE; - } - - num_icons = 0; -#if 0 - if (show_icons) { - if (ico->dalarm.enabled || ico->malarm.enabled - || ico->palarm.enabled || ico->aalarm.enabled) - num_icons++; - if (ico->recur) - num_icons++; - } -#endif - - /* Create the background canvas item if necessary. */ - if (!span->background_item) { - span->background_item = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->main_canvas)->root), - e_week_view_event_item_get_type (), - NULL); - } - - gnome_canvas_item_set (span->background_item, - "event_num", event_num, - "span_num", span_num, - NULL); - - /* Create the text item if necessary. */ - if (!span->text_item) { - CalComponentText text; - - cal_component_get_summary (comp, &text); - span->text_item = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (week_view->main_canvas)->root), - e_text_get_type (), - "font_gdk", GTK_WIDGET (week_view)->style->font, - "anchor", GTK_ANCHOR_NW, - "clip", TRUE, -#if 0 - "max_lines", 1, -#endif - "editable", TRUE, - "text", text.value ? text.value : "", - "use_ellipsis", TRUE, - NULL); - gtk_signal_connect (GTK_OBJECT (span->text_item), "event", - GTK_SIGNAL_FUNC (e_week_view_on_text_item_event), - week_view); - } - - /* Calculate the position of the text item. - For events < 1 day it starts after the times & icons and ends at the - right edge of the span. - For events > 1 day we need to determine whether times are shown at - the start and end of the span, then try to center the text item with - the icons in the middle, but making sure we don't go over the times. - */ - - - /* Calculate the space necessary to display a time, e.g. "13:00". */ - if (week_view->use_small_font && week_view->small_font) - time_width = week_view->digit_width * 2 - + week_view->small_digit_width * 2; - else - time_width = week_view->digit_width * 4 - + week_view->colon_width; - - /* Calculate the space needed for the icons. */ - icons_width = (E_WEEK_VIEW_ICON_WIDTH + E_WEEK_VIEW_ICON_X_PAD) - * num_icons; - - /* The y position and height are the same for both event types. */ - text_y = span_y + E_WEEK_VIEW_EVENT_BORDER_HEIGHT - + E_WEEK_VIEW_EVENT_TEXT_Y_PAD; - text_h = font->ascent + font->descent; - - if (one_day_event) { - text_x = span_x + E_WEEK_VIEW_EVENT_L_PAD + icons_width; - - switch (week_view->time_format) { - case E_WEEK_VIEW_TIME_BOTH_SMALL_MIN: - case E_WEEK_VIEW_TIME_BOTH: - text_x += time_width * 2 + week_view->space_width - + E_WEEK_VIEW_EVENT_TIME_R_PAD; - break; - case E_WEEK_VIEW_TIME_START_SMALL_MIN: - case E_WEEK_VIEW_TIME_START: - text_x += time_width + E_WEEK_VIEW_EVENT_TIME_R_PAD; - break; - case E_WEEK_VIEW_TIME_NONE: - break; - } - text_w = span_x + span_w - E_WEEK_VIEW_EVENT_BORDER_WIDTH - - E_WEEK_VIEW_EVENT_R_PAD - text_x; - - } else { - if (use_max_width) { - text_x = span_x + E_WEEK_VIEW_EVENT_L_PAD - + E_WEEK_VIEW_EVENT_BORDER_WIDTH - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - text_w = span_x + span_w - E_WEEK_VIEW_EVENT_R_PAD - - E_WEEK_VIEW_EVENT_BORDER_WIDTH - - E_WEEK_VIEW_EVENT_TEXT_X_PAD - text_x; - } else { - /* Get the requested size of the label. */ - gtk_object_get (GTK_OBJECT (span->text_item), - "text", &text, - NULL); - text_width = 0; - if (text) { - end_of_line = strchr (text, '\n'); - if (end_of_line) - line_len = end_of_line - text; - else - line_len = strlen (text); - text_width = gdk_text_width (font, text, line_len); - g_free (text); - } - - /* Add on the width of the icons and find the default - position. */ - width = text_width + icons_width; - text_x = span_x + (span_w - width) / 2; - - /* Now calculate the left-most valid position, and make - sure we don't go to the left of that. */ - min_text_x = span_x + E_WEEK_VIEW_EVENT_L_PAD - + E_WEEK_VIEW_EVENT_BORDER_WIDTH - + E_WEEK_VIEW_EVENT_TEXT_X_PAD; - if (event->start > week_view->day_starts[span->start_day]) - min_text_x += time_width - + E_WEEK_VIEW_EVENT_TIME_R_PAD; - - text_x = MAX (text_x, min_text_x); - - /* Now calculate the largest valid width, using the - calculated x position, and make sure we don't - exceed that. */ - max_text_w = span_x + span_w - E_WEEK_VIEW_EVENT_R_PAD - - E_WEEK_VIEW_EVENT_BORDER_WIDTH - - E_WEEK_VIEW_EVENT_TEXT_X_PAD - text_x; - if (event->end < week_view->day_starts[span->start_day - + span->num_days]) - max_text_w -= time_width - + E_WEEK_VIEW_EVENT_TIME_R_PAD; - - text_w = MIN (width, max_text_w); - - /* Now take out the space for the icons. */ - text_x += icons_width; - text_w -= icons_width; - } - } - - text_w = MAX (text_w, 0); - gnome_canvas_item_set (span->text_item, - "clip_width", (gdouble) text_w, - "clip_height", (gdouble) text_h, - NULL); - e_canvas_item_move_absolute(span->text_item, - text_x, text_y); -} - - -/* Finds the day containing the given time. - If include_midnight_in_prev_day is TRUE then if the time exactly - matches the start of a day the previous day is returned. This is useful - when calculating the end day of an event. */ -static gint -e_week_view_find_day (EWeekView *week_view, - time_t time_to_find, - gboolean include_midnight_in_prev_day) -{ - gint num_days, day; - time_t *day_starts; - - num_days = week_view->display_month ? E_WEEK_VIEW_MAX_WEEKS * 7 : 7; - day_starts = week_view->day_starts; - - if (time_to_find < day_starts[0]) - return -1; - if (time_to_find > day_starts[num_days]) - return num_days; - - for (day = 1; day <= num_days; day++) { - if (time_to_find <= day_starts[day]) { - if (time_to_find == day_starts[day] - && !include_midnight_in_prev_day) - return day; - return day - 1; - } - } - - g_assert_not_reached (); - return num_days; -} - - -/* This returns the last day in the same span as the given day. A span is all - the days which are displayed next to each other from left to right. - In the week view all spans are only 1 day, since Tuesday is below Monday - rather than beside it etc. In the month view, if the weekends are not - compressed then each week is a span, otherwise Monday to Saturday of each - week is a span, and the Sundays are separate spans. */ -static gint -e_week_view_find_span_end (EWeekView *week_view, - gint day) -{ - gint week, day_of_week, end_day; - - if (week_view->display_month) { - week = day / 7; - day_of_week = day % 7; - if (week_view->compress_weekend && day_of_week <= 5) - end_day = 5; - else - end_day = 6; - return week * 7 + end_day; - } else { - return day; - } -} - - -static void -e_week_view_on_adjustment_changed (GtkAdjustment *adjustment, - EWeekView *week_view) -{ - GDate date; - gint week_offset; - struct tm tm; - time_t lower, start, end; - guint32 old_first_day_julian, new_first_day_julian; - - /* If we don't have a valid date set yet, just return. */ - if (!g_date_valid (&week_view->first_day_shown)) - return; - - /* Determine the first date shown. */ - date = week_view->base_date; - week_offset = floor (adjustment->value + 0.5); - g_date_add_days (&date, week_offset * 7); - - /* Convert the old & new first days shown to julian values. */ - old_first_day_julian = g_date_julian (&week_view->first_day_shown); - new_first_day_julian = g_date_julian (&date); - - /* If we are already showing the date, just return. */ - if (old_first_day_julian == new_first_day_julian) - return; - - /* Set the new first day shown. */ - week_view->first_day_shown = date; - - /* Convert it to a time_t. */ - g_date_to_struct_tm (&date, &tm); - lower = mktime (&tm); - lower = time_day_begin (lower); - - e_week_view_recalc_day_starts (week_view, lower); - e_week_view_reload_events (week_view); - - /* Update the selection, if needed. */ - if (week_view->selection_start_day != -1) { - start = week_view->day_starts[week_view->selection_start_day]; - end = week_view->day_starts[week_view->selection_end_day + 1]; - gnome_calendar_set_selected_time_range (week_view->calendar, - start, end); - } - - gtk_widget_queue_draw (week_view->main_canvas); -} - - -void -e_week_view_start_editing_event (EWeekView *week_view, - gint event_num, - gint span_num, - gchar *initial_text) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - ETextEventProcessor *event_processor = NULL; - ETextEventProcessorCommand command; - - /* If we are already editing the event, just return. */ - if (event_num == week_view->editing_event_num - && span_num == week_view->editing_span_num) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + span_num); - - /* If the event is not shown, don't try to edit it. */ - if (!span->text_item) - return; - - if (initial_text) { - gnome_canvas_item_set (span->text_item, - "text", initial_text, - NULL); - } - - e_canvas_item_grab_focus (span->text_item); - - /* Try to move the cursor to the end of the text. */ - gtk_object_get (GTK_OBJECT (span->text_item), - "event_processor", &event_processor, - NULL); - if (event_processor) { - command.action = E_TEP_MOVE; - command.position = E_TEP_END_OF_BUFFER; - gtk_signal_emit_by_name (GTK_OBJECT (event_processor), - "command", &command); - } -} - - -/* This stops the current edit. If accept is TRUE the event summary is update, - else the edit is cancelled. */ -void -e_week_view_stop_editing_event (EWeekView *week_view) -{ - GtkWidget *toplevel; - - /* Check we are editing an event. */ - if (week_view->editing_event_num == -1) - return; - - /* Set focus to the toplevel so the item loses focus. */ - toplevel = gtk_widget_get_toplevel (GTK_WIDGET (week_view)); - if (toplevel && GTK_IS_WINDOW (toplevel)) - gtk_window_set_focus (GTK_WINDOW (toplevel), NULL); -} - - -static gboolean -e_week_view_on_text_item_event (GnomeCanvasItem *item, - GdkEvent *event, - EWeekView *week_view) -{ - gint event_num, span_num; - -#if 0 - g_print ("In e_week_view_on_text_item_event\n"); -#endif - - switch (event->type) { - case GDK_KEY_PRESS: - if (event && event->key.keyval == GDK_Return) { - /* We set the keyboard focus to the EDayView, so the - EText item loses it and stops the edit. */ - gtk_widget_grab_focus (GTK_WIDGET (week_view)); - - /* Stop the signal last or we will also stop any - other events getting to the EText item. */ - gtk_signal_emit_stop_by_name (GTK_OBJECT (item), - "event"); - return TRUE; - } - break; - case GDK_BUTTON_PRESS: - if (!e_week_view_find_event_from_item (week_view, item, - &event_num, &span_num)) - return FALSE; - - if (event->button.button == 3) { - if (!GTK_WIDGET_HAS_FOCUS (week_view)) - gtk_widget_grab_focus (GTK_WIDGET (week_view)); - e_week_view_show_popup_menu (week_view, - (GdkEventButton*) event, - event_num); - gtk_signal_emit_stop_by_name (GTK_OBJECT (item->canvas), - "button_press_event"); - return TRUE; - } - - week_view->pressed_event_num = event_num; - week_view->pressed_span_num = span_num; - - /* Only let the EText handle the event while editing. */ - if (!E_TEXT (item)->editing) { - gtk_signal_emit_stop_by_name (GTK_OBJECT (item), - "event"); - - if (event) { - week_view->drag_event_x = event->button.x; - week_view->drag_event_y = event->button.y; - } else - g_warning ("No GdkEvent"); - - /* FIXME: Remember the day offset from the start of - the event. */ - - return TRUE; - } - break; - case GDK_BUTTON_RELEASE: - if (!E_TEXT (item)->editing) { - /* This shouldn't ever happen. */ - if (!e_week_view_find_event_from_item (week_view, - item, - &event_num, - &span_num)) - return FALSE; - - if (week_view->pressed_event_num != -1 - && week_view->pressed_event_num == event_num - && week_view->pressed_span_num == span_num) { - e_week_view_start_editing_event (week_view, - event_num, - span_num, - NULL); - week_view->pressed_event_num = -1; - } - - /* Stop the signal last or we will also stop any - other events getting to the EText item. */ - gtk_signal_emit_stop_by_name (GTK_OBJECT (item), - "event"); - return TRUE; - } - week_view->pressed_event_num = -1; - break; - case GDK_FOCUS_CHANGE: - if (event->focus_change.in) { - e_week_view_on_editing_started (week_view, item); - } else { - e_week_view_on_editing_stopped (week_view, item); - } - - return FALSE; - default: - break; - } - - return FALSE; -} - - -static void -e_week_view_on_editing_started (EWeekView *week_view, - GnomeCanvasItem *item) -{ - gint event_num, span_num; - - if (!e_week_view_find_event_from_item (week_view, item, - &event_num, &span_num)) - return; - -#if 0 - g_print ("In e_week_view_on_editing_started event_num:%i span_num:%i\n", event_num, span_num); -#endif - - week_view->editing_event_num = event_num; - week_view->editing_span_num = span_num; - - /* We need to reshape long events so the whole width is used while - editing. */ - if (!e_week_view_is_one_day_event (week_view, event_num)) { - e_week_view_reshape_event_span (week_view, event_num, - span_num); - } -} - - -static void -e_week_view_on_editing_stopped (EWeekView *week_view, - GnomeCanvasItem *item) -{ - gint event_num, span_num; - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gchar *text = NULL; - CalComponentText summary; - const char *uid; - - /* Note: the item we are passed here isn't reliable, so we just stop - the edit of whatever item was being edited. We also receive this - event twice for some reason. */ - event_num = week_view->editing_event_num; - span_num = week_view->editing_span_num; - - /* If no item is being edited, just return. */ - if (event_num == -1) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index + span_num); - - /* Reset the edit fields. */ - week_view->editing_event_num = -1; - week_view->editing_new_event = FALSE; - - /* Check that the event is still valid. */ - cal_component_get_uid (event->comp, &uid); - if (!uid) - return; - - gtk_object_get (GTK_OBJECT (span->text_item), - "text", &text, - NULL); - - /* Only update the summary if necessary. */ - cal_component_get_summary (event->comp, &summary); - if (text && summary.value && !strcmp (text, summary.value)) { - g_free (text); - if (!e_week_view_is_one_day_event (week_view, event_num)) - e_week_view_reshape_event_span (week_view, event_num, - span_num); - return; - } - - summary.value = text; - cal_component_set_summary (event->comp, &summary); - g_free (text); - - if (!cal_client_update_object (week_view->calendar->client, event->comp)) - g_message ("e_week_view_on_editing_stopped(): Could not update the object!"); -} - - -static gboolean -e_week_view_find_event_from_item (EWeekView *week_view, - GnomeCanvasItem *item, - gint *event_num_return, - gint *span_num_return) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - gint event_num, span_num, num_events; - - num_events = week_view->events->len; - for (event_num = 0; event_num < num_events; event_num++) { - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - for (span_num = 0; span_num < event->num_spans; span_num++) { - span = &g_array_index (week_view->spans, - EWeekViewEventSpan, - event->spans_index + span_num); - if (span->text_item == item) { - *event_num_return = event_num; - *span_num_return = span_num; - return TRUE; - } - } - } - - return FALSE; -} - - -/* Finds the index of the event with the given uid. - Returns TRUE if an event with the uid was found. - Note that for recurring events there may be several EWeekViewEvents, one - for each instance, all with the same iCalObject and uid. So only use this - function if you know the event doesn't recur or you are just checking to - see if any events with the uid exist. */ -static gboolean -e_week_view_find_event_from_uid (EWeekView *week_view, - const gchar *uid, - gint *event_num_return) -{ - EWeekViewEvent *event; - gint event_num, num_events; - - num_events = week_view->events->len; - for (event_num = 0; event_num < num_events; event_num++) { - const char *u; - - event = &g_array_index (week_view->events, EWeekViewEvent, - event_num); - - cal_component_get_uid (event->comp, &u); - if (u && !strcmp (uid, u)) { - *event_num_return = event_num; - return TRUE; - } - } - - return FALSE; -} - - -gboolean -e_week_view_is_one_day_event (EWeekView *week_view, - gint event_num) -{ - EWeekViewEvent *event; - EWeekViewEventSpan *span; - - event = &g_array_index (week_view->events, EWeekViewEvent, event_num); - if (event->num_spans != 1) - return FALSE; - - span = &g_array_index (week_view->spans, EWeekViewEventSpan, - event->spans_index); - - if (event->start == week_view->day_starts[span->start_day] - && event->end == week_view->day_starts[span->start_day + 1]) - return FALSE; - - if (span->num_days == 1 - && event->start >= week_view->day_starts[span->start_day] - && event->end <= week_view->day_starts[span->start_day + 1]) - return TRUE; - - return FALSE; -} - - -static gint -e_week_view_key_press (GtkWidget *widget, GdkEventKey *event) -{ - EWeekView *week_view; - CalComponent *comp; - gint event_num; - gchar *initial_text; - CalComponentDateTime date; - time_t dtstart, dtend; - const char *uid; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (E_IS_WEEK_VIEW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - week_view = E_WEEK_VIEW (widget); - - /* The Escape key aborts a resize operation. */ -#if 0 - if (week_view->resize_drag_pos != E_WEEK_VIEW_POS_NONE) { - if (event->keyval == GDK_Escape) { - e_week_view_abort_resize (week_view, event->time); - } - return FALSE; - } -#endif - - if (week_view->selection_start_day == -1) - return FALSE; - - /* We only want to start an edit with a return key or a simple - character. */ - if (event->keyval == GDK_Return) { - initial_text = NULL; - } else if ((event->keyval < 0x20) - || (event->keyval > 0xFF) - || (event->length == 0) - || (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK))) { - return FALSE; - } else { - initial_text = event->string; - } - - /* Add a new event covering the selected range. */ - comp = cal_component_new (); - dtstart = week_view->day_starts[week_view->selection_start_day]; - dtend = week_view->day_starts[week_view->selection_end_day + 1]; - - date.value = g_new0 (struct icaltimetype, 1); - *date.value = icaltimetype_from_timet (dtstart, FALSE); - cal_component_set_dtstart (comp, &date); - *date.value = icaltimetype_from_timet (dtend, FALSE); - cal_component_set_dtend (comp, &date); - g_free (date.value); - - /* We add the event locally and start editing it. When we get the - "update_event" callback from the server, we basically ignore it. - If we were to wait for the "update_event" callback it wouldn't be - as responsive and we may lose a few keystrokes. */ - e_week_view_add_event (comp, dtstart, dtend, week_view); - e_week_view_check_layout (week_view); - gtk_widget_queue_draw (week_view->main_canvas); - - cal_component_get_uid (comp, &uid); - if (e_week_view_find_event_from_uid (week_view, uid, &event_num)) { - e_week_view_start_editing_event (week_view, event_num, 0, - initial_text); - week_view->editing_new_event = TRUE; - } else { - g_warning ("Couldn't find event to start editing.\n"); - } - - if (!cal_client_update_object (week_view->calendar->client, comp)) - g_message ("e_week_view_key_press(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - return TRUE; -} - - -void -e_week_view_show_popup_menu (EWeekView *week_view, - GdkEventButton *bevent, - gint event_num) -{ - EWeekViewEvent *event; - int have_selection, not_being_edited, num_items, i; - struct menu_item *context_menu; - - static struct menu_item items[] = { - { N_("New appointment..."), (GtkSignalFunc) e_week_view_on_new_appointment, NULL, TRUE } - }; - - static struct menu_item child_items[] = { - { N_("Edit this appointment..."), (GtkSignalFunc) e_week_view_on_edit_appointment, NULL, TRUE }, - { N_("Delete this appointment"), (GtkSignalFunc) e_week_view_on_delete_appointment, NULL, TRUE }, - { NULL, NULL, NULL, TRUE }, - { N_("New appointment..."), (GtkSignalFunc) e_week_view_on_new_appointment, NULL, TRUE } - }; - - static struct menu_item recur_child_items[] = { - { N_("Edit this appointment..."), (GtkSignalFunc) e_week_view_on_edit_appointment, NULL, TRUE }, - { N_("Make this appointment movable"), (GtkSignalFunc) e_week_view_on_unrecur_appointment, NULL, TRUE }, - { N_("Delete this occurrence"), (GtkSignalFunc) e_week_view_on_delete_occurrence, NULL, TRUE }, - { N_("Delete all occurrences"), (GtkSignalFunc) e_week_view_on_delete_appointment, NULL, TRUE }, - { NULL, NULL, NULL, TRUE }, - { N_("New appointment..."), (GtkSignalFunc) e_week_view_on_new_appointment, NULL, TRUE } - }; - - have_selection = GTK_WIDGET_HAS_FOCUS (week_view) - && week_view->selection_start_day != -1; - - if (event_num == -1) { - num_items = 1; - context_menu = &items[0]; - context_menu[0].sensitive = have_selection; - } else { - event = &g_array_index (week_view->events, - EWeekViewEvent, event_num); - - /* This used to be set only if the event wasn't being edited - in the event editor, but we can't check that at present. - We could possibly set up another method of checking it. */ - not_being_edited = TRUE; - - if (cal_component_has_rrules (event->comp) - || cal_component_has_rdates (event->comp)) { - num_items = 6; - context_menu = &recur_child_items[0]; - context_menu[0].sensitive = not_being_edited; - context_menu[1].sensitive = not_being_edited; - context_menu[2].sensitive = not_being_edited; - context_menu[3].sensitive = not_being_edited; - context_menu[5].sensitive = have_selection; - } else { - num_items = 4; - context_menu = &child_items[0]; - context_menu[0].sensitive = not_being_edited; - context_menu[1].sensitive = not_being_edited; - context_menu[3].sensitive = have_selection; - } - } - - for (i = 0; i < num_items; i++) - context_menu[i].data = week_view; - - week_view->popup_event_num = event_num; - popup_menu (context_menu, num_items, bevent); -} - - -static void -e_week_view_on_new_appointment (GtkWidget *widget, gpointer data) -{ - EWeekView *week_view; - CalComponent *comp; - CalComponentDateTime date; - week_view = E_WEEK_VIEW (data); - - comp = cal_component_new (); - - date.value = g_new0 (struct icaltimetype, 1); - - *date.value = - icaltimetype_from_timet (week_view->day_starts[week_view->selection_start_day], - FALSE); - cal_component_set_dtstart (comp, &date); - - *date.value = - icaltimetype_from_timet (week_view->day_starts[week_view->selection_end_day + 1], - FALSE); - cal_component_set_dtend (comp, &date); - - g_free (date.value); - - gnome_calendar_edit_object (week_view->calendar, comp); - - gtk_object_unref (GTK_OBJECT (comp)); -} - - -static void -e_week_view_on_edit_appointment (GtkWidget *widget, gpointer data) -{ - EWeekView *week_view; - EWeekViewEvent *event; - - week_view = E_WEEK_VIEW (data); - - if (week_view->popup_event_num == -1) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, - week_view->popup_event_num); - - gnome_calendar_edit_object (week_view->calendar, event->comp); -} - - -static void -e_week_view_on_delete_occurrence (GtkWidget *widget, gpointer data) -{ - EWeekView *week_view; - EWeekViewEvent *event; - CalComponent *comp; - CalComponentDateTime *date=NULL; - GSList *list; - - week_view = E_WEEK_VIEW (data); - - if (week_view->popup_event_num == -1) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, - week_view->popup_event_num); - - /* We must duplicate the CalComponent, or we won't know it has changed - when we get the "update_event" callback. */ - - comp = cal_component_clone (event->comp); - cal_component_get_exdate_list (comp, &list); - list = g_slist_append (list, date); - date = g_new0 (CalComponentDateTime, 1); - date->value = g_new (struct icaltimetype, 1); - *date->value = icaltimetype_from_timet (event->start, TRUE); - cal_component_set_exdate_list (comp, list); - cal_component_free_exdate_list (list); - - if (!cal_client_update_object (week_view->calendar->client, comp)) - g_message ("e_week_view_on_delete_occurrence(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); -} - - -static void -e_week_view_on_delete_appointment (GtkWidget *widget, gpointer data) -{ - EWeekView *week_view; - EWeekViewEvent *event; - const char *uid; - - week_view = E_WEEK_VIEW (data); - - if (week_view->popup_event_num == -1) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, - week_view->popup_event_num); - - cal_component_get_uid (event->comp, &uid); - if (!cal_client_remove_object (week_view->calendar->client, uid)) - g_message ("e_week_view_on_delete_appointment(): Could not remove the object!"); -} - - -static void -e_week_view_on_unrecur_appointment (GtkWidget *widget, gpointer data) -{ - EWeekView *week_view; - EWeekViewEvent *event; - CalComponent *comp, *new_comp; - CalComponentDateTime *date; - GSList *list; - - week_view = E_WEEK_VIEW (data); - - if (week_view->popup_event_num == -1) - return; - - event = &g_array_index (week_view->events, EWeekViewEvent, - week_view->popup_event_num); - - /* For the recurring object, we add a exception to get rid of the - instance. */ - - comp = cal_component_clone (event->comp); - cal_component_get_exdate_list (comp, &list); - date = g_new0 (CalComponentDateTime, 1); - date->value = g_new (struct icaltimetype, 1); - *date->value = icaltimetype_from_timet (event->start, TRUE); - list = g_slist_append (list, date); - cal_component_set_exdate_list (comp, list); - cal_component_free_exdate_list (list); - - /* For the unrecurred instance we duplicate the original object, - create a new uid for it, get rid of the recurrence rules, and set - the start & end times to the instances times. */ - new_comp = cal_component_clone (event->comp); - cal_component_set_uid (new_comp, cal_component_gen_uid ()); - cal_component_set_exdate_list (new_comp, NULL); - cal_component_set_exrule_list (new_comp, NULL); - - date = g_new0 (CalComponentDateTime, 1); - date->value = g_new (struct icaltimetype, 1); - - *date->value = icaltimetype_from_timet (event->start, TRUE); - cal_component_set_dtstart (new_comp, date); - *date->value = icaltimetype_from_timet (event->end, TRUE); - cal_component_set_dtend (new_comp, date); - - cal_component_free_datetime (date); - - /* Now update both CalComponents. Note that we do this last since at - present the updates happen synchronously so our event may disappear. - */ - if (!cal_client_update_object (week_view->calendar->client, comp)) - g_message ("e_week_view_on_unrecur_appointment(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - if (!cal_client_update_object (week_view->calendar->client, new_comp)) - g_message ("e_week_view_on_unrecur_appointment(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (new_comp)); -} - - -static gboolean -e_week_view_on_jump_button_event (GnomeCanvasItem *item, - GdkEvent *event, - EWeekView *week_view) -{ - gint day; - - if (event->type == GDK_BUTTON_PRESS) { - for (day = 0; day < E_WEEK_VIEW_MAX_WEEKS * 7; day++) { - if (item == week_view->jump_buttons[day]) { - gnome_calendar_dayjump (week_view->calendar, - week_view->day_starts[day]); - /* A quick hack to make the 'Day' toolbar - button active. */ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (week_view->calendar->view_toolbar_buttons[0]), TRUE); - return TRUE; - } - } - - } - - return FALSE; -} diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h deleted file mode 100644 index dc2b01e4ff..0000000000 --- a/calendar/gui/e-week-view.h +++ /dev/null @@ -1,380 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Damon Chaplin - * - * Copyright 1999, Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ -#ifndef _E_WEEK_VIEW_H_ -#define _E_WEEK_VIEW_H_ - -#include -#include - -#include "gnome-cal.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* - * EWeekView - displays the Week & Month views of the calendar. - */ - -/* The maximum number of weeks we show. 5 is usually enough for 1 month. */ -#define E_WEEK_VIEW_MAX_WEEKS 5 - -/* The size of the reminder & recurrence icons, and padding around them. */ -#define E_WEEK_VIEW_ICON_WIDTH 16 -#define E_WEEK_VIEW_ICON_HEIGHT 16 -#define E_WEEK_VIEW_ICON_X_PAD 0 -#define E_WEEK_VIEW_ICON_Y_PAD 0 - -/* The space on the left & right of the event. (The triangle to indicate the - event continues is displayed in this space). */ -#define E_WEEK_VIEW_EVENT_L_PAD 2 -#define E_WEEK_VIEW_EVENT_R_PAD 3 - -/* The vertical spacing between rows of events. */ -#define E_WEEK_VIEW_EVENT_Y_SPACING 1 - -/* The size of the border around the event. */ -#define E_WEEK_VIEW_EVENT_BORDER_WIDTH 1 -#define E_WEEK_VIEW_EVENT_BORDER_HEIGHT 1 - -/* The padding on each side of the event text. */ -#define E_WEEK_VIEW_EVENT_TEXT_X_PAD 4 -#define E_WEEK_VIEW_EVENT_TEXT_Y_PAD 1 - -/* The space on the right of the time string, if it is shown. */ -#define E_WEEK_VIEW_EVENT_TIME_R_PAD 2 - -/* The padding above and on the right of the date string at the top of each - cell. */ -#define E_WEEK_VIEW_DATE_T_PAD 2 -#define E_WEEK_VIEW_DATE_R_PAD 4 - -/* The padding above and below the line under the date string, in the Week - view, and also the space on the left of it. */ -#define E_WEEK_VIEW_DATE_LINE_T_PAD 1 -#define E_WEEK_VIEW_DATE_LINE_B_PAD 1 -#define E_WEEK_VIEW_DATE_LINE_L_PAD 10 - -/* The padding below the date string in the Month view. */ -#define E_WEEK_VIEW_DATE_B_PAD 1 - -/* These index our colors array. */ -typedef enum -{ - E_WEEK_VIEW_COLOR_EVEN_MONTHS, - E_WEEK_VIEW_COLOR_ODD_MONTHS, - E_WEEK_VIEW_COLOR_EVENT_BACKGROUND, - E_WEEK_VIEW_COLOR_EVENT_BORDER, - - E_WEEK_VIEW_COLOR_LAST -} EWeekViewColors; - -/* These specify which part of the selection we are dragging, if any. */ -typedef enum -{ - E_WEEK_VIEW_DRAG_NONE, - E_WEEK_VIEW_DRAG_START, - E_WEEK_VIEW_DRAG_END -} EWeekViewDragPosition; - -/* These specify which times are shown for the 1-day events. We use the small - font for the minutes if it can be loaded and the option is on. */ -typedef enum -{ - E_WEEK_VIEW_TIME_NONE, - E_WEEK_VIEW_TIME_START, - E_WEEK_VIEW_TIME_BOTH, - E_WEEK_VIEW_TIME_START_SMALL_MIN, - E_WEEK_VIEW_TIME_BOTH_SMALL_MIN -} EWeekViewTimeFormat; - -/* Specifies the position of the mouse. */ -typedef enum -{ - E_WEEK_VIEW_POS_OUTSIDE, - E_WEEK_VIEW_POS_NONE, - E_WEEK_VIEW_POS_EVENT, - E_WEEK_VIEW_POS_LEFT_EDGE, - E_WEEK_VIEW_POS_RIGHT_EDGE -} EWeekViewPosition; - - -typedef struct _EWeekViewEventSpan EWeekViewEventSpan; -struct _EWeekViewEventSpan { - guint start_day : 6; - guint num_days : 3; - guint row : 7; - GnomeCanvasItem *background_item; - GnomeCanvasItem *text_item; -}; - -typedef struct _EWeekViewEvent EWeekViewEvent; -struct _EWeekViewEvent { - CalComponent *comp; - time_t start; - time_t end; - guint16 start_minute; /* Minutes from the start of the day. */ - guint16 end_minute; - gint spans_index; - guint num_spans; -}; - - -#define E_WEEK_VIEW(obj) GTK_CHECK_CAST (obj, e_week_view_get_type (), EWeekView) -#define E_WEEK_VIEW_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, e_week_view_get_type (), EWeekViewClass) -#define E_IS_WEEK_VIEW(obj) GTK_CHECK_TYPE (obj, e_week_view_get_type ()) - - -typedef struct _EWeekView EWeekView; -typedef struct _EWeekViewClass EWeekViewClass; - -struct _EWeekView -{ - GtkTable table; - - /* The top canvas where the dates are shown. */ - GtkWidget *titles_canvas; - GnomeCanvasItem *titles_canvas_item; - - /* The main canvas where the appointments are shown. */ - GtkWidget *main_canvas; - GnomeCanvasItem *main_canvas_item; - - GnomeCanvasItem *jump_buttons[E_WEEK_VIEW_MAX_WEEKS * 7]; - - GtkWidget *vscrollbar; - - /* The calendar we are associated with. */ - GnomeCalendar *calendar; - - /* The array of EWeekViewEvent elements. */ - GArray *events; - gboolean events_sorted; - gboolean events_need_layout; - gboolean events_need_reshape; - - /* An array of EWeekViewEventSpan elements. Each event has its own - space within this array, and uses the spans_index and num_spans - fields of the EWeekViewEvent struct to access it. */ - GArray *spans; - - /* The start of each day displayed. */ - time_t day_starts[E_WEEK_VIEW_MAX_WEEKS * 7 + 1]; - - /* The base date, where the adjustment value is 0. */ - GDate base_date; - - /* The first day shown in the view. */ - GDate first_day_shown; - - /* If we are displaying 1 week or 1 month. */ - gboolean display_month; - - /* If Sat & Sun are compressed. Only applicable in month view, since - they are always compressed into 1 cell in the week view. */ - gboolean compress_weekend; - - /* The vertical offset of the events from the top of the cells. */ - gint events_y_offset; - - /* The height of the events, not including spacing between them. */ - gint row_height; - - /* The number of rows of events in each cell. */ - gint rows_per_cell; - gint rows_per_compressed_cell; - - /* The number of rows we have used for each day (i.e. each cell) */ - gint rows_per_day[E_WEEK_VIEW_MAX_WEEKS * 7]; - - /* If the small font is used for displaying the minutes. */ - gboolean use_small_font; - - /* Small font to display the minutes. */ - GdkFont *small_font; - - /* The widths of various pieces of text, used to determine which of - several date formats to display, set in e_week_view_style_set(). */ - gint space_width; /* One space character ' '. */ - gint colon_width; /* Size of ':' in the font. */ - gint slash_width; /* Size of '/' in the font. */ - gint digit_width; /* Size of a '0' digit. */ - gint small_digit_width; /* Size of a small_font '0' digit. */ - gint day_widths[7]; /* Monday first. */ - gint max_day_width; - gint abbr_day_widths[7]; - gint max_abbr_day_width; - gint month_widths[12]; - gint max_month_width; - gint abbr_month_widths[12]; - gint max_abbr_month_width; - - /* The size of the main grid of days and of the cells. Note that the - offsets arrays have one more element than the widths/heights arrays - since they also contain the right/bottom edge. */ - gint rows; - gint columns; - gint col_widths[7]; - gint col_offsets[8]; - gint row_heights[10]; - gint row_offsets[11]; - - /* This specifies which times we are showing for the events, depending - on how much room is available. */ - EWeekViewTimeFormat time_format; - - /* The GC used for painting in different colors. */ - GdkGC *main_gc; - - /* The icons. */ - GdkPixmap *reminder_icon; - GdkBitmap *reminder_mask; - GdkPixmap *recurrence_icon; - GdkBitmap *recurrence_mask; - - /* Colors for drawing. */ - GdkColor colors[E_WEEK_VIEW_COLOR_LAST]; - - /* The normal & resizing cursors. */ - GdkCursor *normal_cursor; - GdkCursor *move_cursor; - GdkCursor *resize_width_cursor; - - /* This remembers the last cursor set on the window. */ - GdkCursor *last_cursor_set; - - /* The currently selected region, in days from the first day shown. - If selection_start_day is -1 there is no current selection. */ - gint selection_start_day; - gint selection_end_day; - - /* This specifies which end of the selection is being dragged, or is - E_WEEK_VIEW_DRAG_NONE if the selection isn't being dragged. */ - EWeekViewDragPosition selection_drag_pos; - - /* This is the event the mouse button was pressed on. If the button - is released we start editing it, but if the mouse is dragged we set - this to -1. */ - gint pressed_event_num; - gint pressed_span_num; - - /* The event span currently being edited. The num is -1 if no event is - being edited. */ - gint editing_event_num; - gint editing_span_num; - - /* This is TRUE if we are editing an event which we have just created. - We ignore the "update_event" callback which we will get from the - server when the event is added. */ - gboolean editing_new_event; - - /* The event that the context menu is for. */ - gint popup_event_num; - - /* The last mouse position when dragging, in the entire canvas. */ - gint drag_event_x; - gint drag_event_y; -}; - -struct _EWeekViewClass -{ - GtkTableClass parent_class; -}; - - -GtkType e_week_view_get_type (void); -GtkWidget* e_week_view_new (void); - -void e_week_view_set_calendar (EWeekView *week_view, - GnomeCalendar *calendar); - -/* This sets the selected time range. The EWeekView will show the corresponding - month and the days between start_time and end_time will be selected. - To select a single day, use the same value for start_time & end_time. */ -void e_week_view_set_selected_time_range (EWeekView *week_view, - time_t start_time, - time_t end_time); - -/* Returns the selected time range. */ -void e_week_view_get_selected_time_range (EWeekView *week_view, - time_t *start_time, - time_t *end_time); - -/* Whether to display 1 week or 1 month (5 weeks). It defaults to 1 week. */ -gboolean e_week_view_get_display_month (EWeekView *week_view); -void e_week_view_set_display_month (EWeekView *week_view, - gboolean display_month); - -/* Whether the weekend (Sat/Sun) should be compressed into 1 cell in the Month - view. In the Week view they are always compressed. */ -gboolean e_week_view_get_compress_weekend (EWeekView *week_view); -void e_week_view_set_compress_weekend (EWeekView *week_view, - gboolean compress); - -/* This reloads all calendar events. */ -void e_week_view_update_all_events (EWeekView *week_view); - -/* This is called when one event has been added or updated. */ -void e_week_view_update_event (EWeekView *week_view, - const gchar *uid); - -/* This removes all the events associated with the given uid. Note that for - recurring events there may be more than one. If any events are found and - removed we need to layout the events again. */ -void e_week_view_remove_event (EWeekView *week_view, - const gchar *uid); - - -/* - * Internal functions called by the associated canvas items. - */ -void e_week_view_get_day_position (EWeekView *week_view, - gint day, - gint *day_x, - gint *day_y, - gint *day_w, - gint *day_h); -gboolean e_week_view_get_span_position (EWeekView *week_view, - gint event_num, - gint span_num, - gint *span_x, - gint *span_y, - gint *span_w); -gboolean e_week_view_is_one_day_event (EWeekView *week_view, - gint event_num); -void e_week_view_start_editing_event (EWeekView *week_view, - gint event_num, - gint span_num, - gchar *initial_text); -void e_week_view_stop_editing_event (EWeekView *week_view); - -void e_week_view_show_popup_menu (EWeekView *week_view, - GdkEventButton *event, - gint event_num); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_WEEK_VIEW_H_ */ diff --git a/calendar/gui/event-editor-dialog.glade b/calendar/gui/event-editor-dialog.glade deleted file mode 100644 index d166bca079..0000000000 --- a/calendar/gui/event-editor-dialog.glade +++ /dev/null @@ -1,2024 +0,0 @@ - - - - - event-editor-dialog - event-editor-dialog - - . - pixmaps - C - True - True - False - False - False - True - event-editor-dialog.glade.h - - - - GnomeApp - event-editor-dialog - False - event-editor-dialog - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False - True - - - GnomeDock - GnomeApp:dock - dock2 - True - - 0 - True - True - - - - GtkNotebook - GnomeDock:contents - dialog-contents - 2 - True - True - True - GTK_POS_TOP - False - 2 - 2 - False - - - GtkVBox - vbox2 - 4 - False - 6 - - - GtkTable - table5 - 2 - 2 - False - 4 - 4 - - 0 - False - True - - - - GtkEntry - general-owner - True - True - True - 0 - - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkEntry - general-summary - True - True - True - 0 - - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkLabel - label41 - - GTK_JUSTIFY_CENTER - False - 7.45058e-09 - 0.5 - 0 - 0 - general-summary - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 7.45058e-09 - 0.5 - 0 - 0 - general-owner - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - - GtkFrame - frame4 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - False - True - - - - GtkTable - table3 - 4 - 2 - 3 - False - 4 - 4 - - - GtkLabel - label15 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - False - False - - - - - GtkLabel - label16 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - Custom - start-time - make_date_edit_with_time - - - 0 - 0 - Tue, 16 May 2000 19:11:05 GMT - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - True - - - - - Custom - end-time - make_date_edit_with_time - 0 - 0 - Tue, 16 May 2000 19:11:10 GMT - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - GtkCheckButton - all-day-event - True - - False - True - - 2 - 3 - 0 - 1 - 0 - 0 - False - False - False - False - False - False - - - - - - - GtkScrolledWindow - scrolledwindow3 - GTK_POLICY_NEVER - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkText - description - True - True - - - - - - GtkFrame - frame5 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - False - True - - - - GtkHBox - hbox6 - 4 - False - 4 - - - GtkRadioButton - classification-radio - True - - True - True - classification_radio_group - - 0 - False - False - - - - - GtkRadioButton - - True - - False - True - classification_radio_group - - 0 - False - False - - - - - GtkRadioButton - - True - - False - True - classification_radio_group - - 0 - False - False - - - - - - - - GtkLabel - Notebook:tab - label11 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table4 - 4 - 4 - 5 - False - 4 - 4 - - - GtkSpinButton - alarm-display-amount - True - 1 - 0 - True - GTK_UPDATE_ALWAYS - False - False - 0 - 0 - 100 - 1 - 10 - 10 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - False - - - - - GtkSpinButton - alarm-audio-amount - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 0 - 0 - 100 - 1 - 10 - 10 - - 1 - 2 - 1 - 2 - 0 - 0 - True - False - False - False - True - False - - - - - GtkSpinButton - alarm-program-amount - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 0 - 0 - 100 - 1 - 10 - 10 - - 1 - 2 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - - GtkSpinButton - alarm-mail-amount - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 0 - 0 - 100 - 1 - 10 - 10 - - 1 - 2 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - GtkOptionMenu - alarm-display-unit - True - Minutes -Hours -Days - - 0 - - 2 - 3 - 0 - 1 - 0 - 0 - False - False - False - False - False - False - - - - - GtkOptionMenu - alarm-audio-unit - True - Minutes -Hours -Days - - 0 - - 2 - 3 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkOptionMenu - alarm-program-unit - True - Minutes -Hours -Days - - 0 - - 2 - 3 - 2 - 3 - 0 - 0 - False - False - False - False - False - False - - - - - GtkOptionMenu - alarm-mail-unit - True - Minutes -Hours -Days - - 0 - - 2 - 3 - 3 - 4 - 0 - 0 - False - False - False - False - False - False - - - - - GtkEntry - alarm-mail-mail-to - True - True - True - 0 - - - 4 - 5 - 3 - 4 - 0 - 0 - True - False - False - False - True - False - - - - - GnomeFileEntry - alarm-program-run-program - 10 - False - False - - 4 - 5 - 2 - 3 - 0 - 0 - True - False - False - False - True - False - - - - GtkEntry - GnomeEntry:entry - alarm-program-run-program-entry - True - True - True - 0 - - - - - - GtkCheckButton - alarm-display - True - - False - True - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkCheckButton - alarm-audio - True - - False - True - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkCheckButton - alarm-program - True - - False - True - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkCheckButton - alarm-mail - True - - False - True - - 0 - 1 - 3 - 4 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label18 - - GTK_JUSTIFY_CENTER - False - 7.45058e-09 - 0.5 - 0 - 0 - alarm-mail-mail-to - - 3 - 4 - 3 - 4 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label17 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - alarm-program-run-program-entry - - 3 - 4 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - - GtkLabel - Notebook:tab - label42 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkVBox - vbox3 - 6 - False - 6 - - - GtkFrame - frame8 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - False - True - - - - GtkHBox - hbox7 - False - 0 - - - GtkVBox - vbox4 - 4 - False - 0 - - 0 - False - False - - - - GtkRadioButton - recurrence-rule-none - True - - True - True - recurrence_rule_group - - 0 - False - False - - - - - GtkRadioButton - recurrence-rule-daily - True - - False - True - recurrence_rule_group - - 0 - False - False - - - - - GtkRadioButton - recurrence-rule-weekly - True - - False - True - recurrence_rule_group - - 0 - False - False - - - - - GtkRadioButton - recurrence-rule-monthly - True - - False - True - recurrence_rule_group - - 0 - False - False - - - - - GtkRadioButton - recurrence-rule-yearly - True - - False - True - recurrence_rule_group - - 0 - False - False - - - - - - GtkVSeparator - vseparator1 - - 0 - False - True - - - - - GtkNotebook - recurrence-rule-notebook - False - False - GTK_POS_TOP - False - 2 - 2 - False - - 0 - True - True - - - - GtkTable - table6 - 3 - 3 - False - 0 - 0 - - - - GtkLabel - Notebook:tab - label23 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkAlignment - alignment1 - 0.5 - 0.5 - 1 - 1 - - - GtkVBox - vbox7 - 4 - False - 0 - - - GtkHBox - hbox13 - False - 0 - - 0 - False - True - - - - GtkLabel - label31 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkSpinButton - recurrence-rule-daily-days - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 - 0 - 100 - 1 - 10 - 10 - - 0 - False - True - - - - - GtkLabel - label32 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - - - GtkLabel - Notebook:tab - label24 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkVBox - vbox8 - 4 - False - 2 - - - GtkHBox - hbox14 - False - 0 - - 0 - False - True - - - - GtkLabel - label33 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkSpinButton - recurrence-rule-weekly-weeks - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 - 0 - 100 - 1 - 10 - 10 - - 0 - False - True - - - - - GtkLabel - label34 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - GtkHBox - hbox15 - False - 0 - - 0 - False - True - - - - GtkCheckButton - recurrence-rule-weekly-mon - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - recurrence-rule-weekly-tue - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - recurrence-rule-weekly-wed - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - recurrence-rule-weekly-thu - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - recurrence-rule-weekly-fri - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - recurrence-rule-weekly-sat - True - - False - True - - 0 - False - False - - - - - GtkCheckButton - recurrence-rule-weekly-sun - True - - False - True - - 0 - False - False - - - - - - - GtkLabel - Notebook:tab - label25 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table8 - 2 - 4 - False - 2 - 2 - - - GtkRadioButton - recurrence-rule-monthly-on-day - True - - True - True - recurrence_rule_monthly_group - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - False - False - - - - - GtkRadioButton - recurrence-rule-monthly-weekday - True - - False - True - recurrence_rule_monthly_group - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkLabel - label35 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 2 - 3 - 0 - 1 - 0 - 0 - False - False - False - False - False - False - - - - - GtkOptionMenu - recurrence-rule-monthly-week - True - 1st -2nd -3rd -4th -5th - - 0 - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkOptionMenu - recurrence-rule-monthly-weekpos - True - Monday -Tuesday -Wednesday -Thursday -Friday -Saturday -Sunday - - 0 - - 2 - 3 - 1 - 2 - 0 - 0 - False - False - False - False - False - False - - - - - GtkHBox - hbox19 - 3 - False - 3 - - 3 - 4 - 0 - 2 - 0 - 0 - True - False - False - False - True - True - - - - GtkLabel - label36 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkSpinButton - recurrence-rule-monthly-every-n-months - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 - 1 - 100 - 1 - 10 - 10 - - 0 - False - True - - - - - GtkLabel - label37 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - GtkSpinButton - recurrence-rule-monthly-day-nth - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 - 0 - 100 - 1 - 10 - 10 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - - GtkLabel - Notebook:tab - label26 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkVBox - vbox11 - 4 - False - 0 - - - GtkHBox - hbox20 - False - 0 - - 0 - False - True - - - - GtkLabel - label38 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkSpinButton - recurrence-rule-yearly-every-n-years - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 - 0 - 100 - 1 - 10 - 10 - - 0 - False - True - - - - - GtkLabel - label39 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - - GtkLabel - Notebook:tab - label27 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - - GtkHBox - hbox8 - False - 4 - - 0 - False - True - - - - GtkFrame - frame9 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - False - True - - - - GtkVBox - vbox5 - 4 - True - 2 - - - GtkRadioButton - recurrence-ending-date-repeat-forever - True - - False - True - recurrence_ending_date - - 0 - False - False - - - - - GtkHBox - hbox12 - False - 0 - - 0 - False - True - - - - GtkRadioButton - recurrence-ending-date-end-on - True - - False - True - recurrence_ending_date - - 0 - False - False - - - - - Custom - recurrence-ending-date-end-on-date - 100 - make_date_edit - 0 - 0 - Sat, 13 May 2000 18:02:55 GMT - - 0 - False - True - - - - - - GtkHBox - hbox10 - False - 0 - - 0 - True - True - - - - GtkRadioButton - recurrence-ending-date-end-after - True - - False - True - recurrence_ending_date - - 0 - False - False - - - - - GtkSpinButton - recurrence-ending-date-end-after-count - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 2 - 0 - 100 - 1 - 10 - 10 - - 0 - False - True - - - - - GtkLabel - label28 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - - - GtkFrame - frame10 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkVBox - vbox12 - 4 - False - 4 - - - Custom - recurrence-exceptions-date - make_date_edit - 0 - 0 - Tue, 16 May 2000 01:42:29 GMT - - 0 - True - True - - - - - GtkHBox - hbox21 - False - 4 - - 0 - True - True - - - - GtkVBox - vbox13 - False - 2 - - 0 - False - True - - - - GtkButton - recurrence-exceptions-add - True - - - 0 - False - False - - - - - GtkButton - recurrence-exceptions-change - True - - - 0 - False - False - - - - - GtkButton - recurrence-exceptions-delete - True - - - 0 - False - False - - - - - - GtkScrolledWindow - scrolledwindow2 - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkCList - recurrence-exceptions-list - True - 1 - 80 - GTK_SELECTION_SINGLE - False - GTK_SHADOW_IN - - - GtkLabel - CList:title - label40 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - GtkLabel - Notebook:tab - label12 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - - - GnomeAppBar - GnomeApp:appbar - appbar2 - True - True - - 0 - True - True - - - - - diff --git a/calendar/gui/event-editor-dialog.glade.h b/calendar/gui/event-editor-dialog.glade.h deleted file mode 100644 index d921f3746a..0000000000 --- a/calendar/gui/event-editor-dialog.glade.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Translatable strings file generated by Glade. - * Add this file to your project's POTFILES.in. - * DO NOT compile it as part of your application. - */ - -gchar *s = N_("event-editor-dialog"); -gchar *s = N_("_Summary:"); -gchar *s = N_("_Owner:"); -gchar *s = N_("Time"); -gchar *s = N_("Start time:"); -gchar *s = N_("End time:"); -gchar *s = N_("A_ll day event"); -gchar *s = N_("Classification"); -gchar *s = N_("Pu_blic"); -gchar *s = N_("Pri_vate"); -gchar *s = N_("_Confidential"); -gchar *s = N_("General"); -gchar *s = N_("Minutes\n" - "Hours\n" - "Days\n" - ""); -gchar *s = N_("Minutes\n" - "Hours\n" - "Days\n" - ""); -gchar *s = N_("Minutes\n" - "Hours\n" - "Days\n" - ""); -gchar *s = N_("Minutes\n" - "Hours\n" - "Days\n" - ""); -gchar *s = N_("_Display"); -gchar *s = N_("_Audio"); -gchar *s = N_("_Program"); -gchar *s = N_("_Mail"); -gchar *s = N_("Mail _to:"); -gchar *s = N_("_Run program:"); -gchar *s = N_("Reminder"); -gchar *s = N_("Recurrence rule"); -gchar *s = N_("None"); -gchar *s = N_("Daily"); -gchar *s = N_("Weekly"); -gchar *s = N_("Monthly"); -gchar *s = N_("Yearly"); -gchar *s = N_("label23"); -gchar *s = N_("Every "); -gchar *s = N_("day(s)"); -gchar *s = N_("label24"); -gchar *s = N_("Every "); -gchar *s = N_("week(s)"); -gchar *s = N_("Mon"); -gchar *s = N_("Tue"); -gchar *s = N_("Wed"); -gchar *s = N_("Thu"); -gchar *s = N_("Fri"); -gchar *s = N_("Sat"); -gchar *s = N_("Sun"); -gchar *s = N_("label25"); -gchar *s = N_("Recur on the"); -gchar *s = N_("Recur on the"); -gchar *s = N_("th day of the month"); -gchar *s = N_("1st\n" - "2nd\n" - "3rd\n" - "4th\n" - "5th\n" - ""); -gchar *s = N_("Monday\n" - "Tuesday\n" - "Wednesday\n" - "Thursday\n" - "Friday\n" - "Saturday\n" - "Sunday\n" - ""); -gchar *s = N_("Every"); -gchar *s = N_("month(s)"); -gchar *s = N_("label26"); -gchar *s = N_("Every "); -gchar *s = N_("year(s)"); -gchar *s = N_("label27"); -gchar *s = N_("Ending date"); -gchar *s = N_("Repeat forever"); -gchar *s = N_("End on "); -gchar *s = N_("End after"); -gchar *s = N_("occurrence(s)"); -gchar *s = N_("Exceptions"); -gchar *s = N_("Add"); -gchar *s = N_("Change"); -gchar *s = N_("Delete"); -gchar *s = N_("Recurrence"); diff --git a/calendar/gui/event-editor.c b/calendar/gui/event-editor.c deleted file mode 100644 index ff4a6e7e29..0000000000 --- a/calendar/gui/event-editor.c +++ /dev/null @@ -1,1985 +0,0 @@ -/* Evolution calendar - Event editor dialog - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Miguel de Icaza - * Federico Mena-Quintero - * Seth Alves - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include "event-editor.h" - - - - -typedef struct { - /* Glade XML data */ - GladeXML *xml; - - /* UI handler */ - BonoboUIHandler *uih; - - /* Calendar object we are editing; this is an internal copy and is not - * one of the read-only objects from the parent calendar. - */ - CalComponent *comp; - - /* Widgets from the Glade file */ - - GtkWidget *app; - - GtkWidget *general_owner; - GtkWidget *general_summary; - - GtkWidget *start_time; - GtkWidget *end_time; - GtkWidget *all_day_event; - - GtkWidget *description; - - GtkWidget *alarm_display; - GtkWidget *alarm_program; - GtkWidget *alarm_audio; - GtkWidget *alarm_mail; - GtkWidget *alarm_display_amount; - GtkWidget *alarm_display_unit; - GtkWidget *alarm_audio_amount; - GtkWidget *alarm_audio_unit; - GtkWidget *alarm_program_amount; - GtkWidget *alarm_program_unit; - GtkWidget *alarm_program_run_program; - GtkWidget *alarm_program_run_program_entry; - GtkWidget *alarm_mail_amount; - GtkWidget *alarm_mail_unit; - GtkWidget *alarm_mail_mail_to; - - GtkWidget *classification_radio; - - GtkWidget *recurrence_rule_notebook; - GtkWidget *recurrence_rule_none; - GtkWidget *recurrence_rule_daily; - GtkWidget *recurrence_rule_weekly; - GtkWidget *recurrence_rule_monthly; - GtkWidget *recurrence_rule_yearly; - - GtkWidget *recurrence_rule_daily_days; - - GtkWidget *recurrence_rule_weekly_weeks; - GtkWidget *recurrence_rule_weekly_sun; - GtkWidget *recurrence_rule_weekly_mon; - GtkWidget *recurrence_rule_weekly_tue; - GtkWidget *recurrence_rule_weekly_wed; - GtkWidget *recurrence_rule_weekly_thu; - GtkWidget *recurrence_rule_weekly_fri; - GtkWidget *recurrence_rule_weekly_sat; - - GtkWidget *recurrence_rule_monthly_on_day; - GtkWidget *recurrence_rule_monthly_weekday; - GtkWidget *recurrence_rule_monthly_day_nth; - GtkWidget *recurrence_rule_monthly_week; - GtkWidget *recurrence_rule_monthly_weekpos; - GtkWidget *recurrence_rule_monthly_every_n_months; - GtkWidget *recurrence_rule_yearly_every_n_years; - - GtkWidget *recurrence_ending_date_repeat_forever; - GtkWidget *recurrence_ending_date_end_on; - GtkWidget *recurrence_ending_date_end_on_date; - GtkWidget *recurrence_ending_date_end_after; - GtkWidget *recurrence_ending_date_end_after_count; - - GtkWidget *recurrence_exceptions_date; - GtkWidget *recurrence_exceptions_list; - GtkWidget *recurrence_exception_add; - GtkWidget *recurrence_exception_delete; - GtkWidget *recurrence_exception_change; - - GtkWidget *exception_list; - GtkWidget *exception_date; -} EventEditorPrivate; - - - -/* Signal IDs */ -enum { - SAVE_ICAL_OBJECT, - ICAL_OBJECT_RELEASED, - EDITOR_CLOSED, - LAST_SIGNAL -}; - -static void event_editor_class_init (EventEditorClass *class); -static void event_editor_init (EventEditor *ee); -static void event_editor_destroy (GtkObject *object); - -static GtkObjectClass *parent_class; - -extern int day_begin, day_end; -extern char *user_name; -extern int am_pm_flag; -extern int week_starts_on_monday; - - -static void append_exception (EventEditor *ee, time_t t); -static void check_all_day (EventEditor *ee); -static void set_all_day (GtkWidget *toggle, EventEditor *ee); -static void alarm_toggle (GtkWidget *toggle, EventEditor *ee); -static void check_dates (GnomeDateEdit *gde, EventEditor *ee); -static void check_times (GnomeDateEdit *gde, EventEditor *ee); -static void recurrence_toggled (GtkWidget *radio, EventEditor *ee); -static void recurrence_exception_added (GtkWidget *widget, EventEditor *ee); -static void recurrence_exception_deleted (GtkWidget *widget, EventEditor *ee); -static void recurrence_exception_changed (GtkWidget *widget, EventEditor *ee); - -static guint event_editor_signals[LAST_SIGNAL]; - - - -/** - * event_editor_get_type: - * @void: - * - * Registers the #EventEditor class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #EventEditor class. - **/ -GtkType -event_editor_get_type (void) -{ - static GtkType event_editor_type = 0; - - if (!event_editor_type) { - static const GtkTypeInfo event_editor_info = { - "EventEditor", - sizeof (EventEditor), - sizeof (EventEditorClass), - (GtkClassInitFunc) event_editor_class_init, - (GtkObjectInitFunc) event_editor_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - event_editor_type = gtk_type_unique (GTK_TYPE_OBJECT, &event_editor_info); - } - - return event_editor_type; -} - -/* Class initialization function for the event editor */ -static void -event_editor_class_init (EventEditorClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (GTK_TYPE_OBJECT); - - event_editor_signals[SAVE_ICAL_OBJECT] = - gtk_signal_new ("save_ical_object", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EventEditorClass, save_ical_object), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - - event_editor_signals[ICAL_OBJECT_RELEASED] = - gtk_signal_new ("ical_object_released", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EventEditorClass, ical_object_released), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - - event_editor_signals[EDITOR_CLOSED] = - gtk_signal_new ("editor_closed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EventEditorClass, editor_closed), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, event_editor_signals, LAST_SIGNAL); - - object_class->destroy = event_editor_destroy; -} - -/* Object initialization function for the event editor */ -static void -event_editor_init (EventEditor *ee) -{ - EventEditorPrivate *priv; - - priv = g_new0 (EventEditorPrivate, 1); - ee->priv = priv; -} - -/* Destroy handler for the event editor */ -static void -event_editor_destroy (GtkObject *object) -{ - EventEditor *ee; - EventEditorPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_EVENT_EDITOR (object)); - - ee = EVENT_EDITOR (object); - priv = ee->priv; - - if (priv->uih) { - bonobo_object_unref (BONOBO_OBJECT (priv->uih)); - priv->uih = NULL; - } - - if (priv->app) { - gtk_signal_disconnect_by_data (GTK_OBJECT (priv->app), ee); - gtk_widget_destroy (priv->app); - priv->app = NULL; - } - - if (priv->comp) { - /* We do not emit the "ical_object_released" signal here. If - * the user cloased the dialog box, then it has already been - * released. If the application just destroyed the event - * editor, then it had better clean up after itself. - */ - gtk_object_unref (GTK_OBJECT (priv->comp)); - priv->comp = NULL; - } - - if (priv->xml) { - gtk_object_unref (GTK_OBJECT (priv->xml)); - priv->xml = NULL; - } - - g_free (priv); - ee->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -/* Creates an appropriate title for the event editor dialog */ -static char * -make_title_from_comp (CalComponent *comp) -{ - const char *summary; - CalComponentVType type; - CalComponentText text; - - if (!comp) - return g_strdup (_("Edit Appointment")); - - cal_component_get_summary (comp, &text); - if (text.value) - summary = text.value; - else - summary = _("No summary"); - - - type = cal_component_get_vtype (comp); - switch (type) { - case CAL_COMPONENT_EVENT: - return g_strdup_printf (_("Appointment - %s"), summary); - - case CAL_COMPONENT_TODO: - return g_strdup_printf (_("Task - %s"), summary); - - case CAL_COMPONENT_JOURNAL: - return g_strdup_printf (_("Journal entry - %s"), summary); - - default: - g_message ("make_title_from_comp(): Cannot handle object of type %d", type); - return NULL; - } -} - -/* Gets the widgets from the XML file and returns if they are all available. - * For the widgets whose values can be simply set with e-dialog-utils, it does - * that as well. - */ -static gboolean -get_widgets (EventEditor *ee) -{ - EventEditorPrivate *priv; - - priv = ee->priv; - -#define GW(name) glade_xml_get_widget (priv->xml, name) - - priv->app = GW ("event-editor-dialog"); - - priv->general_owner = GW ("general-owner"); - priv->general_summary = GW ("general-summary"); - - priv->start_time = GW ("start-time"); - priv->end_time = GW ("end-time"); - priv->all_day_event = GW ("all-day-event"); - - priv->description = GW ("description"); - - priv->alarm_display = GW ("alarm-display"); - priv->alarm_program = GW ("alarm-program"); - priv->alarm_audio = GW ("alarm-audio"); - priv->alarm_mail = GW ("alarm-mail"); - priv->alarm_display_amount = GW ("alarm-display-amount"); - priv->alarm_display_unit = GW ("alarm-display-unit"); - priv->alarm_audio_amount = GW ("alarm-audio-amount"); - priv->alarm_audio_unit = GW ("alarm-audio-unit"); - priv->alarm_program_amount = GW ("alarm-program-amount"); - priv->alarm_program_unit = GW ("alarm-program-unit"); - priv->alarm_program_run_program = GW ("alarm-program-run-program"); - priv->alarm_program_run_program_entry = GW ("alarm-program-run-program-entry"); - priv->alarm_mail_amount = GW ("alarm-mail-amount"); - priv->alarm_mail_unit = GW ("alarm-mail-unit"); - priv->alarm_mail_mail_to = GW ("alarm-mail-mail-to"); - - priv->classification_radio = GW ("classification-radio"); - - priv->recurrence_rule_notebook = GW ("recurrence-rule-notebook"); - priv->recurrence_rule_none = GW ("recurrence-rule-none"); - priv->recurrence_rule_daily = GW ("recurrence-rule-daily"); - priv->recurrence_rule_weekly = GW ("recurrence-rule-weekly"); - priv->recurrence_rule_monthly = GW ("recurrence-rule-monthly"); - priv->recurrence_rule_yearly = GW ("recurrence-rule-yearly"); - - priv->recurrence_rule_daily_days = GW ("recurrence-rule-daily-days"); - - priv->recurrence_rule_weekly_weeks = GW ("recurrence-rule-weekly-weeks"); - priv->recurrence_rule_weekly_sun = GW ("recurrence-rule-weekly-sun"); - priv->recurrence_rule_weekly_mon = GW ("recurrence-rule-weekly-mon"); - priv->recurrence_rule_weekly_tue = GW ("recurrence-rule-weekly-tue"); - priv->recurrence_rule_weekly_wed = GW ("recurrence-rule-weekly-wed"); - priv->recurrence_rule_weekly_thu = GW ("recurrence-rule-weekly-thu"); - priv->recurrence_rule_weekly_fri = GW ("recurrence-rule-weekly-fri"); - priv->recurrence_rule_weekly_sat = GW ("recurrence-rule-weekly-sat"); - - priv->recurrence_rule_monthly_on_day = GW ("recurrence-rule-monthly-on-day"); - priv->recurrence_rule_monthly_weekday = GW ("recurrence-rule-monthly-weekday"); - priv->recurrence_rule_monthly_day_nth = GW ("recurrence-rule-monthly-day-nth"); - priv->recurrence_rule_monthly_week = GW ("recurrence-rule-monthly-week"); - priv->recurrence_rule_monthly_weekpos = GW ("recurrence-rule-monthly-weekpos"); - priv->recurrence_rule_monthly_every_n_months = GW ("recurrence-rule-monthly-every-n-months"); - priv->recurrence_rule_yearly_every_n_years = GW ("recurrence-rule-yearly-every-n-years"); - - priv->recurrence_ending_date_repeat_forever = GW ("recurrence-ending-date-repeat-forever"); - priv->recurrence_ending_date_end_on = GW ("recurrence-ending-date-end-on"); - priv->recurrence_ending_date_end_on_date = GW ("recurrence-ending-date-end-on-date"); - priv->recurrence_ending_date_end_after = GW ("recurrence-ending-date-end-after"); - priv->recurrence_ending_date_end_after_count = GW ("recurrence-ending-date-end-after-count"); - - priv->recurrence_exceptions_date = GW ("recurrence-exceptions-date"); - priv->recurrence_exceptions_list = GW ("recurrence-exceptions-list"); - priv->recurrence_exception_add = GW ("recurrence-exceptions-add"); - priv->recurrence_exception_delete = GW ("recurrence-exceptions-delete"); - priv->recurrence_exception_change = GW ("recurrence-exceptions-change"); - - priv->exception_list = GW ("recurrence-exceptions-list"); - priv->exception_date = GW ("recurrence-exceptions-date"); - -#undef GW - - return (priv->general_owner - && priv->general_summary - && priv->start_time - && priv->end_time - && priv->all_day_event - && priv->description - && priv->alarm_display - && priv->alarm_program - && priv->alarm_audio - && priv->alarm_mail - && priv->alarm_display_amount - && priv->alarm_display_unit - && priv->alarm_audio_amount - && priv->alarm_audio_unit - && priv->alarm_program_amount - && priv->alarm_program_unit - && priv->alarm_program_run_program - && priv->alarm_program_run_program_entry - && priv->alarm_mail_amount - && priv->alarm_mail_unit - && priv->alarm_mail_mail_to - && priv->classification_radio - && priv->recurrence_rule_notebook - && priv->recurrence_rule_none - && priv->recurrence_rule_daily - && priv->recurrence_rule_weekly - && priv->recurrence_rule_monthly - && priv->recurrence_rule_yearly - && priv->recurrence_rule_daily_days - && priv->recurrence_rule_weekly_weeks - && priv->recurrence_rule_monthly_on_day - && priv->recurrence_rule_monthly_weekday - && priv->recurrence_rule_monthly_day_nth - && priv->recurrence_rule_monthly_week - && priv->recurrence_rule_monthly_weekpos - && priv->recurrence_rule_monthly_every_n_months - && priv->recurrence_rule_yearly_every_n_years - && priv->recurrence_ending_date_repeat_forever - && priv->recurrence_ending_date_end_on - && priv->recurrence_ending_date_end_on_date - && priv->recurrence_ending_date_end_after - && priv->recurrence_ending_date_end_after_count - && priv->recurrence_exceptions_date - && priv->recurrence_exceptions_list - && priv->recurrence_exception_add - && priv->recurrence_exception_delete - && priv->recurrence_exception_change - && priv->exception_list - && priv->exception_date); -} - -static const int classification_map[] = { - CAL_COMPONENT_CLASS_PUBLIC, - CAL_COMPONENT_CLASS_PRIVATE, - CAL_COMPONENT_CLASS_CONFIDENTIAL, - -1 -}; - -#if 0 -static const int alarm_unit_map[] = { - ALARM_MINUTES, - ALARM_HOURS, - ALARM_DAYS, - -1 -}; - -static void -alarm_unit_set (GtkWidget *widget, enum AlarmUnit unit) -{ - e_dialog_option_menu_set (widget, unit, alarm_unit_map); -} - -static enum AlarmUnit -alarm_unit_get (GtkWidget *widget) -{ - return e_dialog_option_menu_get (widget, alarm_unit_map); -} -#endif - -/* Recurrence types for mapping them to radio buttons */ -static const int recur_options_map[] = { - ICAL_NO_RECURRENCE, - ICAL_DAILY_RECURRENCE, - ICAL_WEEKLY_RECURRENCE, - ICAL_MONTHLY_RECURRENCE, - ICAL_YEARLY_RECURRENCE, - -1 -}; - -static icalrecurrencetype_frequency -recur_options_get (GtkWidget *widget) -{ - return e_dialog_radio_get (widget, recur_options_map); -} - -static const int month_pos_map[] = { 0, 1, 2, 3, 4, -1 }; -static const int weekday_map[] = { 0, 1, 2, 3, 4, 5, 6, -1 }; - -/* Frees the rows and the row data in the recurrence exceptions GtkCList */ -static void -free_exception_clist_data (GtkCList *clist) -{ - int i; - - for (i = 0; i < clist->rows; i++) { - gpointer data; - - data = gtk_clist_get_row_data (clist, i); - g_free (data); - gtk_clist_set_row_data (clist, i, NULL); - } - - gtk_clist_clear (clist); -} - -/* Hooks the widget signals */ -static void -init_widgets (EventEditor *ee) -{ - EventEditorPrivate *priv; - GnomeDateEdit *gde; - GtkWidget *widget; - - priv = ee->priv; - - /* Start and end times */ - - gtk_signal_connect (GTK_OBJECT (priv->start_time), "date_changed", - GTK_SIGNAL_FUNC (check_dates), ee); - gtk_signal_connect (GTK_OBJECT (priv->start_time), "time_changed", - GTK_SIGNAL_FUNC (check_times), ee); - - gtk_signal_connect (GTK_OBJECT (priv->end_time), "date_changed", - GTK_SIGNAL_FUNC (check_dates), ee); - gtk_signal_connect (GTK_OBJECT (priv->end_time), "time_changed", - GTK_SIGNAL_FUNC (check_times), ee); - - gtk_signal_connect (GTK_OBJECT (priv->all_day_event), "toggled", - GTK_SIGNAL_FUNC (set_all_day), ee); - - /* Alarms */ - - gtk_signal_connect (GTK_OBJECT (priv->alarm_display), "toggled", - GTK_SIGNAL_FUNC (alarm_toggle), ee); - gtk_signal_connect (GTK_OBJECT (priv->alarm_program), "toggled", - GTK_SIGNAL_FUNC (alarm_toggle), ee); - gtk_signal_connect (GTK_OBJECT (priv->alarm_audio), "toggled", - GTK_SIGNAL_FUNC (alarm_toggle), ee); - gtk_signal_connect (GTK_OBJECT (priv->alarm_mail), "toggled", - GTK_SIGNAL_FUNC (alarm_toggle), ee); - - /* Recurrence types */ - - gtk_signal_connect (GTK_OBJECT (priv->recurrence_rule_none), "toggled", - GTK_SIGNAL_FUNC (recurrence_toggled), ee); - gtk_signal_connect (GTK_OBJECT (priv->recurrence_rule_daily), "toggled", - GTK_SIGNAL_FUNC (recurrence_toggled), ee); - gtk_signal_connect (GTK_OBJECT (priv->recurrence_rule_weekly), "toggled", - GTK_SIGNAL_FUNC (recurrence_toggled), ee); - gtk_signal_connect (GTK_OBJECT (priv->recurrence_rule_monthly), "toggled", - GTK_SIGNAL_FUNC (recurrence_toggled), ee); - gtk_signal_connect (GTK_OBJECT (priv->recurrence_rule_yearly), "toggled", - GTK_SIGNAL_FUNC (recurrence_toggled), ee); - - /* Exception buttons */ - - gtk_signal_connect (GTK_OBJECT (priv->recurrence_exception_add), "clicked", - GTK_SIGNAL_FUNC (recurrence_exception_added), ee); - gtk_signal_connect (GTK_OBJECT (priv->recurrence_exception_delete), "clicked", - GTK_SIGNAL_FUNC (recurrence_exception_deleted), ee); - gtk_signal_connect (GTK_OBJECT (priv->recurrence_exception_change), "clicked", - GTK_SIGNAL_FUNC (recurrence_exception_changed), ee); - - /* Hide the stupid 'Calendar' labels. */ - gde = GNOME_DATE_EDIT (priv->start_time); - gtk_widget_hide (gde->cal_label); - widget = gde->date_entry; - gtk_box_set_child_packing (GTK_BOX (widget->parent), widget, - FALSE, FALSE, 0, GTK_PACK_START); - widget = gde->time_entry; - gtk_box_set_child_packing (GTK_BOX (widget->parent), widget, - FALSE, FALSE, 0, GTK_PACK_START); - gtk_box_set_spacing (GTK_BOX (widget->parent), 2); - - gde = GNOME_DATE_EDIT (priv->end_time); - gtk_widget_hide (gde->cal_label); - widget = gde->date_entry; - gtk_box_set_child_packing (GTK_BOX (widget->parent), widget, - FALSE, FALSE, 0, GTK_PACK_START); - widget = gde->time_entry; - gtk_box_set_child_packing (GTK_BOX (widget->parent), widget, - FALSE, FALSE, 0, GTK_PACK_START); - gtk_box_set_spacing (GTK_BOX (widget->parent), 2); -} - -/* Fills the widgets with default values */ -static void -clear_widgets (EventEditor *ee) -{ - EventEditorPrivate *priv; - time_t now; - - priv = ee->priv; - - now = time (NULL); - - /* Owner, summary */ - - e_dialog_editable_set (priv->general_owner, _("?")); - e_dialog_editable_set (priv->general_summary, NULL); - e_dialog_editable_set (priv->description, NULL); - - /* Start and end times */ - - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), ee); - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), ee); - - e_dialog_dateedit_set (priv->start_time, now); - e_dialog_dateedit_set (priv->end_time, now); - - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), ee); - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), ee); - - check_all_day (ee); - - /* Alarms */ - - /* FIXMe: these should use configurable defaults */ - - e_dialog_toggle_set (priv->alarm_display, FALSE); - e_dialog_toggle_set (priv->alarm_program, FALSE); - e_dialog_toggle_set (priv->alarm_audio, FALSE); - e_dialog_toggle_set (priv->alarm_mail, FALSE); - - e_dialog_spin_set (priv->alarm_display_amount, 15); - e_dialog_spin_set (priv->alarm_audio_amount, 15); - e_dialog_spin_set (priv->alarm_program_amount, 15); - e_dialog_spin_set (priv->alarm_mail_amount, 15); - -#if 0 - alarm_unit_set (priv->alarm_display_unit, ALARM_MINUTES); - alarm_unit_set (priv->alarm_audio_unit, ALARM_MINUTES); - alarm_unit_set (priv->alarm_program_unit, ALARM_MINUTES); - alarm_unit_set (priv->alarm_mail_unit, ALARM_MINUTES); -#endif - - e_dialog_editable_set (priv->alarm_program_run_program_entry, NULL); - e_dialog_editable_set (priv->alarm_mail_mail_to, NULL); - - /* Classification */ - - e_dialog_radio_set (priv->classification_radio, - CAL_COMPONENT_CLASS_PRIVATE, classification_map); - - /* Recurrences */ - - e_dialog_radio_set (priv->recurrence_rule_none, ICAL_NO_RECURRENCE, recur_options_map); - - e_dialog_spin_set (priv->recurrence_rule_daily_days, 1); - - e_dialog_spin_set (priv->recurrence_rule_weekly_weeks, 1); - e_dialog_toggle_set (priv->recurrence_rule_weekly_sun, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_mon, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_tue, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_wed, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_thu, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_fri, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_sat, FALSE); - - e_dialog_toggle_set (priv->recurrence_rule_monthly_on_day, TRUE); - e_dialog_spin_set (priv->recurrence_rule_monthly_day_nth, 1); - e_dialog_spin_set (priv->recurrence_rule_monthly_every_n_months, 1); - e_dialog_option_menu_set (priv->recurrence_rule_monthly_week, 0, month_pos_map); - e_dialog_option_menu_set (priv->recurrence_rule_monthly_weekpos, 0, weekday_map); - e_dialog_spin_set (priv->recurrence_rule_monthly_every_n_months, 1); - - e_dialog_spin_set (priv->recurrence_rule_yearly_every_n_years, 1); - - e_dialog_toggle_set (priv->recurrence_ending_date_repeat_forever, TRUE); - e_dialog_spin_set (priv->recurrence_ending_date_end_after_count, 1); - e_dialog_dateedit_set (priv->recurrence_ending_date_end_on_date, - time_add_day (time (NULL), 1)); - - /* Exceptions list */ - - free_exception_clist_data (GTK_CLIST (priv->recurrence_exceptions_list)); -} - -/* Fills in the widgets with the proper values */ -static void -fill_widgets (EventEditor *ee) -{ - EventEditorPrivate *priv; - CalComponentText text; - CalComponentClassification cl; - CalComponentDateTime d; - GSList *list, *l; - time_t dtstart, dtend; - - priv = ee->priv; - - clear_widgets (ee); - - if (!priv->comp) - return; - - /* Owner, summary */ -#warning "FIX ME" - /* kludge until I figure out where to get the organizer */ -/* e_dialog_editable_set (priv->general_owner, */ -/* priv->ico->organizer->addr ? */ -/* priv->ico->organizer->addr : _("?")); */ - e_dialog_editable_set (priv->general_owner, _("?")); - - cal_component_get_summary (priv->comp, &text); - e_dialog_editable_set (priv->general_summary, text.value); - - cal_component_get_description_list (priv->comp, &l); - if (l) { - text = *(CalComponentText *)l->data; - e_dialog_editable_set (priv->description, text.value); - } - cal_component_free_text_list (l); - - /* Start and end times */ - - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), ee); - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), ee); - - /* All-day events are inclusive, i.e. if the end date shown is 2nd Feb - then the event includes all of the 2nd Feb. We would normally show - 3rd Feb as the end date, since it really ends at midnight on 3rd, - so we have to subtract a day so we only show the 2nd. */ - cal_component_get_dtstart (priv->comp, &d); - dtstart = time_from_icaltimetype (*d.value); - cal_component_get_dtend (priv->comp, &d); - dtend = time_from_icaltimetype (*d.value); - if (time_day_begin (dtstart) == dtstart - && time_day_begin (dtend) == dtend) { - dtend = time_add_day (dtend, -1); - } - - e_dialog_dateedit_set (priv->start_time, dtstart); - e_dialog_dateedit_set (priv->end_time, dtend); - - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), ee); - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), ee); - - check_all_day (ee); - - /* Alarms */ -#if 0 - e_dialog_toggle_set (priv->alarm_display, priv->ico->dalarm.enabled); - e_dialog_toggle_set (priv->alarm_program, priv->ico->palarm.enabled); - e_dialog_toggle_set (priv->alarm_audio, priv->ico->aalarm.enabled); - e_dialog_toggle_set (priv->alarm_mail, priv->ico->malarm.enabled); -#endif - /* Alarm data */ -#if 0 - e_dialog_spin_set (priv->alarm_display_amount, priv->ico->dalarm.count); - e_dialog_spin_set (priv->alarm_audio_amount, priv->ico->aalarm.count); - e_dialog_spin_set (priv->alarm_program_amount, priv->ico->palarm.count); - e_dialog_spin_set (priv->alarm_mail_amount, priv->ico->malarm.count); - - alarm_unit_set (priv->alarm_display_unit, priv->ico->dalarm.units); - alarm_unit_set (priv->alarm_audio_unit, priv->ico->aalarm.units); - alarm_unit_set (priv->alarm_program_unit, priv->ico->palarm.units); - alarm_unit_set (priv->alarm_mail_unit, priv->ico->malarm.units); - - e_dialog_editable_set (priv->alarm_program_run_program_entry, priv->ico->palarm.data); - e_dialog_editable_set (priv->alarm_mail_mail_to, priv->ico->malarm.data); -#endif - /* Classification */ - cal_component_get_classification (priv->comp, &cl); - switch (cl) { - case CAL_COMPONENT_CLASS_PUBLIC: - e_dialog_radio_set (priv->classification_radio, CAL_COMPONENT_CLASS_PUBLIC, - classification_map); - case CAL_COMPONENT_CLASS_PRIVATE: - e_dialog_radio_set (priv->classification_radio, CAL_COMPONENT_CLASS_PRIVATE, - classification_map); - case CAL_COMPONENT_CLASS_CONFIDENTIAL: - e_dialog_radio_set (priv->classification_radio, CAL_COMPONENT_CLASS_CONFIDENTIAL, - classification_map); - default: - /* What do do? We can't g_assert_not_reached() since it is a - * value from an external file. - */ - } - - /* Recurrences */ -#warning "FIX ME" - /* Need to handle recurrence dates as well as recurrence rules */ - /* Need to handle more than one rrule */ - if (cal_component_has_rrules (priv->comp)) { - struct icalrecurrencetype *r; - int i; - - cal_component_get_rrule_list (priv->comp, &list); - r = list->data; - - switch (r->freq) { - case ICAL_DAILY_RECURRENCE: - e_dialog_radio_set (priv->recurrence_rule_daily, ICAL_DAILY_RECURRENCE, - recur_options_map); - e_dialog_spin_set (priv->recurrence_rule_daily_days, r->interval); - break; - - case ICAL_WEEKLY_RECURRENCE: - e_dialog_radio_set (priv->recurrence_rule_weekly, ICAL_WEEKLY_RECURRENCE, - recur_options_map); - e_dialog_spin_set (priv->recurrence_rule_weekly_weeks, r->interval); - - e_dialog_toggle_set (priv->recurrence_rule_weekly_sun, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_mon, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_tue, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_wed, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_thu, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_fri, FALSE); - e_dialog_toggle_set (priv->recurrence_rule_weekly_sat, FALSE); - - for (i=0; i<8 && r->by_day[i] != SHRT_MAX; i++) { - switch (r->by_day[i]) { - case ICAL_SUNDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_sun, TRUE); - break; - case ICAL_MONDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_mon, TRUE); - break; - case ICAL_TUESDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_tue, TRUE); - break; - case ICAL_WEDNESDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_wed, TRUE); - break; - case ICAL_THURSDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_thu, TRUE); - break; - case ICAL_FRIDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_fri, TRUE); - break; - case ICAL_SATURDAY_WEEKDAY: - e_dialog_toggle_set (priv->recurrence_rule_weekly_sat, TRUE); - break; - default: - g_assert_not_reached (); - } - } - break; - - case ICAL_MONTHLY_RECURRENCE: - e_dialog_radio_set (priv->recurrence_rule_monthly, ICAL_MONTHLY_RECURRENCE, - recur_options_map); - - if (r->by_month_day[0] != SHRT_MAX) { - e_dialog_toggle_set (priv->recurrence_rule_monthly_on_day, TRUE); - e_dialog_spin_set (priv->recurrence_rule_monthly_day_nth, - r->by_month_day[0]); - } else if (r->by_day[0] != SHRT_MAX) { - e_dialog_toggle_set (priv->recurrence_rule_monthly_weekday, TRUE); - /* libical does not handle ints in by day */ -/* e_dialog_option_menu_set (priv->recurrence_rule_monthly_week, */ -/* priv->ico->recur->u.month_pos, */ -/* month_pos_map); */ -/* e_dialog_option_menu_set (priv->recurrence_rule_monthly_weekpos, */ -/* priv->ico->recur->weekday, */ -/* weekday_map); */ - } - - e_dialog_spin_set (priv->recurrence_rule_monthly_every_n_months, - r->interval); - break; - - case ICAL_YEARLY_RECURRENCE: - e_dialog_radio_set (priv->recurrence_rule_yearly, ICAL_YEARLY_RECURRENCE, - recur_options_map); - e_dialog_spin_set (priv->recurrence_rule_yearly_every_n_years, - r->interval); - break; - - default: - g_assert_not_reached (); - } - - if (r->until.year == 0) { - if (r->count == 0) - e_dialog_toggle_set (priv->recurrence_ending_date_repeat_forever, - TRUE); - else { - e_dialog_toggle_set (priv->recurrence_ending_date_end_after, TRUE); - e_dialog_spin_set (priv->recurrence_ending_date_end_after_count, - r->count); - } - } else { - time_t t = time_from_icaltimetype (r->until); - e_dialog_toggle_set (priv->recurrence_ending_date_end_on, TRUE); - /* Shorten by one day, as we store end-on date a day ahead */ - /* FIXME is this correct? */ - e_dialog_dateedit_set (priv->recurrence_ending_date_end_on_date, - time_add_day (t, -1)); - } - cal_component_free_recur_list (list); - } - - /* Exceptions list */ -#warning "FIX ME" - /* Need to handle exception rules as well as dates */ - cal_component_get_exdate_list (priv->comp, &list); - for (l = list; l; l = l->next) { - struct icaltimetype *t; - time_t ext; - - t = l->data; - ext = time_from_icaltimetype (*t); - append_exception (ee, ext); - } - cal_component_free_exdate_list (list); -} - - - -/* Decode the radio button group for classifications */ -static CalComponentClassification -classification_get (GtkWidget *widget) -{ - return e_dialog_radio_get (widget, classification_map); -} - -/* Get the values of the widgets in the event editor and put them in the iCalObject */ -static void -dialog_to_comp_object (EventEditor *ee) -{ - EventEditorPrivate *priv; - CalComponent *comp; - CalComponentText *text; - CalComponentDateTime date; - time_t t; - struct icalrecurrencetype *recur; - gboolean all_day_event; - int i, pos = 0; - GtkCList *exception_list; - GSList *list = NULL; - - priv = ee->priv; - comp = priv->comp; - - text = g_new0 (CalComponentText, 1); - text->value = e_dialog_editable_get (priv->general_summary); - cal_component_set_summary (comp, text); - - text->value = e_dialog_editable_get (priv->description); - g_slist_prepend (list, text); - cal_component_set_description_list (comp, list); - cal_component_free_text_list (list); - list = NULL; - - date.value = g_new (struct icaltimetype, 1); - t = e_dialog_dateedit_get (priv->start_time); - *date.value = icaltimetype_from_timet (t, FALSE); - cal_component_set_dtstart (comp, &date); - - /* If the all_day toggle is set, the end date is inclusive of the - entire day on which it points to. */ - all_day_event = e_dialog_toggle_get (priv->all_day_event); - t = e_dialog_dateedit_get (priv->end_time); - if (all_day_event) - t = time_day_end (t); - - *date.value = icaltimetype_from_timet (t, FALSE); - cal_component_set_dtend (comp, &date); - g_free (date.value); - -#if 0 - ico->dalarm.enabled = e_dialog_toggle_get (priv->alarm_display); - ico->aalarm.enabled = e_dialog_toggle_get (priv->alarm_program); - ico->palarm.enabled = e_dialog_toggle_get (priv->alarm_audio); - ico->malarm.enabled = e_dialog_toggle_get (priv->alarm_mail); - - ico->dalarm.count = e_dialog_spin_get_int (priv->alarm_display_amount); - ico->aalarm.count = e_dialog_spin_get_int (priv->alarm_audio_amount); - ico->palarm.count = e_dialog_spin_get_int (priv->alarm_program_amount); - ico->malarm.count = e_dialog_spin_get_int (priv->alarm_mail_amount); - - ico->dalarm.units = alarm_unit_get (priv->alarm_display_unit); - ico->aalarm.units = alarm_unit_get (priv->alarm_audio_unit); - ico->palarm.units = alarm_unit_get (priv->alarm_program_unit); - ico->malarm.units = alarm_unit_get (priv->alarm_mail_unit); - - if (ico->palarm.data) - g_free (ico->palarm.data); - - if (ico->malarm.data) - g_free (ico->malarm.data); - - ico->palarm.data = e_dialog_editable_get (priv->alarm_program_run_program_entry); - ico->malarm.data = e_dialog_editable_get (priv->alarm_mail_mail_to); -#endif - - cal_component_set_classification (comp, classification_get (priv->classification_radio)); - - /* Recurrence information */ - recur = g_new (struct icalrecurrencetype, 1); - icalrecurrencetype_clear (recur); - recur->freq = recur_options_get (priv->recurrence_rule_none); - - switch (recur->freq) { - case ICAL_NO_RECURRENCE: - /* nothing */ - break; - - case ICAL_DAILY_RECURRENCE: - recur->interval = e_dialog_spin_get_int (priv->recurrence_rule_daily_days); - break; - - case ICAL_WEEKLY_RECURRENCE: - - recur->interval = e_dialog_spin_get_int (priv->recurrence_rule_weekly_weeks); - - - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_sun)) - recur->by_day[pos++] = ICAL_SUNDAY_WEEKDAY; - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_mon)) - recur->by_day[pos++] = ICAL_MONDAY_WEEKDAY; - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_tue)) - recur->by_day[pos++] = ICAL_TUESDAY_WEEKDAY; - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_wed)) - recur->by_day[pos++] = ICAL_WEDNESDAY_WEEKDAY; - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_thu)) - recur->by_day[pos++] = ICAL_THURSDAY_WEEKDAY; - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_fri)) - recur->by_day[pos++] = ICAL_FRIDAY_WEEKDAY; - if (e_dialog_toggle_get (priv->recurrence_rule_weekly_sat)) - recur->by_day[pos++] = ICAL_SATURDAY_WEEKDAY; - - break; - - case ICAL_MONTHLY_RECURRENCE: - - if (e_dialog_toggle_get (priv->recurrence_rule_monthly_on_day)) { - /* by day of in the month (ex: the 5th) */ - recur->by_month_day[0] = - e_dialog_spin_get_int (priv->recurrence_rule_monthly_day_nth); - } else if (e_dialog_toggle_get (priv->recurrence_rule_monthly_weekday)) { - /* "recurrence-rule-monthly-weekday" is TRUE */ - /* by position on the calender (ex: 2nd monday) */ - /* libical does not handle this yet */ -/* ico->recur->u.month_pos = e_dialog_option_menu_get ( */ -/* priv->recurrence_rule_monthly_week, */ -/* month_pos_map); */ -/* ico->recur->weekday = e_dialog_option_menu_get ( */ -/* priv->recurrence_rule_monthly_weekpos, */ -/* weekday_map); */ - - } else - g_assert_not_reached (); - - recur->interval = e_dialog_spin_get_int (priv->recurrence_rule_monthly_every_n_months); - - break; - - case ICAL_YEARLY_RECURRENCE: - recur->interval = e_dialog_spin_get_int (priv->recurrence_rule_yearly_every_n_years); - - default: - g_assert_not_reached (); - } - - /* recurrence ending date */ - if (e_dialog_toggle_get (priv->recurrence_ending_date_end_on)) { - /* Also here, to ensure that the event is used, we add 86400 - * secs to get get next day, in accordance to the RFC - */ - t = e_dialog_dateedit_get (priv->recurrence_ending_date_end_on_date) + 86400; - recur->until = icaltimetype_from_timet (t, TRUE); - } else if (e_dialog_toggle_get (priv->recurrence_ending_date_end_after)) { - recur->count = e_dialog_spin_get_int (priv->recurrence_ending_date_end_after_count); - } - g_slist_append (list, recur); - cal_component_set_rrule_list (comp, list); - list = NULL; - - /* Get exceptions from clist into ico->exdate */ - exception_list = GTK_CLIST (priv->recurrence_exceptions_list); - for (i = 0; i < exception_list->rows; i++) { - struct icaltimetype *tt = g_new (struct icaltimetype, 1); - time_t *t; - - t = gtk_clist_get_row_data (exception_list, i); - *tt = icaltimetype_from_timet (*t, FALSE); - - list = g_slist_prepend (list, tt); - } - cal_component_set_exdate_list (comp, list); - cal_component_free_exdate_list (list); -} - -/* Emits the "save_ical_object" signal if the event editor is editing an object. */ -static void -save_ical_object (EventEditor *ee) -{ - EventEditorPrivate *priv; - char *title; - - priv = ee->priv; - - if (!priv->comp) - return; - - dialog_to_comp_object (ee); - - title = make_title_from_comp (priv->comp); - gtk_window_set_title (GTK_WINDOW (priv->app), title); - g_free (title); - - gtk_signal_emit (GTK_OBJECT (ee), event_editor_signals[SAVE_ICAL_OBJECT], - priv->comp); -} - -/* Closes the dialog box and emits the appropriate signals */ -static void -close_dialog (EventEditor *ee) -{ - EventEditorPrivate *priv; - - priv = ee->priv; - - g_assert (priv->app != NULL); - - free_exception_clist_data (GTK_CLIST (priv->recurrence_exceptions_list)); - - gtk_widget_destroy (priv->app); - priv->app = NULL; - - if (priv->comp) { - const char *uid; - - cal_component_get_uid (priv->comp, &uid); - gtk_signal_emit (GTK_OBJECT (ee), event_editor_signals[ICAL_OBJECT_RELEASED], uid); - gtk_object_unref (GTK_OBJECT (priv->comp)); - priv->comp = NULL; - } - - gtk_signal_emit (GTK_OBJECT (ee), event_editor_signals[EDITOR_CLOSED]); -} - - - -/* File/Save callback */ -static void -file_save_cb (GtkWidget *widget, gpointer data) -{ - EventEditor *ee; - - ee = EVENT_EDITOR (data); - save_ical_object (ee); -} - -/* File/Close callback */ -static void -file_close_cb (GtkWidget *widget, gpointer data) -{ - EventEditor *ee; - - /* FIXME: need to check for a dirty object */ - - ee = EVENT_EDITOR (data); - close_dialog (ee); -} - - - -/* Menu bar */ - -static GnomeUIInfo file_new_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Appointment"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Meeting Re_quest"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Mail Message"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Contact"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Task"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Task _Request"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Journal Entry"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Note"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_page_setup_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Memo Style"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Define Print _Styles..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_menu[] = { - GNOMEUIINFO_MENU_NEW_SUBTREE (file_new_menu), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: S_end"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_SAVE_ITEM (file_save_cb, NULL), - GNOMEUIINFO_MENU_SAVE_AS_ITEM (NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Save Attac_hments..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Delete"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Move to Folder..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Cop_y to Folder..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("Page Set_up"), file_page_setup_menu), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Print Pre_view"), NULL, NULL), - GNOMEUIINFO_MENU_PRINT_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_PROPERTIES_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLOSE_ITEM (file_close_cb, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo edit_object_menu[] = { - GNOMEUIINFO_ITEM_NONE ("FIXME: what goes here?", NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo edit_menu[] = { - GNOMEUIINFO_MENU_UNDO_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_REDO_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CUT_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_COPY_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_PASTE_ITEM (NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Paste _Special..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_CLEAR_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_SELECT_ALL_ITEM (NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Mark as U_nread"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_MENU_FIND_ITEM (NULL, NULL), - GNOMEUIINFO_MENU_FIND_AGAIN_ITEM (NULL, NULL), - GNOMEUIINFO_SUBTREE (N_("_Object"), edit_object_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_previous_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Fi_rst Item in Folder"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_next_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Unread Item"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Last Item in Folder"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_toolbars_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("FIXME: _Standard"), NULL, NULL, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, - { GNOME_APP_UI_TOGGLEITEM, N_("FIXME: __Formatting"), NULL, NULL, NULL, NULL, - GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL }, - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Customize..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_menu[] = { - GNOMEUIINFO_SUBTREE (N_("Pre_vious"), view_previous_menu), - GNOMEUIINFO_SUBTREE (N_("Ne_xt"), view_next_menu), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ca_lendar..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("_Toolbars"), view_toolbars_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo insert_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _File..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: It_em..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Object..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo format_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Font..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Paragraph..."), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo tools_forms_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Ch_oose Form..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Desi_gn This Form"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: D_esign a Form..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Publish _Form..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Pu_blish Form As..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Script _Debugger"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo tools_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _Spelling..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Chec_k Names"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Address _Book..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_SUBTREE (N_("_Forms"), tools_forms_menu), - GNOMEUIINFO_END -}; - -static GnomeUIInfo actions_menu[] = { - GNOMEUIINFO_ITEM_NONE (N_("FIXME: _New Appointment"), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Rec_urrence..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Invite _Attendees..."), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: C_ancel Invitation..."), NULL, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Forward as v_Calendar"), NULL, NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: For_ward"), NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo help_menu[] = { - GNOMEUIINFO_ITEM_NONE ("FIXME: fix Bonobo so it supports help items!", NULL, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo main_menu[] = { - GNOMEUIINFO_MENU_FILE_TREE (file_menu), - GNOMEUIINFO_MENU_EDIT_TREE (edit_menu), - GNOMEUIINFO_MENU_VIEW_TREE (view_menu), - GNOMEUIINFO_SUBTREE (N_("_Insert"), insert_menu), - GNOMEUIINFO_SUBTREE (N_("F_ormat"), format_menu), - GNOMEUIINFO_SUBTREE (N_("_Tools"), tools_menu), - GNOMEUIINFO_SUBTREE (N_("Actio_ns"), actions_menu), - GNOMEUIINFO_MENU_HELP_TREE (help_menu), - GNOMEUIINFO_END -}; - -/* Creates the menu bar for the event editor */ -static void -create_menu (EventEditor *ee) -{ - EventEditorPrivate *priv; - BonoboUIHandlerMenuItem *list; - - priv = ee->priv; - - bonobo_ui_handler_create_menubar (priv->uih); - - list = bonobo_ui_handler_menu_parse_uiinfo_list_with_data (main_menu, ee); - bonobo_ui_handler_menu_add_list (priv->uih, "/", list); -} - - - -/* Toolbar/Save and Close callback */ -static void -tb_save_and_close_cb (GtkWidget *widget, gpointer data) -{ - EventEditor *ee; - - ee = EVENT_EDITOR (data); - save_ical_object (ee); - close_dialog (ee); -} - - - -/* Toolbar */ - -static GnomeUIInfo toolbar[] = { - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Save and Close"), - N_("Save the appointment and close the dialog box"), - tb_save_and_close_cb, - GNOME_STOCK_PIXMAP_SAVE), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Print..."), - N_("Print this item"), NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Insert File..."), - N_("Insert a file as an attachment"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Recurrence..."), - N_("Configure recurrence rules"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Invite Attendees..."), - N_("Invite attendees to a meeting"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Delete"), - N_("Delete this item"), NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Previous"), - N_("Go to the previous item"), NULL), - GNOMEUIINFO_ITEM_NONE (N_("FIXME: Next"), - N_("Go to the next item"), NULL), - GNOMEUIINFO_ITEM_STOCK (N_("FIXME: Help"), - N_("See online help"), NULL, GNOME_STOCK_PIXMAP_HELP), - GNOMEUIINFO_END -}; - -/* Creates the toolbar for the event editor */ -static void -create_toolbar (EventEditor *ee) -{ - EventEditorPrivate *priv; - BonoboUIHandlerToolbarItem *list; - GnomeDockItem *dock_item; - GtkWidget *toolbar_child; - - priv = ee->priv; - - bonobo_ui_handler_create_toolbar (priv->uih, "Toolbar"); - - /* Fetch the toolbar. What a pain in the ass. */ - - dock_item = gnome_app_get_dock_item_by_name (GNOME_APP (priv->app), GNOME_APP_TOOLBAR_NAME); - g_assert (dock_item != NULL); - - toolbar_child = gnome_dock_item_get_child (dock_item); - g_assert (toolbar_child != NULL && GTK_IS_TOOLBAR (toolbar_child)); - - /* Turn off labels as GtkToolbar sucks */ - gtk_toolbar_set_style (GTK_TOOLBAR (toolbar_child), GTK_TOOLBAR_ICONS); - - list = bonobo_ui_handler_toolbar_parse_uiinfo_list_with_data (toolbar, ee); - bonobo_ui_handler_toolbar_add_list (priv->uih, "/Toolbar", list); -} - - - -/* Callback used when the dialog box is destroyed */ -static gint -app_delete_event_cb (GtkWidget *widget, GdkEvent *event, gpointer data) -{ - EventEditor *ee; - - /* FIXME: need to check for a dirty object */ - - ee = EVENT_EDITOR (data); - close_dialog (ee); - - return TRUE; -} - -/** - * event_editor_construct: - * @ee: An event editor. - * - * Constructs an event editor by loading its Glade data. - * - * Return value: The same object as @ee, or NULL if the widgets could not be - * created. In the latter case, the event editor will automatically be - * destroyed. - **/ -EventEditor * -event_editor_construct (EventEditor *ee) -{ - EventEditorPrivate *priv; - - g_return_val_if_fail (ee != NULL, NULL); - g_return_val_if_fail (IS_EVENT_EDITOR (ee), NULL); - - priv = ee->priv; - - /* Load the content widgets */ - - priv->xml = glade_xml_new (EVOLUTION_GLADEDIR "/event-editor-dialog.glade", NULL); - if (!priv->xml) { - g_message ("event_editor_construct(): Could not load the Glade XML file!"); - goto error; - } - - if (!get_widgets (ee)) { - g_message ("event_editor_construct(): Could not find all widgets in the XML file!"); - goto error; - } - - init_widgets (ee); - - /* Construct the app */ - - priv->uih = bonobo_ui_handler_new (); - if (!priv->uih) { - g_message ("event_editor_construct(): Could not create the UI handler"); - goto error; - } - - bonobo_ui_handler_set_app (priv->uih, GNOME_APP (priv->app)); - - create_menu (ee); - create_toolbar (ee); - - /* Hook to destruction of the dialog */ - - gtk_signal_connect (GTK_OBJECT (priv->app), "delete_event", - GTK_SIGNAL_FUNC (app_delete_event_cb), ee); - - /* Show the dialog */ - - gtk_widget_show (priv->app); - - return ee; - - error: - - gtk_object_unref (GTK_OBJECT (ee)); - return NULL; -} - -/** - * event_editor_new: - * - * Creates a new event editor dialog. - * - * Return value: A newly-created event editor dialog, or NULL if the event - * editor could not be created. - **/ -EventEditor * -event_editor_new (void) -{ - EventEditor *ee; - - ee = EVENT_EDITOR (gtk_type_new (TYPE_EVENT_EDITOR)); - return event_editor_construct (EVENT_EDITOR (ee)); -} - -/** - * event_editor_set_ical_object: - * @ee: An event editor. - * @comp: A calendar object. - * - * Sets the calendar object that an event editor dialog will manipulate. - **/ -void -event_editor_set_ical_object (EventEditor *ee, CalComponent *comp) -{ - EventEditorPrivate *priv; - char *title; - - g_return_if_fail (ee != NULL); - g_return_if_fail (IS_EVENT_EDITOR (ee)); - - priv = ee->priv; - - if (priv->comp) { - const char *uid; - - cal_component_get_uid (priv->comp, &uid); - gtk_signal_emit (GTK_OBJECT (ee), event_editor_signals[ICAL_OBJECT_RELEASED], uid); - gtk_object_unref (GTK_OBJECT (priv->comp)); - priv->comp = NULL; - } - - if (comp) - priv->comp = cal_component_clone (comp); - - title = make_title_from_comp (priv->comp); - gtk_window_set_title (GTK_WINDOW (priv->app), title); - g_free (title); - - fill_widgets (ee); -} - -/* Brings attention to a window by raising it and giving it focus */ -static void -raise_and_focus (GtkWidget *widget) -{ - g_assert (GTK_WIDGET_REALIZED (widget)); - gdk_window_show (widget->window); - gtk_widget_grab_focus (widget); -} - -/** - * event_editor_focus: - * @ee: An event editor. - * - * Makes sure an event editor is shown, on top of other windows, and focused. - **/ -void -event_editor_focus (EventEditor *ee) -{ - EventEditorPrivate *priv; - - g_return_if_fail (ee != NULL); - g_return_if_fail (IS_EVENT_EDITOR (ee)); - - priv = ee->priv; - gtk_widget_show_now (priv->app); - raise_and_focus (priv->app); -} - -static void -alarm_toggle (GtkWidget *toggle, EventEditor *ee) -{ - EventEditorPrivate *priv; - GtkWidget *alarm_amount = NULL; - GtkWidget *alarm_unit = NULL; - gboolean active; - - priv = ee->priv; - - active = GTK_TOGGLE_BUTTON (toggle)->active; - - if (toggle == priv->alarm_display) { - alarm_amount = priv->alarm_display_amount; - alarm_unit = priv->alarm_display_unit; - } else if (toggle == priv->alarm_audio) { - alarm_amount = priv->alarm_audio_amount; - alarm_unit = priv->alarm_audio_unit; - } else if (toggle == priv->alarm_program) { - alarm_amount = priv->alarm_program_amount; - alarm_unit = priv->alarm_program_unit; - gtk_widget_set_sensitive (priv->alarm_program_run_program, active); - } else if (toggle == priv->alarm_mail) { - alarm_amount = priv->alarm_mail_amount; - alarm_unit = priv->alarm_mail_unit; - gtk_widget_set_sensitive (priv->alarm_mail_mail_to, active); - } else - g_assert_not_reached (); - - gtk_widget_set_sensitive (alarm_amount, active); - gtk_widget_set_sensitive (alarm_unit, active); -} - -/* - * Checks if the day range occupies all the day, and if so, check the - * box accordingly - */ -static void -check_all_day (EventEditor *ee) -{ - EventEditorPrivate *priv; - time_t ev_start, ev_end; - - priv = ee->priv; - - ev_start = e_dialog_dateedit_get (priv->start_time); - ev_end = e_dialog_dateedit_get (priv->end_time); - - /* all day event checkbox */ - if (time_day_begin (ev_start) == ev_start - && time_day_begin (ev_end) == ev_end) - e_dialog_toggle_set (priv->all_day_event, TRUE); - else - e_dialog_toggle_set (priv->all_day_event, FALSE); -} - -/* - * Callback: all day event box clicked - */ -static void -set_all_day (GtkWidget *toggle, EventEditor *ee) -{ - EventEditorPrivate *priv; - struct tm start_tm, end_tm; - time_t start_t, end_t; - gboolean all_day; - int flags; - - priv = ee->priv; - - /* If the all_day toggle is set, the end date is inclusive of the - entire day on which it points to. */ - all_day = GTK_TOGGLE_BUTTON (toggle)->active; - - start_t = e_dialog_dateedit_get (priv->start_time); - start_tm = *localtime (&start_t); - start_tm.tm_min = 0; - start_tm.tm_sec = 0; - - if (all_day) - start_tm.tm_hour = 0; - else - start_tm.tm_hour = day_begin; - - e_dialog_dateedit_set (priv->start_time, mktime (&start_tm)); - - end_t = e_dialog_dateedit_get (priv->end_time); - end_tm = *localtime (&end_t); - end_tm.tm_min = 0; - end_tm.tm_sec = 0; - - if (all_day) { - /* mktime() will fix this if we go past the end of the month.*/ - end_tm.tm_hour = 0; - } else { - if (end_tm.tm_year == start_tm.tm_year - && end_tm.tm_mon == start_tm.tm_mon - && end_tm.tm_mday == start_tm.tm_mday - && end_tm.tm_hour <= start_tm.tm_hour) - end_tm.tm_hour = start_tm.tm_hour + 1; - } - - flags = gnome_date_edit_get_flags (GNOME_DATE_EDIT (priv->start_time)); - if (all_day) - flags &= ~GNOME_DATE_EDIT_SHOW_TIME; - else - flags |= GNOME_DATE_EDIT_SHOW_TIME; - gnome_date_edit_set_flags (GNOME_DATE_EDIT (priv->start_time), flags); - gnome_date_edit_set_flags (GNOME_DATE_EDIT (priv->end_time), flags); - - e_dialog_dateedit_set (priv->end_time, mktime (&end_tm)); - - gtk_widget_hide (GNOME_DATE_EDIT (priv->start_time)->cal_label); - gtk_widget_hide (GNOME_DATE_EDIT (priv->end_time)->cal_label); -} - -/* - * Callback: checks that the dates are start < end - */ -static void -check_dates (GnomeDateEdit *gde, EventEditor *ee) -{ - EventEditorPrivate *priv; - time_t start, end; - struct tm tm_start, tm_end; - - priv = ee->priv; - - start = e_dialog_dateedit_get (priv->start_time); - end = e_dialog_dateedit_get (priv->end_time); - - if (start > end) { - tm_start = *localtime (&start); - tm_end = *localtime (&end); - - if (GTK_WIDGET (gde) == priv->start_time) { - tm_end.tm_year = tm_start.tm_year; - tm_end.tm_mon = tm_start.tm_mon; - tm_end.tm_mday = tm_start.tm_mday; - - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), ee); - e_dialog_dateedit_set (priv->end_time, mktime (&tm_end)); - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), ee); - } else if (GTK_WIDGET (gde) == priv->end_time) { - tm_start.tm_year = tm_end.tm_year; - tm_start.tm_mon = tm_end.tm_mon; - tm_start.tm_mday = tm_end.tm_mday; - -#if 0 - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), ee); - e_dialog_dateedit_set (priv->start_time, mktime (&tm_start)); - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), ee); -#endif - } - } -} - -/* - * Callback: checks that start_time < end_time and whether the - * selected hour range spans all of the day - */ -static void -check_times (GnomeDateEdit *gde, EventEditor *ee) -{ - EventEditorPrivate *priv; - time_t start, end; - struct tm tm_start, tm_end; - - priv = ee->priv; -#if 0 - gdk_pointer_ungrab (GDK_CURRENT_TIME); - gdk_flush (); -#endif - start = e_dialog_dateedit_get (priv->start_time); - end = e_dialog_dateedit_get (priv->end_time); - - if (start > end) { - tm_start = *localtime (&start); - tm_end = *localtime (&end); - - if (GTK_WIDGET (gde) == priv->start_time) { - tm_end.tm_min = tm_start.tm_min; - tm_end.tm_sec = tm_start.tm_sec; - tm_end.tm_hour = tm_start.tm_hour + 1; - - if (tm_end.tm_hour >= 24) { - tm_end.tm_hour = 24; /* mktime() will bump the day */ - tm_end.tm_min = 0; - tm_end.tm_sec = 0; - } - - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->end_time), ee); - e_dialog_dateedit_set (priv->end_time, mktime (&tm_end)); - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->end_time), ee); - } else if (GTK_WIDGET (gde) == priv->end_time) { - tm_start.tm_min = tm_end.tm_min; - tm_start.tm_sec = tm_end.tm_sec; - tm_start.tm_hour = tm_end.tm_hour - 1; - - if (tm_start.tm_hour < 0) { - tm_start.tm_hour = 0; - tm_start.tm_min = 0; - tm_start.tm_min = 0; - } - - gtk_signal_handler_block_by_data (GTK_OBJECT (priv->start_time), ee); - e_dialog_dateedit_set (priv->start_time, mktime (&tm_start)); - gtk_signal_handler_unblock_by_data (GTK_OBJECT (priv->start_time), ee); - } - } - - /* Check whether the event spans the whole day */ - - check_all_day (ee); -} - -static void -recurrence_toggled (GtkWidget *radio, EventEditor *ee) -{ - EventEditorPrivate *priv; - icalrecurrencetype_frequency rf; - - priv = ee->priv; - - if (!GTK_TOGGLE_BUTTON (radio)->active) - return; - - rf = e_dialog_radio_get (radio, recur_options_map); - - gtk_notebook_set_page (GTK_NOTEBOOK (priv->recurrence_rule_notebook), (int) rf); -} - - -static char * -get_exception_string (time_t t) -{ - static char buf[256]; - - strftime (buf, sizeof (buf), _("%a %b %d %Y"), localtime (&t)); - return buf; -} - - -static void -append_exception (EventEditor *ee, time_t t) -{ - EventEditorPrivate *priv; - time_t *tt; - char *c[1]; - int i; - GtkCList *clist; - - priv = ee->priv; - - c[0] = get_exception_string (t); - - tt = g_new (time_t, 1); - *tt = t; - - clist = GTK_CLIST (priv->recurrence_exceptions_list); - - i = gtk_clist_append (clist, c); - gtk_clist_set_row_data (clist, i, tt); - gtk_clist_select_row (clist, i, 0); - -/* gtk_widget_set_sensitive (ee->recur_ex_vbox, TRUE); */ -} - - -static void -recurrence_exception_added (GtkWidget *widget, EventEditor *ee) -{ - EventEditorPrivate *priv; - time_t t; - - priv = ee->priv; - - t = e_dialog_dateedit_get (priv->recurrence_exceptions_date); - append_exception (ee, t); -} - - -static void -recurrence_exception_deleted (GtkWidget *widget, EventEditor *ee) -{ - EventEditorPrivate *priv; - GtkCList *clist; - int sel; - - priv = ee->priv; - - clist = GTK_CLIST (priv->recurrence_exceptions_list); - if (!clist->selection) - return; - - sel = GPOINTER_TO_INT (clist->selection->data); - - g_free (gtk_clist_get_row_data (clist, sel)); /* free the time_t stored there */ - - gtk_clist_remove (clist, sel); - if (sel >= clist->rows) - sel--; - - gtk_clist_select_row (clist, sel, 0); -} - - -static void -recurrence_exception_changed (GtkWidget *widget, EventEditor *ee) -{ - EventEditorPrivate *priv; - GtkCList *clist; - time_t *t; - int sel; - - priv = ee->priv; - - clist = GTK_CLIST (priv->recurrence_exceptions_list); - if (!clist->selection) - return; - - sel = GPOINTER_TO_INT (clist->selection->data); - - t = gtk_clist_get_row_data (clist, sel); - *t = e_dialog_dateedit_get (priv->recurrence_exceptions_date); - - gtk_clist_set_text (clist, sel, 0, get_exception_string (*t)); -} - - -GtkWidget * -make_date_edit (void) -{ - return date_edit_new (time (NULL), FALSE); -} - - -GtkWidget * -make_date_edit_with_time (void) -{ - return date_edit_new (time (NULL), TRUE); -} - - -GtkWidget * -date_edit_new (time_t the_time, int show_time) -{ - return gnome_date_edit_new_flags (the_time, - ((show_time ? GNOME_DATE_EDIT_SHOW_TIME : 0) - | (am_pm_flag ? 0 : GNOME_DATE_EDIT_24_HR) - | (week_starts_on_monday - ? GNOME_DATE_EDIT_WEEK_STARTS_ON_MONDAY - : 0))); -} - - - -GtkWidget * -make_spin_button (int val, int low, int high) -{ - GtkAdjustment *adj; - GtkWidget *spin; - - adj = GTK_ADJUSTMENT (gtk_adjustment_new (val, low, high, 1, 10, 10)); - spin = gtk_spin_button_new (adj, 0.5, 0); - gtk_widget_set_usize (spin, 60, 0); - - return spin; -} - - -/* todo - - build some of the recur stuff by hand to take into account - the start-on-monday preference? - - get the apply button to work right - - make the properties stuff unglobal - - figure out why alarm units aren't sticking between edits - - closing the dialog window with the wm caused a crash - Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' - on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); - */ diff --git a/calendar/gui/event-editor.h b/calendar/gui/event-editor.h deleted file mode 100644 index 8e95e08cfb..0000000000 --- a/calendar/gui/event-editor.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Evolution calendar - Event editor dialog - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Miguel de Icaza - * Federico Mena-Quintero - * Seth Alves - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __EVENT_EDITOR_DIALOG_H__ -#define __EVENT_EDITOR_DIALOG_H__ - -#include -#include -#include "gnome-cal.h" - - - -#define TYPE_EVENT_EDITOR (event_editor_get_type ()) -#define EVENT_EDITOR(obj) (GTK_CHECK_CAST ((obj), TYPE_EVENT_EDITOR, EventEditor)) -#define EVENT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_EVENT_EDITOR, \ - EventEditorClass)) -#define IS_EVENT_EDITOR(obj) (GTK_CHECK_TYPE ((obj), TYPE_EVENT_EDITOR)) -#define IS_EVENT_EDITOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_EVENT_EDITOR)) - -typedef struct _EventEditor EventEditor; -typedef struct _EventEditorClass EventEditorClass; - -struct _EventEditor { - GtkObject object; - - /* Private data */ - gpointer priv; -}; - -struct _EventEditorClass { - GtkObjectClass parent_class; - - /* Notification signals */ - - void (* save_ical_object) (EventEditor *ee, CalComponent *comp); - void (* ical_object_released) (EventEditor *ee, const char *uid); - void (* editor_closed) (EventEditor *ee); -}; - - -GtkType event_editor_get_type (void); -EventEditor *event_editor_construct (EventEditor *ee); - -EventEditor *event_editor_new (void); - -void event_editor_set_ical_object (EventEditor *ee, CalComponent *comp); - -void event_editor_focus (EventEditor *ee); - -#if 0 -/* Convenience function to create and show a new event editor for an - * event that goes from day_begin to day_end of the specified day. - */ -void event_editor_new_whole_day (GnomeCalendar *owner, time_t day); -#endif - -GtkWidget *make_date_edit (void); -GtkWidget *make_date_edit_with_time (void); -GtkWidget *date_edit_new (time_t the_time, int show_time); - -GtkWidget *make_spin_button (int val, int low, int high); - - - -#endif /* __EVENT_EDITOR_DIALOG_H__ */ diff --git a/calendar/gui/evolution-calendar-control.c b/calendar/gui/evolution-calendar-control.c deleted file mode 100644 index 7ebe2b5f8e..0000000000 --- a/calendar/gui/evolution-calendar-control.c +++ /dev/null @@ -1,201 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include -#include -#include -#include -#include -#include - -#ifdef USING_OAF -#include -#else -#include -#endif - -#include -#include -#include -#include - -#define PROPERTY_CALENDAR_URI "folder_uri" - -#define PROPERTY_CALENDAR_URI_IDX 1 - -#ifdef USING_OAF -#define CONTROL_FACTORY_ID "OAFIID:control-factory:calendar:f4f90989-0f50-4af2-ad94-8bbdf331f0bc" -#else -#define CONTROL_FACTORY_ID "control-factory:calendar" -#endif - -CORBA_Environment ev; -CORBA_ORB orb; - - -static void -control_activate_cb (BonoboControl *control, - gboolean activate, - gpointer user_data) -{ - if (activate) - calendar_control_activate (control, user_data); - else - calendar_control_deactivate (control); -} - - - -static void -init_bonobo (int *argc, char **argv) -{ -#ifdef USING_OAF - /* FIXME: VERSION instead of "0.0". */ - gnome_init_with_popt_table ("evolution-calendar", "0.0", - *argc, argv, oaf_popt_options, - 0, NULL); - oaf_init (*argc, argv); -#else - gnome_CORBA_init_with_popt_table ( - "evolution-calendar", "0.0", - argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); -#endif - - if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) - g_error (_("Could not initialize Bonobo")); - - glade_gnome_init (); -} - - - -static void -get_prop (BonoboPropertyBag *bag, - BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - /*GnomeCalendar *gcal = user_data;*/ - - switch (arg_id) { - - case PROPERTY_CALENDAR_URI_IDX: - /* - if (fb && fb->uri) - BONOBO_ARG_SET_STRING (arg, fb->uri); - else - BONOBO_ARG_SET_STRING (arg, ""); - */ - break; - - default: - g_warning ("Unhandled arg %d\n", arg_id); - } -} - -static void -set_prop (BonoboPropertyBag *bag, - const BonoboArg *arg, - guint arg_id, - gpointer user_data) -{ - GnomeCalendar *gcal = user_data; - char *filename; - - switch (arg_id) { - - case PROPERTY_CALENDAR_URI_IDX: - printf ("set_prop: '%s'\n", BONOBO_ARG_GET_STRING (arg)); - filename = g_strdup_printf ("%s/calendar.vcf", - BONOBO_ARG_GET_STRING (arg)); - calendar_set_uri (gcal, filename); - g_free (filename); - break; - - default: - g_warning ("Unhandled arg %d\n", arg_id); - break; - } -} - - -static void -calendar_properties_init (GnomeCalendar *gcal) -{ - gcal->properties = bonobo_property_bag_new (get_prop, set_prop, gcal); - - bonobo_property_bag_add (gcal->properties, - PROPERTY_CALENDAR_URI, - PROPERTY_CALENDAR_URI_IDX, - BONOBO_ARG_STRING, - NULL, - _("The URI that the calendar will display"), - 0); - - bonobo_control_set_property_bag (gcal->control, gcal->properties); -} - - - -static BonoboObject * -calendar_control_factory (BonoboGenericFactory *Factory, void *closure) -{ - BonoboControl *control; - - /* Create the control. */ - GnomeCalendar *cal = new_calendar (full_name, NULL, NULL, 0); - - gtk_widget_show (GTK_WIDGET (cal)); - - control = bonobo_control_new (GTK_WIDGET (cal)); - cal->control = control; - - calendar_properties_init (cal); - - gtk_signal_connect (GTK_OBJECT (control), "activate", - control_activate_cb, cal); - - return BONOBO_OBJECT (control); -} - - -static void -calendar_control_factory_init (void) -{ - static BonoboGenericFactory *factory = NULL; - - if (factory != NULL) - return; - - puts ("XXXXXX - initializing calendar factory!!!"); - - factory = bonobo_generic_factory_new (CONTROL_FACTORY_ID, calendar_control_factory, NULL); - - if (factory == NULL) - g_error ("I could not register a Calendar control factory."); -} - - -int -main (int argc, char **argv) -{ - init_bonobo (&argc, argv); - glade_gnome_init (); - alarm_init (); - e_cursors_init (); - - init_calendar (); - - //g_log_set_always_fatal ((GLogLevelFlags) 0xFFFF); - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_LEVEL_WARNING); - - CORBA_exception_init (&ev); - - calendar_control_factory_init (); - component_factory_init (); - - bonobo_main (); - - return 0; -} diff --git a/calendar/gui/evolution-calendar.gnorba b/calendar/gui/evolution-calendar.gnorba deleted file mode 100644 index e2f1107926..0000000000 --- a/calendar/gui/evolution-calendar.gnorba +++ /dev/null @@ -1,11 +0,0 @@ -[evolution-shell-component-factory:evolution-calendar] -type=exe -repo_id=IDL:Bonobo/GenericFactory:1.0 -description=Factory for the Evolution calendar component. -location_info=evolution-calendar - -[evolution-shell-component:evolution-calendar] -type=factory -repo_id=IDL:Evolution/ShellComponent:1.0 -description=Evolution component for handling the calendar. -location_info=evolution-shell-component-factory:evolution-calendar diff --git a/calendar/gui/evolution-calendar.oafinfo b/calendar/gui/evolution-calendar.oafinfo deleted file mode 100644 index c8a4907854..0000000000 --- a/calendar/gui/evolution-calendar.oafinfo +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/getdate.y b/calendar/gui/getdate.y deleted file mode 100644 index 6df71bddda..0000000000 --- a/calendar/gui/getdate.y +++ /dev/null @@ -1,1001 +0,0 @@ -%{ -/* -** Originally) written by Steven M. Bellovin while -** at the University of North Carolina at Chapel Hill. Later tweaked by -** a couple of people on Usenet. Completely overhauled by Rich $alz -** and Jim Berets in August, 1990; -** send any email to Rich. -** -** This grammar has 10 shift/reduce conflicts. -** -** This code is in the public domain and has no copyright. -*/ -/* SUPPRESS 287 on yaccpar_sccsid *//* Unused static variable */ -/* SUPPRESS 288 on yyerrlab *//* Label unused */ - -#include -#include - -/* Since the code of getdate.y is not included in the Emacs executable - itself, there is no need to #define static in this file. Even if - the code were included in the Emacs executable, it probably - wouldn't do any harm to #undef it here; this will only cause - problems if we try to write to a static variable, which I don't - think this code needs to do. */ -#ifdef emacs -#undef static -#endif - -#include -#include - -/* The code at the top of get_date which figures out the offset of the - current time zone checks various CPP symbols to see if special - tricks are need, but defaults to using the gettimeofday system call. - Include if that will be used. */ - -#if defined(vms) - -#include -#include - -#else - -#include - -#ifdef TIME_WITH_SYS_TIME -#include -#include -#else -#ifdef HAVE_SYS_TIME_H -#include -#else -#include -#endif -#endif - -#ifdef timezone -#undef timezone /* needed for sgi */ -#endif - -#if defined(HAVE_SYS_TIMEB_H) -#include -#else -/* -** We use the obsolete `struct timeb' as part of our interface! -** Since the system doesn't have it, we define it here; -** our callers must do likewise. -*/ -struct timeb { - time_t time; /* Seconds since the epoch */ - unsigned short millitm; /* Field not used */ - short timezone; /* Minutes west of GMT */ - short dstflag; /* Field not used */ -}; -#endif /* defined(HAVE_SYS_TIMEB_H) */ - -#endif /* defined(vms) */ - -#if defined (STDC_HEADERS) || defined (USG) -#include -#endif - -/* Some old versions of bison generate parsers that use bcopy. - That loses on systems that don't provide the function, so we have - to redefine it here. */ -#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy) -#define bcopy(from, to, len) memcpy ((to), (from), (len)) -#endif - -#if defined (STDC_HEADERS) -#include -#endif - -/* NOTES on rebuilding getdate.c (particularly for inclusion in CVS - releases): - - We don't want to mess with all the portability hassles of alloca. - In particular, most (all?) versions of bison will use alloca in - their parser. If bison works on your system (e.g. it should work - with gcc), then go ahead and use it, but the more general solution - is to use byacc instead of bison, which should generate a portable - parser. I played with adding "#define alloca dont_use_alloca", to - give an error if the parser generator uses alloca (and thus detect - unportable getdate.c's), but that seems to cause as many problems - as it solves. */ - -extern struct tm *gmtime(); -extern struct tm *localtime(); - -#define yyparse getdate_yyparse -#define yylex getdate_yylex -#define yyerror getdate_yyerror - -static int yylex (); -static int yyerror (); - -#define EPOCH 1970 -#define HOUR(x) ((time_t)(x) * 60) -#define SECSPERDAY (24L * 60L * 60L) - - -/* -** An entry in the lexical lookup table. -*/ -typedef struct _TABLE { - char *name; - int type; - time_t value; -} TABLE; - - -/* -** Daylight-savings mode: on, off, or not yet known. -*/ -typedef enum _DSTMODE { - DSTon, DSToff, DSTmaybe -} DSTMODE; - -/* -** Meridian: am, pm, or 24-hour style. -*/ -typedef enum _MERIDIAN { - MERam, MERpm, MER24 -} MERIDIAN; - - -/* -** Global variables. We could get rid of most of these by using a good -** union as the yacc stack. (This routine was originally written before -** yacc had the %union construct.) Maybe someday; right now we only use -** the %union very rarely. -*/ -static char *yyInput; -static DSTMODE yyDSTmode; -static time_t yyDayOrdinal; -static time_t yyDayNumber; -static int yyHaveDate; -static int yyHaveDay; -static int yyHaveRel; -static int yyHaveTime; -static int yyHaveZone; -static time_t yyTimezone; -static time_t yyDay; -static time_t yyHour; -static time_t yyMinutes; -static time_t yyMonth; -static time_t yySeconds; -static time_t yyYear; -static MERIDIAN yyMeridian; -static time_t yyRelMonth; -static time_t yyRelSeconds; - -%} - -%union { - time_t Number; - enum _MERIDIAN Meridian; -} - -%token tAGO tDAY tDAYZONE tID tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT -%token tSEC_UNIT tSNUMBER tUNUMBER tZONE tDST - -%type tDAY tDAYZONE tMINUTE_UNIT tMONTH tMONTH_UNIT -%type tSEC_UNIT tSNUMBER tUNUMBER tZONE -%type tMERIDIAN o_merid - -%% - -spec : /* NULL */ - | spec item - ; - -item : time { - yyHaveTime++; - } - | zone { - yyHaveZone++; - } - | date { - yyHaveDate++; - } - | day { - yyHaveDay++; - } - | rel { - yyHaveRel++; - } - | number - ; - -time : tUNUMBER tMERIDIAN { - yyHour = $1; - yyMinutes = 0; - yySeconds = 0; - yyMeridian = $2; - } - | tUNUMBER ':' tUNUMBER o_merid { - yyHour = $1; - yyMinutes = $3; - yySeconds = 0; - yyMeridian = $4; - } - | tUNUMBER ':' tUNUMBER tSNUMBER { - yyHour = $1; - yyMinutes = $3; - yyMeridian = MER24; - yyDSTmode = DSToff; - yyTimezone = - ($4 % 100 + ($4 / 100) * 60); - } - | tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid { - yyHour = $1; - yyMinutes = $3; - yySeconds = $5; - yyMeridian = $6; - } - | tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER { - yyHour = $1; - yyMinutes = $3; - yySeconds = $5; - yyMeridian = MER24; - yyDSTmode = DSToff; - yyTimezone = - ($6 % 100 + ($6 / 100) * 60); - } - ; - -zone : tZONE { - yyTimezone = $1; - yyDSTmode = DSToff; - } - | tDAYZONE { - yyTimezone = $1; - yyDSTmode = DSTon; - } - | - tZONE tDST { - yyTimezone = $1; - yyDSTmode = DSTon; - } - ; - -day : tDAY { - yyDayOrdinal = 1; - yyDayNumber = $1; - } - | tDAY ',' { - yyDayOrdinal = 1; - yyDayNumber = $1; - } - | tUNUMBER tDAY { - yyDayOrdinal = $1; - yyDayNumber = $2; - } - ; - -date : tUNUMBER '/' tUNUMBER { - yyMonth = $1; - yyDay = $3; - } - | tUNUMBER '/' tUNUMBER '/' tUNUMBER { - yyMonth = $1; - yyDay = $3; - yyYear = $5; - } - | tUNUMBER tSNUMBER tSNUMBER { - /* ISO 8601 format. yyyy-mm-dd. */ - yyYear = $1; - yyMonth = -$2; - yyDay = -$3; - } - | tUNUMBER tMONTH tSNUMBER { - /* e.g. 17-JUN-1992. */ - yyDay = $1; - yyMonth = $2; - yyYear = -$3; - } - | tMONTH tUNUMBER { - yyMonth = $1; - yyDay = $2; - } - | tMONTH tUNUMBER ',' tUNUMBER { - yyMonth = $1; - yyDay = $2; - yyYear = $4; - } - | tUNUMBER tMONTH { - yyMonth = $2; - yyDay = $1; - } - | tUNUMBER tMONTH tUNUMBER { - yyMonth = $2; - yyDay = $1; - yyYear = $3; - } - ; - -rel : relunit tAGO { - yyRelSeconds = -yyRelSeconds; - yyRelMonth = -yyRelMonth; - } - | relunit - ; - -relunit : tUNUMBER tMINUTE_UNIT { - yyRelSeconds += $1 * $2 * 60L; - } - | tSNUMBER tMINUTE_UNIT { - yyRelSeconds += $1 * $2 * 60L; - } - | tMINUTE_UNIT { - yyRelSeconds += $1 * 60L; - } - | tSNUMBER tSEC_UNIT { - yyRelSeconds += $1; - } - | tUNUMBER tSEC_UNIT { - yyRelSeconds += $1; - } - | tSEC_UNIT { - yyRelSeconds++; - } - | tSNUMBER tMONTH_UNIT { - yyRelMonth += $1 * $2; - } - | tUNUMBER tMONTH_UNIT { - yyRelMonth += $1 * $2; - } - | tMONTH_UNIT { - yyRelMonth += $1; - } - ; - -number : tUNUMBER { - if (yyHaveTime && yyHaveDate && !yyHaveRel) - yyYear = $1; - else { - if($1>10000) { - yyHaveDate++; - yyDay= ($1)%100; - yyMonth= ($1/100)%100; - yyYear = $1/10000; - } - else { - yyHaveTime++; - if ($1 < 100) { - yyHour = $1; - yyMinutes = 0; - } - else { - yyHour = $1 / 100; - yyMinutes = $1 % 100; - } - yySeconds = 0; - yyMeridian = MER24; - } - } - } - ; - -o_merid : /* NULL */ { - $$ = MER24; - } - | tMERIDIAN { - $$ = $1; - } - ; - -%% - -/* Month and day table. */ -static TABLE const MonthDayTable[] = { - { N_("january"), tMONTH, 1 }, - { N_("february"), tMONTH, 2 }, - { N_("march"), tMONTH, 3 }, - { N_("april"), tMONTH, 4 }, - { N_("may"), tMONTH, 5 }, - { N_("june"), tMONTH, 6 }, - { N_("july"), tMONTH, 7 }, - { N_("august"), tMONTH, 8 }, - { N_("september"), tMONTH, 9 }, - { N_("sept"), tMONTH, 9 }, - { N_("october"), tMONTH, 10 }, - { N_("november"), tMONTH, 11 }, - { N_("december"), tMONTH, 12 }, - { N_("sunday"), tDAY, 0 }, - { N_("monday"), tDAY, 1 }, - { N_("tuesday"), tDAY, 2 }, - { N_("tues"), tDAY, 2 }, - { N_("wednesday"), tDAY, 3 }, - { N_("wednes"), tDAY, 3 }, - { N_("thursday"), tDAY, 4 }, - { N_("thur"), tDAY, 4 }, - { N_("thurs"), tDAY, 4 }, - { N_("friday"), tDAY, 5 }, - { N_("saturday"), tDAY, 6 }, - { NULL } -}; - -/* Time units table. */ -static TABLE const UnitsTable[] = { - { N_("year"), tMONTH_UNIT, 12 }, - { N_("month"), tMONTH_UNIT, 1 }, - { N_("fortnight"), tMINUTE_UNIT, 14 * 24 * 60 }, - { N_("week"), tMINUTE_UNIT, 7 * 24 * 60 }, - { N_("day"), tMINUTE_UNIT, 1 * 24 * 60 }, - { N_("hour"), tMINUTE_UNIT, 60 }, - { N_("minute"), tMINUTE_UNIT, 1 }, - { N_("min"), tMINUTE_UNIT, 1 }, - { N_("second"), tSEC_UNIT, 1 }, - { N_("sec"), tSEC_UNIT, 1 }, - { NULL } -}; - -/* Assorted relative-time words. */ -static TABLE const OtherTable[] = { - { N_("tomorrow"), tMINUTE_UNIT, 1 * 24 * 60 }, - { N_("yesterday"), tMINUTE_UNIT, -1 * 24 * 60 }, - { N_("today"), tMINUTE_UNIT, 0 }, - { N_("now"), tMINUTE_UNIT, 0 }, - { N_("last"), tUNUMBER, -1 }, - { N_("this"), tMINUTE_UNIT, 0 }, - { N_("next"), tUNUMBER, 2 }, - { N_("first"), tUNUMBER, 1 }, -/* { N_("second"), tUNUMBER, 2 }, */ - { N_("third"), tUNUMBER, 3 }, - { N_("fourth"), tUNUMBER, 4 }, - { N_("fifth"), tUNUMBER, 5 }, - { N_("sixth"), tUNUMBER, 6 }, - { N_("seventh"), tUNUMBER, 7 }, - { N_("eighth"), tUNUMBER, 8 }, - { N_("ninth"), tUNUMBER, 9 }, - { N_("tenth"), tUNUMBER, 10 }, - { N_("eleventh"), tUNUMBER, 11 }, - { N_("twelfth"), tUNUMBER, 12 }, - { N_("ago"), tAGO, 1 }, - { NULL } -}; - -/* The timezone table. */ -/* Some of these are commented out because a time_t can't store a float. */ -static TABLE const TimezoneTable[] = { - { "gmt", tZONE, HOUR( 0) }, /* Greenwich Mean */ - { "ut", tZONE, HOUR( 0) }, /* Universal (Coordinated) */ - { "utc", tZONE, HOUR( 0) }, - { "wet", tZONE, HOUR( 0) }, /* Western European */ - { "bst", tDAYZONE, HOUR( 0) }, /* British Summer */ - { "wat", tZONE, HOUR( 1) }, /* West Africa */ - { "at", tZONE, HOUR( 2) }, /* Azores */ -#if 0 - /* For completeness. BST is also British Summer, and GST is - * also Guam Standard. */ - { "bst", tZONE, HOUR( 3) }, /* Brazil Standard */ - { "gst", tZONE, HOUR( 3) }, /* Greenland Standard */ -#endif -#if 0 - { "nft", tZONE, HOUR(3.5) }, /* Newfoundland */ - { "nst", tZONE, HOUR(3.5) }, /* Newfoundland Standard */ - { "ndt", tDAYZONE, HOUR(3.5) }, /* Newfoundland Daylight */ -#endif - { "ast", tZONE, HOUR( 4) }, /* Atlantic Standard */ - { "adt", tDAYZONE, HOUR( 4) }, /* Atlantic Daylight */ - { "est", tZONE, HOUR( 5) }, /* Eastern Standard */ - { "edt", tDAYZONE, HOUR( 5) }, /* Eastern Daylight */ - { "cst", tZONE, HOUR( 6) }, /* Central Standard */ - { "cdt", tDAYZONE, HOUR( 6) }, /* Central Daylight */ - { "mst", tZONE, HOUR( 7) }, /* Mountain Standard */ - { "mdt", tDAYZONE, HOUR( 7) }, /* Mountain Daylight */ - { "pst", tZONE, HOUR( 8) }, /* Pacific Standard */ - { "pdt", tDAYZONE, HOUR( 8) }, /* Pacific Daylight */ - { "yst", tZONE, HOUR( 9) }, /* Yukon Standard */ - { "ydt", tDAYZONE, HOUR( 9) }, /* Yukon Daylight */ - { "hst", tZONE, HOUR(10) }, /* Hawaii Standard */ - { "hdt", tDAYZONE, HOUR(10) }, /* Hawaii Daylight */ - { "cat", tZONE, HOUR(10) }, /* Central Alaska */ - { "ahst", tZONE, HOUR(10) }, /* Alaska-Hawaii Standard */ - { "nt", tZONE, HOUR(11) }, /* Nome */ - { "idlw", tZONE, HOUR(12) }, /* International Date Line West */ - { "cet", tZONE, -HOUR(1) }, /* Central European */ - { "met", tZONE, -HOUR(1) }, /* Middle European */ - { "mewt", tZONE, -HOUR(1) }, /* Middle European Winter */ - { "mest", tDAYZONE, -HOUR(1) }, /* Middle European Summer */ - { "swt", tZONE, -HOUR(1) }, /* Swedish Winter */ - { "sst", tDAYZONE, -HOUR(1) }, /* Swedish Summer */ - { "fwt", tZONE, -HOUR(1) }, /* French Winter */ - { "fst", tDAYZONE, -HOUR(1) }, /* French Summer */ - { "eet", tZONE, -HOUR(2) }, /* Eastern Europe, USSR Zone 1 */ - { "bt", tZONE, -HOUR(3) }, /* Baghdad, USSR Zone 2 */ -#if 0 - { "it", tZONE, -HOUR(3.5) },/* Iran */ -#endif - { "zp4", tZONE, -HOUR(4) }, /* USSR Zone 3 */ - { "zp5", tZONE, -HOUR(5) }, /* USSR Zone 4 */ -#if 0 - { "ist", tZONE, -HOUR(5.5) },/* Indian Standard */ -#endif - { "zp6", tZONE, -HOUR(6) }, /* USSR Zone 5 */ -#if 0 - /* For completeness. NST is also Newfoundland Stanard, and SST is - * also Swedish Summer. */ - { "nst", tZONE, -HOUR(6.5) },/* North Sumatra */ - { "sst", tZONE, -HOUR(7) }, /* South Sumatra, USSR Zone 6 */ -#endif /* 0 */ - { "wast", tZONE, -HOUR(7) }, /* West Australian Standard */ - { "wadt", tDAYZONE, -HOUR(7) }, /* West Australian Daylight */ -#if 0 - { "jt", tZONE, -HOUR(7.5) },/* Java (3pm in Cronusland!) */ -#endif - { "cct", tZONE, -HOUR(8) }, /* China Coast, USSR Zone 7 */ - { "jst", tZONE, -HOUR(9) }, /* Japan Standard, USSR Zone 8 */ -#if 0 - { "cast", tZONE, -HOUR(9.5) },/* Central Australian Standard */ - { "cadt", tDAYZONE, -HOUR(9.5) },/* Central Australian Daylight */ -#endif - { "east", tZONE, -HOUR(10) }, /* Eastern Australian Standard */ - { "eadt", tDAYZONE, -HOUR(10) }, /* Eastern Australian Daylight */ - { "gst", tZONE, -HOUR(10) }, /* Guam Standard, USSR Zone 9 */ - { "nzt", tZONE, -HOUR(12) }, /* New Zealand */ - { "nzst", tZONE, -HOUR(12) }, /* New Zealand Standard */ - { "nzdt", tDAYZONE, -HOUR(12) }, /* New Zealand Daylight */ - { "idle", tZONE, -HOUR(12) }, /* International Date Line East */ - { NULL } -}; - -/* Military timezone table. */ -static TABLE const MilitaryTable[] = { - { "a", tZONE, HOUR( 1) }, - { "b", tZONE, HOUR( 2) }, - { "c", tZONE, HOUR( 3) }, - { "d", tZONE, HOUR( 4) }, - { "e", tZONE, HOUR( 5) }, - { "f", tZONE, HOUR( 6) }, - { "g", tZONE, HOUR( 7) }, - { "h", tZONE, HOUR( 8) }, - { "i", tZONE, HOUR( 9) }, - { "k", tZONE, HOUR( 10) }, - { "l", tZONE, HOUR( 11) }, - { "m", tZONE, HOUR( 12) }, - { "n", tZONE, HOUR(- 1) }, - { "o", tZONE, HOUR(- 2) }, - { "p", tZONE, HOUR(- 3) }, - { "q", tZONE, HOUR(- 4) }, - { "r", tZONE, HOUR(- 5) }, - { "s", tZONE, HOUR(- 6) }, - { "t", tZONE, HOUR(- 7) }, - { "u", tZONE, HOUR(- 8) }, - { "v", tZONE, HOUR(- 9) }, - { "w", tZONE, HOUR(-10) }, - { "x", tZONE, HOUR(-11) }, - { "y", tZONE, HOUR(-12) }, - { "z", tZONE, HOUR( 0) }, - { NULL } -}; - - - - -/* ARGSUSED */ -static int -yyerror(s) - char *s; -{ - return 0; -} - - -static time_t -ToSeconds(Hours, Minutes, Seconds, Meridian) - time_t Hours; - time_t Minutes; - time_t Seconds; - MERIDIAN Meridian; -{ - if (Minutes < 0 || Minutes > 59 || Seconds < 0 || Seconds > 59) - return -1; - switch (Meridian) { - case MER24: - if (Hours < 0 || Hours > 23) - return -1; - return (Hours * 60L + Minutes) * 60L + Seconds; - case MERam: - if (Hours < 1 || Hours > 12) - return -1; - return (Hours * 60L + Minutes) * 60L + Seconds; - case MERpm: - if (Hours < 1 || Hours > 12) - return -1; - return ((Hours + 12) * 60L + Minutes) * 60L + Seconds; - default: - abort (); - } - /* NOTREACHED */ -} - - -static time_t -Convert(Month, Day, Year, Hours, Minutes, Seconds, Meridian, DSTmode) - time_t Month; - time_t Day; - time_t Year; - time_t Hours; - time_t Minutes; - time_t Seconds; - MERIDIAN Meridian; - DSTMODE DSTmode; -{ - static int DaysInMonth[12] = { - 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 - }; - time_t tod; - time_t Julian; - int i; - - if (Year < 0) - Year = -Year; - if (Year < 100) - Year += 1900; - DaysInMonth[1] = Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0) - ? 29 : 28; - if (Year < EPOCH || Year > 1999 - || Month < 1 || Month > 12 - /* Lint fluff: "conversion from long may lose accuracy" */ - || Day < 1 || Day > DaysInMonth[(int)--Month]) - return -1; - - for (Julian = Day - 1, i = 0; i < Month; i++) - Julian += DaysInMonth[i]; - for (i = EPOCH; i < Year; i++) - Julian += 365 + (i % 4 == 0); - Julian *= SECSPERDAY; - Julian += yyTimezone * 60L; - if ((tod = ToSeconds(Hours, Minutes, Seconds, Meridian)) < 0) - return -1; - Julian += tod; - if (DSTmode == DSTon - || (DSTmode == DSTmaybe && localtime(&Julian)->tm_isdst)) - Julian -= 60 * 60; - return Julian; -} - - -static time_t -DSTcorrect(Start, Future) - time_t Start; - time_t Future; -{ - time_t StartDay; - time_t FutureDay; - - StartDay = (localtime(&Start)->tm_hour + 1) % 24; - FutureDay = (localtime(&Future)->tm_hour + 1) % 24; - return (Future - Start) + (StartDay - FutureDay) * 60L * 60L; -} - - -static time_t -RelativeDate(Start, DayOrdinal, DayNumber) - time_t Start; - time_t DayOrdinal; - time_t DayNumber; -{ - struct tm *tm; - time_t now; - - now = Start; - tm = localtime(&now); - now += SECSPERDAY * ((DayNumber - tm->tm_wday + 7) % 7); - now += 7 * SECSPERDAY * (DayOrdinal <= 0 ? DayOrdinal : DayOrdinal - 1); - return DSTcorrect(Start, now); -} - - -static time_t -RelativeMonth(Start, RelMonth) - time_t Start; - time_t RelMonth; -{ - struct tm *tm; - time_t Month; - time_t Year; - - if (RelMonth == 0) - return 0; - tm = localtime(&Start); - Month = 12 * tm->tm_year + tm->tm_mon + RelMonth; - Year = Month / 12; - Month = Month % 12 + 1; - return DSTcorrect(Start, - Convert(Month, (time_t)tm->tm_mday, Year, - (time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec, - MER24, DSTmaybe)); -} - - -static int -LookupWord(buff) - char *buff; -{ - register char *p; - register char *q; - register const TABLE *tp; - int i; - int abbrev; - - /* Make it lowercase. */ - for (p = buff; *p; p++) - if (isupper(*p)) - *p = tolower(*p); - - if (strcmp(buff, "am") == 0 || strcmp(buff, "a.m.") == 0) { - yylval.Meridian = MERam; - return tMERIDIAN; - } - if (strcmp(buff, "pm") == 0 || strcmp(buff, "p.m.") == 0) { - yylval.Meridian = MERpm; - return tMERIDIAN; - } - - /* See if we have an abbreviation for a month. */ - if (strlen(buff) == 3) - abbrev = 1; - else if (strlen(buff) == 4 && buff[3] == '.') { - abbrev = 1; - buff[3] = '\0'; - } - else - abbrev = 0; - - for (tp = MonthDayTable; tp->name; tp++) { - if (abbrev) { - if (strncmp(buff, tp->name, 3) == 0) { - yylval.Number = tp->value; - return tp->type; - } - } - else if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - } - - for (tp = TimezoneTable; tp->name; tp++) - if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - - if (strcmp(buff, "dst") == 0) - return tDST; - - for (tp = UnitsTable; tp->name; tp++) - if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - - /* Strip off any plural and try the units table again. */ - i = strlen(buff) - 1; - if (buff[i] == 's') { - buff[i] = '\0'; - for (tp = UnitsTable; tp->name; tp++) - if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - buff[i] = 's'; /* Put back for "this" in OtherTable. */ - } - - for (tp = OtherTable; tp->name; tp++) - if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - - /* Military timezones. */ - if (buff[1] == '\0' && isalpha(*buff)) { - for (tp = MilitaryTable; tp->name; tp++) - if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - } - - /* Drop out any periods and try the timezone table again. */ - for (i = 0, p = q = buff; *q; q++) - if (*q != '.') - *p++ = *q; - else - i++; - *p = '\0'; - if (i) - for (tp = TimezoneTable; tp->name; tp++) - if (strcmp(buff, tp->name) == 0) { - yylval.Number = tp->value; - return tp->type; - } - - return tID; -} - - -static int -yylex() -{ - register char c; - register char *p; - char buff[20]; - int Count; - int sign; - - for ( ; ; ) { - while (isspace(*yyInput)) - yyInput++; - - if (isdigit(c = *yyInput) || c == '-' || c == '+') { - if (c == '-' || c == '+') { - sign = c == '-' ? -1 : 1; - if (!isdigit(*++yyInput)) - /* skip the '-' sign */ - continue; - } - else - sign = 0; - for (yylval.Number = 0; isdigit(c = *yyInput++); ) - yylval.Number = 10 * yylval.Number + c - '0'; - yyInput--; - if (sign < 0) - yylval.Number = -yylval.Number; - return sign ? tSNUMBER : tUNUMBER; - } - if (isalpha(c)) { - for (p = buff; isalpha(c = *yyInput++) || c == '.'; ) - if (p < &buff[sizeof buff - 1]) - *p++ = c; - *p = '\0'; - yyInput--; - return LookupWord(buff); - } - if (c != '(') - return *yyInput++; - Count = 0; - do { - c = *yyInput++; - if (c == '\0') - return c; - if (c == '(') - Count++; - else if (c == ')') - Count--; - } while (Count > 0); - } -} - -#define TM_YEAR_ORIGIN 1900 - -/* Yield A - B, measured in seconds. */ -static long -difftm (a, b) - struct tm *a, *b; -{ - int ay = a->tm_year + (TM_YEAR_ORIGIN - 1); - int by = b->tm_year + (TM_YEAR_ORIGIN - 1); - int days = ( - /* difference in day of year */ - a->tm_yday - b->tm_yday - /* + intervening leap days */ - + ((ay >> 2) - (by >> 2)) - - (ay/100 - by/100) - + ((ay/100 >> 2) - (by/100 >> 2)) - /* + difference in years * 365 */ - + (long)(ay-by) * 365 - ); - return (60*(60*(24*days + (a->tm_hour - b->tm_hour)) - + (a->tm_min - b->tm_min)) - + (a->tm_sec - b->tm_sec)); -} - -time_t -get_date(p, now) - char *p; - struct timeb *now; -{ - struct tm *tm, gmt; - struct timeb ftz; - time_t Start; - time_t tod; - time_t nowtime; - - yyInput = p; - if (now == NULL) { - now = &ftz; - (void)time (&nowtime); - - if (! (tm = gmtime (&nowtime))) - return -1; - gmt = *tm; /* Make a copy, in case localtime modifies *tm. */ - - if (! (tm = localtime (&nowtime))) - return -1; - - ftz.timezone = difftm (&gmt, tm) / 60; - if(tm->tm_isdst) - ftz.timezone += 60; - } - else - { - nowtime = now->time; - } - - tm = localtime(&nowtime); - yyYear = tm->tm_year; - yyMonth = tm->tm_mon + 1; - yyDay = tm->tm_mday; - yyTimezone = now->timezone; - yyDSTmode = DSTmaybe; - yyHour = 0; - yyMinutes = 0; - yySeconds = 0; - yyMeridian = MER24; - yyRelSeconds = 0; - yyRelMonth = 0; - yyHaveDate = 0; - yyHaveDay = 0; - yyHaveRel = 0; - yyHaveTime = 0; - yyHaveZone = 0; - - if (yyparse() - || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1) - return -1; - - if (yyHaveDate || yyHaveTime || yyHaveDay) { - Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds, - yyMeridian, yyDSTmode); - if (Start < 0) - return -1; - } - else { - Start = nowtime; - if (!yyHaveRel) - Start -= ((tm->tm_hour * 60L + tm->tm_min) * 60L) + tm->tm_sec; - } - - Start += yyRelSeconds; - Start += RelativeMonth(Start, yyRelMonth); - - if (yyHaveDay && !yyHaveDate) { - tod = RelativeDate(Start, yyDayOrdinal, yyDayNumber); - Start += tod; - } - - /* Have to do *something* with a legitimate -1 so it's distinguishable - * from the error return value. (Alternately could set errno on error.) */ - return Start == -1 ? 0 : Start; -} - - -#if defined(TEST) - -/* ARGSUSED */ -int -main(ac, av) - int ac; - char *av[]; -{ - char buff[128]; - time_t d; - - (void)printf("Enter date, or blank line to exit.\n\t> "); - (void)fflush(stdout); - while (gets(buff) && buff[0]) { - d = get_date(buff, (struct timeb *)NULL); - if (d == -1) - (void)printf("Bad format - couldn't convert.\n"); - else - (void)printf("%s", ctime(&d)); - (void)printf("\t> "); - (void)fflush(stdout); - } - exit(0); - /* NOTREACHED */ -} -#endif /* defined(TEST) */ diff --git a/calendar/gui/gncal-todo.c b/calendar/gui/gncal-todo.c deleted file mode 100644 index a79d39363c..0000000000 --- a/calendar/gui/gncal-todo.c +++ /dev/null @@ -1,960 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* To-do widget for gncal - * - * Copyright (C) 1998 The Free Software Foundation - * - * Author: Federico Mena - */ - -#include -#include -#include -#include -#include -#include "event-editor.h" -#include "gncal-todo.h" -#include "calendar-commands.h" -#include "popup-menu.h" - -int todo_show_due_date = 0; -int todo_show_priority = 0; -int todo_show_time_remaining = 0; - -int todo_item_dstatus_highlight_overdue = 0; -int todo_item_dstatus_highlight_due_today = 0; -int todo_item_dstatus_highlight_not_due_yet = 0; - - -char *todo_overdue_font_text; -gint todo_current_sort_column = 0; -gint todo_current_sort_type = GTK_SORT_ASCENDING; - -gboolean todo_style_changed =0; -gboolean todo_list_autoresize = 1; -gboolean todo_list_redraw_in_progess = 0; -static void gncal_todo_init (GncalTodo *todo); - - -guint -gncal_todo_get_type (void) -{ - static guint todo_type = 0; - - if (!todo_type) { - GtkTypeInfo todo_info = { - "GncalTodo", - sizeof (GncalTodo), - sizeof (GncalTodoClass), - (GtkClassInitFunc) NULL, - (GtkObjectInitFunc) gncal_todo_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL - }; - - todo_type = gtk_type_unique (gtk_vbox_get_type (), &todo_info); - } - - return todo_type; -} - -static void -ok_button (GtkWidget *widget, GnomeDialog *dialog) -{ - CalComponent *comp; - CalClient *cal_client; - GnomeDateEdit *due_date; - GtkEditable *entry; - GtkSpinButton *priority; - GtkText *comment; - CalComponentText *text = g_new0 (CalComponentText, 1); - CalComponentDateTime date; - GSList *l; - gchar *t; - time_t d; - int p; - - comp = gtk_object_get_user_data (GTK_OBJECT (dialog)); - - cal_client = (CalClient*) (gtk_object_get_data (GTK_OBJECT (dialog), "cal_client")); - - /* Due date */ - due_date = GNOME_DATE_EDIT (gtk_object_get_data(GTK_OBJECT(dialog), "due_date")); - d = gnome_date_edit_get_date (due_date); - date.value = g_new0 (struct icaltimetype, 1); - *date.value = icaltimetype_from_timet (d, 1); - cal_component_set_dtend (comp, &date); - - /* Summary */ - entry = GTK_EDITABLE (gtk_object_get_data (GTK_OBJECT (dialog), "summary_entry")); - t = gtk_editable_get_chars (entry, 0, -1); - text->value = t; - cal_component_set_summary (comp, text); - g_free (t); - - /* Priority */ - priority = GTK_SPIN_BUTTON (gtk_object_get_data(GTK_OBJECT(dialog), "priority")); - p = gtk_spin_button_get_value_as_int (priority); - cal_component_set_priority (comp, &p); - - /* Comment */ - cal_component_get_comment_list (comp, &l); - comment = GTK_TEXT(gtk_object_get_data (GTK_OBJECT(dialog), "comment")); - t = gtk_editable_get_chars (entry, 0, -1); - text->value = t; - g_slist_append (l, text); - cal_component_set_comment_list (comp, l); - cal_component_free_text_list (l); - - if (!cal_client_update_object (cal_client, comp)) - g_message ("ok_button(): Could not update the object!"); - - gtk_object_unref (GTK_OBJECT (comp)); - - gtk_widget_destroy (GTK_WIDGET (dialog)); -} - -static void -cancel_button (GtkWidget *widget, GnomeDialog *dialog) -{ - CalComponent *comp; - - comp = gtk_object_get_user_data (GTK_OBJECT (dialog)); - - gtk_object_unref (GTK_OBJECT (comp)); - - gtk_widget_destroy (GTK_WIDGET (dialog)); -} - -static gint -delete_event (GtkWidget *widget, GdkEvent *event, GnomeDialog *dialog) -{ - cancel_button (NULL, dialog); - return TRUE; -} - -/* I've hacked this so we can use it separate from the rest of GncalTodo. - This whole file will go once we've got the new editor working. */ -void -gncal_todo_edit (CalClient *client, CalComponent *comp) -{ - GtkWidget *dialog; - GtkWidget *hbox; - GtkWidget *due_box; - GtkWidget *due_label; - GtkWidget *due_entry; - GtkWidget *comment_box; - GtkWidget *comment_label; - GtkWidget *comment_text; - GtkWidget *comment_internal_box; - GtkWidget *comment_sep; - GtkWidget *w; - GtkWidget *pri_box; - GtkWidget *pri_label; - GtkWidget *pri_spin; - GtkObject *pri_adj; - GtkWidget *entry; - gboolean new; - CalComponentText text; - CalComponentDateTime date; - GSList *l; - time_t d; - gint *p; - - new = (CAL_COMPONENT_NO_TYPE == cal_component_get_vtype (comp)); - if (new) - cal_component_set_new_vtype (comp, CAL_COMPONENT_TODO); - - dialog = gnome_dialog_new (new ? _("Create to-do item") : _("Edit to-do item"), - GNOME_STOCK_BUTTON_OK, - GNOME_STOCK_BUTTON_CANCEL, - NULL); -#if 0 - gnome_dialog_set_parent (GNOME_DIALOG (dialog), - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (todo->calendar)))); -#endif - hbox = gtk_hbox_new (FALSE, 4); - gtk_container_border_width (GTK_CONTAINER (hbox), 4); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), - hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - - due_box = gtk_hbox_new (FALSE, 4); - gtk_container_border_width (GTK_CONTAINER (due_box), 4); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), due_box, FALSE, FALSE, 0); - gtk_widget_show (due_box); - - pri_box = gtk_hbox_new (FALSE, 4); - gtk_container_border_width (GTK_CONTAINER (pri_box), 4); - gtk_box_pack_start(GTK_BOX (GNOME_DIALOG (dialog)->vbox), pri_box, FALSE, FALSE, 0); - gtk_widget_show (pri_box); - - comment_box = gtk_hbox_new (FALSE, 4); - gtk_container_border_width (GTK_CONTAINER (comment_box), 4); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), comment_box, FALSE, FALSE, 0); - gtk_widget_show (comment_box); - - comment_internal_box = gtk_vbox_new(FALSE,2); - gtk_container_border_width (GTK_CONTAINER (comment_internal_box), 4); - - gtk_box_pack_start (GTK_BOX (comment_box), comment_internal_box, TRUE, TRUE, 0); - gtk_widget_show (comment_internal_box); - - w = gtk_label_new (_("Summary:")); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - entry = gtk_entry_new (); - cal_component_get_summary (comp, &text); - gtk_entry_set_text (GTK_ENTRY (entry), text.value); - gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); - gtk_widget_show (entry); - - - due_label = gtk_label_new (_("Due Date:")); - gtk_box_pack_start (GTK_BOX (due_box), due_label, FALSE, FALSE, 0); - gtk_widget_show (due_label); - - due_entry = gtk_entry_new (); - cal_component_get_dtend (comp, &date); - d = time_from_icaltimetype (*date.value); - due_entry = date_edit_new (d, TRUE); - gtk_box_pack_start (GTK_BOX (due_box), due_entry, TRUE, TRUE, 0); - gtk_widget_show (due_entry); - - pri_label = gtk_label_new (_("Priority:")); - gtk_box_pack_start (GTK_BOX (pri_box), pri_label, FALSE, FALSE, 0); - gtk_widget_show (pri_label); - - pri_adj = gtk_adjustment_new (5.0, 1.0, 9.0, 1.0, 3.0, 0.0); - pri_spin = gtk_spin_button_new (GTK_ADJUSTMENT(pri_adj), 0.0, 0); - gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (pri_spin), TRUE); - gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (pri_spin), FALSE); - gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (pri_spin), FALSE); - cal_component_get_priority (comp, &p); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (pri_spin), (gfloat) *p); - gtk_box_pack_start (GTK_BOX (pri_box), pri_spin, FALSE, FALSE, 0); - gtk_widget_show (pri_spin); - - comment_sep = gtk_hseparator_new (); - gtk_box_pack_start (GTK_BOX (comment_box), comment_sep, FALSE, FALSE, 0); - gtk_widget_show(comment_sep); - - comment_label = gtk_label_new (_("Item Comments:")); - gtk_label_set_justify(GTK_LABEL(comment_label), GTK_JUSTIFY_LEFT); - gtk_box_pack_start (GTK_BOX (comment_internal_box), comment_label, TRUE, TRUE, 0); - gtk_widget_show (comment_label); - - comment_text = gtk_text_new (NULL, NULL); - gtk_text_set_editable (GTK_TEXT (comment_text), TRUE); - gtk_text_set_word_wrap( GTK_TEXT(comment_text), TRUE); - gtk_text_freeze(GTK_TEXT(comment_text)); -#warning "FIX ME" - /* Need to handle multiple comments */ - cal_component_get_comment_list (comp, &l); - if (l) { - CalComponentText text = *(CalComponentText*)l->data; - - gtk_text_insert(GTK_TEXT(comment_text), NULL, NULL, NULL, - text.value, strlen(text.value)); - } - cal_component_free_text_list (l); - gtk_text_thaw(GTK_TEXT(comment_text)); - gtk_box_pack_start (GTK_BOX (comment_internal_box), comment_text, FALSE, TRUE, 0); - gtk_widget_show (comment_text); - - gtk_object_set_user_data (GTK_OBJECT (dialog), comp); - gtk_object_ref (GTK_OBJECT (comp)); - - gtk_object_set_data (GTK_OBJECT (dialog), "cal_client", client); - gtk_object_set_data (GTK_OBJECT (dialog), "summary_entry", entry); - gtk_object_set_data (GTK_OBJECT (dialog), "due_date", due_entry); - gtk_object_set_data (GTK_OBJECT (dialog), "priority", pri_spin); - gtk_object_set_data (GTK_OBJECT (dialog), "comment", comment_text); - - gnome_dialog_button_connect (GNOME_DIALOG (dialog), 0, (GtkSignalFunc) ok_button, dialog); - gnome_dialog_button_connect (GNOME_DIALOG (dialog), 1, (GtkSignalFunc) cancel_button, dialog); - - gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", - (GtkSignalFunc) delete_event, - dialog); - - gnome_dialog_set_default (GNOME_DIALOG (dialog), 0); - gnome_dialog_editable_enters (GNOME_DIALOG (dialog), GTK_EDITABLE(entry)); - - gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); - gtk_widget_show (dialog); - gtk_widget_grab_focus (entry); -} - -static CalComponent * -get_clist_selected_comp (GtkCList *clist) -{ - gint sel; - - if (!clist->selection) - return NULL; - - sel = GPOINTER_TO_INT(clist->selection->data); - - return gtk_clist_get_row_data (clist, sel); -} - -static void -add_todo (GncalTodo *todo) -{ - CalComponent *comp; - - comp = cal_component_new (); - -#if 0 - gncal_todo_edit (todo, comp); -#endif - gtk_object_unref (GTK_OBJECT (comp)); -} - -static void -edit_todo (GncalTodo *todo) -{ - CalComponent *comp; - - comp = get_clist_selected_comp (todo->clist); - -#if 0 - gncal_todo_edit (todo, comp); -#endif -} - -static void -delete_todo (GncalTodo *todo) -{ - CalComponent *comp; - const char *uid; - - comp = get_clist_selected_comp (todo->clist); - cal_component_get_uid (comp, &uid); - - if (!cal_client_remove_object (todo->calendar->client, uid)) - g_message ("delete_todo(): Could not remove the object!"); -} - -static void -add_activated (GtkWidget *widget, GncalTodo *todo) -{ - GtkWidget *w; - - while ((w = gtk_grab_get_current ()) != NULL) - gtk_grab_remove (w); - - add_todo (todo); -} - -static void -edit_activated (GtkWidget *widget, GncalTodo *todo) -{ - GtkWidget *w; - - while ((w = gtk_grab_get_current ()) != NULL) - gtk_grab_remove (w); - - edit_todo (todo); -} - -static void -delete_activated (GtkWidget *widget, GncalTodo *todo) -{ - delete_todo (todo); -} - - -static void -clist_row_selected (GtkCList *clist, gint row, gint column, GdkEventButton *event, GncalTodo *todo) -{ - static struct menu_item items[] = { - { N_("Add to-do item..."), (GtkSignalFunc) add_activated, NULL, TRUE }, - { N_("Edit this item..."), (GtkSignalFunc) edit_activated, NULL, TRUE }, - { N_("Delete this item"), (GtkSignalFunc) delete_activated, NULL, TRUE } - }; - - int i; - - gtk_widget_set_sensitive (todo->edit_button, (todo->clist->selection != NULL)); - gtk_widget_set_sensitive (todo->delete_button, (todo->clist->selection != NULL)); - - if (!event) - return; - - switch (event->button) { - case 1: - if (event->type == GDK_2BUTTON_PRESS) - edit_todo (todo); - break; - - case 3: - for (i = 0; i < (sizeof (items) / sizeof (items[0])); i++) - items[i].data = todo; - - popup_menu (items, sizeof (items) / sizeof (items[0]), event); - break; - - default: - break; - } -} - -/* - * once we get a call back stating that a column - * has been resized never ever automatically resize again - */ -static void -column_resized (GtkWidget *widget, GncalTodo *todo) -{ - /* disabling autoresize of columns */ - if (todo_list_autoresize && !todo_list_redraw_in_progess){ - todo_list_autoresize = 0; - } -} - -/* - * restore the previously set settings for sorting the - * todo list - */ -static void -init_column_sorting (GtkCList *clist) -{ - - /* due date isn't shown so we can't sort by it */ - if (todo_current_sort_column == 1 && ! todo_show_due_date) - todo_current_sort_column = 0; - - clist->sort_type = todo_current_sort_type; - clist->sort_column = todo_current_sort_column; - - gtk_clist_set_sort_column (clist, todo_current_sort_column); - gtk_clist_sort (clist); -} - -static void -todo_click_column (GtkCList *clist, gint column, gpointer data) -{ - if (column == clist->sort_column) - { - if (clist->sort_type == GTK_SORT_ASCENDING) { - clist->sort_type = GTK_SORT_DESCENDING; - todo_current_sort_type = GTK_SORT_DESCENDING; - } else { - clist->sort_type = GTK_SORT_ASCENDING; - todo_current_sort_type = GTK_SORT_ASCENDING; - } - } - else { - gtk_clist_set_sort_column (clist, column); - todo_current_sort_column = column; - } - - gtk_clist_sort (clist); - - /* - * save the sorting preferences cause I hate to have the user - * click twice - */ - - gnome_config_set_int("/calendar/Todo/sort_column", todo_current_sort_column); - gnome_config_set_int("/calendar/Todo/sort_type", todo_current_sort_type); - gnome_config_sync(); -} - -static void -gncal_todo_init (GncalTodo *todo) -{ - GtkWidget *w; - GtkWidget *sw; - GtkWidget *hbox; - gchar *titles[4] = { - N_("Summary"), - N_("Due Date"), - N_("Priority"), - N_("Time Left") - }; - char *tmp[4]; - tmp[0] = _(titles[0]); - tmp[1] = _(titles[1]); - tmp[2] = _(titles[2]); - tmp[3] = _(titles[3]); - - gtk_box_set_spacing (GTK_BOX (todo), 4); - - /* Label */ - - w = gtk_label_new (_("To-do list")); - gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); - gtk_box_pack_start (GTK_BOX (todo), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - /* Clist */ - - sw = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (todo), sw, TRUE, TRUE, 0); - gtk_widget_show (sw); - - - w = gtk_clist_new_with_titles(4, tmp); - - todo->clist = GTK_CLIST (w); - gtk_clist_set_selection_mode (todo->clist, GTK_SELECTION_BROWSE); - - gtk_signal_connect (GTK_OBJECT (todo->clist), "select_row", - (GtkSignalFunc) clist_row_selected, - todo); - gtk_clist_set_button_actions (todo->clist, 2, GTK_BUTTON_SELECTS); - gtk_signal_connect (GTK_OBJECT (todo->clist), "resize_column", - (GtkSignalFunc) column_resized, - todo); - gtk_signal_connect (GTK_OBJECT (todo->clist), "click_column", - (GtkSignalFunc) todo_click_column, NULL); - - gtk_container_add (GTK_CONTAINER (sw), w); - gtk_widget_show (w); - - /* Box for buttons */ - - hbox = gtk_hbox_new (TRUE, 4); - gtk_box_pack_start (GTK_BOX (todo), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - /* Add */ - - w = gtk_button_new_with_label (_("Add...")); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - (GtkSignalFunc) add_activated, - todo); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_widget_show (w); - - /* Edit */ - - w = gtk_button_new_with_label (_("Edit...")); - todo->edit_button = w; - gtk_widget_set_sensitive (w, FALSE); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - (GtkSignalFunc) edit_activated, - todo); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_widget_show (w); - - /* Delete */ - - w = gtk_button_new_with_label (_("Delete")); - todo->delete_button = w; - gtk_widget_set_sensitive (w, FALSE); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - (GtkSignalFunc) delete_activated, - todo); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - gtk_widget_show (w); -} - -GtkWidget * -gncal_todo_new (GnomeCalendar *calendar) -{ - GncalTodo *todo; - - g_return_val_if_fail (calendar != NULL, NULL); - - todo = gtk_type_new (gncal_todo_get_type ()); - - todo->calendar = calendar; - - gncal_todo_update (todo, NULL, 0); - - return GTK_WIDGET (todo); -} - -static char * -convert_time_t_to_char (time_t t) -{ - char buf[100]; - struct tm tm; - - tm = *localtime (&t); - strftime(buf, sizeof (buf), "%m/%d/%Y", &tm); - - return g_strdup (buf); -} - - -enum todo_styles { - TODO_STYLE_OVERDUE, - TODO_STYLE_DUE_TODAY, - TODO_STYLE_NOT_DUE -}; - - -enum todo_status { - TODO_ITEM_DSTATUS_NOT_DUE_YET, - TODO_ITEM_DSTATUS_DUE_TODAY, - TODO_ITEM_DSTATUS_OVERDUE, - TODO_ITEM_DSTATUS_LAST_DUE_STATUS -}; -typedef enum todo_status todo_status; - -static GtkStyle * -make_todo_style(GncalTodo *todo, todo_status style_type) -{ - GtkStyle *style = NULL; - GdkColor style_color; - int color_prop = 0; - switch(style_type) { - case TODO_ITEM_DSTATUS_NOT_DUE_YET: - color_prop = COLOR_PROP_TODO_NOT_DUE_YET; - break; - case TODO_ITEM_DSTATUS_DUE_TODAY: - color_prop = COLOR_PROP_TODO_DUE_TODAY; - break; - case TODO_ITEM_DSTATUS_OVERDUE: - color_prop = COLOR_PROP_TODO_OVERDUE; - break; - case TODO_ITEM_DSTATUS_LAST_DUE_STATUS: - } - - style_color.red = color_props[color_prop].r; - style_color.green = color_props[color_prop].g; - style_color.blue = color_props[color_prop].b; - - style = gtk_style_copy (GTK_WIDGET (todo->clist)->style); - style->base[GTK_STATE_NORMAL] = style_color; - return style; -} - - -static -todo_status todo_item_due_status(time_t *todo_due_time) { - struct tm due_tm_time; - struct tm current_time; - struct tm *temp_tm; - time_t current_time_val = time(NULL); - temp_tm = localtime(todo_due_time); - /* make a copy so it dosen't get over written */ - memcpy(&due_tm_time, temp_tm, sizeof(struct tm)); - - - temp_tm = localtime(¤t_time_val); - memcpy(¤t_time, temp_tm, sizeof(struct tm)); - - if(due_tm_time.tm_mon == current_time.tm_mon && - due_tm_time.tm_mday == current_time.tm_mday && - due_tm_time.tm_year == current_time.tm_year) { - return TODO_ITEM_DSTATUS_DUE_TODAY; - } - - if((*todo_due_time) < current_time_val) { - return TODO_ITEM_DSTATUS_OVERDUE; - } - - return TODO_ITEM_DSTATUS_NOT_DUE_YET; -} - - -enum todo_remaining_time_form { - TODO_ITEM_REMAINING_WEEKS, - TODO_ITEM_REMAINING_DAYS, - TODO_ITEM_REMAINING_HOURS, - TODO_ITEM_REMAINING_MINUTES, - TODO_ITEM_REMAINING_SECONDS -}; -typedef enum todo_remaining_time_form todo_remaining_time_form; - - -static void -insert_in_clist (GncalTodo *todo, CalComponent *comp) -{ - int i; - CalComponentText t; - CalComponentDateTime date; - char *text[4]; - char time_remaining_buffer[100]; - time_t time_remain; - todo_remaining_time_form time_remaining_form; - int sec_in_week = 3600*7*24; - int sec_in_day = 3600*24; - int sec_in_hour = 3600; - int sec_in_minute = 60; - int weeks = 0; - int days = 0; - int hours = 0; - int minutes = 0; - int seconds = 0; - int *p; - time_t d; - - /* an array for the styles of items */ - static GtkStyle *dstatus_styles[TODO_ITEM_DSTATUS_LAST_DUE_STATUS]; - /* we want to remake the styles when the status is changed, - also we need to check for the null value in the pointer so we init them - at startup */ - if (todo_style_changed || !dstatus_styles[TODO_ITEM_DSTATUS_NOT_DUE_YET]) { - g_free(dstatus_styles[TODO_ITEM_DSTATUS_NOT_DUE_YET]); - g_free(dstatus_styles[TODO_ITEM_DSTATUS_OVERDUE]); - g_free(dstatus_styles[TODO_ITEM_DSTATUS_DUE_TODAY]); - - dstatus_styles[TODO_ITEM_DSTATUS_NOT_DUE_YET] = make_todo_style(todo, TODO_ITEM_DSTATUS_NOT_DUE_YET); - dstatus_styles[TODO_ITEM_DSTATUS_OVERDUE] = make_todo_style(todo, TODO_ITEM_DSTATUS_OVERDUE); - dstatus_styles[TODO_ITEM_DSTATUS_DUE_TODAY] = make_todo_style(todo, TODO_ITEM_DSTATUS_DUE_TODAY); - - todo_style_changed = 0; - } - - cal_component_get_summary (comp, &t); - text[0] = g_strdup (t.value); - - if(todo_show_time_remaining) { - memset(time_remaining_buffer, 0, 100); - /* we need to make a string that represents the amount of time remaining - before this task is due */ - - /* for right now all I'll do is up to the hours. */ - cal_component_get_dtend (comp, &date); - time_remain = time_from_icaltimetype (*date.value) - time (NULL); - if(time_remain < 0) { - text[3] = "Overdue!"; - } - else { - - /* lets determine a decent denomination to display */ - if(time_remain / (sec_in_week)) - { - /* we have weeks available */ - time_remaining_form = TODO_ITEM_REMAINING_WEEKS; - weeks = time_remain / sec_in_week; - days = (time_remain % (sec_in_week))/sec_in_day; - } - else if(time_remain / (sec_in_day)) - { - /* we have days available */ - time_remaining_form = TODO_ITEM_REMAINING_DAYS; - days = time_remain / sec_in_day; - hours = (time_remain % sec_in_day)/sec_in_hour; - } - else if(time_remain / (sec_in_hour)) - { - /* we have hours available */ - time_remaining_form = TODO_ITEM_REMAINING_HOURS; - hours = time_remain /sec_in_hour; - minutes = (time_remain % sec_in_hour) / sec_in_minute; - } - else if(time_remain / sec_in_minute) - { - time_remaining_form = TODO_ITEM_REMAINING_MINUTES; - minutes = time_remain / sec_in_minute; - seconds = time_remain % sec_in_minute; - } - else - { - time_remaining_form = TODO_ITEM_REMAINING_SECONDS; - seconds = time_remain; - } - - switch(time_remaining_form) - { - case TODO_ITEM_REMAINING_WEEKS: - snprintf(time_remaining_buffer, 100, "%d %s %d %s", weeks, - (weeks > 1) ? _("Weeks") : _("Week"), - days, (days > 1) ? _("Days") : _("Day")); - break; - case TODO_ITEM_REMAINING_DAYS: - snprintf(time_remaining_buffer, 100, "%d %s %d %s", days, - (days > 1) ? _("Days") : _("Day"), - hours, (hours > 1) ? _("Hours") : _("Hour")); - break; - case TODO_ITEM_REMAINING_HOURS: - snprintf(time_remaining_buffer, 100, "%d %s %d %s", hours, - (hours > 1) ? _("Hours") : _("Hour"), - minutes, (minutes > 1) ? _("Minutes") : _("Minute")); - break; - case TODO_ITEM_REMAINING_MINUTES: - snprintf(time_remaining_buffer, 100, "%d %s %d %s", minutes, - (minutes > 1) ? _("Minutes") : _("Minute"), - seconds, (seconds > 1) ? _("Seconds") : _("Second")); - break; - case TODO_ITEM_REMAINING_SECONDS: - snprintf(time_remaining_buffer, 100, "%d %s", seconds, - (seconds > 1) ? _("Seconds") : _("Second")); - break; - } - text[3] = g_strdup(time_remaining_buffer); - todo->data_ptrs = g_slist_append(todo->data_ptrs, text[3]); - } - - } - else { - text[3] = "Loose penguini!"; - } - /* - * right now column 0 will be the summary - * and column 1 will be the due date. - * WISH: this should be able to be changed on the fly - */ - - cal_component_get_dtend (comp, &date); - d = time_from_icaltimetype (*date.value); - if(todo_show_due_date) - { - text[1] = convert_time_t_to_char (d); - /* Append the data's pointer so later it can be properly freed */ - todo->data_ptrs = g_slist_append (todo->data_ptrs, text[1]); - } - else - text[1] = NULL; - - cal_component_get_priority (comp, &p); - if(p && todo_show_priority) - { - text[2] = g_strdup_printf ("%d", *p); - todo->data_ptrs = g_slist_append (todo->data_ptrs, text[2]); - } - else - text[2] = NULL; - - i = gtk_clist_append (todo->clist, text); - - gtk_clist_set_row_data_full (todo->clist, i, comp, - (GtkDestroyNotify) gtk_object_ref); - gtk_object_ref (GTK_OBJECT (comp)); - - /* - * determine if the task is overdue.. - * if so mark with the apropriate style - */ - - switch(todo_item_due_status(&d)) { - case TODO_ITEM_DSTATUS_NOT_DUE_YET: - if(todo_item_dstatus_highlight_not_due_yet) - { - gtk_clist_set_row_style(todo->clist, i, dstatus_styles[TODO_ITEM_DSTATUS_NOT_DUE_YET]); - } - break; - case TODO_ITEM_DSTATUS_DUE_TODAY: - if(todo_item_dstatus_highlight_due_today) - { - gtk_clist_set_row_style(todo->clist, i, dstatus_styles[TODO_ITEM_DSTATUS_DUE_TODAY]); - } - break; - case TODO_ITEM_DSTATUS_OVERDUE: - if(todo_item_dstatus_highlight_overdue) - { - gtk_clist_set_row_style(todo->clist, i, dstatus_styles[TODO_ITEM_DSTATUS_OVERDUE]); - } - break; - case TODO_ITEM_DSTATUS_LAST_DUE_STATUS: - } - - /* keep the list in order */ - gtk_clist_sort (todo->clist); -} - - -void -gncal_todo_update (GncalTodo *todo, CalComponent *comp, int flags) -{ - GSList *current_list; - CalClientGetStatus status; - GList *l, *uids; - - g_return_if_fail (todo != NULL); - g_return_if_fail (GNCAL_IS_TODO (todo)); - - /* - * shut down the resize handler cause we are playing with the list. - * In otherwords turn off the event handler - */ - todo_list_redraw_in_progess =1; - - /* freeze the list */ - gtk_clist_freeze (todo->clist); - init_column_sorting (todo->clist); - - /* - * before here we have to free some of the memory that - * stores the due date, or else we have a memory leak. - * luckily all of the pointers are stored in todo->data_ptrs; - */ - - /* check on the columns that we should display */ - /* check for due date */ - - if(todo_show_due_date) { - gtk_clist_set_column_visibility (todo->clist, 1, 1); - } - else { - gtk_clist_set_column_visibility (todo->clist, 1, 0); - } - - if(todo_show_time_remaining) { - gtk_clist_set_column_visibility (todo->clist, 3, 1); - } - else { - gtk_clist_set_column_visibility (todo->clist, 3, 0); - } - - - if(todo_show_priority) - gtk_clist_set_column_visibility (todo->clist, 2, 1); - else - gtk_clist_set_column_visibility (todo->clist, 2, 0); - - /* free the memory locations that were used in the previous display */ - for (current_list = todo->data_ptrs; - current_list != NULL; - current_list = g_slist_next(current_list)){ - g_free(current_list->data); - } - - /* free the list and clear out the pointer */ - g_slist_free(todo->data_ptrs); - todo->data_ptrs = NULL; - - gtk_clist_clear (todo->clist); - - - uids = cal_client_get_uids (todo->calendar->client, CAL_COMPONENT_TODO); - for (l = uids; l; l = l->next){ - char *uid = l->data; - CalComponent *comp; - - status = cal_client_get_object (todo->calendar->client, uid, - &comp); - - if (status == CAL_CLIENT_GET_SUCCESS) { - insert_in_clist (todo, comp); - gtk_object_unref (GTK_OBJECT (comp)); - } -#warning "FIX ME" - /* else? */ - g_free (uid); - } - g_list_free (uids); - - /* if we are autoresizing then do it now */ - if(todo_list_autoresize && todo->clist->rows != 0) - gtk_clist_columns_autosize (todo->clist); - - gtk_clist_thaw (todo->clist); - - gtk_widget_set_sensitive (todo->edit_button, - (todo->clist->selection != NULL)); - gtk_widget_set_sensitive (todo->delete_button, - (todo->clist->selection != NULL)); - todo_list_redraw_in_progess = 0; -} - - - - - - - - - - - diff --git a/calendar/gui/gncal-todo.h b/calendar/gui/gncal-todo.h deleted file mode 100644 index 1102e32d77..0000000000 --- a/calendar/gui/gncal-todo.h +++ /dev/null @@ -1,54 +0,0 @@ -/* To-do widget for gncal - * - * Copyright (C) 1998 The Free Software Foundation - * - * Author: Federico Mena - */ - -#ifndef GNCAL_TODO_H -#define GNCAL_TODO_H - -#include -#include -#include -#include "gnome-cal.h" - - -BEGIN_GNOME_DECLS - - -#define GNCAL_TODO(obj) GTK_CHECK_CAST (obj, gncal_todo_get_type (), GncalTodo) -#define GNCAL_TODO_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gncal_todo_get_type (), GncalTodoClass) -#define GNCAL_IS_TODO(obj) GTK_CHECK_TYPE (obj, gncal_todo_get_type ()) - - -typedef struct _GncalTodo GncalTodo; -typedef struct _GncalTodoClass GncalTodoClass; - -struct _GncalTodo { - GtkVBox vbox; - - GnomeCalendar *calendar; /* the calendar we are associated to */ - - GtkCList *clist; - - GtkWidget *edit_button; - GtkWidget *delete_button; - GSList *data_ptrs; -}; - -struct _GncalTodoClass { - GtkVBoxClass parent_class; -}; - - -guint gncal_todo_get_type (void); -GtkWidget *gncal_todo_new (GnomeCalendar *calendar); - -void gncal_todo_update (GncalTodo *todo, CalComponent *comp, int flags); - -void gncal_todo_edit (CalClient *client, CalComponent *comp); - -END_GNOME_DECLS - -#endif diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c deleted file mode 100644 index 334e66f331..0000000000 --- a/calendar/gui/gnome-cal.c +++ /dev/null @@ -1,1530 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * GnomeCalendar widget - * Copyright (C) 1998 the Free Software Foundation - * - * Authors: Miguel de Icaza (miguel@kernel.org) - * Federico Mena-Quintero - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "dialogs/alarm-notify-dialog.h" -#include "alarm.h" -#include "e-calendar-table.h" -#include "e-day-view.h" -#include "e-week-view.h" -#include "event-editor.h" -#include "gnome-cal.h" -#include "calendar-commands.h" - - - -/* An entry in the UID->alarms hash table. The UID key *is* the uid field in - * this structure, so don't free it separately. - */ -typedef struct { - char *uid; - GList *alarm_ids; -} ObjectAlarms; - - - -static void gnome_calendar_class_init (GnomeCalendarClass *class); -static void gnome_calendar_init (GnomeCalendar *gcal); -static void gnome_calendar_destroy (GtkObject *object); - -static void gnome_calendar_update_view_times (GnomeCalendar *gcal, - GtkWidget *page); -static void gnome_calendar_update_gtk_calendar (GnomeCalendar *gcal); -static void gnome_calendar_on_day_selected (GtkCalendar *calendar, - GnomeCalendar *gcal); -static void gnome_calendar_on_month_changed (GtkCalendar *calendar, - GnomeCalendar *gcal); - -static GtkVBoxClass *parent_class; - -static void setup_alarm (GnomeCalendar *cal, CalAlarmInstance *ai); - - - -guint -gnome_calendar_get_type (void) -{ - static guint gnome_calendar_type = 0; - if(!gnome_calendar_type) { - GtkTypeInfo gnome_calendar_info = { - "GnomeCalendar", - sizeof (GnomeCalendar), - sizeof (GnomeCalendarClass), - (GtkClassInitFunc) gnome_calendar_class_init, - (GtkObjectInitFunc) gnome_calendar_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL, - }; - /* - gnome_calendar_type = gtk_type_unique(gnome_app_get_type(), &gnome_calendar_info); - parent_class = gtk_type_class (gnome_app_get_type()); - */ - gnome_calendar_type = gtk_type_unique (gtk_vbox_get_type (), - &gnome_calendar_info); - parent_class = gtk_type_class (gtk_vbox_get_type ()); - } - return gnome_calendar_type; -} - -/* Class initialization function for the gnome calendar */ -static void -gnome_calendar_class_init (GnomeCalendarClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - object_class->destroy = gnome_calendar_destroy; -} - -/* Object initialization function for the gnome calendar */ -static void -gnome_calendar_init (GnomeCalendar *gcal) -{ - gcal->object_editor_hash = g_hash_table_new (g_str_hash, g_str_equal); - gcal->alarms = g_hash_table_new (g_str_hash, g_str_equal); -} - -/* Used from g_hash_table_foreach(); frees an object alarms entry */ -static void -free_object_alarms (gpointer key, gpointer value, gpointer data) -{ - ObjectAlarms *oa; - - oa = value; - - g_assert (oa->uid != NULL); - g_free (oa->uid); - oa->uid = NULL; - - g_assert (oa->alarm_ids != NULL); - g_list_free (oa->alarm_ids); - oa->alarm_ids = NULL; - - g_free (oa); -} - -/* Used from g_hash_table_foreach(); frees an UID string */ -static void -free_uid (gpointer key, gpointer value, gpointer data) -{ - char *uid; - - uid = key; - g_free (uid); -} - -static void -gnome_calendar_destroy (GtkObject *object) -{ - GnomeCalendar *gcal; - - g_return_if_fail (object != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (object)); - - gcal = GNOME_CALENDAR (object); - - gtk_object_unref (GTK_OBJECT (gcal->client)); - - g_hash_table_foreach (gcal->alarms, free_object_alarms, NULL); - g_hash_table_destroy (gcal->alarms); - gcal->alarms = NULL; - - g_hash_table_foreach (gcal->object_editor_hash, free_uid, NULL); - g_hash_table_destroy (gcal->object_editor_hash); - gcal->object_editor_hash = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -setup_widgets (GnomeCalendar *gcal) -{ - GtkWidget *vpane, *w; - - /* The Main Notebook. */ - gcal->main_notebook = gtk_notebook_new (); - gtk_notebook_set_show_border (GTK_NOTEBOOK (gcal->main_notebook), - FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (gcal->main_notebook), FALSE); - gtk_widget_show (gcal->main_notebook); - gtk_box_pack_start (GTK_BOX (gcal), gcal->main_notebook, - TRUE, TRUE, 0); - - /* The First Page of the Main Notebook, containing a HPaned with the - Sub-Notebook on the left and the GtkCalendar and ToDo list on the - right. */ - gcal->hpane = e_hpaned_new (); - gtk_widget_show (gcal->hpane); - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->main_notebook), - gcal->hpane, gtk_label_new ("")); - - /* The Sub-Notebook, to contain the Day, Work-Week & Week views. */ - gcal->sub_notebook = gtk_notebook_new (); - gtk_notebook_set_show_border (GTK_NOTEBOOK (gcal->sub_notebook), - FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (gcal->sub_notebook), FALSE); - gtk_widget_show (gcal->sub_notebook); - e_paned_pack1 (E_PANED (gcal->hpane), gcal->sub_notebook, - TRUE, TRUE); - - /* The VPaned widget, to contain the GtkCalendar & ToDo list. */ - vpane = e_vpaned_new (); - gtk_widget_show (vpane); - e_paned_pack2 (E_PANED (gcal->hpane), vpane, FALSE, TRUE); - - /* The GtkCalendar. */ - w = gtk_calendar_new (); - gcal->gtk_calendar = GTK_CALENDAR (w); - gtk_widget_show (w); - e_paned_pack1 (E_PANED (vpane), w, FALSE, TRUE); - gcal->day_selected_id = gtk_signal_connect (GTK_OBJECT (gcal->gtk_calendar), - "day_selected", - (GtkSignalFunc) gnome_calendar_on_day_selected, - gcal); - gtk_signal_connect (GTK_OBJECT (gcal->gtk_calendar), "month_changed", - GTK_SIGNAL_FUNC (gnome_calendar_on_month_changed), - gcal); - - /* The ToDo list. */ -#if 0 - gcal->todo = gncal_todo_new (gcal); - e_paned_pack2 (E_PANED (vpane), gcal->todo, TRUE, TRUE); - gtk_widget_show (gcal->todo); -#endif - - gcal->todo = e_calendar_table_new (); - e_paned_pack2 (E_PANED (vpane), gcal->todo, TRUE, TRUE); - gtk_widget_show (gcal->todo); - e_calendar_table_set_cal_client (E_CALENDAR_TABLE (gcal->todo), - gcal->client); - - - /* The Day View. */ - gcal->day_view = e_day_view_new (); - e_day_view_set_calendar (E_DAY_VIEW (gcal->day_view), gcal); - gtk_widget_show (gcal->day_view); - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->sub_notebook), - gcal->day_view, gtk_label_new ("")); - - /* The Work Week View. */ - gcal->work_week_view = e_day_view_new (); - e_day_view_set_days_shown (E_DAY_VIEW (gcal->work_week_view), 5); - e_day_view_set_calendar (E_DAY_VIEW (gcal->work_week_view), gcal); - gtk_widget_show (gcal->work_week_view); - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->sub_notebook), - gcal->work_week_view, gtk_label_new ("")); - - /* The Week View. */ - gcal->week_view = e_week_view_new (); - e_week_view_set_calendar (E_WEEK_VIEW (gcal->week_view), gcal); - gtk_widget_show (gcal->week_view); - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->sub_notebook), - gcal->week_view, gtk_label_new ("")); - - /* The Month View. */ - gcal->month_view = e_week_view_new (); - e_week_view_set_calendar (E_WEEK_VIEW (gcal->month_view), gcal); - e_week_view_set_display_month (E_WEEK_VIEW (gcal->month_view), TRUE); - gtk_widget_show (gcal->month_view); - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->main_notebook), - gcal->month_view, gtk_label_new ("")); -} - -static GtkWidget * -get_current_page (GnomeCalendar *gcal) -{ - GtkWidget *page; - - page = GTK_NOTEBOOK (gcal->main_notebook)->cur_page->child; - if (page == gcal->hpane) - return GTK_NOTEBOOK (gcal->sub_notebook)->cur_page->child; - else - return page; -} - -char * -gnome_calendar_get_current_view_name (GnomeCalendar *gcal) -{ - GtkWidget *page; - - g_return_val_if_fail (gcal != NULL, "dayview"); - g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), "dayview"); - - page = get_current_page (gcal); - - if (page == gcal->day_view) - return "dayview"; - else if (page == gcal->work_week_view) - return "workweekview"; - else if (page == gcal->week_view) - return "weekview"; - else if (page == gcal->month_view) - return "monthview"; - else - return "dayview"; -} - -void -gnome_calendar_goto (GnomeCalendar *gcal, time_t new_time) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - g_return_if_fail (new_time != -1); - - gcal->selection_start_time = time_day_begin (new_time); - gcal->selection_end_time = time_add_day (gcal->selection_start_time, - 1); - gnome_calendar_update_view_times (gcal, NULL); - gnome_calendar_update_gtk_calendar (gcal); -} - - -static void -gnome_calendar_update_view_times (GnomeCalendar *gcal, - GtkWidget *page) -{ - if (page == NULL) - page = get_current_page (gcal); - - if (page == gcal->day_view - || page == gcal->work_week_view) - e_day_view_set_selected_time_range (E_DAY_VIEW (page), - gcal->selection_start_time, - gcal->selection_end_time); - else if (page == gcal->week_view - || page == gcal->month_view) - e_week_view_set_selected_time_range (E_WEEK_VIEW (page), - gcal->selection_start_time, - gcal->selection_end_time); - else { - g_warning ("My penguin is gone!"); - g_assert_not_reached (); - } -} - -static void -gnome_calendar_direction (GnomeCalendar *gcal, int direction) -{ - GtkWidget *cp = get_current_page (gcal); - time_t start_time, end_time; - - start_time = gcal->selection_start_time; - end_time = gcal->selection_end_time; - - if (cp == gcal->day_view) { - start_time = time_add_day (start_time, direction); - end_time = time_add_day (end_time, direction); - } else if (cp == gcal->work_week_view) { - start_time = time_add_week (start_time, direction); - end_time = time_add_week (end_time, direction); - } else if (cp == gcal->week_view) { - start_time = time_add_week (start_time, direction); - end_time = time_add_week (end_time, direction); - } else if (cp == gcal->month_view) { - start_time = time_add_month (start_time, direction); - end_time = time_add_month (end_time, direction); - } else { - g_warning ("Weee! Where did the penguin go?"); - g_assert_not_reached (); - start_time = 0; - end_time = 0; - } - - gcal->selection_start_time = start_time; - gcal->selection_end_time = end_time; - - gnome_calendar_update_view_times (gcal, NULL); - gnome_calendar_update_gtk_calendar (gcal); -} - -void -gnome_calendar_next (GnomeCalendar *gcal) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - gnome_calendar_direction (gcal, 1); -} - -void -gnome_calendar_previous (GnomeCalendar *gcal) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - gnome_calendar_direction (gcal, -1); -} - -void -gnome_calendar_dayjump (GnomeCalendar *gcal, time_t time) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - gnome_calendar_set_view (gcal, "dayview"); - gnome_calendar_goto (gcal, time); -} - -void -gnome_calendar_goto_today (GnomeCalendar *gcal) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - gnome_calendar_goto (gcal, time (NULL)); -} - - -/* This sets which view is currently shown. It also updates the selection time - of the view so it shows the appropriate days. */ -void -gnome_calendar_set_view (GnomeCalendar *gcal, char *page_name) -{ - GtkWidget *page; - int main_page = 0, sub_page = -1; - - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - g_return_if_fail (page_name != NULL); - - if (strcmp (page_name, "dayview") == 0) { - page = gcal->day_view; - sub_page = 0; - } else if (strcmp (page_name, "workweekview") == 0) { - page = gcal->work_week_view; - sub_page = 1; - } else if (strcmp (page_name, "weekview") == 0) { - page = gcal->week_view; - sub_page = 2; - } else if (strcmp (page_name, "monthview") == 0) { - page = gcal->month_view; - main_page = 1; - } else { - g_warning ("Unknown calendar view: %s", page_name); - return; - } - - gnome_calendar_update_view_times (gcal, page); - - if (sub_page != -1) - gtk_notebook_set_page (GTK_NOTEBOOK (gcal->sub_notebook), - sub_page); - gtk_notebook_set_page (GTK_NOTEBOOK (gcal->main_notebook), main_page); - - gnome_calendar_update_gtk_calendar (gcal); -} - -/* Sends a mail notification of an alarm trigger */ -static void -mail_notification (char *mail_address, char *text, time_t app_time) -{ - pid_t pid; - int p [2]; - char *command; - - pipe (p); - pid = fork (); - if (pid == 0){ - int dev_null; - - dev_null = open ("/dev/null", O_RDWR); - dup2 (p [0], 0); - dup2 (dev_null, 1); - dup2 (dev_null, 2); - execl ("/usr/lib/sendmail", "/usr/lib/sendmail", - mail_address, NULL); - _exit (127); - } - command = g_strconcat ("To: ", mail_address, "\n", - "Subject: ", _("Reminder of your appointment at "), - ctime (&app_time), "\n\n", text, "\n", NULL); - write (p [1], command, strlen (command)); - close (p [1]); - close (p [0]); - g_free (command); -} - -static int -max_open_files (void) -{ - static int files; - - if (files) - return files; - - files = sysconf (_SC_OPEN_MAX); - if (files != -1) - return files; -#ifdef OPEN_MAX - return files = OPEN_MAX; -#else - return files = 256; -#endif -} - -/* Executes a program as a notification of an alarm trigger */ -static void -program_notification (char *command, int close_standard) -{ - struct sigaction ignore, save_intr, save_quit; - int status = 0, i; - pid_t pid; - - ignore.sa_handler = SIG_IGN; - sigemptyset (&ignore.sa_mask); - ignore.sa_flags = 0; - - sigaction (SIGINT, &ignore, &save_intr); - sigaction (SIGQUIT, &ignore, &save_quit); - - if ((pid = fork ()) < 0){ - fprintf (stderr, "\n\nfork () = -1\n"); - return; - } - if (pid == 0){ - pid = fork (); - if (pid == 0){ - const int top = max_open_files (); - sigaction (SIGINT, &save_intr, NULL); - sigaction (SIGQUIT, &save_quit, NULL); - - for (i = (close_standard ? 0 : 3); i < top; i++) - close (i); - - /* FIXME: As an excercise to the reader, copy the - * code from mc to setup shell properly instead of - * /bin/sh. Yes, this comment is larger than a cut and paste. - */ - execl ("/bin/sh", "/bin/sh", "-c", command, (char *) 0); - - _exit (127); - } else { - _exit (127); - } - } - wait (&status); - sigaction (SIGINT, &save_intr, NULL); - sigaction (SIGQUIT, &save_quit, NULL); -} - -/* Queues a snooze alarm */ -static void -snooze (GnomeCalendar *gcal, CalComponent *comp, time_t occur, int snooze_mins, gboolean audio) -{ - time_t now, trigger; - struct tm tm; - CalAlarmInstance ai; - - now = time (NULL); - tm = *localtime (&now); - tm.tm_min += snooze_mins; - - trigger = mktime (&tm); - if (trigger == -1) { - g_message ("snooze(): produced invalid time_t; not queueing alarm!"); - return; - } - -#if 0 - cal_component_get_uid (comp, &ai.uid); - ai.type = audio ? ALARM_AUDIO : ALARM_DISPLAY; -#endif - ai.trigger = trigger; - ai.occur = occur; - - setup_alarm (gcal, &ai); -} - -/* Edits an appointment from the alarm notification dialog */ -static void -edit (GnomeCalendar *gcal, CalComponent *comp) -{ - gnome_calendar_edit_object (gcal, comp); -} - -struct alarm_notify_closure { - GnomeCalendar *gcal; - CalComponent *comp; - time_t occur; -}; - -/* Callback used for the result of the alarm notification dialog */ -static void -display_notification_cb (AlarmNotifyResult result, int snooze_mins, gpointer data) -{ - struct alarm_notify_closure *c; - - c = data; - - switch (result) { - case ALARM_NOTIFY_CLOSE: - break; - - case ALARM_NOTIFY_SNOOZE: - snooze (c->gcal, c->comp, c->occur, snooze_mins, FALSE); - break; - - case ALARM_NOTIFY_EDIT: - edit (c->gcal, c->comp); - break; - - default: - g_assert_not_reached (); - } - - gtk_object_unref (GTK_OBJECT (c->comp)); - g_free (c); -} - -/* Present a display notification of an alarm trigger */ -static void -display_notification (time_t trigger, time_t occur, CalComponent *comp, GnomeCalendar *gcal) -{ - gboolean result; - struct alarm_notify_closure *c; - - gtk_object_ref (GTK_OBJECT (comp)); - - c = g_new (struct alarm_notify_closure, 1); - c->gcal = gcal; - c->comp = comp; - c->occur = occur; - - result = alarm_notify_dialog (trigger, occur, comp, display_notification_cb, c); - if (!result) { - g_message ("display_notification(): could not display the alarm notification dialog"); - g_free (c); - gtk_object_unref (GTK_OBJECT (comp)); - } -} - -/* Present an audible notification of an alarm trigger */ -static void -audio_notification (time_t trigger, time_t occur, CalComponent *comp, GnomeCalendar *gcal) -{ - g_message ("AUDIO NOTIFICATION!"); - /* FIXME */ -} - -struct trigger_alarm_closure { - GnomeCalendar *gcal; - char *uid; - CalComponentAlarmAction type; - time_t occur; -}; - -/* Callback function used when an alarm is triggered */ -static void -trigger_alarm_cb (gpointer alarm_id, time_t trigger, gpointer data) -{ - struct trigger_alarm_closure *c; - CalComponent *comp; - CalClientGetStatus status; - const char *uid; - ObjectAlarms *oa; - GList *l; - - c = data; - - /* Fetch the object */ - - status = cal_client_get_object (c->gcal->client, c->uid, &comp); - - switch (status) { - case CAL_CLIENT_GET_SUCCESS: - /* Go on */ - break; - case CAL_CLIENT_GET_SYNTAX_ERROR: - case CAL_CLIENT_GET_NOT_FOUND: - g_message ("trigger_alarm_cb(): syntax error in fetched object"); - return; - } - - g_assert (comp != NULL); - - /* Present notification */ - - switch (c->type) { - case CAL_COMPONENT_ALARM_EMAIL: -#if 0 - g_assert (ico->malarm.enabled); - mail_notification (ico->malarm.data, ico->summary, c->occur); -#endif - break; - - case CAL_COMPONENT_ALARM_PROCEDURE: -#if 0 - g_assert (ico->palarm.enabled); - program_notification (ico->palarm.data, FALSE); -#endif - break; - - case CAL_COMPONENT_ALARM_DISPLAY: -#if 0 - g_assert (ico->dalarm.enabled); -#endif - display_notification (trigger, c->occur, comp, c->gcal); - break; - - case CAL_COMPONENT_ALARM_AUDIO: -#if 0 - g_assert (ico->aalarm.enabled); -#endif - audio_notification (trigger, c->occur, comp, c->gcal); - break; - - default: - break; - } - - /* Remove the alarm from the hash table */ - cal_component_get_uid (comp, &uid); - oa = g_hash_table_lookup (c->gcal->alarms, uid); - g_assert (oa != NULL); - - l = g_list_find (oa->alarm_ids, alarm_id); - g_assert (l != NULL); - - oa->alarm_ids = g_list_remove_link (oa->alarm_ids, l); - g_list_free_1 (l); - - if (!oa->alarm_ids) { - g_hash_table_remove (c->gcal->alarms, uid); - g_free (oa->uid); - g_free (oa); - } - - gtk_object_unref (GTK_OBJECT (comp)); -} - -/* Frees a struct trigger_alarm_closure */ -static void -free_trigger_alarm_closure (gpointer data) -{ - struct trigger_alarm_closure *c; - - c = data; - g_free (c->uid); - g_free (c); -} - -/* Queues the specified alarm */ -static void -setup_alarm (GnomeCalendar *cal, CalAlarmInstance *ai) -{ - struct trigger_alarm_closure *c; - gpointer alarm; - ObjectAlarms *oa; - - c = g_new (struct trigger_alarm_closure, 1); - c->gcal = cal; - c->uid = g_strdup (ai->uid); -#if 0 - c->type = ai->type; -#endif - c->occur = ai->occur; - - alarm = alarm_add (ai->trigger, trigger_alarm_cb, c, free_trigger_alarm_closure); - if (!alarm) { - g_message ("setup_alarm(): Could not set up alarm"); - g_free (c->uid); - g_free (c); - return; - } - - oa = g_hash_table_lookup (cal->alarms, ai->uid); - if (oa) - oa->alarm_ids = g_list_prepend (oa->alarm_ids, alarm); - else { - oa = g_new (ObjectAlarms, 1); - oa->uid = g_strdup (ai->uid); - oa->alarm_ids = g_list_prepend (NULL, alarm); - - g_hash_table_insert (cal->alarms, oa->uid, oa); - } -} - -static void load_alarms (GnomeCalendar *cal); - -/* Called nightly to refresh the day's alarms */ -static void -midnight_refresh_cb (gpointer alarm_id, time_t trigger, gpointer data) -{ - GnomeCalendar *cal; - - cal = GNOME_CALENDAR (data); - cal->midnight_alarm_refresh_id = NULL; - - load_alarms (cal); -} - -/* Loads and queues the alarms from the current time up to midnight. */ -static void -load_alarms (GnomeCalendar *gcal) -{ - time_t now; - time_t end_of_day; - GList *alarms, *l; - - now = time (NULL); - end_of_day = time_day_end (now); - - /* Queue alarms */ - - alarms = cal_client_get_alarms_in_range (gcal->client, now, end_of_day); - - for (l = alarms; l; l = l->next) - setup_alarm (gcal, l->data); - - cal_alarm_instance_list_free (alarms); - - /* Queue the midnight alarm refresh */ - - gcal->midnight_alarm_refresh_id = alarm_add (end_of_day, midnight_refresh_cb, gcal, NULL); - if (!gcal->midnight_alarm_refresh_id) { - g_message ("load_alarms(): Could not set up the midnight refresh alarm!"); - /* FIXME: what to do? */ - } -} - -/* This tells all components to reload all calendar objects. */ -static void -gnome_calendar_update_all (GnomeCalendar *cal) -{ - load_alarms (cal); - - e_day_view_update_all_events (E_DAY_VIEW (cal->day_view)); - e_day_view_update_all_events (E_DAY_VIEW (cal->work_week_view)); - e_week_view_update_all_events (E_WEEK_VIEW (cal->week_view)); - e_week_view_update_all_events (E_WEEK_VIEW (cal->month_view)); - -#if 0 - gncal_todo_update (GNCAL_TODO (cal->todo), NULL, TRUE); -#endif - gnome_calendar_tag_calendar (cal, cal->gtk_calendar); -} - -/* Removes any queued alarms for the specified UID */ -static void -remove_alarms_for_object (GnomeCalendar *gcal, const char *uid) -{ - ObjectAlarms *oa; - GList *l; - - oa = g_hash_table_lookup (gcal->alarms, uid); - if (!oa) - return; - - for (l = oa->alarm_ids; l; l = l->next) { - gpointer alarm_id; - - alarm_id = l->data; - alarm_remove (alarm_id); - } - - g_hash_table_remove (gcal->alarms, uid); - - g_free (oa->uid); - g_list_free (oa->alarm_ids); - g_free (oa); -} - -/* Adds today's alarms for the specified object */ -static void -add_alarms_for_object (GnomeCalendar *gcal, const char *uid) -{ - GList *alarms; - gboolean result; - time_t now, end_of_day; - GList *l; - - now = time (NULL); - end_of_day = time_day_end (now); - - result = cal_client_get_alarms_for_object (gcal->client, uid, now, end_of_day, &alarms); - if (!result) { - /* FIXME: should we warn here, or is it OK if the object - * disappeared in the meantime? - */ - return; - } - - for (l = alarms; l; l = l->next) - setup_alarm (gcal, l->data); - - cal_alarm_instance_list_free (alarms); -} - -static void -gnome_calendar_object_updated_cb (GtkWidget *cal_client, - const char *uid, - GnomeCalendar *gcal) -{ - g_message ("gnome-cal: got object changed_cb, uid='%s'", - uid?uid:""); - - remove_alarms_for_object (gcal, uid); - add_alarms_for_object (gcal, uid); - - /* FIXME: do we really want each view to reload the event itself? - Maybe we should keep track of events globally, maybe with ref - counts. We also need to sort out where they get freed. */ - e_day_view_update_event (E_DAY_VIEW (gcal->day_view), uid); - e_day_view_update_event (E_DAY_VIEW (gcal->work_week_view), uid); - e_week_view_update_event (E_WEEK_VIEW (gcal->week_view), uid); - e_week_view_update_event (E_WEEK_VIEW (gcal->month_view), uid); - -#if 0 - gncal_todo_update (GNCAL_TODO (gcal->todo), NULL, TRUE); -#endif - gnome_calendar_tag_calendar (gcal, gcal->gtk_calendar); -} - - -static void -gnome_calendar_object_removed_cb (GtkWidget *cal_client, - const char *uid, - GnomeCalendar *gcal) -{ - g_message ("gnome-cal: got object removed _cb, uid='%s'", - uid?uid:""); - - remove_alarms_for_object (gcal, uid); - - e_day_view_remove_event (E_DAY_VIEW (gcal->day_view), uid); - e_day_view_remove_event (E_DAY_VIEW (gcal->work_week_view), uid); - e_week_view_remove_event (E_WEEK_VIEW (gcal->week_view), uid); - e_week_view_remove_event (E_WEEK_VIEW (gcal->month_view), uid); - -#if 0 - gncal_todo_update (GNCAL_TODO (gcal->todo), NULL, CHANGE_ALL); -#endif - gnome_calendar_tag_calendar (gcal, gcal->gtk_calendar); -} - - -GtkWidget * -gnome_calendar_new (char *title) -{ - GtkWidget *retval; - GnomeCalendar *gcal; - - retval = gtk_type_new (gnome_calendar_get_type ()); - - gcal = GNOME_CALENDAR (retval); - - gcal->selection_start_time = time_day_begin (time (NULL)); - gcal->selection_end_time = time_add_day (gcal->selection_start_time, 1); - gcal->client = cal_client_new (); - - setup_widgets (gcal); - - gnome_calendar_set_view (gcal, "dayview"); - - gtk_signal_connect (GTK_OBJECT (gcal->client), "obj_updated", - gnome_calendar_object_updated_cb, gcal); - gtk_signal_connect (GTK_OBJECT (gcal->client), "obj_removed", - gnome_calendar_object_removed_cb, gcal); - - return retval; -} - -typedef struct -{ - GnomeCalendar *gcal; - char *uri; - GnomeCalendarOpenMode gcom; - guint signal_handle; -} load_or_create_data; - - -static void -gnome_calendar_load_cb (CalClient *cal_client, - CalClientLoadStatus status, - load_or_create_data *locd) -{ - g_return_if_fail (locd); - g_return_if_fail (GNOME_IS_CALENDAR (locd->gcal)); - - switch (status) { - case CAL_CLIENT_LOAD_SUCCESS: - gnome_calendar_update_all (locd->gcal); - g_message ("gnome_calendar_load_cb: success"); - break; - - case CAL_CLIENT_LOAD_ERROR: - g_message ("gnome_calendar_load_cb: load error"); - if (locd->gcom == CALENDAR_OPEN_OR_CREATE) { - g_message ("gnome_calendar_load_cb: trying create..."); - /* FIXME: connect to the cal_loaded signal of the - * CalClient and get theasynchronous notification - * properly! */ - /*gtk_signal_connect (GTK_OBJECT (gcal->client), - "cal_loaded", - gnome_calendar_create_cb, gcal);*/ - - gtk_signal_disconnect (GTK_OBJECT (locd->gcal->client), - locd->signal_handle); - - cal_client_create_calendar (locd->gcal->client, - locd->uri); - gnome_calendar_update_all (locd->gcal); - } - break; - - case CAL_CLIENT_LOAD_IN_USE: - /* FIXME: what to do? */ - g_message ("gnome_calendar_load_cb: in use"); - break; - - case CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED: - /* FIXME: what to do? */ - g_message ("gnome_calendar_load_cb(): method not supported"); - break; - - default: - g_message ("gnome_calendar_load_cb(): unhandled result code %d!", (int) status); - g_assert_not_reached (); - } - - g_free (locd->uri); - g_free (locd); -} - - -int -gnome_calendar_open (GnomeCalendar *gcal, - char *file, - GnomeCalendarOpenMode gcom) -{ - load_or_create_data *locd; - - g_return_val_if_fail (gcal != NULL, 0); - g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), 0); - g_return_val_if_fail (file != NULL, 0); - - locd = g_new0 (load_or_create_data, 1); - locd->gcal = gcal; - locd->uri = g_strdup (file); - locd->gcom = gcom; - - locd->signal_handle = gtk_signal_connect (GTK_OBJECT (gcal->client), - "cal_loaded", - gnome_calendar_load_cb, - locd); - - if (cal_client_load_calendar (gcal->client, file) == FALSE){ - g_message ("Error loading calendar: %s", file); - return 0; - } - - return 1; -} - -static void -stop_beeping (GtkObject* object, gpointer data) -{ - guint timer_tag, beep_tag; - timer_tag = GPOINTER_TO_INT (gtk_object_get_data (object, "timer_tag")); - beep_tag = GPOINTER_TO_INT (gtk_object_get_data (object, "beep_tag")); - - if (beep_tag > 0) { - gtk_timeout_remove (beep_tag); - gtk_object_set_data (object, "beep_tag", GINT_TO_POINTER (0)); - } - if (timer_tag > 0) { - gtk_timeout_remove (timer_tag); - gtk_object_set_data (object, "timer_tag", GINT_TO_POINTER (0)); - } -} - -static gint -start_beeping (gpointer data) -{ - gdk_beep (); - - return TRUE; -} - -static gint -timeout_beep (gpointer data) -{ - stop_beeping (data, NULL); - return FALSE; -} - -#if 0 - -void -calendar_notify (time_t activation_time, CalendarAlarm *which, void *data) -{ - iCalObject *ico = data; - guint beep_tag, timer_tag; - int ret; - gchar* snooze_button = (enable_snooze ? _("Snooze") : NULL); - time_t now, diff; - - if (&ico->aalarm == which){ - time_t app = ico->aalarm.trigger + ico->aalarm.offset; - GtkWidget *w; - char *msg; - - msg = g_strconcat (_("Reminder of your appointment at "), - ctime (&app), "`", - ico->summary, "'", NULL); - - /* Idea: we need Snooze option :-) */ - w = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_INFO, _("Ok"), snooze_button, NULL); - beep_tag = gtk_timeout_add (1000, start_beeping, NULL); - if (enable_aalarm_timeout) - timer_tag = gtk_timeout_add (audio_alarm_timeout*1000, - timeout_beep, w); - else - timer_tag = 0; - gtk_object_set_data (GTK_OBJECT (w), "timer_tag", - GINT_TO_POINTER (timer_tag)); - gtk_object_set_data (GTK_OBJECT (w), "beep_tag", - GINT_TO_POINTER (beep_tag)); - gtk_widget_ref (w); - gtk_window_set_modal (GTK_WINDOW (w), FALSE); - ret = gnome_dialog_run (GNOME_DIALOG (w)); - switch (ret) { - case 1: - stop_beeping (GTK_OBJECT (w), NULL); - now = time (NULL); - diff = now - which->trigger; - which->trigger = which->trigger + diff + snooze_secs; - which->offset = which->offset - diff - snooze_secs; - alarm_add (which, &calendar_notify, data); - break; - default: - stop_beeping (GTK_OBJECT (w), NULL); - break; - } - - gtk_widget_unref (w); - return; - } - - if (&ico->palarm == which){ - execute (ico->palarm.data, 0); - return; - } - - if (&ico->malarm == which){ - time_t app = ico->malarm.trigger + ico->malarm.offset; - - mail_notify (ico->malarm.data, ico->summary, app); - return; - } - - if (&ico->dalarm == which){ - time_t app = ico->dalarm.trigger + ico->dalarm.offset; - GtkWidget *w; - char *msg; - - if (beep_on_display) - gdk_beep (); - msg = g_strconcat (_("Reminder of your appointment at "), - ctime (&app), "`", - ico->summary, "'", NULL); - w = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_INFO, - _("Ok"), snooze_button, NULL); - gtk_window_set_modal (GTK_WINDOW (w), FALSE); - ret = gnome_dialog_run (GNOME_DIALOG (w)); - switch (ret) { - case 1: - now = time (NULL); - diff = now - which->trigger; - which->trigger = which->trigger + diff + snooze_secs; - which->offset = which->offset - diff - snooze_secs; - alarm_add (which, &calendar_notify, data); - break; - default: - break; - } - - return; - } -} - -#endif - -/* Marks the specified range in a GtkCalendar */ -static void -mark_gtk_calendar_day (GtkCalendar *calendar, time_t start, time_t end) -{ - time_t t; - - t = time_day_begin (start); - - do { - struct tm tm; - - tm = *localtime (&t); - gtk_calendar_mark_day (calendar, tm.tm_mday); - - t = time_day_end (t); - } while (t < end); -} - -/* - * Tags the dates with appointments in a GtkCalendar based on the - * GnomeCalendar contents - */ -struct calendar_tag_closure -{ - GtkCalendar *gtk_cal; - time_t month_begin; - time_t month_end; -}; - -static gboolean -gnome_calendar_tag_calendar_cb (CalComponent *comp, time_t istart, time_t iend, gpointer data) -{ - struct calendar_tag_closure *c = data; - - start = MAX (istart, c->month_begin); - end = MIN (iend, c->month_end); - - if (start > end) - return TRUE; - - /* Clip the occurrence's start and end times to the month's limits */ - mark_gtk_calendar_day (c->gtk_cal, start, end); - - return TRUE; -} - -void -gnome_calendar_tag_calendar (GnomeCalendar *cal, GtkCalendar *gtk_cal) -{ - struct calendar_tag_closure c; - - g_return_if_fail (cal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (cal)); - g_return_if_fail (gtk_cal != NULL); - g_return_if_fail (GTK_IS_CALENDAR (gtk_cal)); - - /* If the GtkCalendar isn't visible, we just return. */ - if (!GTK_WIDGET_VISIBLE (cal->gtk_calendar)) - return; - - c.gtk_cal = gtk_cal; - - c.month_begin = time_from_day (gtk_cal->year, gtk_cal->month, 1); - if (c.month_begin == -1) { - g_message ("gnome_calendar_tag_calendar(): Generated invalid month begin!"); - return; - } - - c.month_end = time_month_end (c.month_begin); - if (c.month_end == -1) { - g_message ("gnome_calendar_tag_calendar(): Generated invalid month end!"); - return; - } - - gtk_calendar_freeze (gtk_cal); - gtk_calendar_clear_marks (gtk_cal); - - cal_client_generate_instances (cal->client, CALOBJ_TYPE_EVENT, - c.month_begin, c.month_end, - gnome_calendar_tag_calendar_cb, &c); - - gtk_calendar_thaw (gtk_cal); -} - -/* This is called when the day begin & end times, the AM/PM flag, or the - week_starts_on_monday flags are changed. - FIXME: Which of these options do we want the new views to support? */ -void -gnome_calendar_time_format_changed (GnomeCalendar *gcal) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - gtk_calendar_display_options (gcal->gtk_calendar, - (week_starts_on_monday - ? (gcal->gtk_calendar->display_flags - | GTK_CALENDAR_WEEK_START_MONDAY) - : (gcal->gtk_calendar->display_flags - & ~GTK_CALENDAR_WEEK_START_MONDAY))); -} - -/* This is called when any of the color settings are changed. - FIXME: Need to update for the new views. */ -void -gnome_calendar_colors_changed (GnomeCalendar *gcal) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - todo_style_changed = 1; -#if 0 - gncal_todo_update (GNCAL_TODO (gcal->todo), NULL, 0); -#endif -} - -void -gnome_calendar_todo_properties_changed (GnomeCalendar *gcal) -{ - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - todo_style_changed = 1; -#if 0 - gncal_todo_update (GNCAL_TODO (gcal->todo), NULL, 0); -#endif -} - - -void -gnome_calendar_set_selected_time_range (GnomeCalendar *gcal, - time_t start_time, - time_t end_time) -{ - gcal->selection_start_time = start_time; - gcal->selection_end_time = end_time; - - gnome_calendar_update_gtk_calendar (gcal); -} - -/* Callback used when an event editor finishes editing an object */ -static void -ical_object_released_cb (EventEditor *ee, const char *uid, gpointer data) -{ - GnomeCalendar *gcal; - gboolean result; - gpointer orig_key; - char *orig_uid; - - gcal = GNOME_CALENDAR (data); - - result = g_hash_table_lookup_extended (gcal->object_editor_hash, uid, &orig_key, NULL); - g_assert (result != FALSE); - - orig_uid = orig_key; - - g_hash_table_remove (gcal->object_editor_hash, orig_uid); - g_free (orig_uid); -} - -/* Callback used when an event editor dialog is closed */ -static void -editor_closed_cb (EventEditor *ee, gpointer data) -{ - gtk_object_unref (GTK_OBJECT (ee)); -} - -/* Callback used when an event editor requests that an object be saved */ -static void -save_ical_object_cb (EventEditor *ee, CalComponent *comp, gpointer data) -{ - GnomeCalendar *gcal; - - gcal = GNOME_CALENDAR (data); - if (!cal_client_update_object (gcal->client, comp)) - g_message ("save_ical_object_cb(): Could not update the object!"); -} - -void -gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp) -{ - EventEditor *ee; - const char *uid; - - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - g_return_if_fail (comp != NULL); - - cal_component_get_uid (comp, &uid); - - ee = g_hash_table_lookup (gcal->object_editor_hash, uid); - if (!ee) { - ee = event_editor_new (); - if (!ee) { - g_message ("gnome_calendar_edit_object(): Could not create the event editor"); - return; - } - - /* FIXME: what to do when an event editor wants to switch - * objects? We would need to know about it as well. - */ - - g_hash_table_insert (gcal->object_editor_hash, g_strdup (uid), ee); - gtk_signal_connect (GTK_OBJECT (ee), "ical_object_released", - GTK_SIGNAL_FUNC (ical_object_released_cb), gcal); - - gtk_signal_connect (GTK_OBJECT (ee), "editor_closed", - GTK_SIGNAL_FUNC (editor_closed_cb), gcal); - - gtk_signal_connect (GTK_OBJECT (ee), "save_ical_object", - GTK_SIGNAL_FUNC (save_ical_object_cb), gcal); - - event_editor_set_ical_object (EVENT_EDITOR (ee), comp); - } - - event_editor_focus (ee); -} - -/** - * gnome_calendar_new_appointment: - * @gcal: An Evolution calendar. - * - * Opens an event editor dialog for a new appointment. The appointment's start - * and end times are set to the currently selected time range in the calendar - * views. - **/ -void -gnome_calendar_new_appointment (GnomeCalendar *gcal) -{ - CalComponent *comp; - time_t dtstart, dtend; - CalComponentDateTime dt; - struct icaltimetype itt; - - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - gnome_calendar_get_current_time_range (gcal, &dtstart, &dtend); - dt.value = &itt; - dt.tzid = NULL; - - comp = cal_component_new (); - cal_component_set_new_vtype (comp, CAL_COMPONENT_EVENT); - - itt = icaltimetype_from_timet (dtstart, 0); - cal_component_set_dtstart (comp, &dt); - - itt = icaltimetype_from_timet (dtend, 0); - cal_component_set_dtend (comp, &dt); - - gnome_calendar_edit_object (gcal, comp); - gtk_object_unref (GTK_OBJECT (comp)); - -} - -/* Returns the selected time range for the current view. Note that this may be - different from the fields in the GnomeCalendar, since the view may clip - this or choose a more appropriate time. */ -void -gnome_calendar_get_current_time_range (GnomeCalendar *gcal, - time_t *start_time, - time_t *end_time) -{ - GtkWidget *page; - - page = get_current_page (gcal); - - if (page == gcal->day_view - || page == gcal->work_week_view) - e_day_view_get_selected_time_range (E_DAY_VIEW (page), - start_time, end_time); - else if (page == gcal->week_view - || page == gcal->month_view) - e_week_view_get_selected_time_range (E_WEEK_VIEW (page), - start_time, end_time); - else { - g_message ("My penguin is gone!"); - g_assert_not_reached (); - } -} - - - -/* This updates the month shown and the day selected in the calendar, if - necessary. */ -static void -gnome_calendar_update_gtk_calendar (GnomeCalendar *gcal) -{ - GDate date; - guint current_year, current_month, current_day; - guint new_year, new_month, new_day; - gboolean set_day = FALSE; - - /* If the GtkCalendar isn't visible, we just return. */ - if (!GTK_WIDGET_VISIBLE (gcal->gtk_calendar)) - return; - - gtk_calendar_get_date (gcal->gtk_calendar, ¤t_year, - ¤t_month, ¤t_day); - - g_date_clear (&date, 1); - g_date_set_time (&date, gcal->selection_start_time); - new_year = g_date_year (&date); - new_month = g_date_month (&date) - 1; - new_day = g_date_day (&date); - - /* Block the "day_selected" signal while we update the calendar. */ - gtk_signal_handler_block (GTK_OBJECT (gcal->gtk_calendar), - gcal->day_selected_id); - - /* If the year & month don't match, update it. */ - if (new_year != current_year || new_month != current_month) { - /* FIXME: GtkCalendar bug workaround. If we select a month - which has less days than the currently selected day, it - causes a problem next time we set the day. */ - if (current_day > 28) { - gtk_calendar_select_day (gcal->gtk_calendar, 28); - set_day = TRUE; - } - gtk_calendar_select_month (gcal->gtk_calendar, new_month, - new_year); - } - - /* If the day doesn't match, update it. */ - if (new_day != current_day || set_day) - gtk_calendar_select_day (gcal->gtk_calendar, new_day); - - gtk_signal_handler_unblock (GTK_OBJECT (gcal->gtk_calendar), - gcal->day_selected_id); -} - -static void -gnome_calendar_on_day_selected (GtkCalendar *calendar, - GnomeCalendar *gcal) -{ - gint y, m, d; - struct tm tm; - - gtk_calendar_get_date (calendar, &y, &m, &d); - - tm.tm_year = y - 1900; - tm.tm_mon = m; - tm.tm_mday = d; - tm.tm_hour = 5; /* for daylight savings time fix */ - tm.tm_min = 0; - tm.tm_sec = 0; - - gnome_calendar_goto (gcal, mktime (&tm)); -} - - -static void -gnome_calendar_on_month_changed (GtkCalendar *calendar, - GnomeCalendar *gcal) -{ - gnome_calendar_tag_calendar (gcal, gcal->gtk_calendar); -} diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h deleted file mode 100644 index df087395e1..0000000000 --- a/calendar/gui/gnome-cal.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * GnomeCalendar widget - * Copyright (C) 1998 the Free Software Foundation - * - * Authors: Miguel de Icaza (miguel@kernel.org) - * Federico Mena-Quintero - */ - -#ifndef GNOME_CALENDAR_APP_H -#define GNOME_CALENDAR_APP_H - -#include -#include -#include -#include -#include -#include - -BEGIN_GNOME_DECLS - - - -#define GNOME_CALENDAR(obj) GTK_CHECK_CAST(obj, gnome_calendar_get_type(), GnomeCalendar) -#define GNOME_CALENDAR_CLASS(class) GTK_CHECK_CAST_CLASS(class, gnome_calendar_get_type(), GnomeCalendarClass) -#define GNOME_IS_CALENDAR(obj) GTK_CHECK_TYPE(obj, gnome_calendar_get_type()) - -#define GNOME_CALENDAR_NUM_VIEWS 4 - -typedef struct { - GtkVBox vbox; - - CalClient *client; - - BonoboPropertyBag *properties; - BonoboControl *control; - - GHashTable *object_editor_hash; - - time_t selection_start_time; - time_t selection_end_time; - - GtkWidget *main_notebook; - GtkWidget *sub_notebook; - GtkWidget *hpane; - GtkCalendar *gtk_calendar; - GtkWidget *todo; - - GtkWidget *day_view; - GtkWidget *work_week_view; - GtkWidget *week_view; - GtkWidget *month_view; - - GtkWidget *view_toolbar_buttons[GNOME_CALENDAR_NUM_VIEWS]; - - void *event_editor; - - /* The signal handler id for our GtkCalendar "day_selected" handler. */ - guint day_selected_id; - - /* Alarm ID for the midnight refresh function */ - gpointer midnight_alarm_refresh_id; - - /* UID->alarms hash */ - GHashTable *alarms; -} GnomeCalendar; - -typedef struct { - GtkVBoxClass parent_class; -} GnomeCalendarClass; - - -typedef enum { - CALENDAR_OPEN, - CALENDAR_OPEN_OR_CREATE -} GnomeCalendarOpenMode; - -guint gnome_calendar_get_type (void); -GtkWidget *gnome_calendar_new (char *title); -int gnome_calendar_open (GnomeCalendar *gcal, - char *file, - GnomeCalendarOpenMode gcom); -/* -int gnome_calendar_create (GnomeCalendar *gcal, - char *file); -*/ -void gnome_calendar_next (GnomeCalendar *gcal); -void gnome_calendar_previous (GnomeCalendar *gcal); -void gnome_calendar_goto (GnomeCalendar *gcal, - time_t new_time); -void gnome_calendar_dayjump (GnomeCalendar *gcal, - time_t time); -/* Jumps to the current day */ -void gnome_calendar_goto_today (GnomeCalendar *gcal); -void gnome_calendar_tag_calendar (GnomeCalendar *cal, - GtkCalendar *gtk_cal); -char *gnome_calendar_get_current_view_name (GnomeCalendar *gcal); -void gnome_calendar_set_view (GnomeCalendar *gcal, - char *page_name); - -void gnome_calendar_set_selected_time_range (GnomeCalendar *gcal, - time_t start_time, - time_t end_time); - -void gnome_calendar_edit_object (GnomeCalendar *gcal, - CalComponent *comp); - -void gnome_calendar_new_appointment (GnomeCalendar *gcal); - -/* Returns the selected time range for the current view. Note that this may be - different from the fields in the GnomeCalendar, since the view may clip - this or choose a more appropriate time. */ -void gnome_calendar_get_current_time_range (GnomeCalendar *gcal, - time_t *start_time, - time_t *end_time); - - -/* Notifies the calendar that the time format has changed and it must update all its views */ -void gnome_calendar_time_format_changed (GnomeCalendar *gcal); - -/* Notifies the calendar that the todo list properties have changed and its time - * to update the views. - */ -void gnome_calendar_colors_changed (GnomeCalendar *gcal); - -/* Notifies the calendar that the todo list properties have changed and its time - * to update the views. - */ -void gnome_calendar_todo_properties_changed (GnomeCalendar *gcal); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/gui/gnome-cal.html b/calendar/gui/gnome-cal.html deleted file mode 100644 index 5a7d0a537f..0000000000 --- a/calendar/gui/gnome-cal.html +++ /dev/null @@ -1,44 +0,0 @@ - - - -

GNOME Calendar Documentation

-

-The GNOME calendar program is the calendaring program of the GNOME -system. It uses the vCalendar standard for transfering calendar -information (and is also the on-disk format used). - -

- - -

Command line options

- -Several options are available on the command line, they are: -
    -
  • --events Displays the events for the date - specified (or today, if no date is specified). - -
  • --from DATE Define the beginning of the range for - the event display, or the startup day on the calenday views. - By default, the event will span the whole day specified in - DATE. - -
  • --to DATE Define the range end for the event - display. If this is not specified, it will default to the end - of the day specified by the --from option. - -
  • --file FILE Set the calendar to the FILE - specified on the command line. - -
  • --todo Dumps the to-do values to standard output. -
- -

- -DATE is interpreted as being in the local time- zone, unless a -specific timezone is specified. Examples of valid date specifications -include: "1 month ago", "2 hours ago", "400000 seconds ago", "last -year", "last Monday", "yesterday", "a fortnight ago", "3/31/92 -10:00:07 PST", "January 23, 1987 10:05pm", "22:00 GMT". - - - diff --git a/calendar/gui/gnome-calendar-conduit.png b/calendar/gui/gnome-calendar-conduit.png deleted file mode 100644 index e867ba90b2..0000000000 Binary files a/calendar/gui/gnome-calendar-conduit.png and /dev/null differ diff --git a/calendar/gui/gnome-month-item.c b/calendar/gui/gnome-month-item.c deleted file mode 100644 index 58e393e4ee..0000000000 --- a/calendar/gui/gnome-month-item.c +++ /dev/null @@ -1,1246 +0,0 @@ -/* General-purpose monthly calendar canvas item for GNOME - * - * Copyright (C) 1998 Red Hat Software, Inc. - * - * Author: Federico Mena - */ - -#include -#include -#include -#include -#include "gnome-month-item.h" - - -#define DEFAULT_FONT "-*-helvetica-medium-r-normal--10-*-*-*-p-*-*-*" - - -/* Number of days in a month, for normal and leap years */ -static const int days_in_month[2][12] = { - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -}; - -/* The weird month of September 1752, where 3 Sep through 13 Sep were eliminated due to the - * Gregorian reformation. - */ -static const int sept_1752[42] = { - 0, 0, 1, 2, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 -}; - -#define REFORMATION_DAY 639787 /* First day of the reformation, counted from 1 Jan 1 */ -#define MISSING_DAYS 11 /* They corrected out 11 days */ -#define THURSDAY 4 /* First day of reformation */ -#define SATURDAY 6 /* Offset value; 1 Jan 1 was a Saturday */ -#define SEPT_1752_START 2 /* Start day within month */ -#define SEPT_1752_END 20 /* End day within month */ - - -enum { - ARG_0, - ARG_YEAR, - ARG_MONTH, - ARG_X, - ARG_Y, - ARG_WIDTH, - ARG_HEIGHT, - ARG_ANCHOR, - ARG_HEAD_PADDING, - ARG_DAY_PADDING, - ARG_DAY_NAMES, - ARG_HEADING_HEIGHT, - ARG_HEADING_ANCHOR, - ARG_DAY_ANCHOR, - ARG_START_ON_MONDAY, - ARG_HEAD_FONT, - ARG_HEAD_FONTSET, - ARG_HEAD_FONT_GDK, - ARG_DAY_FONT, - ARG_DAY_FONTSET, - ARG_DAY_FONT_GDK, - ARG_HEAD_COLOR, - ARG_HEAD_COLOR_GDK, - ARG_OUTLINE_COLOR, - ARG_OUTLINE_COLOR_GDK, - ARG_DAY_BOX_COLOR, - ARG_DAY_BOX_COLOR_GDK, - ARG_DAY_COLOR, - ARG_DAY_COLOR_GDK -}; - - -static void gnome_month_item_class_init (GnomeMonthItemClass *class); -static void gnome_month_item_init (GnomeMonthItem *mitem); -static void gnome_month_item_destroy (GtkObject *object); -static void gnome_month_item_set_arg (GtkObject *object, - GtkArg *arg, - guint arg_id); -static void gnome_month_item_get_arg (GtkObject *object, - GtkArg *arg, - guint arg_id); - - - -static GnomeCanvasGroupClass *parent_class; - - -GtkType -gnome_month_item_get_type (void) -{ - static GtkType month_item_type = 0; - - if (!month_item_type) { - GtkTypeInfo month_item_info = { - "GnomeMonthItem", - sizeof (GnomeMonthItem), - sizeof (GnomeMonthItemClass), - (GtkClassInitFunc) gnome_month_item_class_init, - (GtkObjectInitFunc) gnome_month_item_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - month_item_type = gtk_type_unique (gnome_canvas_group_get_type (), &month_item_info); - } - - return month_item_type; -} - -static void -gnome_month_item_class_init (GnomeMonthItemClass *class) -{ - GtkObjectClass *object_class; - GnomeCanvasItemClass *item_class; - - object_class = (GtkObjectClass *) class; - item_class = (GnomeCanvasItemClass *) class; - - parent_class = gtk_type_class (gnome_canvas_group_get_type ()); - - gtk_object_add_arg_type ("GnomeMonthItem::year", GTK_TYPE_UINT, GTK_ARG_READWRITE, ARG_YEAR); - gtk_object_add_arg_type ("GnomeMonthItem::month", GTK_TYPE_UINT, GTK_ARG_READWRITE, ARG_MONTH); - gtk_object_add_arg_type ("GnomeMonthItem::x", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_X); - gtk_object_add_arg_type ("GnomeMonthItem::y", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_Y); - gtk_object_add_arg_type ("GnomeMonthItem::width", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_WIDTH); - gtk_object_add_arg_type ("GnomeMonthItem::height", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_HEIGHT); - gtk_object_add_arg_type ("GnomeMonthItem::anchor", GTK_TYPE_ANCHOR_TYPE, GTK_ARG_READWRITE, ARG_ANCHOR); - gtk_object_add_arg_type ("GnomeMonthItem::heading_padding", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_HEAD_PADDING); - gtk_object_add_arg_type ("GnomeMonthItem::day_padding", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_DAY_PADDING); - gtk_object_add_arg_type ("GnomeMonthItem::day_names", GTK_TYPE_POINTER, GTK_ARG_WRITABLE, ARG_DAY_NAMES); - gtk_object_add_arg_type ("GnomeMonthItem::heading_height", GTK_TYPE_DOUBLE, GTK_ARG_READWRITE, ARG_HEADING_HEIGHT); - gtk_object_add_arg_type ("GnomeMonthItem::heading_anchor", GTK_TYPE_ANCHOR_TYPE, GTK_ARG_READWRITE, ARG_HEADING_ANCHOR); - gtk_object_add_arg_type ("GnomeMonthItem::day_anchor", GTK_TYPE_ANCHOR_TYPE, GTK_ARG_READWRITE, ARG_DAY_ANCHOR); - gtk_object_add_arg_type ("GnomeMonthItem::start_on_monday", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_START_ON_MONDAY); - gtk_object_add_arg_type ("GnomeMonthItem::heading_font", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_HEAD_FONT); - gtk_object_add_arg_type ("GnomeMonthItem::heading_fontset", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_HEAD_FONTSET); - gtk_object_add_arg_type ("GnomeMonthItem::heading_font_gdk", GTK_TYPE_GDK_FONT, GTK_ARG_READWRITE, ARG_HEAD_FONT_GDK); - gtk_object_add_arg_type ("GnomeMonthItem::day_font", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_DAY_FONT); - gtk_object_add_arg_type ("GnomeMonthItem::day_fontset", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_DAY_FONTSET); - gtk_object_add_arg_type ("GnomeMonthItem::day_font_gdk", GTK_TYPE_GDK_FONT, GTK_ARG_READWRITE, ARG_DAY_FONT_GDK); - gtk_object_add_arg_type ("GnomeMonthItem::heading_color", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_HEAD_COLOR); - gtk_object_add_arg_type ("GnomeMonthItem::heading_color_gdk", GTK_TYPE_GDK_COLOR, GTK_ARG_READWRITE, ARG_HEAD_COLOR_GDK); - gtk_object_add_arg_type ("GnomeMonthItem::outline_color", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_OUTLINE_COLOR); - gtk_object_add_arg_type ("GnomeMonthItem::outline_color_gdk", GTK_TYPE_GDK_COLOR, GTK_ARG_READWRITE, ARG_OUTLINE_COLOR_GDK); - gtk_object_add_arg_type ("GnomeMonthItem::day_box_color", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_DAY_BOX_COLOR); - gtk_object_add_arg_type ("GnomeMonthItem::day_box_color_gdk", GTK_TYPE_GDK_COLOR, GTK_ARG_READWRITE, ARG_DAY_BOX_COLOR_GDK); - gtk_object_add_arg_type ("GnomeMonthItem::day_color", GTK_TYPE_STRING, GTK_ARG_WRITABLE, ARG_DAY_COLOR); - gtk_object_add_arg_type ("GnomeMonthItem::day_color_gdk", GTK_TYPE_GDK_COLOR, GTK_ARG_READWRITE, ARG_DAY_COLOR_GDK); - - object_class->destroy = gnome_month_item_destroy; - object_class->set_arg = gnome_month_item_set_arg; - object_class->get_arg = gnome_month_item_get_arg; -} - -/* Calculates the minimum heading height based on the heading font size and padding. It also - * calculates the minimum width of the month item based on the width of the headings. - */ -static void -check_heading_sizes (GnomeMonthItem *mitem) -{ - double m_height; - double m_width; - int width; - int max_width; - int i; - - /* Calculate minimum height */ - - m_height = mitem->head_font->ascent + mitem->head_font->descent + 2 * mitem->head_padding; - - if (mitem->head_height < m_height) - mitem->head_height = m_height; - - /* Go through each heading and remember the widest one */ - - max_width = 0; - - for (i = 0; i < 7; i++) { - width = gdk_string_width (mitem->head_font, mitem->day_names[i]); - if (max_width < width) - max_width = width; - } - - m_width = 7 * (max_width + 2 * mitem->head_padding); - - if (mitem->width < m_width) - mitem->width = m_width; -} - -/* Calculates the minimum width and height of the month item based on the day font size and padding. - * Assumes that the minimum heading height has already been computed. - */ -static void -check_day_sizes (GnomeMonthItem *mitem) -{ - double m_height; - double m_width; - int width; - int max_width; - char buf[100]; - int i; - - /* Calculate minimum height */ - - m_height = mitem->head_height + 6 * (mitem->day_font->ascent + mitem->day_font->descent + 2 * mitem->day_padding); - - if (mitem->height < m_height) - mitem->height = m_height; - - /* Calculate minimum width */ - - max_width = 0; - - for (i = 1; i < 32; i++) { - sprintf (buf, "%d", i); - width = gdk_string_width (mitem->day_font, buf); - if (max_width < width) - max_width = width; - } - - m_width = 7 * (max_width + 2 * mitem->day_padding); - - if (mitem->width < m_width) - mitem->width = m_width; -} - -/* Calculates the minimum size of the month item based on the font sizes and paddings. If the - * current size of the month item is smaller than the required minimum size, this function will - * change the size to the appropriate values. - */ -static void -check_sizes (GnomeMonthItem *mitem) -{ - check_heading_sizes (mitem); - check_day_sizes (mitem); -} - -/* Recalculates the position of the toplevel calendar group based on the logical position and anchor */ -static void -reanchor (GnomeMonthItem *mitem) -{ - double x, y; - - x = mitem->x; - y = mitem->y; - - switch (mitem->anchor) { - case GTK_ANCHOR_NW: - case GTK_ANCHOR_W: - case GTK_ANCHOR_SW: - break; - - case GTK_ANCHOR_N: - case GTK_ANCHOR_CENTER: - case GTK_ANCHOR_S: - x -= mitem->width / 2; - break; - - case GTK_ANCHOR_NE: - case GTK_ANCHOR_E: - case GTK_ANCHOR_SE: - x -= mitem->width; - break; - } - - switch (mitem->anchor) { - case GTK_ANCHOR_NW: - case GTK_ANCHOR_N: - case GTK_ANCHOR_NE: - break; - - case GTK_ANCHOR_W: - case GTK_ANCHOR_CENTER: - case GTK_ANCHOR_E: - y -= mitem->height / 2; - break; - - case GTK_ANCHOR_SW: - case GTK_ANCHOR_S: - case GTK_ANCHOR_SE: - y -= mitem->height; - break; - } - - /* Explicitly use the canvas group class prefix since the month item class has x and y - * arguments as well. - */ - - gnome_canvas_item_set (GNOME_CANVAS_ITEM (mitem), - "GnomeCanvasGroup::x", x, - "GnomeCanvasGroup::y", y, - NULL); -} - -/* Takes an anchor specification and the corners of a rectangle, and returns an anchored point with - * respect to that rectangle. - */ -static void -get_label_anchor (GtkAnchorType anchor, double x1, double y1, double x2, double y2, double *x, double *y) -{ - switch (anchor) { - case GTK_ANCHOR_NW: - case GTK_ANCHOR_W: - case GTK_ANCHOR_SW: - *x = x1; - break; - - case GTK_ANCHOR_N: - case GTK_ANCHOR_CENTER: - case GTK_ANCHOR_S: - *x = (x1 + x2) / 2.0; - break; - - case GTK_ANCHOR_NE: - case GTK_ANCHOR_E: - case GTK_ANCHOR_SE: - *x = x2; - break; - } - - switch (anchor) { - case GTK_ANCHOR_NW: - case GTK_ANCHOR_N: - case GTK_ANCHOR_NE: - *y = y1; - break; - - case GTK_ANCHOR_W: - case GTK_ANCHOR_CENTER: - case GTK_ANCHOR_E: - *y = (y1 + y2) / 2.0; - break; - - case GTK_ANCHOR_SW: - case GTK_ANCHOR_S: - case GTK_ANCHOR_SE: - *y = y2; - break; - } -} - -/* Resets the position of the day name headings in the calendar */ -static void -reshape_headings (GnomeMonthItem *mitem) -{ - double width; - int i; - double x, y; - - width = mitem->width / 7; - - for (i = 0; i < 7; i++) { - /* Group */ - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_GROUP + i], - "x", width * i, - "y", 0.0, - NULL); - - /* Box */ - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_BOX + i], - "x1", 0.0, - "y1", 0.0, - "x2", width, - "y2", mitem->head_height, - NULL); - - /* Label */ - get_label_anchor (mitem->head_anchor, - mitem->head_padding, - mitem->head_padding, - width - mitem->head_padding, - mitem->head_height - mitem->head_padding, - &x, &y); - - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_LABEL + i], - "x", x, - "y", y, - "anchor", mitem->head_anchor, - NULL); - } -} - -/* Resets the position of the days in the calendar */ -static void -reshape_days (GnomeMonthItem *mitem) -{ - double width, height; - double x, y; - int row, col; - int i; - - width = mitem->width / 7; - height = (mitem->height - mitem->head_height) / 6; - - i = 0; - - for (row = 0; row < 6; row++) - for (col = 0; col < 7; col++) { - /* Group */ - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_GROUP + i], - "x", width * col, - "y", mitem->head_height + height * row, - NULL); - - /* Box */ - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_BOX + i], - "x1", 0.0, - "y1", 0.0, - "x2", width, - "y2", height, - NULL); - - /* Label */ - get_label_anchor (mitem->day_anchor, - mitem->day_padding, - mitem->day_padding, - width - mitem->day_padding, - height - mitem->day_padding, - &x, &y); - - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i], - "x", x, - "y", y, - "anchor", mitem->day_anchor, - NULL); - - i++; - } -} - -/* Changes the positions and resizes the items in the calendar to match the new size of the - * calendar. - */ -static void -reshape (GnomeMonthItem *mitem) -{ - check_sizes (mitem); - reanchor (mitem); - reshape_headings (mitem); - reshape_days (mitem); -} - -/* Sets the font for all the day headings */ -static void -set_head_font (GnomeMonthItem *mitem) -{ - int i; - - for (i = 0; i < 7; i++) - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_LABEL + i], - "font_gdk", mitem->head_font, - NULL); -} - -/* Sets the color for all the headings */ -static void -set_head_color (GnomeMonthItem *mitem) -{ - int i; - GdkColor outline; - GdkColor head; - - outline.pixel = mitem->outline_pixel; - head.pixel = mitem->head_pixel; - - for (i = 0; i < 7; i++) { - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_BOX + i], - "fill_color_gdk", &outline, - NULL); - - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_LABEL + i], - "fill_color_gdk", &head, - NULL); - } -} - -/* Creates the items for the day name headings */ -static void -create_headings (GnomeMonthItem *mitem) -{ - int i; - - /* Just create the items; they will be positioned and configured by a call to reshape() */ - - for (i = 0; i < 7; i++) { - /* Group */ - mitem->items[GNOME_MONTH_ITEM_HEAD_GROUP + i] = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (mitem), - gnome_canvas_group_get_type (), - NULL); - - /* Box */ - mitem->items[GNOME_MONTH_ITEM_HEAD_BOX + i] = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (mitem->items[GNOME_MONTH_ITEM_HEAD_GROUP + i]), - gnome_canvas_rect_get_type (), - NULL); - - /* Label */ - mitem->items[GNOME_MONTH_ITEM_HEAD_LABEL + i] = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (mitem->items[GNOME_MONTH_ITEM_HEAD_GROUP + i]), - gnome_canvas_text_get_type (), - NULL); - } - - set_head_font (mitem); - set_head_color (mitem); -} - -/* Returns the number of leap years since year 1 up to (but not including) the specified year */ -static int -leap_years_up_to (int year) -{ - return (year / 4 /* trivial leapness */ - - ((year > 1700) ? (year / 100 - 17) : 0) /* minus centuries since 1700 */ - + ((year > 1600) ? ((year - 1600) / 400) : 0)); /* plus centuries since 1700 divisible by 400 */ -} - -/* Returns whether the specified year is a leap year */ -static int -is_leap_year (int year) -{ - if (year <= 1752) - return !(year % 4); - else - return (!(year % 4) && (year % 100)) || !(year % 400); -} - -/* Returns the 1-based day number within the year of the specified date */ -static int -day_in_year (int day, int month, int year) -{ - int is_leap, i; - - is_leap = is_leap_year (year); - - for (i = 0; i < month; i++) - day += days_in_month [is_leap][i]; - - return day; -} - -/* Returns the day of the week (zero-based, zero is Sunday) for the specified date. For the days - * that were removed on the Gregorian reformation, it returns Thursday. - */ -static int -day_in_week (int day, int month, int year) -{ - int n; - - n = (year - 1) * 365 + leap_years_up_to (year - 1) + day_in_year (day, month, year); - - if (n < REFORMATION_DAY) - return (n - 1 + SATURDAY) % 7; - - if (n >= (REFORMATION_DAY + MISSING_DAYS)) - return (n - 1 + SATURDAY - MISSING_DAYS) % 7; - - return THURSDAY; -} - -/* Fills the 42-element days array with the day numbers for the specified month. Slots outside the - * bounds of the month are filled with zeros. The starting and ending indexes of the days are - * returned in the start and end arguments. - */ -static void -build_month (int month, int year, int start_on_monday, int *days, int *start, int *end) -{ - int i; - int d_month, d_week; - - /* Note that months are zero-based, so September is month 8 */ - - if ((year == 1752) && (month == 8)) { - memcpy (days, sept_1752, 42 * sizeof (int)); - - if (start) - *start = SEPT_1752_START; - - if (end) - *end = SEPT_1752_END; - - return; - } - - for (i = 0; i < 42; i++) - days[i] = 0; - - d_month = days_in_month[is_leap_year (year)][month]; - d_week = day_in_week (1, month, year); - - if (start_on_monday) - d_week = (d_week + 6) % 7; - - for (i = 0; i < d_month; i++) - days[d_week + i] = i + 1; - - if (start) - *start = d_week; - - if (end) - *end = d_week + d_month - 1; -} - -/* Set the day numbers in the monthly calendar */ -static void -set_days (GnomeMonthItem *mitem) -{ - int i; - int start, end; - char buf[100]; - - build_month (mitem->month, mitem->year, mitem->start_on_monday, mitem->day_numbers, &start, &end); - - /* Clear days before start of month */ - - for (i = 0; i < start; i++) - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i], - "text", NULL, - NULL); - - /* Set days of month */ - - for (; start <= end; start++, i++) { - sprintf (buf, "%d", mitem->day_numbers[start]); - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i], - "text", buf, - NULL); - } - - /* Clear days after end of month */ - - for (; i < 42; i++) - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i], - "text", NULL, - NULL); -} - -/* Sets the font for all the day numbers */ -static void -set_day_font (GnomeMonthItem *mitem) -{ - int i; - - for (i = 0; i < 42; i++) - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i], - "font_gdk", mitem->day_font, - NULL); -} - -/* Sets the color for all the day items */ -static void -set_day_color (GnomeMonthItem *mitem) -{ - int i; - GdkColor outline; - GdkColor day_box; - GdkColor day; - - outline.pixel = mitem->outline_pixel; - day_box.pixel = mitem->day_box_pixel; - day.pixel = mitem->day_pixel; - - for (i = 0; i < 42; i++) { - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_BOX + i], - "outline_color_gdk", &outline, - "fill_color_gdk", &day_box, - NULL); - - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i], - "fill_color_gdk", &day, - NULL); - } -} - -/* Creates the items for the days */ -static void -create_days (GnomeMonthItem *mitem) -{ - int i; - - /* Just create the items; they will be positioned and configured by a call to reshape() */ - - for (i = 0; i < 42; i++) { - /* Group */ - mitem->items[GNOME_MONTH_ITEM_DAY_GROUP + i] = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (mitem), - gnome_canvas_group_get_type (), - NULL); - - /* Box */ - mitem->items[GNOME_MONTH_ITEM_DAY_BOX + i] = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (mitem->items[GNOME_MONTH_ITEM_DAY_GROUP + i]), - gnome_canvas_rect_get_type (), - NULL); - - /* Label */ - mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i] = - gnome_canvas_item_new (GNOME_CANVAS_GROUP (mitem->items[GNOME_MONTH_ITEM_DAY_GROUP + i]), - gnome_canvas_text_get_type (), - NULL); - } - - set_day_font (mitem); - set_day_color (mitem); - set_days (mitem); -} - -/* Resets the text of the day name headings */ -static void -set_day_names (GnomeMonthItem *mitem) -{ - int i; - - for (i = 0; i < 7; i++) - gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_HEAD_LABEL + i], - "text", mitem->day_names[mitem->start_on_monday ? ((i + 1) % 7) : i], - NULL); -} - -/* Creates all the canvas items that make up the calendar */ -static void -create_items (GnomeMonthItem *mitem) -{ - mitem->items = g_new (GnomeCanvasItem *, GNOME_MONTH_ITEM_LAST); - - create_headings (mitem); - create_days (mitem); - - /* Initialize by default to three-letter day names */ - - mitem->day_names[0] = g_strdup (_("Sun")); - mitem->day_names[1] = g_strdup (_("Mon")); - mitem->day_names[2] = g_strdup (_("Tue")); - mitem->day_names[3] = g_strdup (_("Wed")); - mitem->day_names[4] = g_strdup (_("Thu")); - mitem->day_names[5] = g_strdup (_("Fri")); - mitem->day_names[6] = g_strdup (_("Sat")); - - set_day_names (mitem); - reshape (mitem); -} - -static void -gnome_month_item_init (GnomeMonthItem *mitem) -{ - time_t t; - struct tm tm; - - /* Initialize to the current month by default */ - - t = time (NULL); - tm = *localtime (&t); - - mitem->year = tm.tm_year + 1900; - mitem->month = tm.tm_mon; - - mitem->x = 0.0; - mitem->y = 0.0; - mitem->width = 150.0; /* not unreasonable defaults, I hope */ - mitem->height = 100.0; - mitem->anchor = GTK_ANCHOR_NW; - mitem->head_padding = 0.0; - mitem->day_padding = 2.0; - mitem->head_height = 14.0; - mitem->head_anchor = GTK_ANCHOR_CENTER; - mitem->day_anchor = GTK_ANCHOR_CENTER; - - /* Load the default fonts */ - - mitem->head_font = gdk_font_load (DEFAULT_FONT); - if (!mitem->head_font) { - mitem->head_font = gdk_font_load ("fixed"); - g_assert (mitem->head_font != NULL); - } - - mitem->day_font = gdk_font_load (DEFAULT_FONT); - if (!mitem->day_font) { - mitem->day_font = gdk_font_load ("fixed"); - g_assert (mitem->day_font != NULL); - } -} - -GnomeCanvasItem * -gnome_month_item_new (GnomeCanvasGroup *parent) -{ - GnomeMonthItem *mitem; - - g_return_val_if_fail (parent != NULL, NULL); - g_return_val_if_fail (GNOME_IS_CANVAS_GROUP (parent), NULL); - - mitem = GNOME_MONTH_ITEM (gnome_canvas_item_new (parent, - gnome_month_item_get_type (), - NULL)); - - gnome_month_item_construct (mitem); - - return GNOME_CANVAS_ITEM (mitem); -} - -void -gnome_month_item_construct (GnomeMonthItem *mitem) -{ - GdkColor color; - - g_return_if_fail (mitem != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (mitem)); - - gnome_canvas_get_color (GNOME_CANVAS_ITEM (mitem)->canvas, "#d6d6d6d6d6d6", &color); - mitem->head_pixel = color.pixel; - mitem->day_box_pixel = color.pixel; - - gnome_canvas_get_color (GNOME_CANVAS_ITEM (mitem)->canvas, "black", &color); - mitem->outline_pixel = color.pixel; - mitem->day_pixel = color.pixel; - - create_items (mitem); -} - -static void -free_day_names (GnomeMonthItem *mitem) -{ - int i; - - if (mitem->day_names[0]) - for (i = 0; i < 7; i++) - g_free (mitem->day_names[i]); -} - -static void -gnome_month_item_destroy (GtkObject *object) -{ - GnomeMonthItem *mitem; - - g_return_if_fail (object != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (object)); - - mitem = GNOME_MONTH_ITEM (object); - - free_day_names (mitem); - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -/* Sets the color of the specified pixel value to that of the specified argument, which must be in - * GdkColor format if format is TRUE, otherwise it must be in string format. - */ -static void -set_color_arg (GnomeMonthItem *mitem, gulong *pixel, GtkArg *arg, int gdk_format, int set_head, int set_day) -{ - GdkColor color; - - if (gdk_format) - *pixel = ((GdkColor *) GTK_VALUE_BOXED (*arg))->pixel; - else { - if (gnome_canvas_get_color (GNOME_CANVAS_ITEM (mitem)->canvas, GTK_VALUE_STRING (*arg), &color)) - *pixel = color.pixel; - else - *pixel = 0; - } - - if (set_head) - set_head_color (mitem); - - if (set_day) - set_day_color (mitem); -} - -static void -gnome_month_item_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - GnomeMonthItem *mitem; - char **day_names; - int i; - - mitem = GNOME_MONTH_ITEM (object); - - switch (arg_id) { - case ARG_YEAR: - mitem->year = GTK_VALUE_UINT (*arg); - set_days (mitem); - break; - - case ARG_MONTH: - mitem->month = GTK_VALUE_UINT (*arg); - set_days (mitem); - break; - - case ARG_X: - mitem->x = GTK_VALUE_DOUBLE (*arg); - reanchor (mitem); - break; - - case ARG_Y: - mitem->y = GTK_VALUE_DOUBLE (*arg); - reanchor (mitem); - break; - - case ARG_WIDTH: - mitem->width = fabs (GTK_VALUE_DOUBLE (*arg)); - reshape (mitem); - break; - - case ARG_HEIGHT: - mitem->height = fabs (GTK_VALUE_DOUBLE (*arg)); - reshape (mitem); - break; - - case ARG_ANCHOR: - mitem->anchor = GTK_VALUE_ENUM (*arg); - reanchor (mitem); - break; - - case ARG_HEAD_PADDING: - mitem->head_padding = fabs (GTK_VALUE_DOUBLE (*arg)); - reshape (mitem); - break; - - case ARG_DAY_PADDING: - mitem->day_padding = fabs (GTK_VALUE_DOUBLE (*arg)); - reshape (mitem); - break; - - case ARG_DAY_NAMES: - day_names = GTK_VALUE_POINTER (*arg); - - /* First, check that none of the names is null */ - - for (i = 0; i < 7; i++) - if (!day_names[i]) { - g_warning ("Day number %d was NULL; day names cannot be NULL!", i); - return; - } - - /* Set the new names */ - - free_day_names (mitem); - for (i = 0; i < 7; i++) - mitem->day_names[i] = g_strdup (day_names[i]); - - set_day_names (mitem); - reshape (mitem); - break; - - case ARG_HEADING_HEIGHT: - mitem->head_height = fabs (GTK_VALUE_DOUBLE (*arg)); - reshape (mitem); - break; - - case ARG_HEADING_ANCHOR: - mitem->head_anchor = GTK_VALUE_ENUM (*arg); - reshape (mitem); - break; - - case ARG_DAY_ANCHOR: - mitem->day_anchor = GTK_VALUE_ENUM (*arg); - reshape (mitem); - break; - - case ARG_START_ON_MONDAY: - mitem->start_on_monday = GTK_VALUE_BOOL (*arg); - set_day_names (mitem); - set_days (mitem); - break; - - case ARG_HEAD_FONT: - gdk_font_unref (mitem->head_font); - - mitem->head_font = gdk_font_load (GTK_VALUE_STRING (*arg)); - if (!mitem->head_font) { - mitem->head_font = gdk_font_load ("fixed"); - g_assert (mitem->head_font != NULL); - } - - set_head_font (mitem); - reshape (mitem); - break; - - case ARG_HEAD_FONTSET: - gdk_font_unref (mitem->head_font); - - mitem->head_font = gdk_fontset_load (GTK_VALUE_STRING (*arg)); - if (!mitem->head_font) { - mitem->head_font = - gdk_fontset_load ("-*-fixed-medium-r-semicondensed--13-120-75-75-c-60-*-*"); - g_assert (mitem->head_font != NULL); - } - - set_head_font (mitem); - reshape (mitem); - break; - - case ARG_HEAD_FONT_GDK: - gdk_font_unref (mitem->head_font); - - mitem->head_font = GTK_VALUE_BOXED (*arg); - gdk_font_ref (mitem->head_font); - set_head_font (mitem); - reshape (mitem); - break; - - case ARG_DAY_FONT: - gdk_font_unref (mitem->day_font); - - mitem->day_font = gdk_font_load (GTK_VALUE_STRING (*arg)); - if (!mitem->day_font) { - mitem->day_font = gdk_font_load ("fixed"); - g_assert (mitem->day_font != NULL); - } - - set_day_font (mitem); - reshape (mitem); - break; - - case ARG_DAY_FONTSET: - gdk_font_unref (mitem->day_font); - - mitem->day_font = gdk_fontset_load (GTK_VALUE_STRING (*arg)); - if (!mitem->day_font) { - mitem->day_font = - gdk_fontset_load ("-*-fixed-medium-r-semicondensed--13-120-75-75-c-60-*-*"); - g_assert (mitem->day_font != NULL); - } - - set_day_font (mitem); - reshape (mitem); - break; - - case ARG_DAY_FONT_GDK: - gdk_font_unref (mitem->day_font); - - mitem->day_font = GTK_VALUE_BOXED (*arg); - gdk_font_ref (mitem->day_font); - set_day_font (mitem); - reshape (mitem); - break; - - case ARG_HEAD_COLOR: - set_color_arg (mitem, &mitem->head_pixel, arg, FALSE, TRUE, FALSE); - break; - - case ARG_HEAD_COLOR_GDK: - set_color_arg (mitem, &mitem->head_pixel, arg, TRUE, TRUE, FALSE); - break; - - case ARG_OUTLINE_COLOR: - set_color_arg (mitem, &mitem->outline_pixel, arg, FALSE, TRUE, TRUE); - break; - - case ARG_OUTLINE_COLOR_GDK: - set_color_arg (mitem, &mitem->outline_pixel, arg, TRUE, TRUE, TRUE); - break; - - case ARG_DAY_BOX_COLOR: - set_color_arg (mitem, &mitem->day_box_pixel, arg, FALSE, FALSE, TRUE); - break; - - case ARG_DAY_BOX_COLOR_GDK: - set_color_arg (mitem, &mitem->day_box_pixel, arg, TRUE, FALSE, TRUE); - break; - - case ARG_DAY_COLOR: - set_color_arg (mitem, &mitem->day_pixel, arg, FALSE, FALSE, TRUE); - break; - - case ARG_DAY_COLOR_GDK: - set_color_arg (mitem, &mitem->day_pixel, arg, TRUE, FALSE, TRUE); - break; - - default: - break; - } -} - -/* Allocates a GdkColor structure filled with the specified pixel, and puts it into the specified - * arg for returning it in the get_arg method. - */ -static void -get_color_arg (GnomeMonthItem *mitem, gulong pixel, GtkArg *arg) -{ - GdkColor *color; - - color = g_new (GdkColor, 1); - color->pixel = pixel; - gdk_color_context_query_color (GNOME_CANVAS_ITEM (mitem)->canvas->cc, color); - GTK_VALUE_BOXED (*arg) = color; -} - -static void -gnome_month_item_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) -{ - GnomeMonthItem *mitem; - - mitem = GNOME_MONTH_ITEM (object); - - switch (arg_id) { - case ARG_YEAR: - GTK_VALUE_UINT (*arg) = mitem->year; - break; - - case ARG_MONTH: - GTK_VALUE_UINT (*arg) = mitem->month; - break; - - case ARG_X: - GTK_VALUE_DOUBLE (*arg) = mitem->x; - break; - - case ARG_Y: - GTK_VALUE_DOUBLE (*arg) = mitem->y; - break; - - case ARG_WIDTH: - GTK_VALUE_DOUBLE (*arg) = mitem->width; - break; - - case ARG_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = mitem->height; - break; - - case ARG_ANCHOR: - GTK_VALUE_ENUM (*arg) = mitem->anchor; - break; - - case ARG_HEAD_PADDING: - GTK_VALUE_DOUBLE (*arg) = mitem->head_padding; - break; - - case ARG_DAY_PADDING: - GTK_VALUE_DOUBLE (*arg) = mitem->day_padding; - break; - - case ARG_HEADING_HEIGHT: - GTK_VALUE_DOUBLE (*arg) = mitem->head_height; - break; - - case ARG_HEADING_ANCHOR: - GTK_VALUE_ENUM (*arg) = mitem->head_anchor; - break; - - case ARG_DAY_ANCHOR: - GTK_VALUE_ENUM (*arg) = mitem->day_anchor; - break; - - case ARG_START_ON_MONDAY: - GTK_VALUE_BOOL (*arg) = mitem->start_on_monday; - break; - - case ARG_HEAD_FONT_GDK: - GTK_VALUE_BOXED (*arg) = mitem->head_font; - break; - - case ARG_DAY_FONT_GDK: - GTK_VALUE_BOXED (*arg) = mitem->day_font; - break; - - case ARG_HEAD_COLOR_GDK: - get_color_arg (mitem, mitem->head_pixel, arg); - break; - - case ARG_OUTLINE_COLOR_GDK: - get_color_arg (mitem, mitem->outline_pixel, arg); - break; - - case ARG_DAY_BOX_COLOR_GDK: - get_color_arg (mitem, mitem->day_box_pixel, arg); - break; - - case ARG_DAY_COLOR_GDK: - get_color_arg (mitem, mitem->day_pixel, arg); - break; - - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -GnomeCanvasItem * -gnome_month_item_num2child (GnomeMonthItem *mitem, int child_num) -{ - g_return_val_if_fail (mitem != NULL, NULL); - g_return_val_if_fail (GNOME_IS_MONTH_ITEM (mitem), NULL); - - return mitem->items[child_num]; -} - -int -gnome_month_item_child2num (GnomeMonthItem *mitem, GnomeCanvasItem *child) -{ - int i; - - g_return_val_if_fail (mitem != NULL, -1); - g_return_val_if_fail (GNOME_IS_MONTH_ITEM (mitem), -1); - g_return_val_if_fail (child != NULL, -1); - g_return_val_if_fail (GNOME_IS_CANVAS_ITEM (child), -1); - - for (i = 0; i < GNOME_MONTH_ITEM_LAST; i++) - if (mitem->items[i] == child) - return i; - - return -1; -} - -int -gnome_month_item_num2day (GnomeMonthItem *mitem, int child_num) -{ - g_return_val_if_fail (mitem != NULL, 0); - g_return_val_if_fail (GNOME_IS_MONTH_ITEM (mitem), 0); - - if ((child_num >= GNOME_MONTH_ITEM_DAY_GROUP) && (child_num < GNOME_MONTH_ITEM_LAST)) { - child_num = (child_num - GNOME_MONTH_ITEM_DAY_GROUP) % 42; - return mitem->day_numbers[child_num]; - } else - return 0; -} - -int -gnome_month_item_day2index (GnomeMonthItem *mitem, int day_num) -{ - int i; - - g_return_val_if_fail (mitem != NULL, -1); - g_return_val_if_fail (GNOME_IS_MONTH_ITEM (mitem), -1); - g_return_val_if_fail (day_num >= 1, -1); - - /* Find first day of month */ - - for (i = 0; mitem->day_numbers[i] == 0; i++) - ; - - /* Find the specified day */ - - for (; (mitem->day_numbers[i] != 0) && (i < 42); i++) - if (mitem->day_numbers[i] == day_num) - return i; - - /* Bail out */ - - return -1; -} diff --git a/calendar/gui/gnome-month-item.h b/calendar/gui/gnome-month-item.h deleted file mode 100644 index 0ec4fd484c..0000000000 --- a/calendar/gui/gnome-month-item.h +++ /dev/null @@ -1,165 +0,0 @@ -/* General-purpose monthly calendar canvas item for GNOME - * - * Copyright (C) 1998 Red Hat Software, Inc. - * - * Author: Federico Mena - */ - -#ifndef GNOME_MONTH_ITEM_H -#define GNOME_MONTH_ITEM_H - -#include -#include /* why the hell is GtkAnchorType here and not in gtkenums.h? */ -#include - - -BEGIN_GNOME_DECLS - - -/* These values are used to identify the canvas items that make up a complete GnomeMonthItem, which - * is made up of the following "pieces": - * - * Headings line: - * - 7 GnomeCanvasGroups: - * Each group contains one box (GnomeCanvasRectangle) and one label - * (GnomeCanvasText) - * - * Day slots: - * - 42 GnomeCanvasGroups: - * Each group contains one box (GnomeCanvasRectangle) and one label - * (GnomeCanvasText) - * - * The headings are organized from left to right. The day slots are organized as a table in - * row-major order. - * - * If you want to access the individual items of the GnomeMonthItem, you can use these numbers with - * the gnome_month_item_num2child() function. If you want to convert a number into the - * corresponding GnomeCanvasItem, you can use the gnome_month_item_child2num() function. - */ -typedef enum { - GNOME_MONTH_ITEM_HEAD_GROUP = 0, /* 7 groups for headings */ - GNOME_MONTH_ITEM_HEAD_BOX = 7, /* 7 boxes for headings */ - GNOME_MONTH_ITEM_HEAD_LABEL = 14, /* 7 labels for headings */ - GNOME_MONTH_ITEM_DAY_GROUP = 21, /* 42 groups for days */ - GNOME_MONTH_ITEM_DAY_BOX = 63, /* 42 boxes for days */ - GNOME_MONTH_ITEM_DAY_LABEL = 105, /* 42 labels for days */ - GNOME_MONTH_ITEM_LAST = 147 /* total number of items */ -} GnomeMonthItemChild; - -/* The MonthItem canvas item defines a simple monthly calendar. It is made out of a number of - * canvas items, which can be accessed using the functions provided. The monthly calendar is - * anchored with respect to a point. The following arguments are available: - * - * name type read/write description - * ------------------------------------------------------------------------------------------ - * year uint RW Full year (1-9999) - * month uint RW Number of month (0-11) - * x double RW X position of anchor point - * y double RW Y position of anchor point - * width double RW Width of calendar in canvas units - * height double RW Height of calendar in canvas units - * anchor GtkAnchorType RW Anchor side for calendar - * heading_padding double RW Padding inside heading boxes - * day_padding double RW Padding inside day boxes - * day_names char ** W Array of strings corresponding to the day names (sun-sat) - * heading_height double RW Height of headings bar in canvas units - * heading_anchor GtkAnchorType RW Anchor side for headings inside heading boxes - * day_anchor GtkAnchorType RW Anchor side for day numbers inside day boxes - * start_on_monday boolean RW Specifies whether the week starts on Monday or Sunday - * heading_font string W X logical font descriptor for the headings - * heading_fontset string W X logical fontset descriptor for the headings - * heading_font_gdk GdkFont * RW Pointer to GdkFont for the headings - * day_font string W X logical font descriptor for the day numbers - * day_fontset string W X logical fontset descriptor for the day numbers - * day_font_gdk GdkFont * RW Pointer to GdkFont for the day numbers - * heading_color string W X color specification for heading labels - * heading_color_gdk GdkColor * RW Pointer to an allocated GdkColor for heading labels - * outline_color string W X color specification for outline (lines and fill of heading boxes) - * outline_color_gdk GdkColor * RW Pointer to an allocated GdkColor for outline - * day_box_color string W X color specification for day boxes - * day_box_color_gdk GdkColor * RW Pointer to an allocated GdkColor for day boxes - * day_color string W X color specification for day number labels - * day_color_gdk GdkColor * RW Pointer to an allocated GdkColor for day number labels - */ - -#define GNOME_TYPE_MONTH_ITEM (gnome_month_item_get_type ()) -#define GNOME_MONTH_ITEM(obj) (GTK_CHECK_CAST ((obj), GNOME_TYPE_MONTH_ITEM, GnomeMonthItem)) -#define GNOME_MONTH_ITEM_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GNOME_TYPE_MONTH_ITEM, GnomeMonthItemClass)) -#define GNOME_IS_MONTH_ITEM(obj) (GTK_CHECK_TYPE ((obj), GNOME_TYPE_MONTH_ITEM)) -#define GNOME_IS_MONTH_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GNOME_TYPE_MONTH_ITEM)) - - -typedef struct _GnomeMonthItem GnomeMonthItem; -typedef struct _GnomeMonthItemClass GnomeMonthItemClass; - -struct _GnomeMonthItem { - GnomeCanvasGroup group; - - int year; /* Year to show (full, no two-digit crap) */ - int month; /* Month to show (0-11) */ - - double x, y; /* Position at anchor */ - double width, height; /* Size of calendar */ - GtkAnchorType anchor; /* Anchor side for calendar */ - - double head_padding; /* Padding to use between heading lines and text */ - double day_padding; /* Padding to use between day number lines and text */ - - char *day_names[7]; /* Names to use for the day labels, starting from Sunday */ - - double head_height; /* Height of the headings row */ - GtkAnchorType head_anchor; /* Anchor side for the heading labels */ - GtkAnchorType day_anchor; /* Anchor side for the day number labels */ - - GnomeCanvasItem **items; /* All the items that make up the calendar */ - int day_numbers[42]; /* The numbers of the days, as they are shown in the display */ - - GdkFont *head_font; /* Font for the headings */ - GdkFont *day_font; /* Font for the day numbers */ - - gulong head_pixel; /* Color for heading labels */ - gulong outline_pixel; /* Color for the outline (lines and heading boxes) */ - gulong day_box_pixel; /* Color for the day boxes */ - gulong day_pixel; /* Color for day number labels */ - - int start_on_monday : 1; /* Start the week on Monday? If false, then start from Sunday */ -}; - -struct _GnomeMonthItemClass { - GnomeCanvasGroupClass parent_class; -}; - - -/* Standard Gtk function */ -GtkType gnome_month_item_get_type (void); - -/* Creates a new month item with the specified group as parent */ -GnomeCanvasItem *gnome_month_item_new (GnomeCanvasGroup *parent); - -/* Constructor function useful for derived classes */ -void gnome_month_item_construct (GnomeMonthItem *mitem); - -/* Returns the child item defined by the child number (as specified on the GnomeMonthItemChild - * enumeration above). - */ -GnomeCanvasItem *gnome_month_item_num2child (GnomeMonthItem *mitem, int child_num); - -/* Returns the number of the specified child item, as defined on the GnomeMonthItemChild enumeration - * above. If the specified object is not found, it returns -1. - */ -int gnome_month_item_child2num (GnomeMonthItem *mitem, GnomeCanvasItem *child); - -/* Returns the number of the day relevant to the specified child item. Day numbers are 1-based. If - * the specified child is outside the range of displayed days, then it returns 0. - */ -int gnome_month_item_num2day (GnomeMonthItem *mitem, int child_num); - -/* Returns the index (0-41) of the specified date within the table of days. If the day number is - * invalid for the current monthly calendar, then -1 is returned. - */ -int gnome_month_item_day2index (GnomeMonthItem *mitem, int day_num); - - -END_GNOME_DECLS - -#endif diff --git a/calendar/gui/gnomecal.gnorba b/calendar/gui/gnomecal.gnorba deleted file mode 100644 index 74df8ecf04..0000000000 --- a/calendar/gui/gnomecal.gnorba +++ /dev/null @@ -1,11 +0,0 @@ -[IDL:GNOME:Calendar:Repository:1.0] -type=factory -repo_id=IDL:Gnome/Calendar/Repository:1.0 -description=Calendar Repository -location_info=IDL:GNOME:Calendar:RepositoryLocator:1.0 - -[IDL:GNOME:Calendar:RepositoryLocator:1.0] -type=exe -repo_id=IDL:GNOME/GenericFactory:1.0 -description=Calendar Server -location_info=gnomecal diff --git a/calendar/gui/gnomecal.oafinfo b/calendar/gui/gnomecal.oafinfo deleted file mode 100644 index c4b91b9dd8..0000000000 --- a/calendar/gui/gnomecal.oafinfo +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/calendar/gui/goto.c b/calendar/gui/goto.c deleted file mode 100644 index d6c69016a1..0000000000 --- a/calendar/gui/goto.c +++ /dev/null @@ -1,326 +0,0 @@ -/* Go to date dialog for gnomecal - * - * Copyright (C) 1998 Red Hat Software, Inc. - * - * Author: Federico Mena - */ - -#include -#include -#include -#include "gnome-cal.h" -#include "gnome-month-item.h" -#include "calendar-commands.h" -#include "mark.h" - - -static GtkWidget *goto_win; /* The goto dialog window */ -static GnomeMonthItem *month_item; /* The month item in the dialog */ -static GnomeCalendar *gnome_calendar; /* The gnome calendar the dialog refers to */ -static int current_index; /* The index of the day marked as current, or -1 if none */ - - -/* Updates the specified month item by marking it appropriately from the calendar the dialog refers - * to. Also marks the current day if appropriate. - */ -static void -update (void) -{ - GnomeCanvasItem *item; - time_t t; - struct tm tm; - - unmark_month_item (month_item); - mark_month_item (month_item, gnome_calendar); - - if (current_index != -1) { - item = gnome_month_item_num2child (month_item, - GNOME_MONTH_ITEM_DAY_LABEL + current_index); - gnome_canvas_item_set (item, - "fill_color", color_spec_from_prop (COLOR_PROP_DAY_FG), - "fontset", NORMAL_DAY_FONTSET, - NULL); - current_index = -1; - } - - t = time (NULL); - tm = *localtime (&t); - - if (((tm.tm_year + 1900) == month_item->year) && (tm.tm_mon == month_item->month)) { - current_index = gnome_month_item_day2index (month_item, tm.tm_mday); - g_assert (current_index != -1); - - item = gnome_month_item_num2child (month_item, - GNOME_MONTH_ITEM_DAY_LABEL + current_index); - gnome_canvas_item_set (item, - "fill_color", color_spec_from_prop (COLOR_PROP_CURRENT_DAY_FG), - "fontset", CURRENT_DAY_FONTSET, - NULL); - } -} - -/* Callback used when the year adjustment is changed */ -static void -year_changed (GtkAdjustment *adj, gpointer data) -{ - gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item), - "year", (int) adj->value, - NULL); - update (); -} - -/* Creates the year control with its adjustment */ -static GtkWidget * -create_year (int year) -{ - GtkWidget *hbox; - GtkAdjustment *adj; - GtkWidget *w; - - hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); - - w = gtk_label_new (_("Year:")); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - adj = GTK_ADJUSTMENT (gtk_adjustment_new (year, 1900, 9999, 1, 10, 10)); - gtk_signal_connect (GTK_OBJECT (adj), "value_changed", - (GtkSignalFunc) year_changed, - NULL); - - w = gtk_spin_button_new (adj, 1.0, 0); - gtk_widget_set_usize (w, 60, 0); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - return hbox; -} - -/* Callback used when a month button is toggled */ -static void -month_toggled (GtkToggleButton *toggle, gpointer data) -{ - if (!toggle->active) - return; - - gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item), - "month", GPOINTER_TO_INT (data), - NULL); - update (); -} - -/* Creates the months control */ -static GtkWidget * -create_months (int month) -{ - GtkWidget *table; - GtkWidget *w; - GSList *group; - int i, row, col; - struct tm tm; - char buf[100]; - - tm = *localtime (&gnome_calendar->selection_start_time); - - table = gtk_table_new (2, 6, TRUE); - - group = NULL; - - for (i = 0; i < 12; i++) { - row = i / 6; - col = i % 6; - - tm.tm_mon = i; - strftime (buf, 100, "%b", &tm); - - w = gtk_radio_button_new (group); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (w)); - gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (w), FALSE); - - gtk_container_add (GTK_CONTAINER (w), gtk_label_new (buf)); - - if (i == month) - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (w), TRUE); - - gtk_signal_connect (GTK_OBJECT (w), "toggled", - (GtkSignalFunc) month_toggled, - GINT_TO_POINTER (i)); - gtk_table_attach (GTK_TABLE (table), w, - col, col + 1, - row, row + 1, - GTK_EXPAND | GTK_FILL, - GTK_EXPAND | GTK_FILL, - 0, 0); - gtk_widget_show_all (w); - } - - return table; -} - -/* Sets the scrolling region of the canvas to the allocation size */ -static void -set_scroll_region (GtkWidget *widget, GtkAllocation *allocation) -{ - gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item), - "width", (double) (allocation->width - 1), - "height", (double) (allocation->height - 1), - NULL); - - gnome_canvas_set_scroll_region (GNOME_CANVAS (widget), - 0, 0, - allocation->width, allocation->height); -} - -/* Event handler for day groups in the month item. A button press makes the calendar jump to the - * selected day and destroys the Go-to dialog box. - */ -static gint -day_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - int child_num, day; - - child_num = gnome_month_item_child2num (month_item, item); - day = gnome_month_item_num2day (month_item, child_num); - - switch (event->type) { - case GDK_BUTTON_PRESS: - if ((event->button.button == 1) && (day != 0)) { - gnome_calendar_goto (gnome_calendar, - time_from_day (month_item->year, month_item->month, day)); - gtk_widget_destroy (goto_win); - } - break; - - default: - break; - } - - return FALSE; -} - -/* Creates the canvas with the month item for selecting days */ -static GtkWidget * -create_days (int day, int month, int year) -{ - GtkWidget *canvas; - int i; - GnomeCanvasItem *day_group; - - canvas = gnome_canvas_new (); - gtk_widget_set_usize (canvas, 150, 120); - - month_item = GNOME_MONTH_ITEM (gnome_month_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)))); - gnome_canvas_item_set (GNOME_CANVAS_ITEM (month_item), - "month", month, - "year", year, - "start_on_monday", week_starts_on_monday, - NULL); - colorify_month_item (month_item, default_color_func, NULL); - month_item_prepare_prelight (month_item, default_color_func, NULL); - update (); - - /* Connect to size_allocate so that we can change the size of the month item and the - * scrolling region appropriately. - */ - - gtk_signal_connect (GTK_OBJECT (canvas), "size_allocate", - (GtkSignalFunc) set_scroll_region, - NULL); - - /* Bind the day groups to our event handler */ - - for (i = 0; i < 42; i++) { - day_group = gnome_month_item_num2child (month_item, i + GNOME_MONTH_ITEM_DAY_GROUP); - gtk_signal_connect (GTK_OBJECT (day_group), "event", - (GtkSignalFunc) day_event, - NULL); - } - - return canvas; -} - -static void -goto_today (GtkWidget *widget, gpointer data) -{ - gnome_calendar_goto_today (gnome_calendar); - gtk_widget_destroy (goto_win); -} - -/* Creates a "goto date" dialog and runs it */ -void -goto_dialog (GnomeCalendar *gcal) -{ - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *w; - GtkWidget *days; - struct tm tm; - - gnome_calendar = gcal; - current_index = -1; - - tm = *localtime (&gnome_calendar->selection_start_time); - - goto_win = gnome_dialog_new (_("Go to date"), - GNOME_STOCK_BUTTON_CANCEL, - NULL); - gnome_dialog_set_parent (GNOME_DIALOG (goto_win), - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal)))); - - - vbox = GNOME_DIALOG (goto_win)->vbox; - - /* Instructions */ - - w = gtk_label_new (_("Please select the date you want to go to.\n" - "When you click on a day, you will be taken\n" - "to that date.")); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.0); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - /* Create month item before creating the year controls, since the - * latter ones need the month_item to be created. - */ - - days = create_days (tm.tm_mday, tm.tm_mon, tm.tm_year + 1900); - - /* Year */ - - w = create_year (tm.tm_year + 1900); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - /* Month */ - - w = create_months (tm.tm_mon); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - /* Days (canvas with month item) */ - - gtk_box_pack_start (GTK_BOX (vbox), days, TRUE, TRUE, 0); - gtk_widget_show (days); - - /* Today button */ - - hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); - gtk_widget_show (hbox); - - w = gtk_button_new_with_label (_("Go to today")); - gtk_signal_connect (GTK_OBJECT (w), "clicked", - (GtkSignalFunc) goto_today, - NULL); - gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); - gtk_widget_show (w); - - /* Run! */ - - gtk_window_set_modal (GTK_WINDOW (goto_win), TRUE); - gnome_dialog_set_close (GNOME_DIALOG (goto_win), TRUE); - gnome_dialog_set_parent (GNOME_DIALOG (goto_win), - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gnome_calendar)))); - gtk_widget_show (goto_win); -} diff --git a/calendar/gui/jump.xpm b/calendar/gui/jump.xpm deleted file mode 100644 index d974142d9a..0000000000 --- a/calendar/gui/jump.xpm +++ /dev/null @@ -1,14 +0,0 @@ -/* XPM */ -static char * jump_xpm[] = { -"16 8 3 1", -" c None", -". c #000000", -"+ c #FFFF00", -"................", -".++++++++++++++.", -".++++++++++++++.", -".++..++..++..++.", -".++..++..++..++.", -".++++++++++++++.", -".++++++++++++++.", -"................"}; diff --git a/calendar/gui/main.c b/calendar/gui/main.c deleted file mode 100644 index 6876fbd6b5..0000000000 --- a/calendar/gui/main.c +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* control-factory.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef USING_OAF -#include -#else -#include -#endif - -#include -#include -#include -#include -#include "component-factory.h" -#include "control-factory.h" - - -static void -init_bonobo (int *argc, char **argv) -{ -#ifdef USING_OAF - /* FIXME: VERSION instead of "0.0". */ - gnome_init_with_popt_table ("evolution-calendar", "0.0", - *argc, argv, oaf_popt_options, - 0, NULL); - oaf_init (*argc, argv); -#else - CORBA_Environment ev; - - CORBA_exception_init (&ev); - gnome_CORBA_init_with_popt_table ( - "evolution-calendar", "0.0", - argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); - CORBA_exception_free (&ev); -#endif - - if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) - g_error (_("Could not initialize Bonobo")); -} - - -int -main (int argc, char **argv) -{ - init_bonobo (&argc, argv); - glade_gnome_init (); - alarm_init (); - e_cursors_init (); - - init_calendar (); - -#if 0 - //g_log_set_always_fatal ((GLogLevelFlags) 0xFFFF); - g_log_set_always_fatal (G_LOG_LEVEL_ERROR | - G_LOG_LEVEL_CRITICAL | - G_LOG_LEVEL_WARNING); -#endif - - control_factory_init (); - component_factory_init (); - - bonobo_main (); - fprintf (stderr, "main(): Out of bonobo_main(), we are dying cleanly. Have a nice day.\n"); - - return 0; -} diff --git a/calendar/gui/mark.c b/calendar/gui/mark.c deleted file mode 100644 index 383eca5196..0000000000 --- a/calendar/gui/mark.c +++ /dev/null @@ -1,297 +0,0 @@ -/* Evolution calendar - Functions to mark calendars - * - * Copyright (C) 1998 Red Hat Software, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "gnome-cal.h" -#include "calendar-commands.h" -#include "mark.h" - -/* Closure data */ -struct minfo -{ - GnomeMonthItem *mitem; - time_t start; - time_t end; -}; - - - -/* Frees the specified data when an object is destroyed */ -static void -free_data (GtkObject *object, gpointer data) -{ - g_free (data); -} - -/* If the array of "marked" attributes for the days in a a month item has not been created yet, this - * function creates the array and clears it. Otherwise, it just returns the existing array. - */ -static char * -get_attributes (GnomeMonthItem *mitem) -{ - char *attrs; - - attrs = gtk_object_get_data (GTK_OBJECT (mitem), "day_mark_attributes"); - - if (!attrs) { - attrs = g_new0 (char, 42); - gtk_object_set_data (GTK_OBJECT (mitem), "day_mark_attributes", attrs); - gtk_signal_connect (GTK_OBJECT (mitem), "destroy", - (GtkSignalFunc) free_data, - attrs); - } - - return attrs; -} - -void -colorify_month_item (GnomeMonthItem *mitem, GetColorFunc func, gpointer func_data) -{ - g_return_if_fail (mitem != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (mitem)); - g_return_if_fail (func != NULL); - - unmark_month_item (mitem); - - /* We have to do this in several calls to gnome_canvas_item_set(), as color_spec_from_prop() - * returns a pointer to a static string -- and we need several values. - */ - - gnome_canvas_item_set (GNOME_CANVAS_ITEM (mitem), - "heading_color", (* func) (COLOR_PROP_HEADING_COLOR, func_data), - NULL); - - gnome_canvas_item_set (GNOME_CANVAS_ITEM (mitem), - "outline_color", (* func) (COLOR_PROP_OUTLINE_COLOR, func_data), - NULL); - - gnome_canvas_item_set (GNOME_CANVAS_ITEM (mitem), - "day_box_color", (* func) (COLOR_PROP_EMPTY_DAY_BG, func_data), - NULL); - - gnome_canvas_item_set (GNOME_CANVAS_ITEM (mitem), - "day_color", (* func) (COLOR_PROP_DAY_FG, func_data), - NULL); -} - -/* In the month item, marks all the days that are touched by the specified time span. Assumes that - * the time span is completely contained within the month. The array of day attributes is modified - * accordingly. - */ -static void -mark_event_in_month (GnomeMonthItem *mitem, time_t start, time_t end) -{ - struct tm tm; - int day_index; - - tm = *localtime (&start); - - for (; start <= end; start += 60 * 60 * 24) { - mktime (&tm); /* normalize the time */ - - /* Figure out the day index that corresponds to this time */ - - day_index = gnome_month_item_day2index (mitem, tm.tm_mday); - g_assert (day_index >= 0); - - /* Mark the day box */ - - mark_month_item_index (mitem, day_index, default_color_func, NULL); - - /* Next day */ - - tm.tm_mday++; - } -} - -static gboolean -mark_month_item_cb (CalComponent *comp, time_t istart, time_t iend, gpointer data) -{ - struct minfo *mi = (struct minfo *)data; - - mark_event_in_month (mi->mitem, MAX (istart, mi->start), MIN (iend, mi->end)); - - return TRUE; -} - -void -mark_month_item (GnomeMonthItem *mitem, GnomeCalendar *gcal) -{ - struct minfo mi; - - g_return_if_fail (mitem != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (mitem)); - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - mi.mitem = mitem; - mi.start = time_month_begin (time_from_day (mitem->year, mitem->month, 1)); - mi.end = time_month_end (mi.start); - - cal_client_generate_instances (gcal->client, CALOBJ_TYPE_EVENT, mi.start, mi.end, - mark_month_item_cb, &mi); -} - - -void -mark_month_item_index (GnomeMonthItem *mitem, int index, GetColorFunc func, gpointer func_data) -{ - char *attrs; - GnomeCanvasItem *item; - - g_return_if_fail (mitem != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (mitem)); - g_return_if_fail ((index >= 0) && (index < 42)); - g_return_if_fail (func != NULL); - - attrs = get_attributes (mitem); - - attrs[index] = TRUE; - - item = gnome_month_item_num2child (mitem, GNOME_MONTH_ITEM_DAY_BOX + index); - gnome_canvas_item_set (item, - "fill_color", (* func) (COLOR_PROP_MARK_DAY_BG, func_data), - NULL); -} - -void -unmark_month_item (GnomeMonthItem *mitem) -{ - int i; - char *attrs; - GnomeCanvasItem *item; - - g_return_if_fail (mitem != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (mitem)); - - attrs = get_attributes (mitem); - - /* Find marked days and unmark them by turning off their marked attribute flag and changing - * the color. - */ - - for (i = 0; i < 42; i++) - if (attrs[i]) { - attrs[i] = FALSE; - - item = gnome_month_item_num2child (mitem, GNOME_MONTH_ITEM_DAY_BOX + i); - gnome_canvas_item_set (item, - "fill_color", color_spec_from_prop (COLOR_PROP_EMPTY_DAY_BG), - NULL); - } -} - -/* Handles EnterNotify and LeaveNotify events from the month item's day groups, and performs - * appropriate prelighting. - */ -static gint -day_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - GnomeMonthItem *mitem; - GnomeCanvasItem *box; - int child_num, day; - GetColorFunc func; - gpointer func_data; - char *color; - char *attrs; - - /* We only accept enters and leaves */ - - if (!((event->type == GDK_ENTER_NOTIFY) || (event->type == GDK_LEAVE_NOTIFY))) - return FALSE; - - /* Get index information */ - - mitem = GNOME_MONTH_ITEM (data); - child_num = gnome_month_item_child2num (mitem, item); - day = gnome_month_item_num2day (mitem, child_num); - - if (day == 0) - return FALSE; /* it was a day outside the month's range */ - - child_num -= GNOME_MONTH_ITEM_DAY_GROUP; - box = gnome_month_item_num2child (mitem, GNOME_MONTH_ITEM_DAY_BOX + child_num); - - /* Get colors */ - - func = gtk_object_get_data (GTK_OBJECT (mitem), "prelight_color_func"); - func_data = gtk_object_get_data (GTK_OBJECT (mitem), "prelight_color_data"); - - /* Now actually set the proper color in the item */ - - switch (event->type) { - case GDK_ENTER_NOTIFY: - color = (* func) (COLOR_PROP_PRELIGHT_DAY_BG, func_data); - gnome_canvas_item_set (box, - "fill_color", color, - NULL); - break; - - case GDK_LEAVE_NOTIFY: - attrs = get_attributes (mitem); - color = (* func) (attrs[child_num] ? COLOR_PROP_MARK_DAY_BG : COLOR_PROP_EMPTY_DAY_BG, - func_data); - gnome_canvas_item_set (box, - "fill_color", color, - NULL); - break; - - default: - g_assert_not_reached (); - } - - return TRUE; -} - -void -month_item_prepare_prelight (GnomeMonthItem *mitem, GetColorFunc func, gpointer func_data) -{ - GnomeCanvasItem *day_group; - int i; - - g_return_if_fail (mitem != NULL); - g_return_if_fail (GNOME_IS_MONTH_ITEM (mitem)); - g_return_if_fail (func != NULL); - - /* Store the function in the object data */ - - gtk_object_set_data (GTK_OBJECT (mitem), "prelight_color_func", func); - gtk_object_set_data (GTK_OBJECT (mitem), "prelight_color_data", func_data); - - /* Connect the appropriate signals to perform prelighting */ - - for (i = 0; i < 42; i++) { - day_group = gnome_month_item_num2child (GNOME_MONTH_ITEM (mitem), GNOME_MONTH_ITEM_DAY_GROUP + i); - gtk_signal_connect (GTK_OBJECT (day_group), "event", - (GtkSignalFunc) day_event, - mitem); - } -} - -char * -default_color_func (ColorProp propnum, gpointer data) -{ - return color_spec_from_prop (propnum); -} - - - diff --git a/calendar/gui/mark.h b/calendar/gui/mark.h deleted file mode 100644 index 76c82c580d..0000000000 --- a/calendar/gui/mark.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Evolution calendar - Functions to mark calendars - * - * Copyright (C) 1998 Red Hat Software, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef MARK_H -#define MARK_H - -/*#include "calendar.h"*/ -#include "gnome-month-item.h" - - - -/* These are the fonts used for the montly calendars */ - -#define HEADING_FONTSET "-adobe-helvetica-medium-r-*-*-14-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-17-*-*-*-p-*-koi8-r,-*-*-medium-r-*-*-14-*-*-*-*-*-ksc5601.1987-0,*" -#define TITLE_FONTSET "-adobe-helvetica-bold-r-normal--12-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-14-*-*-*-p-*-koi8-r,-*-*-bold-r-normal--12-*-*-*-*-*-ksc5601.1987-0,*" -#define DAY_HEADING_FONTSET "-adobe-helvetica-medium-r-normal--10-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-11-*-*-*-p-*-koi8-r,-*-*-medium-r-normal--10-*-*-*-*-*-ksc5601.1987-0,*" -#define NORMAL_DAY_FONTSET "-adobe-helvetica-medium-r-normal--10-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-11-*-*-*-p-*-koi8-r,-*-*-medium-r-normal--10-*-*-*-*-*-ksc5601.1987-0,*" -#define CURRENT_DAY_FONTSET "-adobe-helvetica-bold-r-normal--12-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-14-*-*-*-p-*-koi8-r,-*-*-bold-r-normal--12-*-*-*-*-*-ksc5601.1987-0,*" -#define BIG_DAY_HEADING_FONTSET "-adobe-helvetica-bold-r-normal--14-*-*-*-p-*-*-*,-cronyx-helvetica-bold-r-normal-*-17-*-*-*-p-*-koi8-r,-*-*-bold-r-normal--14-*-*-*-*-*-ksc5601.1987-0,*" -#define BIG_NORMAL_DAY_FONTSET "-adobe-helvetica-medium-r-normal--14-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-17-*-*-*-p-*-koi8-r,-*-*-medium-r-normal--14-*-*-*-*-*-ksc5601.1987-0,*" -#define BIG_CURRENT_DAY_FONTSET "-adobe-helvetica-bold-r-normal--14-*-*-*-p-*-*-*,-cronyx-helvetica-bold-r-normal-*-17-*-*-*-p-*-koi8-r,-*-*-bold-r-normal--14-*-*-*-*-*-ksc5601.1987-0,*" -#define EVENT_FONTSET "-adobe-helvetica-medium-r-*-*-10-*-*-*-p-*-*-*,-cronyx-helvetica-medium-r-normal-*-11-*-*-*-p-*-koi8-r,-*-*-medium-r-normal--10-*-*-*-*-*-ksc5601.1987-0,*" - - -/* Functions of this type are used by the marking functions to fetch color specifications. Such - * a function must return a color spec based on the property passed to it. - */ -typedef char * (* GetColorFunc) (ColorProp propnum, gpointer data); - - -/* Sets the user-configured colors and font for a month item. It also tags the days as unmarked. */ -void colorify_month_item (GnomeMonthItem *month, GetColorFunc func, gpointer func_data); - -/* Takes a monthly calendar item and marks the days that have events - * scheduled for them in the specified calendar. It also highlights - * the current day. - */ -void mark_month_item (GnomeMonthItem *mitem, GnomeCalendar *cal); - -/* Marks a day specified by index, not by day number */ -void mark_month_item_index (GnomeMonthItem *mitem, int index, GetColorFunc func, gpointer func_data); - -/* Unmarks all the days in the specified month item */ -void unmark_month_item (GnomeMonthItem *mitem); - -/* Prepares a monthly calendar item to prelight when the mouse goes over the days. */ - -void month_item_prepare_prelight (GnomeMonthItem *mitem, GetColorFunc func, gpointer func_data); - -/* This is the default prelight function you can use for most puposes. You can use NULL as the - * func_data. - */ -char *default_color_func (ColorProp prop_num, gpointer data); - - - -#endif diff --git a/calendar/gui/monthview.xpm b/calendar/gui/monthview.xpm deleted file mode 100644 index 1a1b1d936a..0000000000 --- a/calendar/gui/monthview.xpm +++ /dev/null @@ -1,46 +0,0 @@ -/* XPM */ -static char * monthview_xpm[] = { -"24 24 19 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #D1D1D1", -"# c #BABBCC", -"$ c #AAAFE2", -"% c #8B90C3", -"& c #E3E4F5", -"* c #A3A6C7", -"= c #5D66BA", -"- c #3945BB", -"; c #555FC5", -"> c #2E3BB1", -", c #727ACE", -"' c #C7CAEB", -") c #0010A8", -"! c #4550B5", -"~ c #1725AC", -"{ c #8E95D8", -" ", -" ", -" ", -" ", -" ...................... ", -" .............+.++.++.. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .++@++#$$%&+@+$*++@++. ", -" .++@+&=-;>,+@')!++@++. ", -" .@@@@%)%@%)@*~)!@@@@@. ", -" .++@++@'$=-+@+)!++@++. ", -" .++@++@{;>,+@+)!++@++. ", -" .@@@@@@@@%)@@@)!@@@@@. ", -" .++@+$)$+%)+@+)!++@++. ", -" .++@+'>,$=-+#$)>$+@++. ", -" .@@@@@#%%%#@#%%%%@@@@. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" ...................... ", -" ", -" ", -" "}; diff --git a/calendar/gui/popup-menu.c b/calendar/gui/popup-menu.c deleted file mode 100644 index a90c38d490..0000000000 --- a/calendar/gui/popup-menu.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Popup menu utilities for gncal - * - * Copyright (C) 1998 The Free Software Foundation - * - * Author: Federico Mena - */ - -#include -#include -#include "popup-menu.h" -#include "../../e-util/e-gui-utils.h" - - -void -popup_menu (struct menu_item *items, int nitems, GdkEventButton *event) -{ - GtkWidget *menu; - GtkWidget *item; - int i; - - menu = gtk_menu_new (); - - /* Make sure the menu is destroyed when it disappears. */ - e_auto_kill_popup_menu_on_hide (GTK_MENU (menu)); - - for (i = 0; i < nitems; i++) { - if (items[i].text) { - item = gtk_menu_item_new_with_label (_(items[i].text)); - gtk_signal_connect (GTK_OBJECT (item), "activate", - items[i].callback, - items[i].data); - gtk_widget_set_sensitive (item, items[i].sensitive); - } else - item = gtk_menu_item_new (); - - gtk_widget_show (item); - gtk_menu_append (GTK_MENU (menu), item); - } - - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); -} diff --git a/calendar/gui/popup-menu.h b/calendar/gui/popup-menu.h deleted file mode 100644 index a4590dbb98..0000000000 --- a/calendar/gui/popup-menu.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Popup menu utilities for gncal - * - * Copyright (C) 1998 The Free Software Foundation - * - * Author: Federico Mena - */ - -#ifndef POPUP_MENU_H -#define POPUP_MENU_H - -#include -#include - - -struct menu_item { - char *text; - GtkSignalFunc callback; - gpointer data; - int sensitive; -}; - -void popup_menu (struct menu_item *items, int nitems, GdkEventButton *event); - - -#endif diff --git a/calendar/gui/print.c b/calendar/gui/print.c deleted file mode 100644 index 1554be0b96..0000000000 --- a/calendar/gui/print.c +++ /dev/null @@ -1,1313 +0,0 @@ -/* Evolution calendar - Print support - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Michael Zucchi - * Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "calendar-commands.h" -#include "gnome-cal.h" -#include "print.h" - - - -/* copied from gnome-month-item.c this should be shared?? */ - -/* Number of days in a month, for normal and leap years */ -static const int days_in_month[2][12] = { - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -}; - -/* The weird month of September 1752, where 3 Sep through 13 Sep were eliminated due to the - * Gregorian reformation. - */ -static const int sept_1752[42] = { - 0, 0, 1, 2, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 -}; - -#define REFORMATION_DAY 639787 /* First day of the reformation, counted from 1 Jan 1 */ -#define MISSING_DAYS 11 /* They corrected out 11 days */ -#define THURSDAY 4 /* First day of reformation */ -#define SATURDAY 6 /* Offset value; 1 Jan 1 was a Saturday */ -#define SEPT_1752_START 2 /* Start day within month */ -#define SEPT_1752_END 20 /* End day within month */ - -struct pdinfo -{ - GList *slots; -}; - -struct psinfo -{ - GList *events; -}; - -struct ptinfo -{ - GList *todos; -}; - -struct einfo -{ - char *text; - time_t start; - time_t end; - int count; -}; - - -/* Returns the number of leap years since year 1 up to (but not including) the specified year */ -static int -leap_years_up_to (int year) -{ - return (year / 4 /* trivial leapness */ - - ((year > 1700) ? (year / 100 - 17) : 0) /* minus centuries since 1700 */ - + ((year > 1600) ? ((year - 1600) / 400) : 0)); /* plus centuries since 1700 divisible by 400 */ -} - -/* Returns whether the specified year is a leap year */ -static int -is_leap_year (int year) -{ - if (year <= 1752) - return !(year % 4); - else - return (!(year % 4) && (year % 100)) || !(year % 400); -} - -/* Returns the 1-based day number within the year of the specified date */ -static int -day_in_year (int day, int month, int year) -{ - int is_leap, i; - - is_leap = is_leap_year (year); - - for (i = 0; i < month; i++) - day += days_in_month [is_leap][i]; - - return day; -} - -/* Returns the day of the week (zero-based, zero is Sunday) for the specified date. For the days - * that were removed on the Gregorian reformation, it returns Thursday. - */ -static int -day_in_week (int day, int month, int year) -{ - int n; - - n = (year - 1) * 365 + leap_years_up_to (year - 1) + day_in_year (day, month, year); - - if (n < REFORMATION_DAY) - return (n - 1 + SATURDAY) % 7; - - if (n >= (REFORMATION_DAY + MISSING_DAYS)) - return (n - 1 + SATURDAY - MISSING_DAYS) % 7; - - return THURSDAY; -} - -/* Fills the 42-element days array with the day numbers for the specified month. Slots outside the - * bounds of the month are filled with zeros. The starting and ending indexes of the days are - * returned in the start and end arguments. - */ -static void -build_month (int month, int year, int start_on_monday, int *days, int *start, int *end) -{ - int i; - int d_month, d_week; - - /* Note that months are zero-based, so September is month 8 */ - - if ((year == 1752) && (month == 8)) { - memcpy (days, sept_1752, 42 * sizeof (int)); - - if (start) - *start = SEPT_1752_START; - - if (end) - *end = SEPT_1752_END; - - return; - } - - for (i = 0; i < 42; i++) - days[i] = 0; - - d_month = days_in_month[is_leap_year (year)][month]; - d_week = day_in_week (1, month, year); - - if (start_on_monday) - d_week = (d_week + 6) % 7; - - for (i = 0; i < d_month; i++) - days[d_week + i] = i + 1; - - if (start) - *start = d_week; - - if (end) - *end = d_week + d_month - 1; -} - - -enum align_box { - ALIGN_LEFT=1, - ALIGN_RIGHT, - ALIGN_CENTRE, - ALIGN_BORDER= 1<<8 -}; - -/* width = width of border, -'ve is no border - fillcolour = shade of fill, -'ve is no fill */ -static void -print_border(GnomePrintContext *pc, double l, double r, double t, double b, double width, double fillcolour) -{ - int i; - gnome_print_gsave (pc); - if (fillcolour<0.0) - i=1; - else - i=0; - for (;i<2;i++) { - gnome_print_moveto(pc, l, t); - gnome_print_lineto(pc, l, b); - gnome_print_lineto(pc, r, b); - gnome_print_lineto(pc, r, t); - gnome_print_lineto(pc, l, t); - if (i==0) { - gnome_print_setrgbcolor(pc, fillcolour, fillcolour, fillcolour); - gnome_print_fill(pc); - if (width<0.0) - i=2; - } else { - gnome_print_setrgbcolor(pc, 0, 0, 0); - gnome_print_setlinewidth(pc, width); - gnome_print_stroke(pc); - } - } - gnome_print_grestore (pc); -} - -/* outputs 1 line of aligned text in a box */ -static void -print_text(GnomePrintContext *pc, GnomeFont *font, const char *text, enum align_box align, double l, double r, double t, double b) -{ - double w, x; - gnome_print_gsave (pc); - w = gnome_font_get_width_string(font, text); - switch (align&3) { - default: - case ALIGN_LEFT: - x = l; - break; - case ALIGN_RIGHT: - x = l+(r-l)-w-2; - break; - case ALIGN_CENTRE: - x = l+((r-l)-w)/2; - break; - } - gnome_print_moveto(pc, x, t-font->size); - gnome_print_setfont(pc, font); - gnome_print_setrgbcolor (pc, 0,0,0); - gnome_print_show(pc, text); - gnome_print_grestore (pc); -} - -/* gets/frees the font for you, as a bold font */ -static void -print_text_size(GnomePrintContext *pc, double size, const char *text, enum align_box align, double l, double r, double t, double b) -{ - GnomeFont *font; - - font = gnome_font_new_closest ("Times", GNOME_FONT_BOLD, 0, size); - print_text(pc, font, text, align, l, r, t, b); - gtk_object_unref (GTK_OBJECT (font)); -} - -static void -titled_box(GnomePrintContext *pc, const char *text, GnomeFont *font, enum align_box align, double *l, double *r, double *t, double *b, double linewidth) -{ - if (align&ALIGN_BORDER) { - gnome_print_gsave(pc); - print_border(pc, *l, *r, *t, *t-font->size-font->size*0.4, linewidth, 0.9); - print_border(pc, *l, *r, *t-font->size-font->size*0.4, *b, linewidth, -1.0); - gnome_print_grestore(pc); - *l+=2; - *r-=2; - *b+=2; - } - print_text(pc, font, text, align, *l, *r, *t, *b); - *t-=font->size*1.4; -} - -enum datefmt { - DATE_MONTH = 1 << 0, - DATE_DAY = 1 << 1, - DATE_DAYNAME = 1 << 2, - DATE_YEAR = 1 << 3 -}; - -static char *days[] = { - N_("1st"), N_("2nd"), N_("3rd"), N_("4th"), N_("5th"), - N_("6th"), N_("7th"), N_("8th"), N_("9th"), N_("10th"), - N_("11th"), N_("12th"), N_("13th"), N_("14th"), N_("15th"), - N_("16th"), N_("17th"), N_("18th"), N_("19th"), N_("20th"), - N_("21st"), N_("22nd"), N_("23rd"), N_("24th"), N_("25th"), - N_("26th"), N_("27th"), N_("28th"), N_("29th"), N_("30th"), - N_("31st") -}; - -/* - format the date 'nicely' and consistently for various headers -*/ -static char * -format_date(time_t time, int flags, char *buffer, int bufflen) -{ - char fmt[64]; - struct tm tm; - - tm = *localtime(&time); - fmt[0] = 0; - if (flags & DATE_DAYNAME) { - strcat(fmt, "%A"); - } - if (flags & DATE_DAY) { - if (flags & DATE_DAYNAME) - strcat(fmt, " "); - strcat(fmt, gettext(days[tm.tm_mday-1])); - } - if (flags & DATE_MONTH) { - if (flags & (DATE_DAY|DATE_DAYNAME)) - strcat(fmt, " "); - strcat(fmt, "%B"); - if ((flags & (DATE_DAY|DATE_YEAR)) == (DATE_DAY|DATE_YEAR)) - strcat(fmt, ","); - } - if (flags & DATE_YEAR) { - if (flags & (DATE_DAY|DATE_DAYNAME|DATE_MONTH)) - strcat(fmt, " "); - strcat(fmt, "%Y"); - } - strftime(buffer, bufflen, fmt, &tm); - return buffer; -} - - -/* - print out the month small, embolden any days with events. -*/ -static void -print_month_small (GnomePrintContext *pc, GnomeCalendar *gcal, - time_t month, double left, double right, double top, double bottom, - int titleflags, time_t greystart, time_t greyend, int bordertitle) -{ - GnomeFont *font, *font_bold, *font_normal; - time_t now, next; - int x, y; - int days[42]; - int day; - char buf[100]; - struct tm tm; - double xpad, ypad, size; - char *daynames[] = { _("Su"), _("Mo"), _("Tu"), _("We"), _("Th"), _("Fr"), _("Sa") }; - - xpad = (right-left)/7; - ypad = (top-bottom)/8.3; - if (xpad>ypad) - size=ypad; - else - size=xpad; - - size = (xpad+ypad)/3.0; - - tm = *localtime (&month); - - /* get month days */ - build_month(tm.tm_mon, tm.tm_year+1900, week_starts_on_monday, days, 0, 0); - - /* build day-busy bits */ - now = time_month_begin(month); - - /* get title */ - format_date(month, titleflags, buf, 100); - font = gnome_font_new_closest ("Times", GNOME_FONT_BOLD, 1, size*1.2); /* title font */ - if (bordertitle) - print_border(pc, - left, left+7*xpad, top, top-font->size*1.3, - 1.0, 0.9); - print_text(pc, font, buf, ALIGN_CENTRE, - left, left+7*xpad, top, top - font->size); - gtk_object_unref (GTK_OBJECT (font)); - - font_normal = gnome_font_new_closest ("Times", GNOME_FONT_BOOK, 0, size); - font_bold = gnome_font_new_closest ("Times", GNOME_FONT_BOLD, 0, size); - - gnome_print_setrgbcolor (pc, 0,0,0); - for (x=0;x<7;x++) { - print_text(pc, font_bold, daynames[(week_starts_on_monday?x+1:x)%7], ALIGN_CENTRE, - left+x*xpad, left+(x+1)*xpad, bottom+7*ypad, bottom+7*ypad-font_bold->size); - } - - for (y=0;y<6;y++) { - for (x=0;x<7;x++) { - day = days[y*7+x]; - if (day!=0) { - GList *uids; - - sprintf(buf, "%d", day); - - /* this is a slow messy way to do this ... but easy ... */ - uids = cal_client_get_objects_in_range (gcal->client, CALOBJ_TYPE_EVENT, now, time_day_end (now)); - font = uids ? font_bold : font_normal; - cal_obj_uid_list_free (uids); - - next = time_add_day(now, 1); - if ((now>=greystart && now=now && greystartsize-ypad*0.15, - bottom+(5-y)*ypad-ypad*0.15, - -1.0, 0.75); - } - print_text(pc, font, buf, ALIGN_RIGHT, - left+x*xpad, left+(x+1)*xpad, bottom+(5-y)*ypad+font->size, bottom+(5-y)*ypad); - now = next; - } - } - } - gtk_object_unref (GTK_OBJECT (font_normal)); - gtk_object_unref (GTK_OBJECT (font_bold)); -} - - - -/* wraps text into the print context, not taking up more than its allowed space */ -static double -bound_text(GnomePrintContext *pc, GnomeFont *font, char *text, double left, double right, double top, double bottom, double indent) -{ - double maxwidth = right-left; - double width; - char *p; - char *wordstart; - int c; - char *outbuffer, *o, *outbuffendmarker; - int outbufflen; - int dump=0; - int first=1; - - g_return_val_if_fail(text!=NULL, top); - - if (topsize; - gnome_print_setfont (pc, font); - - width=0; - p = text; - wordstart = outbuffer; - o = outbuffer; - while ((c=*p)) { - if (c=='\n') { - wordstart=o; - dump=1; - } else { - /* grow output buffer if required */ - if (o>=outbuffendmarker) { - char *newbuf; - outbufflen*=2; - newbuf = g_realloc(outbuffer, outbufflen); - o = newbuf+(o-outbuffer); - wordstart = newbuf+(o-outbuffer); - outbuffer = newbuf; - outbuffendmarker = outbuffer+outbufflen-2; - } - *o++=c; - if (c==' ') - wordstart = o; - width+=gnome_font_get_width(font, c); - if (width>maxwidth) - dump=1; - else - dump=0; - } - if (dump) { - if (wordstart==outbuffer) - wordstart=o; - c=*wordstart; - *wordstart=0; - gnome_print_moveto(pc, left, top); - gnome_print_show(pc, outbuffer); - *wordstart=c; - memcpy(outbuffer, wordstart, o-wordstart); - width = gnome_font_get_width_string_n(font, outbuffer, o-wordstart); - o=outbuffer+(o-wordstart); - wordstart = outbuffer; - top -= font->size; - if (topsize; - } - g_free(outbuffer); - return top; -} - -/* - * Print Day Details - */ -static gboolean -print_day_details_cb (CalComponent *comp, time_t istart, time_t iend, gpointer data) -{ - CalComponentText text; - GList *l, *col = NULL; - struct pdinfo *pdi = (struct pdinfo *)data; - struct einfo *ei; - - ei = g_new (struct einfo, 1); - - cal_component_get_summary (comp, &text); - ei->text = g_strdup (text.value); - - ei->start = istart; - ei->end = iend; - ei->count = 0; - - for (l = pdi->slots; l; l = l->next) { - struct einfo *testei; - - col = (GList *)l->data; - testei = (struct einfo *)col->data; - - if (ei->start >= testei->end) { - col = g_list_prepend (col, ei); - l->data = col; - return TRUE; - } - - testei->count++; - ei->count++; - } - - col = NULL; - col = g_list_prepend (col, ei); - pdi->slots = g_list_append (pdi->slots, col); - - return TRUE; -} - -static void -print_day_details (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence, - double left, double right, double top, double bottom) -{ - struct pdinfo pdi; - time_t start, end; - GList *l; - int num_slots, i; - GnomeFont *font_hour, *font_minute, *font_summary; - double yinc, y, yend, x, xend; - double width=40, slot_width; - char buf[20]; - - yinc = (top-bottom)/24; - - /* fill static detail */ - font_hour = gnome_font_new_closest ("Times", GNOME_FONT_BOLD, 0, yinc/2); - font_minute = gnome_font_new_closest ("Times", GNOME_FONT_BOLD, 0, yinc/3); - font_summary = gnome_font_new_closest ("Times", GNOME_FONT_BOOK, 0, yinc/3); - - gnome_print_setrgbcolor (pc, 0, 0, 0); - - /* internal lines */ - gnome_print_setlinewidth(pc, 0.0); - gnome_print_moveto(pc, left+width, bottom); - gnome_print_lineto(pc, left+width, top); - gnome_print_stroke (pc); - - for (i=0;i<24;i++) { - y = top - yinc*(i+1); - print_border(pc, left+1, left+width-1, y, y+yinc-1, -1.0, 0.9); - gnome_print_setrgbcolor (pc, 0, 0, 0); - - /* the hour label/minute */ - sprintf(buf, "%d", i); - print_text(pc, font_hour, buf, ALIGN_RIGHT, left, left+width/2, y+yinc, y); - switch(i) { - case 12: sprintf(buf, _("pm")); break; - case 0: sprintf(buf, _("am")); break; - default: sprintf(buf, "00"); break; - } - print_text(pc, font_minute, buf, ALIGN_LEFT, left+width/2, left+width/2, y+yinc, y); - - /* internal lines */ - gnome_print_moveto(pc, left+width, y); - gnome_print_lineto(pc, right, y); - gnome_print_stroke (pc); - gnome_print_moveto(pc, left+width/2, y+yinc/2); - gnome_print_lineto(pc, right, y+yinc/2); - gnome_print_stroke (pc); - - } - - start = time_day_begin(whence); - end = time_day_end(start); - - cal_client_generate_instances (gcal->client, CALOBJ_TYPE_EVENT, start, end, - print_day_details_cb, &pdi); - - num_slots = g_list_length (pdi.slots); - slot_width = (right-left-width)/num_slots; - - for (i = num_slots, l = pdi.slots; l; i--, l = l->next) { - GList *e = (GList *)l->data; - - for (; e; e = e->next) { - struct einfo *ei = (struct einfo *)e->data; - - y = top - (top - bottom) * (ei->start - start) / (end - start) - 1; - yend = top - (top - bottom) * (ei->end - start) / (end - start) + 1; - x = left + width + slot_width * (num_slots - i); - - if (num_slots > 0) - x++; - - if (i == 0) - xend = x + (num_slots - ei->count) * slot_width - 2; - else - xend = x + slot_width - 2; - - print_border (pc, x, xend, y, yend, 0.0, 0.9); - - bound_text (pc, font_summary, ei->text, x, xend, y, yend, 0); - - g_free (ei); - } - g_list_free (e); - } - g_list_free (pdi.slots); - - print_border (pc, left, right, top, bottom, 1.0, -1.0); - - gtk_object_unref (GTK_OBJECT (font_hour)); - gtk_object_unref (GTK_OBJECT (font_minute)); - gtk_object_unref (GTK_OBJECT (font_summary)); -} - -/* - * Print Day Summary - */ -#if 0 -#define TIME_FMT "%X" -#else -#define TIME_FMT "%l:%M%p" -#endif - -static gboolean -print_day_summary_cb (CalComponent *comp, time_t istart, time_t iend, gpointer data) -{ - CalComponentText text; - struct psinfo *psi = (struct psinfo *)data; - struct einfo *ei; - - ei = g_new (struct einfo, 1); - - cal_component_get_summary (comp, &text); - ei->text = g_strdup (text.value); - - ei->start = istart; - ei->end = iend; - ei->count = 0; - - g_list_append (psi->events, ei); - - return TRUE; -} - -static void -print_day_summary (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence, - double left, double right, double top, double bottom, - double size, int totime, int titleformat) -{ - struct psinfo psi; - time_t start, end; - GList *l; - GnomeFont *font_summary; - double y, yend, x, xend, inc, incsmall; - char buf[100]; - double margin; - struct tm tm; - - /* fill static detail */ - font_summary = gnome_font_new_closest ("Times", GNOME_FONT_BOOK, 0, size); - - gnome_print_setfont (pc, font_summary); - - start = time_day_begin(whence); - end = time_day_end(start); - - tm = *localtime(&start); - - format_date(start, titleformat, buf, 100); - titled_box (pc, buf, font_summary, ALIGN_RIGHT | ALIGN_BORDER, - &left, &right, &top, &bottom, 0.0); - - cal_client_generate_instances (gcal->client, CALOBJ_TYPE_EVENT, start, end, - print_day_summary_cb, &psi); - inc = size*0.3; - incsmall = size*0.2; - - y = top-inc; - yend = bottom-incsmall; - - /* do a good rough approximation of the 'widest' time */ - tm.tm_year = 2000; - tm.tm_mon = 12; - tm.tm_mday = 22; - tm.tm_sec = 22; - tm.tm_min = 22; - tm.tm_hour = 23; - strftime(buf, 100, TIME_FMT, &tm); - margin = gnome_font_get_width_string(font_summary, buf); - - for (l = psi.events; l; l = l->next) { - struct einfo *ei = (struct einfo *)l->data; - - x = left + incsmall; - xend = right - inc; - - if (y - font_summary->size < bottom) - break; - - tm = *localtime (&ei->start); - strftime (buf, 100, TIME_FMT, &tm); - gnome_print_moveto (pc, x + (margin - - gnome_font_get_width_string (font_summary, buf)), - y - font_summary->size); - gnome_print_show (pc, buf); - - if (totime) { - tm = *localtime (&ei->end); - strftime (buf, 100, TIME_FMT, &tm); - gnome_print_moveto (pc, - (x + margin + inc - + (margin - - gnome_font_get_width_string (font_summary, buf))), - y - font_summary->size); - gnome_print_show (pc, buf); - - y = bound_text (pc, font_summary, ei->text, - x + margin * 2 + inc * 2, xend, - y, yend, 0); - } else { - /* we also indent back after each time is printed */ - y = bound_text (pc, font_summary, ei->text, - x + margin + inc, xend, - y, yend, -margin + inc); - } - - y += font_summary->size - inc; - - g_free (ei); - } - g_list_free (psi.events); - - gtk_object_unref (GTK_OBJECT (font_summary)); -} - -static void -print_week_summary (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence, - double left, double right, double top, double bottom) -{ - double y, l, r, t, b; - time_t now; - int i; - - l = left; - r = (right-left)/2+left; - t = top; - y = (top-bottom)/3; - b = top-y; - now = time_week_begin(whence); /* returns sunday, we need monday */ - now = time_add_day(now, 1); - for (i = 0; i < 7; i++) { - print_day_summary (pc, gcal, now, l, r, t, b, - 10, TRUE, DATE_DAY | DATE_DAYNAME | DATE_MONTH); - now = time_add_day (now, 1); - switch (i) { - case 5: - y /= 2.0; - b += y; - case 0: - case 1: - case 3: - case 4: - t -= y; - b -= y; - break; - case 2: - l = r; - r = right; - t = top; - b = t-y; - break; - case 6: - break; - } - } -} - -static void -print_year_summary (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence, - double left, double right, double top, double bottom, int morerows) -{ - double y, x, l, r, t, b; - time_t now; - int xx, yy, rows, cols; - - l = left; - t = top; - if (morerows) { - rows=4; - cols=3; - } else { - rows=3; - cols=4; - } - y = (top-bottom)/rows; - x = (right-left)/cols; - r = l+x; - b = top-y; - now = time_year_begin(whence); - for (yy = 0; yy < rows; yy++) { - t = top - y * yy; - b = t - y; - for (xx = 0; xx < cols; xx++) { - l = left + x * xx; - r = l + x; - print_month_small (pc, gcal, now, - l + 8, r - 8, t - 8, b + 8, DATE_MONTH, 0, 0, TRUE); - now = time_add_month (now, 1); - } - } -} - -static void -print_month_summary (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence, - double left, double right, double top, double bottom) -{ - time_t now, today; - int days[42]; - int day; - struct tm tm; - int x, y; - char buf[100]; - GnomeFont *font_days; - - now = time_month_begin(whence); - tm = *localtime (&now); - - /* get month days */ - build_month(tm.tm_mon, tm.tm_year+1900, week_starts_on_monday, days, 0, 0); - - /* a little margin */ - top -= 4; - - /* do day names ... */ - font_days = gnome_font_new_closest ("Times", GNOME_FONT_BOLD, 0, 10); - gnome_print_setfont(pc, font_days); - for (x=0;x<7;x++) { - today = time_add_day(now, days[6+x]); - format_date(today, DATE_DAYNAME, buf, 100); - print_text(pc, font_days, buf, ALIGN_CENTRE, - (right-left)*x/7+left, (right-left)*(x+1)/7+left, - top, top-font_days->size); - } - top -= font_days->size*1.5; - gtk_object_unref (GTK_OBJECT (font_days)); - - for (y=0;y<6;y++) { - for (x=0;x<7;x++) { - day = days[y*7+x]; - if (day!=0) { - print_day_summary (pc, gcal, now, - (right-left)*x/7+left, - (right-left)*(x+1)/7+left, - top - (top-bottom)*y/6, - top - (top-bottom)*(y+1)/6, 6, FALSE, - day==1?(DATE_DAY|DATE_MONTH):DATE_DAY); - now = time_add_day(now, 1); - } - } - } -} - -/* - * Print to do details - */ -static gboolean -print_todo_details_cb (CalComponent *comp, time_t istart, time_t iend, gpointer data) -{ - CalComponentText text; - struct ptinfo *pti = (struct ptinfo *)data; - struct einfo *ei; - - ei = g_new0 (struct einfo, 1); - - cal_component_get_summary (comp, &text); - ei->text = g_strdup (text.value); - - g_list_append (pti->todos, ei); - - return TRUE; -} - -static void -print_todo_details (GnomePrintContext *pc, GnomeCalendar *gcal, time_t start, time_t end, - double left, double right, double top, double bottom) -{ - struct ptinfo pti; - GList *l; - GnomeFont *font_summary; - double y, yend, x, xend; - - font_summary = gnome_font_new_closest ("Times", GNOME_FONT_BOOK, 0, 10); - - gnome_print_setrgbcolor (pc, 0, 0, 0); - gnome_print_setlinewidth (pc, 0.0); - - titled_box (pc, _("TODO Items"), font_summary, - ALIGN_CENTRE | ALIGN_BORDER, &left, &right, &top, &bottom, 1.0); - - y = top - 3; - yend = bottom - 2; - - cal_client_generate_instances (gcal->client, CALOBJ_TYPE_TODO, start, end, - print_todo_details_cb, &pti); - - for (l = pti.todos; l; l = l->next) { - struct einfo *ei = (struct einfo *)l->data; - - x = left; - xend = right-2; - - if (y < bottom) - break; - - y = bound_text (pc, font_summary, ei->text, x + 2, xend, y, yend, 0); - y += font_summary->size; - gnome_print_moveto (pc, x, y - 3); - gnome_print_lineto (pc, xend, y - 3); - gnome_print_stroke (pc); - y -= 3; - - g_free (ei); - } - g_list_free (pti.todos); - - gtk_object_unref (GTK_OBJECT (font_summary)); -} - -#if 0 - -static GnomePrintContext * -print_context (int preview, char *paper) -{ - GtkWidget *toplevel, *canvas, *sw; - GnomePrinter *printer; - GnomePrintContext *pc; - - if (preview) { - gtk_widget_push_colormap (gdk_rgb_get_cmap ()); - gtk_widget_push_visual (gdk_rgb_get_visual ()); - - toplevel = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_set_usize (toplevel, 700, 700); - sw = gtk_scrolled_window_new (NULL, NULL); - canvas = gnome_canvas_new_aa (); - gtk_container_add (GTK_CONTAINER (toplevel), sw); - gtk_container_add (GTK_CONTAINER (sw), canvas); - - gnome_canvas_set_pixels_per_unit((GnomeCanvas *)canvas, 1); - - pc = gnome_print_preview_new ((GnomeCanvas *)canvas, paper); - - gtk_widget_show_all (toplevel); - - gtk_widget_pop_visual (); - gtk_widget_pop_colormap (); - } else { - printer = gnome_printer_dialog_new_modal (); - - if (!printer) - return NULL; - - pc = gnome_print_context_new_with_paper_size (printer, paper); - } - - return pc; -} - -#endif - -/* Value for the PrintView enum */ -static const int print_view_map[] = { - PRINT_VIEW_DAY, - PRINT_VIEW_WEEK, - PRINT_VIEW_MONTH, - PRINT_VIEW_YEAR, - -1 -}; - -/* Creates the range selector widget for printing a calendar */ -static GtkWidget * -range_selector_new (GtkWidget *dialog, time_t at, int *view) -{ - GtkWidget *box; - GtkWidget *radio; - GSList *group; - char text[1024]; - struct tm tm; - time_t week_begin, week_end; - struct tm week_begin_tm, week_end_tm; - - box = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); - - tm = *localtime (&at); - - /* Day */ - - strftime (text, sizeof (text), _("Current day (%a %b %d %Y)"), &tm); - radio = gtk_radio_button_new_with_label (NULL, text); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_box_pack_start (GTK_BOX (box), radio, FALSE, FALSE, 0); - - /* Week */ - - week_begin = time_week_begin (at); - week_end = time_add_day (time_week_end (at), -1); - - week_begin_tm = *localtime (&week_begin); - week_end_tm = *localtime (&week_end); - - /* FIXME: how to make this localization-friendly? */ - - if (week_begin_tm.tm_mon == week_end_tm.tm_mon) { - char month[128]; - char day1[128]; - char day2[128]; - - strftime (month, sizeof (month), _("%a"), &week_begin_tm); - strftime (day1, sizeof (day1), _("%b"), &week_begin_tm); - strftime (day2, sizeof (day2), _("%b"), &week_end_tm); - - g_snprintf (text, sizeof (text), _("Current week (%s %s %d - %s %d %d)"), - day1, month, week_begin_tm.tm_mday, - day2, week_end_tm.tm_mday, - week_begin_tm.tm_year + 1900); - } else { - char month1[128]; - char month2[128]; - char day1[128]; - char day2[128]; - - strftime (month1, sizeof (month1), _("%a"), &week_begin_tm); - strftime (month2, sizeof (month2), _("%a"), &week_end_tm); - strftime (day1, sizeof (day1), _("%b"), &week_begin_tm); - strftime (day2, sizeof (day2), _("%b"), &week_end_tm); - - if (week_begin_tm.tm_year == week_end_tm.tm_year) - g_snprintf (text, sizeof (text), - _("Current week (%s %s %d - %s %s %d %d)"), - day1, month1, week_begin_tm.tm_mday, - day2, month2, week_end_tm.tm_mday, - week_begin_tm.tm_year + 1900); - else - g_snprintf (text, sizeof (text), - _("Current week (%s %s %d %d - %s %s %d %d)"), - day1, month1, week_begin_tm.tm_mday, - week_begin_tm.tm_year + 1900, - day2, month2, week_end_tm.tm_mday, - week_end_tm.tm_year + 1900); - } - - radio = gtk_radio_button_new_with_label (group, text); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_box_pack_start (GTK_BOX (box), radio, FALSE, FALSE, 0); - - /* Month */ - - strftime (text, sizeof (text), _("Current month (%a %Y)"), &tm); - radio = gtk_radio_button_new_with_label (group, text); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_box_pack_start (GTK_BOX (box), radio, FALSE, FALSE, 0); - - /* Year */ - - strftime (text, sizeof (text), _("Current year (%Y)"), &tm); - radio = gtk_radio_button_new_with_label (group, text); - group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio)); - gtk_box_pack_start (GTK_BOX (box), radio, FALSE, FALSE, 0); - - /* Select default */ - - e_dialog_widget_hook_value (dialog, radio, view, (gpointer) print_view_map); - - gtk_widget_show_all (box); - return box; -} - -void -print_calendar (GnomeCalendar *gcal, gboolean preview, time_t at, PrintView default_view) -{ - GnomePrinter *printer; - GnomePrintMaster *gpm; - GnomePrintContext *pc; - int copies, collate; - const GnomePaper *paper_info; - double l, r, t, b, todo, header; - char buf[100]; - time_t when; - - g_return_if_fail (gcal != NULL); - g_return_if_fail (GNOME_IS_CALENDAR (gcal)); - - printer = NULL; - copies = 1; - collate = FALSE; - - if (!preview) { - GtkWidget *gpd; - GtkWidget *range; - int view; - - gpd = gnome_print_dialog_new (_("Print Calendar"), - GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES); - - view = (int) default_view; - range = range_selector_new (gpd, at, &view); - gnome_print_dialog_construct_range_custom (GNOME_PRINT_DIALOG (gpd), range); - - gnome_dialog_set_default (GNOME_DIALOG (gpd), GNOME_PRINT_PRINT); - - /* Run dialog */ - - switch (gnome_dialog_run (GNOME_DIALOG (gpd))) { - case GNOME_PRINT_PRINT: - break; - - case GNOME_PRINT_PREVIEW: - preview = TRUE; - break; - - case -1: - return; - - default: - gnome_dialog_close (GNOME_DIALOG (gpd)); - return; - } - - e_dialog_get_values (gpd); - default_view = (PrintView) view; - - gnome_print_dialog_get_copies (GNOME_PRINT_DIALOG (gpd), &copies, &collate); - printer = gnome_print_dialog_get_printer (GNOME_PRINT_DIALOG (gpd)); - - gnome_dialog_close (GNOME_DIALOG (gpd)); - } - - /* FIXME: allow configuration of paper size */ - - gpm = gnome_print_master_new (); - - paper_info = gnome_paper_with_name (gnome_paper_name_default ()); - gnome_print_master_set_paper (gpm, paper_info); - - if (printer) - gnome_print_master_set_printer (gpm, printer); - - gnome_print_master_set_copies (gpm, copies, collate); - - pc = gnome_print_master_get_context (gpm); - - l = gnome_paper_lmargin (paper_info); - r = gnome_paper_pswidth (paper_info) - gnome_paper_rmargin (paper_info); - t = gnome_paper_psheight (paper_info) - gnome_paper_tmargin (paper_info); - b = gnome_paper_bmargin (paper_info); - - /* depending on the view, do a different output */ - switch (default_view) { - case PRINT_VIEW_DAY: { - int i, days = 1; - - for (i = 0; i < days; i++) { - todo = ((r - l) / 5) * 4 + l; - header = t - 70; - print_todo_details (pc, gcal, 0, INT_MAX, todo, r, header, b); - print_day_details (pc, gcal, at, l, todo - 2.0, header, b); - - print_border (pc, l, r, t, header + 2.0, 1.0, 0.9); - - print_month_small (pc, gcal, at, r - 190, r - 104, t - 4, - header + 8, DATE_MONTH | DATE_YEAR, at, at, FALSE); - print_month_small (pc, gcal, time_add_month (at, 1), r - 90, r - 4, t - 4, - header + 8, DATE_MONTH | DATE_YEAR, 0, 0, FALSE); - - format_date (at, DATE_DAY | DATE_MONTH | DATE_YEAR, buf, 100); - print_text_size (pc, 24, buf, ALIGN_LEFT, l + 3, todo, t - 3, header); - - format_date (at, DATE_DAYNAME, buf, 100); - print_text_size (pc, 18, buf, ALIGN_LEFT, l + 3, todo, t - 27 - 4, header); - gnome_print_showpage (pc); - at = time_add_day (at, 1); - } - break; - } - - case PRINT_VIEW_WEEK: - header = t - 70; - print_week_summary (pc, gcal, at, l, r, header, b); - - /* more solid total outline */ - print_border (pc, l, r, header, b, 1.0, -1.0); - - /* header border */ - print_border (pc, l, r, t, header + 2.0, 1.0, 0.9); - - when = time_week_begin (at); - when = time_add_day (when, 1); - - print_month_small (pc, gcal, at, r - 90, r - 4, t - 4, - header + 8, DATE_MONTH | DATE_YEAR, when, time_add_week (when, 1), - FALSE); - print_month_small (pc, gcal, time_add_month (at, -1), r - 190, r - 104, t - 4, - header + 8, DATE_MONTH | DATE_YEAR, when, time_add_week (when, 1), - FALSE); - - format_date (when, DATE_DAY | DATE_MONTH | DATE_YEAR, buf, 100); - print_text_size (pc, 24, buf, ALIGN_LEFT, l + 3, r, t - 4, header); - - when = time_add_day (when, 6); - format_date (when, DATE_DAY | DATE_MONTH | DATE_YEAR, buf, 100); - print_text_size (pc, 24, buf, ALIGN_LEFT, l + 3, r, t - 24 - 3, header); - gnome_print_showpage (pc); - break; - - case PRINT_VIEW_MONTH: - header = t - 70; - gnome_print_rotate (pc, 90); - gnome_print_translate (pc, 0, -gnome_paper_pswidth (paper_info)); - /*print_month_summary(pc, cal, at, l, r, header, b);*/ - print_month_summary (pc, gcal, at, b, t, r - 70, l); - - print_border (pc, b, t, r, r - 72.0, 1.0, 0.9); - - print_month_small (pc, gcal, time_add_month (at, 1), - t - (t - b) / 7 + 2, t - 8, r - 4, r - 68, - DATE_MONTH | DATE_YEAR, 0, 0, FALSE); - print_month_small (pc, gcal, time_add_month (at, -1), - b + 8, b + (t - b) / 7 - 2, r - 4, r - 68, - DATE_MONTH | DATE_YEAR, 0, 0, FALSE); - - /* centered title */ - format_date (at, DATE_MONTH | DATE_YEAR, buf, 100); - print_text_size (pc, 24, buf, ALIGN_CENTRE, b + 3, t, r - 3, l); - gnome_print_showpage (pc); - break; - - case PRINT_VIEW_YEAR: -#if 0 - /* landscape */ - gnome_print_rotate(pc, 90); - gnome_print_translate(pc, 0, -gnome_paper_pswidth(paper_info)); - print_year_summary(pc, gcal, at, b, t, r-50, l, FALSE); - - /* centered title */ - format_date(at, DATE_YEAR, buf, 100); - print_text_size(pc, 24, buf, ALIGN_CENTRE, b+3, t, r-3, l); -#else - /* portrait */ - print_year_summary(pc, gcal, at, l, r, t-50, b, TRUE); - - /* centered title */ - format_date(at, DATE_YEAR, buf, 100); - print_text_size(pc, 24, buf, ALIGN_CENTRE, l+3, r, t-3, b); -#endif - gnome_print_showpage(pc); - break; - - default: - g_assert_not_reached (); - } - - gnome_print_master_close (gpm); - - if (preview) { - GnomePrintMasterPreview *gpmp; - - gpmp = gnome_print_master_preview_new (gpm, _("Print Preview")); - gtk_widget_show (GTK_WIDGET (gpmp)); - } else - gnome_print_master_print (gpm); - - gtk_object_unref (GTK_OBJECT (gpm)); -} diff --git a/calendar/gui/print.h b/calendar/gui/print.h deleted file mode 100644 index e88c4a8e01..0000000000 --- a/calendar/gui/print.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Evolution calendar - Print support - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Michael Zucchi - * Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef PRINT_H -#define PRINT_H - -#include "gnome-cal.h" - - - -typedef enum { - PRINT_VIEW_DAY, - PRINT_VIEW_WEEK, - PRINT_VIEW_MONTH, - PRINT_VIEW_YEAR -} PrintView; - -void print_calendar (GnomeCalendar *gcal, gboolean preview, time_t at, PrintView default_view); - - - -#endif diff --git a/calendar/gui/prop.c b/calendar/gui/prop.c deleted file mode 100644 index 2555059af8..0000000000 --- a/calendar/gui/prop.c +++ /dev/null @@ -1,938 +0,0 @@ -/* Calendar properties dialog box - * - * Copyright (C) 1998 the Free Software Foundation - * - * Authors: Miguel de Icaza - * Federico Mena - */ -#include -#ifdef HAVE_LANGINGO_H -#include -#else -#include -#endif -#include -#include "gnome-cal.h" -#include "gnome-month-item.h" -#include "calendar-commands.h" -#include "mark.h" - -/* These specify the page numbers in the preferences notebook */ -enum { - PROP_TIME_DISPLAY, - PROP_COLORS, - PROP_TODO, - PROP_ALARMS -}; - -static GtkWidget *prop_win; /* The preferences dialog */ - -/* Widgets for the time display page */ - -static GtkWidget *time_format_12; /* Radio button for 12-hour format */ -static GtkWidget *time_format_24; /* Radio button for 24-hour format */ -static GtkWidget *start_on_sunday; /* Check button for weeks starting on Sunday */ -static GtkWidget *start_on_monday; /* Check button for weeks starting on Monday */ -static GtkWidget *start_omenu; /* Option menu for start of day */ -static GtkWidget *end_omenu; /* Option menu for end of day */ -static GtkWidget *start_items[24]; /* Menu items for start of day menu */ -static GtkWidget *end_items[24]; /* Menu items for end of day menu */ - -/* Widgets for the colors page */ - -static GtkWidget *color_pickers[COLOR_PROP_LAST]; -static GnomeCanvasItem *month_item; - -/* Widgets for the todo page */ -static GtkWidget *due_date_show_button; - -static GtkWidget *todo_item_time_remaining_show_button; - -static GtkWidget *todo_item_highlight_overdue; -static GtkWidget *todo_item_highlight_not_due_yet; -static GtkWidget *todo_item_highlight_due_today; - -static GtkWidget *priority_show_button; - -/* Widgets for the alarm page */ -static GtkWidget *enable_display_beep; -static GtkWidget *to_cb; -static GtkWidget *to_spin; -static GtkWidget *snooze_cb; -static GtkWidget *snooze_spin; - -/* prototypes */ -#if 0 -static void prop_apply_alarms (void); -#endif -static void create_alarm_page (void); -static void to_cb_changed (GtkWidget* object, gpointer data); -static void snooze_cb_changed (GtkWidget* object, gpointer data); - -GtkWidget* make_spin_button (int val, int low, int high); -void ee_create_ae (GtkTable *table, char *str, CalendarAlarm *alarm, - enum AlarmType type, int y, gboolean sens, - GtkSignalFunc dirty_func); -void ee_store_alarm (CalendarAlarm *alarm, enum AlarmType type); - -/* Callback used when the property box is closed -- just sets the prop_win variable to null. */ -static int -prop_cancel (void) -{ - prop_win = NULL; - return FALSE; -} - -/* Returns the index of the active item in a menu */ -static int -get_active_index (GtkWidget *menu) -{ - GtkWidget *active; - - active = gtk_menu_get_active (GTK_MENU (menu)); - return GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (active))); -} - -/* Applies the settings in the time display page */ -static void -prop_apply_time_display (void) -{ - /* Day begin/end */ - - day_begin = get_active_index (gtk_option_menu_get_menu (GTK_OPTION_MENU (start_omenu))); - day_end = get_active_index (gtk_option_menu_get_menu (GTK_OPTION_MENU (end_omenu))); - gnome_config_set_int ("/calendar/Calendar/Day start", day_begin); - gnome_config_set_int ("/calendar/Calendar/Day end", day_end); - - /* Time format */ - - am_pm_flag = GTK_TOGGLE_BUTTON (time_format_12)->active; - gnome_config_set_bool ("/calendar/Calendar/AM PM flag", am_pm_flag); - - /* Week start */ - - week_starts_on_monday = GTK_TOGGLE_BUTTON (start_on_monday)->active; - gnome_config_set_bool ("/calendar/Calendar/Week starts on Monday", week_starts_on_monday); - - gnome_config_sync (); - time_format_changed (); -} - -/* Applies the settings in the colors page */ -static void -prop_apply_colors (void) -{ - int i; - char *cspec; - gushort r, g, b; - - for (i = 0; i < COLOR_PROP_LAST; i++) { - gnome_color_picker_get_i16 (GNOME_COLOR_PICKER (color_pickers[i]), &r, &g, &b, NULL); - color_props[i].r = r; - color_props[i].g = g; - color_props[i].b = b; - - cspec = build_color_spec (color_props[i].r, color_props[i].g, color_props[i].b); - gnome_config_set_string (color_props[i].key, cspec); - } - - gnome_config_sync (); - colors_changed (); -} -/* Applies the settings in the todo page (FIX THIS IF ITS NOT WRITTEN) */ -static void -prop_apply_todo(void) -{ - todo_show_due_date = GTK_TOGGLE_BUTTON (due_date_show_button)->active; - - todo_item_dstatus_highlight_overdue = GTK_TOGGLE_BUTTON(todo_item_highlight_overdue)->active; - todo_item_dstatus_highlight_not_due_yet = GTK_TOGGLE_BUTTON(todo_item_highlight_not_due_yet)->active; - todo_item_dstatus_highlight_due_today = GTK_TOGGLE_BUTTON(todo_item_highlight_due_today)->active; - - todo_show_priority = GTK_TOGGLE_BUTTON (priority_show_button)->active; - - todo_show_time_remaining = GTK_TOGGLE_BUTTON (todo_item_time_remaining_show_button)->active; - - /* storing the values */ - - gnome_config_set_bool("/calendar/Todo/show_time_remain", todo_show_time_remaining); - gnome_config_set_bool("/calendar/Todo/highlight_overdue", todo_item_dstatus_highlight_overdue); - - gnome_config_set_bool("/calendar/Todo/highlight_due_today", todo_item_dstatus_highlight_due_today); - - gnome_config_set_bool("/calendar/Todo/highlight_not_due_yet", todo_item_dstatus_highlight_not_due_yet); - gnome_config_set_bool("/calendar/Todo/show_due_date", todo_show_due_date); - gnome_config_set_bool("/calendar/Todo/show_priority", todo_show_priority); - /* need to sync our config changes. */ - gnome_config_sync (); - - /* apply the current changes */ - todo_properties_changed(); -} - - -/* Callback used when the Apply button is clicked. */ -static void -prop_apply (GtkWidget *w, int page) -{ - switch (page) { - case PROP_TIME_DISPLAY: - prop_apply_time_display (); - break; - - case PROP_COLORS: - prop_apply_colors (); - break; - - case PROP_TODO: - prop_apply_todo (); - break; - - case PROP_ALARMS: -#if 0 - prop_apply_alarms (); -#endif - break; - - case -1: - break; - - default: - g_warning ("We have a loose penguin!"); - g_assert_not_reached (); - } -} - -/* Notifies the property box that the data has changed */ -static void -prop_changed (void) -{ - gnome_property_box_changed (GNOME_PROPERTY_BOX (prop_win)); -} - -/* Builds and returns a two-element radio button group surrounded by a frame. The radio buttons are - * stored in the specified variables, and the first radio button's state is set according to the - * specified flag value. The buttons are connected to the prop_changed() function to update the property - * box's dirty state. - */ -static GtkWidget * -build_two_radio_group (char *title, - char *radio_1_title, GtkWidget **radio_1_widget, - char *radio_2_title, GtkWidget **radio_2_widget, - int radio_1_value) -{ - GtkWidget *frame; - GtkWidget *vbox; - - frame = gtk_frame_new (title); - - vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (frame), vbox); - - *radio_1_widget = gtk_radio_button_new_with_label (NULL, radio_1_title); - gtk_box_pack_start (GTK_BOX (vbox), *radio_1_widget, FALSE, FALSE, 0); - - *radio_2_widget = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (*radio_1_widget), - radio_2_title); - gtk_box_pack_start (GTK_BOX (vbox), *radio_2_widget, FALSE, FALSE, 0); - - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (*radio_1_widget), radio_1_value); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (*radio_2_widget), !radio_1_value); - - gtk_signal_connect (GTK_OBJECT (*radio_1_widget), "toggled", - (GtkSignalFunc) prop_changed, - NULL); - - return frame; -} - -/* Callback invoked when a menu item from the start/end time option menus is selected. It adjusts - * the other menu to the proper time, if needed. - */ -static void -hour_activated (GtkWidget *widget, gpointer data) -{ - int start, end; - - if (data == start_omenu) { - /* Adjust the end menu */ - - start = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (widget))); - end = get_active_index (gtk_option_menu_get_menu (GTK_OPTION_MENU (end_omenu))); - - if (end < start) - gtk_option_menu_set_history (GTK_OPTION_MENU (end_omenu), start); - } else if (data == end_omenu) { - /* Adjust the start menu */ - - end = GPOINTER_TO_INT (gtk_object_get_user_data (GTK_OBJECT (widget))); - start = get_active_index (gtk_option_menu_get_menu (GTK_OPTION_MENU (start_omenu))); - - if (start > end) - gtk_option_menu_set_history (GTK_OPTION_MENU (start_omenu), end); - } else - g_assert_not_reached (); - - gnome_property_box_changed (GNOME_PROPERTY_BOX (prop_win)); -} - -/* Builds an option menu of 24 hours */ -static GtkWidget * -build_hours_menu (GtkWidget **items, int active) -{ - GtkWidget *omenu; - GtkWidget *menu; - int i; - char buf[100]; - struct tm tm; - int am_pm_flag; - - omenu = gtk_option_menu_new (); - menu = gtk_menu_new (); - am_pm_flag = GTK_TOGGLE_BUTTON (time_format_12)->active; - - memset (&tm, 0, sizeof (tm)); - - for (i = 0; i < 24; i++) { - tm.tm_hour = i; - if (am_pm_flag) - strftime (buf, 100, "%I:%M %p", &tm); - else - strftime (buf, 100, "%H:%M", &tm); - - items[i] = gtk_menu_item_new_with_label (buf); - gtk_object_set_user_data (GTK_OBJECT (items[i]), GINT_TO_POINTER (i)); - gtk_signal_connect (GTK_OBJECT (items[i]), "activate", - (GtkSignalFunc) hour_activated, - omenu); - - gtk_menu_append (GTK_MENU (menu), items[i]); - gtk_widget_show (items[i]); - } - - gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu); - gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), active); - return omenu; -} - -/* Creates the time display page in the preferences dialog */ -static void -create_time_display_page (void) -{ - GtkWidget *table; - GtkWidget *vbox; - GtkWidget *frame; - GtkWidget *hbox2; - GtkWidget *hbox3; - GtkWidget *w; - - table = gtk_table_new (2, 2, FALSE); - gtk_container_set_border_width (GTK_CONTAINER (table), GNOME_PAD_SMALL); - gtk_table_set_row_spacings (GTK_TABLE (table), GNOME_PAD_SMALL); - gtk_table_set_col_spacings (GTK_TABLE (table), GNOME_PAD_SMALL); - gnome_property_box_append_page (GNOME_PROPERTY_BOX (prop_win), table, - gtk_label_new (_("Time display"))); - - /* Time format */ - - w = build_two_radio_group (_("Time format"), - _("12-hour (AM/PM)"), &time_format_12, - _("24-hour"), &time_format_24, - am_pm_flag); - gtk_table_attach (GTK_TABLE (table), w, - 0, 1, 0, 1, - GTK_EXPAND | GTK_FILL, - GTK_EXPAND | GTK_FILL, - 0, 0); - - /* Weeks start on */ - - w = build_two_radio_group (_("Weeks start on"), - _("Sunday"), &start_on_sunday, - _("Monday"), &start_on_monday, - !week_starts_on_monday); - gtk_table_attach (GTK_TABLE (table), w, - 0, 1, 1, 2, - GTK_EXPAND | GTK_FILL, - GTK_EXPAND | GTK_FILL, - 0, 0); - - /* Day range */ - - frame = gtk_frame_new (_("Day range")); - gtk_table_attach (GTK_TABLE (table), frame, - 1, 2, 0, 2, - GTK_EXPAND | GTK_FILL, - GTK_EXPAND | GTK_FILL, - 0, 0); - - vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL); - gtk_container_set_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL); - gtk_container_add (GTK_CONTAINER (frame), vbox); - - w = gtk_label_new (_("Please select the start and end hours you want\n" - "to be displayed in the day view and week view.\n" - "Times outside this range will not be displayed\n" - "by default.")); - gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.0); - gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); - - hbox2 = gtk_hbox_new (FALSE, GNOME_PAD); - gtk_box_pack_start (GTK_BOX (vbox), hbox2, FALSE, FALSE, 0); - - /* Day start */ - - hbox3 = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); - gtk_box_pack_start (GTK_BOX (hbox2), hbox3, FALSE, FALSE, 0); - - w = gtk_label_new (_("Day start:")); - gtk_box_pack_start (GTK_BOX (hbox3), w, FALSE, FALSE, 0); - - start_omenu = build_hours_menu (start_items, day_begin); - gtk_box_pack_start (GTK_BOX (hbox3), start_omenu, FALSE, FALSE, 0); - - /* Day end */ - - hbox3 = gtk_hbox_new (FALSE, GNOME_PAD_SMALL); - gtk_box_pack_start (GTK_BOX (hbox2), hbox3, FALSE, FALSE, 0); - - w = gtk_label_new (_("Day end:")); - gtk_box_pack_start (GTK_BOX (hbox3), w, FALSE, FALSE, 0); - - end_omenu = build_hours_menu (end_items, day_end); - gtk_box_pack_start (GTK_BOX (hbox3), end_omenu, FALSE, FALSE, 0); -} - -/* Called when the canvas for the month item is size allocated. We use this to change the canvas' - * scrolling region and the month item's size. - */ -static void -canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data) -{ - gnome_canvas_item_set (month_item, - "width", (double) (allocation->width - 1), - "height", (double) (allocation->height - 1), - NULL); - - gnome_canvas_set_scroll_region (GNOME_CANVAS (widget), - 0, 0, - allocation->width, allocation->height); -} - -/* Returns a color spec based on the color pickers */ -static char * -color_spec_from_picker (int num) -{ - gushort r, g, b; - - gnome_color_picker_get_i16 (GNOME_COLOR_PICKER (color_pickers[num]), &r, &g, &b, NULL); - - return build_color_spec (r, g, b); -} - -/* Callback used to query color information for the properties box */ -static char * -fetch_color_spec (ColorProp propnum, gpointer data) -{ - return color_spec_from_picker (propnum); -} - -/* Marks fake event days in the month item sample */ -static void -fake_mark_days (void) -{ - static int day_nums[] = { 1, 4, 8, 16, 17, 18, 20, 25, 28 }; /* some random days */ - int first_day_index; - int i; - - first_day_index = gnome_month_item_day2index (GNOME_MONTH_ITEM (month_item), 1); - - for (i = 0; i < (sizeof (day_nums) / sizeof (day_nums[0])); i++) - mark_month_item_index (GNOME_MONTH_ITEM (month_item), first_day_index + day_nums[i] - 1, - fetch_color_spec, NULL); -} - -/* Switches the month item to the current date and highlights the current day's number */ -static void -set_current_day (void) -{ - struct tm tm; - time_t t; - GnomeCanvasItem *item; - int day_index; - - /* Set the date */ - - t = time (NULL); - tm = *localtime (&t); - - gnome_canvas_item_set (month_item, - "year", tm.tm_year + 1900, - "month", tm.tm_mon, - NULL); - - /* Highlight current day */ - - day_index = gnome_month_item_day2index (GNOME_MONTH_ITEM (month_item), tm.tm_mday); - item = gnome_month_item_num2child (GNOME_MONTH_ITEM (month_item), GNOME_MONTH_ITEM_DAY_LABEL + day_index); - gnome_canvas_item_set (item, - "fill_color", color_spec_from_picker (COLOR_PROP_CURRENT_DAY_FG), - "fontset", CURRENT_DAY_FONTSET, - NULL); -} - -/* This is the version of a color spec query function that is appropriate for the preferences dialog */ -static char * -prop_color_func (ColorProp propnum, gpointer data) -{ - return color_spec_from_picker (propnum); -} - -/* Sets the colors of the month item to the current prerences */ -static void -reconfigure_month (void) -{ - colorify_month_item (GNOME_MONTH_ITEM (month_item), prop_color_func, NULL); - fake_mark_days (); - set_current_day (); - - /* Reset prelighting information */ - - month_item_prepare_prelight (GNOME_MONTH_ITEM (month_item), fetch_color_spec, NULL); -} - -/* Callback used when a color is changed */ -static void -color_set (void) -{ - reconfigure_month (); - prop_changed (); -} - -/* Creates the colors page in the preferences dialog */ -static void -create_colors_page (void) -{ - GtkWidget *frame; - GtkWidget *hbox; - GtkWidget *table; - GtkWidget *w; - int i; - - frame = gtk_frame_new (_("Colors for display")); - gtk_container_set_border_width (GTK_CONTAINER (frame), GNOME_PAD_SMALL); - gnome_property_box_append_page (GNOME_PROPERTY_BOX (prop_win), frame, - gtk_label_new (_("Colors"))); - - hbox = gtk_hbox_new (FALSE, GNOME_PAD); - gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD_SMALL); - gtk_container_add (GTK_CONTAINER (frame), hbox); - - table = gtk_table_new (COLOR_PROP_LAST, 2, FALSE); - gtk_table_set_col_spacings (GTK_TABLE (table), GNOME_PAD_SMALL); - gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0); - - /* Create the color pickers */ - - for (i = 0; i < COLOR_PROP_LAST; i++) { - /* Label */ - - w = gtk_label_new (_(color_props[i].label)); - gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (table), w, - 0, 1, i, i + 1, - GTK_FILL, 0, - 0, 0); - - /* Color picker */ - - color_pickers[i] = gnome_color_picker_new (); - gnome_color_picker_set_title (GNOME_COLOR_PICKER (color_pickers[i]), _(color_props[i].label)); - gnome_color_picker_set_i16 (GNOME_COLOR_PICKER (color_pickers[i]), - color_props[i].r, color_props[i].g, color_props[i].b, 0); - gtk_table_attach (GTK_TABLE (table), color_pickers[i], - 1, 2, i, i + 1, - 0, 0, - 0, 0); - gtk_signal_connect (GTK_OBJECT (color_pickers[i]), "color_set", - (GtkSignalFunc) color_set, - NULL); - } - - /* Create the sample calendar */ - - w = gnome_canvas_new (); - gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); - - month_item = gnome_month_item_new (gnome_canvas_root (GNOME_CANVAS (w))); - gnome_canvas_item_set (month_item, - "start_on_monday", week_starts_on_monday, - NULL); - reconfigure_month (); - - gtk_signal_connect (GTK_OBJECT (w), "size_allocate", - canvas_size_allocate, - NULL); - -} - - -static void -set_todo_page_options(void) -{ - - - while (gtk_events_pending ()) - gtk_main_iteration (); -} - -static void -todo_option_set (void) -{ - prop_changed (); - set_todo_page_options (); -} - -/* Creates the colors page in the preferences dialog */ -static GtkWidget * -build_list_options_frame(void) -{ - GtkWidget *frame; - GtkWidget *vbox; - frame = gtk_frame_new (_("Show on TODO List:")); - - vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (frame), vbox); - - due_date_show_button = gtk_check_button_new_with_label (_("Due Date")); - priority_show_button = gtk_check_button_new_with_label (_("Priority")); - todo_item_time_remaining_show_button = gtk_check_button_new_with_label (_("Time Until Due")); - - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(due_date_show_button), todo_show_due_date); - gtk_signal_connect (GTK_OBJECT(due_date_show_button), - "clicked", - (GtkSignalFunc) todo_option_set, - NULL); - gtk_box_pack_start (GTK_BOX (vbox), due_date_show_button, FALSE, FALSE, 0); - - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(todo_item_time_remaining_show_button), todo_show_time_remaining); - gtk_signal_connect (GTK_OBJECT(todo_item_time_remaining_show_button), - "clicked", - (GtkSignalFunc) todo_option_set, - NULL); - gtk_box_pack_start (GTK_BOX (vbox), todo_item_time_remaining_show_button, FALSE, FALSE, 0); - - - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(priority_show_button), todo_show_priority); - gtk_signal_connect (GTK_OBJECT(priority_show_button), - "clicked", - (GtkSignalFunc) todo_option_set, - NULL); - gtk_box_pack_start (GTK_BOX (vbox), priority_show_button, FALSE, FALSE, 0); - return frame; -} -static GtkWidget * -build_style_list_options_frame(void) -{ - GtkWidget *frame; - GtkWidget *vbox; - - frame = gtk_frame_new (_("To Do List style options:")); - - vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (frame), vbox); - - todo_item_highlight_overdue = gtk_check_button_new_with_label (_("Highlight overdue items")); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(todo_item_highlight_overdue), - todo_item_dstatus_highlight_overdue); - todo_item_highlight_not_due_yet = gtk_check_button_new_with_label (_("Highlight not yet due items")); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(todo_item_highlight_not_due_yet), - todo_item_dstatus_highlight_overdue); - todo_item_highlight_due_today = gtk_check_button_new_with_label (_("Highlight items due today")); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON(todo_item_highlight_due_today), - todo_item_dstatus_highlight_overdue); - - gtk_signal_connect (GTK_OBJECT(todo_item_highlight_overdue), - "clicked", - (GtkSignalFunc) todo_option_set, - NULL); - gtk_signal_connect (GTK_OBJECT(todo_item_highlight_not_due_yet), - "clicked", - (GtkSignalFunc) todo_option_set, - NULL); - gtk_signal_connect (GTK_OBJECT(todo_item_highlight_due_today), - "clicked", - (GtkSignalFunc) todo_option_set, - NULL); - - gtk_box_pack_start (GTK_BOX (vbox), todo_item_highlight_overdue, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), todo_item_highlight_due_today, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), todo_item_highlight_not_due_yet, FALSE, FALSE, 0); - return frame; -} -static void -create_todo_page (void) -{ - GtkWidget *frame; - GtkWidget *main_box; - GtkWidget *hbox; - - - frame = gtk_frame_new (_("To Do List Properties")); - gtk_container_set_border_width (GTK_CONTAINER (frame), GNOME_PAD_SMALL); - gnome_property_box_append_page (GNOME_PROPERTY_BOX (prop_win), frame, - gtk_label_new (_("To Do List"))); - - /* first vbox*/ - main_box = gtk_vbox_new(FALSE, GNOME_PAD); - gtk_container_set_border_width (GTK_CONTAINER (main_box), GNOME_PAD_SMALL); - gtk_container_add (GTK_CONTAINER (frame), main_box); - - - /* first hbox*/ - hbox = gtk_hbox_new (FALSE, GNOME_PAD); - gtk_container_set_border_width (GTK_CONTAINER (hbox), GNOME_PAD_SMALL); - gtk_container_add (GTK_CONTAINER (main_box), hbox); - - gtk_box_pack_start (GTK_BOX(hbox), build_list_options_frame(), FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(hbox), build_style_list_options_frame(), FALSE, FALSE, 0); - - set_todo_page_options(); -} - -/* Creates and displays the preferences dialog for the whole application */ -void -properties (GtkWidget *toplevel) -{ - static GnomeHelpMenuEntry help_entry = { NULL, "properties" }; - - help_entry.name = gnome_app_id; - - if (prop_win) - return; - - prop_win = gnome_property_box_new (); - gtk_window_set_title (GTK_WINDOW (prop_win), _("Preferences")); - gnome_dialog_set_parent (GNOME_DIALOG (prop_win), - GTK_WINDOW (gtk_widget_get_toplevel (toplevel))); - - create_time_display_page (); - create_colors_page (); - create_todo_page (); - create_alarm_page (); - - gtk_signal_connect (GTK_OBJECT (prop_win), "destroy", - (GtkSignalFunc) prop_cancel, NULL); - - gtk_signal_connect (GTK_OBJECT (prop_win), "delete_event", - (GtkSignalFunc) prop_cancel, NULL); - - gtk_signal_connect (GTK_OBJECT (prop_win), "apply", - (GtkSignalFunc) prop_apply, NULL); - - gtk_signal_connect (GTK_OBJECT (prop_win), "help", - GTK_SIGNAL_FUNC (gnome_help_pbox_display), - &help_entry); - - gtk_widget_show_all (prop_win); -} - -char * -build_color_spec (int r, int g, int b) -{ - static char spec[100]; - - sprintf (spec, "#%04x%04x%04x", r, g, b); - return spec; -} - -void -parse_color_spec (char *spec, int *r, int *g, int *b) -{ - g_return_if_fail (spec != NULL); - g_return_if_fail (r != NULL); - g_return_if_fail (r != NULL); - g_return_if_fail (r != NULL); - - if (sscanf (spec, "#%04x%04x%04x", r, g, b) != 3) { - g_warning ("Invalid color specification %s, returning black", spec); - - *r = *g = *b = 0; - } -} - -char * -color_spec_from_prop (ColorProp propnum) -{ - return build_color_spec (color_props[propnum].r, color_props[propnum].g, color_props[propnum].b); -} - -static void -create_alarm_page (void) -{ - GtkWidget *main_box; - GtkWidget *default_frame; - GtkWidget *default_table; - GtkWidget *misc_frame; - GtkWidget *misc_box; - GtkWidget *box, *l; - - main_box = gtk_vbox_new (FALSE, GNOME_PAD); - gtk_container_set_border_width (GTK_CONTAINER (main_box), GNOME_PAD_SMALL); - gnome_property_box_append_page (GNOME_PROPERTY_BOX (prop_win), - main_box, gtk_label_new (_("Alarms"))); - - /* build miscellaneous box */ - misc_frame = gtk_frame_new (_("Alarm Properties")); - gtk_container_set_border_width (GTK_CONTAINER (misc_frame), - GNOME_PAD_SMALL); - misc_box = gtk_vbox_new (FALSE, GNOME_PAD); - - gtk_container_set_border_width (GTK_CONTAINER (misc_frame), GNOME_PAD_SMALL); - gtk_container_add (GTK_CONTAINER (misc_frame), misc_box); - - gtk_box_pack_start (GTK_BOX (main_box), misc_frame, FALSE, FALSE, 0); - - enable_display_beep = gtk_check_button_new_with_label (_("Beep on display alarms")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enable_display_beep), - beep_on_display); - gtk_box_pack_start (GTK_BOX (misc_box), enable_display_beep, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (enable_display_beep), "toggled", - (GtkSignalFunc) prop_changed, - NULL); - - /* audio timeout widgets */ - box = gtk_hbox_new (FALSE, GNOME_PAD); - to_cb = gtk_check_button_new_with_label (_("Audio alarms timeout after")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (to_cb), - enable_aalarm_timeout); - gtk_signal_connect (GTK_OBJECT (to_cb), "toggled", - (GtkSignalFunc) to_cb_changed, NULL); - gtk_box_pack_start (GTK_BOX (box), to_cb, FALSE, FALSE, 0); - to_spin = make_spin_button (audio_alarm_timeout, 1, MAX_AALARM_TIMEOUT); - gtk_widget_set_sensitive (to_spin, enable_aalarm_timeout); - gtk_signal_connect (GTK_OBJECT (to_spin), "changed", - (GtkSignalFunc) prop_changed, NULL); - gtk_box_pack_start (GTK_BOX (box), to_spin, FALSE, FALSE, 0); - l = gtk_label_new (_(" seconds")); - gtk_box_pack_start (GTK_BOX (box), l, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (misc_box), box, FALSE, FALSE, 0); - - /* snooze widgets */ - box = gtk_hbox_new (FALSE, GNOME_PAD); - snooze_cb = gtk_check_button_new_with_label (_("Enable snoozing for ")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (snooze_cb), - enable_snooze); - gtk_signal_connect (GTK_OBJECT (snooze_cb), "toggled", - (GtkSignalFunc) snooze_cb_changed, NULL); - gtk_box_pack_start (GTK_BOX (box), snooze_cb, FALSE, FALSE, 0); - snooze_spin = make_spin_button (snooze_secs, 1, MAX_SNOOZE_SECS); - gtk_widget_set_sensitive (snooze_spin, enable_snooze); - gtk_signal_connect (GTK_OBJECT (snooze_spin), "changed", - (GtkSignalFunc) prop_changed, NULL); - gtk_box_pack_start (GTK_BOX (box), snooze_spin, FALSE, FALSE, 0); - l = gtk_label_new (_(" seconds")); - gtk_box_pack_start (GTK_BOX (box), l, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (misc_box), box, FALSE, FALSE, 0); - - /* populate default frame/box */ - default_frame = gtk_frame_new (_("Defaults")); - gtk_container_set_border_width (GTK_CONTAINER (default_frame), GNOME_PAD_SMALL); - gtk_box_pack_start (GTK_BOX (main_box), default_frame, FALSE, FALSE, 0); - default_table = gtk_table_new (1, 1, 0); - gtk_container_set_border_width (GTK_CONTAINER (default_table), 4); - gtk_table_set_row_spacings (GTK_TABLE (default_table), 4); - gtk_table_set_col_spacings (GTK_TABLE (default_table), 4); - gtk_container_add (GTK_CONTAINER (default_frame), default_table); - -#warning "FIX ME" - /* - ee_create_ae (GTK_TABLE (default_table), _("Display"), - &alarm_defaults [ALARM_DISPLAY], ALARM_DISPLAY, 1, - FALSE, prop_changed); - ee_create_ae (GTK_TABLE (default_table), _("Audio"), - &alarm_defaults [ALARM_AUDIO], ALARM_AUDIO, 2, - FALSE, prop_changed); - ee_create_ae (GTK_TABLE (default_table), _("Program"), - &alarm_defaults [ALARM_PROGRAM], ALARM_PROGRAM, 3, - FALSE, prop_changed); - ee_create_ae (GTK_TABLE (default_table), _("Mail"), - &alarm_defaults [ALARM_MAIL], ALARM_MAIL, 4, - FALSE, prop_changed); - */ -} - -static void -prop_store_alarm_default_values (CalendarAlarm* alarm) -{ -#warning "FIX ME" - // ee_store_alarm (alarm, alarm->type); - - switch (alarm->type) { - case ALARM_DISPLAY: - gnome_config_push_prefix ("/calendar/alarms/def_disp_"); - break; - case ALARM_AUDIO: - gnome_config_push_prefix ("/calendar/alarms/def_audio_"); - break; - case ALARM_PROGRAM: - gnome_config_push_prefix ("/calendar/alarms/def_prog_"); - break; - case ALARM_MAIL: - gnome_config_push_prefix ("/calendar/alarms/def_mail_"); - break; - } - - gnome_config_set_int ("enabled", alarm->enabled); - gnome_config_set_int ("count", alarm->count); - gnome_config_set_int ("units", alarm->units); - if (alarm->data) - gnome_config_set_string ("data", alarm->data); - - gnome_config_pop_prefix (); - gnome_config_sync (); -} - -#if 0 -static void -prop_apply_alarms () -{ - int i; - for (i=0; i < 4; i++) - prop_store_alarm_default_values (&alarm_defaults [i]); - - beep_on_display = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (enable_display_beep)); - gnome_config_set_bool ("/calendar/alarms/beep_on_display", beep_on_display); - enable_aalarm_timeout = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (to_cb)); - gnome_config_set_bool ("/calendar/alarms/enable_audio_timeout", enable_aalarm_timeout); - audio_alarm_timeout = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (to_spin)); - gnome_config_set_int ("/calendar/alarms/audio_alarm_timeout", audio_alarm_timeout); - enable_snooze = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (snooze_cb)); - gnome_config_set_bool ("/calendar/alarms/enable_snooze", enable_snooze); - snooze_secs = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (snooze_spin)); - gnome_config_set_int ("/calendar/alarms/snooze_secs", snooze_secs); - - gnome_config_sync(); -} -#endif - -static void -to_cb_changed (GtkWidget *object, gpointer data) -{ - gboolean active = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (to_cb)); - gtk_widget_set_sensitive (to_spin, active); - prop_changed (); -} - -static void -snooze_cb_changed (GtkWidget *object, gpointer data) -{ - gboolean active = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (snooze_cb)); - gtk_widget_set_sensitive (snooze_spin, active); - prop_changed (); -} - - diff --git a/calendar/gui/recur.xpm b/calendar/gui/recur.xpm deleted file mode 100644 index 49836b62e7..0000000000 --- a/calendar/gui/recur.xpm +++ /dev/null @@ -1,83 +0,0 @@ -/* XPM */ -static char * recur_xpm[] = { -"16 16 64 1", -" c None", -". c #350000", -"+ c #2A0000", -"@ c #1B0000", -"# c #280000", -"$ c #430000", -"% c #090000", -"& c #160000", -"* c #250000", -"= c #460000", -"- c #550000", -"; c #610000", -"> c #0D0000", -", c #1F0000", -"' c #4B0000", -") c #5E0000", -"! c #6B0000", -"~ c #750000", -"{ c #790000", -"] c #810000", -"^ c #FFFF83", -"/ c #FFFF89", -"( c #FFFF93", -"_ c #8B0000", -": c #900000", -"< c #930000", -"[ c #FFFF62", -"} c #A10000", -"| c #FFFF41", -"1 c #FFFF3B", -"2 c #FFFF31", -"3 c #B70000", -"4 c #B20000", -"5 c #AE0000", -"6 c #FFFF22", -"7 c #FFFF16", -"8 c #FFFF06", -"9 c #C90000", -"0 c #C10000", -"a c #BB0000", -"b c #FFF600", -"c c #FFE100", -"d c #FFC500", -"e c #E40000", -"f c #D70000", -"g c #CD0000", -"h c #FFDB00", -"i c #FFA900", -"j c #FF8500", -"k c #FF5900", -"l c #FF2800", -"m c #FC0000", -"n c #ED0000", -"o c #E10000", -"p c #FFAF00", -"q c #FF9400", -"r c #FF7400", -"s c #FF5000", -"t c #FF0100", -"u c #F30000", -"v c #E80000", -"w c #FF6900", -"x c #FF4900", -"y c #FF0800", -" ", -" . ", -" +. ", -" @#.$ ", -" %&*.=-; ", -" >,.')!~ ", -" &. !{] ", -" ^/( . _:< ", -" [[[ }}} ", -" |12 345 ", -" 678 90a ", -" bcd efg ", -" hdijklmnof ", -" pqrsltuv ", -" wxly ", -" "}; diff --git a/calendar/gui/task-assigned-to.xpm b/calendar/gui/task-assigned-to.xpm deleted file mode 100644 index f5b0ab6f25..0000000000 --- a/calendar/gui/task-assigned-to.xpm +++ /dev/null @@ -1,120 +0,0 @@ -/* XPM */ -static char * task_assigned_to_xpm[] = { -"16 16 101 2", -" c None", -". c #0F0E0D", -"+ c #3B2F22", -"@ c #080808", -"# c #292623", -"$ c #CBBFAD", -"% c #BEA47E", -"& c #AD9A7E", -"* c #000000", -"= c #232221", -"- c #CDC8C1", -"; c #CBC5BF", -"> c #766D62", -", c #887053", -"' c #A38664", -") c #A49887", -"! c #F6DEBC", -"~ c #957D59", -"{ c #151211", -"] c #F3EFEA", -"^ c #BBB7B0", -"/ c #A69E97", -"( c #FEFEFE", -"_ c #F8F7F5", -": c #524C45", -"< c #BBA382", -"[ c #A59176", -"} c #F6DBB8", -"| c #E79E3C", -"1 c #CB783E", -"2 c #171716", -"3 c #EFE8DF", -"4 c #716A61", -"5 c #FDFCFC", -"6 c #605D57", -"7 c #26221F", -"8 c #86735E", -"9 c #D5C0A0", -"0 c #C4AD8B", -"a c #F9E9D5", -"b c #C97138", -"c c #121110", -"d c #E9E8E7", -"e c #73604D", -"f c #332F29", -"g c #534C40", -"h c #D3BFA0", -"i c #D0BB98", -"j c #D0BA96", -"k c #F9E7D1", -"l c #CA773D", -"m c #090807", -"n c #B1B1AF", -"o c #FBFBF9", -"p c #CAB290", -"q c #D5C0A1", -"r c #D0BA97", -"s c #FBEFDF", -"t c #CB793E", -"u c #272625", -"v c #F4F4F4", -"w c #F4EFE7", -"x c #D0BA98", -"y c #CFB896", -"z c #F9EAD5", -"A c #CC793A", -"B c #0F0F0D", -"C c #100F0E", -"D c #494949", -"E c #FDFCFB", -"F c #DACBB0", -"G c #F5D9B4", -"H c #CA7537", -"I c #B79F80", -"J c #B0A693", -"K c #262525", -"L c #939292", -"M c #ECE3D5", -"N c #FBF3E8", -"O c #CA7337", -"P c #C7B08E", -"Q c #D3C2A5", -"R c #918776", -"S c #0B0A0A", -"T c #555453", -"U c #828282", -"V c #A09179", -"W c #897C67", -"X c #5B5245", -"Y c #191716", -"Z c #413E3C", -"` c #978368", -" . c #867C6A", -".. c #70685D", -"+. c #1C1B18", -"@. c #1D1C1A", -"#. c #575654", -"$. c #887B68", -"%. c #676055", -"&. c #141211", -"*. c #0F0F0E", -" ", -" . + @ @ ", -" @ # $ % & @ * * ", -" @ = - ; > , ' ) @ * ! ~ * ", -" { ] ^ / ( _ : < [ @ * } | 1 * ", -" 2 3 4 5 6 7 8 9 0 * a | b * ", -" c d e f g h i j * k | l * ", -" m n o p q r j * s | t * ", -" u v w x y * z | A * B ", -" C D E F * G | H * I J @ ", -" K L M * N O * P Q R S ", -" @ T * U * * V W X Y @ ", -" Z * * ` ...+.@ @ ", -" @.#.$.%.&.@ @ ", -" * *.@ @ ", -" @ @ "}; diff --git a/calendar/gui/task-assigned.xpm b/calendar/gui/task-assigned.xpm deleted file mode 100644 index 89faae95f1..0000000000 --- a/calendar/gui/task-assigned.xpm +++ /dev/null @@ -1,120 +0,0 @@ -/* XPM */ -static char * task_assigned_xpm[] = { -"16 16 101 2", -" c None", -". c #0F0E0D", -"+ c #3B2F22", -"@ c #080808", -"# c #292623", -"$ c #CBBFAD", -"% c #BEA47E", -"& c #AD9A7E", -"* c #000000", -"= c #232221", -"- c #CDC8C1", -"; c #CBC5BF", -"> c #766D62", -", c #887053", -"' c #A38664", -") c #A49887", -"! c #F6DEBC", -"~ c #957D59", -"{ c #151211", -"] c #F3EFEA", -"^ c #BBB7B0", -"/ c #A69E97", -"( c #FEFEFE", -"_ c #F8F7F5", -": c #524C45", -"< c #BBA382", -"[ c #A59176", -"} c #F6DBB8", -"| c #E79E3C", -"1 c #CB783E", -"2 c #171716", -"3 c #EFE8DF", -"4 c #716A61", -"5 c #FDFCFC", -"6 c #605D57", -"7 c #26221F", -"8 c #86735E", -"9 c #D5C0A0", -"0 c #C4AD8B", -"a c #F9E9D5", -"b c #C97138", -"c c #121110", -"d c #E9E8E7", -"e c #73604D", -"f c #332F29", -"g c #534C40", -"h c #D3BFA0", -"i c #D0BB98", -"j c #D0BA96", -"k c #F9E7D1", -"l c #CA773D", -"m c #090807", -"n c #B1B1AF", -"o c #FBFBF9", -"p c #CAB290", -"q c #D5C0A1", -"r c #D0BA97", -"s c #FBEFDF", -"t c #CB793E", -"u c #272625", -"v c #F4F4F4", -"w c #F4EFE7", -"x c #D0BA98", -"y c #CFB896", -"z c #F9EAD5", -"A c #CC793A", -"B c #0F0F0D", -"C c #100F0E", -"D c #494949", -"E c #FDFCFB", -"F c #DACBB0", -"G c #F5D9B4", -"H c #CA7537", -"I c #B79F80", -"J c #B0A693", -"K c #262525", -"L c #939292", -"M c #ECE3D5", -"N c #FBF3E8", -"O c #CA7337", -"P c #C7B08E", -"Q c #D3C2A5", -"R c #918776", -"S c #0B0A0A", -"T c #555453", -"U c #828282", -"V c #A09179", -"W c #897C67", -"X c #5B5245", -"Y c #191716", -"Z c #413E3C", -"` c #978368", -" . c #867C6A", -".. c #70685D", -"+. c #1C1B18", -"@. c #1D1C1A", -"#. c #575654", -"$. c #887B68", -"%. c #676055", -"&. c #141211", -"*. c #0F0F0E", -" ", -" . + @ @ ", -" @ # $ % & @ * * ", -" @ = - ; > , ' ) @ * ! ~ * ", -" { ] ^ / ( _ : < [ @ * } | 1 * ", -" 2 3 4 5 6 7 8 9 0 * a | b * ", -" c d e f g h i j * k | l * ", -" m n o p q r j * s | t * ", -" u v w x y * z | A * B ", -" C D E F * G | H * I J @ ", -" K L M * N O * P Q R S ", -" @ T * U * * V W X Y @ ", -" Z * * ` ...+.@ @ ", -" @.#.$.%.&.@ @ ", -" * *.@ @ ", -" @ @ "}; diff --git a/calendar/gui/task-recurring.xpm b/calendar/gui/task-recurring.xpm deleted file mode 100644 index b3c6126e03..0000000000 --- a/calendar/gui/task-recurring.xpm +++ /dev/null @@ -1,120 +0,0 @@ -/* XPM */ -static char * task_recurring_xpm[] = { -"16 16 101 2", -" c None", -". c #0F0E0D", -"+ c #3B2F22", -"@ c #080808", -"# c #292623", -"$ c #CBBFAD", -"% c #BEA47E", -"& c #AD9A7E", -"* c #000000", -"= c #232221", -"- c #CDC8C1", -"; c #CBC5BF", -"> c #766D62", -", c #887053", -"' c #A38664", -") c #A49887", -"! c #F6DEBC", -"~ c #957D59", -"{ c #151211", -"] c #F3EFEA", -"^ c #BBB7B0", -"/ c #A69E97", -"( c #FEFEFE", -"_ c #F8F7F5", -": c #524C45", -"< c #BBA382", -"[ c #A59176", -"} c #F6DBB8", -"| c #E79E3C", -"1 c #CB783E", -"2 c #171716", -"3 c #EFE8DF", -"4 c #716A61", -"5 c #FDFCFC", -"6 c #605D57", -"7 c #26221F", -"8 c #86735E", -"9 c #D5C0A0", -"0 c #C4AD8B", -"a c #F9E9D5", -"b c #C97138", -"c c #121110", -"d c #E9E8E7", -"e c #73604D", -"f c #332F29", -"g c #534C40", -"h c #D3BFA0", -"i c #D0BB98", -"j c #D0BA96", -"k c #F9E7D1", -"l c #CA773D", -"m c #090807", -"n c #B1B1AF", -"o c #FBFBF9", -"p c #CAB290", -"q c #D5C0A1", -"r c #D0BA97", -"s c #FBEFDF", -"t c #CB793E", -"u c #272625", -"v c #F4F4F4", -"w c #F4EFE7", -"x c #D0BA98", -"y c #CFB896", -"z c #F9EAD5", -"A c #CC793A", -"B c #0F0F0D", -"C c #100F0E", -"D c #494949", -"E c #FDFCFB", -"F c #DACBB0", -"G c #F5D9B4", -"H c #CA7537", -"I c #B79F80", -"J c #B0A693", -"K c #262525", -"L c #939292", -"M c #ECE3D5", -"N c #FBF3E8", -"O c #CA7337", -"P c #C7B08E", -"Q c #D3C2A5", -"R c #918776", -"S c #0B0A0A", -"T c #555453", -"U c #828282", -"V c #A09179", -"W c #897C67", -"X c #5B5245", -"Y c #191716", -"Z c #413E3C", -"` c #978368", -" . c #867C6A", -".. c #70685D", -"+. c #1C1B18", -"@. c #1D1C1A", -"#. c #575654", -"$. c #887B68", -"%. c #676055", -"&. c #141211", -"*. c #0F0F0E", -" ", -" . + @ @ ", -" @ # $ % & @ * * ", -" @ = - ; > , ' ) @ * ! ~ * ", -" { ] ^ / ( _ : < [ @ * } | 1 * ", -" 2 3 4 5 6 7 8 9 0 * a | b * ", -" c d e f g h i j * k | l * ", -" m n o p q r j * s | t * ", -" u v w x y * z | A * B ", -" C D E F * G | H * I J @ ", -" K L M * N O * P Q R S ", -" @ T * U * * V W X Y @ ", -" Z * * ` ...+.@ @ ", -" @.#.$.%.&.@ @ ", -" * *.@ @ ", -" @ @ "}; diff --git a/calendar/gui/task.xpm b/calendar/gui/task.xpm deleted file mode 100644 index 8115025e20..0000000000 --- a/calendar/gui/task.xpm +++ /dev/null @@ -1,120 +0,0 @@ -/* XPM */ -static char * task_xpm[] = { -"16 16 101 2", -" c None", -". c #0F0E0D", -"+ c #3B2F22", -"@ c #080808", -"# c #292623", -"$ c #CBBFAD", -"% c #BEA47E", -"& c #AD9A7E", -"* c #000000", -"= c #232221", -"- c #CDC8C1", -"; c #CBC5BF", -"> c #766D62", -", c #887053", -"' c #A38664", -") c #A49887", -"! c #F6DEBC", -"~ c #957D59", -"{ c #151211", -"] c #F3EFEA", -"^ c #BBB7B0", -"/ c #A69E97", -"( c #FEFEFE", -"_ c #F8F7F5", -": c #524C45", -"< c #BBA382", -"[ c #A59176", -"} c #F6DBB8", -"| c #E79E3C", -"1 c #CB783E", -"2 c #171716", -"3 c #EFE8DF", -"4 c #716A61", -"5 c #FDFCFC", -"6 c #605D57", -"7 c #26221F", -"8 c #86735E", -"9 c #D5C0A0", -"0 c #C4AD8B", -"a c #F9E9D5", -"b c #C97138", -"c c #121110", -"d c #E9E8E7", -"e c #73604D", -"f c #332F29", -"g c #534C40", -"h c #D3BFA0", -"i c #D0BB98", -"j c #D0BA96", -"k c #F9E7D1", -"l c #CA773D", -"m c #090807", -"n c #B1B1AF", -"o c #FBFBF9", -"p c #CAB290", -"q c #D5C0A1", -"r c #D0BA97", -"s c #FBEFDF", -"t c #CB793E", -"u c #272625", -"v c #F4F4F4", -"w c #F4EFE7", -"x c #D0BA98", -"y c #CFB896", -"z c #F9EAD5", -"A c #CC793A", -"B c #0F0F0D", -"C c #100F0E", -"D c #494949", -"E c #FDFCFB", -"F c #DACBB0", -"G c #F5D9B4", -"H c #CA7537", -"I c #B79F80", -"J c #B0A693", -"K c #262525", -"L c #939292", -"M c #ECE3D5", -"N c #FBF3E8", -"O c #CA7337", -"P c #C7B08E", -"Q c #D3C2A5", -"R c #918776", -"S c #0B0A0A", -"T c #555453", -"U c #828282", -"V c #A09179", -"W c #897C67", -"X c #5B5245", -"Y c #191716", -"Z c #413E3C", -"` c #978368", -" . c #867C6A", -".. c #70685D", -"+. c #1C1B18", -"@. c #1D1C1A", -"#. c #575654", -"$. c #887B68", -"%. c #676055", -"&. c #141211", -"*. c #0F0F0E", -" ", -" . + @ @ ", -" @ # $ % & @ * * ", -" @ = - ; > , ' ) @ * ! ~ * ", -" { ] ^ / ( _ : < [ @ * } | 1 * ", -" 2 3 4 5 6 7 8 9 0 * a | b * ", -" c d e f g h i j * k | l * ", -" m n o p q r j * s | t * ", -" u v w x y * z | A * B ", -" C D E F * G | H * I J @ ", -" K L M * N O * P Q R S ", -" @ T * U * * V W X Y @ ", -" Z * * ` ...+.@ @ ", -" @.#.$.%.&.@ @ ", -" * *.@ @ ", -" @ @ "}; diff --git a/calendar/gui/test.vcf b/calendar/gui/test.vcf deleted file mode 100644 index bfe93b3c14..0000000000 --- a/calendar/gui/test.vcf +++ /dev/null @@ -1,133 +0,0 @@ -BEGIN:VCALENDAR -PRODID:-//GNOME//NONSGML GnomeCalendar//EN -TZ:MST -VERSION:0.13 -BEGIN:VEVENT -UID:KOrganizer - 846930886 -SEQUENCE:1 -DTSTART:19980601T150000 -DTEND:19980601T150000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980402T023558 -SUMMARY:Cada dos dias de 06/01 al 07/01 -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D2 19980701T140000 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 846930886 -SEQUENCE:1 -DTSTART:19980501T140000 -DTEND:19980501T140000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980402T023558 -SUMMARY:5 dias. -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 #5 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 846930886 -SEQUENCE:1 -DTSTART:19980501T140000 -DTEND:19980501T150000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980429T004635 -SUMMARY:Diariamente de 05/01 al 06/01 -STATUS:NEEDS ACTION -CLASS:PRIVATE -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 19980601T000000 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 1804289383 -SEQUENCE:1 -DTSTART:19980415T010000 -DTEND:19980415T013000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Diario durante 5 dias -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 #5 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 1804289383 -SEQUENCE:1 -DTSTART:19980415T010000 -DTEND:19980415T013000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Diario durante 5 dias -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 #5 -END:VEVENT - -BEGIN:VTODO -UID:KOrganizer - 846930886 -SEQUENCE:1 -DTSTART:19980415T140000 -DUE:19691231T180000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980402T023558 -SUMMARY:Normal -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -END:VTODO - -BEGIN:VTODO -UID:KOrganizer - 1804289383 -SEQUENCE:1 -DTSTART:19980415T120000 -DUE:19691231T180000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Semanal -- 4 semanas -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:W1 WE #4 -END:VTODO - -BEGIN:VTODO -UID:KOrganizer - 1804289383 -SEQUENCE:1 -DTSTART:19980415T003000 -DUE:19691231T180000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Semana: Mi, Ju, Vi, Dom (10 veces) -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:W1 SU WE TH FR #10 -END:VTODO - -END:VCALENDAR - diff --git a/calendar/gui/test2.vcf b/calendar/gui/test2.vcf deleted file mode 100644 index 6446507989..0000000000 --- a/calendar/gui/test2.vcf +++ /dev/null @@ -1,133 +0,0 @@ -BEGIN:VCALENDAR -PRODID:-//GNOME//NONSGML GnomeCalendar//EN -TZ:MST -VERSION:0.13 -BEGIN:VEVENT -UID:KOrganizer - 8469308861 -SEQUENCE:1 -DTSTART:19980601T150000 -DTEND:19980601T150000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980402T023558 -SUMMARY:Cada dos dias de 06/01 al 07/01 -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D2 19980701T140000 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 8469308862 -SEQUENCE:1 -DTSTART:19980501T140000 -DTEND:19980501T140000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980402T023558 -SUMMARY:5 dias. -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 #5 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 8469308863 -SEQUENCE:1 -DTSTART:19980501T140000 -DTEND:19980501T150000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980429T004635 -SUMMARY:Diariamente de 05/01 al 06/01 -STATUS:NEEDS ACTION -CLASS:PRIVATE -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 19980601T000000 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 18042893834 -SEQUENCE:1 -DTSTART:19980415T010000 -DTEND:19980415T013000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Diario durante 5 dias -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 #5 -END:VEVENT - -BEGIN:VEVENT -UID:KOrganizer - 18042893835 -SEQUENCE:1 -DTSTART:19980415T010000 -DTEND:19980415T013000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Diario durante 5 dias -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:D1 #5 -END:VEVENT - -BEGIN:VTODO -UID:KOrganizer - 8469308866 -SEQUENCE:1 -DTSTART:19980415T140000 -DUE:19691231T180000 -DCREATED:19980402T023558 -LAST-MODIFIED:19980402T023558 -SUMMARY:Normal -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -END:VTODO - -BEGIN:VTODO -UID:KOrganizer - 18042893837 -SEQUENCE:1 -DTSTART:19980415T120000 -DUE:19691231T180000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Semanal -- 4 semanas -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:W1 WE #4 -END:VTODO - -BEGIN:VTODO -UID:KOrganizer - 18042893838 -SEQUENCE:1 -DTSTART:19980415T003000 -DUE:19691231T180000 -DCREATED:19980402T023552 -LAST-MODIFIED:19980330T225948 -SUMMARY:Semana: Mi, Ju, Vi, Dom (10 veces) -STATUS:NEEDS ACTION -CLASS:PUBLIC -PRIORITY:0 -TRANSP:0 -RELATED-TO:0 -RRULE:W1 SU WE TH FR #10 -END:VTODO - -END:VCALENDAR - diff --git a/calendar/gui/topic.dat b/calendar/gui/topic.dat deleted file mode 100644 index edc7813b26..0000000000 --- a/calendar/gui/topic.dat +++ /dev/null @@ -1,2 +0,0 @@ -gnome-cal.html Manual -gnome-cal.html#cmdline Command line options \ No newline at end of file diff --git a/calendar/gui/weekview.xpm b/calendar/gui/weekview.xpm deleted file mode 100644 index f4900856eb..0000000000 --- a/calendar/gui/weekview.xpm +++ /dev/null @@ -1,41 +0,0 @@ -/* XPM */ -static char * weekview_xpm[] = { -"24 24 14 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #D1D1D1", -"# c #E3E4F5", -"$ c #8B90C3", -"% c #AAAFE2", -"& c #C7CAEB", -"* c #4550B5", -"= c #555FC5", -"- c #2E3BB1", -"; c #0010A8", -"> c #BABBCC", -", c #A3A6C7", -" ", -" ", -" ", -" ", -" ...................... ", -" .............+.++.++.. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .++@++@+#$%%$%+@++@++. ", -" .++@++@+&*==-;+@++@++. ", -" .@@@@@@@@@@@$;@@@@@@@. ", -" .++@++@++@+%;%+@++@++. ", -" .++@++@++@+%;%+@++@++. ", -" .@@@@@@@@@@-->@@@@@@@. ", -" .++@++@++@+;*++@++@++. ", -" .++@++@++@+;*++@++@++. ", -" .@@@@@@@@@@$,@@@@@@@@. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" ...................... ", -" ", -" ", -" "}; diff --git a/calendar/gui/workweekview.xpm b/calendar/gui/workweekview.xpm deleted file mode 100644 index f47061589c..0000000000 --- a/calendar/gui/workweekview.xpm +++ /dev/null @@ -1,43 +0,0 @@ -/* XPM */ -static char * workweekview_xpm[] = { -"24 24 16 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #D1D1D1", -"# c #E3E4F5", -"$ c #8B90C3", -"% c #AAAFE2", -"& c #0010A8", -"* c #3945BB", -"= c #555FC5", -"- c #4550B5", -"; c #727ACE", -"> c #C7CAEB", -", c #2E3BB1", -"' c #5D66BA", -") c #BABBCC", -" ", -" ", -" ", -" ", -" ...................... ", -" .............+.++.++.. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .++@++@+#$%%$%+@++@++. ", -" .++@++@+%&*=-=+@++@++. ", -" .@@@@@@@$&$@@@@@@@@@@. ", -" .++@++@+%&;%$#+@++@++. ", -" .++@++@+>-==,;+@++@++. ", -" .@@@@@@@@@@@$&@@@@@@@. ", -" .++@++@+#$#+$&+@++@++. ", -" .++@++@+>,;%'*+@++@++. ", -" .@@@@@@@@)$$$)@@@@@@@. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" ...................... ", -" ", -" ", -" "}; diff --git a/calendar/gui/yearview.xpm b/calendar/gui/yearview.xpm deleted file mode 100644 index 9629150417..0000000000 --- a/calendar/gui/yearview.xpm +++ /dev/null @@ -1,45 +0,0 @@ -/* XPM */ -static char * yearview_xpm[] = { -"24 24 18 1", -" c None", -". c #000000", -"+ c #FFFFFF", -"@ c #D1D1D1", -"# c #BABBCC", -"$ c #AAAFE2", -"% c #8B90C3", -"& c #E3E4F5", -"* c #C7CAEB", -"= c #5D66BA", -"- c #3945BB", -"; c #555FC5", -"> c #2E3BB1", -", c #727ACE", -"' c #4550B5", -") c #0010A8", -"! c #A3A6C7", -"~ c #8E95D8", -" ", -" ", -" ", -" ", -" ...................... ", -" .............+.++.++.. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" .@@@@@@@@@@@@@@@@@@@@. ", -" .++#$$%&+@*$%&&%$$%$+. ", -" .+&=-;>,+#-;'*$)-;';+. ", -" .@%)%@%)!>=@@@%)%@@@@. ", -" .++@*$=-$),$%&$),$%&+. ", -" .++@~;>,$)-;>,*';;>,+. ", -" .@@@@@%)%)%@%)@@@@%)@. ", -" .+$)$+%)$)$+%)&%&+%)+. ", -" .+*>,$=-*>,$=-*>,$=-+. ", -" .@@#%%%#@#%%%#@#%%%#@. ", -" .++@++@++@++@++@++@++. ", -" .++@++@++@++@++@++@++. ", -" ...................... ", -" ", -" ", -" "}; diff --git a/calendar/idl/.cvsignore b/calendar/idl/.cvsignore deleted file mode 100644 index b840c21800..0000000000 --- a/calendar/idl/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile.in -Makefile \ No newline at end of file diff --git a/calendar/idl/Makefile.am b/calendar/idl/Makefile.am deleted file mode 100644 index ec6b4e45f0..0000000000 --- a/calendar/idl/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -idldir = $(datadir)/idl - -idl_DATA = \ - evolution-calendar.idl - -EXTRA_DIST = \ - $(idl_DATA) diff --git a/calendar/idl/evolution-calendar.idl b/calendar/idl/evolution-calendar.idl deleted file mode 100644 index 4b9b9a7b34..0000000000 --- a/calendar/idl/evolution-calendar.idl +++ /dev/null @@ -1,181 +0,0 @@ -/* Evolution calendar interface - * - * Copyright (C) 2000 Eskil Heyn Olsen - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Eskil Heyn Olsen - * Federico Mena-Quintero - */ - -#ifndef _EVOLUTION_CALENDAR_IDL_ -#define _EVOLUTION_CALENDAR_IDL_ - -#include - -module Evolution { - -module Calendar { - /* A calendar object (event/todo/journal/etc), represented as an - * iCalendar string. - */ - typedef string CalObj; - - /* An unique identifier for a calendar object */ - typedef string CalObjUID; - - /* Sequence of unique identifiers */ - typedef sequence CalObjUIDSeq; - - /* Flags for getting UID sequences */ - typedef long CalObjType; - const CalObjType TYPE_EVENT = 1 << 0; - const CalObjType TYPE_TODO = 1 << 1; - const CalObjType TYPE_JOURNAL = 1 << 2; - const CalObjType TYPE_ANY = 0x07; - - /* Types of alarms */ - enum AlarmType { - MAIL, - PROGRAM, - DISPLAY, - AUDIO - }; - - /* Used to store a time_t */ - typedef unsigned long Time_t; - - /* Used to store pilot IDs */ - typedef unsigned long PilotID; - - /* An instance of a calendar object that actually occurs. These are - * "virtual" objects in that they are used to represent instances of - * recurring events and alarms. "Real" objects just contain the - * information required to figure out the times at which they recur or - * trigger. - */ - struct CalObjInstance { - CalObjUID uid; - Time_t start; - Time_t end; - }; - - typedef sequence CalObjInstanceSeq; - - /* An alarm trigger instance */ - struct CalAlarmInstance { - CalObjUID uid; - AlarmType type; - Time_t trigger; - Time_t occur; - }; - - typedef sequence CalAlarmInstanceSeq; - - interface Listener; - - /* Calendar client interface */ - interface Cal : Bonobo::Unknown { - exception NotFound {}; - exception InvalidRange {}; - exception InvalidObject {}; - - /* A calendar is identified by its URI */ - readonly attribute string uri; - - /* Gets the number of objects of the specified types */ - long get_n_objects (in CalObjType type); - - /* Gets an object based on its URI */ - CalObj get_object (in CalObjUID uid) - raises (NotFound); - - /* Gets a list of UIDs based on object type */ - CalObjUIDSeq get_uids (in CalObjType type); - - /* Gets a list of objects that occur or recur in the specified time range */ - CalObjUIDSeq get_objects_in_range (in CalObjType type, - in Time_t start, in Time_t end) - raises (InvalidRange); - - /* Gets the objects whose alarms trigger in the specified time - * range. - */ - CalAlarmInstanceSeq get_alarms_in_range (in Time_t start, in Time_t end) - raises (InvalidRange); - - /* Gets the alarms for the specified object that trigger in the - * specified time range. - */ - CalAlarmInstanceSeq get_alarms_for_object (in CalObjUID uid, - in Time_t start, in Time_t end) - raises (NotFound, InvalidRange); - - - /* something - * - */ - CalObjUID get_uid_by_pilot_id (in PilotID pilotid) - raises (NotFound); - - - /* - * update_pilot_id: - * @uid: Unique identifier for the event we want to update - * @pilot_id: new ID assigned by the pilot - * @pilot_status: Status to flag the event with - */ - void update_pilot_id (in CalObjUID uid, in PilotID pilot_id, in unsigned long pilot_status) - raises (NotFound); - - /* Updates an object by adding it if it does not exist or by - * changing an existing one. - */ - void update_object (in CalObjUID uid, in CalObj calobj) - raises (InvalidObject); - - /* Removes an object */ - void remove_object (in CalObjUID uid) - raises (NotFound); - }; - - /* Listener for changes in a calendar */ - interface Listener : Bonobo::Unknown { - /* Return status when loading a calendar; we need better error reporting */ - enum LoadStatus { - SUCCESS, /* All OK */ - ERROR, /* Generic error */ - IN_USE, /* Requested create while a calendar - * with the same URI was in use. - */ - METHOD_NOT_SUPPORTED /* A method handler is not registered */ - }; - - /* Called from a CalFactory when a calendar is initially loaded - * or created. The listener must remember the cal object. - */ - void cal_loaded (in LoadStatus status, in Cal cal); - - /* Called from a Calendar when an object is added or changed */ - void obj_updated (in CalObjUID uid); - - /* Called from a Calendar when an object is removed */ - void obj_removed (in CalObjUID uid); - }; - - /* A calendar factory, can load and create calendars */ - interface CalFactory : Bonobo::Unknown { - exception NilListener {}; - - /* Load a calendar from an URI */ - void load (in string uri, in Listener listener) - raises (NilListener); - - /* Create a new calendar at the specified URI */ - void create (in string uri, in Listener listener) - raises (NilListener); - }; -}; - -}; - -#endif diff --git a/calendar/pcs/.cvsignore b/calendar/pcs/.cvsignore deleted file mode 100644 index 7250bfdff6..0000000000 --- a/calendar/pcs/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -Makefile -Makefile.in -.deps -.libs -.pure -*.la -*.lo -evolution-calendar-stubs.c -evolution-calendar-skels.c -evolution-calendar-common.c -evolution-calendar.h -icalendar-test diff --git a/calendar/pcs/Makefile.am b/calendar/pcs/Makefile.am deleted file mode 100644 index b435b90229..0000000000 --- a/calendar/pcs/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -INCLUDES = \ - -DG_LOG_DOMAIN=\"wombat-pcs\" \ - -I$(top_srcdir) \ - -I$(top_srcdir)/calendar \ - -I$(top_srcdir)/libical/src/libical \ - -I$(top_builddir)/libical/src/libical \ - $(BONOBO_VFS_GNOME_CFLAGS) \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" - -CORBA_GENERATED = \ - evolution-calendar.h \ - evolution-calendar-common.c \ - evolution-calendar-skels.c \ - evolution-calendar-stubs.c - -idls = \ - $(srcdir)/../idl/evolution-calendar.idl - -idl_flags = `$(GNOME_CONFIG) --cflags idl` -I $(datadir)/idl - -$(CORBA_GENERATED): $(idls) - $(ORBIT_IDL) $(idl_flags) $(srcdir)/../idl/evolution-calendar.idl - -noinst_LIBRARIES = libpcs.a - -libpcs_a_SOURCES = \ - $(CORBA_GENERATED) \ - cal.c \ - cal.h \ - cal-backend.c \ - cal-backend.h \ - cal-backend-file.c \ - cal-backend-file.h \ - cal-common.h \ - cal-factory.c \ - cal-factory.h \ - job.c \ - job.h - - -BUILT_SOURCES = $(CORBA_GENERATED) -CLEANFILES += $(BUILT_SOURCES) diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c deleted file mode 100644 index 5e74689095..0000000000 --- a/calendar/pcs/cal-backend-file.c +++ /dev/null @@ -1,1056 +0,0 @@ -/* Evolution calendar - iCalendar file backend - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "cal-util/cal-recur.h" -#include "cal-backend-file.h" - - - -/* Private part of the CalBackendFile structure */ -struct _CalBackendFilePrivate { - /* URI where the calendar data is stored */ - GnomeVFSURI *uri; - - /* List of Cal objects with their listeners */ - GList *clients; - - /* Toplevel VCALENDAR component */ - icalcomponent *icalcomp; - - /* All the CalComponent objects in the calendar, hashed by UID. The - * hash key *is* the uid returned by cal_component_get_uid(); it is not - * copied, so don't free it when you remove an object from the hash - * table. - */ - GHashTable *comp_uid_hash; - - /* All event, to-do, and journal components in the calendar; they are - * here just for easy access (i.e. so that you don't have to iterate - * over the comp_uid_hash). If you need *all* the components in the - * calendar, iterate over the hash instead. - */ - GList *events; - GList *todos; - GList *journals; - - /* Idle handler for saving the calendar when it is dirty */ - guint idle_id; -}; - - - -static void cal_backend_file_class_init (CalBackendFileClass *class); -static void cal_backend_file_init (CalBackendFile *cbfile); -static void cal_backend_file_destroy (GtkObject *object); - -static GnomeVFSURI *cal_backend_file_get_uri (CalBackend *backend); -static void cal_backend_file_add_cal (CalBackend *backend, Cal *cal); -static CalBackendLoadStatus cal_backend_file_load (CalBackend *backend, GnomeVFSURI *uri); -static void cal_backend_file_create (CalBackend *backend, GnomeVFSURI *uri); - -static int cal_backend_file_get_n_objects (CalBackend *backend, CalObjType type); -static char *cal_backend_file_get_object (CalBackend *backend, const char *uid); -static GList *cal_backend_file_get_uids (CalBackend *backend, CalObjType type); -static GList *cal_backend_file_get_objects_in_range (CalBackend *backend, CalObjType type, - time_t start, time_t end); -static GList *cal_backend_file_get_alarms_in_range (CalBackend *backend, time_t start, time_t end); -static gboolean cal_backend_file_get_alarms_for_object (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms); -static gboolean cal_backend_file_update_object (CalBackend *backend, const char *uid, - const char *calobj); -static gboolean cal_backend_file_remove_object (CalBackend *backend, const char *uid); -static char *cal_backend_file_get_uid_by_pilot_id (CalBackend *backend, unsigned long int pilot_id); -static void cal_backend_file_update_pilot_id (CalBackend *backend, - const char *uid, - unsigned long int pilot_id, - unsigned long int pilot_status); - - -static CalBackendClass *parent_class; - - - -/** - * cal_backend_file_get_type: - * @void: - * - * Registers the #CalBackendFile class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalBackendFile class. - **/ -GtkType -cal_backend_file_get_type (void) -{ - static GtkType cal_backend_file_type = 0; - - if (!cal_backend_file_type) { - static const GtkTypeInfo cal_backend_file_info = { - "CalBackendFile", - sizeof (CalBackendFile), - sizeof (CalBackendFileClass), - (GtkClassInitFunc) cal_backend_file_class_init, - (GtkObjectInitFunc) cal_backend_file_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_backend_file_type = gtk_type_unique (CAL_BACKEND_TYPE, &cal_backend_file_info); - } - - return cal_backend_file_type; -} - -/* Class initialization function for the file backend */ -static void -cal_backend_file_class_init (CalBackendFileClass *class) -{ - GtkObjectClass *object_class; - CalBackendClass *backend_class; - - object_class = (GtkObjectClass *) class; - backend_class = (CalBackendClass *) class; - - parent_class = gtk_type_class (CAL_BACKEND_TYPE); - - object_class->destroy = cal_backend_file_destroy; - - backend_class->get_uri = cal_backend_file_get_uri; - backend_class->add_cal = cal_backend_file_add_cal; - backend_class->load = cal_backend_file_load; - backend_class->create = cal_backend_file_create; - backend_class->get_n_objects = cal_backend_file_get_n_objects; - backend_class->get_object = cal_backend_file_get_object; - backend_class->get_uids = cal_backend_file_get_uids; - backend_class->get_objects_in_range = cal_backend_file_get_objects_in_range; - backend_class->get_alarms_in_range = cal_backend_file_get_alarms_in_range; - backend_class->get_alarms_for_object = cal_backend_file_get_alarms_for_object; - backend_class->update_object = cal_backend_file_update_object; - backend_class->remove_object = cal_backend_file_remove_object; - backend_class->get_uid_by_pilot_id = cal_backend_file_get_uid_by_pilot_id; - backend_class->update_pilot_id = cal_backend_file_update_pilot_id; -} - -/* Object initialization function for the file backend */ -static void -cal_backend_file_init (CalBackendFile *cbfile) -{ - CalBackendFilePrivate *priv; - - priv = g_new0 (CalBackendFilePrivate, 1); - cbfile->priv = priv; -} - -/* g_hash_table_foreach() callback to destroy a CalComponent */ -static void -free_cal_component (gpointer key, gpointer value, gpointer data) -{ - CalComponent *comp; - - comp = CAL_COMPONENT (value); - gtk_object_unref (GTK_OBJECT (comp)); -} - -/* Saves the calendar data */ -static void -save (CalBackendFile *cbfile) -{ - CalBackendFilePrivate *priv; - - priv = cbfile->priv; - g_assert (priv->uri != NULL); - g_assert (priv->icalcomp != NULL); - - /* FIXME */ - - /* FIXME: ensure we have the mandatory PRODID and VERSION properties, and throw - * in CALSCALE for good measure. - */ -} - -/* Destroy handler for the file backend */ -static void -cal_backend_file_destroy (GtkObject *object) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_BACKEND_FILE (object)); - - cbfile = CAL_BACKEND_FILE (object); - priv = cbfile->priv; - - g_assert (priv->clients == NULL); - - /* Save if necessary */ - - if (priv->idle_id != 0) { - save (cbfile); - g_source_remove (priv->idle_id); - priv->idle_id = 0; - } - - /* Clean up */ - - if (priv->uri) { - gnome_vfs_uri_unref (priv->uri); - priv->uri = NULL; - } - - if (priv->comp_uid_hash) { - g_hash_table_foreach (priv->comp_uid_hash, free_cal_component, NULL); - g_hash_table_destroy (priv->comp_uid_hash); - priv->comp_uid_hash = NULL; - } - - g_list_free (priv->events); - g_list_free (priv->todos); - g_list_free (priv->journals); - - priv->events = NULL; - priv->todos = NULL; - priv->journals = NULL; - - if (priv->icalcomp) { - icalcomponent_free (priv->icalcomp); - priv->icalcomp = NULL; - } - - g_free (priv); - cbfile->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* Looks up a component by its UID on the backend's component hash table */ -static CalComponent * -lookup_component (CalBackendFile *cbfile, const char *uid) -{ - CalBackendFilePrivate *priv; - CalComponent *comp; - - priv = cbfile->priv; - comp = g_hash_table_lookup (priv->comp_uid_hash, uid); - - return comp; -} - - - -/* Calendar backend methods */ - -/* Get_uri handler for the file backend */ -static GnomeVFSURI * -cal_backend_file_get_uri (CalBackend *backend) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - g_assert (priv->uri != NULL); - - return priv->uri; -} - -/* Callback used when a Cal is destroyed */ -static void -cal_destroy_cb (GtkObject *object, gpointer data) -{ - Cal *cal; - Cal *lcal; - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - GList *l; - - cal = CAL (object); - - cbfile = CAL_BACKEND_FILE (data); - priv = cbfile->priv; - - /* Find the cal in the list of clients */ - - for (l = priv->clients; l; l = l->next) { - lcal = CAL (l->data); - - if (lcal == cal) - break; - } - - g_assert (l != NULL); - - /* Disconnect */ - - priv->clients = g_list_remove_link (priv->clients, l); - g_list_free_1 (l); - - /* When all clients go away, notify the parent factory about it so that - * it may decide whether to kill the backend or not. - */ - if (!priv->clients) - cal_backend_last_client_gone (CAL_BACKEND (cbfile)); -} - -/* Add_cal handler for the file backend */ -static void -cal_backend_file_add_cal (CalBackend *backend, Cal *cal) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_if_fail (priv->icalcomp != NULL); - g_return_if_fail (cal != NULL); - g_return_if_fail (IS_CAL (cal)); - - /* We do not keep a reference to the Cal since the calendar user agent - * owns it. - */ - - gtk_signal_connect (GTK_OBJECT (cal), "destroy", - GTK_SIGNAL_FUNC (cal_destroy_cb), - backend); - - priv->clients = g_list_prepend (priv->clients, cal); -} - -/* Idle handler; we save the calendar since it is dirty */ -static gboolean -save_idle (gpointer data) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (data); - priv = cbfile->priv; - - g_assert (priv->icalcomp != NULL); - - save (cbfile); - - priv->idle_id = 0; - return FALSE; -} - -/* Marks the file backend as dirty and queues a save operation */ -static void -mark_dirty (CalBackendFile *cbfile) -{ - CalBackendFilePrivate *priv; - - priv = cbfile->priv; - - if (priv->idle_id != 0) - return; - - priv->idle_id = g_idle_add (save_idle, cbfile); -} - -/* Checks if the specified component has a duplicated UID and if so changes it */ -static void -check_dup_uid (CalBackendFile *cbfile, CalComponent *comp) -{ - CalBackendFilePrivate *priv; - CalComponent *old_comp; - const char *uid; - char *new_uid; - - priv = cbfile->priv; - - cal_component_get_uid (comp, &uid); - - old_comp = g_hash_table_lookup (priv->comp_uid_hash, uid); - if (!old_comp) - return; /* Everything is fine */ - - g_message ("check_dup_uid(): Got object with duplicated UID `%s', changing it...", uid); - - new_uid = cal_component_gen_uid (); - cal_component_set_uid (comp, new_uid); - g_free (new_uid); - - /* FIXME: I think we need to reset the SEQUENCE property and reset the - * CREATED/DTSTAMP/LAST-MODIFIED. - */ - - mark_dirty (cbfile); -} - -/* Tries to add an icalcomponent to the file backend. We only store the objects - * of the types we support; all others just remain in the toplevel component so - * that we don't lose them. - */ -static void -add_component (CalBackendFile *cbfile, CalComponent *comp) -{ - CalBackendFilePrivate *priv; - GList **list; - const char *uid; - - priv = cbfile->priv; - - switch (cal_component_get_vtype (comp)) { - case CAL_COMPONENT_EVENT: - list = &priv->events; - break; - - case CAL_COMPONENT_TODO: - list = &priv->todos; - break; - - case CAL_COMPONENT_JOURNAL: - list = &priv->journals; - break; - - default: - g_assert_not_reached (); - return; - } - - /* Ensure that the UID is unique; some broken implementations spit - * components with duplicated UIDs. - */ - - check_dup_uid (cbfile, comp); - cal_component_get_uid (comp, &uid); - - g_hash_table_insert (priv->comp_uid_hash, (char *) uid, comp); - *list = g_list_prepend (*list, comp); -} - -/* Removes a component from the backend's hash and lists. Does not perform - * notification on the clients. - */ -static void -remove_component (CalBackendFile *cbfile, CalComponent *comp) -{ - CalBackendFilePrivate *priv; - const char *uid; - GList **list, *l; - - priv = cbfile->priv; - - cal_component_get_uid (comp, &uid); - g_hash_table_remove (priv->comp_uid_hash, uid); - - switch (cal_component_get_vtype (comp)) { - case CAL_COMPONENT_EVENT: - list = &priv->events; - break; - - case CAL_COMPONENT_TODO: - list = &priv->todos; - break; - - case CAL_COMPONENT_JOURNAL: - list = &priv->journals; - break; - - default: - /* Make the compiler shut up. */ - list = NULL; - g_assert_not_reached (); - } - - l = g_list_find (*list, comp); - g_assert (l != NULL); - - *list = g_list_remove_link (*list, l); - g_list_free_1 (l); - - gtk_object_unref (GTK_OBJECT (comp)); -} - -/* Scans the toplevel VCALENDAR component and stores the objects it finds */ -static void -scan_vcalendar (CalBackendFile *cbfile) -{ - CalBackendFilePrivate *priv; - icalcomponent *icalcomp; - - priv = cbfile->priv; - g_assert (priv->icalcomp != NULL); - g_assert (priv->comp_uid_hash != NULL); - - for (icalcomp = icalcomponent_get_first_component (priv->icalcomp, ICAL_ANY_COMPONENT); - icalcomp; - icalcomp = icalcomponent_get_next_component (priv->icalcomp, ICAL_ANY_COMPONENT)) { - icalcomponent_kind kind; - CalComponent *comp; - - kind = icalcomponent_isa (icalcomp); - - if (!(kind == ICAL_VEVENT_COMPONENT - || kind == ICAL_VTODO_COMPONENT - || kind == ICAL_VJOURNAL_COMPONENT)) - continue; - - comp = cal_component_new (); - - if (!cal_component_set_icalcomponent (comp, icalcomp)) - continue; - - add_component (cbfile, comp); - } -} - -/* Callback used from icalparser_parse() */ -static char * -get_line (char *s, size_t size, void *data) -{ - FILE *file; - - file = data; - return fgets (s, size, file); -} - -/* Load handler for the file backend */ -static CalBackendLoadStatus -cal_backend_file_load (CalBackend *backend, GnomeVFSURI *uri) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - char *str_uri; - FILE *file; - icalparser *parser; - icalcomponent *icalcomp; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp == NULL, CAL_BACKEND_LOAD_ERROR); - g_return_val_if_fail (uri != NULL, CAL_BACKEND_LOAD_ERROR); - - /* FIXME: this looks rather bad; maybe we should check for local files - * and fail if they are remote. - */ - - str_uri = gnome_vfs_uri_to_string (uri, - (GNOME_VFS_URI_HIDE_USER_NAME - | GNOME_VFS_URI_HIDE_PASSWORD - | GNOME_VFS_URI_HIDE_HOST_NAME - | GNOME_VFS_URI_HIDE_HOST_PORT - | GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD)); - - /* Load! */ - - file = fopen (str_uri, "r"); - g_free (str_uri); - - if (!file) - return CAL_BACKEND_LOAD_ERROR; - - parser = icalparser_new (); - icalparser_set_gen_data (parser, file); - - icalcomp = icalparser_parse (parser, get_line); - icalparser_free (parser); - - if (fclose (file) != 0) - return CAL_BACKEND_LOAD_ERROR; - - if (!icalcomp) - return CAL_BACKEND_LOAD_ERROR; - - /* FIXME: should we try to demangle XROOT components and individual - * components as well? - */ - - if (icalcomponent_isa (icalcomp) != ICAL_VCALENDAR_COMPONENT) - return CAL_BACKEND_LOAD_ERROR; - - priv->icalcomp = icalcomp; - - priv->comp_uid_hash = g_hash_table_new (g_str_hash, g_str_equal); - scan_vcalendar (cbfile); - - /* Clean up */ - - gnome_vfs_uri_ref (uri); - priv->uri = uri; - - return CAL_BACKEND_LOAD_SUCCESS; -} - -/* Create handler for the file backend */ -static void -cal_backend_file_create (CalBackend *backend, GnomeVFSURI *uri) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - icalproperty *prop; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_if_fail (priv->icalcomp == NULL); - g_return_if_fail (uri != NULL); - - /* Create the new calendar information */ - - g_assert (priv->icalcomp == NULL); - priv->icalcomp = icalcomponent_new (ICAL_VCALENDAR_COMPONENT); - - /* RFC 2445, section 4.7.1 */ - prop = icalproperty_new_calscale ("GREGORIAN"); - icalcomponent_add_property (priv->icalcomp, prop); - - /* RFC 2445, section 4.7.3 */ - prop = icalproperty_new_prodid ("-//Helix Code//NONSGML Evolution Calendar//EN"); - icalcomponent_add_property (priv->icalcomp, prop); - - /* RFC 2445, section 4.7.4 */ - prop = icalproperty_new_version ("2.0"); - icalcomponent_add_property (priv->icalcomp, prop); - - /* Create our internal data */ - - g_assert (priv->comp_uid_hash == NULL); - priv->comp_uid_hash = g_hash_table_new (g_str_hash, g_str_equal); - - /* Done */ - - gnome_vfs_uri_ref (uri); - - priv->uri = uri; - - mark_dirty (cbfile); -} - -/* Get_n_objects handler for the file backend */ -static int -cal_backend_file_get_n_objects (CalBackend *backend, CalObjType type) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - int n; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, -1); - - n = 0; - - if (type & CALOBJ_TYPE_EVENT) - n += g_list_length (priv->events); - - if (type & CALOBJ_TYPE_TODO) - n += g_list_length (priv->todos); - - if (type & CALOBJ_TYPE_JOURNAL) - n += g_list_length (priv->journals); - - return n; -} - -/* Get_object handler for the file backend */ -static char * -cal_backend_file_get_object (CalBackend *backend, const char *uid) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - CalComponent *comp; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (uid != NULL, NULL); - - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - g_assert (priv->comp_uid_hash != NULL); - - comp = lookup_component (cbfile, uid); - - if (!comp) - return NULL; - - return cal_component_get_as_string (comp); -} - -/* Builds a list of UIDs from a list of CalComponent objects */ -static void -build_uids_list (GList **list, GList *components) -{ - GList *l; - - for (l = components; l; l = l->next) { - CalComponent *comp; - const char *uid; - - comp = CAL_COMPONENT (l->data); - cal_component_get_uid (comp, &uid); - *list = g_list_prepend (*list, g_strdup (uid)); - } -} - -/* Get_uids handler for the file backend */ -static GList * -cal_backend_file_get_uids (CalBackend *backend, CalObjType type) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - GList *list; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - - list = NULL; - - if (type & CALOBJ_TYPE_EVENT) - build_uids_list (&list, priv->events); - - if (type & CALOBJ_TYPE_TODO) - build_uids_list (&list, priv->todos); - - if (type & CALOBJ_TYPE_JOURNAL) - build_uids_list (&list, priv->journals); - - return list; -} - -/* Callback used from cal_recur_generate_instances(); adds the component's UID - * to our hash table. - */ -static gboolean -add_instance (CalComponent *comp, time_t start, time_t end, gpointer data) -{ - GHashTable *uid_hash; - const char *uid; - const char *old_uid; - - uid_hash = data; - - /* We only care that the component's UID is listed in the hash table; - * that's why we only allow generation of one instance (i.e. return - * FALSE every time). - */ - - cal_component_get_uid (comp, &uid); - - old_uid = g_hash_table_lookup (uid_hash, uid); - if (old_uid) - return FALSE; - - g_hash_table_insert (uid_hash, (char *) uid, NULL); - return FALSE; -} - -/* Populates a hash table with the UIDs of the components that occur or recur - * within a specific time range. - */ -static void -get_instances_in_range (GHashTable *uid_hash, GList *components, time_t start, time_t end) -{ - GList *l; - - for (l = components; l; l = l->next) { - CalComponent *comp; - - comp = CAL_COMPONENT (l->data); - cal_recur_generate_instances (comp, start, end, add_instance, uid_hash); - } -} - -/* Used from g_hash_table_foreach(), adds a UID from the hash table to our list */ -static void -add_uid_to_list (gpointer key, gpointer value, gpointer data) -{ - GList **list; - const char *uid; - char *uid_copy; - - list = data; - - uid = key; - uid_copy = g_strdup (uid); - - *list = g_list_prepend (*list, uid_copy); -} - -/* Get_objects_in_range handler for the file backend */ -static GList * -cal_backend_file_get_objects_in_range (CalBackend *backend, CalObjType type, - time_t start, time_t end) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - GList *event_list; - GHashTable *uid_hash; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - uid_hash = g_hash_table_new (g_str_hash, g_str_equal); - - if (type & CALOBJ_TYPE_EVENT) - get_instances_in_range (uid_hash, priv->events, start, end); - - if (type & CALOBJ_TYPE_TODO) - get_instances_in_range (uid_hash, priv->todos, start, end); - - if (type & CALOBJ_TYPE_JOURNAL) - get_instances_in_range (uid_hash, priv->journals, start, end); - - event_list = NULL; - g_hash_table_foreach (uid_hash, add_uid_to_list, &event_list); - g_hash_table_destroy (uid_hash); - - return event_list; -} - -/* Get_alarms_in_range handler for the file backend */ -static GList * -cal_backend_file_get_alarms_in_range (CalBackend *backend, time_t start, time_t end) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, NULL); - - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - /* FIXME: have to deal with an unknown number of alarms; we can't just - * do the same thing as in cal-backend-imc. - */ - return NULL; -} - -/* Get_alarms_for_object handler for the file backend */ -static gboolean -cal_backend_file_get_alarms_for_object (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (start != -1 && end != -1, FALSE); - g_return_val_if_fail (start <= end, FALSE); - g_return_val_if_fail (alarms != NULL, FALSE); - - /* FIXME */ - - *alarms = NULL; - return FALSE; -} - -/* Notifies a backend's clients that an object was updated */ -static void -notify_update (CalBackendFile *cbfile, const char *uid) -{ - CalBackendFilePrivate *priv; - GList *l; - - priv = cbfile->priv; - - for (l = priv->clients; l; l = l->next) { - Cal *cal; - - cal = CAL (l->data); - cal_notify_update (cal, uid); - } -} - -/* Notifies a backend's clients that an object was removed */ -static void -notify_remove (CalBackendFile *cbfile, const char *uid) -{ - CalBackendFilePrivate *priv; - GList *l; - - priv = cbfile->priv; - - for (l = priv->clients; l; l = l->next) { - Cal *cal; - - cal = CAL (l->data); - cal_notify_remove (cal, uid); - } -} - -/* Update_object handler for the file backend */ -static gboolean -cal_backend_file_update_object (CalBackend *backend, const char *uid, const char *calobj) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - icalcomponent *icalcomp; - icalcomponent_kind kind; - CalComponent *old_comp; - CalComponent *comp; - const char *comp_uid; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (calobj != NULL, FALSE); - - /* Pull the component from the string and ensure that it is sane */ - - icalcomp = icalparser_parse_string ((char *) calobj); - - if (!icalcomp) - return FALSE; - - kind = icalcomponent_isa (icalcomp); - - if (!(kind == ICAL_VEVENT_COMPONENT - || kind == ICAL_VTODO_COMPONENT - || kind == ICAL_VJOURNAL_COMPONENT)) { - /* We don't support this type of component */ - icalcomponent_free (icalcomp); - return FALSE; - } - - comp = cal_component_new (); - if (!cal_component_set_icalcomponent (comp, icalcomp)) { - gtk_object_unref (GTK_OBJECT (comp)); - icalcomponent_free (icalcomp); - return FALSE; - } - - /* Check the UID for sanity's sake */ - - cal_component_get_uid (comp, &comp_uid); - - if (strcmp (uid, comp_uid) != 0) { - gtk_object_unref (GTK_OBJECT (comp)); - return FALSE; - } - - /* Update the component */ - - old_comp = lookup_component (cbfile, uid); - - if (old_comp) - remove_component (cbfile, old_comp); - - add_component (cbfile, comp); -#if 0 - /* FIXME */ - new_ico->pilot_status = ICAL_PILOT_SYNC_MOD; -#endif - - mark_dirty (cbfile); - - /* FIXME: do the notification asynchronously */ - notify_update (cbfile, comp_uid); - - return TRUE; -} - -/* Remove_object handler for the file backend */ -static gboolean -cal_backend_file_remove_object (CalBackend *backend, const char *uid) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - CalComponent *comp; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - - comp = lookup_component (cbfile, uid); - if (!comp) - return FALSE; - - remove_component (cbfile, comp); - - mark_dirty (cbfile); - - /* FIXME: do the notification asynchronously */ - notify_remove (cbfile, uid); - - return TRUE; -} - -/* Get_uid_by_pilot_id handler for the file backend */ -static char * -cal_backend_file_get_uid_by_pilot_id (CalBackend *backend, unsigned long int pilot_id) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_val_if_fail (priv->icalcomp != NULL, FALSE); - - /* FIXME */ - return NULL; -} - -/* Update_pilot_id handler for the file backend */ -static void -cal_backend_file_update_pilot_id (CalBackend *backend, - const char *uid, - unsigned long int pilot_id, - unsigned long int pilot_status) -{ - CalBackendFile *cbfile; - CalBackendFilePrivate *priv; - - cbfile = CAL_BACKEND_FILE (backend); - priv = cbfile->priv; - - g_return_if_fail (priv->icalcomp != NULL); - - g_return_if_fail (uid != NULL); - - /* FIXME */ -} diff --git a/calendar/pcs/cal-backend-file.h b/calendar/pcs/cal-backend-file.h deleted file mode 100644 index 376790751c..0000000000 --- a/calendar/pcs/cal-backend-file.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Evolution calendar - iCalendar file backend - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_BACKEND_FILE_H -#define CAL_BACKEND_FILE_H - -#include -#include "cal-backend.h" - -BEGIN_GNOME_DECLS - - - -#define CAL_BACKEND_FILE_TYPE (cal_backend_file_get_type ()) -#define CAL_BACKEND_FILE(obj) (GTK_CHECK_CAST ((obj), CAL_BACKEND_FILE_TYPE, \ - CalBackendFile)) -#define CAL_BACKEND_FILE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_BACKEND_FILE_TYPE, \ - CalBackendFileClass)) -#define IS_CAL_BACKEND_FILE(obj) (GTK_CHECK_TYPE ((obj), CAL_BACKEND_FILE_TYPE)) -#define IS_CAL_BACKEND_FILE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_BACKEND_FILE_TYPE)) - -typedef struct _CalBackendFile CalBackendFile; -typedef struct _CalBackendFileClass CalBackendFileClass; - -typedef struct _CalBackendFilePrivate CalBackendFilePrivate; - -struct _CalBackendFile { - CalBackend backend; - - /* Private data */ - CalBackendFilePrivate *priv; -}; - -struct _CalBackendFileClass { - CalBackendClass parent_class; -}; - -GtkType cal_backend_file_get_type (void); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/pcs/cal-backend-imc.c b/calendar/pcs/cal-backend-imc.c deleted file mode 100644 index d50fc0d347..0000000000 --- a/calendar/pcs/cal-backend-imc.c +++ /dev/null @@ -1,1421 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* Evolution calendar - Internet Mail Consortium formats backend - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Federico Mena-Quintero - * Seth Alves - * Miguel de Icaza - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include "cal-backend-imc.h" -#include "cal-util/icalendar.h" - - - -/* Supported calendar formats from the IMC */ -typedef enum { - CAL_FORMAT_UNKNOWN, - CAL_FORMAT_VCALENDAR, - CAL_FORMAT_ICALENDAR -} CalendarFormat; - -/* Private part of the CalBackendIMC structure */ -typedef struct { - /* URI where the calendar data is stored */ - GnomeVFSURI *uri; - - /* Format of this calendar (iCalendar or vCalendar) */ - CalendarFormat format; - - /* List of Cal objects with their listeners */ - GList *clients; - - /* All the iCalObject structures in the calendar, hashed by UID. The - * hash key *is* icalobj->uid; it is not copied, so don't free it when - * you remove an object from the hash table. - */ - GHashTable *object_hash; - - /* All events, TODOs, and journals in the calendar */ - GList *events; - GList *todos; - GList *journals; - - /* Whether a calendar has been loaded */ - guint loaded : 1; - - /* Do we need to sync to permanent storage? */ - gboolean dirty : 1; -} IMCPrivate; - - - -static void cal_backend_imc_class_init (CalBackendIMCClass *class); -static void cal_backend_imc_init (CalBackendIMC *bimc); -static void cal_backend_imc_destroy (GtkObject *object); - -static GnomeVFSURI *cal_backend_imc_get_uri (CalBackend *backend); -static void cal_backend_imc_add_cal (CalBackend *backend, Cal *cal); -static CalBackendLoadStatus cal_backend_imc_load (CalBackend *backend, GnomeVFSURI *uri); -static void cal_backend_imc_create (CalBackend *backend, GnomeVFSURI *uri); - -static int cal_backend_imc_get_n_objects (CalBackend *backend, CalObjType type); -static char *cal_backend_imc_get_object (CalBackend *backend, const char *uid); -static GList *cal_backend_imc_get_uids (CalBackend *backend, CalObjType type); -static GList *cal_backend_imc_get_events_in_range (CalBackend *backend, time_t start, time_t end); -static GList *cal_backend_imc_get_alarms_in_range (CalBackend *backend, time_t start, time_t end); -static gboolean cal_backend_imc_get_alarms_for_object (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms); -static gboolean cal_backend_imc_update_object (CalBackend *backend, const char *uid, - const char *calobj); -static gboolean cal_backend_imc_remove_object (CalBackend *backend, const char *uid); -static char *cal_backend_imc_get_uid_by_pilot_id (CalBackend *backend, unsigned long int pilot_id); -static void cal_backend_imc_update_pilot_id (CalBackend *backend, - const char *uid, - unsigned long int pilot_id, - unsigned long int pilot_status); - - - -static void notify_update (CalBackendIMC *cbimc, const char *uid); - -static CalBackendClass *parent_class; - - - -/** - * cal_backend_imc_get_type: - * @void: - * - * Registers the #CalBackendIMC class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalBackendIMC class. - **/ -GtkType -cal_backend_imc_get_type (void) -{ - static GtkType cal_backend_imc_type = 0; - - if (!cal_backend_imc_type) { - static const GtkTypeInfo cal_backend_imc_info = { - "CalBackendIMC", - sizeof (CalBackendIMC), - sizeof (CalBackendIMCClass), - (GtkClassInitFunc) cal_backend_imc_class_init, - (GtkObjectInitFunc) cal_backend_imc_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_backend_imc_type = gtk_type_unique (CAL_BACKEND_TYPE, &cal_backend_imc_info); - } - - return cal_backend_imc_type; -} - -/* Class initialization function for the IMC backend */ -static void -cal_backend_imc_class_init (CalBackendIMCClass *class) -{ - GtkObjectClass *object_class; - CalBackendClass *backend_class; - - object_class = (GtkObjectClass *) class; - backend_class = (CalBackendClass *) class; - - parent_class = gtk_type_class (CAL_BACKEND_TYPE); - - backend_class->get_uri = cal_backend_imc_get_uri; - backend_class->add_cal = cal_backend_imc_add_cal; - backend_class->load = cal_backend_imc_load; - backend_class->create = cal_backend_imc_create; - backend_class->get_n_objects = cal_backend_imc_get_n_objects; - backend_class->get_object = cal_backend_imc_get_object; - backend_class->get_uids = cal_backend_imc_get_uids; - backend_class->get_events_in_range = cal_backend_imc_get_events_in_range; - backend_class->get_alarms_in_range = cal_backend_imc_get_alarms_in_range; - backend_class->get_alarms_for_object = cal_backend_imc_get_alarms_for_object; - backend_class->update_object = cal_backend_imc_update_object; - backend_class->remove_object = cal_backend_imc_remove_object; - backend_class->get_uid_by_pilot_id = cal_backend_imc_get_uid_by_pilot_id; - backend_class->update_pilot_id = cal_backend_imc_update_pilot_id; - - object_class->destroy = cal_backend_imc_destroy; -} - -/* Object initialization function for the IMC backend */ -static void -cal_backend_imc_init (CalBackendIMC *cbimc) -{ - IMCPrivate *priv; - - priv = g_new0 (IMCPrivate, 1); - cbimc->priv = priv; - - priv->format = CAL_FORMAT_UNKNOWN; -} - -static void -save_to_vcal (CalBackendIMC *cbimc, char *fname) -{ - FILE *fp; - IMCPrivate *priv; - VObject *vcal; - GList *l; - - priv = cbimc->priv; - - if (g_file_exists (fname)) { - char *backup_name = g_strconcat (fname, "~", NULL); - - /* FIXME: do error checking on system calls!!!! */ - - if (g_file_exists (backup_name)) - unlink (backup_name); - - rename (fname, backup_name); - g_free (backup_name); - } - - vcal = newVObject (VCCalProp); - addPropValue (vcal, VCProdIdProp, - "-//Helix Code//NONSGML Evolution Calendar//EN"); - - /* Per the vCalendar spec, this must be "1.0" */ - addPropValue (vcal, VCVersionProp, "1.0"); - - /* FIXME: this should really iterate over the object hash table instead - * of the lists; that way we won't lose objects if they are of a type - * that we don't support but are in the calendar anyways. - */ - - for (l = priv->events; l; l = l->next) { - iCalObject *ical = l->data; - VObject *vobject = ical_object_to_vobject (ical); - addVObjectProp (vcal, vobject); - } - - for (l = priv->todos; l; l = l->next) { - iCalObject *ical = l->data; - VObject *vobject = ical_object_to_vobject (ical); - addVObjectProp (vcal, vobject); - } - - for (l = priv->journals; l; l = l->next) { - iCalObject *ical = l->data; - VObject *vobject = ical_object_to_vobject (ical); - addVObjectProp (vcal, vobject); - } - - fp = fopen(fname,"w"); - if (fp) { - writeVObject(fp, vcal); - fclose(fp); - } - cleanVObject (vcal); - cleanStrTbl (); -} - -/* Saves a calendar */ -static void -save (CalBackendIMC *cbimc) -{ - char *str_uri; - IMCPrivate *priv = cbimc->priv; - - str_uri = gnome_vfs_uri_to_string (priv->uri, - (GNOME_VFS_URI_HIDE_USER_NAME - | GNOME_VFS_URI_HIDE_PASSWORD - | GNOME_VFS_URI_HIDE_HOST_NAME - | GNOME_VFS_URI_HIDE_HOST_PORT - | GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD)); - - if (!priv->dirty) - return; - - switch (priv->format) { - case CAL_FORMAT_VCALENDAR: - save_to_vcal (cbimc, str_uri); - break; - - case CAL_FORMAT_ICALENDAR: - /*icalendar_calendar_save (cbimc, str_uri);*/ - /* FIX ME */ - break; - - default: - g_message ("save(): Attempt to save a calendar with an unknown format!"); - break; - } - - printf ("cal-backend-imc: '%s' saved\n", str_uri); - - g_free (str_uri); -} - -/* g_hash_table_foreach() callback to destroy an iCalObject */ -static void -free_ical_object (gpointer key, gpointer value, gpointer data) -{ - iCalObject *ico; - - ico = value; - ical_object_unref (ico); -} - -/* Destroys an IMC backend's data */ -static void -destroy (CalBackendIMC *cbimc) -{ - IMCPrivate *priv; - - priv = cbimc->priv; - - if (priv->uri) { - gnome_vfs_uri_unref (priv->uri); - priv->uri = NULL; - } - - g_assert (priv->clients == NULL); - - if (priv->object_hash) { - g_hash_table_foreach (priv->object_hash, free_ical_object, NULL); - g_hash_table_destroy (priv->object_hash); - priv->object_hash = NULL; - } - - g_list_free (priv->events); - g_list_free (priv->todos); - g_list_free (priv->journals); - - priv->events = NULL; - priv->todos = NULL; - priv->journals = NULL; - - priv->loaded = FALSE; - priv->format = CAL_FORMAT_UNKNOWN; -} - -/* Destroy handler for the IMC backend */ -static void -cal_backend_imc_destroy (GtkObject *object) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_BACKEND_IMC (object)); - - cbimc = CAL_BACKEND_IMC (object); - priv = cbimc->priv; - - /* - if (priv->loaded) - save (cbimc); - */ - - destroy (cbimc); - - g_free (priv); - cbimc->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* iCalObject manipulation functions */ - -/* Looks up an object by its UID in the backend's object hash table */ -static iCalObject * -lookup_object (CalBackendIMC *cbimc, const char *uid) -{ - IMCPrivate *priv; - iCalObject *ico; - - priv = cbimc->priv; - ico = g_hash_table_lookup (priv->object_hash, uid); - - return ico; -} - -/* Ensures that an iCalObject has a unique identifier. If it doesn't have one, - * it will create one for it. - */ -static void -ensure_uid (iCalObject *ico) -{ - char *buf; - gulong str_time; - static guint seqno = 0; - - if (ico->uid) - return; - - str_time = (gulong) time (NULL); - - /* Is this good enough? */ - - buf = g_strdup_printf ("Evolution-Calendar-%d-%ld-%u", - (int) getpid(), str_time, seqno++); - ico->uid = buf; -} - -/* Adds an object to the calendar backend. Does *not* perform notification to - * calendar clients. - */ -static void -add_object (CalBackendIMC *cbimc, iCalObject *ico) -{ - IMCPrivate *priv; - - g_assert (ico != NULL); - - priv = cbimc->priv; - -#if 0 - /* FIXME: gnomecal old code */ - ico->new = 0; -#endif - - ensure_uid (ico); - g_hash_table_insert (priv->object_hash, ico->uid, ico); - - priv->dirty = TRUE; - - switch (ico->type) { - case ICAL_EVENT: - priv->events = g_list_prepend (priv->events, ico); -#if 0 - /* FIXME: gnomecal old code */ - ical_object_try_alarms (ico); -# ifdef DEBUGGING_MAIL_ALARM - ico->malarm.trigger = 0; - calendar_notify (0, ico); -# endif -#endif - break; - - case ICAL_TODO: - priv->todos = g_list_prepend (priv->todos, ico); - break; - - case ICAL_JOURNAL: - priv->journals = g_list_prepend (priv->journals, ico); - break; - - default: - g_assert_not_reached (); - } - -#if 0 - /* FIXME: gnomecal old code */ - ico->last_mod = time (NULL); -#endif -} - -/* Removes an object from the backend's hash and lists. Does not perform - * notification on the clients. - */ -static void -remove_object (CalBackendIMC *cbimc, iCalObject *ico) -{ - IMCPrivate *priv; - GList **list, *l; - - priv = cbimc->priv; - - g_assert (ico->uid != NULL); - g_hash_table_remove (priv->object_hash, ico->uid); - - priv->dirty = TRUE; - - switch (ico->type) { - case ICAL_EVENT: - list = &priv->events; - break; - - case ICAL_TODO: - list = &priv->todos; - break; - - case ICAL_JOURNAL: - list = &priv->journals; - break; - - default: - /* Make the compiler shut up. */ - list = NULL; - g_assert_not_reached (); - } - - l = g_list_find (*list, ico); - g_assert (l != NULL); - - *list = g_list_remove_link (*list, l); - g_list_free_1 (l); - - ical_object_unref (ico); -} - -/* Load a calendar from a VObject */ -static void -load_from_vobject (CalBackendIMC *cbimc, VObject *vobject) -{ - IMCPrivate *priv; - VObjectIterator i; - - priv = cbimc->priv; - - g_assert (!priv->loaded); - g_assert (priv->object_hash == NULL); - priv->object_hash = g_hash_table_new (g_str_hash, g_str_equal); - - initPropIterator (&i, vobject); - - while (moreIteration (&i)) { - VObject *this; - iCalObject *ical; - const char *object_name; - - this = nextVObject (&i); - object_name = vObjectName (this); -#if 0 - /* FIXME? What is this used for in gnomecal? */ - if (strcmp (object_name, VCDCreatedProp) == 0) { - cal->created = time_from_isodate (str_val (this)); - continue; - } -#endif - if (strcmp (object_name, VCLocationProp) == 0) - continue; /* FIXME: imlement */ - - if (strcmp (object_name, VCProdIdProp) == 0) - continue; /* FIXME: implement */ - - if (strcmp (object_name, VCVersionProp) == 0) - continue; /* FIXME: implement */ - - if (strcmp (object_name, VCTimeZoneProp) == 0) - continue; /* FIXME: implement */ - - ical = ical_object_create_from_vobject (this, object_name); - - /* FIXME: some broken files (ahem, old KOrganizer files) may - * have duplicated UIDs. This is Bad(tm). Deal with it by - * creating new UIDs for them and spitting some messages to the - * console. - */ - - if (ical) - add_object (cbimc, ical); - } -} - - - -/* Calendar backend methods */ - -/* Get_uri handler for the IMC backend */ -static GnomeVFSURI * -cal_backend_imc_get_uri (CalBackend *backend) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, NULL); - g_assert (priv->uri != NULL); - - return priv->uri; -} - -/* Callback used when a Cal is destroyed */ -static void -cal_destroy_cb (GtkObject *object, gpointer data) -{ - Cal *cal; - Cal *lcal; - CalBackendIMC *cbimc; - IMCPrivate *priv; - GList *l; - - fprintf (stderr, "cal_destroy_cb(): A Cal was destroyed!\n"); - - cal = CAL (object); - - cbimc = CAL_BACKEND_IMC (data); - priv = cbimc->priv; - - /* Find the cal in the list of clients */ - - for (l = priv->clients; l; l = l->next) { - lcal = CAL (l->data); - - if (lcal == cal) - break; - } - - g_assert (l != NULL); - - /* Disconnect */ - - priv->clients = g_list_remove_link (priv->clients, l); - g_list_free_1 (l); - - /* When all clients go away, notify the parent factory about it so that - * it may decide whether to kill the backend or not. - */ - if (!priv->clients) - cal_backend_last_client_gone (CAL_BACKEND (cbimc)); -} - -/* Add_cal handler for the IMC backend */ -static void -cal_backend_imc_add_cal (CalBackend *backend, Cal *cal) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_if_fail (priv->loaded); - g_return_if_fail (cal != NULL); - g_return_if_fail (IS_CAL (cal)); - - /* We do not keep a reference to the Cal since the calendar user agent - * owns it. - */ - - gtk_signal_connect (GTK_OBJECT (cal), "destroy", - GTK_SIGNAL_FUNC (cal_destroy_cb), - backend); - - priv->clients = g_list_prepend (priv->clients, cal); -} - -static icalcomponent * -icalendar_parse_file (char *fname) -{ - FILE *fp; - icalcomponent *comp = NULL; - char *str; - struct stat st; - int n; - - fp = fopen (fname, "r"); - if (!fp) { - /* FIXME: remove message */ - g_message ("icalendar_parse_file(): Cannot open open calendar file."); - return NULL; - } - - stat (fname, &st); - - str = g_malloc (st.st_size + 2); - - n = fread (str, 1, st.st_size, fp); - if (n != st.st_size) { - /* FIXME: remove message, return error code instead */ - g_message ("icalendar_parse_file(): Read error."); - } - str[n] = '\0'; - - fclose (fp); - - comp = icalparser_parse_string (str); - g_free (str); - - return comp; -} - -static void -icalendar_calendar_load (CalBackendIMC *cbimc, char *fname) -{ - IMCPrivate *priv; - icalcomponent *comp; - icalcomponent *subcomp; - iCalObject *ical; - - priv = cbimc->priv; - - g_assert (!priv->loaded); - g_assert (priv->object_hash == NULL); - - priv->object_hash = g_hash_table_new (g_str_hash, g_str_equal); - - comp = icalendar_parse_file (fname); - subcomp = icalcomponent_get_first_component (comp, - ICAL_ANY_COMPONENT); - while (subcomp) { - ical = ical_object_create_from_icalcomponent (subcomp); - if (ical->type != ICAL_EVENT && - ical->type != ICAL_TODO && - ical->type != ICAL_JOURNAL) { - g_message ("icalendar_calendar_load(): Skipping unsupported " - "iCalendar component."); - } else - add_object (cbimc, ical); - - subcomp = icalcomponent_get_next_component (comp, - ICAL_ANY_COMPONENT); - } -} - -/* ics is to be used to designate a file containing (an arbitrary set of) - * calendaring and scheduling information. - * - * ifb is to be used to designate a file containing free or busy time - * information. - * - * anything else is assumed to be a vcal file. - * - * FIXME: should we return UNKNOWN at some point? - */ -static CalendarFormat -cal_get_type_from_filename (char *str_uri) -{ - int len; - - if (str_uri == NULL) - return CAL_FORMAT_VCALENDAR; - - len = strlen (str_uri); - if (len < 4) - return CAL_FORMAT_VCALENDAR; - - if (str_uri[len - 4] == '.' && str_uri[len - 3] == 'i' && - str_uri[len - 2] == 'c' && str_uri[len - 1] == 's') - return CAL_FORMAT_ICALENDAR; - - if (str_uri[len - 4] == '.' && str_uri[len - 3] == 'i' && - str_uri[len - 2] == 'f' && str_uri[len - 1] == 'b') - return CAL_FORMAT_ICALENDAR; - - if (str_uri[len - 4] == '.' && str_uri[len - 3] == 'i' && - str_uri[len - 2] == 'c' && str_uri[len - 1] == 's') - return CAL_FORMAT_ICALENDAR; - - if (len < 5) - return CAL_FORMAT_VCALENDAR; - - if (str_uri[len - 5] == '.' && str_uri[len - 4] == 'i' && - str_uri[len - 3] == 'c' && str_uri[len - 2] == 'a' && - str_uri[len - 1] == 'l') - return CAL_FORMAT_ICALENDAR; - - return CAL_FORMAT_VCALENDAR; -} - -/* Load handler for the IMC backend */ -static CalBackendLoadStatus -cal_backend_imc_load (CalBackend *backend, GnomeVFSURI *uri) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - VObject *vobject; - char *str_uri; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (!priv->loaded, CAL_BACKEND_LOAD_ERROR); - g_return_val_if_fail (uri != NULL, CAL_BACKEND_LOAD_ERROR); - - /* FIXME: this looks rather bad; maybe we should check for local files - * and fail if they are remote. - */ - - str_uri = gnome_vfs_uri_to_string (uri, - (GNOME_VFS_URI_HIDE_USER_NAME - | GNOME_VFS_URI_HIDE_PASSWORD - | GNOME_VFS_URI_HIDE_HOST_NAME - | GNOME_VFS_URI_HIDE_HOST_PORT - | GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD)); - - /* look at the extension on the filename and decide if this is a - * iCalendar or vCalendar file. - */ - priv->format = cal_get_type_from_filename (str_uri); - - /* load */ - - switch (priv->format) { - case CAL_FORMAT_VCALENDAR: - vobject = Parse_MIME_FromFileName (str_uri); - - if (!vobject){ - g_free (str_uri); - return CAL_BACKEND_LOAD_ERROR; - } - - load_from_vobject (cbimc, vobject); - cleanVObject (vobject); - cleanStrTbl (); - break; - - case CAL_FORMAT_ICALENDAR: - icalendar_calendar_load (cbimc, str_uri); - break; - - default: - g_free (str_uri); - return CAL_BACKEND_LOAD_ERROR; - } - - g_free (str_uri); - - gnome_vfs_uri_ref (uri); - - priv->uri = uri; - priv->loaded = TRUE; - - return CAL_BACKEND_LOAD_SUCCESS; -} - -/* Create handler for the IMC backend */ -static void -cal_backend_imc_create (CalBackend *backend, GnomeVFSURI *uri) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - char *str_uri; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_if_fail (!priv->loaded); - g_return_if_fail (uri != NULL); - - /* Create the new calendar information */ - - g_assert (priv->object_hash == NULL); - priv->object_hash = g_hash_table_new (g_str_hash, g_str_equal); - - priv->dirty = TRUE; - - /* Done */ - - /* FIXME: this looks rather bad; maybe we should check for local files - * and fail if they are remote. - */ - - str_uri = gnome_vfs_uri_to_string (uri, - (GNOME_VFS_URI_HIDE_USER_NAME - | GNOME_VFS_URI_HIDE_PASSWORD - | GNOME_VFS_URI_HIDE_HOST_NAME - | GNOME_VFS_URI_HIDE_HOST_PORT - | GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD)); - - /* look at the extension on the filename and decide if this is a - * iCalendar or vCalendar file. - */ - priv->format = cal_get_type_from_filename (str_uri); - - g_free (str_uri); - - gnome_vfs_uri_ref (uri); - - priv->uri = uri; - priv->loaded = TRUE; - - save (cbimc); -} - -struct get_n_objects_closure { - CalObjType type; - int n; -}; - -/* Counts the number of objects of the specified type. Called from - * g_hash_table_foreach(). - */ -static void -count_objects (gpointer key, gpointer value, gpointer data) -{ - iCalObject *ico; - struct get_n_objects_closure *c; - gboolean store; - - ico = value; - c = data; - - store = FALSE; - - if (ico->type == ICAL_EVENT) - store = (c->type & CALOBJ_TYPE_EVENT) != 0; - else if (ico->type == ICAL_TODO) - store = (c->type & CALOBJ_TYPE_TODO) != 0; - else if (ico->type == ICAL_JOURNAL) - store = (c->type & CALOBJ_TYPE_JOURNAL) != 0; - - if (store) - c->n++; -} - -/* Get_n_objects handler for the IMC backend */ -static int -cal_backend_imc_get_n_objects (CalBackend *backend, CalObjType type) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - struct get_n_objects_closure c; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, -1); - - c.type = type; - c.n = 0; - - g_hash_table_foreach (priv->object_hash, count_objects, &c); - - return c.n; -} - -/* Get_object handler for the IMC backend */ -static char * -cal_backend_imc_get_object (CalBackend *backend, const char *uid) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - iCalObject *ico; - char *buf; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (uid != NULL, NULL); - - g_return_val_if_fail (priv->loaded, NULL); - g_assert (priv->object_hash != NULL); - - ico = lookup_object (cbimc, uid); - - if (!ico) - return NULL; - - buf = ical_object_to_string (ico); - - return buf; -} - -struct get_uids_closure { - CalObjType type; - GList *uid_list; -}; - -/* Builds a list of UIDs for objects that match the sought type. Called from - * g_hash_table_foreach(). - */ -static void -build_uids_list (gpointer key, gpointer value, gpointer data) -{ - iCalObject *ico; - struct get_uids_closure *c; - gboolean store; - - ico = value; - c = data; - - store = FALSE; - - if (ico->type == ICAL_EVENT) - store = (c->type & CALOBJ_TYPE_EVENT) ? TRUE : FALSE; - else if (ico->type == ICAL_TODO) - store = (c->type & CALOBJ_TYPE_TODO) ? TRUE : FALSE; - else if (ico->type == ICAL_JOURNAL) - store = (c->type & CALOBJ_TYPE_JOURNAL) ? TRUE : FALSE; - - if (store) - c->uid_list = g_list_prepend (c->uid_list, g_strdup (ico->uid)); -} - -/* Get_uids handler for the IMC backend */ -static GList * -cal_backend_imc_get_uids (CalBackend *backend, CalObjType type) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - struct get_uids_closure c; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, NULL); - - c.type = type; - c.uid_list = NULL; - g_hash_table_foreach (priv->object_hash, build_uids_list, &c); - - return c.uid_list; -} - - - -static char * -cal_backend_imc_get_uid_by_pilot_id (CalBackend *backend, - unsigned long int pilot_id) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - GList *l; - iCalObject *obj = NULL; - - g_return_val_if_fail (backend != NULL, NULL); - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - g_return_val_if_fail (priv->loaded, NULL); - - for (l = priv->events; l; l = l->next){ - obj = l->data; - if (obj->pilot_id == pilot_id) - goto done; - } - - for (l = priv->todos; l; l = l->next){ - obj = l->data; - if (obj->pilot_id == pilot_id) - goto done; - } - - done: - if (!obj || obj->pilot_id != pilot_id) - return NULL; - - return g_strdup (obj->uid); -} - - -void -cal_backend_imc_update_pilot_id (CalBackend *backend, - const char *uid, - unsigned long int pilot_id, - unsigned long int pilot_status) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - iCalObject *obj; - - g_return_if_fail (backend != NULL); - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - g_return_if_fail (priv->loaded); - - obj = lookup_object (cbimc, uid); - - obj->pilot_id = pilot_id; - obj->pilot_status = pilot_status; - - save (cbimc); - - notify_update (cbimc, uid); -} - - - -/* Allocates and fills in a new CalObjInstance structure */ -static CalObjInstance * -build_cal_obj_instance (iCalObject *ico, time_t start, time_t end) -{ - CalObjInstance *icoi; - - g_assert (ico->uid != NULL); - - icoi = g_new (CalObjInstance, 1); - icoi->uid = g_strdup (ico->uid); - icoi->start = start; - icoi->end = end; - - return icoi; -} - -struct build_event_list_closure { - CalBackendIMC *cbimc; - GList *event_list; -}; - -/* Builds a sorted list of event object instances. Used as a callback from - * ical_object_generate_events(). - */ -static int -build_event_list (iCalObject *ico, time_t start, time_t end, void *data) -{ - CalObjInstance *icoi; - struct build_event_list_closure *c; - - c = data; - - icoi = build_cal_obj_instance (ico, start, end); - c->event_list = g_list_prepend (c->event_list, icoi); - - return TRUE; -} - -/* Compares two CalObjInstance structures by their start times. Called from - * g_list_sort(). - */ -static gint -compare_instance_func (gconstpointer a, gconstpointer b) -{ - const CalObjInstance *ca, *cb; - time_t diff; - - ca = a; - cb = b; - - diff = ca->start - cb->start; - return (diff < 0) ? -1 : (diff > 0) ? 1 : 0; -} - -/* Get_events_in_range handler for the IMC backend */ -static GList * -cal_backend_imc_get_events_in_range (CalBackend *backend, time_t start, time_t end) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - struct build_event_list_closure c; - GList *l; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, NULL); - - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - c.cbimc = cbimc; - c.event_list = NULL; - - for (l = priv->events; l; l = l->next) { - iCalObject *ico; - - ico = l->data; - ical_object_generate_events (ico, start, end, - build_event_list, &c); - } - - c.event_list = g_list_sort (c.event_list, compare_instance_func); - return c.event_list; -} - -struct build_alarm_list_closure { - time_t start; - time_t end; - GList *alarms; -}; - -/* Computes the offset in minutes from an alarm trigger to the actual event */ -static int -compute_alarm_offset (CalendarAlarm *a) -{ - int ofs; - - if (!a->enabled) - return -1; - - switch (a->units) { - case ALARM_MINUTES: - ofs = a->count * 60; - break; - - case ALARM_HOURS: - ofs = a->count * 3600; - break; - - case ALARM_DAYS: - ofs = a->count * 24 * 3600; - break; - - default: - ofs = -1; - g_assert_not_reached (); - } - - return ofs; -} - -/* Allocates and fills in a new CalAlarmInstance structure */ -static CalAlarmInstance * -build_cal_alarm_instance (iCalObject *ico, enum AlarmType type, time_t trigger, time_t occur) -{ - CalAlarmInstance *ai; - - g_assert (ico->uid != NULL); - - ai = g_new (CalAlarmInstance, 1); - ai->uid = g_strdup (ico->uid); - ai->type = type; - ai->trigger = trigger; - ai->occur = occur; - - return ai; -} - -/* Adds the specified alarm to the list if its trigger time falls within the - * requested range. - */ -static void -try_add_alarm (time_t occur_start, iCalObject *ico, CalendarAlarm *alarm, - struct build_alarm_list_closure *c) -{ - int ofs; - time_t trigger; - CalAlarmInstance *ai; - - if (!alarm->enabled) - return; - - ofs = compute_alarm_offset (alarm); - g_assert (ofs != -1); - - trigger = occur_start - ofs; - - if (trigger < c->start || trigger > c->end) - return; - - ai = build_cal_alarm_instance (ico, alarm->type, trigger, occur_start); - c->alarms = g_list_prepend (c->alarms, ai); -} - -/* Builds a list of alarm instances. Used as a callback from - * ical_object_generate_events(). - */ -static int -build_alarm_list (iCalObject *ico, time_t start, time_t end, void *data) -{ - struct build_alarm_list_closure *c; - - c = data; - - try_add_alarm (start, ico, &ico->dalarm, c); - try_add_alarm (start, ico, &ico->aalarm, c); - try_add_alarm (start, ico, &ico->palarm, c); - try_add_alarm (start, ico, &ico->malarm, c); - - return TRUE; -} - -/* Adds all the alarm triggers that occur within the specified time range */ -static GList * -add_alarms_for_object (GList *alarms, iCalObject *ico, time_t start, time_t end) -{ - struct build_alarm_list_closure c; - int dofs, aofs, pofs, mofs; - int max_ofs; - - dofs = compute_alarm_offset (&ico->dalarm); - aofs = compute_alarm_offset (&ico->aalarm); - pofs = compute_alarm_offset (&ico->palarm); - mofs = compute_alarm_offset (&ico->malarm); - - max_ofs = MAX (dofs, MAX (aofs, MAX (pofs, mofs))); - if (max_ofs == -1) - return alarms; - - c.start = start; - c.end = end; - c.alarms = alarms; - - ical_object_generate_events (ico, start, end, build_alarm_list, &c); - return c.alarms; -} - -/* Get_alarms_in_range handler for the IMC backend */ -static GList * -cal_backend_imc_get_alarms_in_range (CalBackend *backend, time_t start, time_t end) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - GList *l; - GList *alarms; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, NULL); - - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - /* Only VEVENT and VTODO components can have alarms */ - - alarms = NULL; - - for (l = priv->events; l; l = l->next) - alarms = add_alarms_for_object (alarms, (iCalObject *) l->data, start, end); - - for (l = priv->todos; l; l = l->next) - alarms = add_alarms_for_object (alarms, (iCalObject *) l->data, start, end); - - alarms = g_list_sort (alarms, compare_instance_func); - return alarms; -} - -/* Get_alarms_for_object handler for the IMC backend */ -static gboolean -cal_backend_imc_get_alarms_for_object (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - iCalObject *ico; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, FALSE); - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (start != -1 && end != -1, FALSE); - g_return_val_if_fail (start <= end, FALSE); - g_return_val_if_fail (alarms != NULL, FALSE); - - *alarms = NULL; - - ico = lookup_object (cbimc, uid); - if (!ico) - return FALSE; - - /* Only VEVENT and VTODO components can have alarms */ - - if (ico->type != ICAL_EVENT && ico->type != ICAL_TODO) - return TRUE; - - *alarms = add_alarms_for_object (*alarms, ico, start, end); - *alarms = g_list_sort (*alarms, compare_instance_func); - - return TRUE; -} - -/* Notifies a backend's clients that an object was updated */ -static void -notify_update (CalBackendIMC *cbimc, const char *uid) -{ - IMCPrivate *priv; - GList *l; - - priv = cbimc->priv; - - for (l = priv->clients; l; l = l->next) { - Cal *cal; - - cal = CAL (l->data); - cal_notify_update (cal, uid); - } -} - -/* Notifies a backend's clients that an object was removed */ -static void -notify_remove (CalBackendIMC *cbimc, const char *uid) -{ - IMCPrivate *priv; - GList *l; - - priv = cbimc->priv; - - for (l = priv->clients; l; l = l->next) { - Cal *cal; - - cal = CAL (l->data); - cal_notify_remove (cal, uid); - } -} - -/* Update_object handler for the IMC backend */ -static gboolean -cal_backend_imc_update_object (CalBackend *backend, const char *uid, const char *calobj) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - iCalObject *ico, *new_ico; - CalObjFindStatus status; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (calobj != NULL, FALSE); - - /* Pull the object from the string */ - - status = ical_object_find_in_string (uid, calobj, &new_ico); - - if (status != CAL_OBJ_FIND_SUCCESS) - return FALSE; - - /* Update the object */ - - ico = lookup_object (cbimc, uid); - - if (ico) - remove_object (cbimc, ico); - - add_object (cbimc, new_ico); - new_ico->pilot_status = ICAL_PILOT_SYNC_MOD; - save (cbimc); - - /* FIXME: do the notification asynchronously */ - - notify_update (cbimc, new_ico->uid); - - return TRUE; -} - -/* Remove_object handler for the IMC backend */ -static gboolean -cal_backend_imc_remove_object (CalBackend *backend, const char *uid) -{ - CalBackendIMC *cbimc; - IMCPrivate *priv; - iCalObject *ico; - - cbimc = CAL_BACKEND_IMC (backend); - priv = cbimc->priv; - - g_return_val_if_fail (priv->loaded, FALSE); - - g_return_val_if_fail (uid != NULL, FALSE); - - ico = lookup_object (cbimc, uid); - if (!ico) - return FALSE; - - remove_object (cbimc, ico); - - priv->dirty = TRUE; - save (cbimc); - - /* FIXME: do the notification asynchronously */ - notify_remove (cbimc, uid); - - return TRUE; -} diff --git a/calendar/pcs/cal-backend-imc.h b/calendar/pcs/cal-backend-imc.h deleted file mode 100644 index 954bbc52cc..0000000000 --- a/calendar/pcs/cal-backend-imc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Evolution calendar - Internet Mail Consortium formats backend - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Authors: Federico Mena-Quintero - * Seth Alves - * Miguel de Icaza - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_BACKEND_IMC_H -#define CAL_BACKEND_IMC_H - -#include -#include "cal-backend.h" - -BEGIN_GNOME_DECLS - - - -#define CAL_BACKEND_IMC_TYPE (cal_backend_imc_get_type ()) -#define CAL_BACKEND_IMC(obj) (GTK_CHECK_CAST ((obj), CAL_BACKEND_IMC_TYPE, CalBackendIMC)) -#define CAL_BACKEND_IMC_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_BACKEND_IMC_TYPE, \ - CalBackendIMCClass)) -#define IS_CAL_BACKEND_IMC(obj) (GTK_CHECK_TYPE ((obj), CAL_BACKEND_IMC_TYPE)) -#define IS_CAL_BACKEND_IMC_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_BACKEND_IMC_TYPE)) - -typedef struct _CalBackendIMC CalBackendIMC; -typedef struct _CalBackendIMCClass CalBackendIMCClass; - -struct _CalBackendIMC { - CalBackend backend; - - /* Private data */ - gpointer priv; -}; - -struct _CalBackendIMCClass { - CalBackendClass parent_class; -}; - -GtkType cal_backend_imc_get_type (void); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c deleted file mode 100644 index e33cedeae8..0000000000 --- a/calendar/pcs/cal-backend.c +++ /dev/null @@ -1,403 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* Evolution calendar - generic backend class - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include "cal-backend.h" -#include "libversit/vcc.h" - - - -/* Signal IDs */ -enum { - LAST_CLIENT_GONE, - LAST_SIGNAL -}; - -static void cal_backend_class_init (CalBackendClass *class); - -static GtkObjectClass *parent_class; - -static guint cal_backend_signals[LAST_SIGNAL]; - -#define CLASS(backend) (CAL_BACKEND_CLASS (GTK_OBJECT (backend)->klass)) - - - -/** - * cal_backend_get_type: - * @void: - * - * Registers the #CalBackend class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalBackend class. - **/ -GtkType -cal_backend_get_type (void) -{ - static GtkType cal_backend_type = 0; - - if (!cal_backend_type) { - static const GtkTypeInfo cal_backend_info = { - "CalBackend", - sizeof (CalBackend), - sizeof (CalBackendClass), - (GtkClassInitFunc) cal_backend_class_init, - (GtkObjectInitFunc) NULL, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_backend_type = - gtk_type_unique (GTK_TYPE_OBJECT, &cal_backend_info); - } - - return cal_backend_type; -} - -/* Class initialization function for the calendar backend */ -static void -cal_backend_class_init (CalBackendClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (GTK_TYPE_OBJECT); - - cal_backend_signals[LAST_CLIENT_GONE] = - gtk_signal_new ("last_client_gone", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalBackendClass, last_client_gone), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, cal_backend_signals, LAST_SIGNAL); -} - - - -/** - * cal_backend_get_uri: - * @backend: A calendar backend. - * - * Queries the URI of a calendar backend, which must already have a loaded - * calendar. - * - * Return value: The URI where the calendar is stored. - **/ -GnomeVFSURI * -cal_backend_get_uri (CalBackend *backend) -{ - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - - g_assert (CLASS (backend)->get_uri != NULL); - return (* CLASS (backend)->get_uri) (backend); -} - -/** - * cal_backend_add_cal: - * @backend: A calendar backend. - * @cal: A calendar client interface object. - * - * Adds a calendar client interface object to a calendar @backend. - * The calendar backend must already have a loaded calendar. - **/ -void -cal_backend_add_cal (CalBackend *backend, Cal *cal) -{ - g_return_if_fail (backend != NULL); - g_return_if_fail (IS_CAL_BACKEND (backend)); - - g_assert (CLASS (backend)->add_cal != NULL); - (* CLASS (backend)->add_cal) (backend, cal); -} - -/** - * cal_backend_load: - * @backend: A calendar backend. - * @uri: URI that contains the calendar data. - * - * Loads a calendar backend with data from a calendar stored at the specified - * URI. - * - * Return value: An operation status code. - **/ -CalBackendLoadStatus -cal_backend_load (CalBackend *backend, GnomeVFSURI *uri) -{ - g_return_val_if_fail (backend != NULL, CAL_BACKEND_LOAD_ERROR); - g_return_val_if_fail (IS_CAL_BACKEND (backend), CAL_BACKEND_LOAD_ERROR); - g_return_val_if_fail (uri != NULL, CAL_BACKEND_LOAD_ERROR); - - g_assert (CLASS (backend)->load != NULL); - return (* CLASS (backend)->load) (backend, uri); -} - -/** - * cal_backend_create: - * @backend: A calendar backend. - * @uri: URI that will contain the calendar data. - * - * Creates a new empty calendar in a calendar backend. - **/ -void -cal_backend_create (CalBackend *backend, GnomeVFSURI *uri) -{ - g_return_if_fail (backend != NULL); - g_return_if_fail (IS_CAL_BACKEND (backend)); - g_return_if_fail (uri != NULL); - - g_assert (CLASS (backend)->create != NULL); - (* CLASS (backend)->create) (backend, uri); -} - -/** - * cal_backend_get_n_objects: - * @backend: A calendar backend. - * @type: Types of objects that will be included in the count. - * - * Queries the number of calendar objects of a particular type. - * - * Return value: Number of objects of the specified @type. - **/ -int -cal_backend_get_n_objects (CalBackend *backend, CalObjType type) -{ - g_return_val_if_fail (backend != NULL, -1); - g_return_val_if_fail (IS_CAL_BACKEND (backend), -1); - - g_assert (CLASS (backend)->get_n_objects != NULL); - return (* CLASS (backend)->get_n_objects) (backend, type); -} - -/** - * cal_backend_get_object: - * @backend: A calendar backend. - * @uid: Unique identifier for a calendar object. - * - * Queries a calendar backend for a calendar object based on its unique - * identifier. - * - * Return value: The string representation of a complete calendar wrapping the - * the sought object, or NULL if no object had the specified UID. A complete - * calendar is returned because you also need the timezone data. - **/ -char * -cal_backend_get_object (CalBackend *backend, const char *uid) -{ - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - g_return_val_if_fail (uid != NULL, NULL); - - g_assert (CLASS (backend)->get_object != NULL); - return (* CLASS (backend)->get_object) (backend, uid); -} - -/** - * cal_backend_get_uids: - * @backend: A calendar backend. - * @type: Bitmask with types of objects to return. - * - * Builds a list of unique identifiers corresponding to calendar objects whose - * type matches one of the types specified in the @type flags. - * - * Return value: A list of strings that are the sought UIDs. The list should be - * freed using the cal_obj_uid_list_free() function. - **/ -GList * -cal_backend_get_uids (CalBackend *backend, CalObjType type) -{ - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - - g_assert (CLASS (backend)->get_uids != NULL); - return (* CLASS (backend)->get_uids) (backend, type); -} - -/** - * cal_backend_get_objects_in_range: - * @backend: A calendar backend. - * @type: Bitmask with types of objects to return. - * @start: Start time for query. - * @end: End time for query. - * - * Builds a list of unique identifiers corresponding to calendar objects of the - * specified type that occur or recur within the specified time range. - * - * Return value: A list of UID strings. The list should be freed using the - * cal_obj_uid_list_free() function. - **/ -GList * -cal_backend_get_objects_in_range (CalBackend *backend, CalObjType type, - time_t start, time_t end) -{ - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - g_assert (CLASS (backend)->get_objects_in_range != NULL); - return (* CLASS (backend)->get_objects_in_range) (backend, type, start, end); -} - -/** - * cal_backend_get_alarms_in_range: - * @backend: A calendar backend. - * @start: Start time for query. - * @end: End time for query. - * - * Builds a sorted list of the alarms that trigger in the specified time range. - * - * Return value: A list of #CalAlarmInstance structures, sorted by trigger time. - **/ -GList * -cal_backend_get_alarms_in_range (CalBackend *backend, time_t start, time_t end) -{ - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - g_return_val_if_fail (start != -1 && end != -1, NULL); - g_return_val_if_fail (start <= end, NULL); - - g_assert (CLASS (backend)->get_alarms_in_range != NULL); - return (* CLASS (backend)->get_alarms_in_range) (backend, start, end); -} - -/** - * cal_backend_get_alarms_for_object: - * @backend: A calendar backend. - * @uid: Unique identifier for a calendar object. - * @start: Start time for query. - * @end: End time for query. - * @alarms: Return value for the list of alarm instances. - * - * Builds a sorted list of the alarms of the specified event that trigger in a - * particular time range. - * - * Return value: TRUE on success, FALSE if the object was not found. - **/ -gboolean -cal_backend_get_alarms_for_object (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms) -{ - g_return_val_if_fail (backend != NULL, FALSE); - g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE); - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (start != -1 && end != -1, FALSE); - g_return_val_if_fail (start <= end, FALSE); - g_return_val_if_fail (alarms != NULL, FALSE); - - g_assert (CLASS (backend)->get_alarms_for_object != NULL); - return (* CLASS (backend)->get_alarms_for_object) (backend, uid, start, end, alarms); -} - - -char *cal_backend_get_uid_by_pilot_id (CalBackend *backend, unsigned long int pilot_id) -{ - g_return_val_if_fail (backend != NULL, FALSE); - g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE); - g_assert (CLASS(backend)->get_uid_by_pilot_id != NULL); - return (* CLASS(backend)->get_uid_by_pilot_id) (backend, pilot_id); -} - - -void cal_backend_update_pilot_id (CalBackend *backend, const char *uid, - unsigned long int pilot_id, - unsigned long int pilot_status) -{ - g_return_if_fail (backend != NULL); - g_return_if_fail (IS_CAL_BACKEND (backend)); - g_assert (CLASS(backend)->update_pilot_id != NULL); - (* CLASS(backend)->update_pilot_id) (backend, uid, - pilot_id, pilot_status); -} - - - -/** - * cal_backend_update_object: - * @backend: A calendar backend. - * @uid: Unique identifier of the object to update. - * @calobj: String representation of the new calendar object. - * - * Updates an object in a calendar backend. It will replace any existing - * object that has the same UID as the specified one. The backend will in - * turn notify all of its clients about the change. - * - * Return value: TRUE on success, FALSE on being passed an invalid object or one - * with an unsupported type. - **/ -gboolean -cal_backend_update_object (CalBackend *backend, const char *uid, const char *calobj) -{ - g_return_val_if_fail (backend != NULL, FALSE); - g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE); - g_return_val_if_fail (uid != NULL, FALSE); - g_return_val_if_fail (calobj != NULL, FALSE); - - g_assert (CLASS (backend)->update_object != NULL); - return (* CLASS (backend)->update_object) (backend, uid, calobj); -} - -/** - * cal_backend_remove_object: - * @backend: A calendar backend. - * @uid: Unique identifier of the object to remove. - * - * Removes an object in a calendar backend. The backend will notify all of its - * clients about the change. - * - * Return value: TRUE on success, FALSE on being passed an UID for an object - * that does not exist in the backend. - **/ -gboolean -cal_backend_remove_object (CalBackend *backend, const char *uid) -{ - g_return_val_if_fail (backend != NULL, FALSE); - g_return_val_if_fail (IS_CAL_BACKEND (backend), FALSE); - g_return_val_if_fail (uid != NULL, FALSE); - - g_assert (CLASS (backend)->remove_object != NULL); - return (* CLASS (backend)->remove_object) (backend, uid); -} - -/** - * cal_backend_last_client_gone: - * @backend: A calendar backend. - * - * Emits the "last_client_gone" signal of a calendar backend. This function is - * to be used only by backend implementations. - **/ -void -cal_backend_last_client_gone (CalBackend *backend) -{ - g_return_if_fail (backend != NULL); - g_return_if_fail (IS_CAL_BACKEND (backend)); - - gtk_signal_emit (GTK_OBJECT (backend), cal_backend_signals[LAST_CLIENT_GONE]); -} diff --git a/calendar/pcs/cal-backend.h b/calendar/pcs/cal-backend.h deleted file mode 100644 index e1122f4d1c..0000000000 --- a/calendar/pcs/cal-backend.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* Evolution calendar - generic backend class - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_BACKEND_H -#define CAL_BACKEND_H - -#include -#include -#include -#include "calendar/pcs/evolution-calendar.h" -#include "cal-common.h" -#include "cal.h" - -BEGIN_GNOME_DECLS - - - -#define CAL_BACKEND_TYPE (cal_backend_get_type ()) -#define CAL_BACKEND(obj) (GTK_CHECK_CAST ((obj), CAL_BACKEND_TYPE, CalBackend)) -#define CAL_BACKEND_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_BACKEND_TYPE, \ - CalBackendClass)) -#define IS_CAL_BACKEND(obj) (GTK_CHECK_TYPE ((obj), CAL_BACKEND_TYPE)) -#define IS_CAL_BACKEND_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_BACKEND_TYPE)) - -/* Load status values */ -typedef enum { - CAL_BACKEND_LOAD_SUCCESS, /* Loading OK */ - CAL_BACKEND_LOAD_ERROR /* We need better error reporting in libversit */ -} CalBackendLoadStatus; - -struct _CalBackend { - GtkObject object; - - /* Private data */ - gpointer priv; -}; - -struct _CalBackendClass { - GtkObjectClass parent_class; - - /* Notification signals */ - void (* last_client_gone) (CalBackend *backend); - - /* Virtual methods */ - GnomeVFSURI *(* get_uri) (CalBackend *backend); - void (* add_cal) (CalBackend *backend, Cal *cal); - CalBackendLoadStatus (* load) (CalBackend *backend, GnomeVFSURI *uri); - void (* create) (CalBackend *backend, GnomeVFSURI *uri); - - int (* get_n_objects) (CalBackend *backend, CalObjType type); - char *(* get_object) (CalBackend *backend, const char *uid); - GList *(* get_uids) (CalBackend *backend, CalObjType type); - GList *(* get_objects_in_range) (CalBackend *backend, CalObjType type, - time_t start, time_t end); - GList *(* get_alarms_in_range) (CalBackend *backend, time_t start, time_t end); - gboolean (* get_alarms_for_object) (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms); - gboolean (* update_object) (CalBackend *backend, const char *uid, const char *calobj); - gboolean (* remove_object) (CalBackend *backend, const char *uid); - char *(* get_uid_by_pilot_id) (CalBackend *backend, unsigned long int pilot_id); - void (* update_pilot_id) (CalBackend *backend, const char *uid, - unsigned long int pilot_id, unsigned long int pilot_status); -}; - -GtkType cal_backend_get_type (void); - -GnomeVFSURI *cal_backend_get_uri (CalBackend *backend); - -void cal_backend_add_cal (CalBackend *backend, Cal *cal); - -CalBackendLoadStatus cal_backend_load (CalBackend *backend, GnomeVFSURI *uri); - -void cal_backend_create (CalBackend *backend, GnomeVFSURI *uri); - -int cal_backend_get_n_objects (CalBackend *backend, CalObjType type); - -char *cal_backend_get_object (CalBackend *backend, const char *uid); - -GList *cal_backend_get_uids (CalBackend *backend, CalObjType type); - -GList *cal_backend_get_objects_in_range (CalBackend *backend, CalObjType type, - time_t start, time_t end); - -GList *cal_backend_get_alarms_in_range (CalBackend *backend, time_t start, time_t end); - -gboolean cal_backend_get_alarms_for_object (CalBackend *backend, const char *uid, - time_t start, time_t end, - GList **alarms); - - -gboolean cal_backend_update_object (CalBackend *backend, const char *uid, const char *calobj); - -gboolean cal_backend_remove_object (CalBackend *backend, const char *uid); - -void cal_backend_last_client_gone (CalBackend *backend); - -char *cal_backend_get_uid_by_pilot_id (CalBackend *backend, unsigned long int pilot_id); - -void cal_backend_update_pilot_id (CalBackend *backend, const char *uid, - unsigned long int pilot_id, - unsigned long int pilot_status); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/pcs/cal-common.h b/calendar/pcs/cal-common.h deleted file mode 100644 index e51ddf1bdd..0000000000 --- a/calendar/pcs/cal-common.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Evolution calendar server - common declarations - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_COMMON_H -#define CAL_COMMON_H - -#include - -BEGIN_GNOME_DECLS - - - -typedef struct _CalBackend CalBackend; -typedef struct _CalBackendClass CalBackendClass; - -typedef struct _Cal Cal; -typedef struct _CalClass CalClass; - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/pcs/cal-factory.c b/calendar/pcs/cal-factory.c deleted file mode 100644 index ab19ccb8b3..0000000000 --- a/calendar/pcs/cal-factory.c +++ /dev/null @@ -1,858 +0,0 @@ -/* Evolution calendar factory - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include "cal.h" -#include "cal-backend.h" -#include "cal-factory.h" -#include "job.h" - - - -/* Private part of the CalFactory structure */ -typedef struct { - /* Hash table from URI method strings to GtkType * for backend class types */ - GHashTable *methods; - - /* Hash table from GnomeVFSURI structures to CalBackend objects */ - GHashTable *backends; -} CalFactoryPrivate; - - - -/* Signal IDs */ -enum { - LAST_CALENDAR_GONE, - LAST_SIGNAL -}; - -static void cal_factory_class_init (CalFactoryClass *class); -static void cal_factory_init (CalFactory *factory); -static void cal_factory_destroy (GtkObject *object); - -static POA_Evolution_Calendar_CalFactory__vepv cal_factory_vepv; - -static BonoboObjectClass *parent_class; - -static guint cal_factory_signals[LAST_SIGNAL]; - - - -/** - * cal_factory_get_type: - * @void: - * - * Registers the #CalFactory class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the #CalFactory class. - **/ -GtkType -cal_factory_get_type (void) -{ - static GtkType cal_factory_type = 0; - - if (!cal_factory_type) { - static const GtkTypeInfo cal_factory_info = { - "CalFactory", - sizeof (CalFactory), - sizeof (CalFactoryClass), - (GtkClassInitFunc) cal_factory_class_init, - (GtkObjectInitFunc) cal_factory_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_factory_type = gtk_type_unique (bonobo_object_get_type (), &cal_factory_info); - } - - return cal_factory_type; -} - -/* CORBA class initialization function for the calendar factory */ -static void -init_cal_factory_corba_class (void) -{ - cal_factory_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - cal_factory_vepv.Evolution_Calendar_CalFactory_epv = cal_factory_get_epv (); -} - -/* Class initialization function for the calendar factory */ -static void -cal_factory_class_init (CalFactoryClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (bonobo_object_get_type ()); - - cal_factory_signals[LAST_CALENDAR_GONE] = - gtk_signal_new ("last_calendar_gone", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (CalFactoryClass, last_calendar_gone), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, cal_factory_signals, LAST_SIGNAL); - - object_class->destroy = cal_factory_destroy; - - init_cal_factory_corba_class (); -} - -/* Object initialization function for the calendar factory */ -static void -cal_factory_init (CalFactory *factory) -{ - CalFactoryPrivate *priv; - - priv = g_new0 (CalFactoryPrivate, 1); - factory->priv = priv; - - priv->methods = g_hash_table_new (g_str_hash, g_str_equal); - priv->backends = g_hash_table_new (gnome_vfs_uri_hash, gnome_vfs_uri_hequal); -} - -/* Frees a method/GtkType * pair from the methods hash table */ -static void -free_method (gpointer key, gpointer value, gpointer data) -{ - char *method; - GtkType *type; - - method = key; - type = value; - - g_free (method); - g_free (type); -} - -/* Frees a uri/backend pair from the backends hash table */ -static void -free_backend (gpointer key, gpointer value, gpointer data) -{ - GnomeVFSURI *uri; - CalBackend *backend; - - uri = key; - backend = value; - - gnome_vfs_uri_unref (uri); - gtk_object_unref (GTK_OBJECT (backend)); -} - -/* Destroy handler for the calendar */ -static void -cal_factory_destroy (GtkObject *object) -{ - CalFactory *factory; - CalFactoryPrivate *priv; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL_FACTORY (object)); - - factory = CAL_FACTORY (object); - priv = factory->priv; - - g_hash_table_foreach (priv->methods, free_method, NULL); - g_hash_table_destroy (priv->methods); - priv->methods = NULL; - - /* Should we assert that there are no more backends? */ - - g_hash_table_foreach (priv->backends, free_backend, NULL); - g_hash_table_destroy (priv->backends); - priv->backends = NULL; - - g_free (priv); - factory->priv = NULL; - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* Loading and creating calendars */ - -/* Job data */ -typedef struct { - CalFactory *factory; - char *uri; - Evolution_Calendar_Listener listener; -} LoadCreateJobData; - -/* Queues a load or create request */ -static void -queue_load_create_job (CalFactory *factory, const char *uri, Evolution_Calendar_Listener listener, - JobFunc func) -{ - LoadCreateJobData *jd; - CORBA_Environment ev; - Evolution_Calendar_Listener listener_copy; - gboolean result; - - g_assert (uri != NULL); - - CORBA_exception_init (&ev); - result = CORBA_Object_is_nil (listener, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("queue_load_create_job(): could not see if the listener was NIL"); - CORBA_exception_free (&ev); - return; - } - CORBA_exception_free (&ev); - - if (result) { - g_message ("queue_load_create_job(): cannot operate on a NIL listener!"); - return; - } - - listener_copy = CORBA_Object_duplicate (listener, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("queue_load_create_job(): could not duplicate the listener"); - CORBA_exception_free (&ev); - return; - } - - CORBA_exception_free (&ev); - - jd = g_new (LoadCreateJobData, 1); - jd->factory = factory; - jd->uri = g_strdup (uri); - jd->listener = listener_copy; - - job_add (func, jd); -} - -/* Looks up a calendar backend in a factory's hash table of uri->cal */ -static CalBackend * -lookup_backend (CalFactory *factory, GnomeVFSURI *uri) -{ - CalFactoryPrivate *priv; - CalBackend *backend; - - priv = factory->priv; - - backend = g_hash_table_lookup (priv->backends, uri); - return backend; -} - -/* Callback used when a backend loses its last connected client */ -static void -backend_last_client_gone_cb (CalBackend *backend, gpointer data) -{ - CalFactory *factory; - CalFactoryPrivate *priv; - GnomeVFSURI *uri; - gpointer orig_key; - gboolean result; - GnomeVFSURI *orig_uri; - - fprintf (stderr, "backend_last_client_gone_cb() called!\n"); - - factory = CAL_FACTORY (data); - priv = factory->priv; - - /* Remove the backend from the hash table */ - - uri = cal_backend_get_uri (backend); - g_assert (uri != NULL); - - result = g_hash_table_lookup_extended (priv->backends, uri, &orig_key, NULL); - g_assert (result != FALSE); - - orig_uri = orig_key; - - g_hash_table_remove (priv->backends, orig_uri); - gnome_vfs_uri_unref (orig_uri); - - gtk_object_unref (GTK_OBJECT (backend)); - - /* Notify upstream if there are no more backends */ - - if (g_hash_table_size (priv->backends) == 0) - gtk_signal_emit (GTK_OBJECT (factory), cal_factory_signals[LAST_CALENDAR_GONE]); -} - -/* Adds a backend to the calendar factory's hash table */ -static void -add_backend (CalFactory *factory, GnomeVFSURI *uri, CalBackend *backend) -{ - CalFactoryPrivate *priv; - - priv = factory->priv; - - gnome_vfs_uri_ref (uri); - g_hash_table_insert (priv->backends, uri, backend); - - gtk_signal_connect (GTK_OBJECT (backend), "last_client_gone", - GTK_SIGNAL_FUNC (backend_last_client_gone_cb), - factory); -} - -/* Tries to launch a backend for the method of the specified URI. If there is - * no such method registered in the factory, it sends the listener the - * MethodNotSupported error code. - */ -static CalBackend * -launch_backend_for_uri (CalFactory *factory, GnomeVFSURI *uri, Evolution_Calendar_Listener listener) -{ - CalFactoryPrivate *priv; - char *method; - GtkType *type; - CalBackend *backend; - - priv = factory->priv; - - /* FIXME: add an accessor function to gnome-vfs */ - method = uri->method_string; - - type = g_hash_table_lookup (priv->methods, method); - - if (!type) { - CORBA_Environment ev; - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded ( - listener, - Evolution_Calendar_Listener_METHOD_NOT_SUPPORTED, - CORBA_OBJECT_NIL, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("launch_backend_for_uri(): could not notify the listener"); - - CORBA_exception_free (&ev); - return NULL; - } - - backend = gtk_type_new (*type); - if (!backend) - g_message ("launch_backend_for_uri(): could not launch the backend"); - - return backend; -} - -/* Loads a calendar backend and puts it in the factory's backend hash table */ -static CalBackend * -load_backend (CalFactory *factory, GnomeVFSURI *uri, Evolution_Calendar_Listener listener) -{ - CalFactoryPrivate *priv; - CalBackend *backend; - CalBackendLoadStatus status; - CORBA_Environment ev; - - priv = factory->priv; - - backend = launch_backend_for_uri (factory, uri, listener); - if (!backend) - return NULL; - - status = cal_backend_load (backend, uri); - - switch (status) { - case CAL_BACKEND_LOAD_SUCCESS: - add_backend (factory, uri, backend); - return backend; - - case CAL_BACKEND_LOAD_ERROR: - gtk_object_unref (GTK_OBJECT (backend)); - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_ERROR, - CORBA_OBJECT_NIL, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("load_backend(): could not notify the listener"); - - CORBA_exception_free (&ev); - return NULL; - - default: - g_assert_not_reached (); - return NULL; - } -} - -/* Creates a calendar backend and puts it in the factory's backend hash table */ -static CalBackend * -create_backend (CalFactory *factory, GnomeVFSURI *uri, Evolution_Calendar_Listener listener) -{ - CalFactoryPrivate *priv; - CalBackend *backend; - - priv = factory->priv; - - backend = launch_backend_for_uri (factory, uri, listener); - if (!backend) - return NULL; - - cal_backend_create (backend, uri); - - /* FIXME: add error reporting to cal_backend_create() */ -#if 0 - { - CORBA_Environment ev; - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_ERROR, - CORBA_OBJECT_NIL, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("create_fn(): could not notify the listener"); - - CORBA_exception_free (&ev); - } -#endif - - add_backend (factory, uri, backend); - - return backend; -} - -/* Adds a listener to a calendar backend by creating a calendar client interface - * object. - */ -static void -add_calendar_client (CalFactory *factory, CalBackend *backend, Evolution_Calendar_Listener listener) -{ - Cal *cal; - CORBA_Environment ev; - - cal = cal_new (backend, listener); - if (!cal) { - g_message ("add_calendar_client(): could not create the calendar client interface"); - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_ERROR, - CORBA_OBJECT_NIL, - &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("add_calendar_client(): could not notify the listener"); - - CORBA_exception_free (&ev); - return; - } - - cal_backend_add_cal (backend, cal); - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_SUCCESS, - bonobo_object_corba_objref (BONOBO_OBJECT (cal)), - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("add_calendar_client(): could not notify the listener"); - bonobo_object_unref (BONOBO_OBJECT (cal)); - } - - CORBA_exception_free (&ev); -} - -/* Job handler for the load calendar command */ -static void -load_fn (gpointer data) -{ - LoadCreateJobData *jd; - CalFactory *factory; - GnomeVFSURI *uri; - Evolution_Calendar_Listener listener; - CalBackend *backend; - CORBA_Environment ev; - - jd = data; - g_assert (jd->uri != NULL); - - /* Check the URI */ - - uri = gnome_vfs_uri_new (jd->uri); - g_free (jd->uri); - - factory = jd->factory; - listener = jd->listener; - g_free (jd); - - if (!uri) { - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_ERROR, - CORBA_OBJECT_NIL, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("load_fn(): Could not notify the listener!"); - - CORBA_exception_free (&ev); - goto out; - } - - /* Look up the backend and create it if needed */ - - backend = lookup_backend (factory, uri); - - if (!backend) - backend = load_backend (factory, uri, listener); - - gnome_vfs_uri_unref (uri); - - if (backend) - add_calendar_client (factory, backend, listener); - - out: - - CORBA_exception_init (&ev); - CORBA_Object_release (listener, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("load_fn(): could not release the listener"); - - CORBA_exception_free (&ev); -} - -/* Job handler for the create calendar command */ -static void -create_fn (gpointer data) -{ - LoadCreateJobData *jd; - CalFactory *factory; - GnomeVFSURI *uri; - Evolution_Calendar_Listener listener; - CalBackend *backend; - CORBA_Environment ev; - - jd = data; - g_assert (jd->uri != NULL); - - /* Check the URI */ - - uri = gnome_vfs_uri_new (jd->uri); - g_free (jd->uri); - - factory = jd->factory; - listener = jd->listener; - g_free (jd); - - if (!uri) { - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_ERROR, - CORBA_OBJECT_NIL, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("create_fn(): Could not notify the listener!"); - - CORBA_exception_free (&ev); - goto out; - } - - /* Check that the backend is not in use */ - - backend = lookup_backend (factory, uri); - - if (backend) { - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_cal_loaded (listener, - Evolution_Calendar_Listener_IN_USE, - CORBA_OBJECT_NIL, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("create_fn(): could not notify the listener"); - - CORBA_exception_free (&ev); - goto out; - } - - /* Create the backend */ - - backend = create_backend (factory, uri, listener); - - if (backend) - add_calendar_client (factory, backend, listener); - - gnome_vfs_uri_unref (uri); - - out: - - CORBA_exception_init (&ev); - CORBA_Object_release (listener, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("create_fn(): could not release the listener"); - - CORBA_exception_free (&ev); -} - - - -/* CORBA servant implementation */ - -/* CalFactory::load method */ -static void -CalFactory_load (PortableServer_Servant servant, - const CORBA_char *uri, - Evolution_Calendar_Listener listener, - CORBA_Environment *ev) -{ - CalFactory *factory; - CalFactoryPrivate *priv; - CORBA_Environment ev2; - gboolean result; - - factory = CAL_FACTORY (bonobo_object_from_servant (servant)); - priv = factory->priv; - - CORBA_exception_init (&ev2); - result = CORBA_Object_is_nil (listener, &ev2); - - if (ev2._major != CORBA_NO_EXCEPTION || result) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_CalFactory_NilListener, - NULL); - - CORBA_exception_free (&ev2); - return; - } - CORBA_exception_free (&ev2); - - queue_load_create_job (factory, uri, listener, load_fn); -} - -/* CalFactory::create method */ -static void -CalFactory_create (PortableServer_Servant servant, - const CORBA_char *uri, - Evolution_Calendar_Listener listener, - CORBA_Environment *ev) -{ - CalFactory *factory; - CalFactoryPrivate *priv; - - factory = CAL_FACTORY (bonobo_object_from_servant (servant)); - priv = factory->priv; - - queue_load_create_job (factory, uri, listener, create_fn); -} - -/** - * cal_factory_get_epv: - * @void: - * - * Creates an EPV for the CalFactory CORBA class. - * - * Return value: A newly-allocated EPV. - **/ -POA_Evolution_Calendar_CalFactory__epv * -cal_factory_get_epv (void) -{ - POA_Evolution_Calendar_CalFactory__epv *epv; - - epv = g_new0 (POA_Evolution_Calendar_CalFactory__epv, 1); - epv->load = CalFactory_load; - epv->create = CalFactory_create; - - return epv; -} - - - -/** - * cal_factory_construct: - * @factory: A calendar factory. - * @corba_factory: CORBA object for the calendar factory. - * - * Constructs a calendar factory by binding the corresponding CORBA object to - * it. - * - * Return value: The same object as the @factory argument. - **/ -CalFactory * -cal_factory_construct (CalFactory *factory, Evolution_Calendar_CalFactory corba_factory) -{ - g_return_val_if_fail (factory != NULL, NULL); - g_return_val_if_fail (IS_CAL_FACTORY (factory), NULL); - - bonobo_object_construct (BONOBO_OBJECT (factory), corba_factory); - return factory; -} - -/** - * cal_factory_corba_object_create: - * @object: #BonoboObject that will wrap the CORBA object. - * - * Creates and activates the CORBA object that is wrapped by the specified - * calendar factory @object. - * - * Return value: An activated object reference or #CORBA_OBJECT_NIL in case of - * failure. - **/ -Evolution_Calendar_CalFactory -cal_factory_corba_object_create (BonoboObject *object) -{ - POA_Evolution_Calendar_CalFactory *servant; - CORBA_Environment ev; - - g_return_val_if_fail (object != NULL, CORBA_OBJECT_NIL); - g_return_val_if_fail (IS_CAL_FACTORY (object), CORBA_OBJECT_NIL); - - servant = (POA_Evolution_Calendar_CalFactory *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &cal_factory_vepv; - - CORBA_exception_init (&ev); - POA_Evolution_Calendar_CalFactory__init ((PortableServer_Servant) servant, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_factory_corba_object_create(): could not init the servant"); - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (Evolution_Calendar_CalFactory) bonobo_object_activate_servant (object, servant); -} - -/** - * cal_factory_new: - * @void: - * - * Creates a new #CalFactory object. - * - * Return value: A newly-created #CalFactory, or NULL if its corresponding CORBA - * object could not be created. - **/ -CalFactory * -cal_factory_new (void) -{ - CalFactory *factory; - CORBA_Environment ev; - Evolution_Calendar_CalFactory corba_factory; - gboolean retval; - - factory = gtk_type_new (CAL_FACTORY_TYPE); - - corba_factory = cal_factory_corba_object_create (BONOBO_OBJECT (factory)); - - CORBA_exception_init (&ev); - retval = CORBA_Object_is_nil (corba_factory, &ev); - - if (ev._major != CORBA_NO_EXCEPTION || retval) { - g_message ("cal_factory_new(): could not create the CORBA factory"); - bonobo_object_unref (BONOBO_OBJECT (factory)); - CORBA_exception_free (&ev); - return NULL; - } - CORBA_exception_free (&ev); - - return cal_factory_construct (factory, corba_factory); -} - -/* Returns the lowercase version of a string */ -static char * -str_tolower (const char *s) -{ - char *str; - char *p; - - str = g_strdup (s); - for (p = str; *p; p++) - if (isalpha (*p)) - *p = tolower (*p); - - return str; -} - -/** - * cal_factory_register_method: - * @factory: A calendar factory. - * @method: Method for the URI, i.e. "http", "file", etc. - * @backend_type: Class type of the backend to create for this @method. - * - * Registers the type of a #CalBackend subclass that will be used to handle URIs - * with a particular method. When the factory is asked to load a particular - * URI, it will look in its list of registered methods and create a backend of - * the appropriate type. - **/ -void -cal_factory_register_method (CalFactory *factory, const char *method, GtkType backend_type) -{ - CalFactoryPrivate *priv; - GtkType *type; - char *method_str; - - g_return_if_fail (factory != NULL); - g_return_if_fail (IS_CAL_FACTORY (factory)); - g_return_if_fail (method != NULL); - g_return_if_fail (backend_type != 0); - g_return_if_fail (gtk_type_is_a (backend_type, CAL_BACKEND_TYPE)); - - priv = factory->priv; - - method_str = str_tolower (method); - - type = g_hash_table_lookup (priv->methods, method_str); - if (type) { - g_message ("cal_factory_register_method(): Method `%s' already registered!", - method_str); - g_free (method_str); - return; - } - - type = g_new (GtkType, 1); - *type = backend_type; - - g_hash_table_insert (priv->methods, method_str, type); -} - -/** - * cal_factory_get_n_backends: - * @factory: A calendar factory. - * - * Queries the number of running calendar backends in a calendar factory. - * - * Return value: Number of running backends. - **/ -int -cal_factory_get_n_backends (CalFactory *factory) -{ - CalFactoryPrivate *priv; - - g_return_val_if_fail (factory != NULL, -1); - g_return_val_if_fail (IS_CAL_FACTORY (factory), -1); - - priv = factory->priv; - return g_hash_table_size (priv->backends); -} diff --git a/calendar/pcs/cal-factory.h b/calendar/pcs/cal-factory.h deleted file mode 100644 index f96ba4ba92..0000000000 --- a/calendar/pcs/cal-factory.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Evolution calendar factory - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_FACTORY_H -#define CAL_FACTORY_H - -#include -#include - -#include "calendar/pcs/evolution-calendar.h" - -BEGIN_GNOME_DECLS - - - -#define CAL_FACTORY_TYPE (cal_factory_get_type ()) -#define CAL_FACTORY(obj) (GTK_CHECK_CAST ((obj), CAL_FACTORY_TYPE, CalFactory)) -#define CAL_FACTORY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_FACTORY_TYPE, \ - CalFactoryClass)) -#define IS_CAL_FACTORY(obj) (GTK_CHECK_TYPE ((obj), CAL_FACTORY_TYPE)) -#define IS_CAL_FACTORY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_FACTORY_TYPE)) - -typedef struct _CalFactory CalFactory; -typedef struct _CalFactoryClass CalFactoryClass; - -struct _CalFactory { - BonoboObject object; - - /* Private data */ - gpointer priv; -}; - -struct _CalFactoryClass { - BonoboObjectClass parent_class; - - /* Notification signals */ - void (* last_calendar_gone) (CalFactory *factory); -}; - -GtkType cal_factory_get_type (void); - -CalFactory *cal_factory_construct (CalFactory *factory, Evolution_Calendar_CalFactory corba_factory); -Evolution_Calendar_CalFactory cal_factory_corba_object_create (BonoboObject *object); - -CalFactory *cal_factory_new (void); - -void cal_factory_register_method (CalFactory *factory, const char *method, GtkType backend_type); - -int cal_factory_get_n_backends (CalFactory *factory); - -POA_Evolution_Calendar_CalFactory__epv *cal_factory_get_epv (void); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/pcs/cal.c b/calendar/pcs/cal.c deleted file mode 100644 index fdb7682e7c..0000000000 --- a/calendar/pcs/cal.c +++ /dev/null @@ -1,761 +0,0 @@ -/* Evolution calendar client interface object - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include "cal.h" -#include "cal-backend.h" - - - -/* Private part of the Cal structure */ -typedef struct { - /* Our backend */ - CalBackend *backend; - - /* Listener on the client we notify */ - Evolution_Calendar_Listener listener; -} CalPrivate; - - - -static void cal_class_init (CalClass *class); -static void cal_init (Cal *cal); -static void cal_destroy (GtkObject *object); - -static POA_Evolution_Calendar_Cal__vepv cal_vepv; - -static BonoboObjectClass *parent_class; - - - -/** - * cal_get_type: - * @void: - * - * Registers the #Cal class if necessary, and returns the type ID associated to - * it. - * - * Return value: The type ID of the #Cal class. - **/ -GtkType -cal_get_type (void) -{ - static GtkType cal_type = 0; - - if (!cal_type) { - static const GtkTypeInfo cal_info = { - "Cal", - sizeof (Cal), - sizeof (CalClass), - (GtkClassInitFunc) cal_class_init, - (GtkObjectInitFunc) cal_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - cal_type = gtk_type_unique (BONOBO_OBJECT_TYPE, &cal_info); - } - - return cal_type; -} - -/* CORBA class initialzation function for the calendar */ -static void -init_cal_corba_class (void) -{ - cal_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - cal_vepv.Evolution_Calendar_Cal_epv = cal_get_epv (); -} - -/* Class initialization function for the calendar */ -static void -cal_class_init (CalClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - parent_class = gtk_type_class (BONOBO_OBJECT_TYPE); - - object_class->destroy = cal_destroy; - - init_cal_corba_class (); -} - -/* Object initialization function for the calendar */ -static void -cal_init (Cal *cal) -{ - CalPrivate *priv; - - priv = g_new0 (CalPrivate, 1); - cal->priv = priv; - - priv->listener = CORBA_OBJECT_NIL; -} - -/* Destroy handler for the calendar */ -static void -cal_destroy (GtkObject *object) -{ - Cal *cal; - CalPrivate *priv; - CORBA_Environment ev; - - g_return_if_fail (object != NULL); - g_return_if_fail (IS_CAL (object)); - - cal = CAL (object); - priv = cal->priv; - - priv->backend = NULL; - - CORBA_exception_init (&ev); - CORBA_Object_release (priv->listener, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("cal_destroy(): could not release the listener"); - - CORBA_exception_free (&ev); - - g_free (priv); - - if (GTK_OBJECT_CLASS (parent_class)->destroy) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - - -/* CORBA servant implementation */ - -/* Cal::get_uri method */ -static CORBA_char * -Cal_get_uri (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - GnomeVFSURI *uri; - char *str_uri; - CORBA_char *str_uri_copy; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - uri = cal_backend_get_uri (priv->backend); - str_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); - str_uri_copy = CORBA_string_dup (str_uri); - g_free (str_uri); - - return str_uri_copy; -} - -/* Converts a calendar object type from its CORBA representation to our own - * representation. - */ -static CalObjType -uncorba_obj_type (Evolution_Calendar_CalObjType type) -{ - return (((type & Evolution_Calendar_TYPE_EVENT) ? CALOBJ_TYPE_EVENT : 0) - | ((type & Evolution_Calendar_TYPE_TODO) ? CALOBJ_TYPE_TODO : 0) - | ((type & Evolution_Calendar_TYPE_JOURNAL) ? CALOBJ_TYPE_JOURNAL : 0)); -} - -/* Cal::get_n_objects method */ -static CORBA_long -Cal_get_n_objects (PortableServer_Servant servant, - Evolution_Calendar_CalObjType type, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - int t; - int n; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - t = uncorba_obj_type (type); - n = cal_backend_get_n_objects (priv->backend, t); - return n; -} - -/* Cal::get_object method */ -static Evolution_Calendar_CalObj -Cal_get_object (PortableServer_Servant servant, - const Evolution_Calendar_CalObjUID uid, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - char *calobj; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - calobj = cal_backend_get_object (priv->backend, uid); - - if (calobj) { - CORBA_char *calobj_copy; - - calobj_copy = CORBA_string_dup (calobj); - g_free (calobj); - return calobj_copy; - } else { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_NotFound, - NULL); - return NULL; - } -} - -static Evolution_Calendar_CalObjUIDSeq * -build_uid_seq (GList *uids) -{ - Evolution_Calendar_CalObjUIDSeq *seq; - GList *l; - int n, i; - - n = g_list_length (uids); - - seq = Evolution_Calendar_CalObjUIDSeq__alloc (); - CORBA_sequence_set_release (seq, TRUE); - seq->_length = n; - seq->_buffer = CORBA_sequence_Evolution_Calendar_CalObjUID_allocbuf (n); - - /* Fill the sequence */ - - for (i = 0, l = uids; l; i++, l = l->next) { - char *uid; - - uid = l->data; - seq->_buffer[i] = CORBA_string_dup (uid); - } - - return seq; -} - -/* Cal::get_uids method */ -static Evolution_Calendar_CalObjUIDSeq * -Cal_get_uids (PortableServer_Servant servant, - Evolution_Calendar_CalObjType type, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - GList *uids; - Evolution_Calendar_CalObjUIDSeq *seq; - int t; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - t = uncorba_obj_type (type); - - uids = cal_backend_get_uids (priv->backend, t); - seq = build_uid_seq (uids); - - cal_obj_uid_list_free (uids); - - return seq; -} - -/* Cal::get_objects_in_range method */ -static Evolution_Calendar_CalObjUIDSeq * -Cal_get_objects_in_range (PortableServer_Servant servant, - Evolution_Calendar_CalObjType type, - Evolution_Calendar_Time_t start, - Evolution_Calendar_Time_t end, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - int t; - time_t t_start, t_end; - Evolution_Calendar_CalObjUIDSeq *seq; - GList *uids; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - t = uncorba_obj_type (type); - t_start = (time_t) start; - t_end = (time_t) end; - - if (t_start > t_end || t_start == -1 || t_end == -1) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_InvalidRange, - NULL); - return NULL; - } - - uids = cal_backend_get_objects_in_range (priv->backend, t, t_start, t_end); - seq = build_uid_seq (uids); - - cal_obj_uid_list_free (uids); - - return seq; -} - -#if 0 -/* Translates an enum AlarmType to its CORBA representation */ -static Evolution_Calendar_AlarmType -corba_alarm_type (enum AlarmType type) -{ - switch (type) { - case ALARM_MAIL: - return Evolution_Calendar_MAIL; - - case ALARM_PROGRAM: - return Evolution_Calendar_PROGRAM; - - case ALARM_DISPLAY: - return Evolution_Calendar_DISPLAY; - - case ALARM_AUDIO: - return Evolution_Calendar_AUDIO; - - default: - g_assert_not_reached (); - return Evolution_Calendar_DISPLAY; - } -} -#endif - -/* Builds a CORBA sequence of alarm instances from a CalAlarmInstance list. */ -static Evolution_Calendar_CalAlarmInstanceSeq * -build_alarm_instance_seq (GList *alarms) -{ - GList *l; - int n, i; - Evolution_Calendar_CalAlarmInstanceSeq *seq; - - n = g_list_length (alarms); - - seq = Evolution_Calendar_CalAlarmInstanceSeq__alloc (); - CORBA_sequence_set_release (seq, TRUE); - seq->_length = n; - seq->_buffer = CORBA_sequence_Evolution_Calendar_CalAlarmInstance_allocbuf (n); - - /* Fill the sequence */ - - for (i = 0, l = alarms; l; i++, l = l->next) { - CalAlarmInstance *ai; - Evolution_Calendar_CalAlarmInstance *corba_ai; - - ai = l->data; - corba_ai = &seq->_buffer[i]; - - corba_ai->uid = CORBA_string_dup (ai->uid); -#if 0 - corba_ai->type = corba_alarm_type (ai->type); -#endif - corba_ai->trigger = ai->trigger; - corba_ai->occur = ai->occur; - } - - return seq; -} - -/* Cal::get_alarms_in_range method */ -static Evolution_Calendar_CalAlarmInstanceSeq * -Cal_get_alarms_in_range (PortableServer_Servant servant, - Evolution_Calendar_Time_t start, - Evolution_Calendar_Time_t end, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - time_t t_start, t_end; - Evolution_Calendar_CalAlarmInstanceSeq *seq; - GList *alarms; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - t_start = (time_t) start; - t_end = (time_t) end; - - if (t_start > t_end || t_start == -1 || t_end == -1) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_InvalidRange, - NULL); - return NULL; - } - - /* Figure out the list and allocate the sequence */ - - alarms = cal_backend_get_alarms_in_range (priv->backend, t_start, t_end); - seq = build_alarm_instance_seq (alarms); - cal_alarm_instance_list_free (alarms); - - return seq; -} - -/* Cal::get_alarms_for_object method */ -static Evolution_Calendar_CalAlarmInstanceSeq * -Cal_get_alarms_for_object (PortableServer_Servant servant, - const Evolution_Calendar_CalObjUID uid, - Evolution_Calendar_Time_t start, - Evolution_Calendar_Time_t end, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - time_t t_start, t_end; - Evolution_Calendar_CalAlarmInstanceSeq *seq; - GList *alarms; - gboolean result; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - t_start = (time_t) start; - t_end = (time_t) end; - - if (t_start > t_end || t_start == -1 || t_end == -1) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_InvalidRange, - NULL); - return NULL; - } - - result = cal_backend_get_alarms_for_object (priv->backend, uid, t_start, t_end, &alarms); - if (!result) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_NotFound, - NULL); - return NULL; - } - - seq = build_alarm_instance_seq (alarms); - cal_alarm_instance_list_free (alarms); - - return seq; -} - -/* Cal::update_object method */ -static void -Cal_update_object (PortableServer_Servant servant, - const Evolution_Calendar_CalObjUID uid, - const Evolution_Calendar_CalObj calobj, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - if (!cal_backend_update_object (priv->backend, uid, calobj)) - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_InvalidObject, - NULL); -} - -/* Cal::remove_object method */ -static void -Cal_remove_object (PortableServer_Servant servant, - const Evolution_Calendar_CalObjUID uid, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - if (!cal_backend_remove_object (priv->backend, uid)) - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_NotFound, - NULL); -} - - - -/* Cal::get_uid_by_pilot_id method */ -static Evolution_Calendar_CalObjUID -Cal_get_uid_by_pilot_id (PortableServer_Servant servant, - const Evolution_Calendar_PilotID pilot_id, - CORBA_Environment *ev) -{ - Cal *cal; - CalPrivate *priv; - char *uid; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - uid = cal_backend_get_uid_by_pilot_id (priv->backend, pilot_id); - - if (uid) { - CORBA_char *uid_copy; - - uid_copy = CORBA_string_dup (uid); - g_free (uid); - return uid_copy; - } else { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_Calendar_Cal_NotFound, - NULL); - return NULL; - } -} - - -/* Cal::update_pilot_id method */ -static void -Cal_update_pilot_id (PortableServer_Servant servant, - const Evolution_Calendar_CalObjUID uid, - const Evolution_Calendar_PilotID pilot_id, - const CORBA_unsigned_long pilot_status, - CORBA_Environment * ev) -{ - Cal *cal; - CalPrivate *priv; - - cal = CAL (bonobo_object_from_servant (servant)); - priv = cal->priv; - - cal_backend_update_pilot_id (priv->backend, uid, - pilot_id, pilot_status); -} - - -/** - * cal_get_epv: - * @void: - * - * Creates an EPV for the Cal CORBA class. - * - * Return value: A newly-allocated EPV. - **/ -POA_Evolution_Calendar_Cal__epv * -cal_get_epv (void) -{ - POA_Evolution_Calendar_Cal__epv *epv; - - epv = g_new0 (POA_Evolution_Calendar_Cal__epv, 1); - epv->_get_uri = Cal_get_uri; - epv->get_n_objects = Cal_get_n_objects; - epv->get_object = Cal_get_object; - epv->get_uids = Cal_get_uids; - epv->get_objects_in_range = Cal_get_objects_in_range; - epv->get_alarms_in_range = Cal_get_alarms_in_range; - epv->get_alarms_for_object = Cal_get_alarms_for_object; - epv->update_object = Cal_update_object; - epv->remove_object = Cal_remove_object; - epv->get_uid_by_pilot_id = Cal_get_uid_by_pilot_id; - epv->update_pilot_id = Cal_update_pilot_id; - - return epv; -} - - - -/** - * cal_construct: - * @cal: A calendar client interface. - * @corba_cal: CORBA object for the calendar. - * @backend: Calendar backend that this @cal presents an interface to. - * @listener: Calendar listener for notification. - * - * Constructs a calendar client interface object by binding the corresponding - * CORBA object to it. The calendar interface is bound to the specified - * @backend, and will notify the @listener about changes to the calendar. - * - * Return value: The same object as the @cal argument. - **/ -Cal * -cal_construct (Cal *cal, - Evolution_Calendar_Cal corba_cal, - CalBackend *backend, - Evolution_Calendar_Listener listener) -{ - CalPrivate *priv; - CORBA_Environment ev; - - g_return_val_if_fail (cal != NULL, NULL); - g_return_val_if_fail (IS_CAL (cal), NULL); - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - - priv = cal->priv; - - CORBA_exception_init (&ev); - priv->listener = CORBA_Object_duplicate (listener, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_construct: could not duplicate the listener"); - priv->listener = CORBA_OBJECT_NIL; - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - priv->backend = backend; - - bonobo_object_construct (BONOBO_OBJECT (cal), corba_cal); - return cal; -} - -/** - * cal_corba_object_create: - * @object: #BonoboObject that will wrap the CORBA object. - * - * Creates and activates the CORBA object that is wrapped by the specified - * calendar client interface @object. - * - * Return value: An activated object reference or #CORBA_OBJECT_NIL in case of - * failure. - **/ -Evolution_Calendar_Cal -cal_corba_object_create (BonoboObject *object) -{ - POA_Evolution_Calendar_Cal *servant; - CORBA_Environment ev; - - g_return_val_if_fail (object != NULL, CORBA_OBJECT_NIL); - g_return_val_if_fail (IS_CAL (object), CORBA_OBJECT_NIL); - - servant = (POA_Evolution_Calendar_Cal *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &cal_vepv; - - CORBA_exception_init (&ev); - POA_Evolution_Calendar_Cal__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("cal_corba_object_create(): could not init the servant"); - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (Evolution_Calendar_Cal) bonobo_object_activate_servant (object, servant); -} - -/** - * cal_new: - * @backend: A calendar backend. - * @listener: A calendar listener. - * - * Creates a new calendar client interface object and binds it to the specified - * @backend and @listener objects. - * - * Return value: A newly-created #Cal calendar client interface object, or NULL - * if its corresponding CORBA object could not be created. - **/ -Cal * -cal_new (CalBackend *backend, Evolution_Calendar_Listener listener) -{ - Cal *cal, *retval; - Evolution_Calendar_Cal corba_cal; - CORBA_Environment ev; - gboolean ret; - - g_return_val_if_fail (backend != NULL, NULL); - g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); - - cal = CAL (gtk_type_new (CAL_TYPE)); - corba_cal = cal_corba_object_create (BONOBO_OBJECT (cal)); - - CORBA_exception_init (&ev); - ret = CORBA_Object_is_nil ((CORBA_Object) corba_cal, &ev); - if (ev._major != CORBA_NO_EXCEPTION || ret) { - g_message ("cal_new(): could not create the CORBA object"); - bonobo_object_unref (BONOBO_OBJECT (cal)); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - retval = cal_construct (cal, corba_cal, backend, listener); - if (!retval) { - g_message ("cal_new(): could not construct the calendar client interface"); - bonobo_object_unref (BONOBO_OBJECT (cal)); - return NULL; - } - - return retval; -} - -/** - * cal_notify_update: - * @cal: A calendar client interface. - * @uid: UID of object that was updated. - * - * Notifies a listener attached to a calendar client interface object about an - * update to a calendar object. - **/ -void -cal_notify_update (Cal *cal, const char *uid) -{ - CalPrivate *priv; - CORBA_Environment ev; - - g_return_if_fail (cal != NULL); - g_return_if_fail (IS_CAL (cal)); - g_return_if_fail (uid != NULL); - - priv = cal->priv; - g_return_if_fail (priv->listener != CORBA_OBJECT_NIL); - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_obj_updated (priv->listener, (char *) uid, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("cal_notify_update(): could not notify the listener " - "about an updated object"); - - CORBA_exception_free (&ev); -} - -/** - * cal_notify_remove: - * @cal: A calendar client interface. - * @uid: UID of object that was removed. - * - * Notifies a listener attached to a calendar client interface object about a - * calendar object that was removed. - **/ -void -cal_notify_remove (Cal *cal, const char *uid) -{ - CalPrivate *priv; - CORBA_Environment ev; - - g_return_if_fail (cal != NULL); - g_return_if_fail (IS_CAL (cal)); - g_return_if_fail (uid != NULL); - - priv = cal->priv; - g_return_if_fail (priv->listener != CORBA_OBJECT_NIL); - - CORBA_exception_init (&ev); - Evolution_Calendar_Listener_obj_removed (priv->listener, (char *) uid, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("cal_notify_remove(): could not notify the listener " - "about a removed object"); - - CORBA_exception_free (&ev); -} diff --git a/calendar/pcs/cal.h b/calendar/pcs/cal.h deleted file mode 100644 index a11cedebbb..0000000000 --- a/calendar/pcs/cal.h +++ /dev/null @@ -1,70 +0,0 @@ -/* Evolution calendar client interface object - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef CAL_H -#define CAL_H - -#include -#include -#include "calendar/pcs/evolution-calendar.h" -#include "cal-common.h" - -BEGIN_GNOME_DECLS - - - -#define CAL_TYPE (cal_get_type ()) -#define CAL(obj) (GTK_CHECK_CAST ((obj), CAL_TYPE, Cal)) -#define CAL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_TYPE, CalClass)) -#define IS_CAL(obj) (GTK_CHECK_TYPE ((obj), CAL_TYPE)) -#define IS_CAL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_TYPE)) - -struct _Cal { - BonoboObject object; - - /* Private data */ - gpointer priv; -}; - -struct _CalClass { - BonoboObjectClass parent_class; -}; - -GtkType cal_get_type (void); - -Cal *cal_construct (Cal *cal, - Evolution_Calendar_Cal corba_cal, - CalBackend *backend, - Evolution_Calendar_Listener listener); -Evolution_Calendar_Cal cal_corba_object_create (BonoboObject *object); - -Cal *cal_new (CalBackend *backend, Evolution_Calendar_Listener listener); - -void cal_notify_update (Cal *cal, const char *uid); -void cal_notify_remove (Cal *cal, const char *uid); - -POA_Evolution_Calendar_Cal__epv *cal_get_epv (void); - - - -END_GNOME_DECLS - -#endif diff --git a/calendar/pcs/job.c b/calendar/pcs/job.c deleted file mode 100644 index d97df6d883..0000000000 --- a/calendar/pcs/job.c +++ /dev/null @@ -1,98 +0,0 @@ -/* GNOME personal calendar server - job manager - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include "job.h" - - - -/* The job list */ - -typedef struct { - JobFunc func; - gpointer data; -} Job; - -static GSList *jobs_head; -static GSList *jobs_tail; - -static guint jobs_idle_id; - - - -/* Runs a job and dequeues it */ -static gboolean -run_job (gpointer data) -{ - Job *job; - GSList *l; - - g_assert (jobs_head != NULL); - - job = jobs_head->data; - (* job->func) (job->data); - g_free (job); - - l = jobs_head; - jobs_head = g_slist_remove_link (jobs_head, jobs_head); - g_slist_free_1 (l); - - if (!jobs_head) { - jobs_tail = NULL; - jobs_idle_id = 0; - return FALSE; - } else - return TRUE; -} - -/** - * job_add: - * @func: Function to run the job. - * @data: Data to pass to @function. - * - * Adds a job to the queue. The job will automatically be run asynchronously. - **/ -void -job_add (JobFunc func, gpointer data) -{ - Job *job; - - g_return_if_fail (func != NULL); - - job = g_new (Job, 1); - job->func = func; - job->data = data; - - if (!jobs_head) { - g_assert (jobs_tail == NULL); - g_assert (jobs_idle_id == 0); - - jobs_head = g_slist_append (NULL, job); - jobs_tail = jobs_head; - - jobs_idle_id = g_idle_add (run_job, NULL); - } else { - g_assert (jobs_tail != NULL); - g_assert (jobs_idle_id != 0); - - jobs_tail = g_slist_append (jobs_tail, job)->next; - } -} diff --git a/calendar/pcs/job.h b/calendar/pcs/job.h deleted file mode 100644 index c9bce24dd4..0000000000 --- a/calendar/pcs/job.h +++ /dev/null @@ -1,35 +0,0 @@ -/* GNOME personal calendar server - job manager - * - * Copyright (C) 2000 Helix Code, Inc. - * - * Author: Federico Mena-Quintero - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef JOB_H -#define JOB_H - -#include - - - -typedef void (* JobFunc) (gpointer data); - -void job_add (JobFunc func, gpointer data); - - - -#endif diff --git a/camel/.cvsignore b/camel/.cvsignore deleted file mode 100644 index 521f6065df..0000000000 --- a/camel/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -.deps -Makefile -Makefile.in -.libs -.deps -*.lo -*.la -temp-test diff --git a/camel/CODING.STYLE b/camel/CODING.STYLE deleted file mode 100644 index 58e9c68bbe..0000000000 --- a/camel/CODING.STYLE +++ /dev/null @@ -1,19 +0,0 @@ -Note to hackers ---------------- - -When hacking on camel (and on the gnome mailer in general), -be sure to follow the same coding style as the initial authors. -Please read the file HACKING in gnumeric and follow the -general guidelines explained in it. - -Please take a look at camel source files and try to exactly -imitate the coding style. We are perfectly aware that this -is not the best and unique style, but it is absolutely -mandatory that Camel is homogeneous. If you find the current -coding style to have some weaknesses, please contact the -authors to discuss this matter. - -Thanks. - - Bertrand. - diff --git a/camel/ChangeLog b/camel/ChangeLog deleted file mode 100644 index 48d8dbf1c0..0000000000 --- a/camel/ChangeLog +++ /dev/null @@ -1,5332 +0,0 @@ -2000-08-21 JP Rosevear - - * providers/nntp/camel-nntp-folder.c (nntp_folder_get_subfolder_names): - Make sure newsrc is not null - (nntp_folder_get_subfolder_names): ditto - - * providers/nntp/camel-nntp-newsrc.c - (camel_nntp_newsrc_get_subscribed_group_names): Programming check - for newsrc == NULL - (camel_nntp_newsrc_get_all_group_names): ditto - (camel_nntp_newsrc_write_to_file): ditto - (camel_nntp_newsrc_write): ditto - -2000-08-21 JP Rosevear - - * providers/nntp/camel-nntp-store.c (camel_nntp_command): - Make sure respbuffer is not null before manipulating it. - If it is null, return CAMEL_NNTP_FAIL and a decent error - message. - -2000-08-18 Peter Williams - - * camel-internet-address.c (internet_encode): If the name is "" we - weren't outputting anything; output the address at least. - -2000-08-16 Peter Williams - - * camel-internet-address.c (internet_encode): Fix a leak when - name = "". It's a single-byte leak, but it's the little things - that count. - - * camel-object.c (camel_type_lock_up): Don't leave the type - system locked when a bad unlock happens. - - * providers/mbox/camel-mbox-store.c (get_folder): Fix a leak. - -2000-08-15 Peter Williams - - * providers/imap/camel-imap-folder.c (imap_copy_message_to): Typo fix. - -2000-08-14 Peter Williams - - * camel-folder-search.c (search_get_sent_date): New search function; - returns the time_t when the message was sent. - (search_get_receive_date): Same for when it was received. - (search_get_current_date): Gets the current time for use with the - above two. Is this in the right place? - - * camel-folder-search.h: Add the new functions above to the class. - -2000-08-13 Dan Winship - - * providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): Add - camel-nntp-utils.h - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): do a strcasecmp rather than - just a strcmp when checking if a folder is "INBOX", since it is - a case-insensitive name. - -2000-08-12 Dan Winship - - * providers/imap/camel-imap-folder.c (imap_get_summary_internal): - Don't assume the FETCH results will come back in the order they - were requested. - (imap_get_subfolder_names_internal): Add "INBOX" to the list as - g_malloc'ed memory, not a static string. - -2000-08-12 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c - (camel_imap_command_continuation): Now takes a char * parameter - rather than a stream - (camel_imap_command_continuation_with_stream): Same function as - above but takes a stream parameter instead - - * providers/imap/camel-imap-folder.c (imap_append_message): Use - camel_imap_command_continuation_with_stream - -2000-08-12 Dan Winship - - * providers/pop3/camel-pop3-store.c (pop3_try_authenticate): New - function to do one round of attempted authentication. - (pop3_connect): Move a bunch of code out into - pop3_try_authenticate and fix some bugs in the edge cases. - -2000-08-12 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (query_auth_types): No longer - calls try_connect() to get authtypes - -2000-08-11 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c - (camel_imap_command_continuation): Changed param order a bit and - fixed some logic - - * providers/imap/camel-imap-folder.c (imap_append_message): Use - the new multi-transactional convenience functions - -2000-08-11 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c - (camel_imap_command_preliminary): New convenience function for - multi-transactional commands (opening request) - (camel_imap_command_continuation): New convenience function for - multi-transactional commands (followup data) - -2000-08-11 Christopher James Lahey - - * providers/mh/camel-mh-folder.c: Fixed a warning. - -2000-08-11 Chris Toshok - - * providers/nntp/camel-nntp-folder.c - (camel_nntp_folder_class_init): remove get_name and get_full_name - assignments, since the camel-folder.c implementation does what we - need. - -2000-08-11 Chris Toshok - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_toplevel_dir): use g_get_home_dir, since - evolution_dir isn't available in the providers. - -2000-08-11 Peter Williams - - * camel-folder.c (thaw): Fix a bug where the message_changed - signal wasn't being emitted. - -2000-08-11 Not Zed - - * providers/mh/camel-mh-folder.c (mh_set_message_user_tag): - Implement. - (mh_get_message_user_tag): Implement. - - * providers/mbox/camel-mbox-folder.c (mbox_get_message_user_tag): - (mbox_set_message_user_tag): Implement. - - * camel-folder.c (move_message_to): Yay so lets fix an already - fixed fix, again. - (copy_message_to): and here too ... update for api change to append(). - And removed another warning. - (camel_folder_set_message_user_tag): Routine to set message tags. - (camel_folder_get_message_user_tag): And accessor. - -2000-08-10 Christopher James Lahey - - * camel-folder-search.c, camel-folder-summary.c, camel-medium.c, - camel-mime-filter-charset.c, camel-mime-filter.c, - camel-mime-filter.h, camel-mime-message.c, camel-mime-parser.c, - camel-mime-part-utils.c, camel-mime-part.c, camel-mime-utils.c, - camel-movemail.c, camel-multipart.c, camel-object.c, - camel-stream-mem.c, providers/mbox/camel-mbox-folder.c, - providers/mbox/camel-mbox-summary.c, - providers/mh/camel-mh-folder.c, - providers/smtp/camel-smtp-transport.c: Fixed some warnings. - -2000-08-11 Not Zed - - * providers/vee/camel-vee-folder.c (vee_folder_build_folder): Free - the search properly. - (vee_folder_build): And here too. - -2000-08-10 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - If we go over the max number of messages, don't keep requesting - new message summaries, just break. - -2000-08-11 Not Zed - - * camel-mime-parser.c (folder_scan_header): A better way to - compress leading whitespace. The code is probably invalid anyway, - I dont think it will work across buffer boundaries. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): And - write out proper format From lines here too. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_build_from): New function to build a more - compatible mbox "From " line. - (camel_mbox_summary_sync): Write From lines in the proper format. - -2000-08-10 Not Zed - - * providers/mh/camel-mh-store.c (get_folder): Remove warnin g. - - * providers/mbox/camel-mbox-store.c (xrename): Kill some warnings - with constification. - - * providers/imap/camel-imap-folder.c (imap_append_message): Fixed - for append api change. Eek this routine seriously wastes memory. - - * providers/mh/camel-mh-folder.c (mh_search_free): Impelemnt. - (mh_append_message): Fix for api change, and include user flags - and tags in new message. - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): Fix - for search api change. - - * camel-folder.c (camel_folder_search_free): New function for - freeing search results. - (search_free): Changed my mind, implement a default that actually - does something. Free as to the old interface. - (camel_folder_append_message): Changed to accept a - camelmessageinfo rather than flags, which just doesn't have enough - info in it. - (copy_message_to): Change for append_message api change. - (move_message_to): Likewise. - - * providers/mbox/camel-mbox-folder.c (mbox_search_free): - Implement. - (mbox_append_message): Fix for api change, and also copy user - flags/tags across to new summary. - - * camel-folder-search.c (search_user_tag): A search expression - that returns the current use flag by name. - (camel_folder_search_free_result): New function to free the result - of a search. - - * camel-folder-summary.c: Bump summary version. - (message_info_new): - (message_info_load): - (message_info_save): - (camel_message_info_dup_to): - (camel_message_info_free): Added support for arbitrary tag/value - pairs (CamelTag's). - (camel_tag_get): - (camel_tag_set): - (camel_tag_list_size): - (camel_tag_list_free): Operations for working with CamelTags. - -2000-08-09 Peter Williams - - * camel-store.c (camel_store_get_folder): Connect beforehand, if - necessary. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): Default - the dir_sep to "/" so that certain functions can safely assume that - dir_sep is valid (at least, nonnull). - -2000-08-09 Ettore Perazzoli - - * providers/nntp/camel-nntp-folder.c - (nntp_folder_set_message_flags): Get rid of an unused variable. - - * providers/nntp/Makefile.am (INCLUDES): Fix includes so that we - don't use installed headers anymore. [I copied this over from the - IMAP provider, that does not seem to have this problem.] - -2000-08-09 Not Zed - - * camel-folder-search.c (camel_folder_search_execute_expression): - Reorder search result in summary order if we searched with a - summary. - -2000-08-08 Dan Winship - - * camel-uid-cache.c: New code to keep an on-disk cache of what - UIDs have been seen in a folder. - - * camel-provider.h: Add new flags CAMEL_PROVIDER_IS_SOURCE (mail - can arrive in it by non-Camel means) and CAMEL_PROVIDER_IS_STORAGE - (you can work with mail directly without needing to copy it local). - - * providers/*/camel-*-provider.c: Add flags as needed: imap and - mbox are SOURCE and STORAGE. mh and nntp are just STORAGE, pop3 is - just SOURCE. - - * camel-mime-message.c (process_header): Add another subject - g_strstrip that fejj's earlier commit missed. - -2000-08-08 Peter Williams - - * camel-provider.h: Remove some GTK stuff that I missed. - - * providers/imap/camel-imap-store.c (imap_noop): Turn this - back on with the new timeout interface in CamelSession. - - * camel-session.[ch] (camel_session_register_timeout): New - interface for Camel to register timeouts. Basically the - GTK timeout interface is copied. We do this because Camel isn't - allowed to use GTK anymore. - -2000-08-07 Not Zed - - * providers/mh/camel-mh-folder.c (mh_append_message): Only retry - another uid if we had a name clash, otherwise fail. - -2000-08-07 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): If we are trying to get a - subfolder listing of the root folder, always make sure INBOX is - there... - - * providers/imap/camel-imap-utils.c (imap_parse_list_response): - Check for NIL as a directory separator. - -2000-08-07 Peter Williams - - * providers/nntp/Makefile.am: Reorder the INCLUDES to pull - in the camel headers from the local source tree before - the ones in $(includedir). This was causing compile problems - because the installed, Gtk-based camel-object.h was included - before the uninstall Camel-based one. - -2000-08-07 Jeffrey Stedfast - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): Strip - all \n's from the expression - - * string-utils.c (strip): New convenience function to strip - occurences of a single char from a string - - * camel-mime-message.c (camel_mime_message_set_subject): Do a - g_strstrip on the subject so we can stop getting those annoying - leading spaces - -2000-08-07 Dan Winship - - * camel-folder.c (camel_folder_free_deep): Fix this to not require - NULL-termination of the array. - -2000-08-04 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (imap_connect): If we fail to - get a dir_sep, then supply the default of "/". - (get_folder): Undo changes by Peter - -2000-08-04 Peter Williams - - * providers/imap/camel-imap-store.c (get_folder): Prevent a coredump - when get_folder()ing from a store with dir_sep = NULL. - -2000-08-04 Peter Williams - - * camel-store.h: Include camel-object.h. Ettore said this wasn't - compiling. - -2000-08-04 Not Zed - - * camel-url.c (camel_url_set_protocol): - (camel_url_set_host): - (camel_url_set_path): - (camel_url_set_port): Url editing functions. - -2000-08-04 Dan Winship - - * providers/pop3/camel-pop3-folder.c (pop3_set_message_flags): - (pop3_sync): Indexes into the flags array are message_number minus - 1, not just message_number. - - * providers/pop3/camel-pop3-store.c: add a debugging macro for - doing protocol tracing. - -2000-08-03 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Only - call imap_get_summary_internal if the folder can hold messages - - * providers/nntp/camel-nntp-provider.c (camel_provider_module_init): - Initialize the service_cache for the news/nntp providers - -2000-08-03 Peter Williams - - * providers/nntp/Makefile.am (INCLUDES): Add -I$(top_srcdir) to - pull in libibex/ibex.h - -2000-08-02 Not Zed - - * providers/mh/camel-mh-summary.c (camel_mh_summary_sync): Expunge - from the end, so the index isn't messed up when you remove a - message. - - * providers/mh/camel-mh-folder.c (mh_append_message): Fix a bug - where it would never open an output file/uid. - - * providers/mbox/camel-mbox-store.c (rename_folder): - Implementation for mbox as well. - - * camel-store.c (camel_store_rename_folder): New method to rename folders. - (rename_folder): Default implementation. - - * providers/mh/camel-mh-store.c (delete_folder): Implement this. - (rename_folder): Implement a rename operation. - -2000-08-02 Dan Winship - - * providers/MH: Kill this. It doesn't have any code to do anything - the new mh provider doesn't do better. - - * providers/Makefile.am: Remove reference to MH subdir, and - promote nntp to fully-supported status, since it does compile and - all. - - * camel-mime-message.c (camel_mime_message_set_subject): Trim - trailing space from the subject. I've now seen replies from two - different people that tricked the threading code by (a) not having - References/In-Reply-To, and (b) adding an extra space to the end - of the subject line so the subject-based threading fails too. Who - writes these broken mailers anyway? - -2000-08-01 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c (smtp_helo): When forced - to use the IP, place it in square brackets. - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): New and - improved sexp parser. An honest try at using e-sexp is wrapped in - a #ifdef at the bottom of the file but is currently not used - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - We want to do a UID SEARCH so we get UIDs back instead of sequence - numbers - -2000-08-01 Not Zed - - * providers/mh: New mh provider implementation. - - * providers/Makefile.am (SUBDIRS): Added mh provider. - -2000-07-31 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message_info_internal): - Some IMAP servers don't wrap the UID in ()'s so don't depend on that - (imap_get_summary_internal): Same - - * providers/imap/camel-imap-utils.c (free_sexp_node): Oops, forgot to - free node->function - not good. - -2000-07-31 Peter Williams - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): Add - a NULL to the matches pointer array so that g_strfreev knows where - the end is. - -2000-07-31 Jeffrey Stedfast - - * providers/imap/camel-imap-utils.c (imap_translate_sexp): New - convenience function to translate a Camel sexp into the equivalent - IMAP sexp. - - * providers/imap/camel-imap-store.c: More places now use - imap_next_word - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - Implemented initial version (this may or may not work quite right) - -2000-07-28 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_expunge): Make sure - the third word/token (whatever) is "EXPUNGE" and not something - else like "EXISTS" or "RECENT". When removing the message from - the summary also make sure to free that data to avoid leakage. - Also make sure to subtract 1 from the 'id' since IMAP starts - at 1 and our summary starts at 0 :-) - -2000-07-28 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (camel_imap_status): Cleaned - up a bit, now uses imap_next_word() - (camel_imap_command_extended): Now uses imap_next_word(). When - checking for RECENT, allow the first digit of the recent-count - be between 0 and 9 inclusive instead of exclusive. - - * providers/imap/camel-imap-folder.c (imap_expunge): Optimized. - No longer will it need to reload the summary as it now instead - removes the appropriate message summaries from the cache. - (camel_imap_folder_changed): If recent == 0 then return. If - recent < 0 then just emit the folder_changed signal, don't reload - summaries. - -2000-07-28 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c - (imap_get_message_count_internal): Get message count when STATUS - is not available. - (imap_init): folder->has_search_capability is required for IMAP so - should always be set to TRUE (is currently being set to FALSE as - I've not yet implemented SEARCH support). - (camel_imap_folder_changed): Seem to have fixed my optimization - hack - -2000-07-28 Jon K Hellan - - * providers/imap/camel-imap-store.h (CamelImapServerLevel): New - enum. - (CamelImapStore): Added server_level and has_status_capability - members. - - * providers/imap/camel-imap-store.c (imap_connect): Detect - IMAP4REV1, IMAP4 and STATUS in capability response. - - * providers/imap/camel-imap-folder.c - (imap_get_message_count_internal): Use STATUS only if server - supports it. TODO: Get message count when STATUS not supported. - (imap_get_message, imap_get_summary_internal, - imap_get_message_info_internal): Handle IMAP4 as well. - (imap_protocol_get_summary_specifier): New function: Make a data - item specifier for the header lines we need, appropriate to the - server level. - -2000-07-27 Peter Williams - - * camel-mime-utils.c (header_decode_lwsp): More - checks for end of string. - - * providers/imap/camel-imap-store.c: - (imap_command_extended): Free the elements of our - array (huge mem leak) - - * providers/imap/camel-imap-folder.c: - (summary_get_internal): Same as above. - - -2000-07-27 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Fixed my routine to only fetch new headers, my IDs were off by 1 - on the high end, so when it would fetch the last newly arrived - message it would fail and end up fetching all of the summaries - because of the corruption. - -2000-07-27 Jeffrey Stedfast - - * camel-url.c (camel_url_to_string): If the path doesn't begin - with a / and there is a host, prepend a / to the path. - -2000-07-27 Jeffrey Stedfast - - * providers/imap/Makefile.am: Added camel-imap-utils.[c,h] - - * providers/imap/camel-imap-utils.[c,h]: Utilities for parsing - server responses for use in both camel-imap-store.c and - camel-imap-folder.c - - * providers/imap/camel-imap-folder.c (imap_get_summary_internal): - Free all the pointers in the headers array. - (imap_get_subfolder_names_internal): Updated to use - imap_parse_list_response - (imap_parse_subfolder_list): Removed in favor of - imap_parse_list_response - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Free all the pointers in the data array. - (imap_connect): Updated to use imap_parse_list_response and fixed - a leak - (folder_is_selectable): Updated. - -2000-07-27 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message_info): Now - uses a hash table for looking up message info rather than a linear - search :) - -2000-07-27 Peter Williams - - * providers/*/Makefile.am: Don't specify SUBDIRS = - [nothing]. Messes up distcheck. - -2000-07-26 Peter Williams - - * camel-mime-parser.c (folder_scan_init): Initialize - outbuf to be "" -- it's not guaranteed to be zeroed. - - * camel-mime-utils.c (header_references_decode): Return - if the header is NULL -> or "" <-. Don't do our stupid - mailer trick if we point to \0. - (header_decode_quoted_string): Don't rip past end of - string! - -2000-07-26 Dan Winship - - * camel-movemail.c (movemail_external): routine to call an - external movemail program. - (camel_movemail): Nuke return value, use movemail_external when - available and useful, and don't delete "dest" on errors, since - it might have started non-empty. - -2000-07-26 Jeffrey Stedfast - - * camel-url.c (camel_url_to_string): Should now always prepend a '/' - before the path if it doesn't already exist. - - * providers/imap/camel-imap-folder.c: Fixed a few compiler warnings - -2000-07-25 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_summary_free): Fixed the - real problem that Peter was running into. - -2000-07-25 Dan Winship - - * camel-mime-message.c (write_to_stream): Don't add a Mime-Version - header to a message that already has one. - - * camel-internet-address.c (internet_encode): Don't put <>s around - addresses with no name part. - -2000-07-25 Peter Williams - - * providers/imap/camel-imap-folder.c (imap_expunge): Set - imap_folder->summary to NULL after calling imap_summary_free, - so we don't get stuck with a junk summary pointer. Should - we free it at all? - -2000-07-25 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_changed): - Optimized to try and get the new message headers without reloading - the entire summary from scratch. - (imap_get_summary_internal): Will now sync() before attempting to - reload the summary so that flags are set in the reloaded summary - as well. - -2000-07-24 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (get_folder): Updated to give - special attention to the root folder. - - * providers/imap/camel-imap-folder.c - (imap_get_subfolder_names_internal): Updated to handle the root - folder - (imap_get_message_count_internal): return 0 if folder can't hold - messages - (camel_imap_folder_new): Change so that root folder gets special - attention and always gets can_hold_messages set to FALSE - -2000-07-24 Dan Winship - - * camel-folder.c: Remove exceptions from a number of methods that - work on what ought to be static data: get_parent_folder, - get_parent_store, get_message_count, get_unread_message_count, - get_permanent_flags, get_message_flags, set_message_flags, - get_message_user_flag, set_message_user_flag, get_uids, - get_summary, get_subfolder_names. Turn camel_folder_delete_message - into a macro. (Mostly a pull-up from the camel-async branch.) - - * providers/{imap,mbox,nntp,pop3,vee}: Update for CamelFolder - changes - -2000-07-24 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message_info): Updated - to port easily to the new Camel API - (imap_init): Don't SELECT INBOX, we don't need to do that - -2000-07-24 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): - Initialize the summary and subfolder listing. - (imap_summary_free): Now takes a GPtrArray arg rather than a - CamelImapFolder as it increases it's usefullness for free()'ing - temporary summaries. - (imap_get_message_count_internal): A new convenience function for - getting the actual message count on a server to be used by - imap_get_summary_internal) - (imap_get_message_count): Since the Camel API is on the move again, - the future version of this function will not be able to make a - call to the store, it must only access previously fetched data (thus - the creation of the _internal function) - (imap_get_subfolder_names_internal): Again, because the future version - of imap_get_subfolder_names will not take an exception, we must rename - this function which will be called by camel_imap_folder_new() - (imap_get_subfolder_names): We now return the previously collected - subfolder listing that the _internal function fetched previously - (imap_get_summary_internal): Again, same idea as the previous _internal - functions... - (imap_get_summary): Again... now returns a previously aquired summary - - * providers/imap/camel-imap-store.c (imap_noop): This will hopefully - prevent the imap store from disconnecting. - (imap_connect): Modified to add a gtk timeout event that will call - imap_noop() every 10 minutes (we may want to change this time value) - (imap_disconnect): Modified to remove the NOOP timeout event from the - store. - (camel_imap_command_extended): Commented out the code that would try - and detect if the store was disconnected and then reconnect if it was - needed. - -2000-07-24 Dan Winship - - * camel-folder.[ch]: Remove camel_folder_get_message_uid, which - was not used, and not implemented by any provider. - - * providers/nntp/camel-nntp-folder.c: Remove get_message_uid - non-implementation. - - * camel-folder-pt-proxy.[ch], camel-arg-collector.c, - camel-marshal-utils.[ch]: Bye bye bye. - - * Makefile.am: remove reference to camel-arg-collector.c - -2000-07-23 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (imap_disconnect): Made it a - little more forgiving. Also set current_folder to NULL as there is - no selected folder after a disconnect. - (stream_is_alive): Detects whether or not a socket is "alive" - (camel_imap_command_extended): Use stream_is_alive() to aid in the - detection of a disconnected state. - -2000-07-22 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (get_folder): Clear - CamelExceptions when appropriate (eg when folder is marked as - \NoSelect). Still needs some cleanup and perhaps Dan will have a - better way of doing this as this seems like a messy way of - handling this. - - * providers/imap/camel-imap-folder.c (imap_get_uids): Took out - some debug statements as they are no longer needed. - -2000-07-21 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_subfolder_names): - Updated to not strip out subfolders that are marked as \NoSelect - because this will be correctly handled in store->get_folder from - now on. - - * providers/imap/camel-imap-store.c (folder_is_selectable): New - convenience function for use in get_folder(). - (parse_list_response): Now takes a char **flags argument which is - needed by folder_is_selectable(). - (imap_connect): Updated to reflect changes to - parse_list_response(). - -2000-07-21 Jeffrey Stedfast - - * providers/imap/camel-imap-stream.c (stream_read): Updated with - some of the same fixes I've made to camel-imap-folder.c like - recalculating message part lengths. - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Rewrote the code to check for "* %d RECENT". Still needs to be - modified, but should no longer cause an infinite loop by detecting - mis-detecting RECENT messages. - -2000-07-20 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): - (imap_get_message_info): Oops. Fix UID parser to allow 0 and 9 to - be in the range of valid UID chars. - -2000-07-20 Peter Williams - - * camel-object.c (camel_object_unref): Add a new global mutex - 'refcount' held when refcounting operations occur. - -2000-07-19 Peter Williams - - * camel-object.c (camel_type_lock_up): Correct the recursiveness; - the locklevel is stored as a private, so each thread has its own - idea of the locklevel. Thus one thread can relock, but a different - one will think that it's a level 0 and try to lock the type_system - mutex. - -2000-07-19 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c: General cleanup working - towards getting Actions->Expunge working correctly. - - * providers/imap/camel-imap-store.c - (cammel_imap_command_extended): Added code to look for "* %d - RECENT" and to emit the folder_changed signal if there are any - recent messages. Note: this is a hack and needs to be rewritten - badly. - -2000-07-19 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): If the - folder's message count is not the same as the number of summaries, - free the old summary and create a new summary. - -2000-07-18 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c - (camel_imap_folder_class_init): Added in - imap_[g,s]et_message_user_flag() methods - (imap_get_message_info): Rewrote to use the more efficient way of - downloading summary information and also added a UID comparison so - that if the UID requested doesn't match the UID received, it - returns NULL. FIXME: When the mailer gets NULL when it requested - message info, it seems that it displays a row for that message and - when you try and select the blank row, it segfaults. - - * providers/imap/camel-imap-store.c (get_folder): Oops, this - should not be checking against "/", it should be checking against - dir_sep. - - * providers/imap/camel-imap-folder.c (imap_parse_subfolder_line): - Updated to trim out the leading namespace. - (imap_get_subfolder_names): Let the subfolder parser trim the - namespace off the folder name. - -2000-07-17 Peter Williams - - * camel-object.c (camel_type_lock_up): New function; the - Camel type_system lock is now fakey-recursive, being controlled - by a semaphore that goes up and down and is protected by another - lock. Theoretically all we need is the lock on the semaphore, - but this we catch exceptions "better" (by deadlocking). - (camel_type_lock_down): Corresponding to above. - (all functions): s,G_LOCK,camel_type_lock_up, etc. - -2000-07-17 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (imap_disconnect): Send a - "LOGOUT" command. - - * providers/imap/camel-imap-folder.c (imap_get_message): Hacks to - get IMAP code to work with CommunigatePro and MS Exchange (and any - other servers that send back a UID at the end of each FETCH inside - of the main body of the message part). - (imap_sync): Un-#if 0 the code that sets the flags on the IMAP - server for messages that have changed. Oops, don't mask with - DELETED to find out if the message has been answered ;-) - (imap_expunge): sync before expunging. - -2000-07-16 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c: All SELECT calls now pass - a NULL folder argument to camel_imap_command_extended() since it's - not needed. - (imap_connect): Moved service_class->connect() to the point right - after a connection is established with the server rather than - waiting until the end of the function. - (camel_imap_command): Updated the documentation comment - (camel_imap_command_extended): Before sending a command, first - check to make sure we are connected; if we aren't, then reconnect. - Don't strncmp() command with "SELECT" as it's redundant. - - * providers/imap/camel-imap-folder.c: All SELECT calls now pass - a NULL folder argument to camel_imap_command_extended() since it's - not needed. Also s/camel_imap_command/camel_imap_command_extended as - I will probably be doing away with camel_imap_command() or at least - only using it for LOGIN and similar commands where the server won't - notify us of any recent messages. - -2000-07-15 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): - One last fix to get rid of hard-coded "/" directory separators - -2000-07-14 Peter Williams - - * camel-object.c : Implement 'events', which are suspiciously - like signals except without all the marshalling baggage, and - with quasi-thread-safety. - (camel_object_class_declare_event): New func. - (camel_object_hook_event): Ditto. - (camel_object_trigger_event): Ditto. - (obj_class_init): Declare the "finalize" event. - (obj_class_finalize): Free the hashtable of events->preps - (obj_finalize): Free the hashtable of events->hooklists - (camel_object_unref): Trigger the finalize event (ourselves, - to prevent massively unpleasant looping things.) - -2000-07-14 Peter Williams - - * camel-object.c (make_global_classfuncs): Change to return - a CamelObjectClass. Change parents to a GSList and free it - when done. - (camel_object_new): Don't allocate a classfuncs for every object; - merely give it a reference to the global_classfuncs. Convert - parents to a GSList and free it when done. - (camel_object_unref): Don't free the classfuncs. Free the parents - list, which is changed to a GSList. - -2000-07-14 Jeffrey Stedfast - - * string-utils.c (string_unquote): New convenience function - to unquote a string if it's encapsulated by "'s - - * providers/imap/camel-imap-folder.c: - * providers/imap/camel-imap-store.c: Made the necessary changes - to stop using hard coded directory separators. - -2000-07-13 Dan Winship - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): - If the summary is for a smaller mbox, and rebuilding from the - last-known end position fails, try rebuilding from the beginning. - Deals with the case where the user edits the mbox and makes it - bigger, without adding new messages. - -2000-07-13 Peter Williams - - * camel-object.c: Rewritten to not be based on GtkObject, - but a tiny threadsafe ripoff thereof. Objects still cannot - be shared across threads, but ref/unref/destroy/new/etc - will work. Signals are not implemented because doing it - robustly would be a major pain in the butt, but class - functions are. There's a small demonstration that it doesn't - crash in ./temp-test.c: build it with ./make-test.sh. - * camel-stream.c, camel-seekable-stream.c, camel-stream-mem.c: - moved over to CamelObject. Proof of concept: two levels of - subclass and class functions, all working without coredumps. - To port to CamelObject: - - s,GTK_,CAMEL_,g in the cast checks - - s,gtk_type_new,camel_object_new,g - - s,GtkType,CamelType,g - - Change get_type function over to camel_type_declare - - instead of hooking to finalize function, it goes into the - type declaration. - - remove signals. - - instead of GTK_OBJECT(so)->klass, CAMEL_OBJECT_GET_CLASS(so) - - s,gtk_type_class,camel_type_get_global_classfuncs,g - - don't chain finalize handlers; it will be done for you - -2000-07-13 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c: - * providers/imap/camel-imap-store.c: If a SELECT fails, set - imap_store->current_folder to NULL so a SELECT is forced before - any message/folder operations are requested. Also, because some - users don't use a namespace, make sure that if the url->path is - "/" we don't use it when creating the folder_path. - (camel_imap_command[_extended]): Since we allow the passing of - a NULL folder which we can use to bypass a forced SELECT, no need - to check for the individual commands that don't require a folder - to be selected. - -2000-07-13 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c: - * providers/imap/camel-imap-store.c: Updated to use CAMEL_IMAP_OK, - CAMEL_IMAP_NO, CAMEL_IMAP_BAD, and CAMEL_IMAP_FAIL rather than the - ones copied from the POP3 provider. - -2000-07-13 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): Oops. - If the number of messages in the folder is 0, don't fetch - summaries 1 thru 0, just return an empty summary. - (imap_copy_message_to): Fixed to use message UID and also send - the source folder as an arg to camel_imap_command rather than NULL. - (imap_move_message_to): Same. - (imap_init): If SELECT is successful, we need to set the current - folder to the one selected, this was causing problems with move/copy - -2000-07-13 Dan Winship - - * camel-service.h: define a set of CAMEL_SERVICE_URL_ALLOW_* flags - parallel to the _NEED_* flags, and make the _NEED_* flags imply - the _ALLOW_* ones. - - * providers/imap/camel-imap-store.c (camel_imap_store_init): imap - urls ALLOW_PATH - -2000-07-13 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): New - and improved approach to fetching an entire folder summary - that should be much much faster than the old way as it gets - the entire folder summary in 1 shot rather than requesting - message by message. As with the last update, this version - also only fetches the minimum number of header fields. - (imap_get_summary): Oops, forgot to free the temp - GPtrArray *headers - -2000-07-13 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): Don't - fetch the entire RFC822 header, just fetch the fields we want. - (imap_get_message_info): Same. - -2000-07-13 Not Zed - - * camel-mime-filter-basic.c (camel_mime_filter_basic_new_type): - Reset filter on setup. - (reset): When resetting qp encoding, set the state to -1, instead - of 0. - - * camel-mime-utils.c (quoted_encode_step): Actually count the - characters output sofar (it never counted any). Bunch of other - fixes. - (quoted_encode_close): Also flush out final character, if there's - one. - -2000-07-12 Jeffrey Stedfast - - Chris forgot to add #include to the source files - - * providers/imap/camel-imap-store.c (imap_connect): Fixed Peter's - fix, we don't want to send a string to a %d. - -2000-07-12 Christopher James Lahey - - * camel-folder-search.c, providers/imap/camel-imap-store.c: - Changed from strstrcase to e_strstrcase. - - * string-utils.c, string-utils.h: Removed strstrcase (in favor of - e_strstrcase in e-util/e-util.c.) - -2000-07-12 Chris Toshok - - * providers/nntp/camel-nntp-folder.c - (nntp_folder_set_message_flags): get the article num out of our - uid and mark it read in the newsrc. - (nntp_folder_get_message): get the message id out of the uid to - fetch the article. - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): the uid - is now , - (get_HEAD_headers): same. - - * camel-mime-parser.c (folder_scan_step): go to HSCAN_MESSAGE - state when ct->subtype is "news" as well as "rfc822". this makes - attachments of type "message/news" display properly. - -2000-07-12 Dan Winship - - * camel-folder.c (camel_folder_free_deep, - camel_folder_free_shallow, camel_folder_free_nop): Useful default - implementations for free_{uids,subfolder_names,summary}. - (free_subfolder_names, free_uids): Make these g_warning-ing - default implementations. - - * providers/*/camel-*-folder.c: Use the new functions where - appropriate, remove duplicated code. - -2000-07-12 Peter Williams - - * providers/imap/camel-imap-store.c (query_auth_types): Check for - NULL parameters when setting the exception so as to not crash on - Solaris (can't handle a %s passed NULL). - (imap_connect): Same. - -2000-07-12 Jeffrey Stedfast - - * providers/mbox/camel-mbox-folder.c (mbox_delete_message): Use - mbox_set_message_flags () instead of setting the flags by hand. This - fixes the problem of the "message_changed" signal not being emitted - at the correct time. - - * providers/imap/camel-imap-folder.c: "folder_changed" signals should - pass a third argument (which is ignored). - - * camel-folder.c: Undo gtk signal emits done in set_flags and - expunge. - (move_message_to): - (copy_message_to): Create info as a const CamelMessageInfo - -2000-07-12 Chris Toshok - - * providers/nntp/Makefile.am: don't add test-newsrc to the build - since it needs libcamel (which isn't built at the time test-newsrc - needs linking.) - - * providers/nntp/camel-nntp-utils.c (get_HEAD_headers): fill in - MessageInfo->message_id. - (get_XOVER_headers): same. - - * providers/nntp/camel-nntp-folder.c (nntp_folder_init): move - summary loading here. - (nntp_folder_sync): summary/newsrc changes should be stored here. - put a comment to that effect. - (nntp_folder_set_message_flags): don't save the newsrc here. - (nntp_folder_get_uids): use g_ptr_array_index instead of the - cast/addition. - (nntp_folder_get_summary): no need to check if we should generate - the summary here. already done. - (nntp_folder_get_message_info): implement. - - * providers/nntp/camel-nntp-store.c - (camel_nntp_store_get_toplevel_dir): use evolution_dir instead of - computing it ourselves. - (nntp_store_disconnect): call camel_nntp_newsrc_write. - (ensure_news_dir_exists): new function to create the news/ subdir. - (camel_nntp_store_class_init): hook up connect/disconnect and - finalize. - (nntp_store_connect): if ensure_news_dir_exists fails throw an - exception. - -2000-07-12 Peter Williams - - * camel-folder.c (camel_folder_set_message_flags): Emit a message_changed - signal once the flags are set on the message. - (camel_folder_set_user_flag): Ditto. - (camel_folder_expunge): Emit a folder_changed if no exception. - -2000-07-12 Jeffrey Stedfast - - * camel-stream.c: Use size_t and ssize_t for read/write methods - - * providers/imap/camel-imap-folder.c (imap_set_message_flags): - Updated to emit the message_changed signal. - (imap_delete_message): Updated to use imap_set_message_flags (). - (imap_move_message_to): Updated to use imap_set_message_flags () - and to emit the folder_changed signal on the destination folder. - (imap_copy_message_to): Updated to emit the folder_changed signal - on the destination folder. - (imap_append_message): Updated to emit the folder_changed signal - on the destination folder. - -2000-07-11 Jeffrey Stedfast - - * camel-folder.c (camel_folder_append_message): Now takes a - flags argument to specify the flags to be set on the message - since we might not necessarily want the flags to be wiped clean. - (move_message_to): - (copy_message_to): Updated to send a flags argument to - append_message (); currently sends the original message's flags. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): - * providers/imap/camel-imap-folder.c (imap_append_message): - Updated. - -2000-07-11 Dan Winship - - * camel-folder.c: Remove exceptions from a number of methods - that work on what ought to be static data: get_parent_folder, - get_parent_store, get_message_count, get_unread_message_count, - get_permanent_flags, get_message_flags, set_message_flags, - get_message_user_flag, set_message_user_flag, get_message_uid, - get_uids, get_summary, get_subfolder_names. Turn - camel_folder_delete_message into a macro. - - * providers/{mbox,pop3,vee}: Update for CamelFolder changes - - * providers/Makefile.am: Disable imap and nntp for now - -2000-07-11 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - This shouldn't return NULL, it should return g_ptr_array_new () - so the mailer gets what it expects. - -2000-07-10 Jeffrey Stedfast - - * camel-folder-summary.c (camel_folder_summary_decode_string): - Oops, an unsigned integer can never be < 0 - -2000-07-10 Dan Winship - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): - Initialize a variable to make this not crash again. And fix a bug - so it actually does something. - -2000-07-10 Jeffrey Stedfast - - * camel-folder-summary.c: Cleaned up a bunch of compile warnings - -2000-07-10 Dan Winship - - * providers/vee: kill more debugging messages - -2000-07-10 Jeffrey Stedfast - - * providers/mbox/camel-mbox-folder.c (mbox_get_unread_message_count): - * providers/vee/camel-vee-folder.c (vee_get_unread_message_count): - * providers/imap/camel-imap-folder.c (imap_get_unread_message_count): - Implemented. - - * camel-folder.c (camel_folder_get_unread_message_count): New - convenience function to allow the mailer to query the number - of unread messages in a folder (for displaying message stats - in a folder tree?). - -2000-07-09 Dan Winship - - * camel-mime-utils.c (header_references_dup): New function to copy - a header_references structure. - - * camel-folder-summary.c (camel_message_info_dup_to): New function - to (deep) copy the data from one CamelMessageInfo into another. - (camel_message_info_free): And free the data. - - * providers/vee/camel-vee-folder.c (vee_sync): Implement. (empty). - (vee_search_by_expression): belatedly update for - camel_folder_search change. - (vee_folder_build): belatedly update for camel_folder_search - change. Use camel_message_info_dup_to and camel_message_info_free - (in particular, so that we get message_id and references info so - vfolders can be threaded). - (vee_folder_build_folder): Ditto. - -2000-07-08 Jeffrey Stedfast - - * providers/nntp/camel-nntp-folder.c: - * providers/nntp/camel-nntp-utils.c: - * providers/nntp/camel-nntp-store.c: Update to reflect past changes - in the Camel API. Use gtk macro casts wherever possible and use glib's - memory functions instead of standard c's (since they are not - compatable) - - * providers/smtp/camel-smtp-transport.c: - * providers/imap/camel-imap-store.c: Wrap debug print statements - in a macro - - * providers/imap/camel-imap-stream.c (stream_read): Make sure - that we get up to and including the last \n of the mime part. - - * providers/imap/camel-imap-folder.c (imap_get_message): Make sure - that we get up to and including the last \n of the mime part. - Wrap debug print statements in a macro. - - * providers/imap/camel-imap-stream.c (stream_read): Only cache - the important data (aka the mime part requested and no extra - server response stuff) - -2000-07-07 Dan Winship - - * camel-mime-utils.c (header_references_decode): Work around - In-Reply-To's with unquoted punctuation. So many broken mailers. - - * camel-folder.c (camel_folder_search_by_expression): Make this - return a GPtrArray rather than a GList. - - * camel-folder-search.c (camel_folder_search_execute_expression): - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression): - * providers/nntp/camel-nntp-folder.c (nntp_search_by_expression): - Update to return a GPtrArray rather than a GList. - -2000-07-07 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c (esmtp_get_authtypes): - Fixed the parser to actually work - -2000-07-06 Dan Winship - - * camel-mime-utils.c (header_references_decode): Make this deal - with the full RFC822 References/In-Reply-To format rather than - just the more-nicely-behaved RFC1036 version. (Needed to parse - In-Reply-To headers with extra junk in them.) - -2000-07-06 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): Parse for - more header information to allow message threading in IMAP. - (imap_get_message_info): Same. - - * camel-folder-summary.c: Renamed summary_format_* to - camel_summary_format_* and moved them into public scope. - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Oops. Don't - pass port # as a string in the error code (if it fails to connect). - - * providers/imap/camel-imap-folder.c (imap_append_message): Changed - over to camel_imap_command_extended as that was the source of the - problems - apparently appending replies with more than just 1 line. - -2000-07-05 Dan Winship - - * camel-folder-search.c (search_header_contains): make header - matching case-insensitive - - * camel-folder-summary.c: - * camel-session.c: - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-summary.c: Remove some non-error case - debugging-type messages. - -2000-07-05 Ettore Perazzoli - - * providers/mbox/camel-mbox-summary.c (d): Define to empty so that - we get rid of a ton of debugging messages. - -2000-07-05 Jeffrey Stedfast - - * camel-mime-utils.h: Added prototype for uudecode_step - - * camel-mime-utils.c (uudecode_step): Cleaned up some junk that - should have been cleaned up when debugging printf's were taken out. - -2000-07-05 Ettore Perazzoli - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): - Update the X-Evolution: header even if the in-memory UID and the - saved UID are not the same. Otherwise mboxes with clashing UIDs - can never be fixed. - - * camel-folder-summary.c - (camel_folder_summary_add_from_parser): Add the message to the - summary before doing any ibex stuff. In fact, this might also - have the side effect of reassigning the UID so it needs to be done - before we start using the UID. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Add - debugging message to keep track of the UIDs we add. - -2000-07-05 Dan Winship - - * camel-folder-summary.c: Add "Cc" to summary and bump summary - version number. - - * camel-folder-search.c (search_header_contains): make "Cc" a - searchable header. - -2000-07-03 Ettore Perazzoli - - * camel-folder-summary.c (camel_folder_summary_next_uid_string): - New. - (camel_folder_summary_add): Use - `camel_folder_summary_next_uid_string()' instead of recomputing - the UID manually here. - (camel_folder_summary_add_from_parser): Likewise. - -2000-07-03 Ettore Perazzoli - - * camel-folder-summary.c (camel_folder_summary_set_uid): Removed. - -2000-07-03 Dan Winship - - * camel-folder-summary.c (message_info_new): Parse In-Reply-To - with header_references_decode, not header_msgid_decode. - - * camel-mime-message.c (camel_mime_message_class_init): message - headers are case-insensitive. - - * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fix a - bug in error-setting code. - (pop3_connect): Don't re-prompt for password in the KPOP case. - (pop3_get_response): New function, split out from - camel_pop3_command. - (connect_to_server): Use pop3_get_response to parse the greeting - message, and error out appropriately if it's -ERR. - -2000-07-02 Dan Winship - - * camel-folder.c (camel_folder_freeze, camel_folder_thaw): New - functions to freeze and thaw a folder (to prevent message/folder - changed signals in the middle of a long series of operations). - (camel_folder_class_init): Change signals to GTK_RUN_FIRST. - (message_changed, folder_changed): Add default implementations - that stop the emission and record info for later if the folder is - frozen. - - * providers/mbox/camel-mbox-folder.c (mbox_sync): leftover fixes - from the close->sync change: don't destroy the ibex, summary, and - search when syncing. - (append_message): emit "folder_changed" on a successful append. - -2000-07-02 Jeffrey Stedfast - - * camel-mime-utils.c (uudecode_step): A rather complex uudecoder - written in the spirit of Zucchi-ness, is it up to par? Only the - Z-man can tell us :-) - -2000-07-01 Dan Winship - - * camel-service.c (camel_service_get_name): New method, to return - an end-user-friendly name corresponding to a service. (eg, "POP - service for danw on trna.helixcode.com"). - - * providers/imap/camel-imap-store.c, - providers/mbox/camel-mbox-store.c, - providers/nntp/camel-nntp-store.c, - providers/pop3/camel-pop3-store.c, - providers/sendmail/camel-sendmail-transport.c, - providers/smtp/camel-smtp-transport.c: Implement. - - * providers/imap/Makefile.am: remove unneeded - libcamelimap_la_LDADD. - - * providers/pop3/camel-pop3-store.c (connect_to_server): fix the - CAPA-parsing code to not get into an infinite loop. - -2000-07-01 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message): Fixed - the bug that would sometimes leave part of the server response - tacked on to the end of the message. - - * camel-folder.c: Renamed _by_uid methods. Since we no longer - have get-by-number methods, no need to have the _by_uid - extensions. - (get_message_by_uid): Renamed to get_message - (delete_message_by_uid): Renamed to delete_message - (summary_get_by_uid): Renamed to get_message_info - - * providers/mbox/camel-mbox-folder.c: - * providers/pop3/camel-pop3-folder.c: - * providers/imap/camel-imap-folder.c: - * providers/vee/camel-vee-folder.c: Updated to reflect - camel-folder changes. - -2000-06-30 Jeffrey Stedfast - - * camel-folder.c (camel_folder_copy_message_to): New function, to - copy a message from one folder to another. The default - implementation just uses append_message, but providers can - implement more efficient versions for use when both folders are on - the same store. - - * broken-date-parser.[c,h]: Utilities for parsing broken - date strings. - - * providers/imap/camel-imap-folder.c (imap_move_message_to): - (imap_copy_message_to): Implemented. - - * camel-mime-utils.c (header_decode_date): Wrote some code to try - and un-mangle broken date formats and then parse that new string - instead. - -2000-06-30 Dan Winship - - * camel-folder.c (camel_folder_move_message_to): New function, to - move a message from one folder to another. The default - implementation just uses append_message and delete_message, but - providers can implement more efficient versions for use when both - folders are on the same store. - -2000-06-29 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_expunge): Should now - print a meaningful error message when it doesn't succeed - -2000-06-28 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (imap_connect): Changed to - keep prompting user for a valid password until it either - authenticates or until Canceled by the user. - (camel_imap_command_extended): Improved speed (replaced the - g_strjoinv call with a faster implementation) - - * providers/pop3/camel-pop3-store.c - (camel_pop3_command_get_additional_data): Fixed. - (pop3_connect): Changed to keep prompting the user for a - password until it either works or until Canceled by the user. - - * providers/mbox/camel-mbox-summary.c: General cleanup - (camel_mbox_summary_sync): Fixed a memory leak and added - CamelException handling. - - * providers/mbox/camel-mbox-store.c (delete_folder): Fixed a - memory leak - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): - Default 'off_t seek' to -1 so as to make sure it's initialized - before it's used in the case of a bad stat() call. - (mbox_sync): Updated - (mbox_expunge): Updated - -2000-06-27 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (imap_connect): Move the - CAPABILITY command here so we don't have to keep checking - each time we open a folder. - (camel_imap_command_extended): If we are doing an EXAMINE, - don't bother doing a SELECT first. - - * providers/imap/camel-imap-folder.c (imap_init): Update so - folder->has_search_capability depends on the parent IMAP store - (since this is really dependant on the IMAP implementation and - not the folder) - -2000-06-27 Christopher James Lahey - - * providers/smtp/camel-smtp-transport.c: Don't close the filter - stream when done with it (this causes the source stream to close); - Instead, just flush it when done. - -2000-06-27 Michael Zucchi - - * camel-folder-search.c (search_header_contains): Make header - search 'to' match 'to', and not 'from', small typo, fixes #317. - -2000-06-26 Christopher James Lahey - - * providers/mbox/camel-mbox-summary.c: Added debugging - information. - -2000-06-23 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c: - * providers/imap/camel-imap-folder.c: Improved folder parsing. - Not specifying a namespace should no longer list the entire - filesystem. - -2000-06-22 Chris Toshok - - * providers/nntp/.cvsignore: ignore test-newsrc - - * providers/nntp/camel-nntp-store.c, - providers/nntp/camel-nntp-store.h, - providers/nntp/camel-nntp-folder.c, - providers/nntp/camel-nntp-folder.h, - providers/nntp/camel-nntp-utils.c: Bring the nntp provider up to a - state where it builds and is usable with the current camel. there - are still warts (semi-broken .newsrc file handling, and a lack of - a subscribe ui -- in fact no way to add a new server, really), but - it'll display news messages. - - * providers/nntp/Makefile.am (libcamelnntp_la_SOURCES): add - camel-nntp-newsrc.c - (libcamelnntpinclude_HEADERS): add camel-nntp-newsrc.h - also, add test-newsrc stuff. - - * providers/nntp/test-newsrc.c: new file that tests the newsrc - stuff by parsing and regurgitating a .newsrc file for a particular - server. - - * providers/nntp/camel-nntp-newsrc.c, - providers/nntp/camel-nntp-newsrc.h: new files, initial support for .newsrc files. - -2000-06-22 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message_count): - Oops. Now appends the namespace to the folder before querying - for the number of messages. - - * providers/imap/camel-imap-store.c (imap_folder_exists): New - convenience function for use by imap_create(). - (get_folder): If folder is specified as "/", we really want - "INBOX". - - * providers/sendmail/camel-sendmail-provider.c: - * providers/vee/camel-vee-provider.c: - * providers/smtp/camel-smtp-provider.c: - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/imap/camel-imap-provider.c: Updated - - * camel-session.c: Moved service_cache hash table into the - providers. - (service_cache_remove): Updated. - (camel_session_get_service): Updated. - - * camel-url.c (camel_url_hash): Took out the hashing of - url->passwd. We don't want this anymore. - - * providers/imap/camel-imap-folder.c (imap_init): Took out - references to 'namespace' - (camel_imap_folder_init): Same - - * providers/imap/camel-imap-folder.h: No more namespace. We are - instead going to use url->path as the namespace. - -2000-06-21 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (imap_create): Modified to - use the "namespace" (url->path) if it exists. - - * providers/imap/camel-imap-folder.c (imap_delete_message_by_uid): - Now just sets the deleted flag on the summary rather than speaking - directly to the IMAP server. This is both faster and cleaner. - -2000-06-21 Dan Winship - - * providers/pop3/camel-pop3-store.c (query_auth_types): Fix dumb - bug. - -2000-06-21 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): - We are getting mail in IMAP now!! whoo-hoo!. Stripped out the - filtering so messages may have some dot-stuffing, but the - filtering can always be added back in later when we know it - works and isn't the problem. - -2000-06-21 Peter Williams - - * providers/mbox/camel-mbox-folder.c (mbox_init): Use the basename - of the mailbox so we don't get pathnames like ~/evolution/inbox///movemail.ibex - -2000-06-21 Dan Winship - - * camel-folder-summary.c (message_info_new): Set date_received - based on the first (most recent) "Received" header. - -2000-06-20 Dan Winship - - * camel-mime-part.c (write_to_stream): flush the filter stream - before unreffing it, so it will camel_mime_filter_complete. - - * camel-stream-filter.c (camel_stream_filter_class_init): Fix a - braino so camel_stream_flush works here. - - * camel-stream-mem.c (stream_seek): Fix a bug that resulted in - large attachments being silently dropped. - - * providers/pop3/camel-pop3-store.c - (camel_pop3_command_get_additional_data): Don't use g_strjoinv - here, since it is O(n^2) on the length of the output string, and - we can do O(n). - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): add a CRLF decoder - after the QP/B64 decoder if it's text. - -2000-06-20 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): Only - fetch the summary if the folder summary doesn't already exist. - When the summary *does* exist, start fetching from 1, not 0. - (imap_free_summary): Don't do anything here. - (imap_finalize): Free the summary here instead of in - imap_free_summary(). - (imap_set_message_flags): Implemented - (imap_sync): Added code to set flags on messages that have had - their flags changed (however I #if'd it out until we are more - confidant in the IMAP code :) - (imap_summary_get_by_uid): Now parese flags correctly. - (imap_get_summary): Now parese flags correctly. Also correctly - parses the UID correctly. - - * camel-url.c (check_equal): No need to check s1 if s2 is NULL - (camel_url_equal): Don't check the passwd component of the url. - -2000-06-20 Dan Winship - - * camel-folder-summary.c (camel_folder_summary_add): mark the - message info with CAMEL_MESSAGE_FOLDER_FLAGGED if we change the - uid, so the folder will know that it's dirty. - -2000-06-20 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (camel_imap_command_extended): - Now returns the last line of data that the server sends back as - well. This is needed for commands like SELECT (like Peter pointed - out). - (camel_imap_command): No longer checks for SELECT (no need) - - * providers/imap/camel-imap-folder.c: Added namespace stuff - which we will need later on... - (imap_parse_subfolder_line): Convenience function for use in - get_subfolder_names() - (imap_get_subfolder_names): Updated. Also changed it to use LIST - instead of LSUB (temporary change). - -2000-06-19 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (camel_imap_folder_init): Set - summary equal to NULL. - (imap_get_summary): Store the summary in the ImapFolder - (imap_summary_get_by_uid): If we have a summary cache in the - ImapFolder, first check to see if that message info is in the - cached summary first, if not fetch it directly from the IMAP - server and append it to the summary cache. - (imap_get_message_flags): Don't free the message info that we get - back from summary_get_by_uid as we don't want to be corrupting our - cached summary. - -2000-06-19 Peter Williams - - * providers/imap/camel-imap-store.c (camel_imap_command{,_extended}): When - SELECT'ing a folder for an IMAP command, use _extended to grab the entire - response (before we just used camel_imap_command and missed the OK codes) - -2000-06-18 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_summary_get_by_uid): - Now gets the message flags as it should. - (imap_get_summary): Same as imap_summary_get_by_uid - (imap_get_permanent_flags): Return the permanent flags stored - on the folder. - (imap_get_message_flags): Return message flags associated with - given uid. Note: we may want to somehow cache summary info so - that we don't have to keep querying the IMAP provider in - imap_summary_get_by_uid(). - -2000-06-17 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_free_summary): We were - leaking memory - but not anymore! - (imap_get_summary): We now get the UIDs and the beginnings of the - code to get the message flags as well. - -2000-06-17 Dan Winship - - * camel-mime-parser.c (folder_scan_header): Don't copy newlines - into the parsed header text, and turn any number of tabs and - spaces after a newline into a single space. - -2000-06-17 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_init): Should now - correctly do CAPABILITY. - -2000-06-17 Dan Winship - - * providers/mbox/camel-mbox-summary.c: Add some debugging printfs - when rebulding summary to help figure out why people's summaries - are always being rebuilt. - -2000-06-17 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_search_by_expression): - Began to implement, need to get information on how to - deconstruct @expression into an IMAP search expression and - parse the results. - (imap_init): Now queries the IMAP provider for CAPABILITY to - determine if SEARCH is implemented or not. - - * providers/imap/imap.c: Removed - no longer a need to have - this as an example for anyone interesting to help mecode IMAP - support. - -2000-06-16 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_sync): Added code - to expunge if called for (still need to finish coding this). - (imap_get_uids): Implemented. - (imap_get_summary): Found a way to get the date - (imap_summary_get_by_uid): Same. - (imap_free_summary): Implemented. - - * string-utils.c (strstrcase): Fixed a compile warning - - * providers/imap/camel-imap-summary.c: Removed - we don't - need a CamelImapSummary structure. - -2000-06-16 Dan Winship - - Move flag handling from CamelMimeMessage to CamelFolder. This - simplifies several flag-handling pieces of code in the mailer, and - lets you change a message's flags without having to fetch the - message body. It also means that fully-constructed - CamelMimeMessages are now essentially constant, which will help - simplify locking issues later since it means two threads - interested in the same message can just work with separate copies - of it. - - * camel-mime-message.h (struct _CamelMimeMessage): Removed flags - and user_flags (moved to summary). Removed expunged and - message_number which were unused. Removed message_uid and folder - which are no longer needed in the new scheme. - (struct CamelMimeMessageClass): Removed message_changed signal and - get/set_message_number methods. - - * camel-mime-message.c: Updates for CamelMimeMessage changes. - (camel_mime_message_get/set_flags, - camel_mime_message_get/set_user_flag): Replaced with methods in - CamelFolder. - (camel_flag_get, camel_flag_set, camel_flag_list_size, - camel_flag_list_free): Moved verbatim to camel-folder-summary.c - - * camel-folder.c (camel_folder_get/set_message_flags, - camel_folder_get/set_message_user_flag): New methods (and - corresponding useless default implementations) - (camel_folder_class_init): add a message_changed signal - - * camel-folder-summary.c (camel_flag_get, camel_flag_set, - camel_flag_list_size, camel_flag_list_free): Moved here from - camel-mime-message.c - - * providers/mbox/camel-mbox-folder.c (message_changed): Removed. - (mbox_get_message_flags, mbox_set_message_flags, - mbox_get_message_user_flag, mbox_set_message_user_flag): Tweak - summary bits as appropriate. (Functionality moved here from - message_changed.) - (mbox_get_message_by_uid): Update for CamelMimeMessage changes - (less stuff to initialize). - - * providers/imap/camel-imap-folder.c (message_changed): Remove - this. It was just copied from the mbox provider and doesn't deal - with the real IMAP flag stuff anyway. (So there's currently no - flag support in the IMAP provider.) - (imap_get_message_by_uid): Update for CamelMimeMessage changes. - - * providers/vee/camel-vee-folder.c: (message_changed): Remove old - one. Add a new one to listen for message_changed on each folder - and re-emit message_changed signals that correspond to messages in - the vfolder. - (vee_get/set_message_flags, vee_get/set_message_user_flag): Proxy - flag setting to the underlying real messages. - (vee_append_message): Removed for now; there's no way to translate - this into the new CamelMimeMessage/CamelFolder scheme, but (a) - there's also no code which would ever call it and (b) we're - probably going want a better interface than append_message for - message drag and drop to work anyway. To be revisited. - -2000-06-16 Dan Winship - - * camel-mime-utils.c (rfc2047_decode_word): - * camel-mime-part-utils.c (simple_data_wrapper_construct_from_parser): - * camel-folder-summary.c (summary_build_content_info): - KLUDGE! Since neither ETable nor GtkHTML supports UTF-8 yet, - output ISO-8859-1 instead, so Ettore can read his Italian mail. :) - This will be reverted later. - -2000-06-15 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_summary): Started to - implement - may want to use ENVELOPE instead of BODY.PEEK[HEADER] - (imap_summary_get_by_uid): Started to code, I've got to find a way to - get the date in time_t format and also get the flags - - * string-utils.c (strstrcase): Added this convenience function - I - know about strcasestr() but it's not portable. - -2000-06-15 Dan Winship - - * camel-service.c: Remove camel_service_connect_with_url. (URLs - must be specified when the service is requested from the session, - so that there can only ever be one service for any URL.) - - * camel-folder.c: (camel_folder_open, camel_folder_is_open, - camel_folder_get_mode): Kill. Folders are now always open, and - handle "closing" sorts of operations at sync or finalize time. - (camel_folder_sync): renamed from camel_folder_close. Syncs state - to the store but doesn't necessarily close/disconnect. - - * providers/*/camel-*-folder.c: Merge "open" methods into "init" - methods. Rename close to sync and update appropriately. - - * providers/imap/camel-imap-store.c: Remove camel_imap_store_open - and camel_imap_store_close, which should not have been copied from - the POP provider (where the exist to work around limitations of - the POP protocol). - - * providers/mbox/camel-mbox-summary.c: fix a bug. (don't expunge - deleted messages if called with expunge == FALSE) - - * providers/pop3/camel-pop3-store.c (connect_to_server): Check - server for various interesting extensions. - - * providers/pop3/camel-pop3-folder.c (get_uids): If the server - supports UIDL, use real UIDs rather than fake ones. - (etc): Map uids back to numbers appropriately - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Fix to - previous change: make sure the "seek" variable ends up with the - value it should. - - * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update - summary mtime as well as size. - -2000-06-14 Dan Winship - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): if the - mbox doesn't end with a '\n', write one before appending the new - message. - -2000-06-14 Jeffrey Stedfast - - * camel-mime-filter-crlf.c (filter): Updated the encoder to allocate - more memory (since we are also now adding dots). Also updated the - decoder as we have found that it sometimes passes the end of the - buffer. - - * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Took out the - filter code (we already filter in - camel_pop3_command_get_additional_data) - - * camel-folder.c (init): Updated: a separator is now a char* rather - than a single char because IMAP can have a string for a directory - separator. Also, since IMAP does not begin with a directory separator, - there is a new argument (path_begins_with_sep) which decides if a - directory should begin with a directory separator. - - * providers/imap/camel-imap-store.c (imap_create): Since, on connect, - Camel tries to create INBOX (which already exists on every IMAP - provider) we can return TRUE when the folder name is "INBOX". - - * providers/vee/camel-vee-folder.c (vee_init): Updated. - - * providers/imap/camel-imap-folder.c (camel_imap_folder_new): Updated. - - * providers/mbox/camel-mbox-store.c (get_folder): Updated. - - * providers/mbox/camel-mbox-folder.c (mbox_init): Updated. - - * providers/pop3/camel-pop3-folder.c (camel_pop3_folder_new): Updated. - -2000-06-14 Dan Winship - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_sync): - Renamed from camel_mbox_summary_expunge. Takes a gboolean saying - whether to expunge or just sync the mbox file. Change some - g_errors to g_warning so we don't abort. Make the quick - X-Evolution updating code lseek around correctly. Update the - mbox mtime in the summary file even in the quick case. - - * providers/mbox/camel-mbox-summary.h: make - CAMEL_MESSAGE_FOLDER_NOXEV not conflict with - CAMEL_MESSAGE_FOLDER_FLAGGED defined in camel-mime-message.h - - * providers/mbox/camel-mbox-folder.c (mbox_close): call - camel_mbox_summary_sync to save flag state if not expunging. - (mbox_expunge): Update for camel_mbox_summary_expunge rename. - -2000-06-13 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (camel_imap_store_open): - (camel_imap_store_close): Added. - (camel_imap_command_extended): Fixed a segfault and updated - to use camel_imap_status() - (camel_imap_command): Updated to use camel_imap_status() - (camel_imap_status): New convenience function for parsing - the return status of an IMAP command - -2000-06-12 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c (imap_get_message_by_uid): - Works like the POP fetch code, should work temporarily until - we get around to coding it the way it "Should Be". - - * providers/pop3/camel-pop3-folder.c (get_message_by_uid): Now uses - the camel-mime-filter-crlf decoder when retrieving messages. - - * camel-mime-filter-smtp.c: Deprecated. - - * providers/smtp/camel-smtp-transport.c (smtp_data): Updated to use - camel-mime-filter-crlf with my 'dot' extension in place of - camel-mime-filter-smtp - - * camel-mime-part.c (write_to_stream): Updated to reflect changes - made to camel-mime-filter-crlf.c - - * camel-mime-filter-crlf.c (filter): Modified to be able to - encode/decode dots ("\n.\n"<->"\n..\n"). Also fixed the decoder - so that it should no longer get caught in an infinite loop. - -2000-06-12 Dan Winship - - * providers/*/Makefile.am: don't pass a second (incorrect) -rpath - in addition to the (correct) one automatically provided by - automake. - - * camel-mime-filter-crlf.c: New filter to do CRLF<->LF conversion. - (Currently only tested in the LF->CRLF direction.) - - * camel-mime-part.c (write_to_stream): if content-type is text, - and it's QP or B64 encoded, pass through the CRLF filter before - the other filter to satisfy the "canonical encoding" rules in the - MIME spec. - -2000-06-09 Dan Winship - - * camel-session.c (camel_session_query_authenticator): Add another - argument, "mode", which can be CAMEL_AUTHENTICATOR_ASK or - CAMEL_AUTHENTICATOR_TELL, so callers can get the app to un-cache - bad info. - - * providers/pop3/camel-pop3-store.c (pop3_connect): uncache the - password if it doesn't work. - -2000-06-09 Jeffrey Stedfast - - * providers/imap/camel-imap-stream.c (stream_read): Updated to reflect - changes made in camel-imap-store.c - - * providers/imap/camel-imap-store.c (imap_create): No longer checks to - make sure a folder doesn't already exists (as this is no longer needed) - (camel_imap_command): Now takes a CamelFolder argument so it can detect - whether or not it needs to SELECT a folder or not - (camel_imap_command_extended): Same. - - * providers/smtp/camel-smtp-transport.c (smtp_connect): Will now always - send EHLO first, if that fails it will fall back on HELO. - (esmtp_get_authtypes): Should now correctly parse authtypes. - -2000-06-07 Jeffrey Stedfast - - * providers/imap/camel-imap-summary.c: Now builds (not that it's worth - much yet). - - * providers/imap/camel-imap-folder.c (imap_get_uids): Now uses the - correct cast to a CamelImapMessageInfo structure (should get rid of - compile warnings). - - * providers/imap/Makefile.am: Added rules to build - camel-imap-stream - - * providers/imap/camel-imap-store.c (get_folder): Update. - Moved imap_create here. - - * providers/imap/camel-imap-folder.c (delete_messages): Remove. - (imap_create): Removed. - (imap_delete): Removed. - (imap_exists): Removed. - - * providers/imap/camel-imap-stream.h: Added typedef's for the stream - - * providers/imap/camel-imap-stream.c: Modified to build cleanly - -2000-06-07 Not Zed - - * camel-mime-utils.c (header_msgid_decode_internal): Properly - dereference warning/debug messages. - (header_references_decode): Check we actually have msgid stuff - before trying to decode it ... - -2000-06-06 Jeffrey Stedfast - - * camel-imap-stream.[c,h]: Removed - - * providers/imap/camel-imap-stream.[c,h]: Relocated to this - location - - * providers/imap/camel-imap-summary.c: Added - -2000-06-06 Dan Winship - - * camel-folder.c: Remove exists, create, delete. A CamelFolder - now always references an existing folder. Remove delete_messages - too since it wasn't being used. Add a "create" flag to - get_subfolder saying whether or not to create the subfolder if it - doesn't yet exist. - - * camel-store.c (camel_store_get_folder): Add a "create" flag to - say whether or not to create the folder if it doesn't yet exist. - (camel_store_delete_folder): New method, moved from CamelFolder. - (cache_folder, uncache_folder): Fix up a bit. - (get_folder_name): Explain what this is for. - - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-store.c: Update. Remove support for - hierarchical folders to simplify this for now, since we're not - using it, and it's not completely clear how they should work in an - ELocalStorage world. Needs to be revisited. - - * providers/pop3/camel-pop3-folder.c (delete_messages): Remove. - * providers/pop3/camel-pop3-store.c (get_folder): Update. - - * providers/vee/camel-vee-folder.c (exists): Remove. - * providers/vee/camel-vee-store.c (vee_get_folder): Update. - -2000-06-06 Jeffrey Stedfast - - * providers/imap/camel-imap-*.[c,h]: Started on getting - imap to build cleanly (tho some work has not been completed - so it still won't build until camel-imap-summary is finished - along with a few methods in camel-imap-folder) - - * camel-stream.[c,h]: Changed the read and write method prototypes - to return an ssize_t type rather than an int and also changed - the 'number of bytes' to read or write to a size_t type - - * camel-stream-fs.c: same as above - - * camel-stream-mem.c: again, same as above - - * camel-stream-buffer.c: same - - * camel-imap-stream.[c,h]: Added this new stream, cache's previously - read data so each successive call will instead read from the cache - -2000-06-05 Dan Winship - - * camel-mime-part.c (camel_mime_part_set_disposition): fix - typo/braino (set "Content-Disposition", not "Content-Description") - (camel_mime_part_set_filename): const poison - -2000-06-02 Not Zed - - * camel-mime-utils.c (base64_encode_step): Ick, damn signs! Fix a - bug with sign extended bytes. - - * camel-mime-filter-smtp.c (filter): Changed layout/logic slightly - (to match From filter) - -2000-06-02 Jeffrey Stedfast - - * camel-mime-filter-smtp.c (filter): Fixed the filter so that it - wouldn't insert garbage under certain conditions. - -2000-06-02 Christopher James Lahey - - * camel-session.c: Don't ref the services in the cache. - -2000-06-02 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: Rearanged where debug - fprintf statements we placed so that any data the server sends - back is printed out before an exception is set and the function - returns. - -2000-06-02 Not Zed - - * camel-mime-utils.c (header_decode_date): If we get a funny - result, just throw it out. Basically a fix for the one true - broken TradeClient. - -2000-06-01 Not Zed - - * camel-folder-summary.c (message_info_free): Free - references/messsage id. - (message_info_save): Save them. - (message_info_load): Load them. - (message_info_new): And get them from the new message. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped for new changes. - - * camel-folder-summary.h: Added references and messageid to - summary. - -2000-06-02 Christopher James Lahey - - * camel-session.c: Ref and unref objects in the service cache - properly. - - * camel-store.c: Ref the folder when returning it using - lookup_folder. Used the folder's full name for the key for the - folder cache since that's used to uncache it. - -2000-06-02 Dan Winship - - Fun with purify. - - * providers/pop3/camel-pop3-store.c (pop3_connect): free msg on - success as well as failure. - (camel_pop3_command_get_additional_data): free buf after reading - the last line ("."). - - * providers/pop3/camel-pop3-folder.c (get_message_by_uid): free - body data after creating the memstream from it (which will copy - the data). - - * providers/mbox/camel-mbox-folder.c (mbox_finalize): free summary - and index paths. - - * camel-data-wrapper.c (finalize): unref the stream, if it exists. - -2000-06-01 Not Zed - - * camel-mime-part.c (construct_from_parser): For a message part, - set the default content-type to message/rfc822. Maybe needs to be - done for multiparts too? - -2000-05-31 Not Zed - - * camel-mime-message.c (construct_from_parser): Typo in assersion. - - * camel-mime-parser.c (folder_scan_step): Use a default type of - message/rfc822 for multipart/digest. Bug Z192. - (folder_scan_drop_step): Remove warning. - -2000-05-30 Not Zed - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Init - filter_from to NULL, for exception case. - (mbox_get_message_by_uid): Cast off_t to long int for diagnostics. - - * camel-url.c (camel_url_hash): Hash funciton for using camel - url's as hash keys. - (camel_url_equal): equal function for same. - - * camel-session.c (camel_session_finalise): Free cached services. - (camel_session_init): Init service cache. - (service_cache_remove): destroy callback to remove a service from - the cache. - - * camel-store.c (get_folder_internal): Remove the extra ref of the - folder. That seems the right behaviour ...? - (camel_store_get_type): Doh, actually call store init, so the - cache works. - (cache_folder): strdup the folder name! no wonder it never found - it again. - -2000-05-30 Jeffrey Stedfast - - * providers/imap/camel-imap-folder.c: Implemented a few more - methods like imap_append and 1 or 2 others - -2000-05-29 Not Zed - - * camel-store.c (camel_store_init): Move it to here. If this - level is going to maintain it, it should set it up. Lets see what - caching folders breaks :( - - * providers/pop3/camel-pop3-store.c (camel_pop3_store_init): Dont - init folder cache here. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_expunge): Make sure we copy messages which are - still intact to the new folder. - (camel_mbox_summary_expunge): Update the frompos as well when - moving the content. - (camel_mbox_summary_expunge): Remove some debug, and dont offset - frompos? - - * providers/vee/camel-vee-folder.c (vee_folder_build): Check the - searched folder is open before trying to search it. - (message_changed): Track changes to the source message in the - summary. - (folder_changed): Track folder changes, re-query the folder that - changed, and cascade the changed event as well. - (camel_vee_folder_finalise): Free subfolder and subfolder summary. - -2000-05-29 Dan Winship - - * camel-service.c (camel_service_new): Fix up some glib - precondition stuff. Try to set the URL in camel_service_new before - checking whether or not it's "empty" so that you can successfully - set "sendmail:" as a URL. - -2000-05-28 Dan Winship - - * camel-provider.h: Add a domain field to CamelProvider, to say - what kind of data it provides. - - * providers/imap/camel-imap-provider.c: - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/sendmail/camel-sendmail-provider.c: - * providers/smtp/camel-smtp-provider.c: Set domain to "mail". - - * providers/nntp/camel-nntp-provider.c: Set domain to "news". - - * providers/vee/camel-vee-provider.c: Set domain to "vfolder". (So - it doesn't end up being listed as a potential mail source in the - mail config wizard.) - - * providers/pop3/camel-pop3-store.c: Split apart password and APOP - auth, since some servers seem to do both, but don't really. - (connect_to_server): Renamed from try_connect. Now actually does - the connection up to the point of checking the greeting for APOP - support. - (query_auth_types): Return APOP, if appropriate. Call - pop3_disconnect after connect_to_server since we don't really want - to be connected. - (pop3_connect): Use connect_to_server rather than duplicating - code. Fix a one-byte buffer overrun in the APOP code. - (pop3_disconnect): Make this able to clean up after a partial - connect. - (connect_to_server): Remove port number from error message since - it's not terribly useful and we were getting it from the wrong - place anyway. - - * camel-mime-utils.c (header_address_list_format_append): Use - `foo@bar' rather than `"" ' for email addresses with no - name component. - -2000-05-27 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c: Removed - camel_imap_command_get_additional_data() as it was - completely useless, replaced with - camel_imap_command_extended() which may eventually replace - camel_imap_command() as well. - - * providers/imap/camel-imap-store.h: Modified to reflect - changes made to camel-imap-store.c - - * providers/imap/camel-imap-folder.c: Wrote the first of many - methods: camel_imap_init(), imap_open(), imap_expunge(), - imap_get_message_count(), and imap_get_subfolder_names() - -2000-05-26 Dan Winship - - * camel-multipart.c (camel_multipart_init): Don't set a default - boundary. Require the caller to do that. - (set_boundary): if boundary is NULL, generate a "random" boundary. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Add a call to - camel_multipart_set_boundary after creating a new multipart. - -2000-05-25 Jeffrey Stedfast - - * providers/imap/camel-imap-store.c (try_connect): Removed - Exception code - Pop doesn't seem to set exceptions - - * providers/imap/camel-imap-folder.c: Initial code, mostly - just a template for future code - - * providers/imap/imap.[c,h]: Source code from my personal - mailer - for reference only! - -2000-05-25 NotZed - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Replace simple - data wrapper here too, oops. - - * Makefile.am (libcamel_la_SOURCES): Removed - camel-simple-data-wrapper again. Less code to maintain == better - code. - - * camel-data-wrapper.c (construct_from_stream): Fixes for bug - where text attachments dont work. Made data-wrapper concrete for - the second time. - -2000-05-23 NotZed - - * providers/vee/camel-vee-folder.c (vee_folder_build_folder): - Update the vfolder details for a single folder. - -2000-05-25 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c (_send_to): Took out code - that had been there to reconnect to the server if it was not - already connected - Mailer code was fixed so that this should not - be needed. - - * providers/imap/camel-imap-store.[c,h]: Initial code. - -2000-05-24 Dan Winship - - * camel.h: Re-add camel-simple-data-wrapper.h, which was removed - for some reason. - -2000-05-24 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.[c,h]: Moved global - variables into struct CamelSmtpTransport to make SMTP - thread-safe - - * providers/imap/camel-imap-*.h: Stolen from Mbox. Rough structure - for Imap. - -2000-05-23 Jeffrey Stedfast - - * providers/imap: Added some initial code to the camel tree - for IMAPv4 - - * providers/imap/.cvsignore: Added to repository - - * providers/smtp/camel-smtp-transport.c: Added debug fprintf's - so that testers can provide more information. Tested with simple - messages and a reply to the hello@helixcode.com default message - but should really be tested more. - (smtp_data): Fixed to use data_wrapper_write_to_stream. - - * camel-mime-filter-smtp.c (filter): Modified to escape all lines - beginning with a '.' and to place a \r before each \n if one did - not previously exist. Removed code to escape "From " as it was - found to not be needed for SMTP. - -2000-05-22 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c (smtp_data): Fixed the - filtered stream. Fixes for stream changes, updated to use - camel-mime-filter-smtp. - - * Makefile.am: Added camel-mime-filter-smtp.c - - * camel-mime-filter-smtp.[c,h]: Added to camel tree - Smtp filter used to change \n into \r\n, escape lone dots, - and escape "From "'s. - -2000-05-19 NotZed - - * camel-simple-data-wrapper.c (construct_from_stream): If we - already have been constructed, unref our content. - (write_to_stream): Check we've been constructued, and change for - stream api changes. - - * camel-mime-parser.c: Removed exception stuff. - - * md5-utils.c (md5_get_digest_from_stream): repaired. - - * camel-mime-message.c: Remove exception from write_to_stream, and - fix, and fix formatting. - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - Fix for stream changes. - - * providers/pop3/camel-pop3-store.c (camel_pop3_command): Fixes - for stream changes. - - * providers/mbox/camel-mbox-folder.c, and elsewhere, fix all - stream api changes. - (mbox_append_message): Use stream_close() now its back. - (mbox_append_message): unref the from filter. - - * camel-stream-mem.c: And here. - - * camel-stream-fs.[ch]: Here too. - - * camel-stream-filter.c: Likewise. This is getting tedious. - - * camel-stream-buffer.c (stream_write): Fix a few little problems. - (stream_close): Reimplement. - (camel_stream_buffer_read_line): Slightly more efficient version, - that also only allocates the right amount of memory for strings. - - * camel-seekable-substream.c: Likewise. - - * camel-seekable-stream.[ch]: Remove exceptions, fix formatting, - changes for stream (re)fixes. set_bounds returns an error. - - * camel-stream.[ch]: Remove exceptions. Make flush and reset return - an error code, repair all the screwed up formatting, and put back - close. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): And here. - - * camel-mime-part.c (camel_mime_part_set_content): And this too. - (write_to_stream): Fixed for stream changes. - - * camel.h: Fixed. - - * providers/vee/camel-vee-folder.c (vee_search_by_expression): - Implement. Performs an intersection of the two searches. - (camel_vee_folder_finalise): Unref search folders. - (vee_append_message): Implement append. - -2000-05-18 Dan Winship - - * camel-folder.c: remove message_number_capability and require uid - capatibility. - (camel_folder_list_subfolders, camel_folder_get_uid_list, - camel_folder_get_subfolder_info, camel_folder_get_message_info): - removed - (camel_folder_get_subfolder_names, - camel_folder_free_subfolder_names): new subfolder interfaces. - (camel_folder_get_uids, camel_folder_free_uids): new uid - interfaces - (camel_folder_get_summary, camel_folder_free_summary): new summary - interfaces - - * providers/mbox/camel-mbox-folder.c, - * providers/nntp/camel-nntp-folder.c: - * providers/vee/camel-vee-folder.c: Update for changes - - * providers/pop3/camel-pop3-folder.c: Implement get_uids, update - for other changes. - -2000-05-18 NotZed - - * providers/vee/camel-vee-folder.c: Guess! - - * camel-folder-search.c (search_user_flag): Implement user_flag - search term. - - * camel-folder-search.h: Added user_flag search capability - (user-flag "blah") - - * providers/mbox/camel-mbox-folder.c (mbox_init): Set USER flag in - permanent flags for the folder. - -2000-05-17 Dan Winship - - * camel-folder.c: Remove unused async open/close and - copy_message_to functions. - Rename functions without initial _. Fix glib preconditions and - gtk-doc comments. - -2000-05-17 Dan Winship - - * camel-data-wrapper.c: remove get/set_output_stream operations. - They're redundant with write_to_stream, and CamelMimePart and - CamelMimeMessage only implement the latter, meaning that trying to - get_output_stream on a CamelMimeMessage that was built from pieces - rather than being parsed from a stream doesn't work. Anything that - uses get_output_stream can be rewritten to use write_to_stream, so - we'll standardize on that. - (camel_data_wrapper_new): remove this: CamelDataWrapper is - supposed to be an abstract class. - (write_to_stream): remove default implementation. (Moved to - CamelSimpleDataWrapper) - - * camel-simple-data-wrapper.c: resurrect, although it's not really - the same thing it was before. A simple data wrapper, which is - backed by a CamelStream. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Use - construct_from_stream rather than set_output_stream. - (camel_mime_part_construct_content_from_parser): Change - camel_data_wrapper_new to camel_simple_data_wrapper_new. - - * camel-mime-part.c (camel_mime_part_set_content): Change - camel_data_wrapper_new to camel_simple_data_wrapper_new. - - -2000-05-17 Darin Adler - - * camel-folder-summary.c: (message_info_load): - Quick fix to get it to compile. I hope I don't get into trouble. - -2000-05-17 Dan Winship - - * camel.h: Don't include the no-longer-distributed - possibly-to-be-removed headers. - - * providers/smtp/camel-smtp-transport.c - (smtp_get_email_addr_from_text): fix an off-by-one error in - address parsing - (smtp_data): use camel_data_wrapper_get_output_stream rather than - data_wrapper->output_stream - -2000-05-17 NotZed - - * providers/mbox/camel-mbox-folder.c (message_changed): Snoop - changes to user flags on the message into the summary as well. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_init): - Changed version init to include the parent class version info - (i.e. add it not overwrite it). - - * camel-folder-summary.c (message_info_new): Initialise user_flags - to empty. - (message_info_load): And load user flags. - (message_info_save): And save user flags. - (message_info_free): And free them. - (CAMEL_FOLDER_SUMMARY_VERSION): Bumped file revision. - - * camel-folder-summary.h: Added user-flags to summary. - - * camel-mime-message.c (camel_mime_message_set_user_flag): Dont - use a hashtable for user flags. - (camel_mime_message_get_user_flag): And changed here too. - (camel_flag_get): New interface to get a flag from a flag - list. Flag lists are easier to work with than hash tables, and - save memory too. - (camel_flag_set): And set. - (camel_flag_list_free): And free. - (free_key_only): Discard. - (finalize): Remove the flag list. - -2000-05-17 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: (smtp_helo): Error - checking on gethostbyaddr() eliminating a possible segfault. - -2000-05-16 NotZed - - * providers/mbox/camel-mbox-folder.c (mbox_delete_message_by_uid): - Implement. - -2000-05-12 NotZed - - * camel-movemail.c (camel_movemail): Open the destination with - O_APPEND, so we dont blow away a partially transferred mbox. - (camel_movemail): Loop if we get errno=INTR, and not fail. - -2000-05-11 NotZed - - * providers/mbox/camel-mbox-summary.c (summary_rebuild): Update - the summarised file size, if everything went ok. - (camel_mbox_summary_expunge): Clear header flags after updating. - -2000-05-16 Chris Toshok - - * providers/nntp/camel-nntp-folder.c: - * providers/nntp/camel-nntp-folder.h: - * providers/nntp/camel-nntp-provider.c: - * providers/nntp/camel-nntp-store.c: - * providers/nntp/camel-nntp-utils.c: - * providers/nntp/camel-nntp-utils.h: - get things working with new camel summary stuff. - - * providers/nntp/camel-nntp-summary.c: - * providers/nntp/camel-nntp-summary.h: - removed files since camel-folder-summary does all we need. - -2000-05-15 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: Added some preliminary - AUTH support. - -2000-05-15 Dan Winship - - * camel-folder.h: Remove camel_folder_get_summary, which no longer - exists. - -2000-05-11 Dan Winship - - * Makefile.am: remove some cruft that we're not currently using. - - * camel-stream-mem.c (camel_stream_mem_new_with_buffer): Change - to match prototype (size_t vs unsigned int) so it works on 64-bit - machines. Noted by msw. - -2000-05-11 NotZed - - * providers/mbox/camel-mbox-folder.c (message_changed): Indicate - the summary changed also. - -2000-05-11 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: (smtp_helo): - Updated to more closely comply with RFC 821 standards - -2000-05-11 NotZed - - * camel-mime-part.c (write_to_stream): Unref the filter after - adding it to the filtering stream. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_finalise): Free the folder path. - (camel_mbox_summary_update): Also save summary when done. - (camel_mbox_summary_expunge): Unindex items when deleting them. - (camel_mbox_summary_expunge): Save the index as well as the - summary. - - * camel-folder-summary.c (camel_folder_summary_finalise): Free the - summary path. - (camel_folder_summary_touch): New function, indicate the summary - info changed. - (camel_folder_summary_remove): Dirty here. - - * camel-internet-address.c (internet_decode): Free multiple entry - addresses properly. - - * camel-mime-utils.c (header_decode_mailbox): Plugged another - memleak, free text after converting it. - (header_decode_addrspec): More leaks plugged. - - * camel-mime-message.c (finalize): Free message_uid. - (finalize): Free the recipients hashtable. - -2000-05-11 - - * camel-folder-summary.c (camel_folder_summary_finalise): Free - summary items and charset filters. - -2000-05-10 - - * camel-folder-summary.c (camel_folder_summary_finalise): Don't - free stuff in p, after we've free'd p. - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Unref - the stream we created for appending. - -2000-05-10 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: (camel_smtp_transport_class_init): - Added initialization for service_class - -2000-05-10 Dan Winship - - * camel-multipart.c (write_to_stream): fix a stupid typo. Thank - you, C. - - * camel-mime-part.c (write_to_stream): don't ref the stream before - wrapper a filter around it, since nothing will ever unref it. - -2000-05-10 Christopher James Lahey - - * Makefile.am: Added camel-types.h, camel-folder-pt-proxy.h, and - camel-thread-proxy.h. - -2000-05-09 Dan Winship - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - Bleah. Can't fsync a pipe. As a quick kludge, just don't - stream_flush it. The right fix will require bringing back - stream_close though. - -2000-05-09 Jeffrey Stedfast - * camel-internet-address.[c,h]: Undid my changes (moved - struct _address back into came-internet-address.c) - * providers/smtp/camel-smtp-transport.c: (_send): changed - from using it's own address manipulation (using struct _address) - to using camel_internet_address_get(). Also some format changes - to keep consistant with the rest of Camel - -2000-05-09 Jeffrey Stedfast - - * camel-internet-address.[c,h]: Moved struct _address from - camel-internet-address.c to camel-internet-address.h - (hopefully this doesn't break anything...) - * providers/smtp/camel-smtp-transport.c: (_send): now - populates the recipient list with To, Cc, and Bcc addresses. - Should now be able to use this module. - -2000-05-09 Dan Winship - - * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): - one more refcounting fix I missed before. - -2000-05-08 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: no longer frees memory it - shouldn't, updated to reflect camel-stream changes involving - CamelException (perhaps it should use a different CamelException - variable than is passed to the camel smtp module?) - -2000-05-08 Dan Winship - - * camel-stream.c (camel_stream_read, camel_stream_write, - camel_stream_flush, camel_stream_reset, camel_stream_printf, - camel_stream_write_to_stream): Use CamelException to signal - failure. - (camel_stream_write_strings): Remove. camel_stream_printf is more - useful in most of the places that used this. - (camel_stream_write_string): Change from macro to function to - prevent problems with double-evaluation. - - * camel-seekable-stream.c (camel_seekable_stream_seek, - camel_seekable_stream_set_bounds): Use CamelException. - (reset): Update. - - * camel-seekable-substream.c, camel-stream-buffer.c, - camel-stream-filter.c, camel-stream-fs.c, camel-stream-mem.c: - Update. - - * camel-stream-fs.c: Remove the virtual init functions and move - the code into the creator functions. Add CamelExceptions to - creation functions that could fail. - - * camel-data-wrapper.c (camel_data_wrapper_write_to_stream): Use - CamelException. - * camel-mime-message.c, camel-mime-part.c, camel-multipart.c - (write_to_stream): Update. - - * camel-mime-parser.c: add an exception to the mime parser private - data and pass that to stream functions as needed. - - * gmime-content-field.c, md5-utils.c: Update (badly) for stream - changes. - - * camel-exception.h (camel_exception_is_set): convenience macro. - - * providers/Makefile.am: disable SMTP for now - - * providers/mbox/camel-mbox-folder.c (mbox_append_message): Pass - CamelException to the functions that now need it. Check the - exception after calling camel_stream_flush, and fail if it fails. - (mbox_get_message_by_uid): More updates. - - * providers/pop/camel-pop3-folder.c, - providers/pop/camel-pop3-store.c, - providers/sendmail/camel-sendmail/transport.c: Update. - - -2000-05-08 NotZed - - * camel-mime-message.c (process_header): Format From and Reply-To - to at least a decoded string. Should probably store them as an - camelinternetaddress. - - * Merged NEW_SUMMARY branch back to trunk, and resolved conflicts. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_update): - Return status. - (camel_mbox_summary_expunge): Force an update of the summary - before we do anything. - (camel_mbox_summary_expunge): Build new xev line in xevnew, and - free that, and consify xev. - (camel_mbox_summary_load): If we are rebuilding from scratch, make - sure we clear the summary content. - - * camel-stream-filter.c (do_close): We NEED a stream close. - -2000-05-07 Dan Winship - - Make camel not leak like a sieve. - - * camel-object.c: New subclass of GtkObject which is now the base - of the Camel object hierarchy. Currently the only difference - between CamelObject and GtkObject is that CamelObjects don't start - out floating. - - * *.h: Move a bunch of typedefs to camel-types.h. Standardize on - using in header files rather than , "foo.h", - or "camel/foo.h". Remove some unneeded includes. - - * camel-address.c, camel-data-wrapper.c, camel-folder-search.c, - camel-folder-summary.c, camel-folder.c, camel-mime-filter.c, - camel-mime-parser.c, camel-service.c, camel-session.c, - camel-stream.c: These are now subclasses of CamelObject. - - * camel-data-wrapper.c (set_output_stream): - * camel-medium.c (set_content_object): - * camel-seekable-substream.c - (init_with_seekable_stream_and_bounds): - * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): - remove gtk_object_sink calls. - - * camel-stream-buffer.c (init_vbuf): - * camel-stream-filter.c (camel_stream_filter_new_with_stream): - ref the original stream. - - * camel-folder-summary.c (camel_folder_summary_finalise): unref - the filters when finalizing. - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser, - camel_mime_part_construct_content_from_parser): - * camel-mime-part.c (camel_mime_part_set_content): Unref objects - that are created only to be handed off to other objects. If - they're going to be needed later, they will have been additionally - ref'ed by the object that needs them. - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): - unref the message stream after creating the data from it. - - * camel-stream.c, camel-stream-buffer.c, camel-stream-filter.c, - camel-stream-fs.c, camel-stream-mem.c: Remove camel_stream_close, - since its semantics are dubious (what happens when you close a - stream other people still have references on?). - - * providers/nntp/camel-nntp-store.c: - * providers/smtp/camel-smtp-transport.c: - * providers/pop3/camel-pop3-store.c: - replace camel_stream_close calls with gtk_object_unref. - - * providers/mbox/camel-mbox-folder.c: - * providers/nntp/camel-nntp-folder.c: - * providers/sendmail/camel-sendmail-transport.c: - replace camel_stream_close with camel_stream_flush + - gtk_object_unref - -2000-05-06 Dan Winship - - * providers/pop3/camel-pop3-store.c (query_auth_types): A machine - which serves neither POP nor KPOP is not a POP server. - - * providers/smtp/camel-smtp-provider.c: Note in the description - that this provider is not yet tested. - -2000-05-08 - - * camel-mime-part.c (write_to_stream): Free the filter stream when - done. - - * camel-mime-parser.c (folder_seek): Make sure we add the \n - terminal when we seek as well (frob!). - - * camel-mime-utils.c (header_decode_addrspec): Plug minor memleak. - - * camel-mime-part.c (finalize): Free header tables once finished. - - * camel-folder-summary.c (camel_folder_summary_remove): Dont try - to access info after its free'd. - -2000-05-07 NotZed - - * camel-mime-part.c (write_to_stream): Apply encoding to content - part, when writing to a stream *sigh*. - - * camel-stream-filter.c (do_write): implement write for the - filtering stream. Writes shouldn't be mixed with reads. - (do_flush): Implemented flush. Again write/flush shouldn't be - mixed with reads. Only flushes if the last op was write. - (do_close): Force flush on close. - - * camel-mime-filter.c (filter_run): Oops, make sure we include the - backlen in the total length before passing onto the filter. - - * camel-mime-filter-from.c: New filter, munges 'From ' lines into - '>From ', for mbox. - - * camel-mime-parser.c (camel_mime_parser_header_remove): New - function to remove the parser's raw header, rather than - manipulating the header directly (wich doesn't work with - mempools). - - * camel-mime-utils.c (header_address_list_clear): Fixed some - broken(tm) logic, which would leak entries on multivalued lists. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): - Use ibex_save() to save the ibex. Makes a big difference to - startup times for very large mailboxes. - (camel_mbox_summary_expunge): Dum de dum, reimplemented. Designed - to be much more robust, and to stop immediately if anything awry - happens. - (copy_block): Utility function to copy n bytes from one fd to - another. - (header_write): Utility function to write out raw headers to an - fd. - (camel_mbox_summary_update): Incremental summary updater. - - * providers/mbox/camel-mbox-folder.c (mbox_get_message_by_uid): - Dont unref the stream, because of the broken(tm) ref model of gtk - widget that for some odd reason is being perpetuated in camel. - (mbox_expunge): Reenable expunge again. - (mbox_append_message): Removed the optimised mbox append. If its - an issue, it can go back later. Cleaned up a lot, checks error - returns, and automagically translates 'From ' into '>From' as - necessary. - -2000-05-07 - - * camel-mime-filter.c (filter_run): Oops, forgot to add the - backlen to the pre-buffer (*poof*). - -2000-05-07 NotZed - - * camel-mime-message.c (construct_from_parser): Allow - HSCAN_FROM_END to terminate the processing of a message. - - * camel-folder-summary.c (perform_content_info_load): Ick, dont - try and append a node onto its own list. - (camel_folder_summary_clear): Actually clear the indexes after - we've removed the messages. - (camel_folder_summary_clear): Set dirty if it changes. - (camel_folder_summary_load): Clear dirty. - (camel_folder_summary_save): Only save if dirty. - - * providers/mbox/camel-mbox-summary.c (summary_header_load): Oops, - remember to call that parent class first ... - (summary_header_save): Here too. - (camel_mbox_summary_load): Do more checking to verify the index - contents as well as teh summary contents, against the mbox - contents. - (camel_mbox_summary_load): Removed some fo that checking, it needs - more code to work reliably. - -2000-05-07 - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_load): - Set the size and mtime of the mbox we indexed once done. - - * camel-folder-summary.c (camel_folder_summary_set_index): Dont - write the index if it changes - let the claler fix it (uh, kind of - impacts performance). - (camel_folder_summary_load): close in. - - * camel-folder-summary.c (summary_format_string): Check header - exists before trying to strip its leading spaces. - -2000-05-06 NotZed - - * camel-folder.h: Removed summary info from here, and include - camel-folder-summary.h as well. - - * camel-mime-parser.c (camel_mime_parser_step): Allow it to accept - a NULL databuffer. - - * providers/mbox/camel-mbox-summary.c: Totally new file, now - subclasses camel-folder-summary. - - * camel-folder-summary.c (message_info_load): Load the uid as a - string. - (message_info_save): And save too. - (camel_folder_summary_clear): New function, clears the contents of - the summary. - - * providers/mbox/camel-mbox-folder.c: Fixes for summary changes. - (mbox_get_message_by_uid): Completely redone. Now cross-checks - the summary information to make sure we get a real message. - (mbox_append_message): Disabled the copy version of append for - now. - (mbox_expunge): Temporarily disabled the expunge function, until - it is put back in camel-mbox-summary.c - -2000-05-05 NotZed - - * camel-folder-summary.c: And same here ... - (camel_folder_summary_encode_fixed_int32): Ugh, fwrite doesn't - return -1 on error .. - (camel_folder_summary_decode_fixed_int32): Neither deos fread. - (camel_folder_summary_encode_token): Fix here too. - (summary_build_content_info): Use start-headers to get the pos of - the message, not parser_tell(), which might not be what we - expected because of parser_unstep(). - (camel_folder_summary_encode_token): Use bserch() to tokenise the - values, rather than a linear search. - - * camel-mime-utils.c: Defined out some memory profiling stuff I - left there by mistake. - (header_decode_mailbox): Dont try to append the word part of a - local address if we ran out of words. - - * camel-mime-parser.c (folder_scan_content): Apply the fix from - the header scanner to here too. - (folder_scan_header): Only check for end of header if we have - space for it (didn't end the read with a newline) - (folder_scan_header): inptr is the only real thing we need - registerised for performance. Try to help the compiler be smart - about it .. - (folder_scan_header): Simplified the save header case a tad. - - Commented out some memory profiling stuff. - -2000-05-05 - - * camel-mime-utils.c (header_decode_mailbox): Plug a memory leak. - (header_decode_text): Fixed memory leaks with g_string_append(). - (header_encode_string): And here too, and a few other places. The - glib api is so awful ... - (header_content_type_decode): More memory leaks. - -2000-05-05 - - * camel-mime-parser.c (folder_scan_init_with_fd): Make sure we - init the end of buffer sentinal! - (folder_scan_init_with_stream): And here too ... - -2000-05-04 NotZed - - * providers/mbox/camel-mbox-folder.c (summary_get_message_info): - Maxcount is minimum of the max and the requested count, not the - maximum :) - - * camel-mime-parser.c (folder_scan_content): Properly set midline, - so we dont falsely catch offset boundary markers (i.e. From inside - content). - (folder_read): Set a sentinal on the end of the read data (\n) so - we dont have to check the buffer boundary in the inner loop. - (mempool_*): New experimental memory management routines, speed - up simple structure parsing by about 25% ... not compiled in by - default. Something similar may be needed for camel-mime-utils to - address performance issues with g_malloc and friends. - - * camel-mime-utils.c: Added a macro w(x) used to wrap all warnings - about mime/rfc violations, so they can be turned off. - - * camel-folder-summary.c (summary_build_content_info): Step after - the end of a message ... - Turn into a stand-alone program for testing and profiling. - -2000-05-04 Dan Winship - - * providers/pop3/camel-pop3-store.c (pop3_connect): Don't fall - back to plaintext passwords if APOP fails, since it should also - fail. - -2000-05-04 Dan Winship - - * camel-session.c (camel_session_list_providers): New function to - replace camel_provider_scan. Returns a list of either (a) all - currently-loaded providers, or (b) all available providers. - - * camel-url.[ch]: Add an "empty" flag to CamelURL (indicating that - it contains only a protocol). - - * camel-service.c (camel_service_query_auth_types): Make this take - a CamelException (since it may have to try to connect to the - server, and it might not able to.) - - * providers/pop3/camel-pop3-store.c: add KPOP (Kerberized POP) - support. This is mostly so I have two kinds of authmech to play - with instead of just one. (But it does actually work.) - - * providers/smtp/camel-smtp-transport.c (query_auth_types): update - for prototype change, but disable the functionality, since it - doesn't really support any auth types yet. - (camel_smtp_transport_get_type): add an object init function to - set the service url_flags. - -2000-05-04 NotZed - - * providers/mbox/camel-mbox-summary.c: Yes, and anotherone. - - * camel-mime-utils.c: And another one. - - * camel-mime-part.c: And another one. - - * camel-mime-part-utils.c: And another one. - - * camel-folder-search.c: And another one. - - * camel-mime-parser.c: Reverted a change wihtout a ChangeLog entry. - -2000-05-04 NotZed - - * camel-folder-summary.[hc]: Yes, CamelFolderSummary is back ... - ... re-usable class to summarise and index any stream or message - and to manage/load/save the created summaries. - - * camel-folder.c: Include string.h to kill a warning. - -2000-05-03 Jason Leach - - * Makefile.am (INCLUDES): add $(UNICODE_CFLAGS) to the INCLUDES, - people who installed libunicde in non-standard include paths need - this. - -2000-05-03 NotZed - - * camel-folder.h: Added pos/bodypos/endpos to the basic message - content info object. Size to be removed? Moved the - messageconentinfo and messageinfo back to camel-folder-summary.h. - - * camel-mime-filter-index.c (camel_mime_filter_index_set_ibex): - New function to (re)set the index to use on a filter. - - * camel-mime-parser.c (camel_mime_parser_scan_from): Whole bunch - of inline docs. - (camel_mime_parser_drop_step): New function to drop a state from - the parser. Needs more testing. - - * camel-mime-utils.c (rfc2047_decode_word): If the iconv handle is - -1, then dont try and convert (crashes unicode_iconv?). - (rfc2047_decode_word): Use alloca for variables instead of - g_malloc - by the rfc they should always be short. - (rfc2047_decode_word): If we can't do the charset conversion, undo - the quoted-printable/base64 at least? Should probably convert - unknown characters to the utf-8 unknown character. - -2000-05-02 Larry Ewing - - * camel-mime-utils.c (header_decode_date): fix typo when - dereferencing saveoffset. - -2000-05-02 NotZed - - * camel-folder-search.c: Added some header doco. - - * camel.h: REmove gmime-utils.h from here. - - * providers/mbox/camel-mbox-search.[ch]: Removed. Functionally - redundant. - - * providers/mbox/camel-mbox-folder.c (mbox_search_by_expression): - Use the new CamelFolderSearch class to do the actual searching, - just setup the search here. - - * camel-folder-search.[ch]: A helper class that providers may - subclass to provide their own search functionality, or they can - simply use as is, it supports body searches if an ibex is - supplied, and header searches if a summary is supplied. - -2000-05-02 Matt Loper - - * Makefile.am: set G_LOG_DOMAIN. - * providers/MH/Makefile.am: same. - * providers/maildir/Makefile.am: same. - * providers/mbox/Makefile.am: same. - * providers/nntp/Makefile.am: same. - * providers/pop3/Makefile.am: same. - * providers/sendmail/Makefile.am: same. - * providers/smtp/Makefile.am: same. - -2000-05-02 NotZed - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_by_expression): Dont store/remove - current search from the search list. - - * providers/mbox/camel-mbox-folder.h: Removed searches list, - searches are all sync now. - - * gmime-utils.[ch]: What the hell, remove it. This will break the - nntp provider. The mime parser can be used instead though. - Removed from all code including it (but none were using it). - - * gmime-utils.c (_store_header_pair_from_string): Removed bizarre - string_dichotomy version of this. This code is somewhat redundant - now, and is headed for death anyway. - - * gstring-util.c (g_string_dichotomy): Same with this one. - (g_string_clone): Removed a memory leak, g_string_new() allocates - its own memory. - (g_string_append_g_string): Allow to append an empty gstring onto - another gstring, dont abort()! - - * string-utils.c (string_dichotomy): Removed this incredibly weird - function. - - * camel-folder.c (_create): Replaced the rather obtuse use of - "string_dichotomy" function with a simple strrchr(). Still not - sure it'll work. - - * camel-folder-summary.c: cvs removed a long-removed file. - - * camel-mime-parser.c (folder_scan_header): Fix the previous - overflow problem properly (can happen in 2 places). - (header_append): A new macro to include the code changed above, so - it only appears in one place. - (folder_scan_step): Change the content type to text/plain if the - multipart is broken. Doesn't actually change the header though. - (header_append): Also move the header-start tracking stuff here. - Could be a static function to save code. - -2000-05-02 - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): Dont use autofill on - these fucking long function anmes!!!!!! - -2000-05-02 NotZed - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_expunge): Fix the offset for the summary when - an item is expunged to take account of the From line. - -2000-05-01 NotZed - - * providers/mbox/camel-mbox-folder.h (CamelMboxFolder): Removed - search_id. - - * providers/mbox/camel-mbox-search.c - (camel_mbox_folder_search_cancel): Remove.d - (camel_mbox_folder_search_complete): Removed. - (camel_mbox_folder_search_by_expression): Changed back to sync - api. - (struct _searchcontext): Removed cancelled flag. - (find_context): Removed. - (func_header_contains): Debug out some search stuff. - - * providers/mbox/camel-mbox-search.h - (camel_mbox_folder_search_by_expression): Moved back to sync api. - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_set_flags_by_uid): New function to update the - flags in the summary. - (camel_mbox_summary_expunge): Expunge messages from a folder. - (offset_content): Re-align offsets of summary when messages - added/removed to an existing summary. - (camel_mbox_summary_remove_uid): Remove a message summary entry by - uid. - (index_folder): Restore flags from X-Evolution header, if they are set. - (index_folder): Make sure we index using a decimal uid, since - thats what everything else indexes off (oops). - Upped SUMMARY_VERSION as a result. - (camel_mbox_summary_expunge): Oops, my wrong, use the string uid - to unindex on. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): - Connect to the message_changed signal. - (_init): Set permanent flags to something reasonable. No user - flags yet ... - (message_changed): If the flags of the message change, update the - flags in the summary. - (mbox_expunge): Implement the expunge. - (camel_mbox_folder_class_init): Renamed all leading _'s to mbox_'s - (mbox_expunge): Emit a folder_changed signal on expunge (uh, even - if it didn't ...) - - * camel-folder.c (_finalize): Uh, dont free permanent_flags - anymore (this wouldn't failed anyway, it was a GList !!!) - (camel_folder_search_complete): Removed. - (camel_folder_search_cancel): Removed. - (camel_folder_expunge): Changed to only allow expunge on an open - folder. It doesn't make sense for mbox, otherwise (?) - (camel_folder_class_init): Added a folder_changed signal. - - * camel-folder.h (struct _CamelFolder): Change permanent_flags to - a bitfield. - (list_permanent_flags): Renamed to get_permanent_flags, and - returns a bitfield. - (camel_folder_expunge): Changed expunge to a void type. The - messages would no longer be useful after they have been removed - ... - (CamelFolderClass): New function summary_get_by_uid() to get a single - summary. - (*search*): Moved back to synchronous search api ... *sigh* - - * camel-folder.h: Removed CamelSearchFunc. - - * camel-mime-message.c (set_flag): Removed. - (camel_mime_message_set_flag): Removed. - (get_flag): Removed. - (camel_mime_message_get_flag): Removed. - (add_flag_to_list): Removed. - (get_flag_list): Removed. - (camel_mime_message_get_flag_list): Removed. - (camel_mime_message_get_flags): New interface to get system flags. - (camel_mime_message_set_flags): " to set ". - (camel_mime_message_get_user_flag): To get a user flag. - (camel_mime_message_set_user_flag): To set a user flag. - (finalize): Hmm, the old one free'd the key and data, not good - when the data is a boolean ... - -2000-04-30 Dan Winship - - * camel-provider.h: Tweak the definition of CamelProvider. Among - other things, a provider may now be both a store and a transport. - - * camel-provider.c: Remove a lot of code we had no intention of - using. This now only contains two functions: camel_provider_init - to read the installed .urls files, and camel_provider_load to - load and register a new provider. - - * camel-session.c: Remove more unused code and simplify some of - the remaining code. The list of available provider modules is now - stored in the session, and it handles calling camel_provider_load - to load them as needed. Provider registration is now done by - calling back from the module init routine, which allows a single - module to register providers for multiple URL types. - - * providers/*: Update provider structures and init routines for - the new stuff. Add a .urls file to each provider specifying what - urls it handles, and install that with the library. - - * providers/nntp/camel-nntp-provider.c: Add hints towards - supporting both news: and nntp: URLs, and using nntp as both a - store and a transport. - -2000-04-29 Dan Winship - - * camel-internet-address.c (camel_internet_address_get): const - poison - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): - camel_mime_parser_tell() returns an offset from where it started - parsing, not necessarily from the start of data. Since we're - parsing a bounded seekable_stream, we need to add the stream's - starting bound to camel_mime_parser_tell's return value to - create the substream in the right place. - - * camel-seekable-substream.c - (camel_seekable_substream_new_with_seekable_stream_and_bounds): - say CAMEL_STREAM_UNBOUND rather than -1 in doc. - - * camel-seekable-stream.c (camel_seekable_stream_seek): Add more - info to docs. - -2000-04-28 Dan Winship - - * camel-mime-parser.c (folder_scan_header): fix a bug that would - cause corruption with very long headers. - -2000-04-27 Ettore Perazzoli - - * providers/pop3/Makefile.am (INCLUDES): Add `-I$(srcdir)/../../..' - to pick the Camel includes. - * providers/sendmail/Makefile.am (INCLUDES): Likewise. - - * camel.h: Don't #include anymore. - -2000-04-27 NotZed - - * camel-mime-utils.c (check_header): Dont try and check a NULL - header. - - * camel-recipient.[ch]: Dead. Its not pining. - - * camel-mime-message.h: Dont include recipients.h anymore. - - * camel-mime-message.c (camel_mime_message_add_recipient): Accept - name/address separately, and store in an CamelInternetAddress. - (add_recipient): Removed. - (remove_recipient): Removed. - (remove_recipient_address): Renamed from remove_receipient, works - via address. - (camel_mime_message_remove_recipient_name): New function to remove - by name. - (get_recipients): Removed. - (camel_mime_message_get_recipients): Return a camel-internet-address. - (write_to_stream): No longer write receipients directly. - (write_recipients_to_stream): Removed. - (write_one_recipient_to_stream): Removed. - (camel_mime_message_init): Setup recipients hashtable, rather than - usign the recipients stuff. - (set_recipient_list_from_string): Killed, a violent and lengthy - death. - (process_header): Simplified recipient handling code a lot. - (received_date_str, sent_date_str, reply_to_str, subject_str, - from_str): Removed some oddly-defined global statics. - (camel_mime_message_class_init): Dont initialise above variables - anymore. - (init_header_name_table): Removed, use a table to init this, and - do it in class init (2 lines of code ...). - - * camel-news-address.c: Class to represent news addresses - - currently empty, and not built. - - * camel-internet-address.h: Class to represent internet (email) - addresses. - - * camel-address.h: Abstract class to represent (lists of) - addresses. - -2000-04-27 Dan Winship - - * camel-mime-part.c (write_to_stream): Revert previous change. I - was confused. - - * camel-url.[ch] (camel_url_encode, camel_url_decode): expose - these routines. - -2000-04-26 Dan Winship - - * camel-mime-part.c (write_to_stream): Only write a newline - between the headers and the content object if the content object - is not a CamelMedium. (If the content is a medium, it may have its - own headers, which then need to go before the blank line.) - - * camel-mime-body-part.[ch]: Remove. We weren't using the fields - that made this different from camel-mime-part, so it basically - just forced us to do lots of gratuitous typecasting. - - * camel-multipart.[ch]: Use CamelMimePart. Remove the multipart - parent stuff, since we weren't using that either. - - * etc: update for CamelMimeBodyPart -> CamelMimePart - -2000-04-26 Dan Winship - - * camel-medium.c (set_content_object): sink the content object - after referencing it. - - * camel-mime-part.c: fix various little things in the handling - of CamelMedium methods. Change camel_mime_part_set_text to the - more generic camel_mime_part_set_content. - - * camel.h: sync to current reality - - * camel-folder-utils.[ch]: removed - - * camel-mime-utils.c (header_format_date): fix format specifier - for time zone. Fix typo in month names array. - -2000-04-26 NotZed - - * camel-seekable-substream.c (stream_seek): Changed to have - absolute seek semantics, not relative to the bounds. - - * camel-seekable-stream.c (reset): When we reset, seek to the - start of the bound, if there is one. - (stream_tell): Make tell virtual. - - * camel-stream-filter.c (do_available): Removed. - - * camel-stream-buffer.c: Remove leading _'s from static functions. - (stream_read): Renamed from read(). Fancy that conflicting! (my - boo!) Others too. - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): - Changed to stream_mem interface. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Fixed - for streamfs interface changes, and implement a failure case. - (_append_message): Changed for fs stream interface change. - - * camel-multipart.c (print_part): Iterate rahter than callback. I - hate glists's interface (hence, move this to write_to_stream). - (write_to_stream): Return an error (yuck, this is a royal PITA to - do with the stream write interface). - - * camel-mime-message.c: Removed leading _ from static names. - - * camel-mime-part.h: construct_from_parser() now returns an error - code. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Changed to use a - camel-data-wrapper instead of a camel-simple-data-wrapper (no - change needed elsewhere?). - (simple_data_wrapper_construct_from_parser): Fixes for stream-mem - interface changes. - - * camel-simple-data-wrapper.[ch], - camel-simple-data-wrapper-stream.[ch], - camel-stream-data-wrapper.[ch], removed. Fixed including of these - files. - - * camel-mime-part.c (camel_mime_part_set_text): Remove the use of - the camel-simple-data-wrapper-stream, just use a mem stream. - (write_to_stream): Renamed from my_* - (construct_from_stream): Return an error on error. - - * camel-stream-mem.c (camel_stream_mem_new*): Remove mode - parameter. - - * camel-stream-mem.h (enum CamelStreamMemMode): Removed. It - wasn't used at all. - - * camel-data-wrapper.h: Add camel_data_wrapper_new() to create - these. - (write_to_stream, construct_from_stream): Return an error - indicator for success. Fixed all methods to match (ICK). - - * Makefile.am (libcamel_la_SOURCES): Remove - camel-simple-data-wrapper.c, camel-simple-data-wrapper-stream.c, - camel-stream-data-wrapper.c. Obsoleted by code re-use! - - * camel-data-wrapper.c (construct_from_stream): Change the default - implementation to just set the output stream == construction - stream. Well, this lets me get rid of both simple-data-wrapper - and stream-data-wrapper (unused anyway), and - simple-data-wrapper-stream in one hit. CamelDataWrapper is now - also a concrete class. - (write_to_stream): Use camel_stream_write_to_stream() to - calculate/return values (and save code). - Include for obvious reasons. - - * camel-stream.c (eos): Provide a default implementation of .eos(). - (camel_stream_write_to_stream): Make it return an error code on - error. - (camel_stream_printf): Changed to return the number of bytes - written/error. - (camel_stream_available): Removed. - - * camel-stream-fs.h (enum CamelStreamFsMode): Removed. Changed to - use unix modes and so forth (wasn't used for anything but new file - creation and didn't work well either). - - * camel-stream-fs.c: Removed leading _'s for names. And removed - some virtual method 'documentation'. - (destroy): Dont try and close a closed/error fd. Only report - error if close returns -1. Moved all the code to finalise(), and - killed this function. - (init_with_fd): Properly setup the seek offset, if it is a - valid and seekable file descriptor. - (init_with_fd_and_bounds): Use off_t for bounds, set bounds on the - seekable stream. - (init_with_name): Return error codes. - (init_with_name_and_bounds): Ditto. - (camel_stream_fs_new_with_name): REturn NULL object if it failed. - (camel_stream_fs_new_with_name_and_bounds): Return NULL object on - failure. Changed with_name* api's to take unix open style args - and flags. - (read): The bounded stream bounds checking seemed off, simplified - code a bit. - (write): Implement bounds checking for writing, the comment was - wrong, it could make sense to bound writing. Cleaned up a little. - (available): Gone. - (eos): Removed. Use CamelStream's implementation now. - (close): Reset the fd to -1, provide a warning for bad usage. - (seek): Cleaned up. Changed the behaviour a little, the returned - offset is the absolute position in the file, even in bounded - streams. - (seek): Seek from end mirrors lseek() behaviour (reverse seeking). - -2000-04-25 NotZed - - * camel-stream-fs.h (struct _CamelStreamFs): Moved bounds and eof - indicator to other parent classes. - - * camel-stream.c (camel_stream_printf): New utility - function. Obvious use. - - * camel-stream-mem.c: Removed leading _'s from static func's. - (camel_stream_mem_new_with_byte_array): Fixed for api changes, set - the owner for the byte array to us. - : Removed A bunch of gtk doc stuff for static (implementation) functions. - (available): Removed. - (write): Fixed the write implementation so that seek() works on a - seekable memory stream, as expected. Seeking past the end of the - buffer has unix semantics (filling with 0). - (available): Removed. - (write): Implement seekable stream bounded stream. - (read): Implement seekable stream bounded stream. - (close): Dont free the stream_mem if we're not the owner. - (seek): Allow to seek beyond the end of memory area, - implement bounds checking. - (seek): Set errno on bad policy. - - * camel-stream-mem.h (struct _CamelStreamMem): Changed position to off_t. - (new_with_buffer): Changed len to be a size_t. - (set_buffer, set_byte_array): New interface functions. - (struct _CamelStreamMem): Removed position, it is stored in the - superclass. - - * camel-stream.h: Removed some of the seemingly random - whitespace. Removed the available method (its not - impelemented/useful enough). - - * camel-seekable-substream.c - (init_with_seekable_stream_and_bounds): Remove the data_available - stuff, it hasn't been properly implemented/finished, and may never - work (unfortunately *sigh). - (reemit_parent_signal): Removed part of the above change. - (set_bounds): Removed (moved to seekable-stream). - : Fixed up some of the generally unreadable indenting (sorry, - wrapping at 80 characters with - camels_really_long_function_names() - just_doesnt_work_very_well_does_it(). - (available): Removed. - (stream_seek): Fixup for object changes. Make sure we return -1 - if the parent stream can't seek. - - * camel-seekable-stream.c (ccamel_seekable_stream_set_bounds): New - function to bound any seekable stream. - : Removed _'s. - (camel_seekable_stream_class_init): Implement an init function, to - setup the stream bounds to unbound. - - * camel-seekable-stream.h (CamelSeekableStreamClass): New virtual - method set_bounds for seekable streams. - (CAMEL_STREAM_UNBOUND): New define for no bound. - - * camel-seekable-substream.h (struct _CamelSeekableSubstream): - Removed sup_bound and inf_bound, moved to CamelSeekableStream (and - renamed, and changed to off_t's). - (new_with_seekable_stream_and_bounds): Use off_t as the bounds. - (CamelSeekableSubstreamClass): Uh, why was the intialiser virtual? - Removed. - - * camel-seekable-stream.[ch] (CamelSeekableStreamClass): Changed seek - to accept an off_t as the offset. - (struct _CamelSeekableStream): Renamed cur_pos to position and - changed it to an off_t type. - (enum CamelStreamSeekPolicy): Set to match the SEEK_* constants - from lseek(). - (get_current_position): Renamed to tell(). - - * camel-stream-buffer.h: Commented out set_vbuf - never implemented. - -2000-04-25 Dan Winship - - * camel-stream-buffer.c (_eos): only return TRUE if the parent is - at eos AND the buffer has been exhausted - - * camel-mime-message.c: fix some incorrect macro usage that - resulted in bogus casts - -2000-04-24 Dan Winship - - * camel-mime-part-utils.c - (simple_data_wrapper_construct_from_parser): fix a cut-and-pasto. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): ref - (and sink) the message stream if we're going to unref it later. - Otherwise it could get destroyed while there are still substreams - attached to it. This needs a cleaner solution. - - * camel.h: remove data-wrapper-repository.h include(s) - -2000-04-24 NotZed - - * camel-mime-message.c (construct_from_parser): Allow MESSAGE_END - _or_ EOF as valid termination conditions. - - * providers/mbox/camel-mbox-summary.c (message_struct_new): Decode - and then re-encode the addresses, so they are consistently - formatted. - - * camel-mime-utils.c (header_decode_mailbox): Store the address in - a _header_address. And try to get a comment-stored name if there - is one. - (header_decode_address): Actually return an address. - (header_to_decode): Renamed to header_address_decode() - (header_mailbox_decode): New function to get a single mailbox. - (header_mime_decode): Return the major/minor value, as - appropriate. - (header_address_new, and friends): Whole bunch of utility - functions for working with the address thingies. - (header_decode_domain): Free the string header, and dont expand - '.' into ' . '. - - * camel.c (camel_init): No longer call - data_wrapper_repository_init. - - * camel-medium.c (write_to_stream): Moved (back) to - camel-mime-part. - (add_header): - (set_header): - (remove_header): - (get_header): Make all these abstract, and spit warnings if - called. I guess it could manage the list, but well, it doesn't. - - * camel-medium.h (struct _CamelMedium): Dont store headers here, - the implementor is the only one who knows their format. - (CamelMediumClass): Changed header values to be void *'s. They - need not be strings? - - * camel-simple-data-wrapper.c (construct_from_stream): And we're - back. Set the output stream. - (construct_from_parser): Moved to camel-mime-part-utils. - - * camel-mime-part-utils.c - (camel_mime_part_construct_content_from_parser): Create the - contents of multipart and simple messages. - (camel_mime_part_construct_content_from_parser): Oops, this was - totally screwed up, try creating the right cotnent on the right - object. - - * camel-multipart.c (construct_from_parser): Moved to - camel-mime-part-utils. - (separate_part): Removed. - - * camel-mime-part.c (construct_from_stream): Back again! This now - switches over to using a mime parser for any mime parts, only. - (my_write_to_stream): Write our headers and so forth here. - (add_header): Add header directly, parent class is abstract. - (remove_header): Ditto. - (set_header): Ditto. - - * camel-data-wrapper.c (camel_data_wrapper_construct_from_stream): - Remade abstract. - (camel_data_wrapper_construct_from_parser): Moved to - camel_mime_part. - - * camel-data-wrapper.h: Put back construct_from_stream. - - * camel-mime-part.h: Put construct_from_parser in here, the - data-wrapper shouldn't know about mime. Ok, so now to undo half - of the last hours changes ... duh. - -2000-04-23 Dan Winship - - * camel-mime-utils.c (header_to_decode, header_mime_decode): fix - some obvious minor bugs noted by -Wall. - -2000-04-23 NotZed - - * providers/pop3/camel-pop3-folder.c (get_message_by_number): Use - construct_from_stream instead of set_input_stream(). - - * camel-simple-data-wrapper-stream.c - (camel_simple_data_wrapper_stream_construct): REmoved the destroy - callback code. - (wrapper_destroy_cb): Removed. - - * camel-simple-data-wrapper.h: Add prototype for _construct() - method. - - * camel.c: Include unicode.h to kill a warning. - - * camel-data-wrapper.h (CameldataWrapperClass): Removed - construct_from_stream virtual method. - Removed get/set input stream. - - * data-wrapper-repository.[ch]: Removed&from build. Obsoleted? - The justification as is follows: It is mixing storage - protocol/format with message architecture. It really just doesn't - serve any purpose, as each medium implementor will have to have its - own type->handler mapping, and the only current implementor, - mimepart has a very simple structure and no need for this. - - * camel-medium.c (write_to_stream): Moved here from most of the - stuff in camel-mime-part. Well, the MEDIUM is the one that knows - what the headers are, and the content is, let it write it out. - - * camel-mime-part-utils.c (camel_mime_part_construct_content): - Copied from camel-mime-part.c, removed handling of message - followon state (moved to camel-mime-message). - (camel_mime_part_construct_content_from_parser): Renamed from - construct_content. - (camel_mime_part_construct_headers_from_stream): - (camel_mime_part_construct_content_from_stream): - (camel_mime_part_store_stream_in_buffer): Removed. Replaced by - the new construct from parser stuff. - - * camel-mime-message.c (construct_from_parser): Do - construct_from_parser for mime-message. - (_write_to_stream): Set the mime-version header for medium to - write out, rather than writing it out ourselves. - - * camel-data-wrapper.c (set_mime_type_field): Ref the - content_field when we get it? - (construct_from_stream): Removed. - (camel_data_wrapper_construct_from_stream): Changed to a helper - function, creates a mime_parser, and constructs from that. - (set_input_stream): Removed. - (camel_data_wrapper_set_input_stream): Removed. - (get_input_stream): Removed. - (camel_data_wrapper_get_input_stream): Removed. - - * camel-mime-parser.c (camel_mime_parser_unstep): New function. - Cause a subsequent call to mime_parser_step() to return the same - state over again. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): - Initial test code using the mime parser to construct the message. - (_get_message_by_uid): Use construct_from_stream() instead of - creating our own parser. - - * camel-mime-part.c (construct_from_parser): part constructor. - (camel_mime_part_construct_content): Basically a simpler - replacement for the datawrapper repository. - (camel_mime_part_init): Set the default type to text/plain. - (camel_mime_part_construct_content): Removed to - camel-mime-part-utils.c - (my_get_output_stream): Removed. The streeam is in the - data-wrapper. - (my_get_content_object): Removed. The content object is stored in - the medium. If none is there, the object wasn't created properly. - (my_write_content_to_stream): Removed. The content object is the - one that knows how to write itself out!!!!!!!! - (my_write_to_stream): Remove the base header writing stuff - has - been moved to camel-medium, where it belongs. This can just be - used to check for mandatory headers. - (my_construct_from_stream): Removed. - (my_set_input_stream): What the hell, i'll remove this too. - Nobody seems to understand how it differs from create from stream, - and they both seem to serve the same purpose ... - - * camel-simple-data-wrapper.c (construct_from_parser): Initial - implementation of a content constructor. - (construct_from_stream): Removed! Job taken over by - construct_from_parser. - - * camel-multipart.c (construct_from_parser): Multipart - construction routine. - (camel_multipart_init): Set the default multipart type to - multipart/mixed. Duh, no subtype is not allowed anyway. - (set_input_stream): REmoved. Replaced by construct_from_parser. - -2000-04-22 Dan Winship - - * camel-multipart.[ch]: clean, document, etc. - (camel_multipart_init): pick a prettier default boundary. Still - need to deal with the larger problem - -2000-04-22 NotZed - - * camel-mime-message.h (struct _CamelMimeMessage): Removed - send_date, and received_date, and replaced it with a time_t - 'date' (this is what the header is called), and date_offset to - store the GMT offset of the date. - - * camel-mime-message.c (camel_mime_message_set_from): Update raw - header as we go. - (_set_from): Removed. - (_get_from): Removed. - (camel_mime_message_get_from): Moved implementation here. - (camel_mime_message_get_subject): Move implementation here. - (_get_subject): Nuked. - (camel_mime_message_set_subject): Handle utf-8 input, and also - update raw header when changed. - (_set_subject): Removed. - (_set_received_date): Removed. - (camel_mime_message_set_received_date): Removed. - (_get_received_date): Removed. - (camel_mime_message_get_received_date): Removed. - (_get_sent_date): Removed. - (camel_mime_message_get_sent_date): Removed. - (camel_mime_message_get_date): New function to get the date as a - time_t/offset. - (camel_mime_message_set_date): Set the date as a time_t/offset. - (camel_mime_message_get_date_string): Get the date as a string. - (camel_mime_message_init): Initialise the current date as - 'CMAEL_MESSAGE_DATE_CURRENT'. - (_set_reply_to): Removed. - (camel_mime_message_set_reply_to): Moved implementation here. - This is still broken, reply-to can have multiple addresses. - (_get_reply_to): Removed. - (_set_field): Removed, no longer used anywhere. - (_get_field): Also removed. - (_init_header_name_table): Add the Date header. - (process_header): Also handle snooping of Date header here. - - * camel-stream-filter.c (finalise): Unref the source stream on - finalise, and also call the parent class (oops). - - * camel-mime-parser.c (camel_mime_parser_state): New function to - get the current parser state. - (camel_mime_parser_stream): Allow you to get the stream back from - the mime_parser. - (camel_mime_parser_fd): Alternative to allow you to get the fd - back from the mime_parser. - (folder_scan_init_with_stream): Properly ref/unref the stream. - (folder_scan_close): Properly unref the stream/close the fd on - exit. - (folder_scan_init_with_fd): Close the old fd if there is one. - - * camel-data-wrapper.c (camel_data_wrapper_construct_from_parser): - New method, construct a data wrapper from an initialised parser. - (construct_from_parser): Empty implementation. - - * providers/mbox/camel-mbox-summary.c (message_struct_new): - Convert subject line to unicode, before storing in the summary. - (strdup_trim): Removed, no longer needed. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_uid): Ref - the folder after setting it in the new message. - - * camel-mime-part.c (my_set_content_object): Have the headers - follow the content-type change here too. - (my_write_to_stream): Dont write content-type here, automatically - stored in the headers ... - (my_write_to_stream): Use header_disposition_format() to format - the content-disposition header. - (my_write_to_stream): Removed old code, all headers are now stored - in the camel-medium level, always. Need to do the same with - camel-mime-message i suppose ... - (my_write_to_stream): Write the content using the parent class, - not some weird function. - (camel_mime_part_class_init): Dont override get_output_stream. - (camel_mime_part_encoding_from_string): Bleh, make it - case-insensitive. - - * camel-mime-utils.c (header_content_type_is): Handle empty types. - (header_encode_string): Start of an implementation of the rfc2047 - encoder. It does iso-8859-1, and us-ascii, and utf-8 (others get - tricky *sigh*) - (rfc2047_encode_word): Convert a single word/string into rfc2047 - encoding. - (quoted_encode): Different quoted-printable encoding for rfc2047 - encoding of headers. - - * gmime-content-field.c (gmime_content_field_write_to_stream): Use - header_content_type_format() to format it. - -2000-04-21 NotZed - - * camel-mime-utils.h: Add prototype for header_param_list_free. - - * camel-recipient.c: New function to remove all the types of a - recipient list. I think this whole object needs a major review. - - * camel-mime-message.c (camel_mime_message_class_init): Removed - parse_header_pair override, override add_header instead. - (_parse_header_pair): Renamed to add_header. - (remove_header): Add this method, to make sure we keep upto date - with removed headers too. - (_set_field): If given a NULL value, clear it out. - (_set_recipient_list_from_string): Constify. - (set_header): Override set_header from camel_medium. - (process_header): Local function to handle set/add/remove of each - header we know about. - - * camel-mime-part.c (camel_mime_part_class_init): Removed - parse_header_pair setup. - (my_parse_header_pair): Moved into add_header(), removed. - (my_set_disposition): Allow a NULL disposition to clear it. - (my_set_content_id): Allow NULL content id to clear it. - (remove_header): Track removed headers. - (my_set_description): Allow NULL description to clear it. - (my_set_content_MD5): Make sure we copy the md5 value, and allow a - NULL value to reset it. - (my_set_filename): Copy the filename. - (my_set_header_lines): Removed. Nothing uses it, it doesn't - actually serve any purpose. - (camel_mime_part_set_header_lines): Ditto. - (my_get_header_lines): Ditto. - (camel_mime_part_get_header_lines): Ditto. - (camel_mime_part_class_init): Remove *_header_lines setup. - (camel_mime_part_init): Remove header_lines init. - (my_finalize): Remove header_lines finalise. - (my_write_to_stream): Write the headers here. This is just WRONG, - camel_medium should be doing this. - (my_get_output_stream): Kill a warning. - (camel_mime_part_encoding_to_string): Ditto. - (camel_mime_part_set_description): Unvirtualiase, use add_header() - to do the processing. - (my_set_description): Removed. - (set_disposition): Renamed from my_set_disposition. - (camel_mime_part_get_description): Get the descriptionf rom the - get_header method. - (my_get_description): Removed. - (my_set_filename): Removed. - (camel_mime_part_get_filename): Get the parameter from the - disposition. - (camel_mime_part_encoding_from_string): Handle NULL string. - (camel_mime_part_init): Remove reference to filename. - (my_finalize): Dont free filename. - - * camel-mime-part.h (CamelMimePartClass): Removed - parse_header_pair() method, it doesn't add anything that - add_header() can't be used for. - (CamelMimePartClass): Remove *_header_lines methods. - (struct _CamelMimePart): Remove header_lines list. - (struct _CamelMimePart): Removed filename attribute. - - * camel-medium.c (camel_medium_init): Init headers to null, not a - hashtable. - (add_header): Append the headers as a list. - (remove_header): Remove headers as a list. - (get_header): Likewise for lookup. - (free_header): Removed, no longer needed. - (finalize): Free headers using header_raw_clear(). - (camel_medium_set_header): New function, to reset and override all - values of a header with a new value. - - * camel-medium.h (struct _CamelMedium): Changed to use a - header_raw struct rather than a hash table, to store headers - (many headers can occur multiple times). - - * camel-mime-utils.c (header_raw_find_next): New function, allows - you to find multi-valued header fields. - (header_disposition_format): New function to format/create - content-disposition header string. - (header_param_list_format_append): Function to format parameter - lists into a GString. - (header_content_type_format): Function to format content-type into - a usable format. - (header_set_param): allow NULL value to remove the parameter. - (decode_token): Renamed from header_decode_token. - (header_decode_token): New interface for external use. - (quoted_decode): Made static to kill annoying warnings. - (g_strdup_len): Killed, replaced with calls to g_strndup(). - (rfc2047_decode_word): Made static to kill warnings. - (decode_coded_string): Terminated. - (g_string_append_len): Made static to kill warnings. - (header_decode_text): Made static to kill warnings. - (header_decode_text): Constify. - (rfc2047_decode_word): Constify. - (header_param): Constify. - (header_content_type_new): Copy the type/subtype strings. - (header_param_list_decode): Made static. - (header_param_list_format_append): Made static. - (quoted_decode): Constify. - (g_string_append_len): Constify. - (header_token_decode): New function to decode a single token. - - * providers/mbox/camel-mbox-summary.c (header_write): Append a - trailing \n when writing headers. - (strdup_trim): Killed a warning. - (camel_mbox_summary_set_uid): Make sure the next uid is at least 1 - higher than any existing one. - (header_evolution_decode): Use header_token_decode to get the - token. - - * camel-mime-parser.c (folder_scan_header): Strip the trailing \n - of the end of all header lines. - -2000-04-20 NotZed - - * providers/mbox/camel-mbox-utils.[ch]: Removed. - - * providers/mbox/camel-mbox-parser.[ch]: Removed. Removed - references to it. - -2000-04-20 Dan Winship - - * camel-mime-utils.c (rfc2047_decode_word): use libunicode iconv - functions rather than libc ones (since libc might not have them). - (header_decode_date): add autoconfiscation on timezone code - - * camel.c (camel_init): call unicode_init () - -2000-04-20 NotZed - - * providers/mbox/camel-mbox-summary.c (message_struct_new): Trim - leading/trailing spaces off the raw headers. - - * MERGE NEW_PARSER branch into HEAD, fixed conflicts. - - * gmime-content-field.c (_print_parameter): Duh, removed again - (@@#$@ cvs merge). - - * camel-mime-utils.c (header_content_type_is): Constify. - (header_content_type_unref): Killed a couple warnings. - - * camel-folder.c (_init): Removed more log crap. - - * providers/Makefile.am (SUBDIRS): Removed nntp, pending fixes for - summary changes. - - * providers/mbox/camel-mbox-folder.c (_get_message_by_number): - Fixed for new summary interface. Added a warning for using this - broken api. - (_get_message_by_uid): Fixed for message new with session - vanishing. - -2000-04-19 Dan Winship - - * camel-simple-data-wrapper-stream.c - (camel_simple_data_wrapper_stream_get_type): This is a subtype of - CamelSeekableStream, not CamelStream. - - * camel-seekable-substream.c: clean up a lot. - (eos): When testing for end-of-stream, reset the parent position - before testing if it is at end-of-stream, since either (a) it may - have been seek'ed to eos by someone else, or (b) we may have been - seek'ed away from eos and it hasn't been synced yet. - - * camel-medium.[ch] (camel_medium_add_header): const poison. - (Belatedly goes with my change of 2000-02-23.) - (camel_medium_init): Use g_strcase_{hash,equal} on the header - array. - -2000-04-18 Dan Winship - - * camel-mime-part.c (my_set_input_stream): - * camel-data-wrapper.c (set_input_stream, set_output_stream): do - better reference counting of streams so they actually go away - when they should. - - * camel-log.[ch], *: Nuke camel log stuff. Replace calls to - CAMEL_LOG_WARNING with calls to g_warning. - - * camel-data-wrapper.[ch]: - * camel-simple-data-wrapper.[ch]: - * camel-medium.[ch]: Clean, polish, document. Most of the gtk-doc - comments added to camel-data-wrapper.c note serious problems that - need to be fixed. - -2000-04-17 Dan Winship - - * camel-mime-message.[ch]: Remove the "session" field from - CamelMimeMessage. Nothing uses it, about half of the existing - calls to camel_mime_message_new_with_session pass NULL, and - there's no obvious reason for it to be there. - - * providers/MH/camel-mh-folder.c: - * providers/maildir/camel-maildir-folder.c: - * providers/mbox/camel-mbox-folder.c: - * providers/mbox/camel-mbox-utils.c: - * providers/nntp/camel-nntp-folder.c: - * providers/pop3/camel-pop3-folder.c: Use camel_mime_message_new - instead of camel_mime_message_new_with_session. - - * camel-session.c (get_store_for_protocol_with_url): Set the - exception if no provider is found. - - * camel-url.c: Add code to encode and decode %-escapes in URLs, - and do some additional correctness-checking on URL syntax. From - Tiago Antào with modifications by me. - -2000-04-14 Chris Toshok - - * providers/Makefile.am (SUBDIRS): add nntp - -2000-04-14 Christopher James Lahey - - * providers/mbox/camel-mbox-folder.c: Fix switch statement. - -2000-04-14 Chris Toshok - - * providers/nntp/camel-nntp-folder.c (_exists): always return TRUE - for now. we need to check the server response to make sure the - group exists. - (_get_message_by_uid): make sure to account for the \n we add to - the string after every line. - - * providers/nntp/camel-nntp-utils.c (get_XOVER_headers): function - to get the headers using the XOVER command. - (get_HEAD_headers): function to get the headers using the HEAD - command on each message. slooooooow. - (camel_nntp_get_headers): make this function use either XOVER or HEAD - versions depending on whether or not the server extension is present. - -2000-04-14 Dan Winship - - * camel-formatter.[ch]: This didn't belong in Camel. Move to mail/ - - * Makefile.am, camel-types.h: remove references to - camel-formatter. - -2000-04-12 Matt Loper - - * camel-folder-pt-proxy.c (_folder_open_cb): Print warning message - for broken function. - (_folder_close_cb): Same. - -2000-04-12 Miguel de Icaza - - * Makefile.am (pthread_SRC): Use correct names for the pthread - source variables. - -2000-04-10 Dan Winship - - * providers/pop3/camel-pop3-store.c (pop3_connect): fix various - bugs in APOP code (still untested) and some of the error cases. - - * camel-provider.h: Clarify what provider.protocol, provider.name, - and provider.description should be. - - * providers/mbox/camel-mbox-provider.c: - * providers/pop3/camel-pop3-provider.c: - * providers/sendmail/camel-sendmail-provider.c: - * providers/smtp/camel-smtp-provider.c: update protocols, names, - and descriptions - - * providers/mbox/camel-mbox-folder.c (_get_message_by_number): - implement get_message_by_number for the mail fetch code. - -2000-04-09 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: reformatted to fit - the standard indent format used by helix code - -2000-04-09 Dan Winship - - * camel-movemail.c: New file with new function to dot-lock an mbox - file and copy it to a safe private directory. - -2000-04-08 Christopher James Lahey - - * providers/smtp/.cvsignore: Added a .cvsignore file. - -2000-04-08 Dan Winship - - * providers/sendmail/camel-sendmail-transport.c (_send_internal): - actually record the pid returned by fork(). Noticed by clahey. - - * providers/smtp/camel-smtp-transport.c: #include - for MAXHOSTNAMELEN. (This is a stopgap: some of the uses of - MAXHOSTNAMELEN are wrong anyway...) - -2000-04-07 Jeffrey Stedfast - - * providers/smtp/camel-smtp-transport.c: fixes to numerous bugs; - should now build fine. - * providers/Makefile.am: Readded smtp now that smtp builds without - error. - -2000-04-20 NotZed - - * providers/mbox/camel-mbox-summary.c - (camel_mbox_summary_next_uid): Public function to get the next - uid, makes sure its saved to disk too. - - * camel-mime-part.c (my_finalize): Fix disposition crap with a - real disposition. - (my_set_disposition): Likewise. - (my_get_disposition): And here. - (my_write_to_stream): And here, needs more cleanup. - - * providers/mbox/camel-mbox-folder.c (_append_message): Assign a - new uid at this point. - - * gmime-content-field.c (gmime_content_field_write_to_stream): - Make something up if we have an invalid/missing content type - (i.e. text/plain). - -2000-04-19 NotZed - - * providers/mbox/camel-mbox-folder.c (_delete): Fixed completely - broken switch() syntax, only compiled because errno is a macro on - some systems. - (_list_subfolders): Likewise. - -2000-04-18 NotZed - - * camel-mime-parser.c (folder_scan_init): init stream to null. - - * providers/mbox/camel-mbox-summary.c - (CAMEL_MBOX_SUMMARY_VERSION): Moved to .c file, incremented. - (index_folder): Changed to have index passed via the summary. - (decode_string): Do a sanity check on the string size, so we dont - visit g_malloc()'s friendly abort(). - - * camel-folder-pt-proxy.c (camel_folder_pt_proxy_class_init): - Removed reference to set_name. - (_set_name): Removed. - - * providers/mbox/camel-mbox-utils.c - (parsed_information_to_mbox_summary): Removed. Most of this file - is about to be binned. - - * providers/mbox/camel-mbox-search.c (func_header_contains): Fixes - for changes to summary interface. - (struct _searchcontext): Remove pointer to message info, get it - straight from the mboxsummary. - (camel_mbox_folder_search_by_expression): New summary interface. - (camel_mbox_folder_search_by_expression): Uh, the summary is not - an object anymore (well not yet). - - * providers/mbox/camel-mbox-folder.c - (camel_mbox_folder_class_init): Removed set_name init. - (_set_name): Removed. - (_open): Call new summary interface. - (_close): Use new summary interface. - (_create): Removed a summary object leak. - (_get_message_count): New summary interface. - (_get_uid_list): Use new summary interface. FIXME: this is leaky. - (_get_message_by_uid): Use the new summary interface, some - cleanup. - (_append_message): Totally changed, basically just appends the - message directly, ignores the summary (for now), the summary will - fix itself up if it needs to. - (_check_get_or_maybe_generate_summary_file): Bye bye old code. - (summary_get_message_info): Implement get_message_info again, for - folder. - - * camel-folder.c (camel_folder_class_init): Removed set_name - setup. - (_set_name): Moved contents into _init. - (_init): Perform the old functions of set_name here. - - * camel-folder.h: Removed the set_name internal interface. - -2000-04-14 NotZed - - * providers/mbox/camel-mbox-summary.[ch]: Completely replaced with - new code. - - * Makefile.am (libcamel_la_SOURCES): Removed - camel-folder-summary.[ch]. - - * camel-folder.h (struct _CamelFolder): Removed summary. - (struct _CamelFolder): Changed flags to be 1 bit bitfields. - - * camel-folder-summary.[ch]: Class removed entirely. - - * camel-folder.c (camel_folder_get_summary): Removed. - (camel_folder_summary_get_message_info): Moved from - camel-folder-summary.c - (camel_folder_summary_get_subfolder_info): Moved from - camel-folder-summary.c - - * camel-mime-parser.c (folder_scan_step): Store the start of - headers and start of from in the scan state. - (camel_mime_parser_tell_start_headers): Query the start of the - headers. - (camel_mime_parser_tell_start_from): Query the cached start of - from marker. - -2000-04-13 NotZed - - * gmime-content-field.c (gmime_content_field_free): Removed this - function. If its too dangerous to use, it shouldn't be here. - (gmime_content_field_ref): Also ref the embedded content-type. - (gmime_content_field_unref): Ditto to unref it. - - * camel-mime-utils.h: Add a refcount for content-type header. - - * camel-mime-utils.c (header_content_type_unref): Implement unref - for content-type. - (header_content_type_ref): Implement ref for header content type. - -2000-04-12 NotZed - - * gmime-content-field.h: Changed to use a _header_content_type. - Added type/subtype back for compatability with clients. - - * gmime-content-field.c: Basically a total rewrite, and now just a - thin wrapper ontop of header_content_type. - (_free_parameter): Got rid of it. - (gmime_content_field_new): Use header_content_type_* functions. - (gmime_content_field_set_parameter): Likewise. - (_print_parameter): Blow away. - (gmime_content_field_write_to_stream): Get details from the - content_type field. Should check if it needs to escape chars in - the paramter value. - (gmime_content_field_get_mime_type): Likewise. - (___debug_print_parameter): Get rid of this rather annoyingly - named function. - (gmime_content_field_get_parameter): Simplified function. - (gmime_content_field_construct_from_string): Fixed this to use a - real parser. - (gmime_content_field_is_type): New function to test if a type matches. - (gmime_content_field_construct_from_string): Track type/subtype - from subordinate content_type header struct. - - * gmime-rfc2047.[ch]: Removed. Unused. - - * camel-stream-b64.[ch]: Blown away more duplicated code. - - * Makefile.am: Removed camel-stream-b64.[ch], and - gmime-base64.[ch]. - - * camel-mime-part.c (my_get_content_object): Replaced - camel-stream-b64 with camel-stream-filter/camel-mime-filter-basic. - (my_write_content_to_stream): Replaced camel-stream-b64 with the - camel-stream-filter with an encoder. - (my_get_content_object): Also implement quoted-printable decoding. - (my_write_content_to_stream): Also implement quoted-printable - encoding. - (my_get_output_stream): Took out stream-b64 code (nothing's being - executed yet anyway). - - * gmime-base64.[ch]: Blown away. Not used, dont need it. - - * camel-mime-utils.h: Added offset for this header. Records where - it is in the source. - - * camel-mime-utils.c (header_raw_append_parse): Add offset - parameter, to store where the header is stored in the stream. - (header_raw_append): Added offset param. - (header_raw_find): Return offset, if a pointer supplied for it. - (header_raw_replace): Add offset param. - (header_content_type_new): New function, to create an empty - content type. - (header_content_type_set_param): Set a parameter in the - content-type. - (header_set_param): Generic header parameter setting function. - (header_decode_string): Handle NULL input. - - * camel-mime-parser.c (camel_mime_parser_headers_raw): New - function to get access to all the raw headers. - (folder_scan_header): Keep track of the header start position, and - store it when saving the header. - -2000-04-11 NotZed - - * camel-mime-utils.c: Moved a bunch of printf's to debug. - - * camel-mime-parser.c: Moved a bunch of printf's to debug. - (folder_scan_header): Detect end of each header line using the - last scanned char, and not the last scanned position. - - * camel-mime-filter-index.[ch]: Indexing filter. Indexes unicode - sequences into ibex files. - -2000-04-09 NotZed - - * camel-mime-part.c: Dont include gmime-base64.h - - * camel-mime-filter-charset.c (complete): Implement the completion - function. - - * camel-mime-parser.c (folder_scan_step): If we get to the end of - the body data, check any filters for outstanding completion data. - (camel_mime_parser_scan_from): Set whether we scan for "From " - headers or not. - - * camel-stream-filter.c (do_read): If we get to end of stream on - the source, then call the filtering completion function to see if - we have any more data to return. - - * camel-mime-filter-basic.c (filter): Implement quoted printable - encoding and decoding filters. - (complete): And the complete function as well. - - * camel-mime-utils.c (base64_encode_close): Also take an input - buffer, allow closing of filters. - (quoted_encode_step): First cut, simple quoted-printable encoder. - Doesn't handle trailing spaces/tabs on end of line properly yet. - (quoted_encode_close): Complete a quoted-encoding. - (is_qpsafe): New type check, for quoted-printable safe characters - (that do not need encoding). Thats all bits used in the type - table! Rebuilt the types table. - (header_content_type_is): Checks a content type against at - type/subtype match. - (header_content_type_param): Handle NULL content type pointer. - -2000-04-08 NotZed - - * camel-mime-filter-basic.c (filter): Implement the base64 - encoder. Problem is, there is no way to know when to close it. - Close/Reset will have to provide the same args as filter, so it can - flush remaining data *sigh* - - * camel-mime-utils.c (base64_encode_step): A rather complex base64 - encoder, fast? - (base64_step_close): Companion function to finish off the base64 - sequence. - - * camel-mime-part.c (my_write_content_to_stream): Changed to use - camel_stream_write_to_stream(). - - * camel-stream.[ch] (camel_stream_write_to_stream): From - camel_stream_b64_write_to_stream(). Fixed some infinite loop - bugs with error conditions. - - * camel-stream-b64.[ch] (camel_stream_b64_write_to_stream): Removed. - This has nothing to do with stream-b64, so i've moved it to - CamelStream. - - * camel-mime-utils.h: Add a comment about refcounting - header_content_type struct. - - * Makefile.am: Added camel-stream-filter*.[ch]. - - * camel-stream-filter.[ch]: Class to implement a generic - (multipass) filter ontop of a stream. Only implements a read-only - stream. - - * camel-mime-parser.c (camel_mime_parser_filter_add): Ref the - filter we just added. - - * Makefile.am: Added camel-mime-filter*.[ch]. - - * camel-mime-filter-charset.[ch]: A filter to preform character set - conversion (uses unicode_iconv). - - * camel-mime-filter-save.[ch]: A simple filter which will save all - data directly to a file or file descriptor. - - * camel-mime-filter-basic.[ch]: Implements the basic mime filters, - base64 and quoted-printable decoding (encoding not implemented yet). - - * camel-mime-filter.[ch]: A filtering class, which can filter streams - of data without having to copy them. Simpler than stream classes, - and can be plugged into a single stream class (when i write it). - -2000-04-07 Dan Winship - - * providers/pop3/camel-pop3-store.c (pop3_connect): Clarify error - messages. - (finalize): fix a bug in camel_exception usage - (pop3_connect): Remember the password after asking for it the - first time. - -2000-04-07 NotZed - - * Makefile.am: Added camel-mime-parser/camel-mime-utils. - - * camel-mime-parser.c: Fast mime parser. - - * camel-mime-utils.c: Mime utility functions, and email header - parsers. - -2000-04-07 NotZed - - * providers/Makefile.am: Removed smtp for now, its a long way from - building. - * providers/smtp/Makefile.in: Removed file that shouldn't have been - checked in. - -2000-04-06 Matt Loper - - * camel-folder-pt-proxy.c (_get_full_name): Remove exception param - from get_full_name() called, since get_full_name() was changed to - not have an exception in the last param (see dan's notes below). - (_get_name): same. - -2000-04-06 Dan Winship - - * camel-store.[ch]: Reorganize the folder-fetching methods and - implement a folder cache so that multiple requests for the same - folder will yield the same CamelFolder object (as long as it - remains active). Includes some code to remove no-longer-active - folders from the cache, but it doesn't get used since nothing is - ever unref'ed in Camel right now... - - * providers/mbox/camel-mbox-store.c: - * providers/pop3/camel-pop3-store.c: update for CamelStore - changes. - - * camel-folder.[ch]: Remove the (unused) CamelException argument - from camel_folder_get_name and camel_folder_get_full_name. - (camel_folder_set_name): make this go away since changing a - folder's name after it has been created could result in it - conflicting with a separately-issued folder. - -2000-04-05 Dan Winship - - * g_url_new really wanted to take a CamelException. So, rename - Gurl to CamelURL, g_url_* to camel_url_* (with camel_url_new - taking an exception), and url-util.[ch] to camel-url.[ch]. Also - force url->port to be numeric and remove camel_service_getport. (I - was confused before: the URL RFC says the port must be numeric, so - we don't want to do getportbyname.) - -2000-04-01 Dan Winship - - * providers/mbox/camel-mbox-folder.c - (_check_get_or_maybe_generate_summary_file): Compare - mbox_file_size and mbox_modtime to the results of stat()ing the - mbox file, not the summary file. Duh. - (_close): Update the summary's mbox_file_size and mbox_modtime - before writing it to disk. - - * providers/mbox/camel-mbox-summary.c (camel_mbox_summary_save, - camel_mbox_summary_load): Wow. I must have been tired when I wrote - this code. First, the comparison bug above. Second, it was using - ntohs and htons instead of ntohl and htonl. Third, I was reading - the status flag byte in two different places and thus getting out - of sync. Fourth, it was writing out field_length bytes of each - header field after having converted field_length to network byte - order, resulting in lots of random crap being appended, and the - summary files being huge. (Fortunately, since the size/modtime - comparison was biffed, the garbage summary read from disk was - always immediately discarded.) - - * providers/mbox/camel-mbox-parser.c (camel_mbox_parse_file): fix - an off-by-one error that caused the last-used UID to be reused if - the summary file was regenerated. (That one wasn't my fault. :-) - -2000-03-31 Dan Winship - - * camel-stream-mem.c: implement unimplemented methods - - * gmime-content-field.c - (gmime_content_field_construct_from_string): - * data-wrapper-repository.c - (data_wrapper_repository_get_data_wrapper_type): - * camel-simple-data-wrapper.c (my_write_to_stream): - * camel-mime-part.c (my_set_input_stream): - remove debugging printf()s that no longer seem useful. - -2000-03-31 Matt Loper - - * camel-formatter.c (text_to_html): Added "convert_newlines_to_br" - boolean param, to give the option of not converting '\n's to
- tags. This way, when we stick stuff in a

 tag, newlines stay
-	newlines.
-
-2000-03-30  Matt Loper  
-
-	* camel-formatter.c (handle_text_plain): Use 
 tag to force
-	the use of monospaced fonts.
-
-2000-03-30  Dan Winship  
-
-	* camel-service.c (camel_service_getport): Add a htons in the
-	default_number case, and document the fact that the function
-	returns the port in network byte order.
-
-	* providers/pop3/camel-pop3-store.c (pop3_connect): Revert
-	Miguel's change. The port number bug was actually somewhere
-	else, and the IP address copying code was fine already.
-	
-2000-03-29  Miguel de Icaza  
-
-	* providers/pop3/camel-pop3-store.c (pop3_connect): Add htons
-	(port), and only copy 4 bytes for the IP address to prevent a DNS
-	attack. 
-
-2000-03-28  Dan Winship  
-
-	* camel-seekable-substream.c
-	(camel_seekable_substream_new_with_seekable_stream_and_bounds):
-	make this return a CamelStream rather than a
-	CamelSeekableSubstream, because that's the way Gtk objects tend to
-	work.
-
-	* camel-service.c (camel_service_gethost,
-	camel_service_getport): convenience functions to canonicalize
-	the host and port values of a service's URL.
-	* providers/pop3/camel-pop3-store.c: use them
-
-	* providers/mbox/camel-mbox-folder.c
-	(_check_get_or_maybe_generate_summary_file): Make this work when
-	the inbox file doesn't yet exist.
-
-2000-03-27  Dan Winship  
-
-	* providers/mbox/camel-mbox-folder.c (_append_message): uncomment
-	the call to unlink the temp file: there's no way to tell
-	camel_stream_fs to truncate a file, so reusing the same file was
-	resulting in junk at the ends of messages.
-
-	* camel-folder.[ch]: add delete_message_by_{number,uid}.
-
-	* providers/pop3/camel-pop3-folder.[ch]: implement
-	delete_message_by_uid. Add a close method to do expunging
-	of deleted messages if requested.
-
-	* providers/pop3/camel-pop3-store.[ch]: support for
-	CamelPop3Folder::close. (You have to close the connection
-	in order to expunge the folder, thus the store may be
-	connected in the CamelService::is_connected sense when it
-	is not actually connected to the server.) Also some bugfixes.
-
-2000-03-27  NotZed  
-
-	* providers/mbox/camel-mbox-folder.c (_append_message): Unref the
-	output_stream when done, close doesn't do it.
-	(_append_message): Clear all uid's from the appending messages, so
-	they are reassigned proper unique id's.
-
-	* gmime-utils.c (get_header_array_from_stream): Actually free the
-	header, it is copied elsewhere.
-
-2000-03-26  NotZed  
-
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Added
-	folder parameter to function.  Fixed callers.
-	(index_message): Index a message as it is assigned a unique id.
-
-	* camel-mime-part.c (my_set_content_id): Make sure we malloc and
-	copy the content_id, otherwise *poof*
-
-2000-03-25  NotZed  
-
-	* camel-medium.c (_finalize): Another leak, unref the content if
-	finished with it.
-
-	* camel-recipient.c (camel_recipient_table_free): Plug another
-	memory leak - actually free the recipient table.
-
-	* camel-mime-message.c (_finalize): Plugged a memory leak with the
-	flags table.
-
-	* gmime-utils.c (_store_header_pair_from_string): A simpler, more
-	debuggable and functionally identical header extraction function.
-
-2000-03-24  NotZed  
-
-	* gmime-content-field.c (gmime_content_field_set_parameter):
-	Remove the hash table entry before freeing its key and data.
-
-2000-03-27  Dan Winship  
-
-	* providers/Makefile.am (SUBDIRS): Add pop3.
-
-	* providers/pop3/camel-pop3-store.c: keep separate input and
-	output streams so the output doesn't end up being buffered.
-
-	* providers/pop3/camel-pop3-folder.c (get_message_by_number):
-	finish implementing this.
-
-2000-03-27  Michael Meeks  
-
-	* camel-mime-part.c (my_set_disposition): fix so less broken.
-	(my_finalize): remove dodgy disposition free.
-
-	* camel-data-wrapper.c (my_set_mime_type_field): unref instead of
-	free on mime_type.
-
-2000-03-27  Dan Winship  
-
-	* camel-service.c (camel_service_free_auth_types): new routine to
-	free the data allocated by camel_service_query_auth_types.
-
-	* providers/pop3/camel-pop3-store.c (free_auth_types): implement
-
-	* camel-stream-mem.c (camel_stream_mem_new_with_buffer): rename
-	camel_stream_mem_new_with_buffer to ..._with_byte_array and add a
-	new ..._with_buffer that takes a char * rather than a GByteArray.
-
-	* Remove CamelStreamBufferedFs, since CamelStreamBuffer makes it
-	redundant.
-
-2000-03-25  Dan Winship  
-
-	* camel-folder-summary.[ch]: change the CamelFolderSummary
-	interfaces to allow partial summary queries (for dealing
-	with very large folders). Remove the "extended_fields" from
-	CamelFolderInfo and CamelMessageInfo: this is better dealt
-	with by subtyping.
-
-	* providers/mbox/camel-mbox-summary.[ch]: Make CamelMboxSummary a
-	subclass of CamelFolderSummary. Update interfaces for that. Remove
-	the internal/external summary distinction. Remove the (unused) md5
-	checksum in the folder summary. Change the summary file format
-	(primarily to make it no longer byte-order dependent) and add a
-	version number to it so it will be easier to change in the future.
-	
-	* providers/mbox/camel-mbox-folder.[ch]
-	* providers/mbox/camel-mbox-search.c
-	* providers/mbox/camel-mbox-utils.c: update for summary changes
-
-	* camel-exception-list.def: add
-	CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID
-	
-2000-03-23  NotZed  
-
-	* providers/mbox/camel-mbox-provider.c: Added flag to provider
-	initialisation, to match changed structure.
-
-2000-03-22  NotZed  
-
-	* camel-folder.[ch]: Added async search api.
-
-	* providers/mbox/camel-mbox-search.c
-	(camel_mbox_folder_search_by_expression): Changed to use an
-	asynchronous interface.
-	(camel_mbox_folder_search_cancel): Cancel function for async
-	interface.
-
-2000-03-23  Dan Winship  
-
-	* camel-stream-buffer.c (camel_stream_buffer_read_line): Function
-	to read one line of any size from a stream and return it in
-	allocated memory.
-
-2000-03-22  Dan Winship  
-
-	* camel-service.c (camel_service_query_auth_types): New function
-	to query a service for the authentication protocols it supports.
-	* providers/pop3/camel-pop3-store.c (query_auth_types): implement
-
-	* camel-provider.c (camel_provider_scan): New function to
-	scan the provider dir and return a list of all providers.
-
-	* providers/pop3/camel-pop3-folder.c: fill this in partially
-	* providers/pop3/camel-pop3-store.c: make camel_pop3_command
-	return the text after "+OK"/"-ERR" and add a separate
-	camel_pop3_get_additional_data to get the message body or
-	whatever. Also make them take a CamelPop3Store rather than
-	a CamelStreamBuffer.
-
-2000-03-22  Matt Loper  
-
-	* camel-formatter.c (debug): Disabled some useless debug
-	messaging.
-
-2000-03-21  Dan Winship  
-
-	* providers/pop3: some initial bits of the POP3 provider, to
-	make Matt happy. Incomplete, untested, etc.
-
-2000-03-21  bertrand  
-
-	* providers/mbox/camel-mbox-summary.c 
-	(camel_mbox_summary_append_internal_to_external): copy the size field
-
-	* providers/mbox/camel-mbox-folder.c (_get_message_by_uid): initialize 
-	message_info to NULL
-
-	* camel-folder-summary.h: added the size field.
-
-	* providers/mbox/camel-mbox-summary.h: 
-	added the received_date field.
-
-	* providers/mbox/camel-mbox-summary.c:
-	documented all functions.
-
-	* camel-folder-summary.h: name change and 
-	new fields.
-
-	* providers/mbox/camel-mbox-search.c: update to 
-	conform to name change in the summary fields.
-
-2000-03-10  bertrand  
-
-	* camel-service.h: cosmetic changes.
-
-2000-03-09  Dan Winship  
-
-	* s/HelixCode/Helix Code, Inc./ in the copyrights
-
-2000-03-07  bertrand  
-
-	* camel-formatter.c (handle_mime_part): 
-	plug mem leaks due to bad documentation
-	of camel_content_field_get_mime_type
-	(print_camel_body_part): idem
-	(handle_multipart_alternative): idem
-
-	* gmime-content-field.c (gmime_content_field_get_mime_type): 
-	documentation fix.
-
-
-	* camel-mime-part.c (my_finalize): unref the 
-	content_input_stream if any. 
-
-2000-03-06  bertrand  
-
-	* camel-stream-fs.c (_seek): fix a bogus calculation
-	in the return position.
-
-2000-03-05  bertrand  
-
-	* camel-session.h: cosmetic fixes.
-
-	* camel-stream-fs.c (_read): 
-	(_seek): fixed the current position so that it refers
-	to the current position in the stream, not in its parent.
-
-2000-03-04  NotZed  
-
-	* providers/mbox/camel-mbox-search.c
-	(camel_mbox_folder_search_by_expression): Ref the summary
-	after we have got it.
-
-2000-03-04  bertrand  
-
-	* camel-mime-part.c (my_write_content_to_stream): 
-	stream the raw content instead of nothing if the encoding
-	is not supported.
-
-	* camel-stream-fs.c (_seek): handle eos more
-	properly.
-
-	* camel-formatter.c (get_bonobo_tag_for_object): 
-	bonobo-goad-id is the good key to look for. 
-	(get_bonobo_tag_for_object): close the  tag.
-	(get_bonobo_tag_for_object): the correct syntax for the
-	to set a parameter inside an  tag is :
-	  
-	
-
-2000-03-03  bertrand  
-
-	* providers/mbox/camel-mbox-folder.c (_get_message_by_uid): 
-	use set_input_stream instead of construct_from_stream
-	to feed the message object. 
-
-	* camel-data-wrapper.c (my_write_to_stream): reset output stream.
-	(my_set_input_stream): unref the previous input stream.
-	use the set_output_stream for default behaviour.
-	(my_set_output_stream): unref previous output stream.
-
-	* camel-mime-part.c (my_write_content_to_stream): reset content
-	object output stream.
-
-2000-03-03  NotZed  
-
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev): Make
-	sure we open with create with a creation mask.
-
-2000-03-01  NotZed  
-
-	* camel-mime-part-utils.c
-	(camel_mime_part_construct_content_from_stream): DO NOT assert on
-	content type, we have fallback code 4 lines below it ... *sigh*
-
-2000-02-29  NotZed  
-
-	* Makefile.am (libcamelinclude_HEADERS): Added camel-stream-buffer
-	to build.
-
-	* camel-stream-buffer.[ch]: Generic buffer which can be applied to
-	any stream.
-
-2000-03-03  bertrand  
-
-	* camel-formatter.c (handle_image): in the case
-	of images, put the content object output stream
-	in the url. This allows the message browser
-	to show inline images.
-
-	* camel-stream-b64.c (my_read_encode): fixed state
-	0 keep value. 
-
-2000-03-02  bertrand  
-
-	* camel-stream-b64.c (my_read_encode): don't forget to 
-	set the state to 0 after 3.
-	(my_read_encode): don't forget to encode, even in state 3.
-
-	* camel-simple-data-wrapper.c: static functions are prefixed 
-	with my_ instead of _
-	* camel-multipart.c: static functions are prefixed 
-	with my_ instead of _
-	(my_write_to_stream): commented.
-	(my_write_to_stream): warning in case the boudary is set
-	but is a zero length string.
-
-	* camel-mime-part.c (camel_mime_part_encoding_from_string): 
-	remove debug trace. 
-	
-	* camel-mime-part.c: Replaced all static functions
-	with name begining with _ by the same name begining
-	with "my_" to prevent the possible conflicts 
-	with system symbols Dan warned us about. 
-	
-	* camel-stream-b64.c (camel_stream_b64_write_to_stream): 
-	use CamelStreamB64 type for the input stream.
-
-	* camel-mime-part.c (_get_content_object): remove 
-	debugging trace
-	(_write_content_to_stream): implement the b64 
-	encoding the new way (that is using camel_stream_b64)
-
-	* camel-data-wrapper.c (my_write_to_stream): 
-	fix implementation so that it writes properly
-	to the output stream even.
-
-	* camel-stream-b64.c (camel_stream_b64_write_to_stream): 
-	fix implementation. 
-
-2000-02-29  bertrand  
-
-	* camel-stream-b64.c (camel_stream_b64_write_to_stream): new
-	utility function. 
-
-	* camel-data-wrapper.c (_write_to_stream): default
-	implementation. 
-
-	* gmime-utils.c (_store_header_pair_from_string): 
-	revert strange changes. 
-
-	* camel-stream-b64.c (my_read_decode): set eos to true when we
-	have read the whole input stream. 
-	(my_reset): set eos to FALSE.
-
-2000-02-28  NotZed  
-
-	* camel-mime-part.c (_parse_header_pair): Dont free this either.
-
-	* camel-medium.c (_remove_header): Ugh, dont free the header
-	before we actually remove it.
-	(_add_header): Ugh, dont free hashtable entries which may be
-	duplicated (hash_insert _will_ reference that memory).
-
-	* string-utils.c (string_trim): Trimming a 0-length string is not
-	an error.
-
-	* camel-mime-message.c (_parse_header_pair): Fixed very broken
-	memory handling of header_name/value.
-
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_write_xev):
-	Initialise end_of_last_message always.
-	(camel_mbox_copy_file_chunk): Stop trying to read if we run out of
-	data, rather than looping forever.
-	(camel_mbox_write_xev): Use an open flag when opening with create.
-
-	* camel-folder.c (camel_folder_search_by_expression): No, its not
-	a fatal error to search on a non-searchable folder, you just dont
-	get any matches.
-	(_open): Dont open an opened folder (i dont see why this is really
-	a bug, but what the hell ...)
-
-	* providers/mbox/camel-mbox-folder.c (_init): Set search cap on.
-	(_open): Call parent class to perform open.  Remove folder-open
-	check to parent instead.
-	(_create): open takes a creation mask, dont use umask to try and
-	set the open mode.
-	(_delete): Dont bother checking folder==NULL, its already been
-	checked on the external interface (changed to an assertion, this
-	would have to be a camel bug).
-	(_delete_messages): Likewise.
-	(_create): Ditto.
-	(_init): Dont go and clear all the paths and shit that the parent
-	open just setup for us.
-	(_delete_messages): Get rid of more umask stuff.
-	(_append_message): Make sure we pass file mode to open with create.
-	(_append_message): Cleaned up some indenting to make it readable.
-
-	* camel-stream-b64.c (my_read_encode): Fixed a typo.
-
-	* providers/mbox/camel-mbox-search.c: Changed to use e-sexp,
-	rather than filter-sexp.
-
-2000-02-28  bertrand  
-
-	* camel-stream-b64.c (my_read_encode): encoding
-	filter.
-
-2000-02-23  bertrand  
-
-	* camel-stream-b64.c: changed the __static 
-	suffix into a my_ prefix. 
-	(camel_stream_b64_set_mode): reset the persistent
-	status. 
-	(my_read_decode): remove superfluous %
-	
-	* providers/mbox/camel-mbox-utils.c (camel_mbox_copy_file_chunk): 
-	fix exception description message.
-
-2000-02-24  Dan Winship  
-
-	* camel-session.c: Add camel_session_get_transport_for_protocol.
-
-	* camel-transport.h:
-	* camel-transport.c: Add an abstract CamelTransport class.
-
-	* providers/sendmail/*: A CamelTransport that uses sendmail
-	to deliver mail.
-
-2000-02-24  Dan Winship  
-
-	* camel-folder.c: use CamelExceptions for run-time errors, not
-	incorrect code. Don't bother validating that an object exists from
-	inside one of its methods, since you couldn't have gotten there if
-	it didn't. Fix some code style bugs.
-
-	(_init): Rename init_with_store to init and add parent_folder,
-	separator, and name arguments.
-	(_set_name): Get separator from self, not parent_store now.
-
-	* camel-store.h:
-	* camel-store.c: Remove get/set_separator.
-
-	* providers/mbox/: Update for above.
-
-2000-02-23  Dan Winship  
-
-	* camel-medium.c (_finalize): Free the data in the headers hash
-	table.
-	(_add_header): g_strdup the header name and value when adding it.
-
-	* camel-mime-part-utils.c
-	(camel_mime_part_construct_headers_from_stream): Free the header
-	data after calling camel_medium_add_header, since it will have
-	g_strdup()ed it itself.
-
-2000-02-22  NotZed  
-
-	* providers/mbox/camel-mbox-search.c: Dont compile by default.
-
-	* providers/mbox/Makefile.am: Fuck off the filter code.
-
-2000-02-22  bertrand  
-
-	* camel-stream-b64.c (read_decode__static): 
-	don't read the char if we reached the length
-	of the output buffer. Hours lost on this
-	%$!@# bug : 3.5
-
-	* camel-folder.c (camel_folder_get_subfolder): 
-	(camel_folder_create): 
-	(camel_folder_delete): 
-	(camel_folder_delete_messages): 
-	(camel_folder_list_subfolders): 
-	(camel_folder_expunge): 
-	(camel_folder_get_message_by_number): 
-	(camel_folder_get_message_count): 
-	(camel_folder_append_message): 
-	(camel_folder_copy_message_to): 
-	(camel_folder_get_summary): 
-	(camel_folder_get_message_uid): 
-	(camel_folder_get_message_by_uid): 
-	(camel_folder_get_uid_list): 
-	Check folder state (open/close) and raise an
-	exception if it is not ok. 
-	
-	* providers/mbox/camel-mbox-folder.c (_create): 
-	create the file and the path with two different
-	names.
-
-	* camel-folder.c (_create): handle the case 
-	when the folder name starts with '/'
-
-	* camel-exception.c (camel_exception_new): use 
-	(void) instead of () in decl.
-
-	* camel-exception.h: cosmetic fixes.
-
-	* camel-exception.c (camel_exception_init): new routine.
-	Fix a bug in mail/message-list.c
-	
-
-	* camel-folder.h: cosmetic changes.
-
-	* camel-stream-b64.c (reset__static): added a
-	reset method. Thanks message-browser to find
-	so much bugs :)
-
-	* providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): readd
-	Unicode libs.
-
-2000-02-21  bertrand  
-
-	* camel-formatter.c (lookup_unique_id): 
-	awful hack to test get_output_stream.
-	* camel-stream-b64.[ch] :
-	b64 encoding/decoding is now implemented as
-	a stream. 
-	
-
-2000-02-21  bertrand  
-
-	* camel-seekable-substream.c (_reemit_parent_signal): 
-	emit "data_available" when parent stream emits it. 
-
-
-2000-02-21  NotZed  
-
-	* providers/mbox/Makefile.am: Uh, fixed LIBADD again.  What was
-	there was never ever going to work, wasn't it tested?
-
-
-2000-02-21  Dan Winship  
-
-	* camel-session.h: (struct _CamelSession): Add authenticator.
-
-	* camel-session.c (camel_session_new): Add authenticator.
-	(camel_session_query_authenticator): New function to query the
-	session authenticator for password, etc, information.
-
-2000-02-21  Dan Winship  
-
-	* camel-session.c: add CamelExceptions to several functions. Use
-	camel_session_new to initialize the session and URL fields of
-	created CamelStores as appropriate.
-
-	* camel-store.h:
-	* camel-store.c
-	* camel-service.h:
-	* camel-service.c: Move the session and url (and associated
-	functions) from CamelStore to CamelService. Add url_flags to
-	CamelService so subclasses can specify which URL components
-	are mandatory for them.	Add camel_session_new for
-	camel_session_get_store* to use.
-
-	* providers/mbox/camel-mbox-folder.c:
-	* providers/mbox/camel-mbox-store.c:
-	* providers/mbox/camel-mbox-store.h: Update for above changes.
-
-	* camel-exception-list.def: Once camel is being used for real,
-	exceptions won't be renumberable. So renumber them now to make
-	more room to add exceptions to the various categories later, and
-	add a big warning message.
-
-2000-02-20  Dan Winship  
-
-	* providers/mbox/Makefile.am: add libibex back to
-	libcamelmbox_la_LIBADD
-
-2000-02-18  NotZed  
-
-	* providers/mbox/camel-mbox-search.h
-	(camel_mbox_folder_search_by_expression): Added exception to call,
-	and fixed caller.
-
-	* providers/mbox/camel-mbox-search.c
-	(camel_mbox_folder_search_by_expression): Major changes, to use
-	the sexp evaluator from filter/filter-sexp.c to implement the
-	searching.
-	(func_body_contains): Changed to support multiple strings in 1
-	command (results or'd together)
-
-	* url-util.c (g_url_new): Fixed a typo (colon == 0 isn't right),
-	and made it so full url's are absolute pathed (Dan, this is how it
-	has to work!).  Also, always include a path part, even if it is an
-	empty string.
-
-2000-02-18  Dan Winship  
-
-	* camel/camel-types.h: New header with the typedefs for all camel
-	classes. Now the class headers can just include this and the
-	header for the parent type. This makes it possible for
-	CamelService to include a CamelSession without creating an
-	#include loop.
-
-	* camel/*:	
-	* composer/e-msg-composer-attachment-bar.h:
-	* mail/folder-browser.c:
-	* mail/message-list.c: frob #includes to match the new reality
-
-2000-02-17  Dan Winship  
-
-	* camel/camel-service.h:
-	* camel/camel-service.c: Make camel-service us a Gurl internally.
-	Remove the login/password interfaces and instead provide
-	camel_service_connect_with_url. Add CamelExceptions
-
-2000-02-17  bertrand  
-
-	* camel/camel-formatter.c (handle_text_plain): 
-	(handle_text_html): use camel_stream_reset instead
-	of seek. The formatter should be able to work 
-	with all streams, not only seekable streams. 
-	In the case where some provider implementation
-	would not be able to provide a reset method 
-	to their stream, implementors would have
-	to find a workaround.
-
-	* camel/camel-session.c (camel_session_new): use
-	(void) instean of () in function decl.
-
-	* camel/camel-folder.c: ifdef async operation 
-	related code. 
-
-	* camel/camel-seekable-stream.c (_seek): added a warning.
-	(_reset): default implementation of reset for seekable
-	stream.
-
-	* camel/camel-mime-message.h: set_received_date declaration fix.
-	cosmetic changes.
-
-	* camel/providers/mbox/camel-mbox-provider.c (camel_provider_module_init): 
-	use (void) instead of ().
-
-	* camel/camel-stream.c (camel_stream_reset): 
-	new method for CamelStream.
-
-2000-02-17  Dan Winship  
-
-	* camel/url-util.c (g_url_to_string): New function to convert
-	a Gurl back into a char *.
-
-2000-02-17  bertrand  
-
-	* camel/camel-formatter.c (handle_text_plain): 
-	revamped so that it uses the output stream
-	of the data wrapper
-	(handle_text_html): ditto.
-	
-	
-	* camel/camel-simple-data-wrapper.h: 
-	* camel/camel-simple-data-wrapper.c (camel_simple_data_wrapper_new): 
-	use (void) instead of ().
-	(_get_output_stream): simple implementation. 
-
-2000-02-16  bertrand  
-
-	* camel/camel-data-wrapper.c (_set_input_stream): ref input stream
-	(_set_output_stream): ref output stream
-	(_finalize): unref input and output streams
-
-	* camel/camel-seekable-substream.c (_set_bounds): don't
-	seek the begining of the substream.
-	(_eos): fix eos condition testing. 
-	(_finalize): unref parent stream
-	(_init_with_seekable_stream_and_bounds): ref parent stream
-
-	* camel/gstring-util.c (g_string_equal_for_hash): 
-	(g_string_equal_for_glist): return type is int.
-
-	* camel/camel.h: 
-	* camel/camel.c (camel_init): use (void) 
-	instead of ().
-	
-2000-02-16  NotZed  
-
-	* providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Added
-	libfilter to link line (temporarily?).  Required for
-	filter-sexp.
-
-2000-02-15  bertrand  
-
-	* camel/camel-multipart.c (_localize_part): 
-	this routine replaces the _read_part routine
-	and does not store the part in a buffer. 
-	(_set_input_stream): use the set_input_stream
-	instead of the construct_from_stream.
-	each bodypart is given an input stream. 
-
-	* camel/camel-mime-part-utils.c: 
-	include the data-wrapper-repository header. 
-	(camel_mime_part_construct_content_from_stream): 
-	use the set_input_stream instead of the 
-	construct_from_stream method. 
-
-	* camel/camel-seekable-substream.c (_set_bounds): 
-	cur position is set to 0 not to inf_bound.
-
-2000-02-15  bertrand  
-
-	* camel/camel-mime-part.c: include gmime-base64.h
-	various compilation and runtime fixes.
-	(_set_input_stream): store the input substream 
-	for the content object.
-
-	* camel/camel-data-wrapper.h: declare the 
-	set/get function on input/output stream.
-
-	* camel/camel-mime-part.c (_get_content_object): 
-	don't use a temporary mem stream. 	
-
-	* camel/camel-seekable-substream.c (_seek): 
-	(_eos): 
-	(_read): the substream can be unlimited in length
-
-	* camel/camel-data-wrapper.c (camel_data_wrapper_class_init): 
-	set the get/set_input/output_stream methods. 	
-
-	* camel/camel-multipart.c (_construct_from_stream): 
-	camel_stream_seek -> camel_seekable_stream_seek
-
-2000-02-14  Miguel de Icaza  
-
-	* camel/providers/mbox/Makefile.am (libcamelmbox_la_LIBADD): Add
-	the unicode libraries as well.
-
-	* camel/camel-provider.c (camel_provider_register_as_module): Add
-	error reporting here.  Desire to use Solaris increases.  Hair loss
-	in the last two hours: 5,400.
-
-	* camel/providers/mbox/camel-mbox-provider.c
-	(camel_mbox_get_provider): Renamed function.
-
-	* camel/camel.h: All include files use camel/ now here.
-
-	* camel/providers/mbox/Makefile.am: Drop all the dynamism from
-	Camel, and make this a standard library.
-
-2000-02-14  bertrand  
-
-	* camel/gmime-utils.c (get_header_array_from_stream): use the 
-	eos stream method. 
-	(gmime_read_line_from_stream): ditto.
-
-	* camel/camel-stream-fs.h (struct ): add the eof field
-	cosmetics changes. 
-
-	* camel/camel-stream-fs.c (camel_stream_fs_init): set eof.
-	(_read): set eof on end of file.
-	(_eos): implemented.
-
-	* camel/gmime-utils.c (get_header_array_from_stream): 
-	make a blocking version of the header parser. 
-	When the fs stream uses gnome-vfs, this should
-	be changed. 
-	(gmime_read_line_from_stream): ditto. 
-
-2000-02-11  bertrand  
-
-	* camel/camel-stream-fs.c: 
-	everywhere, when using the cur_pos field, do it
-	on the CamelSeekableStream object.
-	(_seek): small fix. 
-
-	* camel/camel-seekable-stream.c (camel_seekable_stream_seek): 
-	s/camel_stream_seek/camel_seekable_stream_seek/g
-
-	* camel/camel-seekable-stream.h: 
-	(struct ): added a field to store the
-	current position.
-
-	* camel/camel-seekable-stream.c (camel_seekable_stream_get_current_position): 
-	New function. Allows to get the current position 
-	of a seekable stream.
-	
-
-2000-02-13  NotZed  
-
-	* providers/mbox/camel-mbox-search.c: New file, implements the
-	search api for mbox folders.
-
-	* providers/mbox/Makefile.am: Link with ibex.
-
-	* camel-folder.c (camel_folder_has_search_capability): Api
-	additions.
-	(camel_folder_search_by_expression): Ditto.
-
-2000-02-12  NotZed  
-
-	* providers/mbox/camel-mbox-folder.c (_set_name): Setup index
-	filename as well.
-	(_init_with_store): Init index filename.  Hmm, none of these
-	names ever seem to get free'd (FIXME?)
-
-	* providers/mbox/camel-mbox-folder.h: Add index file name.
-
-2000-02-12  NotZed  
-
-	* camel-folder.h: Add folder search functions.
-
-	** Created ChangeLog just for camel **
-	 - refer to ../ChangeLog for changes prior to this date.
diff --git a/camel/Makefile.am b/camel/Makefile.am
deleted file mode 100644
index 4d2c29a4ca..0000000000
--- a/camel/Makefile.am
+++ /dev/null
@@ -1,131 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = providers
-
-libcamelincludedir = $(includedir)/camel
-providerdir = $(libdir)/evolution/camel-providers/$(VERSION)
-
-lib_LTLIBRARIES = libcamel.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir)	 \
-	-I$(top_srcdir)/intl			 \
-	$(GLIB_CFLAGS)				 \
-	$(UNICODE_CFLAGS)			 \
-	-DCAMEL_PROVIDERDIR=\""$(providerdir)"\" \
-	-DG_LOG_DOMAIN=\"camel\"
-
-libcamel_la_SOURCES = 				\
-	broken-date-parser.c			\
-	camel-address.c				\
-	camel-data-wrapper.c			\
-	camel-exception.c			\
-	camel-folder-search.c			\
-	camel-folder-summary.c			\
-	camel-folder.c				\
-	camel-internet-address.c		\
-	camel-medium.c				\
-	camel-mime-filter-basic.c		\
-	camel-mime-filter-charset.c		\
-	camel-mime-filter-crlf.c		\
-	camel-mime-filter-from.c		\
-	camel-mime-filter-index.c		\
-	camel-mime-filter-save.c		\
-	camel-mime-filter.c			\
-	camel-mime-message.c			\
-	camel-mime-parser.c			\
-	camel-mime-part-utils.c			\
-	camel-mime-part.c			\
-	camel-mime-utils.c			\
-	camel-movemail.c			\
-	camel-multipart.c			\
-	camel-object.c				\
-	camel-provider.c			\
-	camel-seekable-stream.c			\
-	camel-seekable-substream.c		\
-	camel-service.c				\
-	camel-session.c				\
-	camel-store.c				\
-	camel-stream-buffer.c			\
-	camel-stream-filter.c			\
-	camel-stream-fs.c			\
-	camel-stream-mem.c			\
-	camel-stream.c				\
-	camel-transport.c			\
-	camel-uid-cache.c			\
-	camel-url.c				\
-	camel.c					\
-	gmime-content-field.c			\
-	gstring-util.c				\
-	hash-table-utils.c			\
-	md5-utils.c				\
-	string-utils.c
-
-libcamelinclude_HEADERS =			\
-	broken-date-parser.h			\
-	camel-address.h				\
-	camel-data-wrapper.h			\
-	camel-exception-list.def		\
-	camel-exception.h			\
-	camel-folder-search.h			\
-	camel-folder-summary.h			\
-	camel-folder.h				\
-	camel-internet-address.h		\
-	camel-medium.h				\
-	camel-mime-filter-basic.h		\
-	camel-mime-filter-charset.h		\
-	camel-mime-filter-crlf.h		\
-	camel-mime-filter-from.h		\
-	camel-mime-filter-index.h		\
-	camel-mime-filter-save.h		\
-	camel-mime-filter.h			\
-	camel-mime-message.h			\
-	camel-mime-parser.h			\
-	camel-mime-part-utils.h			\
-	camel-mime-part.h			\
-	camel-mime-utils.h			\
-	camel-movemail.h			\
-	camel-multipart.h			\
-	camel-object.h				\
-	camel-provider.h			\
-	camel-seekable-stream.h			\
-	camel-seekable-substream.h		\
-	camel-service.h				\
-	camel-session.h				\
-	camel-store.h				\
-	camel-stream-buffer.h			\
-	camel-stream-filter.h			\
-	camel-stream-fs.h			\
-	camel-stream-mem.h			\
-	camel-stream.h				\
-	camel-transport.h			\
-	camel-types.h				\
-	camel-uid-cache.h			\
-	camel-url.h				\
-	camel.h					\
-	gmime-content-field.h			\
-	gstring-util.h				\
-	hash-table-utils.h			\
-	md5-utils.h				\
-	string-utils.h
-
-libcamel_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir)
-
-EXTRA_DIST =					\
-	README 
-
-#noinst_PROGRAMS =				\
-#	camel-mime-filter-from
-#
-#camel_mime_filter_from_SOURCES = 		\
-#	camel-mime-filter-from.c
-#
-#camel_mime_filter_from_LDADD = 		\
-#	../camel/libcamel.la			\
-#	../e-util/libeutil.la			\
-#	../libibex/libibex.la			\
-#	$(GNOME_LIBDIR)				\
-#	$(GNOMEUI_LIBS)				\
-#	$(INTLLIBS)				\
-#	$(PTHREAD_LIB)				\
-#	$(EXTRA_GNOME_LIBS)
-
diff --git a/camel/README b/camel/README
deleted file mode 100644
index f020174d5e..0000000000
--- a/camel/README
+++ /dev/null
@@ -1,57 +0,0 @@
-
-                                   CAMEL
-     
-
-			A generic Messaging Library
-
-
-                                   ----
-				
-
-Introduction:
--------------
-
-Camel will be a generic messaging library. It will evntually support 
-the standard messaging system for receiving and sending messages.
-It aims at being the backend for the future gnome-mailer system.
-
-The name "camel" stands for ... nothing. Open area of development there.
-You know, that "bazaar" thing. Maybe could we organize a big contest on
-gnome-list to find the best explanation :)
-
-Camel draws heavily from JavaMail and the IMAP4rev1 RFC. People
-wanting to hack on a provider should read the JavaMail API
-specification, but CMC and MAPI are of interest too.
-
-Please, before starting anything, wait for me to finish the abstract
-classes. Some parts are not definitive yet.
-
- 
-Organization:
--------------
-
-The library is roughly a set of abstract classes, some kind of generic
-"interfaces" (idl interfaces, not java interfaces ).
-
-Particular implementations are called providers.
-
-Here are the basic objects:
-
-* CamelService : an abstract class representing an access to a server.
-Handles the connection and authentication to any server.
-
-* CamelStore (CamelService): A hierarchy of folders on a server.
-
-* CamelFolder : An object containing messages. A folder is always
-associated with a store.
-
-* CamelMessage : An object contained in folders. Is defined by a set
-of attributes and a content. (Attributes include: the date it was
-received, the sender address, .....)
-
-* CamelTransport (CamelService): A way to send messages.
-
-....
-...
-
-
diff --git a/camel/README.COPYRIGHT b/camel/README.COPYRIGHT
deleted file mode 100644
index 91774e7339..0000000000
--- a/camel/README.COPYRIGHT
+++ /dev/null
@@ -1,47 +0,0 @@
-Important note for Camel hackers:
----------------------------------
-
-Camel has been a lot of work, and has been conceived to be general
-enough to be used outside the gnome-mailer. It is possible in the
-future that it is used in softwares with licenses incompatible with the
-LGPL. For this reason, the copyright has to be owned by a unique
-person.  Be sure, however, that Camel will always be available under
-the LGPL.  Significant authors will always be consulted before any
-special use of Camel. Moreover, in special situations, they may be
-given the authorization to use Camel with a license different than the
-LGPL.
-
-Thus, when adding code in Camel, always add the following lines at the
-begining of the file:
-
-/* 
- *
- * Copyright 199x, 200x Helix Code, Inc. (http://www.helixcode.com)
- * 
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-You may also want to add your name to the author name list after this
-header.
-
-Please contact me (Bertrand.Guiheneuf@aful.org) if you want to discuss
-this copyright issue.
-
-Happy hacking,
-
-Bertrand.
-
-
diff --git a/camel/README.HACKING b/camel/README.HACKING
deleted file mode 100644
index a4742ee7b8..0000000000
--- a/camel/README.HACKING
+++ /dev/null
@@ -1,14 +0,0 @@
-You want to hack on Camel ?
-
-Thanks. Camel aims at being the best messaging
-library for Linux and your help is welcome. 
-Please be sure to read the following files before
-commiting any change or sending any patch:
-
-CODING.STYLE
-README.COPYRIGHT
-
-
-Thanks.
-
-	Bertrand 
\ No newline at end of file
diff --git a/camel/broken-date-parser.c b/camel/broken-date-parser.c
deleted file mode 100644
index 544dc04e28..0000000000
--- a/camel/broken-date-parser.c
+++ /dev/null
@@ -1,315 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include "broken-date-parser.h"
-
-/* prototypes for functions dealing with broken date formats */
-static GList *datetok (const gchar *date);
-static gint get_days_in_month (gint mon, gint year);
-static gint get_weekday (gchar *str);
-static gint get_month (gchar *str);
-
-static char *tz_months [] = {
-	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-/*****************************************************************************
- * The following functions are here in the case of badly broken date formats *
- *                                                                           *
- * -- fejj@helixcode.com                                                     *
- *****************************************************************************/
-
-typedef struct {
-	gchar dow[6];   /* day of week (should only need 4 chars) */
-	gint day;
-	gint mon;       /* 1->12 or 0 if invalid */
-	gint year;
-	gint hour;
-	gint min;
-	gint sec;
-	gchar zone[6];  /* time zone */
-} date_t;
-
-static
-GList *datetok (const gchar *date)
-{
-	GList *tokens = NULL;
-	gchar *token, *start, *end;
-	
-	start = (gchar *) date;
-	while (*start) {
-		/* find the end of this token */
-		for (end = start; *end && *end != ' '; end++);
-		
-		token = g_strndup (start, (end - start));
-		
-		if (token && *token)
-			tokens = g_list_append (tokens, token);
-		else
-			g_free (token);
-
-		if (*end)
-			start = end + 1;
-		else
-			break;
-	}
-
-	return tokens;
-}
-
-static gint
-get_days_in_month (gint mon, gint year)
-{
-	switch (mon) {
-	case 1: case 3: case 5: case 7: case 8: case 10: case 12:
-		return 31;
-	case 4: case 6: case 9: case 11:
-		return 30;
-	case 2:
-		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
-			return 29;
-		return 28;
-	default:
-		return 30;
-	}
-}
-
-static gint
-get_weekday (gchar *str)
-{
-	g_return_val_if_fail ((str != NULL), 0);
-
-	if (strncmp (str, "Mon", 3) == 0) {
-		return 1;
-	} else if (strncmp (str, "Tue", 3) == 0) {
-		return 2;
-	} else if (strncmp (str, "Wed", 3) == 0) {
-		return 3;
-	} else if (strncmp (str, "Thu", 3) == 0) {
-		return 4;
-	} else if (strncmp (str, "Fri", 3) == 0) {
-		return 5;
-	} else if (strncmp (str, "Sat", 3) == 0) {
-		return 6;
-	} else if (strncmp (str, "Sun", 3) == 0) {
-		return 7;
-	}
-
-	return 0;  /* unknown week day */
-}
-
-static gint
-get_month (gchar *str)
-{
-	g_return_val_if_fail (str != NULL, 0);
-    
-	if (strncmp (str, "Jan", 3) == 0) {
-		return 1;
-	} else if (strncmp (str, "Feb", 3) == 0) {
-		return 2;
-	} else if (strncmp (str, "Mar", 3) == 0) {
-		return 3;
-	} else if (strncmp (str, "Apr", 3) == 0) {
-		return 4;
-	} else if (strncmp (str, "May", 3) == 0) {
-		return 5;
-	} else if (strncmp (str, "Jun", 3) == 0) {
-		return 6;
-	} else if (strncmp (str, "Jul", 3) == 0) {
-		return 7;
-	} else if (strncmp (str, "Aug", 3) == 0) {
-		return 8;
-	} else if (strncmp (str, "Sep", 3) == 0) {
-		return 9;
-	} else if (strncmp (str, "Oct", 3) == 0) {
-		return 10;
-	} else if (strncmp (str, "Nov", 3) == 0) {
-		return 11;
-	} else if (strncmp (str, "Dec", 3) == 0) {
-		return 12;
-	}
-    
-	return 0;  /* unknown month */
-}
-
-gchar *
-parse_broken_date (const gchar *datestr)
-{
-	GList *tokens;
-	date_t date;
-	gchar *token, *ptr, *newdatestr;
-	guint len, i, retval;
-	gdouble tz = 0.0;
-
-	memset ((void*)&date, 0, sizeof (date_t));
-	g_return_val_if_fail (datestr != NULL, NULL);
-	
-	tokens = datetok (datestr);
-	len = g_list_length (tokens);
-	for (i = 0; i < len; i++) {
-		token = g_list_nth_data (tokens, i);
-		
-		if ((retval = get_weekday (token))) {
-			strncpy (date.dow, datestr, 4);
-		} else if ((retval = get_month (token))) {
-			date.mon = retval;
-		} else if (strlen (token) <= 2) {
-			/* this could be a 1 or 2 digit day of the month */
-			for (retval = 1, ptr = token; *ptr; ptr++)
-				if (*ptr < '0' || *ptr > '9')
-					retval = 0;
-			
-			if (retval && atoi (token) <= 31 && !date.day)  /* probably should find a better way */
-				date.day = atoi (token);
-			else                                            /* fubar'd client using a 2-digit year */
-				date.year = atoi (token) < 69 ? 2000 + atoi (token) : 1900 + atoi (token);
-		} else if (strlen (token) == 4) {
-			/* this could be the year... */
-			for (retval = 1, ptr = token; *ptr; ptr++)
-				if (*ptr < '0' || *ptr > '9')
-					retval = 0;
-			
-			if (retval)
-				date.year = atoi (token);
-		} else if (strchr (token, ':')) {
-			/* this must be the time: hh:mm:ss */
-			sscanf (token, "%d:%d:%d", &date.hour, &date.min, &date.sec);
-		} else if (*token == '-' || *token == '+') {
-			tz = atoi (token) / 100.0;
-		}
-	}
-	
-	g_list_free (tokens);
-	
-	/* adjust times based on time zones */
-	
-	if (tz != 0) {
-		/* check for time-zone shift */
-		if (tz > 0) {
-			/* correct for positive hours off of UCT */
-			date.hour -= (tz / 100);
-			tz = (gint)tz % 100;
-			
-			if (tz > 0) /* correct for positive minutes off of UCT */
-				date.min -= (gint)(((gdouble) tz / 100.0) * 60.0);
-		} else {
-			if (tz < 0) {
-				/* correct for negative hours off of UCT */
-				tz = -tz;
-				date.hour += (tz / 100);
-				tz = -((gint)tz % 100);
-				
-				if (tz < 0)
-					date.min -= (gint)(((gdouble) tz / 100.0) * 60.0);
-			}
-		}
-		
-		/* adjust seconds to proper range */
-		if (date.sec > 59) {
-			date.min += (date.sec / 60);
-			date.sec = (date.sec % 60);
-		}
-		
-		/* adjust minutes to proper range */
-		if (date.min > 59) {
-			date.hour += (date.min / 60);
-			date.min = (date.min % 60);
-		} else {
-			if (date.min < 0) {
-				date.min = -date.min;
-				date.hour -= (date.min / 60) - 1;
-				date.min = 60 - (date.min % 60);
-			}
-		}
-		
-		/* adjust hours to the proper randge */
-		if (date.hour > 23) {
-			date.day += (date.hour / 24);
-			date.hour -= (date.hour % 24);
-		} else {
-			if (date.hour < 0) {
-				date.hour = -date.hour;
-				date.day -= (date.hour / 24) - 1;
-				date.hour = 24 - (date.hour % 60);
-			}
-		}
-		
-		/* adjust days to the proper range */
-		while (date.day > get_days_in_month (date.mon, date.year)) {
-			date.day -= get_days_in_month (date.mon, date.year);
-			date.mon++;
-			if (date.mon > 12) {
-				date.year += (date.mon / 12);
-				date.mon = (date.mon % 12);
-				if (date.mon == 0) {
-					/* month sanity check */
-					date.mon = 12;
-					date.year -= 1;
-				}
-			}
-		}
-		
-		while (date.day < 1) {
-			date.day += get_days_in_month (date.mon, date.year);
-			date.mon--;
-			if (date.mon < 1) {
-				date.mon = -date.mon;
-				date.year -= (date.mon / 12) - 1;
-				date.mon = 12 - (date.mon % 12);
-			}
-		}
-		
-		/* adjust months to the proper range */
-		if (date.mon > 12) {
-			date.year += (date.mon / 12);
-			date.mon = (date.mon % 12);
-			if (date.mon == 0) {
-				/* month sanity check */
-				date.mon = 12;
-				date.year -= 1;
-			}
-		} else {
-			if (date.mon < 1) {
-				date.mon = -date.mon;
-				date.year -= (date.mon / 12) - 1;
-				date.mon = 12 - (date.mon % 12);
-			}
-		}
-	}
-
-	/* now lets print this date into a string with the correct format */
-	newdatestr = g_strdup_printf ("%s, %d %s %d %s%d:%s%d:%s%d -0000",
-				      date.dow, date.day, tz_months[date.mon-1],
-				      date.year,
-				      date.hour > 10 ? "" : "0", date.hour,
-				      date.min > 10 ? "" : "0", date.min,
-				      date.sec > 10 ? "" : "0", date.sec);
-	
-	return newdatestr;
-}
-
-/*****************************************************************************
- * This ends the code for the broken date parser...                          *
- *                                                                           *
- * -- fejj@helixcode.com                                                     *
- *****************************************************************************/
diff --git a/camel/broken-date-parser.h b/camel/broken-date-parser.h
deleted file mode 100644
index 17000b3299..0000000000
--- a/camel/broken-date-parser.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include 
-
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#include 
-
-/* prototypes for functions dealing with broken date formats */
-
-gchar *parse_broken_date (const gchar *datestr);
-
-
-
-
-
diff --git a/camel/camel-address.c b/camel/camel-address.c
deleted file mode 100644
index 8f7cea3d67..0000000000
--- a/camel/camel-address.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-address.h"
-
-
-static void camel_address_class_init (CamelAddressClass *klass);
-static void camel_address_init       (CamelAddress *obj);
-static void camel_address_finalize   (CamelObject *obj);
-
-static CamelObjectClass *camel_address_parent;
-
-static void
-camel_address_class_init (CamelAddressClass *klass)
-{
-	camel_address_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
-}
-
-static void
-camel_address_init (CamelAddress *obj)
-{
-	obj->addresses = g_ptr_array_new();
-}
-
-static void
-camel_address_finalize (CamelObject *obj)
-{
-	camel_address_remove((CamelAddress *)obj, -1);
-}
-
-CamelType
-camel_address_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_object_get_type (), "CamelAddress",
-					    sizeof (CamelAddress),
-					    sizeof (CamelAddressClass),
-					    (CamelObjectClassInitFunc) camel_address_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_address_init,
-					    (CamelObjectFinalizeFunc) camel_address_finalize);
-	}
-	
-	return type;
-}
-
-/**
- * camel_address_new:
- *
- * Create a new CamelAddress object.
- * 
- * Return value: A new CamelAddress widget.
- **/
-CamelAddress *
-camel_address_new (void)
-{
-	CamelAddress *new = CAMEL_ADDRESS ( camel_object_new (camel_address_get_type ()));
-	return new;
-}
-
-
-/**
- * camel_address_decode:
- * @a: An address.
- * @raw: Raw address description.
- * 
- * Construct a new address from a raw address field.
- * 
- * Return value: Returns the number of addresses found,
- * or -1 if the addresses could not be parsed fully.
- **/
-int
-camel_address_decode	(CamelAddress *a, const char *raw)
-{
-	g_return_val_if_fail(IS_CAMEL_ADDRESS(a), -1);
-
-	return CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (a))->decode(a, raw);
-}
-
-/**
- * camel_address_encode:
- * @a: 
- * 
- * Encode an address in a format suitable for a raw header.
- * 
- * Return value: The encoded address.
- **/
-char *
-camel_address_encode	(CamelAddress *a)
-{
-	g_return_val_if_fail(IS_CAMEL_ADDRESS(a), NULL);
-
-	return CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (a))->encode(a);
-}
-
-/**
- * camel_address_remove:
- * @a: 
- * @index: The address to remove, use -1 to remove all address.
- * 
- * Remove an address by index, or all addresses.
- **/
-void
-camel_address_remove	(CamelAddress *a, int index)
-{
-	g_return_if_fail(IS_CAMEL_ADDRESS(a));
-
-	if (index == -1) {
-		for (index=a->addresses->len; index>-1; index--)
-			CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (a))->remove(a, index);
-	} else {
-		CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (a))->remove(a, index);
-	}
-}
diff --git a/camel/camel-address.h b/camel/camel-address.h
deleted file mode 100644
index a2d6fe34dd..0000000000
--- a/camel/camel-address.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_ADDRESS_H
-#define _CAMEL_ADDRESS_H
-
-#include 
-
-#define CAMEL_ADDRESS(obj)         CAMEL_CHECK_CAST (obj, camel_address_get_type (), CamelAddress)
-#define CAMEL_ADDRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_address_get_type (), CamelAddressClass)
-#define IS_CAMEL_ADDRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_address_get_type ())
-
-typedef struct _CamelAddressClass CamelAddressClass;
-
-struct _CamelAddress {
-	CamelObject parent;
-
-	GPtrArray *addresses;
-
-	struct _CamelAddressPrivate *priv;
-};
-
-struct _CamelAddressClass {
-	CamelObjectClass parent_class;
-
-	int   (*decode)		(CamelAddress *, const char *raw);
-	char *(*encode)		(CamelAddress *);
-
-	void  (*remove)		(CamelAddress *, int index);
-};
-
-guint		camel_address_get_type	(void);
-CamelAddress   *camel_address_new	(void);
-
-int	        camel_address_decode	(CamelAddress *, const char *);
-char	       *camel_address_encode	(CamelAddress *);
-
-void		camel_address_remove	(CamelAddress *, int index);
-
-#endif /* ! _CAMEL_ADDRESS_H */
diff --git a/camel/camel-data-wrapper.c b/camel/camel-data-wrapper.c
deleted file mode 100644
index 52cf60bd33..0000000000
--- a/camel/camel-data-wrapper.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-data-wrapper.c : Abstract class for a data_wrapper */
-
-/*
- *
- * Authors: Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include "camel-data-wrapper.h"
-#include "camel-exception.h"
-
-#include 
-
-#define d(x)
-
-static CamelObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelDataWrapper */
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-
-static int construct_from_stream(CamelDataWrapper *, CamelStream *);
-static int write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
-static void set_mime_type (CamelDataWrapper *data_wrapper, const gchar *mime_type);
-static gchar *get_mime_type (CamelDataWrapper *data_wrapper);
-static GMimeContentField *get_mime_type_field (CamelDataWrapper *data_wrapper);
-static void set_mime_type_field (CamelDataWrapper *data_wrapper, GMimeContentField *mime_type);
-
-static void
-camel_data_wrapper_class_init (CamelDataWrapperClass *camel_data_wrapper_class)
-{
-	parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
-
-	/* virtual method definition */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
-	camel_data_wrapper_class->set_mime_type = set_mime_type;
-	camel_data_wrapper_class->get_mime_type = get_mime_type;
-	camel_data_wrapper_class->get_mime_type_field = get_mime_type_field;
-	camel_data_wrapper_class->set_mime_type_field = set_mime_type_field;
-
-	camel_data_wrapper_class->construct_from_stream = construct_from_stream;
-}
-
-static void
-camel_data_wrapper_init (gpointer object, gpointer klass)
-{
-	CamelDataWrapper *camel_data_wrapper = CAMEL_DATA_WRAPPER (object);
-
-	camel_data_wrapper->mime_type = gmime_content_field_new (NULL, NULL);
-}
-
-static void
-camel_data_wrapper_finalize (CamelObject *object)
-{
-	CamelDataWrapper *camel_data_wrapper = CAMEL_DATA_WRAPPER (object);
-
-	if (camel_data_wrapper->mime_type)
-		gmime_content_field_unref (camel_data_wrapper->mime_type);
-
-	if (camel_data_wrapper->stream)
-		camel_object_unref (CAMEL_OBJECT (camel_data_wrapper->stream));
-}
-
-CamelType
-camel_data_wrapper_get_type (void)
-{
-	static CamelType camel_data_wrapper_type = CAMEL_INVALID_TYPE;
-
-	if (camel_data_wrapper_type == CAMEL_INVALID_TYPE) {
-		camel_data_wrapper_type = camel_type_register (CAMEL_OBJECT_TYPE, "CamelDataWrapper",
-							       sizeof (CamelDataWrapper),
-							       sizeof (CamelDataWrapperClass),
-							       (CamelObjectClassInitFunc) camel_data_wrapper_class_init,
-							       NULL,
-							       (CamelObjectInitFunc) camel_data_wrapper_init,
-							       (CamelObjectFinalizeFunc) camel_data_wrapper_finalize);
-	}
-
-	return camel_data_wrapper_type;
-}
-
-static int
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	if (data_wrapper->stream == NULL) {
-		return -1;
-	}
-
-	if (camel_stream_reset (data_wrapper->stream) == -1)
-		return -1;
-
-	return camel_stream_write_to_stream (data_wrapper->stream, stream);
-}
-
-CamelDataWrapper *
-camel_data_wrapper_new(void)
-{
-	return (CamelDataWrapper *)camel_object_new(camel_data_wrapper_get_type());
-}
-
-/**
- * camel_data_wrapper_write_to_stream:
- * @data_wrapper: a data wrapper
- * @stream: stream for data to be written to
- * @ex: a CamelException
- *
- * Writes the data content to @stream in a machine-independent format
- * appropriate for the data. It should be possible to construct an
- * equivalent data wrapper object later by passing this stream to
- * camel_data_construct_from_stream().
- *
- * Return value: the number of bytes written, or -1 if an error occurs.
- **/
-int
-camel_data_wrapper_write_to_stream (CamelDataWrapper *data_wrapper,
-				    CamelStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), -1);
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-
-	return CDW_CLASS (data_wrapper)->write_to_stream (data_wrapper, stream);
-}
-
-static int
-construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	if (data_wrapper->stream)
-		camel_object_unref((CamelObject *)data_wrapper->stream);
-
-	data_wrapper->stream = stream;
-	camel_object_ref (CAMEL_OBJECT (stream));
-	return 0;
-}
-
-/**
- * camel_data_wrapper_construct_from_stream:
- * @data_wrapper: a data wrapper
- * @stream: A stream that can be read from.
- *
- * Constructs the content of the data wrapper from the
- * supplied @stream.
- *
- * Return value: -1 on error.
- **/
-int
-camel_data_wrapper_construct_from_stream (CamelDataWrapper *data_wrapper,
-					  CamelStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), -1);
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-
-	return CDW_CLASS (data_wrapper)->construct_from_stream (data_wrapper, stream);
-}
-
-
-static void
-set_mime_type (CamelDataWrapper *data_wrapper, const gchar *mime_type)
-{
-	gmime_content_field_construct_from_string (data_wrapper->mime_type,
-						   mime_type);
-}
-
-/**
- * camel_data_wrapper_set_mime_type:
- * @data_wrapper: a data wrapper
- * @mime_type: the text representation of a MIME type
- *
- * This sets the data wrapper's MIME type.
- * It might fail, but you won't know. It will allow you to set
- * Content-Type parameters on the data wrapper, which are meaningless.
- * You should not be allowed to change the MIME type of a data wrapper
- * that contains data, or at least, if you do, it should invalidate the
- * data.
- **/
-void
-camel_data_wrapper_set_mime_type (CamelDataWrapper *data_wrapper,
-				  const gchar *mime_type)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (mime_type != NULL);
-
-	CDW_CLASS (data_wrapper)->set_mime_type (data_wrapper, mime_type);
-}
-
-static gchar *
-get_mime_type (CamelDataWrapper *data_wrapper)
-{
-	return gmime_content_field_get_mime_type (data_wrapper->mime_type);
-}
-
-/**
- * camel_data_wrapper_get_mime_type:
- * @data_wrapper: a data wrapper
- *
- * Return value: the text form of the data wrapper's MIME type
- **/
-gchar *
-camel_data_wrapper_get_mime_type (CamelDataWrapper *data_wrapper)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
-
-	return CDW_CLASS (data_wrapper)->get_mime_type (data_wrapper);
-}
-
-
-static GMimeContentField *
-get_mime_type_field (CamelDataWrapper *data_wrapper)
-{
-	return data_wrapper->mime_type;
-}
-
-/**
- * camel_data_wrapper_get_mime_type_field:
- * @data_wrapper: a data wrapper
- *
- * Return value: the parsed form of the data wrapper's MIME type
- **/
-GMimeContentField *
-camel_data_wrapper_get_mime_type_field (CamelDataWrapper *data_wrapper)
-{
-	g_return_val_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper), NULL);
-
-	return CDW_CLASS (data_wrapper)->get_mime_type_field (data_wrapper);
-}
-
-/**
- * camel_data_wrapper_set_mime_type_field:
- * @data_wrapper: a data wrapper
- * @mime_type: the parsed representation of a MIME type
- *
- * This sets the data wrapper's MIME type. It suffers from the same
- * flaws as camel_data_wrapper_set_mime_type.
- **/
-static void
-set_mime_type_field (CamelDataWrapper *data_wrapper,
-		     GMimeContentField *mime_type)
-{
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (data_wrapper));
-	g_return_if_fail (mime_type != NULL);
-
-	if (data_wrapper->mime_type)
-		gmime_content_field_unref (data_wrapper->mime_type);
-	data_wrapper->mime_type = mime_type;
-	if (mime_type)
-		gmime_content_field_ref (data_wrapper->mime_type);
-}
-
-void
-camel_data_wrapper_set_mime_type_field (CamelDataWrapper *data_wrapper,
-					GMimeContentField *mime_type)
-{
-	CDW_CLASS (data_wrapper)->set_mime_type_field (data_wrapper, mime_type);
-}
diff --git a/camel/camel-data-wrapper.h b/camel/camel-data-wrapper.h
deleted file mode 100644
index 4a3074ae20..0000000000
--- a/camel/camel-data-wrapper.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-data-wrapper.h : Abstract class for a data wrapper */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_DATA_WRAPPER_H
-#define CAMEL_DATA_WRAPPER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_DATA_WRAPPER_TYPE     (camel_data_wrapper_get_type ())
-#define CAMEL_DATA_WRAPPER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_DATA_WRAPPER_TYPE, CamelDataWrapper))
-#define CAMEL_DATA_WRAPPER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_DATA_WRAPPER_TYPE, CamelDataWrapperClass))
-#define CAMEL_IS_DATA_WRAPPER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_DATA_WRAPPER_TYPE))
-
-struct _CamelDataWrapper
-{
-	CamelObject parent_object;
-
-	GMimeContentField *mime_type;
-	CamelStream *stream;
-};
-
-typedef struct {
-	CamelObjectClass parent_class;
-
-	/* Virtual methods */
-	void                (*set_output_stream)      (CamelDataWrapper *data_wrapper,
-						       CamelStream *stream);
-	CamelStream *       (*get_output_stream)      (CamelDataWrapper *data_wrapper);
-
-	void                (*set_mime_type)          (CamelDataWrapper *data_wrapper,
-						       const gchar * mime_type);
-	gchar *             (*get_mime_type)          (CamelDataWrapper *data_wrapper);
-	GMimeContentField * (*get_mime_type_field)    (CamelDataWrapper *data_wrapper);
-	void                (*set_mime_type_field)    (CamelDataWrapper *data_wrapper,
-						       GMimeContentField *mime_type_field);
-
-	int                 (*write_to_stream)        (CamelDataWrapper *data_wrapper,
-						       CamelStream *stream);
-
-	int                 (*construct_from_stream)  (CamelDataWrapper *data_wrapper,
-						       CamelStream *);
-} CamelDataWrapperClass;
-
-/* Standard Camel function */
-CamelType camel_data_wrapper_get_type (void);
-
-/* public methods */
-CamelDataWrapper *  camel_data_wrapper_new(void);
-int                 camel_data_wrapper_write_to_stream          (CamelDataWrapper *data_wrapper,
-								 CamelStream *stream);
-void                camel_data_wrapper_set_mime_type            (CamelDataWrapper *data_wrapper,
-								 const gchar *mime_type);
-gchar *             camel_data_wrapper_get_mime_type            (CamelDataWrapper *data_wrapper);
-GMimeContentField * camel_data_wrapper_get_mime_type_field      (CamelDataWrapper *data_wrapper);
-void                camel_data_wrapper_set_mime_type_field      (CamelDataWrapper *data_wrapper,
-								 GMimeContentField *mime_type);
-
-int                 camel_data_wrapper_construct_from_stream    (CamelDataWrapper *data_wrapper,
-								 CamelStream *stream);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_DATA_WRAPPER_H */
diff --git a/camel/camel-exception-list.def b/camel/camel-exception-list.def
deleted file mode 100644
index cdb95b1a81..0000000000
--- a/camel/camel-exception-list.def
+++ /dev/null
@@ -1,36 +0,0 @@
-/* WARNING: Exceptions MUST NOT be renumbered: they need to be
- * consistent across libraries compiled at different times.
- * Categories should be widely separated, old unused exceptions can
- * never be deleted, and new exceptions can be added only to the
- * ends of categories.
- */
-
-CAMEL_EXCEPTION_NONE = 0,
-
-/* Generic exceptions */
-CAMEL_EXCEPTION_INVALID_PARAM,
-CAMEL_EXCEPTION_SYSTEM,
-CAMEL_EXCEPTION_USER_CANCEL,
-
-/* CamelFolderException */
-CAMEL_EXCEPTION_FOLDER_NULL = 100,
-CAMEL_EXCEPTION_FOLDER_INVALID,
-CAMEL_EXCEPTION_FOLDER_INVALID_STATE,
-CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
-CAMEL_EXCEPTION_FOLDER_NON_UID,
-CAMEL_EXCEPTION_FOLDER_INSUFFICIENT_PERMISSION,
-CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
-CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-CAMEL_EXCEPTION_FOLDER_SUMMARY_INVALID,
-
-/* CamelStoreException */
-CAMEL_EXCEPTION_STORE_NULL = 200,
-CAMEL_EXCEPTION_STORE_INVALID,
-CAMEL_EXCEPTION_STORE_NO_FOLDER,
-
-/* CamelServiceException */
-CAMEL_EXCEPTION_SERVICE_NULL = 300,
-CAMEL_EXCEPTION_SERVICE_INVALID,
-CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE
diff --git a/camel/camel-exception.c b/camel/camel-exception.c
deleted file mode 100644
index cf5daff9d3..0000000000
--- a/camel/camel-exception.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-execpetion.c : exception utils */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel-exception.h"
-
-
-
-/**
- * camel_exception_new: allocate a new exception object. 
- * 
- * Create and returns a new exception object.
- * 
- * 
- * Return value: The newly allocated exception object.
- **/
-CamelException *
-camel_exception_new (void)
-{
-	CamelException *ex;
-
-	ex = g_new (CamelException, 1);
-	ex->desc = NULL;
-
-	/* set the Exception Id to NULL */
-	ex->id = CAMEL_EXCEPTION_NONE;
-
-	return ex;
-}
-
-/**
- * camel_exception_init: init a (statically allocated) exception. 
- * 
- * Init an exception. This routine is mainly
- * useful when using a statically allocated
- * exception. 
- * 
- * 
- **/
-void
-camel_exception_init (CamelException *ex)
-{
-	ex->desc = NULL;
-
-	/* set the Exception Id to NULL */
-	ex->id = CAMEL_EXCEPTION_NONE;
-}
-
-
-/**
- * camel_exception_clear: Clear an exception
- * @exception: the exception object
- * 
- * Clear an exception, that is, set the 
- * exception ID to CAMEL_EXCEPTION_NONE and
- * free the description text.
- * If the exception is NULL, this funtion just
- * returns.
- **/
-void 
-camel_exception_clear (CamelException *exception)
-{
-	if (!exception) return;
-	
-	/* free the description text */
-	if (exception->desc)
-		g_free (exception->desc);
-	exception->desc = NULL;
-
-	/* set the Exception Id to NULL */
-	exception->id = CAMEL_EXCEPTION_NONE;
-}
-
-
-
-
-/**
- * camel_exception_free: Free an exception 
- * @exception: The exception object to free
- * 
- * Free an exception object. If the exception
- * is NULL, nothing is done, the routine simply
- * returns.
- **/
-void 
-camel_exception_free (CamelException *exception)
-{
-	if (!exception) return;
-	
-	/* free the description text */
-	if (exception->desc)
-		g_free (exception->desc);
-       	/* free the exeption itself */
-	g_free (exception);
-}
-
-/**
- * camel_exception_set: set an exception 
- * @ex: exception object 
- * @id: exception id 
- * @desc: textual description of the exception
- * 
- * Set the value of an exception. The exception id is 
- * a unique number representing the exception. The 
- * textual description is a small text explaining 
- * what happened and provoked the exception.
- *
- * When @ex is NULL, nothing is done, this routine
- * simply returns.
- *
- **/
-void
-camel_exception_set (CamelException *ex,
-		     ExceptionId id,
-		     const char *desc)
-{
-	/* if no exception is given, do nothing */
-	if (!ex) return;
-
-	ex->id = id;
-
-	/* remove the previous exception description */
-	if (ex->desc)
-		g_free (ex->desc);
-	ex->desc = g_strdup (desc);
-}
-
-
-/**
- * camel_exception_setv: set an exception 
- * @ex: exception object 
- * @id: exception id 
- * @format: format of the description string. The format string is
- * used as in printf().
- * 
- * Set the value of an exception. The exception id is 
- * a unique number representing the exception. The 
- * textual description is a small text explaining 
- * what happened and provoked the exception. 
- * In this version, the string is created from the format 
- * string and the variable argument list.
- *
- * It is safe to say:
- *   camel_exception_setv (ex, ..., camel_exception_get_description (ex), ...);
- *
- * When @ex is NULL, nothing is done, this routine
- * simply returns.
- *
- **/
-void
-camel_exception_setv (CamelException *ex,
-		      ExceptionId id,
-		      const char *format, 
-		      ...)
-{
-	va_list args;
-	gchar *tmp_desc_string;
-	
-	
-	/* if no exception is given, do nothing */
-	if (!ex) return;
-	
-	
-	/* create the temporary exception string */
-	va_start(args, format);
-	tmp_desc_string = g_strdup_vprintf (format, args);
-	va_end (args);
-	
-	
-	/* now set the exception. We don't call
-	   camel_exception_set because we want to 
-	   avoid a useless strdup () */
-	ex->id = id;
-	
-	/* remove the previous exception description */
-	if (ex->desc)
-		g_free (ex->desc);
-	ex->desc = g_strdup (tmp_desc_string);
-	
-}
-
-
-
-
-
-
-
-/**
- * camel_exception_xfer: transfer an exception
- * @ex_dst: Destination exception object 
- * @ex_src: Source exception object
- * 
- * Transfer the content of an exception from
- * an exception object to another. 
- * The destination exception receives the id and
- * the description text of the source exception. 
- **/
-void 
-camel_exception_xfer (CamelException *ex_dst,
-		      CamelException *ex_src)
-{
-	if (ex_dst->desc)
-		g_free (ex_dst->desc);
-
-	ex_dst->id = ex_src->id;
-	ex_dst->desc = ex_src->desc;
-
-	ex_src->desc = NULL;
-	ex_src->id = CAMEL_EXCEPTION_NONE;
-}
-
-
-
-
-
-
-
-/**
- * camel_exception_get_id: get the exception id
- * @ex: The exception object
- * 
- * Return the id of an exception. 
- * If @ex is NULL, return CAMEL_EXCEPTION_NONE;
- * 
- * Return value: Exception ID.
- **/
-ExceptionId
-camel_exception_get_id (CamelException *ex)
-{
-	if (ex)
-		return ex->id;
-	else 
-		return CAMEL_EXCEPTION_NONE;
-}
-
-
-
-
-/**
- * camel_exception_get_description: get the description of an exception.
- * @ex: The exception object
- * 
- * Return the exception description text. 
- * If @ex is NULL, return NULL;
- * 
- * 
- * Return value: Exception description text.
- **/
-const gchar *
-camel_exception_get_description (CamelException *ex)
-{
-	if (ex)
-		return ex->desc;
-	else 
-		return NULL;
-}
diff --git a/camel/camel-exception.h b/camel/camel-exception.h
deleted file mode 100644
index d5c93e5941..0000000000
--- a/camel/camel-exception.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-execpetion.h : exception utils */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-#ifndef CAMEL_EXCEPTION_H
-#define CAMEL_EXCEPTION_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-typedef enum {
-#include "camel-exception-list.def"
-
-} ExceptionId;
-
-
-struct _CamelException {
-	/* do not access the fields directly */
-	ExceptionId id;
-	char *desc;
-
-};
-
-
-
-/* creation and destruction functions */
-CamelException *          camel_exception_new           (void);
-void                      camel_exception_free          (CamelException *exception);
-void                      camel_exception_init          (CamelException *ex);
-
-
-/* exception content manipulation */
-void                      camel_exception_clear         (CamelException *exception);
-void                      camel_exception_set           (CamelException *ex,
-							 ExceptionId id,
-							 const char *desc);
-void                      camel_exception_setv          (CamelException *ex,
-							 ExceptionId id,
-							 const char *format,  
-							 ...);
-
-
-/* exception content transfer */
-void                      camel_exception_xfer          (CamelException *ex_dst,
-							 CamelException *ex_src);
-
-
-/* exception content retrieval */
-ExceptionId               camel_exception_get_id        (CamelException *ex);
-const gchar *             camel_exception_get_description (CamelException *ex);
-
-#define camel_exception_is_set(ex) (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_EXCEPTION_H */
-
diff --git a/camel/camel-folder-search.c b/camel/camel-folder-search.c
deleted file mode 100644
index 1c68f369ee..0000000000
--- a/camel/camel-folder-search.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-/* This is a helper class for folders to implement the search function.
-   It implements enough to do basic searches on folders that can provide
-   an in-memory summary and a body index. */
-
-#include 
-#include 
-#include 
-
-#include "camel-folder-search.h"
-#include "string-utils.h"
-
-#define d(x) x
-#define r(x) x
-
-struct _CamelFolderSearchPrivate {
-};
-
-#define _PRIVATE(o) (((CamelFolderSearch *)(o))->priv)
-
-static ESExpResult *search_header_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search);
-static ESExpResult *search_match_all(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *search);
-static ESExpResult *search_body_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search);
-static ESExpResult *search_user_flag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-static ESExpResult *search_user_tag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-static ESExpResult *search_get_sent_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-static ESExpResult *search_get_received_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-static ESExpResult *search_get_current_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-static ESExpResult *search_dummy(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search);
-
-static void camel_folder_search_class_init (CamelFolderSearchClass *klass);
-static void camel_folder_search_init       (CamelFolderSearch *obj);
-static void camel_folder_search_finalize   (CamelObject *obj);
-
-static CamelObjectClass *camel_folder_search_parent;
-
-static void
-camel_folder_search_class_init (CamelFolderSearchClass *klass)
-{
-	camel_folder_search_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
-
-	klass->match_all = search_match_all;
-	klass->body_contains = search_body_contains;
-	klass->header_contains = search_header_contains;
-	klass->user_tag = search_user_tag;
-	klass->user_flag = search_user_flag;
-	klass->get_sent_date = search_get_sent_date;
-	klass->get_received_date = search_get_received_date;
-	klass->get_current_date = search_get_current_date;
-}
-
-static void
-camel_folder_search_init (CamelFolderSearch *obj)
-{
-	struct _CamelFolderSearchPrivate *p;
-
-	p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
-
-	obj->sexp = e_sexp_new();
-}
-
-static void
-camel_folder_search_finalize (CamelObject *obj)
-{
-	CamelFolderSearch *search = (CamelFolderSearch *)obj;
-	if (search->sexp)
-		camel_object_unref((CamelObject *)search->sexp);
-
-	g_free(search->last_search);
-}
-
-CamelType
-camel_folder_search_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_object_get_type (), "CamelFolderSearch",
-					    sizeof (CamelFolderSearch),
-					    sizeof (CamelFolderSearchClass),
-					    (CamelObjectClassInitFunc) camel_folder_search_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_folder_search_init,
-					    (CamelObjectFinalizeFunc) camel_folder_search_finalize);
-	}
-	
-	return type;
-}
-
-#ifdef offsetof
-#define CAMEL_STRUCT_OFFSET(type, field)        ((gint) offsetof (type, field))
-#else
-#define CAMEL_STRUCT_OFFSET(type, field)        ((gint) ((gchar*) &((type *) 0)->field))
-#endif
-
-struct {
-	char *name;
-	int offset;
-	int flags;		/* 0x02 = immediate, 0x01 = always enter */
-} builtins[] = {
-	/* these have default implementations in e-sexp */
-	{ "and", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, and), 2 },
-	{ "or", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, or), 2 },
-	{ "not", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, not), 2 },
-	{ "<", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, lt), 2 },
-	{ ">", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, gt), 2 },
-	{ "=", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, eq), 2 },
-
-	/* these we have to use our own default if there is none */
-	/* they should all be defined in the language? so it poarses, or should they not?? */
-	{ "match-all", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, match_all), 3 },
-	{ "body-contains", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, body_contains), 1 },
-	{ "header-contains", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, header_contains), 1 },
-	{ "user-tag", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, user_tag), 1 },
-	{ "user-flag", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, user_flag), 1 },
-	{ "get-sent-date", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, get_sent_date), 1 },
-	{ "get-received-date", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, get_received_date), 1 },
-	{ "get-current-date", CAMEL_STRUCT_OFFSET(CamelFolderSearchClass, get_current_date), 1 }
-};
-
-void
-camel_folder_search_construct (CamelFolderSearch *search)
-{
-	int i;
-	CamelFolderSearchClass *klass = (CamelFolderSearchClass *)CAMEL_OBJECT_GET_CLASS(search);
-
-	for (i=0;is.type));
-			func = (void *)search_dummy;
-		}
-		if (func != NULL) {
-			if (builtins[i].flags&2) {
-				e_sexp_add_ifunction(search->sexp, 0, builtins[i].name, (ESExpIFunc *)func, search);
-			} else {
-				e_sexp_add_function(search->sexp, 0, builtins[i].name, (ESExpFunc *)func, search);
-			}
-		}
-	}
-}
-
-/**
- * camel_folder_search_new:
- *
- * Create a new CamelFolderSearch object.
- * 
- * A CamelFolderSearch is a subclassable, extensible s-exp
- * evaluator which enforces a particular set of s-expressions.
- * Particular methods may be overriden by an implementation to
- * implement a search for any sort of backend.
- *
- * Return value: A new CamelFolderSearch widget.
- **/
-CamelFolderSearch *
-camel_folder_search_new (void)
-{
-	CamelFolderSearch *new = CAMEL_FOLDER_SEARCH ( camel_object_new (camel_folder_search_get_type ()));
-
-	camel_folder_search_construct(new);
-	return new;
-}
-
-/**
- * camel_folder_search_set_folder:
- * @search:
- * @folder: A folder.
- * 
- * Set the folder attribute of the search.  This is currently unused, but
- * could be used to perform a slow-search when indexes and so forth are not
- * available.  Or for use by subclasses.
- **/
-void
-camel_folder_search_set_folder(CamelFolderSearch *search, CamelFolder *folder)
-{
-	search->folder = folder;
-}
-
-/**
- * camel_folder_search_set_summary:
- * @search: 
- * @summary: An array of CamelMessageInfo pointers.
- * 
- * Set the array of summary objects representing the span of the search.
- *
- * If this is not set, then a subclass must provide the functions
- * for searching headers and for the match-all operator.
- **/
-void
-camel_folder_search_set_summary(CamelFolderSearch *search, GPtrArray *summary)
-{
-	search->summary = summary;
-}
-
-/**
- * camel_folder_search_set_body_index:
- * @search: 
- * @index: 
- * 
- * Set the index (ibex) representing the contents of all messages
- * in this folder.  If this is not set, then the folder implementation
- * should sub-class the CamelFolderSearch and provide its own
- * body-contains function.
- **/
-void
-camel_folder_search_set_body_index(CamelFolderSearch *search, ibex *index)
-{
-	search->body_index = index;
-}
-
-/**
- * camel_folder_search_execute_expression:
- * @search: 
- * @expr: 
- * @ex: 
- * 
- * Execute the search expression @expr, returning an array of
- * all matches as a GPtrArray of uid's of matching messages.
- *
- * Note that any settings such as set_body_index(), set_folder(),
- * and so on are reset to #NULL once the search has completed.
- *
- * TODO: The interface should probably return summary items instead
- * (since they are much more useful to any client).
- * 
- * Return value: A GPtrArray of strings of all matching messages.
- * This must only be freed by camel_folder_search_free_result.
- **/
-GPtrArray *
-camel_folder_search_execute_expression(CamelFolderSearch *search, const char *expr, CamelException *ex)
-{
-	ESExpResult *r;
-	GPtrArray *matches = g_ptr_array_new ();
-	int i;
-	GHashTable *results;
-
-	/* only re-parse if the search has changed */
-	if (search->last_search == NULL
-	    || strcmp(search->last_search, expr)) {
-		e_sexp_input_text(search->sexp, expr, strlen(expr));
-		e_sexp_parse(search->sexp);
-		g_free(search->last_search);
-		search->last_search = g_strdup(expr);
-	}
-	r = e_sexp_eval(search->sexp);
-
-	/* now create a folder summary to return?? */
-	if (r
-	    && r->type == ESEXP_RES_ARRAY_PTR) {
-		d(printf("got result ...\n"));
-		if (search->summary) {
-			/* reorder result in summary order */
-			results = g_hash_table_new(g_str_hash, g_str_equal);
-			for (i=0;ivalue.ptrarray->len;i++) {
-				d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i)));
-				g_hash_table_insert(results, g_ptr_array_index(r->value.ptrarray, i), (void *)1);
-			}
-			for (i=0;isummary->len;i++) {
-				CamelMessageInfo *info = g_ptr_array_index(search->summary, i);
-				if (g_hash_table_lookup(results, info->uid)) {
-					g_ptr_array_add(matches, g_strdup(info->uid));
-				}
-			}
-			g_hash_table_destroy(results);
-		} else {
-			for (i=0;ivalue.ptrarray->len;i++) {
-				d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i)));
-				g_ptr_array_add(matches, g_strdup(g_ptr_array_index(r->value.ptrarray, i)));
-			}
-		}
-		e_sexp_result_free(r);
-	} else {
-		printf("no result!\n");
-	}
-
-	search->folder = NULL;
-	search->summary = NULL;
-	search->current = NULL;
-	search->body_index = NULL;
-
-	return matches;
-}
-
-void camel_folder_search_free_result(CamelFolderSearch *search, GPtrArray *result)
-{
-	int i;
-
-	for (i=0;ilen;i++)
-		g_free(g_ptr_array_index(result, i));
-	g_ptr_array_free(result, TRUE);
-}
-
-/* dummy function, returns false always, or an empty match array */
-static ESExpResult *
-search_dummy(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
-{
-	ESExpResult *r;
-
-	if (search->current == NULL) {
-		r = e_sexp_result_new(ESEXP_RES_BOOL);
-		r->value.bool = FALSE;
-	} else {
-		r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-		r->value.ptrarray = g_ptr_array_new();
-	}
-
-	return r;
-}
-
-static ESExpResult *
-search_match_all(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *search)
-{
-	int i;
-	ESExpResult *r, *r1;
-
-	if (argc>1) {
-		g_warning("match-all only takes a single argument, other arguments ignored");
-	}
-	r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-	r->value.ptrarray = g_ptr_array_new();
-
-	if (search->summary == NULL) {
-		/* TODO: make it work - e.g. use the folder and so forth for a slower search */
-		g_warning("No summary supplied, match-all doesn't work with no summary");
-		return r;
-	}
-
-	/* TODO: Could make this a bit faster in the uncommon case (of match-everything) */
-	for (i=0;isummary->len;i++) {
-		search->current = g_ptr_array_index(search->summary, i);
-		if (argc>0) {
-			r1 = e_sexp_term_eval(f, argv[0]);
-			if (r1->type == ESEXP_RES_BOOL) {
-				if (r1->value.bool)
-					g_ptr_array_add(r->value.ptrarray, search->current->uid);
-			} else {
-				g_warning("invalid syntax, matches require a single bool result");
-			}
-			e_sexp_result_free(r1);
-		} else {
-			g_ptr_array_add(r->value.ptrarray, search->current->uid);
-		}
-	}
-	search->current = NULL;
-
-	return r;
-}
-
-static ESExpResult *
-search_header_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
-{
-	ESExpResult *r;
-	int truth = FALSE;
-
-	r(printf("executing header-contains\n"));
-
-	/* are we inside a match-all? */
-	if (search->current && argc>1
-	    && argv[0]->type == ESEXP_RES_STRING) {
-		char *headername, *header = NULL;
-		char strbuf[32];
-		int i;
-
-		/* only a subset of headers are supported .. */
-		headername = argv[0]->value.string;
-		if (!strcasecmp(headername, "subject")) {
-			header = search->current->subject;
-		} else if (!strcasecmp(headername, "date")) {
-			/* FIXME: not a very useful form of the date */
-			sprintf(strbuf, "%d", (int)search->current->date_sent);
-			header = strbuf;
-		} else if (!strcasecmp(headername, "from")) {
-			header = search->current->from;
-		} else if (!strcasecmp(headername, "to")) {
-			header = search->current->to;
-		} else if (!strcasecmp(headername, "cc")) {
-			header = search->current->cc;
-		} else {
-			g_warning("Performing query on unknown header: %s", headername);
-		}
-
-		if (header) {
-			/* performs an OR of all words */
-			for (i=1;itype == ESEXP_RES_STRING
-				    && e_strstrcase (header, argv[i]->value.string)) {
-					r(printf("%s got a match with %s of %s\n", search->current->uid, header, argv[i]->value.string));
-					truth = TRUE;
-					break;
-				}
-			}
-		}
-	}
-	/* TODO: else, find all matches */
-
-	r = e_sexp_result_new(ESEXP_RES_BOOL);
-	r->value.bool = truth;
-
-	return r;
-}
-
-/* this is just to OR results together */
-struct _glib_sux_donkeys {
-	int count;
-	GPtrArray *uids;
-};
-
-/* or, store all unique values */
-static void
-g_lib_sux_htor(char *key, int value, struct _glib_sux_donkeys *fuckup)
-{
-	g_ptr_array_add(fuckup->uids, key);
-}
-
-static ESExpResult *
-search_body_contains(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
-{
-	ESExpResult *r;
-	int i, j;
-
-	if (search->current) {
-		int truth = FALSE;
-
-		r = e_sexp_result_new(ESEXP_RES_BOOL);
-		if (search->body_index) {
-			for (i=0;itype == ESEXP_RES_STRING) {
-					truth = ibex_find_name(search->body_index, search->current->uid, argv[i]->value.string);
-				} else {
-					g_warning("Invalid type passed to body-contains match function");
-				}
-			}
-		} else {
-			g_warning("Cannot perform indexed body query with no index");
-		}
-		r->value.bool = truth;
-	} else {
-		r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-
-		if (search->body_index) {
-			if (argc==1) {
-				/* common case */
-				r->value.ptrarray = ibex_find(search->body_index, argv[0]->value.string);
-			} else {
-				GHashTable *ht = g_hash_table_new(g_str_hash, g_str_equal);
-				GPtrArray *pa;
-				struct _glib_sux_donkeys lambdafoo;
-
-				/* this sux, perform an or operation on the result(s) of each word */
-				for (i=0;itype == ESEXP_RES_STRING) {
-						pa = ibex_find(search->body_index, argv[i]->value.string);
-						for (j=0;jlen;j++) {
-							g_hash_table_insert(ht, g_ptr_array_index(pa, j), (void *)1);
-						}
-						g_ptr_array_free(pa, FALSE);
-					} else {
-						g_warning("invalid type passed to body-contains");
-					}
-				}
-				lambdafoo.uids = g_ptr_array_new();
-				g_hash_table_foreach(ht, (GHFunc)g_lib_sux_htor, &lambdafoo);
-				r->value.ptrarray = lambdafoo.uids;
-				g_hash_table_destroy(ht);
-			}
-		} else {
-			r->value.ptrarray = g_ptr_array_new();
-		}
-	}
-
-	return r;
-}
-
-static ESExpResult *search_user_flag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
-{
-	ESExpResult *r;
-	int i;
-
-	r(printf("executing user-flag\n"));
-
-	/* are we inside a match-all? */
-	if (search->current) {
-		int truth = FALSE;
-		/* performs an OR of all words */
-		for (i=0;itype == ESEXP_RES_STRING
-			    && camel_flag_get(&search->current->user_flags, argv[i]->value.string)) {
-				truth = TRUE;
-				break;
-			}
-		}
-		r = e_sexp_result_new(ESEXP_RES_BOOL);
-		r->value.bool = truth;
-	} else {
-		r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-		r->value.ptrarray = g_ptr_array_new();
-	}
-
-	return r;
-}
-
-static ESExpResult *search_user_tag(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *search)
-{
-	ESExpResult *r;
-
-	r(printf("executing user-tag\n"));
-
-	/* are we inside a match-all? */
-	if (search->current) {
-		const char *value = NULL;
-		if (argc == 1) {
-			value = camel_tag_get(&search->current->user_tags, argv[0]->value.string);
-		}
-		r = e_sexp_result_new(ESEXP_RES_STRING);
-		r->value.string = g_strdup(value?value:"");
-	} else {
-		r = e_sexp_result_new(ESEXP_RES_ARRAY_PTR);
-		r->value.ptrarray = g_ptr_array_new();
-	}
-
-	return r;
-}
-
-static ESExpResult *
-search_get_sent_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s)
-{
-	ESExpResult *r;
-
-	r(printf("executing get-sent-date\n"));
-
-	/* are we inside a match-all? */
-	if (s->current) {
-		r = e_sexp_result_new (ESEXP_RES_INT);
-
-		r->value.number = s->current->date_sent;
-	} else {
-		r = e_sexp_result_new (ESEXP_RES_ARRAY_PTR);
-		r->value.ptrarray = g_ptr_array_new ();
-	}
-
-	return r;
-}
-
-static ESExpResult *
-search_get_received_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s)
-{
-	ESExpResult *r;
-
-	r(printf("executing get-received-date\n"));
-
-	/* are we inside a match-all? */
-	if (s->current) {
-		r = e_sexp_result_new (ESEXP_RES_INT);
-
-		r->value.number = s->current->date_received;
-	} else {
-		r = e_sexp_result_new (ESEXP_RES_ARRAY_PTR);
-		r->value.ptrarray = g_ptr_array_new ();
-	}
-
-	return r;
-}
-
-static ESExpResult *
-search_get_current_date(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s)
-{
-	ESExpResult *r;
-
-	r(printf("executing get-current-date\n"));
-
-	r = e_sexp_result_new (ESEXP_RES_INT);
-	r->value.number = time (NULL);
-	return r;
-}
-
diff --git a/camel/camel-folder-search.h b/camel/camel-folder-search.h
deleted file mode 100644
index aca9ff27f7..0000000000
--- a/camel/camel-folder-search.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#ifndef _CAMEL_FOLDER_SEARCH_H
-#define _CAMEL_FOLDER_SEARCH_H
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define CAMEL_FOLDER_SEARCH(obj)         CAMEL_CHECK_CAST (obj, camel_folder_search_get_type (), CamelFolderSearch)
-#define CAMEL_FOLDER_SEARCH_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_folder_search_get_type (), CamelFolderSearchClass)
-#define IS_CAMEL_FOLDER_SEARCH(obj)      CAMEL_CHECK_TYPE (obj, camel_folder_search_get_type ())
-
-typedef struct _CamelFolderSearchClass CamelFolderSearchClass;
-
-struct _CamelFolderSearch {
-	CamelObject parent;
-
-	struct _CamelFolderSearchPrivate *priv;
-
-	ESExp *sexp;		/* s-exp evaluator */
-	char *last_search;	/* last searched expression */
-
-	/* these are only valid during the search, and are reset afterwards */
-	CamelFolder *folder;	/* folder for current search */
-	GPtrArray *summary;	/* summary array for current search */
-	CamelMessageInfo *current; /* current message info, when searching one by one */
-	ibex *body_index;
-};
-
-struct _CamelFolderSearchClass {
-	CamelObjectClass parent_class;
-
-	/* general bool/comparison options, usually these wont need to be set, unless it is compiling into another language */
-	ESExpResult * (*and)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-	ESExpResult * (*or)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-	ESExpResult * (*not)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-	ESExpResult * (*lt)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-	ESExpResult * (*gt)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-	ESExpResult * (*eq)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-
-	/* search options */
-	/* (match-all [boolean expression]) Apply match to all messages */
-	ESExpResult * (*match_all)(struct _ESExp *f, int argc, struct _ESExpTerm **argv, CamelFolderSearch *s);
-
-	/* (body-contains "string1" "string2" ...) Returns a list of matches, or true if in single-message mode */
-	ESExpResult * (*body_contains)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-	/* (header-contains "headername" "string1" ...) List of matches, or true if in single-message mode */
-	ESExpResult * (*header_contains)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-	/* (user-flag "flagname" "flagname" ...) If one of user-flag set */
-	ESExpResult * (*user_flag)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-	/* (user-tag "flagname") Returns the value of a user tag.  Can only be used in match-all */
-	ESExpResult * (*user_tag)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-	/* (get-sent-date) Retrieve the date that the message was sent on as a time_t */
-	ESExpResult * (*get_sent_date)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-	/* (get-received-date) Retrieve the date that the message was received on as a time_t */
-	ESExpResult * (*get_received_date)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-
-	/* (get-current-date) Retrieve 'now' as a time_t */
-	ESExpResult * (*get_current_date)(struct _ESExp *f, int argc, struct _ESExpResult **argv, CamelFolderSearch *s);
-};
-
-guint		camel_folder_search_get_type	(void);
-CamelFolderSearch      *camel_folder_search_new	(void);
-void camel_folder_search_construct (CamelFolderSearch *search);
-
-void camel_folder_search_set_folder(CamelFolderSearch *search, CamelFolder *folder);
-void camel_folder_search_set_summary(CamelFolderSearch *search, GPtrArray *summary);
-void camel_folder_search_set_body_index(CamelFolderSearch *search, ibex *index);
-GPtrArray *camel_folder_search_execute_expression(CamelFolderSearch *search, const char *expr, CamelException *ex);
-void camel_folder_search_free_result(CamelFolderSearch *search, GPtrArray *);
-
-#endif /* ! _CAMEL_FOLDER_SEARCH_H */
diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c
deleted file mode 100644
index 71456dbf4d..0000000000
--- a/camel/camel-folder-summary.c
+++ /dev/null
@@ -1,1641 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-folder-summary.h"
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "hash-table-utils.h"
-
-/* this should probably be conditional on it existing */
-#define USE_BSEARCH
-
-#define d(x)
-#define io(x)			/* io debug */
-
-#if 0
-extern int strdup_count, malloc_count, free_count;
-#endif
-
-#define CAMEL_FOLDER_SUMMARY_VERSION (7)
-
-struct _CamelFolderSummaryPrivate {
-	GHashTable *filter_charset;	/* CamelMimeFilterCharset's indexed by source charset */
-
-	CamelMimeFilterIndex *filter_index;
-	CamelMimeFilterBasic *filter_64;
-	CamelMimeFilterBasic *filter_qp;
-	CamelMimeFilterSave *filter_save;
-
-	ibex *index;
-};
-
-#define _PRIVATE(o) (((CamelFolderSummary *)(o))->priv)
-
-/* trivial lists, just because ... */
-struct _node {
-	struct _node *next;
-};
-
-static struct _node *my_list_append(struct _node **list, struct _node *n);
-static int my_list_size(struct _node **list);
-
-static int summary_header_load(CamelFolderSummary *, FILE *);
-static int summary_header_save(CamelFolderSummary *, FILE *);
-
-static CamelMessageInfo * message_info_new(CamelFolderSummary *, struct _header_raw *);
-static CamelMessageInfo * message_info_new_from_parser(CamelFolderSummary *, CamelMimeParser *);
-static CamelMessageInfo * message_info_load(CamelFolderSummary *, FILE *);
-static int		  message_info_save(CamelFolderSummary *, FILE *, CamelMessageInfo *);
-static void		  message_info_free(CamelFolderSummary *, CamelMessageInfo *);
-
-static CamelMessageContentInfo * content_info_new(CamelFolderSummary *, struct _header_raw *);
-static CamelMessageContentInfo * content_info_new_from_parser(CamelFolderSummary *, CamelMimeParser *);
-static CamelMessageContentInfo * content_info_load(CamelFolderSummary *, FILE *);
-static int		         content_info_save(CamelFolderSummary *, FILE *, CamelMessageContentInfo *);
-static void		         content_info_free(CamelFolderSummary *, CamelMessageContentInfo *);
-
-static CamelMessageContentInfo * summary_build_content_info(CamelFolderSummary *s, CamelMimeParser *mp);
-
-static void camel_folder_summary_class_init (CamelFolderSummaryClass *klass);
-static void camel_folder_summary_init       (CamelFolderSummary *obj);
-static void camel_folder_summary_finalize   (CamelObject *obj);
-
-static CamelObjectClass *camel_folder_summary_parent;
-
-static void
-camel_folder_summary_class_init (CamelFolderSummaryClass *klass)
-{
-	camel_folder_summary_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
-
-	klass->summary_header_load = summary_header_load;
-	klass->summary_header_save = summary_header_save;
-
-	klass->message_info_new  = message_info_new;
-	klass->message_info_new_from_parser = message_info_new_from_parser;
-	klass->message_info_load = message_info_load;
-	klass->message_info_save = message_info_save;
-	klass->message_info_free = message_info_free;
-
-	klass->content_info_new  = content_info_new;
-	klass->content_info_new_from_parser = content_info_new_from_parser;
-	klass->content_info_load = content_info_load;
-	klass->content_info_save = content_info_save;
-	klass->content_info_free = content_info_free;
-}
-
-static void
-camel_folder_summary_init (CamelFolderSummary *s)
-{
-	struct _CamelFolderSummaryPrivate *p;
-
-	p = _PRIVATE(s) = g_malloc0(sizeof(*p));
-
-	p->filter_charset = g_hash_table_new(g_strcase_hash, g_strcase_equal);
-
-	s->message_info_size = sizeof(CamelMessageInfo);
-	s->content_info_size = sizeof(CamelMessageContentInfo);
-
-	s->version = CAMEL_FOLDER_SUMMARY_VERSION;
-	s->flags = 0;
-	s->time = 0;
-	s->nextuid = 1;
-
-	s->messages = g_ptr_array_new();
-	s->messages_uid = g_hash_table_new(g_str_hash, g_str_equal);
-}
-
-static void free_o_name(void *key, void *value, void *data)
-{
-	camel_object_unref((CamelObject *)value);
-	g_free(key);
-}
-
-static void
-camel_folder_summary_finalize (CamelObject *obj)
-{
-	struct _CamelFolderSummaryPrivate *p;
-	CamelFolderSummary *s = (CamelFolderSummary *)obj;
-
-	p = _PRIVATE(obj);
-
-	camel_folder_summary_clear(s);
-	g_ptr_array_free(s->messages, TRUE);
-	g_hash_table_destroy(s->messages_uid);
-
-	g_hash_table_foreach(p->filter_charset, free_o_name, 0);
-	g_hash_table_destroy(p->filter_charset);
-
-	g_free(s->summary_path);
-
-	if (p->filter_index)
-		camel_object_unref ((CamelObject *)p->filter_index);
-	if (p->filter_64)
-		camel_object_unref ((CamelObject *)p->filter_64);
-	if (p->filter_qp)
-		camel_object_unref ((CamelObject *)p->filter_qp);
-	if (p->filter_save)
-		camel_object_unref ((CamelObject *)p->filter_save);
-
-	g_free(p);
-}
-
-CamelType
-camel_folder_summary_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_object_get_type (), "CamelFolderSummary",
-					    sizeof (CamelFolderSummary),
-					    sizeof (CamelFolderSummaryClass),
-					    (CamelObjectClassInitFunc) camel_folder_summary_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_folder_summary_init,
-					    (CamelObjectFinalizeFunc) camel_folder_summary_finalize);
-	}
-	
-	return type;
-}
-
-/**
- * camel_folder_summary_new:
- *
- * Create a new CamelFolderSummary object.
- * 
- * Return value: A new CamelFolderSummary widget.
- **/
-CamelFolderSummary *
-camel_folder_summary_new (void)
-{
-	CamelFolderSummary *new = CAMEL_FOLDER_SUMMARY ( camel_object_new (camel_folder_summary_get_type ()));
-	return new;
-}
-
-
-void camel_folder_summary_set_filename(CamelFolderSummary *s, const char *name)
-{
-	g_free(s->summary_path);
-	s->summary_path = g_strdup(name);
-}
-
-void camel_folder_summary_set_index(CamelFolderSummary *s, ibex *index)
-{
-	struct _CamelFolderSummaryPrivate *p = _PRIVATE(s);
-
-	p->index = index;
-}
-
-void camel_folder_summary_set_build_content(CamelFolderSummary *s, gboolean state)
-{
-	s->build_content = state;
-}
-
-int
-camel_folder_summary_count(CamelFolderSummary *s)
-{
-	return s->messages->len;
-}
-
-CamelMessageInfo *
-camel_folder_summary_index(CamelFolderSummary *s, int i)
-{
-	if (imessages->len)
-		return g_ptr_array_index(s->messages, i);
-	return NULL;
-}
-
-CamelMessageInfo *
-camel_folder_summary_uid(CamelFolderSummary *s, const char *uid)
-{
-	return g_hash_table_lookup(s->messages_uid, uid);
-}
-
-guint32 camel_folder_summary_next_uid(CamelFolderSummary *s)
-{
-	guint32 uid = s->nextuid++;
-
-	/* FIXME: sync this to disk */
-/*	summary_header_save(s);*/
-	return uid;
-}
-
-char *
-camel_folder_summary_next_uid_string (CamelFolderSummary *s)
-{
-	return g_strdup_printf ("%u", camel_folder_summary_next_uid (s));
-}
-
-/* loads the content descriptions, recursively */
-static CamelMessageContentInfo *
-perform_content_info_load(CamelFolderSummary *s, FILE *in)
-{
-	int i;
-	guint32 count;
-	CamelMessageContentInfo *ci, *part;
-
-	ci = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_load(s, in);
-	camel_folder_summary_decode_uint32(in, &count);
-	for (i=0;ichilds, (struct _node *)part);
-			part->parent = ci;
-		} else {
-			g_warning("Summary file format messed up?");
-		}
-	}
-	return ci;
-}
-
-int
-camel_folder_summary_load(CamelFolderSummary *s)
-{
-	FILE *in;
-	int i;
-	CamelMessageInfo *mi;
-
-	g_assert(s->summary_path);
-
-	in = fopen(s->summary_path, "r");
-	if ( in == NULL ) {
-		return -1;
-	}
-
-	if ( ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_load(s, in) == -1) {
-		fclose(in);
-		return -1;
-	}
-
-	/* now read in each message ... */
-	/* FIXME: check returns */
-	for (i=0;isaved_count;i++) {
-		mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_load(s, in);
-
-		if (s->build_content) {
-			mi->content = perform_content_info_load(s, in);
-		}
-
-		camel_folder_summary_add(s, mi);
-	}
-	
-	if (fclose(in) == -1)
-		return -1;
-
-	s->flags &= ~CAMEL_SUMMARY_DIRTY;
-
-	return 0;
-}
-
-/* saves the content descriptions, recursively */
-static int
-perform_content_info_save(CamelFolderSummary *s, FILE *out, CamelMessageContentInfo *ci)
-{
-	CamelMessageContentInfo *part;
-
-	((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_save(s, out, ci);
-	camel_folder_summary_encode_uint32(out, my_list_size((struct _node **)&ci->childs));
-	part = ci->childs;
-	while (part) {
-		perform_content_info_save(s, out, part);
-		part = part->next;
-	}
-	return 0;
-}
-
-int
-camel_folder_summary_save(CamelFolderSummary *s)
-{
-	FILE *out;
-	int fd;
-	int i;
-	guint32 count;
-	CamelMessageInfo *mi;
-
-	g_assert(s->summary_path);
-
-	if ((s->flags & CAMEL_SUMMARY_DIRTY) == 0)
-		return 0;
-
-	fd = open(s->summary_path, O_RDWR|O_CREAT, 0600);
-	if (fd == -1)
-		return -1;
-	out = fdopen(fd, "w");
-	if ( out == NULL ) {
-		close(fd);
-		return -1;
-	}
-
-	io(printf("saving header\n"));
-
-	if ( ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_save(s, out) == -1) {
-		fclose(out);
-		return -1;
-	}
-
-	/* now write out each message ... */
-	/* FIXME: check returns */
-	count = camel_folder_summary_count(s);
-	for (i=0;imessage_info_save(s, out, mi);
-
-		if (s->build_content) {
-			perform_content_info_save(s, out, mi->content);
-		}
-	}
-	if (fclose(out) == -1)
-		return -1;
-
-	s->flags &= ~CAMEL_SUMMARY_DIRTY;
-	return 0;
-}
-
-void camel_folder_summary_add(CamelFolderSummary *s, CamelMessageInfo *info)
-{
-	if (info == NULL)
-		return;
-retry:
-	if (info->uid == NULL) {
-		info->uid = camel_folder_summary_next_uid_string (s);
-	}
-	if (g_hash_table_lookup(s->messages_uid, info->uid)) {
-		g_warning("Trying to insert message with clashing uid (%s).  new uid re-assigned", info->uid);
-		g_free(info->uid);
-		info->uid = NULL;
-		info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-		goto retry;
-	}
-
-	g_ptr_array_add(s->messages, info);
-	g_hash_table_insert(s->messages_uid, info->uid, info);
-	s->flags |= CAMEL_SUMMARY_DIRTY;
-}
-
-CamelMessageInfo *camel_folder_summary_add_from_header(CamelFolderSummary *s, struct _header_raw *h)
-{
-	CamelMessageInfo *info = NULL;
-
-	info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s))) -> message_info_new(s, h);
-	camel_folder_summary_add(s, info);
-
-	return info;
-}
-
-CamelMessageInfo *camel_folder_summary_add_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
-{
-	CamelMessageInfo *info = NULL;
-	char *buffer;
-	int len;
-	struct _CamelFolderSummaryPrivate *p = _PRIVATE(s);
-
-	/* should this check the parser is in the right state, or assume it is?? */
-
-	if (camel_mime_parser_step(mp, &buffer, &len) != HSCAN_EOF) {
-		info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new_from_parser(s, mp);
-
-		camel_mime_parser_unstep(mp);
-
-		camel_folder_summary_add(s, info);
-
-		if (p->index) {
-			if (p->filter_index == NULL)
-				p->filter_index = camel_mime_filter_index_new_ibex(p->index);
-			camel_mime_filter_index_set_name(p->filter_index, info->uid);
-			ibex_unindex(p->index, info->uid);
-		}
-
-		/* build the content info, if we're supposed to */
-		if (s->build_content) {
-			info->content = summary_build_content_info(s, mp);
-			if (info->content->pos != -1)
-				info->size = info->content->endpos - info->content->pos;
-		} else {
-			camel_mime_parser_drop_step(mp);
-		}
-	}
-	return info;
-}
-
-static void
-perform_content_info_free(CamelFolderSummary *s, CamelMessageContentInfo *ci)
-{
-	CamelMessageContentInfo *pw, *pn;
-
-	pw = ci->childs;
-	((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_free(s, ci);
-	while (pw) {
-		pn = pw->next;
-		perform_content_info_free(s, pw);
-		pw = pn;
-	}
-}
-
-void
-camel_folder_summary_touch(CamelFolderSummary *s)
-{
-	s->flags |= CAMEL_SUMMARY_DIRTY;
-}
-
-void
-camel_folder_summary_clear(CamelFolderSummary *s)
-{
-	int i;
-
-	if (camel_folder_summary_count(s) == 0)
-		return;
-
-	for (i=0;icontent;
-
-		((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_free(s, mi);		
-		if (s->build_content && ci) {
-			perform_content_info_free(s, ci);
-		}
-	}
-
-	g_ptr_array_set_size(s->messages, 0);
-	g_hash_table_destroy(s->messages_uid);
-	s->messages_uid = g_hash_table_new(g_str_hash, g_str_equal);
-	s->flags |= CAMEL_SUMMARY_DIRTY;
-}
-
-void camel_folder_summary_remove(CamelFolderSummary *s, CamelMessageInfo *info)
-{
-	CamelMessageContentInfo *ci = info->content;
-
-	g_hash_table_remove(s->messages_uid, info->uid);
-	g_ptr_array_remove(s->messages, info);
-	((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_free(s, info);
-	if (s->build_content && ci) {
-		perform_content_info_free(s, ci);
-	}
-	s->flags |= CAMEL_SUMMARY_DIRTY;
-}
-
-void camel_folder_summary_remove_uid(CamelFolderSummary *s, const char *uid)
-{
-        CamelMessageInfo *oldinfo;
-        char *olduid;
-
-        if (g_hash_table_lookup_extended(s->messages_uid, uid, (void *)&olduid, (void *)&oldinfo)) {
-		camel_folder_summary_remove(s, oldinfo);
-		g_free(olduid);
-        }
-}
-
-int
-camel_folder_summary_encode_uint32(FILE *out, guint32 value)
-{
-	int i;
-
-	io(printf("Encoding int %u\n", value));
-
-	for (i=28;i>0;i-=7) {
-		if (value >= (1<>i) & 0x7f;
-			if (fputc(c, out) == -1)
-				return -1;
-		}
-	}
-	return fputc(value | 0x80, out);
-}
-
-int
-camel_folder_summary_decode_uint32(FILE *in, guint32 *dest)
-{
-        gint32 value=0, v;
-
-        /* until we get the last byte, keep decoding 7 bits at a time */
-        while ( ((v = fgetc(in)) & 0x80) == 0 && v!=EOF) {
-                value |= v;
-                value <<= 7;
-        }
-	if (v == EOF) {
-		*dest = value>>7;
-		return 01;
-	}
-	*dest = value | (v&0x7f);
-
-	io(printf("Decoding int %u\n", *dest));
-
-        return 0;
-}
-
-int
-camel_folder_summary_encode_fixed_int32(FILE *out, gint32 value)
-{
-	guint32 save;
-
-	save = htonl(value);
-	if (fwrite(&save, sizeof(save), 1, out) != 1)
-		return -1;
-	return 0;
-}
-
-int
-camel_folder_summary_decode_fixed_int32(FILE *in, gint32 *dest)
-{
-	guint32 save;
-
-	if (fread(&save, sizeof(save), 1, in) == 1) {
-		*dest = ntohl(save);
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-/* should be sorted, for binary search */
-/* This is a tokenisation mechanism for strings written to the
-   summary - to save space.
-   This list can have at most 31 words. */
-static char * tokens[] = {
-	"7bit",
-	"8bit",
-	"alternative",
-	"application",
-	"base64",
-	"boundary",
-	"charset",
-	"filename",
-	"html",
-	"image",
-	"iso-8859-1",
-	"iso-8859-8",
-	"message",
-	"mixed",
-	"multipart",
-	"name",
-	"octet-stream",
-	"parallel",
-	"plain",
-	"postscript",
-	"quoted-printable",
-	"related",
-	"rfc822",
-	"text",
-	"us-ascii",		/* 25 words */
-};
-
-#define tokens_len (sizeof(tokens)/sizeof(tokens[0]))
-
-/* baiscally ...
-    0 = null
-    1-tokens_len == tokens[id-1]
-    >=32 string, length = n-32
-*/
-
-#ifdef USE_BSEARCH
-static int
-token_search_cmp(char *key, char **index)
-{
-	d(printf("comparing '%s' to '%s'\n", key, *index));
-	return strcmp(key, *index);
-}
-#endif
-
-int
-camel_folder_summary_encode_token(FILE *out, char *str)
-{
-	io(printf("Encoding token: '%s'\n", str));
-
-	if (str == NULL) {
-		return camel_folder_summary_encode_uint32(out, 0);
-	} else {
-		int len = strlen(str);
-		int i, token=-1;
-
-		if (len <= 16) {
-			char lower[32];
-			char **match;
-
-			for (i=0;i 10240) {
-		g_warning("Got broken string header length: %d bytes", len);
-		*str = NULL;
-		return -1;
-	} else {
-		len -= 32;
-		ret = g_malloc(len+1);
-		if (fread(ret, len, 1, in) != 1) {
-			g_free(ret);
-			*str = NULL;
-			return -1;
-		}
-		ret[len]=0;
-	}
-
-	io(printf("Token = '%s'\n", ret));
-
-	*str = ret;
-	return 0;
-}
-
-int
-camel_folder_summary_encode_string(FILE *out, char *str)
-{
-	register int len;
-
-	io(printf("Encoding string: '%s'\n", str));
-
-	if (str == NULL)
-		return camel_folder_summary_encode_uint32(out, 0);
-
-	len = strlen(str);
-	if (camel_folder_summary_encode_uint32(out, len+1) == -1)
-		return -1;
-	if (fwrite(str, len, 1, out) == 1)
-		return 0;
-	return -1;
-}
-
-
-int
-camel_folder_summary_decode_string(FILE *in, char **str)
-{
-	gint32 len;
-	register char *ret;
-
-	io(printf("Decode string ...\n", str));
-
-	if (camel_folder_summary_decode_uint32(in, &len) == -1) {
-		*str = NULL;
-		return -1;
-	}
-
-	len--;
-	if (len < 0) {
-		*str = NULL;
-		io(printf("String = '%s'\n", *str));
-		return -1;
-	}
-
-	ret = g_malloc(len+1);
-	if (fread(ret, len, 1, in) != 1) {
-		g_free(ret);
-		*str = NULL;
-		return -1;
-	}
-
-	io(printf("String = '%s'\n", ret));
-
-	ret[len] = 0;
-	*str = ret;
-	return 0;
-}
-
-void
-camel_folder_summary_offset_content(CamelMessageContentInfo *content, off_t offset)
-{
-	content->pos += offset;
-	content->bodypos += offset;
-	content->endpos += offset;
-	content = content->childs;
-	while (content) {
-		camel_folder_summary_offset_content(content, offset);
-		content = content->next;
-	}
-}
-
-static struct _node *
-my_list_append(struct _node **list, struct _node *n)
-{
-	struct _node *ln = (struct _node *)list;
-	while (ln->next)
-		ln = ln->next;
-	n->next = 0;
-	ln->next = n;
-	return n;
-}
-
-static int
-my_list_size(struct _node **list)
-{
-	int len = 0;
-	struct _node *ln = (struct _node *)list;
-	while (ln->next) {
-		ln = ln->next;
-		len++;
-	}
-	return len;
-}
-
-static int
-summary_header_load(CamelFolderSummary *s, FILE *in)
-{
-	gint32 version, flags, nextuid, count, utime;
-
-	fseek(in, 0, SEEK_SET);
-
-	io(printf("Loading header\n"));
-
-	if (camel_folder_summary_decode_fixed_int32(in, &version) == -1
-	    || camel_folder_summary_decode_fixed_int32(in, &flags) == -1
-	    || camel_folder_summary_decode_fixed_int32(in, &nextuid) == -1
-	    || camel_folder_summary_decode_fixed_int32(in, &utime) == -1
-	    || camel_folder_summary_decode_fixed_int32(in, &count) == -1) {
-		return -1;
-	}
-
-	s->nextuid = nextuid;
-	s->flags = flags;
-	s->time = (time_t) utime;
-	s->saved_count = count;
-	if (s->version != version) {
-		g_warning("Summary header version mismatch");
-		return -1;
-	}
-	return 0;
-}
-
-static int
-summary_header_save(CamelFolderSummary *s, FILE *out)
-{
-	fseek(out, 0, SEEK_SET);
-
-	io(printf("Savining header\n"));
-
-	camel_folder_summary_encode_fixed_int32(out, s->version);
-	camel_folder_summary_encode_fixed_int32(out, s->flags);
-	camel_folder_summary_encode_fixed_int32(out, s->nextuid);
-	camel_folder_summary_encode_fixed_int32(out, s->time);
-	return camel_folder_summary_encode_fixed_int32(out, camel_folder_summary_count(s));
-}
-
-/* are these even useful for anything??? */
-static CamelMessageInfo * message_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
-{
-	CamelMessageInfo *mi = NULL;
-	int state;
-
-	state = camel_mime_parser_state(mp);
-	switch (state) {
-	case HSCAN_HEADER:
-	case HSCAN_MESSAGE:
-	case HSCAN_MULTIPART:
-		mi = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_new(s, camel_mime_parser_headers_raw(mp));
-		break;
-	default:
-		g_error("Invalid parser state");
-	}
-
-	return mi;
-}
-
-static CamelMessageContentInfo * content_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
-{
-	CamelMessageContentInfo *ci = NULL;
-
-	switch (camel_mime_parser_state(mp)) {
-	case HSCAN_HEADER:
-	case HSCAN_MESSAGE:
-	case HSCAN_MULTIPART:
-		ci = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_new(s, camel_mime_parser_headers_raw(mp));
-		if (ci) {
-			ci->type = camel_mime_parser_content_type(mp);
-			header_content_type_ref(ci->type);
-		}
-		break;
-	default:
-		g_error("Invalid parser state");
-	}
-
-	return ci;
-}
-
-char *
-camel_summary_format_address(struct _header_raw *h, const char *name)
-{
-	struct _header_address *addr;
-	const char *text;
-	char *ret;
-
-	text = header_raw_find(&h, name, NULL);
-	addr = header_address_decode(text);
-	if (addr) {
-		ret = header_address_list_format(addr);
-		header_address_list_clear(&addr);
-	} else {
-		ret = g_strdup(text);
-	}
-	return ret;
-}
-
-char *
-camel_summary_format_string(struct _header_raw *h, const char *name)
-{
-	const char *text;
-
-	text = header_raw_find(&h, name, NULL);
-	if (text) {
-		while (isspace(*text))
-			text++;
-		return header_decode_string(text);
-	} else {
-		return NULL;
-	}
-}
-
-static CamelMessageInfo *
-message_info_new(CamelFolderSummary *s, struct _header_raw *h)
-{
-	CamelMessageInfo *mi;
-	const char *received;
-
-	mi = g_malloc0(s->message_info_size);
-
-	mi->subject = camel_summary_format_string(h, "subject");
-	mi->from = camel_summary_format_address(h, "from");
-	mi->to = camel_summary_format_address(h, "to");
-	mi->cc = camel_summary_format_address(h, "cc");
-	mi->user_flags = NULL;
-	mi->user_tags = NULL;
-	mi->date_sent = header_decode_date(header_raw_find(&h, "date", NULL), NULL);
-	received = header_raw_find(&h, "received", NULL);
-	if (received)
-		received = strrchr(received, ';');
-	if (received)
-		mi->date_received = header_decode_date(received + 1, NULL);
-	else
-		mi->date_received = 0;
-	mi->message_id = header_msgid_decode(header_raw_find(&h, "message-id", NULL));
-	/* if we have a references, use that, otherwise, see if we have an in-reply-to
-	   header, with parsable content, otherwise *shrug* */
-	mi->references = header_references_decode(header_raw_find(&h, "references", NULL));
-	if (mi->references == NULL)
-		mi->references = header_references_decode(header_raw_find(&h, "in-reply-to", NULL));
-	return mi;
-}
-
-
-static CamelMessageInfo *
-message_info_load(CamelFolderSummary *s, FILE *in)
-{
-	CamelMessageInfo *mi;
-	guint32 udate_sent, udate_received;
-	guint count;
-	int i;
-
-	mi = g_malloc0(s->message_info_size);
-
-	io(printf("Loading message info\n"));
-
-	camel_folder_summary_decode_string(in, &mi->uid);
-	camel_folder_summary_decode_uint32(in, &mi->flags);
-	camel_folder_summary_decode_uint32(in, &udate_sent);	/* warnings, leave them here */
-	camel_folder_summary_decode_uint32(in, &udate_received);
-/*	ms->xev_offset = camel_folder_summary_decode_uint32(in);*/
-	camel_folder_summary_decode_string(in, &mi->subject);
-	camel_folder_summary_decode_string(in, &mi->from);
-	camel_folder_summary_decode_string(in, &mi->to);
-	camel_folder_summary_decode_string(in, &mi->cc);
-	mi->content = NULL;
-
-	mi->date_sent = (time_t) udate_sent;
-	mi->date_received = (time_t) udate_received;
-
-	camel_folder_summary_decode_string(in, &mi->message_id);
-
-	camel_folder_summary_decode_uint32(in, &count);
-	for (i=0;ireferences, id);
-	}
-
-	camel_folder_summary_decode_uint32(in, &count);
-	for (i=0;iuser_flags, name, TRUE);
-		g_free(name);
-	}
-
-	camel_folder_summary_decode_uint32(in, &count);
-	for (i=0;iuser_tags, name, value);
-		g_free(name);
-		g_free(value);
-	}
-
-	return mi;
-}
-
-static int
-message_info_save(CamelFolderSummary *s, FILE *out, CamelMessageInfo *mi)
-{
-	guint32 count;
-	CamelFlag *flag;
-	CamelTag *tag;
-	struct _header_references *refs;
-
-	io(printf("Saving message info\n"));
-
-	camel_folder_summary_encode_string(out, mi->uid);
-	camel_folder_summary_encode_uint32(out, mi->flags);
-	camel_folder_summary_encode_uint32(out, mi->date_sent);
-	camel_folder_summary_encode_uint32(out, mi->date_received);
-/*	camel_folder_summary_encode_uint32(out, ms->xev_offset);*/
-	camel_folder_summary_encode_string(out, mi->subject);
-	camel_folder_summary_encode_string(out, mi->from);
-	camel_folder_summary_encode_string(out, mi->to);
-	camel_folder_summary_encode_string(out, mi->cc);
-
-	camel_folder_summary_encode_string(out, mi->message_id);
-
-	count = header_references_list_size(&mi->references);
-	camel_folder_summary_encode_uint32(out, count);
-	refs = mi->references;
-	while (refs) {
-		camel_folder_summary_encode_string(out, refs->id);
-		refs = refs->next;
-	}
-
-	count = camel_flag_list_size(&mi->user_flags);
-	camel_folder_summary_encode_uint32(out, count);
-	flag = mi->user_flags;
-	while (flag) {
-		camel_folder_summary_encode_string(out, flag->name);
-		flag = flag->next;
-	}
-
-	count = camel_tag_list_size(&mi->user_tags);
-	camel_folder_summary_encode_uint32(out, count);
-	tag = mi->user_tags;
-	while (tag) {
-		camel_folder_summary_encode_string(out, tag->name);
-		camel_folder_summary_encode_string(out, tag->value);
-		tag = tag->next;
-	}
-
-	return ferror(out);
-}
-
-static void
-message_info_free(CamelFolderSummary *s, CamelMessageInfo *mi)
-{
-	camel_message_info_free(mi);
-}
-
-static CamelMessageContentInfo *
-content_info_new(CamelFolderSummary *s, struct _header_raw *h)
-{
-	CamelMessageContentInfo *ci;
-
-	ci = g_malloc0(s->content_info_size);
-
-	ci->id = header_msgid_decode(header_raw_find(&h, "content-id", NULL));
-	ci->description = header_decode_string(header_raw_find(&h, "content-description", NULL));
-	ci->encoding = header_content_encoding_decode(header_raw_find(&h, "content-transfer-encoding", NULL));
-
-	ci->pos = -1;
-	ci->bodypos = -1;
-	ci->endpos = -1;
-	return ci;
-}
-
-static CamelMessageContentInfo *
-content_info_load(CamelFolderSummary *s, FILE *in)
-{
-	CamelMessageContentInfo *ci;
-	char *type, *subtype;
-	guint32 count, i, upos, ubodypos, uendpos;
-	struct _header_content_type *ct;
-
-	io(printf("Loading content info\n"));
-
-	ci = g_malloc0(s->content_info_size);
-
-	camel_folder_summary_decode_uint32(in, &upos);
-	camel_folder_summary_decode_uint32(in, &ubodypos);
-	camel_folder_summary_decode_uint32(in, &uendpos);
-
-	ci->pos = (off_t) upos;
-        ci->bodypos = (off_t) ubodypos;
-	ci->endpos = (off_t) uendpos;
-	
-	camel_folder_summary_decode_token(in, &type);
-	camel_folder_summary_decode_token(in, &subtype);
-	ct = header_content_type_new(type, subtype);
-	g_free(type);		/* can this be removed? */
-	g_free(subtype);
-	camel_folder_summary_decode_uint32(in, &count);
-	for (i=0;itype = ct;
-
-	camel_folder_summary_decode_token(in, &ci->id);
-	camel_folder_summary_decode_token(in, &ci->description);
-	camel_folder_summary_decode_token(in, &ci->encoding);
-
-	ci->childs = NULL;
-	return ci;
-}
-
-static int
-content_info_save(CamelFolderSummary *s, FILE *out, CamelMessageContentInfo *ci)
-{
-	struct _header_content_type *ct;
-	struct _header_param *hp;
-
-	io(printf("Saving content info\n"));
-
-	camel_folder_summary_encode_uint32(out, ci->pos);
-	camel_folder_summary_encode_uint32(out, ci->bodypos);
-	camel_folder_summary_encode_uint32(out, ci->endpos);
-
-	ct = ci->type;
-	if (ct) {
-		camel_folder_summary_encode_token(out, ct->type);
-		camel_folder_summary_encode_token(out, ct->subtype);
-		camel_folder_summary_encode_uint32(out, my_list_size((struct _node **)&ct->params));
-		hp = ct->params;
-		while (hp) {
-			camel_folder_summary_encode_token(out, hp->name);
-			camel_folder_summary_encode_token(out, hp->value);
-			hp = hp->next;
-		}
-	} else {
-		camel_folder_summary_encode_token(out, NULL);
-		camel_folder_summary_encode_token(out, NULL);
-		camel_folder_summary_encode_uint32(out, 0);
-	}
-	camel_folder_summary_encode_token(out, ci->id);
-	camel_folder_summary_encode_token(out, ci->description);
-	return camel_folder_summary_encode_token(out, ci->encoding);
-}
-
-static void
-content_info_free(CamelFolderSummary *s, CamelMessageContentInfo *ci)
-{
-	header_content_type_unref(ci->type);
-	g_free(ci->id);
-	g_free(ci->description);
-	g_free(ci->encoding);
-	g_free(ci);
-}
-
-/*
-  OK
-  Now this is where all the "smarts" happen, where the content info is built,
-  and any indexing and what not is performed
-*/
-
-static CamelMessageContentInfo *
-summary_build_content_info(CamelFolderSummary *s, CamelMimeParser *mp)
-{
-	int state, len;
-	char *buffer;
-	CamelMessageContentInfo *info = NULL;
-	struct _header_content_type *ct;
-	int body;
-	int enc_id = -1, chr_id = -1, idx_id = -1;
-	struct _CamelFolderSummaryPrivate *p = _PRIVATE(s);
-	CamelMimeFilterCharset *mfc;
-	CamelMessageContentInfo *part;
-
-	d(printf("building content info\n"));
-
-	/* start of this part */
-	state = camel_mime_parser_step(mp, &buffer, &len);
-	body = camel_mime_parser_tell(mp);
-
-	info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_new_from_parser(s, mp);
-
-	info->pos = camel_mime_parser_tell_start_headers(mp);
-	info->bodypos = body;
-
-	switch(state) {
-	case HSCAN_HEADER:
-		/* check content type for indexing, then read body */
-		ct = camel_mime_parser_content_type(mp);
-		if (p->index && header_content_type_is(ct, "text", "*")) {
-			char *encoding;
-			const char *charset;
-			
-			d(printf("generating index:\n"));
-			
-			encoding = header_content_encoding_decode(camel_mime_parser_header(mp, "content-transfer-encoding", NULL));
-			if (encoding) {
-				if (!strcasecmp(encoding, "base64")) {
-					d(printf(" decoding base64\n"));
-					if (p->filter_64 == NULL)
-						p->filter_64 = camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
-					enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_64);
-				} else if (!strcasecmp(encoding, "quoted-printable")) {
-					d(printf(" decoding quoted-printable\n"));
-					if (p->filter_qp == NULL)
-						p->filter_qp = camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_DEC);
-					enc_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_qp);
-				} else {
-					d(printf(" ignoring encoding %s\n", encoding));
-				}
-				g_free(encoding);
-			}
-				
-			charset = header_content_type_param(ct, "charset");
-			if (charset!=NULL
-			    && !(strcasecmp(charset, "us-ascii")==0
-				 || strcasecmp(charset, "iso-8859-1")==0)) {
-				d(printf(" Adding conversion filter from %s to iso-8859-1\n", charset));
-				mfc = g_hash_table_lookup(p->filter_charset, charset);
-				if (mfc == NULL) {
-					mfc = camel_mime_filter_charset_new_convert(charset, "iso-8859-1");
-					if (mfc)
-						g_hash_table_insert(p->filter_charset, g_strdup(charset), mfc);
-				}
-				if (mfc) {
-					chr_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)mfc);
-				} else {
-					g_warning("Cannot convert '%s' to 'iso-8859-1', message index may be corrupt", charset);
-				}
-			}
-
-			/* and this filter actually does the indexing */
-			idx_id = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)p->filter_index);
-		}
-		/* and scan/index everything */
-		while (camel_mime_parser_step(mp, &buffer, &len) != HSCAN_BODY_END)
-			;
-		/* and remove the filters */
-		camel_mime_parser_filter_remove(mp, enc_id);
-		camel_mime_parser_filter_remove(mp, chr_id);
-		camel_mime_parser_filter_remove(mp, idx_id);
-		break;
-	case HSCAN_MULTIPART:
-		d(printf("Summarising multipart\n"));
-		while (camel_mime_parser_step(mp, &buffer, &len) != HSCAN_MULTIPART_END) {
-			camel_mime_parser_unstep(mp);
-			part = summary_build_content_info(s, mp);
-			if (part) {
-				part->parent = info;
-				my_list_append((struct _node **)&info->childs, (struct _node *)part);
-			} else {
-				g_error("Parsing failed: could not build part of a multipart");
-			}
-		}
-		break;
-	case HSCAN_MESSAGE:
-		d(printf("Summarising message\n"));
-		part = summary_build_content_info(s, mp);
-		if (part) {
-			part->parent = info;
-			my_list_append((struct _node **)&info->childs, (struct _node *)part);
-		} else {
-			g_error("Parsing failed: no content of a message?");
-		}
-		state = camel_mime_parser_step(mp, &buffer, &len);
-		if (state != HSCAN_MESSAGE_END) {
-			g_error("Bad parser state: Expecing MESSAGE_END or MESSAGE_EOF, got: %d", state);
-			camel_mime_parser_unstep(mp);
-		}
-		break;
-	}
-
-	info->endpos = camel_mime_parser_tell(mp);
-
-	d(printf("finished building content info\n"));
-
-	return info;
-}
-
-gboolean
-camel_flag_get(CamelFlag **list, const char *name)
-{
-	CamelFlag *flag;
-	flag = *list;
-	while (flag) {
-		if (!strcmp(flag->name, name))
-			return TRUE;
-		flag = flag->next;
-	}
-	return FALSE;
-}
-
-void
-camel_flag_set(CamelFlag **list, const char *name, gboolean value)
-{
-	CamelFlag *flag, *tmp;
-
-	/* this 'trick' works because flag->next is the first element */
-	flag = (CamelFlag *)list;
-	while (flag->next) {
-		tmp = flag->next;
-		if (!strcmp(flag->next->name, name)) {
-			if (!value) {
-				flag->next = tmp->next;
-				g_free(tmp);
-			}
-			return;
-		}
-		flag = tmp;
-	}
-
-	if (value) {
-		tmp = g_malloc(sizeof(*tmp) + strlen(name));
-		strcpy(tmp->name, name);
-		tmp->next = 0;
-		flag->next = tmp;
-	}
-}
-
-int
-camel_flag_list_size(CamelFlag **list)
-{
-	int count=0;
-	CamelFlag *flag;
-
-	flag = *list;
-	while (flag) {
-		count++;
-		flag = flag->next;
-	}
-	return count;
-}
-
-void
-camel_flag_list_free(CamelFlag **list)
-{
-	CamelFlag *flag, *tmp;
-	flag = *list;
-	while (flag) {
-		tmp = flag->next;
-		g_free(flag);
-		flag = tmp;
-	}
-	*list = NULL;
-}
-
-const char	*camel_tag_get(CamelTag **list, const char *name)
-{
-	CamelTag *tag;
-
-	tag = *list;
-	while (tag) {
-		if (!strcmp(tag->name, name))
-			return (const char *)tag->value;
-		tag = tag->next;
-	}
-	return NULL;
-}
-
-void		camel_tag_set(CamelTag **list, const char *name, const char *value)
-{
-	CamelTag *tag, *tmp;
-
-	/* this 'trick' works because tag->next is the first element */
-	tag = (CamelTag *)list;
-	while (tag->next) {
-		tmp = tag->next;
-		if (!strcmp(tmp->name, name)) {
-			if (value == NULL) { /* clear it? */
-				tag->next = tmp->next;
-				g_free(tmp->value);
-				g_free(tmp);
-			} else if (strcmp(tmp->value, value)) { /* has it changed? */
-				g_free(tmp->value);
-				tmp->value = g_strdup(value);
-			}
-			return;
-		}
-		tag = tmp;
-	}
-
-	if (value) {
-		tmp = g_malloc(sizeof(*tmp)+strlen(name));
-		strcpy(tmp->name, name);
-		tmp->value = g_strdup(value);
-		tmp->next = 0;
-		tag->next = tmp;
-	}
-}
-
-int		camel_tag_list_size(CamelTag **list)
-{
-	int count=0;
-	CamelTag *tag;
-
-	tag = *list;
-	while (tag) {
-		count++;
-		tag = tag->next;
-	}
-	return count;
-}
-
-void		camel_tag_list_free(CamelTag **list)
-{
-	CamelTag *tag, *tmp;
-	tag = *list;
-	while (tag) {
-		tmp = tag->next;
-		g_free(tag->value);
-		g_free(tag);
-		tag = tmp;
-	}
-	*list = NULL;
-}
-
-/**
- * camel_message_info_dup_to:
- * @from: source message info
- * @to: destination message info
- *
- * Duplicates the contents of one CamelMessageInfo structure into another.
- * (The destination is assumed to be empty: its contents are not freed.)
- * The slightly odd interface is to allow this to be used to initialize
- * "subclasses" of CamelMessageInfo.
- **/
-void
-camel_message_info_dup_to(const CamelMessageInfo *from, CamelMessageInfo *to)
-{
-	CamelFlag *flag;
-	CamelTag *tag;
-
-	/* Copy numbers */
-	to->flags = from->flags;
-	to->size = from->size;
-	to->date_sent = from->date_sent;
-	to->date_received = from->date_received;
-
-	/* Copy strings */
-	to->subject = g_strdup(from->subject);
-	to->from = g_strdup(from->from);
-	to->to = g_strdup(from->to);
-	to->cc = g_strdup(from->cc);
-	to->uid = g_strdup(from->uid);
-	to->message_id = g_strdup(from->message_id);
-
-	/* Copy structures */
-	to->references = header_references_dup(from->references);
-	flag = from->user_flags;
-	while (flag) {
-		camel_flag_set(&to->user_flags, flag->name, TRUE);
-		flag = flag->next;
-	}
-
-	tag = from->user_tags;
-	while (tag) {
-		camel_tag_set(&to->user_tags, tag->name, tag->value);
-		tag = tag->next;
-	}
-
-	/* FIXME some day */
-	to->content = NULL;
-}
-
-/**
- * camel_message_info_free:
- * @mi: the message info
- *
- * Frees a CamelMessageInfo and its contents.
- **/
-void
-camel_message_info_free(CamelMessageInfo *mi)
-{
-	g_free(mi->uid);
-	g_free(mi->subject);
-	g_free(mi->from);
-	g_free(mi->to);
-	g_free(mi->cc);
-	g_free(mi->message_id);
-	header_references_list_clear(&mi->references);
-	camel_flag_list_free(&mi->user_flags);
-	camel_tag_list_free(&mi->user_tags);
-	/* FIXME: content info? */
-	g_free(mi);
-}
-
-#if 0
-static void
-content_info_dump(CamelMessageContentInfo *ci, int depth)
-{
-	char *p;
-
-	p = alloca(depth*4+1);
-	memset(p, ' ', depth*4);
-	p[depth*4] = 0;
-
-	if (ci == NULL) {
-		printf("%s\n", p);
-		return;
-	}
-
-	printf("%sconent-type: %s/%s\n", p, ci->type->type, ci->type->subtype);
-	printf("%sontent-transfer-encoding: %s\n", p, ci->encoding);
-	printf("%scontent-description: %s\n", p, ci->description);
-	printf("%sbytes: %d %d %d\n", p, (int)ci->pos, (int)ci->bodypos, (int)ci->endpos);
-	ci = ci->childs;
-	while (ci) {
-		content_info_dump(ci, depth+1);
-		ci = ci->next;
-	}
-}
-
-static void
-message_info_dump(CamelMessageInfo *mi)
-{
-	if (mi == NULL) {
-		printf("No message?\n");
-		return;
-	}
-
-	printf("Subject: %s\n", mi->subject);
-	printf("To: %s\n", mi->to);
-	printf("Cc: %s\n", mi->cc);
-	printf("From: %s\n", mi->from);
-	printf("UID: %s\n", mi->uid);
-	printf("Flags: %04x\n", mi->flags & 0xffff);
-	content_info_dump(mi->content, 0);
-}
-
-int main(int argc, char **argv)
-{
-	CamelMimeParser *mp;
-	int fd;
-	CamelFolderSummary *s;
-	char *buffer;
-	int len;
-	int i;
-	ibex *index;
-
-	/*g_tk_init(&argc, &argv);*/
-
-#if 0
-	{
-		int i;
-		char *s;
-		char buf[1024];
-
-		for (i=0;i<434712;i++) {
-			memcpy(buf, "                                                         ", 50);
-			buf[50] = 0;
-#if 0
-			s = g_strdup(buf);
-			g_free(s);
-#endif
-		}
-		return 0;
-	}
-#endif
-
-	if (argc < 2 ) {
-		printf("usage: %s mbox\n", argv[0]);
-		return 1;
-	}
-
-	fd = open(argv[1], O_RDONLY);
-
-	index = ibex_open("index.ibex", O_CREAT|O_RDWR, 0600);
-
-	mp = camel_mime_parser_new();
-	camel_mime_parser_scan_from(mp, TRUE);
-/*	camel_mime_parser_set_header_regex(mp, "^(content-[^:]*|subject|from|to|date):");*/
-	camel_mime_parser_init_with_fd(mp, fd);
-
-	s = camel_folder_summary_new();
-	camel_folder_summary_set_build_content(s, TRUE);
-/*	camel_folder_summary_set_index(s, index);*/
-
-	while (camel_mime_parser_step(mp, &buffer, &len) == HSCAN_FROM) {
-		/*printf("Parsing message ...\n");*/
-		camel_folder_summary_add_from_parser(s, mp);
-		if (camel_mime_parser_step(mp, &buffer, &len) != HSCAN_FROM_END) {
-			g_warning("Uknown state encountered, excpecting %d, got %d\n", HSCAN_FROM_END, camel_mime_parser_state(mp));
-			break;
-		}
-	}
-
-	printf("Printing summary\n");
-	for (i=0;i
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#ifndef _CAMEL_FOLDER_SUMMARY_H
-#define _CAMEL_FOLDER_SUMMARY_H
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define CAMEL_FOLDER_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_folder_summary_get_type (), CamelFolderSummary)
-#define CAMEL_FOLDER_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_folder_summary_get_type (), CamelFolderSummaryClass)
-#define IS_CAMEL_FOLDER_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_folder_summary_get_type ())
-
-/*typedef struct _CamelFolderSummary      CamelFolderSummary;*/
-typedef struct _CamelFolderSummaryClass CamelFolderSummaryClass;
-
-/* these structs from camel-folder-summary.h ... (remove comment after cleanup soon) */
-/* TODO: perhaps they should be full-block objects? */
-/* FIXME: rename this to something more suitable */
-typedef struct {
-	gchar *name;
-	gint nb_message;	/* ick, these should be renamed to something better */
-	gint nb_unread_message;
-	gint nb_deleted_message;
-} CamelFolderInfo;
-
-/* A tree of message content info structures
-   describe the content structure of the message (if it has any) */
-typedef struct _CamelMessageContentInfo {
-	struct _CamelMessageContentInfo *next;
-
-	struct _CamelMessageContentInfo *childs;
-	struct _CamelMessageContentInfo *parent;
-
-	struct _header_content_type *type;
-	char *id;
-	char *description;
-	char *encoding;
-
-	/* information about where this object lives in the stream.
-	   if pos is -1 these are all invalid */
-	off_t pos;
-	off_t bodypos;
-	off_t endpos;
-} CamelMessageContentInfo;
-
-/* system flag bits */
-enum _CamelMessageFlags {
-	CAMEL_MESSAGE_ANSWERED = 1<<0,
-	CAMEL_MESSAGE_DELETED = 1<<1,
-	CAMEL_MESSAGE_DRAFT = 1<<2,
-	CAMEL_MESSAGE_FLAGGED = 1<<3,
-	CAMEL_MESSAGE_SEEN = 1<<4,
-	/* following flags are for the folder, and are not really permanent flags */
-	CAMEL_MESSAGE_FOLDER_FLAGGED = 1<<16, /* for use by the folder implementation */
-	CAMEL_MESSAGE_USER = 1<<31 /* supports user flags */
-};
-
-typedef struct _CamelFlag {
-	struct _CamelFlag *next;
-	char name[1];		/* name allocated as part of the structure */
-} CamelFlag;
-
-typedef struct _CamelTag {
-	struct _CamelTag *next;
-	char *value;
-	char name[1];		/* name allocated as part of the structure */
-} CamelTag;
-
-/* information about a given object */
-typedef struct {
-	/* public fields */
-	gchar *subject;
-	gchar *from;
-	gchar *to;
-	gchar *cc;
-
-	gchar *uid;
-	guint32 flags;
-	guint32 size;
-
-	time_t date_sent;
-	time_t date_received;
-
-	/* Message-ID / References structures */
-	char *message_id;	/* for this message */
-	struct _header_references *references; /* from parent to root */
-
-	struct _CamelFlag *user_flags;
-	struct _CamelTag *user_tags;
-
-	/* tree of content description - NULL if it is not available */
-	CamelMessageContentInfo *content;
-} CamelMessageInfo;
-
-enum _CamelFolderSummaryFlags {
-	CAMEL_SUMMARY_DIRTY = 1<<0,
-};
-
-struct _CamelFolderSummary {
-	CamelObject parent;
-
-	struct _CamelFolderSummaryPrivate *priv;
-
-	/* header info */
-	guint32 version;	/* version of file required, should be set by implementors */
-	guint32 flags;		/* flags */
-	guint32 nextuid;	/* next uid? */
-	guint32 saved_count;	/* how many were saved/loaded */
-	time_t time;		/* timestamp for this summary (for implementors to use) */
-
-	/* sizes of memory objects */
-	guint32 message_info_size;
-	guint32 content_info_size;
-
-	char *summary_path;
-	gboolean build_content;	/* do we try and parse/index the content, or not? */
-
-	GPtrArray *messages;	/* CamelMessageInfo's */
-	GHashTable *messages_uid; /* CamelMessageInfo's by uid */
-};
-
-struct _CamelFolderSummaryClass {
-	CamelObjectClass parent_class;
-
-	/* load/save the global info */
-	int (*summary_header_load)(CamelFolderSummary *, FILE *);
-	int (*summary_header_save)(CamelFolderSummary *, FILE *);
-
-	/* create/save/load an individual message info */
-	CamelMessageInfo * (*message_info_new)(CamelFolderSummary *, struct _header_raw *);
-	CamelMessageInfo * (*message_info_new_from_parser)(CamelFolderSummary *, CamelMimeParser *);
-	CamelMessageInfo * (*message_info_load)(CamelFolderSummary *, FILE *);
-	int		   (*message_info_save)(CamelFolderSummary *, FILE *, CamelMessageInfo *);
-	void		   (*message_info_free)(CamelFolderSummary *, CamelMessageInfo *);
-
-	/* save/load individual content info's */
-	CamelMessageContentInfo * (*content_info_new)(CamelFolderSummary *, struct _header_raw *);
-	CamelMessageContentInfo * (*content_info_new_from_parser)(CamelFolderSummary *, CamelMimeParser *);
-	CamelMessageContentInfo * (*content_info_load)(CamelFolderSummary *, FILE *);
-	int		          (*content_info_save)(CamelFolderSummary *, FILE *, CamelMessageContentInfo *);
-	void		          (*content_info_free)(CamelFolderSummary *, CamelMessageContentInfo *);
-};
-
-guint			 camel_folder_summary_get_type	(void);
-CamelFolderSummary      *camel_folder_summary_new	(void);
-
-void camel_folder_summary_set_filename(CamelFolderSummary *, const char *);
-void camel_folder_summary_set_index(CamelFolderSummary *, ibex *);
-void camel_folder_summary_set_build_content(CamelFolderSummary *, gboolean state);
-
-guint32  camel_folder_summary_next_uid        (CamelFolderSummary *s);
-char    *camel_folder_summary_next_uid_string (CamelFolderSummary *s);
-
-/* load/save the summary in its entirety */
-int camel_folder_summary_load(CamelFolderSummary *);
-int camel_folder_summary_save(CamelFolderSummary *);
-
-/* set the dirty bit on the summary */
-void camel_folder_summary_touch(CamelFolderSummary *s);
-
-/* add a new raw summary item */
-void camel_folder_summary_add(CamelFolderSummary *, CamelMessageInfo *info);
-
-/* build/add raw summary items */
-CamelMessageInfo *camel_folder_summary_add_from_header(CamelFolderSummary *, struct _header_raw *);
-CamelMessageInfo *camel_folder_summary_add_from_parser(CamelFolderSummary *, CamelMimeParser *);
-
-/* removes a summary item, doesn't fix content offsets */
-void camel_folder_summary_remove(CamelFolderSummary *s, CamelMessageInfo *info);
-void camel_folder_summary_remove_uid(CamelFolderSummary *s, const char *uid);
-/* remove all items */
-void camel_folder_summary_clear(CamelFolderSummary *s);
-
-/* lookup functions */
-int camel_folder_summary_count(CamelFolderSummary *);
-CamelMessageInfo *camel_folder_summary_index(CamelFolderSummary *, int);
-CamelMessageInfo *camel_folder_summary_uid(CamelFolderSummary *, const char *uid);
-
-/* shift content ... */
-void camel_folder_summary_offset_content(CamelMessageContentInfo *content, off_t offset);
-
-/* summary formatting utils */
-char *camel_summary_format_address (struct _header_raw *h, const char *name);
-char *camel_summary_format_string (struct _header_raw *h, const char *name);
-
-/* summary file loading/saving helper functions */
-int camel_folder_summary_encode_fixed_int32(FILE *, gint32);
-int camel_folder_summary_decode_fixed_int32(FILE *, gint32 *);
-
-int camel_folder_summary_encode_uint32(FILE *, guint32);
-int camel_folder_summary_decode_uint32(FILE *, guint32 *);
-
-int camel_folder_summary_encode_string(FILE *, char *);
-int camel_folder_summary_decode_string(FILE *, char **);
-
-/* basically like strings, but certain keywords can be compressed and de-cased */
-int camel_folder_summary_encode_token(FILE *, char *);
-int camel_folder_summary_decode_token(FILE *, char **);
-
-/* message flag operations */
-gboolean	camel_flag_get(CamelFlag **list, const char *name);
-void		camel_flag_set(CamelFlag **list, const char *name, gboolean state);
-int		camel_flag_list_size(CamelFlag **list);
-void		camel_flag_list_free(CamelFlag **list);
-
-/* message tag operations */
-const char	*camel_tag_get(CamelTag **list, const char *name);
-void		camel_tag_set(CamelTag **list, const char *name, const char *value);
-int		camel_tag_list_size(CamelTag **list);
-void		camel_tag_list_free(CamelTag **list);
-
-/* message info utils */
-void camel_message_info_dup_to(const CamelMessageInfo *from, CamelMessageInfo *to);
-void camel_message_info_free(CamelMessageInfo *mi);
-
-#endif /* ! _CAMEL_FOLDER_SUMMARY_H */
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
deleted file mode 100644
index 201e2cc778..0000000000
--- a/camel/camel-folder.c
+++ /dev/null
@@ -1,1268 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-folder.c: Abstract class for an email folder */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include 
-#include "camel-folder.h"
-#include "camel-exception.h"
-#include "camel-store.h"
-#include "camel-mime-message.h"
-#include "string-utils.h"
-
-static CamelObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelFolder */
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-
-static void init (CamelFolder *folder, CamelStore *parent_store,
-		  CamelFolder *parent_folder, const gchar *name,
-		  gchar *separator, gboolean path_begins_with_sep,
-		  CamelException *ex);
-
-static void camel_folder_finalize (CamelObject *object);
-
-
-static void folder_sync (CamelFolder *folder, gboolean expunge,
-			 CamelException *ex);
-
-static const gchar *get_name (CamelFolder *folder);
-static const gchar *get_full_name (CamelFolder *folder);
-
-
-static gboolean can_hold_folders (CamelFolder *folder);
-static gboolean can_hold_messages (CamelFolder *folder);
-static guint32 get_permanent_flags (CamelFolder *folder);
-static guint32 get_message_flags (CamelFolder *folder, const char *uid);
-static void set_message_flags (CamelFolder *folder, const char *uid,
-			       guint32 flags, guint32 set);
-static gboolean get_message_user_flag (CamelFolder *folder, const char *uid, const char *name);
-static void set_message_user_flag (CamelFolder *folder, const char *uid,
-				   const char *name, gboolean value);
-static const char *get_message_user_tag(CamelFolder *folder, const char *uid, const char *name);
-static void set_message_user_tag(CamelFolder *folder, const char *uid, const char *name, const char *value);
-
-static GPtrArray *get_subfolder_names (CamelFolder *folder);
-static void      free_subfolder_names (CamelFolder *folder,
-				       GPtrArray *array);
-static CamelFolder *get_subfolder     (CamelFolder *folder,
-				       const gchar *folder_name,
-				       gboolean create,
-				       CamelException *ex);
-static CamelFolder *get_parent_folder (CamelFolder *folder);
-static CamelStore *get_parent_store   (CamelFolder *folder);
-
-static gint get_message_count (CamelFolder *folder);
-static gint get_unread_message_count (CamelFolder *folder);
-
-static void expunge             (CamelFolder *folder,
-				 CamelException *ex);
-
-
-static void append_message (CamelFolder *folder, CamelMimeMessage *message,
-			    const CamelMessageInfo *info, CamelException *ex);
-
-
-static GPtrArray        *get_uids            (CamelFolder *folder);
-static void              free_uids           (CamelFolder *folder,
-					      GPtrArray *array);
-static GPtrArray        *get_summary         (CamelFolder *folder);
-static void              free_summary        (CamelFolder *folder,
-					      GPtrArray *array);
-
-static CamelMimeMessage *get_message         (CamelFolder *folder,
-					      const gchar *uid,
-					      CamelException *ex);
-
-static const CamelMessageInfo *get_message_info (CamelFolder *folder,
-						 const char *uid);
-
-static GPtrArray      *search_by_expression  (CamelFolder *folder,
-					      const char *exp,
-					      CamelException *ex);
-static void            search_free           (CamelFolder * folder, 
-					      GPtrArray * result);
-
-static void            copy_message_to       (CamelFolder *source,
-					      const char *uid,
-					      CamelFolder *dest,
-					      CamelException *ex);
-
-static void            move_message_to       (CamelFolder *source,
-					      const char *uid,
-					      CamelFolder *dest,
-					      CamelException *ex);
-
-static void            freeze                (CamelFolder *folder);
-static void            thaw                  (CamelFolder *folder);
-
-static gboolean        folder_changed        (CamelObject *object,
-					      /*int type*/gpointer event_data);
-static gboolean        message_changed       (CamelObject *object,
-					      /*const char *uid*/gpointer event_data);
-
-static void
-camel_folder_class_init (CamelFolderClass *camel_folder_class)
-{
-	CamelObjectClass *camel_object_class =
-		CAMEL_OBJECT_CLASS (camel_folder_class);
-
-	parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
-
-	/* virtual method definition */
-	camel_folder_class->init = init;
-	camel_folder_class->sync = folder_sync;
-	camel_folder_class->get_name = get_name;
-	camel_folder_class->get_full_name = get_full_name;
-	camel_folder_class->can_hold_folders = can_hold_folders;
-	camel_folder_class->can_hold_messages = can_hold_messages;
-	camel_folder_class->get_subfolder = get_subfolder;
-	camel_folder_class->get_parent_folder = get_parent_folder;
-	camel_folder_class->get_parent_store = get_parent_store;
-	camel_folder_class->get_subfolder_names = get_subfolder_names;
-	camel_folder_class->free_subfolder_names = free_subfolder_names;
-	camel_folder_class->expunge = expunge;
-	camel_folder_class->get_message_count = get_message_count;
-	camel_folder_class->get_unread_message_count = get_unread_message_count;
-	camel_folder_class->append_message = append_message;
-	camel_folder_class->get_permanent_flags = get_permanent_flags;
-	camel_folder_class->get_message_flags = get_message_flags;
-	camel_folder_class->set_message_flags = set_message_flags;
-	camel_folder_class->get_message_user_flag = get_message_user_flag;
-	camel_folder_class->set_message_user_flag = set_message_user_flag;
-	camel_folder_class->get_message_user_tag = get_message_user_tag;
-	camel_folder_class->set_message_user_tag = set_message_user_tag;
-	camel_folder_class->get_message = get_message;
-	camel_folder_class->get_uids = get_uids;
-	camel_folder_class->free_uids = free_uids;
-	camel_folder_class->get_summary = get_summary;
-	camel_folder_class->free_summary = free_summary;
-	camel_folder_class->search_by_expression = search_by_expression;
-	camel_folder_class->search_free = search_free;
-	camel_folder_class->get_message_info = get_message_info;
-	camel_folder_class->copy_message_to = copy_message_to;
-	camel_folder_class->move_message_to = move_message_to;
-	camel_folder_class->freeze = freeze;
-	camel_folder_class->thaw = thaw;
-
-	/* virtual method overload */
-	camel_object_class_declare_event (camel_object_class, "folder_changed", folder_changed);
-	camel_object_class_declare_event (camel_object_class, "message_changed", message_changed);
-
-	/*
-        signals[FOLDER_CHANGED] =
-                gt_k_signal_new ("folder_changed",
-                                GT_K_RUN_FIRST,
-                                camel_object_class->type,
-                                GT_K_SIGNAL_OFFSET (CamelFolderClass,
-				folder_changed),
-                                gt_k_marshal_NONE__INT,
-                                GT_K_TYPE_NONE, 1, GT_K_TYPE_INT);
-
-        signals[MESSAGE_CHANGED] =
-                gt_k_signal_new ("message_changed",
-                                GT_K_RUN_FIRST,
-                                camel_object_class->type,
-                                GT_K_SIGNAL_OFFSET (CamelFolderClass,
-						   message_changed),
-                                gt_k_marshal_NONE__STRING,
-                                GT_K_TYPE_NONE, 1, GT_K_TYPE_STRING);
-
-        camel_object_class_add_signals (camel_object_class, signals, LAST_SIGNAL);
-	*/
-}
-
-static void
-camel_folder_finalize (CamelObject *object)
-{
-	CamelFolder *camel_folder = CAMEL_FOLDER (object);
-	GList *m;
-
-	g_free (camel_folder->name);
-	g_free (camel_folder->full_name);
-
-	if (camel_folder->parent_store)
-		camel_object_unref (CAMEL_OBJECT (camel_folder->parent_store));
-	if (camel_folder->parent_folder)
-		camel_object_unref (CAMEL_OBJECT (camel_folder->parent_folder));
-
-	for (m = camel_folder->messages_changed; m; m = m->next)
-		g_free (m->data);
-	g_list_free (camel_folder->messages_changed);
-}
-
-CamelType
-camel_folder_get_type (void)
-{
-	static CamelType camel_folder_type = CAMEL_INVALID_TYPE;
-
-	if (camel_folder_type == CAMEL_INVALID_TYPE)	{
-		camel_folder_type = camel_type_register (CAMEL_OBJECT_TYPE, "CamelFolder",
-							 sizeof (CamelFolder),
-							 sizeof (CamelFolderClass),
-							 (CamelObjectClassInitFunc) camel_folder_class_init,
-							 NULL,
-							 NULL,
-							 (CamelObjectFinalizeFunc) camel_folder_finalize );
-	}
-
-	return camel_folder_type;
-}
-
-
-/**
- * init: init the folder
- * @folder: folder object to initialize
- * @parent_store: parent store object of the folder
- * @parent_folder: parent folder of the folder (may be NULL)
- * @name: (short) name of the folder
- * @separator: separator between the parent folder name and this name
- * @ex: a CamelException
- *
- * Initalizes the folder by setting the parent store, parent folder,
- * and name.
- **/
-static void
-init (CamelFolder *folder, CamelStore *parent_store,
-      CamelFolder *parent_folder, const gchar *name,
-      gchar *separator, gboolean path_begins_with_sep,
-      CamelException *ex)
-{
-	gchar *full_name;
-	const gchar *parent_full_name;
-
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-	g_return_if_fail (CAMEL_IS_STORE (parent_store));
-	g_return_if_fail (parent_folder == NULL || CAMEL_IS_FOLDER (parent_folder));
-	g_return_if_fail (folder->parent_store == NULL);
-
-	folder->parent_store = parent_store;
-	camel_object_ref (CAMEL_OBJECT (parent_store));
-
-	folder->parent_folder = parent_folder;
-	if (parent_folder)
-		camel_object_ref (CAMEL_OBJECT (parent_folder));
-
-	folder->separator = separator;
-	folder->path_begins_with_sep = path_begins_with_sep;
-
-	/* if the folder already has a name, free it */
-	g_free (folder->name);
-	g_free (folder->full_name);
-
-	/* set those fields to NULL now, so that if an
-	   exception occurs, they will be set anyway */
-	folder->name = NULL;
-	folder->full_name = NULL;
-
-	if (folder->parent_folder) {
-		parent_full_name = camel_folder_get_full_name(folder->parent_folder);
-
-		full_name = g_strdup_printf("%s%s%s", parent_full_name, folder->separator, name);
-	} else {
-		if (path_begins_with_sep)
-			full_name = g_strdup_printf("%s%s", folder->separator, name);
-		else
-			full_name = g_strdup(name);
-	}
-
-	folder->name = g_strdup(name);
-	folder->full_name = full_name;
-
-	folder->frozen = 0;
-	folder->folder_changed = FALSE;
-	folder->messages_changed = NULL;
-}
-
-
-static void
-folder_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	g_warning ("CamelFolder::sync not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_sync:
- * @folder: The folder object
- * @expunge: whether or not to expunge deleted messages
- * @ex: exception object
- *
- * Sync changes made to a folder to its backing store, possibly expunging
- * deleted messages as well.
- **/
-void camel_folder_sync(CamelFolder * folder, gboolean expunge, CamelException * ex)
-{
-	g_return_if_fail(CAMEL_IS_FOLDER(folder));
-
-	CF_CLASS(folder)->sync(folder, expunge, ex);
-}
-
-static const gchar *get_name(CamelFolder * folder)
-{
-	return folder->name;
-}
-
-/**
- * camel_folder_get_name:
- * @folder: a folder
- *
- * Get the (short) name of the folder. The fully qualified name
- * can be obtained with the get_full_name method.
- *
- * Return value: name of the folder
- **/
-const gchar *camel_folder_get_name(CamelFolder * folder)
-{
-	g_return_val_if_fail(CAMEL_IS_FOLDER(folder), NULL);
-
-	return CF_CLASS(folder)->get_name(folder);
-}
-
-static const gchar *get_full_name(CamelFolder * folder)
-{
-	return folder->full_name;
-}
-
-/**
- * camel_folder_get_full_name:
- * @folder: a folder
- *
- * Get the (full) name of the folder.
- *
- * Return value: full name of the folder
- **/
-const gchar *camel_folder_get_full_name(CamelFolder * folder)
-{
-	g_return_val_if_fail(CAMEL_IS_FOLDER(folder), NULL);
-
-	return CF_CLASS(folder)->get_full_name(folder);
-}
-
-static gboolean can_hold_folders(CamelFolder * folder)
-{
-	return folder->can_hold_folders;
-}
-
-static gboolean can_hold_messages(CamelFolder * folder)
-{
-	return folder->can_hold_messages;
-}
-
-static CamelFolder *get_subfolder(CamelFolder * folder, const gchar * folder_name, gboolean create, CamelException * ex)
-{
-	CamelFolder *new_folder;
-	gchar *full_name;
-	const gchar *current_folder_full_name;
-
-	g_return_val_if_fail(CAMEL_IS_STORE(folder->parent_store), NULL);
-
-	current_folder_full_name = camel_folder_get_full_name(folder);
-
-	full_name = g_strdup_printf("%s%s%s", current_folder_full_name, folder->separator, folder_name);
-	new_folder = camel_store_get_folder(folder->parent_store, full_name, create, ex);
-	g_free(full_name);
-
-	return new_folder;
-}
-
-/**
- * camel_folder_get_subfolder:
- * @folder: a folder
- * @folder_name: subfolder path
- * @create: whether or not to create the folder if it doesn't exist
- * @ex: a CamelException
- *
- * This method returns a folder object. This folder is a subfolder of
- * the given folder. It is an error to ask for a folder whose name begins
- * with the folder separator character.
- *
- * Return value: the requested folder, or %NULL if the subfolder object
- * could not be obtained
- **/
-CamelFolder *camel_folder_get_subfolder(CamelFolder * folder, const gchar * folder_name,
-					gboolean create, CamelException * ex)
-{
-	g_return_val_if_fail(CAMEL_IS_FOLDER(folder), NULL);
-	g_return_val_if_fail(folder_name != NULL, NULL);
-
-	return CF_CLASS(folder)->get_subfolder(folder, folder_name, create, ex);
-}
-
-static CamelFolder *get_parent_folder(CamelFolder * folder)
-{
-	return folder->parent_folder;
-}
-
-/**
- * camel_folder_get_parent_folder:
- * @folder: folder to get the parent of
- *
- * Return value: the folder's parent
- **/
-CamelFolder *camel_folder_get_parent_folder(CamelFolder * folder)
-{
-	g_return_val_if_fail(CAMEL_IS_FOLDER(folder), NULL);
-
-	return CF_CLASS(folder)->get_parent_folder(folder);
-}
-
-static CamelStore *get_parent_store(CamelFolder * folder)
-{
-	return folder->parent_store;
-}
-
-/**
- * camel_folder_get_parent_store:
- * @folder: folder to get the parent of
- *
- * Return value: the parent store of the folder.
- **/
-CamelStore *
-camel_folder_get_parent_store (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-
-	return CF_CLASS (folder)->get_parent_store (folder);
-}
-
-
-static GPtrArray *
-get_subfolder_names (CamelFolder *folder)
-{
-	g_warning ("CamelFolder::get_subfolder_names not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_subfolder_names:
- * @folder: the folder
- *
- * Return value: an array containing the names of the folder's
- * subfolders. The array should not be modified and must be freed with
- * camel_folder_free_subfolder_names().
- **/
-GPtrArray *
-camel_folder_get_subfolder_names (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-
-	return CF_CLASS (folder)->get_subfolder_names (folder);
-}
-
-
-static void
-free_subfolder_names (CamelFolder *folder, GPtrArray *array)
-{
-       g_warning ("CamelFolder::free_subfolder_names not implemented "
-                  "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_free_subfolder_names:
- * @folder: folder object
- * @array: the array of subfolder names to free
- *
- * Frees the array of names returned by camel_folder_get_subfolder_names().
- **/
-void
-camel_folder_free_subfolder_names (CamelFolder *folder, GPtrArray *array)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-
-	CF_CLASS (folder)->free_subfolder_names (folder, array);
-}
-
-
-static void
-expunge (CamelFolder *folder, CamelException *ex)
-{
-	g_warning ("CamelFolder::expunge not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-
-/**
- * camel_folder_expunge:
- * @folder: the folder
- * @ex: a CamelException
- *
- * Delete messages which have been marked as "DELETED"
- **/
-void
-camel_folder_expunge (CamelFolder *folder, CamelException *ex)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-
-	CF_CLASS (folder)->expunge (folder, ex);
-}
-
-
-static gint
-get_message_count (CamelFolder *folder)
-{
-	g_warning ("CamelFolder::get_message_count not implemented "
-		   "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return -1;
-}
-
-/**
- * camel_folder_get_message_count:
- * @folder: A CamelFolder object
- *
- * Return value: the number of messages in the folder, or -1 if unknown.
- **/
-gint
-camel_folder_get_message_count (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), -1);
-
-	return CF_CLASS (folder)->get_message_count (folder);
-}
-
-static gint
-get_unread_message_count (CamelFolder *folder)
-{
-	g_warning ("CamelFolder::get_unread_message_count not implemented "
-		   "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return -1;
-}
-
-/**
- * camel_folder_unread_get_message_count:
- * @folder: A CamelFolder object
- *
- * Return value: the number of unread messages in the folder, or -1 if unknown.
- **/
-gint
-camel_folder_get_unread_message_count (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), -1);
-
-	return CF_CLASS (folder)->get_unread_message_count (folder);
-}
-
-
-static void
-append_message (CamelFolder *folder, CamelMimeMessage *message,
-		const CamelMessageInfo *info, CamelException *ex)
-{
-	g_warning ("CamelFolder::append_message not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return;
-
-}
-
-/**
- * camel_folder_append_message: add a message to a folder
- * @folder: folder object to add the message to
- * @message: message object
- * @info: optional message info with additional flags/etc to set on new message.
- * @ex: exception object
- *
- * Add a message to a folder.
- **/
-void camel_folder_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, CamelException * ex)
-{
-	g_return_if_fail(CAMEL_IS_FOLDER(folder));
-
-	CF_CLASS(folder)->append_message(folder, message, info, ex);
-}
-
-static guint32 get_permanent_flags(CamelFolder * folder)
-{
-	return folder->permanent_flags;
-}
-
-/**
- * camel_folder_get_permanent_flags:
- * @folder: a CamelFolder
- *
- * Return value: the set of CamelMessageFlags that can be permanently
- * stored on a message between sessions. If it includes %CAMEL_FLAG_USER,
- * then user-defined flags will be remembered.
- **/
-guint32
-camel_folder_get_permanent_flags (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), 0);
-
-	return CF_CLASS (folder)->get_permanent_flags (folder);
-}
-
-
-static guint32
-get_message_flags (CamelFolder *folder, const char *uid)
-{
-	g_warning ("CamelFolder::get_message_flags not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return 0;
-}
-
-/**
- * camel_folder_get_message_flags:
- * @folder: a CamelFolder
- * @uid: the UID of a message in @folder
- *
- * Return value: the CamelMessageFlags that are set on the indicated
- * message.
- **/
-guint32
-camel_folder_get_message_flags (CamelFolder *folder, const char *uid)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), 0);
-
-	return CF_CLASS (folder)->get_message_flags (folder, uid);
-}
-
-
-static void
-set_message_flags (CamelFolder *folder, const char *uid,
-		   guint32 flags, guint32 set)
-{
-	g_warning ("CamelFolder::set_message_flags not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_set_message_flags:
- * @folder: a CamelFolder
- * @uid: the UID of a message in @folder
- * @flags: a set of CamelMessageFlag values to set
- * @set: the mask of values in @flags to use.
- *
- * Sets those flags specified by @set to the values specified by @flags
- * on the indicated message. (This may or may not persist after the
- * folder or store is closed. See camel_folder_get_permanent_flags().)
- **/
-void
-camel_folder_set_message_flags (CamelFolder *folder, const char *uid,
-				guint32 flags, guint32 set)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-
-	CF_CLASS (folder)->set_message_flags (folder, uid, flags, set);
-}
-
-
-static gboolean
-get_message_user_flag (CamelFolder *folder, const char *uid,
-		       const char *name)
-{
-	g_warning ("CamelFolder::get_message_user_flag not implemented "
-		   "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return FALSE;
-}
-
-/**
- * camel_folder_get_message_user_flag:
- * @folder: a CamelFolder
- * @uid: the UID of a message in @folder
- * @name: the name of a user flag
- *
- * Return value: whether or not the given user flag is set on the message.
- **/
-gboolean
-camel_folder_get_message_user_flag (CamelFolder *folder, const char *uid,
-				    const char *name)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), 0);
-
-	return CF_CLASS (folder)->get_message_user_flag (folder, uid, name);
-}
-
-
-static void
-set_message_user_flag (CamelFolder *folder, const char *uid,
-		       const char *name, gboolean value)
-{
-	g_warning ("CamelFolder::set_message_user_flag not implemented "
-		   "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_set_message_user_flag:
- * @folder: a CamelFolder
- * @uid: the UID of a message in @folder
- * @name: the name of the user flag to set
- * @value: the value to set it to
- *
- * Sets the user flag specified by @name to the value specified by @value
- * on the indicated message. (This may or may not persist after the
- * folder or store is closed. See camel_folder_get_permanent_flags().)
- **/
-void
-camel_folder_set_message_user_flag (CamelFolder *folder, const char *uid,
-				    const char *name, gboolean value)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-
-	CF_CLASS (folder)->set_message_user_flag (folder, uid, name, value);
-}
-
-static const char *get_message_user_tag(CamelFolder *folder, const char *uid, const char *name)
-{
-	g_warning ("CamelFolder::get_message_user_tag not implemented "
-		   "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_message_user_tag:
- * @folder: a CamelFolder
- * @uid: the UID of a message in @folder
- * @name: the name of a user tag
- *
- * Return value: Returns the value of the user tag.
- **/
-const char *
-camel_folder_get_message_user_tag (CamelFolder *folder, const char *uid,  const char *name)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), 0);
-
-	return CF_CLASS (folder)->get_message_user_tag (folder, uid, name);
-}
-
-
-static void
-set_message_user_tag(CamelFolder *folder, const char *uid, const char *name, const char *value)
-{
-	g_warning ("CamelFolder::set_message_user_tag not implemented "
-		   "for `%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_set_message_user_tag:
- * @folder: a CamelFolder
- * @uid: the UID of a message in @folder
- * @name: the name of the user tag to set
- * @value: the value to set it to
- *
- * Sets the user tag specified by @name to the value specified by @value
- * on the indicated message. (This may or may not persist after the
- * folder or store is closed. See camel_folder_get_permanent_flags().)
- **/
-void
-camel_folder_set_message_user_tag (CamelFolder *folder, const char *uid, const char *name, const char *value)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-
-	CF_CLASS (folder)->set_message_user_tag (folder, uid, name, value);
-}
-
-
-static const CamelMessageInfo *
-get_message_info (CamelFolder *folder, const char *uid)
-{
-	g_warning ("CamelFolder::get_message_info not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_message_info:
- * @folder: a CamelFolder
- * @uid: the uid of a message
- *
- * Return value: the summary information for the indicated message
- **/
-const CamelMessageInfo *
-camel_folder_get_message_info (CamelFolder *folder, const char *uid)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-	g_return_val_if_fail (uid != NULL, NULL);
-
-	return CF_CLASS (folder)->get_message_info (folder, uid);
-}
-
-
-/* TODO: is this function required anyway? */
-gboolean
-camel_folder_has_summary_capability (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
-	return folder->has_summary_capability;
-}
-
-
-/* UIDs stuff */
-
-static CamelMimeMessage *
-get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	g_warning ("CamelFolder::get_message not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_message:
- * @folder: the folder object
- * @uid: the UID
- * @ex: a CamelException
- *
- * Get a message from its UID in the folder. Messages are cached
- * within a folder, that is, asking twice for the same UID returns the
- * same message object. (FIXME: is this true?)
- *
- * Return value: Message corresponding to the UID
- **/
-CamelMimeMessage *
-camel_folder_get_message (CamelFolder *folder, const gchar *uid,
-			  CamelException *ex)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-
-	return CF_CLASS (folder)->get_message (folder, uid, ex);
-}
-
-
-static GPtrArray *
-get_uids (CamelFolder *folder)
-{
-	g_warning ("CamelFolder::get_uids not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_uids:
- * @folder: folder object
- *
- * Get the list of UIDs available in a folder. This routine is useful
- * for finding what messages are available when the folder does not
- * support summaries. The returned array shoudl not be modified, and
- * must be freed by passing it to camel_folder_free_uids().
- *
- * Return value: GPtrArray of UIDs corresponding to the messages
- * available in the folder.
- **/
-GPtrArray *
-camel_folder_get_uids (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-
-	return CF_CLASS (folder)->get_uids (folder);
-}
-
-
-static void
-free_uids (CamelFolder *folder, GPtrArray *array)
-{
-	g_warning ("CamelFolder::free_uids not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_free_uids:
- * @folder: folder object
- * @array: the array of uids to free
- *
- * Frees the array of UIDs returned by camel_folder_get_uids().
- **/
-void
-camel_folder_free_uids (CamelFolder *folder, GPtrArray *array)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-
-	CF_CLASS (folder)->free_uids (folder, array);
-}
-
-
-static GPtrArray *
-get_summary (CamelFolder *folder)
-{
-	g_warning ("CamelFolder::get_summary not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_get_summary:
- * @folder: a folder object
- *
- * This returns the summary information for the folder. This array
- * should not be modified, and must be freed with
- * camel_folder_free_summary().
- *
- * Return value: an array of CamelMessageInfo
- **/
-GPtrArray *
-camel_folder_get_summary (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-
-	return CF_CLASS (folder)->get_summary (folder);
-}
-
-
-static void
-free_summary (CamelFolder *folder, GPtrArray *array)
-{
-	g_warning ("CamelFolder::free_summary not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-}
-
-/**
- * camel_folder_free_summary:
- * @folder: folder object
- * @array: the summary array to free
- *
- * Frees the summary array returned by camel_folder_get_summary().
- **/
-void camel_folder_free_summary(CamelFolder * folder, GPtrArray * array)
-{
-	g_return_if_fail(CAMEL_IS_FOLDER(folder));
-
-	CF_CLASS(folder)->free_summary(folder, array);
-}
-
-/**
- * camel_folder_has_search_capability:
- * @folder: Folder object
- *
- * Checks if a folder supports searching.
- *
- * Return value: %TRUE if the folder supports searching
- **/
-gboolean
-camel_folder_has_search_capability (CamelFolder *folder)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), FALSE);
-
-	return folder->has_search_capability;
-}
-
-static GPtrArray *
-search_by_expression (CamelFolder *folder, const char *expression,
-		      CamelException *ex)
-{
-	g_warning ("CamelFolder::search_by_expression not implemented for "
-		   "`%s'", camel_type_to_name (CAMEL_OBJECT_GET_TYPE (folder)));
-	return NULL;
-}
-
-/**
- * camel_folder_search_by_expression:
- * @folder: Folder object
- * @expression: a search expression
- * @ex: a CamelException
- *
- * Searches the folder for messages matching the given search expression.
- *
- * Return value: a list of uids of matching messages. The caller must
- * free the list and each of the elements when it is done.
- **/
-GPtrArray *
-camel_folder_search_by_expression (CamelFolder *folder, const char *expression,
-				   CamelException *ex)
-{
-	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
-	g_return_val_if_fail (folder->has_search_capability, NULL);
-
-	return CF_CLASS (folder)->search_by_expression (folder, expression, ex);
-}
-
-static void
-search_free(CamelFolder * folder, GPtrArray * result)
-{
-	int i;
-
-	for (i = 0; i < result->len; i++)
-		g_free(g_ptr_array_index(result, i));
-	g_ptr_array_free(result, TRUE);
-}
-
-/**
- * camel_folder_search_free:
- * @folder: 
- * @result: 
- * 
- * Free the result of a search.
- **/
-void 
-camel_folder_search_free(CamelFolder * folder, GPtrArray * result)
-{
-	g_return_if_fail(CAMEL_IS_FOLDER(folder));
-	g_return_if_fail(folder->has_search_capability);
-
-	return CF_CLASS(folder)->search_free(folder, result);
-}
-
-
-static void
-copy_message_to (CamelFolder *source, const char *uid, CamelFolder *dest,
-		 CamelException *ex)
-{
-	CamelMimeMessage *msg;
-	const CamelMessageInfo *info;
-
-	/* Default implementation. */
-	
-	msg = camel_folder_get_message(source, uid, ex);
-	if (!msg)
-		return;
-	info = camel_folder_get_message_info(source, uid);
-	camel_folder_append_message(dest, msg, info, ex);
-	camel_object_unref(CAMEL_OBJECT (msg));
-	if (camel_exception_is_set(ex))
-		return;
-}
-
-/**
- * camel_folder_copy_message_to:
- * @source: source folder
- * @uid: UID of message in @source
- * @dest: destination folder
- * @ex: a CamelException
- *
- * This copies a message from one folder to another. If the @source and
- * @dest folders have the same parent_store, this may be more efficient
- * than a camel_folder_append_message().
- **/
-void
-camel_folder_copy_message_to (CamelFolder *source, const char *uid,
-			      CamelFolder *dest, CamelException *ex)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (source));
-	g_return_if_fail (CAMEL_IS_FOLDER (dest));
-	g_return_if_fail (uid != NULL);
-
-	if (source->parent_store == dest->parent_store) {
-		return CF_CLASS (source)->copy_message_to(source, uid,dest, ex);
-	} else
-		return copy_message_to(source, uid, dest, ex);
-}
-
-
-static void
-move_message_to (CamelFolder *source, const char *uid, CamelFolder *dest, CamelException *ex)
-{
-	CamelMimeMessage *msg;
-	const CamelMessageInfo *info;
-
-	/* Default implementation. */
-	
-	msg = camel_folder_get_message(source, uid, ex);
-	if (!msg)
-		return;
-	info = camel_folder_get_message_info(source, uid);
-	camel_folder_append_message(dest, msg, info, ex);
-	camel_object_unref(CAMEL_OBJECT(msg));
-	if (camel_exception_is_set(ex))
-		return;
-	camel_folder_delete_message (source, uid);
-}
-
-/**
- * camel_folder_move_message_to:
- * @source: source folder
- * @uid: UID of message in @source
- * @dest: destination folder
- * @ex: a CamelException
- *
- * This moves a message from one folder to another. If the @source and
- * @dest folders have the same parent_store, this may be more efficient
- * than a camel_folder_append_message() followed by
- * camel_folder_delete_message().
- **/
-void camel_folder_move_message_to(CamelFolder * source, const char *uid, CamelFolder * dest, CamelException * ex)
-{
-	g_return_if_fail(CAMEL_IS_FOLDER(source));
-	g_return_if_fail(CAMEL_IS_FOLDER(dest));
-	g_return_if_fail(uid != NULL);
-
-	if (source->parent_store == dest->parent_store) {
-		return CF_CLASS(source)->move_message_to(source, uid, dest, ex);
-	} else
-		return move_message_to(source, uid, dest, ex);
-}
-
-static void freeze(CamelFolder * folder)
-{
-	folder->frozen++;
-}
-
-/**
- * camel_folder_freeze:
- * @folder: a folder
- *
- * Freezes the folder so that a series of operation can be performed
- * without "message_changed" and "folder_changed" signals being emitted.
- * When the folder is later thawed with camel_folder_thaw(), the
- * suppressed signals will be emitted.
- **/
-void camel_folder_freeze(CamelFolder * folder)
-{
-	g_return_if_fail(CAMEL_IS_FOLDER(folder));
-
-	CF_CLASS(folder)->freeze(folder);
-}
-
-static void thaw(CamelFolder * folder)
-{
-	GList *messages, *m;
-
-	folder->frozen--;
-	if (folder->frozen != 0)
-		return;
-
-	/* Clear messages_changed now in case the signal handler ends
-	 * up calling freeze and thaw itself.
-	 */
-	messages = folder->messages_changed;
-	folder->messages_changed = NULL;
-
-	/* If the folder changed, emit that and ignore the individual
-	 * messages (since the UIDs may no longer be valid).
-	 */
-	if (folder->folder_changed) {
-		folder->folder_changed = FALSE;
-
-		camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", GINT_TO_POINTER(0));
-	} else if (messages) {
-		/* FIXME: would be nice to not emit more than once for
-		 * a given message
-		 */
-		for (m = messages; m; m = m->next) {
-			camel_object_trigger_event (CAMEL_OBJECT (folder), "message_changed", m->data);
-			g_free (m->data);
-		}
-		g_list_free (messages);
-		return;
-	}
-
-	if (messages) {
-		for (m = messages; m; m = m->next)
-			g_free (m->data);
-		g_list_free (messages);
-	}
-}
-
-/**
- * camel_folder_thaw:
- * @folder: a folder
- *
- * Thaws the folder and emits any pending folder_changed or
- * message_changed signals.
- **/
-void
-camel_folder_thaw (CamelFolder *folder)
-{
-	g_return_if_fail (CAMEL_IS_FOLDER (folder));
-	g_return_if_fail (folder->frozen != 0);
-
-	CF_CLASS (folder)->thaw (folder);
-}
-
-
-/* Event hooks that block emission when frozen */
-static gboolean folder_changed (CamelObject *obj, /*int type*/gpointer event_data)
-{
-	CamelFolder *folder = CAMEL_FOLDER (obj);
-
-	if (folder->frozen) {
-		folder->folder_changed = TRUE;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static gboolean message_changed (CamelObject *obj, /*const char *uid*/gpointer event_data)
-{
-	CamelFolder *folder = CAMEL_FOLDER (obj);
-
-	if (folder->frozen) {
-		/*
-		 *   if g_tk_signal_handler_pending (CAMEL_OBJECT (folder),
-		 *				signals[MESSAGE_CHANGED],
-		 *				FALSE)) {
-		 */
-
-		/* Only record the UID if it will be useful later. */
-		if (!folder->folder_changed) {
-			folder->messages_changed =
-				g_list_prepend (folder->messages_changed,
-						g_strdup ((gchar *)event_data));
-		}
-
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-
-/**
- * camel_folder_free_nop:
- * @folder: a folder
- * @array: an array of uids, subfolder names, or CamelMessageInfo
- *
- * "Frees" the provided array by doing nothing. Used by CamelFolder
- * subclasses as an implementation for free_uids, free_summary,
- * or free_subfolder_names when the returned array is "static"
- * information and should not be freed.
- **/
-void camel_folder_free_nop(CamelFolder * folder, GPtrArray * array)
-{
-	;
-}
-
-/**
- * camel_folder_free_shallow:
- * @folder: a folder
- * @array: an array of uids, subfolder names, or CamelMessageInfo
- *
- * Frees the provided array but not its contents. Used by CamelFolder
- * subclasses as an implementation for free_uids, free_summary, or
- * free_subfolder_names when the returned array needs to be freed
- * but its contents come from "static" information.
- **/
-void camel_folder_free_shallow(CamelFolder * folder, GPtrArray * array)
-{
-	g_ptr_array_free(array, TRUE);
-}
-
-/**
- * camel_folder_free_deep:
- * @folder: a folder
- * @array: an array of uids or subfolder names
- *
- * Frees the provided array and its contents. Used by CamelFolder
- * subclasses as an implementation for free_uids or
- * free_subfolder_names (but NOT free_summary) when the provided
- * information was created explicitly by the corresponding get_ call.
- **/
-void camel_folder_free_deep(CamelFolder * folder, GPtrArray * array)
-{
-	int i;
-
-	for (i = 0; i < array->len; i++)
-		g_free(array->pdata[i]);
-	g_ptr_array_free(array, TRUE);
-}
diff --git a/camel/camel-folder.h b/camel/camel-folder.h
deleted file mode 100644
index da76618b57..0000000000
--- a/camel/camel-folder.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder.h: Abstract class for an email folder */
-
-/* 
- * Author: 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_FOLDER_H
-#define CAMEL_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_FOLDER_TYPE     (camel_folder_get_type ())
-#define CAMEL_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_FOLDER_TYPE, CamelFolder))
-#define CAMEL_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_FOLDER_TYPE, CamelFolderClass))
-#define CAMEL_IS_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_FOLDER_TYPE))
-
-struct _CamelFolder
-{
-	CamelObject parent_object;
-
-	int frozen;
-	gboolean folder_changed;
-	GList *messages_changed;
-
-	gchar *name;
-	gchar *full_name;
-	gchar *separator;
-	CamelStore *parent_store;
-	CamelFolder *parent_folder;
-	guint32 permanent_flags;
-
-	gboolean path_begins_with_sep;
-	
-	gboolean can_hold_folders:1;
-	gboolean can_hold_messages:1;
-	gboolean has_summary_capability:1;
-	gboolean has_search_capability:1;
-};
-
-typedef struct {
-	CamelObjectClass parent_class;
-
-	/* signals */
-	/* Not anymore! bwahahahah!
-	 * void		(*folder_changed)	(CamelFolder *, int type);
-	 * void            (*message_changed)      (CamelFolder *,
-	 *					 const char *uid);
-	 */
-
-	/* Virtual methods */	
-	void   (*init) (CamelFolder *folder, CamelStore *parent_store,
-			CamelFolder *parent_folder, const gchar *name,
-			gchar *separator, gboolean path_begins_with_sep,
-			CamelException *ex);
-
-	void   (*sync) (CamelFolder *folder, gboolean expunge, 
-			CamelException *ex);
-
-	const gchar *  (*get_name)  (CamelFolder *folder);
-
-	const gchar *  (*get_full_name)  (CamelFolder *folder);
-
-	gboolean   (*can_hold_folders)   (CamelFolder *folder);
-
-	gboolean   (*can_hold_messages)  (CamelFolder *folder);
-
-	CamelFolder *  (*get_subfolder)  (CamelFolder *folder, 
-					  const gchar *folder_name, 
-					  gboolean create,
-					  CamelException *ex);
-
-	CamelFolder *  (*get_parent_folder)   (CamelFolder *folder);
-
-	CamelStore *  (*get_parent_store) (CamelFolder *folder);
-
-	void (*expunge)  (CamelFolder *folder, 
-			  CamelException *ex);
-
-	gint   (*get_message_count)   (CamelFolder *folder);
-
-	gint   (*get_unread_message_count) (CamelFolder *folder);
-
-	void (*append_message)  (CamelFolder *folder, 
-				 CamelMimeMessage *message,
-				 const CamelMessageInfo *info,
-				 CamelException *ex);
-	
-	guint32 (*get_permanent_flags) (CamelFolder *folder);
-	guint32 (*get_message_flags)   (CamelFolder *folder,
-					const char *uid);
-	void    (*set_message_flags)   (CamelFolder *folder,
-					const char *uid,
-					guint32 flags, guint32 set);
-
-	gboolean (*get_message_user_flag) (CamelFolder *folder,
-					   const char *uid,
-					   const char *name);
-	void     (*set_message_user_flag) (CamelFolder *folder,
-					   const char *uid,
-					   const char *name,
-					   gboolean value);
-
-	const char * (*get_message_user_tag) (CamelFolder *folder,
-					      const char *uid,
-					      const char *name);
-	void     (*set_message_user_tag) (CamelFolder *folder,
-					  const char *uid,
-					  const char *name,
-					  const char *value);
-
-	CamelMimeMessage * (*get_message)  (CamelFolder *folder, 
-					    const gchar *uid, 
-					    CamelException *ex);
-
-	void (*delete_message)  (CamelFolder *folder, 
-				 const gchar *uid, 
-				 CamelException *ex);
-
-	GPtrArray * (*get_uids)       (CamelFolder *folder);
-	void (*free_uids)             (CamelFolder *folder,
-				       GPtrArray *array);
-
-	GPtrArray * (*get_summary)    (CamelFolder *folder);
-	void (*free_summary)          (CamelFolder *folder,
-				       GPtrArray *summary);
-
-	GPtrArray * (*get_subfolder_names) (CamelFolder *folder);
-	void (*free_subfolder_names)       (CamelFolder *folder,
-					    GPtrArray *subfolders);
-
-	gboolean (*has_search_capability) (CamelFolder *folder);
-
-	GPtrArray * (*search_by_expression) (CamelFolder *folder,
-					     const char *expression,
-					     CamelException *ex);
-
-	void (*search_free) (CamelFolder *folder, GPtrArray *result);
-
-	const CamelMessageInfo * (*get_message_info) (CamelFolder *, const char *uid);
-
-	void (*copy_message_to) (CamelFolder *source,
-				 const char *uid,
-				 CamelFolder *destination,
-				 CamelException *ex);
-	
-	void (*move_message_to) (CamelFolder *source,
-				 const char *uid,
-				 CamelFolder *destination,
-				 CamelException *ex);
-
-	void (*freeze) (CamelFolder *folder);
-	void (*thaw)   (CamelFolder *folder);
-} CamelFolderClass;
-
-
-
-/* Standard Camel function */
-CamelType camel_folder_get_type (void);
-
-
-/* public methods */
-
-
-
-CamelFolder *      camel_folder_get_subfolder          (CamelFolder *folder, 
-							const gchar *folder_name, 
-							gboolean create,
-							CamelException *ex);
-
-void               camel_folder_sync                   (CamelFolder *folder, 
-							gboolean expunge, 
-							CamelException *ex);
-
-CamelFolder *      camel_folder_get_parent_folder      (CamelFolder *folder);
-CamelStore *       camel_folder_get_parent_store       (CamelFolder *folder);
-
-
-/* delete operations */
-void		   camel_folder_expunge                (CamelFolder *folder, 
-							CamelException *ex);
-
-
-/* folder name operations */
-const gchar *      camel_folder_get_name               (CamelFolder *folder);
-const gchar *      camel_folder_get_full_name          (CamelFolder *folder);
-
-
-/* various properties accessors */
-guint32		   camel_folder_get_permanent_flags    (CamelFolder *folder);
-
-guint32		   camel_folder_get_message_flags      (CamelFolder *folder,
-							const char *uid);
-
-void		   camel_folder_set_message_flags      (CamelFolder *folder,
-							const char *uid,
-							guint32 flags,
-							guint32 set);
-
-gboolean	   camel_folder_get_message_user_flag  (CamelFolder *folder,
-							const char *uid,
-							const char *name);
-
-void		   camel_folder_set_message_user_flag  (CamelFolder *folder,
-							const char *uid,
-							const char *name,
-							gboolean value);
-const char *	   camel_folder_get_message_user_tag  (CamelFolder *folder,
-						       const char *uid,
-						       const char *name);
-
-void		   camel_folder_set_message_user_tag  (CamelFolder *folder,
-						       const char *uid,
-						       const char *name,
-						       const char *value);
-
-
-
-/* message manipulation */
-void               camel_folder_append_message         (CamelFolder *folder, 
-							CamelMimeMessage *message,
-							const CamelMessageInfo *info,
-							CamelException *ex);
-
-
-/* summary related operations */
-gboolean           camel_folder_has_summary_capability (CamelFolder *folder);
-
-
-gint               camel_folder_get_message_count     (CamelFolder *folder);
-
-gint               camel_folder_get_unread_message_count (CamelFolder *folder);
-
-GPtrArray *        camel_folder_get_summary           (CamelFolder *folder);
-void               camel_folder_free_summary          (CamelFolder *folder,
-						       GPtrArray *array);
-
-GPtrArray *        camel_folder_get_subfolder_names   (CamelFolder *folder);
-void               camel_folder_free_subfolder_names  (CamelFolder *folder,
-						       GPtrArray *array);
-
-
-/* uid based access operations */
-CamelMimeMessage * camel_folder_get_message           (CamelFolder *folder, 
-						       const gchar *uid, 
-						       CamelException *ex);
-#define camel_folder_delete_message(folder, uid) \
-	camel_folder_set_message_flags (folder, uid, CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED)
-
-GPtrArray *        camel_folder_get_uids              (CamelFolder *folder);
-void               camel_folder_free_uids             (CamelFolder *folder,
-						       GPtrArray *array);
-
-/* search api */
-gboolean           camel_folder_has_search_capability (CamelFolder *folder);
-GPtrArray *	   camel_folder_search_by_expression  (CamelFolder *folder,
-						       const char *expression,
-						       CamelException *ex);
-void		   camel_folder_search_free	      (CamelFolder *folder, GPtrArray *);
-
-/* summary info */
-const CamelMessageInfo *camel_folder_get_message_info (CamelFolder *summary,
-						       const char *uid);
-
-void               camel_folder_copy_message_to       (CamelFolder *source,
-						       const char *uid,
-						       CamelFolder *dest,
-						       CamelException *ex);
-
-void               camel_folder_move_message_to       (CamelFolder *source,
-						       const char *uid,
-						       CamelFolder *dest,
-						       CamelException *ex);
-
-void               camel_folder_freeze                (CamelFolder *folder);
-void               camel_folder_thaw                  (CamelFolder *folder);
-
-
-/* For use by subclasses (for free_{uids,summary,subfolder_names}) */
-void camel_folder_free_nop     (CamelFolder *folder, GPtrArray *array);
-void camel_folder_free_shallow (CamelFolder *folder, GPtrArray *array);
-void camel_folder_free_deep    (CamelFolder *folder, GPtrArray *array);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_FOLDER_H */
-
diff --git a/camel/camel-internet-address.c b/camel/camel-internet-address.c
deleted file mode 100644
index 65b7e1dfaf..0000000000
--- a/camel/camel-internet-address.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-utils.h"
-#include "camel-internet-address.h"
-
-static int    internet_decode		(CamelAddress *, const char *raw);
-static char * internet_encode		(CamelAddress *);
-static void   internet_remove		(CamelAddress *, int index);
-
-static void camel_internet_address_class_init (CamelInternetAddressClass *klass);
-static void camel_internet_address_init       (CamelInternetAddress *obj);
-
-static CamelAddressClass *camel_internet_address_parent;
-
-struct _address {
-	char *name;
-	char *address;
-};
-
-static void
-camel_internet_address_class_init (CamelInternetAddressClass *klass)
-{
-	CamelAddressClass *address = (CamelAddressClass *) klass;
-
-	camel_internet_address_parent = CAMEL_ADDRESS_CLASS (camel_type_get_global_classfuncs (camel_address_get_type ()));
-
-	address->decode = internet_decode;
-	address->encode = internet_encode;
-	address->remove = internet_remove;
-}
-
-static void
-camel_internet_address_init (CamelInternetAddress *obj)
-{
-}
-
-CamelType
-camel_internet_address_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_address_get_type (), "CamelInternetAddress",
-					    sizeof (CamelInternetAddress),
-					    sizeof (CamelInternetAddressClass),
-					    (CamelObjectClassInitFunc) camel_internet_address_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_internet_address_init,
-					    NULL);
-	}
-	
-	return type;
-}
-
-static int
-internet_decode	(CamelAddress *a, const char *raw)
-{
-	struct _header_address *ha, *n;
-
-	/* Should probably use its own decoder or something */
-	ha = header_address_decode(raw);
-	if (ha) {
-		n = ha;
-		while (n) {
-			if (n->type == HEADER_ADDRESS_NAME) {
-				camel_internet_address_add((CamelInternetAddress *)a, n->name, n->v.addr);
-			} else if (n->type == HEADER_ADDRESS_GROUP) {
-				struct _header_address *g = n->v.members;
-				while (g) {
-					if (g->type == HEADER_ADDRESS_NAME)
-						camel_internet_address_add((CamelInternetAddress *)a, g->name, g->v.addr);
-					/* otherwise, its an error, infact */
-					g = g->next;
-				}
-			}
-			n = n->next;
-		}
-		header_address_list_clear(&ha);
-	}
-	return 0;
-}
-
-static char * internet_encode		(CamelAddress *a)
-{
-	int i;
-	GString *out;
-	char *ret;
-
-	if (a->addresses->len == 0)
-		return NULL;
-
-	out = g_string_new("");
-
-	for (i=0;iaddresses->len;i++) {
-		struct _address *addr = g_ptr_array_index( a->addresses, i );
-		char *name = header_encode_string(addr->name);
-
-		if (i!=0)
-			g_string_append(out, ", ");
-
-		if (name) {
-			if (*name)
-				g_string_sprintfa(out, "%s <%s>", name, addr->address);
-			else if (addr->address)
-				g_string_sprintfa (out, "%s", addr->address);
-			g_free(name);
-		} else
-			g_string_sprintfa(out, "%s", addr->address);
-	}
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-static void   internet_remove		(CamelAddress *a, int index)
-{
-	struct _address *addr;
-
-	if (index <0 || index >= a->addresses->len)
-		return;
-
-	addr = g_ptr_array_index( a->addresses, index);
-	g_free(addr->name);
-	g_free(addr->address);
-	g_free(addr);
-	g_ptr_array_remove_index( a->addresses, index);
-}
-
-/**
- * camel_internet_address_new:
- *
- * Create a new CamelInternetAddress object.
- * 
- * Return value: A new CamelInternetAddress object.
- **/
-CamelInternetAddress *
-camel_internet_address_new (void)
-{
-	CamelInternetAddress *new = CAMEL_INTERNET_ADDRESS ( camel_object_new (camel_internet_address_get_type ()));
-	return new;
-}
-
-/**
- * camel_internet_address_add:
- * @a: 
- * @name: 
- * @address: 
- * 
- * Add a new internet address to the address object.
- * 
- * Return value: Index of added entry.
- **/
-int
-camel_internet_address_add	(CamelInternetAddress *a, const char *name, const char *address)
-{
-	struct _address *new;
-	int index;
-
-	g_return_val_if_fail(IS_CAMEL_INTERNET_ADDRESS(a), -1);
-
-	new = g_malloc(sizeof(*new));
-	new->name = g_strdup(name);
-	new->address = g_strdup(address);
-	index = ((CamelAddress *)a)->addresses->len;
-	g_ptr_array_add(((CamelAddress *)a)->addresses, new);
-
-	return index;
-}
-
-/**
- * camel_internet_address_get:
- * @a: 
- * @index: 
- * @namep: Holder for the returned name, or NULL, if not required.
- * @addressp: Holder for the returned address, or NULL, if not required.
- * 
- * Get the address at @index.
- * 
- * Return value: TRUE if such an address exists, or FALSE otherwise.
- **/
-gboolean
-camel_internet_address_get	(const CamelInternetAddress *a, int index, const char **namep, const char **addressp)
-{
-	struct _address *addr;
-
-	g_return_val_if_fail(IS_CAMEL_INTERNET_ADDRESS(a), -1);
-	g_return_val_if_fail(index >= 0, -1);
-
-	if (index >= ((CamelAddress *)a)->addresses->len)
-		return FALSE;
-
-	addr = g_ptr_array_index( ((CamelAddress *)a)->addresses, index);
-	if (namep)
-		*namep = addr->name;
-	if (addressp)
-		*addressp = addr->address;
-	return TRUE;
-}
-
-/**
- * camel_internet_address_find_name:
- * @a: 
- * @name: 
- * @addressp: Holder for address part, or NULL, if not required.
- * 
- * Find address by real name.
- * 
- * Return value: The index of the address matching the name, or -1
- * if no match was found.
- **/
-int
-camel_internet_address_find_name(CamelInternetAddress *a, const char *name, const char **addressp)
-{
-	struct _address *addr;
-	int i, len;
-
-	g_return_val_if_fail(IS_CAMEL_INTERNET_ADDRESS(a), -1);
-
-	len = ((CamelAddress *)a)->addresses->len;
-	for (i=0;iaddresses, i );
-		if (!strcmp(addr->name, name)) {
-			if (addressp)
-				*addressp = addr->address;
-			return i;
-		}
-	}
-	return -1;
-}
-
-/**
- * camel_internet_address_find_address:
- * @a: 
- * @address: 
- * @namep: Return for the matching name, or NULL, if not required.
- * 
- * Find an address by address.
- * 
- * Return value: The index of the address, or -1 if not found.
- **/
-int
-camel_internet_address_find_address(CamelInternetAddress *a, const char *address, const char **namep)
-{
-	struct _address *addr;
-	int i, len;
-
-	g_return_val_if_fail(IS_CAMEL_INTERNET_ADDRESS(a), -1);
-
-	len = ((CamelAddress *)a)->addresses->len;
-	for (i=0;iaddresses, i );
-		if (!strcmp(addr->address, address)) {
-			if (namep)
-				*namep = addr->name;
-			return i;
-		}
-	}
-	return -1;
-}
diff --git a/camel/camel-internet-address.h b/camel/camel-internet-address.h
deleted file mode 100644
index 6b303eef8f..0000000000
--- a/camel/camel-internet-address.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_INTERNET_ADDRESS_H
-#define _CAMEL_INTERNET_ADDRESS_H
-
-#include 
-
-#define CAMEL_INTERNET_ADDRESS(obj)         CAMEL_CHECK_CAST (obj, camel_internet_address_get_type (), CamelInternetAddress)
-#define CAMEL_INTERNET_ADDRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_internet_address_get_type (), CamelInternetAddressClass)
-#define IS_CAMEL_INTERNET_ADDRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_internet_address_get_type ())
-
-typedef struct _CamelInternetAddressClass CamelInternetAddressClass;
-
-struct _CamelInternetAddress {
-	CamelAddress parent;
-
-	struct _CamelInternetAddressPrivate *priv;
-};
-
-struct _CamelInternetAddressClass {
-	CamelAddressClass parent_class;
-};
-
-guint			camel_internet_address_get_type	(void);
-CamelInternetAddress   *camel_internet_address_new	(void);
-
-int			camel_internet_address_add	(CamelInternetAddress *, const char *, const char *);
-gboolean		camel_internet_address_get	(const CamelInternetAddress *, int, const char **, const char **);
-
-int			camel_internet_address_find_name(CamelInternetAddress *, const char *, const char **);
-int			camel_internet_address_find_address(CamelInternetAddress *, const char *, const char **);
-
-#endif /* ! _CAMEL_INTERNET_ADDRESS_H */
diff --git a/camel/camel-medium.c b/camel/camel-medium.c
deleted file mode 100644
index 3c5954e40f..0000000000
--- a/camel/camel-medium.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* camelMedium.c : Abstract class for a medium
- *
- * Authors: Bertrand Guiheneuf 
- * 	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include 
-#include 
-#include "camel-medium.h"
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "hash-table-utils.h"
-
-#define d(x)
-
-static CamelDataWrapperClass *parent_class = NULL;
-
-/* Returns the class for a CamelMedium */
-#define CM_CLASS(so) CAMEL_MEDIUM_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static void add_header (CamelMedium *medium, const gchar *header_name,
-			const void *header_value);
-static void set_header (CamelMedium *medium, const gchar *header_name, const void *header_value);
-static void remove_header (CamelMedium *medium, const gchar *header_name);
-static const void *get_header (CamelMedium *medium, const gchar *header_name);
-
-static CamelDataWrapper *get_content_object (CamelMedium *medium);
-static void set_content_object (CamelMedium *medium,
-				CamelDataWrapper *content);
-
-static void
-camel_medium_class_init (CamelMediumClass *camel_medium_class)
-{
-	/*
-	 * CamelDataWrapperClass *camel_data_wrapper_class =
-	 *	CAMEL_DATA_WRAPPER_CLASS (camel_medium_class);
-	 */
-
-	parent_class = CAMEL_DATA_WRAPPER_CLASS (camel_type_get_global_classfuncs (camel_data_wrapper_get_type ()));
-
-	/* virtual method definition */
-	camel_medium_class->add_header = add_header;
-	camel_medium_class->set_header = set_header;
-	camel_medium_class->remove_header = remove_header;
-	camel_medium_class->get_header = get_header;
-
-	camel_medium_class->set_content_object = set_content_object;
-	camel_medium_class->get_content_object = get_content_object;
-}
-
-static void
-camel_medium_init (gpointer object, gpointer klass)
-{
-	CamelMedium *camel_medium = CAMEL_MEDIUM (object);
-
-	camel_medium->content = NULL;
-}
-
-static void
-camel_medium_finalize (CamelObject *object)
-{
-	CamelMedium *medium = CAMEL_MEDIUM (object);
-
-	if (medium->content)
-		camel_object_unref (CAMEL_OBJECT (medium->content));
-}
-
-
-CamelType
-camel_medium_get_type (void)
-{
-	static CamelType camel_medium_type = CAMEL_INVALID_TYPE;
-
-	if (camel_medium_type == CAMEL_INVALID_TYPE) {
-		camel_medium_type = camel_type_register (CAMEL_DATA_WRAPPER_TYPE, "medium",
-							 sizeof (CamelMedium),
-							 sizeof (CamelMediumClass),
-							 (CamelObjectClassInitFunc) camel_medium_class_init,
-							 NULL,
-							 (CamelObjectInitFunc) camel_medium_init,
-							 (CamelObjectFinalizeFunc) camel_medium_finalize);
-	}
-
-	return camel_medium_type;
-}
-
-static void
-add_header (CamelMedium *medium, const gchar *header_name,
-	    const void *header_value)
-{
-	g_warning("No %s::add_header implemented, adding %s", camel_type_to_name(CAMEL_OBJECT_GET_TYPE(medium)), header_name);
-}
-
-/**
- * camel_medium_add_header:
- * @medium: a CamelMedium
- * @header_name: name of the header
- * @header_value: value of the header
- *
- * Adds a header to a medium.
- *
- * FIXME: Where does it add it? We need to be able to prepend and
- * append headers, and also be able to insert them relative to other
- * headers.   No we dont, order isn't important! Z
- **/
-void
-camel_medium_add_header (CamelMedium *medium, const gchar *header_name,
-			 const void *header_value)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (header_name != NULL);
-	g_return_if_fail (header_value != NULL);
-
-	CM_CLASS (medium)->add_header (medium, header_name, header_value);
-}
-
-static void
-set_header (CamelMedium *medium, const gchar *header_name, const void *header_value)
-{
-	g_warning("No %s::set_header implemented, setting %s", camel_type_to_name(CAMEL_OBJECT_GET_TYPE(medium)), header_name);
-}
-
-/**
- * camel_medium_set_header:
- * @medium: a CamelMedium
- * @header_name: name of the header
- * @header_value: value of the header
- *
- * Sets the value of a header.  Any other occurances of the header
- * will be removed.
- **/
-void
-camel_medium_set_header (CamelMedium *medium, const gchar *header_name, const void *header_value)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (header_name != NULL);
-	g_return_if_fail (header_value != NULL);
-
-	CM_CLASS (medium)->add_header (medium, header_name, header_value);
-}
-
-static void
-remove_header (CamelMedium *medium, const gchar *header_name)
-{
-	g_warning("No %s::remove_header implemented, removing %s", camel_type_to_name(CAMEL_OBJECT_GET_TYPE(medium)), header_name);
-}
-
-/**
- * camel_medium_remove_header:
- * @medium: a medium
- * @header_name: the name of the header
- *
- * Removes the named header from the medium.  All occurances of the
- * header are removed.
- **/
-void
-camel_medium_remove_header (CamelMedium *medium, const gchar *header_name)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (header_name != NULL);
-
-	CM_CLASS (medium)->remove_header (medium, header_name);
-}
-
-
-static const void *
-get_header (CamelMedium *medium, const gchar *header_name)
-{
-	g_warning("No %s::get_header implemented, getting %s", camel_type_to_name(CAMEL_OBJECT_GET_TYPE(medium)), header_name);
-	return NULL;
-}
-
-/**
- * camel_medium_get_header:
- * @medium: a medium
- * @header_name: the name of the header
- *
- * Returns the value of the named header in the medium, or %NULL if
- * it is unset. The caller should not modify or free the data.
- *
- * FIXME: What if the header occurs more than once?
- *
- * Return value: the value of the named header, or %NULL
- **/
-const void *
-camel_medium_get_header (CamelMedium *medium, const gchar *header_name)
-{
-	g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
-	g_return_val_if_fail (header_name != NULL, NULL);
-
-#ifndef NO_WARNINGS
-#warning No way to get multi-valued headers?
-#endif
-
-	return CM_CLASS (medium)->get_header (medium, header_name);
-}
-
-
-static CamelDataWrapper *
-get_content_object (CamelMedium *medium)
-{
-	return medium->content;
-}
-
-/**
- * camel_medium_get_content_object:
- * @medium: a medium
- *
- * Returns a data wrapper that represents the content of the medium,
- * without its headers.
- *
- * Return value: the medium's content object.
- **/
-CamelDataWrapper *
-camel_medium_get_content_object (CamelMedium *medium)
-{
-	g_return_val_if_fail (CAMEL_IS_MEDIUM (medium), NULL);
-
-	return CM_CLASS (medium)->get_content_object (medium);
-}
-
-
-static void
-set_content_object (CamelMedium *medium, CamelDataWrapper *content)
-{
-	if (medium->content)
-		camel_object_unref (CAMEL_OBJECT (medium->content));
-	camel_object_ref (CAMEL_OBJECT (content));
-	medium->content = content;
-}
-
-/**
- * camel_medium_set_content_object:
- * @medium: a medium
- * @content: a data wrapper representing the medium's content
- *
- * Sets the content of @medium to be @content.
- **/
-void
-camel_medium_set_content_object (CamelMedium *medium,
-				 CamelDataWrapper *content)
-{
-	g_return_if_fail (CAMEL_IS_MEDIUM (medium));
-	g_return_if_fail (CAMEL_IS_DATA_WRAPPER (content));
-
-	CM_CLASS (medium)->set_content_object (medium, content);
-}
diff --git a/camel/camel-medium.h b/camel/camel-medium.h
deleted file mode 100644
index 9ce548ba1d..0000000000
--- a/camel/camel-medium.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-medium.h : class for a medium object */
-
-/*
- *
- * Authors:  Bertrand Guiheneuf 
- *	     Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MEDIUM_H
-#define CAMEL_MEDIUM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-#define CAMEL_MEDIUM_TYPE     (camel_medium_get_type ())
-#define CAMEL_MEDIUM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MEDIUM_TYPE, CamelMedium))
-#define CAMEL_MEDIUM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MEDIUM_TYPE, CamelMediumClass))
-#define CAMEL_IS_MEDIUM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MEDIUM_TYPE))
-
-
-struct _CamelMedium
-{
-	CamelDataWrapper parent_object;
-
-	/* The content of the medium, as opposed to our parent
-	 * CamelDataWrapper, which wraps both the headers and the
-	 * content.
-	 */
-	CamelDataWrapper *content;
-
-};
-
-
-
-typedef struct {
-	CamelDataWrapperClass parent_class;
-
-	/* Virtual methods */
-	void  (*add_header) (CamelMedium *medium, const gchar *header_name, const void *header_value);
-	void  (*set_header) (CamelMedium *medium, const gchar *header_name, const void *header_value);
-	void  (*remove_header) (CamelMedium *medium, const gchar *header_name);
-	const void * (*get_header) (CamelMedium *medium,  const gchar *header_name);
-
-	CamelDataWrapper * (*get_content_object) (CamelMedium *medium);
-	void (*set_content_object) (CamelMedium *medium, CamelDataWrapper *content);
-
-} CamelMediumClass;
-
-/* Standard Camel function */
-CamelType camel_medium_get_type (void);
-
-/* Header get/set interface */
-void camel_medium_add_header (CamelMedium *medium, const gchar *header_name, const void *header_value);
-void camel_medium_set_header (CamelMedium *medium, const gchar *header_name, const void *header_value);
-void camel_medium_remove_header (CamelMedium *medium, const gchar *header_name);
-const void *camel_medium_get_header (CamelMedium *medium, const gchar *header_name);
-
-/* accessor methods */
-CamelDataWrapper *camel_medium_get_content_object (CamelMedium *medium);
-void camel_medium_set_content_object (CamelMedium *medium,
-				      CamelDataWrapper *content);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MEDIUM_H */
-
diff --git a/camel/camel-mime-filter-basic.c b/camel/camel-mime-filter-basic.c
deleted file mode 100644
index 4b351e4ff4..0000000000
--- a/camel/camel-mime-filter-basic.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter-basic.h"
-
-#include "camel-mime-utils.h"
-
-static void reset(CamelMimeFilter *mf);
-static void complete(CamelMimeFilter *mf, char *in, size_t len, 
-		     size_t prespace, char **out, 
-		     size_t *outlen, size_t *outprespace);
-static void filter(CamelMimeFilter *mf, char *in, size_t len, 
-		   size_t prespace, char **out, 
-		   size_t *outlen, size_t *outprespace);
-
-static void camel_mime_filter_basic_class_init (CamelMimeFilterBasicClass *klass);
-static void camel_mime_filter_basic_init       (CamelMimeFilterBasic *obj);
-
-static CamelMimeFilterClass *camel_mime_filter_basic_parent;
-
-static void
-camel_mime_filter_basic_class_init (CamelMimeFilterBasicClass *klass)
-{
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_basic_parent = CAMEL_MIME_FILTER_CLASS(camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
-
-	filter_class->reset = reset;
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-}
-
-static void
-camel_mime_filter_basic_init (CamelMimeFilterBasic *obj)
-{
-	obj->state = 0;
-	obj->save = 0;
-}
-
-
-CamelType
-camel_mime_filter_basic_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterBasic",
-					    sizeof (CamelMimeFilterBasic),
-					    sizeof (CamelMimeFilterBasicClass),
-					    (CamelObjectClassInitFunc) camel_mime_filter_basic_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_mime_filter_basic_init,
-					    NULL);
-	}
-	
-	return type;
-}
-
-/* should this 'flush' outstanding state/data bytes? */
-static void
-reset(CamelMimeFilter *mf)
-{
-	CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
-
-	switch(f->type) {
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-		f->state = -1;
-		break;
-	default:
-		f->state = 0;
-	}
-	f->save = 0;
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
-	int newlen;
-
-	switch(f->type) {
-	case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
-		/* wont go to more than 2x size (overly conservative) */
-		camel_mime_filter_set_size(mf, len*2, FALSE);
-		newlen = base64_encode_close(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-		/* FIXME: *3 is probably not quite enough ... */
-		camel_mime_filter_set_size(mf, len*3, FALSE);
-		newlen = quoted_encode_close(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = base64_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	default:
-		g_warning("unknown type %d in CamelMimeFilterBasic", f->type);
-		goto donothing;
-	}
-
-	*out = mf->outbuf;
-	*outlen = newlen;
-	*outprespace = mf->outpre;
-
-	return;
-donothing:
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-/* here we do all of the basic mime filtering */
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
-	int newlen;
-
-	switch(f->type) {
-	case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
-		/* wont go to more than 2x size (overly conservative) */
-		camel_mime_filter_set_size(mf, len*2, FALSE);
-		newlen = base64_encode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-		/* FIXME: *3 is probably not quite enough ... */
-		camel_mime_filter_set_size(mf, len*3, FALSE);
-		newlen = quoted_encode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = base64_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	case CAMEL_MIME_FILTER_BASIC_QP_DEC:
-		/* output can't possibly exceed the input size */
-		camel_mime_filter_set_size(mf, len, FALSE);
-		newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
-		break;
-	default:
-		g_warning("unknown type %d in CamelMimeFilterBasic", f->type);
-		goto donothing;
-	}
-
-	*out = mf->outbuf;
-	*outlen = newlen;
-	*outprespace = mf->outpre;
-
-	return;
-donothing:
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-/**
- * camel_mime_filter_basic_new:
- *
- * Create a new CamelMimeFilterBasic object.
- * 
- * Return value: A new CamelMimeFilterBasic widget.
- **/
-CamelMimeFilterBasic *
-camel_mime_filter_basic_new (void)
-{
-	CamelMimeFilterBasic *new = CAMEL_MIME_FILTER_BASIC ( camel_object_new (camel_mime_filter_basic_get_type ()));
-	return new;
-}
-
-CamelMimeFilterBasic *
-camel_mime_filter_basic_new_type(CamelMimeFilterBasicType type)
-{
-	CamelMimeFilterBasic *new;
-
-	switch (type) {
-	case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
-	case CAMEL_MIME_FILTER_BASIC_QP_ENC:
-	case CAMEL_MIME_FILTER_BASIC_BASE64_DEC:
-	case CAMEL_MIME_FILTER_BASIC_QP_DEC:
-		new = camel_mime_filter_basic_new();
-		new->type = type;
-		break;
-	default:
-		g_warning("Invalid type of CamelMimeFilterBasic requested: %d", type);
-		new = NULL;
-		break;
-	}
-	camel_mime_filter_reset((CamelMimeFilter *)new);
-	return new;
-}
-
diff --git a/camel/camel-mime-filter-basic.h b/camel/camel-mime-filter-basic.h
deleted file mode 100644
index 42713e334d..0000000000
--- a/camel/camel-mime-filter-basic.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_BASIC_H
-#define _CAMEL_MIME_FILTER_BASIC_H
-
-#include 
-
-#define CAMEL_MIME_FILTER_BASIC(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_basic_get_type (), CamelMimeFilterBasic)
-#define CAMEL_MIME_FILTER_BASIC_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_basic_get_type (), CamelMimeFilterBasicClass)
-#define IS_CAMEL_MIME_FILTER_BASIC(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_basic_get_type ())
-
-typedef struct _CamelMimeFilterBasicClass CamelMimeFilterBasicClass;
-
-typedef enum {
-	CAMEL_MIME_FILTER_BASIC_BASE64_ENC = 1,
-	CAMEL_MIME_FILTER_BASIC_BASE64_DEC,
-	CAMEL_MIME_FILTER_BASIC_QP_ENC,
-	CAMEL_MIME_FILTER_BASIC_QP_DEC,
-} CamelMimeFilterBasicType;
-
-struct _CamelMimeFilterBasic {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterBasicPrivate *priv;
-
-	CamelMimeFilterBasicType type;
-
-	int state;
-	int save;
-};
-
-struct _CamelMimeFilterBasicClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_basic_get_type	(void);
-CamelMimeFilterBasic      *camel_mime_filter_basic_new	(void);
-CamelMimeFilterBasic      *camel_mime_filter_basic_new_type	(CamelMimeFilterBasicType type);
-
-#endif /* ! _CAMEL_MIME_FILTER_BASIC_H */
diff --git a/camel/camel-mime-filter-charset.c b/camel/camel-mime-filter-charset.c
deleted file mode 100644
index 788c7022ab..0000000000
--- a/camel/camel-mime-filter-charset.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-
-#include 
-
-#include 
-#include 
-
-#include "camel-mime-filter-charset.h"
-
-
-static void camel_mime_filter_charset_class_init (CamelMimeFilterCharsetClass *klass);
-static void camel_mime_filter_charset_init       (CamelMimeFilterCharset *obj);
-static void camel_mime_filter_charset_finalize   (CamelObject *o);
-
-static CamelMimeFilterClass *camel_mime_filter_charset_parent;
-
-CamelType
-camel_mime_filter_charset_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterCharset",
-					    sizeof (CamelMimeFilterCharset),
-					    sizeof (CamelMimeFilterCharsetClass),
-					    (CamelObjectClassInitFunc) camel_mime_filter_charset_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_mime_filter_charset_init,
-					    (CamelObjectFinalizeFunc) camel_mime_filter_charset_finalize);
-	}
-	
-	return type;
-}
-
-static void
-camel_mime_filter_charset_finalize(CamelObject *o)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)o;
-
-	g_free(f->from);
-	g_free(f->to);
-	if (f->ic != (unicode_iconv_t)-1) {
-		unicode_iconv_close(f->ic);
-		f->ic = (unicode_iconv_t) -1;
-	}
-}
-
-static void
-reset(CamelMimeFilter *mf)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
-	char buf[16];
-	char *buffer;
-	int outlen = 16;
-
-	/* what happens with the output bytes if this resets the state? */
-	if (f->ic != (unicode_iconv_t) -1) {
-		buffer = buf;
-		unicode_iconv(f->ic, NULL, 0, &buffer, &outlen);
-	}
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
-	int converted;
-	const char *inbuf;
-	char *outbuf;
-	int inlen, outlen;
-
-	if (f->ic == (unicode_iconv_t) -1) {
-		goto donothing;
-	}
-
-	/* FIXME: there's probably a safer way to size this ...? */
-	/* We could always resize if we run out of room in outbuf (but it'd be nice not
-	   to have to) */
-	camel_mime_filter_set_size(mf, len*5, FALSE);
-	inbuf = in;
-	inlen = len;
-	outbuf = mf->outbuf;
-	outlen = mf->outsize;
-	if (inlen>0) {
-		converted = unicode_iconv(f->ic, &inbuf, &inlen, &outbuf, &outlen);
-		if (converted == -1) {
-			if (errno != EINVAL) {
-				g_warning("error occured converting: %s", strerror(errno));
-				goto donothing;
-			}
-		}
-
-		if (inlen>0) {
-			g_warning("Output lost in character conversion, invalid sequence encountered?");
-		}
-	}
-
-	/* this 'resets' the output stream, returning back to the initial
-	   shift state for multishift charactersets */
-	converted = unicode_iconv(f->ic, NULL, 0, &outbuf, &outlen);
-	if (converted == -1) {
-		g_warning("Conversion failed to complete: %s", strerror(errno));
-	}
-
-	*out = mf->outbuf;
-	*outlenptr = mf->outsize - outlen;
-	*outprespace = mf->outpre;
-	return;
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
-	int converted;
-	const char *inbuf;
-	char *outbuf;
-	int inlen, outlen;
-
-	if (f->ic == (unicode_iconv_t) -1) {
-		goto donothing;
-	}
-
-	/* FIXME: there's probably a safer way to size this ...? */
-	camel_mime_filter_set_size(mf, len*5, FALSE);
-	inbuf = in;
-	inlen = len;
-	outbuf = mf->outbuf;
-	outlen = mf->outsize;
-	converted = unicode_iconv(f->ic, &inbuf, &inlen, &outbuf, &outlen);
-	if (converted == -1) {
-		if (errno != EINVAL) {
-			g_warning("error occured converting: %s", strerror(errno));
-			goto donothing;
-		}
-	}
-
-	/*
-	  NOTE: This assumes EINVAL only occurs because we ran out of
-	  bytes for a multibyte sequence, if not, we're in trouble.
-	*/
-
-	if (inlen>0) {
-		camel_mime_filter_backup(mf, inbuf, inlen);
-	}
-
-	*out = mf->outbuf;
-	*outlenptr = mf->outsize - outlen;
-	*outprespace = mf->outpre;
-	return;
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_charset_class_init (CamelMimeFilterCharsetClass *klass)
-{
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_charset_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
-
-	filter_class->reset = reset;
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-}
-
-static void
-camel_mime_filter_charset_init (CamelMimeFilterCharset *obj)
-{
-	obj->ic = (unicode_iconv_t)-1;
-}
-
-/**
- * camel_mime_filter_charset_new:
- *
- * Create a new CamelMimeFilterCharset object.
- * 
- * Return value: A new CamelMimeFilterCharset widget.
- **/
-CamelMimeFilterCharset *
-camel_mime_filter_charset_new (void)
-{
-	CamelMimeFilterCharset *new = CAMEL_MIME_FILTER_CHARSET ( camel_object_new (camel_mime_filter_charset_get_type ()));
-	return new;
-}
-
-CamelMimeFilterCharset *
-camel_mime_filter_charset_new_convert(const char *from_charset, const char *to_charset)
-{
-	CamelMimeFilterCharset *new = CAMEL_MIME_FILTER_CHARSET ( camel_object_new (camel_mime_filter_charset_get_type ()));
-
-	new->ic = unicode_iconv_open(to_charset, from_charset);
-	if (new->ic == (unicode_iconv_t) -1) {
-		g_warning("Cannot create charset conversion from %s to %s: %s", from_charset, to_charset, strerror(errno));
-		camel_object_unref((CamelObject *)new);
-		new = NULL;
-	} else {
-		new->from = g_strdup(from_charset);
-		new->to = g_strdup(to_charset);
-	}
-	return new;
-}
diff --git a/camel/camel-mime-filter-charset.h b/camel/camel-mime-filter-charset.h
deleted file mode 100644
index c53254c8ab..0000000000
--- a/camel/camel-mime-filter-charset.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_CHARSET_H
-#define _CAMEL_MIME_FILTER_CHARSET_H
-
-#include 
-#include 
-
-#define CAMEL_MIME_FILTER_CHARSET(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_charset_get_type (), CamelMimeFilterCharset)
-#define CAMEL_MIME_FILTER_CHARSET_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_charset_get_type (), CamelMimeFilterCharsetClass)
-#define IS_CAMEL_MIME_FILTER_CHARSET(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_charset_get_type ())
-
-typedef struct _CamelMimeFilterCharsetClass CamelMimeFilterCharsetClass;
-
-struct _CamelMimeFilterCharset {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterCharsetPrivate *priv;
-
-	unicode_iconv_t ic;
-	char *from;
-	char *to;
-};
-
-struct _CamelMimeFilterCharsetClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_charset_get_type	(void);
-CamelMimeFilterCharset      *camel_mime_filter_charset_new	(void);
-
-CamelMimeFilterCharset      *camel_mime_filter_charset_new_convert	(const char *from_charset, const char *to_charset);
-
-#endif /* ! _CAMEL_MIME_FILTER_CHARSET_H */
diff --git a/camel/camel-mime-filter-crlf.c b/camel/camel-mime-filter-crlf.c
deleted file mode 100644
index 71a3e8bace..0000000000
--- a/camel/camel-mime-filter-crlf.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Copyright (C) 2000 Helix Code, Inc.
- *
- *  Authors: Dan Winship 
- *           Jeffrey Stedfast 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter-crlf.h"
-
-static void filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
-		    char **out, size_t *outlen, size_t *outprespace);
-static void complete (CamelMimeFilter *f, char *in, size_t len,
-		      size_t prespace, char **out, size_t *outlen,
-		      size_t *outprespace);
-static void reset (CamelMimeFilter *f);
-
-
-static void
-camel_mime_filter_crlf_class_init (CamelMimeFilterCRLFClass *klass)
-{
-	CamelMimeFilterClass *mime_filter_class =
-		(CamelMimeFilterClass *) klass;
-	
-	mime_filter_class->filter = filter;
-	mime_filter_class->complete = complete;
-	mime_filter_class->reset = reset;
-}
-
-CamelType
-camel_mime_filter_crlf_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_mime_filter_get_type(), "CamelMimeFilterCRLF",
-					    sizeof (CamelMimeFilterCRLF),
-					    sizeof (CamelMimeFilterCRLFClass),
-					    (CamelObjectClassInitFunc) camel_mime_filter_crlf_class_init,
-					    NULL,
-					    NULL,
-					    NULL);
-	}
-
-	return type;
-}
-
-static void
-filter (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
-	char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterCRLF *crlf = (CamelMimeFilterCRLF *)f;
-	gboolean do_dots;
-	char *p, *q;
-
-	do_dots = crlf->mode == CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS;
-
-	if (crlf->direction == CAMEL_MIME_FILTER_CRLF_ENCODE) {
-		camel_mime_filter_set_size (f, 3 * len, FALSE);
-
-		p = in;
-		q = f->outbuf;
-		while (p < in + len) {
-			if (*p == '\n')
-				*q++ = '\r';
-			else
-				if (do_dots && *(p - 1) == '\n' && *p == '.')
-					*q++ = '.';
-			*q++ = *p++;
-		}
-	} else {
-		camel_mime_filter_set_size (f, len, FALSE);
-
-		p = in;
-		q = f->outbuf;
-		while (p < in + len) {
-			if (*p == '\r') {
-				crlf->saw_cr = TRUE;
-			} else {
-				if (crlf->saw_cr) {
-					if (*p != '\n')
-						*q++ = '\r';
-					crlf->saw_cr = FALSE;
-				}
-				*q++ = *p;
-			}
-
-			if (do_dots) {
-				if (*p == '.' && *(p - 1) == '\n') {
-					crlf->saw_dot = TRUE;
-				} else {
-					if (crlf->saw_dot) {
-						if (*p == '.')
-							p++;
-						crlf->saw_dot = FALSE;
-					}
-					*q++ = *p;
-				}
-			}
-
-			p++;
-		}
-	}
-
-	*out = f->outbuf;
-	*outlen = q - f->outbuf;
-	*outprespace = f->outpre;
-}
-
-static void 
-complete (CamelMimeFilter *f, char *in, size_t len, size_t prespace,
-	  char **out, size_t *outlen, size_t *outprespace)
-{
-	if (len)
-		filter (f, in, len, prespace, out, outlen, outprespace);
-}
-
-static void
-reset (CamelMimeFilter *f)
-{
-	CamelMimeFilterCRLF *crlf = (CamelMimeFilterCRLF *)f;
-
-	crlf->saw_cr = FALSE;
-}
-
-CamelMimeFilter *
-camel_mime_filter_crlf_new (CamelMimeFilterCRLFDirection direction, CamelMimeFilterCRLFMode mode)
-{
-	CamelMimeFilterCRLF *crlf = CAMEL_MIME_FILTER_CRLF(camel_object_new (CAMEL_MIME_FILTER_CRLF_TYPE));
-
-	crlf->direction = direction;
-	crlf->mode = mode;
-	crlf->saw_cr = FALSE;
-
-	return (CamelMimeFilter *)crlf;
-}
diff --git a/camel/camel-mime-filter-crlf.h b/camel/camel-mime-filter-crlf.h
deleted file mode 100644
index 6ba109d154..0000000000
--- a/camel/camel-mime-filter-crlf.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Dan Winship 
- *           Jeffrey Stedfast 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_CRLF_H
-#define _CAMEL_MIME_FILTER_CRLF_H
-
-#include 
-
-#define CAMEL_MIME_FILTER_CRLF_TYPE         (camel_mime_filter_crlf_get_type ())
-#define CAMEL_MIME_FILTER_CRLF(obj)         CAMEL_CHECK_CAST (obj, CAMEL_MIME_FILTER_CRLF_TYPE, CamelMimeFilterCRLF)
-#define CAMEL_MIME_FILTER_CRLF_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, CAMEL_MIME_FILTER_CRLF_TYPE, CamelMimeFilterCRLFClass)
-#define CAMEL_IS_MIME_FILTER_CRLF(obj)      CAMEL_CHECK_TYPE (obj, CAMEL_MIME_FILTER_CRLF_TYPE)
-
-typedef struct _CamelMimeFilterCRLFClass CamelMimeFilterCRLFClass;
-
-typedef enum {
-	CAMEL_MIME_FILTER_CRLF_ENCODE,
-	CAMEL_MIME_FILTER_CRLF_DECODE
-} CamelMimeFilterCRLFDirection;
-
-typedef enum {
-	CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS,
-	CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY,
-} CamelMimeFilterCRLFMode;
-
-struct _CamelMimeFilterCRLF {
-	CamelMimeFilter parent;
-
-	CamelMimeFilterCRLFDirection direction;
-	CamelMimeFilterCRLFMode mode;
-	gboolean saw_cr;
-	gboolean saw_dot;
-};
-
-struct _CamelMimeFilterCRLFClass {
-	CamelMimeFilterClass parent_class;
-};
-
-CamelType camel_mime_filter_crlf_get_type (void);
-
-CamelMimeFilter *camel_mime_filter_crlf_new (CamelMimeFilterCRLFDirection direction, CamelMimeFilterCRLFMode mode);
-
-#endif /* ! _CAMEL_MIME_FILTER_CRLF_H */
diff --git a/camel/camel-mime-filter-from.c b/camel/camel-mime-filter-from.c
deleted file mode 100644
index 017a256471..0000000000
--- a/camel/camel-mime-filter-from.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#include "camel-mime-filter-from.h"
-#include 
-
-#define d(x)
-
-struct _CamelMimeFilterFromPrivate {
-};
-
-#define _PRIVATE(o) (((CamelMimeFilterFrom *)(o))->priv)
-
-static void camel_mime_filter_from_class_init (CamelMimeFilterFromClass *klass);
-static void camel_mime_filter_from_init       (CamelMimeFilterFrom *obj);
-
-static CamelMimeFilterClass *camel_mime_filter_from_parent;
-
-CamelType
-camel_mime_filter_from_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterFrom",
-					    sizeof (CamelMimeFilterFrom),
-					    sizeof (CamelMimeFilterFromClass),
-					    (CamelObjectClassInitFunc) camel_mime_filter_from_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_mime_filter_from_init,
-					    NULL);
-	}
-	
-	return type;
-}
-
-struct fromnode {
-	struct fromnode *next;
-	char *pointer;
-};
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-/* Yes, it is complicated ... */
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterFrom *f = (CamelMimeFilterFrom *)mf;
-	register char *inptr, *inend;
-	int left;
-	int midline = f->midline;
-	int fromcount = 0;
-	struct fromnode *head = NULL, *tail = (struct fromnode *)&head, *node;
-	char *outptr;
-
-	inptr = in;
-	inend = inptr+len;
-
-	d(printf("Filtering '%.*s'\n", len, in));
-
-	/* first, see if we need to escape any from's */
-	while (inptr 0) {
-				midline = TRUE;
-				if (left < 5) {
-					if (inptr[0] == 'F') {
-						camel_mime_filter_backup(mf, inptr, left);
-						midline = FALSE;
-						inend = inptr;
-						break;
-					}
-				} else {
-					if (!strncmp(inptr, "From ", 5)) {
-						fromcount++;
-						/* yes, we do alloc them on the stack ... at most we're going to get
-						   len / 7 of them anyway */
-						node = alloca(sizeof(*node));
-						node->pointer = inptr;
-						node->next = NULL;
-						tail->next = node;
-						tail = node;
-						inptr += 5;
-					}
-				}
-			} else {
-				/* \n is at end of line, check next buffer */
-				midline = FALSE;
-			}
-		}
-	}
-
-	f->midline = midline;
-
-	if (fromcount > 0) {
-		camel_mime_filter_set_size(mf, len + fromcount, FALSE);
-		node = head;
-		inptr = in;
-		outptr = mf->outbuf;
-		while (node) {
-			memcpy(outptr, inptr, node->pointer - inptr);
-			outptr += node->pointer - inptr;
-			*outptr++ = '>';
-			inptr = node->pointer;
-			node = node->next;
-		}
-		memcpy(outptr, inptr, inend - inptr);
-		outptr += inend - inptr;
-		*out = mf->outbuf;
-		*outlen = outptr - mf->outbuf;
-		*outprespace = mf->outbuf - mf->outreal;
-
-		d(printf("Filtered '%.*s'\n", *outlen, *out));
-	} else {
-		*out = in;
-		*outlen = inend - in;
-		*outprespace = prespace;
-		
-		d(printf("Filtered '%.*s'\n", *outlen, *out));
-	}
-}
-
-static void
-camel_mime_filter_from_class_init (CamelMimeFilterFromClass *klass)
-{
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_from_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
-
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-}
-
-static void
-camel_mime_filter_from_init (CamelMimeFilterFrom *obj)
-{
-	struct _CamelMimeFilterFromPrivate *p;
-
-	p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
-	obj->midline = FALSE;
-}
-
-/**
- * camel_mime_filter_from_new:
- *
- * Create a new CamelMimeFilterFrom object.
- * 
- * Return value: A new CamelMimeFilterFrom widget.
- **/
-CamelMimeFilterFrom *
-camel_mime_filter_from_new (void)
-{
-	CamelMimeFilterFrom *new = CAMEL_MIME_FILTER_FROM ( camel_object_new (camel_mime_filter_from_get_type ()));
-	return new;
-}
-
-#if 0
-
-#include 
-
-int main(int argc, char **argv)
-{
-	CamelMimeFilterFrom *f;
-	char *buffer;
-	int len, prespace;
-
-	g_tk_init(&argc, &argv);
-
-
-	f = camel_mime_filter_from_new();
-
-	buffer = "This is a test\nFrom Someone\nTo someone. From Someone else, From\n From blah\nFromblah\nBye! \nFrom ";
-	len = strlen(buffer);
-	prespace = 0;
-
-	printf("input = '%.*s'\n", len, buffer);
-	camel_mime_filter_filter(f, buffer, len, prespace, &buffer, &len, &prespace);
-	printf("output = '%.*s'\n", len, buffer);
-	buffer = "";
-	len = 0;
-	prespace = 0;
-	camel_mime_filter_complete(f, buffer, len, prespace, &buffer, &len, &prespace);
-	printf("complete = '%.*s'\n", len, buffer);
-	
-
-	return 0;
-}
-
-#endif
diff --git a/camel/camel-mime-filter-from.h b/camel/camel-mime-filter-from.h
deleted file mode 100644
index ac526b6e15..0000000000
--- a/camel/camel-mime-filter-from.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#ifndef _CAMEL_MIME_FILTER_FROM_H
-#define _CAMEL_MIME_FILTER_FROM_H
-
-#include 
-
-#define CAMEL_MIME_FILTER_FROM(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_from_get_type (), CamelMimeFilterFrom)
-#define CAMEL_MIME_FILTER_FROM_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_from_get_type (), CamelMimeFilterFromClass)
-#define IS_CAMEL_MIME_FILTER_FROM(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_from_get_type ())
-
-typedef struct _CamelMimeFilterFrom      CamelMimeFilterFrom;
-typedef struct _CamelMimeFilterFromClass CamelMimeFilterFromClass;
-
-struct _CamelMimeFilterFrom {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterFromPrivate *priv;
-
-	int midline;		/* are we between lines? */
-};
-
-struct _CamelMimeFilterFromClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_from_get_type	(void);
-CamelMimeFilterFrom      *camel_mime_filter_from_new	(void);
-
-#endif /* ! _CAMEL_MIME_FILTER_FROM_H */
diff --git a/camel/camel-mime-filter-index.c b/camel/camel-mime-filter-index.c
deleted file mode 100644
index 46e0f3f5e8..0000000000
--- a/camel/camel-mime-filter-index.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter-index.h"
-
-
-static void camel_mime_filter_index_class_init (CamelMimeFilterIndexClass *klass);
-static void camel_mime_filter_index_finalize   (CamelObject *o);
-
-static CamelMimeFilterClass *camel_mime_filter_index_parent;
-
-CamelType
-camel_mime_filter_index_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterIndex",
-					    sizeof (CamelMimeFilterIndex),
-					    sizeof (CamelMimeFilterIndexClass),
-					    (CamelObjectClassInitFunc) camel_mime_filter_index_class_init,
-					    NULL,
-					    NULL,
-					    (CamelObjectFinalizeFunc) camel_mime_filter_index_finalize);
-	}
-	
-	return type;
-}
-
-static void
-camel_mime_filter_index_finalize(CamelObject *o)
-{
-	CamelMimeFilterIndex *f = (CamelMimeFilterIndex *)o;
-
-	g_free(f->name);
-	f->index = NULL;	/* ibex's need refcounting? */
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterIndex *f = (CamelMimeFilterIndex *)mf;
-
-	if (f->index == NULL || f->name==NULL) {
-		goto donothing;
-	}
-
-	ibex_index_buffer(f->index, f->name, in, len, NULL);
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
-{
-	CamelMimeFilterIndex *f = (CamelMimeFilterIndex *)mf;
-	int inleft = 0;
-
-	if (f->index == NULL || f->name==NULL) {
-		goto donothing;
-	}
-
-	ibex_index_buffer(f->index, f->name, in, len, &inleft);
-
-	if (inleft>0) {
-		camel_mime_filter_backup(mf, in+(len-inleft), inleft);
-	}
-
-	*out = in;
-	*outlenptr = len-inleft;
-	*outprespace = prespace;
-	return;
-
-donothing:
-	*out = in;
-	*outlenptr = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_index_class_init (CamelMimeFilterIndexClass *klass)
-{
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-	
-	camel_mime_filter_index_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
-
-	/*filter_class->reset = reset;*/
-	filter_class->filter = filter;
-	filter_class->complete = complete;
-}
-
-/**
- * camel_mime_filter_index_new:
- *
- * Create a new CamelMimeFilterIndex object.
- * 
- * Return value: A new CamelMimeFilterIndex widget.
- **/
-CamelMimeFilterIndex *
-camel_mime_filter_index_new (void)
-{
-	CamelMimeFilterIndex *new = CAMEL_MIME_FILTER_INDEX ( camel_object_new (camel_mime_filter_index_get_type ()));
-	return new;
-}
-
-CamelMimeFilterIndex      *camel_mime_filter_index_new_ibex (ibex *index)
-{
-	CamelMimeFilterIndex *new = camel_mime_filter_index_new();
-
-	if (new) {
-		new->index = index;
-		new->name = g_strdup("");
-	}
-	return new;
-}
-
-/* Set the match name for any indexed words */
-void camel_mime_filter_index_set_name (CamelMimeFilterIndex *mf, char *name)
-{
-	g_free(mf->name);
-	mf->name = g_strdup(name);
-}
-
-void camel_mime_filter_index_set_ibex (CamelMimeFilterIndex *mf, ibex *index)
-{
-	if (mf->index) {
-		char *out;
-		size_t outlen, outspace;
-
-		camel_mime_filter_complete((CamelMimeFilter *)mf, "", 0, 0, &out, &outlen, &outspace);
-	}
-	mf->index = index;
-}
-
-
-
diff --git a/camel/camel-mime-filter-index.h b/camel/camel-mime-filter-index.h
deleted file mode 100644
index b0a9107852..0000000000
--- a/camel/camel-mime-filter-index.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_INDEX_H
-#define _CAMEL_MIME_FILTER_INDEX_H
-
-#include 
-#include 
-
-#define CAMEL_MIME_FILTER_INDEX(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_index_get_type (), CamelMimeFilterIndex)
-#define CAMEL_MIME_FILTER_INDEX_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_index_get_type (), CamelMimeFilterIndexClass)
-#define IS_CAMEL_MIME_FILTER_INDEX(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_index_get_type ())
-
-typedef struct _CamelMimeFilterIndexClass CamelMimeFilterIndexClass;
-
-struct _CamelMimeFilterIndex {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterIndexPrivate *priv;
-
-	ibex *index;
-	char *name;
-};
-
-struct _CamelMimeFilterIndexClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_index_get_type	(void);
-CamelMimeFilterIndex      *camel_mime_filter_index_new	(void);
-
-CamelMimeFilterIndex      *camel_mime_filter_index_new_ibex (ibex *);
-
-/* Set the match name for any indexed words */
-void camel_mime_filter_index_set_name (CamelMimeFilterIndex *, char *);
-void camel_mime_filter_index_set_ibex (CamelMimeFilterIndex *mf, ibex *index);
-
-#endif /* ! _CAMEL_MIME_FILTER_INDEX_H */
diff --git a/camel/camel-mime-filter-save.c b/camel/camel-mime-filter-save.c
deleted file mode 100644
index e1761994ed..0000000000
--- a/camel/camel-mime-filter-save.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#include "camel-mime-filter-save.h"
-
-static void camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *klass);
-static void camel_mime_filter_save_init       (CamelMimeFilterSave *obj);
-static void camel_mime_filter_save_finalize   (CamelObject *o);
-
-static CamelMimeFilterClass *camel_mime_filter_save_parent;
-
-CamelType
-camel_mime_filter_save_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_mime_filter_get_type (), "CamelMimeFilterSave",
-					    sizeof (CamelMimeFilterSave),
-					    sizeof (CamelMimeFilterSaveClass),
-					    (CamelObjectClassInitFunc) camel_mime_filter_save_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_mime_filter_save_init,
-					    (CamelObjectFinalizeFunc) camel_mime_filter_save_finalize);
-	}
-	
-	return type;
-}
-
-static void
-camel_mime_filter_save_finalize(CamelObject *o)
-{
-	CamelMimeFilterSave *f = (CamelMimeFilterSave *)o;
-
-	g_free(f->filename);
-	if (f->fd != -1) {
-		/* FIXME: what do we do with failed writes???? */
-		close(f->fd);
-	}
-}
-
-static void
-reset(CamelMimeFilter *mf)
-{
-	CamelMimeFilterSave *f = (CamelMimeFilterSave *)mf;
-
-	/* i dunno, how do you 'reset' a file?  reopen it? do i care? */
-	if (f->fd != -1){
-		lseek(f->fd, 0, SEEK_SET);
-	}
-}
-
-/* all this code just to support this little trivial filter! */
-static void
-filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	CamelMimeFilterSave *f = (CamelMimeFilterSave *)mf;
-
-	if (f->fd != -1) {
-		/* FIXME: check return */
-		int outlen = write(f->fd, in, len);
-		if (outlen != len) {
-			g_warning("could not write to '%s': %s", f->filename?f->filename:"", strerror(errno));
-		}
-	}
-	*out = in;
-	*outlen = len;
-	*outprespace = prespace;
-}
-
-static void
-camel_mime_filter_save_class_init (CamelMimeFilterSaveClass *klass)
-{
-	CamelMimeFilterClass *filter_class = (CamelMimeFilterClass *) klass;
-
-	camel_mime_filter_save_parent = CAMEL_MIME_FILTER_CLASS (camel_type_get_global_classfuncs (camel_mime_filter_get_type ()));
-
-	filter_class->reset = reset;
-	filter_class->filter = filter;
-}
-
-static void
-camel_mime_filter_save_init (CamelMimeFilterSave *f)
-{
-	f->fd = -1;
-}
-
-/**
- * camel_mime_filter_save_new:
- *
- * Create a new CamelMimeFilterSave object.
- * 
- * Return value: A new CamelMimeFilterSave widget.
- **/
-CamelMimeFilterSave *
-camel_mime_filter_save_new (void)
-{
-	CamelMimeFilterSave *new = CAMEL_MIME_FILTER_SAVE ( camel_object_new (camel_mime_filter_save_get_type ()));
-	return new;
-}
-
-CamelMimeFilterSave *
-camel_mime_filter_save_new_name (const char *name, int flags, int mode)
-{
-	CamelMimeFilterSave *new = NULL;
-
-	new = camel_mime_filter_save_new();
-	if (new) {
-		new->fd = open(name, flags, mode);
-		if (new->fd != -1) {
-			new->filename = g_strdup(name);
-		} else {
-			camel_object_unref((CamelObject *)new);
-			new = NULL;
-		}
-	}
-	return new;
-}
-
diff --git a/camel/camel-mime-filter-save.h b/camel/camel-mime-filter-save.h
deleted file mode 100644
index abc1bf1186..0000000000
--- a/camel/camel-mime-filter-save.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_FILTER_SAVE_H
-#define _CAMEL_MIME_FILTER_SAVE_H
-
-#include 
-
-#define CAMEL_MIME_FILTER_SAVE(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_save_get_type (), CamelMimeFilterSave)
-#define CAMEL_MIME_FILTER_SAVE_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_save_get_type (), CamelMimeFilterSaveClass)
-#define IS_CAMEL_MIME_FILTER_SAVE(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_save_get_type ())
-
-typedef struct _CamelMimeFilterSaveClass CamelMimeFilterSaveClass;
-
-struct _CamelMimeFilterSave {
-	CamelMimeFilter parent;
-
-	struct _CamelMimeFilterSavePrivate *priv;
-
-	char *filename;
-	int fd;
-};
-
-struct _CamelMimeFilterSaveClass {
-	CamelMimeFilterClass parent_class;
-};
-
-guint		camel_mime_filter_save_get_type	(void);
-CamelMimeFilterSave      *camel_mime_filter_save_new	(void);
-
-CamelMimeFilterSave *camel_mime_filter_save_new_name (const char *name, int flags, int mode);
-
-#endif /* ! _CAMEL_MIME_FILTER_SAVE_H */
diff --git a/camel/camel-mime-filter.c b/camel/camel-mime-filter.c
deleted file mode 100644
index 678d450af2..0000000000
--- a/camel/camel-mime-filter.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mime-filter.h"
-
-struct _CamelMimeFilterPrivate {
-	char *inbuf;
-	size_t inlen;
-};
-
-#define PRE_HEAD (64)
-#define BACK_HEAD (64)
-#define _PRIVATE(o) (((CamelMimeFilter *)(o))->priv)
-#define FCLASS(o) ((CamelMimeFilterClass *)(CAMEL_OBJECT_GET_CLASS(o)))
-
-static CamelObjectClass *camel_mime_filter_parent;
-
-static void complete (CamelMimeFilter *mf, char *in, size_t len, 
-		      size_t prespace, char **out, size_t *outlen, 
-		      size_t *outprespace);
-
-static void
-camel_mime_filter_class_init (CamelMimeFilterClass *klass)
-{
-	camel_mime_filter_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
-
-	klass->complete = complete;
-}
-
-static void
-camel_mime_filter_init (CamelMimeFilter *obj)
-{
-	obj->outreal = NULL;
-	obj->outbuf = NULL;
-	obj->outsize = 0;
-
-	obj->backbuf = NULL;
-	obj->backsize = 0;
-	obj->backlen = 0;
-
-	_PRIVATE(obj) = g_malloc0(sizeof(*obj->priv));
-}
-
-static void
-camel_mime_filter_finalize(CamelObject *o)
-{
-	CamelMimeFilter *f = (CamelMimeFilter *)o;
-	struct _CamelMimeFilterPrivate *p = _PRIVATE(f);
-
-	g_free(f->outreal);
-	g_free(f->backbuf);
-	g_free(p->inbuf);
-	g_free(p);
-}
-
-CamelType
-camel_mime_filter_get_type (void)
-{
-	static CamelType camel_mime_filter_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_mime_filter_type == CAMEL_INVALID_TYPE) {
-		camel_mime_filter_type = camel_type_register (CAMEL_OBJECT_TYPE, "CamelMimeFilter",
-							      sizeof (CamelMimeFilter),
-							      sizeof (CamelMimeFilterClass),
-							      (CamelObjectClassInitFunc) camel_mime_filter_class_init,
-							      NULL,
-							      (CamelObjectInitFunc) camel_mime_filter_init,
-							      (CamelObjectFinalizeFunc) camel_mime_filter_finalize);
-	}
-	
-	return camel_mime_filter_type;
-}
-
-static void
-complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
-{
-	/* default - do nothing */
-}
-
-/**
- * camel_mime_filter_new:
- *
- * Create a new CamelMimeFilter object.
- * 
- * Return value: A new CamelMimeFilter widget.
- **/
-CamelMimeFilter *
-camel_mime_filter_new (void)
-{
-	CamelMimeFilter *new = CAMEL_MIME_FILTER ( camel_object_new (camel_mime_filter_get_type ()));
-	return new;
-}
-
-static void filter_run(CamelMimeFilter *f,
-		       char *in, size_t len, size_t prespace,
-		       char **out, size_t *outlen, size_t *outprespace,
-		       void (*filterfunc)(CamelMimeFilter *f,
-					  char *in, size_t len, size_t prespace,
-					  char **out, size_t *outlen, size_t *outprespace))
-{
-	struct _CamelMimeFilterPrivate *p;
-
-	/*
-	  here we take a performance hit, if the input buffer doesn't
-	  have the pre-space required.  We make a buffer that does ...
-	*/
-	if (prespace < f->backlen) {
-		int newlen = len+prespace+f->backlen;
-		p = _PRIVATE(f);
-		if (p->inlen < newlen) {
-			/* NOTE: g_realloc copies data, we dont need that (slower) */
-			g_free(p->inbuf);
-			p->inbuf = g_malloc(newlen+PRE_HEAD);
-			p->inlen = newlen+PRE_HEAD;
-		}
-		/* copy to end of structure */
-		memcpy(p->inbuf+p->inlen - len, in, len);
-		in = p->inbuf+p->inlen - len;
-		prespace = p->inlen - len;
-	}
-
-	/* preload any backed up data */
-	if (f->backlen > 0) {
-		memcpy(in-f->backlen, f->backbuf, f->backlen);
-		in -= f->backlen;
-		len += f->backlen;
-		prespace -= f->backlen;
-		f->backlen = 0;
-	}
-	
-	filterfunc(f, in, len, prespace, out, outlen, outprespace);
-}
-
-void camel_mime_filter_filter(CamelMimeFilter *f,
-			      char *in, size_t len, size_t prespace,
-			      char **out, size_t *outlen, size_t *outprespace)
-{
-	if (FCLASS(f)->filter)
-		filter_run(f, in, len, prespace, out, outlen, outprespace, FCLASS(f)->filter);
-	else
-		g_error("Filter function unplmenented in class");
-}
-
-void camel_mime_filter_complete(CamelMimeFilter *f,
-				char *in, size_t len, size_t prespace,
-				char **out, size_t *outlen, size_t *outprespace)
-{
-	if (FCLASS(f)->complete)
-		filter_run(f, in, len, prespace, out, outlen, outprespace, FCLASS(f)->complete);
-}
-
-void camel_mime_filter_reset(CamelMimeFilter *f)
-{
-	if (FCLASS(f)->reset) {
-		FCLASS(f)->reset(f);
-	}
-
-	/* could free some buffers, if they are really big? */
-	f->backlen = 0;
-}
-
-/* sets number of bytes backed up on the input, new calls replace previous ones */
-void camel_mime_filter_backup(CamelMimeFilter *f, const char *data, size_t length)
-{
-	if (f->backsize < length) {
-		/* g_realloc copies data, unnecessary overhead */
-		g_free(f->backbuf);
-		f->backbuf = g_malloc(length+BACK_HEAD);
-		f->backsize = length+BACK_HEAD;
-	}
-	f->backlen = length;
-	memcpy(f->backbuf, data, length);
-}
-
-/* ensure this much size available for filter output (if required) */
-void camel_mime_filter_set_size(CamelMimeFilter *f, size_t size, int keep)
-{
-	if (f->outsize < size) {
-		int offset = f->outptr - f->outreal;
-		if (keep) {
-			f->outreal = g_realloc(f->outreal, size + PRE_HEAD*4);
-		} else {
-			g_free(f->outreal);
-			f->outreal = g_malloc(size + PRE_HEAD*4);
-		}
-		f->outptr = f->outreal + offset;
-		f->outbuf = f->outreal + PRE_HEAD*4;
-		f->outsize = size;
-		/* this could be offset from the end of the structure, but 
-		   this should be good enough */
-		f->outpre = PRE_HEAD*4;
-	}
-}
-
diff --git a/camel/camel-mime-filter.h b/camel/camel-mime-filter.h
deleted file mode 100644
index 65d8590fa5..0000000000
--- a/camel/camel-mime-filter.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/* Abstract class for non-copying filters */
-
-#ifndef _CAMEL_MIME_FILTER_H
-#define _CAMEL_MIME_FILTER_H
-
-#include 
-#include 
-
-#define CAMEL_MIME_FILTER_TYPE         (camel_mime_filter_get_type ())
-#define CAMEL_MIME_FILTER(obj)         CAMEL_CHECK_CAST (obj, camel_mime_filter_get_type (), CamelMimeFilter)
-#define CAMEL_MIME_FILTER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_filter_get_type (), CamelMimeFilterClass)
-#define IS_CAMEL_MIME_FILTER(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_filter_get_type ())
-
-typedef struct _CamelMimeFilterClass CamelMimeFilterClass;
-
-struct _CamelMimeFilter {
-	CamelObject parent;
-
-	struct _CamelMimeFilterPrivate *priv;
-
-	char *outreal;		/* real malloc'd buffer */
-	char *outbuf;		/* first 'writable' position allowed (outreal + outpre) */
-	char *outptr;
-	int outsize;
-	int outpre;		/* prespace of this buffer */
-
-	char *backbuf;
-	int backsize;
-	int backlen;		/* significant data there */
-};
-
-struct _CamelMimeFilterClass {
-	CamelObjectClass parent_class;
-
-	/* virtual functions */
-	void (*filter)(CamelMimeFilter *f,
-		       char *in, size_t len, size_t prespace,
-		       char **out, size_t *outlen, size_t *outprespace);
-	void (*complete)(CamelMimeFilter *f,
-			 char *in, size_t len, size_t prespace,
-			 char **out, size_t *outlen, size_t *outprespace);
-	void (*reset)(CamelMimeFilter *f);
-};
-
-CamelType	      camel_mime_filter_get_type	(void);
-CamelMimeFilter      *camel_mime_filter_new	(void);
-
-void camel_mime_filter_filter(CamelMimeFilter *f,
-			      char *in, size_t len, size_t prespace,
-			      char **out, size_t *outlen, size_t *outprespace);
-
-void camel_mime_filter_complete(CamelMimeFilter *f,
-				char *in, size_t len, size_t prespace,
-				char **out, size_t *outlen, size_t *outprespace);
-
-void camel_mime_filter_reset(CamelMimeFilter *f);
-
-/* sets/returns number of bytes backed up on the input */
-void camel_mime_filter_backup(CamelMimeFilter *f, const char *data, size_t length);
-
-/* ensure this much size available for filter output */
-void camel_mime_filter_set_size(CamelMimeFilter *f, size_t size, int keep);
-
-#endif /* ! _CAMEL_MIME_FILTER_H */
diff --git a/camel/camel-mime-message.c b/camel/camel-mime-message.c
deleted file mode 100644
index d8f61facc4..0000000000
--- a/camel/camel-mime-message.c
+++ /dev/null
@@ -1,532 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-mime-message.c : class for a mime_message */
-
-/* 
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel-mime-message.h"
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "hash-table-utils.h"
-
-#define d(x)
-
-/* these 2 below should be kept in sync */
-typedef enum {
-	HEADER_UNKNOWN,
-	HEADER_FROM,
-	HEADER_REPLY_TO,
-	HEADER_SUBJECT,
-	HEADER_TO,
-	HEADER_CC,
-	HEADER_BCC,
-	HEADER_DATE
-} CamelHeaderType;
-
-static char *header_names[] = {
-	/* dont include HEADER_UNKNOWN string */
-	"From", "Reply-To", "Subject", "To", "Cc", "Bcc", "Date", NULL
-};
-
-static GHashTable *header_name_table;
-
-static CamelMimePartClass *parent_class=NULL;
-
-static char *recipient_names[] = {
-	"To", "Cc", "Bcc", NULL
-};
-
-static int write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream);
-static void add_header (CamelMedium *medium, const char *header_name, const void *header_value);
-static void set_header (CamelMedium *medium, const char *header_name, const void *header_value);
-static void remove_header (CamelMedium *medium, const char *header_name);
-static int construct_from_parser (CamelMimePart *, CamelMimeParser *);
-static void g_lib_is_uber_crappy_shit(gpointer whocares, gpointer getlost, gpointer blah);
-
-/* Returns the class for a CamelMimeMessage */
-#define CMM_CLASS(so) CAMEL_MIME_MESSAGE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMD_CLASS(so) CAMEL_MEDIUM_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static void
-camel_mime_message_class_init (CamelMimeMessageClass *camel_mime_message_class)
-{
-	CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_mime_message_class);
-	CamelMimePartClass *camel_mime_part_class = CAMEL_MIME_PART_CLASS (camel_mime_message_class);
-	CamelMediumClass *camel_medium_class = CAMEL_MEDIUM_CLASS (camel_mime_message_class);
-	int i;
-	
-	parent_class = CAMEL_MIME_PART_CLASS(camel_type_get_global_classfuncs (camel_mime_part_get_type ()));
-
-	header_name_table = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-	for (i=0;header_names[i];i++)
-		g_hash_table_insert (header_name_table, header_names[i], (gpointer)i+1);
-
-	/* virtual method overload */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
-
-	camel_medium_class->add_header = add_header;
-	camel_medium_class->set_header = set_header;
-	camel_medium_class->remove_header = remove_header;
-	
-	camel_mime_part_class->construct_from_parser = construct_from_parser;
-}
-
-
-
-
-static void
-camel_mime_message_init (gpointer object, gpointer klass)
-{
-	CamelMimeMessage *mime_message = (CamelMimeMessage *)object;
-	int i;
-	
-	camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (object), "message/rfc822");
-
-	mime_message->recipients =  g_hash_table_new(g_strcase_hash, g_strcase_equal);
-	for (i=0;recipient_names[i];i++) {
-		g_hash_table_insert(mime_message->recipients, recipient_names[i], camel_internet_address_new());
-	}
-
-	mime_message->subject = NULL;
-	mime_message->reply_to = NULL;
-	mime_message->from = NULL;
-	mime_message->date = CAMEL_MESSAGE_DATE_CURRENT;
-	mime_message->date_offset = 0;
-	mime_message->date_str = NULL;
-}
-
-static void           
-camel_mime_message_finalize (CamelObject *object)
-{
-	CamelMimeMessage *message = CAMEL_MIME_MESSAGE (object);
-	
-	g_free (message->date_str);
-	g_free (message->subject);
-	g_free (message->reply_to);
-	g_free (message->from);
-
-	g_hash_table_foreach (message->recipients, g_lib_is_uber_crappy_shit, NULL);
-	g_hash_table_destroy(message->recipients);
-}
-
-
-CamelType
-camel_mime_message_get_type (void)
-{
-	static CamelType camel_mime_message_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_mime_message_type == CAMEL_INVALID_TYPE)	{
-		camel_mime_message_type = camel_type_register (camel_mime_part_get_type(), "CamelMimeMessage",
-							       sizeof (CamelMimeMessage),
-							       sizeof (CamelMimeMessageClass),
-							       (CamelObjectClassInitFunc) camel_mime_message_class_init,
-							       NULL,
-							       (CamelObjectInitFunc) camel_mime_message_init,
-							       (CamelObjectFinalizeFunc) camel_mime_message_finalize);
-	}
-	
-	return camel_mime_message_type;
-}
-
-/* annoying way to free objects in a hashtable, i mean, its not like anyone
-   would want to store them in a hashtable, really */
-/* peterw: somebody's not bitter :-) */
-static void g_lib_is_uber_crappy_shit(gpointer whocares, gpointer getlost, gpointer blah)
-{
-	camel_object_unref((CamelObject *)getlost);
-}
-
-
-
-CamelMimeMessage *
-camel_mime_message_new (void) 
-{
-	CamelMimeMessage *mime_message;
-	mime_message = CAMEL_MIME_MESSAGE(camel_object_new (CAMEL_MIME_MESSAGE_TYPE));
-	
-	return mime_message;
-}
-
-
-/* **** Date: */
-
-void
-camel_mime_message_set_date(CamelMimeMessage *message,  time_t date, int offset)
-{
-	g_assert(message);
-	if (date == CAMEL_MESSAGE_DATE_CURRENT) {
-		struct tm *local;
-		int tz;
-
-		date = time(0);
-		local = localtime(&date);
-		offset = 0;
-#if defined(HAVE_TIMEZONE)
-		tz = timezone;
-#elif defined(HAVE_TM_GMTOFF)
-		tz = local->tm_gmtoff;
-#endif
-		offset = ((tz/60/60) * 100) + (tz/60 % 60);
-	}
-	message->date = date;
-	message->date_offset = offset;
-	g_free(message->date_str);
-	message->date_str = header_format_date(date, offset);
-
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)message, "Date", message->date_str);
-}
-
-void
-camel_mime_message_get_date(CamelMimeMessage *message,  time_t *date, int *offset)
-{
-	if (message->date == CAMEL_MESSAGE_DATE_CURRENT)
-		camel_mime_message_set_date(message, CAMEL_MESSAGE_DATE_CURRENT, 0);
-	if (date)
-		*date = message->date;
-	if (offset)
-		*offset = message->date_offset;
-}
-
-char *
-camel_mime_message_get_date_string(CamelMimeMessage *message)
-{
-	if (message->date == CAMEL_MESSAGE_DATE_CURRENT)
-		camel_mime_message_set_date(message, CAMEL_MESSAGE_DATE_CURRENT, 0);
-	return message->date_str;
-}
-
-/* **** Reply-To: */
-
-void
-camel_mime_message_set_reply_to (CamelMimeMessage *mime_message, const gchar *reply_to)
-{
-	g_assert (mime_message);
-
-	/* FIXME: check format of string, handle it nicer ... */
-
-	g_free(mime_message->reply_to);
-	mime_message->reply_to = g_strdup(reply_to);
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)mime_message, "Reply-To", reply_to);
-}
-
-const gchar *
-camel_mime_message_get_reply_to (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-
-	return mime_message->reply_to;
-}
-
-void
-camel_mime_message_set_subject (CamelMimeMessage *mime_message,
-				const gchar *subject)
-{
-	char *text;
-	g_assert (mime_message);
-
-	g_free(mime_message->subject);
-	mime_message->subject = g_strstrip (g_strdup (subject));
-	text = header_encode_string(subject);
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)mime_message, "Subject", text);
-	g_free(text);
-}
-
-const gchar *
-camel_mime_message_get_subject (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-
-	return mime_message->subject;
-}
-
-/* *** From: */
-void
-camel_mime_message_set_from (CamelMimeMessage *mime_message, const gchar *from)
-{
-	g_assert (mime_message);
-
-	g_free(mime_message->from);
-	mime_message->from = g_strdup(from);
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)mime_message, "From", from);
-}
-
-const gchar *
-camel_mime_message_get_from (CamelMimeMessage *mime_message)
-{
-	g_assert (mime_message);
-
-	return mime_message->from;
-}
-
-/*  ****  */
-
-void
-camel_mime_message_add_recipient (CamelMimeMessage *mime_message, 
-				  const gchar *type, 
-				  const gchar *name, const char *address)
-{
-	CamelInternetAddress *addr;
-	char *text;
-
-	g_assert (mime_message);
-
-	addr = g_hash_table_lookup(mime_message->recipients, type);
-	if (addr == NULL) {
-		g_warning("trying to add a non-valid receipient type: %s = %s %s", type, name, address);
-		return;
-	}
-
-	camel_internet_address_add(addr, name, address);
-
-	/* FIXME: maybe this should be delayed till we're ready to write out? */
-	text = camel_address_encode((CamelAddress*)addr);
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)mime_message, type, text);
-	g_free(text);
-}
-
-void
-camel_mime_message_remove_recipient_address (CamelMimeMessage *mime_message,
-					     const gchar *type,
-					     const gchar *address)
-{
-	CamelInternetAddress *addr;
-	int index;
-	char *text;
-
-
-	g_assert (mime_message);
-
-	addr = g_hash_table_lookup(mime_message->recipients, type);
-	if (addr == NULL) {
-		g_warning("trying to remove a non-valid receipient type: %s = %s", type, address);
-		return;
-	}
-	index = camel_internet_address_find_address(addr, address, NULL);
-	if (index == -1) {
-		g_warning("trying to remove address for nonexistand address: %s", address);
-		return;
-	}
-
-	camel_address_remove((CamelAddress *)addr, index);
-
-	/* FIXME: maybe this should be delayed till we're ready to write out? */
-	text = camel_address_encode((CamelAddress *)addr);
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)mime_message, type, text);
-	g_free(text);
-}
-
-void
-camel_mime_message_remove_recipient_name (CamelMimeMessage *mime_message,
-					  const gchar *type,
-					  const gchar *name)
-{
-	CamelInternetAddress *addr;
-	int index;
-	char *text;
-
-	g_assert (mime_message);
-
-	addr = g_hash_table_lookup(mime_message->recipients, type);
-	if (addr == NULL) {
-		g_warning("trying to remove a non-valid receipient type: %s = %s", type, name);
-		return;
-	}
-	index = camel_internet_address_find_name(addr, name, NULL);
-	if (index == -1) {
-		g_warning("trying to remove address for nonexistand name: %s", name);
-		return;
-	}
-
-	camel_address_remove((CamelAddress *)addr, index);
-
-	/* FIXME: maybe this should be delayed till we're ready to write out? */
-	text = camel_address_encode((CamelAddress *)addr);
-	CAMEL_MEDIUM_CLASS(parent_class)->set_header((CamelMedium *)mime_message, type, text);
-	g_free(text);
-}
-
-const CamelInternetAddress *
-camel_mime_message_get_recipients (CamelMimeMessage *mime_message, 
-				   const gchar *type)
-{
-	g_assert (mime_message);
-	
-	return g_hash_table_lookup(mime_message->recipients, type);
-}
-
-
-
-/* mime_message */
-static int
-construct_from_parser(CamelMimePart *dw, CamelMimeParser *mp)
-{
-	char *buf;
-	int len;
-	int state;
-	int ret;
-
-	d(printf("constructing mime-message\n"));
-
-	d(printf("mime_message::construct_from_parser()\n"));
-
-	/* let the mime-part construct the guts ... */
-	ret = ((CamelMimePartClass *)parent_class)->construct_from_parser(dw, mp);
-
-	if (ret == -1)
-		return -1;
-
-	/* ... then clean up the follow-on state */
-	state = camel_mime_parser_step(mp, &buf, &len);
-	switch (state) {
-	case HSCAN_EOF: case HSCAN_FROM_END: /* these doesn't belong to us */
-		camel_mime_parser_unstep(mp);
-	case HSCAN_MESSAGE_END:
-		break;
-	default:
-		g_error("Bad parser state: Expecing MESSAGE_END or EOF or EOM, got: %d", camel_mime_parser_state(mp));
-		camel_mime_parser_unstep(mp);
-		return -1;
-	}
-
-	d(printf("mime_message::construct_from_parser() leaving\n"));
-#ifndef NO_WARNINGS
-#warning "return a real error code"
-#endif
-	return 0;
-}
-
-static int
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMimeMessage *mm = CAMEL_MIME_MESSAGE (data_wrapper);
-
-	/* force mandatory headers ... */
-	if (mm->from == NULL) {
-		g_warning("No from set for message");
-		camel_mime_message_set_from(mm, "");
-	}
-	if (mm->date_str == NULL) {
-		g_warning("Application did not set date, using 'now'");
-		camel_mime_message_set_date(mm, CAMEL_MESSAGE_DATE_CURRENT, 0);
-	}
-	if (mm->subject == NULL) {
-		g_warning("Application did not set subject, creating one");
-		camel_mime_message_set_subject(mm, "No Subject");
-	}
-
-	/* FIXME: "To" header needs to be set explicitly as well ... */
-
-	if (!camel_medium_get_header ((CamelMedium *)mm, "Mime-Version"))
-		camel_medium_set_header((CamelMedium *)mm, "Mime-Version", "1.0");
-
-	return CAMEL_DATA_WRAPPER_CLASS (parent_class)->write_to_stream (data_wrapper, stream);
-}
-
-static char *
-format_address(const char *text)
-{
-	struct _header_address *addr;
-	char *ret;
-
-	addr = header_address_decode(text);
-	if (addr) {
-		ret = header_address_list_format(addr);
-		header_address_list_clear(&addr);
-	} else {
-		ret = g_strdup(text);
-	}
-	return ret;
-}
-
-/* FIXME: check format of fields. */
-static gboolean
-process_header(CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	CamelHeaderType header_type;
-	CamelMimeMessage *message = CAMEL_MIME_MESSAGE (medium);
-	CamelInternetAddress *addr;
-
-	header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, header_name);
-	switch (header_type) {
-	case HEADER_FROM:
-		g_free(message->from);
-		message->from = format_address(header_value);
-		break;
-	case HEADER_REPLY_TO:
-		g_free(message->reply_to);
-		message->reply_to = format_address(header_value);
-		break;
-	case HEADER_SUBJECT:
-		g_free(message->subject);
-		message->subject = g_strstrip (header_decode_string(header_value));
-		break;
-	case HEADER_TO:
-	case HEADER_CC:
-	case HEADER_BCC:
-		addr = g_hash_table_lookup(message->recipients, header_name);
-		if (header_value)
-			camel_address_decode((CamelAddress *)addr, header_value);
-		else
-			camel_address_remove((CamelAddress *)addr, -1);
-		break;
-	case HEADER_DATE:
-		g_free(message->date_str);
-		message->date_str = g_strdup(header_value);
-		if (header_value) {
-			message->date = header_decode_date(header_value, &message->date_offset);
-		} else {
-			message->date = CAMEL_MESSAGE_DATE_CURRENT;
-		}
-		break;
-	default:
-		return FALSE;
-	}
-	return TRUE;
-}
-
-static void
-set_header(CamelMedium *medium, const char *header_name, const void *header_value)
-{
-	process_header(medium, header_name, header_value);
-	parent_class->parent_class.set_header (medium, header_name, header_value);
-}
-
-static void
-add_header(CamelMedium *medium, const char *header_name, const void *header_value)
-{
-	/* if we process it, then it must be forced unique as well ... */
-	if (process_header(medium, header_name, header_value))
-		parent_class->parent_class.set_header (medium, header_name, header_value);
-	else
-		parent_class->parent_class.add_header (medium, header_name, header_value);
-}
-
-static void
-remove_header(CamelMedium *medium, const char *header_name)
-{
-	process_header(medium, header_name, NULL);
-	parent_class->parent_class.remove_header (medium, header_name);
-}
-
diff --git a/camel/camel-mime-message.h b/camel/camel-mime-message.h
deleted file mode 100644
index 7e90d7cbcc..0000000000
--- a/camel/camel-mime-message.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camelMimeMessage.h : class for a mime message
- *
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MIME_MESSAGE_H
-#define CAMEL_MIME_MESSAGE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-
-#define CAMEL_RECIPIENT_TYPE_TO "To"
-#define CAMEL_RECIPIENT_TYPE_CC "Cc"
-#define CAMEL_RECIPIENT_TYPE_BCC "Bcc"
-
-
-#define CAMEL_MIME_MESSAGE_TYPE     (camel_mime_message_get_type ())
-#define CAMEL_MIME_MESSAGE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessage))
-#define CAMEL_MIME_MESSAGE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MIME_MESSAGE_TYPE, CamelMimeMessageClass))
-#define CAMEL_IS_MIME_MESSAGE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MIME_MESSAGE_TYPE))
-
-
-/* specify local time */
-#define CAMEL_MESSAGE_DATE_CURRENT (~0)
-
-struct _CamelMimeMessage
-{
-	CamelMimePart parent_object;
-
-	/* header fields */
-	time_t date;
-	int date_offset;	/* GMT offset */
-	char *date_str;		/* cached copy of date string */
-
-	gchar *subject;
-	gchar *reply_to;
-
-	gchar *from;
-
-	GHashTable *recipients;	/* hash table of CamelInternetAddress's */
-};
-
-typedef struct {
-	CamelMimePartClass parent_class;
-
-	/* Virtual methods */	
-
-} CamelMimeMessageClass;
-
-
-
-/* Standard Camel function */
-CamelType camel_mime_message_get_type (void);
-
-
-/* public methods */
-CamelMimeMessage * camel_mime_message_new                  (void);
-
-
-void               camel_mime_message_set_date		   (CamelMimeMessage *mime_message,  time_t date, int offset);
-void               camel_mime_message_get_date		   (CamelMimeMessage *mime_message,  time_t *date, int *offset);
-char		  *camel_mime_message_get_date_string	   (CamelMimeMessage *mime_message);
-
-const gchar *      camel_mime_message_get_received_date    (CamelMimeMessage *mime_message);
-const gchar *      camel_mime_message_get_sent_date        (CamelMimeMessage *mime_message);
-void               camel_mime_message_set_reply_to         (CamelMimeMessage *mime_message, 
-							    const gchar *reply_to);
-const gchar *      camel_mime_message_get_reply_to         (CamelMimeMessage *mime_message);
-void               camel_mime_message_set_subject          (CamelMimeMessage *mime_message, 
-							    const gchar *subject);
-const gchar *      camel_mime_message_get_subject          (CamelMimeMessage *mime_message);
-void               camel_mime_message_set_from             (CamelMimeMessage *mime_message, 
-							    const gchar *from);
-const gchar *      camel_mime_message_get_from             (CamelMimeMessage *mime_message);
-
-
-void		camel_mime_message_add_recipient (CamelMimeMessage *mime_message,
-						  const char *type, const char *name, const char *address);
-void		camel_mime_message_remove_recipient_address (CamelMimeMessage *mime_message, 
-							     const char *type, const char *address);
-void		camel_mime_message_remove_recipient_name (CamelMimeMessage *mime_message, 
-							  const char *type, const char *name);
-
-const CamelInternetAddress *camel_mime_message_get_recipients (CamelMimeMessage *mime_message, 
-							       const char *type);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MIME_MESSAGE_H */
diff --git a/camel/camel-mime-parser.c b/camel/camel-mime-parser.c
deleted file mode 100644
index 9599e5bde2..0000000000
--- a/camel/camel-mime-parser.c
+++ /dev/null
@@ -1,1791 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/* What should hopefully be a fast mail parser */
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-
-#include 
-#include "camel-mime-parser.h"
-#include "camel-mime-utils.h"
-#include "camel-mime-filter.h"
-#include "camel-stream.h"
-#include "camel-seekable-stream.h"
-
-#define r(x)
-#define h(x)
-#define c(x)
-#define d(x)
-
-/*#define PURIFY*/
-
-#define MEMPOOL
-
-#define STRUCT_ALIGN 4
-
-#ifdef PURIFY
-int inend_id = -1,
-  inbuffer_id = -1;
-#endif
-
-#if 0
-extern int strdup_count;
-extern int malloc_count;
-extern int free_count;
-
-#define g_strdup(x) (strdup_count++, g_strdup(x))
-#define g_malloc(x) (malloc_count++, g_malloc(x))
-#define g_free(x) (free_count++, g_free(x))
-#endif
-
-#ifdef MEMPOOL
-typedef struct _MemPoolNode {
-	struct _MemPoolNode *next;
-
-	int free;
-	char data[1];
-} MemPoolNode;
-
-typedef struct _MemPoolThresholdNode {
-	struct _MemPoolThresholdNode *next;
-	char data[1];
-} MemPoolThresholdNode;
-
-typedef struct _MemPool {
-	int blocksize;
-	int threshold;
-	struct _MemPoolNode *blocks;
-	struct _MemPoolThresholdNode *threshold_blocks;
-} MemPool;
-
-MemPool *mempool_new(int blocksize, int threshold);
-void *mempool_alloc(MemPool *pool, int size);
-void mempool_flush(MemPool *pool, int freeall);
-void mempool_free(MemPool *pool);
-
-MemPool *mempool_new(int blocksize, int threshold)
-{
-	MemPool *pool;
-
-	pool = g_malloc(sizeof(*pool));
-	if (threshold >= blocksize)
-		threshold = blocksize * 2 / 3;
-	pool->blocksize = blocksize;
-	pool->threshold = threshold;
-	pool->blocks = NULL;
-	pool->threshold_blocks = NULL;
-	return pool;
-}
-
-void *mempool_alloc(MemPool *pool, int size)
-{
-	size = (size + STRUCT_ALIGN) & (~(STRUCT_ALIGN-1));
-	if (size>=pool->threshold) {
-		MemPoolThresholdNode *n;
-
-		n = g_malloc(sizeof(*n) - sizeof(char) + size);
-		n->next = pool->threshold_blocks;
-		pool->threshold_blocks = n;
-		return &n->data[0];
-	} else {
-		MemPoolNode *n;
-
-		n = pool->blocks;
-		while (n) {
-			if (n->free >= size) {
-				n->free -= size;
-				return &n->data[n->free];
-			}
-			n = n->next;
-		}
-
-		n = g_malloc(sizeof(*n) - sizeof(char) + pool->blocksize);
-		n->next = pool->blocks;
-		pool->blocks = n;
-		n->free = pool->blocksize - size;
-		return &n->data[n->free];
-	}
-}
-
-void mempool_flush(MemPool *pool, int freeall)
-{
-	MemPoolThresholdNode *tn, *tw;
-	MemPoolNode *pw, *pn;
-
-	tw = pool->threshold_blocks;
-	while (tw) {
-		tn = tw->next;
-		g_free(tw);
-		tw = tn;
-	}
-	pool->threshold_blocks = NULL;
-
-	if (freeall) {
-		pw = pool->blocks;
-		while (pw) {
-			pn = pw->next;
-			g_free(pw);
-			pw = pn;
-		}
-		pool->blocks = NULL;
-	} else {
-		pw = pool->blocks;
-		while (pw) {
-			pw->free = pool->blocksize;
-			pw = pw->next;
-		}
-	}
-}
-
-void mempool_free(MemPool *pool)
-{
-	if (pool) {
-		mempool_flush(pool, 1);
-		g_free(pool);
-	}
-}
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
-#define SCAN_BUF 4096		/* size of read buffer */
-#define SCAN_HEAD 128		/* headroom guaranteed to be before each read buffer */
-
-/* a little hacky, but i couldn't be bothered renaming everything */
-#define _header_scan_state _CamelMimeParserPrivate
-#define _PRIVATE(o) (((CamelMimeParser *)(o))->priv)
-
-struct _header_scan_state {
-
-    /* global state */
-
-	enum _header_state state;
-
-	/* for building headers during scanning */
-	char *outbuf;
-	char *outptr;
-	char *outend;
-
-	int fd;			/* input for a fd input */
-	CamelStream *stream;	/* or for a stream */
-
-	/* for scanning input buffers */
-	char *realbuf;		/* the real buffer, SCAN_HEAD*2 + SCAN_BUF bytes */
-	char *inbuf;		/* points to a subset of the allocated memory, the underflow */
-	char *inptr;		/* (upto SCAN_HEAD) is for use by filters so they dont copy all data */
-	char *inend;
-
-	int atleast;
-
-	int seek;		/* current offset to start of buffer */
-	int unstep;		/* how many states to 'unstep' (repeat the current state) */
-
-	int midline;		/* are we mid-line interrupted? */
-	int scan_from;		/* do we care about From lines? */
-
-	int start_of_from;	/* where from started */
-	int start_of_headers;	/* where headers started from the last scan */
-
-	int header_start;	/* start of last header, or -1 */
-
-	struct _header_scan_stack *top_part;	/* top of message header */
-	int top_start;		/* offset of start */
-
-	struct _header_scan_stack *pending; /* if we're pending part info, from the wrong part end */
-
-	/* filters to apply to all content before output */
-	int filterid;		/* id of next filter */
-	struct _header_scan_filter *filters;
-
-    /* per message/part info */
-	struct _header_scan_stack *parts;
-
-};
-
-struct _header_scan_stack {
-	struct _header_scan_stack *parent;
-
-	enum _header_state savestate; /* state at invocation of this part */
-
-#ifdef MEMPOOL
-	MemPool *pool;		/* memory pool to keep track of headers/etc at this level */
-#endif
-	struct _header_raw *headers;	/* headers for this part */
-
-	struct _header_content_type *content_type;
-
-	char *boundary;		/* for multipart/ * boundaries, including leading -- and trailing -- for the final part */
-	int boundarylen;	/* length of boundary, including leading -- */
-};
-
-struct _header_scan_filter {
-	struct _header_scan_filter *next;
-	int id;
-	CamelMimeFilter *filter;
-};
-
-static void folder_scan_step(struct _header_scan_state *s, char **databuffer, int *datalength);
-static void folder_scan_drop_step(struct _header_scan_state *s);
-static int folder_scan_init_with_fd(struct _header_scan_state *s, int fd);
-static int folder_scan_init_with_stream(struct _header_scan_state *s, CamelStream *stream);
-static struct _header_scan_state *folder_scan_init(void);
-static void folder_scan_close(struct _header_scan_state *s);
-static struct _header_scan_stack *folder_scan_content(struct _header_scan_state *s, int *lastone, char **data, int *length);
-static struct _header_scan_stack *folder_scan_header(struct _header_scan_state *s, int *lastone);
-static int folder_scan_skip_line(struct _header_scan_state *s);
-static off_t folder_seek(struct _header_scan_state *s, off_t offset, int whence);
-static off_t folder_tell(struct _header_scan_state *s);
-#ifdef MEMPOOL
-static void header_append_mempool(struct _header_scan_state *s, struct _header_scan_stack *h, char *header, int offset);
-#endif
-
-static void camel_mime_parser_class_init (CamelMimeParserClass *klass);
-static void camel_mime_parser_init       (CamelMimeParser *obj);
-
-#if d(!)0
-static char *states[] = {
-	"HSCAN_INITIAL",
-	"HSCAN_FROM",		/* got 'From' line */
-	"HSCAN_HEADER",		/* toplevel header */
-	"HSCAN_BODY",		/* scanning body of message */
-	"HSCAN_MULTIPART",	/* got multipart header */
-	"HSCAN_MESSAGE",	/* rfc822/news message */
-
-	"HSCAN_PART",		/* part of a multipart */
-	"",
-
-	"HSCAN_EOF",		/* end of file */
-	"HSCAN_FROM_END",
-	"HSCAN_HEAER_END",
-	"HSCAN_BODY_END",
-	"HSCAN_MULTIPART_END",
-	"HSCAN_MESSAGE_END",
-};
-#endif
-
-
-static CamelObjectClass *camel_mime_parser_parent;
-
-static void
-camel_mime_parser_class_init (CamelMimeParserClass *klass)
-{
-	camel_mime_parser_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
-}
-
-static void
-camel_mime_parser_init (CamelMimeParser *obj)
-{
-	struct _header_scan_state *s;
-
-	s = folder_scan_init();
-	_PRIVATE(obj) = s;
-}
-
-static void
-camel_mime_parser_finalize(CamelObject *o)
-{
-	struct _header_scan_state *s = _PRIVATE(o);
-#ifdef PURIFY
-	purify_watch_remove_all();
-#endif
-	folder_scan_close(s);
-}
-
-CamelType
-camel_mime_parser_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_object_get_type (), "CamelMimeParser",
-					    sizeof (CamelMimeParser),
-					    sizeof (CamelMimeParserClass),
-					    (CamelObjectClassInitFunc) camel_mime_parser_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_mime_parser_init,
-					    (CamelObjectFinalizeFunc) camel_mime_parser_finalize);
-	}
-	
-	return type;
-}
-
-/**
- * camel_mime_parser_new:
- *
- * Create a new CamelMimeParser object.
- * 
- * Return value: A new CamelMimeParser widget.
- **/
-CamelMimeParser *
-camel_mime_parser_new (void)
-{
-	CamelMimeParser *new = CAMEL_MIME_PARSER ( camel_object_new (camel_mime_parser_get_type ()));
-	return new;
-}
-
-
-/**
- * camel_mime_parser_filter_add:
- * @m: 
- * @mf: 
- * 
- * Add a filter that will be applied to any body content before it is passed
- * to the caller.  Filters may be pipelined to perform multi-pass operations
- * on the content, and are applied in the order they were added.
- *
- * Note that filters are only applied to the body content of messages, and once
- * a filter has been set, all content returned by a filter_step() with a state
- * of HSCAN_BODY will have passed through the filter.
- * 
- * Return value: An id that may be passed to filter_remove() to remove
- * the filter, or -1 if the operation failed.
- **/
-int
-camel_mime_parser_filter_add(CamelMimeParser *m, CamelMimeFilter *mf)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	struct _header_scan_filter *f, *new;
-
-	new = g_malloc(sizeof(*new));
-	new->filter = mf;
-	new->id = s->filterid++;
-	if (s->filterid == -1)
-		s->filterid++;
-	new->next = 0;
-	camel_object_ref((CamelObject *)mf);
-
-	/* yes, this is correct, since 'next' is the first element of the struct */
-	f = (struct _header_scan_filter *)&s->filters;
-	while (f->next)
-		f = f->next;
-	f->next = new;
-	return new->id;
-}
-
-/**
- * camel_mime_parser_filter_remove:
- * @m: 
- * @id: 
- * 
- * Remove a processing filter from the pipeline.  There is no
- * restriction on the order the filters can be removed.
- **/
-void
-camel_mime_parser_filter_remove(CamelMimeParser *m, int id)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	struct _header_scan_filter *f, *old;
-	
-	f = (struct _header_scan_filter *)&s->filters;
-	while (f && f->next) {
-		old = f->next;
-		if (old->id == id) {
-			camel_object_unref((CamelObject *)old->filter);
-			f->next = old->next;
-			g_free(old);
-			/* there should only be a single matching id, but
-			   scan the whole lot anyway */
-		}
-		f = f->next;
-	}
-}
-
-/**
- * camel_mime_parser_header:
- * @m: 
- * @name: Name of header.
- * @offset: Pointer that can receive the offset of the header in
- * the stream from the start of parsing.
- * 
- * Lookup a header by name.
- * 
- * Return value: The header value, or NULL if the header is not
- * defined.
- **/
-const char *
-camel_mime_parser_header(CamelMimeParser *m, const char *name, int *offset)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	if (s->parts &&
-	    s->parts->headers) {
-		return header_raw_find(&s->parts->headers, name, offset);
-	}
-	return NULL;
-}
-
-/**
- * camel_mime_parser_headers_raw:
- * @m: 
- * 
- * Get the list of the raw headers which are defined for the
- * current state of the parser.  These headers are valid
- * until the next call to parser_step(), or parser_drop_step().
- * 
- * Return value: The raw headers, or NULL if there are no headers
- * defined for the current part or state.  These are READ ONLY.
- **/
-struct _header_raw *
-camel_mime_parser_headers_raw(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	if (s->parts)
-		return s->parts->headers;
-	return NULL;
-}
-
-/**
- * camel_mime_parser_init_with_fd:
- * @m: 
- * @fd: A valid file descriptor.
- * 
- * Initialise the scanner with an fd.  The scanner's offsets
- * will be relative to the current file position of the file
- * descriptor.  As a result, seekable descritors should
- * be seeked using the parser seek functions.
- * 
- * An initial buffer will be read from the file descriptor
- * immediately, although no parsing will occur.
- *
- * Return value: Returns -1 on error.
- **/
-int
-camel_mime_parser_init_with_fd(CamelMimeParser *m, int fd)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return folder_scan_init_with_fd(s, fd);
-}
-
-/**
- * camel_mime_parser_init_with_stream:
- * @m: 
- * @stream: 
- * 
- * Initialise the scanner with a source stream.  The scanner's
- * offsets will be relative to the current file position of
- * the stream.  As a result, seekable streams should only
- * be seeked using the parser seek function.
- *
- * An initial buffer will be read from the stream
- * immediately, although no parsing will occur.
- * 
- * Return value: -1 on error.
- **/
-int
-camel_mime_parser_init_with_stream(CamelMimeParser *m, CamelStream *stream)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return folder_scan_init_with_stream(s, stream);
-}
-
-/**
- * camel_mime_parser_scan_from:
- * @m: 
- * @scan_from: #TRUE if the scanner should scan From lines.
- * 
- * Tell the scanner if it should scan "^From " lines or not.
- *
- * If the scanner is scanning from lines, two additional
- * states HSCAN_FROM and HSCAN_FROM_END will be returned
- * to the caller during parsing.
- **/
-void
-camel_mime_parser_scan_from(CamelMimeParser *m, int scan_from)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	s->scan_from = scan_from;
-}
-
-/**
- * camel_mime_parser_content_type:
- * @m: 
- * 
- * Get the content type defined in the current part.
- * 
- * Return value: A content_type structure, or NULL if there
- * is no content-type defined for this part of state of the
- * parser.
- **/
-struct _header_content_type *
-camel_mime_parser_content_type(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	/* FIXME: should this search up until its found the 'right'
-	   content-type?  can it? */
-	if (s->parts)
-		return s->parts->content_type;
-	return NULL;
-}
-
-/**
- * camel_mime_parser_unstep:
- * @m: 
- * 
- * Cause the last step operation to repeat itself.  If this is 
- * called repeated times, then the same step will be repeated
- * that many times.
- *
- * Note that it is not possible to scan back using this function,
- * only to have a way of peeking the next state.
- **/
-void camel_mime_parser_unstep(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	s->unstep++;
-}
-
-/**
- * camel_mime_parser_drop_step:
- * @m: 
- * 
- * Drop the last step call.  This should only be used
- * in conjunction with seeking of the stream as the
- * stream may be in an undefined state relative to the
- * state of the parser.
- *
- * Use this call with care.
- **/
-void camel_mime_parser_drop_step(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	s->unstep = 0;
-	folder_scan_drop_step(s);
-}
-
-/**
- * camel_mime_parser_step:
- * @m: 
- * @databuffer: Pointer to accept a pointer to the data
- * associated with this step (if any).  May be #NULL,
- * in which case datalength is also ingored.
- * @datalength: Pointer to accept a pointer to the data
- * length associated with this step (if any).
- * 
- * Parse the next part of the MIME message.  If _unstep()
- * has been called, then continue to return the same state
- * for that many calls.
- *
- * If the step is HSCAN_BODY then the databuffer and datalength
- * pointers will be setup to point to the internal data buffer
- * of the scanner and may be processed as required.  Any
- * filters will have already been applied to this data.
- *
- * Refer to the state diagram elsewhere for a full listing of
- * the states an application is gauranteed to get from the
- * scanner.
- *
- * Return value: The current new state of the parser
- * is returned.
- **/
-enum _header_state
-camel_mime_parser_step(CamelMimeParser *m, char **databuffer, int *datalength)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	d(printf("OLD STATE:  '%s' :\n", states[s->state]));
-
-	if (s->unstep <= 0) {
-		char *dummy;
-		int dummylength;
-
-		if (databuffer == NULL) {
-			databuffer = &dummy;
-			datalength = &dummylength;
-		}
-			
-		folder_scan_step(s, databuffer, datalength);
-	} else
-		s->unstep--;
-
-	d(printf("NEW STATE:  '%s' :\n", states[s->state]));
-
-	return s->state;
-}
-
-/**
- * camel_mime_parser_tell:
- * @m: 
- * 
- * Return the current scanning offset.  The meaning of this
- * value will depend on the current state of the parser.
- *
- * An incomplete listing of the states:
- *
- * HSCAN_INITIAL, The start of the current message.
- * HSCAN_HEADER, HSCAN_MESSAGE, HSCAN_MULTIPART, the character
- * position immediately after the end of the header.
- * HSCAN_BODY, Position within the message of the start
- * of the current data block.
- * HSCAN_*_END, The position of the character starting
- * the next section of the scan (the last position + 1 of
- * the respective current state).
- * 
- * Return value: See above.
- **/
-off_t camel_mime_parser_tell(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return folder_tell(s);
-}
-
-/**
- * camel_mime_parser_tell_start_headers:
- * @m: 
- * 
- * Find out the position within the file of where the
- * headers started, this is cached by the parser
- * at the time.
- * 
- * Return value: The header start position, or -1 if
- * no headers were scanned in the current state.
- **/
-off_t camel_mime_parser_tell_start_headers(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return s->start_of_headers;
-}
-
-/**
- * camel_mime_parser_tell_start_from:
- * @m: 
- * 
- * If the parser is scanning From lines, then this returns
- * the position of the start of the From line.
- * 
- * Return value: The start of the from line, or -1 if there
- * was no From line, or From lines are not being scanned.
- **/
-off_t camel_mime_parser_tell_start_from(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-
-	return s->start_of_from;
-}
-
-/**
- * camel_mime_parser_seek:
- * @m: 
- * @off: Number of bytes to offset the seek by.
- * @whence: SEEK_SET, SEEK_CUR, SEEK_END
- * 
- * Reset the source position to a known value.
- *
- * Note that if the source stream/descriptor was not
- * positioned at 0 to begin with, and an absolute seek
- * is specified (whence != SEEK_CUR), then the seek
- * position may not match the desired seek position.
- * 
- * Return value: The new seek offset, or -1 on
- * an error (for example, trying to seek on a non-seekable
- * stream or file descriptor).
- **/
-off_t camel_mime_parser_seek(CamelMimeParser *m, off_t off, int whence)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return folder_seek(s, off, whence);
-}
-
-/**
- * camel_mime_parser_state:
- * @m: 
- * 
- * Get the current parser state.
- * 
- * Return value: The current parser state.
- **/
-enum _header_state camel_mime_parser_state(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return s->state;
-}
-
-/**
- * camel_mime_parser_stream:
- * @m: 
- * 
- * Get the stream, if any, the parser has been initialised
- * with.  May be used to setup sub-streams, but should not
- * be read from directly (without saving and restoring
- * the seek position in between).
- * 
- * Return value: The stream from _init_with_stream(), or NULL
- * if the parser is reading from a file descriptor or is
- * uninitialised.
- **/
-CamelStream *camel_mime_parser_stream(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return s->stream;
-}
-
-/**
- * camel_mime_parser_fd:
- * @m: 
- * 
- * Return the file descriptor, if any, the parser has been
- * initialised with.
- *
- * Should not be read from unless the parser it to terminate,
- * or the seek offset can be reset before the next parse
- * step.
- * 
- * Return value: The file descriptor or -1 if the parser
- * is reading from a stream or has not been initialised.
- **/
-int camel_mime_parser_fd(CamelMimeParser *m)
-{
-	struct _header_scan_state *s = _PRIVATE(m);
-	return s->fd;
-}
-
-/* ********************************************************************** */
-/*    Implementation							  */
-/* ********************************************************************** */
-
-/* read the next bit of data, ensure there is enough room 'atleast' bytes */
-static int
-folder_read(struct _header_scan_state *s)
-{
-	int len;
-	int inoffset;
-
-	if (s->inptrinend-s->atleast)
-		return s->inend-s->inptr;
-#ifdef PURIFY
-	purify_watch_remove(inend_id);
-	purify_watch_remove(inbuffer_id);
-#endif
-	/* check for any remaning bytes (under the atleast limit( */
-	inoffset = s->inend - s->inptr;
-	if (inoffset>0) {
-		memcpy(s->inbuf, s->inptr, inoffset);
-	}
-	if (s->stream) {
-		len = camel_stream_read(s->stream, s->inbuf+inoffset, SCAN_BUF-inoffset);
-	} else {
-		len = read(s->fd, s->inbuf+inoffset, SCAN_BUF-inoffset);
-	}
-	r(printf("read %d bytes, offset = %d\n", len, inoffset));
-	if (len>=0) {
-		/* add on the last read block */
-		s->seek += s->inptr - s->inbuf;
-		s->inptr = s->inbuf;
-		s->inend = s->inbuf+len+inoffset;
-		r(printf("content = %d '%.*s'\n",s->inend - s->inptr,  s->inend - s->inptr, s->inptr));
-	}
-
-	g_assert(s->inptr<=s->inend);
-#ifdef PURIFY
-	inend_id = purify_watch(&s->inend);
-	inbuffer_id = purify_watch_n(s->inend+1, SCAN_HEAD-1, "rw");
-#endif
-	r(printf("content = %d '%.*s'\n", s->inend - s->inptr,  s->inend - s->inptr, s->inptr));
-	/* set a sentinal, for the inner loops to check against */
-	s->inend[0] = '\n';
-	return s->inend-s->inptr;
-}
-
-/* return the current absolute position of the data pointer */
-static off_t
-folder_tell(struct _header_scan_state *s)
-{
-	return s->seek + (s->inptr - s->inbuf);
-}
-
-/*
-  need some way to prime the parser state, so this actually works for 
-  other than top-level messages
-*/
-static off_t
-folder_seek(struct _header_scan_state *s, off_t offset, int whence)
-{
-	off_t newoffset;
-	int len;
-
-	if (s->stream) {
-		if (CAMEL_IS_SEEKABLE_STREAM(s->stream)) {
-			/* NOTE: assumes whence seekable stream == whence libc, which is probably
-			   the case (or bloody well should've been) */
-			newoffset = camel_seekable_stream_seek((CamelSeekableStream *)s->stream, offset, whence);
-		} else {
-			newoffset = -1;
-			errno = EINVAL;
-		}
-	} else {
-		newoffset = lseek(s->fd, offset, whence);
-	}
-#ifdef PURIFY
-	purify_watch_remove(inend_id);
-	purify_watch_remove(inbuffer_id);
-#endif
-	if (newoffset != -1) {
-		s->seek = newoffset;
-		s->inptr = s->inbuf;
-		s->inend = s->inbuf;
-		if (s->stream)
-			len = camel_stream_read(s->stream, s->inbuf, SCAN_BUF);
-		else
-			len = read(s->fd, s->inbuf, SCAN_BUF);
-		if (len>=0) {
-			s->inend = s->inbuf+len;
-			s->inend[0] = '\n';
-		} else
-			newoffset = -1;
-	}
-#ifdef PURIFY
-	inend_id = purify_watch(&s->inend);
-	inbuffer_id = purify_watch_n(s->inend+1, SCAN_HEAD-1, "rw");
-#endif
-	return newoffset;
-}
-
-static void
-folder_push_part(struct _header_scan_state *s, struct _header_scan_stack *h)
-{
-	h->parent = s->parts;
-	s->parts = h;
-}
-
-static void
-folder_pull_part(struct _header_scan_state *s)
-{
-	struct _header_scan_stack *h;
-
-	h = s->parts;
-	if (h) {
-		s->parts = h->parent;
-		g_free(h->boundary);
-#ifdef MEMPOOL
-		mempool_free(h->pool);
-#else
-		header_raw_clear(&h->headers);
-#endif
-		header_content_type_unref(h->content_type);
-		g_free(h);
-	} else {
-		g_warning("Header stack underflow!\n");
-	}
-}
-
-static int
-folder_scan_skip_line(struct _header_scan_state *s)
-{
-	int atleast = s->atleast;
-	register char *inptr, *inend, c;
-	int len;
-
-	s->atleast = 1;
-
-	while ( (len = folder_read(s)) > 0 && len > s->atleast) { /* ensure we have at least enough room here */
-		inptr = s->inptr;
-		inend = s->inend-1;
-
-		c = -1;
-		while (inptrinptr = inptr;
-
-		if (c=='\n') {
-			s->atleast = atleast;
-			return 0;
-		}
-	}
-
-	s->atleast = atleast;
-
-	return -1;		/* not found */
-}
-
-/* TODO: Is there any way to make this run faster?  It gets called a lot ... */
-static struct _header_scan_stack *
-folder_boundary_check(struct _header_scan_state *s, const char *boundary, int *lastone)
-{
-	struct _header_scan_stack *part;
-	int len = s->atleast-2;	/* make sure we dont access past the buffer */
-
-	h(printf("checking boundary marker upto %d bytes\n", len));
-	part = s->parts;
-	while (part) {
-		h(printf("  boundary: %s\n", part->boundary));
-		h(printf("   against: '%.*s'\n", len, boundary));
-		if (part->boundary
-		    && part->boundarylen <= len
-		    && memcmp(boundary, part->boundary, part->boundarylen)==0) {
-			h(printf("matched boundary: %s\n", part->boundary));
-			/* again, make sure we're in range */
-			if (part->boundarylen <= len+2) {
-				h(printf("checking lastone\n"));
-				*lastone = (boundary[part->boundarylen]=='-'
-					    && boundary[part->boundarylen+1]=='-');
-			} else {
-				h(printf("not enough room to check last one?\n"));
-				*lastone = FALSE;
-			}
-			/*printf("ok, we found it! : %s \n", (*lastone)?"Last one":"More to come?");*/
-			return part;
-		}
-		part = part->parent;
-	}
-	return NULL;
-}
-
-#ifdef MEMPOOL
-static void
-header_append_mempool(struct _header_scan_state *s, struct _header_scan_stack *h, char *header, int offset)
-{
-	struct _header_raw *l, *n;
-	char *content;
-
-	d(printf("Header: %s: %s\n", name, value));
-
-	content = strchr(header, ':');
-	if (content) {
-		register int len;
-		n = mempool_alloc(h->pool, sizeof(*n));
-		n->next = NULL;
-
-		len = content-header;
-		n->name = mempool_alloc(h->pool, len+1);
-		memcpy(n->name, header, len);
-		n->name[len] = 0;
-
-		content++;
-
-		len = s->outptr - content;
-		n->value = mempool_alloc(h->pool, len+1);
-		memcpy(n->value, content, len);
-		n->value[len] = 0;
-
-		n->offset = offset;
-
-		l = (struct _header_raw *)&h->headers;
-		while (l->next) {
-			l = l->next;
-		}
-		l->next = n;
-	}
-
-}
-
-#define header_raw_append_parse(a, b, c) (header_append_mempool(s, h, b, c))
-
-#endif
-
-/* Copy the string start->inptr into the header buffer (s->outbuf),
-   grow if necessary
-   and track the start offset of the header */
-/* Basically an optimised version of g_byte_array_append() */
-#define header_append(s, start, inptr)						\
-{										\
-	register int headerlen = inptr-start;					\
-										\
-	if (headerlen >= (s->outend - s->outptr)) {				\
-		register char *outnew;						\
-		register int len = ((s->outend - s->outbuf)+headerlen)*2+1;	\
-		outnew = g_realloc(s->outbuf, len);				\
-		s->outptr = s->outptr - s->outbuf + outnew;			\
-		s->outbuf = outnew;						\
-		s->outend = outnew + len;					\
-	}									\
-	memcpy(s->outptr, start, headerlen);					\
-	s->outptr += headerlen;							\
-	if (s->header_start == -1)						\
-		s->header_start = (start-s->inbuf) + s->seek;			\
-}
-
-static struct _header_scan_stack *
-folder_scan_header(struct _header_scan_state *s, int *lastone)
-{
-	int atleast = s->atleast;
-	char *start;
-	int len;
-	struct _header_scan_stack *part, *overpart = s->parts;
-	struct _header_scan_stack *h;
-	char *inend;
-	register char *inptr;
-
-	h(printf("scanning first bit\n"));
-
-	h = g_malloc0(sizeof(*h));
-#ifdef MEMPOOL
-	h->pool = mempool_new(8192, 4096);
-#endif
-
-	/* FIXME: this info should be cached ? */
-	part = s->parts;
-	s->atleast = 5;
-	while (part) {
-		if (part->boundary)
-			s->atleast = MAX(s->atleast, part->boundarylen+2);
-		part = part->parent;
-	}
-#if 0
-	s->atleast = MAX(s->atleast, 5);
-	if (s->parts)
-		s->atleast = MAX(s->atleast, s->parts->boundarylen+2);
-#endif
-
-	*lastone = FALSE;
-retry:
-
-	while ((len = folder_read(s))>0 && len >= s->atleast) { /* ensure we have at least enough room here */
-		inptr = s->inptr;
-		inend = s->inend-s->atleast;
-
-		while (inptr<=inend) {
-			/*printf("  '%.20s'\n", inptr);*/
-
-			start = inptr;
-
-			if (!s->midline) {
-				if ((part = folder_boundary_check(s, inptr, lastone))) {
-					if ((s->outptr>s->outbuf) || (inptr-start))
-						goto header_truncated; /* may not actually be truncated */
-
-					goto normal_exit;
-				}
-
-				/* Replace any number of spaces and tabs at the start of the line with
-				 * a single space.
-				 */
-				if (*start == ' ' || *start == '\t') {
-					do
-						start++;
-					while (*start == ' ' || *start == '\t');
-					start--;
-					*start = ' ';
-				}
-			}
-
-			/* goto next line */
-			while ((*inptr++)!='\n')
-				;
-
-			g_assert(inptr<=s->inend+1);
-
-			header_append(s, start, inptr-1);
-
-			/* check against the real buffer end, not our 'atleast limited' end */
-			/* also make sure we have at least 1 char lookahead, so even if we found a \n at
-			   the end, well, make out we didn't, and re-scan it next pass */
-			if (inptr>=s->inend) {
-				inptr--;
-				s->midline = TRUE;
-			} else {
-				s->midline = FALSE;
-			}
-
-			h(printf("outbuf[0] = %02x '%c' oubuf[1] = %02x '%c'\n",
-				 s->outbuf[0], isprint(s->outbuf[0])?s->outbuf[0]:'.',
-				 s->outbuf[1], isprint(s->outbuf[1])?s->outbuf[1]:'.'));
-
-			if (!s->midline
-			    && !(inptr[0] == ' ' || inptr[0] == '\t')) {
-				if (s->outbuf[0] == '\n'
-				    || (s->outbuf[0] == '\r' && s->outbuf[1]=='\n')) {
-					goto header_done;
-				}
-
-				/* we always have at least _1_ char here ... */
-				if (s->outptr > s->outbuf && s->outptr[-1] == '\n')
-					s->outptr--;
-				s->outptr[0] = 0;
-				
-				d(printf("header %.10s at %d\n", s->outbuf, s->header_start));
-				
-				header_raw_append_parse(&h->headers, s->outbuf, s->header_start);
-				
-				if (inptr[0]=='\n'
-				    || (inptr[0] == '\r' && inptr[1]=='\n')) {
-					inptr++;
-					goto header_done;
-				}
-				s->outptr = s->outbuf;
-				s->header_start = -1;
-			}
-		}
-		s->inptr = inptr;
-	}
-
-	/* ok, we're at the end of the data, just make sure we're not missing out some small
-	   truncated header markers */
-	if (overpart) {
-		overpart = overpart->parent;
-		while (overpart) {
-			if (overpart->boundary && (overpart->boundarylen+2) < s->atleast) {
-				s->atleast = overpart->boundarylen+2;
-				h(printf("Retrying next smaller part ...\n"));
-				goto retry;
-			}
-			overpart = overpart->parent;
-		}
-	}
-
-	if ((s->outptr > s->outbuf) || s->inend > s->inptr) {
-		start = s->inptr;
-		inptr = s->inend;
-		goto header_truncated;
-	}
-
-	s->atleast = atleast;
-
-	return h;
-
-header_truncated:
-
-	header_append(s, start, inptr);
-
-	if (s->outptr>s->outbuf && s->outptr[-1] == '\n')
-		s->outptr--;
-	s->outptr[0] = 0;
-
-	if (s->outbuf[0] == '\n'
-	    || (s->outbuf[0] == '\r' && s->outbuf[1]=='\n')) {
-		goto header_done;
-	}
-
-	header_raw_append_parse(&h->headers, s->outbuf, s->header_start);
-
-header_done:
-	part = s->parts;
-
-	s->outptr = s->outbuf;
-normal_exit:
-	s->inptr = inptr;
-	s->atleast = atleast;
-	s->header_start = -1;
-	return h;
-}
-
-static struct _header_scan_stack *
-folder_scan_content(struct _header_scan_state *s, int *lastone, char **data, int *length)
-{
-	int atleast = s->atleast;
-	register char *inptr;
-	char *inend;
-	char *start;
-	int len;
-	struct _header_scan_stack *part, *overpart = s->parts;
-	int already_packed = FALSE;
-
-	/*printf("scanning content\n");*/
-
-	/* FIXME: this info should be cached ? */
-	part = s->parts;
-	s->atleast = 5;
-	while (part) {
-		if (part->boundary) {
-			c(printf("boundary: %s\n", part->boundary));
-			s->atleast = MAX(s->atleast, part->boundarylen+2);
-		}
-		part = part->parent;
-	}
-/*	s->atleast = MAX(s->atleast, 5);*/
-#if 0
-	if (s->parts)
-		s->atleast = MAX(s->atleast, s->parts->boundarylen+2);
-#endif
-	*lastone = FALSE;
-
-retry:
-	c(printf("atleast = %d\n", s->atleast));
-	
-	while ((len = folder_read(s))>0 && len >= s->atleast) { /* ensure we have at least enough room here */
-		inptr = s->inptr;
-		inend = s->inend-s->atleast;
-		start = inptr;
-
-		c(printf("inptr = %p, inend = %p\n", inptr, inend));
-
-		while (inptr<=inend) {
-			if (!s->midline
-			    && (part = folder_boundary_check(s, inptr, lastone))) {
-				if ( (inptr-start) )
-					goto content;
-				
-				goto normal_exit;
-			}
-
-			/* goto the next line */
-			while ((*inptr++)!='\n')
-				;
-
-			/* check against the real buffer end, not our 'atleast limited' end */
-			if (inptr> s->inend) {
-				inptr--;
-				s->midline = TRUE;
-			} else {
-				s->midline = FALSE;
-			}
-
-			g_assert(inptr<=s->inend);
-		}
-
-		/* *sigh* so much for the beautiful simplicity of the code so far - here we
-		   have the snot to deal with the nasty end-cases that come from the read-ahead
-		   buffers we use */
-		/* what this does, is if we are somewhere near the end of the buffer,
-		   force it to the front, and re-read, ensuring we bunch as much together
-		   as possible, for the final read, without copying too much of the time */
-		/* make sure we dont loop forever, but also make sure we try smaller
-		   boundaries, if there are any, so we dont miss any. */
-		/* this is not needed for the header scanner, since it copies its own
-		   data */
-		c(printf("start offset = %d  atleast = %d\n", start-s->inbuf, s->atleast));
-		if (start > (s->inbuf + s->atleast)) {
-			/* force a re-scan of this data */
-			s->inptr = start;
-			if (already_packed)
-				goto smaller_boundary;
-			c(printf("near the end, try and bunch things up a bit first\n"));
-			already_packed = TRUE;
-		} else {
-			c(printf("dumping what i've got ...\n"));
-			/* what would be nice here, is if that we're at eof, we bunch the last
-			   little bit in the same content, but i dont think this is easy */
-			goto content_mid;
-		}
-	}
-
-	c(printf("length read = %d\n", len));
-smaller_boundary:
-
-	/* ok, we're at the end of the data, just make sure we're not missing out some small
-	   truncated header markers */
-	if (overpart) {
-		overpart = overpart->parent;
-		while (overpart) {
-			if (overpart->boundary && (overpart->boundarylen+2) < s->atleast) {
-				s->atleast = overpart->boundarylen+2;
-				c(printf("Retrying next smaller part ...\n"));
-				goto retry;
-			}
-			overpart = overpart->parent;
-		}
-	}
-
-	if (s->inend > s->inptr) {
-		start = s->inptr;
-		inptr = s->inend;
-		goto content;
-	}
-
-	*length = 0;
-	s->atleast = atleast;
-	return NULL;
-
-content_mid:
-	s->midline = TRUE;
-content:
-	part = s->parts;
-normal_exit:
-	s->atleast = atleast;
-	s->inptr = inptr;
-
-	*data = start;
-	*length = inptr-start;
-
-/*	printf("got %scontent: %.*s", s->midline?"partial ":"", inptr-start, start);*/
-
-	return part;
-}
-
-
-static void
-folder_scan_close(struct _header_scan_state *s)
-{
-	g_free(s->realbuf);
-	g_free(s->outbuf);
-	while (s->parts)
-		folder_pull_part(s);
-	if (s->fd != -1)
-		close(s->fd);
-	if (s->stream) {
-		camel_object_unref((CamelObject *)s->stream);
-	}
-	g_free(s);
-}
-
-
-static struct _header_scan_state *
-folder_scan_init(void)
-{
-	struct _header_scan_state *s;
-
-	s = g_malloc(sizeof(*s));
-
-	s->fd = -1;
-	s->stream = NULL;
-
-	s->outbuf = g_malloc(1024);
-	s->outbuf[0] = '\0';
-	s->outptr = s->outbuf;
-	s->outend = s->outbuf+1024;
-
-	s->realbuf = g_malloc(SCAN_BUF + SCAN_HEAD*2);
-	s->inbuf = s->realbuf + SCAN_HEAD;
-	s->inptr = s->inbuf;
-	s->inend = s->inbuf;
-	s->atleast = 0;
-
-	s->seek = 0;		/* current character position in file of the last read block */
-	s->unstep = 0;
-
-	s->header_start = -1;
-
-	s->start_of_from = -1;
-	s->start_of_headers = -1;
-
-	s->midline = FALSE;
-	s->scan_from = FALSE;
-
-	s->filters = NULL;
-	s->filterid = 1;
-
-	s->parts = NULL;
-
-	s->state = HSCAN_INITIAL;
-	return s;
-}
-
-static int
-folder_scan_init_with_fd(struct _header_scan_state *s, int fd)
-{
-	int len;
-
-	len = read(fd, s->inbuf, SCAN_BUF);
-	if (len>=0) {
-		s->inend = s->inbuf+len;
-		s->inptr = s->inbuf;
-		s->inend[0] = '\n';
-		if (s->fd != -1)
-			close(s->fd);
-		s->fd = fd;
-		if (s->stream) {
-			camel_object_unref((CamelObject *)s->stream);
-			s->stream = NULL;
-		}
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-static int
-folder_scan_init_with_stream(struct _header_scan_state *s, CamelStream *stream)
-{
-	int len;
-
-	len = camel_stream_read(stream, s->inbuf, SCAN_BUF);
-	if (len >= 0) {
-		s->inend = s->inbuf+len;
-		s->inptr = s->inbuf;
-		s->inend[0] = '\n';
-		if (s->stream)
-			camel_object_unref((CamelObject *)s->stream);
-		s->stream = stream;
-		camel_object_ref((CamelObject *)stream);
-		if (s->fd != -1) {
-			close(s->fd);
-			s->fd = -1;
-		}
-		return 0;
-	} else {
-		return -1;
-	}
-}
-
-#define USE_FROM
-
-static void
-folder_scan_step(struct _header_scan_state *s, char **databuffer, int *datalength)
-{
-	struct _header_scan_stack *h, *hb;
-	const char *content;
-	const char *bound;
-	int type;
-	int state;
-	struct _header_content_type *ct = NULL;
-	struct _header_scan_filter *f;
-	size_t presize;
-
-/*	printf("\nSCAN PASS: state = %d '%s'\n", s->state, states[s->state]);*/
-
-tail_recurse:
-	d({
-		printf("\nSCAN STACK:\n");
-		printf(" '%s' :\n", states[s->state]);
-		hb = s->parts;
-		while (hb) {
-			printf("  '%s' : %s ", states[hb->savestate], hb->boundary);
-			if (hb->content_type) {
-				printf("(%s/%s)", hb->content_type->type, hb->content_type->subtype);
-			} else {
-				printf("(default)");
-			}
-			printf("\n");
-			hb = hb->parent;
-		}
-		printf("\n");
-	});
-
-	switch (s->state) {
-
-	case HSCAN_INITIAL:
-#ifdef USE_FROM
-		if (s->scan_from) {
-			/* FIXME: it would be nice not to have to allocate this every pass */
-			h = g_malloc0(sizeof(*h));
-			h->boundary = g_strdup("From ");
-			h->boundarylen = strlen(h->boundary);
-			folder_push_part(s, h);
-			
-			h = s->parts;
-			do {
-				hb = folder_scan_content(s, &state, databuffer, datalength);
-			} while (hb==h && *datalength>0);
-			
-			if (*datalength==0 && hb==h) {
-				d(printf("found 'From '\n"));
-				s->start_of_from = folder_tell(s);
-				folder_scan_skip_line(s);
-				h->savestate = HSCAN_INITIAL;
-				s->state = HSCAN_FROM;
-			} else {
-				folder_pull_part(s);
-				s->state = HSCAN_EOF;
-			}
-			return;
-		} else {
-			s->start_of_from = -1;
-		}
-
-#endif
-	case HSCAN_FROM:
-		s->start_of_headers = folder_tell(s);
-		h = folder_scan_header(s, &state);
-#ifdef USE_FROM
-		if (s->scan_from)
-			h->savestate = HSCAN_FROM_END;
-		else
-#endif
-			h->savestate = HSCAN_EOF;
-
-		/* FIXME: should this check for MIME-Version: 1.0 as well? */
-
-		type = HSCAN_HEADER;
-		if ( (content = header_raw_find(&h->headers, "Content-Type", NULL))
-		     && (ct = header_content_type_decode(content))) {
-			if (!strcasecmp(ct->type, "multipart")) {
-				bound = header_content_type_param(ct, "boundary");
-				if (bound) {
-					d(printf("multipart, boundary = %s\n", bound));
-					h->boundarylen = strlen(bound)+2;
-					h->boundary = g_malloc(h->boundarylen+3);
-					sprintf(h->boundary, "--%s--", bound);
-					type = HSCAN_MULTIPART;
-				} else {
-					header_content_type_unref(ct);
-					ct = header_content_type_decode("text/plain");
-/* We can't quite do this, as it will mess up all the offsets ... */
-/*					header_raw_replace(&h->headers, "Content-Type", "text/plain", offset);*/
-					g_warning("Multipart with no boundary, treating as text/plain");
-				}
-			} else if (!strcasecmp(ct->type, "message")) {
-				if (!strcasecmp(ct->subtype, "rfc822")
-				    || !strcasecmp(ct->subtype, "news")
-				    /*|| !strcasecmp(ct->subtype, "partial")*/) {
-					type = HSCAN_MESSAGE;
-				}
-			}
-		} else {
-			/* make the default type for multipart/digest be message/rfc822 */
-			if ((s->parts
-			     && header_content_type_is(s->parts->content_type, "multipart", "digest"))) {
-				ct = header_content_type_decode("message/rfc822");
-				type = HSCAN_MESSAGE;
-				d(printf("parent was multipart/digest, autoupgrading to message/rfc822?\n"));
-				/* maybe we should do this too?
-				   header_raw_append_parse(&h->headers, "Content-Type: message/rfc822", -1);*/
-			}
-		}
-		h->content_type = ct;
-		folder_push_part(s, h);
-		s->state = type;
-		return;
-
-	case HSCAN_HEADER:
-		s->state = HSCAN_BODY;
-
-	case HSCAN_BODY:
-		h = s->parts;
-		*datalength = 0;
-		presize = SCAN_HEAD;
-		f = s->filters;
-
-		do {
-			hb = folder_scan_content(s, &state, databuffer, datalength);
-			if (*datalength>0) {
-				d(printf("Content raw: '%.*s'\n", *datalength, *databuffer));
-
-				while (f) {
-					camel_mime_filter_filter(f->filter, *databuffer, *datalength, presize,
-								 databuffer, datalength, &presize);
-					f = f->next;
-				}
-				return;
-			}
-		} while (hb==h && *datalength>0);
-
-		/* check for any filter completion data */
-		while (f) {
-			camel_mime_filter_filter(f->filter, *databuffer, *datalength, presize,
-						 databuffer, datalength, &presize);
-			f = f->next;
-		}
-		if (*datalength > 0)
-			return;
-
-		s->state = HSCAN_BODY_END;
-		break;
-
-	case HSCAN_MULTIPART:
-		h = s->parts;
-		do {
-			do {
-				hb = folder_scan_content(s, &state, databuffer, datalength);
-				if (*datalength>0) {
-					/* FIXME: needs a state to return this shit??? */
-					d(printf("Multipart Content: '%.*s'\n", *datalength, *databuffer));
-				}
-			} while (hb==h && *datalength>0);
-			if (*datalength==0 && hb==h) {
-				d(printf("got boundary: %s\n", hb->boundary));
-				folder_scan_skip_line(s);
-				if (!state) {
-					s->state = HSCAN_FROM;
-					folder_scan_step(s, databuffer, datalength);
-					s->parts->savestate = HSCAN_MULTIPART; /* set return state for the new head part */
-					return;
-				}
-			} else {
-				break;
-			}
-		} while (1);
-
-		s->state = HSCAN_MULTIPART_END;
-		break;
-
-	case HSCAN_MESSAGE:
-		s->state = HSCAN_FROM;
-		folder_scan_step(s, databuffer, datalength);
-		s->parts->savestate = HSCAN_MESSAGE_END;
-		break;
-
-	case HSCAN_FROM_END:
-	case HSCAN_BODY_END:
-	case HSCAN_MULTIPART_END:
-	case HSCAN_MESSAGE_END:
-		s->state = s->parts->savestate;
-		folder_pull_part(s);
-		if (s->state & HSCAN_END)
-			return;
-		goto tail_recurse;
-
-	case HSCAN_EOF:
-		return;
-
-	default:
-		g_warning("Invalid state in camel-mime-parser: %d", s->state);
-		break;
-	}
-
-	return;
-}
-
-/* drops the current state back one */
-static void
-folder_scan_drop_step(struct _header_scan_state *s)
-{
-	switch (s->state) {
-	case HSCAN_INITIAL:
-	case HSCAN_EOF:
-		return;
-
-	case HSCAN_FROM:
-		s->state = HSCAN_INITIAL;
-		folder_pull_part(s);
-		return;
-
-	case HSCAN_MESSAGE:
-	case HSCAN_HEADER:
-	case HSCAN_MULTIPART:
-
-	case HSCAN_FROM_END:
-	case HSCAN_BODY_END:
-	case HSCAN_MULTIPART_END:
-	case HSCAN_MESSAGE_END:
-
-		s->state = s->parts->savestate;
-		folder_pull_part(s);
-		if (s->state & HSCAN_END) {
-			s->state &= ~HSCAN_END;
-		}
-		return;
-	default:
-		/* FIXME: not sure if this is entirely right */
-	}
-}
-
-#ifdef STANDALONE
-int main(int argc, char **argv)
-{
-	int fd;
-	struct _header_scan_state *s;
-	char *data;
-	int len;
-	int state;
-	char *name = "/tmp/evmail/Inbox";
-	struct _header_scan_stack *h;
-	int i;
-	int attach = 0;
-
-	if (argc==2)
-		name = argv[1];
-
-	printf("opening: %s", name);
-
-	for (i=1;iscan_from = FALSE;
-#if 0
-		h = g_malloc0(sizeof(*h));
-		h->savestate = HSCAN_EOF;
-		folder_push_part(s, h);
-#endif	
-		while (s->state != HSCAN_EOF) {
-			folder_scan_step(s, &data, &len);
-			printf("\n -- PARSER STEP RETURN -- %d '%s'\n\n", s->state, states[s->state]);
-			switch (s->state) {
-			case HSCAN_HEADER:
-				if (s->parts->content_type
-				    && (charset = header_content_type_param(s->parts->content_type, "charset"))) {
-					if (strcasecmp(charset, "us-ascii")) {
-						folder_push_filter_charset(s, "UTF-8", charset);
-					} else {
-						charset = NULL;
-					}
-				} else {
-					charset = NULL;
-				}
-
-				encoding = header_raw_find(&s->parts->headers, "Content-transfer-encoding");
-				printf("encoding = '%s'\n", encoding);
-				if (encoding && !strncasecmp(encoding, " base64", 7)) {
-					printf("adding base64 filter\n");
-					attachname = g_strdup_printf("attach.%d.%d", i, attach++);
-					folder_push_filter_save(s, attachname);
-					g_free(attachname);
-					folder_push_filter_mime(s, 0);
-				}
-				if (encoding && !strncasecmp(encoding, " quoted-printable", 17)) {
-					printf("adding quoted-printable filter\n");
-					attachname = g_strdup_printf("attach.%d.%d", i, attach++);
-					folder_push_filter_save(s, attachname);
-					g_free(attachname);
-					folder_push_filter_mime(s, 1);
-				}
-
-				break;
-			case HSCAN_BODY:
-				break;
-			case HSCAN_BODY_END:
-				if (encoding && !strncasecmp(encoding, " base64", 7)) {
-					printf("removing filters\n");
-					folder_filter_pull(s);
-					folder_filter_pull(s);
-				}
-				if (encoding && !strncasecmp(encoding, " quoted-printable", 17)) {
-					printf("removing filters\n");
-					folder_filter_pull(s);
-					folder_filter_pull(s);
-				}
-				if (charset) {
-					folder_filter_pull(s);
-					charset = NULL;
-				}
-				encoding = NULL;
-				break;
-			default:
-				break;
-			}
-		}
-		folder_scan_close(s);
-		close(fd);
-	}
-	return 0;
-}
-
-#endif /* STANDALONE */
-
diff --git a/camel/camel-mime-parser.h b/camel/camel-mime-parser.h
deleted file mode 100644
index 5baa58c88e..0000000000
--- a/camel/camel-mime-parser.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_PARSER_H
-#define _CAMEL_MIME_PARSER_H
-
-#include 
-
-#include 
-#include 
-#include 
-
-#define CAMEL_MIME_PARSER(obj)         CAMEL_CHECK_CAST (obj, camel_mime_parser_get_type (), CamelMimeParser)
-#define CAMEL_MIME_PARSER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mime_parser_get_type (), CamelMimeParserClass)
-#define IS_CAMEL_MIME_PARSER(obj)      CAMEL_CHECK_TYPE (obj, camel_mime_parser_get_type ())
-
-typedef struct _CamelMimeParserClass CamelMimeParserClass;
-
-/* NOTE: if you add more states, you may need to bump the
-   start of the END tags to 16 or 32, etc - so they are
-   the same as the matching start tag, with a bit difference */
-enum _header_state {
-	HSCAN_INITIAL,
-	HSCAN_FROM,		/* got 'From' line */
-	HSCAN_HEADER,		/* toplevel header */
-	HSCAN_BODY,		/* scanning body of message */
-	HSCAN_MULTIPART,	/* got multipart header */
-	HSCAN_MESSAGE,		/* rfc822 message */
-
-	HSCAN_PART,		/* part of a multipart */
-
-	HSCAN_END = 8,		/* bit mask for 'end' flags */
-
-	HSCAN_EOF = 8,		/* end of file */
-	HSCAN_FROM_END,		/* end of whole from bracket */
-	HSCAN_HEADER_END,	/* dummy value */
-	HSCAN_BODY_END,		/* end of message */
-	HSCAN_MULTIPART_END,	/* end of multipart  */
-	HSCAN_MESSAGE_END,	/* end of message */
-
-};
-
-struct _CamelMimeParser {
-	CamelObject parent;
-
-	struct _CamelMimeParserPrivate *priv;
-};
-
-struct _CamelMimeParserClass {
-	CamelObjectClass parent_class;
-
-	void (*message)(CamelMimeParser *, void *headers);
-	void (*part)(CamelMimeParser *);
-	void (*content)(CamelMimeParser *);
-};
-
-guint		camel_mime_parser_get_type	(void);
-CamelMimeParser      *camel_mime_parser_new	(void);
-
-/* using an fd will be a little faster, but not much (over a simple stream) */
-int		camel_mime_parser_init_with_fd(CamelMimeParser *, int fd);
-int		camel_mime_parser_init_with_stream(CamelMimeParser *m, CamelStream *stream);
-
-/* get the stream or fd back of the parser */
-CamelStream    *camel_mime_parser_stream(CamelMimeParser *m);
-int		camel_mime_parser_fd(CamelMimeParser *m);
-
-/* scan 'From' separators? */
-void camel_mime_parser_scan_from(CamelMimeParser *, int);
-
-/* what headers to save, MUST include ^Content-Type: */
-int camel_mime_parser_set_header_regex(CamelMimeParser *m, char *matchstr);
-
-/* normal interface */
-enum _header_state camel_mime_parser_step(CamelMimeParser *, char **, int *);
-void camel_mime_parser_unstep(CamelMimeParser *);
-void camel_mime_parser_drop_step(CamelMimeParser *m);
-enum _header_state camel_mime_parser_state(CamelMimeParser *);
-
-/* get content type for the current part/header */
-struct _header_content_type *camel_mime_parser_content_type(CamelMimeParser *);
-
-/* get/change raw header by name */
-const char *camel_mime_parser_header(CamelMimeParser *, const char *, int *offset);
-
-/* get all raw headers. READ ONLY! */
-struct _header_raw *camel_mime_parser_headers_raw(CamelMimeParser *);
-
-/* add a processing filter for body contents */
-int camel_mime_parser_filter_add(CamelMimeParser *, CamelMimeFilter *);
-void camel_mime_parser_filter_remove(CamelMimeParser *, int);
-
-/* these should be used with caution, because the state will not
-   track the seeked position */
-/* FIXME: something to bootstrap the state? */
-off_t camel_mime_parser_tell(CamelMimeParser *);
-off_t camel_mime_parser_seek(CamelMimeParser *, off_t, int);
-
-off_t camel_mime_parser_tell_start_headers(CamelMimeParser *);
-off_t camel_mime_parser_tell_start_from(CamelMimeParser *);
-
-#endif /* ! _CAMEL_MIME_PARSER_H */
diff --git a/camel/camel-mime-part-utils.c b/camel/camel-mime-part-utils.c
deleted file mode 100644
index 646b0131b1..0000000000
--- a/camel/camel-mime-part-utils.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-mime-part-utils : Utility for mime parsing and so on
- *
- * Authors: Bertrand Guiheneuf 
- * 	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "camel-mime-part-utils.h"
-#include "camel-mime-message.h"
-#include "camel-multipart.h"
-#include "camel-seekable-substream.h"
-#include "camel-stream-filter.h"
-#include "camel-stream-mem.h"
-#include "camel-mime-filter-basic.h"
-#include "camel-mime-filter-charset.h"
-#include "camel-mime-filter-crlf.h"
-
-#define d(x)
-
-/* simple data wrapper */
-static void
-simple_data_wrapper_construct_from_parser(CamelDataWrapper *dw, CamelMimeParser *mp)
-{
-	GByteArray *buffer;
-	char *buf;
-	int len;
-	off_t start = 0, end;
-	CamelMimeFilter *fdec = NULL, *fcrlf = NULL, *fch = NULL;
-	struct _header_content_type *ct;
-	int decid=-1, crlfid=-1, chrid=-1;
-	CamelStream *source;
-	CamelSeekableStream *seekable_source = NULL;
-	char *encoding;
-
-	d(printf("constructing data-wrapper\n"));
-
-		/* Ok, try and be smart.  If we're storing a small message (typical) convert it,
-		   and store it in memory as we parse it ... if not, throw away the conversion
-		   and scan till the end ... */
-
-		/* if we can't seek, dont have a stream/etc, then we must cache it */
-	source = camel_mime_parser_stream(mp);
-	if (source) {
-		camel_object_ref((CamelObject *)source);
-		if (CAMEL_IS_SEEKABLE_STREAM (source)) {
-			seekable_source = CAMEL_SEEKABLE_STREAM (source);
-		}
-	}
-
-	/* first, work out conversion, if any, required, we dont care about what we dont know about */
-	encoding = header_content_encoding_decode(camel_mime_parser_header(mp, "content-transfer-encoding", NULL));
-	if (encoding) {
-		if (!strcasecmp(encoding, "base64")) {
-			d(printf("Adding base64 decoder ...\n"));
-			fdec = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_DEC);
-			decid = camel_mime_parser_filter_add(mp, fdec);
-		} else if (!strcasecmp(encoding, "quoted-printable")) {
-			d(printf("Adding quoted-printable decoder ...\n"));
-			fdec = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_DEC);
-			decid = camel_mime_parser_filter_add(mp, fdec);
-		}
-		g_free(encoding);
-	}
-
-	/* If we're doing text, we also need to do CRLF->LF and may have to convert it to UTF8 as well. */
-	ct = camel_mime_parser_content_type(mp);
-	if (header_content_type_is(ct, "text", "*")) {
-		const char *charset = header_content_type_param(ct, "charset");
-
-		if (fdec) {
-			d(printf("Adding CRLF conversion filter\n"));
-			fcrlf = (CamelMimeFilter *)camel_mime_filter_crlf_new(CAMEL_MIME_FILTER_CRLF_DECODE,
-									      CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
-			crlfid = camel_mime_parser_filter_add(mp, fcrlf);
-		}
-
-		if (charset!=NULL
-		    && !(strcasecmp(charset, "us-ascii")==0
-			 || strcasecmp(charset, "iso-8859-1")==0)) {
-			d(printf("Adding conversion filter from %s to iso-8859-1\n", charset));
-			fch = (CamelMimeFilter *)camel_mime_filter_charset_new_convert(charset, "iso-8859-1");
-			if (fch) {
-				chrid = camel_mime_parser_filter_add(mp, (CamelMimeFilter *)fch);
-			} else {
-				g_warning("Cannot convert '%s' to 'iso-8859-1', message display may be corrupt", charset);
-			}
-		}
-
-	}
-
-	buffer = g_byte_array_new();
-
-	if (seekable_source /* !cache */) {
-		start = camel_mime_parser_tell(mp) + seekable_source->bound_start;
-	}
-	while ( camel_mime_parser_step(mp, &buf, &len) != HSCAN_BODY_END ) {
-		if (buffer) {
-			if (buffer->len > 20480 && seekable_source) {
-				/* is this a 'big' message?  Yes?  We dont want to convert it all then.*/
-				camel_mime_parser_filter_remove(mp, decid);
-				camel_mime_parser_filter_remove(mp, chrid);
-				decid = -1;
-				chrid = -1;
-				g_byte_array_free(buffer, TRUE);
-				buffer = NULL;
-			} else {
-				g_byte_array_append(buffer, buf, len);
-			}
-		}
-	}
-
-	if (buffer) {
-		CamelStream *mem;
-		d(printf("Small message part, kept in memory!\n"));
-		mem = camel_stream_mem_new_with_byte_array(buffer);
-		camel_data_wrapper_construct_from_stream (dw, mem);
-		camel_object_unref ((CamelObject *)mem);
-	} else {
-		CamelStream *sub;
-		CamelStreamFilter *filter;
-
-		d(printf("Big message part, left on disk ...\n"));
-
-		end = camel_mime_parser_tell(mp) + seekable_source->bound_start;
-		sub = camel_seekable_substream_new_with_seekable_stream_and_bounds (seekable_source, start, end);
-		if (fdec || fch) {
-			filter = camel_stream_filter_new_with_stream(sub);
-			if (fdec) {
-				camel_mime_filter_reset(fdec);
-				camel_stream_filter_add(filter, fdec);
-			}
-			if (fcrlf) {
-				camel_mime_filter_reset(fcrlf);
-				camel_stream_filter_add(filter, fcrlf);
-			}
-			if (fch) {
-				camel_mime_filter_reset(fch);
-				camel_stream_filter_add(filter, fch);
-			}
-			camel_data_wrapper_construct_from_stream (dw, (CamelStream *)filter);
-			camel_object_unref ((CamelObject *)filter);
-		} else {
-			camel_data_wrapper_construct_from_stream (dw, sub);
-		}
-		camel_object_unref ((CamelObject *)sub);
-	}
-
-	camel_mime_parser_filter_remove(mp, decid);
-	camel_mime_parser_filter_remove(mp, crlfid);
-	camel_mime_parser_filter_remove(mp, chrid);
-
-	if (fdec)
-		camel_object_unref((CamelObject *)fdec);
-	if (fcrlf)
-		camel_object_unref((CamelObject *)fcrlf);
-	if (fch)
-		camel_object_unref((CamelObject *)fch);
-	if (source)
-		camel_object_unref((CamelObject *)source);
-
-}
-
-/* This replaces the data wrapper repository ... and/or could be replaced by it? */
-void
-camel_mime_part_construct_content_from_parser(CamelMimePart *dw, CamelMimeParser *mp)
-{
-	CamelDataWrapper *content = NULL;
-	char *buf;
-	int len;
-
-	switch (camel_mime_parser_state(mp)) {
-	case HSCAN_HEADER:
-		d(printf("Creating body part\n"));
-		content = camel_data_wrapper_new();
-		simple_data_wrapper_construct_from_parser(content, mp);
-		break;
-	case HSCAN_MESSAGE:
-		d(printf("Creating message part\n"));
-		content = (CamelDataWrapper *)camel_mime_message_new();
-		camel_mime_part_construct_from_parser((CamelMimePart *)content, mp);
-		break;
-	case HSCAN_MULTIPART: {
-		CamelDataWrapper *bodypart;
-
-#ifndef NO_WARNINGS
-#warning This should use a camel-mime-multipart
-#endif
-		d(printf("Creating multi-part\n"));
-		content = (CamelDataWrapper *)camel_multipart_new();
-
-		/* FIXME: use the real boundary? */
-		camel_multipart_set_boundary((CamelMultipart *)content, NULL);
-		while (camel_mime_parser_step(mp, &buf, &len) != HSCAN_MULTIPART_END) {
-			camel_mime_parser_unstep(mp);
-			bodypart = (CamelDataWrapper *)camel_mime_part_new();
-			camel_mime_part_construct_from_parser((CamelMimePart *)bodypart, mp);
-			camel_multipart_add_part((CamelMultipart *)content, (CamelMimePart *)bodypart);
-			camel_object_unref ((CamelObject *)bodypart);
-		}
-
-		d(printf("Created multi-part\n"));
-		break; }
-	default:
-		g_warning("Invalid state encountered???: %d", camel_mime_parser_state(mp));
-	}
-	if (content) {
-#ifndef NO_WARNINGS
-#warning there just has got to be a better way ... to transfer the mime-type to the datawrapper
-#endif
-		/* would you believe you have to set this BEFORE you set the content object???  oh my god !!!! */
-		camel_data_wrapper_set_mime_type_field (content, 
-							camel_mime_part_get_content_type ((CamelMimePart *)dw));
-		camel_medium_set_content_object((CamelMedium *)dw, content);
-		camel_object_unref ((CamelObject *)content);
-	}
-}
-
diff --git a/camel/camel-mime-part-utils.h b/camel/camel-mime-part-utils.h
deleted file mode 100644
index 1e1c3655aa..0000000000
--- a/camel/camel-mime-part-utils.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mime-part-utils : Utility for mime parsing and so on */
-
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef CAMEL_MIME_PART_UTILS_H
-#define CAMEL_MIME_PART_UTILS_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-void camel_mime_part_construct_content_from_parser(CamelMimePart *, CamelMimeParser *mp);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /*  CAMEL_MIME_PART_UTILS_H  */
-
diff --git a/camel/camel-mime-part.c b/camel/camel-mime-part.c
deleted file mode 100644
index f9519df5e4..0000000000
--- a/camel/camel-mime-part.c
+++ /dev/null
@@ -1,706 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camelMimePart.c : Abstract class for a mime_part */
-
-/* 
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include 
-#include "camel-mime-part.h"
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include "hash-table-utils.h"
-#include "camel-mime-part-utils.h"
-#include 
-#include "camel-mime-parser.h"
-#include "camel-stream-mem.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-filter-basic.h"
-#include "camel-mime-filter-crlf.h"
-#include "camel-exception.h"
-
-#define d(x)
-
-typedef enum {
-	HEADER_UNKNOWN,
-	HEADER_DESCRIPTION,
-	HEADER_DISPOSITION,
-	HEADER_CONTENT_ID,
-	HEADER_ENCODING,
-	HEADER_CONTENT_MD5,
-	HEADER_CONTENT_LANGUAGES,
-	HEADER_CONTENT_TYPE
-} CamelHeaderType;
-
-
-static GHashTable *header_name_table;
-
-
-static CamelMediumClass *parent_class=NULL;
-
-/* Returns the class for a CamelMimePart */
-#define CMP_CLASS(so) CAMEL_MIME_PART_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMD_CLASS(so) CAMEL_MEDIUM_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-/* from CamelDataWrapper */
-static int             write_to_stream                 (CamelDataWrapper *data_wrapper, CamelStream *stream);
-static int	       construct_from_stream	       (CamelDataWrapper *dw, CamelStream *s);
-
-/* from CamelMedia */ 
-static void            add_header                      (CamelMedium *medium, const char *header_name, const void *header_value);
-static void            set_header                      (CamelMedium *medium, const char *header_name, const void *header_value);
-static void            remove_header                   (CamelMedium *medium, const char *header_name);
-static const void     *get_header                      (CamelMedium *medium, const char *header_name);
-
-static void            set_content_object              (CamelMedium *medium, CamelDataWrapper *content);
-
-/* from camel mime parser */
-static int             construct_from_parser           (CamelMimePart *, CamelMimeParser *);
-
-/* forward references */
-static void set_disposition (CamelMimePart *mime_part, const gchar *disposition);
-
-
-/* loads in a hash table the set of header names we */
-/* recognize and associate them with a unique enum  */
-/* identifier (see CamelHeaderType above)           */
-static void
-init_header_name_table()
-{
-	header_name_table = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-	g_hash_table_insert (header_name_table, "Content-Description", (gpointer)HEADER_DESCRIPTION);
-	g_hash_table_insert (header_name_table, "Content-Disposition", (gpointer)HEADER_DISPOSITION);
-	g_hash_table_insert (header_name_table, "Content-id", (gpointer)HEADER_CONTENT_ID);
-	g_hash_table_insert (header_name_table, "Content-Transfer-Encoding", (gpointer)HEADER_ENCODING);
-	g_hash_table_insert (header_name_table, "Content-MD5", (gpointer)HEADER_CONTENT_MD5);
-	g_hash_table_insert (header_name_table, "Content-Type", (gpointer)HEADER_CONTENT_TYPE);
-	
-}
-
-static void
-camel_mime_part_class_init (CamelMimePartClass *camel_mime_part_class)
-{
-	CamelMediumClass *camel_medium_class = CAMEL_MEDIUM_CLASS (camel_mime_part_class);
-	CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_mime_part_class);
-
-	parent_class = CAMEL_MEDIUM_CLASS (camel_type_get_global_classfuncs (camel_medium_get_type ()));
-	init_header_name_table();
-
-	camel_mime_part_class->construct_from_parser = construct_from_parser;
-	
-	/* virtual method overload */	
-	camel_medium_class->add_header                = add_header;
-	camel_medium_class->set_header                = set_header;
-	camel_medium_class->get_header                = get_header;
-	camel_medium_class->remove_header             = remove_header;
-	camel_medium_class->set_content_object        = set_content_object;
-
-	camel_data_wrapper_class->write_to_stream     = write_to_stream;
-	camel_data_wrapper_class->construct_from_stream= construct_from_stream;
-}
-
-static void
-camel_mime_part_init (gpointer   object,  gpointer   klass)
-{
-	CamelMimePart *camel_mime_part = CAMEL_MIME_PART (object);
-	
-	camel_mime_part->content_type         = gmime_content_field_new ("text", "plain");
-	camel_mime_part->description          = NULL;
-	camel_mime_part->disposition          = NULL;
-	camel_mime_part->content_id           = NULL;
-	camel_mime_part->content_MD5          = NULL;
-	camel_mime_part->content_languages    = NULL;
-	camel_mime_part->encoding             = CAMEL_MIME_PART_ENCODING_DEFAULT;
-
-	camel_mime_part->temp_message_buffer  = NULL;	
-	camel_mime_part->content_input_stream = NULL;
-}
-
-
-static void           
-camel_mime_part_finalize (CamelObject *object)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (object);
-
-	g_free (mime_part->description);
-	g_free (mime_part->content_id);
-	g_free (mime_part->content_MD5);
-	string_list_free (mime_part->content_languages);
-	header_disposition_unref(mime_part->disposition);
-	
-	if (mime_part->content_type) gmime_content_field_unref (mime_part->content_type);
-	if (mime_part->temp_message_buffer) g_byte_array_free (mime_part->temp_message_buffer, TRUE);
-
-	if (mime_part->content_input_stream) camel_object_unref (CAMEL_OBJECT (mime_part->content_input_stream));
-
-	header_raw_clear(&mime_part->headers);
-}
-
-
-
-CamelType
-camel_mime_part_get_type (void)
-{
-	static CamelType camel_mime_part_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_mime_part_type == CAMEL_INVALID_TYPE)	{
-		camel_mime_part_type = camel_type_register (CAMEL_MEDIUM_TYPE, "CamelMimePart",
-							    sizeof (CamelMimePart),
-							    sizeof (CamelMimePartClass),
-							    (CamelObjectClassInitFunc) camel_mime_part_class_init,
-							    NULL,
-							    (CamelObjectInitFunc) camel_mime_part_init,
-							    (CamelObjectFinalizeFunc) camel_mime_part_finalize);
-	}
-	
-	return camel_mime_part_type;
-}
-
-
-/* **** */
-
-static gboolean
-process_header(CamelMedium *medium, const char *header_name, const char *header_value)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (medium);
-	CamelHeaderType header_type;
-	char *text;
-
-	/* Try to parse the header pair. If it corresponds to something   */
-	/* known, the job is done in the parsing routine. If not,         */
-	/* we simply add the header in a raw fashion                      */
-
-	/* FIXMME: MUST check fields for validity before adding them! */
-
-	header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, header_name);
-	switch (header_type) {
-	case HEADER_DESCRIPTION: /* raw header->utf8 conversion */
-		text = header_decode_string(header_value);
-		g_free(mime_part->description);
-		mime_part->description = text;
-		break;
-	case HEADER_DISPOSITION:
-		set_disposition (mime_part, header_value);
-		break;
-	case HEADER_CONTENT_ID:
-		text = header_msgid_decode(header_value);
-		g_free(mime_part->content_id);
-		mime_part->content_id = text;
-		break;
-	case HEADER_ENCODING:
-		text = header_token_decode(header_value);
-		mime_part->encoding = camel_mime_part_encoding_from_string (text);
-		g_free(text);
-		break;
-	case HEADER_CONTENT_MD5:
-		g_free(mime_part->content_MD5);
-		mime_part->content_MD5 = g_strdup(header_value);
-		break;
-	case HEADER_CONTENT_TYPE: 
-		gmime_content_field_construct_from_string (mime_part->content_type, header_value);
-		break;
-	default:
-		return FALSE;
-	}
-	return TRUE;
-}
-
-
-static void
-set_header (CamelMedium *medium, const char *header_name, const void *header_value)
-{
-	CamelMimePart *part = (CamelMimePart *)medium;
-
-	process_header(medium, header_name, header_value);
-	header_raw_replace(&part->headers, header_name, header_value, -1);
-}
-
-static void
-add_header (CamelMedium *medium, const char *header_name, const void *header_value)
-{
-	CamelMimePart *part = (CamelMimePart *)medium;
-
-	/* Try to parse the header pair. If it corresponds to something   */
-	/* known, the job is done in the parsing routine. If not,         */
-	/* we simply add the header in a raw fashion                      */
-
-	/* FIXMME: MUST check fields for validity before adding them! */
-
-	/* If it was one of the headers we handled, it must be unique, set it instead of add */
-	if (process_header(medium, header_name, header_value))
-		header_raw_replace(&part->headers, header_name, header_value, -1);
-	else
-		header_raw_append(&part->headers, header_name, header_value, -1);
-}
-
-static void
-remove_header (CamelMedium *medium, const char *header_name)
-{
-	CamelMimePart *part = (CamelMimePart *)medium;
-
-	process_header(medium, header_name, NULL);
-	header_raw_remove(&part->headers, header_name);
-}
-
-static const void *
-get_header (CamelMedium *medium, const char *header_name)
-{
-	CamelMimePart *part = (CamelMimePart *)medium;
-
-	return header_raw_find(&part->headers, header_name, NULL);
-}
-
-
-/* **** Content-Description */
-void
-camel_mime_part_set_description (CamelMimePart *mime_part, const gchar *description)
-{
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part),
-				 "Content-Description", description);
-}
-
-const gchar *
-camel_mime_part_get_description (CamelMimePart *mime_part)
-{
-	return mime_part->description;
-}
-
-/* **** Content-Disposition */
-
-static void
-set_disposition (CamelMimePart *mime_part, const gchar *disposition)
-{
-	header_disposition_unref(mime_part->disposition);
-	if (disposition)
-		mime_part->disposition = header_disposition_decode(disposition);
-	else
-		mime_part->disposition = NULL;
-}
-
-
-void
-camel_mime_part_set_disposition (CamelMimePart *mime_part, const gchar *disposition)
-{
-	char *text;
-
-	/* we poke in a new disposition (so we dont lose 'filename', etc) */
-	if (mime_part->disposition == NULL) {
-		set_disposition(mime_part, disposition);
-	}
-	if (mime_part->disposition != NULL) {
-		g_free(mime_part->disposition->disposition);
-		mime_part->disposition->disposition = g_strdup(disposition);
-	}
-	text = header_disposition_format(mime_part->disposition);
-
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part),
-				 "Content-Disposition", text);
-
-	g_free(text);
-}
-
-const gchar *
-camel_mime_part_get_disposition (CamelMimePart *mime_part)
-{
-	if (mime_part->disposition)
-		return (mime_part->disposition)->disposition;
-	else
-		return NULL;
-}
-
-
-/* **** Content-Disposition: filename="xxx" */
-
-void
-camel_mime_part_set_filename (CamelMimePart *mime_part, const gchar *filename)
-{
-	char *str;
-	if (mime_part->disposition == NULL)
-		mime_part->disposition = header_disposition_decode("attachment");
-
-	header_set_param(&mime_part->disposition->params, "filename", filename);
-	str = header_disposition_format(mime_part->disposition);
-
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part),
-				 "Content-Disposition", str);
-	g_free(str);
-}
-
-const gchar *
-camel_mime_part_get_filename (CamelMimePart *mime_part)
-{
-	if (mime_part->disposition)
-		return header_param(mime_part->disposition->params, "filename");
-	return NULL;
-}
-
-
-/* **** Content-ID: */
-
-void
-camel_mime_part_set_content_id (CamelMimePart *mime_part, const char *contentid)
-{
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part), "Content-ID",
-				 contentid);
-}
-
-const gchar *
-camel_mime_part_get_content_id (CamelMimePart *mime_part)
-{
-	return mime_part->content_id;
-}
-
-/* **** Content-MD5: */
-
-void
-camel_mime_part_set_content_MD5 (CamelMimePart *mime_part, const char *md5)
-{
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part), "Content-MD5", md5);
-}
-
-const gchar *
-camel_mime_part_get_content_MD5 (CamelMimePart *mime_part)
-{
-	return mime_part->content_MD5;
-}
-
-/* **** Content-Transfer-Encoding: */
-
-void
-camel_mime_part_set_encoding (CamelMimePart *mime_part,
-			      CamelMimePartEncodingType encoding)
-{
-	const char *text;
-
-	text = camel_mime_part_encoding_to_string (encoding);
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part),
-				 "Content-Transfer-Encoding", text);
-}
-
-const CamelMimePartEncodingType
-camel_mime_part_get_encoding (CamelMimePart *mime_part)
-{
-	return mime_part->encoding;
-}
-
-/* FIXME: do something with this stuff ... */
-
-void
-camel_mime_part_set_content_languages (CamelMimePart *mime_part, GList *content_languages)
-{
-	if (mime_part->content_languages) string_list_free (mime_part->content_languages);
-	mime_part->content_languages = content_languages;
-
-	/* FIXME: translate to a header and set it */
-}
-
-const GList *
-camel_mime_part_get_content_languages (CamelMimePart *mime_part)
-{
-	return mime_part->content_languages;
-}
-
-
-/* **** */
-
-/* **** Content-Type: */
-
-void 
-camel_mime_part_set_content_type (CamelMimePart *mime_part, gchar *content_type)
-{
-	camel_medium_set_header (CAMEL_MEDIUM (mime_part),
-				 "Content-Type", content_type);
-}
-
-GMimeContentField *
-camel_mime_part_get_content_type (CamelMimePart *mime_part)
-{
-	return mime_part->content_type;
-}
-
-/*********/
-
-
-
-static void
-set_content_object (CamelMedium *medium, CamelDataWrapper *content)
-{
-	CamelMimePart *mime_part = CAMEL_MIME_PART (medium);
-	GMimeContentField *object_content_field;
-
-	parent_class->set_content_object (medium, content);
-
-	object_content_field = camel_data_wrapper_get_mime_type_field (content);
-	if (mime_part->content_type &&
-	    (mime_part->content_type != object_content_field)) {
-		char *txt;
-
-		txt = header_content_type_format(object_content_field?object_content_field->content_type:NULL);
-		camel_medium_set_header (CAMEL_MEDIUM (mime_part),
-					 "Content-Type", txt);
-	}
-}
-
-/**********************************************************************/
-
-static int
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMimePart *mp = CAMEL_MIME_PART (data_wrapper);
-	CamelMedium *medium = CAMEL_MEDIUM (data_wrapper);
-	CamelDataWrapper *content;
-	int total = 0;
-	int count;
-
-	d(printf("mime_part::write_to_stream\n"));
-
-	/* FIXME: something needs to be done about this ... */
-	/* FIXME: need to count these bytes too */
-#ifndef NO_WARNINGS
-#warning content-languages should be stored as a header
-#endif
-
-	if (mp->headers) {
-		struct _header_raw *h = mp->headers;
-		while (h) {
-			count = camel_stream_printf(stream, "%s%s%s\n", h->name, isspace(h->value[0]) ? ":" : ": ", h->value);
-			if (count == -1)
-				return -1;
-			total += count;
-			h = h->next;
-		}
-	}
-
-	count = camel_stream_write (stream, "\n", 1);
-	if (count == -1)
-		return -1;
-	total += count;
-
-	content = camel_medium_get_content_object (medium);
-	if (content) {
-		/* I dont really like this here, but i dont know where else it might go ... */
-#define CAN_THIS_GO_ELSEWHERE
-#ifdef CAN_THIS_GO_ELSEWHERE
-		CamelMimeFilter *filter = NULL;
-		CamelStreamFilter *filter_stream = NULL;
-
-		switch(mp->encoding) {
-		case CAMEL_MIME_PART_ENCODING_BASE64:
-			filter = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_BASE64_ENC);
-			break;
-		case CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE:
-			filter = (CamelMimeFilter *)camel_mime_filter_basic_new_type(CAMEL_MIME_FILTER_BASIC_QP_ENC);
-			break;
-		default:
-			break;
-		}
-		if (filter) {
-			filter_stream = camel_stream_filter_new_with_stream(stream);
-			if (!strcasecmp(mp->content_type->type, "text")) {
-				CamelMimeFilter *crlf = camel_mime_filter_crlf_new(CAMEL_MIME_FILTER_CRLF_ENCODE,
-										   CAMEL_MIME_FILTER_CRLF_MODE_CRLF_ONLY);
-				camel_stream_filter_add(filter_stream, crlf);
-				camel_object_unref((CamelObject *)crlf);
-			}
-			camel_stream_filter_add(filter_stream, filter);
-			camel_object_unref((CamelObject *)filter);
-			stream = (CamelStream *)filter_stream;
-		}
-
-#endif
-		count = camel_data_wrapper_write_to_stream (content, stream);
-		if (filter_stream) {
-			camel_stream_flush((CamelStream *)filter_stream);
-			camel_object_unref((CamelObject *)filter_stream);
-		}
-		if (count == -1)
-			return -1;
-		total += count;
-	} else {
-		g_warning("No content for medium, nothing to write");
-	}
-	return total;
-}
-
-/* mime_part */
-static int
-construct_from_parser(CamelMimePart *dw, CamelMimeParser *mp)
-{
-	struct _header_raw *headers;
-	char *buf;
-	int len;
-
-	d(printf("mime_part::construct_from_parser()\n"));
-
-	switch (camel_mime_parser_step(mp, &buf, &len)) {
-	case HSCAN_MESSAGE:
-		/* set the default type of a message always */
-		gmime_content_field_construct_from_string (dw->content_type, "message/rfc822");
-	case HSCAN_HEADER:
-	case HSCAN_MULTIPART:
-		/* we have the headers, build them into 'us' */
-		headers = camel_mime_parser_headers_raw(mp);
-		while (headers) {
-			camel_medium_add_header((CamelMedium *)dw, headers->name, headers->value);
-			headers = headers->next;
-		}
-		camel_mime_part_construct_content_from_parser(dw, mp);
-		break;
-	default:
-		g_warning("Invalid state encountered???: %d", camel_mime_parser_state(mp));
-	}
-
-	d(printf("mime_part::construct_from_parser() leaving\n"));
-#ifndef NO_WARNINGS
-#warning "Need to work out how to detect a (fatally) bad parse in the parser"
-#endif
-	return 0;
-}
-
-/**
- * camel_mime_part_construct_from_parser:
- * @mime_part: 
- * @mp: 
- * 
- * 
- * 
- * Return value: 
- **/
-int
-camel_mime_part_construct_from_parser(CamelMimePart *mime_part, CamelMimeParser *mp)
-{
-	return CMP_CLASS (mime_part)->construct_from_parser (mime_part, mp);
-}
-
-static int
-construct_from_stream(CamelDataWrapper *dw, CamelStream *s)
-{
-	CamelMimeParser *mp;
-	int ret;
-
-	d(printf("mime_part::construct_from_stream()\n"));
-
-	mp = camel_mime_parser_new();
-	if (camel_mime_parser_init_with_stream(mp, s) == -1) {
-		g_warning("Cannot create parser for stream");
-		ret = -1;
-	} else {
-		ret = camel_mime_part_construct_from_parser((CamelMimePart *)dw, mp);
-	}
-	camel_object_unref((CamelObject *)mp);
-	return ret;
-}
-
-
-const gchar *
-camel_mime_part_encoding_to_string (CamelMimePartEncodingType encoding)
-{
-	switch (encoding) {
-	case CAMEL_MIME_PART_ENCODING_DEFAULT:
-	case CAMEL_MIME_PART_ENCODING_7BIT:
-		return "7bit";
-	case CAMEL_MIME_PART_ENCODING_8BIT:
-		return "8bit";
-	case CAMEL_MIME_PART_ENCODING_BASE64:
-		return "base64";
-	case CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE:
-		return "quoted-printable";
-	default:
-		break;
-	}
-	return "";
-}
-
-
-
-/* FIXME I am not sure this is the correct way to do this.  */
-CamelMimePartEncodingType
-camel_mime_part_encoding_from_string (const gchar *string)
-{
-	if (string == NULL)
-		return CAMEL_MIME_PART_ENCODING_DEFAULT;
-	else if (strcasecmp (string, "7bit") == 0)
-		return CAMEL_MIME_PART_ENCODING_7BIT;
-	else if (strcasecmp (string, "8bit") == 0)
-		return CAMEL_MIME_PART_ENCODING_8BIT;
-	else if (strcasecmp (string, "base64") == 0)
-		return CAMEL_MIME_PART_ENCODING_BASE64;
-	else if (strcasecmp (string, "quoted-printable") == 0)
-		return CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE;
-	else
-		/* FIXME?  Spit a warning?  */
-		return CAMEL_MIME_PART_ENCODING_DEFAULT;
-}
-
-
-/******************************/
-/**  Misc utility functions  **/
-
-/**
- * camel_mime_part_new:
- *
- * Return value: a new CamelMimePart
- **/
-CamelMimePart *
-camel_mime_part_new (void)
-{
-	return (CamelMimePart *)camel_object_new (CAMEL_MIME_PART_TYPE);
-}
-
-/**
- * camel_mime_part_set_content:
- * @camel_mime_part: Mime part
- * @data: data to put into the part
- * @length: length of @data
- * @type: Content-Type of the data
- * 
- * Utility function used to set the content of a mime part object to 
- * be the provided data. If @length is 0, this routine can be used as
- * a way to remove old content (in which case @data and @type are
- * ignored and may be %NULL).
- **/
-void 
-camel_mime_part_set_content (CamelMimePart *camel_mime_part,
-			     const char *data, int length,
-			     const char *type) /* why on earth is the type last? */
-{
-	CamelMedium *medium = CAMEL_MEDIUM (camel_mime_part);
-
-	if (length) {
-		CamelDataWrapper *dw;
-		CamelStream *stream;
-
-		dw = camel_data_wrapper_new ();
-		camel_data_wrapper_set_mime_type (dw, type);
-		stream = camel_stream_mem_new_with_buffer (data, length);
-		camel_data_wrapper_construct_from_stream (dw, stream);
-		camel_object_unref (CAMEL_OBJECT (stream));
-		camel_medium_set_content_object (medium, dw);
-		camel_object_unref (CAMEL_OBJECT (dw));
-	} else {
-		if (medium->content)
-			camel_object_unref (CAMEL_OBJECT (medium->content));
-		medium->content = NULL;
-	}
-}
diff --git a/camel/camel-mime-part.h b/camel/camel-mime-part.h
deleted file mode 100644
index e423553318..0000000000
--- a/camel/camel-mime-part.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-mime-part.h : class for a mime part */
-
-/* 
- *
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MIME_PART_H
-#define CAMEL_MIME_PART_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-
-#define CAMEL_MIME_PART_TYPE     (camel_mime_part_get_type ())
-#define CAMEL_MIME_PART(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MIME_PART_TYPE, CamelMimePart))
-#define CAMEL_MIME_PART_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MIME_PART_TYPE, CamelMimePartClass))
-#define CAMEL_IS_MIME_PART(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MIME_PART_TYPE))
-
-
-enum _CamelMimePartEncodingType {
-        CAMEL_MIME_PART_ENCODING_DEFAULT,
-        CAMEL_MIME_PART_ENCODING_7BIT,
-        CAMEL_MIME_PART_ENCODING_8BIT,
-        CAMEL_MIME_PART_ENCODING_BASE64,
-        CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE,
-        CAMEL_MIME_PART_NUM_ENCODINGS
-};
-typedef enum _CamelMimePartEncodingType CamelMimePartEncodingType;
-
-
-/* Do not change these values directly, you would regret it one day */
-struct _CamelMimePart
-{
-	CamelMedium parent_object;
-	
-	/* All fields here are -** PRIVATE **- */ 
-	gchar *description;
-	CamelMimeDisposition *disposition;
-	gchar *content_id;
-	gchar *content_MD5;
-	GList *content_languages;
-	CamelMimePartEncodingType encoding;
-	
-	GByteArray *temp_message_buffer;
-	GMimeContentField *content_type;
-	CamelStream *content_input_stream;
-
-	struct _header_raw *headers; /* mime headers */
-};
-
-typedef struct _CamelMimePartClass {
-	CamelMediumClass parent_class;
-	
-	/* Virtual methods */
-	int (*construct_from_parser) (CamelMimePart *, CamelMimeParser *);
-} CamelMimePartClass;
-
-/* Standard Camel function */
-CamelType camel_mime_part_get_type (void);
-
-/* public methods */
-CamelMimePart *  camel_mime_part_new                    (void);
-
-void	         camel_mime_part_set_description	(CamelMimePart *mime_part, const gchar *description);
-const     gchar *camel_mime_part_get_description	(CamelMimePart *mime_part);
-
-void	         camel_mime_part_set_disposition	(CamelMimePart *mime_part, const gchar *disposition);
-const     gchar *camel_mime_part_get_disposition	(CamelMimePart *mime_part);
-
-void	         camel_mime_part_set_filename		(CamelMimePart *mime_part, const gchar *filename);
-const	  gchar *camel_mime_part_get_filename		(CamelMimePart *mime_part);
-
-void             camel_mime_part_set_content_id		(CamelMimePart *mime_part, const char *contentid);
-const	  gchar *camel_mime_part_get_content_id		(CamelMimePart *mime_part);
-
-void		 camel_mime_part_set_content_MD5	(CamelMimePart *mime_part, const char *);
-const	  gchar *camel_mime_part_get_content_MD5	(CamelMimePart *mime_part);
-
-void	         camel_mime_part_set_encoding		(CamelMimePart *mime_part, CamelMimePartEncodingType type);
-CamelMimePartEncodingType camel_mime_part_get_encoding	(CamelMimePart *mime_part);
-
-void	 	 camel_mime_part_set_content_languages	(CamelMimePart *mime_part, GList *content_languages);
-const	  GList *camel_mime_part_get_content_languages	(CamelMimePart *mime_part);
-
-/* FIXME: what about content-type parameters?   what about major/minor parts? */
-void               camel_mime_part_set_content_type 	(CamelMimePart *mime_part, gchar *content_type);
-GMimeContentField *camel_mime_part_get_content_type	(CamelMimePart *mime_part);
-
-const     gchar *         camel_mime_part_encoding_to_string   (CamelMimePartEncodingType encoding);
-CamelMimePartEncodingType camel_mime_part_encoding_from_string (const gchar *string);
-
-/* construction */
-int		camel_mime_part_construct_from_parser  (CamelMimePart *, CamelMimeParser *);
-
-/* utility functions */
-void      	camel_mime_part_set_content 	       (CamelMimePart *camel_mime_part,
-							const char *content, int length, const char *type);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MIME_PART_H */
-
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
deleted file mode 100644
index 3e85f4127f..0000000000
--- a/camel/camel-mime-utils.c
+++ /dev/null
@@ -1,2640 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *           Jeffrey Stedfast 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include 
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include 
-#include 
-
-#include 
-#include 
-
-#include "camel-mime-utils.h"
-
-#include "broken-date-parser.h"
-
-#if 0
-int strdup_count = 0;
-int malloc_count = 0;
-int free_count = 0;
-
-#define g_strdup(x) (strdup_count++, g_strdup(x))
-#define g_malloc(x) (malloc_count++, g_malloc(x))
-#define g_free(x) (free_count++, g_free(x))
-#endif
-
-/* for all warnings ... */
-#define w(x) x
-
-#define d(x)
-#define d2(x)
-
-#define	CAMEL_UUDECODE_CHAR(c)	(((c) - ' ') & 077)
-
-static char *base64_alphabet =
-"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-static unsigned char tohex[16] = {
-	'0', '1', '2', '3', '4', '5', '6', '7',
-	'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-static unsigned char camel_mime_special_table[256] = {
-	  5,  5,  5,  5,  5,  5,  5,  5,  5,167,  7,  5,  5, 39,  5,  5,
-	  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
-	178,128,140,128,128,128,128,128,140,140,128,128,140,128,136,132,
-	128,128,128,128,128,128,128,128,128,128,204,140,140,  4,140,132,
-	140,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-	128,128,128,128,128,128,128,128,128,128,128,172,172,172,128,128,
-	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
-	128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,  5,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
-};
-
-static unsigned char camel_mime_base64_rank[256] = {
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255, 62,255,255,255, 63,
-	 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255,  0,255,255,
-	255,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
-	 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,255,255,255,255,255,
-	255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-	 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-	255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-};
-
-/*
-  if any of these change, then the tables above should be regenerated
-  by compiling this with -DBUILD_TABLE, and running.
-
-  gcc -o buildtable `glib-config --cflags --libs` -DBUILD_TABLE camel-mime-utils.c
-  ./buildtable
-
-*/
-enum {
-	IS_CTRL		= 1<<0,
-	IS_LWSP		= 1<<1,
-	IS_TSPECIAL	= 1<<2,
-	IS_SPECIAL	= 1<<3,
-	IS_SPACE	= 1<<4,
-	IS_DSPECIAL	= 1<<5,
-	IS_COLON	= 1<<6,	/* rather wasteful of space ... */
-	IS_QPSAFE	= 1<<7
-};
-
-#define is_ctrl(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_CTRL) != 0)
-#define is_lwsp(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_LWSP) != 0)
-#define is_tspecial(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_TSPECIAL) != 0)
-#define is_type(x, t) ((camel_mime_special_table[(unsigned char)(x)] & (t)) != 0)
-#define is_ttoken(x) ((camel_mime_special_table[(unsigned char)(x)] & (IS_TSPECIAL|IS_LWSP|IS_CTRL)) == 0)
-#define is_atom(x) ((camel_mime_special_table[(unsigned char)(x)] & (IS_SPECIAL|IS_SPACE|IS_CTRL)) == 0)
-#define is_dtext(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_DSPECIAL) == 0)
-#define is_fieldname(x) ((camel_mime_special_table[(unsigned char)(x)] & (IS_CTRL|IS_SPACE|IS_COLON)) == 0)
-#define is_qpsafe(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_QPSAFE) != 0)
-
-/* only needs to be run to rebuild the tables above */
-#ifdef BUILD_TABLE
-
-#define CHARS_LWSP " \t\n\r"
-#define CHARS_TSPECIAL "()<>@,;:\\\"/[]?="
-#define CHARS_SPECIAL "()<>@,;:\\\".[]"
-#define CHARS_CSPECIAL "()\\\r"	/* not in comments */
-#define CHARS_DSPECIAL "[]\\\r \t"	/* not in domains */
-
-static void
-header_init_bits(unsigned char bit, unsigned char bitcopy, int remove, unsigned char *vals, int len)
-{
-	int i;
-
-	if (!remove) {
-		for (i=0;i=33 && i<=60) || (i>=62 && i<=126) || i==32 || i==9) camel_mime_special_table[i] |= IS_QPSAFE;
-}
-
-void
-base64_init(void)
-{
-	int i;
-
-	memset(camel_mime_base64_rank, 0xff, sizeof(camel_mime_base64_rank));
-	for (i=0;i<64;i++) {
-		camel_mime_base64_rank[(unsigned int)base64_alphabet[i]] = i;
-	}
-	camel_mime_base64_rank['='] = 0;
-}
-
-int main(int argc, char **argv)
-{
-	int i;
-	void run_test(void);
-
-	header_decode_init();
-	base64_init();
-
-	printf("static unsigned char camel_mime_special_table[256] = {\n\t");
-	for (i=0;i<256;i++) {
-		printf("%3d,", camel_mime_special_table[i]);
-		if ((i&15) == 15) {
-			printf("\n");
-			if (i!=255) {
-				printf("\t");
-			}
-		}
-	}
-	printf("};\n");
-
-	printf("static unsigned char camel_mime_base64_rank[256] = {\n\t");
-	for (i=0;i<256;i++) {
-		printf("%3d,", camel_mime_base64_rank[i]);
-		if ((i&15) == 15) {
-			printf("\n");
-			if (i!=255) {
-				printf("\t");
-			}
-		}
-	}
-	printf("};\n");
-
-	run_test();
-
-	return 0;
-}
-
-#endif
-
-
-/* call this when finished encoding everything, to
-   flush off the last little bit */
-int
-base64_encode_close(unsigned char *in, int inlen, unsigned char *out, int *state, int *save)
-{
-	int c1, c2;
-	unsigned char *outptr = out;
-
-	if (inlen>0)
-		outptr += base64_encode_step(in, inlen, outptr, state, save);
-
-	c1 = ((char *)save)[1];
-	c2 = ((char *)save)[2];
-
-	switch (((char *)save)[0]) {
-	case 2:
-		outptr[2] = base64_alphabet [ ( (c2 &0x0f) << 2 ) ];
-		goto skip;
-	case 1:
-		outptr[2] = '=';
-	skip:
-		outptr[0] = base64_alphabet [ c1 >> 2 ];
-		outptr[1] = base64_alphabet [ c2 >> 4 | ( (c1&0x3) << 4 )];
-		outptr[3] = '=';
-		outptr += 4;
-		break;
-	}
-	*outptr++ = '\n';
-
-	*save = 0;
-	*state = 0;
-
-	return outptr-out;
-}
-
-/*
-  performs an 'encode step', only encodes blocks of 3 characters to the
-  output at a time, saves left-over state in state and save (initialise to
-  0 on first invocation).
-*/
-int
-base64_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save)
-{
-	register unsigned char *inptr, *outptr;
-
-	if (len<=0)
-		return 0;
-
-	inptr = in;
-	outptr = out;
-
-	d(printf("we have %d chars, and %d saved chars\n", len, ((char *)save)[0]));
-
-	if (len + ((char *)save)[0] > 2) {
-		unsigned char *inend = in+len-2;
-		register int c1, c2, c3;
-		register int already;
-
-		already = *state;
-
-		switch (((char *)save)[0]) {
-		case 1:	c1 = ((unsigned char *)save)[1]; goto skip1;
-		case 2:	c1 = ((unsigned char *)save)[1];
-			c2 = ((unsigned char *)save)[2]; goto skip2;
-		}
-		
-		/* yes, we jump into the loop, no i'm not going to change it, its beautiful! */
-		while (inptr < inend) {
-			c1 = *inptr++;
-		skip1:
-			c2 = *inptr++;
-		skip2:
-			c3 = *inptr++;
-			*outptr++ = base64_alphabet [ c1 >> 2 ];
-			*outptr++ = base64_alphabet [ c2 >> 4 | ( (c1&0x3) << 4 ) ];
-			*outptr++ = base64_alphabet [ ( (c2 &0x0f) << 2 ) | (c3 >> 6) ];
-			*outptr++ = base64_alphabet [ c3 & 0x3f ];
-			/* this is a bit ugly ... */
-			if ((++already)>=19) {
-				*outptr++='\n';
-				already = 0;
-			}
-		}
-
-		((char *)save)[0] = 0;
-		len = 2-(inptr-inend);
-		*state = already;
-	}
-
-	d(printf("state = %d, len = %d\n",
-		 (int)((char *)save)[0],
-		 len));
-
-	if (len>0) {
-		register char *saveout;
-
-		/* points to the slot for the next char to save */
-		saveout = & (((char *)save)[1]) + ((char *)save)[0];
-
-		/* len can only be 0 1 or 2 */
-		switch(len) {
-		case 2:	*saveout++ = *inptr++;
-		case 1:	*saveout++ = *inptr++;
-		}
-		((char *)save)[0]+=len;
-	}
-
-	d(printf("mode = %d\nc1 = %c\nc2 = %c\n",
-		 (int)((char *)save)[0],
-		 (int)((char *)save)[1],
-		 (int)((char *)save)[2]));
-
-	return outptr-out;
-}
-
-
-/**
- * base64_decode_step: decode a chunk of base64 encoded data
- * @in: input stream
- * @len: max length of data to decode ( normally strlen(in) ??)
- * @out: output stream
- * @state: holds the number of bits that are stored in @save
- * @save: leftover bits that have not yet been decoded
- *
- * Decodes a chunk of base64 encoded data
- **/
-int
-base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, unsigned int *save)
-{
-	register unsigned char *inptr, *outptr;
-	unsigned char *inend, c;
-	register unsigned int v;
-	int i;
-
-	inend = in+len;
-	outptr = out;
-
-	/* convert 4 base64 bytes to 3 normal bytes */
-	v=*save;
-	i=*state;
-	inptr = in;
-	while (inptr>16;
-				*outptr++ = v>>8;
-				*outptr++ = v;
-				i=0;
-			}
-		}
-	}
-
-	*save = v;
-	*state = i;
-
-	/* quick scan back for '=' on the end somewhere */
-	/* fortunately we can drop 1 output char for each trailing = (upto 2) */
-	i=2;
-	while (inptr>in && i) {
-		inptr--;
-		if (camel_mime_base64_rank[*inptr] != 0xff) {
-			if (*inptr == '=')
-				outptr--;
-			i--;
-		}
-	}
-
-	/* if i!= 0 then there is a truncation error! */
-	return outptr-out;
-}
-
-
-/**
- * uudecode_step: uudecode a chunk of data
- * @in: input stream
- * @len: max length of data to decode ( normally strlen(in) ??)
- * @out: output stream
- * @state: holds the number of bits that are stored in @save
- * @save: leftover bits that have not yet been decoded
- * @uulen: holds the value of the length-char which is used to calculate
- *         how many more chars need to be decoded for that 'line'
- *
- * uudecodes a chunk of data. Assumes the "begin  " line
- * has been stripped off.
- **/
-int
-uudecode_step (unsigned char *in, int len, unsigned char *out, int *state, guint32 *save, char *uulen)
-{
-	register unsigned char *inptr, *outptr;
-	unsigned char *inend, ch;
-	register guint32 saved;
-	gboolean last_was_eoln;
-	int i;
-
-	if (*uulen <= 0)
-		last_was_eoln = TRUE;
-	else
-		last_was_eoln = FALSE;
-	
-	inend = in + len;
-	outptr = out;
-	saved = *save;
-	i = *state;
-	inptr = in;
-	while (inptr < inend && *inptr) {
-		if (*inptr == '\n' || last_was_eoln) {
-			if (last_was_eoln) {
-				*uulen = CAMEL_UUDECODE_CHAR (*inptr);
-				last_was_eoln = FALSE;
-			} else {
-				last_was_eoln = TRUE;
-			}
-
-			inptr++;
-			continue;
-		}
-
-		ch = *inptr++;
-		
-		if (*uulen > 0) {
-			/* save the byte */
-			saved = (saved << 8) | ch;
-			i++;
-			if (i == 4) {
-				/* convert 4 uuencoded bytes to 3 normal bytes */
-				unsigned char b0, b1, b2, b3;
-
-				b0 = saved >> 24;
-				b1 = saved >> 16 & 0xff;
-				b2 = saved >> 8 & 0xff;
-				b3 = saved & 0xff;
-
-				if (*uulen >= 3) {
-					*outptr++ = CAMEL_UUDECODE_CHAR (b0) << 2 | CAMEL_UUDECODE_CHAR (b1) >> 4;
-					*outptr++ = CAMEL_UUDECODE_CHAR (b1) << 4 | CAMEL_UUDECODE_CHAR (b2) >> 2;
-				        *outptr++ = CAMEL_UUDECODE_CHAR (b2) << 6 | CAMEL_UUDECODE_CHAR (b3);
-				} else {
-					if (*uulen >= 1) {
-						*outptr++ = CAMEL_UUDECODE_CHAR (b0) << 2 | CAMEL_UUDECODE_CHAR (b1) >> 4;
-					}
-					if (*uulen >= 2) {
-						*outptr++ = CAMEL_UUDECODE_CHAR (b1) << 4 | CAMEL_UUDECODE_CHAR (b2) >> 2;
-					}
-				}
-
-				i = 0;
-				saved = 0;
-				*uulen -= 3;
-			}
-		} else {
-			break;
-		}
-	}
-
-	*save = saved;
-	*state = i;
-
-	return outptr - out;
-}
-
-int
-quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save)
-{
-	register unsigned char *outptr = out;
-	int last;
-
-	if (len>0)
-		outptr += quoted_encode_step(in, len, outptr, state, save);
-
-	last = *state;
-	if (last != -1) {
-		/* space/tab must be encoded if its the last character on
-		   the line */
-		if (is_qpsafe(last) && last!=' ' && last!=9) {
-			*outptr++ = last;
-		} else {
-			*outptr++ = '=';
-			*outptr++ = tohex[(last>>4) & 0xf];
-			*outptr++ = tohex[last & 0xf];
-		}
-	}
-
-	/* hmm, not sure if this should really be added here, we dont want
-	   to add it to the content, afterall ...? */
-	*outptr++ = '\n';
-
-	*save = 0;
-	*state = -1;
-
-	return outptr-out;
-}
-
-int
-quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *statep, int *save)
-{
-	register unsigned char *inptr, *outptr, *inend;
-	unsigned char c;
-	register int sofar = *save, /* keeps track of how many chars on a line */
-		last=*statep;	/* keeps track if last char to end was a space cr etc */
-
-	inptr = in;
-	inend = in+len;
-	outptr = out;
-	while (inptr>4) & 0xf];
-				*outptr++ = tohex[last & 0xf];
-				sofar+=3;
-			}
-			last = c;
-		} else if (c=='\n') {
-			if (last != -1 && last!='\r') {
-				*outptr++ = '=';
-				*outptr++ = tohex[(last>>4) & 0xf];
-				*outptr++ = tohex[last & 0xf];
-			}
-			*outptr++ = '\n';
-			sofar=0;
-			last = -1;
-		} else {
-			if (last != -1) {
-				if (is_qpsafe(last)) {
-					*outptr++ = last;
-					sofar++;
-				} else {
-					*outptr++ = '=';
-					*outptr++ = tohex[(last>>4) & 0xf];
-					*outptr++ = tohex[last & 0xf];
-					sofar+=3;
-				}
-			}
-			if (is_qpsafe(c)) {
-				if (sofar>74) {
-					*outptr++='=';
-					*outptr++='\n';
-					sofar = 0;
-				}
-				/* delay output of space */
-				if (c==' ' || c==0x09) {
-					last = c;
-				} else {
-					*outptr++=c;
-					sofar++;
-					last = -1;
-				}
-			} else {
-				if (sofar>72) {
-					*outptr++='=';
-					*outptr++='\n';
-					sofar = 3;
-				} else
-					sofar += 3;
-				*outptr++ = '=';
-				*outptr++ = tohex[(c>>4) & 0xf];
-				*outptr++ = tohex[c & 0xf];
-				last = -1;
-			}
-		}
-	}
-	*save = sofar;
-	*statep = last;
-	return outptr-out;
-}
-
-/*
-  FIXME: this does not strip trailing spaces from lines (as it should, rfc 2045, section 6.7)
-  Should it also canonicalise the end of line to CR LF??
-
-  Note: Trailing rubbish (at the end of input), like = or =x or =\r will be lost.
-*/ 
-
-int
-quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestate, int *saveme)
-{
-	register unsigned char *inptr, *outptr;
-	unsigned char *inend, c;
-	int state, save;
-
-	inend = in+len;
-	outptr = out;
-
-	d(printf("quoted-printable, decoding text '%.*s'\n", len, in));
-
-	state = *savestate;
-	save = *saveme;
-	inptr = in;
-	while (inptr='A'?save-'A'+10:save-'0')&0x0f) << 4)
-					| ((c>='A'?c-'A'+10:c-'0')&0x0f);
-			} else if (c=='\n' && save == '\r') {
-				/* soft break ... canonical end of line */
-			} else {
-				/* just output the data */
-				*outptr++ = '=';
-				*outptr++ = save;
-				*outptr++ = c;
-			}
-			state = 0;
-			break;
-#ifdef CANONICALISE_EOL
-		case 3:
-			/* convert \r -> to \r\n, leaves \r\n alone */
-			c = *inptr++;
-			if (c=='\n') {
-				*outptr++ = '\r';
-				*outptr++ = c;
-			} else {
-				*outptr++ = '\r';
-				*outptr++ = '\n';
-				*outptr++ = c;
-			}
-			state = 0;
-			break;
-#endif
-		}
-	}
-
-	*savestate = state;
-	*saveme = save;
-
-	return outptr-out;
-}
-
-/*
-  this is for the "Q" encoding of international words,
-  which is slightly different than plain quoted-printable
-*/
-static int
-quoted_decode(const unsigned char *in, int len, unsigned char *out)
-{
-	register const unsigned char *inptr;
-	register unsigned char *outptr;
-	unsigned const char *inend;
-	unsigned char c, c1;
-	int ret = 0;
-
-	inend = in+len;
-	outptr = out;
-
-	d(printf("decoding text '%.*s'\n", len, in));
-
-	inptr = in;
-	while (inptr=2) {
-				c = toupper(*inptr++);
-				c1 = toupper(*inptr++);
-				*outptr++ = (((c>='A'?c-'A'+10:c-'0')&0x0f) << 4)
-					| ((c1>='A'?c1-'A'+10:c1-'0')&0x0f);
-			} else {
-				ret = -1;
-				break;
-			}
-		} else if (c=='_') {
-			*outptr++ = 0x20;
-		} else if (c==' ' || c==0x09) {
-			/* FIXME: this is an error! ignore for now ... */
-			ret = -1;
-			break;
-		} else {
-			*outptr++ = c;
-		}
-	}
-	if (ret==0) {
-		return outptr-out;
-	}
-	return -1;
-}
-
-/* rfc2047 version of quoted-printable */
-static int
-quoted_encode(const unsigned char *in, int len, unsigned char *out)
-{
-	register const unsigned char *inptr, *inend;
-	unsigned char *outptr;
-	unsigned char c;
-
-	inptr = in;
-	inend = in+len;
-	outptr = out;
-	while (inptr>4) & 0xf];
-			*outptr++ = tohex[c & 0xf];
-		}
-	}
-
-	printf("encoding '%.*s' = '%.*s'\n", len, in, outptr-out, out);
-
-	return outptr-out;
-}
-
-
-static void
-header_decode_lwsp(const char **in)
-{
-	const char *inptr = *in;
-	char c;
-
-	d2(printf("is ws: '%s'\n", *in));
-
-	while (is_lwsp(*inptr) || (*inptr =='(' && *inptr != '\0')) {
-		while (is_lwsp(*inptr) && inptr != '\0') {
-			d2(printf("(%c)", *inptr));
-			inptr++;
-		}
-		d2(printf("\n"));
-
-		/* check for comments */
-		if (*inptr == '(') {
-			int depth = 1;
-			inptr++;
-			while (depth && (c=*inptr) && *inptr != '\0') {
-				if (c=='\\' && inptr[1]) {
-					inptr++;
-				} else if (c=='(') {
-					depth++;
-				} else if (c==')') {
-					depth--;
-				}
-				inptr++;
-			}
-		}
-	}
-	*in = inptr;
-}
-
-/* decode rfc 2047 encoded string segment */
-static char *
-rfc2047_decode_word(const char *in, int len)
-{
-	const char *inptr = in+2;
-	const char *inend = in+len-2;
-	char *encname;
-	int tmplen;
-	int ret;
-	char *decword = NULL;
-	char *decoded = NULL;
-	char *outbase = NULL;
-	char *inbuf, *outbuf;
-	int inlen, outlen;
-	unicode_iconv_t ic;
-
-	d(printf("decoding '%.*s'\n", len, in));
-
-	/* just make sure we're not passed shit */
-	if (len<7
-	    || !(in[0]=='=' && in[1]=='?' && in[len-1]=='=' && in[len-2]=='?')) {
-		d(printf("invalid\n"));
-		return NULL;
-	}
-
-	inptr = memchr(inptr, '?', inend-inptr);
-	if (inptr!=NULL
-	    && inptr0) {
-			/* yuck, all this snot is to setup iconv! */
-			tmplen = inptr-in-3;
-			encname = alloca(tmplen+1);
-			encname[tmplen]=0;
-			memcpy(encname, in+2, tmplen);
-
-			inbuf = decword;
-
-			outlen = inlen*6;
-			outbase = alloca(outlen);
-			outbuf = outbase;
-
-			/* TODO: Should this cache iconv converters? */
-			ic = unicode_iconv_open("iso-8859-1", encname);
-			if (ic != (unicode_iconv_t)-1) {
-				ret = unicode_iconv(ic, (const char **)&inbuf, &inlen, &outbuf, &outlen);
-				unicode_iconv_close(ic);
-				if (ret>=0) {
-					*outbuf = 0;
-					decoded = g_strdup(outbase);
-				}
-			} else {
-				w(g_warning("Cannot decode charset, header display may be corrupt: %s: %s", encname, strerror(errno)));
-				/* TODO: Should this do this, or just leave the encoded strings? */
-				decword[inlen] = 0;
-				decoded = g_strdup(decword);
-			}
-		}
-	}
-
-	d(printf("decoded '%s'\n", decoded));
-
-	return decoded;
-}
-
-/* grrr, glib should have this ! */
-static GString *
-g_string_append_len(GString *st, const char *s, int l)
-{
-	char *tmp;
-
-	tmp = alloca(l+1);
-	tmp[l]=0;
-	memcpy(tmp, s, l);
-	return g_string_append(st, tmp);
-}
-
-/* decodes a simple text, rfc822 */
-static char *
-header_decode_text(const char *in, int inlen)
-{
-	GString *out;
-	const char *inptr = in;
-	const char *inend = in+inlen;
-	char *encstart, *encend;
-	char *decword;
-
-	out = g_string_new("");
-	while ( (encstart = strstr(inptr, "=?"))
-		&& (encend = strstr(encstart+2, "?=")) ) {
-
-		decword = rfc2047_decode_word(encstart, encend-encstart+2);
-		if (decword) {
-			out = g_string_append_len(out, inptr, encstart-inptr);
-			out = g_string_append_len(out, decword, strlen(decword));
-			free(decword);
-		} else {
-			out = g_string_append_len(out, inptr, encend-inptr+2);
-		}
-		inptr = encend+2;
-	}
-	out = g_string_append_len(out, inptr, inend-inptr);
-
-	encstart = out->str;
-	g_string_free(out, FALSE);
-
-	return encstart;
-}
-
-char *
-header_decode_string(const char *in)
-{
-	if (in == NULL)
-		return NULL;
-	return header_decode_text(in, strlen(in));
-}
-
-static char *encoding_map[] = {
-	"US-ASCII",
-	"ISO-8859-1",
-	"UTF-8"
-};
-
-/* FIXME: needs a way to cache iconv opens for different charsets? */
-static
-char *rfc2047_encode_word(const char *in, int len, char *type)
-{
-	unicode_iconv_t ic;
-	char *buffer, *out, *ascii;
-	size_t inlen, outlen, enclen;
-
-	d(printf("Converting '%.*s' to %s\n", len, in, type));
-
-	/* convert utf8->encoding */
-	outlen = len*6;
-	buffer = alloca(outlen);
-	inlen = len;
-	out = buffer;
-
-	/* if we can't convert from utf-8, just encode as utf-8 */
-	if (!strcasecmp(type, "UTF-8")
-	    || (ic = unicode_iconv_open(type, "UTF-8")) == (unicode_iconv_t)-1) {
-		memcpy(buffer, in, len);
-		out = buffer+len;
-		type = "UTF-8";
-	} else {
-		if (unicode_iconv(ic, &in, &inlen, &out, &outlen) == -1) {
-			w(g_warning("Conversion problem: conversion truncated: %s", strerror(errno)));
-		}
-		unicode_iconv_close(ic);
-	}
-	enclen = out-buffer;
-
-	/* now create qp version */
-	ascii = alloca(enclen*3 + strlen(type) + 8);
-	out = ascii;
-	/* should determine which encoding is smaller, and use that? */
-	out += sprintf(out, "=?%s?Q?", type);
-	out += quoted_encode(buffer, enclen, out);
-	sprintf(out, "?=");
-
-	d(printf("converted = %s\n", ascii));
-	return g_strdup(ascii);
-}
-
-
-/* TODO: Should this worry about quotes?? */
-char *
-header_encode_string(const unsigned char *in)
-{
-	GString *out;
-	const unsigned char *inptr = in, *start;
-	int encoding;
-	char *outstr;
-
-	if (in == NULL)
-		return NULL;
-
-	/* do a quick us-ascii check (the common case?) */
-	while (*inptr) {
-		if (*inptr > 127)
-			break;
-		inptr++;
-	}
-	if (*inptr == 0)
-		return g_strdup(in);
-
-	/* This gets each word out of the input, and checks to see what charset
-	   can be used to encode it. */
-	/* TODO: Work out when to merge subsequent words, or across word-parts */
-	/* FIXME: Make sure a converted word is less than the encoding size */
-	out = g_string_new("");
-	inptr = in;
-	encoding = 0;
-	start = inptr;
-	while (inptr && *inptr) {
-		unicode_char_t c;
-		const char *newinptr;
-		newinptr = unicode_get_utf8(inptr, &c);
-		if (newinptr == NULL) {
-			w(g_warning("Invalid UTF-8 sequence encountered (pos %d, char '%c'): %s", (inptr-in), inptr[0], in));
-			inptr++;
-			continue;
-		}
-		inptr = newinptr;
-		if (unicode_isspace(c)) {
-			if (encoding == 0) {
-				out = g_string_append_len(out, start, inptr-start);
-			} else {
-				char *text = rfc2047_encode_word(start, inptr-start-1, encoding_map[encoding]);
-				out = g_string_append(out, text);
-				out = g_string_append_c(out, c);
-				g_free(text);
-			}
-			start = inptr;
-			encoding = 0;
-		} else if (c>127 && c < 256) {
-			encoding = MAX(encoding, 1);
-		} else if (c >=256) {
-			encoding = MAX(encoding, 2);
-		}
-	}
-	if (inptr-start) {
-		if (encoding == 0) {
-			out = g_string_append_len(out, start, inptr-start);
-		} else {
-			char *text = rfc2047_encode_word(start, inptr-start, encoding_map[encoding]);
-			out = g_string_append(out, text);
-			g_free(text);
-		}
-	}
-	outstr = out->str;
-	g_string_free(out, FALSE);
-	return outstr;
-}
-
-
-/* these are all internal parser functions */
-
-static char *
-decode_token(const char **in)
-{
-	const char *inptr = *in;
-	const char *start;
-
-	header_decode_lwsp(&inptr);
-	start = inptr;
-	while (is_ttoken(*inptr))
-		inptr++;
-	if (inptr>start) {
-		*in = inptr;
-		return g_strndup(start, inptr-start);
-	} else {
-		return NULL;
-	}
-}
-
-char *
-header_token_decode(const char *in)
-{
-	if (in == NULL)
-		return NULL;
-
-	return decode_token(&in);
-}
-
-/*
-   <"> * (  \, cr  /  \  ) <">
-*/
-static char *
-header_decode_quoted_string(const char **in)
-{
-	const char *inptr = *in;
-	char *out = NULL, *outptr;
-	int outlen;
-	int c;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '"') {
-		const char *intmp;
-		int skip = 0;
-
-		/* first, calc length */
-		inptr++;
-		intmp = inptr;
-		while ( (c = *intmp++) && c!= '"' && c != '\0') {
-			if (c=='\\' && *intmp) {
-				intmp++;
-				skip++;
-			}
-		}
-		outlen = intmp-inptr-skip;
-		out = outptr = g_malloc(outlen+1);
-		while ( (c = *inptr++) && c!= '"' && c != '\0') {
-			if (c=='\\' && *inptr) {
-				c = *inptr++;
-			}
-			*outptr++ = c;
-		}
-		*outptr = 0;
-	}
-	*in = inptr;
-	return out;
-}
-
-static char *
-header_decode_atom(const char **in)
-{
-	const char *inptr = *in, *start;
-
-	header_decode_lwsp(&inptr);
-	start = inptr;
-	while (is_atom(*inptr))
-		inptr++;
-	*in = inptr;
-	if (inptr > start)
-		return g_strndup(start, inptr-start);
-	else
-		return NULL;
-}
-
-static char *
-header_decode_word(const char **in)
-{
-	const char *inptr = *in;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '"') {
-		*in = inptr;
-		return header_decode_quoted_string(in);
-	} else {
-		*in = inptr;
-		return header_decode_atom(in);
-	}
-}
-
-static char *
-header_decode_value(const char **in)
-{
-	const char *inptr = *in;
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '"') {
-		d(printf("decoding quoted string\n"));
-		return header_decode_quoted_string(in);
-	} else if (is_ttoken(*inptr)) {
-		d(printf("decoding token\n"));
-		/* this may not have the right specials for all params? */
-		return decode_token(in);
-	}
-	return NULL;
-}
-
-/* shoudl this return -1 for no int? */
-static int
-header_decode_int(const char **in)
-{
-	const char *inptr = *in;
-	int c, v=0;
-
-	header_decode_lwsp(&inptr);
-	while ( (c=*inptr++ & 0xff)
-		&& isdigit(c) ) {
-		v = v*10+(c-'0');
-	}
-	*in = inptr-1;
-	return v;
-}
-
-static int
-header_decode_param(const char **in, char **paramp, char **valuep)
-{
-	const char *inptr = *in;
-	char *param, *value=NULL;
-
-	param = decode_token(&inptr);
-	header_decode_lwsp(&inptr);
-	if (*inptr == '=') {
-		inptr++;
-		value = header_decode_value(&inptr);
-	}
-
-	if (param && value) {
-		*paramp = param;
-		*valuep = value;
-		*in = inptr;
-		return 0;
-	} else {
-		g_free(param);
-		g_free(value);
-		return 1;
-	}
-}
-
-char *
-header_param(struct _header_param *p, const char *name)
-{
-	while (p && strcasecmp(p->name, name) != 0)
-		p = p->next;
-	if (p)
-		return p->value;
-	return NULL;
-}
-
-struct _header_param *
-header_set_param(struct _header_param **l, const char *name, const char *value)
-{
-	struct _header_param *p = (struct _header_param *)l, *pn;
-
-	while (p->next) {
-		pn = p->next;
-		if (!strcasecmp(pn->name, name)) {
-			g_free(pn->value);
-			if (value) {
-				pn->value = g_strdup(value);
-				return pn;
-			} else {
-				p->next = pn->next;
-				g_free(pn);
-				return NULL;
-			}
-		}
-		p = pn;
-	}
-
-	if (value == NULL)
-		return NULL;
-
-	pn = g_malloc(sizeof(*pn));
-	pn->next = 0;
-	pn->name = g_strdup(name);
-	pn->value = g_strdup(value);
-	p->next = pn;
-
-	return pn;
-}
-
-const char *
-header_content_type_param(struct _header_content_type *t, const char *name)
-{
-	if (t==NULL)
-		return NULL;
-	return header_param(t->params, name);
-}
-
-void header_content_type_set_param(struct _header_content_type *t, const char *name, const char *value)
-{
-	header_set_param(&t->params, name, value);
-}
-
-/**
- * header_content_type_is:
- * @ct: A content type specifier, or #NULL.
- * @type: A type to check against.
- * @subtype: A subtype to check against, or "*" to match any subtype.
- * 
- * Returns #TRUE if the content type @ct is of type @type/@subtype.
- * The subtype of "*" will match any subtype.  If @ct is #NULL, then
- * it will match the type "text/plain".
- * 
- * Return value: #TRUE or #FALSE depending on the matching of the type.
- **/
-int
-header_content_type_is(struct _header_content_type *ct, const char *type, const char *subtype)
-{
-	/* no type == text/plain or text/"*" */
-	if (ct==NULL) {
-		return (!strcasecmp(type, "text")
-			&& (!strcasecmp(subtype, "plain")
-			    || !strcasecmp(subtype, "*")));
-	}
-
-	return (ct->type != NULL
-		&& (!strcasecmp(ct->type, type)
-		    && ((ct->subtype != NULL
-			 && !strcasecmp(ct->subtype, subtype))
-			|| !strcasecmp("*", subtype))));
-}
-
-void
-header_param_list_free(struct _header_param *p)
-{
-	struct _header_param *n;
-
-	while (p) {
-		n = p->next;
-		g_free(p->name);
-		g_free(p->value);
-		g_free(p);
-		p = n;
-	}
-}
-
-struct _header_content_type *
-header_content_type_new(const char *type, const char *subtype)
-{
-	struct _header_content_type *t = g_malloc(sizeof(*t));
-
-	t->type = g_strdup(type);
-	t->subtype = g_strdup(subtype);
-	t->params = NULL;
-	t->refcount = 1;
-	return t;
-}
-
-void
-header_content_type_ref(struct _header_content_type *ct)
-{
-	if (ct)
-		ct->refcount++;
-}
-
-
-void
-header_content_type_unref(struct _header_content_type *ct)
-{
-	if (ct) {
-		if (ct->refcount <= 1) {
-			header_param_list_free(ct->params);
-			g_free(ct->type);
-			g_free(ct->subtype);
-			g_free(ct);
-		} else {
-			ct->refcount--;
-		}
-	}
-}
-
-/* for decoding email addresses, canonically */
-static char *
-header_decode_domain(const char **in)
-{
-	const char *inptr = *in, *start;
-	int go = TRUE;
-	char *ret;
-	GString *domain = g_string_new("");
-
-				/* domain ref | domain literal */
-	header_decode_lwsp(&inptr);
-	while (go) {
-		if (*inptr == '[') { /* domain literal */
-			domain = g_string_append(domain, "[ ");
-			inptr++;
-			header_decode_lwsp(&inptr);
-			start = inptr;
-			while (is_dtext(*inptr)) {
-				domain = g_string_append_c(domain, *inptr);
-				inptr++;
-			}
-			if (*inptr == ']') {
-				domain = g_string_append(domain, " ]");
-				inptr++;
-			} else {
-				w(g_warning("closing ']' not found in domain: %s", *in));
-			}
-		} else {
-			char *a = header_decode_atom(&inptr);
-			if (a) {
-				domain = g_string_append(domain, a);
-				g_free(a);
-			} else {
-				w(g_warning("missing atom from domain-ref"));
-				break;
-			}
-		}
-		header_decode_lwsp(&inptr);
-		if (*inptr == '.') { /* next sub-domain? */
-			domain = g_string_append_c(domain, '.');
-			inptr++;
-			header_decode_lwsp(&inptr);
-		} else
-			go = FALSE;
-	}
-
-	*in = inptr;
-
-	ret = domain->str;
-	g_string_free(domain, FALSE);
-	return ret;
-}
-
-static char *
-header_decode_addrspec(const char **in)
-{
-	const char *inptr = *in;
-	char *word;
-	GString *addr = g_string_new("");
-
-	header_decode_lwsp(&inptr);
-
-	/* addr-spec */
-	word = header_decode_word(&inptr);
-	if (word) {
-		addr = g_string_append(addr, word);
-		header_decode_lwsp(&inptr);
-		g_free(word);
-		while (*inptr == '.' && word) {
-			inptr++;
-			addr = g_string_append_c(addr, '.');
-			word = header_decode_word(&inptr);
-			if (word) {
-				addr = g_string_append(addr, word);
-				header_decode_lwsp(&inptr);
-				g_free(word);
-			} else {
-				w(g_warning("Invalid address spec: %s", *in));
-			}
-		}
-		if (*inptr == '@') {
-			inptr++;
-			addr = g_string_append_c(addr, '@');
-			word = header_decode_domain(&inptr);
-			if (word) {
-				addr = g_string_append(addr, word);
-				g_free(word);
-			} else {
-				w(g_warning("Invalid address, missing domain: %s", *in));
-			}
-		} else {
-			w(g_warning("Invalid addr-spec, missing @: %s", *in));
-		}
-	} else {
-		w(g_warning("invalid addr-spec, no local part"));
-	}
-
-	/* FIXME: return null on error? */
-
-	*in = inptr;
-	word = addr->str;
-	g_string_free(addr, FALSE);
-	return word;
-}
-
-/*
-  address:
-   word *('.' word) @ domain |
-   *(word) '<' [ *('@' domain ) ':' ] word *( '.' word) @ domain |
-
-   1*word ':' [ word ... etc (mailbox, as above) ] ';'
- */
-
-/* mailbox:
-   word *( '.' word ) '@' domain
-   *(word) '<' [ *('@' domain ) ':' ] word *( '.' word) @ domain
-   */
-
-static struct _header_address *
-header_decode_mailbox(const char **in)
-{
-	const char *inptr = *in;
-	char *pre;
-	int closeme = FALSE;
-	GString *addr;
-	GString *name = NULL;
-	struct _header_address *address = NULL;
-
-	addr = g_string_new("");
-
-	/* for each address */
-	pre = header_decode_word(&inptr);
-	header_decode_lwsp(&inptr);
-	if (!(*inptr == '.' || *inptr == '@' || *inptr==',' || *inptr=='\0')) {
-		/* ',' and '\0' required incase it is a simple address, no @ domain part (buggy writer) */
-		name = g_string_new("");
-		while (pre) {
-			char *text;
-
-			text = header_decode_string(pre);
-			name = g_string_append(name, text);
-			g_free(pre);
-			g_free(text);
-
-			/* rfc_decode(pre) */
-			pre = header_decode_word(&inptr);
-			if (pre)
-				name = g_string_append_c(name, ' ');
-		}
-		header_decode_lwsp(&inptr);
-		if (*inptr == '<') {
-			closeme = TRUE;
-			inptr++;
-			header_decode_lwsp(&inptr);
-			if (*inptr == '@') {
-				while (*inptr == '@') {
-					inptr++;
-					header_decode_domain(&inptr);
-					header_decode_lwsp(&inptr);
-					if (*inptr == ',') {
-						inptr++;
-						header_decode_lwsp(&inptr);
-					}
-				}
-				if (*inptr == ':') {
-					inptr++;
-				} else {
-					w(g_warning("broken route-address, missing ':': %s", *in));
-				}
-			}
-			pre = header_decode_word(&inptr);
-			header_decode_lwsp(&inptr);
-		} else {
-			w(g_warning("broken address? %s", *in));
-		}
-	}
-
-	if (pre) {
-		addr = g_string_append(addr, pre);
-	} else {
-		w(g_warning("No local-part for email address: %s", *in));
-	}
-
-	/* should be at word '.' localpart */
-	while (*inptr == '.' && pre) {
-		inptr++;
-		g_free(pre);
-		pre = header_decode_word(&inptr);
-		if (pre) {
-			addr = g_string_append_c(addr, '.');
-			addr = g_string_append(addr, pre);
-		}
-		header_decode_lwsp(&inptr);
-	}
-	g_free(pre);
-
-	/* now at '@' domain part */
-	if (*inptr == '@') {
-		char *dom;
-
-		inptr++;
-		addr = g_string_append_c(addr, '@');
-		dom = header_decode_domain(&inptr);
-		addr = g_string_append(addr, dom);
-		g_free(dom);
-	} else {
-		w(g_warning("invalid address, no '@' domain part at %c: %s", *inptr, *in));
-	}
-
-	if (closeme) {
-		header_decode_lwsp(&inptr);
-		if (*inptr == '>') {
-			inptr++;
-		} else {
-			w(g_warning("invalid route address, no closing '>': %s", *in));
-		} 
-	} else if (name == NULL) { /* check for comment after address */
-		char *text, *tmp;
-		const char *comment = inptr;
-
-		header_decode_lwsp(&inptr);
-		if (inptr-comment > 3) { /* just guess ... */
-			tmp = g_strndup(comment, inptr-comment);
-			text = header_decode_string(tmp);
-			name = g_string_new(text);
-			g_free(tmp);
-			g_free(text);
-		}
-	}
-
-	*in = inptr;
-
-	if (addr->len > 0) {
-		address = header_address_new_name(name?name->str:"", addr->str);
-	}
-
-	g_string_free(addr, TRUE);
-	if (name)
-		g_string_free(name, TRUE);
-
-	d(printf("got mailbox: %s\n", addr->str));
-	return address;
-}
-
-static struct _header_address *
-header_decode_address(const char **in)
-{
-	const char *inptr = *in;
-	char *pre;
-	GString *group = g_string_new("");
-	struct _header_address *addr = NULL, *member;
-
-	/* pre-scan, trying to work out format, discard results */
-	header_decode_lwsp(&inptr);
-	while ( (pre = header_decode_word(&inptr)) ) {
-		group = g_string_append(group, pre);
-		group = g_string_append(group, " ");
-		g_free(pre);
-	}
-	header_decode_lwsp(&inptr);
-	if (*inptr == ':') {
-		d(printf("group detected: %s\n", group->str));
-		addr = header_address_new_group(group->str);
-		/* that was a group spec, scan mailbox's */
-		inptr++;
-		/* FIXME: check rfc 2047 encodings of words, here or above in the loop */
-		header_decode_lwsp(&inptr);
-		if (*inptr != ';') {
-			int go = TRUE;
-			do {
-				member = header_decode_mailbox(&inptr);
-				if (member)
-					header_address_add_member(addr, member);
-				header_decode_lwsp(&inptr);
-				if (*inptr == ',')
-					inptr++;
-				else
-					go = FALSE;
-			} while (go);
-			if (*inptr == ';') {
-				inptr++;
-			} else {
-				w(g_warning("Invalid group spec, missing closing ';': %s", *in));
-			}
-		} else {
-			inptr++;
-		}
-		*in = inptr;
-	} else {
-		addr = header_decode_mailbox(in);
-	}
-
-	g_string_free(group, TRUE);
-
-	return addr;
-}
-
-static char *
-header_msgid_decode_internal(const char **in)
-{
-	const char *inptr = *in;
-	char *msgid = NULL;
-
-	d(printf("decoding Message-ID: '%s'\n", *in));
-
-	header_decode_lwsp(&inptr);
-	if (*inptr == '<') {
-		inptr++;
-		header_decode_lwsp(&inptr);
-		msgid = header_decode_addrspec(&inptr);
-		if (msgid) {
-			header_decode_lwsp(&inptr);
-			if (*inptr == '>') {
-				inptr++;
-			} else {
-				w(g_warning("Missing closing '>' on message id: %s", *in));
-			}
-		} else {
-			w(g_warning("Cannot find message id in: %s", *in));
-		}
-	} else {
-		w(g_warning("missing opening '<' on message id: %s", *in));
-	}
-	*in = inptr;
-
-	return msgid;
-}
-
-char *
-header_msgid_decode(const char *in)
-{
-	if (in == NULL)
-		return NULL;
-
-	return header_msgid_decode_internal(&in);
-}
-
-void
-header_references_list_append_asis(struct _header_references **list, char *ref)
-{
-	struct _header_references *w = (struct _header_references *)list, *n;
-	while (w->next)
-		w = w->next;
-	n = g_malloc(sizeof(*n));
-	n->id = ref;
-	n->next = 0;
-	w->next = n;
-}
-
-int
-header_references_list_size(struct _header_references **list)
-{
-	int count = 0;
-	struct _header_references *w = *list;
-	while (w) {
-		count++;
-		w = w->next;
-	}
-	return count;
-}
-
-void
-header_references_list_clear(struct _header_references **list)
-{
-	struct _header_references *w = *list, *n;
-	while (w) {
-		n = w->next;
-		g_free(w->id);
-		g_free(w);
-		w = n;
-	}
-	*list = NULL;
-}
-
-/* generate a list of references, from most recent up */
-struct _header_references *
-header_references_decode(const char *in)
-{
-	const char *inptr = in;
-	struct _header_references *head = NULL, *node;
-	char *id, *word;
-
-	if (in == NULL || in[0] == '\0')
-		return NULL;
-
-	while (*inptr) {
-		header_decode_lwsp(&inptr);
-		if (*inptr == '<') {
-			id = header_msgid_decode_internal(&inptr);
-			if (id) {
-				node = g_malloc(sizeof(*node));
-				node->next = head;
-				head = node;
-				node->id = id;
-			}
-		} else {
-			word = header_decode_word(&inptr);
-			if (word)
-				g_free (word);
-			else if (*inptr != '\0')
-				inptr++; /* Stupid mailer tricks */
-		}
-	}
-
-	return head;
-}
-
-struct _header_references *
-header_references_dup(const struct _header_references *list)
-{
-	struct _header_references *new = NULL, *tmp;
-
-	while (list) {
-		tmp = g_new(struct _header_references, 1);
-		tmp->next = new;
-		tmp->id = g_strdup(list->id);
-		new = tmp;
-		list = list->next;
-	}
-	return new;
-}
-
-struct _header_address *
-header_mailbox_decode(const char *in)
-{
-	if (in == NULL)
-		return NULL;
-
-	return header_decode_mailbox(&in);
-}
-
-struct _header_address *
-header_address_decode(const char *in)
-{
-	const char *inptr = in, *last;
-	struct _header_address *list = NULL, *addr;
-
-	d(printf("decoding To: '%s'\n", in));
-
-#ifndef NO_WARNINGS
-#warning header_to_decode needs to return some structure
-#endif
-
-	if (in == NULL)
-		return NULL;
-
-	do {
-		last = inptr;
-		addr = header_decode_address(&inptr);
-		if (addr)
-			header_address_list_append(&list, addr);
-		header_decode_lwsp(&inptr);
-		if (*inptr == ',')
-			inptr++;
-		else
-			break;
-	} while (inptr != last);
-
-	if (*inptr) {
-		w(g_warning("Invalid input detected at %c (%d): %s\n or at: %s", *inptr, inptr-in, in, inptr));
-	}
-
-	if (inptr == last) {
-		w(g_warning("detected invalid input loop at : %s", last));
-	}
-
-	return list;
-}
-
-void
-header_mime_decode(const char *in, int *maj, int *min)
-{
-	const char *inptr = in;
-	int major=-1, minor=-1;
-
-	d(printf("decoding MIME-Version: '%s'\n", in));
-
-	if (in != NULL) {
-		header_decode_lwsp(&inptr);
-		if (isdigit(*inptr)) {
-			major = header_decode_int(&inptr);
-			header_decode_lwsp(&inptr);
-			if (*inptr == '.') {
-				inptr++;
-				header_decode_lwsp(&inptr);
-				if (isdigit(*inptr))
-					minor = header_decode_int(&inptr);
-			}
-		}
-	}
-
-	if (maj)
-		*maj = major;
-	if (min)
-		*min = minor;
-
-	d(printf("major = %d, minor = %d\n", major, minor));
-}
-
-static struct _header_param *
-header_param_list_decode(const char **in)
-{
-	const char *inptr = *in;
-	struct _header_param *head = NULL, *tail = NULL;
-
-	header_decode_lwsp(&inptr);
-	while (*inptr == ';') {
-		char *param, *value;
-		struct _header_param *p;
-
-		inptr++;
-		/* invalid format? */
-		if (header_decode_param(&inptr, ¶m, &value) != 0)
-			break;
-
-		p = g_malloc(sizeof(*p));
-		p->name = param;
-		p->value = value;
-		p->next = NULL;
-		if (head == NULL)
-			head = p;
-		if (tail)
-			tail->next = p;
-		tail = p;
-		header_decode_lwsp(&inptr);
-	}
-	*in = inptr;
-	return head;
-}
-
-static void
-header_param_list_format_append(GString *out, struct _header_param *p)
-{
-	int len = out->len;
-	while (p) {
-		int here = out->len;
-		if (len+strlen(p->name)+strlen(p->value)>60) {
-			out = g_string_append(out, "\n\t");
-			len = 0;
-		}
-		/* FIXME: format the value properly */
-		g_string_sprintfa(out, " ; %s=\"%s\"", p->name, p->value);
-		len += (out->len - here);
-		p = p->next;
-	}
-}
-
-struct _header_content_type *
-header_content_type_decode(const char *in)
-{
-	const char *inptr = in;
-	char *type, *subtype = NULL;
-	struct _header_content_type *t = NULL;
-
-	if (in==NULL)
-		return NULL;
-
-	type = decode_token(&inptr);
-	header_decode_lwsp(&inptr);
-	if (type) {
-		if  (*inptr == '/') {
-			inptr++;
-			subtype = decode_token(&inptr);
-		}
-		if (subtype == NULL && (!strcasecmp(type, "text"))) {
-			w(g_warning("text type with no subtype, resorting to text/plain: %s", in));
-			subtype = g_strdup("plain");
-		}
-		if (subtype == NULL) {
-			w(g_warning("MIME type with no subtype: %s", in));
-		}
-
-		t = header_content_type_new(type, subtype);
-		t->params = header_param_list_decode(&inptr);
-		g_free(type);
-		g_free(subtype);
-	} else {
-		g_free(type);
-		d(printf("cannot find MIME type in header (2) '%s'", in));
-	}
-	return t;
-}
-
-void
-header_content_type_dump(struct _header_content_type *ct)
-{
-	struct _header_param *p;
-
-	printf("Content-Type: ");
-	if (ct==NULL) {
-		printf("\n");
-		return;
-	}
-	printf("%s / %s", ct->type, ct->subtype);
-	p = ct->params;
-	if (p) {
-		while (p) {
-			printf(";\n\t%s=\"%s\"", p->name, p->value);
-			p = p->next;
-		}
-	}
-	printf("\n");
-}
-
-char *
-header_content_type_format(struct _header_content_type *ct)
-{
-	GString *out;
-	char *ret;
-
-	if (ct==NULL)
-		return NULL;
-
-	out = g_string_new("");
-	if (ct->type == NULL) {
-		g_string_sprintfa(out, "text/plain");
-		w(g_warning("Content-Type with no main type"));
-	} else if (ct->subtype == NULL) {
-		w(g_warning("Content-Type with no sub type: %s", ct->type));
-		if (!strcasecmp(ct->type, "multipart"))
-			g_string_sprintfa(out, "%s/mixed", ct->type);
-		else
-			g_string_sprintfa(out, "%s", ct->type);
-	} else {
-		g_string_sprintfa(out, "%s/%s", ct->type, ct->subtype);
-	}
-	header_param_list_format_append(out, ct->params);
-
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-char *
-header_content_encoding_decode(const char *in)
-{
-	if (in)
-		return decode_token(&in);
-	return NULL;
-}
-
-CamelMimeDisposition *header_disposition_decode(const char *in)
-{
-	CamelMimeDisposition *d = NULL;
-	const char *inptr = in;
-
-	if (in == NULL)
-		return NULL;
-
-	d = g_malloc(sizeof(*d));
-	d->refcount = 1;
-	d->disposition = decode_token(&inptr);
-	if (d->disposition == NULL)
-		w(g_warning("Empty disposition type"));
-	d->params = header_param_list_decode(&inptr);
-	return d;
-}
-
-void header_disposition_ref(CamelMimeDisposition *d)
-{
-	if (d)
-		d->refcount++;
-}
-void header_disposition_unref(CamelMimeDisposition *d)
-{
-	if (d) {
-		if (d->refcount<=1) {
-			header_param_list_free(d->params);
-			g_free(d->disposition);
-			g_free(d);
-		} else {
-			d->refcount--;
-		}
-	}
-}
-
-char *header_disposition_format(CamelMimeDisposition *d)
-{
-	GString *out;
-	char *ret;
-
-	if (d==NULL)
-		return NULL;
-
-	out = g_string_new("");
-	if (d->disposition)
-		out = g_string_append(out, d->disposition);
-	else
-		out = g_string_append(out, "attachment");
-	header_param_list_format_append(out, d->params);
-
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-/* hrm, is there a library for this shit? */
-static struct {
-	char *name;
-	int offset;
-} tz_offsets [] = {
-	{ "UT", 0 },
-	{ "GMT", 0 },
-	{ "EST", -500 },	/* these are all US timezones.  bloody yanks */
-	{ "EDT", -400 },
-	{ "CST", -600 },
-	{ "CDT", -500 },
-	{ "MST", -700 },
-	{ "MDT", -600 },
-	{ "PST", -800 },
-	{ "PDT", -700 },
-	{ "Z", 0 },
-	{ "A", -100 },
-	{ "M", -1200 },
-	{ "N", 100 },
-	{ "Y", 1200 },
-};
-
-static char *tz_months [] = {
-	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-char *
-header_format_date(time_t time, int offset)
-{
-	struct tm tm;
-
-	d(printf("offset = %d\n", offset));
-
-	d(printf("converting date %s", ctime(&time)));
-
-	time += ((offset / 100) * (60*60)) + (offset % 100)*60;
-
-	d(printf("converting date %s", ctime(&time)));
-
-	memcpy(&tm, gmtime(&time), sizeof(tm));
-
-	return g_strdup_printf("%02d %s %04d %02d:%02d:%02d %+05d",
-			       tm.tm_mday, tz_months[tm.tm_mon],
-			       tm.tm_year + 1900,
-			       tm.tm_hour, tm.tm_min, tm.tm_sec,
-			       offset);
-}
-
-/* convert a date to time_t representation */
-/* this is an awful mess oh well */
-time_t
-header_decode_date(const char *in, int *saveoffset)
-{
-	const char *inptr = in;
-	char *monthname;
-	int year, offset = 0;
-	struct tm tm;
-	int i;
-	time_t t;
-
-	if (in == NULL) {
-		if (saveoffset)
-			*saveoffset = 0;
-		return 0;
-	}
-
-	d(printf ("\ndecoding date '%s'\n", inptr));
-
-	memset (&tm, 0, sizeof(tm));
-
-	header_decode_lwsp (&inptr);
-	if (!isdigit (*inptr)) {
-		char *day = decode_token (&inptr);
-		/* we dont really care about the day, its only for display */
-		if (day) {
-			d(printf ("got day: %s\n", day));
-			g_free (day);
-			header_decode_lwsp (&inptr);
-			if (*inptr == ',') {
-				inptr++;
-			} else {
-				gchar *newdate;
-				
-				w(g_warning("day not followed by ',' its probably a broken mail client, so we'll ignore its date entirely"));
-				printf ("Giving it one last chance...\n");
-				newdate = parse_broken_date (in);
-				if (newdate) {
-					printf ("Got: %s\n", newdate);
-					if (saveoffset)
-						*saveoffset = 0;					
-					t = header_decode_date (newdate, NULL);
-					g_free (newdate);
-				}
-				
-				if (saveoffset)
-					*saveoffset = 0;
-				return 0;
-			}
-		}
-	}
-	tm.tm_mday = header_decode_int(&inptr);
-	monthname = decode_token(&inptr);
-	if (monthname) {
-		for (i=0;ivalue;
-	while (p && *p) {
-		if (!isascii(*p)) {
-			w(g_warning("Appending header violates rfc: %s: %s", h->name, h->value));
-			return;
-		}
-		p++;
-	}
-}
-#endif
-
-void
-header_raw_append_parse(struct _header_raw **list, const char *header, int offset)
-{
-	register const char *in;
-	int fieldlen;
-	char *name;
-
-	in = header;
-	while (is_fieldname(*in))
-		in++;
-	fieldlen = in-header;
-	while (is_lwsp(*in))
-		in++;
-	if (fieldlen == 0 || *in != ':') {
-		printf("Invalid header line: '%s'\n", header);
-		return;
-	}
-	in++;
-	name = alloca(fieldlen+1);
-	memcpy(name, header, fieldlen);
-	name[fieldlen] = 0;
-
-	header_raw_append(list, name, in, offset);
-}
-
-void
-header_raw_append(struct _header_raw **list, const char *name, const char *value, int offset)
-{
-	struct _header_raw *l, *n;
-
-	d(printf("Header: %s: %s\n", name, value));
-
-	n = g_malloc(sizeof(*n));
-	n->next = NULL;
-	n->name = g_strdup(name);
-	n->value = g_strdup(value);
-	n->offset = offset;
-#ifdef CHECKS
-	check_header(n);
-#endif
-	l = (struct _header_raw *)list;
-	while (l->next) {
-		l = l->next;
-	}
-	l->next = n;
-
-	/* debug */
-#if 0
-	if (!strcasecmp(name, "To")) {
-		printf("- Decoding To\n");
-		header_to_decode(value);
-	} else if (!strcasecmp(name, "Content-type")) {
-		printf("- Decoding content-type\n");
-		header_content_type_dump(header_content_type_decode(value));		
-	} else if (!strcasecmp(name, "MIME-Version")) {
-		printf("- Decoding mime version\n");
-		header_mime_decode(value);
-	}
-#endif
-}
-
-static struct _header_raw *
-header_raw_find_node(struct _header_raw **list, const char *name)
-{
-	struct _header_raw *l;
-
-	l = *list;
-	while (l) {
-		if (!strcasecmp(l->name, name))
-			break;
-		l = l->next;
-	}
-	return l;
-}
-
-const char *
-header_raw_find(struct _header_raw **list, const char *name, int *offset)
-{
-	struct _header_raw *l;
-
-	l = header_raw_find_node(list, name);
-	if (l) {
-		if (offset)
-			*offset = l->offset;
-		return l->value;
-	} else
-		return NULL;
-}
-
-const char *
-header_raw_find_next(struct _header_raw **list, const char *name, int *offset, const char *last)
-{
-	struct _header_raw *l;
-
-	if (last == NULL || name == NULL)
-		return NULL;
-
-	l = *list;
-	while (l && l->value != last)
-		l = l->next;
-	return header_raw_find(&l, name, offset);
-}
-
-static void
-header_raw_free(struct _header_raw *l)
-{
-	g_free(l->name);
-	g_free(l->value);
-	g_free(l);
-}
-
-void
-header_raw_remove(struct _header_raw **list, const char *name)
-{
-	struct _header_raw *l, *p;
-
-	/* the next pointer is at the head of the structure, so this is safe */
-	p = (struct _header_raw *)list;
-	l = *list;
-	while (l) {
-		if (!strcasecmp(l->name, name)) {
-			p->next = l->next;
-			header_raw_free(l);
-			l = p->next;
-		} else {
-			p = l;
-			l = l->next;
-		}
-	}
-}
-
-void
-header_raw_replace(struct _header_raw **list, const char *name, const char *value, int offset)
-{
-	header_raw_remove(list, name);
-	header_raw_append(list, name, value, offset);
-}
-
-void
-header_raw_clear(struct _header_raw **list)
-{
-	struct _header_raw *l, *n;
-	l = *list;
-	while (l) {
-		n = l->next;
-		header_raw_free(l);
-		l = n;
-	}
-	*list = NULL;
-}
-
-
-/* ok, here's the address stuff, what a mess ... */
-struct _header_address *header_address_new(void)
-{
-	struct _header_address *h;
-	h = g_malloc0(sizeof(*h));
-	h->type = HEADER_ADDRESS_NONE;
-	h->refcount = 1;
-	return h;
-}
-
-struct _header_address *header_address_new_name(const char *name, const char *addr)
-{
-	struct _header_address *h;
-
-	h = header_address_new();
-	h->type = HEADER_ADDRESS_NAME;
-	h->name = g_strdup(name);
-	h->v.addr = g_strdup(addr);
-	return h;
-}
-
-struct _header_address *header_address_new_group(const char *name)
-{
-	struct _header_address *h;
-
-	h = header_address_new();
-	h->type = HEADER_ADDRESS_GROUP;
-	h->name = g_strdup(name);
-	return h;
-}
-
-void header_address_ref(struct _header_address *h)
-{
-	if (h)
-		h->refcount++;
-}
-
-void header_address_unref(struct _header_address *h)
-{
-	if (h) {
-		if (h->refcount <= 1) {
-			if (h->type == HEADER_ADDRESS_GROUP) {
-				header_address_list_clear(&h->v.members);
-			} else if (h->type == HEADER_ADDRESS_NAME) {
-				g_free(h->v.addr);
-			}
-			g_free(h->name);
-			g_free(h);
-		} else {
-			h->refcount--;
-		}
-	}
-}
-
-void header_address_set_name(struct _header_address *h, const char *name)
-{
-	if (h) {
-		g_free(h->name);
-		h->name = g_strdup(name);
-	}
-}
-
-void header_address_set_addr(struct _header_address *h, const char *addr)
-{
-	if (h) {
-		if (h->type == HEADER_ADDRESS_NAME
-		    || h->type == HEADER_ADDRESS_NONE) {
-			h->type = HEADER_ADDRESS_NAME;
-			g_free(h->v.addr);
-			h->v.addr = g_strdup(addr);
-		} else {
-			g_warning("Trying to set the address on a group");
-		}
-	}
-}
-
-void header_address_set_members(struct _header_address *h, struct _header_address *group)
-{
-	if (h) {
-		if (h->type == HEADER_ADDRESS_GROUP
-		    || h->type == HEADER_ADDRESS_NONE) {
-			h->type = HEADER_ADDRESS_GROUP;
-			header_address_list_clear(&h->v.members);
-			/* should this ref them? */
-			h->v.members = group;
-		} else {
-			g_warning("Trying to set the members on a name, not group");
-		}
-	}
-}
-
-void header_address_add_member(struct _header_address *h, struct _header_address *member)
-{
-	if (h) {
-		if (h->type == HEADER_ADDRESS_GROUP
-		    || h->type == HEADER_ADDRESS_NONE) {
-			h->type = HEADER_ADDRESS_GROUP;
-			header_address_list_append(&h->v.members, member);
-		}		    
-	}
-}
-
-void header_address_list_append_list(struct _header_address **l, struct _header_address **h)
-{
-	if (l) {
-		struct _header_address *n = (struct _header_address *)l;
-
-		while (n->next)
-			n = n->next;
-		n->next = *h;
-	}
-}
-
-
-void header_address_list_append(struct _header_address **l, struct _header_address *h)
-{
-	if (h) {
-		header_address_list_append_list(l, &h);
-		h->next = NULL;
-	}
-}
-
-void header_address_list_clear(struct _header_address **l)
-{
-	struct _header_address *a, *n;
-	a = *l;
-	while (a) {
-		n = a->next;
-		header_address_unref(a);
-		a = n;
-	}
-	*l = NULL;
-}
-
-static void
-header_address_list_format_append(GString *out, struct _header_address *a)
-{
-	char *text;
-
-	while (a) {
-		switch (a->type) {
-		case HEADER_ADDRESS_NAME:
-#ifndef NO_WARNINGS
-#warning needs to rfc2047 encode address phrase
-#endif
-			/* FIXME: 2047 encoding?? */
-			if (a->name && *a->name)
-				g_string_sprintfa(out, "\"%s\" <%s>", a->name, a->v.addr);
-			else
-				g_string_append(out, a->v.addr);
-			break;
-		case HEADER_ADDRESS_GROUP:
-			text = header_encode_string(a->name);
-			g_string_sprintfa(out, "%s:\n ", text);
-			header_address_list_format_append(out, a->v.members);
-			g_string_sprintfa(out, ";");
-			break;
-		default:
-			g_warning("Invalid address type");
-			break;
-		}
-		a = a->next;
-	}
-}
-
-/* FIXME: need a 'display friendly' version, as well as a 'rfc friendly' version? */
-char *
-header_address_list_format(struct _header_address *a)
-{
-	GString *out;
-	char *ret;
-
-	if (a == NULL)
-		return NULL;
-
-	out = g_string_new("");
-
-	header_address_list_format_append(out, a);
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-#ifdef BUILD_TABLE
-
-/* for debugging tests */
-/* should also have some regression tests somewhere */
-
-void run_test(void)
-{
-	char *to = "gnome hacker dudes: license-discuss@opensource.org,
-        \"Richard M. Stallman\" ,
-        Barry Chester ,
-        Michael Zucchi ,
-        Miguel de Icaza ;,
-	zucchi@zedzone.mmc.com.au, \"Foo bar\" ,
-	";
-
-	header_to_decode(to);
-
-	header_mime_decode("1.0");
-	header_mime_decode("1.3 (produced by metasend V1.0)");
-	header_mime_decode("(produced by metasend V1.0) 5.2");
-	header_mime_decode("7(produced by metasend 1.0) . (produced by helix/send/1.0) 9 . 5");
-	header_mime_decode("3.");
-	header_mime_decode(".");
-	header_mime_decode(".5");
-	header_mime_decode("c.d");
-	header_mime_decode("");
-
-	header_msgid_decode(" <\"L3x2i1.0.Nm5.Xd-Wu\"@lists.redhat.com>");
-	header_msgid_decode("<200001180446.PAA02065@beaker.htb.com.au>");
-
-}
-
-#endif /* BUILD_TABLE */
diff --git a/camel/camel-mime-utils.h b/camel/camel-mime-utils.h
deleted file mode 100644
index 4d8d6bb9ea..0000000000
--- a/camel/camel-mime-utils.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *           Jeffrey Stedfast 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MIME_UTILS_H
-#define _CAMEL_MIME_UTILS_H
-
-#include 
-#include 
-
-/* a list of references for this message */
-struct _header_references {
-	struct _header_references *next;
-	char *id;
-};
-
-struct _header_param {
-	struct _header_param *next;
-	char *name;
-	char *value;
-};
-
-/* describes a content-type */
-struct _header_content_type {
-	char *type;
-	char *subtype;
-	struct _header_param *params;
-	unsigned int refcount;
-};
-
-/* a raw rfc822 header */
-/* the value MUST be US-ASCII */
-struct _header_raw {
-	struct _header_raw *next;
-	char *name;
-	char *value;
-	int offset;		/* in file, if known */
-};
-
-typedef struct _CamelMimeDisposition {
-	char *disposition;
-	struct _header_param *params;
-	unsigned int refcount;
-} CamelMimeDisposition;
-
-enum _header_address_type {
-	HEADER_ADDRESS_NONE,	/* uninitialised */
-	HEADER_ADDRESS_NAME,
-	HEADER_ADDRESS_GROUP
-};
-
-struct _header_address {
-	struct _header_address *next;
-	enum _header_address_type type;
-	char *name;
-	union {
-		char *addr;
-		struct _header_address *members;
-	} v;
-	unsigned int refcount;
-};
-
-/* Address lists */
-struct _header_address *header_address_new(void);
-struct _header_address *header_address_new_name(const char *name, const char *addr);
-struct _header_address *header_address_new_group(const char *name);
-void header_address_ref(struct _header_address *);
-void header_address_unref(struct _header_address *);
-void header_address_set_name(struct _header_address *, const char *name);
-void header_address_set_addr(struct _header_address *, const char *addr);
-void header_address_set_members(struct _header_address *, struct _header_address *group);
-void header_address_add_member(struct _header_address *, struct _header_address *member);
-void header_address_list_append_list(struct _header_address **l, struct _header_address **h);
-void header_address_list_append(struct _header_address **, struct _header_address *);
-void header_address_list_clear(struct _header_address **);
-
-struct _header_address *header_address_decode(const char *in);
-struct _header_address *header_mailbox_decode(const char *in);
-char *header_address_list_format(struct _header_address *a);
-
-/* structured header prameters */
-char *header_param(struct _header_param *p, const char *name);
-struct _header_param *header_set_param(struct _header_param **l, const char *name, const char *value);
-void header_param_list_free(struct _header_param *p);
-
-/* Content-Type header */
-struct _header_content_type *header_content_type_new(const char *type, const char *subtype);
-struct _header_content_type *header_content_type_decode(const char *in);
-void header_content_type_unref(struct _header_content_type *ct);
-void header_content_type_ref(struct _header_content_type *ct);
-const char *header_content_type_param(struct _header_content_type *t, const char *name);
-void header_content_type_set_param(struct _header_content_type *t, const char *name, const char *value);
-int header_content_type_is(struct _header_content_type *ct, const char *type, const char *subtype);
-char *header_content_type_format(struct _header_content_type *ct);
-
-/* DEBUGGING function */
-void header_content_type_dump(struct _header_content_type *ct);
-
-/* Content-Disposition header */
-CamelMimeDisposition *header_disposition_decode(const char *in);
-void header_disposition_ref(CamelMimeDisposition *);
-void header_disposition_unref(CamelMimeDisposition *);
-char *header_disposition_format(CamelMimeDisposition *d);
-
-/* decode the contents of a content-encoding header */
-char *header_content_encoding_decode(const char *in);
-
-/* raw headers */
-void header_raw_append(struct _header_raw **list, const char *name, const char *value, int offset);
-void header_raw_append_parse(struct _header_raw **list, const char *header, int offset);
-const char *header_raw_find(struct _header_raw **list, const char *name, int *ofset);
-const char *header_raw_find_next(struct _header_raw **list, const char *name, int *ofset, const char *last);
-void header_raw_replace(struct _header_raw **list, const char *name, const char *value, int offset);
-void header_raw_remove(struct _header_raw **list, const char *name);
-void header_raw_clear(struct _header_raw **list);
-
-/* decode a header which is a simple token */
-char *header_token_decode(const char *in);
-
-/* decode/encode a string type, like a subject line */
-char *header_decode_string(const char *in);
-char *header_encode_string(const unsigned char *in);
-
-/* decode an email date field into a GMT time, + optional offset */
-time_t header_decode_date(const char *in, int *saveoffset);
-char *header_format_date(time_t time, int offset);
-
-/* decode a message id */
-char *header_msgid_decode(const char *in);
-
-/* decode a References header */
-struct _header_references *header_references_decode(const char *in);
-void header_references_list_clear(struct _header_references **list);
-void header_references_list_append_asis(struct _header_references **list, char *ref);
-int header_references_list_size(struct _header_references **list);
-struct _header_references *header_references_dup(const struct _header_references *list);
-
-/* decode the mime-type header */
-void header_mime_decode(const char *in, int *maj, int *min);
-
-/* do incremental base64/quoted-printable (de/en)coding */
-int base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, unsigned int *save);
-
-int base64_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save);
-int base64_encode_close(unsigned char *in, int inlen, unsigned char *out, int *state, int *save);
-
-int uudecode_step (unsigned char *in, int len, unsigned char *out, int *state, guint32 *save, char *uulen);
-
-int quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestate, int *saveme);
-
-int quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save);
-int quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save);
-
-#endif /* ! _CAMEL_MIME_UTILS_H */
diff --git a/camel/camel-movemail.c b/camel/camel-movemail.c
deleted file mode 100644
index b44c9edb1b..0000000000
--- a/camel/camel-movemail.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-movemail.c: mbox copying function */
-
-/*
- * Author:
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-movemail.h"
-#include "camel-exception.h"
-
-#include "camel-mime-parser.h"
-#include "camel-mime-filter.h"
-#include "camel-mime-filter-from.h"
-
-#define d(x)
-
-#ifdef MOVEMAIL_PATH
-#include 
-
-static void movemail_external (const char *source, const char *dest,
-			       CamelException *ex);
-#endif
-
-/* these could probably be exposed as a utility? (but only mbox needs it) */
-#if 0
-static int camel_movemail_copy_filter(int fromfd, int tofd, off_t start, size_t bytes, CamelMimeFilter *filter);
-static int camel_movemail_copy(int fromfd, int tofd, off_t start, size_t bytes);
-#endif
-
-/**
- * camel_movemail: Copy an mbox file from a shared spool directory to a
- * new folder in a Camel store
- * @source: source file
- * @dest: destination file
- * @ex: a CamelException
- *
- * This copies an mbox file from a shared directory with multiple
- * readers and writers into a private (presumably Camel-controlled)
- * directory. Dot locking is used on the source file (but not the
- * destination).
- **/
-void
-camel_movemail (const char *source, const char *dest, CamelException *ex)
-{
-	gboolean locked;
-	int sfd, dfd, tmpfd;
-	char *locktmpfile, *lockfile;
-	struct stat st;
-	time_t now, timeout;
-	int nread, nwrote;
-	char buf[BUFSIZ];
-
-	camel_exception_clear (ex);
-
-	/* Stat and then open the spool file. If it doesn't exist or
-	 * is empty, the user has no mail. (There's technically a race
-	 * condition here in that an MDA might have just now locked it
-	 * to deliver a message, but we don't care. In that case,
-	 * assuming it's unlocked is equivalent to pretending we were
-	 * called a fraction earlier.)
-	 */
-	if (stat (source, &st) == -1) {
-		if (errno != ENOENT) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not check mail file "
-					      "%s: %s", source,
-					      g_strerror (errno));
-		}
-		return;
-	}
-	if (st.st_size == 0)
-		return;
-
-	/* Create the unique lock file. */
-	locktmpfile = g_strdup_printf ("%s.lock.XXXXXX", source);
-#ifdef HAVE_MKSTEMP
-	tmpfd = mkstemp (locktmpfile);
-#else
-	if (mktemp (locktmpfile)) {
-		tmpfd = open (locktmpfile, O_RDWR | O_CREAT | O_EXCL,
-			      S_IRUSR | S_IWUSR);
-	} else
-		tmpfd = -1;
-#endif
-	if (tmpfd == -1) {
-		g_free (locktmpfile);
-#ifdef MOVEMAIL_PATH
-		if (errno == EACCES) {
-			/* movemail_external will fail if the dest file
-			 * already exists, so if it does, return now,
-			 * let the fetch code process the mail that's
-			 * already there, and then the user can try again.
-			 */
-			if (stat (dest, &st) == 0)
-				return;
-
-			movemail_external (source, dest, ex);
-			return;
-		}
-#endif
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not create lock file "
-				      "for %s: %s", source, g_strerror (errno));
-		return;
-	}
-	close (tmpfd);
-
-	sfd = open (source, O_RDWR);
-	if (sfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not open mail file %s: %s",
-				      source, g_strerror (errno));
-		unlink (locktmpfile);
-		g_free (locktmpfile);
-		return;
-	}
-
-	dfd = open (dest, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
-	if (dfd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not open temporary mail "
-				      "file %s: %s", dest, g_strerror (errno));
-		close (sfd);
-		unlink (locktmpfile);
-		g_free (locktmpfile);
-		return;
-	}
-
-	lockfile = g_strdup_printf ("%s.lock", source);
-	locked = FALSE;
-	time (&timeout);
-	timeout += 30;
-
-	/* Loop trying to lock the file for 30 seconds. */
-	while (time (&now) < timeout) {
-		/* Try to make the lock. */
-		if (symlink (locktmpfile, lockfile) == 0) {
-			locked = TRUE;
-			break;
-		}
-
-		/* If we fail for a reason other than that someone
-		 * else has the lock, then abort.
-		 */
-		if (errno != EEXIST) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not create lock "
-					      "file for %s: %s", source,
-					      g_strerror (errno));
-			break;
-		}
-
-		/* Check the modtime on the lock file. */
-		if (stat (lockfile, &st) == -1) {
-			/* If the lockfile disappeared, try again. */
-			if (errno == ENOENT)
-				continue;
-
-			/* Some other error. Abort. */
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not test lock "
-					      "file for %s: %s", source,
-					      g_strerror (errno));
-			break;
-		}
-
-		/* If the lock file is stale, remove it and try again. */
-		if (st.st_mtime < now - 60) {
-			unlink (lockfile);
-			continue;
-		}
-
-		/* Otherwise, sleep and try again. */
-		sleep (5);
-	}
-
-	if (!locked) {
-		/* Something has gone awry. */
-		if (now >= timeout) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Timed out trying to get "
-					      "lock file on %s. Try again "
-					      "later.", source);
-		}
-		g_free (lockfile);
-		unlink (locktmpfile);
-		g_free (locktmpfile);
-		close (sfd);
-		close (dfd);
-		return;
-	}
-
-	/* OK. We have the file locked now. */
-
-	/* FIXME: Set a timer to keep the file locked. */
-
-	while (1) {
-		int written = 0;
-
-		nread = read (sfd, buf, sizeof (buf));
-		if (nread == 0)
-			break;
-		else if (nread == -1) {
-			if (errno == EINTR)
-				continue;
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Error reading mail file: %s",
-					      g_strerror (errno));
-			break;
-		}
-
-		while (nread) {
-			nwrote = write (dfd, buf + written, nread);
-			if (nwrote == -1) {
-				if (errno == EINTR)
-					continue; /* continues inner loop */
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      "Error writing "
-						      "mail temp file: %s",
-						      g_strerror (errno));
-				break;
-			}
-			written += nwrote;
-			nread -= nwrote;
-		}
-	}
-
-	/* If no errors occurred copying the data, and we successfully
-	 * close the destination file, then truncate the source file.
-	 */
-	if (!camel_exception_is_set (ex)) {
-		if (close (dfd) == 0)
-			ftruncate (sfd, 0);
-		else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Failed to store mail in "
-					      "temp file %s: %s", dest,
-					      g_strerror (errno));
-		}
-	} else
-		close (dfd);
-	close (sfd);
-
-	/* Clean up lock files. */
-	unlink (lockfile);
-	g_free (lockfile);
-	unlink (locktmpfile);
-	g_free (locktmpfile);
-}
-
-#ifdef MOVEMAIL_PATH
-static void
-movemail_external (const char *source, const char *dest, CamelException *ex)
-{
-	sigset_t mask, omask;
-	pid_t pid;
-	int fd[2], len = 0, nread, status;
-	char buf[BUFSIZ], *output = NULL;
-
-	/* Block SIGCHLD so the app can't mess us up. */
-	sigemptyset (&mask);
-	sigaddset (&mask, SIGCHLD);
-	sigprocmask (SIG_BLOCK, &mask, &omask);
-
-	if (pipe (fd) == -1) {
-		sigprocmask (SIG_SETMASK, &omask, NULL);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not create pipe: %s",
-				      g_strerror (errno));
-		return;
-	}
-
-	pid = fork ();
-	switch (pid) {
-	case -1:
-		close (fd[0]);
-		close (fd[1]);
-		sigprocmask (SIG_SETMASK, &omask, NULL);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not fork: %s",
-				      g_strerror (errno));
-		return;
-
-	case 0:
-		/* Child */
-		close (fd[0]);
-		close (STDIN_FILENO);
-		dup2 (fd[1], STDOUT_FILENO);
-		dup2 (fd[1], STDERR_FILENO);
-
-		execl (MOVEMAIL_PATH, MOVEMAIL_PATH, source, dest, NULL);
-		_exit (255);
-		break;
-
-	default:
-		break;
-	}
-
-	/* Parent */
-	close (fd[1]);
-
-	/* Read movemail's output. */
-	while ((nread = read (fd[0], buf, sizeof (buf))) > 0) {
-		output = g_realloc (output, len + nread + 1);
-		memcpy (output + len, buf, nread);
-		len += nread;
-		output[len] = '\0';
-	}
-	close (fd[0]);
-
-	/* Now get the exit status. */
-	while (waitpid (pid, &status, 0) == -1 && errno == EINTR)
-		;
-	sigprocmask (SIG_SETMASK, &omask, NULL);
-
-	if (!WIFEXITED (status) || WEXITSTATUS (status) != 0) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Movemail program failed: %s",
-				      output ? output : "(Unknown error)");
-	}
-	g_free (output);
-}
-#endif
-
-
-#if 0
-static int
-camel_movemail_copy(int fromfd, int tofd, off_t start, size_t bytes)
-{
-        char buffer[4096];
-        int written = 0;
-
-	d(printf("writing %d bytes ... ", bytes));
-
-	if (lseek(fromfd, start, SEEK_SET) != start)
-		return -1;
-
-        while (bytes>0) {
-                int toread, towrite;
-
-                toread = bytes;
-                if (bytes>4096)
-                        toread = 4096;
-                else
-                        toread = bytes;
-		do {
-			towrite = read(fromfd, buffer, toread);
-		} while (towrite == -1 && errno == EINTR);
-
-		if (towrite == -1)
-			return -1;
-
-                /* check for 'end of file' */
-                if (towrite == 0) {
-			d(printf("end of file?\n"));
-                        break;
-		}
-
-		do {
-			toread = write(tofd, buffer, towrite);
-		} while (toread == -1 && errno == EINTR);
-
-		if (toread == -1)
-			return -1;
-
-                written += toread;
-                bytes -= toread;
-        }
-
-        d(printf("written %d bytes\n", written));
-
-        return written;
-}
-#endif
-
-#define PRE_SIZE (32)
-
-#if 0
-static int
-camel_movemail_copy_filter(int fromfd, int tofd, off_t start, size_t bytes, CamelMimeFilter *filter)
-{
-        char buffer[4096+PRE_SIZE];
-        int written = 0;
-	char *filterbuffer;
-	int filterlen, filterpre;
-
-	d(printf("writing %d bytes ... ", bytes));
-
-	camel_mime_filter_reset(filter);
-
-	if (lseek(fromfd, start, SEEK_SET) != start)
-		return -1;
-
-        while (bytes>0) {
-                int toread, towrite;
-
-                toread = bytes;
-                if (bytes>4096)
-                        toread = 4096;
-                else
-                        toread = bytes;
-		do {
-			towrite = read(fromfd, buffer+PRE_SIZE, toread);
-		} while (towrite == -1 && errno == EINTR);
-
-		if (towrite == -1)
-			return -1;
-
-                /* check for 'end of file' */
-                if (towrite == 0) {
-			d(printf("end of file?\n"));
-			camel_mime_filter_complete(filter, buffer+PRE_SIZE, towrite, PRE_SIZE,
-						   &filterbuffer, &filterlen, &filterpre);
-			towrite = filterlen;
-			if (towrite == 0)
-				break;
-		} else {
-			camel_mime_filter_filter(filter, buffer+PRE_SIZE, towrite, PRE_SIZE,
-						 &filterbuffer, &filterlen, &filterpre);
-			towrite = filterlen;
-		}
-
-		do {
-			toread = write(tofd, filterbuffer, towrite);
-		} while (toread == -1 && errno == EINTR);
-
-		if (toread == -1)
-			return -1;
-
-                written += toread;
-                bytes -= toread;
-        }
-
-        d(printf("written %d bytes\n", written));
-
-        return written;
-}
-
-/* write the headers back out again, but not he Content-Length header, because we dont
-   want	to maintain it! */
-static int
-solaris_header_write(int fd, struct _header_raw *header)
-{
-        struct iovec iv[4];
-        int outlen = 0, len;
-
-        iv[1].iov_base = ":";
-        iv[1].iov_len = 1;
-        iv[3].iov_base = "\n";
-        iv[3].iov_len = 1;
-
-        while (header) {
-		if (strcasecmp(header->name, "Content-Length")) {
-			iv[0].iov_base = header->name;
-			iv[0].iov_len = strlen(header->name);
-			iv[2].iov_base = header->value;
-			iv[2].iov_len = strlen(header->value);
-		
-			do {
-				len = writev(fd, iv, 4);
-			} while (len == -1 && errno == EINTR);
-			
-			if (len == -1)
-				return -1;
-			outlen += len;
-		}
-                header = header->next;
-        }
-
-	do {
-		len = write(fd, "\n", 1);
-	} while (len == -1 && errno == EINTR);
-
-	if (len == -1)
-		return -1;
-
-	outlen += 1;
-
-	d(printf("Wrote %d bytes of headers\n", outlen));
-
-        return outlen;
-}
-
-/* Well, since Solaris is a tad broken wrt its 'mbox' folder format,
-   we must convert it to a real mbox format.  Thankfully this is
-   mostly pretty easy */
-static int
-camel_movemail_solaris (int sfd, int dfd, CamelException *ex)
-{
-	CamelMimeParser *mp;
-	char *buffer;
-	int len;
-	CamelMimeFilterFrom *ffrom;
-	int ret = 1;
-
-	mp = camel_mime_parser_new();
-	camel_mime_parser_scan_from(mp, TRUE);
-	camel_mime_parser_init_with_fd(mp, sfd);
-
-	ffrom = camel_mime_filter_from_new();
-
-	while (camel_mime_parser_step(mp, &buffer, &len) == HSCAN_FROM) {
-		if (camel_mime_parser_step(mp, &buffer, &len) != HSCAN_FROM_END) {
-			const char *cl;
-			int length;
-			int start, body;
-			off_t newpos;
-
-			ret = 0;
-
-			start = camel_mime_parser_tell_start_from(mp);
-			body = camel_mime_parser_tell(mp);
-
-			/* write out headers, but NOT content-length header */
-			solaris_header_write(dfd, camel_mime_parser_headers_raw(mp));
-
-			cl = camel_mime_parser_header(mp, "content-length", NULL);
-			if (cl == NULL) {
-				g_warning("Required Content-Length header is missing from solaris mail box @ %d", (int)camel_mime_parser_tell(mp));
-				camel_mime_parser_drop_step(mp);
-				camel_mime_parser_drop_step(mp);
-				camel_mime_parser_step(mp, &buffer, &len);
-				camel_mime_parser_unstep(mp);
-				length = camel_mime_parser_tell_start_from(mp) - body;
-				newpos = -1;
-			} else {
-				length = atoi(cl);
-				camel_mime_parser_drop_step(mp);
-				camel_mime_parser_drop_step(mp);
-				newpos = length+body;
-			}
-			/* copy body->length converting From lines */
-			if (camel_movemail_copy_filter(sfd, dfd, body, length, (CamelMimeFilter *)ffrom) == -1)
-				goto fail;
-			if (newpos != -1)
-				camel_mime_parser_seek(mp, newpos, SEEK_SET);
-		} else {
-			g_error("Inalid parser state: %d", camel_mime_parser_state(mp));
-		}
-	}
-
-	camel_object_unref((CamelObject *)mp);
-	camel_object_unref((CamelObject *)ffrom);
-
-	return ret;
-
-fail:
-	camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-			      "Error copying "
-			      "mail temp file: %s",
-			      g_strerror (errno));
-
-
-	camel_object_unref((CamelObject *)mp);
-	camel_object_unref((CamelObject *)ffrom);
-
-	return -1;
-}
-#endif
diff --git a/camel/camel-movemail.h b/camel/camel-movemail.h
deleted file mode 100644
index 8b73435a43..0000000000
--- a/camel/camel-movemail.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-movemail.h: mbox copy function */
-
-/* 
- * Author: 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MOVEMAIL_H
-#define CAMEL_MOVEMAIL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-void camel_movemail (const char *source, const char *dest, CamelException *ex);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MOVEMAIL_H */
diff --git a/camel/camel-multipart.c b/camel/camel-multipart.c
deleted file mode 100644
index 1d0446842c..0000000000
--- a/camel/camel-multipart.c
+++ /dev/null
@@ -1,476 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-multipart.c : Abstract class for a multipart */
-
-#ifndef NO_WARNINGS
-#warning This should be a mostly abstract class, but it is not!
-#endif
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "gmime-content-field.h"
-#include "camel-stream-mem.h"
-#include "camel-multipart.h"
-#include "camel-mime-part.h"
-#include "camel-exception.h"
-#include "md5-utils.h"
-
-#include  /* for getpid */
-#include    /* for time */
-
-#define d(x)
-
-static void                  add_part          (CamelMultipart *multipart,
-						CamelMimePart *part);
-static void                  add_part_at       (CamelMultipart *multipart,
-						CamelMimePart *part,
-						guint index);
-static void                  remove_part       (CamelMultipart *multipart,
-						CamelMimePart *part);
-static CamelMimePart *       remove_part_at    (CamelMultipart *multipart,
-						guint index);
-static CamelMimePart *       get_part          (CamelMultipart *multipart,
-						guint index);
-static guint                 get_number        (CamelMultipart *multipart);
-static void                  set_boundary      (CamelMultipart *multipart,
-						gchar *boundary);
-static const gchar *         get_boundary      (CamelMultipart *multipart);
-static int                   write_to_stream   (CamelDataWrapper *data_wrapper,
-						CamelStream *stream);
-static void                  unref_part        (gpointer data, gpointer user_data);
-
-static CamelDataWrapperClass *parent_class = NULL;
-
-
-
-/* Returns the class for a CamelMultipart */
-#define CMP_CLASS(so) CAMEL_MULTIPART_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-/* Returns the class for a CamelDataWrapper */
-#define CDW_CLASS(so) CAMEL_DATA_WRAPPER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-
-static void
-camel_multipart_class_init (CamelMultipartClass *camel_multipart_class)
-{
-	CamelDataWrapperClass *camel_data_wrapper_class =
-		CAMEL_DATA_WRAPPER_CLASS (camel_multipart_class);
-
-	parent_class = CAMEL_DATA_WRAPPER_CLASS (camel_type_get_global_classfuncs (camel_data_wrapper_get_type ()));
-
-	/* virtual method definition */
-	camel_multipart_class->add_part = add_part;
-	camel_multipart_class->add_part_at = add_part_at;
-	camel_multipart_class->remove_part = remove_part;
-	camel_multipart_class->remove_part_at = remove_part_at;
-	camel_multipart_class->get_part = get_part;
-	camel_multipart_class->get_number = get_number;
-	camel_multipart_class->set_boundary = set_boundary;
-	camel_multipart_class->get_boundary = get_boundary;
-
-	/* virtual method overload */
-	camel_data_wrapper_class->write_to_stream = write_to_stream;
-}
-
-static void
-camel_multipart_init (gpointer object, gpointer klass)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (object);
-
-	camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (multipart),
-					  "multipart/mixed");
-	multipart->preface = NULL;
-	multipart->postface = NULL;
-}
-
-static void
-camel_multipart_finalize (CamelObject *object)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (object);
-
-	g_list_foreach (multipart->parts, unref_part, NULL);
-
-	if (multipart->boundary)
-		g_free (multipart->boundary);
-	if (multipart->preface)
-		g_free (multipart->preface);
-	if (multipart->postface)
-		g_free (multipart->postface);
-}
-
-
-CamelType
-camel_multipart_get_type (void)
-{
-	static CamelType camel_multipart_type = CAMEL_INVALID_TYPE;
-
-	if (camel_multipart_type == CAMEL_INVALID_TYPE) {
-		camel_multipart_type = camel_type_register (camel_data_wrapper_get_type (), "CamelMultipart",
-							    sizeof (CamelMultipart),
-							    sizeof (CamelMultipartClass),
-							    (CamelObjectClassInitFunc) camel_multipart_class_init,
-							    NULL,
-							    (CamelObjectInitFunc) camel_multipart_init,
-							    (CamelObjectFinalizeFunc) camel_multipart_finalize);
-	}
-
-	return camel_multipart_type;
-}
-
-static void
-unref_part (gpointer data, gpointer user_data)
-{
-	CamelObject *part = CAMEL_OBJECT (data);
-
-	camel_object_unref (part);
-}
-
-/**
- * camel_multipart_new:
- *
- * Create a new CamelMultipart object.
- *
- * Return value: a new CamelMultipart
- **/
-CamelMultipart *
-camel_multipart_new (void)
-{
-	CamelMultipart *multipart;
-
-	multipart = (CamelMultipart *)camel_object_new (CAMEL_MULTIPART_TYPE);
-	multipart->preface = NULL;
-	multipart->postface = NULL;
-
-	return multipart;
-}
-
-
-static void
-add_part (CamelMultipart *multipart, CamelMimePart *part)
-{
-	multipart->parts = g_list_append (multipart->parts, part);
-	camel_object_ref (CAMEL_OBJECT (part));
-}
-
-/**
- * camel_multipart_add_part:
- * @multipart: a CamelMultipart
- * @part: the part to add
- *
- * Appends the part to the multipart object.
- **/
-void
-camel_multipart_add_part (CamelMultipart *multipart, CamelMimePart *part)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_PART (part));
-
-	CMP_CLASS (multipart)->add_part (multipart, part);
-}
-
-
-static void
-add_part_at (CamelMultipart *multipart, CamelMimePart *part, guint index)
-{
-	multipart->parts = g_list_insert (multipart->parts, part, index);
-	camel_object_ref (CAMEL_OBJECT (part));
-}
-
-/**
- * camel_multipart_add_part_at:
- * @multipart: a CamelMultipart
- * @part: the part to add
- * @index: index to add the multipart at
- *
- * Adds the part to the multipart object after the @index'th
- * element. If @index is greater than the number of parts, it is
- * equivalent to camel_multipart_add_part().
- **/
-void
-camel_multipart_add_part_at (CamelMultipart *multipart,
-			     CamelMimePart *part, guint index)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_PART (part));
-
-	CMP_CLASS (multipart)->add_part_at (multipart, part, index);
-}
-
-
-static void
-remove_part (CamelMultipart *multipart, CamelMimePart *part)
-{
-	if (!multipart->parts)
-		return;
-	multipart->parts = g_list_remove (multipart->parts, part);
-	camel_object_unref (CAMEL_OBJECT (part));
-}
-
-/**
- * camel_multipart_remove_part:
- * @multipart: a CamelMultipart
- * @part: the part to remove
- *
- * Removes @part from @multipart.
- **/
-void
-camel_multipart_remove_part (CamelMultipart *multipart,
-			     CamelMimePart *part)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-	g_return_if_fail (CAMEL_IS_MIME_PART (part));
-
-	CMP_CLASS (multipart)->remove_part (multipart, part);
-}
-
-
-static CamelMimePart *
-remove_part_at (CamelMultipart *multipart, guint index)
-{
-	GList *parts_list;
-	GList *part_to_remove;
-	CamelMimePart *removed_part;
-
-	if (!(multipart->parts))
-		return NULL;
-
-	parts_list = multipart->parts;
-	part_to_remove = g_list_nth (parts_list, index);
-	if (!part_to_remove) {
-		g_warning ("CamelMultipart::remove_part_at: "
-			   "part to remove is NULL\n");
-		return NULL;
-	}
-	removed_part = CAMEL_MIME_PART (part_to_remove->data);
-
-	multipart->parts = g_list_remove_link (parts_list, part_to_remove);
-	if (part_to_remove->data)
-		camel_object_unref (CAMEL_OBJECT (part_to_remove->data));
-	g_list_free_1 (part_to_remove);
-
-	return removed_part;
-}
-
-/**
- * camel_multipart_remove_part_at:
- * @multipart: a CamelMultipart
- * @index: a zero-based index indicating the part to remove
- *
- * Remove the indicated part from the multipart object.
- *
- * Return value: the removed part. Note that it is camel_object_unref()ed
- * before being returned, which may cause it to be destroyed.
- **/
-CamelMimePart *
-camel_multipart_remove_part_at (CamelMultipart *multipart, guint index)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
-
-	return CMP_CLASS (multipart)->remove_part_at (multipart, index);
-}
-
-
-static CamelMimePart *
-get_part (CamelMultipart *multipart, guint index)
-{
-	GList *part;
-
-	if (!(multipart->parts))
-		return NULL;
-
-	part = g_list_nth (multipart->parts, index);
-	if (part)
-		return CAMEL_MIME_PART (part->data);
-	else
-		return NULL;
-}
-
-/**
- * camel_multipart_get_part:
- * @multipart: a CamelMultipart
- * @index: a zero-based index indicating the part to get
- *
- * Return value: the indicated subpart, or %NULL
- **/
-CamelMimePart *
-camel_multipart_get_part (CamelMultipart *multipart, guint index)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), NULL);
-
-	return CMP_CLASS (multipart)->get_part (multipart, index);
-}
-
-
-static guint
-get_number (CamelMultipart *multipart)
-{
-	return g_list_length (multipart->parts);
-}
-
-/**
- * camel_multipart_get_number:
- * @multipart: a CamelMultipart
- *
- * Return value: the number of subparts in @multipart
- **/
-guint
-camel_multipart_get_number (CamelMultipart *multipart)
-{
-	g_return_val_if_fail (CAMEL_IS_MULTIPART (multipart), 0);
-
-	return CMP_CLASS (multipart)->get_number (multipart);
-}
-
-
-static void
-set_boundary (CamelMultipart *multipart, gchar *boundary)
-{
-	CamelDataWrapper *cdw = CAMEL_DATA_WRAPPER (multipart);
-	char *bgen, digest[16], bbuf[27], *p;
-	int state, save;
-
-	g_return_if_fail (cdw->mime_type != NULL);
-
-	if (!boundary) {
-		/* Generate a fairly random boundary string. */
-		bgen = g_strdup_printf ("%p:%lu:%lu", multipart,
-					(unsigned long) getpid(),
-					(unsigned long) time(0));
-		md5_get_digest (bgen, strlen (bgen), digest);
-		g_free (bgen);
-		strcpy (bbuf, "=-");
-		p = bbuf + 2;
-		state = save = 0;
-		p += base64_encode_step (digest, 16, p, &state, &save);
-		*p = '\0';
-
-		boundary = bbuf;
-	}
-
-	gmime_content_field_set_parameter (cdw->mime_type, "boundary",
-					   boundary);
-}
-
-/**
- * camel_multipart_set_boundary:
- * @multipart: a CamelMultipart
- * @boundary: the message boundary, or %NULL
- *
- * Sets the message boundary for @multipart to @boundary. This should
- * be a string which does not occur anywhere in any of @multipart's
- * subparts. If @boundary is %NULL, a randomly-generated boundary will
- * be used.
- **/
-void
-camel_multipart_set_boundary (CamelMultipart *multipart, gchar *boundary)
-{
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-
-	CMP_CLASS (multipart)->set_boundary (multipart, boundary);
-}
-
-
-static const gchar *
-get_boundary (CamelMultipart *multipart)
-{
-	CamelDataWrapper *cdw = CAMEL_DATA_WRAPPER (multipart);
-
-	g_return_val_if_fail (cdw->mime_type != NULL, NULL);
-	return gmime_content_field_get_parameter (cdw->mime_type, "boundary");
-}
-
-/**
- * camel_multipart_get_boundary:
- * @multipart: a CamelMultipart
- *
- * Return value: @multipart's message boundary
- **/
-const gchar *
-camel_multipart_get_boundary (CamelMultipart *multipart)
-{
-	return CMP_CLASS (multipart)->get_boundary (multipart);
-}
-
-/* this is MIME specific, doesn't belong here really */
-static int
-write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream)
-{
-	CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper);
-	const gchar *boundary;
-	int total = 0;
-	int count;
-	GList *node;
-
-	/* get the bundary text */
-	boundary = camel_multipart_get_boundary (multipart);
-
-	/* we cannot write a multipart without a boundary string */
-	g_return_val_if_fail (boundary && *boundary, -1);
-
-	/*
-	 * write the preface text (usually something like
-	 *   "This is a mime message, if you see this, then
-	 *    your mail client probably doesn't support ...."
-	 */
-	if (multipart->preface) {
-		count = camel_stream_write_string (stream, multipart->preface);
-		if (count == -1)
-			return -1;
-		total += count;
-	}
-
-	/*
-	 * Now, write all the parts, separated by the boundary
-	 * delimiter
-	 */
-	node = multipart->parts;
-	while (node) {
-		count = camel_stream_printf (stream, "\n--%s\n", boundary);
-		if (count == -1)
-			return -1;
-		total += count;
-
-		count = camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (node->data), stream);
-		if (count == -1)
-			return -1;
-		total += count;
-		node = node->next;
-	}
-
-	/* write the terminating boudary delimiter */
-	count = camel_stream_printf (stream, "\n--%s--\n", boundary);
-	if (count == -1)
-		return -1;
-	total += count;
-
-	/* and finally the postface */
-	if (multipart->postface) {
-		count = camel_stream_write_string (stream, multipart->postface);
-		if (count == -1)
-			return -1;
-		total += count;
-	}
-
-	return total;
-}
diff --git a/camel/camel-multipart.h b/camel/camel-multipart.h
deleted file mode 100644
index 642cdb5255..0000000000
--- a/camel/camel-multipart.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-multipart.h : class for a multipart */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MULTIPART_H
-#define CAMEL_MULTIPART_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-#define CAMEL_MULTIPART_TYPE     (camel_multipart_get_type ())
-#define CAMEL_MULTIPART(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MULTIPART_TYPE, CamelMultipart))
-#define CAMEL_MULTIPART_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MULTIPART_TYPE, CamelMultipartClass))
-#define CAMEL_IS_MULTIPART(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MULTIPART_TYPE))
-
-
-struct _CamelMultipart
-{
-	CamelDataWrapper parent_object;
-
-	CamelMimePart *parent;
-	GList *parts;
-	gchar *boundary;
-	gchar *preface;
-	gchar *postface;
-
-};
-
-
-
-typedef struct {
-	CamelDataWrapperClass parent_class;
-
-	/* Virtual methods */
-	void (*add_part) (CamelMultipart *multipart, CamelMimePart *part);
-	void (*add_part_at) (CamelMultipart *multipart, CamelMimePart *part, guint index);
-	void (*remove_part) (CamelMultipart *multipart, CamelMimePart *part);
-	CamelMimePart * (*remove_part_at) (CamelMultipart *multipart, guint index);
-	CamelMimePart * (*get_part) (CamelMultipart *multipart, guint index);
-	guint (*get_number) (CamelMultipart *multipart);
-	void (*set_boundary) (CamelMultipart *multipart, gchar *boundary);
-	const gchar * (*get_boundary) (CamelMultipart *multipart);
-
-} CamelMultipartClass;
-
-
-/* Standard Camel function */
-CamelType camel_multipart_get_type (void);
-
-
-/* public methods */
-CamelMultipart *    camel_multipart_new            (void);
-void                camel_multipart_add_part       (CamelMultipart *multipart,
-						    CamelMimePart *part);
-void                camel_multipart_add_part_at    (CamelMultipart *multipart,
-						    CamelMimePart *part,
-						    guint index);
-void                camel_multipart_remove_part    (CamelMultipart *multipart,
-						    CamelMimePart *part);
-CamelMimePart *     camel_multipart_remove_part_at (CamelMultipart *multipart,
-						    guint index);
-CamelMimePart *     camel_multipart_get_part       (CamelMultipart *multipart,
-						    guint index);
-guint               camel_multipart_get_number     (CamelMultipart *multipart);
-void                camel_multipart_set_boundary   (CamelMultipart *multipart,
-						    gchar *boundary);
-const gchar *       camel_multipart_get_boundary   (CamelMultipart *multipart);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MULTIPART_H */
-
diff --git a/camel/camel-news-address.c b/camel/camel-news-address.c
deleted file mode 100644
index ebd35b80c7..0000000000
--- a/camel/camel-news-address.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors:
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-news-address.h"
-
-
-static void camel_news_address_class_init (CamelNewsAddressClass *klass);
-
-static CamelAddressClass *camel_news_address_parent;
-
-static void
-camel_news_address_class_init (CamelNewsAddressClass *klass)
-{
-	camel_news_address_parent = CAMEL_ADDRESS_CLASS (camel_type_get_global_classfuncs (camel_address_get_type ()));
-}
-
-
-CamelType
-camel_news_address_get_type (void)
-{
-	static guint type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_address_get_type (), "CamelNewsAddress",
-					    sizeof (CamelNewsAddress),
-					    sizeof (CamelNewsAddressClass),
-					    (CamelObjectClassInitFunc) camel_news_address_class_init,
-					    NULL,
-					    NULL,
-					    NULL);
-	}
-	
-	return type;
-}
-
-/**
- * camel_news_address_new:
- *
- * Create a new CamelNewsAddress object.
- * 
- * Return value: A new CamelNewsAddress widget.
- **/
-CamelNewsAddress *
-camel_news_address_new (void)
-{
-	CamelNewsAddress *new = CAMEL_NEWS_ADDRESS ( camel_object_new (camel_news_address_get_type ()));
-	return new;
-}
diff --git a/camel/camel-news-address.h b/camel/camel-news-address.h
deleted file mode 100644
index 8d2aa03968..0000000000
--- a/camel/camel-news-address.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_NEWS_ADDRESS_H
-#define _CAMEL_NEWS_ADDRESS_H
-
-#include 
-
-#define CAMEL_NEWS_ADDRESS(obj)         CAMEL_CHECK_CAST (obj, camel_news_address_get_type (), CamelNewsAddress)
-#define CAMEL_NEWS_ADDRESS_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_news_address_get_type (), CamelNewsAddressClass)
-#define IS_CAMEL_NEWS_ADDRESS(obj)      CAMEL_CHECK_TYPE (obj, camel_news_address_get_type ())
-
-typedef struct _CamelNewsAddressClass CamelNewsAddressClass;
-
-struct _CamelNewsAddress {
-	CamelAddress parent;
-
-	struct _CamelNewsAddressPrivate *priv;
-};
-
-struct _CamelNewsAddressClass {
-	CamelAddressClass parent_class;
-};
-
-guint		camel_news_address_get_type	(void);
-CamelNewsAddress      *camel_news_address_new	(void);
-
-#endif /* ! _CAMEL_NEWS_ADDRESS_H */
diff --git a/camel/camel-object.c b/camel/camel-object.c
deleted file mode 100644
index 7805546c9e..0000000000
--- a/camel/camel-object.c
+++ /dev/null
@@ -1,971 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-object.c: Base class for Camel */
-
-/*
- * Author:
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel-object.h"
-
-/* I just mashed the keyboard for these... */
-#define CAMEL_OBJECT_MAGIC_VALUE           0x77A344EF
-#define CAMEL_OBJECT_CLASS_MAGIC_VALUE     0xEE26A990
-#define CAMEL_OBJECT_FINALIZED_VALUE       0x84AC3656
-#define CAMEL_OBJECT_CLASS_FINALIZED_VALUE 0x7621ABCD
-
-#define DEFAULT_PREALLOCS 8
-
-#define BAST_CASTARD 1		/* Define to return NULL when casts fail */
-
-#define NULL_PREP_VALUE ((gpointer)make_global_classfuncs)	/* See camel_object_class_declare_event */
-
-/* ** Quickie type system ************************************************* */
-
-typedef struct _CamelTypeInfo
-{
-	CamelType self;
-	CamelType parent;
-	const gchar *name;
-
-	size_t instance_size;
-	GMemChunk *instance_chunk;
-	CamelObjectInitFunc instance_init;
-	CamelObjectFinalizeFunc instance_finalize;
-	GList *free_instances;
-
-	size_t classfuncs_size;
-	CamelObjectClassInitFunc class_init;
-	CamelObjectClassFinalizeFunc class_finalize;
-	CamelObjectClass *global_classfuncs;
-}
-CamelTypeInfo;
-
-typedef struct _CamelHookPair
-{
-	CamelObjectEventHookFunc func;
-	gpointer user_data;
-}
-CamelHookPair;
-
-/* ************************************************************************ */
-
-static void camel_type_lock_up (void);
-static void camel_type_lock_down (void);
-
-static void obj_init (CamelObject * obj);
-static void obj_finalize (CamelObject * obj);
-static void obj_class_init (CamelObjectClass * class);
-static void obj_class_finalize (CamelObjectClass * class);
-
-static gboolean shared_is_of_type (CamelObjectShared * sh, CamelType ctype,
-				   gboolean is_obj);
-static void make_global_classfuncs (CamelTypeInfo * type_info);
-
-/* ************************************************************************ */
-
-G_LOCK_DEFINE_STATIC (type_system);
-G_LOCK_DEFINE_STATIC (type_system_level);
-static GPrivate *type_system_locklevel = NULL;
-
-G_LOCK_DEFINE_STATIC (refcount);
-
-static gboolean type_system_initialized = FALSE;
-static GHashTable *ctype_to_typeinfo = NULL;
-static const CamelType camel_object_type = 1;
-static CamelType cur_max_type = CAMEL_INVALID_TYPE;
-
-/* ************************************************************************ */
-
-#define LOCK_VAL (GPOINTER_TO_INT (g_private_get (type_system_locklevel)))
-#define LOCK_SET( val ) g_private_set (type_system_locklevel, GINT_TO_POINTER (val))
-
-static void
-camel_type_lock_up (void)
-{
-	G_LOCK (type_system_level);
-
-	if (type_system_locklevel == NULL)
-		type_system_locklevel = g_private_new (GINT_TO_POINTER (0));
-
-	if (LOCK_VAL == 0) {
-		G_UNLOCK (type_system_level);
-		G_LOCK (type_system);
-		G_LOCK (type_system_level);
-	}
-
-	LOCK_SET (LOCK_VAL + 1);
-
-	G_UNLOCK (type_system_level);
-}
-
-static void
-camel_type_lock_down (void)
-{
-	G_LOCK (type_system_level);
-
-	if (type_system_locklevel == NULL) {
-		g_warning
-			("camel_type_lock_down: lock down before a lock up?");
-		type_system_locklevel = g_private_new (GINT_TO_POINTER (0));
-		G_UNLOCK (type_system_level);
-		return;
-	}
-
-	LOCK_SET (LOCK_VAL - 1);
-
-	if (LOCK_VAL == 0)
-		G_UNLOCK (type_system);
-
-	G_UNLOCK (type_system_level);
-}
-
-void
-camel_type_init (void)
-{
-	CamelTypeInfo *obj_info;
-
-	camel_type_lock_up ();
-
-	if (type_system_initialized) {
-		g_warning
-			("camel_type_init: type system already initialized.");
-		camel_type_lock_down ();
-		return;
-	}
-
-	type_system_initialized = TRUE;
-	ctype_to_typeinfo = g_hash_table_new (g_direct_hash, g_direct_equal);
-
-	obj_info = g_new (CamelTypeInfo, 1);
-	obj_info->self = camel_object_type;
-	obj_info->parent = CAMEL_INVALID_TYPE;
-	obj_info->name = "CamelObject";
-
-	obj_info->instance_size = sizeof (CamelObject);
-	obj_info->instance_chunk =
-		g_mem_chunk_create (CamelObject, DEFAULT_PREALLOCS,
-				    G_ALLOC_ONLY);
-	obj_info->instance_init = obj_init;
-	obj_info->instance_finalize = obj_finalize;
-	obj_info->free_instances = NULL;
-
-	obj_info->classfuncs_size = sizeof (CamelObjectClass);
-	obj_info->class_init = obj_class_init;
-	obj_info->class_finalize = obj_class_finalize;
-
-	g_hash_table_insert (ctype_to_typeinfo,
-			     GINT_TO_POINTER (CAMEL_INVALID_TYPE), NULL);
-	g_hash_table_insert (ctype_to_typeinfo,
-			     GINT_TO_POINTER (camel_object_type), obj_info);
-
-	/* Sigh. Ugly */
-	make_global_classfuncs (obj_info);
-
-	cur_max_type = camel_object_type;
-
-	camel_type_lock_down ();
-}
-
-CamelType
-camel_type_register (CamelType parent, const gchar * name,
-		     size_t instance_size, size_t classfuncs_size,
-		     CamelObjectClassInitFunc class_init,
-		     CamelObjectClassFinalizeFunc class_finalize,
-		     CamelObjectInitFunc instance_init,
-		     CamelObjectFinalizeFunc instance_finalize)
-{
-	CamelTypeInfo *parent_info;
-	CamelTypeInfo *obj_info;
-	gchar *chunkname;
-
-	g_return_val_if_fail (parent != CAMEL_INVALID_TYPE,
-			      CAMEL_INVALID_TYPE);
-	g_return_val_if_fail (name, CAMEL_INVALID_TYPE);
-	g_return_val_if_fail (instance_size, CAMEL_INVALID_TYPE);
-	g_return_val_if_fail (classfuncs_size, CAMEL_INVALID_TYPE);
-
-	camel_type_lock_up ();
-
-	if (type_system_initialized == FALSE) {
-		G_UNLOCK (type_system);
-		camel_type_init ();
-		G_LOCK (type_system);
-	}
-
-	parent_info =
-		g_hash_table_lookup (ctype_to_typeinfo,
-				     GINT_TO_POINTER (parent));
-
-	if (parent_info == NULL) {
-		g_warning
-			("camel_type_register: no such parent type %d of class `%s'",
-			 parent, name);
-		camel_type_lock_down ();
-		return CAMEL_INVALID_TYPE;
-	}
-
-	if (parent_info->instance_size > instance_size) {
-		g_warning
-			("camel_type_register: instance of class `%s' would be smaller than parent `%s'",
-			 name, parent_info->name);
-		camel_type_lock_down ();
-		return CAMEL_INVALID_TYPE;
-	}
-
-	if (parent_info->classfuncs_size > classfuncs_size) {
-		g_warning
-			("camel_type_register: classfuncs of class `%s' would be smaller than parent `%s'",
-			 name, parent_info->name);
-		camel_type_lock_down ();
-		return CAMEL_INVALID_TYPE;
-	}
-
-	cur_max_type++;
-
-	obj_info = g_new (CamelTypeInfo, 1);
-	obj_info->self = cur_max_type;
-	obj_info->parent = parent;
-	obj_info->name = name;
-
-	obj_info->instance_size = instance_size;
-	chunkname =
-		g_strdup_printf ("chunk for instances of Camel type `%s'",
-				 name);
-	obj_info->instance_chunk =
-		g_mem_chunk_new (chunkname, instance_size,
-				 instance_size * DEFAULT_PREALLOCS,
-				 G_ALLOC_ONLY);
-	g_free (chunkname);
-	obj_info->instance_init = instance_init;
-	obj_info->instance_finalize = instance_finalize;
-	obj_info->free_instances = NULL;
-
-	obj_info->classfuncs_size = classfuncs_size;
-	obj_info->class_init = class_init;
-	obj_info->class_finalize = class_finalize;
-
-	g_hash_table_insert (ctype_to_typeinfo,
-			     GINT_TO_POINTER (obj_info->self), obj_info);
-
-	/* Sigh. Ugly. */
-	make_global_classfuncs (obj_info);
-
-	camel_type_lock_down ();
-	return obj_info->self;
-}
-
-CamelObjectClass *
-camel_type_get_global_classfuncs (CamelType type)
-{
-	CamelTypeInfo *type_info;
-
-	g_return_val_if_fail (type != CAMEL_INVALID_TYPE, NULL);
-
-	camel_type_lock_up ();
-	type_info =
-		g_hash_table_lookup (ctype_to_typeinfo,
-				     GINT_TO_POINTER (type));
-	camel_type_lock_down ();
-
-	g_return_val_if_fail (type_info != NULL, NULL);
-
-	return type_info->global_classfuncs;
-}
-
-const gchar *
-camel_type_to_name (CamelType type)
-{
-	CamelTypeInfo *type_info;
-
-	g_return_val_if_fail (type != CAMEL_INVALID_TYPE,
-			      "(the invalid type)");
-
-	camel_type_lock_up ();
-	type_info =
-		g_hash_table_lookup (ctype_to_typeinfo,
-				     GINT_TO_POINTER (type));
-	camel_type_lock_down ();
-
-	g_return_val_if_fail (type_info != NULL,
-			      "(a bad type parameter was specified)");
-
-	return type_info->name;
-}
-
-/* ** The CamelObject ***************************************************** */
-
-static void
-obj_init (CamelObject * obj)
-{
-	obj->s.magic = CAMEL_OBJECT_MAGIC_VALUE;
-	obj->ref_count = 1;
-	obj->event_to_hooklist = NULL;
-	obj->in_event = 0;
-}
-
-static void
-obj_finalize (CamelObject * obj)
-{
-	g_return_if_fail (obj->s.magic == CAMEL_OBJECT_MAGIC_VALUE);
-	g_return_if_fail (obj->ref_count == 0);
-	g_return_if_fail (obj->in_event == 0);
-
-	obj->s.magic = CAMEL_OBJECT_FINALIZED_VALUE;
-
-	if (obj->event_to_hooklist) {
-		g_hash_table_foreach (obj->event_to_hooklist, (GHFunc) g_free,
-				      NULL);
-		g_hash_table_destroy (obj->event_to_hooklist);
-		obj->event_to_hooklist = NULL;
-	}
-}
-
-static void
-obj_class_init (CamelObjectClass * class)
-{
-	class->s.magic = CAMEL_OBJECT_CLASS_MAGIC_VALUE;
-
-	camel_object_class_declare_event (class, "finalize", NULL);
-}
-
-static void
-obj_class_finalize (CamelObjectClass * class)
-{
-	g_return_if_fail (class->s.magic == CAMEL_OBJECT_CLASS_MAGIC_VALUE);
-
-	class->s.magic = CAMEL_OBJECT_CLASS_FINALIZED_VALUE;
-
-	if (class->event_to_preplist) {
-		g_hash_table_foreach (class->event_to_preplist,
-				      (GHFunc) g_free, NULL);
-		g_hash_table_destroy (class->event_to_preplist);
-		class->event_to_preplist = NULL;
-	}
-}
-
-CamelType
-camel_object_get_type (void)
-{
-	if (type_system_initialized == FALSE)
-		camel_type_init ();
-
-	return camel_object_type;
-}
-
-CamelObject *
-camel_object_new (CamelType type)
-{
-	CamelTypeInfo *type_info;
-	GSList *parents = NULL;
-	GSList *head = NULL;
-	CamelObject *instance;
-
-	g_return_val_if_fail (type != CAMEL_INVALID_TYPE, NULL);
-
-	/* Look up the type */
-
-	camel_type_lock_up ();
-
-	type_info =
-		g_hash_table_lookup (ctype_to_typeinfo,
-				     GINT_TO_POINTER (type));
-
-	if (type_info == NULL) {
-		g_warning
-			("camel_object_new: trying to create object of invalid type %d",
-			 type);
-		camel_type_lock_down ();
-		return NULL;
-	}
-
-	/* Grab an instance out of the freed ones if possible, alloc otherwise */
-
-	if (type_info->free_instances) {
-		GList *first;
-
-		first = g_list_first (type_info->free_instances);
-		instance = first->data;
-		type_info->free_instances =
-			g_list_remove_link (type_info->free_instances, first);
-		g_list_free_1 (first);
-	} else {
-		instance = g_mem_chunk_alloc0 (type_info->instance_chunk);
-	}
-
-	/* Init the instance and classfuncs a bit */
-
-	instance->s.type = type;
-	instance->classfuncs = type_info->global_classfuncs;
-
-	/* Loop through the parents in simplest -> most complex order, initing the class and instance.
-
-	 * When parent = CAMEL_INVALID_TYPE and we're at the end of the line, _lookup returns NULL
-	 * because we inserted it as corresponding to CAMEL_INVALID_TYPE. Clever, eh?
-	 */
-
-	while (type_info) {
-		parents = g_slist_prepend (parents, type_info);
-		type_info =
-			g_hash_table_lookup (ctype_to_typeinfo,
-					     GINT_TO_POINTER (type_info->
-							      parent));
-	}
-
-	head = parents;
-
-	for (; parents && parents->data; parents = parents->next) {
-		CamelTypeInfo *thisinfo;
-
-		thisinfo = parents->data;
-		if (thisinfo->instance_init)
-			(thisinfo->instance_init) (instance);
-	}
-
-	g_slist_free (head);
-
-	camel_type_lock_down ();
-	return instance;
-}
-
-void
-camel_object_ref (CamelObject * obj)
-{
-	g_return_if_fail (CAMEL_IS_OBJECT (obj));
-
-	G_LOCK (refcount);
-	obj->ref_count++;
-	G_UNLOCK (refcount);
-}
-
-void
-camel_object_unref (CamelObject * obj)
-{
-	CamelTypeInfo *type_info;
-	CamelTypeInfo *iter;
-	GSList *parents = NULL;
-	GSList *head = NULL;
-
-	g_return_if_fail (CAMEL_IS_OBJECT (obj));
-
-	G_LOCK (refcount);
-	obj->ref_count--;
-
-	if (obj->ref_count > 0) {
-		G_UNLOCK (refcount);
-		return;
-	}
-
-	G_UNLOCK (refcount);
-
-	/* Oh no! We want to emit a "finalized" event, but that function refs the object
-	 * because it's not supposed to get finalized in an event, but it is being finalized
-	 * right now, and AAUGH AAUGH AUGH AUGH!
-	 *
-	 * So we don't call camel_object_trigger_event. We do it ourselves. We even know
-	 * that CamelObject doesn't provide a prep for the finalized event, so we plunge
-	 * right in and call our hooks.
-	 *
-	 * And there was much rejoicing.
-	 */
-
-#define hooklist parents	/*cough */
-
-	if (obj->event_to_hooklist) {
-		CamelHookPair *pair;
-
-		hooklist =
-			g_hash_table_lookup (obj->event_to_hooklist,
-					     "finalize");
-
-		while (hooklist && hooklist->data) {
-			pair = hooklist->data;
-			(pair->func) (obj, NULL, pair->user_data);
-			hooklist = hooklist->next;
-		}
-	}
-
-	hooklist = NULL;	/* Don't mess with this line */
-
-#undef hooklist
-
-	/* Destroy it! hahaha! */
-
-	camel_type_lock_up ();
-
-	type_info =
-		g_hash_table_lookup (ctype_to_typeinfo,
-				     GINT_TO_POINTER (obj->s.type));
-
-	if (type_info == NULL) {
-		g_warning
-			("camel_object_unref: seemingly valid object has a bad type %d",
-			 obj->s.type);
-		camel_type_lock_down ();
-		return;
-	}
-
-	/* Loop through the parents in most complex -> simplest order, finalizing the class 
-	 * and instance.
-	 *
-	 * When parent = CAMEL_INVALID_TYPE and we're at the end of the line, _lookup returns NULL
-	 * because we inserted it as corresponding to CAMEL_INVALID_TYPE. Clever, eh?
-	 *
-	 * Use iter to preserve type_info for free_{instance,classfunc}s
-	 */
-
-	iter = type_info;
-
-	while (iter) {
-		parents = g_slist_prepend (parents, iter);
-		iter =
-			g_hash_table_lookup (ctype_to_typeinfo,
-					     GINT_TO_POINTER (iter->parent));
-	}
-
-	parents = g_slist_reverse (parents);
-	head = parents;
-
-	for (; parents && parents->data; parents = parents->next) {
-		CamelTypeInfo *thisinfo;
-
-		thisinfo = parents->data;
-		if (thisinfo->instance_finalize)
-			(thisinfo->instance_finalize) (obj);
-	}
-
-	g_slist_free (head);
-
-	/* A little bit of cleaning up.
-
-	 * Don't erase the type, so we can peek at it if a finalized object
-	 * is check_cast'ed somewhere.
-	 */
-
-	memset (obj, 0, type_info->instance_size);
-	obj->s.type = type_info->self;
-	obj->s.magic = CAMEL_OBJECT_FINALIZED_VALUE;
-
-	/* Tuck away the pointer for use in a new object */
-
-	type_info->free_instances =
-		g_list_prepend (type_info->free_instances, obj);
-
-	camel_type_lock_down ();
-}
-
-gboolean
-camel_object_is_of_type (CamelObject * obj, CamelType ctype)
-{
-	return shared_is_of_type ((CamelObjectShared *) obj, ctype, TRUE);
-}
-
-gboolean
-camel_object_class_is_of_type (CamelObjectClass * class, CamelType ctype)
-{
-	return shared_is_of_type ((CamelObjectShared *) class, ctype, FALSE);
-}
-
-#ifdef BAST_CASTARD
-#define ERRVAL NULL
-#else
-#define ERRVAL obj
-#endif
-
-CamelObject *
-camel_object_check_cast (CamelObject * obj, CamelType ctype)
-{
-	if (shared_is_of_type ((CamelObjectShared *) obj, ctype, TRUE))
-		return obj;
-	return ERRVAL;
-}
-
-CamelObjectClass *
-camel_object_class_check_cast (CamelObjectClass * class, CamelType ctype)
-{
-	if (shared_is_of_type ((CamelObjectShared *) class, ctype, FALSE))
-		return class;
-	return ERRVAL;
-}
-
-#undef ERRVAL
-
-gchar *
-camel_object_describe (CamelObject * obj)
-{
-	if (obj == NULL)
-		return g_strdup ("a NULL pointer");
-
-	if (obj->s.magic == CAMEL_OBJECT_MAGIC_VALUE) {
-		return g_strdup_printf ("an instance of `%s' at %p",
-					camel_type_to_name (obj->s.type),
-					obj);
-	} else if (obj->s.magic == CAMEL_OBJECT_FINALIZED_VALUE) {
-		return g_strdup_printf ("a finalized instance of `%s' at %p",
-					camel_type_to_name (obj->s.type),
-					obj);
-	} else if (obj->s.magic == CAMEL_OBJECT_CLASS_MAGIC_VALUE) {
-		return g_strdup_printf ("the classfuncs of `%s' at %p",
-					camel_type_to_name (obj->s.type),
-					obj);
-	} else if (obj->s.magic == CAMEL_OBJECT_CLASS_FINALIZED_VALUE) {
-		return
-			g_strdup_printf
-			("the finalized classfuncs of `%s' at %p",
-			 camel_type_to_name (obj->s.type), obj);
-	}
-
-	return g_strdup ("not a CamelObject");
-}
-
-/* This is likely to be called in the class_init callback,
- * and the type will likely be somewhat uninitialized. 
- * Is this a problem? We'll see....
- */
-void
-camel_object_class_declare_event (CamelObjectClass * class,
-				  const gchar * name,
-				  CamelObjectEventPrepFunc prep)
-{
-	g_return_if_fail (CAMEL_IS_OBJECT_CLASS (class));
-	g_return_if_fail (name);
-
-	if (class->event_to_preplist == NULL)
-		class->event_to_preplist =
-			g_hash_table_new (g_str_hash, g_str_equal);
-	else if (g_hash_table_lookup (class->event_to_preplist, name) != NULL) {
-		g_warning
-			("camel_object_class_declare_event: event `%s' already declared for `%s'",
-			 name, camel_type_to_name (class->s.type));
-		return;
-	}
-
-	/* AIEEEEEEEEEEEEEEEEEEEEEE
-
-	 * I feel so naughty. Since it's valid to declare an event and not
-	 * provide a hook, it should be valid to insert a NULL value into
-	 * the table. However, then our lookup in trigger_event would be
-	 * ambiguous, not telling us whether the event is undefined or whether
-	 * it merely has no hook.
-	 *
-	 * So we create an 'NULL prep' value that != NULL... specifically, it
-	 * equals the address of one of our static functions , because that
-	 * can't possibly be your hook.
-	 *
-	 * Just don't forget to check for the 'evil value' and it'll work,
-	 * I promise.
-	 */
-
-	if (prep == NULL)
-		prep = NULL_PREP_VALUE;
-
-	g_hash_table_insert (class->event_to_preplist, g_strdup (name), prep);
-}
-
-void
-camel_object_hook_event (CamelObject * obj, const gchar * name,
-			 CamelObjectEventHookFunc hook, gpointer user_data)
-{
-	GSList *hooklist;
-	CamelHookPair *pair;
-
-	g_return_if_fail (CAMEL_IS_OBJECT (obj));
-	g_return_if_fail (name);
-	g_return_if_fail (hook);
-
-	if (obj->event_to_hooklist == NULL)
-		obj->event_to_hooklist =
-			g_hash_table_new (g_str_hash, g_str_equal);
-
-	pair = g_new (CamelHookPair, 1);
-	pair->func = hook;
-	pair->user_data = user_data;
-
-	hooklist = g_hash_table_lookup (obj->event_to_hooklist, name);
-	hooklist = g_slist_prepend (hooklist, pair);
-	g_hash_table_insert (obj->event_to_hooklist, g_strdup (name),
-			     hooklist);
-}
-
-void
-camel_object_unhook_event (CamelObject * obj, const gchar * name,
-			   CamelObjectEventHookFunc hook, gpointer user_data)
-{
-	GSList *hooklist;
-	GSList *head;
-
-	g_return_if_fail (CAMEL_IS_OBJECT (obj));
-	g_return_if_fail (name);
-	g_return_if_fail (hook);
-
-	if (obj->event_to_hooklist == NULL) {
-		g_warning
-			("camel_object_unhook_event: trying to unhook `%s' from an instance "
-			 "of `%s' with no hooks attached", name,
-			 camel_type_to_name (obj->s.type));
-		return;
-	}
-
-	hooklist = g_hash_table_lookup (obj->event_to_hooklist, name);
-
-	if (hooklist == NULL) {
-		g_warning
-			("camel_object_unhook_event: trying to unhook `%s' from an instance "
-			 "of `%s' with no hooks attached to that event.",
-			 name, camel_type_to_name (obj->s.type));
-		return;
-	}
-
-	head = hooklist;
-
-	while (hooklist) {
-		CamelHookPair *pair = (CamelHookPair *) hooklist->data;
-
-		if (pair->func == hook && pair->user_data == user_data) {
-			g_free (hooklist->data);
-			head = g_slist_remove_link (head, hooklist);
-			g_slist_free_1 (hooklist);
-			g_hash_table_insert (obj->event_to_hooklist, (char *) name,
-					     head);
-			return;
-		}
-
-		hooklist = hooklist->next;
-	}
-
-	g_warning
-		("camel_object_unhook_event: cannot find hook/data pair %p/%p in an "
-		 "instance of `%s' attached to `%s'", hook, user_data,
-		 camel_type_to_name (obj->s.type), name);
-}
-
-void
-camel_object_trigger_event (CamelObject * obj, const gchar * name,
-			    gpointer event_data)
-{
-	GSList *hooklist;
-	CamelHookPair *pair;
-	CamelObjectEventPrepFunc prep;
-
-	g_return_if_fail (CAMEL_IS_OBJECT (obj));
-	g_return_if_fail (name);
-
-	if (obj->in_event) {
-		g_warning
-			("camel_object_trigger_event: trying to trigger `%s' in class "
-			 "`%s' while already triggering another event", name,
-			 camel_type_to_name (obj->s.type));
-		return;
-	}
-
-	if (obj->classfuncs->event_to_preplist == NULL) {
-		g_warning
-			("camel_object_trigger_event: trying to trigger `%s' in class "
-			 "`%s' with no defined events.", name,
-			 camel_type_to_name (obj->s.type));
-		return;
-	}
-
-	prep = g_hash_table_lookup (obj->classfuncs->event_to_preplist, name);
-
-	if (prep == NULL) {
-		g_warning
-			("camel_object_trigger_event: trying to trigger undefined "
-			 "event `%s' in class `%s'.", name,
-			 camel_type_to_name (obj->s.type));
-		return;
-	}
-
-	/* Ref so that it can't get destroyed in the event, which would
-	 * be Bad. And it's a valid ref anyway...
-	 */
-
-	camel_object_ref (obj);
-	obj->in_event = 1;
-
-	if ((prep != NULL_PREP_VALUE && !prep (obj, event_data))
-	    || obj->event_to_hooklist == NULL) {
-		obj->in_event = 0;
-		camel_object_unref (obj);
-		return;
-	}
-
-	hooklist = g_hash_table_lookup (obj->event_to_hooklist, name);
-
-	while (hooklist && hooklist->data) {
-		pair = hooklist->data;
-		(pair->func) (obj, event_data, pair->user_data);
-		hooklist = hooklist->next;
-	}
-
-	obj->in_event = 0;
-	camel_object_unref (obj);
-}
-
-/* ** Static helpers ****************************************************** */
-
-static gboolean
-shared_is_of_type (CamelObjectShared * sh, CamelType ctype, gboolean is_obj)
-{
-	CamelTypeInfo *type_info;
-	gchar *targtype;
-
-	if (is_obj)
-		targtype = "instance";
-	else
-		targtype = "classdata";
-
-	if (ctype == CAMEL_INVALID_TYPE) {
-		g_warning
-			("shared_is_of_type: trying to cast to CAMEL_INVALID_TYPE");
-		return FALSE;
-	}
-
-	if (sh == NULL) {
-		g_warning
-			("shared_is_of_type: trying to cast NULL to %s of `%s'",
-			 targtype, camel_type_to_name (ctype));
-		return FALSE;
-	}
-
-	if (sh->magic == CAMEL_OBJECT_FINALIZED_VALUE) {
-		g_warning
-			("shared_is_of_type: trying to cast finalized instance "
-			 "of `%s' into %s of `%s'",
-			 camel_type_to_name (sh->type), targtype,
-			 camel_type_to_name (ctype));
-		return FALSE;
-	}
-
-	if (sh->magic == CAMEL_OBJECT_CLASS_FINALIZED_VALUE) {
-		g_warning
-			("shared_is_of_type: trying to cast finalized classdata "
-			 "of `%s' into %s of `%s'",
-			 camel_type_to_name (sh->type), targtype,
-			 camel_type_to_name (ctype));
-		return FALSE;
-	}
-
-	if (is_obj) {
-		if (sh->magic == CAMEL_OBJECT_CLASS_MAGIC_VALUE) {
-			g_warning
-				("shared_is_of_type: trying to cast classdata "
-				 "of `%s' into instance of `%s'",
-				 camel_type_to_name (sh->type),
-				 camel_type_to_name (ctype));
-			return FALSE;
-		}
-
-		if (sh->magic != CAMEL_OBJECT_MAGIC_VALUE) {
-			g_warning
-				("shared_is_of_type: trying to cast junk data "
-				 "into instance of `%s'",
-				 camel_type_to_name (ctype));
-			return FALSE;
-		}
-	} else {
-		if (sh->magic == CAMEL_OBJECT_MAGIC_VALUE) {
-			g_warning
-				("shared_is_of_type: trying to cast instance "
-				 "of `%s' into classdata of `%s'",
-				 camel_type_to_name (sh->type),
-				 camel_type_to_name (ctype));
-			return FALSE;
-		}
-
-		if (sh->magic != CAMEL_OBJECT_CLASS_MAGIC_VALUE) {
-			g_warning
-				("shared_is_of_type: trying to cast junk data "
-				 "into classdata of `%s'",
-				 camel_type_to_name (ctype));
-			return FALSE;
-		}
-	}
-
-	camel_type_lock_up ();
-
-	type_info =
-		g_hash_table_lookup (ctype_to_typeinfo,
-				     GINT_TO_POINTER (sh->type));
-
-	if (type_info == NULL) {
-		g_warning ("shared_is_of_type: seemingly valid %s has "
-			   "bad type %d.", targtype, sh->type);
-		camel_type_lock_down ();
-		return FALSE;
-	}
-
-	while (type_info) {
-		if (type_info->self == ctype) {
-			camel_type_lock_down ();
-			return TRUE;
-		}
-
-		type_info =
-			g_hash_table_lookup (ctype_to_typeinfo,
-					     GINT_TO_POINTER (type_info->
-							      parent));
-	}
-
-	g_warning
-		("shared_is_of_type: %s of `%s' (@%p) is not also %s of `%s'",
-		 targtype, camel_type_to_name (sh->type), sh, targtype,
-		 camel_type_to_name (ctype));
-
-	camel_type_lock_down ();
-	return FALSE;
-}
-
-static void
-make_global_classfuncs (CamelTypeInfo * type_info)
-{
-	CamelObjectClass *funcs;
-	GSList *parents;
-	GSList *head;
-
-	g_assert (type_info);
-
-	funcs = g_malloc0 (type_info->classfuncs_size);
-	funcs->s.type = type_info->self;
-
-	type_info->global_classfuncs = funcs;
-
-	parents = NULL;
-	while (type_info) {
-		parents = g_slist_prepend (parents, type_info);
-		type_info =
-			g_hash_table_lookup (ctype_to_typeinfo,
-					     GINT_TO_POINTER (type_info->
-							      parent));
-	}
-
-	head = parents;
-
-	for (; parents && parents->data; parents = parents->next) {
-		CamelTypeInfo *thisinfo;
-
-		thisinfo = parents->data;
-		if (thisinfo->class_init)
-			(thisinfo->class_init) (funcs);
-	}
-
-	g_slist_free (head);
-}
diff --git a/camel/camel-object.h b/camel/camel-object.h
deleted file mode 100644
index fdcf7b4a15..0000000000
--- a/camel/camel-object.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-object.h: Base class for Camel */
-
-/*
- * Author:
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef CAMEL_OBJECT_H
-#define CAMEL_OBJECT_H 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#pragma }
-#endif				/* __cplusplus } */
-
-#include 		/* size_t */
-#include 
-#include 
-
-#ifdef G_DISABLE_CHECKS
-#define CAMEL_CHECK_CAST( obj, ctype, ptype )         ((ptype *) obj)
-#define CAMEL_CHECK_CLASS_CAST( class, ctype, ptype ) ((ptype *) class)
-#define CAMEL_CHECK_TYPE( obj, ctype )                (TRUE)
-#define CAMEL_CHECK_CLASS_TYPE( class, ctype )        (TRUE)
-#else
-#define CAMEL_CHECK_CAST( obj, ctype, ptype )         ((ptype *) camel_object_check_cast( (CamelObject *)(obj), (CamelType)(ctype) ))
-#define CAMEL_CHECK_CLASS_CAST( class, ctype, ptype ) ((ptype *) camel_object_class_check_cast( (CamelObjectClass *)(class), (CamelType)(ctype) ))
-#define CAMEL_CHECK_TYPE( obj, ctype )                (camel_object_is_of_type( (CamelObject *)(obj), (CamelType)(ctype) ))
-#define CAMEL_CHECK_CLASS_TYPE( class, ctype )        (camel_object_class_is_of_type( (CamelObjectClass *)(class), (CamelType)(ctype) ))
-#endif
-
-#define CAMEL_INVALID_TYPE ((CamelType)0)
-
-#define CAMEL_OBJECT_TYPE        (camel_object_get_type ())
-
-#define CAMEL_OBJECT(obj)        (CAMEL_CHECK_CAST((obj), CAMEL_OBJECT_TYPE, CamelObject))
-#define CAMEL_OBJECT_CLASS(k)    (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_OBJECT_TYPE, CamelObjectClass))
-#define CAMEL_IS_OBJECT(o)       (CAMEL_CHECK_TYPE((o), CAMEL_OBJECT_TYPE))
-#define CAMEL_IS_OBJECT_CLASS(k) (CAMEL_CHECK_CLASS_TYPE((k), CAMEL_OBJECT_TYPE))
-
-#define CAMEL_OBJECT_GET_CLASS(o) ((CamelObjectClass *)(CAMEL_OBJECT(o))->classfuncs)
-#define CAMEL_OBJECT_GET_TYPE(o)  ((CamelType)(CAMEL_OBJECT(o))->s.type)
-
-	typedef guint32 CamelType;
-
-	typedef struct _CamelObjectShared
-	{
-		guint32 magic;
-		CamelType type;
-	}
-	CamelObjectShared;
-
-	typedef struct _CamelObjectClass
-	{
-		CamelObjectShared s;
-
-		GHashTable *event_to_preplist;
-	}
-	CamelObjectClass;
-
-	typedef struct _CamelObject
-	{
-		CamelObjectShared s;
-		guint32 ref_count:31;
-		guint32 in_event:1;
-		CamelObjectClass *classfuncs;
-		GHashTable *event_to_hooklist;
-	}
-	CamelObject;
-
-	typedef void (*CamelObjectClassInitFunc) (CamelObjectClass *);
-	typedef void (*CamelObjectClassFinalizeFunc) (CamelObjectClass *);
-	typedef void (*CamelObjectInitFunc) (CamelObject *);
-	typedef void (*CamelObjectFinalizeFunc) (CamelObject *);
-
-	typedef gboolean (*CamelObjectEventPrepFunc) (CamelObject *,
-						      gpointer);
-	typedef void (*CamelObjectEventHookFunc) (CamelObject *, gpointer,
-						  gpointer);
-
-/* The type system .... it's pretty simple..... */
-
-	void camel_type_init (void);
-	CamelType camel_type_register (CamelType parent, const gchar * name,
-				       size_t instance_size,
-				       size_t classfuncs_size,
-				       CamelObjectClassInitFunc class_init,
-				       CamelObjectClassFinalizeFunc
-				       class_finalize,
-				       CamelObjectInitFunc instance_init,
-				       CamelObjectFinalizeFunc
-				       instance_finalize);
-	CamelObjectClass *camel_type_get_global_classfuncs (CamelType type);
-	const gchar *camel_type_to_name (CamelType type);
-
-	CamelType camel_object_get_type (void);
-	CamelObject *camel_object_new (CamelType type);
-	void camel_object_ref (CamelObject * obj);
-	void camel_object_unref (CamelObject * obj);
-	CamelObject *camel_object_check_cast (CamelObject * obj,
-					      CamelType ctype);
-	CamelObjectClass *camel_object_class_check_cast (CamelObjectClass *
-							 class,
-							 CamelType ctype);
-	gboolean camel_object_is_of_type (CamelObject * obj, CamelType ctype);
-	gboolean camel_object_class_is_of_type (CamelObjectClass * class,
-						CamelType ctype);
-	gchar *camel_object_describe (CamelObject * obj);
-	void camel_object_class_declare_event (CamelObjectClass * class,
-					       const gchar * name,
-					       CamelObjectEventPrepFunc prep);
-	void camel_object_hook_event (CamelObject * obj, const gchar * name,
-				      CamelObjectEventHookFunc hook,
-				      gpointer user_data);
-	void camel_object_unhook_event (CamelObject * obj, const gchar * name,
-					CamelObjectEventHookFunc hook,
-					gpointer user_data);
-	void camel_object_trigger_event (CamelObject * obj,
-					 const gchar * name,
-					 gpointer event_data);
-
-#ifdef __cplusplus
-}
-#endif				/* __cplusplus */
-
-#endif				/* CAMEL_OBJECT_H */
diff --git a/camel/camel-op-queue.c b/camel/camel-op-queue.c
deleted file mode 100644
index 3e17222f0a..0000000000
--- a/camel/camel-op-queue.c
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-/* MT safe */
-
- 
-#include 
-#include "camel-op-queue.h"
-
-static GStaticMutex op_queue_mutex = G_STATIC_MUTEX_INIT;
-
-
-
-/**
- * camel_op_queue_new: create a new operation queue
- * 
- * Create a new operation queue. 
- *
- * Return value: the newly allcated object
- **/
-CamelOpQueue *
-camel_op_queue_new ()
-{
-	CamelOpQueue *op_queue;
-
-	op_queue = g_new (CamelOpQueue, 1);
-	op_queue->ops_tail = NULL;
-	op_queue->ops_head = NULL;
-	op_queue->service_available = TRUE;
-
-	return op_queue;
-}
-
-
-void 
-camel_op_queue_free (CamelOpQueue *op_queue)
-{
-	g_list_free (op_queue->ops_head);	
-	g_free (op_queue);
-}
-
-/**
- * camel_op_queue_push_op: Add an operation to the queue
- * @queue: queue object
- * @op: operation to add
- * 
- * Add an operation to an operation queue. 
- * The queue is a FIFO queue. 
- **/
-void
-camel_op_queue_push_op (CamelOpQueue *queue, CamelOp *op)
-{
-	g_assert (queue);
-	g_static_mutex_lock (&op_queue_mutex);
-	if (!queue->ops_tail) {
-		queue->ops_head = g_list_prepend (NULL, op);
-		queue->ops_tail = queue->ops_head;
-	} else 
-		queue->ops_head = g_list_prepend (queue->ops_head, op);	
-	g_static_mutex_unlock (&op_queue_mutex);
-}
-
-
-/**
- * camel_op_queue_pop_op: Pop the next operation pending in the queue
- * @queue: queue object
- * 
- * Pop the next operation pending in the queue.
- * 
- * Return value: 
- **/
-CamelOp *
-camel_op_queue_pop_op (CamelOpQueue *queue)
-{
-	GList *op_list;
-	CamelOp *op;
-
-	g_assert (queue);
-
-	g_static_mutex_lock (&op_queue_mutex);
-	op_list = queue->ops_tail;
-	if (!op_list) return NULL;
-
-	queue->ops_tail = queue->ops_tail->prev;
-	op = (CamelOp *)op_list->data;
-	g_static_mutex_unlock (&op_queue_mutex);
-
-	return op;
-}
-
-
-/**
- * camel_op_queue_run_next_op: run the next pending operation
- * @queue: queue object
- * 
- * Run the next pending operation in the queue.
- * 
- * Return value: TRUE if an operation was launched FALSE if there was no operation pending in the queue.
- **/
-gboolean
-camel_op_queue_run_next_op (CamelOpQueue *queue)
-{
-	CamelOp *op;
-
-	op = camel_op_queue_pop_op (queue);
-	if (!op) return FALSE;
-	
-	return FALSE;
-}
-
-/**
- * camel_op_queue_set_service_availability: set the service availability for an operation queue
- * @queue: queue object
- * @available: availability flag
- * 
- * set the service availability
- **/
-void
-camel_op_queue_set_service_availability (CamelOpQueue *queue, gboolean available)
-{
-	g_static_mutex_lock (&op_queue_mutex);
-	queue->service_available = available;
-	g_static_mutex_unlock (&op_queue_mutex);
-}
-
-/**
- * camel_op_queue_get_service_availability: determine if an operation queue service is available 
- * @queue: queue object
- * 
- * Determine if the service associated to an operation queue is available.
- * 
- * Return value: service availability.
- **/
-gboolean
-camel_op_queue_get_service_availability (CamelOpQueue *queue)
-{
-	gboolean available;
-
-	g_static_mutex_lock (&op_queue_mutex);
-	available = queue->service_available;
-	g_static_mutex_unlock (&op_queue_mutex);
-	return available;
-}
-
diff --git a/camel/camel-op-queue.h b/camel/camel-op-queue.h
deleted file mode 100644
index 49fdc152d3..0000000000
--- a/camel/camel-op-queue.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_OP_QUEUE_H
-#define CAMEL_OP_QUEUE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-
-
-typedef struct 
-{
-	GList *ops_head;
-	GList *ops_tail;
-	gboolean service_available;
-
-} CamelOpQueue;
-
-
-/* public methods */
-CamelOpQueue *camel_op_queue_new ();
-void camel_op_queue_free (CamelOpQueue *op_queue);
-void camel_op_queue_push_op (CamelOpQueue *queue, CamelOp *op);
-CamelOp *camel_op_queue_pop_op (CamelOpQueue *queue);
-gboolean camel_op_queue_run_next_op (CamelOpQueue *queue);
-gboolean camel_op_queue_get_service_availability (CamelOpQueue *queue);
-void camel_op_queue_set_service_availability (CamelOpQueue *queue, gboolean available);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_OP_QUEUE_H */
-
diff --git a/camel/camel-provider.c b/camel/camel-provider.c
deleted file mode 100644
index 9b76fc1766..0000000000
--- a/camel/camel-provider.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-provider.c: provider framework */
-
-/*
- *
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *  Jeffrey Stedfast 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-/* FIXME: Shouldn't we add a version number to providers ? */
-
-#include "config.h"
-#include "camel-provider.h"
-#include "camel-exception.h"
-#include "hash-table-utils.h"
-
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-char *camel_provider_type_name[CAMEL_NUM_PROVIDER_TYPES] = {
-	"store",
-	"transport"
-};
-
-/**
- * camel_provider_init:
- *
- * Initialize the Camel provider system by reading in the .urls
- * files in the provider directory and creating a hash table mapping
- * URLs to module names.
- *
- * A .urls file has the same initial prefix as the shared library it
- * correspond to, and consists of a series of lines containing the URL
- * protocols that that library handles.
- *
- * Return value: a hash table mapping URLs to module names
- **/
-GHashTable *
-camel_provider_init (void)
-{
-	GHashTable *providers;
-	DIR *dir;
-	struct dirent *d;
-	char *p, *name, buf[80];
-	FILE *f;
-
-	providers = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-
-	dir = opendir (CAMEL_PROVIDERDIR);
-	if (!dir) {
-		g_error ("Could not open camel provider directory: %s",
-			 g_strerror (errno));
-		return NULL;
-	}
-
-	while ((d = readdir (dir))) {
-		p = strchr (d->d_name, '.');
-		if (!p || strcmp (p, ".urls") != 0)
-			continue;
-
-		name = g_strdup_printf ("%s/%s", CAMEL_PROVIDERDIR, d->d_name);
-		f = fopen (name, "r");
-		if (!f) {
-			g_warning ("Could not read provider info file %s: %s",
-				   name, g_strerror (errno));
-			g_free (name);
-			continue;
-		}
-
-		p = strrchr (name, '.');
-		strcpy (p, ".so");
-		while ((fgets (buf, sizeof (buf), f))) {
-			buf[sizeof (buf) - 1] = '\0';
-			p = strchr (buf, '\n');
-			if (p)
-				*p = '\0';
-
-			g_hash_table_insert (providers, g_strdup (buf), name);
-		}
-		fclose (f);
-	}
-
-	closedir (dir);
-	return providers;
-}
-
-/**
- * camel_provider_load:
- * @session: the current session
- * @path: the path to a shared library
- * @ex: a CamelException
- *
- * Loads the provider at @path, and calls its initialization function,
- * passing @session as an argument. The provider should then register
- * itself with @session.
- **/ 
-void
-camel_provider_load (CamelSession *session, const char *path, CamelException *ex)
-{
-	GModule *module;
-	CamelProvider *(*camel_provider_module_init) ();
-
-	if (!g_module_supported ()) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not load %s: Module loading "
-				      "not supported on this system.",
-				      path);
-		return;
-	}
-
-	module = g_module_open (path, 0);
-	if (!module) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not load %s: %s",
-				      path, g_module_error ());
-		return;
-	}
-
-	if (!g_module_symbol (module, "camel_provider_module_init",
-			      (gpointer *)&camel_provider_module_init)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not load %s: No initialization "
-				      "routine in module.", path);
-		g_module_close (module);
-		return;
-	}
-
-	camel_provider_module_init (session);
-}
diff --git a/camel/camel-provider.h b/camel/camel-provider.h
deleted file mode 100644
index 00375029db..0000000000
--- a/camel/camel-provider.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-provider.h :  provider definition  */
-
-/*
- *
- * Authors:
- *  Bertrand Guiheneuf 
- *  Jeffrey Stedfast 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_PROVIDER_H
-#define CAMEL_PROVIDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_PROVIDER(obj) ((CamelProvider *)(obj))
-
-typedef enum {
-	CAMEL_PROVIDER_STORE,
-	CAMEL_PROVIDER_TRANSPORT,
-	CAMEL_NUM_PROVIDER_TYPES
-} CamelProviderType;
-
-extern char *camel_provider_type_name[CAMEL_NUM_PROVIDER_TYPES];
-
-/* _IS_SOURCE means the user can get mail from there.
- * _IS_STORAGE means the user can read mail from there.
- */
-#define CAMEL_PROVIDER_IS_REMOTE	(1 << 0)
-#define CAMEL_PROVIDER_IS_SOURCE	(1 << 1)
-#define CAMEL_PROVIDER_IS_STORAGE	(1 << 2)
-
-typedef struct {
-	/* Provider name used in CamelURLs. */
-	char *protocol;
-
-	/* Provider name as used by people. (May be the same as protocol) */
-	char *name;
-
-	/* Description of the provider. A novice user should be able
-	 * to read this description, and the information provided by
-	 * an ISP, IS department, etc, and determine whether or not
-	 * this provider is relevant to him, and if so, which
-	 * information goes with it.
-	 */
-	char *description;
-
-	/* The category of message that this provider works with.
-	 * (evolution-mail will only list a provider in the store/transport
-	 * config dialogs if its domain is "mail".)
-	 */
-	char *domain;
-
-	int flags;
-
-	CamelType object_types [CAMEL_NUM_PROVIDER_TYPES];
-
-	GHashTable *service_cache;
-	
-} CamelProvider;
-
-GHashTable *camel_provider_init (void);
-void camel_provider_load (CamelSession *session, const char *path, CamelException *ex);
-
-/* This is defined by each module, not by camel-provider.c. */
-void camel_provider_module_init (CamelSession *session);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_PROVIDER_H */
diff --git a/camel/camel-seekable-stream.c b/camel/camel-seekable-stream.c
deleted file mode 100644
index c4ca950baa..0000000000
--- a/camel/camel-seekable-stream.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include 
-#include "camel-seekable-stream.h"
-
-static CamelStreamClass *parent_class = NULL;
-
-/* Returns the class for a CamelSeekableStream */
-#define CSS_CLASS(so) CAMEL_SEEKABLE_STREAM_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static off_t seek        (CamelSeekableStream *stream, off_t offset,
-			  CamelStreamSeekPolicy policy);
-static off_t stream_tell (CamelSeekableStream *stream);
-static int   reset       (CamelStream *stream);
-static int   set_bounds  (CamelSeekableStream *stream, off_t start, off_t end);
-
-static void
-camel_seekable_stream_class_init (CamelSeekableStreamClass *camel_seekable_stream_class)
-{
-	CamelStreamClass *camel_stream_class =
-		CAMEL_STREAM_CLASS (camel_seekable_stream_class);
-
-	parent_class = CAMEL_STREAM_CLASS( camel_type_get_global_classfuncs( CAMEL_STREAM_TYPE ) );
-
-	/* seekable stream methods */
-	camel_seekable_stream_class->seek = seek;
-	camel_seekable_stream_class->tell = stream_tell;
-	camel_seekable_stream_class->set_bounds = set_bounds;
-
-	/* camel stream methods overload */
-	camel_stream_class->reset = reset;
-}
-
-static void
-camel_seekable_stream_init (void *o)
-{
-	CamelSeekableStream *stream = (CamelSeekableStream *)o;
-
-	stream->bound_start = 0;
-	stream->bound_end = CAMEL_STREAM_UNBOUND;
-}
-
-CamelType
-camel_seekable_stream_get_type (void)
-{
-	static CamelType camel_seekable_stream_type = CAMEL_INVALID_TYPE;
-
-	if (camel_seekable_stream_type == CAMEL_INVALID_TYPE) {
-		camel_seekable_stream_type = camel_type_register( CAMEL_STREAM_TYPE,
-								  "CamelSeekableStream",
-								  sizeof( CamelSeekableStream ),
-								  sizeof( CamelSeekableStreamClass ),
-								  (CamelObjectClassInitFunc) camel_seekable_stream_class_init,
-								  NULL,
-								  (CamelObjectInitFunc) camel_seekable_stream_init,
-								  NULL );
-	}
-
-	return camel_seekable_stream_type;
-}
-
-
-static off_t
-seek (CamelSeekableStream *stream, off_t offset,
-      CamelStreamSeekPolicy policy)
-{
-	g_warning ("CamelSeekableStream::seek called on default "
-		   "implementation\n");
-	return -1;
-}
-
-/**
- * camel_stream_seek:
- * @stream: a CamelStream object.
- * @offset: offset value
- * @policy: what to do with the offset
- *
- * Seek to the specified position in @stream.
- *
- * If @policy is CAMEL_STREAM_SET, seeks to @offset.
- *
- * If @policy is CAMEL_STREAM_CUR, seeks to the current position plus
- * @offset.
- *
- * If @policy is CAMEL_STREAM_END, seeks to the end of the stream plus
- * @offset.
- *
- * Regardless of @policy, the stream's final position will be clamped
- * to the range specified by its lower and upper bounds, and the
- * stream's eos state will be updated.
- *
- * Return value: new position, -1 if operation failed.
- **/
-off_t
-camel_seekable_stream_seek (CamelSeekableStream *stream, off_t offset,
-			    CamelStreamSeekPolicy policy)
-{
-	g_return_val_if_fail (CAMEL_IS_SEEKABLE_STREAM (stream), -1);
-
-	return CSS_CLASS (stream)->seek (stream, offset, policy);
-}
-
-
-static off_t
-stream_tell (CamelSeekableStream *stream)
-{
-	return stream->position;
-}
-
-/**
- * camel_seekable_stream_tell:
- * @stream: seekable stream object
- *
- * Get the current position of a seekable stream.
- *
- * Return value: the position.
- **/
-off_t
-camel_seekable_stream_tell (CamelSeekableStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_SEEKABLE_STREAM (stream), -1);
-
-	return CSS_CLASS (stream)->tell (stream);
-}
-
-static int
-set_bounds (CamelSeekableStream *stream, off_t start, off_t end)
-{
-	/* store the bounds */
-	stream->bound_start = start;
-	stream->bound_end = end;
-
-	if (start > stream->position)
-		return camel_seekable_stream_seek (stream, start, CAMEL_STREAM_SET);
-
-	return 0;
-}
-
-/**
- * camel_seekable_stream_set_bounds:
- * @stream: a seekable stream
- * @start: the first valid position
- * @end: the first invalid position, or CAMEL_STREAM_UNBOUND
- *
- * Set the range of valid data this stream is allowed to cover.  If
- * there is to be no @end value, then @end should be set to
- * #CAMEL_STREAM_UNBOUND.
- *
- * Return value: -1 on error.
- **/
-int
-camel_seekable_stream_set_bounds (CamelSeekableStream *stream,
-				  off_t start, off_t end)
-{
-	g_return_val_if_fail (CAMEL_IS_SEEKABLE_STREAM (stream), -1);
-	g_return_val_if_fail (end == CAMEL_STREAM_UNBOUND || end >= start, -1);
-
-	return CSS_CLASS (stream)->set_bounds (stream, start, end);
-}
-
-/* a default implementation of reset for seekable streams */
-static int
-reset (CamelStream *stream)
-{
-	CamelSeekableStream *seekable_stream;
-
-	seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-
-	return camel_seekable_stream_seek (seekable_stream,
-					   seekable_stream->bound_start,
-					   CAMEL_STREAM_SET);
-}
-
-
-
-
-
-
diff --git a/camel/camel-seekable-stream.h b/camel/camel-seekable-stream.h
deleted file mode 100644
index 0fc67d59f8..0000000000
--- a/camel/camel-seekable-stream.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.h :stream based on unix filesystem */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_SEEKABLE_STREAM_H
-#define CAMEL_SEEKABLE_STREAM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-
-#define CAMEL_SEEKABLE_STREAM_TYPE     (camel_seekable_stream_get_type ())
-#define CAMEL_SEEKABLE_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SEEKABLE_STREAM_TYPE, CamelSeekableStream))
-#define CAMEL_SEEKABLE_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SEEKABLE_STREAM_TYPE, CamelSeekableStreamClass))
-#define CAMEL_IS_SEEKABLE_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SEEKABLE_STREAM_TYPE))
-
-
-typedef enum
-{
-	CAMEL_STREAM_SET = SEEK_SET,
-	CAMEL_STREAM_CUR = SEEK_CUR,
-	CAMEL_STREAM_END = SEEK_END
-} CamelStreamSeekPolicy;
-
-#define CAMEL_STREAM_UNBOUND (~0)
-
-struct _CamelSeekableStream
-{
-	CamelStream parent_object;
-
-	off_t position;		/* current postion in the stream */
-	off_t bound_start;	/* first valid position */
-	off_t bound_end;	/* first invalid position */
-};
-
-typedef struct {
-	CamelStreamClass parent_class;
-
-	/* Virtual methods */
-	off_t (*seek)       (CamelSeekableStream *stream, off_t offset,
-			     CamelStreamSeekPolicy policy);
-	off_t (*tell)	    (CamelSeekableStream *stream);
-	int  (*set_bounds)  (CamelSeekableStream *stream,
-			     off_t start, off_t end);
-} CamelSeekableStreamClass;
-
-/* Standard Camel function */
-CamelType camel_seekable_stream_get_type (void);
-
-/* public methods */
-off_t    camel_seekable_stream_seek            (CamelSeekableStream *stream, off_t offset,
-						CamelStreamSeekPolicy policy);
-off_t	 camel_seekable_stream_tell    	       (CamelSeekableStream *stream);
-int	 camel_seekable_stream_set_bounds      (CamelSeekableStream *, off_t start, off_t end);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SEEKABLE_STREAM_H */
diff --git a/camel/camel-seekable-substream.c b/camel/camel-seekable-substream.c
deleted file mode 100644
index d62fc3bba4..0000000000
--- a/camel/camel-seekable-substream.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.c : file system based stream
- *
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include "camel-seekable-substream.h"
-
-static CamelSeekableStreamClass *parent_class = NULL;
-
-/* Returns the class for a CamelSeekableSubStream */
-#define CSS_CLASS(so) CAMEL_SEEKABLE_SUBSTREAM_CLASS (CAMEL_OBJECT(so)->klass)
-
-static	int	 stream_read  (CamelStream *stream, char *buffer, unsigned int n);
-static	int	 stream_write (CamelStream *stream, const char *buffer, unsigned int n);
-static	int	 stream_flush (CamelStream *stream);
-static	int	 stream_close (CamelStream *stream);
-static	gboolean eos	      (CamelStream *stream);
-static	off_t	 stream_seek  (CamelSeekableStream *stream, off_t offset,
-			       CamelStreamSeekPolicy policy);
-
-static void
-camel_seekable_substream_class_init (CamelSeekableSubstreamClass *camel_seekable_substream_class)
-{
-	CamelSeekableStreamClass *camel_seekable_stream_class =
-		CAMEL_SEEKABLE_STREAM_CLASS (camel_seekable_substream_class);
-	CamelStreamClass *camel_stream_class =
-		CAMEL_STREAM_CLASS (camel_seekable_substream_class);
-
-	parent_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_type_get_global_classfuncs (camel_seekable_stream_get_type ()));
-
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->close = stream_close;
-	camel_stream_class->eos = eos;
-
-	camel_seekable_stream_class->seek = stream_seek;
-
-}
-
-static void
-camel_seekable_substream_finalize (CamelObject *object)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (object);
-
-	if (seekable_substream->parent_stream)
-		camel_object_unref (CAMEL_OBJECT (seekable_substream->parent_stream));
-}
-
-
-CamelType
-camel_seekable_substream_get_type (void)
-{
-	static CamelType camel_seekable_substream_type = CAMEL_INVALID_TYPE;
-
-	if (camel_seekable_substream_type == CAMEL_INVALID_TYPE) {
-		camel_seekable_substream_type = camel_type_register (camel_seekable_stream_get_type (), "CamelSeekableSubstream",
-								     sizeof (CamelSeekableSubstream),
-								     sizeof (CamelSeekableSubstreamClass),
-								     (CamelObjectClassInitFunc) camel_seekable_substream_class_init,
-								     NULL,
-								     NULL,
-								     (CamelObjectFinalizeFunc) camel_seekable_substream_finalize);
-	}
-
-	return camel_seekable_substream_type;
-}
-
-/**
- * camel_seekable_substream_new_with_seekable_stream_and_bounds:
- * @parent_stream: a seekable parent stream
- * @inf_bound: a lower bound
- * @sup_bound: an upper bound
- *
- * Creates a new CamelSeekableSubstream that references the portion
- * of @parent_stream from @inf_bound to @sup_bound. (If @sup_bound is
- * #CAMEL_STREAM_UNBOUND, it references to the end of stream, even if
- * the stream grows.)
- *
- * While the substream is open, the caller cannot assume anything about
- * the current position of @parent_stream. After the substream has been
- * closed, @parent_stream will stabilize again.
- *
- * Return value: the substream
- **/
-CamelStream *
-camel_seekable_substream_new_with_seekable_stream_and_bounds (CamelSeekableStream *parent_stream,
-							      off_t start, off_t end)
-{
-	CamelSeekableSubstream *seekable_substream;
-
-	g_return_val_if_fail (CAMEL_IS_SEEKABLE_STREAM (parent_stream), NULL);
-
-	/* Create the seekable substream. */
-	seekable_substream = CAMEL_SEEKABLE_SUBSTREAM (camel_object_new (camel_seekable_substream_get_type ()));
-
-	/* Initialize it. */
-	seekable_substream->parent_stream = parent_stream;
-	camel_object_ref (CAMEL_OBJECT (parent_stream));
-
-	/* Set the bound of the substream. We can ignore any possible error
-	 * here, because if we fail to seek now, it will try again later.
-	 */
-	camel_seekable_stream_set_bounds ((CamelSeekableStream *)seekable_substream, start, end);
-
-	return CAMEL_STREAM (seekable_substream);
-}
-
-static gboolean
-parent_reset (CamelSeekableSubstream *seekable_substream, CamelSeekableStream *parent)
-{
-	CamelSeekableStream *seekable_stream =
-		CAMEL_SEEKABLE_STREAM (seekable_substream);
-
-	if (camel_seekable_stream_tell (parent) == seekable_stream->position)
-		return TRUE;
-
-	return camel_seekable_stream_seek (parent, seekable_stream->position, CAMEL_STREAM_SET)
-		== seekable_stream->position;
-}
-
-static int
-stream_read (CamelStream *stream, char *buffer, unsigned int n)
-{
-	CamelSeekableStream *parent;
-	CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (stream);
-	int v;
-
-	if (n == 0)
-		return 0;
-
-	parent = seekable_substream->parent_stream;
-
-	/* Go to our position in the parent stream. */
-	if (!parent_reset (seekable_substream, parent)) {
-		stream->eos = TRUE;
-		return 0;
-	}
-
-	/* Compute how many bytes should be read. */
-	if (seekable_stream->bound_end != CAMEL_STREAM_UNBOUND)
-		n = MIN (seekable_stream->bound_end -  seekable_stream->position, n);
-
-	if (n == 0) {
-		stream->eos = TRUE;
-		return 0;
-	}
-
-	v = camel_stream_read (CAMEL_STREAM (parent), buffer, n);
-
-	/* ignore <0 - its an error, let the caller deal */
-	if (v > 0)
-		seekable_stream->position += v;
-
-	return v;
-}
-
-static int
-stream_write (CamelStream *stream, const char *buffer, unsigned int n)
-{
-	/* NOT VALID ON SEEKABLE SUBSTREAM */
-	/* Well, its entirely valid, just not implemented */
-	g_warning ("CamelSeekableSubstream:: seekable substream doesn't "
-		   "have a write method yet?\n");
-	return -1;
-}
-
-static int
-stream_flush (CamelStream *stream)
-{
-	/* NOT VALID ON SEEKABLE SUBSTREAM */
-	g_warning ("CamelSeekableSubstream:: seekable substream doesn't "
-		   "have a flush method\n");
-	return -1;
-}
-
-static int
-stream_close (CamelStream *stream)
-{
-	/* we dont really want to close the substream ... */
-	return 0;
-}
-
-static gboolean
-eos (CamelStream *stream)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (stream);
-	CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-	CamelSeekableStream *parent;
-	gboolean eos;
-
-	if (stream->eos)
-		eos = TRUE;
-	else {
-		parent = seekable_substream->parent_stream;
-		if (!parent_reset (seekable_substream, parent))
-			return TRUE;
-
-		eos = camel_stream_eos (CAMEL_STREAM (parent));
-		if (!eos && (seekable_stream->bound_end != CAMEL_STREAM_UNBOUND)) {
-			eos = seekable_stream->position >= seekable_stream->bound_end;
-		}
-	}
-
-	return eos;
-}
-
-static off_t
-stream_seek (CamelSeekableStream *seekable_stream, off_t offset,
-	     CamelStreamSeekPolicy policy)
-{
-	CamelSeekableSubstream *seekable_substream =
-		CAMEL_SEEKABLE_SUBSTREAM (seekable_stream);
-	CamelStream *stream = CAMEL_STREAM (seekable_stream);
-	off_t real_offset = 0;
-
-	stream->eos = FALSE;
-
-	switch (policy) {
-	case CAMEL_STREAM_SET:
-		real_offset = offset;
-		break;
-
-	case CAMEL_STREAM_CUR:
-		real_offset = seekable_stream->position + offset;
-		break;
-
-	case CAMEL_STREAM_END:
-		real_offset = camel_seekable_stream_seek (seekable_substream->parent_stream,
-							  offset,
-							  CAMEL_STREAM_END);
-		if (real_offset == -1)
-			return -1;
-		break;
-	}
-
-	if (seekable_stream->bound_end != CAMEL_STREAM_UNBOUND)
-		real_offset = MIN (real_offset, seekable_stream->bound_end);
-
-	if (real_offsetbound_start)
-		real_offset = seekable_stream->bound_start;
-
-	seekable_stream->position = real_offset;
-	return real_offset;
-}
diff --git a/camel/camel-seekable-substream.h b/camel/camel-seekable-substream.h
deleted file mode 100644
index 6ac5588a42..0000000000
--- a/camel/camel-seekable-substream.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-seekable-substream.h: stream that piggybacks on another stream */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_SEEKABLE_SUBSTREAM_H
-#define CAMEL_SEEKABLE_SUBSTREAM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-#define CAMEL_SEEKABLE_SUBSTREAM_TYPE       (camel_seekable_substream_get_type ())
-#define CAMEL_SEEKABLE_SUBSTREAM(obj)       (CAMEL_CHECK_CAST((obj), CAMEL_SEEKABLE_SUBSTREAM_TYPE, CamelSeekableSubstream))
-#define CAMEL_SEEKABLE_SUBSTREAM_CLASS(k)   (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SEEKABLE_SUBSTREAM_TYPE, CamelSeekableSubstreamClass))
-#define CAMEL_IS_SEEKABLE_SUBSTREAM(o)      (CAMEL_CHECK_TYPE((o), CAMEL_SEEKABLE_SUBSTREAM_TYPE))
-
-struct _CamelSeekableSubstream
-{
-	CamelSeekableStream parent_object;
-
-	/*  --**-- Private fields --**--  */
-	CamelSeekableStream *parent_stream;
-};
-
-typedef struct {
-	CamelSeekableStreamClass parent_class;
-
-} CamelSeekableSubstreamClass;
-
-/* Standard Camel function */
-CamelType camel_seekable_substream_get_type (void);
-
-/* public methods */
-
-/* obtain a new seekable substream */
-CamelStream *
-camel_seekable_substream_new_with_seekable_stream_and_bounds (CamelSeekableStream    *parent_stream,
-							      off_t start, off_t end);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SEEKABLE_SUBSTREAM_H */
diff --git a/camel/camel-service.c b/camel/camel-service.c
deleted file mode 100644
index 5631b6caf5..0000000000
--- a/camel/camel-service.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-service.c : Abstract class for an email service */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include "camel-service.h"
-#include "camel-session.h"
-#include "camel-exception.h"
-
-#include 
-#include 
-
-static CamelObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelService */
-#define CSERV_CLASS(so) CAMEL_SERVICE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static gboolean service_connect(CamelService *service, CamelException *ex);
-static gboolean service_disconnect(CamelService *service, CamelException *ex);
-static gboolean is_connected (CamelService *service);
-static GList *  query_auth_types (CamelService *service, CamelException *ex);
-static void     free_auth_types (CamelService *service, GList *authtypes);
-static char *   get_name (CamelService *service, gboolean brief);
-static gboolean check_url (CamelService *service, CamelException *ex);
-
-
-static void
-camel_service_class_init (CamelServiceClass *camel_service_class)
-{
-	parent_class = camel_type_get_global_classfuncs (CAMEL_OBJECT_TYPE);
-
-	/* virtual method definition */
-	camel_service_class->connect = service_connect;
-	camel_service_class->disconnect = service_disconnect;
-	camel_service_class->is_connected = is_connected;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->free_auth_types = free_auth_types;
-	camel_service_class->get_name = get_name;
-}
-
-static void
-camel_service_finalize (CamelObject *object)
-{
-	CamelService *camel_service = CAMEL_SERVICE (object);
-
-	if (camel_service->url)
-		camel_url_free (camel_service->url);
-	if (camel_service->session)
-		camel_object_unref (CAMEL_OBJECT (camel_service->session));
-}
-
-
-
-CamelType
-camel_service_get_type (void)
-{
-	static CamelType camel_service_type = CAMEL_INVALID_TYPE;
-
-	if (camel_service_type == CAMEL_INVALID_TYPE) {
-		camel_service_type = camel_type_register( CAMEL_OBJECT_TYPE, "CamelService",
-							  sizeof (CamelService),
-							  sizeof (CamelServiceClass),
-							  (CamelObjectClassInitFunc) camel_service_class_init,
-							  NULL,
-							  NULL,
-							  camel_service_finalize );
-	}
-
-	return camel_service_type;
-}
-
-static gboolean
-check_url (CamelService *service, CamelException *ex)
-{
-	char *url_string;
-
-	if (service->url_flags & CAMEL_SERVICE_URL_NEED_USER &&
-	    (service->url->user == NULL || service->url->user[0] == '\0')) {
-		url_string = camel_url_to_string (service->url, FALSE);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL '%s' needs a username component",
-				      url_string);
-		g_free (url_string);
-		return FALSE;
-	} else if (service->url_flags & CAMEL_SERVICE_URL_NEED_HOST &&
-		   (service->url->host == NULL || service->url->host[0] == '\0')) {
-		url_string = camel_url_to_string (service->url, FALSE);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL '%s' needs a host component",
-				      url_string);
-		g_free (url_string);
-		return FALSE;
-	} else if (service->url_flags & CAMEL_SERVICE_URL_NEED_PATH &&
-		   (service->url->path == NULL || service->url->path[0] == '\0')) {
-		url_string = camel_url_to_string (service->url, FALSE);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL '%s' needs a path component",
-				      url_string);
-		g_free (url_string);
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-/**
- * camel_service_new: create a new CamelService or subtype
- * @type: the CamelType of the class to create
- * @session: the session for the service
- * @url: the default URL for the service (may be NULL)
- * @ex: a CamelException
- *
- * Creates a new CamelService (or one of its subtypes), initialized
- * with the given parameters.
- *
- * Return value: the CamelService, or NULL.
- **/
-CamelService *
-camel_service_new (CamelType type, CamelSession *session, CamelURL *url,
-		   CamelException *ex)
-{
-	CamelService *service;
-
-	g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
-
-	service = CAMEL_SERVICE (camel_object_new (type));
-	service->url = url;
-	if (!url->empty && !check_url (service, ex)) {
-		camel_object_unref (CAMEL_OBJECT (service));
-		return NULL;
-	}
-
-	service->session = session;
-	camel_object_ref (CAMEL_OBJECT (session));
-
-	return service;
-}
-
-
-static gboolean
-service_connect (CamelService *service, CamelException *ex)
-{
-	service->connected = TRUE;
-	return TRUE;
-}
-
-/**
- * camel_service_connect:
- * @service: CamelService object
- * @ex: a CamelException
- *
- * Connect to the service using the parameters it was initialized
- * with.
- *
- * Return value: whether or not the connection succeeded
- **/
-gboolean
-camel_service_connect (CamelService *service, CamelException *ex)
-{
-	g_return_val_if_fail (CAMEL_IS_SERVICE (service), FALSE);
-	g_return_val_if_fail (service->session != NULL, FALSE);
-	g_return_val_if_fail (service->url != NULL, FALSE);
-
-	return CSERV_CLASS (service)->connect (service, ex);
-}
-
-
-static gboolean
-service_disconnect (CamelService *service, CamelException *ex)
-{
-	service->connected = FALSE;
-
-	return TRUE;
-}
-
-/**
- * camel_service_disconnect:
- * @service: CamelService object
- * @ex: a CamelException
- *
- * Disconnect from the service.
- *
- * Return value: whether or not the disconnection succeeded without
- * errors. (Consult @ex if %FALSE.)
- **/
-gboolean
-camel_service_disconnect (CamelService *service, CamelException *ex)
-{
-	return CSERV_CLASS (service)->disconnect (service, ex);
-}
-
-
-static gboolean
-is_connected (CamelService *service)
-{
-	return service->connected;
-}
-
-
-/**
- * camel_service_is_connected:
- * @service: object to test
- *
- * Return value: whether or not the service is connected
- **/
-gboolean
-camel_service_is_connected (CamelService *service)
-{
-	return CSERV_CLASS (service)->is_connected (service);
-}
-
-
-/**
- * camel_service_get_url:
- * @service: a service
- *
- * Returns the URL representing a service. The returned URL must be
- * freed when it is no longer needed. For security reasons, this
- * routine does not return the password.
- *
- * Return value: the url name
- **/
-char *
-camel_service_get_url (CamelService *service)
-{
-	return camel_url_to_string(service->url, FALSE);
-}
-
-
-static char *
-get_name (CamelService *service, gboolean brief)
-{
-	g_warning ("CamelService::get_name not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (service)));
-	return "???";
-}		
-
-/**
- * camel_service_get_name:
- * @service: the service
- * @brief: whether or not to use a briefer form
- *
- * This gets the name of the service in a "friendly" (suitable for
- * humans) form. If @brief is %TRUE, this should be a brief description
- * such as for use in the folder tree. If @brief is %FALSE, it should
- * be a more complete and mostly unambiguous description.
- *
- * Return value: the description, which the caller must free.
- **/
-char *
-camel_service_get_name (CamelService *service, gboolean brief)
-{
-	g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
-	g_return_val_if_fail (service->url, NULL);
-
-	return CSERV_CLASS (service)->get_name (service, brief);
-}
-
-
-/**
- * camel_service_get_session:
- * @service: a service
- *
- * Returns the CamelSession associated with the service.
- *
- * Return value: the session
- **/
-CamelSession *
-camel_service_get_session (CamelService *service)
-{
-	return service->session;
-}
-
-
-GList *
-query_auth_types (CamelService *service, CamelException *ex)
-{
-	return NULL;
-}
-
-/**
- * camel_service_query_auth_types:
- * @service: a CamelService
- * @ex: a CamelException
- *
- * This is used by the mail source wizard to get the list of
- * authentication types supported by the protocol, and information
- * about them.
- *
- * This may be called on a service with or without an associated URL.
- * If there is no URL, the routine must return a generic answer. If
- * the service does have a URL, the routine SHOULD connect to the
- * server and query what authentication mechanisms it supports. If
- * it cannot do that for any reason, it should set @ex accordingly.
- *
- * Return value: a list of CamelServiceAuthType records. The caller
- * must free the list by calling camel_service_free_auth_types when
- * it is done.
- **/
-GList *
-camel_service_query_auth_types (CamelService *service, CamelException *ex)
-{
-	return CSERV_CLASS (service)->query_auth_types (service, ex);
-}
-
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
-	;
-}
-
-/**
- * camel_service_free_auth_types:
- * @service: the service
- * @authtypes: the list of authtypes
- *
- * This frees the data allocated by camel_service_query_auth_types().
- **/
-void
-camel_service_free_auth_types (CamelService *service, GList *authtypes)
-{
-	CSERV_CLASS (service)->free_auth_types (service, authtypes);
-}
-
-
-/* URL utility routines */
-
-/**
- * camel_service_gethost:
- * @service: a CamelService
- * @ex: a CamelException
- *
- * This is a convenience function to do a gethostbyname on the host
- * for the service's URL.
- *
- * Return value: a (statically-allocated) hostent.
- **/
-struct hostent *
-camel_service_gethost (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	char *hostname;
-
-	if (service->url->host)
-		hostname = service->url->host;
-	else
-		hostname = "localhost";
-	h = gethostbyname (hostname);
-	if (!h) {
-		extern int h_errno;
-
-		if (h_errno == HOST_NOT_FOUND || h_errno == NO_DATA) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-					      "No such host %s.", hostname);
-		} else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      "Temporarily unable to look up "
-					      "hostname %s.", hostname);
-		}
-		return NULL;
-	}
-
-	return h;
-}
diff --git a/camel/camel-service.h b/camel/camel-service.h
deleted file mode 100644
index 50f0c2d4b4..0000000000
--- a/camel/camel-service.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-service.h : Abstract class for an email service */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_SERVICE_H
-#define CAMEL_SERVICE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-
-#define CAMEL_SERVICE_TYPE     (camel_service_get_type ())
-#define CAMEL_SERVICE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SERVICE_TYPE, CamelService))
-#define CAMEL_SERVICE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SERVICE_TYPE, CamelServiceClass))
-#define CAMEL_IS_SERVICE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SERVICE_TYPE))
-
-
-struct _CamelService {
-	CamelObject parent_object;
-
-	CamelSession *session;
-	gboolean connected;
-	CamelURL *url;
-	int url_flags;
-};
-
-
-typedef struct {
-	CamelObjectClass parent_class;
-
-	gboolean  (*connect)           (CamelService *service, 
-					CamelException *ex);
-	gboolean  (*disconnect)        (CamelService *service, 
-					CamelException *ex);
-
-	gboolean  (*is_connected)      (CamelService *service);
-
-	GList *   (*query_auth_types)  (CamelService *service,
-					CamelException *ex);
-	void      (*free_auth_types)   (CamelService *service,
-					GList *authtypes);
-
-	char *    (*get_name)          (CamelService *service,
-					gboolean brief);
-
-} CamelServiceClass;
-
-
-
-/* Flags for url_flags. "ALLOW" means the config dialog will let
- * the user configure it. "NEED" implies "ALLOW" but means the user
- * must configure it. Service code can assume that any url part
- * for which it has set the NEED flag will be set when the service
- * is created.
- */
-#define CAMEL_SERVICE_URL_ALLOW_USER	 (1 << 0)
-#define CAMEL_SERVICE_URL_ALLOW_AUTH	 (1 << 1)
-#define CAMEL_SERVICE_URL_ALLOW_PASSWORD (1 << 2)
-#define CAMEL_SERVICE_URL_ALLOW_HOST	 (1 << 3)
-#define CAMEL_SERVICE_URL_ALLOW_PORT	 (1 << 4)
-#define CAMEL_SERVICE_URL_ALLOW_PATH	 (1 << 5)
-
-#define CAMEL_SERVICE_URL_NEED_USER	 (1 << 6 | 1 << 0)
-#define CAMEL_SERVICE_URL_NEED_AUTH	 (1 << 7 | 1 << 1)
-#define CAMEL_SERVICE_URL_NEED_PASSWORD	 (1 << 8 | 1 << 2)
-#define CAMEL_SERVICE_URL_NEED_HOST	 (1 << 9 | 1 << 3)
-#define CAMEL_SERVICE_URL_NEED_PORT	 (1 << 10 | 1 << 4)
-#define CAMEL_SERVICE_URL_NEED_PATH	 (1 << 11 | 1 << 5)
-
-
-/* query_auth_types returns a GList of these */
-typedef struct {
-	char *name, *description, *authproto;
-	gboolean need_password;
-} CamelServiceAuthType;
-
-
-/* public methods */
-CamelService *      camel_service_new                (CamelType type, 
-						      CamelSession *session,
-						      CamelURL *url, 
-						      CamelException *ex);
-
-gboolean            camel_service_connect            (CamelService *service, 
-						      CamelException *ex);
-gboolean            camel_service_disconnect         (CamelService *service, 
-                                                      CamelException *ex);
-gboolean            camel_service_is_connected       (CamelService *service);
-
-char *              camel_service_get_url            (CamelService *service);
-char *              camel_service_get_name           (CamelService *service,
-						      gboolean brief);
-CamelSession *      camel_service_get_session        (CamelService *service);
-
-GList *             camel_service_query_auth_types   (CamelService *service,
-						      CamelException *ex);
-void                camel_service_free_auth_types    (CamelService *service,
-						      GList *authtypes);
-
-/* convenience functions */
-struct hostent *    camel_service_gethost            (CamelService *service,
-						      CamelException *ex);
-
-
-/* Standard Camel function */
-CamelType camel_service_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SERVICE_H */
-
diff --git a/camel/camel-session.c b/camel/camel-session.c
deleted file mode 100644
index f9f0584294..0000000000
--- a/camel/camel-session.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-session.c : Abstract class for an email session */
-
-/*
- *
- * Author:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *  Jeffrey Stedfast 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include 
-#include "camel-session.h"
-#include "camel-store.h"
-#include "camel-transport.h"
-#include "camel-exception.h"
-#include "string-utils.h"
-#include "camel-url.h"
-#include "hash-table-utils.h"
-
-static CamelObjectClass *parent_class;
-
-static void
-camel_session_init (CamelSession *session)
-{
-	session->modules = camel_provider_init ();
-	session->providers = g_hash_table_new (g_strcase_hash, g_strcase_equal);
-}
-
-static gboolean
-camel_session_destroy_provider (gpointer key, gpointer value, gpointer user_data)
-{
-	CamelProvider *prov = (CamelProvider *)value;
-
-	g_hash_table_destroy (prov->service_cache);
-
-	return TRUE;
-}
-
-static void
-camel_session_finalise (CamelObject *o)
-{
-	CamelSession *session = (CamelSession *)o;
-
-	g_hash_table_foreach_remove (session->providers,
-				     camel_session_destroy_provider, NULL);
-	g_hash_table_destroy (session->providers);
-}
-
-static void
-camel_session_class_init (CamelSessionClass *camel_session_class)
-{
-	parent_class = camel_type_get_global_classfuncs (camel_object_get_type ());
-}
-
-CamelType
-camel_session_get_type (void)
-{
-	static CamelType camel_session_type = CAMEL_INVALID_TYPE;
-
-	if (camel_session_type == CAMEL_INVALID_TYPE) {
-		camel_session_type = camel_type_register (camel_object_get_type (), "CamelSession",
-							  sizeof (CamelSession),
-							  sizeof (CamelSessionClass),
-							  (CamelObjectClassInitFunc) camel_session_class_init,
-							  NULL,
-							  (CamelObjectInitFunc) camel_session_init,
-							  (CamelObjectFinalizeFunc) camel_session_finalise);
-	}
-
-	return camel_session_type;
-}
-
-
-CamelSession *
-camel_session_new (CamelAuthCallback authenticator,
-		   CamelTimeoutRegisterCallback registrar,
-		   CamelTimeoutRemoveCallback remover)
-{
-	CamelSession *session = CAMEL_SESSION (camel_object_new (CAMEL_SESSION_TYPE));
-
-	session->authenticator = authenticator;
-	session->registrar = registrar;
-	session->remover = remover;
-	return session;
-}
-
-/**
- * camel_session_register_provider:
- * @session: a session object
- * @protocol: the protocol the provider provides for
- * @provider: provider object
- *
- * Registers a protocol to provider mapping for the session.
- **/
-void
-camel_session_register_provider (CamelSession *session,
-				 CamelProvider *provider)
-{
-	g_return_if_fail (CAMEL_IS_SESSION (session));
-	g_return_if_fail (provider != NULL);
-
-	g_hash_table_insert (session->providers, provider->protocol, provider);
-}
-
-static void
-ensure_loaded (gpointer key, gpointer value, gpointer user_data)
-{
-	CamelSession *session = user_data;
-	char *name = key;
-	char *path = value;
-
-	if (!g_hash_table_lookup (session->providers, name)) {
-		CamelException ex;
-
-		camel_exception_init (&ex);
-		camel_provider_load (session, path, &ex);
-		camel_exception_clear (&ex);
-	}
-}
-
-static gint
-provider_compare (gconstpointer a, gconstpointer b)
-{
-	const CamelProvider *cpa = (const CamelProvider *)a;
-	const CamelProvider *cpb = (const CamelProvider *)b;
-
-	return strcmp (cpa->name, cpb->name);
-}
-
-static void
-add_to_list (gpointer key, gpointer value, gpointer user_data)
-{
-	GList **list = user_data;
-	CamelProvider *prov = value;
-
-	*list = g_list_insert_sorted (*list, prov, provider_compare);
-}
-
-/**
- * camel_session_list_providers:
- * @session: the session
- * @load: whether or not to load in providers that are not already loaded
- *
- * This returns a list of available providers in this session. If @load
- * is %TRUE, it will first load in all available providers that haven't
- * yet been loaded.
- *
- * Return value: a GList of providers, which the caller must free.
- **/
-GList *
-camel_session_list_providers (CamelSession *session, gboolean load)
-{
-	GList *list;
-
-	g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL);
-
-	if (load) {
-		g_hash_table_foreach (session->modules, ensure_loaded, session);
-	}
-
-	list = NULL;
-	g_hash_table_foreach (session->providers, add_to_list, &list);
-	return list;
-}
-
-static void
-service_cache_remove (CamelService *service, gpointer event_data, gpointer user_data)
-{
-	CamelProvider *provider;
-	CamelSession *session = CAMEL_SESSION (user_data);
-
-	g_return_if_fail (CAMEL_IS_SESSION (session));
-	g_return_if_fail (service != NULL);
-	g_return_if_fail (service->url != NULL);
-	
-	provider = g_hash_table_lookup (session->providers, service->url->protocol);
-	g_hash_table_remove (provider->service_cache, service->url);
-}
-
-CamelService *
-camel_session_get_service (CamelSession *session, const char *url_string,
-			   CamelProviderType type, CamelException *ex)
-{
-	CamelURL *url;
-	const CamelProvider *provider;
-	CamelService *service;
-
-	url = camel_url_new (url_string, ex);
-	if (!url)
-		return NULL;
-
-	/* We need to look up the provider so we can then lookup
-	   the service in the provider's cache */
-	provider = g_hash_table_lookup (session->providers, url->protocol);
-	if (!provider) {
-		/* See if there's one we can load. */
-		char *path;
-
-		path = g_hash_table_lookup (session->modules, url->protocol);
-		if (path) {
-			camel_provider_load (session, path, ex);
-			if (camel_exception_get_id (ex) !=
-			    CAMEL_EXCEPTION_NONE) {
-				camel_url_free (url);
-				return NULL;
-			}
-		}
-		provider = g_hash_table_lookup (session->providers, url->protocol);
-	}
-
-	if (!provider || !provider->object_types[type]) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "No %s available for protocol `%s'",
-				      camel_provider_type_name[type],
-				      url->protocol);
-		camel_url_free (url);
-		return NULL;
-	}
-	
-	/* Now look up the service in the provider's cache */
-	service = g_hash_table_lookup (provider->service_cache, url);
-	if (service != NULL) {
-		camel_url_free (url);
-		camel_object_ref (CAMEL_OBJECT (service));
-		return service;
-	}
-
-	service = camel_service_new (provider->object_types[type], session, url, ex);
-	if (service) {
-		g_hash_table_insert (provider->service_cache, url, service);
-		camel_object_hook_event (CAMEL_OBJECT (service), "finalize", (CamelObjectEventHookFunc) service_cache_remove, session);
-	}
-
-	return service;
-}
-
-
-/**
- * camel_session_query_authenticator: query the session authenticator
- * @session: session object
- * @mode: %CAMEL_AUTHENTICATOR_ASK or %CAMEL_AUTHENTICATOR_TELL
- * @data: prompt to query user with, or data to cache
- * @secret: whether or not the data is secret (eg, a password)
- * @service: the service this query is being made by
- * @item: an identifier, unique within this service, for the information
- * @ex: a CamelException
- *
- * This function is used by a CamelService to discuss authentication
- * information with the application.
- *
- * @service and @item together uniquely identify the piece of data the
- * caller is concerned with.
- *
- * If @mode is %CAMEL_AUTHENTICATOR_ASK, then @data is a question to
- * ask the user (if the application doesn't already have the answer
- * cached). If @secret is set, the user's input should not be echoed
- * back. The authenticator should set @ex to
- * %CAMEL_EXCEPTION_USER_CANCEL if the user did not provide the
- * information. The caller must g_free() the information returned when
- * it is done with it.
- *
- * If @mode is %CAMEL_AUTHENTICATOR_TELL, then @data is information
- * that the application should cache, or %NULL if it should stop
- * caching anything about that datum (eg, because the data is a
- * password that turned out to be incorrect).
- *
- * Return value: the authentication information or %NULL.
- **/
-char *
-camel_session_query_authenticator (CamelSession *session,
-				   CamelAuthCallbackMode mode,
-				   char *prompt, gboolean secret,
-				   CamelService *service, char *item,
-				   CamelException *ex)
-{
-	return session->authenticator (mode, prompt, secret,
-				       service, item, ex);
-}
-
-/**
- * camel_session_register_timeout: Register a timeout to be called
- * periodically.
- *
- * @session: the CamelSession
- * @interval: the number of milliseconds interval between calls
- * @callback: the function to call
- * @user_data: extra data to be passed to the callback
- *
- * This function will use the registrar callback provided upon
- * camel_session_new to register the timeout. The callback will
- * be called every @interval milliseconds until it returns @FALSE.
- * It will be passed one argument, @user_data.
- *
- * Returns a nonzero handle that can be used with 
- * camel_session_remove_timeout on success, and 0 on failure to 
- * register the timeout.
- **/
-
-guint
-camel_session_register_timeout (CamelSession *session,
-				guint32 interval,
-				CamelTimeoutCallback callback,
-				gpointer user_data)
-{
-	g_return_val_if_fail (CAMEL_IS_SESSION (session), FALSE);
-
-	return session->registrar (interval, callback, user_data);
-}
-
-/**
- * camel_session_remove_timeout: Remove a previously registered
- * timeout.
- *
- * @session: the CamelSession
- * @handle: a value returned from camel_session_register_timeout
- *
- * This function will use the remover callback provided upon
- * camel_session_new to remove the timeout.
- *
- * Returns TRUE on success and FALSE on failure.
- **/
-
-gboolean camel_session_remove_timeout (CamelSession *session,
-				       guint handle)
-{
-	return session->remover (handle);
-}
diff --git a/camel/camel-session.h b/camel/camel-session.h
deleted file mode 100644
index 704ae6a613..0000000000
--- a/camel/camel-session.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-session.h : Abstract class for an email session */
-
-/*
- *
- * Author :
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_SESSION_H
-#define CAMEL_SESSION_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_SESSION_TYPE     (camel_session_get_type ())
-#define CAMEL_SESSION(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SESSION_TYPE, CamelSession))
-#define CAMEL_SESSION_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SESSION_TYPE, CamelSessionClass))
-#define CAMEL_IS_SESSION(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SESSION_TYPE))
-
-
-typedef enum {
-	CAMEL_AUTHENTICATOR_ASK, CAMEL_AUTHENTICATOR_TELL
-} CamelAuthCallbackMode;
-
-typedef char *(*CamelAuthCallback) (CamelAuthCallbackMode mode,
-				    char *data, gboolean secret,
-				    CamelService *service, char *item,
-				    CamelException *ex);
-typedef gboolean (*CamelTimeoutCallback) (gpointer data);
-typedef guint (*CamelTimeoutRegisterCallback) (guint32 interval,
-					       CamelTimeoutCallback cb,
-					       gpointer camel_data);
-typedef gboolean (*CamelTimeoutRemoveCallback) (guint id);
-
-struct _CamelSession
-{
-	CamelObject parent_object;
-
-	CamelAuthCallback authenticator;
-	CamelTimeoutRegisterCallback registrar;
-	CamelTimeoutRemoveCallback remover;
-
-	GHashTable *providers, *modules;
-};
-
-typedef struct {
-	CamelObjectClass parent_class;
-
-} CamelSessionClass;
-
-
-/* public methods */
-
-/* Standard Camel function */
-CamelType camel_session_get_type (void);
-
-
-CamelSession *  camel_session_new                     (CamelAuthCallback
-						       authenticator,
-						       CamelTimeoutRegisterCallback
-						       registrar,
-						       CamelTimeoutRemoveCallback
-						       remover);
-void            camel_session_register_provider       (CamelSession *session,
-						       CamelProvider *provider);
-GList *         camel_session_list_providers          (CamelSession *session,
-						       gboolean load);
-
-CamelService *  camel_session_get_service             (CamelSession *session,
-						       const char *url_string,
-						       CamelProviderType type,
-						       CamelException *ex);
-#define camel_session_get_store(session, url_string, ex) \
-	((CamelStore *) camel_session_get_service (session, url_string, CAMEL_PROVIDER_STORE, ex))
-#define camel_session_get_transport(session, url_string, ex) \
-	((CamelTransport *) camel_session_get_service (session, url_string, CAMEL_PROVIDER_TRANSPORT, ex))
-
-
-char *          camel_session_query_authenticator (CamelSession *session,
-						   CamelAuthCallbackMode mode,
-						   char *prompt,
-						   gboolean secret,
-						   CamelService *service,
-						   char *item,
-						   CamelException *ex);
-
-guint           camel_session_register_timeout (CamelSession *session,
-						guint32 interval,
-						CamelTimeoutCallback callback,
-						gpointer user_data);
-
-gboolean        camel_session_remove_timeout (CamelSession *session,
-					      guint handle);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SESSION_H */
diff --git a/camel/camel-store.c b/camel/camel-store.c
deleted file mode 100644
index dd2d5e41a0..0000000000
--- a/camel/camel-store.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-store.c : Abstract class for an email store */
-
-/* 
- *
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include "camel-store.h"
-#include "camel-folder.h"
-#include "camel-exception.h"
-
-static CamelServiceClass *parent_class = NULL;
-
-/* Returns the class for a CamelStore */
-#define CS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static CamelFolder *get_folder (CamelStore *store, const char *folder_name,
-				gboolean create, CamelException *ex);
-static void delete_folder (CamelStore *store, const char *folder_name,
-			   CamelException *ex);
-static void rename_folder (CamelStore *store, const char *old_name,
-			   const char *new_name, CamelException *ex);
-
-static char *get_folder_name (CamelStore *store, const char *folder_name,
-			      CamelException *ex);
-static char *get_root_folder_name (CamelStore *store, CamelException *ex);
-static char *get_default_folder_name (CamelStore *store, CamelException *ex);
-
-static CamelFolder *lookup_folder (CamelStore *store, const char *folder_name);
-static void cache_folder (CamelStore *store, const char *folder_name,
-			  CamelFolder *folder);
-static void uncache_folder (CamelStore *store, CamelFolder *folder);
-
-static void
-camel_store_class_init (CamelStoreClass *camel_store_class)
-{
-	parent_class = CAMEL_SERVICE_CLASS (camel_type_get_global_classfuncs (camel_service_get_type ()));
-
-	/* virtual method definition */
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-	camel_store_class->get_root_folder_name = get_root_folder_name;
-	camel_store_class->get_default_folder_name = get_default_folder_name;
-	camel_store_class->lookup_folder = lookup_folder;
-	camel_store_class->cache_folder = cache_folder;
-	camel_store_class->uncache_folder = uncache_folder;
-}
-
-static void
-camel_store_init (void *o, void *k)
-{
-	CamelStore *store = o;
-
-	store->folders = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-static void
-camel_store_finalize (CamelObject *object)
-{
-	CamelStore *store = CAMEL_STORE (object);
-
-	if (store->folders) {
-		if (g_hash_table_size (store->folders) != 0) {
-			g_warning ("Folder cache for store %p contains "
-				   "%d folders at destruction.", store,
-				   g_hash_table_size (store->folders));
-		}
-		g_hash_table_destroy (store->folders);
-	}
-}
-
-
-CamelType
-camel_store_get_type (void)
-{
-	static CamelType camel_store_type = CAMEL_INVALID_TYPE;
-
-	if (camel_store_type == CAMEL_INVALID_TYPE) {
-		camel_store_type = camel_type_register (CAMEL_SERVICE_TYPE, "CamelStore",
-							sizeof (CamelStore),
-							sizeof (CamelStoreClass),
-							(CamelObjectClassInitFunc) camel_store_class_init,
-							NULL,
-							(CamelObjectInitFunc) camel_store_init,
-							(CamelObjectFinalizeFunc) camel_store_finalize );
-	}
-
-	return camel_store_type;
-}
-
-
-static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name,
-	    gboolean create, CamelException *ex)
-{
-	g_warning ("CamelStore::get_folder not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (store)));
-	return NULL;
-}
-
-static void
-delete_folder (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	g_warning ("CamelStore::delete_folder not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (store)));
-}
-
-static void rename_folder (CamelStore *store, const char *old_name,
-			   const char *new_name, CamelException *ex)
-{
-	g_warning ("CamelStore::rename_folder not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (store)));
-	camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-			     "rename folder unimplemented for: %s",
-			     camel_type_to_name (CAMEL_OBJECT_GET_TYPE (store)));
-}
-
-
-/* CamelStore::get_folder_name should:
- * a) make sure that the provided name is valid
- * b) return it in canonical form, in allocated memory.
- *
- * This is used to make sure that duplicate names for the same folder
- * don't result in duplicate cache entries.
- */
-static char *
-get_folder_name (CamelStore *store, const char *folder_name,
-		 CamelException *ex)
-{
-	g_warning ("CamelStore::get_folder_name not implemented for `%s'",
-		   camel_type_to_name (CAMEL_OBJECT_GET_TYPE (store)));
-	return NULL;
-}
-
-static char *
-get_root_folder_name (CamelStore *store, CamelException *ex)
-{
-	return g_strdup ("/");
-}
-
-static char *
-get_default_folder_name (CamelStore *store, CamelException *ex)
-{
-	return CS_CLASS (store)->get_root_folder_name (store, ex);
-}
-
-static CamelFolder *
-lookup_folder (CamelStore *store, const char *folder_name)
-{
-	if (store->folders) {
-		CamelFolder *folder = g_hash_table_lookup (store->folders, folder_name);
-		if (folder)
-			camel_object_ref(CAMEL_OBJECT(folder));
-		return folder;
-	}
-	return NULL;
-}
-
-static void folder_finalize (CamelObject *folder, gpointer event_data, gpointer user_data)
-{
-	CS_CLASS (user_data)->uncache_folder (CAMEL_STORE(user_data), CAMEL_FOLDER(folder));
-}
-
-static void
-cache_folder (CamelStore *store, const char *folder_name, CamelFolder *folder)
-{
-	if (!store->folders)
-		return;
-
-	if (g_hash_table_lookup (store->folders, folder_name)) {
-		g_warning ("Caching folder %s that already exists.",
-			   folder_name);
-	}
-	g_hash_table_insert (store->folders, g_strdup (folder_name), folder);
-
-	camel_object_hook_event (CAMEL_OBJECT (folder), "finalize", folder_finalize, store);
-
-	/*
-	 * gt_k so as not to get caught by my little gt_k cleanliness detector.
-	 *
-	 * gt_k_signal_connect_object (CAMEL_OBJECT (folder), "destroy",
-	 *			   GT_K_SIGNAL_FUNC (CS_CLASS (store)->uncache_folder),
-	 *			   CAMEL_OBJECT (store));
-	 */
-}
-
-static gboolean
-folder_matches (gpointer key, gpointer value, gpointer user_data)
-{
-	if (value == user_data) {
-		g_free (key);
-		return TRUE;
-	} else
-		return FALSE;
-}
-
-static void
-uncache_folder (CamelStore *store, CamelFolder *folder)
-{
-	g_hash_table_foreach_remove (store->folders, folder_matches, folder);
-}
-
-
-static CamelFolder *
-get_folder_internal (CamelStore *store, const char *folder_name,
-		     gboolean create, CamelException *ex)
-{
-	CamelFolder *folder = NULL;
-
-	/* Try cache first. */
-	folder = CS_CLASS (store)->lookup_folder (store, folder_name);
-
-	if (!folder) {
-		folder = CS_CLASS (store)->get_folder (store, folder_name,
-						       create, ex);
-		if (!folder)
-			return NULL;
-
-		CS_CLASS (store)->cache_folder (store, folder_name, folder);
-	}
-
-	return folder;
-}
-
-
-
-/** 
- * camel_store_get_folder: Return the folder corresponding to a path.
- * @store: a CamelStore
- * @folder_name: name of the folder to get
- * @create: whether or not to create the folder if it doesn't already exist
- * @ex: a CamelException
- * 
- * Returns the folder corresponding to the path @folder_name. If the
- * path begins with the separator character, it is relative to the
- * root folder. Otherwise, it is relative to the default folder. If
- * @create is %TRUE and the named folder does not already exist, it will
- * be created.
- *
- * Return value: the folder
- **/
-CamelFolder *
-camel_store_get_folder (CamelStore *store, const char *folder_name,
-			gboolean create, CamelException *ex)
-{
-	char *name;
-	CamelFolder *folder = NULL;
-
-	if (!camel_service_is_connected (CAMEL_SERVICE (store)))
-		camel_service_connect (CAMEL_SERVICE (store), ex);
-
-	name = CS_CLASS (store)->get_folder_name (store, folder_name, ex);
-	if (name) {
-		folder = get_folder_internal (store, name, create, ex);
-		g_free (name);
-	}
-	return folder;
-}
-
-
-/** 
- * camel_store_delete_folder: Delete the folder corresponding to a path.
- * @store: a CamelStore
- * @folder_name: name of the folder to delete
- * @ex: a CamelException
- * 
- * Deletes the named folder. The folder must be empty.
- **/
-void
-camel_store_delete_folder (CamelStore *store, const char *folder_name,
-			   CamelException *ex)
-{
-	char *name;
-
-	name = CS_CLASS (store)->get_folder_name (store, folder_name, ex);
-	if (name) {
-		CS_CLASS (store)->delete_folder (store, name, ex);
-		g_free (name);
-	}
-}
-
-/**
- * camel_store_rename_folder:
- * @store: 
- * @old_name: 
- * @new_name: 
- * @ex: 
- * 
- * Rename a named folder to a new name.
- **/
-void             camel_store_rename_folder      (CamelStore *store,
-						 const char *old_name,
-						 const char *new_name,
-						 CamelException *ex)
-{
-	char *old, *new;
-
-	old = CS_CLASS (store)->get_folder_name(store, old_name, ex);
-	if (old) {
-		new = CS_CLASS (store)->get_folder_name(store, new_name, ex);
-		if (new) {
-			CS_CLASS (store)->rename_folder(store, old, new, ex);
-			g_free(new);
-		}
-		g_free(old);
-	}
-}
-
-
-/**
- * camel_store_get_root_folder: return the top-level folder
- * 
- * Returns the folder which is at the top of the folder hierarchy.
- * This folder may or may not be the same as the default folder.
- * 
- * Return value: the top-level folder.
- **/
-CamelFolder *
-camel_store_get_root_folder (CamelStore *store, CamelException *ex)
-{
-	char *name;
-	CamelFolder *folder = NULL;
-
-	name = CS_CLASS (store)->get_root_folder_name (store, ex);
-	if (name) {
-		folder = get_folder_internal (store, name, TRUE, ex);
-		g_free (name);
-	}
-	return folder;
-}
-
-/** 
- * camel_store_get_default_folder: return the store default folder
- *
- * The default folder is the folder which is presented to the user in
- * the default configuration. This defaults to the root folder if
- * the store doesn't override it.
- *
- * Return value: the default folder.
- **/
-CamelFolder *
-camel_store_get_default_folder (CamelStore *store, CamelException *ex)
-{
-	char *name;
-	CamelFolder *folder = NULL;
-
-	name = CS_CLASS (store)->get_default_folder_name (store, ex);
-	if (name) {
-		folder = get_folder_internal (store, name, TRUE, ex);
-		g_free (name);
-	}
-	return folder;
-}
-
diff --git a/camel/camel-store.h b/camel/camel-store.h
deleted file mode 100644
index 1ba2ff9869..0000000000
--- a/camel/camel-store.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-store.h : Abstract class for an email store */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_STORE_H
-#define CAMEL_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_STORE_TYPE     (camel_store_get_type ())
-#define CAMEL_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STORE_TYPE, CamelStore))
-#define CAMEL_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STORE_TYPE, CamelStoreClass))
-#define CAMEL_IS_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STORE_TYPE))
-
-
-struct _CamelStore
-{
-	CamelService parent_object;
-
-	GHashTable *folders;
-
-};
-
-
-
-typedef struct {
-	CamelServiceClass parent_class;
-
-	CamelFolder *   (*get_folder)               (CamelStore *store,
-						     const char *folder_name,
-						     gboolean create,
-						     CamelException *ex);
-
-	void            (*delete_folder)            (CamelStore *store,
-						     const char *folder_name,
-						     CamelException *ex);
-	void		(*rename_folder)	    (CamelStore *store,
-						     const char *old_name,
-						     const char *new_name,
-						     CamelException *ex);
-	char *          (*get_folder_name)          (CamelStore *store,
-						     const char *folder_name,
-						     CamelException *ex);
-	char *          (*get_root_folder_name)     (CamelStore *store,
-						     CamelException *ex);
-	char *          (*get_default_folder_name)  (CamelStore *store,
-						     CamelException *ex);
-
-        CamelFolder *   (*lookup_folder)            (CamelStore *store,
-						     const char *folder_name);
-	void            (*cache_folder)             (CamelStore *store,
-						     const char *folder_name,
-						     CamelFolder *folder);
-        void            (*uncache_folder)           (CamelStore *store,
-						     CamelFolder *folder);
-
-} CamelStoreClass;
-
-
-/* Standard Camel function */
-CamelType camel_store_get_type (void);
-
-/* public methods */
-CamelFolder *    camel_store_get_folder         (CamelStore *store,
-					         const char *folder_name,
-						 gboolean create,
-					         CamelException *ex);
-CamelFolder *    camel_store_get_root_folder    (CamelStore *store,
-					         CamelException *ex);
-CamelFolder *    camel_store_get_default_folder (CamelStore *store,
-						 CamelException *ex);
-
-void             camel_store_delete_folder      (CamelStore *store,
-						 const char *folder_name,
-						 CamelException *ex);
-void             camel_store_rename_folder      (CamelStore *store,
-						 const char *old_name,
-						 const char *new_name,
-						 CamelException *ex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STORE_H */
diff --git a/camel/camel-stream-buffer.c b/camel/camel-stream-buffer.c
deleted file mode 100644
index c25cda09bc..0000000000
--- a/camel/camel-stream-buffer.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-
-/* camel-stream-buffer.c : Buffer any other other stream
- *
- * Authors: Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include 
-#include "camel-stream-buffer.h"
-#include 
-#include 
-#include 
-#include 
-
-static CamelStreamClass *parent_class = NULL;
-
-enum {
-	BUF_USER = 1<<0,	/* user-supplied buffer, do not free */
-};
-
-#define BUF_SIZE 1024
-
-static ssize_t stream_read (CamelStream *stream, char *buffer, size_t n);
-static ssize_t stream_write (CamelStream *stream, const char *buffer, size_t n);
-static int stream_flush (CamelStream *stream);
-static int stream_close (CamelStream *stream);
-static gboolean stream_eos (CamelStream *stream);
-
-static void init_vbuf(CamelStreamBuffer *sbf, CamelStream *s, CamelStreamBufferMode mode, char *buf, guint32 size);
-static void init(CamelStreamBuffer *sbuf, CamelStream *s, CamelStreamBufferMode mode);
-
-static void
-camel_stream_buffer_class_init (CamelStreamBufferClass *camel_stream_buffer_class)
-{
-	CamelStreamClass *camel_stream_class = CAMEL_STREAM_CLASS (camel_stream_buffer_class);
-
-	parent_class = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (camel_stream_get_type ()));
-
-	/* virtual method definition */
-	camel_stream_buffer_class->init = init;
-	camel_stream_buffer_class->init_vbuf = init_vbuf;
-
-	/* virtual method overload */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->close = stream_close;
-	camel_stream_class->eos = stream_eos;
-}
-
-static void
-camel_stream_buffer_init (gpointer object, gpointer klass)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (object);
-
-	sbf->flags = 0;
-	sbf->size = BUF_SIZE;
-	sbf->buf = g_malloc(BUF_SIZE);
-	sbf->ptr = sbf->buf;
-	sbf->end = sbf->buf;
-	sbf->mode = CAMEL_STREAM_BUFFER_READ | CAMEL_STREAM_BUFFER_BUFFER;
-	sbf->stream = 0;
-	sbf->linesize = 80;
-	sbf->linebuf = g_malloc(sbf->linesize);
-}
-
-static void
-camel_stream_buffer_finalize (CamelObject *object)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (object);
-
-	if (!(sbf->flags & BUF_USER)) {
-		g_free(sbf->buf);
-	}
-	if (sbf->stream)
-		camel_object_unref(CAMEL_OBJECT(sbf->stream));
-
-	g_free(sbf->linebuf);
-}
-
-
-CamelType
-camel_stream_buffer_get_type (void)
-{
-	static CamelType camel_stream_buffer_type = CAMEL_INVALID_TYPE;
-
-	if (camel_stream_buffer_type == CAMEL_INVALID_TYPE)	{
-		camel_stream_buffer_type = camel_type_register (camel_stream_get_type (), "CamelStreamBuffer",
-								sizeof (CamelStreamBuffer),
-								sizeof (CamelStreamBufferClass),
-								(CamelObjectClassInitFunc) camel_stream_buffer_class_init,
-								NULL,
-								(CamelObjectInitFunc) camel_stream_buffer_init,
-								(CamelObjectFinalizeFunc) camel_stream_buffer_finalize);
-	}
-
-	return camel_stream_buffer_type;
-}
-
-
-static void
-set_vbuf(CamelStreamBuffer *sbf, char *buf, CamelStreamBufferMode mode, int size)
-{
-	if (sbf->buf && !(sbf->flags & BUF_USER)) {
-		g_free(sbf->buf);
-	}
-	if (buf) {
-		sbf->buf = buf;
-		sbf->flags |= BUF_USER;
-	} else {
-		sbf->buf = g_malloc(size);
-		sbf->flags &= ~BUF_USER;
-	}
-	sbf->size = size;
-	sbf->mode = mode;
-}
-
-static void
-init_vbuf(CamelStreamBuffer *sbf, CamelStream *s, CamelStreamBufferMode mode, char *buf, guint32 size)
-{
-	set_vbuf(sbf, buf, mode, size);
-	if (sbf->stream)
-		camel_object_unref(CAMEL_OBJECT(sbf->stream));
-	sbf->stream = s;
-	camel_object_ref(CAMEL_OBJECT(sbf->stream));
-}
-
-static void
-init(CamelStreamBuffer *sbuf, CamelStream *s, CamelStreamBufferMode mode)
-{
-	init_vbuf(sbuf, s, mode, NULL, BUF_SIZE);
-}
-
-
-/**
- * camel_stream_buffer_new:
- * @stream: Existing stream to buffer.
- * @mode: Operational mode of buffered stream.
- *
- * Create a new buffered stream of another stream.  A default
- * buffer size (1024 bytes), automatically managed will be used
- * for buffering.
- *
- * See camel_stream_buffer_new_with_vbuf() for details on the
- * @mode parameter.
- *
- * Return value: A newly created buffered stream.
- **/
-CamelStream *
-camel_stream_buffer_new (CamelStream *stream, CamelStreamBufferMode mode)
-{
-	CamelStreamBuffer *sbf;
-	sbf = CAMEL_STREAM_BUFFER (camel_object_new (camel_stream_buffer_get_type ()));
-	CAMEL_STREAM_BUFFER_CLASS (CAMEL_OBJECT_GET_CLASS(sbf))->init (sbf, stream, mode);
-
-	return CAMEL_STREAM (sbf);
-}
-
-/**
- * camel_stream_buffer_new_with_vbuf:
- * @stream: An existing stream to buffer.
- * @mode: Mode to buffer in.
- * @buf: Memory to use for buffering.
- * @size: Size of buffer to use.
- *
- * Create a new stream which buffers another stream, @stream.
- *
- * The following values are available for @mode:
- *
- * CAMEL_STREAM_BUFFER_BUFFER, Buffer the input/output in blocks.
- * CAMEL_STREAM_BUFFER_NEWLINE, Buffer on newlines (for output).
- * CAMEL_STREAM_BUFFER_NONE, Perform no buffering.
- *
- * Note that currently this is ignored and CAMEL_STREAM_BUFFER_BUFFER
- * is always used.
- *
- * In addition, one of the following mode options should be or'd
- * together with the buffering mode:
- *
- * CAMEL_STREAM_BUFFER_WRITE, Buffer in write mode.
- * CAMEL_STREAM_BUFFER_READ, Buffer in read mode.
- *
- * Buffering can only be done in one direction for any
- * buffer instance.
- *
- * If @buf is non-NULL, then use the memory pointed to
- * (for upto @size bytes) as the buffer for all buffering
- * operations.  It is upto the application to free this buffer.
- * If @buf is NULL, then allocate and manage @size bytes
- * for all buffering.
- *
- * Return value: A new stream with buffering applied.
- **/
-CamelStream *camel_stream_buffer_new_with_vbuf (CamelStream *stream, CamelStreamBufferMode mode, char *buf, guint32 size)
-{
-	CamelStreamBuffer *sbf;
-	sbf = CAMEL_STREAM_BUFFER (camel_object_new (camel_stream_buffer_get_type ()));
-	CAMEL_STREAM_BUFFER_CLASS (CAMEL_OBJECT_GET_CLASS(sbf))->init_vbuf (sbf, stream, mode, buf, size);
-
-	return CAMEL_STREAM (sbf);
-}
-
-static ssize_t
-stream_read (CamelStream *stream, char *buffer, size_t n)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-	ssize_t bytes_read = 1;
-	ssize_t bytes_left;
-	char *bptr = buffer;
-
-	g_return_val_if_fail( (sbf->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_READ, 0);
-
-	while (n && bytes_read > 0) {
-		bytes_left = sbf->end - sbf->ptr;
-		if (bytes_left < n) {
-			if (bytes_left > 0) {
-				memcpy(bptr, sbf->ptr, bytes_left);
-				n -= bytes_left;
-				bptr += bytes_left;
-				sbf->ptr += bytes_left;
-			}
-			/* if we are reading a lot, then read directly to the destination buffer */
-			if (n >= sbf->size/3) {
-				bytes_read = camel_stream_read(sbf->stream, bptr, n);
-				if (bytes_read>0) {
-					n -= bytes_read;
-					bptr += bytes_read;
-				}
-			} else {
-				bytes_read = camel_stream_read(sbf->stream, sbf->buf, sbf->size);
-				if (bytes_read>0) {
-					sbf->ptr = sbf->buf;
-					sbf->end = sbf->buf+bytes_read;
-					memcpy(bptr, sbf->ptr, n);
-					sbf->ptr += n;
-					bptr += n;
-					n -= bytes_read;
-				}
-			}
-		} else {
-			memcpy(bptr, sbf->ptr, bytes_left);
-			sbf->ptr += n;
-			bptr += n;
-			n = 0;
-		}
-	}
-
-	return (ssize_t)(bptr - buffer);
-}
-
-static ssize_t
-stream_write (CamelStream *stream, const char *buffer, size_t n)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-	const char *bptr = buffer;
-	ssize_t bytes_written = 1;
-        ssize_t bytes_left;
-	ssize_t total = n;
-
-	g_return_val_if_fail( (sbf->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_WRITE, 0);
-
-	while (n && bytes_written > 0) {
-		bytes_left = sbf->size - (sbf->ptr-sbf->buf);
-		if (bytes_leftptr, bptr, bytes_left);
-			n -= bytes_left;
-			bptr += bytes_left;
-			bytes_written = camel_stream_write(sbf->stream, sbf->buf, sbf->size);
-			sbf->ptr = sbf->buf;
-			/* if we are writing a lot, write directly to the stream */
-			if (n >= sbf->size/3) {
-				bytes_written = camel_stream_write(sbf->stream, bptr, n);
-				if (bytes_written >0) {
-					bytes_written = n;
-					n -= bytes_written;
-					bptr += bytes_written;
-				}
-			} else {
-				memcpy(sbf->ptr, bptr, n);
-				sbf->ptr += n;
-				bptr += n;
-				n = 0;
-			}
-		} else {
-			memcpy(sbf->ptr, bptr, n);
-			sbf->ptr += n;
-			bptr += n;
-			n = 0;
-		}
-	}
-	if (bytes_written == -1)
-		return -1;
-	
-	return total;
-}
-
-static int
-stream_flush (CamelStream *stream)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-
-	if ((sbf->mode & CAMEL_STREAM_BUFFER_MODE) == CAMEL_STREAM_BUFFER_WRITE) {
-		int len = sbf->ptr-sbf->buf;
-		int written = camel_stream_write(sbf->stream, sbf->buf, len);
-		if (written > 0)
-			sbf->ptr += written;
-		if (written != len)
-			return -1;
-	} else {
-		/* nothing to do for read mode 'flush' */
-	}
-
-	return camel_stream_flush(sbf->stream);
-}
-
-static int
-stream_close (CamelStream *stream)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-
-	if (stream_flush(stream) == -1)
-		return -1;
-	return camel_stream_close(sbf->stream);
-}
-
-static gboolean
-stream_eos (CamelStream *stream)
-{
-	CamelStreamBuffer *sbf = CAMEL_STREAM_BUFFER (stream);
-
-	return camel_stream_eos(sbf->stream) && sbf->ptr == sbf->end;
-}
-
-/**
- * camel_stream_buffer_gets:
- * @sbf: A CamelStreamBuffer.
- * @buf: Memory to write the string to.
- * @max: Maxmimum number of characters to store.
- *
- * Read a line of characters up to the next newline character or
- * @max characters.
- *
- * If the newline character is encountered, then it will be
- * included in the buffer @buf.  The buffer will be #NUL terminated.
- *
- * Return value: The number of characters read, or 0 for end of file,
- * and -1 on error.
- **/
-int camel_stream_buffer_gets(CamelStreamBuffer *sbf, char *buf, unsigned int max)
-{
-	register char *outptr, *inptr, *inend, c, *outend;
-	int bytes_read;
-
-	outptr = buf;
-	inptr = sbf->ptr;
-	inend = sbf->end;
-	outend = buf+max-1;	/* room for NUL */
-
-	do {
-		while (inptrptr = inptr;
-				return outptr-buf;
-			}
-		}
-		if (outptr == outend)
-			break;
-
-		bytes_read = camel_stream_read(sbf->stream, sbf->buf, sbf->size);
-		if (bytes_read == -1)
-			return -1;
-		inptr = sbf->ptr = sbf->buf;
-		inend = sbf->end = sbf->buf + bytes_read;
-	} while (bytes_read>0);
-
-	sbf->ptr = inptr;
-	if (outptr <= outend)
-		*outptr = 0;
-
-	return (int)(outptr - buf);
-}
-
-/**
- * camel_stream_buffer_read_line: read a complete line from the stream
- * @sbf: A CamelStreamBuffer
- *
- * This function reads a complete newline-terminated line from the stream
- * and returns it in allocated memory. The trailing newline (and carriage
- * return if any) are not included in the returned string.
- *
- * Return value: the line read, which the caller must free when done with,
- * or NULL on eof. If an error occurs, @ex will be set.
- **/
-char *
-camel_stream_buffer_read_line (CamelStreamBuffer *sbf)
-{
-	unsigned char *p;
-	int nread;
-
-	p = sbf->linebuf;
-
-	while (1) {
-		nread = camel_stream_buffer_gets (sbf, p, sbf->linesize - (p - sbf->linebuf));
-		if (nread <=0) {
-			if (p > sbf->linebuf)
-				break;
-			return NULL;
-		}
-
-		p += nread;
-		if (p[-1] == '\n')
-			break;
-
-		nread = p - sbf->linebuf;
-		sbf->linesize *= 2;
-		sbf->linebuf = g_realloc (sbf->linebuf, sbf->linesize);
-		p = sbf->linebuf + nread;
-	}
-
-	p--;
-	if (p[-1] == '\r')
-		p--;
-	p[0] = 0;
-
-	return g_strdup(sbf->linebuf);
-}
-
-
-
-
-
-
diff --git a/camel/camel-stream-buffer.h b/camel/camel-stream-buffer.h
deleted file mode 100644
index 5c9037595a..0000000000
--- a/camel/camel-stream-buffer.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-buffer.h :stream which buffers another stream */
-
-/*
- *
- * Author :
- *  Michael Zucchi 
- *
- * Copyright 2000 Helix Code Inc. (http://www.helixcode.com) .
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_STREAM_BUFFER_H
-#define CAMEL_STREAM_BUFFER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_STREAM_BUFFER_TYPE     (camel_stream_buffer_get_type ())
-#define CAMEL_STREAM_BUFFER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBuffer))
-#define CAMEL_STREAM_BUFFER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBufferClass))
-#define CAMEL_IS_STREAM_BUFFER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_BUFFER_TYPE))
-
-typedef enum
-{
-	CAMEL_STREAM_BUFFER_BUFFER = 0,
-	CAMEL_STREAM_BUFFER_NEWLINE,
-	CAMEL_STREAM_BUFFER_NONE,
-	CAMEL_STREAM_BUFFER_READ = 0x00,
-	CAMEL_STREAM_BUFFER_WRITE = 0x80,
-	CAMEL_STREAM_BUFFER_MODE = 0x80
-} CamelStreamBufferMode;
-
-struct _CamelStreamBuffer
-{
-	CamelStream parent_object;
-
-	/* these are all of course, private */
-	CamelStream *stream;
-
-	unsigned char *buf, *ptr, *end;
-	int size;
-
-	unsigned char *linebuf;	/* for reading lines at a time */
-	int linesize;
-
-	CamelStreamBufferMode mode;
-	unsigned int flags;	/* internal flags */
-};
-
-
-typedef struct {
-	CamelStreamClass parent_class;
-
-	/* Virtual methods */
-	void (*init) (CamelStreamBuffer *stream_buffer, CamelStream *stream,
-		      CamelStreamBufferMode mode);
-	void (*init_vbuf) (CamelStreamBuffer *stream_buffer,
-			   CamelStream *stream, CamelStreamBufferMode mode,
-			   char *buf, guint32 size);
-
-} CamelStreamBufferClass;
-
-
-/* Standard Camel function */
-CamelType camel_stream_buffer_get_type (void);
-
-
-/* public methods */
-CamelStream *camel_stream_buffer_new (CamelStream *s,
-				      CamelStreamBufferMode mode);
-CamelStream *camel_stream_buffer_new_with_vbuf (CamelStream *s,
-						CamelStreamBufferMode mode,
-						char *buf, guint32 size);
-
-/* unimplemented
-   CamelStream *camel_stream_buffer_set_vbuf (CamelStreamBuffer *b, CamelStreamBufferMode mode, char *buf, guint32 size); */
-
-/* read a line of characters */
-int camel_stream_buffer_gets (CamelStreamBuffer *b, char *buf, unsigned int max);
-
-char *camel_stream_buffer_read_line (CamelStreamBuffer *sbf);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_BUFFER_H */
diff --git a/camel/camel-stream-filter.c b/camel/camel-stream-filter.c
deleted file mode 100644
index 7d66928bf5..0000000000
--- a/camel/camel-stream-filter.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-stream-filter.h"
-
-struct _filter {
-	struct _filter *next;
-	int id;
-	CamelMimeFilter *filter;
-};
-
-struct _CamelStreamFilterPrivate {
-	struct _filter *filters;
-	int filterid;		/* next filter id */
-	
-	char *realbuffer;	/* buffer - READ_PAD */
-	char *buffer;		/* READ_SIZE bytes */
-
-	char *filtered;		/* the filtered data */
-	size_t filteredlen;
-
-	int last_was_read;	/* was the last op read or write? */
-};
-
-#define READ_PAD (64)		/* bytes padded before buffer */
-#define READ_SIZE (4096)
-
-#define _PRIVATE(o) (((CamelStreamFilter *)(o))->priv)
-
-static void camel_stream_filter_class_init (CamelStreamFilterClass *klass);
-static void camel_stream_filter_init       (CamelStreamFilter *obj);
-
-static	ssize_t   do_read       (CamelStream *stream, char *buffer, size_t n);
-static	ssize_t   do_write      (CamelStream *stream, const char *buffer, size_t n);
-static	int       do_flush      (CamelStream *stream);
-static	int       do_close      (CamelStream *stream);
-static	gboolean  do_eos        (CamelStream *stream);
-static	int       do_reset      (CamelStream *stream);
-
-static CamelStreamClass *camel_stream_filter_parent;
-
-static void
-camel_stream_filter_class_init (CamelStreamFilterClass *klass)
-{
-	CamelStreamClass *camel_stream_class = (CamelStreamClass *) klass;
-
-	camel_stream_filter_parent = CAMEL_STREAM_CLASS (camel_type_get_global_classfuncs (camel_stream_get_type ()));
-
-	camel_stream_class->read = do_read;
-	camel_stream_class->write = do_write;
-	camel_stream_class->flush = do_flush;
-	camel_stream_class->close = do_close;
-	camel_stream_class->eos = do_eos; 
-	camel_stream_class->reset = do_reset;
-
-}
-
-static void
-camel_stream_filter_init (CamelStreamFilter *obj)
-{
-	struct _CamelStreamFilterPrivate *p;
-	
-	_PRIVATE(obj) = p = g_malloc0(sizeof(*p));
-	p->realbuffer = g_malloc(READ_SIZE + READ_PAD);
-	p->buffer = p->realbuffer + READ_PAD;
-	p->last_was_read = TRUE;
-}
-
-static void
-camel_stream_filter_finalize(CamelObject *o)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)o;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *fn, *f;
-
-	f = p->filters;
-	while (f) {
-		fn = f->next;
-		camel_object_unref((CamelObject *)f->filter);
-		g_free(f);
-		f = fn;
-	}
-	g_free(p->realbuffer);
-	g_free(p);
-	camel_object_unref((CamelObject *)filter->source);
-}
-
-
-CamelType
-camel_stream_filter_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (CAMEL_STREAM_TYPE, "CamelStreamFilter",
-					    sizeof (CamelStreamFilter),
-					    sizeof (CamelStreamFilterClass),
-					    (CamelObjectClassInitFunc) camel_stream_filter_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_stream_filter_init,
-					    (CamelObjectFinalizeFunc) camel_stream_filter_finalize);
-	}
-	
-	return type;
-}
-
-
-/**
- * camel_stream_filter_new:
- *
- * Create a new CamelStreamFilter object.
- * 
- * Return value: A new CamelStreamFilter object.
- **/
-CamelStreamFilter *
-camel_stream_filter_new_with_stream(CamelStream *stream)
-{
-	CamelStreamFilter *new = CAMEL_STREAM_FILTER ( camel_object_new (camel_stream_filter_get_type ()));
-
-	new->source = stream;
-	camel_object_ref ((CamelObject *)stream);
-
-	return new;
-}
-
-
-/**
- * camel_stream_filter_add:
- * @filter: Initialised CamelStreamFilter.
- * @mf:  Filter to perform processing on stream.
- * 
- * Add a new CamelMimeFilter to execute during the processing of this
- * stream.  Each filter added is processed after the previous one.
- *
- * Note that a filter should only be added to a single stream
- * at a time, otherwise unpredictable results may occur.
- * 
- * Return value: A filter id for this CamelStreamFilter.
- **/
-int
-camel_stream_filter_add(CamelStreamFilter *filter, CamelMimeFilter *mf)
-{
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *fn, *f;
-
-	fn = g_malloc(sizeof(*fn));
-	fn->id = p->filterid++;
-	fn->filter = mf;
-	camel_object_ref((CamelObject *)mf);
-
-	/* sure, we could use a GList, but we wouldn't save much */
-	f = (struct _filter *)&p->filters;
-	while (f->next)
-		f = f->next;
-	f->next = fn;
-	fn->next = NULL;
-	return fn->id;
-}
-
-/**
- * camel_stream_filter_remove:
- * @filter: Initialised CamelStreamFilter.
- * @id: Filter id, as returned from camel_stream_filter_add().
- * 
- * Remove a processing filter from the stream, by id.
- **/
-void
-camel_stream_filter_remove(CamelStreamFilter *filter, int id)
-{
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *fn, *f;
-
-	f = (struct _filter *)&p->filters;
-	while (f && f->next) {
-		fn = f->next;
-		if (fn->id == id) {
-			f->next = fn->next;
-			camel_object_unref((CamelObject *)fn->filter);
-			g_free(fn);
-		}
-		f = f->next;
-	}
-}
-
-static ssize_t
-do_read (CamelStream *stream, char *buffer, size_t n)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	ssize_t size;
-	struct _filter *f;
-
-	p->last_was_read = TRUE;
-
-	if (p->filteredlen<=0) {
-		int presize = READ_SIZE;
-
-		size = camel_stream_read(filter->source, p->buffer, READ_SIZE);
-		if (size <= 0) {
-			/* this is somewhat untested */
-			if (camel_stream_eos(filter->source)) {
-				f = p->filters;
-				p->filtered = p->buffer;
-				p->filteredlen = 0;
-				while (f) {
-					camel_mime_filter_complete(f->filter, p->filtered, p->filteredlen,
-								   presize, &p->filtered, &p->filteredlen, &presize);
-					f = f->next;
-				}
-				size = p->filteredlen;
-			}
-			if (size <= 0)
-				return size;
-		} else {
-			f = p->filters;
-			p->filtered = p->buffer;
-			p->filteredlen = size;
-			while (f) {
-				camel_mime_filter_filter(f->filter, p->filtered, p->filteredlen, presize,
-							 &p->filtered, &p->filteredlen, &presize);
-				f = f->next;
-			}
-		}
-	}
-
-	size = MIN(n, p->filteredlen);
-	memcpy(buffer, p->filtered, size);
-	p->filteredlen -= size;
-	p->filtered += size;
-
-	return size;
-}
-
-static ssize_t
-do_write (CamelStream *stream, const char *buf, size_t n)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *f;
-	int presize;
-	char *buffer = (char *)buf;
-
-	p->last_was_read = FALSE;
-
-	f = p->filters;
-	presize = 0;
-	while (f) {
-		camel_mime_filter_filter(f->filter, buffer, n, presize, &buffer, &n, &presize);
-		f = f->next;
-	}
-
-	return camel_stream_write(filter->source, buffer, n);
-}
-
-static int
-do_flush (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *f;
-	char *buffer;
-	int len, presize;
-
-	if (p->last_was_read) {
-		g_warning("Flushing a filter stream without writing to it");
-		return 0;
-	}
-
-	buffer = "";
-	len = 0;
-	presize = 0;
-	f = p->filters;
-	while (f) {
-		camel_mime_filter_complete(f->filter, buffer, len, presize, &buffer, &len, &presize);
-		f = f->next;
-	}
-	if (len > 0 && camel_stream_write(filter->source, buffer, len) == -1)
-		return -1;
-	return camel_stream_flush(filter->source);
-}
-
-static int
-do_close (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-
-	if (!p->last_was_read) {
-		do_flush(stream);
-	}
-	return camel_stream_close(filter->source);
-}
-
-static gboolean
-do_eos (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-
-	if (p->filteredlen > 0)
-		return FALSE;
-
-	return camel_stream_eos(filter->source);
-}
-
-static int
-do_reset (CamelStream *stream)
-{
-	CamelStreamFilter *filter = (CamelStreamFilter *)stream;
-	struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
-	struct _filter *f;
-
-	p->filteredlen = 0;
-
-	/* and reset filters */
-	f = p->filters;
-	while (f) {
-		camel_mime_filter_reset(f->filter);
-		f = f->next;
-	}
-
-	return camel_stream_reset(filter->source);
-}
-
diff --git a/camel/camel-stream-filter.h b/camel/camel-stream-filter.h
deleted file mode 100644
index d0683135c7..0000000000
--- a/camel/camel-stream-filter.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_STREAM_FILTER_H
-#define _CAMEL_STREAM_FILTER_H
-
-#include 
-#include 
-
-#define CAMEL_STREAM_FILTER(obj)         CAMEL_CHECK_CAST (obj, camel_stream_filter_get_type (), CamelStreamFilter)
-#define CAMEL_STREAM_FILTER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_stream_filter_get_type (), CamelStreamFilterClass)
-#define IS_CAMEL_STREAM_FILTER(obj)      CAMEL_CHECK_TYPE (obj, camel_stream_filter_get_type ())
-
-typedef struct _CamelStreamFilterClass CamelStreamFilterClass;
-
-struct _CamelStreamFilter {
-	CamelStream parent;
-
-	CamelStream *source;
-
-	struct _CamelStreamFilterPrivate *priv;
-};
-
-struct _CamelStreamFilterClass {
-	CamelStreamClass parent_class;
-};
-
-guint			camel_stream_filter_get_type	(void);
-
-CamelStreamFilter      *camel_stream_filter_new_with_stream	(CamelStream *stream);
-
-int camel_stream_filter_add	(CamelStreamFilter *filter, CamelMimeFilter *);
-void camel_stream_filter_remove	(CamelStreamFilter *filter, int id);
-
-#endif /* ! _CAMEL_STREAM_FILTER_H */
diff --git a/camel/camel-stream-fs.c b/camel/camel-stream-fs.c
deleted file mode 100644
index 17c6b98e08..0000000000
--- a/camel/camel-stream-fs.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-stream-fs.c : file system based stream */
-
-/*
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel-stream-fs.h"
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-static CamelSeekableStreamClass *parent_class = NULL;
-
-/* Returns the class for a CamelStreamFS */
-#define CSFS_CLASS(so) CAMEL_STREAM_FS_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static ssize_t stream_read   (CamelStream *stream, char *buffer, size_t n);
-static ssize_t stream_write  (CamelStream *stream, const char *buffer, size_t n);
-static int stream_flush  (CamelStream *stream);
-static int stream_close  (CamelStream *stream);
-static off_t stream_seek (CamelSeekableStream *stream, off_t offset,
-			  CamelStreamSeekPolicy policy);
-
-static void
-camel_stream_fs_class_init (CamelStreamFsClass *camel_stream_fs_class)
-{
-	CamelSeekableStreamClass *camel_seekable_stream_class =
-		CAMEL_SEEKABLE_STREAM_CLASS (camel_stream_fs_class);
-	CamelStreamClass *camel_stream_class =
-		CAMEL_STREAM_CLASS (camel_stream_fs_class);
-
-	parent_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_type_get_global_classfuncs (camel_seekable_stream_get_type ()));
-
-	/* virtual method overload */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->close = stream_close;
-
-	camel_seekable_stream_class->seek = stream_seek;
-}
-
-static void
-camel_stream_fs_init (gpointer object, gpointer klass)
-{
-	CamelStreamFs *stream = CAMEL_STREAM_FS (object);
-
-	stream->fd = -1;
-}
-
-static void
-camel_stream_fs_finalize (CamelObject *object)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (object);
-
-	if (stream_fs->fd != -1)
-		close (stream_fs->fd);
-}
-
-
-CamelType
-camel_stream_fs_get_type (void)
-{
-	static CamelType camel_stream_fs_type = CAMEL_INVALID_TYPE;
-
-	if (camel_stream_fs_type == CAMEL_INVALID_TYPE) {
-		camel_stream_fs_type = camel_type_register (camel_seekable_stream_get_type (), "CamelStreamFs",
-							    sizeof (CamelStreamFs),
-							    sizeof (CamelStreamFsClass),
-							    (CamelObjectClassInitFunc) camel_stream_fs_class_init,
-							    NULL,
-							    (CamelObjectInitFunc) camel_stream_fs_init,
-							    (CamelObjectFinalizeFunc) camel_stream_fs_finalize);
-	}
-
-	return camel_stream_fs_type;
-}
-
-/**
- * camel_stream_fs_new_with_fd:
- * @fd: a file descriptor
- *
- * Returns a stream associated with the given file descriptor.
- * When the stream is destroyed, the file descriptor will be closed.
- *
- * Return value: the stream
- **/
-CamelStream *
-camel_stream_fs_new_with_fd (int fd)
-{
-	CamelStreamFs *stream_fs;
-	off_t offset;
-
-	stream_fs = CAMEL_STREAM_FS (camel_object_new (camel_stream_fs_get_type ()));
-	stream_fs->fd = fd;
-	offset = lseek (fd, 0, SEEK_CUR);
-	if (offset == -1)
-		offset = 0;
-	CAMEL_SEEKABLE_STREAM (stream_fs)->position = offset;
-
-	return CAMEL_STREAM (stream_fs);
-}
-
-/**
- * camel_stream_fs_new_with_fd_and_bounds:
- * @fd: a file descriptor
- * @start: the first valid position in the file
- * @end: the first invalid position in the file, or CAMEL_STREAM_UNBOUND
- *
- * Returns a stream associated with the given file descriptor and bounds.
- * When the stream is destroyed, the file descriptor will be closed.
- *
- * Return value: the stream
- **/
-CamelStream *
-camel_stream_fs_new_with_fd_and_bounds (int fd, off_t start, off_t end)
-{
-	CamelStream *stream;
-
-	stream = camel_stream_fs_new_with_fd (fd);
-	camel_seekable_stream_set_bounds (CAMEL_SEEKABLE_STREAM (stream), start, end);
-
-	return stream;
-}
-
-/**
- * camel_stream_fs_new_with_name:
- * @name: a local filename
- * @flags: flags as in open(2)
- * @mode: a file mode
- *
- * Creates a new CamelStream corresponding to the named file, flags,
- * and mode.
- *
- * Return value: the stream, or #NULL on error.
- **/
-CamelStream *
-camel_stream_fs_new_with_name (const char *name, int flags, mode_t mode)
-{
-	int fd;
-
-	fd = open (name, flags, mode);
-	if (fd == -1) {
-		return NULL;
-	}
-
-	return camel_stream_fs_new_with_fd (fd);
-}
-
-/**
- * camel_stream_fs_new_with_name_and_bounds:
- * @name: a local filename
- * @flags: flags as in open(2)
- * @mode: a file mode
- * @start: the first valid position in the file
- * @end: the first invalid position in the file, or CAMEL_STREAM_UNBOUND
- *
- * Creates a new CamelStream corresponding to the given arguments.
- *
- * Return value: the stream, or NULL on error.
- **/
-CamelStream *
-camel_stream_fs_new_with_name_and_bounds (const char *name, int flags,
-					  mode_t mode, off_t start, off_t end)
-{
-	CamelStream *stream;
-
-	stream = camel_stream_fs_new_with_name (name, flags, mode);
-	if (stream == NULL)
-		return NULL;
-
-	camel_seekable_stream_set_bounds (CAMEL_SEEKABLE_STREAM (stream),
-					  start, end);
-
-	return stream;
-}
-
-
-static ssize_t
-stream_read (CamelStream *stream, char *buffer, size_t n)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-	CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
-	ssize_t nread;
-
-	if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
-		n = MIN (seekable->bound_end - seekable->position, n);
-
-	do {
-		nread = read (stream_fs->fd, buffer, n);
-	} while (nread == -1 && errno == EINTR);
-
-	if (nread > 0)
-		seekable->position += nread;
-	else if (nread == 0)
-		stream->eos = TRUE;
-
-	return nread;
-}
-
-static ssize_t
-stream_write (CamelStream *stream, const char *buffer, size_t n)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-	CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
-	ssize_t v, written = 0;
-
-	if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
-		n = MIN (seekable->bound_end - seekable->position, n);
-
-	do {
-		v = write (stream_fs->fd, buffer, n);
-		if (v > 0)
-			written += v;
-	} while (v == -1 && errno == EINTR);
-
-	if (written > 0)
-		seekable->position += written;
-	else if (v == -1)
-		return -1;
-
-	return written;
-}
-
-static int
-stream_flush (CamelStream *stream)
-{
-	return fsync(((CamelStreamFs *)stream)->fd);
-}
-
-static int
-stream_close (CamelStream *stream)
-{
-	return close(((CamelStreamFs *)stream)->fd);
-}
-
-static off_t
-stream_seek (CamelSeekableStream *stream, off_t offset, CamelStreamSeekPolicy policy)
-{
-	CamelStreamFs *stream_fs = CAMEL_STREAM_FS (stream);
-	off_t real = 0;
-
-	switch (policy) {
-	case CAMEL_STREAM_SET:
-		real = offset;
-		break;
-	case CAMEL_STREAM_CUR:
-		real = stream->position + offset;
-		break;
-	case CAMEL_STREAM_END:
-		if (stream->bound_end != CAMEL_STREAM_UNBOUND) {
-			real = lseek(stream_fs->fd, offset, SEEK_END);
-			if (real != -1)
-				stream->position = real;
-			return real;
-		}
-		real = stream->bound_end + offset;
-		break;
-	}
-
-	if (stream->bound_end != CAMEL_STREAM_UNBOUND)
-		real = MIN (real, stream->bound_end);
-	real = MAX (real, stream->bound_start);
-
-	real = lseek(stream_fs->fd, real, SEEK_SET);
-	if (real == -1)
-		return -1;
-
-	if (real != stream->position && ((CamelStream *)stream)->eos)
-		((CamelStream *)stream)->eos = FALSE;
-
-	stream->position = real;
-
-	return real;
-}
diff --git a/camel/camel-stream-fs.h b/camel/camel-stream-fs.h
deleted file mode 100644
index ea403f584f..0000000000
--- a/camel/camel-stream-fs.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-fs.h :stream based on unix filesystem */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_STREAM_FS_H
-#define CAMEL_STREAM_FS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-/* for open flags */
-#include 
-#include 
-#include 
-
-#define CAMEL_STREAM_FS_TYPE     (camel_stream_fs_get_type ())
-#define CAMEL_STREAM_FS(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_FS_TYPE, CamelStreamFs))
-#define CAMEL_STREAM_FS_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_FS_TYPE, CamelStreamFsClass))
-#define CAMEL_IS_STREAM_FS(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_FS_TYPE))
-
-struct _CamelStreamFs
-{
-	CamelSeekableStream parent_object;
-
-	int fd;             /* file descriptor on the underlying file */
-};
-
-typedef struct {
-	CamelSeekableStreamClass parent_class;
-
-} CamelStreamFsClass;
-
-/* Standard Camel function */
-CamelType camel_stream_fs_get_type (void);
-
-/* public methods */
-CamelStream * camel_stream_fs_new_with_name            (const char *name, int flags, mode_t mode);
-CamelStream * camel_stream_fs_new_with_name_and_bounds (const char *name, int flags, mode_t mode,
-							off_t start, off_t end);
-
-CamelStream * camel_stream_fs_new_with_fd              (int fd);
-CamelStream * camel_stream_fs_new_with_fd_and_bounds   (int fd, off_t start, off_t end);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_FS_H */
diff --git a/camel/camel-stream-mem.c b/camel/camel-stream-mem.c
deleted file mode 100644
index 77941894b7..0000000000
--- a/camel/camel-stream-mem.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-mem.c: memory buffer based stream */
-
-/*
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel-stream-mem.h"
-#include 
-#include 
-#include 
-#include 
-
-static CamelSeekableStreamClass *parent_class = NULL;
-
-/* Returns the class for a CamelStreamMem */
-#define CSM_CLASS(so) CAMEL_STREAM_MEM_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-
-static ssize_t stream_read (CamelStream *stream, char *buffer, size_t n);
-static ssize_t stream_write (CamelStream *stream, const char *buffer, size_t n);
-static gboolean stream_eos (CamelStream *stream);
-static off_t stream_seek (CamelSeekableStream *stream, off_t offset,
-			  CamelStreamSeekPolicy policy);
-
-static void camel_stream_mem_finalize (CamelObject *object);
-
-static void
-camel_stream_mem_class_init (CamelStreamMemClass *camel_stream_mem_class)
-{
-	CamelSeekableStreamClass *camel_seekable_stream_class =
-		CAMEL_SEEKABLE_STREAM_CLASS (camel_stream_mem_class);
-	CamelStreamClass *camel_stream_class =
-		CAMEL_STREAM_CLASS (camel_stream_mem_class);
-
-	parent_class = CAMEL_SEEKABLE_STREAM_CLASS( camel_type_get_global_classfuncs( CAMEL_SEEKABLE_STREAM_TYPE ) );
-
-	/* virtual method overload */
-	camel_stream_class->read = stream_read;
-	camel_stream_class->write = stream_write;
-	camel_stream_class->eos = stream_eos;
-
-	camel_seekable_stream_class->seek = stream_seek;
-}
-
-static void
-camel_stream_mem_init (CamelObject *object)
-{
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (object);
-
-	stream_mem->owner = FALSE;
-	stream_mem->buffer = 0;
-}
-
-CamelType
-camel_stream_mem_get_type (void)
-{
-	static CamelType camel_stream_mem_type = CAMEL_INVALID_TYPE;
-
-	if (camel_stream_mem_type == CAMEL_INVALID_TYPE) {
-		camel_stream_mem_type = camel_type_register( CAMEL_SEEKABLE_STREAM_TYPE,
-							     "CamelStreamMem",
-							     sizeof( CamelStreamMem ),
-							     sizeof( CamelStreamMemClass ),
-							     (CamelObjectClassInitFunc) camel_stream_mem_class_init,
-							     NULL,
-							     (CamelObjectInitFunc) camel_stream_mem_init,
-							     (CamelObjectFinalizeFunc) camel_stream_mem_finalize );
-	}
-
-	return camel_stream_mem_type;
-}
-
-
-CamelStream *
-camel_stream_mem_new (void)
-{
-	return camel_stream_mem_new_with_byte_array (g_byte_array_new ());
-}
-
-CamelStream *
-camel_stream_mem_new_with_buffer (const char *buffer, size_t len)
-{
-	GByteArray *ba;
-
-	ba = g_byte_array_new ();
-	g_byte_array_append (ba, (const guint8 *)buffer, len);
-	return camel_stream_mem_new_with_byte_array (ba);
-}
-
-CamelStream *
-camel_stream_mem_new_with_byte_array (GByteArray *byte_array)
-{
-	CamelStreamMem *stream_mem;
-
-	stream_mem = CAMEL_STREAM_MEM( camel_object_new (CAMEL_STREAM_MEM_TYPE) );
-	stream_mem->buffer = byte_array;
-	stream_mem->owner = TRUE;
-
-	return CAMEL_STREAM (stream_mem);
-}
-
-/* note: with these functions the caller is the 'owner' of the buffer */
-void camel_stream_mem_set_byte_array (CamelStreamMem *s, GByteArray *buffer)
-{
-	if (s->buffer && s->owner)
-		g_byte_array_free(s->buffer, TRUE);
-	s->owner = FALSE;
-	s->buffer = buffer;
-}
-
-void camel_stream_mem_set_buffer (CamelStreamMem *s, const char *buffer,
-				  size_t len)
-{
-	GByteArray *ba;
-
-	ba = g_byte_array_new ();
-	g_byte_array_append (ba, (const guint8 *)buffer, len);
-	camel_stream_mem_set_byte_array(s, ba);
-}
-
-static void
-camel_stream_mem_finalize (CamelObject *object)
-{
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (object);
-
-	if (stream_mem->buffer && stream_mem->owner)
-		g_byte_array_free (stream_mem->buffer, TRUE);
-
-	/* Will be called automagically in the Camel Type System!
-	 * Wheeee!
-	 * G_TK_OBJECT_CLASS (parent_class)->finalize (object);
-	 */
-}
-
-static ssize_t
-stream_read (CamelStream *stream, char *buffer, size_t n)
-{
-	CamelStreamMem *camel_stream_mem = CAMEL_STREAM_MEM (stream);
-	CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
-	ssize_t nread;
-
-	if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
-		n = MIN(seekable->bound_end - seekable->position, n);
-
-	nread = MIN (n, camel_stream_mem->buffer->len - seekable->position);
-	if (nread > 0) {
-		memcpy (buffer, camel_stream_mem->buffer->data +
-			seekable->position, nread);
-		seekable->position += nread;
-	} else
-		nread = -1;
-
-	return nread;
-}
-
-static ssize_t
-stream_write (CamelStream *stream, const char *buffer, size_t n)
-{
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (stream);
-	CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
-	ssize_t nwrite = n;
-	
-	if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
-		nwrite = MIN(seekable->bound_end - seekable->position, n);
-
-#ifndef NO_WARNINGS
-#warning "g_byte_arrays use g_malloc and so are totally unsuitable for this object"
-#endif
-	if (seekable->position == stream_mem->buffer->len) {
-		stream_mem->buffer =
-			g_byte_array_append (stream_mem->buffer, (const guint8 *)buffer, nwrite);
-	} else {
-		g_byte_array_set_size (stream_mem->buffer,
-				       nwrite + stream_mem->buffer->len);
-		memcpy (stream_mem->buffer->data + seekable->position, buffer, nwrite);
-	}
-	seekable->position += nwrite;
-
-	return nwrite;
-}
-
-static gboolean
-stream_eos (CamelStream *stream)
-{
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (stream);
-	CamelSeekableStream *seekable_stream = CAMEL_SEEKABLE_STREAM (stream);
-
-	return stream_mem->buffer->len <= seekable_stream->position;
-}
-
-static off_t
-stream_seek (CamelSeekableStream *stream, off_t offset,
-	     CamelStreamSeekPolicy policy)
-{
-	off_t position;
-	CamelStreamMem *stream_mem = CAMEL_STREAM_MEM (stream);
-
-	switch  (policy) {
-	case CAMEL_STREAM_SET:
-		position = offset;
-		break;
-	case CAMEL_STREAM_CUR:
-		position = stream->position + offset;
-		break;
-	case CAMEL_STREAM_END:
-		position = (stream_mem->buffer)->len + offset;
-		break;
-	default:
-		position = offset;
-		break;
-	}
-
-	if (stream->bound_end != CAMEL_STREAM_UNBOUND)
-		position = MIN (position, stream->bound_end);
-	if (stream->bound_start != CAMEL_STREAM_UNBOUND)
-		position = MAX (position, 0);
-	else
-		position = MAX (position, stream->bound_start);
-
-	if (position > stream_mem->buffer->len) {
-		int oldlen = stream_mem->buffer->len;
-		g_byte_array_set_size (stream_mem->buffer, position);
-		memset (stream_mem->buffer->data + oldlen, 0,
-			position - oldlen);
-	}
-
-	stream->position = position;
-
-	return position;
-}
diff --git a/camel/camel-stream-mem.h b/camel/camel-stream-mem.h
deleted file mode 100644
index b27503efb6..0000000000
--- a/camel/camel-stream-mem.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-stream-mem.h: stream based on memory buffer */
-
-/*
- * Authors: Bertrand Guiheneuf 
- *	    Michael Zucchi 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_STREAM_MEM_H
-#define CAMEL_STREAM_MEM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-
-#define CAMEL_STREAM_MEM_TYPE     (camel_stream_mem_get_type ())
-#define CAMEL_STREAM_MEM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_MEM_TYPE, CamelStreamMem))
-#define CAMEL_STREAM_MEM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_MEM_TYPE, CamelStreamMemClass))
-#define CAMEL_IS_STREAM_MEM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_MEM_TYPE))
-
-typedef struct _CamelStreamMemClass CamelStreamMemClass;
-
-struct _CamelStreamMem {
-	CamelSeekableStream parent_object;
-
-	gboolean owner;		/* do we own the buffer? */
-	GByteArray *buffer;
-};
-
-struct _CamelStreamMemClass {
-	CamelSeekableStreamClass parent_class;
-
-	/* Virtual methods */
-};
-
-/* Standard Camel function */
-CamelType camel_stream_mem_get_type (void);
-
-/* public methods */
-CamelStream *camel_stream_mem_new (void);
-CamelStream *camel_stream_mem_new_with_byte_array (GByteArray *buffer);
-CamelStream *camel_stream_mem_new_with_buffer (const char *buffer, size_t len);
-
-/* these are really only here for implementing classes */
-void camel_stream_mem_set_byte_array (CamelStreamMem *, GByteArray *buffer);
-void camel_stream_mem_set_buffer (CamelStreamMem *, const char *buffer, size_t len);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_MEM_H */
diff --git a/camel/camel-stream.c b/camel/camel-stream.c
deleted file mode 100644
index f649494b2d..0000000000
--- a/camel/camel-stream.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-stream.c : abstract class for a stream */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel-stream.h"
-
-static CamelObjectClass *parent_class = NULL;
-
-/* Returns the class for a CamelStream */
-#define CS_CLASS(so) CAMEL_STREAM_CLASS(CAMEL_OBJECT_GET_CLASS(so))
-
-static int stream_flush   (CamelStream *stream);
-static int stream_close   (CamelStream *stream);
-static gboolean stream_eos (CamelStream *stream);
-
-
-static void
-camel_stream_class_init (CamelStreamClass *camel_stream_class)
-{
-	parent_class = camel_type_get_global_classfuncs( CAMEL_OBJECT_TYPE );
-
-	/* virtual method definition */
-	camel_stream_class->flush = stream_flush;
-	camel_stream_class->close = stream_close;
-	camel_stream_class->eos = stream_eos;
-}
-
-CamelType
-camel_stream_get_type (void)
-{
-	static CamelType camel_stream_type = CAMEL_INVALID_TYPE;
-
-	if (camel_stream_type == CAMEL_INVALID_TYPE) {
-		camel_stream_type = camel_type_register( CAMEL_OBJECT_TYPE,
-							 "CamelStream",
-							 sizeof( CamelStream ),
-							 sizeof( CamelStreamClass ),
-							 (CamelObjectClassInitFunc) camel_stream_class_init,
-							 NULL,
-							 NULL,
-							 NULL );
-	}
-
-	return camel_stream_type;
-}
-
-/**
- * camel_stream_read:
- * @stream: a CamelStream.
- * @buffer: buffer where bytes pulled from the stream are stored.
- * @n: max number of bytes to read.
- *
- * Read at most @n bytes from the @stream object and stores them
- * in the buffer pointed at by @buffer.
- *
- * Return value: number of bytes actually read, or -1 on error and
- * set errno.
- **/
-ssize_t
-camel_stream_read (CamelStream *stream, char *buffer, size_t n)
-{
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-	g_return_val_if_fail (n == 0 || buffer, -1);
-
-	return CS_CLASS (stream)->read (stream, buffer, n);
-}
-
-/**
- * camel_stream_write:
- * @stream: a CamelStream object.
- * @buffer: buffer to write.
- * @n: number of bytes to write
- *
- * Write @n bytes from the buffer pointed at by @buffer into @stream.
- *
- * Return value: the number of bytes actually written to the stream,
- * or -1 on error.
- **/
-ssize_t
-camel_stream_write (CamelStream *stream, const char *buffer, size_t n)
-{
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-	g_return_val_if_fail (n == 0 || buffer, -1);
-
-	return CS_CLASS (stream)->write (stream, buffer, n);
-}
-
-
-static int
-stream_flush (CamelStream *stream)
-{
-	/* nothing */
-	return 0;
-}
-
-/**
- * camel_stream_flush:
- * @stream: a CamelStream object
- *
- * Flushes the contents of the stream to its backing store. Only meaningful
- * on writable streams.
- *
- * Return value: -1 on error.
- **/
-int
-camel_stream_flush (CamelStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-
-	return CS_CLASS (stream)->flush (stream);
-}
-
-
-static int
-stream_close (CamelStream *stream)
-{
-	/* nothing */
-	return 0;
-}
-
-/**
- * camel_stream_close:
- * @stream: 
- * 
- * Close a stream.
- * 
- * Return value: -1 on error.
- **/
-int
-camel_stream_close (CamelStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-
-	return CS_CLASS (stream)->close (stream);
-}
-
-
-static gboolean
-stream_eos (CamelStream *stream)
-{
-	return stream->eos;
-}
-
-/**
- * camel_stream_eos:
- * @stream: a CamelStream object
- *
- * Test if there are bytes left to read on the @stream object.
- *
- * Return value: %TRUE if all the contents on the stream has been read, or
- * %FALSE if information is still available.
- **/
-gboolean
-camel_stream_eos (CamelStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), TRUE);
-
-	return CS_CLASS (stream)->eos (stream);
-}
-
-
-/**
- * camel_stream_reset: reset a stream
- * @stream: the stream object
- *
- * Reset a stream. That is, put it in a state where it can be read
- * from the beginning again. Not all streams in Camel are seekable,
- * but they must all be resettable.
- *
- * Return value: -1 on error.
- **/
-int
-camel_stream_reset (CamelStream *stream)
-{
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-
-	return CS_CLASS (stream)->reset (stream);
-}
-
-/***************** Utility functions ********************/
-
-/**
- * camel_stream_write_string:
- * @stream: a stream object
- * @string: a string
- *
- * Writes the string to the stream.
- *
- * Return value: the number of characters output, -1 on error.
- **/
-ssize_t
-camel_stream_write_string (CamelStream *stream, const char *string)
-{
-	return camel_stream_write (stream, string, strlen (string));
-}
-
-/**
- * camel_stream_printf:
- * @stream: a stream object
- * @fmt: a printf-style format string
- *
- * This printfs the given data to @stream.
- *
- * Return value: the number of characters output, -1 on error.
- **/
-ssize_t
-camel_stream_printf (CamelStream *stream, const char *fmt, ... )
-{
-	va_list args;
-	char *string;
-	int ret;
-
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-
-	va_start (args, fmt);
-	string = g_strdup_vprintf (fmt, args);
-	va_end (args);
-
-	if (!string)
-		return -1;
-
-	ret = camel_stream_write (stream, string, strlen (string));
-	g_free (string);
-	return ret;
-}
-
-/**
- * camel_stream_write_to_stream:
- * @stream: Source CamelStream.
- * @output_stream: Destination CamelStream.
- *
- * Write all of a stream (until eos) into another stream, in a blocking
- * fashion.
- *
- * Return value: Returns -1 on error, or the number of bytes succesfully
- * copied across streams.
- **/
-ssize_t
-camel_stream_write_to_stream (CamelStream *stream, CamelStream *output_stream)
-{
-	char tmp_buf[4096];
-	ssize_t total = 0;
-	ssize_t nb_read;
-	ssize_t nb_written;
-
-	g_return_val_if_fail (CAMEL_IS_STREAM (stream), -1);
-	g_return_val_if_fail (CAMEL_IS_STREAM (output_stream), -1);
-
-	while (!camel_stream_eos (stream)) {
-		nb_read = camel_stream_read (stream, tmp_buf, sizeof (tmp_buf));
-		if (nb_read < 0)
-			return -1;
-		else if (nb_read > 0) {
-			nb_written = 0;
-
-			while (nb_written < nb_read) {
-				ssize_t len = camel_stream_write (output_stream, tmp_buf + nb_written,
-								  nb_read - nb_written);
-				if (len < 0)
-					return -1;
-				nb_written += len;
-			}
-			total += nb_written;
-		}
-	}
-	return total;
-}
diff --git a/camel/camel-stream.h b/camel/camel-stream.h
deleted file mode 100644
index dec4e638e1..0000000000
--- a/camel/camel-stream.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-stream.h : class for an abstract stream */
-
-/*
- * Author:
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_STREAM_H
-#define CAMEL_STREAM_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-
-#define CAMEL_STREAM_TYPE     (camel_stream_get_type ())
-#define CAMEL_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_TYPE, CamelStream))
-#define CAMEL_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_TYPE, CamelStreamClass))
-#define CAMEL_IS_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_TYPE))
-
-struct _CamelStream
-{
-	CamelObject parent_object;
-
-	gboolean eos;
-};
-
-typedef struct {
-	CamelObjectClass parent_class;
-
-	/* Virtual methods */
-
-	ssize_t   (*read)       (CamelStream *stream, char *buffer, size_t n);
-	ssize_t   (*write)      (CamelStream *stream, const char *buffer, size_t n);
-	int       (*close)      (CamelStream *stream);
-	int       (*flush)      (CamelStream *stream);
-	gboolean  (*eos)        (CamelStream *stream);
-	int       (*reset)      (CamelStream *stream);
-
-} CamelStreamClass;
-
-/* Standard Camel function */
-CamelType camel_stream_get_type (void);
-
-/* public methods */
-ssize_t    camel_stream_read       (CamelStream *stream, char *buffer, size_t n);
-ssize_t    camel_stream_write      (CamelStream *stream, const char *buffer, size_t n);
-int        camel_stream_flush      (CamelStream *stream);
-int        camel_stream_close      (CamelStream *stream);
-gboolean   camel_stream_eos        (CamelStream *stream);
-int        camel_stream_reset      (CamelStream *stream);
-
-/* utility macros and funcs */
-ssize_t camel_stream_write_string (CamelStream *stream, const char *string);
-ssize_t camel_stream_printf (CamelStream *stream, const char *fmt, ... ) G_GNUC_PRINTF (2, 3);
-ssize_t camel_stream_vprintf (CamelStream *stream, const char *fmt, va_list ap);
-
-/* Write a whole stream to another stream, until eof or error on
- * either stream.
- */
-ssize_t camel_stream_write_to_stream (CamelStream *stream, CamelStream *output_stream);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_STREAM_H */
diff --git a/camel/camel-thread-proxy.c b/camel/camel-thread-proxy.c
deleted file mode 100644
index 9553499e8f..0000000000
--- a/camel/camel-thread-proxy.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-pt-proxy.c : proxy folder using posix threads */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-#include 
-#include "camel-marshal-utils.h"
-#include "camel-thread-proxy.h"
-#include 
-#include 
-#include 
-#include 
-
-
-
-/* vocabulary: 
- *  operation: commanded by the main thread, executed by the child thread
- *  callback: commanded by the child thread, generally when an operation is 
- *    completed. Executed in the main thread, 
- */
-
-/* needed for proper casts of async funcs when 
- * calling pthreads_create
- */
-typedef void * (*thread_call_func) (void *);
-
-/* forward declarations */
-static gboolean  
-_thread_notification_catch (GIOChannel *source,
-			    GIOCondition condition,
-			    gpointer data);
-
-static void
-_notify_availability (CamelThreadProxy *proxy, gchar op_name);
-
-static int
-_init_notify_system (CamelThreadProxy *proxy);
-
-
-
-/**
- * camel_thread_proxy_new: create a new proxy object
- *  
- * Create a new proxy object. This proxy object can be used 
- * to run async operations and this operations can trigger 
- * callbacks. It can also be used to proxy signals.
- * 
- * Return value: The newly created proxy object
- **/
-CamelThreadProxy *
-camel_thread_proxy_new (void)
-{
-	CamelThreadProxy *proxy;
-	
-	proxy = g_new (CamelThreadProxy, 1);
-	if (!proxy)
-		return NULL;
-
-	proxy->server_op_queue = camel_op_queue_new ();
-	proxy->client_op_queue = camel_op_queue_new ();
-	proxy->signal_data_cond = g_cond_new();
-	proxy->signal_data_mutex = g_mutex_new();
-	if (_init_notify_system (proxy) < 0) {
-		g_free (proxy);
-		return NULL;
-	}
-	return proxy;
-}
-
-
-/**
- * camel_thread_proxy_free: free a proxy object
- * @proxy: proxy object to free
- * 
- * free a proxy object
- **/
-void 
-camel_thread_proxy_free (CamelThreadProxy *proxy)
-{
-	g_cond_free (proxy->signal_data_cond);
-	g_mutex_free (proxy->signal_data_mutex);
-	camel_op_queue_free (proxy->server_op_queue);
-	camel_op_queue_free (proxy->client_op_queue);
-}
-
-
-
-
-
-/* Operations handling */
-
-
-/**
- * _op_run_free_notify:
- * @folder: folder to notify when the operation is completed. 
- * @op: operation to run. 
- * 
- * run an operation, free the operation field
- * and then notify the main thread of the op
- * completion.
- * 
- * this routine is intended to be called 
- * in a new thread (in _run_next_op_in_thread)
- * 
- **/
-void
-_op_run_free_and_notify (CamelOp *op)
-{
-	CamelThreadProxy *th_proxy;
-	
-	camel_op_run (op);
-	camel_op_free (op);
-	th_proxy = camel_op_get_user_data (op);
-	_notify_availability (th_proxy, 'a');
-}
-
-
-/**
- * _run_next_op_in_thread:  
- * @proxy_object: 
- * 
- * run the next operation pending in the proxy 
- * operation queue
- **/
-static void 
-_run_next_op_in_thread (CamelThreadProxy *proxy)
-{
-	CamelOp *op;
-	CamelOpQueue *server_op_queue;
-	pthread_t thread;
-
-	server_op_queue = proxy->server_op_queue;
-	/* get the next pending operation */
-	op = camel_op_queue_pop_op (server_op_queue);
-	if (!op) {
-		camel_op_queue_set_service_availability (server_op_queue, TRUE);
-		return;
-	}
-	
-	/* run the operation in a child thread */
-	pthread_create (&thread, NULL, (thread_call_func) _op_run_free_and_notify, op);
-}
-
-
-
-/**
- * camel_thread_proxy_push_op: push an operation in the proxy operation queue
- * @proxy: proxy object 
- * @op: operation to push in the execution queue
- * 
- * if no thread is currently running, executes the 
- * operation directly, otherwise push the operation 
- * in the proxy operation queue.
- **/
-void 
-camel_thread_proxy_push_op (CamelThreadProxy *proxy, CamelOp *op)
-{
-	CamelOpQueue *server_op_queue;
-	
-	g_assert (proxy);
-	server_op_queue = proxy->server_op_queue;
-	
-	/* put the proxy object in the user data
-	   so that it can be notified when the 
-	   operation is completed */
-	camel_op_set_user_data (op, (gpointer)proxy);
-	
-	/* get next operation */
-	camel_op_queue_push_op (server_op_queue, op);
-	
-	if (camel_op_queue_get_service_availability (server_op_queue)) {
-		/* no thread is currently running, run 
-		 * the next operation. */
-		camel_op_queue_set_service_availability (server_op_queue, FALSE);
-		/* when the operation is completed in the 
-		   child thread the main thread gets 
-		   notified and executes next operation 
-		   (see _thread_notification_catch, case 'a')
-		   so there is no need to set the service
-		   availability to FALSE except here 
-		*/
-		_run_next_op_in_thread (proxy);		
-	}
-}
-/**
- * _op_run_and_free: Run an operation and free it
- * @op: Operation object
- * 
- * Run an operation object in the current thread 
- * and free it.
- **/
-static void
-_op_run_and_free (CamelOp *op)
-{
-	camel_op_run (op);
-	camel_op_free (op);
-}
-
-
-
-
-
-
-/* Callbacks handling */
-
-/**
- * _run_next_cb: Run next callback pending in a proxy object 
- * @proxy: Proxy object 
- * 
- * Run next callback in the callback queue of a proxy object 
- **/
-static void 
-_run_next_cb (CamelThreadProxy *proxy)
-{
-	CamelOp *op;
-	CamelOpQueue *client_op_queue;
-
-	client_op_queue = proxy->client_op_queue;
-
-	/* get the next pending operation */
-	op = camel_op_queue_pop_op (client_op_queue);
-	if (!op) return;
-	
-	/* run the operation in the main thread */
-	_op_run_and_free (op);
-}
-
-
-/**
- * camel_thread_proxy_push_cb: push a callback in the client queue
- * @proxy: proxy object concerned by the callback
- * @cb: callback to push
- * 
- * Push an operation in the client queue, ie the queue 
- * containing the operations (callbacks) intended to be
- * executed in the main thread.
- **/
-void 
-camel_thread_proxy_push_cb (CamelThreadProxy *proxy, CamelOp *cb)
-{
-	CamelOpQueue *client_op_queue;
-	
-	client_op_queue = proxy->client_op_queue;
-
-	/* put the proxy object in the user data
-	   so that it can be notified when the 
-	   operation is completed */
-	camel_op_set_user_data (cb, (gpointer)proxy);
-	
-	/* push the callback in the client queue */
-	camel_op_queue_push_op (client_op_queue, cb);
-	
-	/* tell the main thread a new callback is there */
-	_notify_availability (proxy, 'c');
-}  
-
-
-
-/**
- * _init_notify_system: set the notify channel up
- * @proxy: proxy object 
- * 
- * called once to set the notification channel up
- **/
-static int
-_init_notify_system (CamelThreadProxy *proxy)
-{
-	int filedes[2];
-
-	/* set up the notification channel */
-	if (pipe (filedes) < 0) {
-		g_warning ("could not create pipe in "
-			   "CamelThreadProxy::_init_notify_system\n");
-		return -1;
-	}
-	
-	
-	proxy->pipe_client_fd = filedes [0];
-	proxy->pipe_server_fd = filedes [1];
-	proxy->notify_source =  g_io_channel_unix_new (filedes [0]);
-	proxy->notify_channel =  g_io_channel_unix_new (filedes [1]);
-	
-	/* the _thread_notification_catch function 
-	* will be called in the main thread when the 
-	* child thread writes some data in the channel */ 
-	g_io_add_watch (proxy->notify_source, G_IO_IN,
-			_thread_notification_catch, 
-			proxy);
-	
-	return 1;
-}
-
-/**
- * _notify_availability: notify the main thread from an event
- * @proxy: proxy object
- * @op_name: operation name
- *
- * called by child thread  to notify the main 
- * thread  something is available for him.
- * What this thing is depends on  @op_name:
- *
- * 'a' : thread available. That means the thread is ready 
- *       to process an operation. 
- * 's' : a signal is available. Used by the signal proxy.
- *
- */
-static void
-_notify_availability (CamelThreadProxy *proxy, gchar op_name)
-{
-	GIOChannel *notification_channel;
-	guint bytes_written;
-
-	notification_channel = proxy->notify_channel;	
-
-	do {
-		/* the write operation will trigger the
-		 * watch on the main thread side */
-		g_io_channel_write  (notification_channel,
-				     &op_name,
-				     1,
-				     &bytes_written);	
-	} while (bytes_written < 1);
-}
-
-
-
-/* signal proxying */
-
-
-
-/**
- * _signal_marshaller_server_side: called in the child thread to proxy a signal    
- * @object: 
- * @data: 
- * @n_args: 
- * @args: 
- * 
- * 
- **/
-static void
-_signal_marshaller_server_side (GtkObject *object,
-				gpointer data,
-				guint n_args,
-				GtkArg *args)
-{
-	CamelThreadProxy *proxy;
-	guint signal_id;
-	
-	proxy = CAMEL_THREAD_PROXY (gtk_object_get_data (object, "__proxy__"));
-	signal_id = (guint)data;
-	g_assert (proxy);
-
-	g_mutex_lock (proxy->signal_data_mutex);
-	
-	/* we are going to wait for the main client thread 
-	 * to have emitted the last signal we asked him
-	 * to proxy.
-	 */
-	while (proxy->signal_data.args)
-		g_cond_wait (proxy->signal_data_cond,
-			     proxy->signal_data_mutex);
-
-	proxy->signal_data.signal_id = signal_id;
-	proxy->signal_data.args = args;
-
-	
-	g_mutex_unlock (proxy->signal_data_mutex);
-
-	/* tell the main thread there is a signal pending */
-	_notify_availability (proxy, 's');
-}
-
-
-static void
-_signal_marshaller_client_side (CamelThreadProxy *proxy)
-{
-	g_mutex_lock (proxy->signal_data_mutex);
-	g_assert (proxy->signal_data.args);
-	
-	/* emit the pending signal */
-	gtk_signal_emitv (GTK_OBJECT (proxy), 
-			  proxy->signal_data.signal_id,
-			  proxy->signal_data.args);
-
-	proxy->signal_data.args = NULL;
-
-	/* if waiting for the signal to be treated,
-	 * awake the client thread up 
-	 */ 
-	g_cond_signal (proxy->signal_data_cond);
-	g_mutex_unlock (proxy->signal_data_mutex);	
-}
-
-
-/**
- * camel_thread_proxy_add_signals: init the signal proxy
- * @proxy: proxy 
- * @proxy_object: Proxy Gtk Object 
- * @real_object: Real Gtk Object 
- * @signal_to_proxy: NULL terminated array of signal name 
- * 
- * Add some signals to the list of signals to be 
- * proxied by the proxy object.
- * The signals emitted by the real object in the child
- * thread are reemited by the proxy object in the 
- * main thread.
- **/
-void 
-camel_thread_proxy_add_signals (CamelThreadProxy *proxy, 
-				GtkObject *proxy_object,
-				GtkObject *real_object,
-				char *signal_to_proxy[])
-{
-	guint i;
- 
-	for (i=0; signal_to_proxy[i]; i++) {
-		/* connect the signal to the signal marshaller
-		 * user_data is the signal id */
-		gtk_signal_connect_full (GTK_OBJECT (real_object),
-					 signal_to_proxy[i],
-					 NULL,
-					 _signal_marshaller_server_side,
-					 (gpointer)gtk_signal_lookup (signal_to_proxy[i], 
-								      GTK_OBJECT_CLASS (real_object)->type),
-					 NULL,
-					 TRUE,
-					 FALSE);
-	}
-}
-
-/****   catch notification from child thread ****/
-/**
- * _thread_notification_catch: call by glib loop when data is available on the thread io channel
- * @source: 
- * @condition: 
- * @data: 
- * 
- * called by watch set on the IO channel
- * 
- * Return value: TRUE because we don't want the watch to be removed
- **/
-static gboolean  
-_thread_notification_catch (GIOChannel *source,
-			    GIOCondition condition,
-			    gpointer data)
-{
-	CamelThreadProxy *proxy = CAMEL_THREAD_PROXY (data);	
-	gchar op_name;
-	guint bytes_read;
-	GIOError error;
-
-	error = g_io_channel_read (source,
-				   &op_name,
-				   1,
-				   &bytes_read);
-	
-	while ((!error) && (bytes_read == 1)) {
-		
-		switch (op_name) { 		
-		case 'a': /* the thread is OK for a new operation */
-			_run_next_op_in_thread (proxy);		
-			break;
-		case 's': /* there is a pending signal to proxy */
-			_signal_marshaller_client_side (proxy);
-			break;
-		case 'c': /* there is a cb pending in the main thread */
-			_run_next_cb (proxy);
-			break;
-		}
-		
-		error = g_io_channel_read (source,
-					   &op_name,
-					   1,
-					   &bytes_read);
-
-	}
-
-	/* do not remove the io watch */
-	return TRUE;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/camel/camel-thread-proxy.h b/camel/camel-thread-proxy.h
deleted file mode 100644
index 050d8ed598..0000000000
--- a/camel/camel-thread-proxy.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-folder-pt-proxy.h : proxy folder using posix threads */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-
-
-#ifndef CAMEL_THREAD_PROXY_H
-#define CAMEL_THREAD_PROXY_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-#define CAMEL_THREAD_PROXY(o)  (CamelThreadProxy *)(o)
-
-
-typedef struct {
-	guint signal_id;
-	GtkArg *args;
-} CamelThreadProxySignalData;
-
-
-typedef struct {
-
-	GtkObject *real_object;
-	GtkObject *proxy_object;
-	
-	CamelOpQueue *server_op_queue;
-	CamelOpQueue *client_op_queue;
-
-  
-	gint pipe_client_fd;
-	gint pipe_server_fd;
-	GIOChannel *notify_source;
-	GIOChannel *notify_channel;
-
-	/* signal proxy */
-	GMutex *signal_data_mutex;
-	GCond *signal_data_cond;
-	CamelThreadProxySignalData signal_data;
-
-} CamelThreadProxy;
-
-
-CamelThreadProxy *camel_thread_proxy_new (void);
-void camel_thread_proxy_free (CamelThreadProxy *proxy);
-
-void camel_thread_proxy_push_op (CamelThreadProxy *proxy, CamelOp *op);
-void camel_thread_proxy_push_cb (CamelThreadProxy *proxy, CamelOp *cb);
-
-void camel_thread_proxy_add_signals (CamelThreadProxy *proxy, 
-				     GtkObject *proxy_object,
-				     GtkObject *real_object,
-				     char *signal_to_proxy[]);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_THREAD_PROXY_H */
-
-
diff --git a/camel/camel-transport.c b/camel/camel-transport.c
deleted file mode 100644
index ff07728f5f..0000000000
--- a/camel/camel-transport.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-transport.c : Abstract class for an email transport */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#include 
-#include "camel-transport.h"
-#include "camel-exception.h"
-
-/* Returns the class for a CamelTransport */
-#define CT_CLASS(so) CAMEL_TRANSPORT_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-CamelType
-camel_transport_get_type (void)
-{
-	static CamelType camel_transport_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_transport_type == CAMEL_INVALID_TYPE)	{
-		camel_transport_type = camel_type_register (CAMEL_SERVICE_TYPE, "CamelTransport",
-							    sizeof (CamelTransport),
-							    sizeof (CamelTransportClass),
-							    NULL,
-							    NULL,
-							    NULL,
-							    NULL);
-	}
-	
-	return camel_transport_type;
-}
-
-
-/**
- * camel_transport_can_send: Determine if a message is send-able on a transport
- * @transport: the transport
- * @message: the message
- *
- * Determines if a CamelMedium is of an appropriate subclass to send
- * via the given @transport. (Mail transports are not able to send
- * netnews articles, and vice versa.)
- *
- * Return value: TRUE or FALSE
- **/
-gboolean
-camel_transport_can_send (CamelTransport *transport, CamelMedium *message)
-{
-	return CT_CLASS (transport)->can_send (transport, message);
-}
-
-/**
- * camel_transport_send: Send a message via a transport
- * @transport: the transport
- * @message: the message
- * @ex: a CamelException
- *
- * Sends the message to the recipients indicated in the message.
- *
- * Return value: success or failure.
- **/
-gboolean
-camel_transport_send (CamelTransport *transport, CamelMedium *message,
-		      CamelException *ex)
-{
-	return CT_CLASS (transport)->send (transport, message, ex);
-}
-
-/**
- * camel_transport_send_to: Send a message non-standard recipients
- * @transport: the transport
- * @message: the message
- * @recipients: the recipients
- * @ex: a CamelException
- *
- * Sends the message to the given recipients, rather than to the
- * recipients indicated in the message.
- *
- * Return value: success or failure.
- **/
-gboolean
-camel_transport_send_to (CamelTransport *transport, CamelMedium *message,
-			 GList *recipients, CamelException *ex)
-{
-	return CT_CLASS (transport)->send_to (transport, message,
-					      recipients, ex);
-}
diff --git a/camel/camel-transport.h b/camel/camel-transport.h
deleted file mode 100644
index 0b66bd8eac..0000000000
--- a/camel/camel-transport.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-transport.h : Abstract class for an email transport */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_TRANSPORT_H
-#define CAMEL_TRANSPORT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-#define CAMEL_TRANSPORT_TYPE     (camel_transport_get_type ())
-#define CAMEL_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_TRANSPORT_TYPE, CamelTransport))
-#define CAMEL_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_TRANSPORT_TYPE, CamelTransportClass))
-#define CAMEL_IS_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_TRANSPORT_TYPE))
-
-
-struct _CamelTransport
-{
-	CamelService parent_object;
-
-};
-
-
-
-typedef struct {
-	CamelServiceClass parent_class;
-
-	gboolean (*can_send) (CamelTransport *transport, CamelMedium *message);
-	gboolean (*send) (CamelTransport *transport, CamelMedium *message,
-			  CamelException *ex);
-	gboolean (*send_to) (CamelTransport *transport,
-			     CamelMedium *message, GList *recipients,
-			     CamelException *ex);
-} CamelTransportClass;
-
-
-/* public methods */
-gboolean camel_transport_can_send (CamelTransport *transport,
-				   CamelMedium *message);
-
-gboolean camel_transport_send (CamelTransport *transport,
-			       CamelMedium *message,
-			       CamelException *ex);
-
-gboolean camel_transport_send_to (CamelTransport *transport,
-				  CamelMedium *message,
-				  GList *recipients,
-				  CamelException *ex);
-
-/* Standard Camel function */
-CamelType camel_transport_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_TRANSPORT_H */
diff --git a/camel/camel-types.h b/camel/camel-types.h
deleted file mode 100644
index d6813cb863..0000000000
--- a/camel/camel-types.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef CAMEL_TYPES_H
-#define CAMEL_TYPES_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-typedef struct _CamelAddress CamelAddress;
-typedef struct _CamelDataWrapper CamelDataWrapper;
-typedef struct _CamelException CamelException;
-typedef struct _CamelFolder CamelFolder;
-typedef struct _CamelFolderSearch CamelFolderSearch;
-typedef struct _CamelFolderSummary CamelFolderSummary;
-typedef struct _CamelInternetAddress CamelInternetAddress;
-typedef struct _CamelMedium CamelMedium;
-typedef struct _CamelMimeFilter CamelMimeFilter;
-typedef struct _CamelMimeFilterBasic CamelMimeFilterBasic;
-typedef struct _CamelMimeFilterCharset CamelMimeFilterCharset;
-typedef struct _CamelMimeFilterIndex CamelMimeFilterIndex;
-typedef struct _CamelMimeFilterSave CamelMimeFilterSave;
-typedef struct _CamelMimeFilterCRLF CamelMimeFilterCRLF;
-typedef struct _CamelMimeMessage CamelMimeMessage;
-typedef struct _CamelMimeParser CamelMimeParser;
-typedef struct _CamelMimePart CamelMimePart;
-typedef struct _CamelMultipart CamelMultipart;
-typedef struct _CamelNewsAddress CamelNewsAddress;
-typedef struct _CamelSeekableStream CamelSeekableStream;
-typedef struct _CamelSeekableSubstream CamelSeekableSubstream;
-typedef struct _CamelService CamelService;
-typedef struct _CamelSession CamelSession;
-typedef struct _CamelSimpleDataWrapper CamelSimpleDataWrapper;
-typedef struct _CamelStore CamelStore;
-typedef struct _CamelStream CamelStream;
-typedef struct _CamelStreamBuffer CamelStreamBuffer;
-typedef struct _CamelStreamDataWrapper CamelStreamDataWrapper;
-typedef struct _CamelStreamFilter CamelStreamFilter;
-typedef struct _CamelStreamFs CamelStreamFs;
-typedef struct _CamelStreamMem CamelStreamMem;
-typedef struct _CamelTransport CamelTransport;
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_TYPES_H */
-
-
-
diff --git a/camel/camel-uid-cache.c b/camel/camel-uid-cache.c
deleted file mode 100644
index 2b5faddb91..0000000000
--- a/camel/camel-uid-cache.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-uid-cache.c: UID caching code. */
-
-/* 
- * Authors:
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-uid-cache.h"
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-static void free_uid (gpointer key, gpointer value, gpointer data);
-static void maybe_write_uid (gpointer key, gpointer value, gpointer data);
-
-/**
- * camel_uid_cache_new:
- * @filename: path to load the cache from
- *
- * Creates a new UID cache, initialized from @filename. If @filename
- * doesn't already exist, the UID cache will be empty. Otherwise, if
- * it does exist but can't be read, the function will return %NULL.
- *
- * Return value: a new UID cache, or %NULL
- **/
-CamelUIDCache *
-camel_uid_cache_new (const char *filename)
-{
-	CamelUIDCache *cache;
-	struct stat st;
-	char *buf, **uids;
-	int fd, i;
-
-	fd = open (filename, O_RDWR | O_CREAT, 0700);
-	if (fd == -1)
-		return NULL;
-
-	if (fstat (fd, &st) != 0) {
-		close (fd);
-		return NULL;
-	}
-	buf = g_malloc (st.st_size + 1);
-
-	if (read (fd, buf, st.st_size) == -1) {
-		close (fd);
-		g_free (buf);
-		return NULL;
-	}
-	buf[st.st_size] = '\0';
-
-	cache = g_new (CamelUIDCache, 1);
-	cache->fd = fd;
-	cache->level = 1;
-	cache->uids = g_hash_table_new (g_str_hash, g_str_equal);
-
-	uids = g_strsplit (buf, "\n", 0);
-	g_free (buf);
-	for (i = 0; uids[i]; i++) {
-		g_hash_table_insert (cache->uids, uids[i],
-				     GINT_TO_POINTER (cache->level));
-	}
-	g_free (uids);
-
-	return cache;
-}
-
-/**
- * camel_uid_cache_save:
- * @cache: a CamelUIDCache
- *
- * Attempts to save @cache back to disk.
- *
- * Return value: success or failure
- **/
-gboolean
-camel_uid_cache_save (CamelUIDCache *cache)
-{
-	if (lseek (cache->fd, 0, SEEK_SET) != 0)
-		return FALSE;
-	g_hash_table_foreach (cache->uids, maybe_write_uid, cache);
-	return ftruncate (cache->fd, lseek (cache->fd, 0, SEEK_CUR)) == 0;
-}
-
-static void
-maybe_write_uid (gpointer key, gpointer value, gpointer data)
-{
-	CamelUIDCache *cache = data;
-
-	if (GPOINTER_TO_INT (value) == cache->level) {
-		write (cache->fd, key, strlen (key));
-		write (cache->fd, "\n", 1);
-	}
-}
-
-/**
- * camel_uid_cache_destroy:
- * @cache: a CamelUIDCache
- *
- * Destroys @cache and frees its data.
- **/
-void
-camel_uid_cache_destroy (CamelUIDCache *cache)
-{
-	g_hash_table_foreach (cache->uids, free_uid, NULL);
-	g_hash_table_destroy (cache->uids);
-	close (cache->fd);
-	g_free (cache);
-}
-
-static void
-free_uid (gpointer key, gpointer value, gpointer data)
-{
-	g_free (key);
-}
-
-/**
- * camel_uid_cache_get_new_uids:
- * @cache: a CamelUIDCache
- * @uids: an array of UIDs
- *
- * Returns an array of UIDs from @uids that are not in @cache, and
- * removes UIDs from @cache that aren't in @uids.
- *
- * Return value: an array of new UIDs, which must be freed with
- * camel_uid_cache_free_uids().
- **/
-GPtrArray *
-camel_uid_cache_get_new_uids (CamelUIDCache *cache, GPtrArray *uids)
-{
-	GPtrArray *new_uids;
-	char *uid;
-	int i;
-
-	new_uids = g_ptr_array_new ();
-	cache->level++;
-
-	for (i = 0; i < uids->len; i++) {
-		uid = uids->pdata[i];
-		if (g_hash_table_lookup (cache->uids, uid))
-			g_hash_table_remove (cache->uids, uid);
-		else
-			g_ptr_array_add (new_uids, g_strdup (uid));
-		g_hash_table_insert (cache->uids, g_strdup (uid),
-				     GINT_TO_POINTER (cache->level));
-	}
-
-	return new_uids;
-}
-
-/**
- * camel_uid_cache_free_uids:
- * @uids: an array returned from camel_uid_cache_get_new_uids()
- *
- * Frees the array of UIDs.
- **/
-void
-camel_uid_cache_free_uids (GPtrArray *uids)
-{
-	int i;
-
-	for (i = 0; i < uids->len; i++)
-		g_free (uids->pdata[i]);
-	g_ptr_array_free (uids, TRUE);
-}
diff --git a/camel/camel-uid-cache.h b/camel/camel-uid-cache.h
deleted file mode 100644
index 92226a3afd..0000000000
--- a/camel/camel-uid-cache.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-uid-cache.h: UID caching code. */
-
-/* 
- * Authors:
- *  Bertrand Guiheneuf 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef CAMEL_UID_CACHE_H
-#define CAMEL_UID_CACHE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#include 
-#include 
-
-typedef struct {
-	int fd, level;
-	GHashTable *uids;
-} CamelUIDCache;
-
-CamelUIDCache *camel_uid_cache_new (const char *filename);
-gboolean camel_uid_cache_save (CamelUIDCache *cache);
-void camel_uid_cache_destroy (CamelUIDCache *cache);
-
-GPtrArray *camel_uid_cache_get_new_uids (CamelUIDCache *cache,
-					 GPtrArray *uids);
-void camel_uid_cache_free_uids (GPtrArray *uids);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* CAMEL_UID_CACHE_H */
diff --git a/camel/camel-url.c b/camel/camel-url.c
deleted file mode 100644
index e52645c8e2..0000000000
--- a/camel/camel-url.c
+++ /dev/null
@@ -1,368 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-url.c : utility functions to parse URLs */
-
-
-/* 
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *  Tiago Antào 
- *  Jeffrey Stedfast 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include "camel-url.h"
-#include "camel-exception.h"
-
-/**
- * camel_url_new: create a CamelURL object from a string
- * @url_string: The string containing the URL to scan
- * 
- * This routine takes a string and parses it as a URL of the form:
- *
- *   protocol://user;AUTH=mech:password@host:port/path
- *
- * The protocol, followed by a ":" is required. If it is followed by * "//",
- * there must be an "authority" containing at least a host,
- * which ends at the end of the string or at the next "/". If there
- * is an "@" in the authority, there must be a username before it,
- * and the host comes after it. The authmech, password, and port are
- * optional, and the punctuation that preceeds them is omitted if
- * they are. Everything after the authority (or everything after the
- * protocol if there was no authority) is the path. We consider the
- * "/" between the authority and the path to be part of the path,
- * although this is incorrect according to RFC 1738.
- *
- * The port, if present, must be numeric.
- * 
- * If nothing but the protocol (and the ":") is present, the "empty"
- * flag will be set on the returned URL.
- *
- * Return value: a CamelURL structure containing the URL items.
- **/
-CamelURL *
-camel_url_new (const char *url_string, CamelException *ex)
-{
-	CamelURL *url;
-	char *semi, *colon, *at, *slash;
-	char *p;
-
-	/* Find protocol: initial substring until ":" */
-	colon = strchr (url_string, ':');
-	if (!colon) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-				      "URL string `%s' contains no protocol",
-				      url_string);
-		return NULL;
-	}
-
-	url = g_new0 (CamelURL, 1);
-	url->protocol = g_strndup (url_string, colon - url_string);
-	g_strdown (url->protocol);
-
-	/* Check protocol */
-	p = url->protocol;
-	while (*p) {
-		if (!((*p >= 'a' && *p <= 'z') ||
-		      (*p == '-') || (*p == '+') || (*p == '.'))) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-					      "URL string `%s' contains an invalid protocol",
-					      url_string);
-			return NULL;
-		}
-		p++;
-	}
-
-	if (strncmp (colon, "://", 3) != 0) {
-		if (*(colon + 1)) {
-			url->path = g_strdup (colon + 1);
-			camel_url_decode (url->path);
-		} else
-			url->empty = TRUE;
-		return url;
-	}
-
-	url_string = colon + 3;
-
-	/* If there is an @ sign in the authority, look for user,
-	 * authmech, and password before it.
-	 */
-	slash = strchr (url_string, '/');
-	at = strchr (url_string, '@');
-	if (at && (!slash || at < slash)) {
-		colon = strchr (url_string, ':');
-		if (colon && colon < at) {
-			url->passwd = g_strndup (colon + 1, at - colon - 1);
-			camel_url_decode (url->passwd);
-		} else {
-			url->passwd = NULL;
-			colon = at;
-		}
-
-		semi = strchr(url_string, ';');
-		if (semi && (semi < colon || (!colon && semi < at)) &&
-		    !strncasecmp (semi, ";auth=", 6)) {
-			url->authmech = g_strndup (semi + 6,
-						     colon - semi - 6);
-			camel_url_decode (url->authmech);
-		} else {
-			url->authmech = NULL;
-			semi = colon;
-		}
-
-		url->user = g_strndup (url_string, semi - url_string);
-		camel_url_decode (url->user);
-		url_string = at + 1;
-	} else
-		url->user = url->passwd = url->authmech = NULL;
-
-	/* Find host and port. */
-	slash = strchr (url_string, '/');
-	colon = strchr (url_string, ':');
-	if (slash && colon > slash)
-		colon = NULL;
-
-	if (colon) {
-		url->host = g_strndup (url_string, colon - url_string);
-		url->port = strtoul (colon + 1, &colon, 10);
-		if (*colon && colon != slash) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_URL_INVALID,
-					      "Port number in URL `%s' is non-"
-					      "numeric", url_string);
-			camel_url_free (url);
-			return NULL;
-		}
-	} else if (slash) {
-		url->host = g_strndup (url_string, slash - url_string);
-		camel_url_decode (url->host);
-		url->port = 0;
-	} else {
-		url->host = g_strdup (url_string);
-		camel_url_decode (url->host);
-		url->port = 0;
-	}
-
-	if (!slash)
-		slash = "/";
-	url->path = g_strdup (slash);
-	camel_url_decode (url->path);
-
-	return url;
-}
-
-char *
-camel_url_to_string (CamelURL *url, gboolean show_passwd)
-{
-	char *return_result;
-	char *user = NULL, *authmech = NULL, *passwd = NULL;
-	char *host = NULL, *path = NULL;
-	char port[20];
-
-	if (url->user)
-		user = camel_url_encode (url->user, TRUE, ":;@/");
-	if (url->authmech)
-		authmech = camel_url_encode (url->authmech, TRUE, ":@/");
-	if (show_passwd && url->passwd)
-		passwd = camel_url_encode (url->passwd, TRUE, "@/");
-	if (url->host)
-		host = camel_url_encode (url->host, TRUE, ":/");
-	if (url->port)
-		g_snprintf (port, sizeof (port), "%d", url->port);
-	else
-		*port = '\0';
-	if (url->path)
-		path = camel_url_encode (url->path, FALSE, NULL);
-
-	return_result = g_strdup_printf ("%s:%s%s%s%s%s%s%s%s%s%s%s%s",
-					 url->protocol,
-					 host ? "//" : "",
-					 user ? user : "",
-					 authmech ? ";auth=" : "",
-					 authmech ? authmech : "",
-					 passwd ? ":" : "",
-					 passwd ? passwd : "",
-					 user ? "@" : "",
-					 host ? host : "",
-					 *port ? ":" : "",
-					 port,
-					 path && host && *path != '/' ? "/" : "",
-					 path ? path : "");
-	g_free (user);
-	g_free (authmech);
-	g_free (passwd);
-	g_free (host);
-	g_free (path);
-
-	return return_result;
-}
-
-void
-camel_url_free (CamelURL *url)
-{
-	g_assert (url);
-
-	g_free (url->protocol);
-	g_free (url->user);
-	g_free (url->authmech);
-	g_free (url->passwd);
-	g_free (url->host);
-	g_free (url->path);
-
-	g_free (url);
-}
-
-void camel_url_set_protocol(CamelURL *url, const char *p)
-{
-	g_free(url->protocol);
-	url->protocol = g_strdup(p);
-}
-
-void camel_url_set_host(CamelURL *url, const char *h)
-{
-	g_free(url->host);
-	url->host = g_strdup(h);
-}
-
-void camel_url_set_port(CamelURL *url, int port)
-{
-	url->port = port;
-}
-void camel_url_set_path(CamelURL *url, const char *p)
-{
-	g_free(url->path);
-	url->path = g_strdup(p);
-}
-
-
-/**
- * camel_url_encode:
- * @part: a URL part
- * @escape_unsafe: whether or not to %-escape "unsafe" characters.
- * ("%#<>{}|\^~[]`)
- * @escape_extra: additional characters to escape.
- *
- * This %-encodes the given URL part and returns the escaped version
- * in allocated memory, which the caller must free when it is done.
- **/
-char *
-camel_url_encode (char *part, gboolean escape_unsafe, char *escape_extra)
-{
-	char *work, *p;
-
-	/* worst case scenario = 3 times the initial */
-	p = work = g_malloc (3 * strlen (part) + 1);
-
-	while (*part) {
-		if (((guchar) *part >= 127) || ((guchar) *part <= ' ') ||
-		    (escape_unsafe && strchr ("\"%#<>{}|\\^~[]`", *part)) ||
-		    (escape_extra && strchr (escape_extra, *part))) {
-			sprintf (p, "%%%.02hX", (guchar) *part++);
-			p += 3;
-		} else
-			*p++ = *part++;
-	}
-	*p = '\0';
-
-	return work;
-}
-
-#define HEXVAL(c) (isdigit (c) ? (c) - '0' : tolower (c) - 'a' + 10)
-
-/**
- * camel_url_decode:
- * @part: a URL part
- *
- * %-decodes the passed-in URL *in place*. The decoded version is
- * never longer than the encoded version, so there does not need to
- * be any additional space at the end of the string.
- */
-void
-camel_url_decode (char *part)
-{
-	guchar *s, *d;
-
-	s = d = (guchar *)part;
-	while (*s) {
-		if (*s == '%') {
-			if (isxdigit (s[1]) && isxdigit (s[2])) {
-				*d++ = HEXVAL (s[1]) * 16 + HEXVAL (s[2]);
-				s += 3;
-			} else
-				*d++ = *s++;
-		} else
-			*d++ = *s++;
-	}
-	*d = '\0';
-}
-
-static void
-add_hash (guint *hash, char *s)
-{
-	if (s)
-		*hash ^= g_str_hash(s);
-}
-
-guint camel_url_hash (const void *v)
-{
-	const CamelURL *u = v;
-	guint hash = 0;
-
-	add_hash (&hash, u->protocol);
-	add_hash (&hash, u->user);
-	add_hash (&hash, u->authmech);
-	add_hash (&hash, u->host);
-	add_hash (&hash, u->path);
-	hash ^= u->port;
-	
-	return hash;
-}
-
-static int
-check_equal (char *s1, char *s2)
-{
-	if (s1 == NULL) {
-		if (s2 == NULL)
-			return TRUE;
-		else
-			return FALSE;
-	}
-	
-	if (s2 == NULL)
-		return FALSE;
-
-	return strcmp (s1, s2) == 0;
-}
-
-int camel_url_equal(const void *v, const void *v2)
-{
-	const CamelURL *u1 = v, *u2 = v2;
-	
-	return check_equal(u1->protocol, u2->protocol)
-		&& check_equal(u1->user, u2->user)
-		&& check_equal(u1->authmech, u2->authmech)
-		&& check_equal(u1->host, u2->host)
-		&& check_equal(u1->path, u2->path)
-		&& u1->port == u2->port;
-}
diff --git a/camel/camel-url.h b/camel/camel-url.h
deleted file mode 100644
index aba903c08b..0000000000
--- a/camel/camel-url.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-url.h : utility functions to parse URLs */
-
-/* 
- * Authors:
- *  Bertrand Guiheneuf 
- *  Dan Winship 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_URL_H
-#define CAMEL_URL_H 1
-
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-typedef struct {
-	char *protocol;
-	char *user;
-	char *authmech;
-	char *passwd;
-	char *host;
-	int   port;
-	char *path;
-
-	/* This is set if the URL contained only a protocol. */
-	gboolean empty;
-} CamelURL;
-
-CamelURL *camel_url_new (const char *url_string, CamelException *ex);
-char *camel_url_to_string (CamelURL *url, gboolean show_password);
-void camel_url_free (CamelURL *url);
-
-char *camel_url_encode (char *part, gboolean escape_unsafe, char *escape_extra);
-void camel_url_decode (char *part);
-
-/* for editing url's */
-void camel_url_set_protocol(CamelURL *url, const char *);
-void camel_url_set_host(CamelURL *url, const char *);
-void camel_url_set_port(CamelURL *url, int port);
-void camel_url_set_path(CamelURL *url, const char *);
-
-/* for putting url's into hash tables */
-guint camel_url_hash (const void *v);
-int camel_url_equal(const void *v, const void *v2);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* URL_UTIL_H */
diff --git a/camel/camel.c b/camel/camel.c
deleted file mode 100644
index 0121c1082f..0000000000
--- a/camel/camel.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "camel.h"
-#include 
-
-gint
-camel_init(void)
-{
-
-
-#ifdef ENABLE_THREADS
-#ifdef G_THREADS_ENABLED	
-	g_thread_init (NULL);
-#else  /* G_THREADS_ENABLED */
-	printf ("Threads are not supported by your version of glib\n");
-#endif /* G_THREADS_ENABLED */
-#endif /* ENABLE_THREADS */
-
-	unicode_init ();
-
-	return 0;
-}
diff --git a/camel/camel.h b/camel/camel.h
deleted file mode 100644
index 752b145b49..0000000000
--- a/camel/camel.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_H
-#define CAMEL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-gint camel_init (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_H */
diff --git a/camel/devel-docs/camel_data_wrapper.dia b/camel/devel-docs/camel_data_wrapper.dia
deleted file mode 100644
index 301563d1ee..0000000000
Binary files a/camel/devel-docs/camel_data_wrapper.dia and /dev/null differ
diff --git a/camel/devel-docs/camel_parser_states.dia b/camel/devel-docs/camel_parser_states.dia
deleted file mode 100644
index 556a5b1c49..0000000000
Binary files a/camel/devel-docs/camel_parser_states.dia and /dev/null differ
diff --git a/camel/devel-docs/camel_stream.dia b/camel/devel-docs/camel_stream.dia
deleted file mode 100644
index d91d1bb153..0000000000
Binary files a/camel/devel-docs/camel_stream.dia and /dev/null differ
diff --git a/camel/gmime-content-field.c b/camel/gmime-content-field.c
deleted file mode 100644
index 4d38314873..0000000000
--- a/camel/gmime-content-field.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mime-content_field.c : mime content type field utilities  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "gmime-content-field.h"
-#include "string-utils.h"
-#include 
-#include "camel-mime-utils.h"
-
-/**
- * gmime_content_field_new: Creates a new GMimeContentField object
- * @type: mime type
- * @subtype: mime subtype 
- * 
- * Creates a GMimeContentField object and initialize it with
- * a mime type and a mime subtype. For example, 
- * gmime_content_field_new ("application", "postcript");
- * will create a content field with complete mime type 
- * "application/postscript"
- * 
- * Return value: The newly created GMimeContentField object
- **/
-GMimeContentField *
-gmime_content_field_new (const gchar *type, const gchar *subtype)
-{
-	GMimeContentField *ctf;
-
-	ctf = g_new (GMimeContentField, 1);
-	ctf->content_type = header_content_type_new(type, subtype);
-	ctf->type = ctf->content_type->type;
-	ctf->subtype = ctf->content_type->subtype;
-	ctf->ref = 1;
-	return ctf;
-} 
-
-/**
- * gmime_content_field_ref: add a reference to a GMimeContentField object
- * @content_field: GMimeContentField object
- * 
- * Tell a GMimeContentField object that something holds a reference
- * on him. This, coupled with the corresponding 
- * gmime_content_field_unref() method allow several 
- * objects to use the same GMimeContentField object.
- **/
-void 
-gmime_content_field_ref (GMimeContentField *content_field)
-{
-	content_field->ref += 1;
-	header_content_type_ref (content_field->content_type);
-}
-
-/**
- * gmime_content_field_unref: remove a reference to a GMimeContentField object
- * @content_field: GMimeContentField object
- * 
- * Tell a GMimeContentField object that something which 
- * was holding a reference to him does not need it anymore.
- * When no more reference exist, the GMimeContentField object
- * is freed using gmime_content_field_free().
- *
- **/
-void 
-gmime_content_field_unref (GMimeContentField *content_field)
-{
-	if (!content_field) return;
-	
-	content_field->ref -= 1;
-	header_content_type_unref (content_field->content_type);
-	if (content_field->ref <= 0)
-		g_free (content_field);
-}
-
-
-
-/**
- * gmime_content_field_set_parameter: set a parameter for a GMimeContentField object
- * @content_field: content field
- * @attribute: parameter name 
- * @value: paramteter value
- * 
- * set a parameter (called attribute in RFC 2045) of a content field. Meaningfull
- * or valid parameters name depend on the content type object. For example, 
- * gmime_content_field_set_parameter (cf, "charset", "us-ascii");
- * will make sense for a "text/plain" content field but not for a 
- * "image/gif". This routine does not check parameter validity.
- **/
-void 
-gmime_content_field_set_parameter (GMimeContentField *content_field, const gchar *attribute, const gchar *value)
-{
-	header_content_type_set_param(content_field->content_type, attribute, value);
-}
-
-/**
- * gmime_content_field_write_to_stream: write a mime content type to a stream
- * @content_field: content type object
- * @stream: the stream
- * 
- * 
- **/
-void
-gmime_content_field_write_to_stream (GMimeContentField *content_field, CamelStream *stream)
-{
-	char *txt;
-
-	if (!content_field)
-		return;
-
-	txt = header_content_type_format(content_field->content_type);
-	if (txt) {
-		camel_stream_printf (stream, "Content-Type: %s\n", txt);
-		g_free(txt);
-	}
-}
-
-/**
- * gmime_content_field_get_mime_type: return the mime type of the content field object
- * @content_field: content field object
- * 
- * A RFC 2045 content type field contains the mime type in the
- * form "type/subtype" (example : "application/postscript") and some
- * parameters (attribute/value pairs). This routine returns the mime type 
- * in a gchar object. THIS OBJECT MUST BE FREED BY THE CALLER.
- * 
- * Return value: the mime type in the form "type/subtype" or NULL if not defined.
- **/
-gchar * 
-gmime_content_field_get_mime_type (GMimeContentField *content_field)
-{
-	gchar *mime_type;
-
-	if (!content_field->content_type->type) return NULL;
-
-	if (content_field->content_type->subtype) 
-		mime_type = g_strdup_printf ("%s/%s", content_field->content_type->type, content_field->content_type->subtype);
-	else 
-		mime_type = g_strdup (content_field->content_type->type);
-	return mime_type;
-}
-
-/**
- * gmime_content_field_get_parameter: return the value of a mime type parameter
- * @content_field: content field object
- * @name: name of the parameter
- * 
- * Returns the value of a parameter contained in the content field 
- * object. The content type is formed of a mime type, a mime subtype,
- * and a parameter list. Each parameter is a name/value pair. This 
- * routine returns the value assiciated to a given name. 
- * When the parameter does not exist, NULL is returned. 
- * 
- * Return value: parameter value, or NULL if not found.
- **/
-const gchar *
-gmime_content_field_get_parameter (GMimeContentField *content_field, const gchar *name)
-{
-	g_assert (content_field);
-
-	g_assert (name);
-	return header_content_type_param(content_field->content_type, name);
-}
-
-
-
-
-/**
- * gmime_content_field_construct_from_string: construct a ContentType object by parsing a string.
- *
- * @content_field: content type object to construct 
- * @string: string containing the content type field 
- * 
- * Parse a string containing a content type field as defined in
- * RFC 2045, and construct the corresponding ContentType object.
- * The string is not modified and not used in the ContentType 
- * object. It can and must be freed by the calling part.
- **/
-void
-gmime_content_field_construct_from_string (GMimeContentField *content_field, const gchar *string)
-{
-	struct _header_content_type *new;
-
-	g_assert (string);
-	g_assert (content_field);
-
-	new = header_content_type_decode(string);
-	if (content_field->content_type)
-		header_content_type_unref(content_field->content_type);
-
-	if (new == NULL) {
-		new = header_content_type_new(NULL, NULL);
-		g_warning("Cannot parse content-type string: %s", string);
-	}
-	content_field->content_type = new;
-	content_field->type = new->type;
-	content_field->subtype = new->subtype;
-}
-
-/**
- * gmime_content_field_is_type:
- * @content_field: An initialised GMimeContentField.
- * @type: MIME Major type name.
- * @subtype: MIME subtype.
- * 
- * Returns true if the content_field is of the type @type and subtype @subtype.
- * If @subtype is the special wildcard "*", then it will match any type.
- *
- * If the @content_field is empty, then it will match "text/plain", or "text/ *".
- * 
- * Return value: 
- **/
-int
-gmime_content_field_is_type (GMimeContentField *content_field, const char *type, const char *subtype)
-{
-	return header_content_type_is(content_field->content_type, type, subtype);
-}
diff --git a/camel/gmime-content-field.h b/camel/gmime-content-field.h
deleted file mode 100644
index 5a28d0fedb..0000000000
--- a/camel/gmime-content-field.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* mime-content_field.h : mime content type field utilities  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef GMIME_CONTENT_FIELD_H
-#define GMIME_CONTENT_FIELD_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-#include 
-
-typedef struct {
-	struct _header_content_type *content_type;
-
-	/* these should be deprecated (use the accessors) */
-	char *type;		/* these are only copies of the ones in content_type */
-	char *subtype;
-
-	gint ref;
-
-} GMimeContentField;
-
-GMimeContentField *gmime_content_field_new (const gchar *type, const gchar *subtype);
-void gmime_content_field_ref (GMimeContentField *content_field);
-void gmime_content_field_unref (GMimeContentField *content_field);
-
-void gmime_content_field_set_parameter (GMimeContentField *content_field, const gchar *attribute, const gchar *value);
-void gmime_content_field_write_to_stream (GMimeContentField *content_field, CamelStream *stream);
-void gmime_content_field_construct_from_string (GMimeContentField *content_field, const gchar *string);
-void gmime_content_field_free (GMimeContentField *content_field);
-gchar * gmime_content_field_get_mime_type (GMimeContentField *content_field);
-const gchar *gmime_content_field_get_parameter (GMimeContentField *content_field, const gchar *name);
-
-int gmime_content_field_is_type (GMimeContentField *content_field, const char *type, const char *subtype);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GMIME_CONTENT_FIELD_H */
diff --git a/camel/gstring-util.c b/camel/gstring-util.c
deleted file mode 100644
index a0c1345b71..0000000000
--- a/camel/gstring-util.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* gstring-util : utilities for gstring object  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-#include 
-#include "gstring-util.h"
-#include 
-
-/**
- * g_string_equals : test if two string are equal
- *
- * @string1 : first string
- * @string2 : second string
- *
- * @Return Value : true if the strings equal, false otherwise
- **/
-gboolean
-g_string_equals (GString *string1, GString *string2)
-{
-	g_assert (string1);
-	g_assert (string2);
-	return !strcmp (string1->str, string2->str);
-}
-
-
-
-
-/**
- * g_string_clone : clone a GString
- *
- * @string : the string to clone
- *
- * @Return Value : the clone ...
- **/
-GString *
-g_string_clone (GString *string)
-{
-	return g_string_new (string->str);
-}
-
-/**
- * g_string_append_g_string : append a GString to another  GString
- *
- * @dest_string : string which will be appended
- * @other_string : string to append
- *
- **/
-void 
-g_string_append_g_string(GString *dest_string, GString *other_string)
-{
-	g_assert(other_string);
-	g_assert(dest_string);
-
-	if (other_string->len)
-		g_string_append(dest_string, other_string->str);
-}
-
-/**
- * g_string_equal_for_hash: test equality of two GStrings for hash tables
- * @v: string 1
- * @v2: string 2
- * 
- * 
- * 
- * Return value: 
- **/
-gint
-g_string_equal_for_hash (gconstpointer v, gconstpointer v2)
-{
-  return strcmp ( ((const GString*)v)->str, ((const GString*)v2)->str) == 0;
-}
-
-gint
-g_string_equal_for_glist (gconstpointer v, gconstpointer v2)
-{
-  return !strcmp ( ((const GString*)v)->str, ((const GString*)v2)->str) == 0;
-}
-
-
-/**
- * g_string_hash: computes a hash value for a Gstring
- * @v: Gstring object
- * 
- * 
- * 
- * Return value: 
- **/
-guint 
-g_string_hash (gconstpointer v)
-{
-	return g_str_hash(((const GString*)v)->str);
-}
-
-
-
-
-/* utility func : frees a GString element in a GList */
-static void 
-__g_string_list_free_string (gpointer data, gpointer user_data)
-{
-	GString *string = (GString *)data;
-	g_string_free(string, TRUE);
-}
-
-
-void 
-g_string_list_free (GList *string_list)
-{
-	g_list_foreach(string_list, __g_string_list_free_string, NULL);
-	g_list_free(string_list);
-}
-
-
-
-
-
-
-GList *
-g_string_split (GString *string, char sep, gchar *trim_chars, GStringTrimOption trim_options)
-{
-	GList *result = NULL;
-	gint first, last, pos;
-	gchar *str;
-	gchar *new_str;
-	GString *new_gstring;
-
-	g_assert (string);
-	str = string->str;
-	if (!str) return NULL;
-
-	first = 0;
-	last = strlen(str) - 1;
-	
-	/* strip leading and trailing separators */
-	while ( (first<=last) && (str[first]==sep) )
-		first++;
-	while ( (first<=last) && (str[last]==sep) )
-		last--;
-
-	
-	while (first<=last)  {
-		pos = first;
-		/* find next separator */
-		while ((pos<=last) && (str[pos]!=sep)) pos++;
-		if (first != pos) {
-			new_str = g_strndup (str+first, pos-first);
-			new_gstring = g_string_new (new_str);
-			g_free (new_str);
-			/* could do trimming in line to speed up this code */
-			if (trim_chars) g_string_trim (new_gstring, trim_chars, trim_options);
-			result = g_list_append (result, new_gstring);
-		}	
-		first = pos + 1;
-	}
-
-	return result;
-}
-
-
-void 
-g_string_trim (GString *string, gchar *chars, GStringTrimOption options)
-{
-	gint first_ok;
-	gint last_ok;
-	guint length;
-	gchar *str;
-
-	if ((!string) || (!string->str))
-		return; 
-	str = string->str;
-	length = strlen (str);
-	if (!length)
-		return;
-
-	first_ok = 0;
-	last_ok = length - 1;
-	
-	if (options & GSTRING_TRIM_STRIP_LEADING)
-		while  ( (first_ok <= last_ok) && (strchr (chars, str[first_ok])) )
-			first_ok++;
-
-	if (options & GSTRING_TRIM_STRIP_TRAILING)
-		while  ( (first_ok <= last_ok) && (strchr (chars, str[last_ok])) )
-			last_ok++;
-
-	if (first_ok > 0)
-		g_string_erase (string, 0, first_ok);
-
-	if (last_ok < length-1)
-		g_string_truncate (string, last_ok - first_ok +1);
-	
-}
diff --git a/camel/gstring-util.h b/camel/gstring-util.h
deleted file mode 100644
index 487bbc8a3b..0000000000
--- a/camel/gstring-util.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* gstring-util : utilities for gstring object  */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-#ifndef GSTRING_UTIL_H
-#define GSTRING_UTIL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-typedef enum {
-    GSTRING_TRIM_NONE            =     0,
-    GSTRING_TRIM_STRIP_TRAILING  =     1,
-    GSTRING_TRIM_STRIP_LEADING   =     2
-} GStringTrimOption;
-
-
-gboolean g_string_equals          (GString *string1, GString *string2);
-GString *g_string_clone           (GString *string);
-void     g_string_append_g_string (GString *dest_string,
-				   GString *other_string);
-
-gboolean g_string_equal_for_hash  (gconstpointer v, gconstpointer v2);
-gboolean g_string_equal_for_glist (gconstpointer v, gconstpointer v2);
-guint    g_string_hash            (gconstpointer v);
-void     g_string_list_free       (GList *string_list);
-
-GList   *g_string_split           (GString *string, char sep,
-				   gchar *trim_chars, GStringTrimOption trim_options);
-void     g_string_trim            (GString *string, gchar *chars,
-				   GStringTrimOption options);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* GSTRING_UTIL_H */
diff --git a/camel/hash-table-utils.c b/camel/hash-table-utils.c
deleted file mode 100644
index b04eaa3ce7..0000000000
--- a/camel/hash-table-utils.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* generic utilities for hash tables */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "glib.h"
-#include "hash-table-utils.h"
-
-
-/* 
- * free a (key/value) hash table pair.
- * to be called in a g_hash_table_foreach()
- * before g_hash_table_destroy().
- */
-void
-g_hash_table_generic_free (gpointer key, gpointer value, gpointer user_data)
-{
-	g_free (key);
-	g_free (value);
-}
-
-
-
-/***/
-/* use these two funcs for case insensitive hash table */
-
-gint 
-g_strcase_equal (gconstpointer a, gconstpointer b)
-{
-	return (g_strcasecmp ((gchar *)a, (gchar *)b) == 0);
-}
-
-
-/* modified g_str_hash from glib/gstring.c
-   because it would have been too slow to
-   us g_strdown() on the string */
-/* a char* hash function from ASU */
-guint
-g_strcase_hash (gconstpointer v)
-{
-	const char *s = (char*)v;
-	const char *p;
-	guint h=0, g;
-	
-	for(p = s; *p != '\0'; p += 1) {
-		h = ( h << 4 ) + toupper(*p);
-		if ( ( g = h & 0xf0000000 ) ) {
-			h = h ^ (g >> 24);
-			h = h ^ g;
-		}
-  }
-
-  return h /* % M */;
-}
-
-
-
-/***/
diff --git a/camel/hash-table-utils.h b/camel/hash-table-utils.h
deleted file mode 100644
index 2904991848..0000000000
--- a/camel/hash-table-utils.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* generic utilities for hash tables */
-
-/* 
- *
- * Author : 
- *  Bertrand Guiheneuf 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef HASH_TABLE_UTILS_H
-#define HASH_TABLE_UTILS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-void g_hash_table_generic_free (gpointer key, gpointer value, gpointer user_data);
-
-gint g_strcase_equal (gconstpointer a, gconstpointer b);
-guint g_strcase_hash (gconstpointer v);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* HASH_TABLE_UTILS_H */
diff --git a/camel/md5-utils.c b/camel/md5-utils.c
deleted file mode 100644
index 7363eaec40..0000000000
--- a/camel/md5-utils.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to md5_init, call md5_update as
- * needed on buffers full of bytes, and then call md5_Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-/* parts of this file are :
- * Written March 1993 by Branko Lankester
- * Modified June 1993 by Colin Plumb for altered md5.c.
- * Modified October 1995 by Erik Troan for RPM
- */
-
-
-#include "md5-utils.h"
-#include 
-
-static void md5_transform (guint32 buf[4], const guint32 in[16]);
-
-static gint _ie = 0x44332211;
-static union _endian { gint i; gchar b[4]; } *_endian = (union _endian *)&_ie;
-#define	IS_BIG_ENDIAN()		(_endian->b[0] == '\x44')
-#define	IS_LITTLE_ENDIAN()	(_endian->b[0] == '\x11')
-
-
-/*
- * Note: this code is harmless on little-endian machines.
- */
-static void 
-_byte_reverse (guchar *buf, guint32 longs)
-{
-	guint32 t;
-	do {
-		t = (guint32) ((guint32) buf[3] << 8 | buf[2]) << 16 |
-			((guint32) buf[1] << 8 | buf[0]);
-		*(guint32 *) buf = t;
-		buf += 4;
-	} while (--longs);
-}
-
-/**
- * md5_init: Initialise an md5 context object
- * @ctx: md5 context 
- * 
- * Initialise an md5 buffer. 
- *
- **/
-void 
-md5_init (MD5Context *ctx)
-{
-	ctx->buf[0] = 0x67452301;
-	ctx->buf[1] = 0xefcdab89;
-	ctx->buf[2] = 0x98badcfe;
-	ctx->buf[3] = 0x10325476;
-	
-	ctx->bits[0] = 0;
-	ctx->bits[1] = 0;
-	
-	if (IS_BIG_ENDIAN())	
-		ctx->doByteReverse = 1;		
-	else 
-		ctx->doByteReverse = 0;	
-}
-
-
-
-/**
- * md5_update: add a buffer to md5 hash computation
- * @ctx: conetxt object used for md5 computaion
- * @buf: buffer to add
- * @len: buffer length
- * 
- * Update context to reflect the concatenation of another buffer full
- * of bytes. Use this to progressively construct an md5 hash.
- **/
-void 
-md5_update (MD5Context *ctx, const guchar *buf, guint32 len)
-{
-	guint32 t;
-	
-	/* Update bitcount */
-	
-	t = ctx->bits[0];
-	if ((ctx->bits[0] = t + ((guint32) len << 3)) < t)
-		ctx->bits[1]++;		/* Carry from low to high */
-	ctx->bits[1] += len >> 29;
-	
-	t = (t >> 3) & 0x3f;	/* Bytes already in shsInfo->data */
-	
-	/* Handle any leading odd-sized chunks */
-	
-	if (t) {
-		guchar *p = (guchar *) ctx->in + t;
-		
-		t = 64 - t;
-		if (len < t) {
-			memcpy (p, buf, len);
-			return;
-		}
-		memcpy (p, buf, t);
-		if (ctx->doByteReverse)
-			_byte_reverse (ctx->in, 16);
-		md5_transform (ctx->buf, (guint32 *) ctx->in);
-		buf += t;
-		len -= t;
-	}
-	/* Process data in 64-byte chunks */
-	
-	while (len >= 64) {
-		memcpy (ctx->in, buf, 64);
-		if (ctx->doByteReverse)
-			_byte_reverse (ctx->in, 16);
-		md5_transform (ctx->buf, (guint32 *) ctx->in);
-		buf += 64;
-		len -= 64;
-	}
-	
-	/* Handle any remaining bytes of data. */
-	
-	memcpy (ctx->in, buf, len);
-}
-
-
-
-
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern 
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-/**
- * md5_final: copy the final md5 hash to a bufer
- * @digest: 16 bytes buffer
- * @ctx: context containing the calculated md5
- * 
- * copy the final md5 hash to a bufer
- **/
-void 
-md5_final (MD5Context *ctx, guchar digest[16])
-{
-	guint32 count;
-	guchar *p;
-	
-	/* Compute number of bytes mod 64 */
-	count = (ctx->bits[0] >> 3) & 0x3F;
-	
-	/* Set the first char of padding to 0x80.  This is safe since there is
-	   always at least one byte free */
-	p = ctx->in + count;
-	*p++ = 0x80;
-	
-	/* Bytes of padding needed to make 64 bytes */
-	count = 64 - 1 - count;
-	
-	/* Pad out to 56 mod 64 */
-	if (count < 8) {
-		/* Two lots of padding:  Pad the first block to 64 bytes */
-		memset (p, 0, count);
-		if (ctx->doByteReverse)
-			_byte_reverse (ctx->in, 16);
-		md5_transform (ctx->buf, (guint32 *) ctx->in);
-		
-		/* Now fill the next block with 56 bytes */
-		memset (ctx->in, 0, 56);
-	} else {
-		/* Pad block to 56 bytes */
-		memset (p, 0, count - 8);
-	}
-	if (ctx->doByteReverse)
-		_byte_reverse (ctx->in, 14);
-	
-	/* Append length in bits and transform */
-	((guint32 *) ctx->in)[14] = ctx->bits[0];
-	((guint32 *) ctx->in)[15] = ctx->bits[1];
-	
-	md5_transform (ctx->buf, (guint32 *) ctx->in);
-	if (ctx->doByteReverse)
-		_byte_reverse ((guchar *) ctx->buf, 4);
-	memcpy (digest, ctx->buf, 16);
-}
-
-
-
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
-	( w += f(x, y, z) + data,  w = w<>(32-s),  w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data.  md5_Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void 
-md5_transform (guint32 buf[4], const guint32 in[16])
-{
-	register guint32 a, b, c, d;
-	
-	a = buf[0];
-	b = buf[1];
-	c = buf[2];
-	d = buf[3];
-	
-	MD5STEP (F1, a, b, c, d, in[0] + 0xd76aa478, 7);
-	MD5STEP (F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
-	MD5STEP (F1, c, d, a, b, in[2] + 0x242070db, 17);
-	MD5STEP (F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
-	MD5STEP (F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
-	MD5STEP (F1, d, a, b, c, in[5] + 0x4787c62a, 12);
-	MD5STEP (F1, c, d, a, b, in[6] + 0xa8304613, 17);
-	MD5STEP (F1, b, c, d, a, in[7] + 0xfd469501, 22);
-	MD5STEP (F1, a, b, c, d, in[8] + 0x698098d8, 7);
-	MD5STEP (F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
-	MD5STEP (F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
-	MD5STEP (F1, b, c, d, a, in[11] + 0x895cd7be, 22);
-	MD5STEP (F1, a, b, c, d, in[12] + 0x6b901122, 7);
-	MD5STEP (F1, d, a, b, c, in[13] + 0xfd987193, 12);
-	MD5STEP (F1, c, d, a, b, in[14] + 0xa679438e, 17);
-	MD5STEP (F1, b, c, d, a, in[15] + 0x49b40821, 22);
-	
-	MD5STEP (F2, a, b, c, d, in[1] + 0xf61e2562, 5);
-	MD5STEP (F2, d, a, b, c, in[6] + 0xc040b340, 9);
-	MD5STEP (F2, c, d, a, b, in[11] + 0x265e5a51, 14);
-	MD5STEP (F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
-	MD5STEP (F2, a, b, c, d, in[5] + 0xd62f105d, 5);
-	MD5STEP (F2, d, a, b, c, in[10] + 0x02441453, 9);
-	MD5STEP (F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
-	MD5STEP (F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
-	MD5STEP (F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
-	MD5STEP (F2, d, a, b, c, in[14] + 0xc33707d6, 9);
-	MD5STEP (F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-	MD5STEP (F2, b, c, d, a, in[8] + 0x455a14ed, 20);
-	MD5STEP (F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
-	MD5STEP (F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
-	MD5STEP (F2, c, d, a, b, in[7] + 0x676f02d9, 14);
-	MD5STEP (F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-	
-	MD5STEP (F3, a, b, c, d, in[5] + 0xfffa3942, 4);
-	MD5STEP (F3, d, a, b, c, in[8] + 0x8771f681, 11);
-	MD5STEP (F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
-	MD5STEP (F3, b, c, d, a, in[14] + 0xfde5380c, 23);
-	MD5STEP (F3, a, b, c, d, in[1] + 0xa4beea44, 4);
-	MD5STEP (F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
-	MD5STEP (F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
-	MD5STEP (F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
-	MD5STEP (F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
-	MD5STEP (F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
-	MD5STEP (F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
-	MD5STEP (F3, b, c, d, a, in[6] + 0x04881d05, 23);
-	MD5STEP (F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
-	MD5STEP (F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
-	MD5STEP (F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
-	MD5STEP (F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-	
-	MD5STEP (F4, a, b, c, d, in[0] + 0xf4292244, 6);
-	MD5STEP (F4, d, a, b, c, in[7] + 0x432aff97, 10);
-	MD5STEP (F4, c, d, a, b, in[14] + 0xab9423a7, 15);
-	MD5STEP (F4, b, c, d, a, in[5] + 0xfc93a039, 21);
-	MD5STEP (F4, a, b, c, d, in[12] + 0x655b59c3, 6);
-	MD5STEP (F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
-	MD5STEP (F4, c, d, a, b, in[10] + 0xffeff47d, 15);
-	MD5STEP (F4, b, c, d, a, in[1] + 0x85845dd1, 21);
-	MD5STEP (F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
-	MD5STEP (F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
-	MD5STEP (F4, c, d, a, b, in[6] + 0xa3014314, 15);
-	MD5STEP (F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
-	MD5STEP (F4, a, b, c, d, in[4] + 0xf7537e82, 6);
-	MD5STEP (F4, d, a, b, c, in[11] + 0xbd3af235, 10);
-	MD5STEP (F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
-	MD5STEP (F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-	
-	buf[0] += a;
-	buf[1] += b;
-	buf[2] += c;
-	buf[3] += d;
-}
-
-
-
-
-/**
- * md5_get_digest: get the md5 hash of a buffer
- * @buffer: byte buffer
- * @buffer_size: buffer size (in bytes)
- * @digest: 16 bytes buffer receiving the hash code.
- * 
- * Get the md5 hash of a buffer. The result is put in 
- * the 16 bytes buffer @digest .
- **/
-void
-md5_get_digest (const gchar *buffer, gint buffer_size, guchar digest[16])
-{	
-	MD5Context ctx;
-
-	md5_init (&ctx);
-	md5_update (&ctx, buffer, buffer_size);
-	md5_final (&ctx, digest);
-	
-}
-
-
-/**
- * md5_get_digest_from_stream: get the md5 hash of a stream
- * @stream: stream
- * @digest: 16 bytes buffer receiving the hash code.
- * 
- * Get the md5 hash of a stream. The result is put in 
- * the 16 bytes buffer @digest .
- **/
-void
-md5_get_digest_from_stream (CamelStream *stream, guchar digest[16])
-{	
-	MD5Context ctx;
-	guchar tmp_buf[1024];
-	gint nb_bytes_read;
-
-	md5_init (&ctx);
-	
-	nb_bytes_read = camel_stream_read (stream, tmp_buf, 1024);
-	while (nb_bytes_read) {
-		md5_update (&ctx, tmp_buf, nb_bytes_read);
-		nb_bytes_read = camel_stream_read (stream, tmp_buf, 1024);
-	}
-	
-	md5_final (&ctx, digest);
-	
-}
-
-
-
-
-/**
- * md5_get_digest_from_file: get the md5 hash of a file
- * @filename: file name
- * @digest: 16 bytes buffer receiving the hash code.
- * 
- * Get the md5 hash of a file. The result is put in 
- * the 16 bytes buffer @digest .
- **/
-void
-md5_get_digest_from_file (const gchar *filename, guchar digest[16])
-{	
-	MD5Context ctx;
-	guchar tmp_buf[1024];
-	gint nb_bytes_read;
-	FILE *fp;
-
-	printf("generating checksum\n");
-
-	md5_init (&ctx);
-	fp = fopen(filename, "r");
-	if (!fp) {
-	return;
-	}
-	
-	while ((nb_bytes_read = fread (tmp_buf, sizeof (guchar), 1024, fp)) > 0)
-		md5_update (&ctx, tmp_buf, nb_bytes_read);
-	
-	if (ferror(fp)) {
-		fclose(fp);
-		return;
-	}
-
-	
-	md5_final (&ctx, digest);
-	
-	printf("checksum done\n");
-}
-
-
-
-
diff --git a/camel/md5-utils.h b/camel/md5-utils.h
deleted file mode 100644
index c911250d56..0000000000
--- a/camel/md5-utils.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest.  This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to rpmMD5Init, call rpmMD5Update as
- * needed on buffers full of bytes, and then call rpmMD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-/* parts of this file are :
- * Written March 1993 by Branko Lankester
- * Modified June 1993 by Colin Plumb for altered md5.c.
- * Modified October 1995 by Erik Troan for RPM
- */
-
-
-#ifndef MD5_UTILS_H
-#define MD5_UTILS_H
-
-#include 
-#include 
-
-typedef struct {
-	guint32 buf[4];
-	guint32 bits[2];
-	guchar in[64];
-	gint doByteReverse;
-
-} MD5Context ;
-
-
-void md5_get_digest (const gchar *buffer, gint buffer_size, guchar digest[16]);
-void md5_get_digest_from_stream (CamelStream *stream, guchar digest[16]);
-
-/* use this one when speed is needed */
-/* for use in provider code only */
-void md5_get_digest_from_file (const gchar *filename, guchar digest[16]);
-
-/* raw routines */
-void md5_init (MD5Context *ctx);
-void md5_update (MD5Context *ctx, const guchar *buf, guint32 len);
-void md5_final (MD5Context *ctx, guchar digest[16]);
-
-
-#endif	/* MD5_UTILS_H */
diff --git a/camel/providers/.cvsignore b/camel/providers/.cvsignore
deleted file mode 100644
index 3dda72986f..0000000000
--- a/camel/providers/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
diff --git a/camel/providers/Makefile.am b/camel/providers/Makefile.am
deleted file mode 100644
index dedeaa0b3b..0000000000
--- a/camel/providers/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# SUBDIRS = mbox pop3 sendmail smtp vee
-SUBDIRS = mbox pop3 sendmail smtp vee imap mh nntp
-
-# these ones are disabled for the moment.
-# maildir
diff --git a/camel/providers/imap/.cvsignore b/camel/providers/imap/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/imap/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/imap/Makefile.am b/camel/providers/imap/Makefile.am
deleted file mode 100644
index 5ff249739f..0000000000
--- a/camel/providers/imap/Makefile.am
+++ /dev/null
@@ -1,42 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelimapincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelimap.la
-provider_DATA = libcamelimap.urls
-
-INCLUDES = -I.. \
-	-I$(srcdir)/..				\
-	-I$(top_srcdir)/camel			\
-	-I$(top_srcdir)/intl			\
-	-I$(top_srcdir)/libibex			\
-	-I$(top_srcdir)/e-util			\
-	-I$(top_srcdir)				\
-	-I$(includedir)				\
-	$(GTK_INCLUDEDIR)			\
-	-DG_LOG_DOMAIN=\"camel-imap-provider\"	
-
-libcamelimap_la_SOURCES = 			\
-	camel-imap-folder.c			\
-	camel-imap-provider.c			\
-	camel-imap-store.c			\
-	camel-imap-stream.c			\
-	camel-imap-utils.c
-
-libcamelimapinclude_HEADERS =			\
-	camel-imap-folder.h			\
-	camel-imap-store.h			\
-	camel-imap-stream.h			\
-	camel-imap-utils.h
-
-libcamelimap_la_LDFLAGS = -version-info 0:0:0
-
-EXTRA_DIST = libcamelimap.urls
-
-
-
-
-
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
deleted file mode 100644
index 2118554607..0000000000
--- a/camel/providers/imap/camel-imap-folder.c
+++ /dev/null
@@ -1,1578 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-imap-folder.c: Abstract class for an email folder */
-
-/* 
- * Authors: Jeffrey Stedfast  
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include  
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include "camel-imap-folder.h"
-#include "camel-imap-store.h"
-#include "camel-imap-stream.h"
-#include "camel-imap-utils.h"
-#include "string-utils.h"
-#include "camel-stream.h"
-#include "camel-stream-fs.h"
-#include "camel-stream-mem.h"
-#include "camel-stream-buffer.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-filter-from.h"
-#include "camel-mime-filter-crlf.h"
-#include "camel-exception.h"
-#include "camel-mime-utils.h"
-
-#define d(x) x
-
-#define CF_CLASS(o) (CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(o)))
-
-static CamelFolderClass *parent_class = NULL;
-
-static void imap_init (CamelFolder *folder, CamelStore *parent_store,
-		       CamelFolder *parent_folder, const gchar *name,
-		       gchar *separator, gboolean path_begns_with_sep,
-		       CamelException *ex);
-
-static void imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
-static void imap_expunge (CamelFolder *folder, CamelException *ex);
-
-static gint imap_get_message_count_internal (CamelFolder *folder, CamelException *ex);
-static gint imap_get_message_count (CamelFolder *folder);
-static gint imap_get_unread_message_count (CamelFolder *folder);
-
-static CamelMimeMessage *imap_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex);
-static void imap_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, CamelException *ex);
-static void imap_copy_message_to (CamelFolder *source, const char *uid, CamelFolder *destination, CamelException *ex);
-static void imap_move_message_to (CamelFolder *source, const char *uid, CamelFolder *destination, CamelException *ex);
-
-static GPtrArray *imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex);
-static GPtrArray *imap_get_subfolder_names (CamelFolder *folder);
-
-static GPtrArray *imap_get_uids (CamelFolder *folder);
-static GPtrArray *imap_get_summary_internal (CamelFolder *folder, CamelException *ex);
-static GPtrArray *imap_get_summary (CamelFolder *folder);
-static const CamelMessageInfo *imap_get_message_info (CamelFolder *folder, const char *uid);
-
-static GPtrArray *imap_search_by_expression (CamelFolder *folder, const char *expression, CamelException *ex);
-
-static void imap_finalize (CamelObject *object);
-
-/* flag methods */
-/*static guint32  imap_get_permanent_flags   (CamelFolder *folder, CamelException *ex);*/
-static guint32  imap_get_message_flags     (CamelFolder *folder, const char *uid);
-static void     imap_set_message_flags     (CamelFolder *folder, const char *uid, guint32 flags, guint32 set);
-static gboolean imap_get_message_user_flag (CamelFolder *folder, const char *uid, const char *name);
-static void     imap_set_message_user_flag (CamelFolder *folder, const char *uid, const char *name,
-					    gboolean value);
-
-
-static void
-camel_imap_folder_class_init (CamelImapFolderClass *camel_imap_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_imap_folder_class);
-
-	parent_class = CAMEL_FOLDER_CLASS(camel_type_get_global_classfuncs (camel_folder_get_type ()));
-		
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_folder_class->init = imap_init;
-	camel_folder_class->sync = imap_sync;
-	camel_folder_class->expunge = imap_expunge;
-
-	camel_folder_class->get_uids = imap_get_uids;
-	camel_folder_class->free_uids = camel_folder_free_nop;
-	camel_folder_class->get_subfolder_names = imap_get_subfolder_names;
-	camel_folder_class->free_subfolder_names = camel_folder_free_nop;
-
-	camel_folder_class->get_message_count = imap_get_message_count;
-	camel_folder_class->get_unread_message_count = imap_get_unread_message_count;
-	camel_folder_class->get_message = imap_get_message;
-	camel_folder_class->append_message = imap_append_message;
-	camel_folder_class->copy_message_to = imap_copy_message_to;
-	camel_folder_class->move_message_to = imap_move_message_to;
-	
-	camel_folder_class->get_summary = imap_get_summary;
-	camel_folder_class->get_message_info = imap_get_message_info;
-	camel_folder_class->free_summary = camel_folder_free_nop;
-
-	camel_folder_class->search_by_expression = imap_search_by_expression;
-
-	/*camel_folder_class->get_permanent_flags = imap_get_permanent_flags;*/
-	camel_folder_class->get_message_flags = imap_get_message_flags;
-	camel_folder_class->set_message_flags = imap_set_message_flags;
-	camel_folder_class->get_message_user_flag = imap_get_message_user_flag;
-	camel_folder_class->set_message_user_flag = imap_set_message_user_flag;
-}
-
-static void
-camel_imap_folder_init (gpointer object, gpointer klass)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object);
-	CamelFolder *folder = CAMEL_FOLDER (object);
-	
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = TRUE;
-	folder->has_search_capability = TRUE;
-	
-	imap_folder->summary = NULL;
-	imap_folder->summary_hash = NULL;
-	imap_folder->lsub = NULL;
-}
-
-CamelType
-camel_imap_folder_get_type (void)
-{
-	static CamelType camel_imap_folder_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_imap_folder_type == CAMEL_INVALID_TYPE)	{
-		camel_imap_folder_type = camel_type_register (CAMEL_FOLDER_TYPE, "CamelImapFolder",
-							      sizeof (CamelImapFolder),
-							      sizeof (CamelImapFolderClass),
-							      (CamelObjectClassInitFunc) camel_imap_folder_class_init,
-							      NULL,
-							      (CamelObjectInitFunc) camel_imap_folder_init,
-							      (CamelObjectFinalizeFunc) imap_finalize);
-	}
-	
-	return camel_imap_folder_type;
-}
-
-CamelFolder *
-camel_imap_folder_new (CamelStore *parent, char *folder_name, CamelException *ex)
-{
-	CamelFolder *folder = CAMEL_FOLDER (camel_object_new (camel_imap_folder_get_type ()));
-	CamelURL *url = CAMEL_SERVICE (parent)->url;
-	char *dir_sep;
-
-	dir_sep = CAMEL_IMAP_STORE (parent)->dir_sep;
-	
-	CF_CLASS (folder)->init (folder, parent, NULL, folder_name, dir_sep, FALSE, ex);
- 
-	if (!strcmp (folder_name, url->path + 1))
-		folder->can_hold_messages = FALSE;
-	
-	imap_get_subfolder_names_internal (folder, ex);
-	
-	if (folder->can_hold_messages)
-		imap_get_summary_internal (folder, ex);
-	
-	return folder;
-}
-
-static void
-imap_summary_free (GPtrArray **summary)
-{
-	CamelMessageInfo *info;
-	GPtrArray *array = *summary;
-	gint i, max;
-	
-	if (array) {
-		max = array->len;
-		for (i = 0; i < max; i++) {
-			info = g_ptr_array_index (array, i);
-			g_free (info->subject);
-			g_free (info->from);
-			g_free (info->to);
-			g_free (info->cc);
-			g_free (info->uid);
-			g_free (info->message_id);
-			header_references_list_clear (&info->references);
-			g_free (info);
-			info = NULL;
-		}
-		
-		g_ptr_array_free (array, TRUE);
-		*summary = NULL;
-	}
-}
-
-static void
-imap_folder_summary_free (CamelImapFolder *imap_folder)
-{
-	if (imap_folder->summary_hash) {
-		g_hash_table_destroy (imap_folder->summary_hash);
-		imap_folder->summary_hash = NULL;
-	}
-
-	imap_summary_free (&imap_folder->summary);
-}
-
-static void           
-imap_finalize (CamelObject *object)
-{
-	/* TODO: do we need to do more cleanup here? */
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object);
-	gint max, i;
-	
-	imap_folder_summary_free (imap_folder);
-	
-	if (imap_folder->lsub) {
-		max = imap_folder->lsub->len;
-		
-		for (i = 0; i < max; i++) {
-			g_free (imap_folder->lsub->pdata[i]);
-			imap_folder->lsub->pdata[i] = NULL;
-		}
-		
-		g_ptr_array_free (imap_folder->lsub, TRUE);
-	}
-}
-
-static void 
-imap_init (CamelFolder *folder, CamelStore *parent_store, CamelFolder *parent_folder,
-	   const gchar *name, gchar *separator, gboolean path_begins_with_sep, CamelException *ex)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	
-	/* call parent method */
-	parent_class->init (folder, parent_store, parent_folder, name, separator, path_begins_with_sep, ex);
-	if (camel_exception_get_id (ex))
-		return;
-	
-	/* we assume that the parent init
-	   method checks for the existance of @folder */
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = TRUE;
-	folder->has_search_capability = TRUE;
-	
-        /* some IMAP daemons support user-flags           *
-	 * I would not, however, rely on this feature as  *
-	 * most IMAP daemons are not 100% RFC compliant   */
-	folder->permanent_flags = CAMEL_MESSAGE_SEEN |
-		CAMEL_MESSAGE_ANSWERED |
-		CAMEL_MESSAGE_FLAGGED |
-		CAMEL_MESSAGE_DELETED |
-		CAMEL_MESSAGE_DRAFT |
-		CAMEL_MESSAGE_USER;
-	
- 	imap_folder->search = NULL;
-	imap_folder->summary = NULL;
-	imap_folder->summary_hash = NULL;
-	imap_folder->lsub = NULL;
-}
-
-static void
-imap_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	gint i, max;
-
-	if (expunge) {
-		imap_expunge (folder, ex);
-		return;
-	}
-	
-	/* Set the flags on any messages that have changed this session */
-	if (imap_folder->summary) {
-		max = imap_folder->summary->len;
-		for (i = 0; i < max; i++) {
-			CamelMessageInfo *info;
-			
-			info = (CamelMessageInfo *) g_ptr_array_index (imap_folder->summary, i);
-			if (info->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) {
-				char *flags;
-				
-				flags = g_strconcat (info->flags & CAMEL_MESSAGE_SEEN ? "\\Seen " : "",
-						     info->flags & CAMEL_MESSAGE_DRAFT ? "\\Draft " : "",
-						     info->flags & CAMEL_MESSAGE_DELETED ? "\\Deleted " : "",
-						     info->flags & CAMEL_MESSAGE_ANSWERED ? "\\Answered " : "",
-						     NULL);
-				if (*flags) {
-					gchar *result;
-					gint s;
-					
-					*(flags + strlen (flags) - 1) = '\0';
-					s = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store),
-									 folder, &result,
-									 "UID STORE %s FLAGS.SILENT (%s)",
-									 info->uid, flags);
-					
-					if (s != CAMEL_IMAP_OK) {
-						CamelService *service = CAMEL_SERVICE (folder->parent_store);
-						camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-								      "Could not set flags on message %s on IMAP "
-								      "server %s: %s.", info->uid,
-								      service->url->host,
-								      s != CAMEL_IMAP_FAIL && result ? result :
-								      "Unknown error");
-						g_free (result);
-						return;
-					}
-					
-					g_free (result);
-				}
-				g_free (flags);
-			}
-		}
-	}
-}
-
-static void
-imap_expunge (CamelFolder *folder, CamelException *ex)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	gchar *node, *result;
-	gint i, status, recent = -1;
-	
-	g_return_if_fail (folder != NULL);
-	
-	imap_sync (folder, FALSE, ex);
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-					      &result, "EXPUNGE");
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not EXPUNGE from IMAP server %s: %s.",
-				      service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		return;
-	}
-	
-	/* determine which messages were successfully expunged */
-	node = result;
-	for (i = 0; node; i++) {
-		if (*node == '*') {
-			char *word;
-			
-			word = imap_next_word (node);
-			
-			if (!strncmp (word, "NO", 2)) {
-				/* Something failed, probably a Read-Only mailbox? */
-				CamelService *service = CAMEL_SERVICE (folder->parent_store);
-				char *reason, *ep;
-				
-				word = imap_next_word (word);
-				for (ep = word; *ep && *ep != '\n'; ep++);
-				reason = g_strndup (word, (gint)(ep - word) + 1);
-				
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-						      "Could not EXPUNGE from IMAP server %s: %s.",
-						      service->url->host, reason ? reason :
-						      "Unknown error");
-				
-				g_free (reason);
-				break;
-			}
-			
-			/* else we have a message id? */
-			if (*word >= '0' && *word <= '9' && !strncmp ("EXPUNGE", imap_next_word (word), 7)) {
-				int id;
-				
-				id = atoi (word);
-				
-				d(fprintf (stderr, "Expunging message %d from the summary (i = %d)\n", id + i, i));
-				
-				if (id <= imap_folder->summary->len) {
-					CamelMessageInfo *info;
-					
-					info = (CamelMessageInfo *) imap_folder->summary->pdata[id - 1];
-					
-					/* remove from the lookup table and summary */
-					g_hash_table_remove (imap_folder->summary_hash, info->uid);
-					g_ptr_array_remove_index (imap_folder->summary, id - 1);
-					
-					/* free the info data */
-					g_free (info->subject);
-					g_free (info->from);
-					g_free (info->to);
-					g_free (info->cc);
-					g_free (info->uid);
-					g_free (info->message_id);
-					header_references_list_clear (&info->references);
-					g_free (info);
-					info = NULL;
-				} else {
-					/* Hopefully this should never happen */
-					d(fprintf (stderr, "imap expunge-error: message %d is out of range\n", id));
-				}
-			} else if (*word >= '0' && *word <= '9' && !strncmp ("RECENT", imap_next_word (word), 6)) {
-				recent = atoi (word);
-				if (!recent)
-					recent = -1;
-			}
-		} else {
-			break;
-		}
-		
-		for ( ; *node && *node != '\n'; node++);
-		if (*node)
-			node++;
-	}
-	
-	g_free (result);
-	
-	camel_imap_folder_changed (folder, recent, ex);
-}
-
-static gint
-imap_get_message_count_internal (CamelFolder *folder, CamelException *ex)
-{
-	CamelStore *store = CAMEL_STORE (folder->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	gchar *result, *msg_count, *folder_path, *dir_sep;
-	gint status, count = 0;
-	
-	g_return_val_if_fail (folder != NULL, 0);
-	g_return_val_if_fail (folder->can_hold_messages, 0);
-	
-	dir_sep = CAMEL_IMAP_STORE (folder->parent_store)->dir_sep;
-	
-	if (url && url->path && *(url->path + 1) && strcmp (folder->full_name, "INBOX"))
-		folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-	else
-		folder_path = g_strdup (folder->full_name);
-	
-	if (CAMEL_IMAP_STORE (store)->has_status_capability)
-		status = camel_imap_command_extended (CAMEL_IMAP_STORE (store), folder,
-						      &result, "STATUS %s (MESSAGES)", folder_path);
-	else
-		status = camel_imap_command_extended (CAMEL_IMAP_STORE (store), folder,
-						      &result, "EXAMINE %s", folder_path);
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get message count for %s from IMAP "
-				      "server %s: %s.", folder_path, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (folder_path);
-		return 0;
-	}
-	g_free (folder_path);
-	
-	/* parse out the message count */
-	if (result && *result == '*') {
-		if (CAMEL_IMAP_STORE (store)->has_status_capability) {
-			/* should come in the form: "* STATUS  (MESSAGES )" */
-			if ((msg_count = strstr (result, "MESSAGES")) != NULL) {
-				msg_count = imap_next_word (msg_count);
-			
-				/* we should now be pointing to the message count */
-				count = atoi (msg_count);
-			}
-		} else {
-			/* should come in the form: "*  EXISTS" */
-			if ((msg_count = strstr (result, "EXISTS")) != NULL) {
-				for ( ; msg_count > result && *msg_count != '*'; msg_count--);
-				
-				msg_count = imap_next_word (msg_count);
-				
-				/* we should now be pointing to the message count */
-				count = atoi (msg_count);
-			}
-		}
-	}
-	g_free (result);
-	
-	return count;
-}
-
-static gint
-imap_get_message_count (CamelFolder *folder)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	
-	if (imap_folder->summary)
-		return imap_folder->summary->len;
-	else
-		return 0;
-}
-
-static gint
-imap_get_unread_message_count (CamelFolder *folder)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	CamelMessageInfo *info;
-	GPtrArray *infolist;
-	gint i, count = 0;
-	
-	g_return_val_if_fail (folder != NULL, 0);
-	
-	/* If we don't have a message count, return 0 */
-	if (!imap_folder->summary)
-		return 0;
-	
-	infolist = imap_get_summary (folder);
-	
-	for (i = 0; i < infolist->len; i++) {
-		info = (CamelMessageInfo *) g_ptr_array_index (infolist, i);
-		if (!(info->flags & CAMEL_MESSAGE_SEEN))
-			count++;
-	}
-	
-	return count;
-}
-
-static void
-imap_append_message (CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, CamelException *ex)
-{
-	CamelStore *store = CAMEL_STORE (folder->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	CamelStream *memstream;
-	GByteArray *ba;
-	gchar *result, *cmdid, *dir_sep;
-	gchar *folder_path, *flagstr = NULL;
-	gint status;
-	
-	g_return_if_fail (folder != NULL);
-	g_return_if_fail (message != NULL);
-		
-	dir_sep = CAMEL_IMAP_STORE (folder->parent_store)->dir_sep;
-	
-	if (url && url->path && *(url->path + 1) && strcmp (folder->full_name, "INBOX"))
-		folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-	else
-		folder_path = g_strdup (folder->full_name);
-	
-	/* create flag string param */
-	if (info && info->flags) {
-		flagstr = g_strconcat (" (", info->flags & CAMEL_MESSAGE_SEEN ? "\\Seen " : "",
-				       info->flags & CAMEL_MESSAGE_DRAFT ? "\\Draft " : "",
-				       info->flags & CAMEL_MESSAGE_DELETED ? "\\Answered " : "",
-				       NULL);
-		if (flagstr)
-			*(flagstr + strlen (flagstr) - 1) = ')';
-	}
-	
-	ba = g_byte_array_new ();
-	memstream = camel_stream_mem_new_with_byte_array (ba);
-	/* FIXME: we need to crlf/dot filter */
-	camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), memstream);
-	camel_stream_write_string (memstream, "\r\n");
-	camel_stream_reset (memstream);
-	
-	status = camel_imap_command_preliminary (CAMEL_IMAP_STORE (folder->parent_store),
-						 &result, &cmdid, "APPEND %s%s {%d}",
-						 folder_path, flagstr ? flagstr : "", ba->len - 2);
-	
-	if (status != CAMEL_IMAP_PLUS) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not APPEND message to IMAP server %s: %s.",
-				      service->url->host, result ? result : "Unknown error");
-		
-		g_free (result);
-		g_free (cmdid);
-		g_free (folder_path);
-		return;
-	}
-	
-	g_free (result);
-	g_free (folder_path);
-	
-	/* send the rest of our data - the mime message */
-	status = camel_imap_command_continuation_with_stream (CAMEL_IMAP_STORE (folder->parent_store),
-							      &result, cmdid, memstream);
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not APPEND message to IMAP server %s: %s.",
-				      service->url->host, result ? result : "Unknown error");
-		
-		camel_object_unref (CAMEL_OBJECT (memstream));
-		g_free (result);
-		g_free (cmdid);
-		return;
-	}
-	
-	camel_object_unref (CAMEL_OBJECT (memstream));
-	g_free (cmdid);
-	g_free (result);
-	
-	camel_imap_folder_changed (folder, 1, ex);
-}
-
-static void
-imap_copy_message_to (CamelFolder *source, const char *uid, CamelFolder *destination, CamelException *ex)
-{
-	CamelStore *store = CAMEL_STORE (source->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	char *result, *folder_path, *dir_sep;
-	int status;
-
-	dir_sep = CAMEL_IMAP_STORE (source->parent_store)->dir_sep;
-	
-	if (url && url->path && *(url->path + 1) && strcmp (destination->full_name, "INBOX"))
-		folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, destination->full_name);
-	else
-		folder_path = g_strdup (destination->full_name);
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (store), source, &result,
-					      "UID COPY %s %s", uid, folder_path);
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not COPY message %s to %s on IMAP server %s: %s.",
-				      uid, folder_path, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (folder_path);
-		return;
-	}
-
-	g_free (result);
-	g_free (folder_path);
-
-	camel_imap_folder_changed (destination, 1, ex);
-}
-
-/* FIXME: Duplication of code! */
-static void
-imap_move_message_to (CamelFolder *source, const char *uid, CamelFolder *destination, CamelException *ex)
-{
-	CamelStore *store = CAMEL_STORE (source->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	CamelMessageInfo *info;
-	char *result, *folder_path, *dir_sep;
-	int status;
-
-	dir_sep = CAMEL_IMAP_STORE (source->parent_store)->dir_sep;
-	
-	if (url && url->path && *(url->path + 1) && strcmp (destination->full_name, "INBOX"))
-		folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, destination->full_name);
-	else
-		folder_path = g_strdup (destination->full_name);
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (store), source, &result,
-					      "UID COPY %s %s", uid, folder_path);
-
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not COPY message %s to %s on IMAP server %s: %s.",
-				      uid, folder_path, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (folder_path);
-		return;
-	}
-
-	g_free (result);
-	g_free (folder_path);
-	
-	if (!(info = (CamelMessageInfo *)imap_get_message_info (source, uid))) {
-		CamelService *service = CAMEL_SERVICE (store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not set flags for message %s on IMAP server %s: %s",
-				      uid, service->url->host, "Unknown error");
-		return;
-	}
-
-	imap_set_message_flags (source, uid, CAMEL_MESSAGE_DELETED, ~(info->flags));
-
-	camel_imap_folder_changed (destination, 1, ex);
-}
-
-static GPtrArray *
-imap_get_uids (CamelFolder *folder) 
-{
-	CamelMessageInfo *info;
-	GPtrArray *array, *infolist;
-	gint i, count;
-	
-	infolist = imap_get_summary (folder);
-	count = infolist->len;
-	
-	array = g_ptr_array_new ();
-	g_ptr_array_set_size (array, count);
-	
-	for (i = 0; i < count; i++) {
-		info = (CamelMessageInfo *) g_ptr_array_index (infolist, i);
-		array->pdata[i] = g_strdup (info->uid);
-	}
-	
-	return array;
-}
-
-static GPtrArray *
-imap_get_subfolder_names_internal (CamelFolder *folder, CamelException *ex)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	CamelStore *store = CAMEL_STORE (folder->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	GPtrArray *listing;
-	gboolean found_inbox = FALSE;
-	gint status;
-	gchar *result, *namespace, *dir_sep;
-
-	g_return_val_if_fail (folder != NULL, g_ptr_array_new ());
-	
-	dir_sep = CAMEL_IMAP_STORE (folder->parent_store)->dir_sep;
-	
-	if (url && url->path) {
-		if (!strcmp (folder->full_name, url->path + 1))
-			namespace = g_strdup (url->path + 1);
-		else if (!strcmp (folder->full_name, "INBOX"))
-			namespace = g_strdup (url->path + 1); /* FIXME: erm...not sure */
-		else
-			namespace = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-	} else {
-		namespace = g_strdup (folder->full_name);
-	}
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), NULL,
-					      &result, "LIST \"\" \"%s%s*\"", namespace,
-					      *namespace ? dir_sep : "");
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get subfolder listing from IMAP "
-				      "server %s: %s.", service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (namespace);
-
-		imap_folder->lsub = g_ptr_array_new ();
-		return imap_folder->lsub;
-	}
-	
-	/* parse out the subfolders */
-	listing = g_ptr_array_new ();
-	if (result) {
-		char *ptr = result;
-		
-		while (ptr && *ptr == '*') {
-			gchar *flags, *sep, *dir, *buf, *end;
-			
-			for (end = ptr; *end && *end != '\n'; end++);
-			buf = g_strndup (ptr, (gint)(end - ptr));
-			ptr = end;
-			
-			if (!imap_parse_list_response (buf, namespace, &flags, &sep, &dir)) {
-				g_free (buf);
-				g_free (flags);
-				g_free (sep);
-				g_free (dir);
-				
-				if (*ptr == '\n')
-					ptr++;
-				
-				continue;
-			}
-			
-			g_free (buf);
-			g_free (flags);
-			
-			if (*dir) {
-				d(fprintf (stderr, "adding folder: %s\n", dir));
-				if (!g_strcasecmp (dir, "INBOX"))
-					found_inbox = TRUE;
-				g_ptr_array_add (listing, dir);
-			}
-			
-			g_free (sep);
-			
-			if (*ptr == '\n')
-				ptr++;
-		}
-	}
-	
-	if (!strcmp (folder->name, namespace) && !found_inbox) {
-		g_ptr_array_add (listing, g_strdup ("INBOX"));
-	}
-	
-	g_free (result);
-	g_free (namespace);
-	
-	imap_folder->lsub = listing;
-	
-	return listing;
-}
-
-static GPtrArray *
-imap_get_subfolder_names (CamelFolder *folder)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	
-	return imap_folder->lsub;
-}
-
-static CamelMimeMessage *
-imap_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	CamelStream *msgstream = NULL;
-	/*CamelStreamFilter *f_stream;*/
-	/*CamelMimeFilter *filter;*/
-	CamelMimeMessage *msg = NULL;
-	/*CamelMimePart *part;*/
-	gchar *result, *header, *body, *mesg, *p, *q, *data_item;
-	int status, part_len;
-	
-	if (CAMEL_IMAP_STORE (folder->parent_store)->server_level >= IMAP_LEVEL_IMAP4REV1)
-		data_item = "BODY.PEEK[HEADER]";
-	else
-		data_item = "RFC822.HEADER";
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-					      &result, "UID FETCH %s %s", uid,
-					      data_item);
-
-	if (!result || status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not fetch message %s on IMAP server %s: %s",
-				      uid, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		return NULL;
-	}
-	
-	for (p = result; *p && *p != '{' && *p != '\n'; p++);
-	if (*p != '{') {
-		g_free (result);
-		return NULL;
-	}
-	
-	part_len = atoi (p + 1);
-	for ( ; *p && *p != '\n'; p++);
-	if (*p != '\n') {
-		g_free (result);
-		return NULL;
-	}
-	
-	/* calculate the new part-length */
-	for (q = p; *q && (q - p) <= part_len; q++) {
-		if (*q == '\n')
-			part_len--;
-	}
-	/* FIXME: This is a hack for IMAP daemons that send us a UID at the end of each FETCH */
-	for (q--, part_len--; q > p && *(q-1) != '\n'; q--, part_len--);
-
-	header = g_strndup (p, part_len + 1);
-	
-	g_free (result);
-	d(fprintf (stderr, "*** We got the header ***\n"));
-	
-	if (CAMEL_IMAP_STORE (folder->parent_store)->server_level >= IMAP_LEVEL_IMAP4REV1)
-		data_item = "BODY[TEXT]";
-	else
-		data_item = "RFC822.TEXT";
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-					      &result, "UID FETCH %s %s", uid,
-					      data_item);
-	
-	if (!result || status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not fetch message %s on IMAP server %s: %s",
-				      uid, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (header);
-		return NULL;
-	}
-	
-	for (p = result; *p && *p != '{' && *p != '\n'; p++);
-	if (*p != '{') {
-		/* this is a hack for when the part length isn't in {}'s */
-		part_len = 1;
-		for ( ; *p && *p != '\n'; p++);
-		p++;
-	} else {
-		part_len = atoi (p + 1);
-		for ( ; *p && *p != '\n'; p++);
-		if (*p != '\n') {
-			g_free (result);
-			g_free (header);
-			return NULL;
-		}
-	}
-	
-	/* calculate the new part-length */
-	for (q = p; *q && (q - p) <= part_len; q++) {
-		if (*q == '\n')
-			part_len--;
-	}
-	/* FIXME: This is a hack for IMAP daemons that send us a UID at the end of each FETCH */
-	for ( ; q > p && *(q-1) != '\n'; q--, part_len--);
-	
-	body = g_strndup (p, part_len + 1);
-	
-	g_free (result);
-	d(fprintf (stderr, "*** We got the body ***\n"));
-	
-	mesg = g_strdup_printf ("%s\n%s", header, body);
-	g_free (header);
-	g_free (body);
-	d(fprintf (stderr, "*** We got the mesg ***\n"));
-	
-	d(fprintf (stderr, "Message:\n%s\n", mesg));
-	
-	msgstream = camel_stream_mem_new_with_buffer (mesg, strlen (mesg) + 1);
-#if 0
-	f_stream = camel_stream_filter_new_with_stream (msgstream);
-	filter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_DECODE, CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS);
-	id = camel_stream_filter_add (f_stream, CAMEL_MIME_FILTER (filter));
-#endif	
-	msg = camel_mime_message_new ();
-	d(fprintf (stderr, "*** We created the camel_mime_message ***\n"));
-	
-	camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg), msgstream);
-#if 0	
-	camel_stream_filter_remove (f_stream, id);
-	camel_stream_close (CAMEL_STREAM (f_stream));
-#endif
-	camel_object_unref (CAMEL_OBJECT (msgstream));
-	/*camel_object_unref (CAMEL_OBJECT (f_stream));*/
-
-	d(fprintf (stderr, "*** We're returning... ***\n"));
-	
-	g_free (mesg);
-	return msg;
-	
-#if 0
-	CamelStream *imap_stream;
-	CamelStream *msgstream;
-	CamelStreamFilter *f_stream;   /* will be used later w/ crlf filter */
-	CamelMimeFilter *filter;       /* crlf/dot filter */
-	CamelMimeMessage *msg;
-	CamelMimePart *part;
-	CamelDataWrapper *cdw;
-	gchar *cmdbuf;
-	int id;
-	
-	/* TODO: fetch the correct part, get rid of the hard-coded stuff */
-	cmdbuf = g_strdup_printf ("UID FETCH %s BODY[TEXT]", uid);
-	imap_stream = camel_imap_stream_new (CAMEL_IMAP_FOLDER (folder), cmdbuf);
-	g_free (cmdbuf);
-
-
-	/* Temp hack - basically we read in the entire message instead of getting a part as it's needed */
-	msgstream = camel_stream_mem_new ();
-	camel_stream_write_to_stream (CAMEL_STREAM (imap_stream), msgstream);
-	camel_object_unref (CAMEL_OBJECT (imap_stream));
-	
-	f_stream = camel_stream_filter_new_with_stream (msgstream);
-	filter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_DECODE, CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS);
-	id = camel_stream_filter_add (f_stream, CAMEL_MIME_FILTER (filter));
-	
-	msg = camel_mime_message_new ();
-	
-	/*cdw = camel_data_wrapper_new ();*/
-	/*camel_data_wrapper_construct_from_stream (cdw, CAMEL_STREAM (f_stream));*/
-	camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg), CAMEL_STREAM (f_stream));
-	
-	camel_stream_filter_remove (f_stream, id);
-	camel_stream_close (CAMEL_STREAM (f_stream));
-	camel_object_unref (CAMEL_OBJECT (msgstream));
-	camel_object_unref (CAMEL_OBJECT (f_stream));
-	
-	/*camel_data_wrapper_set_mime_type (cdw, "text/plain");*/
-
-	/*camel_medium_set_content_object (CAMEL_MEDIUM (msg), CAMEL_DATA_WRAPPER (cdw));*/
-	/*camel_object_unref (CAMEL_OBJECT (cdw));*/
-	
-	return msg;
-#endif
-}
-
-/* This probably shouldn't go here...but it will for now */
-static gchar *
-get_header_field (gchar *header, gchar *field)
-{
-	gchar *part, *index, *p, *q;
-
-	index = (char *) e_strstrcase (header, field);
-	if (index == NULL)
-		return NULL;
-	
-	p = index + strlen (field) + 1;
-	for (q = p; *q; q++)
-		if (*q == '\n' && (*(q + 1) != ' ' && *(q + 1) != '\t'))
-			break;
-	
-	part = g_strndup (p, (gint)(q - p));
-	
-	/* it may be wrapped on multiple lines, so lets strip out \n's */
-	for (p = part; *p; ) {
-		if (*p == '\n')
-			memmove (p, p + 1, strlen (p));
-		else
-			p++;
-	}
-	
-	return part;
-}
-
-static char *header_fields[] = { "subject", "from", "to", "cc", "date",
-				 "received", "message-id", "references",
-				 "in-reply-to", "" };
-/**
- * imap_protocol_get_summary_specifier
- *
- * Make a data item specifier for the header lines we need,
- * appropriate to the server level.
- *
- * IMAP4rev1:  UID FLAGS BODY[HEADER.FIELDS (SUBJECT FROM .. IN-REPLY-TO)]
- * IMAP4:      UID FLAGS RFC822.HEADER.LINES (SUBJECT FROM .. IN-REPLY-TO)
- **/
-static char *
-imap_protocol_get_summary_specifier (CamelFolder *folder)
-{
-	char *sect_begin, *sect_end;
-	char *headers_wanted = "SUBJECT FROM TO CC DATE MESSAGE-ID REFERENCES IN-REPLY-TO";
-
-	if (CAMEL_IMAP_STORE (folder->parent_store)->server_level >= IMAP_LEVEL_IMAP4REV1) {
-		sect_begin = "BODY[HEADER.FIELDS";
-		sect_end = "]";
-	} else {
-		sect_begin = "RFC822.HEADER.LINES";
-		sect_end   = "";
-	}
-
-	return g_strdup_printf ("UID FLAGS %s (%s)%s", sect_begin, headers_wanted, sect_end);
-}
-
-static GPtrArray *
-imap_get_summary_internal (CamelFolder *folder, CamelException *ex)
-{
-	/* This ALWAYS updates the summary except on fail */
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-	GPtrArray *summary = NULL, *headers = NULL;
-	GHashTable *hash = NULL;
-	gint num, i, j, status = 0;
-	char *result, *q, *node;
-	const char *received;
-	char *summary_specifier;
-	struct _header_raw *h = NULL, *tail = NULL;
-	
-	num = imap_get_message_count_internal (folder, ex);
-
-	/* sync any previously set/changed message flags */
-	imap_sync (folder, FALSE, ex);
-
-	if (num == 0) {
-		/* clean up any previous summary data */
-		imap_folder_summary_free (imap_folder);
-		
-		imap_folder->summary = g_ptr_array_new ();
-		imap_folder->summary_hash = g_hash_table_new (g_str_hash, g_str_equal);
-		
-		return imap_folder->summary;
-	}
-	
-	summary_specifier = imap_protocol_get_summary_specifier (folder);
-
-	if (num == 1) {
-		status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-						      &result, "FETCH 1 (%s)", summary_specifier);
-	} else {
-		status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-						      &result, "FETCH 1:%d (%s)", num, summary_specifier);
-	}
-	g_free (summary_specifier);
-
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get summary for %s on IMAP server %s: %s",
-				      folder->full_name, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-
-		if (!imap_folder->summary) {
-			imap_folder->summary = g_ptr_array_new ();
-			imap_folder->summary_hash = g_hash_table_new (g_str_hash, g_str_equal);
-		}
-		
-		return imap_folder->summary;
-	}
-
-	/* initialize our new summary-to-be */
-	summary = g_ptr_array_new ();
-	hash = g_hash_table_new (g_str_hash, g_str_equal);
-	
-	/* create our array of headers from the server response */
-	headers = g_ptr_array_new ();
-	node = result;
-	for (i = 1; node; i++) {
-		char *end;
-
-		if ((end = strstr (node + 2, "\n*"))) {
-			g_ptr_array_add (headers, g_strndup (node, (gint)(end - node)));
-		} else {
-			g_ptr_array_add (headers, g_strdup (node));
-		}
-		node = end;
-	}
-	if (i < num) {
-		d(fprintf (stderr, "IMAP server didn't respond with as many headers as we expected...\n"));
-		/* should we error?? */
-	}
-
-	g_free (result);
-	result = NULL;
-	
-	for (i = 0; i < headers->len; i++) {
-		CamelMessageInfo *info;
-		char *uid, *flags, *header;
-
-		info = g_malloc0 (sizeof (CamelMessageInfo));
-
-		/* lets grab the UID... */
-		if (!(uid = strstr (headers->pdata[i], "UID "))) {
-			d(fprintf (stderr, "Cannot get a uid for %d\n\n%s\n\n", i+1, (char *) headers->pdata[i]));
-			g_free (info);
-			break;
-		}
-		
-		for (uid += 4; *uid && (*uid < '0' || *uid > '9'); uid++); /* advance to  */
-		for (q = uid; *q && *q >= '0' && *q <= '9'; q++); /* find the end of the  */
-		info->uid = g_strndup (uid, (gint)(q - uid));
-		d(fprintf (stderr, "*** info->uid = %s\n", info->uid));
-		
-		/* now lets grab the FLAGS */
-		if (!(flags = strstr (headers->pdata[i], "FLAGS "))) {
-			d(fprintf (stderr, "We didn't seem to get any flags for %d...\n", i));
-			g_free (info->uid);
-			g_free (info);
-			break;
-		}
-		
-		for (flags += 6; *flags && *flags != '('; flags++); /* advance to  */
-		for (q = flags; *q && *q != ')'; q++);         /* find the end of  */
-		flags = g_strndup (flags, (gint)(q - flags + 1));
-		d(fprintf (stderr, "*** info->flags = %s\n", flags));
-		
-		/* now we gotta parse for the flags */
-		info->flags = 0;
-		if (strstr (flags, "\\Seen"))
-			info->flags |= CAMEL_MESSAGE_SEEN;
-		if (strstr (flags, "\\Answered"))
-			info->flags |= CAMEL_MESSAGE_ANSWERED;
-		if (strstr (flags, "\\Flagged"))
-			info->flags |= CAMEL_MESSAGE_FLAGGED;
-		if (strstr (flags, "\\Deleted"))
-			info->flags |= CAMEL_MESSAGE_DELETED;
-		if (strstr (flags, "\\Draft"))
-			info->flags |= CAMEL_MESSAGE_DRAFT;
-		g_free (flags);
-		flags = NULL;
-		
-		/* construct the header list */
-		/* fast-forward to beginning of header info... */
-		for (header = headers->pdata[i]; *header && *header != '\n'; header++);
-		h = NULL;
-		for (j = 0; *header_fields[j]; j++) {
-			struct _header_raw *raw;
-			char *field, *value;
-			
-			field = g_strdup_printf ("\n%s:", header_fields[j]);
-			value = get_header_field (header, field);
-			g_free (field);
-			if (!value)
-				continue;
-			
-			raw = g_malloc0 (sizeof (struct _header_raw));
-			raw->next = NULL;
-			raw->name = g_strdup (header_fields[j]);
-			raw->value = value;
-			raw->offset = -1;
-			
-			if (!h) {
-				h = raw;
-				tail = h;
-			} else {
-				tail->next = raw;
-				tail = raw;
-			}
-		}
-		
-		/* construct the CamelMessageInfo */
-		info->subject = camel_summary_format_string (h, "subject");
-		info->from = camel_summary_format_address (h, "from");
-		info->to = camel_summary_format_address (h, "to");
-		info->cc = camel_summary_format_address (h, "cc");
-		info->user_flags = NULL;
-		info->date_sent = header_decode_date (header_raw_find (&h, "date", NULL), NULL);
-		received = header_raw_find (&h, "received", NULL);
-		if (received)
-			received = strrchr (received, ';');
-		if (received)
-			info->date_received = header_decode_date (received + 1, NULL);
-		else
-			info->date_received = 0;
-		info->message_id = header_msgid_decode (header_raw_find (&h, "message-id", NULL));
-		/* if we have a references, use that, otherwise, see if we have an in-reply-to
-		   header, with parsable content, otherwise *shrug* */
-		info->references = header_references_decode (header_raw_find (&h, "references", NULL));
-		if (info->references == NULL)
-			info->references = header_references_decode (header_raw_find (&h, "in-reply-to", NULL));
-		
-		while (h) {
-			struct _header_raw *next = h->next;
-			
-			g_free (h->name);
-			g_free (h->value);
-			g_free (h);
-			h = next;
-		}
-		
-		g_ptr_array_add (summary, info);
-		g_hash_table_insert (hash, info->uid, info);
-	}
-	
-	for (i = 0; i < headers->len; i++)
-		g_free (headers->pdata[i]);
-	g_ptr_array_free (headers, TRUE);
-	
-	/* clean up any previous summary data */
-	imap_folder_summary_free (imap_folder);
-	
-	imap_folder->summary = summary;
-	imap_folder->summary_hash = hash;
-	
-	return imap_folder->summary;
-}
-
-static GPtrArray *
-imap_get_summary (CamelFolder *folder)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-
-	return imap_folder->summary;
-}
-
-/* get a single message info from the server */
-static CamelMessageInfo *
-imap_get_message_info_internal (CamelFolder *folder, guint id)
-{
-	CamelMessageInfo *info = NULL;
-	struct _header_raw *h, *tail = NULL;
-	const char *received;
-	char *result, *uid, *flags, *header, *q;
-	char *summary_specifier;
-	int j, status;
-
-	/* we don't have a cached copy, so fetch it */
-	summary_specifier = imap_protocol_get_summary_specifier (folder);
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-					      &result, "FETCH %d (%s)", id, summary_specifier);
-
-	g_free (summary_specifier);
-	
-	if (status != CAMEL_IMAP_OK) {
-		g_free (result);
-		return NULL;
-	}
-	
-	/* lets grab the UID... */
-	if (!(uid = (char *) e_strstrcase (result, "UID "))) {
-		d(fprintf (stderr, "Cannot get a uid for %d\n\n%s\n\n", id, result));
-		g_free (result);
-		return NULL;
-	}
-		
-	for (uid += 4; *uid && (*uid < '0' || *uid > '9'); uid++); /* advance to  */
-	for (q = uid; *q && *q >= '0' && *q <= '9'; q++); /* find the end of the  */
-	uid = g_strndup (uid, (gint)(q - uid));
-
-	info = g_malloc0 (sizeof (CamelMessageInfo));
-	info->uid = uid;
-	d(fprintf (stderr, "*** info->uid = %s\n", info->uid));
-	
-	/* now lets grab the FLAGS */
-	if (!(flags = strstr (q, "FLAGS "))) {
-		d(fprintf (stderr, "We didn't seem to get any flags for %s...\n", uid));
-		g_free (info->uid);
-		g_free (info);
-		g_free (result);
-		return NULL;
-	}
-	
-	for (flags += 6; *flags && *flags != '('; flags++); /* advance to  */
-	for (q = flags; *q && *q != ')'; q++);              /* find the end of  */
-	flags = g_strndup (flags, (gint)(q - flags + 1));
-	d(fprintf (stderr, "*** info->flags = %s\n", flags));
-	
-	/* now we gotta parse for the flags */
-	info->flags = 0;
-	if (strstr (flags, "\\Seen"))
-		info->flags |= CAMEL_MESSAGE_SEEN;
-	if (strstr (flags, "\\Answered"))
-		info->flags |= CAMEL_MESSAGE_ANSWERED;
-	if (strstr (flags, "\\Flagged"))
-		info->flags |= CAMEL_MESSAGE_FLAGGED;
-	if (strstr (flags, "\\Deleted"))
-		info->flags |= CAMEL_MESSAGE_DELETED;
-	if (strstr (flags, "\\Draft"))
-		info->flags |= CAMEL_MESSAGE_DRAFT;
-	g_free (flags);
-	flags = NULL;
-	
-	/* construct the header list */
-	/* fast-forward to beginning of header info... */
-	for (header = q; *header && *header != '\n'; header++);
-	h = NULL;
-	for (j = 0; *header_fields[j]; j++) {
-		struct _header_raw *raw;
-		char *field, *value;
-		
-		field = g_strdup_printf ("\n%s:", header_fields[j]);
-		value = get_header_field (header, field);
-		g_free (field);
-		if (!value)
-			continue;
-		
-		raw = g_malloc0 (sizeof (struct _header_raw));
-		raw->next = NULL;
-		raw->name = g_strdup (header_fields[j]);
-		raw->value = value;
-		raw->offset = -1;
-		
-		if (!h) {
-			h = raw;
-			tail = h;
-		} else {
-			tail->next = raw;
-			tail = raw;
-		}
-	}
-	
-	/* construct the CamelMessageInfo */
-	info->subject = camel_summary_format_string (h, "subject");
-	info->from = camel_summary_format_address (h, "from");
-	info->to = camel_summary_format_address (h, "to");
-	info->cc = camel_summary_format_address (h, "cc");
-	info->user_flags = NULL;
-	info->date_sent = header_decode_date (header_raw_find (&h, "date", NULL), NULL);
-	received = header_raw_find (&h, "received", NULL);
-	if (received)
-		received = strrchr (received, ';');
-	if (received)
-		info->date_received = header_decode_date (received + 1, NULL);
-	else
-		info->date_received = 0;
-	info->message_id = header_msgid_decode (header_raw_find (&h, "message-id", NULL));
-	/* if we have a references, use that, otherwise, see if we have an in-reply-to
-	   header, with parsable content, otherwise *shrug* */
-	info->references = header_references_decode (header_raw_find (&h, "references", NULL));
-	if (info->references == NULL)
-		info->references = header_references_decode (header_raw_find (&h, "in-reply-to", NULL));
-
-	while (h->next) {
-		struct _header_raw *next = h->next;
-		
-		g_free (h->name);
-		g_free (h->value);
-		g_free (h);
-		h = next;
-	}
-
-	g_free (result);
-	
-	return info;
-}
-
-/* get a single message info, by uid */
-static const CamelMessageInfo *
-imap_get_message_info (CamelFolder *folder, const char *uid)
-{
-	CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-
-	g_return_val_if_fail (*uid != '\0', NULL);
-
-	if (imap_folder->summary)
-		return (CamelMessageInfo *) g_hash_table_lookup (imap_folder->summary_hash, uid);
-
-	return NULL;
-}
-
-static GPtrArray *
-imap_search_by_expression (CamelFolder *folder, const char *expression, CamelException *ex)
-{
-	/* NOTE: This is experimental code... */
-	GPtrArray *uids = NULL;
-	char *result, *sexp, *p;
-	int status;
-	
-	d(fprintf (stderr, "camel sexp: '%s'\n", expression));
-	sexp = imap_translate_sexp (expression);
-	d(fprintf (stderr, "imap sexp: '%s'\n", sexp));
-	
-	uids = g_ptr_array_new ();
-	
-	if (!folder->has_search_capability) {
-		g_free (sexp);
-		return uids;
-	}
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder,
-					      &result, "UID SEARCH %s", sexp);
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get summary for %s on IMAP server %s: %s",
-				      folder->full_name, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (sexp);
-		return uids;
-	}
-
-	if ((p = strstr (result, "* SEARCH"))) {
-		char *word;
-		
-		word = imap_next_word (p); /* word now points to SEARCH */
-		
-		for (word = imap_next_word (word); *word && *word != '*'; word = imap_next_word (word)) {
-			gboolean word_is_numeric = TRUE;
-			char *ep;
-			
-			/* find the end of this word and make sure it's a numeric uid */
-			for (ep = word; *ep && *ep != ' ' && *ep != '\n'; ep++)
-				if (*ep < '0' || *ep > '9')
-					word_is_numeric = FALSE;
-			
-			if (word_is_numeric)
-				g_ptr_array_add (uids, g_strndup (word, (gint)(ep - word)));
-		}
-	}
-	
-	g_free (result);
-	g_free (sexp);
-	
-	return uids;
-}
-
-#if 0
-static guint32
-imap_get_permanent_flags (CamelFolder *folder, CamelException *ex)
-{
-	/* return permamnant flags */
-	return folder->permanent_flags;
-}
-#endif
-
-static guint32
-imap_get_message_flags (CamelFolder *folder, const char *uid)
-{
-	const CamelMessageInfo *info;
-	
-	info = imap_get_message_info (folder, uid);
-	g_return_val_if_fail (info != NULL, 0);
-	
-	return info->flags;
-}
-
-static void
-imap_set_message_flags (CamelFolder *folder, const char *uid, guint32 flags, guint32 set)
-{
-	CamelMessageInfo *info;
-	
-	info = (CamelMessageInfo*)imap_get_message_info (folder, uid);
-	g_return_if_fail (info != NULL);
-	
-	info->flags = (info->flags & ~flags) | (set & flags) | CAMEL_MESSAGE_FOLDER_FLAGGED;
-	
-	/*gtk_signal_emit_by_name (GTK_OBJECT (folder), "message_changed", uid);*/
-	camel_object_trigger_event (CAMEL_OBJECT (folder), "message_changed", (gpointer *) uid);
-}
-
-static gboolean
-imap_get_message_user_flag (CamelFolder *folder, const char *uid, const char *name)
-{
-	return FALSE;
-}
-
-static void
-imap_set_message_user_flag (CamelFolder *folder, const char *uid, const char *name, gboolean value)
-{
-	/*gtk_signal_emit_by_name (GTK_OBJECT (folder), "message_changed", uid);*/
-	camel_object_trigger_event (CAMEL_OBJECT (folder), "message_changed", (gpointer *) uid);
-}
-
-void
-camel_imap_folder_changed (CamelFolder *folder, gint recent, CamelException *ex)
-{
-	d(fprintf (stderr, "camel_imap_folder_changed: recent = %d\n", recent));
-	
-	g_return_if_fail (recent);
-	
-	if (recent > 0) {
-		CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-		CamelMessageInfo *info;
-		gint i, j, last;
-		
-		if (!imap_folder->summary) {
-			imap_folder->summary = g_ptr_array_new ();
-			imap_folder->summary_hash = g_hash_table_new (g_str_hash, g_str_equal);
-		}
-		
-		last = imap_folder->summary->len + 1;
-		
-		for (i = last, j = 0; j < recent; i++, j++) {
-			info = imap_get_message_info_internal (folder, i);
-			if (info) {
-				g_ptr_array_add (imap_folder->summary, info);
-				g_hash_table_insert (imap_folder->summary_hash, info->uid, info);
-			} else {
-				/* our hack failed so now we need to do it the old fashioned way */
-				/*imap_get_summary_internal (folder, ex);*/
-				d(fprintf (stderr, "*** we tried to get message %d but failed\n", i));
-				break;
-			}
-		}
-	}
-	
-	/*gtk_signal_emit_by_name (GTK_OBJECT (folder), "folder_changed", 0);*/
-	camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", GINT_TO_POINTER (0));
-}
diff --git a/camel/providers/imap/camel-imap-folder.h b/camel/providers/imap/camel-imap-folder.h
deleted file mode 100644
index bd1647c300..0000000000
--- a/camel/providers/imap/camel-imap-folder.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-folder.h : Abstract class for an imap folder */
-
-/* 
- * Author: 
- *   Jeffrey Stedfast  
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_IMAP_FOLDER_H
-#define CAMEL_IMAP_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-folder.h"
-#include 
-
-#define CAMEL_IMAP_FOLDER_TYPE     (camel_imap_folder_get_type ())
-#define CAMEL_IMAP_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_FOLDER_TYPE, CamelImapFolder))
-#define CAMEL_IMAP_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_FOLDER_TYPE, CamelImapFolderClass))
-#define IS_CAMEL_IMAP_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_FOLDER_TYPE))
-
-typedef struct {
-	CamelFolder parent_object;
-
-	CamelFolderSearch *search; /* used to run searches */
-
-	GPtrArray *summary;
-	GHashTable *summary_hash;
-	
-	GPtrArray *lsub;
-} CamelImapFolder;
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelImapFolderClass;
-
-
-/* public methods */
-CamelFolder *camel_imap_folder_new (CamelStore *parent, char *folder_name,
-				    CamelException *ex);
-
-void camel_imap_folder_changed (CamelFolder *folder, gint recent, CamelException *ex);
-
-/* Standard Camel function */
-CamelType camel_imap_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_IMAP_FOLDER_H */
diff --git a/camel/providers/imap/camel-imap-provider.c b/camel/providers/imap/camel-imap-provider.c
deleted file mode 100644
index 21452d5cee..0000000000
--- a/camel/providers/imap/camel-imap-provider.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-provider.c: imap provider registration code */
-
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#include "config.h"
-#include "camel-imap-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static void add_hash (guint *hash, char *s);
-static guint imap_url_hash (gconstpointer key);
-static gint check_equal (char *s1, char *s2);
-static gint imap_url_equal (gconstpointer a, gconstpointer b);
-
-static CamelProvider imap_provider = {
-	"imap",
-	"IMAPv4",
-
-	"For reading and storing mail on IMAP servers.",
-
-	"mail",
-
-	CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	imap_provider.object_types[CAMEL_PROVIDER_STORE] =
-		camel_imap_store_get_type();
-
-	imap_provider.service_cache = g_hash_table_new (imap_url_hash, imap_url_equal);
-
-	camel_session_register_provider (session, &imap_provider);
-}
-
-static void
-add_hash (guint *hash, char *s)
-{
-	if (s)
-		*hash ^= g_str_hash(s);
-}
-
-static guint
-imap_url_hash (gconstpointer key)
-{
-	const CamelURL *u = (CamelURL *)key;
-	guint hash = 0;
-
-	add_hash (&hash, u->user);
-	add_hash (&hash, u->authmech);
-	add_hash (&hash, u->host);
-	hash ^= u->port;
-	
-	return hash;
-}
-
-static gint
-check_equal (char *s1, char *s2)
-{
-	if (s1 == NULL) {
-		if (s2 == NULL)
-			return TRUE;
-		else
-			return FALSE;
-	}
-	
-	if (s2 == NULL)
-		return FALSE;
-
-	return strcmp (s1, s2) == 0;
-}
-
-static gint
-imap_url_equal (gconstpointer a, gconstpointer b)
-{
-	const CamelURL *u1 = a, *u2 = b;
-	
-	return check_equal (u1->user, u2->user)
-		&& check_equal (u1->authmech, u2->authmech)
-		&& check_equal (u1->host, u2->host)
-		&& u1->port == u2->port;
-}
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
deleted file mode 100644
index 0a2be4f326..0000000000
--- a/camel/providers/imap/camel-imap-store.c
+++ /dev/null
@@ -1,1262 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-store.c : class for an imap store */
-
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-
-#include "camel-imap-store.h"
-#include "camel-imap-folder.h"
-#include "camel-imap-utils.h"
-#include "camel-folder.h"
-#include "camel-exception.h"
-#include "camel-session.h"
-#include "camel-stream.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-url.h"
-#include "string-utils.h"
-
-#define d(x) x
-
-/* Specified in RFC 2060 */
-#define IMAP_PORT 143
-
-static CamelServiceClass *service_class = NULL;
-
-static void finalize (CamelObject *object);
-static gboolean imap_create (CamelFolder *folder, CamelException *ex);
-static gboolean imap_connect (CamelService *service, CamelException *ex);
-static gboolean imap_disconnect (CamelService *service, CamelException *ex);
-static GList *query_auth_types (CamelService *service, CamelException *ex);
-static void free_auth_types (CamelService *service, GList *authtypes);
-static char *get_name (CamelService *service, gboolean brief);
-static CamelFolder *get_folder (CamelStore *store, const char *folder_name, gboolean create,
-				CamelException *ex);
-static char *get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex);
-static gboolean imap_noop (gpointer data);
-/*static gboolean stream_is_alive (CamelStream *istream);*/
-static int camel_imap_status (char *cmdid, char *respbuf);
-
-static void
-camel_imap_store_class_init (CamelImapStoreClass *camel_imap_store_class)
-{
-	/* virtual method overload */
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_imap_store_class);
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_imap_store_class);
-	
-	service_class = CAMEL_SERVICE_CLASS(camel_type_get_global_classfuncs (camel_service_get_type ()));
-
-	/* virtual method overload */
-	camel_service_class->connect = imap_connect;
-	camel_service_class->disconnect = imap_disconnect;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->free_auth_types = free_auth_types;
-	camel_service_class->get_name = get_name;
-
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-}
-
-static void
-camel_imap_store_init (gpointer object, gpointer klass)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-	CamelStore *store = CAMEL_STORE (object);
-
-	service->url_flags = (CAMEL_SERVICE_URL_NEED_USER |
-			      CAMEL_SERVICE_URL_NEED_HOST |
-			      CAMEL_SERVICE_URL_ALLOW_PATH);
-
-	store->folders = g_hash_table_new (g_str_hash, g_str_equal);
-	CAMEL_IMAP_STORE (store)->dir_sep = g_strdup ("/"); /*default*/
-	CAMEL_IMAP_STORE (store)->current_folder = NULL;
-	CAMEL_IMAP_STORE (store)->timeout_id = 0;
-}
-
-CamelType
-camel_imap_store_get_type (void)
-{
-	static CamelType camel_imap_store_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_imap_store_type == CAMEL_INVALID_TYPE)	{
-		camel_imap_store_type = camel_type_register (CAMEL_STORE_TYPE, "CamelImapStore",
-							     sizeof (CamelImapStore),
-							     sizeof (CamelImapStoreClass),
-							     (CamelObjectClassInitFunc) camel_imap_store_class_init,
-							     NULL,
-							     (CamelObjectInitFunc) camel_imap_store_init,
-							     (CamelObjectFinalizeFunc) finalize);
-	}
-	
-	return camel_imap_store_type;
-}
-
-static void
-finalize (CamelObject *object)
-{
-	CamelException ex;
-	
-	camel_exception_init (&ex);
-	imap_disconnect (CAMEL_SERVICE (object), &ex);
-	camel_exception_clear (&ex);
-}
-
-static CamelServiceAuthType password_authtype = {
-	"Password",
-	
-	"This option will connect to the IMAP server using a "
-	"plaintext password.",
-	
-	"",
-	TRUE
-};
-
-#if 0
-static gboolean
-try_connect (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	struct sockaddr_in sin;
-	gint fd;
-	
-	h = camel_service_gethost (service, ex);
-	if (!h)
-		return FALSE;
-	
-	sin.sin_family = h->h_addrtype;
-	sin.sin_port = htons (service->url->port ? service->url->port : IMAP_PORT);
-	memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-	
-	fd = socket (h->h_addrtype, SOCK_STREAM, 0);
-	if (fd == -1 || connect (fd, (struct sockaddr *)&sin, sizeof (sin)) == -1) {	
-		/* We don't want to set a CamelException here */
-		
-		if (fd > -1)
-			close (fd);
-		
-		return FALSE;
-	}
-	
-	close (fd);
-	return TRUE;
-}
-#endif
-
-static GList *
-query_auth_types (CamelService *service, CamelException *ex)
-{
-	GList *ret = NULL;
-	gboolean passwd = TRUE;
-#if 0	
-	if (service->url) {
-		passwd = try_connect (service, ex);
-		if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-			return NULL;
-	}
-#endif	
-	if (passwd)
-		ret = g_list_append (ret, &password_authtype);
-	
-	if (!ret) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not connect to IMAP server on %s.",
-				      service->url->host ? service->url->host : 
-				      "(unknown host)");
-	}				      
-	
-	return ret;
-}
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
-	g_list_free (authtypes);
-}
-
-static char *
-get_name (CamelService *service, gboolean brief)
-{
-	if (brief)
-		return g_strdup_printf ("IMAP server %s", service->url->host);
-	else {
-		return g_strdup_printf ("IMAP service for %s on %s",
-					service->url->user,
-					service->url->host);
-	}
-}
-
-static gboolean
-imap_connect (CamelService *service, CamelException *ex)
-{
-	CamelImapStore *store = CAMEL_IMAP_STORE (service);
-	struct hostent *h;
-	struct sockaddr_in sin;
-	gint fd, status;
-	gchar *buf, *msg, *result, *errbuf = NULL;
-	gboolean authenticated = FALSE;
-
-	/* FIXME: do we really need this here? */
-	/*
-	 *if (store->timeout_id) {
-	 *	gtk_timeout_remove (store->timeout_id);
-	 *	store->timeout_id = 0;
-	 *}
-	 */
-
-	h = camel_service_gethost (service, ex);
-	if (!h)
-		return FALSE;
-
-	/* connect to the IMAP server */
-	sin.sin_family = h->h_addrtype;
-	if (service->url->port)
-		sin.sin_port = htons(service->url->port);
-	else
-		sin.sin_port = htons(IMAP_PORT);
-	
-	memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-	
-	fd = socket (h->h_addrtype, SOCK_STREAM, 0);
-	if (fd == -1 || connect (fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not connect to %s (port %d): %s",
-				      service->url->host ? service->url->host : "(unknown host)", 
-				      service->url->port ? service->url->port : IMAP_PORT,
-				      strerror(errno));
-		if (fd > -1)
-			close (fd);
-		
-		return FALSE;
-	}
-
-	/* parent class conect initialization */
-	service_class->connect (service, ex);
-	
-	store->ostream = camel_stream_fs_new_with_fd (fd);
-	store->istream = camel_stream_buffer_new (store->ostream, CAMEL_STREAM_BUFFER_READ);
-	store->command = 0;
-	g_free (store->dir_sep);
-	store->dir_sep = g_strdup ("/");  /* default dir sep */
-	
-	/* Read the greeting, if any. */
-	buf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	if (!buf) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not read greeting from IMAP "
-				      "server: %s",
-				      camel_exception_get_description (ex));
-		
-		imap_disconnect (service, ex);
-		return FALSE;
-	}
-	g_free (buf);
-
-	/* authenticate the user */
-	while (!authenticated) {
-		if (errbuf) {
-			/* We need to un-cache the password before prompting again */
-			camel_session_query_authenticator (camel_service_get_session (service),
-							   CAMEL_AUTHENTICATOR_TELL, NULL,
-							   TRUE, service, "password", ex);
-			g_free (service->url->passwd);
-			service->url->passwd = NULL;
-		}
-
-		if (!service->url->authmech && !service->url->passwd) {
-			gchar *prompt;
-			
-			prompt = g_strdup_printf ("%sPlease enter the IMAP password for %s@%s",
-						  errbuf ? errbuf : "", service->url->user, h->h_name);
-			service->url->passwd =
-				camel_session_query_authenticator (camel_service_get_session (service),
-								   CAMEL_AUTHENTICATOR_ASK, prompt,
-								   TRUE, service, "password", ex);
-			g_free (prompt);
-			g_free (errbuf);
-			errbuf = NULL;
-			
-			if (!service->url->passwd) {
-				imap_disconnect (service, ex);
-				return FALSE;
-			}
-		}
-
-		status = camel_imap_command (store, NULL, &msg, "LOGIN \"%s\" \"%s\"",
-					     service->url->user,
-					     service->url->passwd);
-
-		if (status != CAMEL_IMAP_OK) {
-			errbuf = g_strdup_printf ("Unable to authenticate to IMAP server.\n"
-						  "Error sending password: %s\n\n",
-						  msg ? msg : "(Unknown)");
-		} else {
-			g_message ("IMAP Service sucessfully authenticated user %s", service->url->user);
-			authenticated = TRUE;
-		}
-	}
-	
-	/* Now lets find out the IMAP capabilities */
-	status = camel_imap_command_extended (store, NULL, &result, "CAPABILITY");
-	
-	if (status != CAMEL_IMAP_OK) {
-		/* Non-fatal error, but we should still warn the user... */
-		CamelService *service = CAMEL_SERVICE (store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get capabilities on IMAP server %s: %s.",
-				      service->url->host, 
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-	}
-
-	/* parse for capabilities here. */
-	if (e_strstrcase (result, "IMAP4REV1"))
-		store->server_level = IMAP_LEVEL_IMAP4REV1;
-	else if (e_strstrcase (result, "IMAP4"))
-		store->server_level = IMAP_LEVEL_IMAP4;
-	else
-		store->server_level = IMAP_LEVEL_UNKNOWN;
-	
-	if ((store->server_level >= IMAP_LEVEL_IMAP4REV1) || (e_strstrcase (result, "STATUS")))
-		store->has_status_capability = TRUE;
-	else
-		store->has_status_capability = FALSE;
-	
-	g_free (result);
-	
-	/* We now need to find out which directory separator this daemon uses */
-	status = camel_imap_command_extended (store, NULL, &result, "LIST \"\" \"\"");
-	
-	if (status != CAMEL_IMAP_OK) {
-		/* Again, this is non-fatal */
-		CamelService *service = CAMEL_SERVICE (store);
-		
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get directory separator on IMAP server %s: %s.",
-				      service->url->host, 
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-	} else {
-		char *flags, *sep, *folder;
-		
-		if (imap_parse_list_response (result, "", &flags, &sep, &folder)) {
-			if (*sep) {
-				g_free (store->dir_sep);
-				store->dir_sep = g_strdup (sep);
-			}
-		}
-		
-		g_free (flags);
-		g_free (sep);
-		g_free (folder);
-	}
-	
-	/* default directory separator */
-	if (!store->dir_sep)
-		store->dir_sep = g_strdup ("/");
-	
-	g_free (result);
-
-	/* Lets add a timeout so that we can hopefully prevent getting disconnected */
-	/* FIXME fast timeout */
-	store->timeout_id = camel_session_register_timeout (camel_service_get_session (service), 
-							    10 * 60 * 1000, imap_noop, service);
-	/*store->timeout_id = gtk_timeout_add (600000, imap_noop, store);*/
-	
-	return TRUE;
-}
-
-static gboolean
-imap_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelImapStore *store = CAMEL_IMAP_STORE (service);
-	char *result;
-	int status;
-	
-	if (!service->connected)
-		return TRUE;
-	
-	/* send the logout command */
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (service), NULL, &result, "LOGOUT");
-	if (status != CAMEL_IMAP_OK) {
-		/* Oh fuck it, we're disconnecting anyway... */
-	}
-	g_free (result);
-	
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	if (store->istream) {
-		camel_object_unref (CAMEL_OBJECT (store->istream));
-		store->istream = NULL;
-	}
-
-	if (store->ostream) {
-		camel_object_unref (CAMEL_OBJECT (store->ostream));
-		store->ostream = NULL;
-	}
-
-	g_free (store->dir_sep);
-	store->dir_sep = NULL;
-
-	store->current_folder = NULL;
-
-	if (store->timeout_id) {
-		camel_session_remove_timeout (camel_service_get_session (CAMEL_SERVICE (store)),
-					      store->timeout_id);
-		store->timeout_id = 0;
-	}
-
-	return TRUE;
-}
-
-const gchar *
-camel_imap_store_get_toplevel_dir (CamelImapStore *store)
-{
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	
-	g_assert (url != NULL);
-	return url->path;
-}
-
-static gboolean
-imap_folder_exists (CamelFolder *folder)
-{
-	CamelStore *store = CAMEL_STORE (folder->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	gchar *result, *folder_path, *dir_sep;
-	gint status;
-	
-	dir_sep = CAMEL_IMAP_STORE (folder->parent_store)->dir_sep;
-	
-	g_return_val_if_fail (dir_sep, FALSE);
-
-	if (url && url->path && *(url->path + 1) && strcmp (folder->full_name, "INBOX"))
-		folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-	else
-		folder_path = g_strdup (folder->full_name);
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), NULL,
-					      &result, "EXAMINE %s", folder_path);
-	
-	if (status != CAMEL_IMAP_OK) {
-		g_free (result);
-		g_free (folder_path);
-		return FALSE;
-	}
-	g_free (folder_path);
-	g_free (result);
-	
-	return TRUE;
-}
-
-static gboolean
-imap_create (CamelFolder *folder, CamelException *ex)
-{
-	CamelStore *store = CAMEL_STORE (folder->parent_store);
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	gchar *result, *folder_path, *dir_sep;
-	gint status;
-	
-	g_return_val_if_fail (folder != NULL, FALSE);
-	
-	if (!(folder->full_name || folder->name)) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				     "invalid folder path. Use set_name ?");
-		return FALSE;
-	}
-	
-	if (!strcmp (folder->full_name, "INBOX"))
-		return TRUE;
-	
-	if (imap_folder_exists (folder))
-		return TRUE;
-	
-        /* create the directory for the subfolder */
-	dir_sep = CAMEL_IMAP_STORE (folder->parent_store)->dir_sep;
-	
-	g_return_val_if_fail (dir_sep, FALSE);
-
-	if (url && url->path && *(url->path + 1) && strcmp (folder->full_name, "INBOX"))
-		folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-	else
-		folder_path = g_strdup (folder->full_name);
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), NULL,
-					      &result, "CREATE %s", folder_path);
-	
-	if (status != CAMEL_IMAP_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not CREATE %s on IMAP server %s: %s.",
-				      folder_path, service->url->host,
-				      status != CAMEL_IMAP_FAIL && result ? result :
-				      "Unknown error");
-		g_free (result);
-		g_free (folder_path);
-		return FALSE;
-	}
-	g_free (folder_path);
-	g_free (result);
-	
-	return TRUE;
-}
-
-static gboolean
-folder_is_selectable (CamelStore *store, const char *folder_path)
-{
-	char *result, *flags, *sep, *folder;
-	int status;
-	
-	if (!strcmp (folder_path, "INBOX"))
-		return TRUE;
-	
-	status = camel_imap_command_extended (CAMEL_IMAP_STORE (store), NULL,
-					      &result, "LIST \"\" %s", folder_path);
-	if (status != CAMEL_IMAP_OK) {
-		g_free (result);
-		return FALSE;
-	}
-	
-	if (imap_parse_list_response (result, "", &flags, &sep, &folder)) {
-		gboolean retval;
-		
-		retval = !e_strstrcase (flags, "NoSelect");
-		g_free (flags);
-		g_free (sep);
-		g_free (folder);
-		
-		return retval;
-	}
-	g_free (flags);
-	g_free (sep);
-	g_free (folder);
-	
-	return FALSE;
-}
-
-static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelException *ex)
-{
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	CamelFolder *new_folder;
-	char *folder_path, *dir_sep;
-	
-	g_return_val_if_fail (store != NULL, NULL);
-	g_return_val_if_fail (folder_name != NULL, NULL);
-	
-	dir_sep = CAMEL_IMAP_STORE (store)->dir_sep;
-	
-	/* if we're trying to get the top-level dir, we really want the namespace */
-	if (!dir_sep || !strcmp (folder_name, dir_sep))
-		folder_path = g_strdup (url->path + 1);
-	else
-		folder_path = g_strdup (folder_name);
-	
-	new_folder = camel_imap_folder_new (store, folder_path, ex);
-	
-	/* this is the top-level dir, we already know it exists - it has to! */
-	if (!strcmp (folder_name, dir_sep))
-		return new_folder;
-	
-	if (create && !imap_create (new_folder, ex)) {
-		if (!folder_is_selectable (store, folder_path)) {
-			camel_exception_clear (ex);
-			new_folder->can_hold_messages = FALSE;
-			return new_folder;
-		} else {
-			g_free (folder_path);
-			camel_object_unref (CAMEL_OBJECT (new_folder));		
-			return NULL;
-		}
-	}
-	
-	return new_folder;
-}
-
-static gchar *
-get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	return g_strdup (folder_name);
-}
-
-static gboolean
-imap_noop (gpointer data)
-{
-	CamelImapStore *store = CAMEL_IMAP_STORE (data);
-	char *result;
-	int status;
-
-	status = camel_imap_command_extended (store, store->current_folder, &result, "NOOP");
-
-	g_free (result);
-
-	return TRUE;
-}
-
-#if 0
-static gboolean
-stream_is_alive (CamelStream *istream)
-{
-	CamelStreamFs *fs_stream;
-	char buf;
-	
-	g_return_val_if_fail (istream != NULL, FALSE);
-	
-	fs_stream = CAMEL_STREAM_FS (CAMEL_STREAM_BUFFER (istream)->stream);
-	g_return_val_if_fail (fs_stream->fd != -1, FALSE);
-	
-	if (read (fs_stream->fd, (void *) &buf, 0) == 0)
-		return TRUE;
-	
-	return FALSE;
-}
-#endif
-
-static int
-camel_imap_status (char *cmdid, char *respbuf)
-{
-	char *retcode;
-	
-	if (respbuf) {
-		if (!strncmp (respbuf, cmdid, strlen (cmdid))) {
-			retcode = imap_next_word (respbuf);
-			
-			if (!strncmp (retcode, "OK", 2))
-				return CAMEL_IMAP_OK;
-			else if (!strncmp (retcode, "NO", 2))
-				return CAMEL_IMAP_NO;
-			else if (!strncmp (retcode, "BAD", 3))
-				return CAMEL_IMAP_BAD;
-		}
-	}
-	
-	return CAMEL_IMAP_FAIL;
-}
-
-/**
- * camel_imap_command: Send a command to a IMAP server.
- * @store: the IMAP store
- * @folder: The folder to perform the operation in
- * @ret: a pointer to return the full server response in
- * @fmt: a printf-style format string, followed by arguments
- * 
- * This camel method sends the command specified by @fmt and the following
- * arguments to the connected IMAP store specified by @store. It then
- * reads the server's response and parses out the status code. If
- * the caller passed a non-NULL pointer for @ret, camel_imap_command
- * will set it to point to a buffer containing the rest of the
- * response from the IMAP server. (If @ret was passed but there was
- * no extended response, @ret will be set to NULL.) The caller function is
- * responsible for freeing @ret.
- * 
- * Return value: one of CAMEL_IMAP_OK (command executed successfully),
- * CAMEL_IMAP_NO (operational error message), CAMEL_IMAP_BAD (error
- * message from the server), or CAMEL_IMAP_FAIL (a protocol-level error
- * occurred, and Camel is uncertain of the result of the command.)
- **/
-gint
-camel_imap_command (CamelImapStore *store, CamelFolder *folder, char **ret, char *fmt, ...)
-{
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	gchar *cmdbuf, *respbuf;
-	gchar *cmdid;
-	va_list ap;
-	gint status = CAMEL_IMAP_OK;
-	
-	if (folder && store->current_folder != folder && strncmp (fmt, "CREATE", 5)) {
-		/* We need to select the correct mailbox first */
-		char *r, *folder_path, *dir_sep;
-		int s;
-		
-		dir_sep = store->dir_sep;
-		if (url && url->path && *(url->path + 1) && strcmp (folder->full_name, "INBOX"))
-			folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-		else
-			folder_path = g_strdup (folder->full_name);
-		
-		s = camel_imap_command_extended (store, NULL, &r, "SELECT %s", folder_path);
-		g_free (folder_path);
-		if (!r || s != CAMEL_IMAP_OK) {
-			*ret = r;
-			store->current_folder = NULL;
-			
-			return s;
-		}
-		
-		g_free (r);
-		
-		store->current_folder = folder;
-	}
-	
-	/* create the command */
-	cmdid = g_strdup_printf ("A%.5d", store->command++);
-	va_start (ap, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, ap);
-	va_end (ap);
-	
-	d(fprintf (stderr, "sending : %s %s\r\n", cmdid, cmdbuf));
-	
-	if (camel_stream_printf (store->ostream, "%s %s\r\n", cmdid, cmdbuf) == -1) {
-		g_free (cmdbuf);
-		g_free (cmdid);
-		if (*ret)
-			*ret = g_strdup (strerror (errno));
-		return CAMEL_IMAP_FAIL;
-	}
-	g_free (cmdbuf);
-	
-	/* Read the response */
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	if (respbuf == NULL) {
-		if (*ret)
-			*ret = g_strdup (strerror (errno));
-		return CAMEL_IMAP_FAIL;
-	}
-	
-	d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-	
-	status = camel_imap_status (cmdid, respbuf);
-	g_free (cmdid);
-
-	if (ret) {
-		if (status != CAMEL_IMAP_FAIL && respbuf) {
-			char *word;
-			
-			word = imap_next_word (respbuf); /* word should now point to NO or BAD */
-			
-			*ret = g_strdup (imap_next_word (word));
-		} else {
-			*ret = NULL;
-		}
-	}
-
-	g_free (respbuf);
-	
-	return status;
-}
-
-/**
- * camel_imap_command_extended: Send a command to a IMAP server and get
- * a multi-line response.
- * @store: the IMAP store
- * @folder: The folder to perform the operation in
- * @ret: a pointer to return the full server response in
- * @fmt: a printf-style format string, followed by arguments
- *
- * This camel method sends the IMAP command specified by @fmt and the
- * following arguments to the IMAP store specified by @store. If the
- * store is in a disconnected state, camel_imap_command_extended will first
- * re-connect the store before sending the specified IMAP command. It then
- * reads the server's response and parses out the status code. If the caller
- * passed a non-NULL pointer for @ret, camel_imap_command_extended will set
- * it to point to a buffer containing the rest of the response from the IMAP
- * server. (If @ret was passed but there was no extended response, @ret will
- * be set to NULL.) The caller function is responsible for freeing @ret.
- * 
- * This camel method gets the additional data returned by "multi-line" IMAP
- * commands, such as SELECT, LIST, FETCH, and various other commands.
- * The returned data is un-byte-stuffed, and has lines termined by
- * newlines rather than CR/LF pairs.
- * 
- * Return value: one of CAMEL_IMAP_OK (command executed successfully),
- * CAMEL_IMAP_NO (operational error message), CAMEL_IMAP_BAD (error
- * message from the server), or CAMEL_IMAP_FAIL (a protocol-level error
- * occurred, and Camel is uncertain of the result of the command.)
- **/
-gint
-camel_imap_command_extended (CamelImapStore *store, CamelFolder *folder, char **ret, char *fmt, ...)
-{
-	CamelService *service = CAMEL_SERVICE (store);
-	CamelURL *url = service->url;
-	gint len = 0, recent = 0, status = CAMEL_IMAP_OK;
-	gchar *cmdid, *cmdbuf, *respbuf;
-	GPtrArray *data;
-	va_list app;
-	int i;
-	
-#if 0   
-	/* First make sure we're connected... */
-	if (!service->connected || !stream_is_alive (store->istream)) {
-		CamelException *ex;
-		
-		ex = camel_exception_new ();
-		
-		if (!imap_disconnect (service, ex) || !imap_connect (service, ex)) {
-			camel_exception_free (ex);
-			
-			*ret = NULL;
-			
-			return CAMEL_IMAP_FAIL;
-		}
-		service->connected = TRUE;
-		
-		camel_exception_free (ex);
-	}
-#endif  
-	
-	if (folder && store->current_folder != folder && strncmp (fmt, "CREATE", 6)) {
-		/* We need to select the correct mailbox first */
-		char *r, *folder_path, *dir_sep;
-		int s;
-		
-		dir_sep = store->dir_sep;
-		
-		if (url && url->path && *(url->path + 1) && strcmp (folder->full_name, "INBOX"))
-			folder_path = g_strdup_printf ("%s%s%s", url->path + 1, dir_sep, folder->full_name);
-		else
-			folder_path = g_strdup (folder->full_name);
-		
-		s = camel_imap_command_extended (store, NULL, &r, "SELECT %s", folder_path);
-		g_free (folder_path);
-		if (!r || s != CAMEL_IMAP_OK) {
-			*ret = r;
-			store->current_folder = NULL;
-			
-			return s;
-		}
-		
-		g_free (r);
-		
-		store->current_folder = folder;
-	}
-	
-	/* Create the command */
-	cmdid = g_strdup_printf ("A%.5d", store->command++);
-	va_start (app, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, app);
-	va_end (app);
-	
-	d(fprintf (stderr, "sending : %s %s\r\n", cmdid, cmdbuf));
-	
-	if (camel_stream_printf (store->ostream, "%s %s\r\n", cmdid, cmdbuf) == -1) {
-		g_free (cmdbuf);
-		g_free (cmdid);
-		
-		*ret = g_strdup (strerror (errno));
-		
-		return CAMEL_IMAP_FAIL;
-	}
-	g_free (cmdbuf);
-	
-	data = g_ptr_array_new ();
-	
-	while (1) {
-		CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-		char *ptr;
-		
-		respbuf = camel_stream_buffer_read_line (stream);
-		if (!respbuf || !strncmp (respbuf, cmdid, strlen (cmdid))) {
-			/* IMAP's last response starts with our command id */
-			d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-#if 0			
-			if (!respbuf && strcmp (fmt, "LOGOUT")) {
-				/* we need to force a disconnect here? */
-				CamelException *ex;
-				
-				ex = camel_exception_new ();
-				imap_disconnect (service, ex);
-				camel_exception_free (ex);
-		        }
-#endif  
-			break;
-		}
-		
-		d(fprintf (stderr, "received: %s\n", respbuf));
-		
-		g_ptr_array_add (data, respbuf);
-		len += strlen (respbuf) + 1;
-		
-		/* If recent was somehow set and this response doesn't begin with a '*'
-		   then recent must have been misdetected */
-		if (recent && *respbuf != '*')
-			recent = 0;
-		
-		if (*respbuf == '*' && (ptr = strstr (respbuf, "RECENT"))) {
-			char *rcnt;
-			
-			d(fprintf (stderr, "*** We may have found a 'RECENT' flag: %s\n", respbuf));
-			/* Make sure it's in the form: "* %d RECENT" */
-			rcnt = imap_next_word (respbuf);
-			if (*rcnt >= '0' && *rcnt <= '9' && !strncmp ("RECENT", imap_next_word (rcnt), 6))
-				recent = atoi (rcnt);
-		}
-	}
-	
-	if (respbuf) {
-		g_ptr_array_add (data, respbuf);
-		len += strlen (respbuf) + 1;
-		
-		status = camel_imap_status (cmdid, respbuf);
-	} else {
-		status = CAMEL_IMAP_FAIL;
-	}
-	g_free (cmdid);
-	
-	if (status == CAMEL_IMAP_OK) {
-		char *p;
-		
-		*ret = g_malloc0 (len + 1);
-		
-		for (i = 0, p = *ret; i < data->len; i++) {
-			char *ptr, *datap;
-			
-			datap = (char *) data->pdata[i];
-			ptr = (*datap == '.') ? datap + 1 : datap;
-			len = strlen (ptr);
-			memcpy (p, ptr, len);
-			p += len;
-			*p++ = '\n';
-		}
-		*p = '\0';
-	} else {
-		if (status != CAMEL_IMAP_FAIL && respbuf) {
-			char *word;
-
-			word = imap_next_word (respbuf); /* word should now point to NO or BAD */
-			
-			*ret = g_strdup (imap_next_word (word));
-		} else {
-			*ret = NULL;
-		}
-	}
-	
-	for (i = 0; i < data->len; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-	
-	if (folder && recent > 0) {
-		CamelException *ex;
-		
-		ex = camel_exception_new ();
-		camel_imap_folder_changed (folder, recent, ex);
-		camel_exception_free (ex);
-	}
-	
-	return status;
-}
-
-/**
- * camel_imap_command_preliminary: Send a preliminary command to the
- * IMAP server.
- * @store: the IMAP store
- * @ret: a pointer to return the full server response in
- * @cmdid: a pointer to return the command identifier (for use in
- * camel_imap_command_continuation)
- * @fmt: a printf-style format string, followed by arguments
- * 
- * This camel method sends a preliminary IMAP command specified by
- * @fmt and the following arguments to the IMAP store specified by
- * @store. This function is meant for use with multi-transactional
- * IMAP communications like Kerberos authentication and APPEND.
- * 
- * If the caller passed a non-NULL pointer for @ret,
- * camel_imap_command_preliminary will set it to point to a buffer
- * containing the rest of the response from the IMAP server. The
- * caller function is responsible for freeing @ret.
- * 
- * Return value: one of CAMEL_IMAP_PLUS or CAMEL_IMAP_FAIL
- * 
- * Note: on success (CAMEL_IMAP_PLUS), you will need to follow up with
- * a camel_imap_command_continuation call.
- **/
-gint
-camel_imap_command_preliminary (CamelImapStore *store, char **ret, char **cmdid, char *fmt, ...)
-{
-	gchar *cmdbuf, *respbuf;
-	gint status = CAMEL_IMAP_OK;
-	va_list app;
-	
-	/* Create the command */
-	*cmdid = g_strdup_printf ("A%.5d", store->command++);
-	va_start (app, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, app);
-	va_end (app);
-	
-	d(fprintf (stderr, "sending : %s %s\r\n", *cmdid, cmdbuf));
-	
-	if (camel_stream_printf (store->ostream, "%s %s\r\n", *cmdid, cmdbuf) == -1) {
-		g_free (cmdbuf);
-		
-		if (ret)
-			*ret = g_strdup (strerror (errno));
-		
-		return CAMEL_IMAP_FAIL;
-	}
-	g_free (cmdbuf);
-	
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	
-	if (respbuf) {
-		switch (*respbuf) {
-		case '+':
-			/* continuation request */
-			status = CAMEL_IMAP_PLUS;
-			break;
-		default:
-			status = camel_imap_status (*cmdid, respbuf);
-		}
-		
-		if (ret)
-			*ret = g_strdup (imap_next_word (respbuf));
-	} else {
-		status = CAMEL_IMAP_FAIL;
-		if (ret)
-			*ret = NULL;
-	}
-	
-	return status;
-}
-
-/**
- * camel_imap_command_continuation: Handle another transaction with the IMAP
- * server and possibly get a multi-line response.
- * @store: the IMAP store
- * @cmdid: The command identifier returned from camel_imap_command_preliminary
- * @ret: a pointer to return the full server response in
- * @cmdbuf: buffer containing the response/request data
- *
- * This method is for sending continuing responses to the IMAP server. Meant
- * to be used as a followup to camel_imap_command_preliminary.
- * camel_imap_command_continuation will set @ret to point to a buffer
- * containing the rest of the response from the IMAP server. The
- * caller function is responsible for freeing @ret.
- * 
- * Return value: one of CAMEL_IMAP_PLUS (command requires additional data),
- * CAMEL_IMAP_OK (command executed successfully),
- * CAMEL_IMAP_NO (operational error message),
- * CAMEL_IMAP_BAD (error message from the server), or
- * CAMEL_IMAP_FAIL (a protocol-level error occurred, and Camel is uncertain
- * of the result of the command.)
- **/
-gint
-camel_imap_command_continuation (CamelImapStore *store, char **ret, char *cmdid, char *cmdbuf)
-{
-	gint len = 0, status = CAMEL_IMAP_OK;
-	gchar *respbuf;
-	GPtrArray *data;
-	int i;
-	
-	d(fprintf (stderr, "sending : %s\r\n", cmdbuf));
-	
-	if (camel_stream_printf (store->ostream, "%s\r\n", cmdbuf) == -1) {
-		*ret = g_strdup (strerror (errno));
-		
-		return CAMEL_IMAP_FAIL;
-	}
-	
-	data = g_ptr_array_new ();
-	
-	while (1) {
-		CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-		
-		respbuf = camel_stream_buffer_read_line (stream);
-		if (!respbuf || *respbuf == '+' || !strncmp (respbuf, cmdid, strlen (cmdid))) {
-			/* IMAP's last response starts with our command id or a continuation request */
-			d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-			
-			break;
-		}
-		
-		d(fprintf (stderr, "received: %s\n", respbuf));
-		
-		g_ptr_array_add (data, respbuf);
-		len += strlen (respbuf) + 1;
-	}
-	
-	if (respbuf) {
-		g_ptr_array_add (data, respbuf);
-		len += strlen (respbuf) + 1;
-		
-		switch (*respbuf) {
-		case '+':
-			status = CAMEL_IMAP_PLUS;
-			break;
-		default:
-			status = camel_imap_status (cmdid, respbuf);
-		}
-	} else {
-		status = CAMEL_IMAP_FAIL;
-	}
-	
-	if (status == CAMEL_IMAP_OK || status == CAMEL_IMAP_PLUS) {
-		char *p;
-		
-		*ret = g_malloc0 (len + 1);
-		
-		for (i = 0, p = *ret; i < data->len; i++) {
-			char *ptr, *datap;
-			
-			datap = (char *) data->pdata[i];
-			ptr = (*datap == '.') ? datap + 1 : datap;
-			len = strlen (ptr);
-			memcpy (p, ptr, len);
-			p += len;
-			*p++ = '\n';
-		}
-		*p = '\0';
-	} else {
-		if (status != CAMEL_IMAP_FAIL && respbuf) {
-			char *word;
-			
-			word = imap_next_word (respbuf);
-			
-			if (*respbuf == '-')
-				*ret = g_strdup (word);
-			else
-				*ret = g_strdup (imap_next_word (word));
-		} else {
-			*ret = NULL;
-		}
-	}
-	
-	for (i = 0; i < data->len; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-	
-	return status;
-}
-
-/**
- * camel_imap_command_continuation_with_stream: Handle another transaction with the IMAP
- * server and possibly get a multi-line response.
- * @store: the IMAP store
- * @cmdid: The command identifier returned from camel_imap_command_preliminary
- * @ret: a pointer to return the full server response in
- * @cstream: a CamelStream containing a continuation response.
- * 
- * This method is for sending continuing responses to the IMAP server. Meant
- * to be used as a followup to camel_imap_command_preliminary.
- * camel_imap_command_continuation will set @ret to point to a buffer
- * containing the rest of the response from the IMAP server. The
- * caller function is responsible for freeing @ret.
- * 
- * Return value: one of CAMEL_IMAP_PLUS (command requires additional data),
- * CAMEL_IMAP_OK (command executed successfully),
- * CAMEL_IMAP_NO (operational error message),
- * CAMEL_IMAP_BAD (error message from the server), or
- * CAMEL_IMAP_FAIL (a protocol-level error occurred, and Camel is uncertain
- * of the result of the command.)
- **/
-gint
-camel_imap_command_continuation_with_stream (CamelImapStore *store, char **ret, char *cmdid, CamelStream *cstream)
-{
-	gint len = 0, status = CAMEL_IMAP_OK;
-	gchar *respbuf;
-	GPtrArray *data;
-	int i;
-	
-	d(fprintf (stderr, "sending continuation stream\r\n"));
-	
-	if (camel_stream_write_to_stream (cstream, store->ostream) == -1) {
-		*ret = g_strdup (strerror (errno));
-		
-		return CAMEL_IMAP_FAIL;
-	}
-	
-	data = g_ptr_array_new ();
-	
-	while (1) {
-		CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-		
-		respbuf = camel_stream_buffer_read_line (stream);
-		if (!respbuf || *respbuf == '+' || !strncmp (respbuf, cmdid, strlen (cmdid))) {
-			/* IMAP's last response starts with our command id or a continuation request */
-			d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-			
-			break;
-		}
-		
-		d(fprintf (stderr, "received: %s\n", respbuf));
-		
-		g_ptr_array_add (data, respbuf);
-		len += strlen (respbuf) + 1;
-	}
-	
-	if (respbuf) {
-		g_ptr_array_add (data, respbuf);
-		len += strlen (respbuf) + 1;
-		
-		switch (*respbuf) {
-		case '+':
-			status = CAMEL_IMAP_PLUS;
-			break;
-		default:
-			status = camel_imap_status (cmdid, respbuf);
-		}
-	} else {
-		status = CAMEL_IMAP_FAIL;
-	}
-	
-	if (status == CAMEL_IMAP_OK || status == CAMEL_IMAP_PLUS) {
-		char *p;
-		
-		*ret = g_malloc0 (len + 1);
-		
-		for (i = 0, p = *ret; i < data->len; i++) {
-			char *ptr, *datap;
-			
-			datap = (char *) data->pdata[i];
-			ptr = (*datap == '.') ? datap + 1 : datap;
-			len = strlen (ptr);
-			memcpy (p, ptr, len);
-			p += len;
-			*p++ = '\n';
-		}
-		*p = '\0';
-	} else {
-		if (status != CAMEL_IMAP_FAIL && respbuf) {
-			char *word;
-			
-			word = imap_next_word (respbuf);
-			
-			if (*respbuf == '-')
-				*ret = g_strdup (word);
-			else
-				*ret = g_strdup (imap_next_word (word));
-		} else {
-			*ret = NULL;
-		}
-	}
-	
-	for (i = 0; i < data->len; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-	
-	return status;
-}
diff --git a/camel/providers/imap/camel-imap-store.h b/camel/providers/imap/camel-imap-store.h
deleted file mode 100644
index fcf0bcaf39..0000000000
--- a/camel/providers/imap/camel-imap-store.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-imap-store.h : class for an imap store */
-
-/* 
- * Authors: Jeffrey Stedfast 
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_IMAP_STORE_H
-#define CAMEL_IMAP_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-store.h"
-
-#define CAMEL_IMAP_STORE_TYPE     (camel_imap_store_get_type ())
-#define CAMEL_IMAP_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_STORE_TYPE, CamelImapStore))
-#define CAMEL_IMAP_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_STORE_TYPE, CamelImapStoreClass))
-#define IS_CAMEL_IMAP_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_STORE_TYPE))
-
-typedef enum {
-	IMAP_LEVEL_UNKNOWN,
-	IMAP_LEVEL_IMAP4,
-	IMAP_LEVEL_IMAP4REV1
-} CamelImapServerLevel;
-
-
-typedef struct {
-	CamelStore parent_object;	
-	
-	CamelFolder *current_folder;
-	CamelStream *istream, *ostream;
-	
-	guint32 command;
-	
-	CamelImapServerLevel server_level;
-	gboolean has_status_capability;
-	
-	gchar *dir_sep;
-	
-	guint timeout_id;
-} CamelImapStore;
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelImapStoreClass;
-
-
-/* public methods */
-void camel_imap_store_open (CamelImapStore *store, CamelException *ex);
-void camel_imap_store_close (CamelImapStore *store, gboolean expunge, CamelException *ex);
-
-/* support functions */
-
-enum {
-	CAMEL_IMAP_OK = 0,
-	CAMEL_IMAP_NO,
-	CAMEL_IMAP_BAD,
-	CAMEL_IMAP_PLUS,
-	CAMEL_IMAP_FAIL
-};
-
-gint camel_imap_command (CamelImapStore *store, CamelFolder *folder, char **ret, char *fmt, ...);
-gint camel_imap_command_extended (CamelImapStore *store, CamelFolder *folder, char **ret, char *fmt, ...);
-
-/* multi-transactional commands... */
-gint camel_imap_command_preliminary (CamelImapStore *store, char **ret, char **cmdid, char *fmt, ...);
-gint camel_imap_command_continuation (CamelImapStore *store, char **ret, char *cmdid, char *cmdbuf);
-gint camel_imap_command_continuation_with_stream (CamelImapStore *store, char **ret, char *cmdid, CamelStream *cstream);
-
-/* Standard Camel function */
-CamelType camel_imap_store_get_type (void);
-
-const gchar *camel_imap_store_get_toplevel_dir (CamelImapStore *store);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_IMAP_STORE_H */
diff --git a/camel/providers/imap/camel-imap-stream.c b/camel/providers/imap/camel-imap-stream.c
deleted file mode 100644
index 7b885437a2..0000000000
--- a/camel/providers/imap/camel-imap-stream.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#include 
-#include "camel-imap-stream.h"
-#include 
-#include 
-#include 
-
-static CamelStreamClass *parent_class = NULL;
-
-/* Returns the class for a CamelImapStream */
-#define CIS_CLASS(so) CAMEL_IMAP_STREAM_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static ssize_t stream_read (CamelStream *stream, char *buffer, size_t n);
-static int stream_reset (CamelStream *stream);
-static gboolean stream_eos (CamelStream *stream);
-
-static void finalize (CamelObject *object);
-
-static void
-camel_imap_stream_class_init (CamelImapStreamClass *camel_imap_stream_class)
-{
-	CamelStreamClass *camel_stream_class =
-		CAMEL_STREAM_CLASS (camel_imap_stream_class);
-
-	parent_class = CAMEL_STREAM_CLASS(camel_type_get_global_classfuncs (camel_stream_get_type ()));
-
-	/* virtual method overload */
-	camel_stream_class->read  = stream_read;
-	camel_stream_class->reset = stream_reset;
-	camel_stream_class->eos   = stream_eos;
-}
-
-static void
-camel_imap_stream_init (gpointer object, gpointer klass)
-{
-	CamelImapStream *imap_stream = CAMEL_IMAP_STREAM (object);
-
-	imap_stream->cache = NULL;
-	imap_stream->cache_ptr = NULL;
-}
-
-CamelType
-camel_imap_stream_get_type (void)
-{
-	static CamelType camel_imap_stream_type = CAMEL_INVALID_TYPE;
-
-	if (camel_imap_stream_type == CAMEL_INVALID_TYPE) {
-		camel_imap_stream_type = camel_type_register (camel_stream_get_type (), "CamelImapStream",
-							      sizeof (CamelImapStream),
-							      sizeof (CamelImapStreamClass),
-							      (CamelObjectClassInitFunc) camel_imap_stream_class_init,
-							      NULL,
-							      (CamelObjectInitFunc) camel_imap_stream_init,
-							      (CamelObjectFinalizeFunc) finalize);
-	}
-
-	return camel_imap_stream_type;
-}
-
-CamelStream *
-camel_imap_stream_new (CamelImapFolder *folder, char *command)
-{
-	CamelImapStream *imap_stream;
-
-	imap_stream = CAMEL_IMAP_STREAM(camel_object_new (camel_imap_stream_get_type ()));
-
-	imap_stream->folder = folder;
-	camel_object_ref (CAMEL_OBJECT (imap_stream->folder));
-	
-	imap_stream->command = g_strdup (command);
-	
-	return CAMEL_STREAM (imap_stream);
-}
-
-static void
-finalize (CamelObject *object)
-{
-	CamelImapStream *imap_stream = CAMEL_IMAP_STREAM (object);
-
-	g_free (imap_stream->cache);
-	g_free (imap_stream->command);
-
-	if (imap_stream->folder)
-		camel_object_unref (CAMEL_OBJECT (imap_stream->folder));
-}
-
-static ssize_t
-stream_read (CamelStream *stream, char *buffer, size_t n)
-{
-	ssize_t nread;
-	
-	/* do we want to do any IMAP specific parsing in here? If not, maybe rename to camel-stream-cache? */
-	CamelImapStream *imap_stream = CAMEL_IMAP_STREAM (stream);
-
-	if (!imap_stream->cache) {
-		/* We need to send the IMAP command since this is our first fetch */
-		CamelFolder *folder = CAMEL_FOLDER (imap_stream->folder);
-		gchar *result, *p, *q;
-		gint status, part_len;
-		
-		status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store),
-						      CAMEL_FOLDER (imap_stream->folder),
-						      &result, "%s\r\n",
-						      imap_stream->command);
-		
-		if (!result || status != CAMEL_IMAP_OK) {
-			/* we got an error, dump this stuff */
-			g_free (result);
-			imap_stream->cache = NULL;
-			camel_object_unref (CAMEL_OBJECT (imap_stream->folder));
-			
-			return -1;
-		}
-		
-		/* we don't need the folder anymore... */
-		camel_object_unref (CAMEL_OBJECT (imap_stream->folder));
-
-		/* parse out the message part */
-		for (p = result; *p && *p != '{' && *p != '\n'; p++);
-		if (*p != '{') {
-			g_free (result);
-			return -1;
-		}
-		
-		part_len = atoi (p + 1);
-		for ( ; *p && *p != '\n'; p++);
-		if (*p != '\n') {
-			g_free (result);
-			return -1;
-		}
-		
-		/* calculate the new part-length */
-		for (q = p; *q && (q - p) <= part_len; q++) {
-			if (*q == '\n')
-				part_len--;
-		}
-		/* FIXME: This is a hack for IMAP daemons that send us a UID at the end of each FETCH */
-		for (q--, part_len--; q > p && *(q-1) != '\n'; q--, part_len--);
-
-		imap_stream->cache = g_strndup (p, part_len + 1);
-		g_free (result);
-		
-		imap_stream->cache_ptr = imap_stream->cache;
-	}
-	
-	/* we've already read this stream, so return whats in the cache */
-	nread = MIN (n, strlen (imap_stream->cache_ptr));
-	
-	if (nread > 0) {
-		memcpy (buffer, imap_stream->cache_ptr, nread);
-		imap_stream->cache_ptr += nread;
-	} else {
-		nread = -1;
-	}
-
-	return nread;
-}
-
-static int
-stream_reset (CamelStream *stream)
-{
-	CamelImapStream *imap_stream = CAMEL_IMAP_STREAM (stream);
-	
-	imap_stream->cache_ptr = imap_stream->cache;
-
-	return 1;
-}
-
-static gboolean
-stream_eos (CamelStream *stream)
-{
-	CamelImapStream *imap_stream = CAMEL_IMAP_STREAM (stream);
-
-	return (imap_stream->cache_ptr && strlen (imap_stream->cache_ptr));
-}
diff --git a/camel/providers/imap/camel-imap-stream.h b/camel/providers/imap/camel-imap-stream.h
deleted file mode 100644
index 88881e7c1f..0000000000
--- a/camel/providers/imap/camel-imap-stream.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#ifndef CAMEL_IMAP_STREAM_H
-#define CAMEL_IMAP_STREAM_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-imap-folder.h"
-#include "camel-imap-store.h"
-#include 
-
-#define CAMEL_IMAP_STREAM_TYPE     (camel_imap_stream_get_type ())
-#define CAMEL_IMAP_STREAM(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_IMAP_STREAM_TYPE, CamelImapStream))
-#define CAMEL_IMAP_STREAM_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_IMAP_STREAM_TYPE, CamelImapStreamClass))
-#define CAMEL_IS_IMAP_STREAM(o)    (CAMEL_CHECK_TYPE((o), CAMEL_IMAP_STREAM_TYPE))
-
-typedef struct _CamelImapStream CamelImapStream;
-typedef struct _CamelImapStreamClass CamelImapStreamClass;
-
-struct _CamelImapStream {
-	CamelStream parent_object;
-
-	CamelImapFolder *folder;
-	char *command;
-	char *cache;
-	char *cache_ptr;
-};
-
-struct _CamelImapStreamClass {
-	CamelStreamClass parent_class;
-
-	/* Virtual methods */
-};
-
-/* Standard Camel function */
-CamelType camel_imap_stream_get_type (void);
-
-/* public methods */
-CamelStream *camel_imap_stream_new (CamelImapFolder *folder, char *command);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_IMAP_STREAM_H */
diff --git a/camel/providers/imap/camel-imap-utils.c b/camel/providers/imap/camel-imap-utils.c
deleted file mode 100644
index 3378758a69..0000000000
--- a/camel/providers/imap/camel-imap-utils.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include 
-#include 
-
-#include 
-#include "camel-imap-utils.h"
-#include "string-utils.h"
-#include 
-
-#define d(x) x
-
-static char *esexp_keys[] = { "and", "or", "body-contains", "header-contains", "match-all", NULL };
-static char *imap_keys[]  = { "", "OR", "BODY", "HEADER", NULL };
-
-struct sexp_node {
-	struct sexp_node *l_node, *r_node;
-	char *function;
-	char *data;
-};
-
-static char *get_quoted_token (char *string, int *len);
-static char *get_token (char *string, int *len);
-struct sexp_node *get_sexp_node (const char *exp);
-static void print_node (struct sexp_node *node, int depth);
-static const char *get_func (struct sexp_node *node);
-static char *get_data (struct sexp_node *node);
-static char *str_sexp_node (struct sexp_node *node);
-static void free_sexp_node (struct sexp_node *node);
-
-
-char *
-imap_next_word (char *buf)
-{
-	char *word;
-
-	/* skip over current word */
-	for (word = buf; *word && *word != ' '; word++);
-
-	/* skip over white space */
-	for ( ; *word && *word == ' '; word++);
-
-	return word;
-}
-
-gboolean
-imap_parse_list_response (char *buf, char *namespace, char **flags, char **sep, char **folder)
-{
-	char *word, *ep, *f;
-	
-	*flags = NULL;
-	*sep = NULL;
-	*folder = NULL;
-	
-	if (*buf != '*')
-		return FALSE;
-	
-	word = imap_next_word (buf);
-	if (g_strncasecmp (word, "LIST", 4) && g_strncasecmp (word, "LSUB", 4))
-		return FALSE;
-	
-	/* get the flags */
-	word = imap_next_word (word);
-	if (*word != '(')
-		return FALSE;
-	
-	word++;
-	for (ep = word; *ep && *ep != ')'; ep++);
-	if (*ep != ')')
-		return FALSE;
-	
-	*flags = g_strndup (word, (gint)(ep - word));
-	
-	/* get the directory separator */
-	word = imap_next_word (ep);
-	if (*word) {
-		if (!strncmp (word, "NIL", 3)) {
-			*sep = NULL;
-		} else {
-			for (ep = word; *ep && *ep != ' '; ep++);
-			*sep = g_strndup (word, (gint)(ep - word));
-			string_unquote (*sep);
-		}
-	} else {
-		return FALSE;
-	}
-	
-	/* get the folder name */
-	word = imap_next_word (word);
-	*folder = g_strdup (word);
-	g_strstrip (*folder);
-	
-	/* chop out the folder prefix */
-	if (*namespace && !strncmp (*folder, namespace, strlen (namespace))) {
-		f = *folder + strlen (namespace) + strlen (*sep);
-		memmove (*folder, f, strlen (f) + 1);
-	}
-	
-	string_unquote (*folder);  /* unquote the mailbox if it's quoted */
-	
-	return TRUE;
-}
-
-static char *
-get_quoted_token (char *string, int *len)
-{
-	char *ep;
-	
-	for (ep = string + 1; *ep; ep++)
-		if (*ep == '"' && *(ep - 1) != '\\')
-			break;
-	if (*ep)
-		ep++;
-	
-	*len = ep - string;
-	
-	return g_strndup (string, *len);
-}
-
-static char *
-get_token (char *string, int *len)
-{
-	char *p, *ep;
-	
-	for (p = string; *p && *p == ' '; p++);
-	
-	if (*p == '"') {
-		char *token;
-		int i;
-
-		token = get_quoted_token (p, &i);
-
-		*len = i + (p - string);
-		
-		return token;
-	}
-	
-	for (ep = p; *ep && *ep != ' ' && *ep != ')'; ep++);
-	
-	*len = ep - string;
-	
-	return g_strndup (p, *len);
-}
-
-struct sexp_node *
-get_sexp_node (const char *exp)
-{
-	struct sexp_node *node = NULL;
-	char *left_exp, *right_exp, *this_exp;
-	char *p, *ep;
-	int len, pbal;
-	
-	if (exp && *exp) {	
-		node = g_malloc0 (sizeof (struct sexp_node));
-		node->l_node = NULL;
-		node->r_node = NULL;
-		node->function = NULL;
-		node->data = NULL;
-		
-		p = (char *) exp + 1;
-		for (ep = p, pbal = 1; *ep && pbal; ep++) {
-			if (*ep == '(')
-				pbal++;
-			if (*ep == ')')
-				pbal--;
-		}
-		
-		this_exp = g_strndup (p, (gint)(ep - p));
-		
-		for (left_exp = ep; *left_exp && *left_exp != '('; left_exp++);
-		left_exp = g_strdup (left_exp);
-		
-		for (right_exp = this_exp; *right_exp && *right_exp != '('; right_exp++);
-		pbal = 1;
-		for (ep = right_exp; *ep && pbal; ep++) {
-			if (*ep == '(')
-				pbal++;
-			if (*ep == ')')
-				pbal--;
-		}
-		right_exp = g_strndup (right_exp, (gint)(ep - right_exp));
-		
-		/* fill in the node */
-		node->function = get_token (this_exp, &len);
-		p = this_exp + len;
-		for (ep = p; *ep && *ep != '(' && *ep != ')'; ep++);
-		node->data = g_strndup (p, (gint)(ep - p));
-		
-		g_strstrip (node->data);
-
-		node->l_node = get_sexp_node (left_exp);
-		node->r_node = get_sexp_node (right_exp);
-
-		g_free (this_exp);
-		g_free (left_exp);
-		g_free (right_exp);
-	}
-	
-	return node;
-}
-
-static void
-print_node (struct sexp_node *node, int depth)
-{
-	int i;
-	
-	for (i = 0; i < depth; i++)
-		d(fprintf (stderr, "   "));
-	
-	d(fprintf (stderr, "%s\n", node->function));
-	
-	if (*node->data) {
-		for (i = 0; i < depth + 1; i++)
-			d(fprintf (stderr, "   "));
-		
-		d(fprintf (stderr, "%s\n", node->data));
-	}
-	
-	if (node->r_node)
-		print_node (node->r_node, depth + 1);
-	
-	if (node->l_node)
-		print_node (node->l_node, depth);
-}
-
-static const char *
-get_func (struct sexp_node *node)
-{
-	int i;
-	
-	for (i = 0; esexp_keys[i]; i++)
-		if (!strncmp (esexp_keys[i], node->function, strlen (node->function)))
-			break;
-	
-	if (esexp_keys[i])
-		return imap_keys[i];
-	else
-		return node->function;
-}
-
-static char *
-get_data (struct sexp_node *node)
-{
-	GPtrArray *args;
-	const char *func;
-	char *data, *token, *p;
-	int i, len;
-	
-	func = get_func (node);
-	
-	args = g_ptr_array_new ();
-	
-	p = node->data;
-	while (p && *p) {
-		token = get_token (p, &len);
-		g_ptr_array_add (args, token);
-		p += len;
-	}
-	
-	if (func && !strcmp ("HEADER", func) && args->len > 0)
-		string_unquote (args->pdata[0]);
-	
-	if (args->len > 0) {
-		data = g_strjoinv (" ", (char **) args->pdata);
-	} else {
-		data = g_strdup ("");
-	}
-	
-	for (i = 0; i < args->len; i++)
-		g_free (args->pdata[i]);
-	
-	g_ptr_array_free (args, TRUE);
-	
-	return data;
-}
-
-static char *
-str_sexp_node (struct sexp_node *node)
-{
-	char *node_str, *data, *str, *l_str, *r_str;
-	const char *func;
-	
-	func = get_func (node);
-	data = get_data (node);
-	
-	if (func) {
-		if (*data)
-			str = g_strdup_printf ("%s %s", func, data);
-		else
-			str = g_strdup (func);
-	} else {
-		str = NULL;
-	}
-	
-	g_free (data);
-	
-	r_str = NULL;
-	if (node->r_node)
-		r_str = str_sexp_node (node->r_node);
-	
-	l_str = NULL;
-	if (node->l_node)
-		l_str = str_sexp_node (node->l_node);
-	
-	if (str) {
-		if (r_str) {
-			if (l_str)
-				node_str = g_strdup_printf ("%s %s %s", str, r_str, l_str);
-			else
-				node_str = g_strdup_printf ("%s %s", str, r_str);
-		} else {
-			if (l_str)
-				node_str = g_strdup_printf ("%s %s", str, l_str);
-			else
-				node_str = g_strdup_printf ("%s", str);
-		}
-	} else {
-		if (r_str) {
-			if (l_str)
-				node_str = g_strdup_printf ("%s %s", r_str, l_str);
-			else
-				node_str = g_strdup_printf ("%s", r_str);
-		} else {
-			if (l_str)
-				node_str = g_strdup_printf ("%s", l_str);
-			else
-				node_str = g_strdup ("");
-		}
-	}
-	
-	g_free (str);
-	g_free (l_str);
-	g_free (r_str);
-	
-	return node_str;
-}
-
-static void
-free_sexp_node (struct sexp_node *node)
-{
-	if (node->r_node)
-		free_sexp_node (node->r_node);
-	
-	if (node->l_node)
-		free_sexp_node (node->l_node);
-	
-	g_free (node->function);
-	g_free (node->data);
-	g_free (node);
-}
-
-char *
-imap_translate_sexp (const char *expression)
-{
-	struct sexp_node *root;
-	char *sexp, *exp;
-	
-	exp = g_strdup (expression);
-	strip (exp, '\n');
-	root = get_sexp_node (exp);
-	g_free (exp);
-	
-	d(print_node (root, 0));
-	d(fprintf (stderr, "\n"));
-	
-	sexp = str_sexp_node (root);
-	
-	free_sexp_node (root);
-	
-	return sexp;
-}
-
-
-
-
-
-
-
-
-
-
-#ifdef _ALL_HELL_BROKE_LOOSE_
-static char *
-stresexptree (ESExpTerm *node)
-{
-	char *node_str, *func, *str, *l_str, *r_str;
-	int i;
-	
-	for (i = 0; esexp_keys[i]; i++)
-		if (!strncmp (esexp_keys[i], node->func->sym->name, strlen (node->func->sym->name)))
-			break;
-	
-	if (esexp_keys[i])
-		func = imap_keys[i];
-	else
-		func = node->func->sym->name;
-	
-	if (func) {
-		if (*node->var->name)
-			str = g_strdup_printf ("%s %s", func, node->var->name);
-		else
-			str = g_strdup (func);
-	} else {
-		str = NULL;
-	}
-	
-	r_str = NULL;
-	if (node->r_node)
-		r_str = str_sexp_node (node->r_node);
-	
-	l_str = NULL;
-	if (node->l_node)
-		l_str = str_sexp_node (node->l_node);
-	
-	if (str) {
-		if (r_str) {
-			if (l_str)
-				node_str = g_strdup_printf ("%s %s %s", str, r_str, l_str);
-			else
-				node_str = g_strdup_printf ("%s %s", str, r_str);
-		} else {
-			if (l_str)
-				node_str = g_strdup_printf ("%s %s", str, l_str);
-			else
-				node_str = g_strdup_printf ("%s", str);
-		}
-	} else {
-
-		if (r_str) {
-			if (l_str)
-				node_str = g_strdup_printf ("%s %s", r_str, l_str);
-			else
-				node_str = g_strdup_printf ("%s", r_str);
-		} else {
-			if (l_str)
-				node_str = g_strdup_printf ("%s", l_str);
-			else
-				node_str = g_strdup ("");
-		}
-	}
-	
-	g_free (str);
-	g_free (l_str);
-	g_free (r_str);
-	
-	return node_str;
-}
-
-char *
-imap_translate_sexp (const char *expression)
-{
-	ESExp *esexp;
-	char *sexp;
-	
-	esexp = e_sexp_new ();
-
-	e_sexp_input_text (esexp, exp, strlen (exp));
-	e_sexp_parse (esexp);
-	
-	sexp = stresexptree (esexp->tree);
-	
-	gtk_object_unref (GTK_OBJECT (esexp));
-	
-	return sexp;
-}
-#endif /* _ALL_HELL_BROKE_LOOSE_ */
diff --git a/camel/providers/imap/camel-imap-utils.h b/camel/providers/imap/camel-imap-utils.h
deleted file mode 100644
index 11c6c48956..0000000000
--- a/camel/providers/imap/camel-imap-utils.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- *  Authors: Jeffrey Stedfast 
- *
- *  Copyright 2000 Helix Code, Inc. (www.helixcode.com)
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-#ifndef CAMEL_IMAP_UTILS_H
-#define CAMEL_IMAP_UTILS_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-char *imap_next_word (char *buf);
-
-gboolean imap_parse_list_response (char *buf, char *namespace, char **flags, char **sep, char **folder);
-
-char *imap_translate_sexp (const char *expression);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_IMAP_UTILS_H */
diff --git a/camel/providers/imap/libcamelimap.urls b/camel/providers/imap/libcamelimap.urls
deleted file mode 100644
index c301c0ffac..0000000000
--- a/camel/providers/imap/libcamelimap.urls
+++ /dev/null
@@ -1 +0,0 @@
-imap
diff --git a/camel/providers/maildir/.cvsignore b/camel/providers/maildir/.cvsignore
deleted file mode 100644
index 2e7b174532..0000000000
--- a/camel/providers/maildir/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile.in
-Makefile
-.deps
-*.lo
-*.la
-.libs
diff --git a/camel/providers/maildir/Makefile.am b/camel/providers/maildir/Makefile.am
deleted file mode 100644
index 80b41a2d45..0000000000
--- a/camel/providers/maildir/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelmaildirincludedir = $(includedir)/camel
-
-lib_LTLIBRARIES = libcamelmaildir.la
-
-INCLUDES = -I.. -I$(srcdir)/.. -I$(top_srcdir)/intl -I$(top_srcdir)/camel \
-	$(GTK_INCLUDEDIR) -I$(includedir)		\
-	-DG_LOG_DOMAIN=\"camel-maildir-provider\"		
-
-libcamelmaildir_la_SOURCES = \
-	camel-maildir-folder.c \
-	camel-maildir-provider.c \
-	camel-maildir-store.c
-
-libcamelmaildirinclude_HEADERS = \
-	camel-maildir-folder.h \
-	camel-maildir-store.h
-
-libcamelmaildir_la_LDFLAGS = -version-info 0:0:0
-
-EXTRA_DIST = 
diff --git a/camel/providers/maildir/camel-maildir-folder.c b/camel/providers/maildir/camel-maildir-folder.c
deleted file mode 100644
index 2cb81f3e81..0000000000
--- a/camel/providers/maildir/camel-maildir-folder.c
+++ /dev/null
@@ -1,802 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-folder.c : camel-folder subclass for maildir folders */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-/*
- * AUTHORS : Jukka Zitting 
- *  
- */
-
-
-#include  
-#include  
-#include  
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "camel-maildir-folder.h"
-#include "camel-maildir-store.h"
-#include "camel-stream-fs.h"
-#include "camel-log.h"
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for a CamelMaildirFolder */
-#define CMAILDIRF_CLASS(so) CAMEL_MAILDIR_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMAILDIRS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
-
-static void _init_with_store (CamelFolder *folder, CamelStore *parent_store, CamelException *ex);
-static void _set_name (CamelFolder *folder, const gchar *name, CamelException *ex);
-static gboolean _exists (CamelFolder *folder, CamelException *ex);
-static gboolean _create (CamelFolder *folder, CamelException *ex);
-static gboolean _delete (CamelFolder *folder, gboolean recurse, CamelException *ex);
-static gboolean _delete_messages (CamelFolder *folder, CamelException *ex);
-static CamelMimeMessage *_get_message (CamelFolder *folder, gint number, CamelException *ex);
-static gint _get_message_count (CamelFolder *folder, CamelException *ex);
-static void _expunge (CamelFolder *folder, CamelException *ex);
-static GList *_list_subfolders (CamelFolder *folder, CamelException *ex);
-
-/* fs utility functions */
-static DIR * _xopendir (const gchar *path);
-static gboolean _xstat (const gchar *path, struct stat *buf);
-static gboolean _xmkdir (const gchar *path);
-static gboolean _xrename (const gchar *from, const gchar *to);
-static gboolean _xunlink (const gchar *path);
-static gboolean _xrmdir (const gchar *path);
-/* ** */
-
-static void
-camel_maildir_folder_class_init (CamelMaildirFolderClass *camel_maildir_folder_class)
-{
-	CamelFolderClass *camel_folder_class =
-		CAMEL_FOLDER_CLASS (camel_maildir_folder_class);
-
-	parent_class = gtk_type_class (camel_folder_get_type ());
-
-	/* virtual method definition */
-	/* virtual method overload */
-	camel_folder_class->init_with_store   = _init_with_store;
-	camel_folder_class->set_name          = _set_name;
-	camel_folder_class->exists            = _exists;
-	camel_folder_class->create            = _create;
-	camel_folder_class->delete            = _delete;
-	camel_folder_class->delete_messages   = _delete_messages;
-	camel_folder_class->expunge           = _expunge;
-	camel_folder_class->get_message       = _get_message;
-	camel_folder_class->get_message_count = _get_message_count;
-	camel_folder_class->list_subfolders   = _list_subfolders;
-}
-
-GtkType
-camel_maildir_folder_get_type (void)
-{
-	static GtkType camel_maildir_folder_type = 0;
-	
-	if (!camel_maildir_folder_type)	{
-		GtkTypeInfo camel_maildir_folder_info =	
-		{
-			"CamelMaildirFolder",
-			sizeof (CamelMaildirFolder),
-			sizeof (CamelMaildirFolderClass),
-			(GtkClassInitFunc) camel_maildir_folder_class_init,
-			(GtkObjectInitFunc) NULL,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_maildir_folder_type =
-			gtk_type_unique (CAMEL_FOLDER_TYPE, &camel_maildir_folder_info);
-	}
-	
-	return camel_maildir_folder_type;
-}
-
-
-
-
-
-
-/**
- * CamelMaildirFolder::init_with_store: initializes the folder object
- * @folder:       folder object to initialize
- * @parent_store: parent store object of the folder
- *
- * Simply tells that the folder can contain messages but not subfolders.
- * Perhaps we'll later implement subfolders too...
- */
-static void 
-_init_with_store (CamelFolder *folder, CamelStore *parent_store, CamelException *ex)
-{
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::init_with_store\n");
-	g_assert (folder);
-	g_assert (parent_store);
-	
-	/* call parent method */
-	parent_class->init_with_store (folder, parent_store, ex);
-	
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = FALSE;
-
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::init_with_store\n");
-}
-
-/**
- * CamelMaildirFolder::set_name: sets the name of the folder
- * @folder: folder object
- * @name:   name of the folder
- *
- * Sets the name of the folder object. The existence of a folder with
- * the given name is not checked in this function.
- */
-static void
-_set_name (CamelFolder *folder, const gchar *name, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder;
-	CamelMaildirStore *maildir_store;
-	
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::set_name\n");
-	g_assert (folder);
-	g_assert (name);
-	g_assert (folder->parent_store);
-
-	maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	maildir_store = CAMEL_MAILDIR_STORE (folder->parent_store);
-
-	/* call default implementation */
-	parent_class->set_name (folder, name, ex);
-	
-	if (maildir_folder->directory_path)
-		g_free (maildir_folder->directory_path);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name full_name is %s\n", folder->full_name);
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name toplevel_dir is %s\n", maildir_store->toplevel_dir);
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name separator is %c\n", camel_store_get_separator (folder->parent_store));
-
-	if (folder->full_name && folder->full_name[0])
-		maildir_folder->directory_path =
-			g_strconcat (maildir_store->toplevel_dir, G_DIR_SEPARATOR_S,
-				     folder->full_name, NULL);
-	else
-		maildir_folder->directory_path = g_strdup (maildir_store->toplevel_dir);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::set_name: name set to %s\n", name);
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::set_name\n");
-}
-
-/**
- * CamelMaildirFolder::exists: tests whether the named maildir exists
- * @folder: folder object
- *
- * A created maildir folder object doesn't necessarily exist yet in the
- * filesystem. This function checks whether the maildir exists.
- * The structure of the maildir is stated in the maildir.5 manpage.
- *
- * maildir.5:
- *     A directory in maildir format  has  three  subdirectories,
- *     all on the same filesystem: tmp, new, and cur.
- *
- * Return value: TRUE if the maildir exists, FALSE otherwise
- */
-static gboolean
-_exists (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	static const gchar *dir[3] = { "new", "cur", "tmp" };
-	gint i;
-	struct stat statbuf;
-	const gchar *maildir;
-	gchar *path;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::exists\n");
-	g_assert (folder);
-	g_return_val_if_fail (maildir_folder->directory_path, FALSE);
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMailFolder::exists: checking maildir %s\n",
-			      maildir);
-
-	/* check whether the toplevel directory exists */
-	rv = _xstat (maildir, &statbuf) && S_ISDIR (statbuf.st_mode);
-
-	/* check whether the maildir subdirectories exist */
-	for (i = 0; rv && i < 3; i++) {
-		path = g_strconcat (maildir, G_DIR_SEPARATOR_S, dir[i], NULL);
-
-		rv = _xstat (path, &statbuf) && S_ISDIR (statbuf.st_mode);
-
-		g_free (path);
-	}
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::exists: %s\n",
-			      (rv) ? "maildir found" : "maildir not found");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::exists\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::create: creates the named maildir
- * @folder: folder object
- *
- * A created maildir folder object doesn't necessarily exist yet in the
- * filesystem. This function creates the maildir if it doesn't yet exist.
- * The structure of the maildir is stated in the maildir.5 manpage.
- *
- * maildir.5:
- *     A directory in maildir format  has  three  subdirectories,
- *     all on the same filesystem: tmp, new, and cur.
- *
- * Return value: TRUE if the maildir existed already or was created,
- *               FALSE otherwise
- */
-static gboolean
-_create (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	static const gchar *dir[3] = { "new", "cur", "tmp" };
-	gint i;
-	const gchar *maildir;
-	gchar *path;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::create\n");
-	g_assert (folder);
-
-	/* check whether the maildir already exists */
-	if (camel_folder_exists (folder, ex)) return TRUE;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMailFolder::create: creating maildir %s\n",
-			      maildir);
-
-	/* create the toplevel directory */
-	rv = _xmkdir (maildir);
-
-	/* create the maildir subdirectories */
-	for (i = 0; rv && i < 3; i++) {
-		path = g_strconcat (maildir, G_DIR_SEPARATOR_S, dir[i], NULL);
-
-		rv = _xmkdir (path);
-
-		g_free (path);
-	}
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::create: %s\n",
-			      rv ? "maildir created" : "an error occurred");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::create\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::delete: delete the maildir folder
- * @folder: the folder object
- * @recurse:
- *
- * This function empties and deletes the maildir folder. The subdirectories
- * "tmp", "cur", and "new" are removed first and then the toplevel maildir
- * directory is deleted. All files from the directories are deleted as well, 
- * so you should be careful when using this function. If a subdirectory cannot
- * be deleted, then the operation it is stopped. Thus if an error occurs, the
- * maildir directory won't be removed, but it might no longer be a valid maildir.
- */
-static gboolean
-_delete (CamelFolder *folder, gboolean recurse, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	static const gchar *dir[3] = { "new", "cur", "tmp" };
-	gint i;
-	const gchar *maildir;
-	gchar *path;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::create\n");
-	g_assert (folder);
-
-	/* check whether the maildir already exists */
-	if (!camel_folder_exists (folder, ex)) return TRUE;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMailFolder::delete: deleting maildir %s\n",
-			      maildir);
-
-	/* delete the maildir subdirectories */
-	for (i = 0; rv && i < 3; i++) {
-		path = g_strconcat (maildir, G_DIR_SEPARATOR_S, dir[i], NULL);
-
-		rv = _xrmdir (path);
-
-		g_free (path);
-	}
-
-	/* create the toplevel directory */
-	if (rv)
-		rv = _xrmdir (maildir);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::delete: %s\n",
-			      rv ? "maildir deleted" : "an error occurred");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::delete\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::delete_messages: empty the maildir folder
- * @folder:  the folder object
- *
- * This function empties the maildir folder. All messages from the
- * "cur" subdirectory are deleted. If a message cannot be deleted, then
- * it is just skipped and the rest of the messages are still deleted.
- * Files with names starting with a dot are skipped as described in the
- * maildir.5 manpage.
- *
- * maildir.5:
- *     It is a good idea for readers to skip all filenames in new
- *     and cur starting with a dot. Other than this, readers
- *     should not attempt to parse filenames.
- *
- * Return value: FALSE on error and if some messages could not be deleted.
- *               TRUE otherwise.
- */
-static gboolean 
-_delete_messages (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	const gchar *maildir;
-	gchar *curdir, *file;
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	gboolean rv = TRUE;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::delete_messages\n");
-	g_assert (folder);
-
-	/* call default implementation */
-	parent_class->delete_messages (folder, ex);
-
-	/* Check if the folder didn't exist */
-	if (!camel_folder_exists (folder, ex)) return TRUE;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::delete_messages: "
-			      "deleting messages from %s\n", maildir);
-
-	/* delete messages from the maildir subdirectory "cur" */
-	curdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "cur", NULL);
-
-	dir_handle = _xopendir (curdir);
-	if (dir_handle) {
-		while ((dir_entry = readdir (dir_handle))) {
-			if (dir_entry->d_name[0] == '.') continue;
-			file = g_strconcat (curdir, G_DIR_SEPARATOR_S,
-					    dir_entry->d_name, NULL);
-
-			if (!_xunlink (file)) rv = FALSE;
-
-			g_free (file);
-		}
-		closedir (dir_handle);
-	} else
-		rv = FALSE;
-
-	g_free (curdir);
-	
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::delete_messages: %s\n",
-			      rv ? "messages deleted" : "an error occurred");
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::delete_messages\n");
-	return rv;
-}
-
-/**
- * CamelMaildirFolder::get_message: get a message from maildir
- * @folder: the folder object
- * @number: number of the message within the folder
- *
- * Return value: the message, NULL on error
- */
-static CamelMimeMessage *
-_get_message (CamelFolder *folder, gint number, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER(folder);
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	CamelStream *stream;
-	CamelMimeMessage *message = NULL;
-	const gchar *maildir;
-	gchar *curdir, *file = NULL;
-	gint count = -1;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::get_message\n");
-	g_assert(folder);
-
-	/* Check if the folder exists */
-	if (!camel_folder_exists (folder, ex)) return NULL;
-
-	maildir = maildir_folder->directory_path;
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message: "
-			      "getting message #%d from %s\n", number, maildir);
-
-	/* Count until the desired message is reached */
-	curdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "cur", NULL);
-	if ((dir_handle = _xopendir (curdir))) {
-		while ((count < number) && (dir_entry = readdir (dir_handle)))
-			if (dir_entry->d_name[0] != '.') count++;
-
-		if (count == number)
-			file = g_strconcat (curdir, G_DIR_SEPARATOR_S,
-					    dir_entry->d_name, NULL);
-
-		closedir (dir_handle);
-	}
-	g_free (curdir);
-	if (!file) return NULL;
-
-	/* Create the message object */
-	message = camel_mime_message_new ();
-	stream = camel_stream_fs_new_with_name (file, CAMEL_STREAM_FS_READ);
-
-	if (!message || !stream) {
-		g_free (file);
-		if (stream) gtk_object_unref (GTK_OBJECT (stream));
-		if (message) gtk_object_unref (GTK_OBJECT (message));
-		return NULL;
-	}
-
-	camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (message),
-						  stream);
-	gtk_object_unref (GTK_OBJECT (stream));
-	gtk_object_set_data_full (GTK_OBJECT (message),
-				  "fullpath", file, g_free);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message: "
-			      "message %p created from %s\n", message, file);
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::get_message\n");
-	return message;
-}
-
-/**
- * CamelMaildirFolder::get_message_count: count messages in maildir
- * @folder:  the folder object
- *
- * Returns the number of messages in the maildir folder. New messages
- * are included in this count. 
- *
- * Return value: number of messages in the maildir, -1 on error
- */
-static gint
-_get_message_count (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER(folder);
-	const gchar *maildir;
-	gchar *newdir, *curdir, *newfile, *curfile;
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	guint count = 0;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering "
-			      "CamelMaildirFolder::get_message_count\n");
-	g_assert(folder);
-
-	/* check if the maildir exists */
-	if (!camel_folder_exists (folder, ex)) return -1;
-
-	maildir = maildir_folder->directory_path;
-
-	newdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "new", NULL);
-	curdir = g_strconcat (maildir, G_DIR_SEPARATOR_S, "cur", NULL);
-
-	/* Check new messages */
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message_count: "
-			      "getting new messages from %s\n", newdir);
-	if ((dir_handle = _xopendir (newdir))) {
-		while ((dir_entry = readdir (dir_handle))) {
-			if (dir_entry->d_name[0] == '.') continue;
-			newfile = g_strconcat (newdir, G_DIR_SEPARATOR_S,
-					       dir_entry->d_name, NULL);
-			curfile = g_strconcat (curdir, G_DIR_SEPARATOR_S,
-					       dir_entry->d_name, ":2,", NULL);
-			
-			_xrename (newfile, curfile);
-			
-			g_free (curfile);
-			g_free (newfile);
-		}
-		closedir (dir_handle);
-	}
-
-	/* Count messages */
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message_count: "
-			      "counting messages in %s\n", curdir);
-	if ((dir_handle = _xopendir (curdir))) {
-		while ((dir_entry = readdir (dir_handle)))
-			if (dir_entry->d_name[0] != '.') count++;
-		closedir (dir_handle);
-	}
-
-	g_free (curdir);
-	g_free (newdir);
-
-	CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::get_message_count: "
-			      " found %d messages\n", count);
-	CAMEL_LOG_FULL_DEBUG ("Leaving "
-			      "CamelMaildirFolder::get_message_count\n");
-	return count;
-}
-
-
-
-
-/**
- * CamelMaildirFolder::expunge: expunge messages marked as deleted
- * @folder:  the folder object
- *
- * Physically deletes the messages marked as deleted in the folder.
- */
-static void
-_expunge (CamelFolder *folder, CamelException *ex)
-{
-	CamelMimeMessage *message;
-	GList *node;
-	gchar *fullpath;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::expunge\n");
-	g_assert(folder);
-
-	/* expunge messages marked for deletion */
-	for (node = folder->message_list; node; node = g_list_next(node)) {
-		message = CAMEL_MIME_MESSAGE (node->data);
-		if (!message) {
-			CAMEL_LOG_WARNING ("CamelMaildirFolder::expunge: "
-					   "null message in node %p\n", node);
-			continue;
-		}
-				
-		if (camel_mime_message_get_flag (message, "DELETED")) {
-			CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::expunge: "
-					      "expunging message #%d\n",
-					      message->message_number);
-
-			/* expunge the message */
-			fullpath = gtk_object_get_data (GTK_OBJECT (message),
-							"fullpath");
-			CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::expunge: "
-					      "message fullpath is %s\n",
-					      fullpath);
-
-			if (_xunlink (fullpath))
-				message->expunged = TRUE;
-		} else {
-			CAMEL_LOG_FULL_DEBUG ("CamelMaildirFolder::expunge: "
-					      "skipping message #%d\n",
-					      message->message_number);
-		}
-	}
-	
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::expunge\n");
-}
-
-
-
-
-/**
- * CamelMaildirFolder::list_subfolders: return a list of subfolders
- * @folder:  the folder object
- *
- * Returns the names of the maildir subfolders in a list.
- *
- * Return value: list of subfolder names
- */
-static GList *
-_list_subfolders (CamelFolder *folder, CamelException *ex)
-{
-	CamelMaildirFolder *maildir_folder = CAMEL_MAILDIR_FOLDER (folder);
-	const gchar *maildir;
-	gchar *subdir;
-	struct stat statbuf;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	GList *subfolders = NULL;
-
-	CAMEL_LOG_FULL_DEBUG ("Entering CamelMaildirFolder::list_subfolders\n");
-	g_assert (folder);
-
-	/* check if the maildir exists */
-	if (!camel_folder_exists (folder, ex)) return NULL;
-
-	/* scan through the maildir toplevel directory */
-	maildir = maildir_folder->directory_path;
-	if ((dir_handle = _xopendir (maildir))) {
-		while ((dir_entry = readdir (dir_handle))) {
-			if (dir_entry->d_name[0] == '.') continue;
-			if (strcmp (dir_entry->d_name, "new") == 0) continue;
-			if (strcmp (dir_entry->d_name, "cur") == 0) continue;
-			if (strcmp (dir_entry->d_name, "tmp") == 0) continue;
-
-			subdir = g_strconcat (maildir, G_DIR_SEPARATOR_S,
-					      dir_entry->d_name, NULL);
-			
-			if (_xstat (subdir, &statbuf)
-			    && S_ISDIR (statbuf.st_mode))
-				subfolders =
-					g_list_append (
-						subfolders,
-						g_strdup (dir_entry->d_name));
-			
-			g_free (subdir);
-		}
-		closedir (dir_handle);
-	}
-
-	CAMEL_LOG_FULL_DEBUG ("Leaving CamelMaildirFolder::list_subfolders\n");
-	return subfolders;
-}
-
-
-
-
-
-
-
-/*
- * fs utility function 
- *
- */
-
-static DIR *
-_xopendir (const gchar *path)
-{
-	DIR *handle;
-	g_assert (path);
-
-	handle = opendir (path);
-	if (!handle) {
-		CAMEL_LOG_WARNING ("ERROR: opendir (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-	}
-
-	return handle;
-}
-
-static gboolean
-_xstat (const gchar *path, struct stat *buf)
-{
-	gint stat_error;
-	g_assert (path);
-	g_assert (buf);
-
-	stat_error = stat (path, buf);
-	if (stat_error == 0) {
-		return TRUE;
-	} else if (errno == ENOENT) {
-		buf->st_mode = 0;
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: stat (%s, %p);\n", path, buf);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-}
-
-static gboolean
-_xmkdir (const gchar *path)
-{
-	g_assert (path);
-
-	if (mkdir (path, S_IRWXU) == -1) {
-		CAMEL_LOG_WARNING ("ERROR: mkdir (%s, S_IRWXU);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	} 
-
-	return TRUE;
-}
-
-static gboolean
-_xrename (const gchar *from, const gchar *to)
-{
-	g_assert (from);
-	g_assert (to);
-
-	if (rename (from, to) == 0) {
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: rename (%s, %s);\n", from, to);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-}
-
-static gboolean
-_xunlink (const gchar *path)
-{
-	g_assert (path);
-
-	if (unlink (path) == 0) {
-		return TRUE;
-	} else if (errno == ENOENT) {
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: unlink (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-}
-
-static gboolean
-_xrmdir (const gchar *path)
-{
-	DIR *dir_handle;
-	struct dirent *dir_entry;
-	gchar *file;
-	struct stat statbuf;
-	g_assert (path);
-
-	dir_handle = opendir (path);
-	if (!dir_handle && errno == ENOENT) {
-		return TRUE;
-	} else if (!dir_handle) {
-		CAMEL_LOG_WARNING ("ERROR: opendir (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	}
-
-	while ((dir_entry = readdir (dir_handle))) {
-		file = g_strconcat (path, G_DIR_SEPARATOR_S, dir_entry->d_name,
-				    NULL);
-		if (_xstat (file, &statbuf) && S_ISREG (statbuf.st_mode))
-			_xunlink (file);
-		g_free (file);
-	}
-
-	closedir (dir_handle);
-
-	if (rmdir (path) == 0) {
-		return TRUE;
-	} else if (errno == ENOENT) {
-		return TRUE;
-	} else {
-		CAMEL_LOG_WARNING ("ERROR: rmdir (%s);\n", path);
-		CAMEL_LOG_FULL_DEBUG ("  Full error text is: (%d) %s\n",
-				      errno, strerror(errno));
-		return FALSE;
-	} 
-}
-
-/** *** **/
-
diff --git a/camel/providers/maildir/camel-maildir-folder.h b/camel/providers/maildir/camel-maildir-folder.h
deleted file mode 100644
index 5997da2011..0000000000
--- a/camel/providers/maildir/camel-maildir-folder.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-folder.h : Abstract class for an email folder */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-#ifndef CAMEL_MAILDIR_FOLDER_H
-#define CAMEL_MAILDIR_FOLDER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-folder.h"
-/*  #include "camel-store.h" */
-
-#define CAMEL_MAILDIR_FOLDER_TYPE     (camel_maildir_folder_get_type ())
-#define CAMEL_MAILDIR_FOLDER(obj)     (GTK_CHECK_CAST((obj), CAMEL_MAILDIR_FOLDER_TYPE, CamelMaildirFolder))
-#define CAMEL_MAILDIR_FOLDER_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MAILDIR_FOLDER_TYPE, CamelMaildirFolderClass))
-#define IS_CAMEL_MAILDIR_FOLDER(o)    (GTK_CHECK_TYPE((o), CAMEL_MAILDIR_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-	
-	gchar *directory_path;
-} CamelMaildirFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-
-} CamelMaildirFolderClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_maildir_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MAILDIR_FOLDER_H */
diff --git a/camel/providers/maildir/camel-maildir-provider.c b/camel/providers/maildir/camel-maildir-provider.c
deleted file mode 100644
index cd5521adc0..0000000000
--- a/camel/providers/maildir/camel-maildir-provider.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-provider.c: maildir provider registration code */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-maildir-store.h"
-#include "camel-provider.h"
-#include "camel-log.h"
-
-
-static CamelProvider _maildir_provider = {
-	(GtkType) 0,
-	PROVIDER_STORE,
-	"maildir",
-	"Maildir provider for Camel",
-	"This maildir provider is based on the default MH provider of Camel",
-	(GModule *) NULL
-};
-
-
-
-CamelProvider *
-camel_provider_module_init ()
-{
-	_maildir_provider.object_type = camel_maildir_store_get_type();
-	return &_maildir_provider;
-}
diff --git a/camel/providers/maildir/camel-maildir-store.c b/camel/providers/maildir/camel-maildir-store.c
deleted file mode 100644
index 8f37494003..0000000000
--- a/camel/providers/maildir/camel-maildir-store.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildir-store.c : class for an maildir store */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "camel-maildir-store.h"
-#include "camel-maildir-folder.h"
-#include "url-util.h"
-
-static CamelStoreClass *parent_class=NULL;
-
-/* Returns the class for a CamelMaildirStore */
-#define CMAILDIRS_CLASS(so) CAMEL_MAILDIR_STORE_CLASS (GTK_OBJECT(so)->klass)
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-#define CMAILDIRF_CLASS(so) CAMEL_MAILDIR_FOLDER_CLASS (GTK_OBJECT(so)->klass)
-
-static void _init (CamelStore *store, CamelSession *session,
-		   const gchar *url_name);
-static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name);
-
-static void
-camel_maildir_store_class_init (
-	CamelMaildirStoreClass *camel_maildir_store_class)
-{
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_maildir_store_class);
-
-	parent_class = gtk_type_class (camel_store_get_type ());
-	
-	/* virtual method definition */
-	/* virtual method overload */
-	camel_store_class->init = _init;
-	camel_store_class->get_folder = _get_folder;
-}
-
-static void
-camel_maildir_store_init (gpointer object, gpointer klass)
-{
-	CamelMaildirStore *maildir_store = CAMEL_MAILDIR_STORE (object);
-	CamelStore *store = CAMEL_STORE (object);
-	
-	store->separator = G_DIR_SEPARATOR;
-}
-
-GtkType
-camel_maildir_store_get_type (void)
-{
-	static GtkType camel_maildir_store_type = 0;
-	
-	if (!camel_maildir_store_type)	{
-		GtkTypeInfo camel_maildir_store_info =	
-		{
-			"CamelMaildirStore",
-			sizeof (CamelMaildirStore),
-			sizeof (CamelMaildirStoreClass),
-			(GtkClassInitFunc) camel_maildir_store_class_init,
-			(GtkObjectInitFunc) camel_maildir_store_init,
-				/* reserved_1 */ NULL,
-				/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-		
-		camel_maildir_store_type =
-			gtk_type_unique (CAMEL_STORE_TYPE,
-					 &camel_maildir_store_info);
-	}
-	
-	return camel_maildir_store_type;
-}
-
-static void 
-_init (CamelStore *store, CamelSession *session, const gchar *url_name)
-{
-	CamelMaildirStore *maildir_store = CAMEL_MAILDIR_STORE (store);
-	Gurl *store_url;
-	g_assert (url_name);
-
-	/* call parent implementation */
-	parent_class->init (store, session, url_name);
-	
-	/* find the path in the URL*/
-	store_url = g_url_new (url_name);
-
-	g_return_if_fail (store_url);
-	g_return_if_fail (store_url->path); 
-	
-	maildir_store->toplevel_dir = g_strdup (store_url->path); 
-
-	g_url_free (store_url);
-}
-
-static CamelFolder *
-_get_folder (CamelStore *store, const gchar *folder_name)
-{
-	CamelMaildirStore *maildir_store = CAMEL_MAILDIR_STORE (store);
-	CamelMaildirFolder *new_maildir_folder;
-	CamelFolder *new_folder;
-
-	new_maildir_folder = gtk_type_new (CAMEL_MAILDIR_FOLDER_TYPE);
-	new_folder = CAMEL_FOLDER (new_maildir_folder);
-
-	CF_CLASS (new_folder)->init_with_store (new_folder, store, NULL);
-	CF_CLASS (new_folder)->set_name (new_folder, folder_name, NULL);
-	
-	return new_folder;
-}
diff --git a/camel/providers/maildir/camel-maildir-store.h b/camel/providers/maildir/camel-maildir-store.h
deleted file mode 100644
index 1a95ed1436..0000000000
--- a/camel/providers/maildir/camel-maildir-store.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-maildirstore.h : class for an maildir store */
-
-/* 
- *
- * Copyright (C) 1999 Bertrand Guiheneuf  .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MAILDIR_STORE_H
-#define CAMEL_MAILDIR_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include "camel-store.h"
-
-#define CAMEL_MAILDIR_STORE_TYPE     (camel_maildir_store_get_type ())
-#define CAMEL_MAILDIR_STORE(obj)     (GTK_CHECK_CAST((obj), CAMEL_MAILDIR_STORE_TYPE, CamelMaildirStore))
-#define CAMEL_MAILDIR_STORE_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), CAMEL_MAILDIR_STORE_TYPE, CamelMaildirStoreClass))
-#define IS_CAMEL_MAILDIR_STORE(o)    (GTK_CHECK_TYPE((o), CAMEL_MAILDIR_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-	
-	gchar *toplevel_dir;	
-} CamelMaildirStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-
-} CamelMaildirStoreClass;
-
-
-/* public methods */
-
-/* Standard Gtk function */
-GtkType camel_maildir_store_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MAILDIR_STORE_H */
-
-
diff --git a/camel/providers/mbox/.cvsignore b/camel/providers/mbox/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/mbox/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/mbox/Makefile.am b/camel/providers/mbox/Makefile.am
deleted file mode 100644
index 073d9830de..0000000000
--- a/camel/providers/mbox/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelmboxincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelmbox.la
-provider_DATA = libcamelmbox.urls
-
-INCLUDES = -I.. \
-	-I$(srcdir)/..				\
-	-I$(top_srcdir)/camel			\
-	-I$(top_srcdir)/intl			\
-	-I$(top_srcdir)/libibex			\
-	-I$(top_srcdir)/e-util			\
-	-I$(top_srcdir)				\
-	-I$(includedir)				\
-	$(GTK_INCLUDEDIR)			\
-	-DG_LOG_DOMAIN=\"camel-mbox-provider\"	
-
-libcamelmbox_la_SOURCES = 			\
-	camel-mbox-folder.c			\
-	camel-mbox-provider.c			\
-	camel-mbox-store.c			\
-	camel-mbox-summary.c
-
-libcamelmboxinclude_HEADERS =			\
-	camel-mbox-folder.h			\
-	camel-mbox-store.h			\
-	camel-mbox-summary.h
-
-libcamelmbox_la_LDFLAGS = -version-info 0:0:0
-
-libcamelmbox_la_LIBADD = $(top_builddir)/e-util/libeutil.la $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-#libcamelmbox_la_LIBADD = $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-
-EXTRA_DIST = libcamelmbox.urls
-
diff --git a/camel/providers/mbox/camel-mbox-folder.c b/camel/providers/mbox/camel-mbox-folder.c
deleted file mode 100644
index d533b675b9..0000000000
--- a/camel/providers/mbox/camel-mbox-folder.c
+++ /dev/null
@@ -1,625 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-mbox-folder.c : Abstract class for an email folder */
-
-/* 
- * Authors: Bertrand Guiheneuf  
- *          Michael Zucchi 
- *          Jeffrey Stedfast 
- *
- * Copyright (C) 1999, 2000 Helix Code Inc.
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-mbox-folder.h"
-#include "camel-mbox-store.h"
-#include "string-utils.h"
-#include "camel-stream-fs.h"
-#include "camel-mbox-summary.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-filter-from.h"
-#include "camel-exception.h"
-
-#define d(x)
-
-static CamelFolderClass *parent_class = NULL;
-
-/* Returns the class for a CamelMboxFolder */
-#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMBOXS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-
-static void mbox_init(CamelFolder *folder, CamelStore * parent_store,
-		      CamelFolder *parent_folder, const gchar * name,
-
-		      gchar * separator, gboolean path_begins_with_sep, CamelException *ex);
-
-static void mbox_sync(CamelFolder *folder, gboolean expunge, CamelException *ex);
-static gint mbox_get_message_count(CamelFolder *folder);
-static gint mbox_get_unread_message_count(CamelFolder *folder);
-static void mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const CamelMessageInfo * info,
-
-				CamelException *ex);
-static GPtrArray *mbox_get_uids(CamelFolder *folder);
-static GPtrArray *mbox_get_subfolder_names(CamelFolder *folder);
-static GPtrArray *mbox_get_summary(CamelFolder *folder);
-static CamelMimeMessage *mbox_get_message(CamelFolder *folder, const gchar * uid, CamelException *ex);
-
-static void mbox_expunge(CamelFolder *folder, CamelException *ex);
-
-static const CamelMessageInfo *mbox_get_message_info(CamelFolder *folder, const char *uid);
-
-static GPtrArray *mbox_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex);
-static void mbox_search_free(CamelFolder *folder, GPtrArray * result);
-
-static guint32 mbox_get_message_flags(CamelFolder *folder, const char *uid);
-static void mbox_set_message_flags(CamelFolder *folder, const char *uid, guint32 flags, guint32 set);
-static gboolean mbox_get_message_user_flag(CamelFolder *folder, const char *uid, const char *name);
-static void mbox_set_message_user_flag(CamelFolder *folder, const char *uid, const char *name, gboolean value);
-static const char *mbox_get_message_user_tag(CamelFolder *folder, const char *uid, const char *name);
-static void mbox_set_message_user_tag(CamelFolder *folder, const char *uid, const char *name, const char *value);
-
-
-static void mbox_finalize(CamelObject * object);
-
-static void
-camel_mbox_folder_class_init(CamelMboxFolderClass * camel_mbox_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_mbox_folder_class);
-
-	parent_class = CAMEL_FOLDER_CLASS(camel_type_get_global_classfuncs(camel_folder_get_type()));
-
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_folder_class->init = mbox_init;
-	camel_folder_class->sync = mbox_sync;
-	camel_folder_class->get_message_count = mbox_get_message_count;
-	camel_folder_class->get_unread_message_count = mbox_get_unread_message_count;
-	camel_folder_class->append_message = mbox_append_message;
-	camel_folder_class->get_uids = mbox_get_uids;
-	camel_folder_class->free_uids = camel_folder_free_deep;
-	camel_folder_class->get_subfolder_names = mbox_get_subfolder_names;
-	camel_folder_class->free_subfolder_names = camel_folder_free_deep;
-	camel_folder_class->get_summary = mbox_get_summary;
-	camel_folder_class->free_summary = camel_folder_free_nop;
-	camel_folder_class->expunge = mbox_expunge;
-
-	camel_folder_class->get_message = mbox_get_message;
-
-	camel_folder_class->search_by_expression = mbox_search_by_expression;
-	camel_folder_class->search_free = mbox_search_free;
-
-	camel_folder_class->get_message_info = mbox_get_message_info;
-
-	camel_folder_class->get_message_flags = mbox_get_message_flags;
-	camel_folder_class->set_message_flags = mbox_set_message_flags;
-	camel_folder_class->get_message_user_flag = mbox_get_message_user_flag;
-	camel_folder_class->set_message_user_flag = mbox_set_message_user_flag;
-	camel_folder_class->get_message_user_tag = mbox_get_message_user_tag;
-	camel_folder_class->set_message_user_tag = mbox_set_message_user_tag;
-}
-
-static void
-mbox_finalize(CamelObject * object)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(object);
-
-	g_free(mbox_folder->folder_file_path);
-	g_free(mbox_folder->summary_file_path);
-	g_free(mbox_folder->folder_dir_path);
-	g_free(mbox_folder->index_file_path);
-
-}
-
-CamelType camel_mbox_folder_get_type(void)
-{
-	static CamelType camel_mbox_folder_type = CAMEL_INVALID_TYPE;
-
-	if (camel_mbox_folder_type == CAMEL_INVALID_TYPE) {
-		camel_mbox_folder_type = camel_type_register(CAMEL_FOLDER_TYPE, "CamelMboxFolder",
-							     sizeof(CamelMboxFolder),
-							     sizeof(CamelMboxFolderClass),
-							     (CamelObjectClassInitFunc) camel_mbox_folder_class_init,
-							     NULL,
-							     (CamelObjectInitFunc) NULL,
-							     (CamelObjectFinalizeFunc) mbox_finalize);
-	}
-
-	return camel_mbox_folder_type;
-}
-
-static void
-mbox_init(CamelFolder *folder, CamelStore * parent_store,
-	  CamelFolder *parent_folder, const gchar * name, gchar * separator,
-	  gboolean path_begins_with_sep, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = (CamelMboxFolder *) folder;
-	const gchar *root_dir_path;
-	gchar *real_name;
-	int forceindex;
-	struct stat st;
-
-	/* call parent method */
-	parent_class->init(folder, parent_store, parent_folder, name, separator, path_begins_with_sep, ex);
-	if (camel_exception_get_id(ex))
-		return;
-
-	/* we assume that the parent init
-	   method checks for the existance of @folder */
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = TRUE;
-	folder->has_search_capability = TRUE;
-
-	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED |
-	    CAMEL_MESSAGE_DELETED |
-	    CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_USER;
-	/* FIXME: we don't actually preserve user flags right now. */
-
-	mbox_folder->summary = NULL;
-	mbox_folder->search = NULL;
-
-	/* now set the name info */
-	g_free(mbox_folder->folder_file_path);
-	g_free(mbox_folder->folder_dir_path);
-	g_free(mbox_folder->index_file_path);
-
-	root_dir_path = camel_mbox_store_get_toplevel_dir(CAMEL_MBOX_STORE(folder->parent_store));
-
-	real_name = g_basename(folder->full_name);
-	mbox_folder->folder_file_path = g_strdup_printf("%s/%s", root_dir_path, real_name);
-	mbox_folder->summary_file_path = g_strdup_printf("%s/%s-ev-summary", root_dir_path, real_name);
-	mbox_folder->folder_dir_path = g_strdup_printf("%s/%s.sdb", root_dir_path, real_name);
-	mbox_folder->index_file_path = g_strdup_printf("%s/%s.ibex", root_dir_path, real_name);
-
-	/* if we have no index file, force it */
-	forceindex = stat(mbox_folder->index_file_path, &st) == -1;
-
-	mbox_folder->index = ibex_open(mbox_folder->index_file_path, O_CREAT | O_RDWR, 0600);
-	if (mbox_folder->index == NULL) {
-		/* yes, this isn't fatal at all */
-		g_warning("Could not open/create index file: %s: indexing not performed", strerror(errno));
-	}
-
-	/* no summary (disk or memory), and we're proverbially screwed */
-	mbox_folder->summary = camel_mbox_summary_new(mbox_folder->summary_file_path,
-						      mbox_folder->folder_file_path, mbox_folder->index);
-	if (mbox_folder->summary == NULL || camel_mbox_summary_load(mbox_folder->summary, forceindex) == -1) {
-		camel_exception_set(ex, CAMEL_EXCEPTION_FOLDER_INVALID,	/* FIXME: right error code */
-				    "Could not create summary");
-		return;
-	}
-}
-
-static void
-mbox_sync(CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-
-	if (expunge)
-		mbox_expunge(folder, ex);
-	else
-		camel_mbox_summary_sync(mbox_folder->summary, FALSE, ex);
-
-	/* save index */
-	if (mbox_folder->index)
-		ibex_save(mbox_folder->index);
-	if (mbox_folder->summary)
-		camel_folder_summary_save(CAMEL_FOLDER_SUMMARY(mbox_folder->summary));
-}
-
-static void
-mbox_expunge(CamelFolder *folder, CamelException *ex)
-{
-	CamelMboxFolder *mbox = CAMEL_MBOX_FOLDER(folder);
-
-	camel_mbox_summary_sync(mbox->summary, TRUE, ex);
-
-	/* TODO: check it actually changed */
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "folder_changed", GINT_TO_POINTER(0));
-}
-
-static gint
-mbox_get_message_count(CamelFolder *folder)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-
-	g_return_val_if_fail(mbox_folder->summary != NULL, -1);
-
-	return camel_folder_summary_count(CAMEL_FOLDER_SUMMARY(mbox_folder->summary));
-}
-
-static gint
-mbox_get_unread_message_count(CamelFolder *folder)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-	CamelMessageInfo *info;
-	GPtrArray *infolist;
-	gint i, max, count = 0;
-
-	g_return_val_if_fail(mbox_folder->summary != NULL, -1);
-
-	max = camel_folder_summary_count(CAMEL_FOLDER_SUMMARY(mbox_folder->summary));
-	if (max == -1)
-		return -1;
-
-	infolist = mbox_get_summary(folder);
-
-	for (i = 0; i < infolist->len; i++) {
-		info = (CamelMessageInfo *) g_ptr_array_index(infolist, i);
-		if (!(info->flags & CAMEL_MESSAGE_SEEN))
-			count++;
-	}
-
-	return count;
-}
-
-/* FIXME: this may need some tweaking for performance? */
-static void
-mbox_append_message(CamelFolder *folder, CamelMimeMessage * message, const CamelMessageInfo * info, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-	CamelStream *output_stream = NULL, *filter_stream = NULL;
-	CamelMimeFilter *filter_from = NULL;
-	CamelMessageInfo *newinfo;
-	struct stat st;
-	off_t seek = -1;
-	char *xev, last;
-	guint32 uid;
-	char *fromline = NULL;
-
-	if (stat(mbox_folder->folder_file_path, &st) != 0)
-		goto fail;
-
-	output_stream = camel_stream_fs_new_with_name(mbox_folder->folder_file_path, O_RDWR, 0600);
-	if (output_stream == NULL)
-		goto fail;
-
-	if (st.st_size) {
-		seek = camel_seekable_stream_seek((CamelSeekableStream *) output_stream, st.st_size - 1, SEEK_SET);
-		if (++seek != st.st_size)
-			goto fail;
-
-		/* If the mbox doesn't end with a newline, fix that. */
-		if (camel_stream_read(output_stream, &last, 1) != 1)
-			goto fail;
-		if (last != '\n')
-			camel_stream_write(output_stream, "\n", 1);
-	} else
-		seek = 0;
-
-	/* assign a new x-evolution header/uid */
-	camel_medium_remove_header(CAMEL_MEDIUM(message), "X-Evolution");
-	uid = camel_folder_summary_next_uid(CAMEL_FOLDER_SUMMARY(mbox_folder->summary));
-	/* important that the header matches exactly 00000000-0000 */
-	xev = g_strdup_printf("%08x-%04x", uid, info ? info->flags & 0xFFFF : 0);
-	camel_medium_add_header(CAMEL_MEDIUM(message), "X-Evolution", xev);
-	g_free(xev);
-
-	/* we must write this to the non-filtered stream ... */
-	fromline = camel_mbox_summary_build_from(CAMEL_MIME_PART(message)->headers);
-	if (camel_stream_write_string(output_stream, fromline) == -1)
-		goto fail;
-
-	/* and write the content to the filtering stream, that translated '\nFrom' into '\n>From' */
-	filter_stream = (CamelStream *) camel_stream_filter_new_with_stream(output_stream);
-	filter_from = (CamelMimeFilter *) camel_mime_filter_from_new();
-	camel_stream_filter_add((CamelStreamFilter *) filter_stream, filter_from);
-	if (camel_data_wrapper_write_to_stream(CAMEL_DATA_WRAPPER(message), filter_stream) == -1)
-		goto fail;
-
-	if (camel_stream_close(filter_stream) == -1)
-		goto fail;
-
-	/* filter stream ref's the output stream itself, so we need to unref it too */
-	camel_object_unref(CAMEL_OBJECT(filter_from));
-	camel_object_unref(CAMEL_OBJECT(filter_stream));
-	camel_object_unref(CAMEL_OBJECT(output_stream));
-	g_free(fromline);
-
-	/* force a summary update - will only update from the new position, if it can */
-	if (camel_mbox_summary_update(mbox_folder->summary, seek) == 0) {
-		char uidstr[16];
-
-		sprintf(uidstr, "%u", uid);
-		newinfo = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mbox_folder->summary), uidstr);
-
-		if (info && newinfo) {
-			CamelFlag *flag = info->user_flags;
-			CamelTag *tag = info->user_tags;
-
-			while (flag) {
-				camel_flag_set(&(newinfo->user_flags), flag->name, TRUE);
-				flag = flag->next;
-			}
-
-			while (tag) {
-				camel_tag_set(&(newinfo->user_tags), tag->name, tag->value);
-				tag = tag->next;
-			}
-		}
-		camel_object_trigger_event(CAMEL_OBJECT(folder), "folder_changed", GINT_TO_POINTER(0));
-	}
-
-	return;
-
-      fail:
-	if (camel_exception_is_set(ex)) {
-		camel_exception_setv(ex, camel_exception_get_id(ex),
-				     "Cannot append message to mbox file: %s", camel_exception_get_description(ex));
-	} else {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     "Cannot append message to mbox file: %s", g_strerror(errno));
-	}
-	if (filter_stream) {
-		/*camel_stream_close (filter_stream); */
-		camel_object_unref(CAMEL_OBJECT(filter_stream));
-	}
-	if (output_stream)
-		camel_object_unref(CAMEL_OBJECT(output_stream));
-
-	if (filter_from)
-		camel_object_unref(CAMEL_OBJECT(filter_from));
-
-	g_free(fromline);
-
-	/* make sure the file isn't munged by us */
-	if (seek != -1) {
-		int fd = open(mbox_folder->folder_file_path, O_WRONLY, 0600);
-
-		if (fd != -1) {
-			ftruncate(fd, st.st_size);
-			close(fd);
-		}
-	}
-}
-
-static GPtrArray *
-mbox_get_uids(CamelFolder *folder)
-{
-	GPtrArray *array;
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-	int i, count;
-
-	count = camel_folder_summary_count(CAMEL_FOLDER_SUMMARY(mbox_folder->summary));
-	array = g_ptr_array_new();
-	g_ptr_array_set_size(array, count);
-	for (i = 0; i < count; i++) {
-		CamelMboxMessageInfo *info =
-		    (CamelMboxMessageInfo *) camel_folder_summary_index(CAMEL_FOLDER_SUMMARY(mbox_folder->summary), i);
-
-		array->pdata[i] = g_strdup(info->info.uid);
-	}
-
-	return array;
-}
-
-static GPtrArray *
-mbox_get_subfolder_names(CamelFolder *folder)
-{
-	/* No subfolders. */
-	return g_ptr_array_new();
-}
-
-static CamelMimeMessage *
-mbox_get_message(CamelFolder *folder, const gchar * uid, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-	CamelStream *message_stream = NULL;
-	CamelMimeMessage *message = NULL;
-	CamelMboxMessageInfo *info;
-	CamelMimeParser *parser = NULL;
-	char *buffer;
-	int len;
-
-	/* get the message summary info */
-	info = (CamelMboxMessageInfo *) camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mbox_folder->summary), uid);
-
-	if (info == NULL) {
-		errno = ENOENT;
-		goto fail;
-	}
-
-	/* if this has no content, its an error in the library */
-	g_assert(info->info.content);
-	g_assert(info->frompos != -1);
-
-	/* where we read from */
-	message_stream = camel_stream_fs_new_with_name(mbox_folder->folder_file_path, O_RDONLY, 0);
-	if (message_stream == NULL)
-		goto fail;
-
-	/* we use a parser to verify the message is correct, and in the correct position */
-	parser = camel_mime_parser_new();
-	camel_mime_parser_init_with_stream(parser, message_stream);
-	camel_object_unref(CAMEL_OBJECT(message_stream));
-	camel_mime_parser_scan_from(parser, TRUE);
-
-	camel_mime_parser_seek(parser, info->frompos, SEEK_SET);
-	if (camel_mime_parser_step(parser, &buffer, &len) != HSCAN_FROM) {
-		g_warning("File appears truncated");
-		goto fail;
-	}
-
-	if (camel_mime_parser_tell_start_from(parser) != info->frompos) {
-		g_warning("Summary doesn't match the folder contents!  eek!\n"
-			  "  expecting offset %ld got %ld", (long int)info->frompos,
-			  (long int)camel_mime_parser_tell_start_from(parser));
-		errno = EINVAL;
-		goto fail;
-	}
-
-	message = camel_mime_message_new();
-	if (camel_mime_part_construct_from_parser(CAMEL_MIME_PART(message), parser) == -1) {
-		g_warning("Construction failed");
-		goto fail;
-	}
-	camel_object_unref(CAMEL_OBJECT(parser));
-
-	return message;
-
-      fail:
-	camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID, "Cannot get message: %s", g_strerror(errno));
-
-	if (parser)
-		camel_object_unref(CAMEL_OBJECT(parser));
-	if (message)
-		camel_object_unref(CAMEL_OBJECT(message));
-
-	return NULL;
-}
-
-GPtrArray *
-mbox_get_summary(CamelFolder *folder)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-
-	return CAMEL_FOLDER_SUMMARY(mbox_folder->summary)->messages;
-}
-
-/* get a single message info, by uid */
-static const CamelMessageInfo *
-mbox_get_message_info(CamelFolder *folder, const char *uid)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-
-	return camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mbox_folder->summary), uid);
-}
-
-static GPtrArray *
-mbox_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-
-	if (mbox_folder->search == NULL) {
-		mbox_folder->search = camel_folder_search_new();
-	}
-
-	camel_folder_search_set_folder(mbox_folder->search, folder);
-	if (mbox_folder->summary) {
-		/* FIXME: dont access summary array directly? */
-		camel_folder_search_set_summary(mbox_folder->search,
-						CAMEL_FOLDER_SUMMARY(mbox_folder->summary)->messages);
-	}
-
-	camel_folder_search_set_body_index(mbox_folder->search, mbox_folder->index);
-
-	return camel_folder_search_execute_expression(mbox_folder->search, expression, ex);
-}
-
-static void
-mbox_search_free(CamelFolder *folder, GPtrArray * result)
-{
-	CamelMboxFolder *mbox_folder = CAMEL_MBOX_FOLDER(folder);
-
-	camel_folder_search_free_result(mbox_folder->search, result);
-}
-
-static guint32
-mbox_get_message_flags(CamelFolder *folder, const char *uid)
-{
-	CamelMessageInfo *info;
-	CamelMboxFolder *mf = CAMEL_MBOX_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_val_if_fail(info != NULL, 0);
-
-	return info->flags;
-}
-
-static void
-mbox_set_message_flags(CamelFolder *folder, const char *uid, guint32 flags, guint32 set)
-{
-	CamelMessageInfo *info;
-	CamelMboxFolder *mf = CAMEL_MBOX_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_if_fail(info != NULL);
-
-	info->flags = (info->flags & ~flags) | (set & flags) | CAMEL_MESSAGE_FOLDER_FLAGGED;
-	camel_folder_summary_touch(CAMEL_FOLDER_SUMMARY(mf->summary));
-
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "message_changed", (char *) uid);
-}
-
-static gboolean
-mbox_get_message_user_flag(CamelFolder *folder, const char *uid, const char *name)
-{
-	CamelMessageInfo *info;
-	CamelMboxFolder *mf = CAMEL_MBOX_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_val_if_fail(info != NULL, FALSE);
-
-	return camel_flag_get(&info->user_flags, name);
-}
-
-static void
-mbox_set_message_user_flag(CamelFolder *folder, const char *uid, const char *name, gboolean value)
-{
-	CamelMessageInfo *info;
-	CamelMboxFolder *mf = CAMEL_MBOX_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_if_fail(info != NULL);
-
-	camel_flag_set(&info->user_flags, name, value);
-	info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-	camel_folder_summary_touch(CAMEL_FOLDER_SUMMARY(mf->summary));
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "message_changed", (char *) uid);
-}
-
-static const char *mbox_get_message_user_tag(CamelFolder *folder, const char *uid, const char *name)
-{
-	CamelMessageInfo *info;
-	CamelMboxFolder *mf = CAMEL_MBOX_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_val_if_fail(info != NULL, FALSE);
-
-	return camel_tag_get(&info->user_tags, name);
-}
-
-static void mbox_set_message_user_tag(CamelFolder *folder, const char *uid, const char *name, const char *value)
-{
-	CamelMessageInfo *info;
-	CamelMboxFolder *mf = CAMEL_MBOX_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_if_fail(info != NULL);
-
-	camel_tag_set(&info->user_tags, name, value);
-	info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-	camel_folder_summary_touch(CAMEL_FOLDER_SUMMARY(mf->summary));
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "message_changed", (char *) uid);
-}
-
-
diff --git a/camel/providers/mbox/camel-mbox-folder.h b/camel/providers/mbox/camel-mbox-folder.h
deleted file mode 100644
index 7c5558f362..0000000000
--- a/camel/providers/mbox/camel-mbox-folder.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-folder.h : Abstract class for an email folder */
-
-/* 
- *
- * Author : Bertrand Guiheneuf  
- *
- * Copyright (C) 1999 Helix Code .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MBOX_FOLDER_H
-#define CAMEL_MBOX_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-#include 
-#include 
-#include "camel-mbox-summary.h"
-
-/*  #include "camel-store.h" */
-
-#define CAMEL_MBOX_FOLDER_TYPE     (camel_mbox_folder_get_type ())
-#define CAMEL_MBOX_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MBOX_FOLDER_TYPE, CamelMboxFolder))
-#define CAMEL_MBOX_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MBOX_FOLDER_TYPE, CamelMboxFolderClass))
-#define IS_CAMEL_MBOX_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MBOX_FOLDER_TYPE))
-
-typedef struct {
-	CamelFolder parent_object;
-
-	gchar *folder_file_path;   /* contains the messages */
-	gchar *summary_file_path;  /* contains the messages summary */
-	gchar *folder_dir_path;    /* contains the subfolders */
-	gchar *index_file_path;	   /* index of body contents */
-
-	ibex *index;		   /* index for this folder */
-	CamelMboxSummary *summary;
-	CamelFolderSearch *search; /* used to run searches, we just use the real thing (tm) */
-} CamelMboxFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelMboxFolderClass;
-
-
-/* public methods */
-
-/* Standard Camel function */
-CamelType camel_mbox_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MBOX_FOLDER_H */
diff --git a/camel/providers/mbox/camel-mbox-provider.c b/camel/providers/mbox/camel-mbox-provider.c
deleted file mode 100644
index d4048e1be3..0000000000
--- a/camel/providers/mbox/camel-mbox-provider.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-provider.c: mbox provider registration code */
-
-/* 
- * Authors :
- *   Bertrand Guiheneuf 
- *
- * Copyright (C) 2000 HelixCode (www.helixcode.com).
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-mbox-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static CamelProvider mbox_provider = {
-	"mbox",
-	"UNIX mbox-format mail files",
-
-	"For reading mail delivered by the local system, and for "
-	"storing mail on local disk.",
-
-	"mail",
-
-	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	mbox_provider.object_types[CAMEL_PROVIDER_STORE] =
-		camel_mbox_store_get_type();
-
-	mbox_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-
-	camel_session_register_provider (session, &mbox_provider);
-}
diff --git a/camel/providers/mbox/camel-mbox-store.c b/camel/providers/mbox/camel-mbox-store.c
deleted file mode 100644
index ed56e84407..0000000000
--- a/camel/providers/mbox/camel-mbox-store.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-store.c : class for an mbox store */
-
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc. 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-mbox-store.h"
-#include "camel-mbox-folder.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-
-/* Returns the class for a CamelMboxStore */
-#define CMBOXS_CLASS(so) CAMEL_MBOX_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static char *get_name (CamelService *service, gboolean brief);
-static CamelFolder *get_folder (CamelStore *store, const char *folder_name,
-				gboolean create, CamelException *ex);
-static void delete_folder (CamelStore *store, const char *folder_name,
-			   CamelException *ex);
-static void rename_folder(CamelStore *store, const char *old_name, const char *new_name, CamelException *ex);
-static char *get_folder_name (CamelStore *store, const char *folder_name,
-			      CamelException *ex);
-
-static void
-camel_mbox_store_class_init (CamelMboxStoreClass *camel_mbox_store_class)
-{
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_mbox_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS (camel_mbox_store_class);
-	
-	/* virtual method overload */
-	camel_service_class->get_name = get_name;
-
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-}
-
-static void
-camel_mbox_store_init (gpointer object, gpointer klass)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-	CamelStore *store = CAMEL_STORE (object);
-
-	service->url_flags = CAMEL_SERVICE_URL_NEED_PATH;
-
-	/* mbox names are filenames, so they are case-sensitive. */
-	store->folders = g_hash_table_new (g_str_hash, g_str_equal);
-}
-
-CamelType
-camel_mbox_store_get_type (void)
-{
-	static CamelType camel_mbox_store_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_mbox_store_type == CAMEL_INVALID_TYPE)	{
-		camel_mbox_store_type = camel_type_register (CAMEL_STORE_TYPE, "CamelMboxStore",
-							     sizeof (CamelMboxStore),
-							     sizeof (CamelMboxStoreClass),
-							     (CamelObjectClassInitFunc) camel_mbox_store_class_init,
-							     NULL,
-							     (CamelObjectInitFunc) camel_mbox_store_init,
-							     NULL);
-	}
-	
-	return camel_mbox_store_type;
-}
-
-const gchar *
-camel_mbox_store_get_toplevel_dir (CamelMboxStore *store)
-{
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-
-	g_assert (url != NULL);
-	return url->path;
-}
-
-static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name, gboolean create,
-	    CamelException *ex)
-{
-	CamelFolder *new_folder;
-	char *name;
-	struct stat st;
-
-	name = g_strdup_printf ("%s%s", CAMEL_SERVICE (store)->url->path,
-				folder_name);
-
-	if (stat (name, &st) == -1) {
-		int fd;
-
-		if (errno != ENOENT) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not open folder `%s':"
-					      "\n%s", folder_name,
-					      g_strerror (errno));
-			g_free (name);
-			return NULL;
-		}
-		if (!create) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					      "Folder `%s' does not exist.",
-					      folder_name);
-			g_free (name);
-			return NULL;
-		}
-
-		fd = open (name, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
-		g_free (name);
-		if (fd == -1) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not create folder `%s':"
-					      "\n%s", folder_name,
-					      g_strerror (errno));
-			return NULL;
-		}
-		close (fd);
-	} else if (!S_ISREG (st.st_mode)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      "`%s' is not a regular file.",
-				      name);
-		g_free (name);
-		return NULL;
-	} else
-		g_free (name);
-
-	new_folder =  CAMEL_FOLDER (camel_object_new (CAMEL_MBOX_FOLDER_TYPE));
-	
-	CF_CLASS (new_folder)->init (new_folder, store, NULL,
-				     folder_name, "/", TRUE, ex);
-	
-	return new_folder;
-}
-
-static void
-delete_folder (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	char *name, *name2;
-	struct stat st;
-	int status;
-
-	name = g_strdup_printf ("%s%s", CAMEL_SERVICE (store)->url->path, folder_name);
-	if (stat (name, &st) == -1) {
-		if (errno == ENOENT) {
-			/* file doesn't exist - it's kinda like deleting it ;-) */
-			g_free (name);
-			return;
-		}
-
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not delete folder `%s':\n%s",
-				      folder_name, g_strerror (errno));
-		g_free (name);
-		return;
-	}
-	
-	if (!S_ISREG (st.st_mode)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				      "`%s' is not a regular file.", name);
-		g_free (name);
-		return;
-	}
-	
-	if (st.st_size != 0) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_NON_EMPTY,
-				      "Folder `%s' is not empty. Not deleted.",
-				      folder_name);
-		g_free (name);
-		return;
-	}
-
-	/* Delete index and summary first, then the main file. */
-	name2 = g_strdup_printf ("%s.ibex", name);
-	status = unlink (name2);
-	g_free (name2);
-	if (status == 0 || errno == ENOENT) {
-		name2 = g_strdup_printf ("%s-ev-summary", name);
-		status = unlink (name2);
-		g_free (name2);
-	}
-	if (status == 0 || errno == ENOENT)
-		status = unlink (name);
-	g_free (name);
-
-	if (status == -1 && errno != ENOENT) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not delete folder `%s':\n%s",
-				      folder_name, g_strerror (errno));
-	}
-}
-
-static int xrename(const char *oldp, const char *newp, const char *prefix, const char *suffix, CamelException *ex)
-{
-	struct stat st;
-	char *old = g_strconcat(prefix, oldp, suffix, 0);
-	char *new = g_strconcat(prefix, newp, suffix, 0);
-	int ret = -1;
-
-	printf("renaming %s%s to %s%s\n", oldp, suffix, newp, suffix);
-
-	/* FIXME: this has races ... */
-	if (!(stat(new, &st) == -1 && errno==ENOENT)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     "Could not rename folder %s to %s: destination exists",
-				     old, new);
-	} else if (rename(old, new) == 0 || errno==ENOENT) {
-		ret = 0;
-	} else if (stat(old, &st) == -1 && errno==ENOENT && stat(new, &st) == 0) {
-		/* for nfs, check if the rename worked anyway ... */
-		ret = 0;
-	}
-	printf("success = %d\n", ret);
-
-	g_free(old);
-	g_free(new);
-	return ret;
-}
-
-static void rename_folder(CamelStore *store, const char *old, const char *new, CamelException *ex)
-{
-	char *path = CAMEL_SERVICE (store)->url->path;
-
-	/* try to rollback failures, has obvious races */
-	if (xrename(old, new, path, ".ibex", ex)) {
-		return;
-	}
-	if (xrename(old, new, path, "-ev-summary", ex)) {
-		xrename(new, old, path, ".ibex", ex);
-		return;
-	}
-	if (xrename(old, new, path, "", ex)) {
-		xrename(new, old, path, "-ev-summary", ex);
-		xrename(new, old, path, ".ibex", ex);
-	}
-}
-
-static char *
-get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	/* For now, we don't allow hieararchy. FIXME. */
-	if (strchr (folder_name + 1, '/')) {
-		camel_exception_set (ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-				     "Mbox folders may not be nested.");
-		return NULL;
-	}
-
-	return *folder_name == '/' ? g_strdup (folder_name) :
-		g_strdup_printf ("/%s", folder_name);
-}
-
-static char *
-get_name (CamelService *service, gboolean brief)
-{
-	if (brief)
-		return g_strdup (service->url->path);
-	else
-		return g_strdup_printf ("Local mail file %s", service->url->path);
-}
diff --git a/camel/providers/mbox/camel-mbox-store.h b/camel/providers/mbox/camel-mbox-store.h
deleted file mode 100644
index 7b298b67f6..0000000000
--- a/camel/providers/mbox/camel-mbox-store.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-store.h : class for an mbox store */
-
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc. 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_MBOX_STORE_H
-#define CAMEL_MBOX_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-store.h"
-
-#define CAMEL_MBOX_STORE_TYPE     (camel_mbox_store_get_type ())
-#define CAMEL_MBOX_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MBOX_STORE_TYPE, CamelMboxStore))
-#define CAMEL_MBOX_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MBOX_STORE_TYPE, CamelMboxStoreClass))
-#define IS_CAMEL_MBOX_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MBOX_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-	
-} CamelMboxStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelMboxStoreClass;
-
-
-/* public methods */
-
-/* Standard Camel function */
-CamelType camel_mbox_store_get_type (void);
-
-const gchar *camel_mbox_store_get_toplevel_dir (CamelMboxStore *store);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_MBOX_STORE_H */
-
-
diff --git a/camel/providers/mbox/camel-mbox-summary.c b/camel/providers/mbox/camel-mbox-summary.c
deleted file mode 100644
index 2a297594d7..0000000000
--- a/camel/providers/mbox/camel-mbox-summary.c
+++ /dev/null
@@ -1,872 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#include "camel-mbox-summary.h"
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define io(x)
-#define d(x)
-
-#define CAMEL_MBOX_SUMMARY_VERSION (0x1000)
-
-struct _CamelMboxSummaryPrivate {
-};
-
-#define _PRIVATE(o) (((CamelMboxSummary *)(o))->priv)
-
-static int summary_header_load (CamelFolderSummary *, FILE *);
-static int summary_header_save (CamelFolderSummary *, FILE *);
-
-static CamelMessageInfo * message_info_new (CamelFolderSummary *, struct _header_raw *);
-static CamelMessageInfo * message_info_new_from_parser (CamelFolderSummary *, CamelMimeParser *);
-static CamelMessageInfo * message_info_load (CamelFolderSummary *, FILE *);
-static int		  message_info_save (CamelFolderSummary *, FILE *, CamelMessageInfo *);
-/*static void		  message_info_free (CamelFolderSummary *, CamelMessageInfo *);*/
-
-static void camel_mbox_summary_class_init (CamelMboxSummaryClass *klass);
-static void camel_mbox_summary_init       (CamelMboxSummary *obj);
-static void camel_mbox_summary_finalise   (CamelObject *obj);
-
-static CamelFolderSummaryClass *camel_mbox_summary_parent;
-
-CamelType
-camel_mbox_summary_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_folder_summary_get_type (), "CamelMboxSummary",
-					    sizeof (CamelMboxSummary),
-					    sizeof (CamelMboxSummaryClass),
-					    (CamelObjectClassInitFunc) camel_mbox_summary_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_mbox_summary_init,
-					    (CamelObjectFinalizeFunc) camel_mbox_summary_finalise);
-	}
-	
-	return type;
-}
-
-static void
-camel_mbox_summary_class_init (CamelMboxSummaryClass *klass)
-{
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *) klass;
-	
-	camel_mbox_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs (camel_folder_summary_get_type ()));
-
-	sklass->summary_header_load = summary_header_load;
-	sklass->summary_header_save = summary_header_save;
-
-	sklass->message_info_new  = message_info_new;
-	sklass->message_info_new_from_parser = message_info_new_from_parser;
-	sklass->message_info_load = message_info_load;
-	sklass->message_info_save = message_info_save;
-	/*sklass->message_info_free = message_info_free;*/
-}
-
-static void
-camel_mbox_summary_init (CamelMboxSummary *obj)
-{
-	struct _CamelMboxSummaryPrivate *p;
-	struct _CamelFolderSummary *s = (CamelFolderSummary *)obj;
-
-	p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
-
-	/* subclasses need to set the right instance data sizes */
-	s->message_info_size = sizeof(CamelMboxMessageInfo);
-	s->content_info_size = sizeof(CamelMboxMessageContentInfo);
-
-	/* and a unique file version */
-	s->version += CAMEL_MBOX_SUMMARY_VERSION;
-}
-
-static void
-camel_mbox_summary_finalise (CamelObject *obj)
-{
-	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY (obj);
-
-	g_free (mbs->folder_path);
-}
-
-/**
- * camel_mbox_summary_new:
- *
- * Create a new CamelMboxSummary object.
- * 
- * Return value: A new CamelMboxSummary widget.
- **/
-CamelMboxSummary *
-camel_mbox_summary_new (const char *filename, const char *mbox_name, ibex *index)
-{
-	CamelMboxSummary *new = CAMEL_MBOX_SUMMARY (camel_object_new (camel_mbox_summary_get_type ()));
-	
-	if (new) {
-		/* ?? */
-		camel_folder_summary_set_build_content (CAMEL_FOLDER_SUMMARY (new), TRUE);
-		camel_folder_summary_set_filename (CAMEL_FOLDER_SUMMARY (new), filename);
-		new->folder_path = g_strdup (mbox_name);
-		new->index = index;
-	}
-	return new;
-}
-
-static int
-summary_header_load (CamelFolderSummary *s, FILE *in)
-{
-	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY (s);
-
-	if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->summary_header_load (s, in) == -1)
-		return -1;
-
-	return camel_folder_summary_decode_uint32 (in, &mbs->folder_size);
-}
-
-static int
-summary_header_save (CamelFolderSummary *s, FILE *out)
-{
-	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY (s);
-
-	if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->summary_header_save (s, out) == -1)
-		return -1;
-
-	return camel_folder_summary_encode_uint32 (out, mbs->folder_size);
-}
-
-static int
-header_evolution_decode (const char *in, guint32 *uid, guint32 *flags)
-{
-        char *header;
-	
-        if (in && (header = header_token_decode(in))) {
-                if (strlen (header) == strlen ("00000000-0000")
-                    && sscanf (header, "%08x-%04x", uid, flags) == 2) {
-                        g_free (header);
-                        return *uid;
-                }
-                g_free (header);
-        }
-
-        return -1;
-}
-
-static char *
-header_evolution_encode (guint32 uid, guint32 flags)
-{
-	return g_strdup_printf ("%08x-%04x", uid, flags & 0xffff);
-}
-
-static CamelMessageInfo *
-message_info_new (CamelFolderSummary *s, struct _header_raw *h)
-{
-	CamelMessageInfo *mi;
-
-	mi = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_new (s, h);
-	if (mi) {
-		const char *xev;
-		guint32 uid, flags;
-		CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
-
-		xev = header_raw_find (&h, "X-Evolution", NULL);
-		if (xev && header_evolution_decode(xev, &uid, &flags) != -1) {
-			g_free (mi->uid);
-			mi->uid = g_strdup_printf ("%u", uid);
-			mi->flags = flags;
-		} else {
-			/* to indicate it has no xev header? */
-			mi->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED | CAMEL_MESSAGE_FOLDER_NOXEV;
-			mi->uid = g_strdup_printf ("%u", camel_folder_summary_next_uid (s));
-		}
-		mbi->frompos = -1;
-	}
-	
-	return mi;
-}
-
-static CamelMessageInfo *
-message_info_new_from_parser (CamelFolderSummary *s, CamelMimeParser *mp)
-{
-	CamelMessageInfo *mi;
-	CamelMboxSummary *mbs = CAMEL_MBOX_SUMMARY (s);
-
-	mi = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_new_from_parser (s, mp);
-	if (mi) {
-		CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
-
-		mbi->frompos = camel_mime_parser_tell_start_from (mp);
-
-		/* do we want to index this message as we add it, as well? */
-		if (mbs->index_force
-		    || (mi->flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0
-		    || !ibex_contains_name(mbs->index, mi->uid)) {
-			
-			camel_folder_summary_set_index (s, mbs->index);
-		} else {
-			camel_folder_summary_set_index (s, NULL);
-		}
-	}
-	
-	return mi;
-}
-
-static CamelMessageInfo *
-message_info_load (CamelFolderSummary *s, FILE *in)
-{
-	CamelMessageInfo *mi;
-
-	io (printf ("loading mbox message info\n"));
-
-	mi = ((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_load (s, in);
-	if (mi) {
-		guint32 position;
-		CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
-
-		camel_folder_summary_decode_uint32 (in, &position);
-		mbi->frompos = position;
-	}
-	
-	return mi;
-}
-
-static int
-message_info_save (CamelFolderSummary *s, FILE *out, CamelMessageInfo *mi)
-{
-	CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
-
-	io (printf ("saving mbox message info\n"));
-
-	((CamelFolderSummaryClass *)camel_mbox_summary_parent)->message_info_save (s, out, mi);
-
-	return camel_folder_summary_encode_uint32 (out, mbi->frompos);
-}
-
-static int
-summary_rebuild (CamelMboxSummary *mbs, off_t offset)
-{
-	CamelFolderSummary *s = CAMEL_FOLDER_SUMMARY (mbs);
-	CamelMimeParser *mp;
-	int fd;
-	int ok = 0;
-
-	fd = open (mbs->folder_path, O_RDONLY);
-	if (fd == -1) {
-		printf ("%s failed to open: %s", mbs->folder_path, strerror (errno));
-		return -1;
-	}
-	
-	mp = camel_mime_parser_new ();
-	camel_mime_parser_init_with_fd (mp, fd);
-	camel_mime_parser_scan_from (mp, TRUE);
-	camel_mime_parser_seek (mp, offset, SEEK_SET);
-
-	if (offset > 0) {
-		if (camel_mime_parser_step (mp, NULL, NULL) == HSCAN_FROM) {
-			if (camel_mime_parser_tell_start_from (mp) != offset) {
-				g_warning ("The next message didn't start where I expected\nbuilding summary from start");
-				camel_mime_parser_drop_step (mp);
-				offset = 0;
-				camel_mime_parser_seek (mp, offset, SEEK_SET);
-				camel_folder_summary_clear (CAMEL_FOLDER_SUMMARY (mbs));
-			} else {
-				camel_mime_parser_unstep (mp);
-			}
-		} else {
-			camel_object_unref (CAMEL_OBJECT (mp));
-			/* end of file - no content? */
-			return -1;
-		}
-	}
-
-	while (camel_mime_parser_step (mp, NULL, NULL) == HSCAN_FROM) {
-		CamelMessageInfo *info;
-
-		info = camel_folder_summary_add_from_parser (CAMEL_FOLDER_SUMMARY (mbs), mp);
-		if (info == NULL) {
-			printf ("Could not build info from file?\n");
-			ok = -1;
-			break;
-		}
-
-		g_assert (camel_mime_parser_step (mp, NULL, NULL) == HSCAN_FROM_END);
-	}
-
-	camel_object_unref (CAMEL_OBJECT (mp));
-	
-	/* update the file size/mtime in the summary */
-	if (ok != -1) {
-		struct stat st;
-
-		if (stat (mbs->folder_path, &st) == 0) {
-			mbs->folder_size = st.st_size;
-			s->time = st.st_mtime;
-		}
-	}
-
-	return ok;
-}
-
-int
-camel_mbox_summary_update(CamelMboxSummary *mbs, off_t offset)
-{
-	int ret;
-
-	mbs->index_force = FALSE;
-	ret = summary_rebuild(mbs, offset);
-
-#if 0
-#warning "Saving full summary and index after every summarisation is slow ..."
-	if (ret != -1) {
-		if (camel_folder_summary_save((CamelFolderSummary *)mbs) == -1)
-			g_warning("Could not save summary: %s", strerror(errno));
-		if (mbs->index)
-			ibex_save(mbs->index);
-	}
-#endif
-	return ret;
-}
-
-int
-camel_mbox_summary_load(CamelMboxSummary *mbs, int forceindex)
-{
-	CamelFolderSummary *s = CAMEL_FOLDER_SUMMARY(mbs);
-	struct stat st;
-	int ret = 0;
-	off_t minstart;
-
-	mbs->index_force = forceindex;
-
-	/* is the summary out of date? */
-	if (stat(mbs->folder_path, &st) == -1) {
-		camel_folder_summary_clear(s);
-		printf("Cannot summarise folder: '%s': %s\n", mbs->folder_path, strerror(errno));
-		return -1;
-	}
-
-	if (forceindex || camel_folder_summary_load(s) == -1) {
-		camel_folder_summary_clear(s);
-		ret = summary_rebuild(mbs, 0);
-	} else {
-		minstart = st.st_size;
-#if 0
-		/* find out the first unindexed message ... */
-		/* TODO: For this to work, it has to check that the message is
-		   indexable, and contains content ... maybe it cannot be done 
-		   properly? */
-		for (i = 0; i < camel_folder_summary_count(s); i++) {
-			CamelMessageInfo *mi = camel_folder_summary_index(s, i);
-
-			if (!ibex_contains_name(mbs->index, mi->uid)) {
-				minstart = ((CamelMboxMessageInfo *) mi)->frompos;
-				printf("Found unindexed message: %s\n", mi->uid);
-				break;
-			}
-		}
-#endif
-		/* is the summary uptodate? */
-		if (st.st_size == mbs->folder_size && st.st_mtime == s->time) {
-			if (minstart < st.st_size) {
-				/* FIXME: Only clear the messages and reindex from this point forward */
-				camel_folder_summary_clear(s);
-				ret = summary_rebuild(mbs, 0);
-			}
-		} else {
-			if (mbs->folder_size < st.st_size) {
-				if (minstart < mbs->folder_size) {
-					/* FIXME: only make it rebuild as necessary */
-					camel_folder_summary_clear(s);
-					ret = summary_rebuild(mbs, 0);
-				} else {
-					ret = summary_rebuild(mbs, mbs->folder_size);
-					/* If that fails, it might be because a message was changed
-					 * rather than appended... so try again from the beginning.
-					 */
-					if (ret == -1) {
-						camel_folder_summary_clear(s);
-						ret = summary_rebuild(mbs, 0);
-					}
-				}
-			} else {
-				camel_folder_summary_clear(s);
-				ret = summary_rebuild(mbs, 0);
-			}
-		}
-	}
-
-	if (ret != -1) {
-		mbs->folder_size = st.st_size;
-		s->time = st.st_mtime;
-		if (camel_folder_summary_save(s) == -1)
-			g_warning("Could not save summary: %s", strerror(errno));
-		if (mbs->index)
-			ibex_save(mbs->index);
-	}
-
-	return ret;
-}
-
-static int
-header_write(int fd, struct _header_raw *header, char *xevline)
-{
-	struct iovec iv[4];
-	int outlen = 0, len;
-
-	iv[1].iov_base = ":";
-	iv[1].iov_len = 1;
-	iv[3].iov_base = "\n";
-	iv[3].iov_len = 1;
-
-	while (header) {
-		if (strcasecmp(header->name, "X-Evolution")) {
-			iv[0].iov_base = header->name;
-			iv[0].iov_len = strlen(header->name);
-			iv[2].iov_base = header->value;
-			iv[2].iov_len = strlen(header->value);
-
-			do {
-				len = writev(fd, iv, 4);
-			} while (len == -1 && errno == EINTR);
-
-			if (len == -1)
-				return -1;
-			outlen += len;
-		}
-		header = header->next;
-	}
-
-	iv[0].iov_base = "X-Evolution: ";
-	iv[0].iov_len = strlen(iv[0].iov_base);
-	iv[1].iov_base = xevline;
-	iv[1].iov_len = strlen(xevline);
-	iv[2].iov_base = "\n\n";
-	iv[2].iov_len = 2;
-
-	do {
-		len = writev(fd, iv, 3);
-	} while (len == -1 && errno == EINTR);
-
-	if (len == -1)
-		return -1;
-
-	outlen += 1;
-
-	d(printf("Wrote %d bytes of headers\n", outlen));
-
-	return outlen;
-}
-
-static int
-copy_block(int fromfd, int tofd, off_t start, size_t bytes)
-{
-	char buffer[4096];
-	int written = 0;
-
-	d(printf("writing %d bytes ... ", bytes));
-
-	if (lseek(fromfd, start, SEEK_SET) != start)
-		return -1;
-
-	while (bytes > 0) {
-		int toread, towrite;
-
-		toread = bytes;
-		if (bytes > 4096)
-			toread = 4096;
-		else
-			toread = bytes;
-		do {
-			towrite = read(fromfd, buffer, toread);
-		} while (towrite == -1 && errno == EINTR);
-
-		if (towrite == -1)
-			return -1;
-
-		/* check for 'end of file' */
-		if (towrite == 0) {
-			d(printf("end of file?\n"));
-			break;
-		}
-
-		do {
-			toread = write(tofd, buffer, towrite);
-		} while (toread == -1 && errno == EINTR);
-
-		if (toread == -1)
-			return -1;
-
-		written += toread;
-		bytes -= toread;
-	}
-
-	d(printf("written %d bytes\n", written));
-
-	return written;
-}
-
-static char *tz_months[] = {
-	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-static char *tz_days[] = {
-	"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-};
-
-/* tries to build a From line, based on message headers */
-char *
-camel_mbox_summary_build_from(struct _header_raw *header)
-{
-	GString *out = g_string_new("From ");
-	char *ret;
-	const char *tmp;
-	time_t thetime;
-	int offset;
-	struct tm tm;
-
-	tmp = header_raw_find(&header, "Sender", NULL);
-	if (tmp == NULL)
-		tmp = header_raw_find(&header, "From", NULL);
-	if (tmp != NULL) {
-		struct _header_address *addr = header_address_decode(tmp);
-
-		tmp = NULL;
-		if (addr) {
-			if (addr->type == HEADER_ADDRESS_NAME) {
-				g_string_append(out, addr->v.addr);
-				tmp = "";
-			}
-			header_address_unref(addr);
-		}
-	}
-	if (tmp == NULL) {
-		g_string_append(out, "unknown@nodomain.now.au");
-	}
-
-	/* try use the received header to get the date */
-	tmp = header_raw_find(&header, "Received", NULL);
-	if (tmp) {
-		tmp = strrchr(tmp, ';');
-		if (tmp)
-			tmp++;
-	}
-
-	/* if there isn't one, try the Date field */
-	if (tmp == NULL)
-		tmp = header_raw_find(&header, "Date", NULL);
-
-	thetime = header_decode_date(tmp, &offset);
-
-	thetime += ((offset / 100) * (60 * 60)) + (offset % 100) * 60;
-
-	/* a pseudo, but still bogus attempt at thread safing the function */
-	memcpy(&tm, gmtime(&thetime), sizeof(tm));
-
-	g_string_sprintfa(out, " %s %s %d %02d:%02d:%02d %4d\n",
-			  tz_days[tm.tm_wday],
-			  tz_months[tm.tm_mon], tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_year + 1900);
-
-	ret = out->str;
-	g_string_free(out, FALSE);
-	return ret;
-}
-
-int
-camel_mbox_summary_sync(CamelMboxSummary *mbs, gboolean expunge, CamelException *ex)
-{
-	CamelMimeParser *mp = NULL;
-	int i, count;
-	CamelMboxMessageInfo *info;
-	CamelFolderSummary *s = CAMEL_FOLDER_SUMMARY(mbs);
-	int fd = -1, fdout = -1;
-	off_t offset = 0;
-	char *tmpname = NULL;
-	char *buffer, *xevnew = NULL;
-	const char *xev;
-	int len;
-	guint32 uid, flags;
-	int quick = TRUE, work = FALSE;
-	struct stat st;
-	char *fromline;
-
-	/* make sure we're in sync */
-	count = camel_folder_summary_count (s);
-	if (count > 0) {
-		CamelMessageInfo *mi = camel_folder_summary_index (s, count - 1);
-		camel_mbox_summary_update (mbs, mi->content->endpos);
-	} else {
-		camel_mbox_summary_update (mbs, 0);
-	}
-
-	/* check if we have any work to do */
-	d(printf ("Performing sync, %d messages in inbox\n", count));
-	for (i = 0; quick && i < count; i++) {
-		info = (CamelMboxMessageInfo *)camel_folder_summary_index (s, i);
-		if ((expunge && (info->info.flags & CAMEL_MESSAGE_DELETED)) ||
-		    (info->info.flags & CAMEL_MESSAGE_FOLDER_NOXEV))
-			quick = FALSE;
-		else
-			work |= (info->info.flags & CAMEL_MESSAGE_FOLDER_FLAGGED) != 0;
-	}
-
-	d(printf ("Options: %s %s %s\n", expunge ? "expunge" : "", quick ? "quick" : "", work ? "Work" : ""));
-
-	if (quick && !work)
-		return 0;
-
-	fd = open (mbs->folder_path, O_RDWR);
-	if (fd == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not open summary %s", mbs->folder_path);
-		return -1;
-	}
-
-	mp = camel_mime_parser_new ();
-	camel_mime_parser_scan_from (mp, TRUE);
-	camel_mime_parser_init_with_fd (mp, fd);
-
-	if (!quick) {
-		tmpname = alloca (strlen (mbs->folder_path) + 5);
-		sprintf (tmpname, "%s.tmp", mbs->folder_path);
-		d(printf ("Writing tmp file to %s\n", tmpname));
-	retry_out:
-		fdout = open (tmpname, O_WRONLY | O_CREAT | O_EXCL, 0600);
-		if (fdout == -1) {
-			if (errno == EEXIST)
-				if (unlink(tmpname) != -1)
-					goto retry_out;
-			
-			free (tmpname);
-			tmpname = NULL;
-			g_warning ("Something failed (yo!)");
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Cannot open temporary mailbox: %s", strerror (errno));
-			goto error;
-		}
-	}
-
-	for (i = 0; i < count; i++) {
-		off_t frompos, bodypos, lastpos;
-		/* This has to be an int, not an off_t, because that's
-		 * what camel_mime_parser_header returns... FIXME.
-		 */
-		int xevoffset;
-
-		info = (CamelMboxMessageInfo *)camel_folder_summary_index(s, i);
-
-		g_assert (info);
-
-		d(printf ("Looking at message %s\n", info->info.uid));
-
-		if (expunge && info->info.flags & CAMEL_MESSAGE_DELETED) {
-			d(printf ("Deleting %s\n", info->info.uid));
-
-			g_assert (!quick);
-			offset -= (info->info.content->endpos - info->frompos);
-			if (mbs->index)
-				ibex_unindex (mbs->index, info->info.uid);
-			camel_folder_summary_remove (s, (CamelMessageInfo *)info);
-			count--;
-			i--;
-			info = NULL;
-		} else if (info->info.flags & (CAMEL_MESSAGE_FOLDER_NOXEV | CAMEL_MESSAGE_FOLDER_FLAGGED)) {
-			int xevok = FALSE;
-
-			d(printf ("Updating header for %s flags = %08x\n", info->info.uid, info->info.flags));
-
-			/* find the next message, header parts */
-			camel_mime_parser_seek (mp, info->frompos, SEEK_SET);
-			if (camel_mime_parser_step (mp, &buffer, &len) != HSCAN_FROM) {
-				g_warning ("camel_mime_parser_step failed (1)");
-				goto error;
-			}
-
-			if (camel_mime_parser_tell_start_from (mp) != info->frompos) {
-				g_warning ("Summary/mbox mismatch, aborting sync");
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      "Summary mismatch, aborting sync");
-				goto error;
-			}
-			
-			if (camel_mime_parser_step (mp, &buffer, &len) == HSCAN_FROM_END) {
-				g_warning ("camel_mime_parser_step failed (2)");
-				goto error;
-			}
-
-			/* Check if the X-Evolution header is valid.  */
-
-			xev = camel_mime_parser_header (mp, "X-Evolution", &xevoffset);
-			if (xev && header_evolution_decode (xev, &uid, &flags) != -1)
-				xevok = TRUE;
-
-			xevnew = header_evolution_encode (strtoul (info->info.uid, NULL, 10), info->info.flags & 0xffff);
-			if (quick) {
-				if (!xevok) {
-					g_warning ("The summary told me I had an X-Evolution header, but i dont!");
-					camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-							      "Summary mismatch, X-Evolution header missing");
-					goto error;
-				}
-				buffer = g_strdup_printf ("X-Evolution: %s", xevnew);
-				lastpos = lseek (fd, 0, SEEK_CUR);
-				lseek (fd, xevoffset, SEEK_SET);
-				do {
-					len = write (fd, buffer, strlen (buffer));
-				} while (len == -1 && errno == EINTR);
-				lseek (fd, lastpos, SEEK_SET);
-				g_free (buffer);
-				if (len == -1) {
-					g_warning ("Yahoo!  len == -1");
-					goto error;
-				}
-			} else {
-				frompos = lseek (fdout, 0, SEEK_CUR);
-				fromline = camel_mbox_summary_build_from (camel_mime_parser_headers_raw (mp));
-				write (fdout, fromline, strlen(fromline));
-				g_free (fromline);
-				if (header_write (fdout, camel_mime_parser_headers_raw (mp), xevnew) == -1) {
-					d(printf ("Error writing to tmp mailbox\n"));
-					camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-							      "Error writing to temp mailbox: %s",
-							      strerror (errno));
-					goto error;
-				}
-				bodypos = lseek (fdout, 0, SEEK_CUR);
-				d(printf ("pos = %d, endpos = %d, bodypos = %d\n",
-					  (int) info->info.content->pos,
-					  (int) info->info.content->endpos,
-					  (int) info->info.content->bodypos));
-				if (copy_block (fd, fdout, info->info.content->bodypos,
-						info->info.content->endpos - info->info.content->bodypos) == -1) {
-					g_warning ("Cannot copy data to output fd");
-					camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-							      "Cannot copy data to output fd: %s",
-							      strerror (errno));
-					goto error;
-				}
-				info->frompos = frompos;
-				offset = bodypos - info->info.content->bodypos;
-			}
-			info->info.flags &= 0xffff;
-			g_free (xevnew);
-			xevnew = NULL;
-			camel_mime_parser_drop_step (mp);
-			camel_mime_parser_drop_step (mp);
-		} else {
-			if (!quick) {
-				if (copy_block (fd, fdout, info->frompos,
-						info->info.content->endpos - info->frompos) == -1) {
-					g_warning ("Cannot copy data to output fd");
-					camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-							      "Cannot copy data to output fd: %s",
-							      strerror (errno));
-					goto error;
-				}
-				/* update from pos here? */
-				info->frompos += offset;
-			} else {
-				d(printf ("Nothing to do for this message\n"));
-			}
-		}
-		if (!quick && info != NULL && offset != 0) {
-			d(printf ("offsetting content: %d\n", (int) offset));
-			camel_folder_summary_offset_content (info->info.content, offset);
-			d(printf ("pos = %d, endpos = %d, bodypos = %d\n",
-				  (int) info->info.content->pos,
-				  (int) info->info.content->endpos,
-				  (int) info->info.content->bodypos));
-		}
-	}
-
-	d(printf ("Closing folders\n"));
-
-	if (close (fd) == -1) {
-		g_warning ("Cannot close source folder: %s", strerror (errno));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not close source folder %s: %s",
-				      mbs->folder_path, strerror (errno));
-		goto error;
-	}
-
-	if (!quick) {
-		if (close (fdout) == -1) {
-			g_warning ("Cannot close tmp folder: %s", strerror (errno));
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not close temp folder: %s",
-					      strerror (errno));
-			goto error;
-		}
-
-		if (rename (tmpname, mbs->folder_path) == -1) {
-			g_warning ("Cannot rename folder: %s", strerror (errno));
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not rename folder: %s",
-					      strerror (errno));
-			goto error;
-		}
-		tmpname = NULL;
-
-		if (mbs->index)
-			ibex_save (mbs->index);
-	}
-
-	if (stat (mbs->folder_path, &st) == -1) {
-		g_warning ("Hmm...  stat(mbs->folder_path, &st) == -1");
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Unknown error: %s",
-				      strerror (errno));
-		goto error;
-	}
-
-	camel_folder_summary_touch (s);
-	s->time = st.st_mtime;
-	mbs->folder_size = st.st_size;
-	camel_folder_summary_save (s);
-
-	camel_object_unref (CAMEL_OBJECT (mp));
-	
-	return 0;
- error:
-	if (fd != -1)
-		close (fd);
-	
-	if (fdout != -1)
-		close (fdout);
-	
-	g_free (xevnew);
-	
-	if (tmpname)
-		unlink (tmpname);
-	if (mp)
-		camel_object_unref (CAMEL_OBJECT (mp));
-
-	return -1;
-}
-
-	
-	
-	
-	
diff --git a/camel/providers/mbox/camel-mbox-summary.h b/camel/providers/mbox/camel-mbox-summary.h
deleted file mode 100644
index 2462b72078..0000000000
--- a/camel/providers/mbox/camel-mbox-summary.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#ifndef _CAMEL_MBOX_SUMMARY_H
-#define _CAMEL_MBOX_SUMMARY_H
-
-#include 
-#include 
-#include 
-
-#define CAMEL_MBOX_SUMMARY(obj)         CAMEL_CHECK_CAST (obj, camel_mbox_summary_get_type (), CamelMboxSummary)
-#define CAMEL_MBOX_SUMMARY_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_mbox_summary_get_type (), CamelMboxSummaryClass)
-#define IS_CAMEL_MBOX_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_mbox_summary_get_type ())
-
-typedef struct _CamelMboxSummary      CamelMboxSummary;
-typedef struct _CamelMboxSummaryClass CamelMboxSummaryClass;
-
-/* extra summary flags */
-enum {
-	CAMEL_MESSAGE_FOLDER_NOXEV = 1<<17,
-};
-
-typedef struct _CamelMboxMessageContentInfo {
-	CamelMessageContentInfo info;
-} CamelMboxMessageContentInfo;
-
-typedef struct _CamelMboxMessageInfo {
-	CamelMessageInfo info;
-
-	off_t frompos;
-} CamelMboxMessageInfo;
-
-struct _CamelMboxSummary {
-	CamelFolderSummary parent;
-
-	struct _CamelMboxSummaryPrivate *priv;
-
-	char *folder_path;	/* name of matching folder */
-	size_t folder_size;	/* size of the mbox file, last sync */
-
-	ibex *index;
-	int index_force;	/* do we force index during creation? */
-};
-
-struct _CamelMboxSummaryClass {
-	CamelFolderSummaryClass parent_class;
-};
-
-guint		camel_mbox_summary_get_type	(void);
-CamelMboxSummary      *camel_mbox_summary_new	(const char *filename, const char *mbox_name, ibex *index);
-
-/* load/check the summary */
-int camel_mbox_summary_load(CamelMboxSummary *mbs, int forceindex);
-/* incremental update */
-int camel_mbox_summary_update(CamelMboxSummary *mbs, off_t offset);
-/* perform a folder sync or expunge, if needed */
-int camel_mbox_summary_sync (CamelMboxSummary *mbs, gboolean expunge, CamelException *ex);
-/* generate a From line from headers */
-char *camel_mbox_summary_build_from(struct _header_raw *header);
-
-#endif /* ! _CAMEL_MBOX_SUMMARY_H */
-
diff --git a/camel/providers/mbox/libcamelmbox.urls b/camel/providers/mbox/libcamelmbox.urls
deleted file mode 100644
index e021190356..0000000000
--- a/camel/providers/mbox/libcamelmbox.urls
+++ /dev/null
@@ -1 +0,0 @@
-mbox
diff --git a/camel/providers/mh/.cvsignore b/camel/providers/mh/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/mh/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/mh/Makefile.am b/camel/providers/mh/Makefile.am
deleted file mode 100644
index 62f447171b..0000000000
--- a/camel/providers/mh/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelmhincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelmh.la
-provider_DATA = libcamelmh.urls
-
-INCLUDES = -I.. \
-	-I$(srcdir)/..				\
-	-I$(top_srcdir)/camel			\
-	-I$(top_srcdir)/intl			\
-	-I$(top_srcdir)/libibex			\
-	-I$(top_srcdir)/e-util			\
-	-I$(top_srcdir)				\
-	-I$(includedir)				\
-	$(GTK_INCLUDEDIR)			\
-	-DG_LOG_DOMAIN=\"camel-mh-provider\"	
-
-libcamelmh_la_SOURCES = 			\
-	camel-mh-folder.c			\
-	camel-mh-provider.c			\
-	camel-mh-store.c			\
-	camel-mh-summary.c
-
-libcamelmhinclude_HEADERS =			\
-	camel-mh-folder.h			\
-	camel-mh-store.h			\
-	camel-mh-summary.h
-
-libcamelmh_la_LDFLAGS = -version-info 0:0:0
-
-libcamelmh_la_LIBADD = $(top_builddir)/e-util/libeutil.la $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-#libcamelmh_la_LIBADD = $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-
-EXTRA_DIST = libcamelmh.urls
-
diff --git a/camel/providers/mh/camel-mh-folder.c b/camel/providers/mh/camel-mh-folder.c
deleted file mode 100644
index eae8ce6b00..0000000000
--- a/camel/providers/mh/camel-mh-folder.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- */
-/* camel-mh-folder.c : Abstract class for an email folder */
-
-/* 
- * Authors: Michael Zucchi 
- *
- * Copyright (C) 1999, 2000 Helix Code Inc.
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-mh-folder.h"
-#include "camel-mh-store.h"
-#include "string-utils.h"
-#include "camel-stream-fs.h"
-#include "camel-mh-summary.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-filter-from.h"
-#include "camel-exception.h"
-
-#define d(x)
-
-static CamelFolderClass *parent_class = NULL;
-
-/* Returns the class for a CamelMhFolder */
-#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMHS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static void mh_init(CamelFolder * folder, CamelStore * parent_store,
-		      CamelFolder * parent_folder, const gchar * name,
-		      gchar * separator, gboolean path_begins_with_sep, CamelException * ex);
-
-static void mh_sync(CamelFolder * folder, gboolean expunge, CamelException * ex);
-static gint mh_get_message_count(CamelFolder * folder);
-static gint mh_get_unread_message_count(CamelFolder * folder);
-static void mh_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, CamelException * ex);
-static GPtrArray *mh_get_uids(CamelFolder * folder);
-static GPtrArray *mh_get_subfolder_names(CamelFolder * folder);
-static GPtrArray *mh_get_summary(CamelFolder * folder);
-static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex);
-
-static void mh_expunge(CamelFolder * folder, CamelException * ex);
-
-static const CamelMessageInfo *mh_get_message_info(CamelFolder * folder, const char *uid);
-
-static GPtrArray *mh_search_by_expression(CamelFolder * folder, const char *expression, CamelException * ex);
-static void mh_search_free(CamelFolder *folder, GPtrArray *result);
-
-static guint32 mh_get_message_flags(CamelFolder * folder, const char *uid);
-static void mh_set_message_flags(CamelFolder * folder, const char *uid, guint32 flags, guint32 set);
-static gboolean mh_get_message_user_flag(CamelFolder * folder, const char *uid, const char *name);
-static void mh_set_message_user_flag(CamelFolder * folder, const char *uid, const char *name, gboolean value);
-static const char *mh_get_message_user_tag(CamelFolder *folder, const char *uid, const char *name);
-static void mh_set_message_user_tag(CamelFolder *folder, const char *uid, const char *name, const char *value);
-
-static void mh_finalize(CamelObject * object);
-
-static void camel_mh_folder_class_init(CamelObjectClass * camel_mh_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS(camel_mh_folder_class);
-
-	parent_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs(camel_folder_get_type()));
-
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_folder_class->init = mh_init;
-	camel_folder_class->sync = mh_sync;
-	camel_folder_class->get_message_count = mh_get_message_count;
-	camel_folder_class->get_unread_message_count = mh_get_unread_message_count;
-	camel_folder_class->append_message = mh_append_message;
-	camel_folder_class->get_uids = mh_get_uids;
-	camel_folder_class->free_uids = camel_folder_free_deep;
-	camel_folder_class->get_subfolder_names = mh_get_subfolder_names;
-	camel_folder_class->free_subfolder_names = camel_folder_free_deep;
-	camel_folder_class->get_summary = mh_get_summary;
-	camel_folder_class->free_summary = camel_folder_free_nop;
-	camel_folder_class->expunge = mh_expunge;
-
-	camel_folder_class->get_message = mh_get_message;
-
-	camel_folder_class->search_by_expression = mh_search_by_expression;
-	camel_folder_class->search_free = mh_search_free;
-
-	camel_folder_class->get_message_info = mh_get_message_info;
-
-	camel_folder_class->get_message_flags = mh_get_message_flags;
-	camel_folder_class->set_message_flags = mh_set_message_flags;
-	camel_folder_class->get_message_user_flag = mh_get_message_user_flag;
-	camel_folder_class->set_message_user_flag = mh_set_message_user_flag;
-	camel_folder_class->get_message_user_tag = mh_get_message_user_tag;
-	camel_folder_class->set_message_user_tag = mh_set_message_user_tag;
-}
-
-static void mh_finalize(CamelObject * object)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(object);
-
-	g_free(mh_folder->folder_file_path);
-	g_free(mh_folder->summary_file_path);
-	g_free(mh_folder->folder_dir_path);
-	g_free(mh_folder->index_file_path);
-}
-
-CamelType camel_mh_folder_get_type(void)
-{
-	static CamelType camel_mh_folder_type = CAMEL_INVALID_TYPE;
-
-	if (camel_mh_folder_type == CAMEL_INVALID_TYPE) {
-		camel_mh_folder_type = camel_type_register(CAMEL_FOLDER_TYPE, "CamelMhFolder",
-							   sizeof(CamelMhFolder),
-							   sizeof(CamelMhFolderClass),
-							   (CamelObjectClassInitFunc) camel_mh_folder_class_init,
-							   NULL,
-							   (CamelObjectInitFunc) NULL,
-							   (CamelObjectFinalizeFunc) mh_finalize);
-	}
-
-	return camel_mh_folder_type;
-}
-
-static void
-mh_init(CamelFolder * folder, CamelStore * parent_store,
-	  CamelFolder * parent_folder, const gchar * name, gchar * separator,
-	  gboolean path_begins_with_sep, CamelException * ex)
-{
-	CamelMhFolder *mh_folder = (CamelMhFolder *) folder;
-	const gchar *root_dir_path;
-	gchar *real_name;
-	int forceindex;
-	struct stat st;
-
-	/* call parent method */
-	parent_class->init(folder, parent_store, parent_folder, name, separator, path_begins_with_sep, ex);
-	if (camel_exception_get_id(ex))
-		return;
-
-	/* we assume that the parent init method checks for the existance of @folder */
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = TRUE;
-	folder->has_summary_capability = TRUE;
-	folder->has_search_capability = TRUE;
-
-	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED |
-	    CAMEL_MESSAGE_DELETED |
-	    CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_USER;
-
-	mh_folder->summary = NULL;
-	mh_folder->search = NULL;
-
-	/* now set the name info */
-	g_free(mh_folder->folder_file_path);
-	g_free(mh_folder->folder_dir_path);
-	g_free(mh_folder->index_file_path);
-
-	root_dir_path = camel_mh_store_get_toplevel_dir(CAMEL_MH_STORE(folder->parent_store));
-
-	real_name = g_basename(folder->full_name);
-	mh_folder->folder_file_path = g_strdup_printf("%s/%s", root_dir_path, real_name);
-	mh_folder->summary_file_path = g_strdup_printf("%s/%s/ev-summary", root_dir_path, real_name);
-	mh_folder->folder_dir_path = g_strdup_printf("%s/%s", root_dir_path, real_name);
-	mh_folder->index_file_path = g_strdup_printf("%s/%s/ev-index.ibex", root_dir_path, real_name);
-
-	/* if we have no index file, force it */
-	forceindex = stat(mh_folder->index_file_path, &st) == -1;
-
-	mh_folder->index = ibex_open(mh_folder->index_file_path, O_CREAT | O_RDWR, 0600);
-	if (mh_folder->index == NULL) {
-		/* yes, this isn't fatal at all */
-		g_warning("Could not open/create index file: %s: indexing not performed", strerror(errno));
-	}
-
-	/* no summary (disk or memory), and we're proverbially screwed */
-	mh_folder->summary = camel_mh_summary_new(mh_folder->summary_file_path,
-						  mh_folder->folder_file_path,
-						  mh_folder->index);
-
-	if (camel_mh_summary_load(mh_folder->summary, forceindex) == -1) {
-		camel_exception_set(ex, CAMEL_EXCEPTION_FOLDER_INVALID,	/* FIXME: right error code */
-				    "Could not load or create summary");
-		return;
-	}
-}
-
-static void mh_sync(CamelFolder * folder, gboolean expunge, CamelException * ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-
-	if (expunge)
-		mh_expunge(folder, ex);
-	else
-		camel_mh_summary_sync(mh_folder->summary, FALSE, ex);
-
-	/* save index */
-	if (mh_folder->index)
-		ibex_save(mh_folder->index);
-	if (mh_folder->summary)
-		camel_folder_summary_save(CAMEL_FOLDER_SUMMARY(mh_folder->summary));
-}
-
-static void mh_expunge(CamelFolder * folder, CamelException * ex)
-{
-	CamelMhFolder *mh = CAMEL_MH_FOLDER(folder);
-
-	camel_mh_summary_sync(mh->summary, TRUE, ex);
-
-	/* TODO: check it actually changed */
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "folder_changed", GINT_TO_POINTER (0));
-}
-
-static gint mh_get_message_count(CamelFolder * folder)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-
-	g_return_val_if_fail(mh_folder->summary != NULL, -1);
-
-	return camel_folder_summary_count(CAMEL_FOLDER_SUMMARY(mh_folder->summary));
-}
-
-static gint mh_get_unread_message_count(CamelFolder * folder)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	CamelMessageInfo *info;
-	GPtrArray *infolist;
-	gint i, count = 0;
-
-	g_return_val_if_fail(mh_folder->summary != NULL, -1);
-
-	infolist = mh_get_summary(folder);
-
-	for (i = 0; i < infolist->len; i++) {
-		info = (CamelMessageInfo *) g_ptr_array_index(infolist, i);
-		if (!(info->flags & CAMEL_MESSAGE_SEEN))
-			count++;
-	}
-
-	return count;
-}
-
-static void mh_append_message(CamelFolder * folder, CamelMimeMessage * message, const CamelMessageInfo *info, CamelException * ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	CamelStream *output_stream = NULL;
-	char *name = NULL;
-	char *uid = NULL;
-	CamelMessageInfo *newinfo;
-
-	/* FIXME: probably needs additional locking */
-
-	/* keep trying uid's until we find one thats ok */
-	do {
-		g_free(uid);
-		g_free(name);
-		uid = camel_folder_summary_next_uid_string((CamelFolderSummary *)mh_folder->summary);
-		name = g_strdup_printf("%s/%s", mh_folder->folder_file_path, uid);
-		output_stream = camel_stream_fs_new_with_name(name, O_WRONLY|O_CREAT|O_EXCL, 0600);
-	} while (output_stream == NULL && errno == EEXIST);
-
-	if (output_stream == NULL)
-		goto fail;
-
-	/* write the message */
-	if (camel_data_wrapper_write_to_stream(CAMEL_DATA_WRAPPER(message), output_stream) == -1)
-		goto fail;
-
-	if (camel_stream_close(output_stream) == -1)
-		goto fail;
-
-	/* index/summarise the message.  Yes this re-reads it, its just simpler */
-	camel_mh_summary_add(mh_folder->summary, uid, TRUE);
-
-	if (info
-	    && (newinfo = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mh_folder->summary), uid))) {
-		CamelFlag *flag = info->user_flags;
-		CamelTag *tag = info->user_tags;
-
-		newinfo->flags = info->flags;
-		while (flag) {
-			camel_flag_set(&newinfo->user_flags, flag->name, TRUE);
-			flag = flag->next;
-		}
-		while (tag) {
-			camel_tag_set(&newinfo->user_tags, tag->name, tag->value);
-			tag = tag->next;
-		}
-	}
-
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "folder_changed", GPOINTER_TO_INT (0));
-	g_free(name);
-	g_free(uid);
-	return;
-
-fail:
-	if (camel_exception_is_set(ex)) {
-		camel_exception_setv(ex, camel_exception_get_id(ex),
-				     "Cannot append message to mh file: %s", camel_exception_get_description(ex));
-	} else {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     "Cannot append message to mh file: %s", g_strerror(errno));
-	}
-	if (output_stream)
-		camel_object_unref(CAMEL_OBJECT(output_stream));
-	if (name) {
-		unlink(name);
-		g_free(name);
-	}
-	g_free(uid);
-}
-
-static GPtrArray *mh_get_uids(CamelFolder * folder)
-{
-	GPtrArray *array;
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	int i, count;
-
-	count = camel_folder_summary_count(CAMEL_FOLDER_SUMMARY(mh_folder->summary));
-	array = g_ptr_array_new();
-	g_ptr_array_set_size(array, count);
-	for (i = 0; i < count; i++) {
-		CamelMessageInfo *info =
-			camel_folder_summary_index(CAMEL_FOLDER_SUMMARY(mh_folder->summary), i);
-
-		array->pdata[i] = g_strdup(info->uid);
-	}
-
-	return array;
-}
-
-static GPtrArray *mh_get_subfolder_names(CamelFolder * folder)
-{
-	/* FIXME: scan for sub-folders */
-	/* No subfolders. */
-	return g_ptr_array_new();
-}
-
-static CamelMimeMessage *mh_get_message(CamelFolder * folder, const gchar * uid, CamelException * ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-	CamelStream *message_stream = NULL;
-	CamelMimeMessage *message = NULL;
-	CamelMessageInfo *info;
-	char *name;
-
-	name = g_strdup_printf("%s/%s", mh_folder->folder_file_path, uid);
-
-	/* get the message summary info */
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mh_folder->summary), uid);
-
-	if (info == NULL) {
-		errno = ENOENT;
-		goto fail;
-	}
-
-	message_stream = camel_stream_fs_new_with_name(name, O_RDONLY, 0);
-
-	/* where we read from */
-	if (message_stream == NULL)
-		goto fail;
-
-	message = camel_mime_message_new();
-	if (camel_data_wrapper_construct_from_stream(CAMEL_DATA_WRAPPER(message), message_stream) == -1) {
-		g_warning("Construction failed");
-		errno = EINVAL;
-		goto fail;
-	}
-	camel_object_unref(CAMEL_OBJECT(message_stream));
-	g_free(name);
-
-	return message;
-
-fail:
-	camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID, "Cannot get message: %s\n  %s",
-			     name, g_strerror(errno));
-
-	if (message_stream)
-		camel_object_unref(CAMEL_OBJECT(message_stream));
-
-	if (message)
-		camel_object_unref(CAMEL_OBJECT(message));
-
-	g_free(name);
-
-	return NULL;
-}
-
-GPtrArray *mh_get_summary(CamelFolder * folder)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-
-	return CAMEL_FOLDER_SUMMARY(mh_folder->summary)->messages;
-}
-
-/* get a single message info, by uid */
-static const CamelMessageInfo *mh_get_message_info(CamelFolder * folder, const char *uid)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-
-	return camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mh_folder->summary), uid);
-}
-
-static GPtrArray *mh_search_by_expression(CamelFolder * folder, const char *expression, CamelException * ex)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER(folder);
-
-	if (mh_folder->search == NULL) {
-		mh_folder->search = camel_folder_search_new();
-	}
-
-	camel_folder_search_set_folder(mh_folder->search, folder);
-	if (mh_folder->summary) {
-		/* FIXME: dont access summary array directly? */
-		camel_folder_search_set_summary(mh_folder->search,
-						CAMEL_FOLDER_SUMMARY(mh_folder->summary)->messages);
-	}
-
-	camel_folder_search_set_body_index(mh_folder->search, mh_folder->index);
-
-	return camel_folder_search_execute_expression(mh_folder->search, expression, ex);
-}
-
-static void mh_search_free(CamelFolder *folder, GPtrArray *result)
-{
-	CamelMhFolder *mh_folder = CAMEL_MH_FOLDER (folder);
-
-	camel_folder_search_free_result(mh_folder->search, result);
-}
-
-static guint32 mh_get_message_flags(CamelFolder * folder, const char *uid)
-{
-	CamelMessageInfo *info;
-	CamelMhFolder *mf = CAMEL_MH_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_val_if_fail(info != NULL, 0);
-
-	return info->flags;
-}
-
-static void mh_set_message_flags(CamelFolder * folder, const char *uid, guint32 flags, guint32 set)
-{
-	CamelMessageInfo *info;
-	CamelMhFolder *mf = CAMEL_MH_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_if_fail(info != NULL);
-
-	info->flags = (info->flags & ~flags) | (set & flags) | CAMEL_MESSAGE_FOLDER_FLAGGED;
-	camel_folder_summary_touch(CAMEL_FOLDER_SUMMARY(mf->summary));
-
-	camel_object_trigger_event (CAMEL_OBJECT(folder), "message_changed", (char *) uid);
-}
-
-static gboolean mh_get_message_user_flag(CamelFolder * folder, const char *uid, const char *name)
-{
-	CamelMessageInfo *info;
-	CamelMhFolder *mf = CAMEL_MH_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_val_if_fail(info != NULL, FALSE);
-
-	return camel_flag_get(&info->user_flags, name);
-}
-
-static void mh_set_message_user_flag(CamelFolder * folder, const char *uid, const char *name, gboolean value)
-{
-	CamelMessageInfo *info;
-	CamelMhFolder *mf = CAMEL_MH_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_if_fail(info != NULL);
-
-	camel_flag_set(&info->user_flags, name, value);
-	info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-	camel_folder_summary_touch(CAMEL_FOLDER_SUMMARY(mf->summary));
-	camel_object_trigger_event (CAMEL_OBJECT(folder), "message_changed", (char *) uid);
-}
-
-static const char *mh_get_message_user_tag(CamelFolder *folder, const char *uid, const char *name)
-{
-	CamelMessageInfo *info;
-	CamelMhFolder *mf = CAMEL_MH_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_val_if_fail(info != NULL, FALSE);
-
-	return camel_tag_get(&info->user_tags, name);
-}
-
-static void mh_set_message_user_tag(CamelFolder *folder, const char *uid, const char *name, const char *value)
-{
-	CamelMessageInfo *info;
-	CamelMhFolder *mf = CAMEL_MH_FOLDER(folder);
-
-	info = camel_folder_summary_uid(CAMEL_FOLDER_SUMMARY(mf->summary), uid);
-	g_return_if_fail(info != NULL);
-
-	camel_tag_set(&info->user_tags, name, value);
-	info->flags |= CAMEL_MESSAGE_FOLDER_FLAGGED;
-	camel_folder_summary_touch(CAMEL_FOLDER_SUMMARY(mf->summary));
-	camel_object_trigger_event(CAMEL_OBJECT(folder), "message_changed", (char *) uid);
-}
diff --git a/camel/providers/mh/camel-mh-folder.h b/camel/providers/mh/camel-mh-folder.h
deleted file mode 100644
index 37ff133c9e..0000000000
--- a/camel/providers/mh/camel-mh-folder.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mh-folder.h : MH folder. */
-
-/* 
- *
- * Authors:
- * 	Michael Zucchi 
- *
- * Copyright (C) 1999 Helix Code Inc.
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef CAMEL_MH_FOLDER_H
-#define CAMEL_MH_FOLDER_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif				/* __cplusplus } */
-#include 
-#include 
-#include 
-#include "camel-mh-summary.h"
-
-#define CAMEL_MH_FOLDER_TYPE     (camel_mh_folder_get_type ())
-#define CAMEL_MH_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MH_FOLDER_TYPE, CamelMhFolder))
-#define CAMEL_MH_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MH_FOLDER_TYPE, CamelMhFolderClass))
-#define IS_CAMEL_MH_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MH_FOLDER_TYPE))
-
-typedef struct {
-	CamelFolder parent_object;
-
-	gchar *folder_file_path;	/* contains the messages */
-	gchar *summary_file_path;	/* contains the messages summary */
-	gchar *folder_dir_path;	/* contains the subfolders */
-	gchar *index_file_path;	/* index of body contents */
-
-	ibex *index;	/* index for this folder */
-	CamelMhSummary *summary;
-	CamelFolderSearch *search;	/* used to run searches, we just use the real thing (tm) */
-} CamelMhFolder;
-
-typedef struct {
-	CamelFolderClass parent_class;
-	
-	/* Virtual methods */
-	
-} CamelMhFolderClass;
-
-/* public methods */
-
-/* Standard Camel function */
-CamelType camel_mh_folder_get_type(void);
-
-#ifdef __cplusplus
-}
-#endif				/* __cplusplus */
-#endif				/* CAMEL_MH_FOLDER_H */
diff --git a/camel/providers/mh/camel-mh-provider.c b/camel/providers/mh/camel-mh-provider.c
deleted file mode 100644
index 58e97eed30..0000000000
--- a/camel/providers/mh/camel-mh-provider.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-provider.c: mbox provider registration code */
-
-/* 
- * Authors :
- *   Bertrand Guiheneuf 
- *
- * Copyright (C) 2000 HelixCode (www.helixcode.com).
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-mh-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static CamelProvider mh_provider = {
-	"mh",
-	"UNIX mh-format mail files",
-
-	"For reading mail delivered by the local system, and for " "storing mail on local disk.",
-
-	"mail",
-
-	CAMEL_PROVIDER_IS_STORAGE,
-
-	{0, 0},
-
-	NULL
-};
-
-void camel_provider_module_init(CamelSession * session)
-{
-	mh_provider.object_types[CAMEL_PROVIDER_STORE] = camel_mh_store_get_type();
-
-	mh_provider.service_cache = g_hash_table_new(camel_url_hash, camel_url_equal);
-
-	camel_session_register_provider(session, &mh_provider);
-}
diff --git a/camel/providers/mh/camel-mh-store.c b/camel/providers/mh/camel-mh-store.c
deleted file mode 100644
index c720cb1c91..0000000000
--- a/camel/providers/mh/camel-mh-store.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mbox-store.c : class for an mbox store */
-
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * Authors: Michael Zucchi 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-mh-store.h"
-#include "camel-mh-folder.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-
-/* Returns the class for a CamelMhStore */
-#define CMHS_CLASS(so) CAMEL_MH_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CMHF_CLASS(so) CAMEL_MH_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static char *get_name(CamelService * service, gboolean brief);
-static CamelFolder *get_folder(CamelStore * store, const char *folder_name, gboolean create, CamelException * ex);
-static void delete_folder(CamelStore * store, const char *folder_name, CamelException * ex);
-static void rename_folder(CamelStore *store, const char *old_name, const char *new_name, CamelException *ex);
-static char *get_folder_name(CamelStore * store, const char *folder_name, CamelException * ex);
-
-static void camel_mh_store_class_init(CamelObjectClass * camel_mh_store_class)
-{
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS(camel_mh_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS(camel_mh_store_class);
-
-	/* virtual method overload */
-	camel_service_class->get_name = get_name;
-
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->delete_folder = delete_folder;
-	camel_store_class->rename_folder = rename_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-}
-
-static void camel_mh_store_init(CamelObject * object)
-{
-	CamelService *service = CAMEL_SERVICE(object);
-	CamelStore *store = CAMEL_STORE(object);
-
-	service->url_flags = CAMEL_SERVICE_URL_NEED_PATH;
-
-	/* mh names are filenames, so they are case-sensitive. */
-	store->folders = g_hash_table_new(g_str_hash, g_str_equal);
-}
-
-CamelType camel_mh_store_get_type(void)
-{
-	static CamelType camel_mh_store_type = CAMEL_INVALID_TYPE;
-
-	if (camel_mh_store_type == CAMEL_INVALID_TYPE) {
-		camel_mh_store_type = camel_type_register(CAMEL_STORE_TYPE, "CamelMhStore",
-							  sizeof(CamelMhStore),
-							  sizeof(CamelMhStoreClass),
-							  (CamelObjectClassInitFunc) camel_mh_store_class_init,
-							  NULL,
-							  (CamelObjectInitFunc) camel_mh_store_init,
-							  NULL);
-	}
-
-	return camel_mh_store_type;
-}
-
-const gchar *camel_mh_store_get_toplevel_dir(CamelMhStore * store)
-{
-	CamelURL *url = CAMEL_SERVICE(store)->url;
-
-	g_assert(url != NULL);
-	return url->path;
-}
-
-static CamelFolder *get_folder(CamelStore * store, const char *folder_name, gboolean create, CamelException * ex)
-{
-	CamelFolder *new_folder = NULL;
-	char *name;
-	struct stat st;
-
-	name = g_strdup_printf("%s%s", CAMEL_SERVICE(store)->url->path, folder_name);
-
- 	printf("getting folder: %s\n", name);
-	if (stat(name, &st) == -1) {
- 		printf("doesn't exist ...\n");
-		if (errno != ENOENT) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not open folder `%s':" "\n%s", folder_name, g_strerror(errno));
-			goto done;
-		}
-		if (!create) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER,
-					     "Folder `%s' does not exist.", folder_name);
-			goto done;
-		}
-		printf("creating ...\n");
-
-		if (mkdir(name, 0700) != 0) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not create folder `%s':" "\n%s", folder_name, g_strerror(errno));
-			goto done;
-		}
-		printf("created ok?\n");
-
-	} else if (!S_ISDIR(st.st_mode)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, "`%s' is not a directory.", name);
-		goto done;
-	}
-
-	new_folder = CAMEL_FOLDER (camel_object_new(CAMEL_MH_FOLDER_TYPE));
-
-	CF_CLASS(new_folder)->init(new_folder, store, NULL, folder_name, "/", TRUE, ex);
-done:
-	g_free(name);
-	return new_folder;
-}
-
-static void delete_folder(CamelStore * store, const char *folder_name, CamelException * ex)
-{
-	char *name;
-	struct stat st;
-	char *str;
-
-	name = g_strdup_printf("%s%s", CAMEL_SERVICE(store)->url->path, folder_name);
-	if (stat(name, &st) == -1) {
-		if (errno != ENOENT)
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not delete folder `%s': %s", folder_name, strerror(errno));
-	} else {
-		/* this will 'fail' if there are still messages in the directory -
-		   but only the metadata is lost */
-		str = g_strdup_printf("%s/ev-summary", name);
-		unlink(str);
-		g_free(str);
-		str = g_strdup_printf("%s/ev-index.ibex", name);
-		unlink(str);
-		g_free(str);
-		if (rmdir(name) == -1) {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not delete folder `%s': %s", folder_name, strerror(errno));
-		}
-	}
-	g_free(name);
-}
-
-static void rename_folder (CamelStore *store, const char *old_name, const char *new_name, CamelException *ex)
-{
-	char *old, *new;
-	struct stat st;
-
-	old = g_strdup_printf("%s%s", CAMEL_SERVICE(store)->url->path, old_name);
-	new = g_strdup_printf("%s%s", CAMEL_SERVICE(store)->url->path, new_name);
-	if (stat(new, &st) == -1 && errno == ENOENT) {
-		if (stat(old, &st) == 0 && S_ISDIR(st.st_mode)) {
-			if (rename(old, new) != 0) {
-				camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-						     "Could not rename folder `%s': %s", old_name, strerror(errno));
-			}
-		} else {
-			camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not rename folder `%s': %s", old_name, strerror(errno));
-		}
-	} else {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_SYSTEM,
-				     "Could not rename folder `%s': %s exists", old_name, new_name);
-	}
-}
-
-static char *get_folder_name(CamelStore * store, const char *folder_name, CamelException * ex)
-{
-	/* For now, we don't allow hieararchy. FIXME. */
-	if (strchr(folder_name + 1, '/')) {
-		camel_exception_set(ex, CAMEL_EXCEPTION_STORE_NO_FOLDER, "Mh folders may not be nested.");
-		return NULL;
-	}
-
-	return *folder_name == '/' ? g_strdup(folder_name) : g_strdup_printf("/%s", folder_name);
-}
-
-static char *get_name(CamelService * service, gboolean brief)
-{
-	if (brief)
-		return g_strdup(service->url->path);
-	else
-		return g_strdup_printf("Local mail file %s", service->url->path);
-}
diff --git a/camel/providers/mh/camel-mh-store.h b/camel/providers/mh/camel-mh-store.h
deleted file mode 100644
index e2e2bbb656..0000000000
--- a/camel/providers/mh/camel-mh-store.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-mh-store.h : class for an mh store */
-
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * Authors: Michael Zucchi 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#ifndef CAMEL_MH_STORE_H
-#define CAMEL_MH_STORE_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif				/* __cplusplus } */
-#include "camel-store.h"
-#define CAMEL_MH_STORE_TYPE     (camel_mh_store_get_type ())
-#define CAMEL_MH_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_MH_STORE_TYPE, CamelMhStore))
-#define CAMEL_MH_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_MH_STORE_TYPE, CamelMhStoreClass))
-#define IS_CAMEL_MH_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_MH_STORE_TYPE))
-
-typedef struct {
-	CamelStore parent_object;
-	
-} CamelMhStore;
-
-typedef struct {
-	CamelStoreClass parent_class;
-	
-} CamelMhStoreClass;
-
-/* public methods */
-
-/* Standard Camel function */
-CamelType camel_mh_store_get_type(void);
-
-const gchar *camel_mh_store_get_toplevel_dir(CamelMhStore * store);
-
-#ifdef __cplusplus
-}
-#endif				/* __cplusplus */
-#endif				/* CAMEL_MH_STORE_H */
diff --git a/camel/providers/mh/camel-mh-summary.c b/camel/providers/mh/camel-mh-summary.c
deleted file mode 100644
index dff025b258..0000000000
--- a/camel/providers/mh/camel-mh-summary.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Not Zed 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "camel-mh-summary.h"
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#include 
-
-#define d(x)
-
-#define CAMEL_MH_SUMMARY_VERSION (0x2000)
-
-static CamelMessageInfo *message_info_new(CamelFolderSummary *, struct _header_raw *);
-
-static void camel_mh_summary_class_init	(CamelMhSummaryClass *class);
-static void camel_mh_summary_init	(CamelMhSummary *gspaper);
-static void camel_mh_summary_finalise	(CamelObject *obj);
-
-#define _PRIVATE(x) (((CamelMhSummary *)(x))->priv)
-
-struct _CamelMhSummaryPrivate {
-	char *current_uid;
-};
-
-static CamelFolderSummaryClass *parent_class;
-
-CamelType
-camel_mh_summary_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register(camel_folder_summary_get_type (), "CamelMhSummary",
-					   sizeof(CamelMhSummary),
-					   sizeof(CamelMhSummaryClass),
-					   (CamelObjectClassInitFunc)camel_mh_summary_class_init,
-					   NULL,
-					   (CamelObjectInitFunc)camel_mh_summary_init,
-					   (CamelObjectFinalizeFunc)camel_mh_summary_finalise);
-	}
-	
-	return type;
-}
-
-static void
-camel_mh_summary_class_init (CamelMhSummaryClass *class)
-{
-	CamelFolderSummaryClass *sklass = (CamelFolderSummaryClass *) class;
-	
-	parent_class = CAMEL_FOLDER_SUMMARY_CLASS (camel_type_get_global_classfuncs(camel_folder_summary_get_type ()));
-
-	/* override methods */
-	sklass->message_info_new = message_info_new;
-}
-
-static void
-camel_mh_summary_init (CamelMhSummary *o)
-{
-	struct _CamelFolderSummary *s = (CamelFolderSummary *) o;
-
-	o->priv = g_malloc0(sizeof(*o->priv));
-
-	/* set unique file version */
-	s->version += CAMEL_MH_SUMMARY_VERSION;
-}
-
-static void
-camel_mh_summary_finalise(CamelObject *obj)
-{
-	CamelMhSummary *o = (CamelMhSummary *)obj;
-
-	g_free(o->mh_path);
-	g_free(o->priv);
-}
-
-/**
- * camel_mh_summary_new:
- *
- * Create a new CamelMhSummary object.
- * 
- * Return value: A new #CamelMhSummary object.
- **/
-CamelMhSummary	*camel_mh_summary_new	(const char *filename, const char *mhdir, ibex *index)
-{
-	CamelMhSummary *o = (CamelMhSummary *)camel_object_new(camel_mh_summary_get_type ());
-
-	camel_folder_summary_set_build_content((CamelFolderSummary *)o, TRUE);
-	camel_folder_summary_set_filename((CamelFolderSummary *)o, filename);
-	o->mh_path = g_strdup(mhdir);
-	o->index = index;
-	return o;
-}
-
-static CamelMessageInfo *message_info_new(CamelFolderSummary * s, struct _header_raw *h)
-{
-	CamelMessageInfo *mi;
-	CamelMhSummary *mhs = (CamelMhSummary *)s;
-
-	mi = ((CamelFolderSummaryClass *) parent_class)->message_info_new(s, h);
-	if (mi) {
-		/* it only ever indexes 1 message at a time */
-		mi->uid = g_strdup(mhs->priv->current_uid);
-	}
-
-	return mi;
-}
-
-int		camel_mh_summary_load(CamelMhSummary * mhs, int forceindex)
-{
-	CamelFolderSummary *s = CAMEL_FOLDER_SUMMARY(mhs);
-
-	d(printf("loading summary ...\n"));
-
-	if (forceindex || camel_folder_summary_load(s) == -1) {
-		camel_folder_summary_clear(s);
-	}
-	return camel_mh_summary_check(mhs, forceindex);
-}
-
-int		camel_mh_summary_add(CamelMhSummary * mhs, const char *name, int forceindex)
-{
-	char *filename = g_strdup_printf("%s/%s", mhs->mh_path, name);
-	int fd;
-	CamelMimeParser *mp;
-
-	d(printf("summarising: %s\n", name));
-
-	fd = open(filename, O_RDONLY);
-	if (fd == -1) {
-		g_warning("Cannot summarise/index: %s: %s", filename, strerror(errno));
-		g_free(filename);
-		return -1;
-	}
-	mp = camel_mime_parser_new();
-	camel_mime_parser_scan_from(mp, FALSE);
-	camel_mime_parser_init_with_fd(mp, fd);
-	if (forceindex || !ibex_contains_name(mhs->index, (char *)name)) {
-		d(printf("forcing indexing of message content\n"));
-		camel_folder_summary_set_index((CamelFolderSummary *)mhs, mhs->index);
-	} else {
-		camel_folder_summary_set_index((CamelFolderSummary *)mhs, NULL);
-	}
-	mhs->priv->current_uid = (char *)name;
-	camel_folder_summary_add_from_parser((CamelFolderSummary *)mhs, mp);
-	camel_object_unref((CamelObject *)mp);
-	mhs->priv->current_uid = NULL;
-	camel_folder_summary_set_index((CamelFolderSummary *)mhs, NULL);
-	g_free(filename);
-	return 0;
-}
-
-static void
-remove_summary(char *key, CamelMessageInfo *info, CamelMhSummary *mhs)
-{
-	d(printf("removing message %s from summary\n", key));
-	ibex_unindex(mhs->index, info->uid);
-	camel_folder_summary_remove((CamelFolderSummary *)mhs, info);
-}
-
-int		camel_mh_summary_check(CamelMhSummary * mhs, int forceindex)
-{
-	DIR *dir;
-	struct dirent *d;
-	char *p, c;
-	CamelMessageInfo *info;
-	GHashTable *left;
-	int i, count;
-
-	d(printf("checking summary ...\n"));
-
-	/* scan the directory, check for mail files not in the index, or index entries that
-	   no longer exist */
-	dir = opendir(mhs->mh_path);
-	if (dir == NULL)
-		return -1;
-
-	/* keeps track of all uid's that have not been processed */
-	left = g_hash_table_new(g_str_hash, g_str_equal);
-	count = camel_folder_summary_count((CamelFolderSummary *)mhs);
-	for (i=0;iuid, info);
-		}
-	}
-	while ( (d = readdir(dir)) ) {
-		/* FIXME: also run stat to check for regular file */
-		p = d->d_name;
-		while ( (c = *p++) ) {
-			if (!isdigit(c))
-				break;
-		}
-		if (c==0) {
-			info = camel_folder_summary_uid((CamelFolderSummary *)mhs, d->d_name);
-			if (info == NULL || (!ibex_contains_name(mhs->index, d->d_name))) {
-				/* need to add this file to the summary */
-				if (info != NULL) {
-					g_hash_table_remove(left, info->uid);
-					camel_folder_summary_remove((CamelFolderSummary *)mhs, info);
-				}
-				camel_mh_summary_add(mhs, d->d_name, forceindex);
-			} else {
-				g_hash_table_remove(left, info->uid);
-			}
-		}
-	}
-	closedir(dir);
-	g_hash_table_foreach(left, (GHFunc)remove_summary, mhs);
-	g_hash_table_destroy(left);
-
-	return 0;
-}
-
-/* sync the summary with the ondisk files.
-   It doesnt store the state in the file, the summary only, == MUCH faster */
-int		camel_mh_summary_sync(CamelMhSummary * mhs, int expunge, CamelException *ex)
-{
-	int count, i;
-	CamelMessageInfo *info;
-	char *name;
-
-	printf("summary_sync(expunge=%s)\n", expunge?"true":"false");
-
-	if (!expunge)
-		return 0;
-
-	count = camel_folder_summary_count((CamelFolderSummary *)mhs);
-	for (i=count-1;i>=0;i--) {
-		info = camel_folder_summary_index((CamelFolderSummary *)mhs, i);
-		if (info && info->flags & CAMEL_MESSAGE_DELETED) {
-			name = g_strdup_printf("%s/%s", mhs->mh_path, info->uid);
-			(printf("deleting %s\n", name));
-			if (unlink(name) == 0 || errno==ENOENT) {
-				camel_folder_summary_remove((CamelFolderSummary *)mhs, info);
-			}
-		}
-	}
-	return 0;
-}
-
diff --git a/camel/providers/mh/camel-mh-summary.h b/camel/providers/mh/camel-mh-summary.h
deleted file mode 100644
index 28376c5d9b..0000000000
--- a/camel/providers/mh/camel-mh-summary.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Not Zed 
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public License
- *  as published by the Free Software Foundation; either version 2 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef _CAMEL_MH_SUMMARY_H
-#define _CAMEL_MH_SUMMARY_H
-
-#include 
-#include 
-#include 
-
-#define CAMEL_MH_SUMMARY(obj)	CAMEL_CHECK_CAST (obj, camel_mh_summary_get_type (), CamelMhSummary)
-#define CAMEL_MH_SUMMARY_CLASS(klass)	CAMEL_CHECK_CLASS_CAST (klass, camel_mh_summary_get_type (), CamelMhSummaryClass)
-#define IS_CAMEL_MH_SUMMARY(obj)      CAMEL_CHECK_TYPE (obj, camel_mh_summary_get_type ())
-
-typedef struct _CamelMhSummary	CamelMhSummary;
-typedef struct _CamelMhSummaryClass	CamelMhSummaryClass;
-
-struct _CamelMhSummary {
-	CamelFolderSummary parent;
-	struct _CamelMhSummaryPrivate *priv;
-
-	char *mh_path;
-	ibex *index;
-};
-
-struct _CamelMhSummaryClass {
-	CamelFolderSummaryClass parent_class;
-
-	/* virtual methods */
-
-	/* signals */
-};
-
-CamelType	 camel_mh_summary_get_type	(void);
-CamelMhSummary	*camel_mh_summary_new	(const char *filename, const char *mhdir, ibex *index);
-
-/* methods */
-int		camel_mh_summary_load(CamelMhSummary * mhs, int forceindex);
-int		camel_mh_summary_check(CamelMhSummary * mhs, int forceindex);
-int		camel_mh_summary_add(CamelMhSummary * mhs, const char *name, int forceindex);
-int		camel_mh_summary_sync(CamelMhSummary * mhs, int expunge, CamelException *ex);
-
-#endif /* ! _CAMEL_MH_SUMMARY_H */
-
diff --git a/camel/providers/mh/libcamelmh.urls b/camel/providers/mh/libcamelmh.urls
deleted file mode 100644
index 372daaa98f..0000000000
--- a/camel/providers/mh/libcamelmh.urls
+++ /dev/null
@@ -1 +0,0 @@
-mh
diff --git a/camel/providers/nntp/.cvsignore b/camel/providers/nntp/.cvsignore
deleted file mode 100644
index 1f5b9d35fb..0000000000
--- a/camel/providers/nntp/.cvsignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
-test-newsrc
diff --git a/camel/providers/nntp/Makefile.am b/camel/providers/nntp/Makefile.am
deleted file mode 100644
index d9122e9026..0000000000
--- a/camel/providers/nntp/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelnntpincludedir = $(includedir)/camel
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelnntp.la
-provider_DATA = libcamelnntp.urls
-
-INCLUDES = -I../..				\
-	-I$(top_srcdir)/camel			\
-	-I$(top_srcdir)/intl			\
-	-I$(top_srcdir)/libibex			\
-	-I$(top_srcdir)/e-util			\
-	-I$(top_srcdir)				\
-	-I$(includedir)				\
-	$(GTK_INCLUDEDIR) 			\
-	-DG_LOG_DOMAIN=\"camel-nntp-provider\"
-
-libcamelnntp_la_SOURCES = 			\
-	camel-nntp-folder.c			\
-	camel-nntp-newsrc.c			\
-	camel-nntp-provider.c			\
-	camel-nntp-store.c			\
-	camel-nntp-utils.c
-
-libcamelnntpinclude_HEADERS =			\
-	camel-nntp-folder.h			\
-	camel-nntp-newsrc.h			\
-	camel-nntp-store.h			\
-	camel-nntp-utils.h
-
-libcamelnntp_la_LDFLAGS = -version-info 0:0:0
-
-EXTRA_DIST = libcamelnntp.urls
-
-#noinst_PROGRAMS = test-newsrc
-
-#LDADD = \
-	#$(top_builddir)/camel/libcamel.la 	\
-	#$(top_builddir)/e-util/libeutil.la	\
-	#$(top_builddir)/libibex/libibex.la 	\
-	#$(GNOME_LIBDIR) 			\
-	#$(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS)
-#	$(BONOBO_LIBS)				
-
-#test_newsrc_LDADD = libcamelnntp.la $(LDADD)
diff --git a/camel/providers/nntp/camel-nntp-folder.c b/camel/providers/nntp/camel-nntp-folder.c
deleted file mode 100644
index 091d35e591..0000000000
--- a/camel/providers/nntp/camel-nntp-folder.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-folder.c : Abstract class for an email folder */
-
-/* 
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include  
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-folder-summary.h"
-#include "camel-nntp-store.h"
-#include "camel-nntp-folder.h"
-#include "camel-nntp-store.h"
-#include "camel-nntp-utils.h"
-
-#include "string-utils.h"
-#include "camel-stream-mem.h"
-#include "camel-stream-buffer.h"
-#include "camel-data-wrapper.h"
-#include "camel-mime-message.h"
-#include "camel-folder-summary.h"
-
-#include "camel-exception.h"
-
-static CamelFolderClass *parent_class=NULL;
-
-/* Returns the class for a CamelNNTPFolder */
-#define CNNTPF_CLASS(so) CAMEL_NNTP_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CNNTPS_CLASS(so) CAMEL_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-
-static void 
-nntp_folder_init (CamelFolder *folder, CamelStore *parent_store,
-		  CamelFolder *parent_folder, const gchar *name,
-		  gchar *separator, gboolean path_begins_with_sep,
-		  CamelException *ex)
-{
-	const gchar *root_dir_path;
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-
-	/* call parent method */
-	parent_class->init (folder, parent_store, parent_folder,
-			    name, separator, path_begins_with_sep,
-			    ex);
-	if (camel_exception_is_set (ex)) return;
-
-	/* set flags */
-
-	if (!strcmp (name, "/")) {
-		/* the root folder is the only folder that has "subfolders" */
-		folder->can_hold_folders = TRUE;
-		folder->can_hold_messages = FALSE;
-	}
-	else {
-		folder->can_hold_folders = FALSE;
-		folder->can_hold_messages = TRUE;
-		folder->has_summary_capability = TRUE;
-	}
-
-	/* XX */
-	nntp_folder->group_name = g_strdup (strrchr (name, '/') + 1);
-
-#if 0
-	/* get (or create) uid list */
-	if (!(nntp_load_uid_list (nntp_folder) > 0))
-		nntp_generate_uid_list (nntp_folder);
-#endif
-
-	root_dir_path = camel_nntp_store_get_toplevel_dir (CAMEL_NNTP_STORE(folder->parent_store));
-
-
-	/* load the summary if we have that ability */
-	if (folder->has_summary_capability) {
-		nntp_folder->summary_file_path = g_strdup_printf ("%s/%s-ev-summary",
-							  root_dir_path,
-							  nntp_folder->group_name);
-
-		nntp_folder->summary = camel_folder_summary_new ();
-		camel_folder_summary_set_filename (nntp_folder->summary,
-						   nntp_folder->summary_file_path);
-
-		if (-1 == camel_folder_summary_load (nntp_folder->summary)) {
-			/* Bad or nonexistant summary file */
-			camel_nntp_get_headers (CAMEL_FOLDER( folder )->parent_store,
-						nntp_folder, ex);
-			if (camel_exception_get_id (ex))
-				return;
-
-			/* XXX check return value */
-			camel_folder_summary_save (nntp_folder->summary);
-		}
-	}
-		
-
-}
-
-static void
-nntp_folder_sync (CamelFolder *folder, gboolean expunge, 
-		  CamelException *ex)
-{
-	CamelNNTPStore *store;
-
-	camel_folder_summary_save (CAMEL_NNTP_FOLDER(folder)->summary);
-
-	store = CAMEL_NNTP_STORE (camel_folder_get_parent_store (folder));
-
-	if (store->newsrc)
-		camel_nntp_newsrc_write (store->newsrc);
-}
-
-static CamelFolder*
-nntp_folder_get_subfolder (CamelFolder *folder,
-			   const gchar *folder_name,
-			   gboolean create,
-			   CamelException *ex)
-{
-	g_assert (0);
-	return NULL;
-}
-
-static gint
-nntp_folder_get_message_count (CamelFolder *folder)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER(folder);
-
-	g_assert (folder);
-	g_assert (nntp_folder->summary);
-
-        return camel_folder_summary_count(nntp_folder->summary);
-}
-
-static guint32
-nntp_folder_get_message_flags (CamelFolder *folder, const char *uid)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-	CamelMessageInfo *info = camel_folder_summary_uid (nntp_folder->summary, uid);
-
-	return info->flags;
-}
-
-static void
-nntp_folder_set_message_flags (CamelFolder *folder, const char *uid,
-			       guint32 flags, guint32 set)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-	CamelMessageInfo *info = camel_folder_summary_uid (nntp_folder->summary, uid);
-
-	info->flags = set;
-
-	if (set & CAMEL_MESSAGE_SEEN) {
-		int article_num;
-		CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (camel_folder_get_parent_store (folder));
-
-		sscanf (uid, "%d", &article_num);
-
-		camel_nntp_newsrc_mark_article_read (nntp_store->newsrc,
-						     nntp_folder->group_name,
-						     article_num);
-	}
-
-	camel_folder_summary_touch (nntp_folder->summary);
-}
-
-static CamelMimeMessage *
-nntp_folder_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	CamelStream *nntp_istream;
-	CamelStream *message_stream;
-	CamelMimeMessage *message = NULL;
-	CamelStore *parent_store;
-	char *buf;
-	int buf_len;
-	int buf_alloc;
-	int status;
-	gboolean done;
-	char *message_id;
-
-	/* get the parent store */
-	parent_store = camel_folder_get_parent_store (folder);
-
-	message_id = strchr (uid, ',') + 1;
-	status = camel_nntp_command (CAMEL_NNTP_STORE( parent_store ), NULL, "ARTICLE %s", message_id);
-
-	nntp_istream = CAMEL_NNTP_STORE (parent_store)->istream;
-
-	/* if the message_id was not found, raise an exception and return */
-	if (status != CAMEL_NNTP_OK) {
-		camel_exception_setv (ex, 
-				     CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     "message %s not found.",
-				      message_id);
-		return NULL;
-	}
-
-	/* XXX ick ick ick.  read the entire message into a buffer and
-	   then create a stream_mem for it. */
-	buf_alloc = 2048;
-	buf_len = 0;
-	buf = g_malloc(buf_alloc);
-	done = FALSE;
-
-	buf[0] = 0;
-
-	while (!done) {
-		char *line = camel_stream_buffer_read_line ( CAMEL_STREAM_BUFFER ( nntp_istream ));
-		int line_length;
-
-		/* XXX check exception */
-
-		line_length = strlen ( line );
-
-		if (!strcmp(line, ".")) {
-			done = TRUE;
-			g_free (line);
-		}
-		else {
-			if (buf_len + line_length > buf_alloc) {
-				buf_alloc *= 2;
-				buf = g_realloc (buf, buf_alloc);
-			}
-			strcat(buf, line);
-			strcat(buf, "\n");
-			buf_len += strlen(line) + 1;
-			g_free (line);
-		}
-	}
-
-	/* create a stream bound to the message */
-	message_stream = camel_stream_mem_new_with_buffer(buf, buf_len);
-
-	message = camel_mime_message_new ();
-	if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *)message, message_stream) == -1) {
-		camel_object_unref (CAMEL_OBJECT (message));
-		camel_object_unref (CAMEL_OBJECT (message_stream));
-		camel_exception_setv (ex,
-				      CAMEL_EXCEPTION_FOLDER_INVALID_UID, /* XXX */
-				      "Could not create message for message_id %s.", message_id);
-
-		return NULL;
-	}
-	camel_object_unref (CAMEL_OBJECT (message_stream));
-
-	/* init other fields? */
-	camel_object_ref (CAMEL_OBJECT (folder));
-
-#if 0
-	gtk_signal_connect (CAMEL_OBJECT (message), "message_changed", message_changed, folder);
-#endif
-
-	return message;
-}
-
-static GPtrArray *
-nntp_folder_get_uids (CamelFolder *folder)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-	GPtrArray *out;
-	CamelMessageInfo *message_info;
-	int i;
-	int count = camel_folder_summary_count (nntp_folder->summary);
-
-	out = g_ptr_array_new ();
-	g_ptr_array_set_size (out, count);
-	
-	for (i = 0; i < count; i++) {
-		message_info = camel_folder_summary_index (nntp_folder->summary, i);
-		out->pdata[i] = g_strdup (message_info->uid);
-	}
-	
-	return out;
-}
-
-static GPtrArray *
-nntp_folder_get_summary (CamelFolder *folder)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-
-	return nntp_folder->summary->messages;
-}
-
-static GPtrArray *
-nntp_folder_get_subfolder_names (CamelFolder *folder)
-{
-	if (!strcmp (folder->name, "/")) {
-		CamelStore *store = camel_folder_get_parent_store (folder);
-		
-		if (CAMEL_NNTP_STORE (store)->newsrc) {
-			GPtrArray *array = camel_nntp_newsrc_get_subscribed_group_names (CAMEL_NNTP_STORE (store)->newsrc);
-			return array;
-		}
-	}
-	
-	return NULL;
-}
-
-static void
-nntp_folder_free_subfolder_names (CamelFolder *folder, GPtrArray *subfolders)
-{
-	if (subfolders) {
-		CamelStore *store = camel_folder_get_parent_store (folder);
-		camel_nntp_newsrc_free_group_names (CAMEL_NNTP_STORE (store)->newsrc, subfolders);
-	}
-}
-
-static GPtrArray*
-nntp_folder_search_by_expression (CamelFolder *folder, const char *expression, CamelException *ex)
-{
-	g_assert (0);
-	return NULL;
-}
-
-static const CamelMessageInfo*
-nntp_folder_get_message_info (CamelFolder *folder, const char *uid)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-
-	return camel_folder_summary_uid (nntp_folder->summary, uid);
-}
-
-static void           
-nntp_folder_finalize (CamelObject *object)
-{
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (object);
-
-	g_free (nntp_folder->summary_file_path);
-}
-
-static void
-camel_nntp_folder_class_init (CamelNNTPFolderClass *camel_nntp_folder_class)
-{
-	CamelFolderClass *camel_folder_class = CAMEL_FOLDER_CLASS (camel_nntp_folder_class);
-
-	parent_class = CAMEL_FOLDER_CLASS (camel_type_get_global_classfuncs (camel_folder_get_type ()));
-		
-	/* virtual method definition */
-
-	/* virtual method overload */
-	camel_folder_class->init = nntp_folder_init;
-	camel_folder_class->sync = nntp_folder_sync;
-	camel_folder_class->get_subfolder = nntp_folder_get_subfolder;
-	camel_folder_class->get_message_count = nntp_folder_get_message_count;
-	camel_folder_class->set_message_flags = nntp_folder_set_message_flags;
-	camel_folder_class->get_message_flags = nntp_folder_get_message_flags;
-	camel_folder_class->get_message = nntp_folder_get_message;
-	camel_folder_class->get_uids = nntp_folder_get_uids;
-	camel_folder_class->free_uids = camel_folder_free_deep;
-	camel_folder_class->get_summary = nntp_folder_get_summary;
-	camel_folder_class->free_summary = camel_folder_free_nop;
-	camel_folder_class->get_subfolder_names = nntp_folder_get_subfolder_names;
-	camel_folder_class->free_subfolder_names = nntp_folder_free_subfolder_names;
-	camel_folder_class->search_by_expression = nntp_folder_search_by_expression;
-	camel_folder_class->get_message_info = nntp_folder_get_message_info;
-}
-
-CamelType
-camel_nntp_folder_get_type (void)
-{
-	static CamelType camel_nntp_folder_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_nntp_folder_type == CAMEL_INVALID_TYPE)	{
-		camel_nntp_folder_type = camel_type_register (CAMEL_FOLDER_TYPE, "CamelNNTPFolder",
-							      sizeof (CamelNNTPFolder),
-							      sizeof (CamelNNTPFolderClass),
-							      (CamelObjectClassInitFunc) camel_nntp_folder_class_init,
-							      NULL,
-							      (CamelObjectInitFunc) NULL,
-							      (CamelObjectFinalizeFunc) nntp_folder_finalize);
-	}
-	
-	return camel_nntp_folder_type;
-}
diff --git a/camel/providers/nntp/camel-nntp-folder.h b/camel/providers/nntp/camel-nntp-folder.h
deleted file mode 100644
index 9bbd1466b9..0000000000
--- a/camel/providers/nntp/camel-nntp-folder.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-folder.h : NNTP group (folder) support. */
-
-/* 
- *
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_NNTP_FOLDER_H
-#define CAMEL_NNTP_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-folder.h"
-
-/*  #include "camel-store.h" */
-
-#define CAMEL_NNTP_FOLDER_TYPE     (camel_nntp_folder_get_type ())
-#define CAMEL_NNTP_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolder))
-#define CAMEL_NNTP_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_NNTP_FOLDER_TYPE, CamelNNTPFolderClass))
-#define IS_CAMEL_NNTP_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_NNTP_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-
-	gchar *group_name;
-	gchar *summary_file_path;  /* contains the messages summary */
-	CamelFolderSummary *summary;
-} CamelNNTPFolder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelNNTPFolderClass;
-
-
-/* public methods */
-
-/* Standard Camel function */
-CamelType camel_nntp_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_NNTP_FOLDER_H */
diff --git a/camel/providers/nntp/camel-nntp-newsrc.c b/camel/providers/nntp/camel-nntp-newsrc.c
deleted file mode 100644
index 81594d3dcd..0000000000
--- a/camel/providers/nntp/camel-nntp-newsrc.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-newsrc.c - .newsrc parsing/regurgitating code */
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc. 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include "camel-nntp-newsrc.h"
-
-typedef struct {
-	guint low;
-	guint high;
-} ArticleRange;
-
-typedef struct {
-	char *name;
-	GArray *ranges;
-	gboolean subscribed;
-} NewsrcGroup;
-
-struct CamelNNTPNewsrc {
-	gchar *filename;
-	GHashTable *groups;
-	GHashTable *subscribed_groups;
-	gboolean dirty;
-} ;
-
-static NewsrcGroup *
-camel_nntp_newsrc_group_add (CamelNNTPNewsrc *newsrc, char *group_name, gboolean subscribed)
-{
-	NewsrcGroup *new_group = g_malloc(sizeof(NewsrcGroup));
-
-	new_group->name = g_strdup(group_name);
-	new_group->subscribed = subscribed;
-	new_group->ranges = g_array_new (FALSE, FALSE, sizeof (ArticleRange));
-
-	g_hash_table_insert (newsrc->groups, new_group->name, new_group);
-	if (subscribed)
-		g_hash_table_insert (newsrc->subscribed_groups, new_group->name, new_group);
-
-	newsrc->dirty = TRUE;
-
-	return new_group;
-}
-
-static long
-camel_nntp_newsrc_group_get_highest_article_read(CamelNNTPNewsrc *newsrc, NewsrcGroup *group)
-{
-	if (group->ranges->len == 0)
-		return 0;
-
-	return g_array_index(group->ranges, ArticleRange, group->ranges->len - 1).high;
-}
-
-static void
-camel_nntp_newsrc_group_mark_range_read(CamelNNTPNewsrc *newsrc, NewsrcGroup *group, long low, long high)
-{
-	int i;
-
-	if (group->ranges->len == 1
-	    && g_array_index (group->ranges, ArticleRange, 0).low == 0
-	    && g_array_index (group->ranges, ArticleRange, 0).high == 0) {
-		g_array_index (group->ranges, ArticleRange, 0).low = low;
-		g_array_index (group->ranges, ArticleRange, 0).high = high;
-
-		newsrc->dirty = TRUE;
-	}
-	else  {
-		ArticleRange tmp_range;
-
-		for (i = 0; i < group->ranges->len; i ++) {
-			guint range_low = g_array_index (group->ranges, ArticleRange, i).low;
-			guint range_high = g_array_index (group->ranges, ArticleRange, i).high;
-			
-			/* if it's already part of a range, return immediately. */
-			if (low >= range_low &&
-			    low <= range_high &&
-			    high >= range_low &&
-			    high <= range_high) {
-				return;
-			}
-			/* if we have a new lower bound for this range, set it. */
-			else if (low <= range_low
-				 && high >= range_low
-				 && high <= range_high) {
-				g_array_index (group->ranges, ArticleRange, i).low = low;
-				newsrc->dirty = TRUE;
-				return;
-			}
-			/* if we have a new upper bound for this range, set it. */
-			else if (high >= range_high
-				 && low >= range_low
-				 && low <= range_high) {
-				g_array_index (group->ranges, ArticleRange, i).high = high;
-				newsrc->dirty = TRUE;
-				return;
-			}
-			/* if we would be inserting another range that
-                           starts one index higher than an existing
-                           one, make the upper value of the existing
-                           range the upper value of the new one. */
-			else if (low == range_high + 1) {
-				g_array_index (group->ranges, ArticleRange, i).high = high;
-				newsrc->dirty = TRUE;
-				return;
-			}
-			/* if we would be inserting another range that
-                           ends one index lower than an existing one,
-                           group the existing range by setting its low
-                           to the new low */
-			else if (high == range_low - 1) {
-				g_array_index (group->ranges, ArticleRange, i).low = low;
-				newsrc->dirty = TRUE;
-				return;
-			}
-			/* if the range lies entirely outside another
-                           range, doesn't coincide with it's
-                           endpoints, and has lower values, insert it
-                           into the middle of the list. */
-			else if (low < range_low
-				 && high < range_low) {
-				tmp_range.low = low;
-				tmp_range.high = high;
-
-				group->ranges = g_array_insert_val (group->ranges, i, tmp_range);
-				newsrc->dirty = TRUE;
-
-				return;
-			}
-		}
-
-		/* if we made it here, the range needs to go at the end */
-		tmp_range.low = low;
-		tmp_range.high = high;
-		group->ranges = g_array_append_val (group->ranges, tmp_range);
-		newsrc->dirty = TRUE;
-	} 
-}
-
-int
-camel_nntp_newsrc_get_highest_article_read (CamelNNTPNewsrc *newsrc, char *group_name)
-{
-	NewsrcGroup *group;
-
-	group = g_hash_table_lookup (newsrc->groups, group_name);
-
-	return camel_nntp_newsrc_group_get_highest_article_read (newsrc, group);
-}
-
-void
-camel_nntp_newsrc_mark_article_read (CamelNNTPNewsrc *newsrc, char *group_name, int num)
-{
-	camel_nntp_newsrc_mark_range_read (newsrc, group_name, num, num);
-}
-
-void
-camel_nntp_newsrc_mark_range_read(CamelNNTPNewsrc *newsrc, char *group_name, long low, long high)
-{
-	NewsrcGroup *group;
-
-	/* swap them if they're in the wrong order. */
-	if (low > high) {
-		long tmp;
-
-		tmp = high;
-		high = low;
-		low = tmp;
-	}
-
-	group = g_hash_table_lookup (newsrc->groups, group_name);
-
-	camel_nntp_newsrc_group_mark_range_read (newsrc, group, low, high);
-}
-
-gboolean
-camel_nntp_newsrc_article_is_read (CamelNNTPNewsrc *newsrc, char *group_name, long num)
-{
-	int i;
-	NewsrcGroup *group;
-
-	group = g_hash_table_lookup (newsrc->groups, group_name);
-	
-	for (i = 0; i < group->ranges->len; i++) {
-		if (num >= g_array_index (group->ranges, ArticleRange, i).low && 
-		    num <= g_array_index (group->ranges, ArticleRange, i).high) {
-			return TRUE;
-		}
-	}
-
-	return FALSE;
-}
-
-struct newsrc_ptr_array {
-	GPtrArray *ptr_array;
-	gboolean subscribed_only;
-};
-
-static void
-get_group_foreach (char *group_name, NewsrcGroup *group, struct newsrc_ptr_array *npa)
-{
-	if (group->subscribed || !npa->subscribed_only) {
-		g_ptr_array_add (npa->ptr_array, group_name);
-	}
-}
-
-GPtrArray *
-camel_nntp_newsrc_get_subscribed_group_names (CamelNNTPNewsrc *newsrc)
-{
-	struct newsrc_ptr_array npa;
-
-	g_return_val_if_fail (newsrc, NULL);
-
-	npa.ptr_array = g_ptr_array_new();
-	npa.subscribed_only = TRUE;
-
-	g_hash_table_foreach (newsrc->subscribed_groups,
-			      (GHFunc)get_group_foreach, &npa);
-
-	return npa.ptr_array;
-}
-
-GPtrArray *
-camel_nntp_newsrc_get_all_group_names (CamelNNTPNewsrc *newsrc)
-{
-	struct newsrc_ptr_array npa;
-
-	g_return_val_if_fail (newsrc, NULL);
-
-	npa.ptr_array = g_ptr_array_new();
-	npa.subscribed_only = FALSE;
-
-	g_hash_table_foreach (newsrc->groups,
-			      (GHFunc)get_group_foreach, &npa);
-
-	return npa.ptr_array;
-}
-
-void
-camel_nntp_newsrc_free_group_names (CamelNNTPNewsrc *newsrc, GPtrArray *group_names)
-{
-	g_ptr_array_free (group_names, TRUE);
-}
-
-struct newsrc_fp {
-	CamelNNTPNewsrc *newsrc;
-	FILE *fp;
-};
-
-static void
-camel_nntp_newsrc_write_group_line(gpointer key, NewsrcGroup *group, struct newsrc_fp *newsrc_fp)
-{
-	CamelNNTPNewsrc *newsrc;
-	FILE *fp;
-	int i;
-	int line_length = 0;
-
-	fp = newsrc_fp->fp;
-	newsrc = newsrc_fp->newsrc;
-
-	fprintf (fp, "%s%c", group->name, group->subscribed ? ':' : '!');
-
-	line_length += strlen(group->name) + 1;
-
-	if (group->ranges->len == 1
-	    && g_array_index (group->ranges, ArticleRange, 0).low == 0
-	    && g_array_index (group->ranges, ArticleRange, 0).high == 0) {
-		fprintf (fp, "\n");
-
-		return; /* special case since our parsing code will insert this
-			   bogus range if there were no read articles.  The code
-			   to add a range is smart enough to remove this one if we
-			   ever mark an article read, but we still need to deal with
-			   it if that code doesn't get hit. */
-	}
-
-	fprintf (fp, " ");
-	line_length += 1;
-
-	for (i = 0; i < group->ranges->len; i ++) {
-		char range_buffer[100];
-		guint low = g_array_index (group->ranges, ArticleRange, i).low;
-		guint high = g_array_index (group->ranges, ArticleRange, i).high;
-
-		if (low == high)
-			sprintf(range_buffer, "%d", low);
-		else if (low == high - 1)
-			sprintf(range_buffer, "%d,%d", low, high);
-		else
-			sprintf(range_buffer, "%d-%d", low, high);
-
-		if (i != group->ranges->len - 1)
-			strcat(range_buffer, ",");
-
-		/* this constant (991) gives the same line breaking as faried's .newsrc file */
-		if (line_length + strlen(range_buffer) > 991 /*XXX*/) {
-			char range_buffer2[101];
-			int num_to_print = 991 - line_length;
-
-			strcpy(range_buffer2, range_buffer);
-			range_buffer2[num_to_print] = '!';
-			range_buffer2[num_to_print+1] = '\n';
-			range_buffer2[num_to_print+2] = '\0';
-
-			fprintf (fp, range_buffer2);
-
-			fprintf (fp, range_buffer + num_to_print);
-
-			line_length = strlen(range_buffer) - num_to_print;
-		}
-		else {
-			fprintf (fp, range_buffer);
-			line_length += strlen(range_buffer);
-		}
-	}
-
-	fprintf (fp, "\n");
-}
-
-void 
-camel_nntp_newsrc_write_to_file(CamelNNTPNewsrc *newsrc, FILE *fp)
-{
-	struct newsrc_fp newsrc_fp;
-
-	g_return_if_fail (newsrc);
-
-	newsrc_fp.newsrc = newsrc;
-	newsrc_fp.fp = fp;
-
-	g_hash_table_foreach (newsrc->groups,
-			      (GHFunc)camel_nntp_newsrc_write_group_line,
-			      &newsrc_fp);
-}
-
-void
-camel_nntp_newsrc_write(CamelNNTPNewsrc *newsrc)
-{
-	FILE *fp;
-
-	g_return_if_fail (newsrc);
-
-	if (!newsrc->dirty)
-		return;
-
-	if ((fp = fopen(newsrc->filename, "w")) == NULL) {
-		g_warning ("Couldn't open newsrc file '%s'.\n", newsrc->filename);
-		return;
-	}
-
-	camel_nntp_newsrc_write_to_file(newsrc, fp);
-
-	fclose(fp);
-}
-
-static void
-camel_nntp_newsrc_parse_line(CamelNNTPNewsrc *newsrc, char *line)
-{
-	char *p, sep, *comma, *dash;
-	gboolean is_subscribed;
-	NewsrcGroup *group;
-
-	p = strchr(line, ':');
-
-	if (p) {
-		is_subscribed = TRUE;
-	}
-	else {
-		p = strchr(line, '!');
-		if (p)
-			is_subscribed = FALSE;
-		else
-			return; /* bogus line. */
-	}
-
-	sep = *p;
-	*p = '\0';
-
-	group = camel_nntp_newsrc_group_add (newsrc, line, is_subscribed);
-
-	*p = sep;
-
-	p++;
-
-	do {
-		guint high, low;
-
-		comma = strchr(p, ',');
-
-		if (comma)
-			*comma = '\0';
-
-		dash = strchr(p, '-');
-
-		if (!dash) { /* there wasn't a dash.  must be just one number */
-			high = low = atol(p);
-		}
-		else { /* there was a dash. */
-			*dash = '\0';
-			low = atol(p);
-			*dash = '-';
-			p = dash + 1;
-			high = atol(p);
-		}
-
-		camel_nntp_newsrc_group_mark_range_read (newsrc, group, low, high);
-
-		if (comma) {
-			*comma = ',';
-			p = comma + 1;
-		}
-
-	} while(comma);
-}
-
-#define MAX_LINE_LENGTH 1500
-#define BUFFER_LENGTH (20 * MAX_LINE_LENGTH)
-
-CamelNNTPNewsrc *
-camel_nntp_newsrc_read_for_server (const char *server)
-{
-	FILE *fp;
-	char buf[BUFFER_LENGTH];
-	CamelNNTPNewsrc *newsrc = g_new0(CamelNNTPNewsrc, 1);
-
-	newsrc->filename = g_strdup_printf ("%s/.newsrc-%s", g_get_home_dir(), server);
-	newsrc->groups = g_hash_table_new (g_str_hash, g_str_equal);
-	newsrc->subscribed_groups = g_hash_table_new (g_str_hash, g_str_equal);
-
-	if ((fp = fopen(newsrc->filename, "r")) == NULL) {
-		g_free (newsrc->filename);
-		g_free (newsrc);
-		return NULL;
-	}
-
-	while (fgets(buf, MAX_LINE_LENGTH, fp) != NULL) {
-		/* we silently ignore (and lose!) lines longer than 20 * 1500 chars.
-		   Too bad for them.  */
-		while(strlen(buf) < sizeof(buf) 
-		      && buf[strlen(buf) - 2] == '!') {
-			fgets(&buf[strlen(buf) - 2], MAX_LINE_LENGTH, fp);
-		}
-
-		camel_nntp_newsrc_parse_line(newsrc, buf);
-	}
-
-	fclose(fp);
-
-	return newsrc;
-}
diff --git a/camel/providers/nntp/camel-nntp-newsrc.h b/camel/providers/nntp/camel-nntp-newsrc.h
deleted file mode 100644
index 3f4be6de8d..0000000000
--- a/camel/providers/nntp/camel-nntp-newsrc.h
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#ifndef _CAMEL_NNTP_NEWSRC_H_
-#define _CAMEL_NNTP_NEWSRC_H_
-
-#include 
-#include "glib.h"
-
-typedef struct CamelNNTPNewsrc CamelNNTPNewsrc;
-
-int       camel_nntp_newsrc_get_highest_article_read    (CamelNNTPNewsrc *newsrc, char *group_name);
-void      camel_nntp_newsrc_mark_article_read           (CamelNNTPNewsrc *newsrc,
-							 char *group_name, int num);
-void      camel_nntp_newsrc_mark_range_read             (CamelNNTPNewsrc *newsrc,
-							 char *group_name, long low, long high);
-
-gboolean  camel_nntp_newsrc_article_is_read             (CamelNNTPNewsrc *newsrc,
-							 char *group_name, long num);
-
-GPtrArray *camel_nntp_newsrc_get_subscribed_group_names (CamelNNTPNewsrc *newsrc);
-GPtrArray *camel_nntp_newsrc_get_all_group_names        (CamelNNTPNewsrc *newsrc);
-void       camel_nntp_newsrc_free_group_names           (CamelNNTPNewsrc *newsrc, GPtrArray *group_names);
-
-void             camel_nntp_newsrc_write_to_file        (CamelNNTPNewsrc *newsrc, FILE *fp);
-void             camel_nntp_newsrc_write                (CamelNNTPNewsrc *newsrc);
-CamelNNTPNewsrc *camel_nntp_newsrc_read_for_server      (const char *server);
-
-#endif /* _CAMEL_NNTP_NEWSRC_H_ */
diff --git a/camel/providers/nntp/camel-nntp-provider.c b/camel/providers/nntp/camel-nntp-provider.c
deleted file mode 100644
index 214fd4b0fa..0000000000
--- a/camel/providers/nntp/camel-nntp-provider.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-provider.c: nntp provider registration code */
-
-/* 
- * Authors :
- *   Chris Toshok 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-nntp-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-
-static CamelProvider news_provider = {
-	"news",
-	"USENET news",
-
-	"This is a read-only provider for USENET newsgroups.",
-
-	"news",
-
-	CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_STORAGE,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-static CamelProvider nntp_provider = {
-	"nntp",
-	"USENET news via NNTP",
-
-	"This is a provider for reading from and posting to"
-	"USENET newsgroups.",
-
-	"news",
-
-	CAMEL_PROVIDER_IS_REMOTE,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	news_provider.object_types[CAMEL_PROVIDER_STORE] =
-		camel_nntp_store_get_type();
-#ifdef NOTYET
-	nntp_provider.object_types[CAMEL_PROVIDER_TRANSPORT] =
-		camel_nntp_transport_get_type();
-#endif
-
-	news_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-	nntp_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-
-	camel_session_register_provider (session, &news_provider);
-	camel_session_register_provider (session, &nntp_provider);
-}
-
-
-
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
deleted file mode 100644
index 74952015a4..0000000000
--- a/camel/providers/nntp/camel-nntp-store.c
+++ /dev/null
@@ -1,513 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-store.c : class for an nntp store */
-
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc. 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "libgnome/libgnome.h"
-
-#include "camel-folder-summary.h"
-#include "camel-nntp-store.h"
-#include "camel-nntp-folder.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-#include "string-utils.h"
-
-#define NNTP_PORT 119
-
-static CamelServiceClass *service_class = NULL;
-
-/* Returns the class for a CamelNNTPStore */
-#define CNNTPS_CLASS(so) CAMEL_NNTP_STORE_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CF_CLASS(so) CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-#define CNNTPF_CLASS(so) CAMEL_NNTP_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(so))
-
-static gboolean ensure_news_dir_exists (CamelNNTPStore *store);
-
-static gboolean
-nntp_store_connect (CamelService *service, CamelException *ex)
-{
-	struct hostent *h;
-	struct sockaddr_in sin;
-	int fd;
-	char *buf;
-	CamelNNTPStore *store = CAMEL_NNTP_STORE (service);
-
-	if (!ensure_news_dir_exists(store)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not open directory for news server: %s",
-				      strerror (errno));
-		return FALSE;
-	}
-
-	if (!service_class->connect (service, ex))
-		return FALSE;
-
-	h = camel_service_gethost (service, ex);
-	if (!h)
-		return FALSE;
-
-	sin.sin_family = h->h_addrtype;
-	sin.sin_port = htons (service->url->port ? service->url->port : NNTP_PORT);
-	memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-
-	fd = socket (h->h_addrtype, SOCK_STREAM, 0);
-	if (fd == -1 ||
-	    connect (fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not connect to %s (port %s): %s",
-				      service->url->host, service->url->port,
-				      strerror(errno));
-		if (fd > -1)
-			close (fd);
-		return FALSE;
-	}
-
-	store->ostream = camel_stream_fs_new_with_fd (fd);
-	store->istream = camel_stream_buffer_new (store->ostream,
-						  CAMEL_STREAM_BUFFER_READ);
-
-	/* Read the greeting */
-	buf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-	if (!buf) {
-		return -1;
-	}
-
-	g_free (buf);
-
-	/* get a list of extensions that the server supports */
-	if (CAMEL_NNTP_OK == camel_nntp_command (store, NULL, "LIST EXTENSIONS")) {
-		char *ext_response = camel_nntp_command_get_additional_data(store);
-
-		g_free (ext_response);
-	}
-
-	return TRUE;
-}
-
-static gboolean
-nntp_store_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelNNTPStore *store = CAMEL_NNTP_STORE (service);
-
-	if (!service->connected)
-		return TRUE;
-
-	camel_nntp_command (store, NULL, "QUIT");
-
-	if (store->newsrc)
-		camel_nntp_newsrc_write (store->newsrc);
-
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	camel_object_unref (CAMEL_OBJECT (store->ostream));
-	camel_object_unref (CAMEL_OBJECT (store->istream));
-	store->ostream = NULL;
-	store->istream = NULL;
-	return TRUE;
-}
-
-static char *
-nntp_store_get_name (CamelService *service, gboolean brief)
-{
-	/* Same info for long and brief... */
-	return g_strdup_printf ("USENET news via %s", service->url->host);
-}
-
-static CamelFolder *
-nntp_store_get_folder (CamelStore *store, const gchar *folder_name,
-		       gboolean get_folder, CamelException *ex)
-{
-	CamelNNTPFolder *new_nntp_folder;
-	CamelFolder *new_folder;
-	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (store);
-
-	/* if we haven't already read our .newsrc, read it now */
-	if (!nntp_store->newsrc)
-		nntp_store->newsrc = 
-		camel_nntp_newsrc_read_for_server (CAMEL_SERVICE(store)->url->host);
-
-	/* check if folder has already been created */
-	/* call the standard routine for that when  */
-	/* it is done ... */
-
-	new_nntp_folder =  CAMEL_NNTP_FOLDER (camel_object_new (CAMEL_NNTP_FOLDER_TYPE));
-	new_folder = CAMEL_FOLDER (new_nntp_folder);
-	
-	/* XXX We shouldn't be passing NULL here, but it's equivalent to
-	 * what was there before, and there's no
-	 * CamelNNTPFolder::get_subfolder yet anyway...
-	 */
-	CF_CLASS (new_folder)->init (new_folder, store, NULL,
-				     folder_name, ".", FALSE, ex);
-
-	return new_folder;
-}
-
-static char *
-nntp_store_get_folder_name (CamelStore *store, const char *folder_name,
-			    CamelException *ex)
-{
-	return g_strdup (folder_name);
-}
-
-static void
-finalize (CamelObject *object)
-{
-	CamelException ex;
-
-	camel_exception_init (&ex);
-	nntp_store_disconnect (CAMEL_SERVICE (object), &ex);
-	camel_exception_clear (&ex);
-}
-
-static void
-camel_nntp_store_class_init (CamelNNTPStoreClass *camel_nntp_store_class)
-{
-	CamelStoreClass *camel_store_class = CAMEL_STORE_CLASS (camel_nntp_store_class);
-	CamelServiceClass *camel_service_class = CAMEL_SERVICE_CLASS (camel_nntp_store_class);
-
-	service_class = CAMEL_SERVICE_CLASS (camel_type_get_global_classfuncs (camel_service_get_type ()));
-	
-	/* virtual method overload */
-	camel_service_class->connect = nntp_store_connect;
-	camel_service_class->disconnect = nntp_store_disconnect;
-	camel_service_class->get_name = nntp_store_get_name;
-
-	camel_store_class->get_folder = nntp_store_get_folder;
-	camel_store_class->get_folder_name = nntp_store_get_folder_name;
-}
-
-
-
-static void
-camel_nntp_store_init (gpointer object, gpointer klass)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-
-	service->url_flags = CAMEL_SERVICE_URL_NEED_HOST;
-}
-
-CamelType
-camel_nntp_store_get_type (void)
-{
-	static CamelType camel_nntp_store_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_nntp_store_type == CAMEL_INVALID_TYPE)	{
-		camel_nntp_store_type = camel_type_register (CAMEL_STORE_TYPE, "CamelNNTPStore",
-							     sizeof (CamelNNTPStore),
-							     sizeof (CamelNNTPStoreClass),
-							     (CamelObjectClassInitFunc) camel_nntp_store_class_init,
-							     NULL,
-							     (CamelObjectInitFunc) camel_nntp_store_init,
-							     (CamelObjectFinalizeFunc) finalize);
-	}
-	
-	return camel_nntp_store_type;
-}
-
-
-/**
- * camel_nntp_command: Send a command to a NNTP server.
- * @store: the NNTP store
- * @ret: a pointer to return the full server response in
- * @fmt: a printf-style format string, followed by arguments
- *
- * This command sends the command specified by @fmt and the following
- * arguments to the connected NNTP store specified by @store. It then
- * reads the server's response and parses out the status code. If
- * the caller passed a non-NULL pointer for @ret, camel_nntp_command
- * will set it to point to an buffer containing the rest of the
- * response from the NNTP server. (If @ret was passed but there was
- * no extended response, @ret will be set to NULL.) The caller must
- * free this buffer when it is done with it.
- *
- * Return value: one of CAMEL_NNTP_OK (command executed successfully),
- * CAMEL_NNTP_ERR (command encounted an error), or CAMEL_NNTP_FAIL
- * (a protocol-level error occurred, and Camel is uncertain of the
- * result of the command.)
- **/
-int
-camel_nntp_command (CamelNNTPStore *store, char **ret, char *fmt, ...)
-{
-	char *cmdbuf, *respbuf;
-	va_list ap;
-	int status;
-	int resp_code;
-	CamelException *ex;
-
-	va_start (ap, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, ap);
-	va_end (ap);
-
-	ex = camel_exception_new();
-
-	/* make sure we're connected */
-	if (store->ostream == NULL)
-		nntp_store_connect (CAMEL_SERVICE (store), ex);
-
-	if (camel_exception_get_id (ex)) {
-		camel_exception_free (ex);
-		return CAMEL_NNTP_FAIL;
-	}
-
-	/* Send the command */
-	camel_stream_write (store->ostream, cmdbuf, strlen (cmdbuf));
-	g_free (cmdbuf);
-	camel_stream_write (store->ostream, "\r\n", 2);
-
-	/* Read the response */
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (store->istream));
-
-	if (!respbuf) {
-		if (ret)
-			*ret = g_strdup (g_strerror (errno));
-		return CAMEL_NNTP_FAIL;
-	}
-	
-	resp_code = atoi (respbuf);
-		
-	if (resp_code < 400)
-		status = CAMEL_NNTP_OK;
-	else if (resp_code < 500)
-		status = CAMEL_NNTP_ERR;
-	else
-		status = CAMEL_NNTP_FAIL;
-	
-	if (ret) {
-		*ret = strchr (respbuf, ' ');
-		if (*ret)
-			*ret = g_strdup (*ret + 1);
-	}
-	g_free (respbuf);
-	
-	return status;
-}
-
-/**
- * camel_nntp_command_get_additional_data: get "additional data" from
- * a NNTP command.
- * @store: the NNTP store
- *
- * This command gets the additional data returned by
- * This command gets the additional data returned by "multi-line" POP
- * commands, such as LIST, RETR, TOP, and UIDL. This command _must_
- * be called after a successful (CAMEL_NNTP_OK) call to
- * camel_nntp_command for a command that has a multi-line response.
- * The returned data is un-byte-stuffed, and has lines termined by
- * newlines rather than CR/LF pairs.
- *
- * Return value: the data, which the caller must free.
- **/
-char *
-camel_nntp_command_get_additional_data (CamelNNTPStore *store)
-{
-	CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-	GPtrArray *data;
-	char *buf;
-	int i, status = CAMEL_NNTP_OK;
-
-	data = g_ptr_array_new ();
-	while (1) {
-		buf = camel_stream_buffer_read_line (stream);
-		if (!buf) {
-			status = CAMEL_NNTP_FAIL;
-			break;
-		}
-
-		if (!strcmp (buf, "."))
-			break;
-		if (*buf == '.')
-			memmove (buf, buf + 1, strlen (buf));
-		g_ptr_array_add (data, buf);
-	}
-
-	if (status == CAMEL_NNTP_OK) {
-		/* Append an empty string to the end of the array
-		 * so when we g_strjoinv it, we get a "\n" after
-		 * the last real line.
-		 */
-		g_ptr_array_add (data, "");
-		g_ptr_array_add (data, NULL);
-		buf = g_strjoinv ("\n", (char **)data->pdata);
-	} else
-		buf = NULL;
-
-	for (i = 0; i < data->len - 2; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-
-	return buf;
-}
-
-void
-camel_nntp_store_subscribe_group (CamelStore *store,
-				  const gchar *group_name)
-{
-	gchar *root_dir = camel_nntp_store_get_toplevel_dir(CAMEL_NNTP_STORE(store));
-	char *ret = NULL;
-	CamelException *ex = camel_exception_new();
-
-	if (camel_exception_get_id (ex)) {
-		g_free (root_dir);
-		camel_exception_free (ex);
-		return;
-	}
-
-	if (CAMEL_NNTP_OK  == camel_nntp_command ( CAMEL_NNTP_STORE (store),
-						   &ret, "GROUP %s", group_name)) {
-		/* we create an empty summary file here, so that when
-                   the group is opened we'll know we need to build it. */
-		gchar *summary_file;
-		int fd;
-		summary_file = g_strdup_printf ("%s/%s-ev-summary", root_dir, group_name);
-		
-		fd = open (summary_file, O_CREAT | O_RDWR, 0666);
-		close (fd);
-
-		g_free (summary_file);
-	}
-	if (ret) g_free (ret);
-
-	g_free (root_dir);
-	camel_exception_free (ex);
-}
-
-void
-camel_nntp_store_unsubscribe_group (CamelStore *store,
-				    const gchar *group_name)
-{
-	gchar *root_dir = camel_nntp_store_get_toplevel_dir(CAMEL_NNTP_STORE(store));
-	gchar *summary_file;
-
-	summary_file = g_strdup_printf ("%s/%s-ev-summary", root_dir, group_name);
-	if (g_file_exists (summary_file))
-		unlink (summary_file);
-	g_free (summary_file);
-
-	g_free (root_dir);
-}
-
-GList *
-camel_nntp_store_list_subscribed_groups(CamelStore *store)
-{
-	GList *group_name_list = NULL;
-	struct stat stat_buf;
-	gint stat_error = 0;
-	gchar *entry_name;
-	gchar *full_entry_name;
-	gchar *real_group_name;
-	struct dirent *dir_entry;
-	DIR *dir_handle;
-	gchar *root_dir = camel_nntp_store_get_toplevel_dir(CAMEL_NNTP_STORE(store));
-
-	dir_handle = opendir (root_dir);
-	g_return_val_if_fail (dir_handle, NULL);
-
-	/* read the first entry in the directory */
-	dir_entry = readdir (dir_handle);
-	while ((stat_error != -1) && (dir_entry != NULL)) {
-
-		/* get the name of the next entry in the dir */
-		entry_name = dir_entry->d_name;
-		full_entry_name = g_strdup_printf ("%s/%s", root_dir, entry_name);
-		stat_error = stat (full_entry_name, &stat_buf);
-		g_free (full_entry_name);
-
-		/* is it a normal file ending in -ev-summary ? */
-		if ((stat_error != -1) && S_ISREG (stat_buf.st_mode)) {
-			gboolean summary_suffix_found;
-
-			real_group_name = string_prefix (entry_name, "-ev-summary",
-							 &summary_suffix_found);
-
-			if (summary_suffix_found)
-				/* add the folder name to the list */
-				group_name_list = g_list_append (group_name_list, 
-								 real_group_name);
-		}
-		/* read next entry */
-		dir_entry = readdir (dir_handle);
-	}
-
-	closedir (dir_handle);
-
-	return group_name_list;
-}
-
-gchar *
-camel_nntp_store_get_toplevel_dir (CamelNNTPStore *store)
-{
-	CamelURL *url = CAMEL_SERVICE (store)->url;
-	char *top_dir;
-
-	g_assert(url != NULL);
-
-	top_dir = g_strdup_printf( "%s/evolution/news/%s",
-				   g_get_home_dir (),
-				   url->host );
-
-	return top_dir;
-}
-
-static gboolean
-ensure_news_dir_exists (CamelNNTPStore *store)
-{
-	gchar *dir = camel_nntp_store_get_toplevel_dir (store);
-	struct stat sb;
-	int rv;
-
-	rv = stat (dir, &sb);
-	if (-1 == rv && errno != ENOENT) {
-		g_free (dir);
-		return FALSE;
-	}
-
-	if (S_ISDIR (sb.st_mode)) {
-		g_free (dir);
-		return TRUE;
-	}
-	else {
-		rv = mkdir (dir, 0777);
-		g_free (dir);
-
-		if (-1 == rv)
-			return FALSE;
-		else
-			return TRUE;
-	}
-}
diff --git a/camel/providers/nntp/camel-nntp-store.h b/camel/providers/nntp/camel-nntp-store.h
deleted file mode 100644
index 3099f84962..0000000000
--- a/camel/providers/nntp/camel-nntp-store.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-store.h : class for an nntp store */
-
-/* 
- *
- * Copyright (C) 2000 Helix Code, Inc. 
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_NNTP_STORE_H
-#define CAMEL_NNTP_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-store.h"
-#include "camel-nntp-newsrc.h"
-
-#define CAMEL_NNTP_STORE_TYPE     (camel_nntp_store_get_type ())
-#define CAMEL_NNTP_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_NNTP_STORE_TYPE, CamelNNTPStore))
-#define CAMEL_NNTP_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_NNTP_STORE_TYPE, CamelNNTPStoreClass))
-#define IS_CAMEL_NNTP_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_NNTP_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;	
-
-#define CAMEL_NNTP_EXT_XOVER 0x01
-	guint32 extensions;
-
-	CamelNNTPNewsrc *newsrc;
-
-	CamelStream *istream, *ostream;
-} CamelNNTPStore;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelNNTPStoreClass;
-
-
-/* public methods */
-void camel_nntp_store_open (CamelNNTPStore *store, CamelException *ex);
-void camel_nntp_store_close (CamelNNTPStore *store, gboolean expunge,
-			     CamelException *ex);
-
-void camel_nntp_store_subscribe_group (CamelStore *store, const gchar *group_name);
-void camel_nntp_store_unsubscribe_group (CamelStore *store, const gchar *group_name);
-GList *camel_nntp_store_list_subscribed_groups(CamelStore *store);
-
-gchar *camel_nntp_store_get_toplevel_dir (CamelNNTPStore *store);
-
-/* support functions */
-enum { CAMEL_NNTP_OK, CAMEL_NNTP_ERR, CAMEL_NNTP_FAIL };
-int camel_nntp_command (CamelNNTPStore *store, char **ret, char *fmt, ...);
-char *camel_nntp_command_get_additional_data (CamelNNTPStore *store);
-
-/* Standard Camel function */
-CamelType camel_nntp_store_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_NNTP_STORE_H */
-
-
diff --git a/camel/providers/nntp/camel-nntp-utils.c b/camel/providers/nntp/camel-nntp-utils.c
deleted file mode 100644
index e0a331f2a7..0000000000
--- a/camel/providers/nntp/camel-nntp-utils.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-utils.c : utilities used by the nntp code. */
-
-/* 
- * Author : Chris Toshok  
- *
- * Copyright (C) 2000 Helix Code .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "camel-folder-summary.h"
-#include "camel-nntp-folder.h"
-#include "camel-nntp-store.h"
-#include "camel-nntp-utils.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-mem.h"
-
-#include 
-#include 
-
-static void
-get_XOVER_headers(CamelNNTPStore *nntp_store, CamelFolder *folder,
-		  int first_message, int last_message, CamelException *ex)
-{
-	int status;
-	CamelNNTPFolder *nntp_folder = CAMEL_NNTP_FOLDER (folder);
-
-	status = camel_nntp_command (nntp_store, NULL,
-				     "XOVER %d-%d",
-				     first_message,
-				     last_message);
-		
-	if (status == CAMEL_NNTP_OK) {
-		CamelStream *nntp_istream = nntp_store->istream;
-		gboolean done = FALSE;
-
-		while (!done) {
-			char *line;
-
-			line = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER ( nntp_istream ));
-
-			if (*line == '.') {
-				done = TRUE;
-			}
-			else {
-				CamelMessageInfo *new_info = g_new0(CamelMessageInfo, 1);
-				char **split_line = g_strsplit (line, "\t", 7);
-
-				new_info->subject = g_strdup(split_line[1]);
-				new_info->from = g_strdup(split_line[2]);
-				new_info->to = g_strdup(nntp_folder->group_name);
-				new_info->date_sent = header_decode_date(split_line[3], NULL);
-#if 0
-				/* XXX do we need to fill in both dates? */
-				new_info->headers.date_received = g_strdup(split_line[3]);
-#endif
-				new_info->size = atoi(split_line[5]);
-				new_info->uid = g_strdup_printf ("%s,%s", split_line[0], split_line[4]);
-				new_info->message_id = g_strdup(split_line[4]);
-				g_strfreev (split_line);
-
-				if (camel_nntp_newsrc_article_is_read (nntp_store->newsrc,
-								       nntp_folder->group_name,
-								       atoi (split_line[0])))
-				    new_info->flags |= CAMEL_MESSAGE_SEEN;
-
-				camel_folder_summary_add (nntp_folder->summary, new_info);
-			}
-			g_free (line);
-		}
-	}
-}
-
-#if 0
-static GArray*
-get_HEAD_headers(CamelNNTPStore *nntp_store, CamelFolder *folder,
-		 int first_message, int last_message, CamelException *ex)
-{
-	int i;
-	int status;
-
-	for (i = first_message; i < last_message; i ++) {
-		status = camel_nntp_command (nntp_store, NULL,
-					     "HEAD %d", i);
-
-		if (status == CAMEL_NNTP_OK) {
-			gboolean done = FALSE;
-			char *buf;
-			int buf_len;
-			int buf_alloc;
-			int h;
-			CamelStream *header_stream;
-			GArray *header_array;
-			CamelStream *nntp_istream;
-			CamelMessageInfo *new_info = g_new0(CamelMessageInfo, 1);
-
-			buf_alloc = 2048;
-			buf_len = 0;
-			buf = g_malloc(buf_alloc);
-			done = FALSE;
-
-			buf[0] = 0;
-
-			nntp_istream = nntp_store->istream;
-
-			while (!done) {
-				char *line;
-				int line_length;
-
-				line = camel_stream_buffer_read_line ( 
-						      CAMEL_STREAM_BUFFER ( nntp_istream ));
-				line_length = strlen ( line );
-
-				if (*line == '.') {
-					done = TRUE;
-				}
-				else {
-					if (buf_len + line_length > buf_alloc) {
-						buf_alloc *= 2;
-						buf = g_realloc (buf, buf_alloc);
-					}
-					strcat(buf, line);
-					strcat(buf, "\n");
-					buf_len += strlen(line);
-					g_free (line);
-				}
-			}
-
-			/* create a stream from which to parse the headers */
-			header_stream = camel_stream_mem_new_with_buffer(buf,
-								 buf_len,
-								 CAMEL_STREAM_MEM_READ);
-
-			header_array = get_header_array_from_stream (header_stream);
-
-			memset (&info, 0, sizeof(info));
-
-			for (h = 0; h < header_array->len; h ++) {
-				Rfc822Header *header = &((Rfc822Header*)header_array->data)[h];
-				if (!g_strcasecmp(header->name, "From"))
-					new_info->from = g_strdup(header->value);
-				else if (!g_strcasecmp(header->name, "To"))
-					new_info->to = g_strdup(header->value);
-				else if (!g_strcasecmp(header->name, "Subject"))
-					new_info->subject = g_strdup(header->value);
-				else if (!g_strcasecmp(header->name, "Message-ID")) {
-					new_info->uid = g_strdup_printf("%d,%s", i, header->value);
-					new_info->message_id = g_strdup(header->value);
-				}
-				else if (!g_strcasecmp(header->name, "Date")) {
-					new_info->date_sent = header_decode_date (header->value);
-#if 0
-					new_info->date_sent = g_strdup(header->value);
-					new_info->date_received = g_strdup(header->value);
-#endif
-				}
-			}
-
-			camel_folder_summary_add (nntp_folder->summary, new_info);
-		}
-		else if (status == CAMEL_NNTP_FAIL) {
-			/* nasty things are afoot */
-			g_warning ("failure doing HEAD\n");
-			break;
-		}
-	}
-}
-#endif
-
-void
-camel_nntp_get_headers (CamelStore *store,
-			CamelNNTPFolder *nntp_folder,
-			CamelException *ex)
-{
-	CamelNNTPStore *nntp_store = CAMEL_NNTP_STORE (store);
-	CamelFolder *folder = CAMEL_FOLDER (nntp_folder);
-	char *ret;
-	int first_message, nb_message, last_message;
-	int status;
-
-	status = camel_nntp_command (nntp_store, &ret,
-				     "GROUP %s", CAMEL_NNTP_FOLDER (folder)->group_name);
-
-	sscanf (ret, "%d %d %d", &nb_message, &first_message, &last_message);
-	g_free (ret);
-
-	if (status != CAMEL_NNTP_OK) {
-		/* XXX throw invalid group exception */
-		printf ("invalid group\n");
-		return;
-	}
-
-#if 0
-	if (nntp_store->extensions & CAMEL_NNTP_EXT_XOVER) {
-#endif
-		get_XOVER_headers (nntp_store, folder, first_message, last_message, ex);
-#if 0
-	}
-	else {
-		get_HEAD_headers (nntp_store, folder, first_message, last_message, ex);
-	}
-#endif
-}
-
diff --git a/camel/providers/nntp/camel-nntp-utils.h b/camel/providers/nntp/camel-nntp-utils.h
deleted file mode 100644
index f28697c744..0000000000
--- a/camel/providers/nntp/camel-nntp-utils.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-nntp-utils.h : Utilities for the NNTP provider */
-
-/* 
- *
- * Author : Chris Toshok  
- *
- * Copyright (C) 1999 Helix Code .
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_NNTP_UTILS_H
-#define CAMEL_NNTP_UTILS_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-void camel_nntp_get_headers (CamelStore *store, CamelNNTPFolder *nntp_folder, CamelException *ex);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_NNTP_UTILS_H */
diff --git a/camel/providers/nntp/libcamelnntp.urls b/camel/providers/nntp/libcamelnntp.urls
deleted file mode 100644
index dee2e70f14..0000000000
--- a/camel/providers/nntp/libcamelnntp.urls
+++ /dev/null
@@ -1,2 +0,0 @@
-news
-nntp
diff --git a/camel/providers/nntp/test-newsrc.c b/camel/providers/nntp/test-newsrc.c
deleted file mode 100644
index c4b985e565..0000000000
--- a/camel/providers/nntp/test-newsrc.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include 
-#include 
-#include "camel-nntp-newsrc.h"
-
-int
-main(int argc, char *argv[])
-{
-  CamelNNTPNewsrc *newsrc = camel_nntp_newsrc_read_for_server (argv[1]);
-  camel_nntp_newsrc_write_to_file (newsrc, stdout);
-}
diff --git a/camel/providers/pop3/.cvsignore b/camel/providers/pop3/.cvsignore
deleted file mode 100644
index 7d926a5545..0000000000
--- a/camel/providers/pop3/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/pop3/Makefile.am b/camel/providers/pop3/Makefile.am
deleted file mode 100644
index ffa62561be..0000000000
--- a/camel/providers/pop3/Makefile.am
+++ /dev/null
@@ -1,33 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelpop3includedir = $(includedir)/camel
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelpop3.la
-provider_DATA = libcamelpop3.urls
-
-INCLUDES =					\
-	-I..					\
-	-I$(srcdir)/..				\
-	-I$(srcdir)/../../..			\
-        -I$(includedir)				\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR)			\
-	-I$(top_srcdir)/camel			\
-	$(KRB4_CFLAGS)				\
-	-DG_LOG_DOMAIN=\"camel-pop3-provider\"
-
-libcamelpop3_la_SOURCES = 			\
-	camel-pop3-folder.c			\
-	camel-pop3-provider.c			\
-	camel-pop3-store.c
-
-libcamelpop3include_HEADERS =			\
-	camel-pop3-folder.h			\
-	camel-pop3-store.h
-
-
-libcamelpop3_la_LDFLAGS = $(KRB4_LDFLAGS) -version-info 0:0:0
-
-EXTRA_DIST = libcamelpop3.urls
diff --git a/camel/providers/pop3/camel-pop3-folder.c b/camel/providers/pop3/camel-pop3-folder.c
deleted file mode 100644
index 6dbba64c20..0000000000
--- a/camel/providers/pop3/camel-pop3-folder.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-folder.c : class for a pop3 folder */
-
-/* 
- * Authors:
- *   Dan Winship 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "camel-pop3-folder.h"
-#include "camel-pop3-store.h"
-#include "camel-exception.h"
-#include "camel-stream-mem.h"
-#include "camel-stream-filter.h"
-#include "camel-mime-message.h"
-
-#include 
-#include 
-
-#define CF_CLASS(o) (CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS(o)))
-static CamelFolderClass *parent_class;
-
-static void pop3_finalize (CamelObject *object);
-
-static void pop3_sync (CamelFolder *folder, gboolean expunge,
-		       CamelException *ex);
-
-static gint pop3_get_message_count (CamelFolder *folder);
-static GPtrArray *pop3_get_uids (CamelFolder *folder);
-static CamelMimeMessage *pop3_get_message (CamelFolder *folder, 
-					   const char *uid,
-					   CamelException *ex);
-static void pop3_set_message_flags (CamelFolder *folder, const char *uid,
-				    guint32 flags, guint32 set);
-
-static GPtrArray *parse_listing (int count, char *data);
-
-static void
-camel_pop3_folder_class_init (CamelPop3FolderClass *camel_pop3_folder_class)
-{
-	CamelFolderClass *camel_folder_class =
-		CAMEL_FOLDER_CLASS (camel_pop3_folder_class);
-
-	parent_class = CAMEL_FOLDER_CLASS(camel_type_get_global_classfuncs (camel_folder_get_type ()));
-
-	/* virtual method overload */
-	camel_folder_class->sync = pop3_sync;
-
-	camel_folder_class->get_message_count = pop3_get_message_count;
-	camel_folder_class->get_uids = pop3_get_uids;
-	camel_folder_class->free_uids = camel_folder_free_nop;
-
-	camel_folder_class->get_message = pop3_get_message;
-	camel_folder_class->set_message_flags = pop3_set_message_flags;
-}
-
-static void
-camel_pop3_folder_init (gpointer object)
-{
-	CamelFolder *folder = CAMEL_FOLDER (object);
-
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = FALSE;
-	folder->has_summary_capability = FALSE;
-	folder->has_search_capability = FALSE;
-}
-
-CamelType
-camel_pop3_folder_get_type (void)
-{
-	static CamelType camel_pop3_folder_type = CAMEL_INVALID_TYPE;
-
-	if (!camel_pop3_folder_type) {
-		camel_pop3_folder_type = camel_type_register (CAMEL_FOLDER_TYPE, "CamelPop3Folder",
-							      sizeof (CamelPop3Folder),
-							      sizeof (CamelPop3FolderClass),
-							      (CamelObjectClassInitFunc) camel_pop3_folder_class_init,
-							      NULL,
-							      (CamelObjectInitFunc) camel_pop3_folder_init,
-							      (CamelObjectFinalizeFunc) pop3_finalize);
-	}
-
-	return camel_pop3_folder_type;
-}
-
-void
-pop3_finalize (CamelObject *object)
-{
-	CamelPop3Folder *pop3_folder = CAMEL_POP3_FOLDER (object);
-
-	camel_folder_free_deep (NULL, pop3_folder->uids);
-	g_free (pop3_folder->flags);
-}
-
-CamelFolder *
-camel_pop3_folder_new (CamelStore *parent, CamelException *ex)
-{
-	CamelPop3Store *pop3_store = CAMEL_POP3_STORE (parent);
-	CamelPop3Folder *pop3_folder;
-	GPtrArray *uids;
-	int status, count;
-	char *data;
-
-	status = camel_pop3_command (pop3_store, &data, "STAT");
-	if (status != CAMEL_POP3_OK) {
-		CamelService *service = CAMEL_SERVICE (parent);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not get message count from POP "
-				      "server %s: %s.", service->url->host,
-				      data ? data : "Unknown error");
-		g_free (data);
-		return NULL;
-	}
-
-	count = atoi (data);
-	g_free (data);
-
-	if (pop3_store->supports_uidl != FALSE) {
-		status = camel_pop3_command (pop3_store, NULL, "UIDL");
-		if (status != CAMEL_POP3_OK)
-			pop3_store->supports_uidl = FALSE;
-	}
-
-	if (pop3_store->supports_uidl == FALSE) {
-		int i;
-
-		uids = g_ptr_array_new ();
-		g_ptr_array_set_size (uids, count);
-
-		for (i = 0; i < count; i++)
-			uids->pdata[i] = g_strdup_printf ("%d", i + 1);
-	} else {
-		data = camel_pop3_command_get_additional_data (pop3_store, ex);
-		if (camel_exception_is_set (ex))
-			return NULL;
-
-		uids = parse_listing (count, data);
-		g_free (data);
-
-		if (!uids) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Could not open folder: message "
-					      "listing was incomplete.");
-			return NULL;
-		}
-	}
-
-	pop3_folder = CAMEL_POP3_FOLDER(camel_object_new (CAMEL_POP3_FOLDER_TYPE));
-	CF_CLASS (pop3_folder)->init ((CamelFolder *)pop3_folder, parent,
-				      NULL, "inbox", "/", TRUE, ex);
-	pop3_folder->uids = uids;
-	pop3_folder->flags = g_new0 (guint32, uids->len);
-
-	return (CamelFolder *)pop3_folder;
-}
-
-static void
-pop3_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	CamelPop3Folder *pop3_folder;
-	CamelPop3Store *pop3_store;
-	int i, status;
-	char *resp;
-
-	if (!expunge)
-		return;
-
-	pop3_folder = CAMEL_POP3_FOLDER (folder);
-	pop3_store = CAMEL_POP3_STORE (folder->parent_store);
-
-	for (i = 0; i < pop3_folder->uids->len; i++) {
-		if (pop3_folder->flags[i] & CAMEL_MESSAGE_DELETED) {
-			status = camel_pop3_command (pop3_store, &resp,
-						     "DELE %d", i + 1);
-			if (status != CAMEL_POP3_OK) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-						      "Unable to sync folder"
-						      "%s%s", resp ? ": " : "",
-						      resp ? resp : "");
-				g_free (resp);
-				return;
-			}
-		}
-	}
-
-	camel_pop3_store_expunge (pop3_store, ex);
-}
-
-
-static GPtrArray *
-parse_listing (int count, char *data)
-{
-	GPtrArray *ans;
-	char *p;
-	int index, len;
-
-	ans = g_ptr_array_new ();
-	g_ptr_array_set_size (ans, count);
-
-	p = data;
-	while (*p) {
-		index = strtoul (p, &p, 10);
-		len = strcspn (p, "\n");
-		if (index <= count && *p == ' ')
-			ans->pdata[index - 1] = g_strndup (p + 1, len - 1);
-		p += len;
-		if (*p == '\n')
-			p++;
-	}
-
-	for (index = 0; index < count; index++) {
-		if (ans->pdata[index] == NULL) {
-			g_ptr_array_free (ans, TRUE);
-			return NULL;
-		}
-	}
-
-	return ans;
-}
-
-static int
-uid_to_number (CamelPop3Folder *pop3_folder, const char *uid)
-{
-	int i;
-
-	for (i = 0; i < pop3_folder->uids->len; i++) {
-		if (!strcmp (uid, pop3_folder->uids->pdata[i]))
-			return i + 1;
-	}
-
-	return -1;
-}
-
-
-static CamelMimeMessage *
-pop3_get_message (CamelFolder *folder, const char *uid, CamelException *ex)
-{
-	int status, num;
-	char *result, *body;
-	CamelStream *msgstream;
-	CamelMimeMessage *msg;
-
-	num = uid_to_number (CAMEL_POP3_FOLDER (folder), uid);
-	if (num == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				      "No message with uid %s", uid);
-		return NULL;
-	}
-
-	status = camel_pop3_command (CAMEL_POP3_STORE (folder->parent_store),
-				     &result, "RETR %d", num);
-	if (status != CAMEL_POP3_OK) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not retrieve message from POP "
-				      "server %s: %s.", service->url->host,
-				      status == CAMEL_POP3_ERR ? result :
-				      "Unknown error");
-		g_free (result);
-		return NULL;
-	}
-	g_free (result);
-
-	body = camel_pop3_command_get_additional_data (CAMEL_POP3_STORE (folder->parent_store), ex);
-	if (!body) {
-		CamelService *service = CAMEL_SERVICE (folder->parent_store);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not retrieve message from POP "
-				      "server %s: %s", service->url->host,
-				      camel_exception_get_description (ex));
-		return NULL;
-	}
-
-	msgstream = camel_stream_mem_new_with_buffer (body, strlen (body));
-	g_free (body);
-	
-	msg = camel_mime_message_new ();
-	camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (msg),
-						  CAMEL_STREAM (msgstream));
-
-	camel_object_unref (CAMEL_OBJECT (msgstream));
-
-	return msg;
-}
-
-static void
-pop3_set_message_flags (CamelFolder *folder, const char *uid,
-			guint32 flags, guint32 set)
-{
-	CamelPop3Folder *pop3_folder = CAMEL_POP3_FOLDER (folder);
-	int num;
-
-	num = uid_to_number (pop3_folder, uid);
-	if (num == -1)
-		return;
-
-	pop3_folder->flags[num - 1] =
-		(pop3_folder->flags[num] & ~flags) | (set & flags);
-}
-
-static gint
-pop3_get_message_count (CamelFolder *folder)
-{
-	CamelPop3Folder *pop3_folder = CAMEL_POP3_FOLDER (folder);
-
-	return pop3_folder->uids->len;
-}
-
-static GPtrArray *
-pop3_get_uids (CamelFolder *folder)
-{
-	CamelPop3Folder *pop3_folder = CAMEL_POP3_FOLDER (folder);
-
-	return pop3_folder->uids;
-}
diff --git a/camel/providers/pop3/camel-pop3-folder.h b/camel/providers/pop3/camel-pop3-folder.h
deleted file mode 100644
index b4cfd469b6..0000000000
--- a/camel/providers/pop3/camel-pop3-folder.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-folder.h : Class for a POP3 folder */
-
-/* 
- * Author:
- *   Dan Winship 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_POP3_FOLDER_H
-#define CAMEL_POP3_FOLDER_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-folder.h"
-
-#define CAMEL_POP3_FOLDER_TYPE     (camel_pop3_folder_get_type ())
-#define CAMEL_POP3_FOLDER(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_POP3_FOLDER_TYPE, CamelPop3Folder))
-#define CAMEL_POP3_FOLDER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_POP3_FOLDER_TYPE, CamelPop3FolderClass))
-#define IS_CAMEL_POP3_FOLDER(o)    (CAMEL_CHECK_TYPE((o), CAMEL_POP3_FOLDER_TYPE))
-
-
-typedef struct {
-	CamelFolder parent_object;
-
-	GPtrArray *uids;
-	guint32 *flags;
-
-} CamelPop3Folder;
-
-
-
-typedef struct {
-	CamelFolderClass parent_class;
-
-	/* Virtual methods */	
-	
-} CamelPop3FolderClass;
-
-
-/* public methods */
-CamelFolder *camel_pop3_folder_new (CamelStore *parent, CamelException *ex);
-
-/* Standard Camel function */
-CamelType camel_pop3_folder_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_POP3_FOLDER_H */
diff --git a/camel/providers/pop3/camel-pop3-provider.c b/camel/providers/pop3/camel-pop3-provider.c
deleted file mode 100644
index 52399c99ec..0000000000
--- a/camel/providers/pop3/camel-pop3-provider.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-provider.c: pop3 provider registration code */
-
-/* 
- * Authors :
- *   Dan Winship 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-pop3-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static CamelProvider pop3_provider = {
-	"pop",
-	"POP",
-
-	"For connecting to POP servers. The POP protocol can also be used "
-	"to retrieve mail from certain web mail providers and proprietary "
-	"email systems.",
-
-	"mail",
-
-	CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	pop3_provider.object_types[CAMEL_PROVIDER_STORE] =
-		camel_pop3_store_get_type();
-
-	pop3_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-	
-	camel_session_register_provider (session, &pop3_provider);
-}
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
deleted file mode 100644
index 78d7d106e5..0000000000
--- a/camel/providers/pop3/camel-pop3-store.c
+++ /dev/null
@@ -1,750 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-store.c : class for a pop3 store */
-
-/* 
- * Authors:
- *   Dan Winship 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#define d(x)
-
-#include "config.h"
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-pop3-store.h"
-#include "camel-pop3-folder.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-session.h"
-#include "camel-exception.h"
-#include "camel-url.h"
-#include "md5-utils.h"
-
-/* Specified in RFC 1939 */
-#define POP3_PORT 110
-
-#ifdef HAVE_KRB4
-/* Specified nowhere */
-#define KPOP_PORT 1109
-
-#include 
-#endif
-
-static CamelServiceClass *service_class = NULL;
-
-static void finalize (CamelObject *object);
-
-static gboolean pop3_connect (CamelService *service, CamelException *ex);
-static gboolean pop3_disconnect (CamelService *service, CamelException *ex);
-static GList *query_auth_types (CamelService *service, CamelException *ex);
-static void free_auth_types (CamelService *service, GList *authtypes);
-static char *get_name (CamelService *service, gboolean brief);
-
-static CamelFolder *get_folder (CamelStore *store, const char *folder_name, 
-				gboolean create, CamelException *ex);
-static char *get_folder_name (CamelStore *store, const char *folder_name, 
-			      CamelException *ex);
-static char *get_root_folder_name (CamelStore *store, CamelException *ex);
-
-static int pop3_get_response (CamelPop3Store *store, char **ret);
-
-
-static void
-camel_pop3_store_class_init (CamelPop3StoreClass *camel_pop3_store_class)
-{
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_pop3_store_class);
-	CamelStoreClass *camel_store_class =
-		CAMEL_STORE_CLASS (camel_pop3_store_class);
-	
-	service_class = CAMEL_SERVICE_CLASS(camel_type_get_global_classfuncs (camel_service_get_type ()));
-
-	/* virtual method overload */
-	camel_service_class->connect = pop3_connect;
-	camel_service_class->disconnect = pop3_disconnect;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->free_auth_types = free_auth_types;
-	camel_service_class->get_name = get_name;
-
-	camel_store_class->get_folder = get_folder;
-	camel_store_class->get_folder_name = get_folder_name;
-	camel_store_class->get_root_folder_name = get_root_folder_name;
-}
-
-
-
-static void
-camel_pop3_store_init (gpointer object, gpointer klass)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-
-	service->url_flags = (CAMEL_SERVICE_URL_NEED_USER | CAMEL_SERVICE_URL_NEED_HOST);
-}
-
-CamelType
-camel_pop3_store_get_type (void)
-{
-	static CamelType camel_pop3_store_type = CAMEL_INVALID_TYPE;
-
-	if (!camel_pop3_store_type) {
-		camel_pop3_store_type = camel_type_register (CAMEL_STORE_TYPE, "CamelPop3Store",
-							     sizeof (CamelPop3Store),
-							     sizeof (CamelPop3StoreClass),
-							     (CamelObjectClassInitFunc) camel_pop3_store_class_init,
-							     NULL,
-							     (CamelObjectInitFunc) camel_pop3_store_init,
-							     finalize);
-	}
-
-	return camel_pop3_store_type;
-}
-
-static void
-finalize (CamelObject *object)
-{
-	CamelPop3Store *pop3_store = CAMEL_POP3_STORE (object);
-	CamelException ex;
-
-	camel_exception_init (&ex);
-	pop3_disconnect (CAMEL_SERVICE (object), &ex);
-	camel_exception_clear (&ex);
-
-	if (pop3_store->apop_timestamp)
-		g_free (pop3_store->apop_timestamp);
-}
-
-static CamelServiceAuthType password_authtype = {
-	"Password",
-
-	"This option will connect to the POP server using a plaintext "
-	"password. This is the only option supported by many POP servers.",
-
-	"",
-	TRUE
-};
-
-static CamelServiceAuthType apop_authtype = {
-	"APOP",
-
-	"This option will connect to the POP server using an encrypted "
-	"password via the APOP protocol. This may not work for all users "
-	"even on servers that claim to support it.",
-
-	"+APOP",
-	TRUE
-};
-
-#ifdef HAVE_KRB4
-static CamelServiceAuthType kpop_authtype = {
-	"Kerberos 4 (KPOP)",
-
-	"This will connect to the POP server and use Kerberos 4 "
-	"to authenticate to it.",
-
-	"+KPOP",
-	FALSE
-};
-#endif
-
-static gboolean
-connect_to_server (CamelService *service, gboolean real, CamelException *ex)
-{
-	CamelPop3Store *store = CAMEL_POP3_STORE (service);
-	struct hostent *h;
-	struct sockaddr_in sin;
-	int fd, status;
-	char *buf, *apoptime, *apopend;
-#ifdef HAVE_KRB4
-	gboolean kpop = (service->url->port == KPOP_PORT);
-#endif
-
-	h = camel_service_gethost (service, ex);
-	if (!h)
-		return FALSE;
-
-	sin.sin_family = h->h_addrtype;
-	if (service->url->port)
-		sin.sin_port = htons (service->url->port);
-	else
-		sin.sin_port = htons (POP3_PORT);
-	memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-
-	fd = socket (h->h_addrtype, SOCK_STREAM, 0);
-	if (fd == -1 ||
-	    connect (fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
-		if (real) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      "Could not connect to %s: %s",
-					      h->h_name, g_strerror(errno));
-		}
-		if (fd > -1)
-			close (fd);
-		return FALSE;
-	}
-
-#ifdef HAVE_KRB4
-	if (kpop) {
-		KTEXT_ST ticket_st;
-		MSG_DAT msg_data;
-		CREDENTIALS cred;
-		Key_schedule schedule;
-		char *hostname;
-
-		/* Need to copy hostname, because krb_realmofhost will
-		 * call gethostbyname as well, and gethostbyname uses
-		 * static storage.
-		 */
-		hostname = g_strdup (h->h_name);
-		status = krb_sendauth (0, fd, &ticket_st, "pop", hostname,
-				       krb_realmofhost (hostname), 0,
-				       &msg_data, &cred, schedule,
-				       NULL, NULL, "KPOPV0.1");
-		g_free (hostname);
-		if (status != KSUCCESS) {
-			if (real) {
-				camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-						      "Could not authenticate "
-						      "to KPOP server: %s",
-						      krb_err_txt[status]);
-			}
-			close (fd);
-			return FALSE;
-		}
-
-		if (!service->url->passwd)
-			service->url->passwd = g_strdup (service->url->user);
-	}
-#endif /* HAVE_KRB4 */
-
-	store->ostream = camel_stream_fs_new_with_fd (fd);
-	store->istream = camel_stream_buffer_new (store->ostream,
-						  CAMEL_STREAM_BUFFER_READ);
-
-	/* Read the greeting, check status */
-	status = pop3_get_response (store, &buf);
-	if (status != CAMEL_POP3_OK) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "%s: %s", status == CAMEL_POP3_ERR ?
-				      "Error connecting to POP server" :
-				      "Error reading greeting from POP server",
-				      buf);
-		g_free (buf);
-		pop3_disconnect (service, ex);
-		return FALSE;
-	}
-
-	apoptime = strchr (buf, '<');
-	apopend = apoptime ? strchr (apoptime, '>') : NULL;
-	if (apopend) {
-		store->apop_timestamp = g_strndup (apoptime,
-						   apopend - apoptime + 1);
-		memmove (apoptime, apopend + 1, strlen (apopend + 1));
-	}
-	store->implementation = buf;
-
-	/* Check extensions */
-	store->login_delay = -1;
-	store->supports_top = -1;
-	store->supports_uidl = -1;
-	store->expires = -1;
-
-	status = camel_pop3_command (store, NULL, "CAPA");
-	if (status == CAMEL_POP3_OK) {
-		char *p;
-		int len;
-
-		buf = camel_pop3_command_get_additional_data (store, ex);
-		if (camel_exception_is_set (ex)) {
-			pop3_disconnect (service, ex);
-			return FALSE;
-		}
-
-		p = buf;
-		while (*p) {
-			len = strcspn (p, "\n");
-			if (!strncmp (p, "IMPLEMENTATION ", 15)) {
-				g_free (store->implementation);
-				store->implementation =
-					g_strndup (p + 15, len - 15);
-			} else if (len == 3 && !strncmp (p, "TOP", 3))
-				store->supports_top = TRUE;
-			else if (len == 4 && !strncmp (p, "UIDL", 4))
-				store->supports_uidl = TRUE;
-			else if (!strncmp (p, "LOGIN-DELAY ", 12))
-				store->login_delay = atoi (p + 12);
-			else if (!strncmp (p, "EXPIRE NEVER", 12))
-				store->expires = FALSE;
-			else if (!strncmp (p, "EXPIRE ", 7))
-				store->expires = TRUE;
-
-			p += len;
-			if (*p)
-				p++;
-		}
-
-		g_free (buf);
-	}
-
-	return TRUE;
-}
-
-static GList *
-query_auth_types (CamelService *service, CamelException *ex)
-{
-	CamelPop3Store *store = CAMEL_POP3_STORE (service);
-	GList *ret = NULL;
-	gboolean passwd = TRUE, apop = TRUE;
-#ifdef HAVE_KRB4
-	gboolean kpop = TRUE;
-	int saved_port;
-#endif
-
-	if (service->url && !service->url->empty) {
-		passwd = connect_to_server (service, FALSE, ex);
-		if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-			return NULL;
-		apop = store->apop_timestamp != NULL;
-		if (passwd)
-			pop3_disconnect (service, ex);
-#ifdef HAVE_KRB4
-		saved_port = service->url->port;
-		service->url->port = KPOP_PORT;
-		kpop = connect_to_server (service, FALSE, ex);
-		service->url->port = saved_port;
-		if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE)
-			return NULL;
-		if (kpop)
-			pop3_disconnect (service, ex);
-#endif
-	}
-
-	if (passwd)
-		ret = g_list_append (ret, &password_authtype);
-	if (apop)
-		ret = g_list_append (ret, &apop_authtype);
-#ifdef HAVE_KRB4
-	if (kpop)
-		ret = g_list_append (ret, &kpop_authtype);
-#endif
-
-	if (!ret) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not connect to POP server on "
-				      "%s.", service->url->host);
-	}				      
-
-	return ret;
-}
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
-	g_list_free (authtypes);
-}
-
-static char *
-get_name (CamelService *service, gboolean brief)
-{
-	if (brief)
-		return g_strdup_printf ("POP server %s", service->url->host);
-	else {
-		return g_strdup_printf ("POP service for %s on %s",
-					service->url->user,
-					service->url->host);
-	}
-}
-
-
-/**
- * camel_pop3_store_expunge:
- * @store: the store
- * @ex: a CamelException
- *
- * Expunge messages from the store. This will result in the connection
- * being closed, which may cause later commands to fail if they can't
- * reconnect.
- **/
-void
-camel_pop3_store_expunge (CamelPop3Store *store, CamelException *ex)
-{
-	camel_pop3_command (store, NULL, "QUIT");
-	pop3_disconnect (CAMEL_SERVICE (store), ex);
-}
-
-
-static gboolean
-pop3_try_authenticate (CamelService *service, gboolean kpop,
-		       const char *errmsg, CamelException *ex)
-{
-	CamelPop3Store *store = (CamelPop3Store *)service;
-	int status;
-	char *msg;
-
-	/* The KPOP code will have set the password to be the username
-	 * in connect_to_server. Password and APOP are the only other
-	 * cases, and they both need a password. So if there's no
-	 * password stored, query for it.
-	 */
-	if (!service->url->passwd) {
-		char *prompt;
-
-		prompt = g_strdup_printf ("%sPlease enter the POP3 password "
-					  "for %s@%s", errmsg ? errmsg : "",
-					  service->url->user,
-					  service->url->host);
-		service->url->passwd = camel_session_query_authenticator (
-			camel_service_get_session (service),
-			CAMEL_AUTHENTICATOR_ASK, prompt, TRUE,
-			service, "password", ex);
-		g_free (prompt);
-		if (!service->url->passwd)
-			return FALSE;
-	}
-
-	if (!service->url->authmech || kpop) {
-		status = camel_pop3_command (store, &msg, "USER %s",
-					     service->url->user);
-		if (status != CAMEL_POP3_OK) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-					      "Unable to connect to POP "
-					      "server.\nError sending "
-					      "username: %s",
-					      msg ? msg : "(Unknown)");
-			g_free (msg);
-			return FALSE;
-		}
-		g_free (msg);
-
-		status = camel_pop3_command (store, &msg, "PASS %s",
-					     service->url->passwd);
-	} else if (!strcmp (service->url->authmech, "+APOP")
-		   && store->apop_timestamp) {
-		char *secret, md5asc[33], *d;
-		unsigned char md5sum[16], *s;
-
-		secret = g_strdup_printf ("%s%s", store->apop_timestamp,
-					  service->url->passwd);
-		md5_get_digest (secret, strlen (secret), md5sum);
-		g_free (secret);
-
-		for (s = md5sum, d = md5asc; d < md5asc + 32; s++, d += 2)
-			sprintf (d, "%.2x", *s);
-
-		status = camel_pop3_command (store, &msg, "APOP %s %s",
-					     service->url->user, md5asc);
-	} else {
-		camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-				     "Unable to connect to POP server.\n"
-				     "No support for requested authentication "
-				     "mechanism.");
-		return FALSE;
-	}
-
-	if (status != CAMEL_POP3_OK) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE,
-				      "Unable to connect to POP server.\n"
-				      "Error sending password: %s",
-				      msg ? msg : "(Unknown)");
-	}
-
-	g_free (msg);
-	return camel_exception_is_set (ex);
-}
-
-static gboolean
-pop3_connect (CamelService *service, CamelException *ex)
-{
-	char *errbuf = NULL;
-	gboolean tryagain, kpop = FALSE;
-
-#ifdef HAVE_KRB4
-	kpop = (service->url->authmech &&
-		!strcmp (service->url->authmech, "+KPOP"));
-
-	if (kpop && service->url->port == 0)
-		service->url->port = KPOP_PORT;
-#endif
-
-	d(printf ("POP3: Connecting to %s\n", service->url->host));
-	if (!connect_to_server (service, TRUE, ex))
-		return FALSE;
-
-	camel_exception_clear (ex);
-	do {
-		if (camel_exception_is_set (ex)) {
-			errbuf = g_strdup_printf (
-				"%s\n\n",
-				camel_exception_get_description (ex));
-
-			/* Uncache the password before prompting again. */
-			camel_session_query_authenticator (
-				camel_service_get_session (service),
-				CAMEL_AUTHENTICATOR_TELL, NULL, TRUE, service,
-				"password", ex);
-			g_free (service->url->passwd);
-			service->url->passwd = NULL;
-		}
-
-		tryagain = pop3_try_authenticate (service, kpop, errbuf, ex);
-		g_free (errbuf);
-	} while (tryagain);
-
-	if (camel_exception_is_set (ex)) {
-		pop3_disconnect (service, NULL);
-		return FALSE;
-	}
-
-	return service_class->connect (service, ex);
-}
-
-static gboolean
-pop3_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelPop3Store *store = CAMEL_POP3_STORE (service);
-
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	d(printf ("POP3: Disconnecting from %s\n", service->url->host));
-
-	if (store->ostream) {
-		camel_object_unref (CAMEL_OBJECT (store->ostream));
-		store->ostream = NULL;
-	}
-	if (store->istream) {
-		camel_object_unref (CAMEL_OBJECT (store->istream));
-		store->istream = NULL;
-	}
-
-	if (store->apop_timestamp) {
-		g_free (store->apop_timestamp);
-		store->apop_timestamp = NULL;
-	}
-
-	return TRUE;
-}
-
-static CamelFolder *
-get_folder (CamelStore *store, const char *folder_name,
-	    gboolean create, CamelException *ex)
-{
-	CamelService *service = CAMEL_SERVICE (store);
-
-	if (!camel_service_is_connected (service)) {
-		if (!camel_service_connect (service, ex))
-			return NULL;
-	}
-	return camel_pop3_folder_new (store, ex);
-}
-
-static char *
-get_folder_name (CamelStore *store, const char *folder_name,
-		 CamelException *ex)
-{
-	if (!g_strcasecmp (folder_name, "inbox"))
-		return g_strdup ("inbox");
-	else {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID,
-				      "No such folder `%s'.", folder_name);
-		return NULL;
-	}
-}
-
-static char *
-get_root_folder_name (CamelStore *store, CamelException *ex)
-{
-	return g_strdup ("inbox");
-}
-
-
-/**
- * camel_pop3_command: Send a command to a POP3 server.
- * @store: the POP3 store
- * @ret: a pointer to return the full server response in
- * @fmt: a printf-style format string, followed by arguments
- *
- * This command sends the command specified by @fmt and the following
- * arguments to the connected POP3 store specified by @store. It then
- * reads the server's response and parses out the status code. If
- * the caller passed a non-NULL pointer for @ret, camel_pop3_command
- * will set it to point to an buffer containing the rest of the
- * response from the POP3 server. (If @ret was passed but there was
- * no extended response, @ret will be set to NULL.) The caller must
- * free this buffer when it is done with it.
- *
- * Return value: one of CAMEL_POP3_OK (command executed successfully),
- * CAMEL_POP3_ERR (command encounted an error), or CAMEL_POP3_FAIL
- * (a protocol-level error occurred, and Camel is uncertain of the
- * result of the command.)
- **/
-int
-camel_pop3_command (CamelPop3Store *store, char **ret, char *fmt, ...)
-{
-	char *cmdbuf;
-	va_list ap;
-
-	if (!store->ostream) {
-		CamelException ex;
-
-		camel_exception_init (&ex);
-		if (!camel_service_connect (CAMEL_SERVICE (store), &ex)) {
-			if (ret)
-				*ret = g_strdup (camel_exception_get_description (&ex));
-			camel_exception_clear (&ex);
-			return CAMEL_POP3_FAIL;
-		}
-	}
-
-	va_start (ap, fmt);
-	cmdbuf = g_strdup_vprintf (fmt, ap);
-	va_end (ap);
-
-#if d(!)0
-	if (!strncmp (cmdbuf, "PASS", 4))
-		printf ("POP3: >>> PASS xxx\n");
-	else
-		printf ("POP3: >>> %s\n", cmdbuf);
-#endif
-
-	/* Send the command */
-	if (camel_stream_printf (store->ostream, "%s\r\n", cmdbuf) == -1) {
-		g_free (cmdbuf);
-		if (*ret)
-			*ret = g_strdup (g_strerror (errno));
-		d(printf ("POP3: !!! %s\n", g_strerror (errno)));
-		return CAMEL_POP3_FAIL;
-	}
-	g_free (cmdbuf);
-
-	return pop3_get_response (store, ret);
-}
-
-static int
-pop3_get_response (CamelPop3Store *store, char **ret)
-{
-	char *respbuf;
-	int status;
-
-	respbuf = camel_stream_buffer_read_line (
-		CAMEL_STREAM_BUFFER (store->istream));
-	if (respbuf == NULL) {
-		if (ret)
-			*ret = g_strdup (g_strerror (errno));
-		d(printf ("POP3: !!! %s\n", g_strerror (errno)));
-		return CAMEL_POP3_FAIL;
-	}
-	d(printf ("POP3: <<< %s\n", respbuf));
-
-	if (!strncmp (respbuf, "+OK", 3))
-		status = CAMEL_POP3_OK;
-	else if (!strncmp (respbuf, "-ERR", 4))
-		status = CAMEL_POP3_ERR;
-	else
-		status = CAMEL_POP3_FAIL;
-
-	if (ret) {
-		if (status != CAMEL_POP3_FAIL) {
-			*ret = strchr (respbuf, ' ');
-			if (*ret)
-				*ret = g_strdup (*ret + 1);
-		} else
-			*ret = NULL;
-	}
-	g_free (respbuf);
-
-	return status;
-}
-
-/**
- * camel_pop3_command_get_additional_data: get "additional data" from
- * a POP3 command.
- * @store: the POP3 store
- *
- * This command gets the additional data returned by "multi-line" POP
- * commands, such as LIST, RETR, TOP, and UIDL. This command _must_
- * be called after a successful (CAMEL_POP3_OK) call to
- * camel_pop3_command for a command that has a multi-line response.
- * The returned data is un-byte-stuffed, and has lines termined by
- * newlines rather than CR/LF pairs.
- *
- * Return value: the data, which the caller must free.
- **/
-char *
-camel_pop3_command_get_additional_data (CamelPop3Store *store, CamelException *ex)
-{
-	CamelStreamBuffer *stream = CAMEL_STREAM_BUFFER (store->istream);
-	GPtrArray *data;
-	char *buf, *p;
-	int i, len = 0, status = CAMEL_POP3_OK;
-
-	data = g_ptr_array_new ();
-	while (1) {
-		buf = camel_stream_buffer_read_line (stream);
-		if (!buf) {
-			status = CAMEL_POP3_FAIL;
-			break;
-		}
-
-		if (!strcmp (buf, "."))
-			break;
-
-		g_ptr_array_add (data, buf);
-		len += strlen (buf) + 1;
-	}
-	g_free (buf);
-
-	if (status == CAMEL_POP3_OK) {
-		buf = g_malloc0 (len + 1);
-
-		for (i = 0, p = buf; i < data->len; i++) {
-			char *ptr, *datap;
-
-			datap = (char *) data->pdata[i];
-			ptr = (*datap == '.') ? datap + 1 : datap;
-			len = strlen (ptr);
-#if d(!)0
-			if (i == data->len - 1)
-				printf ("POP3: <<<<<< %s\n", ptr);
-			else if (i == 0)
-				printf ("POP3: <<<<<< %s...\n", ptr);
-#endif
-			memcpy (p, ptr, len);
-			p += len;
-			*p++ = '\n';
-		}
-		*p = '\0';
-	} else
-		buf = NULL;
-
-	for (i = 0; i < data->len; i++)
-		g_free (data->pdata[i]);
-	g_ptr_array_free (data, TRUE);
-
-	return buf;
-}
diff --git a/camel/providers/pop3/camel-pop3-store.h b/camel/providers/pop3/camel-pop3-store.h
deleted file mode 100644
index f5e447d9ea..0000000000
--- a/camel/providers/pop3/camel-pop3-store.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-pop3-store.h : class for an pop3 store */
-
-/* 
- * Authors:
- *   Dan Winship 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_POP3_STORE_H
-#define CAMEL_POP3_STORE_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-types.h"
-#include "camel-store.h"
-
-#define CAMEL_POP3_STORE_TYPE     (camel_pop3_store_get_type ())
-#define CAMEL_POP3_STORE(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_POP3_STORE_TYPE, CamelPop3Store))
-#define CAMEL_POP3_STORE_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_POP3_STORE_TYPE, CamelPop3StoreClass))
-#define IS_CAMEL_POP3_STORE(o)    (CAMEL_CHECK_TYPE((o), CAMEL_POP3_STORE_TYPE))
-
-
-typedef struct {
-	CamelStore parent_object;
-
-	CamelStream *istream, *ostream;
-	char *apop_timestamp, *implementation;
-	gboolean supports_top, supports_uidl, expires;
-	int login_delay;
-
-} CamelPop3Store;
-
-
-
-typedef struct {
-	CamelStoreClass parent_class;
-
-} CamelPop3StoreClass;
-
-
-/* public methods */
-void camel_pop3_store_expunge (CamelPop3Store *store, CamelException *ex);
-
-/* support functions */
-enum { CAMEL_POP3_OK, CAMEL_POP3_ERR, CAMEL_POP3_FAIL };
-int camel_pop3_command (CamelPop3Store *store, char **ret, char *fmt, ...);
-char *camel_pop3_command_get_additional_data (CamelPop3Store *store,
-					      CamelException *ex);
-
-/* Standard Camel function */
-CamelType camel_pop3_store_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_POP3_STORE_H */
-
-
diff --git a/camel/providers/pop3/libcamelpop3.urls b/camel/providers/pop3/libcamelpop3.urls
deleted file mode 100644
index 7fffa4d861..0000000000
--- a/camel/providers/pop3/libcamelpop3.urls
+++ /dev/null
@@ -1 +0,0 @@
-pop
diff --git a/camel/providers/sendmail/.cvsignore b/camel/providers/sendmail/.cvsignore
deleted file mode 100644
index cacc3c5d5f..0000000000
--- a/camel/providers/sendmail/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-Makefile
-Makefile.in
-.deps
-.libs
-*.lo
-*.la
-*.o
diff --git a/camel/providers/sendmail/Makefile.am b/camel/providers/sendmail/Makefile.am
deleted file mode 100644
index 965f56afb8..0000000000
--- a/camel/providers/sendmail/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelsendmailincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelsendmail.la
-provider_DATA = libcamelsendmail.urls
-
-INCLUDES =					\
-	-I..					\
-	-I$(srcdir)/..				\
-	-I$(srcdir)/../../..			\
-	-I$(includedir)				\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR) -I$(top_srcdir)/camel \
-        -DG_LOG_DOMAIN=\"camel-sendmail-provider\"
-
-libcamelsendmail_la_SOURCES = 			\
-	camel-sendmail-provider.c		\
-	camel-sendmail-transport.c
-
-libcamelsendmailinclude_HEADERS =		\
-	camel-sendmail-transport.h
-
-libcamelsendmail_la_LDFLAGS = -version-info 0:0:0
-
-EXTRA_DIST = libcamelsendmail.urls
diff --git a/camel/providers/sendmail/camel-sendmail-provider.c b/camel/providers/sendmail/camel-sendmail-provider.c
deleted file mode 100644
index 3b0b35dd72..0000000000
--- a/camel/providers/sendmail/camel-sendmail-provider.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-sendmail-provider.c: sendmail provider registration code */
-
-/* 
- * Authors :
- *   Dan Winship 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-provider.h"
-#include "camel-sendmail-transport.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static CamelProvider sendmail_provider = {
-	"sendmail",
-	"Sendmail",
-
-	"For delivering mail by passing it to the \"sendmail\" program "
-	"on the local system.",
-
-	"mail",
-
-	0,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	sendmail_provider.object_types[CAMEL_PROVIDER_TRANSPORT] =
-		camel_sendmail_transport_get_type();
-
-	sendmail_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-	
-	camel_session_register_provider (session, &sendmail_provider);
-}
-
-
-
diff --git a/camel/providers/sendmail/camel-sendmail-transport.c b/camel/providers/sendmail/camel-sendmail-transport.c
deleted file mode 100644
index c53512ccb4..0000000000
--- a/camel/providers/sendmail/camel-sendmail-transport.c
+++ /dev/null
@@ -1,221 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-sendmail-transport.c: Sendmail-based transport class. */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-sendmail-transport.h"
-#include "camel-mime-message.h"
-#include "camel-data-wrapper.h"
-#include "camel-stream-fs.h"
-#include "camel-exception.h"
-
-static char *get_name (CamelService *service, gboolean brief);
-
-static gboolean _can_send (CamelTransport *transport, CamelMedium *message);
-static gboolean _send (CamelTransport *transport, CamelMedium *message,
-		       CamelException *ex);
-static gboolean _send_to (CamelTransport *transport, CamelMedium *message,
-			  GList *recipients, CamelException *ex);
-
-
-static void
-camel_sendmail_transport_class_init (CamelSendmailTransportClass *camel_sendmail_transport_class)
-{
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_sendmail_transport_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_sendmail_transport_class);
-
-	/* virtual method overload */
-	camel_service_class->get_name = get_name;
-
-	camel_transport_class->can_send = _can_send;
-	camel_transport_class->send = _send;
-	camel_transport_class->send_to = _send_to;
-}
-
-CamelType
-camel_sendmail_transport_get_type (void)
-{
-	static CamelType camel_sendmail_transport_type = CAMEL_INVALID_TYPE;
-	
-	if (camel_sendmail_transport_type == CAMEL_INVALID_TYPE)	{
-		camel_sendmail_transport_type = camel_type_register (CAMEL_TRANSPORT_TYPE, "CamelSendmailTransport",
-								     sizeof (CamelSendmailTransport),
-								     sizeof (CamelSendmailTransportClass),
-								     (CamelObjectClassInitFunc) camel_sendmail_transport_class_init,
-								     NULL,
-								     (CamelObjectInitFunc) NULL,
-								     NULL);
-	}
-	
-	return camel_sendmail_transport_type;
-}
-
-
-static gboolean
-_can_send (CamelTransport *transport, CamelMedium *message)
-{
-	return CAMEL_IS_MIME_MESSAGE (message);
-}
-
-
-static gboolean
-_send_internal (CamelMedium *message, char **argv, CamelException *ex)
-{
-	int fd[2], nullfd, wstat;
-	sigset_t mask, omask;
-	CamelStream *out;
-	pid_t pid;
-
-	g_assert (CAMEL_IS_MIME_MESSAGE (message));
-
-	if (pipe (fd) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not create pipe to sendmail: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-
-	/* Block SIGCHLD so the calling application doesn't notice
-	 * sendmail exiting before we do.
-	 */
-	sigemptyset (&mask);
-	sigaddset (&mask, SIGCHLD);
-	sigprocmask (SIG_BLOCK, &mask, &omask);
-
-	pid = fork ();
-	switch (pid) {
-	case -1:
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not fork sendmail: "
-				      "%s: mail not sent", g_strerror (errno));
-		sigprocmask (SIG_SETMASK, &omask, NULL);
-		return FALSE;
-
-	case 0:
-		/* Child process */
-		nullfd = open ("/dev/null", O_RDWR);
-		dup2 (fd[0], STDIN_FILENO);
-		dup2 (nullfd, STDOUT_FILENO);
-		dup2 (nullfd, STDERR_FILENO);
-		close (nullfd);
-		close (fd[1]);
-
-		execv (SENDMAIL_PATH, argv);
-		_exit (255);
-	}
-
-	/* Parent process. Write the message out. */
-	close (fd[0]);
-	out = camel_stream_fs_new_with_fd (fd[1]);
-	if (camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), out) == -1
-	    || camel_stream_close(out) == -1) {
-		camel_object_unref (CAMEL_OBJECT (out));
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Could not send message: %s",
-				      strerror(errno));
-		return FALSE;
-	}
-	camel_object_unref (CAMEL_OBJECT (out));
-
-	/* Wait for sendmail to exit. */
-	while (waitpid (pid, &wstat, 0) == -1 && errno == EINTR)
-		;
-	sigprocmask (SIG_SETMASK, &omask, NULL);
-
-	if (!WIFEXITED (wstat)) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "sendmail exited with signal %s: "
-				      "mail not sent.",
-				      g_strsignal (WTERMSIG (wstat)));
-		return FALSE;
-	} else if (WEXITSTATUS (wstat) != 0) {
-		if (WEXITSTATUS (wstat) == 255) {
-			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM,
-					     "Could not execute "
-					     SENDMAIL_PATH ": mail not sent.");
-		} else {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "sendmail exited with status "
-					      "%d: mail not sent.",
-					      WEXITSTATUS (wstat));
-		}
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static gboolean
-_send_to (CamelTransport *transport, CamelMedium *message,
-	  GList *recipients, CamelException *ex)
-{
-	GList *r;
-	char **argv;
-	int i, len;
-	gboolean status;
-
-	len = g_list_length (recipients);
-	argv = g_malloc ((len + 4) * sizeof (char *));
-	argv[0] = "sendmail";
-	argv[1] = "-i";
-	argv[2] = "--";
-
-	for (i = 1, r = recipients; i <= len; i++, r = r->next)
-		argv[i + 2] = r->data;
-	argv[i + 2] = NULL;
-
-	status = _send_internal (message, argv, ex);
-	g_free (argv);
-	return status;
-}
-
-static gboolean
-_send (CamelTransport *transport, CamelMedium *message,
-       CamelException *ex)
-{
-	char *argv[4] = { "sendmail", "-t", "-i", NULL };
-
-	return _send_internal (message, argv, ex);
-}
-
-static char *
-get_name (CamelService *service, gboolean brief)
-{
-	if (brief)
-		return g_strdup ("sendmail");
-	else
-		return g_strdup ("Mail delivery via the sendmail program");
-}
diff --git a/camel/providers/sendmail/camel-sendmail-transport.h b/camel/providers/sendmail/camel-sendmail-transport.h
deleted file mode 100644
index bb5dca071b..0000000000
--- a/camel/providers/sendmail/camel-sendmail-transport.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-sendmail-transport.h: Sendmail-based transport class */
-
-/* 
- *
- * Author : 
- *  Dan Winship 
- *
- * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_SENDMAIL_TRANSPORT_H
-#define CAMEL_SENDMAIL_TRANSPORT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include "camel-transport.h"
-
-#define CAMEL_SENDMAIL_TRANSPORT_TYPE     (camel_sendmail_transport_get_type ())
-#define CAMEL_SENDMAIL_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SENDMAIL_TRANSPORT_TYPE, CamelSendmailTransport))
-#define CAMEL_SENDMAIL_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SENDMAIL_TRANSPORT_TYPE, CamelSendmailTransportClass))
-#define CAMEL_IS_SENDMAIL_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SENDMAIL_TRANSPORT_TYPE))
-
-
-typedef struct {
-	CamelTransport parent_object;
-
-} CamelSendmailTransport;
-
-
-typedef struct {
-	CamelTransportClass parent_class;
-
-} CamelSendmailTransportClass;
-
-
-/* Standard Camel function */
-CamelType camel_sendmail_transport_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SENDMAIL_TRANSPORT_H */
diff --git a/camel/providers/sendmail/libcamelsendmail.urls b/camel/providers/sendmail/libcamelsendmail.urls
deleted file mode 100644
index ccad52828e..0000000000
--- a/camel/providers/sendmail/libcamelsendmail.urls
+++ /dev/null
@@ -1 +0,0 @@
-sendmail
diff --git a/camel/providers/smtp/.cvsignore b/camel/providers/smtp/.cvsignore
deleted file mode 100644
index 09980ae6ba..0000000000
--- a/camel/providers/smtp/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-*.lo
-*.la
diff --git a/camel/providers/smtp/Makefile.am b/camel/providers/smtp/Makefile.am
deleted file mode 100644
index 0762283161..0000000000
--- a/camel/providers/smtp/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelsmtpincludedir = $(includedir)/camel
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelsmtp.la
-provider_DATA = libcamelsmtp.urls
-
-INCLUDES =					\
-	-I..					\
-	-I$(srcdir)/..				\
-	-I$(srcdir)/../../..			\
-	-I$(includedir)				\
-	-I$(top_srcdir)/intl			\
-	$(GTK_INCLUDEDIR)			\
-	-I$(top_srcdir)/camel			\
-        -DG_LOG_DOMAIN=\"camel-smtp-provider\"
-
-libcamelsmtp_la_SOURCES = 			\
-	camel-smtp-provider.c			\
-	camel-smtp-transport.c
-
-libcamelsmtpinclude_HEADERS =			\
-	camel-smtp-transport.h
-
-
-libcamelsmtp_la_LDFLAGS = -version-info 0:0:0
-
-EXTRA_DIST = libcamelsmtp.urls
diff --git a/camel/providers/smtp/camel-smtp-provider.c b/camel/providers/smtp/camel-smtp-provider.c
deleted file mode 100644
index 1d18e445cc..0000000000
--- a/camel/providers/smtp/camel-smtp-provider.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-smtp-provider.c: smtp provider registration code */
-
-/* 
- * Authors :
- *   Jeffrey Stedfast 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-#include "camel-smtp-transport.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static CamelProvider smtp_provider = {
-	"smtp",
-	"SMTP",
-
-	"For delivering mail by connecting to a remote mailhub using SMTP.",
-
-	"mail",
-
-	0,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	smtp_provider.object_types[CAMEL_PROVIDER_TRANSPORT] =
-		camel_smtp_transport_get_type();
-
-	smtp_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-	
-	camel_session_register_provider (session, &smtp_provider);
-}
-
-
-
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
deleted file mode 100644
index 0486e4da75..0000000000
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ /dev/null
@@ -1,803 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-smtp-transport.c : class for a smtp transport */
-
-/* 
- * Authors:
- *   Jeffrey Stedfast 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include "config.h"
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#undef MIN
-#undef MAX
-#include "camel-mime-filter-crlf.h"
-#include "camel-stream-filter.h"
-#include "camel-smtp-transport.h"
-#include "camel-mime-message.h"
-#include "camel-stream-buffer.h"
-#include "camel-stream-fs.h"
-#include "camel-session.h"
-#include "camel-exception.h"
-#include "md5-utils.h"
-
-#define d(x) x
-
-/* Specified in RFC 821 */
-#define SMTP_PORT 25
-
-/* camel smtp transport class prototypes */
-static gboolean _can_send (CamelTransport *transport, CamelMedium *message);
-static gboolean _send (CamelTransport *transport, CamelMedium *message, CamelException *ex);
-static gboolean _send_to (CamelTransport *transport, CamelMedium *message, GList *recipients, CamelException *ex);
-
-/* support prototypes */
-static gboolean smtp_connect (CamelService *service, CamelException *ex);
-static gboolean smtp_disconnect (CamelService *service, CamelException *ex);
-static GList *esmtp_get_authtypes(gchar *buffer);
-static GList *query_auth_types (CamelService *service, CamelException *ex);
-static void free_auth_types (CamelService *service, GList *authtypes);
-static char *get_name (CamelService *service, gboolean brief);
-static gchar *smtp_get_email_addr_from_text (gchar *text);
-static gboolean smtp_helo (CamelSmtpTransport *transport, CamelException *ex);
-static gboolean smtp_mail (CamelSmtpTransport *transport, gchar *sender, CamelException *ex);
-static gboolean smtp_rcpt (CamelSmtpTransport *transport, gchar *recipient, CamelException *ex);
-static gboolean smtp_data (CamelSmtpTransport *transport, CamelMedium *message, CamelException *ex);
-static gboolean smtp_rset (CamelSmtpTransport *transport, CamelException *ex);
-static gboolean smtp_quit (CamelSmtpTransport *transport, CamelException *ex);
-
-/* private data members */
-static CamelServiceClass *service_class = NULL;
-
-static void
-camel_smtp_transport_class_init (CamelSmtpTransportClass *camel_smtp_transport_class)
-{
-	CamelTransportClass *camel_transport_class =
-		CAMEL_TRANSPORT_CLASS (camel_smtp_transport_class);
-	CamelServiceClass *camel_service_class =
-		CAMEL_SERVICE_CLASS (camel_smtp_transport_class);
-	
-	service_class = CAMEL_SERVICE_CLASS(camel_type_get_global_classfuncs (camel_service_get_type ()));
-
-	/* virtual method overload */
-	camel_service_class->connect = smtp_connect;
-	camel_service_class->disconnect = smtp_disconnect;
-	camel_service_class->query_auth_types = query_auth_types;
-	camel_service_class->free_auth_types = free_auth_types;
-	camel_service_class->get_name = get_name;
-
-	camel_transport_class->can_send = _can_send;
-	camel_transport_class->send = _send;
-	camel_transport_class->send_to = _send_to;
-}
-
-static void
-camel_smtp_transport_init (gpointer object)
-{
-	CamelService *service = CAMEL_SERVICE (object);
-
-	service->url_flags = CAMEL_SERVICE_URL_NEED_HOST;
-}
-
-CamelType
-camel_smtp_transport_get_type (void)
-{
-	static CamelType camel_smtp_transport_type = CAMEL_INVALID_TYPE;
-
-	if (camel_smtp_transport_type == CAMEL_INVALID_TYPE) {
-		camel_smtp_transport_type = camel_type_register (CAMEL_TRANSPORT_TYPE, "CamelSmtpTransport",
-								 sizeof (CamelSmtpTransport),
-								 sizeof (CamelSmtpTransportClass),
-								 (CamelObjectClassInitFunc) camel_smtp_transport_class_init,
-								 NULL,
-								 (CamelObjectInitFunc) camel_smtp_transport_init,
-								 NULL);
-	}
-
-	return camel_smtp_transport_type;
-}
-
-static gboolean
-smtp_connect (CamelService *service, CamelException *ex)
-{
-	CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
-	struct hostent *h;
-	struct sockaddr_in sin;
-	gint fd, num, i;
-	guint32 addrlen;
-	gchar *pass = NULL, *respbuf = NULL;
-
-
-	if (!service_class->connect (service, ex))
-		return FALSE;
-
-	h = camel_service_gethost (service, ex);
-	if (!h)
-		return FALSE;
-
-	/* set some smtp transport defaults */
-	transport->smtp_is_esmtp = FALSE;
-	transport->esmtp_supported_authtypes = NULL;
-
-	sin.sin_family = h->h_addrtype;
-	sin.sin_port = htons (service->url->port ? service->url->port : SMTP_PORT);
-	memcpy (&sin.sin_addr, h->h_addr, sizeof (sin.sin_addr));
-
-	fd = socket (h->h_addrtype, SOCK_STREAM, 0);
-	if (fd == -1 || connect (fd, (struct sockaddr *)&sin, sizeof (sin)) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-				      "Could not connect to %s (port %d): %s",
-				      service->url->host,
-				      service->url->port ? service->url->port : SMTP_PORT,
-				      strerror (errno));
-		if (fd > -1)
-			close (fd);
-		g_free (pass);
-		return FALSE;
-	}
-
-	/* get the localaddr - needed later by smtp_helo */
-	addrlen = sizeof (transport->localaddr);
-	getsockname (fd, (struct sockaddr*)&transport->localaddr, &addrlen);
-
-	transport->ostream = camel_stream_fs_new_with_fd (fd);
-	transport->istream = camel_stream_buffer_new (transport->ostream, 
-						      CAMEL_STREAM_BUFFER_READ);
-
-	/* Read the greeting, note whether the server is ESMTP or not. */
-	do {
-		/* Check for "220" */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-		if (!respbuf || strncmp (respbuf, "220", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "Welcome response error: "
-					      "%s: possibly non-fatal",
-					      g_strerror (errno));
-			return FALSE;
-		}
-		if (strstr (respbuf, "ESMTP"))
-			transport->smtp_is_esmtp = TRUE;
-	} while (*(respbuf+3) == '-'); /* if we got "220-" then loop again */
-	g_free (respbuf);
-
-	/* send HELO (or EHLO, depending on the service type) */
-	if (!transport->smtp_is_esmtp) {
-		/* If we did not auto-detect ESMTP, we should still send EHLO */
-		transport->smtp_is_esmtp = TRUE;
-		if (!smtp_helo (transport, ex)) {
-			/* Okay, apprently this server doesn't support ESMTP */
-			transport->smtp_is_esmtp = FALSE;
-			smtp_helo (transport, ex);
-		}
-	} else {
-		smtp_helo (transport, ex);
-	}
-
-	/* check to see if AUTH is required, if so...then AUTH ourselves */
-	if (transport->smtp_is_esmtp && transport->esmtp_supported_authtypes) {
-		/* not really supported yet, but we can at least show what auth types are supported */
-		d(fprintf (stderr, "camel-smtp-transport::connect(): %s requires AUTH\n", service->url->host));
-		num = g_list_length (transport->esmtp_supported_authtypes);
-
-		for (i = 0; i < num; i++)
-			d(fprintf (stderr, "\nSupported AUTH: %s\n\n", 
-				(gchar *) g_list_nth_data (transport->esmtp_supported_authtypes, i)));
-
-		g_list_free (transport->esmtp_supported_authtypes);
-		transport->esmtp_supported_authtypes = NULL;
-	} else {
-		d(fprintf (stderr, "\ncamel-smtp-transport::connect(): provider does not use AUTH\n\n"));
-	}
-
-	return TRUE;
-}
-
-static gboolean
-smtp_disconnect (CamelService *service, CamelException *ex)
-{
-	CamelSmtpTransport *transport = CAMEL_SMTP_TRANSPORT (service);
-
-	if (!service->connected)
-		return TRUE;
-
-	/* send the QUIT command to the SMTP server */
-	smtp_quit(transport, ex);
-
-	if (!service_class->disconnect (service, ex))
-		return FALSE;
-
-	g_free (transport->esmtp_supported_authtypes);
-	transport->esmtp_supported_authtypes = NULL;
-	camel_object_unref (CAMEL_OBJECT (transport->ostream));
-	camel_object_unref (CAMEL_OBJECT (transport->istream));
-	transport->ostream = NULL;
-	transport->istream = NULL;
-
-	return TRUE;
-}
-
-static GList *
-esmtp_get_authtypes (gchar *buffer)
-{
-	GList *ret = NULL;
-	gchar *start, *end;
-
-	/* advance to the first token */
-	for (start = buffer; *start == ' ' || *start == '='; start++);
-
-	for ( ; *start; ) {
-		/* advance to the end of the token */
-		for (end = start; *end && *end != ' '; end++);
-
-		ret = g_list_append (ret, g_strndup (start, end - start));
-
-		/* advance to the next token */
-		for (start = end; *start == ' '; start++);
-	}
-
-	return ret;
-}
-
-/* FIXME: use these? */
-#ifdef notyet
-static CamelServiceAuthType no_authtype = {
-	"No authentication required",
-
-	"This option will connect to the SMTP server without using any "
-	"kind of authentication. This should be fine for connecting to "
-	"most SMTP servers."
-
-	"",
-	FALSE
-};
-
-static CamelServiceAuthType cram_md5_authtype = {
-	"CRAM-MD5",
-
-	"This option will connect to the SMTP server using CRAM-MD5 "
-	"authentication.",
-
-	"CRAM-MD5",
-	TRUE
-};
-#endif
-
-static GList *
-query_auth_types (CamelService *service, CamelException *ex)
-{
-	/* FIXME: Re-enable this when auth types are actually
-	 * implemented.
-	 */
-
-	return NULL;
-}
-
-static void
-free_auth_types (CamelService *service, GList *authtypes)
-{
-	g_list_free (authtypes);
-}
-
-static char *
-get_name (CamelService *service, gboolean brief)
-{
-	if (brief)
-		return g_strdup_printf ("SMTP server %s", service->url->host);
-	else {
-		return g_strdup_printf ("SMTP mail delivery via %s",
-					service->url->host);
-	}
-}
-
-static gboolean
-_can_send (CamelTransport *transport, CamelMedium *message)
-{
-	return CAMEL_IS_MIME_MESSAGE (message);
-}
-
-static gboolean
-_send_to (CamelTransport *transport, CamelMedium *message,
-	  GList *recipients, CamelException *ex)
-{
-	GList *r;
-	gchar *recipient, *s, *sender;
-	guint i, len;
-	CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (transport);
-
-	s = g_strdup(camel_mime_message_get_from (CAMEL_MIME_MESSAGE (message)));
-	if (!s) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Cannot send message: "
-				      "sender address not defined.");
-		return FALSE;
-	}
-
-	sender = smtp_get_email_addr_from_text (s);
-	smtp_mail (smtp_transport, sender, ex);
-	g_free (sender);
-	g_free (s);
-
-	if (!(len = g_list_length(recipients))) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "Cannot send message: "
-				      "no recipients defined.");
-		return FALSE;
-	}
-	
-	for (i = 0, r = recipients; i < len; i++, r = r->next) {
-		recipient = smtp_get_email_addr_from_text (r->data);
-		if (!smtp_rcpt (smtp_transport, recipient, ex)) {
-			g_free (recipient);
-			return FALSE;
-		}
-		g_free (recipient);
-	}
-
-	if (!smtp_data (smtp_transport, message, ex))
-		return FALSE;
-
-	/* reset the service for our next transfer session */
-	smtp_rset (smtp_transport, ex);
-
-	return TRUE;
-}
-
-static gboolean
-_send (CamelTransport *transport, CamelMedium *message,
-       CamelException *ex)
-{
-	const CamelInternetAddress *to, *cc, *bcc;
-	GList *recipients = NULL;
-	guint index, len;
-
-	to = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_TO);
-	cc = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_CC);
-	bcc = camel_mime_message_get_recipients (CAMEL_MIME_MESSAGE (message), CAMEL_RECIPIENT_TYPE_BCC);
-
-	/* get all of the To addresses into our recipient list */
-	len = CAMEL_ADDRESS (to)->addresses->len;
-	for (index = 0; index < len; index++) {
-		const char *addr;
-
-		if (camel_internet_address_get (to, index, NULL, &addr))
-			recipients = g_list_append (recipients, g_strdup (addr));
-	}
-
-	/* get all of the Cc addresses into our recipient list */
-	len = CAMEL_ADDRESS (cc)->addresses->len;
-	for (index = 0; index < len; index++) {
-		const char *addr;
-
-		if (camel_internet_address_get (cc, index, NULL, &addr))
-			recipients = g_list_append (recipients, g_strdup (addr));
-	}
-
-	/* get all of the Bcc addresses into our recipient list */
-	len = CAMEL_ADDRESS (bcc)->addresses->len;
-	for (index = 0; index < len; index++) {
-		const char *addr;
-
-		if (camel_internet_address_get (bcc, index, NULL, &addr))
-			recipients = g_list_append (recipients, g_strdup (addr));
-	}
-
-	return _send_to (transport, message, recipients, ex);
-}
-
-static gchar *
-smtp_get_email_addr_from_text (gchar *text)
-{
-	/* get the actual email address from the string passed and place it in addr
-	 * we can assume the address will be in one of the following forms:
-	 * 1) The Name 
-	 * 2) 
-	 * 3) person@host.com
-	 * 4) person@host.com (The Name)
-	 */
-
-	gchar *tmp, *addr = NULL;
-	gchar *addr_strt;         /* points to start of addr */
-	gchar *addr_end;          /* points to end of addr */
-	gchar *ptr1;
-
-
-	/* check the incoming args */
-	if (!text || !*text)
-		return NULL;
-
-	/* scan the string for an open brace */
-	for (addr_strt = text; *addr_strt; addr_strt++) 
-		if (*addr_strt == '<')
-			break;
-
-	if (*addr_strt) {
-		/* we found an open brace, let's look for it's counterpart */
-		for (addr_end = addr_strt; *addr_end; addr_end++)
-			if (*addr_end == '>') 
-				break;
-
-		/* if we didn't find it, or braces are empty... */
-		if (!(*addr_end) || (addr_strt == addr_end - 1))
-			return NULL;
-			
-		/* addr_strt points to '<' and addr_end points to '>'.
-		 * Now let's adjust 'em slightly to point to the beginning
-		 * and ending of the email addy
-		 */
-		addr_strt++;
-		addr_end--;
-	} else {
-		/* no open brace...assume type 3 or 4? */
-		addr_strt = text;
-			
-		/* find the end of the email addr/string */
-		for (addr_end = addr_strt; *addr_end || *addr_end == ' '; addr_end++);
- 
-		addr_end--;       /* points to NULL, move it back one char */
-	}
-
-	/* now addr_strt & addr_end point to the beginning & ending of the email addy */
-
-	/* copy the string into addr */
-	addr = g_strndup (addr_strt, (gint)(addr_end - addr_strt + 1));
-
-	for (ptr1 = addr_strt; ptr1 <= addr_end; ptr1++)    /* look for an '@' sign */
-		if (*ptr1 == '@')
-			break;
-
-	if (*ptr1 != '@') {
-		/* here we found out the name doesn't have an '@' part
-		 * let's figure out what machine we're on & stick it on the end
-		 */
-		gchar hostname[MAXHOSTNAMELEN];
-
-		if (gethostname (hostname, MAXHOSTNAMELEN)) {
-			g_free (addr);
-			return NULL;
-		}
-		tmp = addr;
-		addr = g_strconcat (tmp, "@", hostname, NULL);
-		g_free (tmp);
-	}
-
-	return addr;
-}
-
-static gboolean
-smtp_helo (CamelSmtpTransport *transport, CamelException *ex)
-{
-	/* say hello to the server */
-	gchar *cmdbuf, *respbuf = NULL;
-	struct hostent *host;
-
-	/* get the local host name */
-	host = gethostbyaddr ((gchar *)&transport->localaddr.sin_addr, sizeof (transport->localaddr.sin_addr), AF_INET);
-
-	/* hiya server! how are you today? */
-	if (transport->smtp_is_esmtp) {
-		if (host && host->h_name)
-			cmdbuf = g_strdup_printf ("EHLO %s\r\n", host->h_name);
-		else
-			cmdbuf = g_strdup_printf ("EHLO [%s]\r\n", inet_ntoa (transport->localaddr.sin_addr));
-	} else {
-		if (host && host->h_name)
-			cmdbuf = g_strdup_printf ("HELO %s\r\n", host->h_name);
-		else
-			cmdbuf = g_strdup_printf ("HELO [%s]\r\n", inet_ntoa (transport->localaddr.sin_addr));
-	}
-	
-	d(fprintf (stderr, "sending : %s", cmdbuf));
-	if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
-		g_free (cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "HELO request timed out: "
-				      "%s: non-fatal",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free (cmdbuf);
-
-	do {
-		/* Check for "250" */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "HELO response error: "
-					      "%s: non-fatal",
-					      g_strerror (errno));
-			return FALSE;
-		}
-		if (transport->smtp_is_esmtp && strstr (respbuf, "AUTH")) {
-			/* parse for supported AUTH types */
-			char *auths = strstr (respbuf, "AUTH") + 4;
-			
-			transport->esmtp_supported_authtypes = esmtp_get_authtypes (auths);
-		}
-	} while (*(respbuf+3) == '-'); /* if we got "250-" then loop again */
-	g_free (respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_mail (CamelSmtpTransport *transport, gchar *sender, CamelException *ex)
-{
-	/* we gotta tell the smtp server who we are. (our email addy) */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	/* enclose address in <>'s since some SMTP daemons *require* that */
-	cmdbuf = g_strdup_printf ("MAIL FROM: <%s>\r\n", sender);
-
-	d(fprintf (stderr, "sending : %s", cmdbuf));
-
-	if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
-		g_free (cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "MAIL FROM request timed out: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free (cmdbuf);
-
-	do {
-		/* Check for "250 Sender OK..." */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "MAIL FROM response error: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while (*(respbuf+3) == '-'); /* if we got "250-" then loop again */
-	g_free (respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_rcpt (CamelSmtpTransport *transport, gchar *recipient, CamelException *ex)
-{
-	/* we gotta tell the smtp server who we are going to be sending
-	 * our email to */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	/* enclose address in <>'s since some SMTP daemons *require* that */
-	cmdbuf = g_strdup_printf ("RCPT TO: <%s>\r\n", recipient);
-
-	d(fprintf (stderr, "sending : %s", cmdbuf));
-
-	if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
-		g_free (cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "RCPT TO request timed out: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free (cmdbuf);
-
-	do {
-		/* Check for "250 Sender OK..." */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "RCPT TO response error: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while (*(respbuf+3) == '-'); /* if we got "250-" then loop again */
-	g_free (respbuf);
-  
-	return TRUE;
-}
-
-static gboolean
-smtp_data (CamelSmtpTransport *transport, CamelMedium *message, CamelException *ex)
-{
-	/* now we can actually send what's important :p */
-	gchar *cmdbuf, *respbuf = NULL;
-	CamelStreamFilter *filtered_stream;
-	CamelMimeFilter *mimefilter;
-	gint id;
-
-	/* enclose address in <>'s since some SMTP daemons *require* that */
-	cmdbuf = g_strdup ("DATA\r\n");
-
-	d(fprintf (stderr, "sending : %s", cmdbuf));
-
-	if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
-		g_free (cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA request timed out: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free (cmdbuf);
-
-	respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-	d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-	if (!respbuf || strncmp (respbuf, "354", 3)) {
-		/* we should have gotten instructions on how to use the DATA command:
-		 * 354 Enter mail, end with "." on a line by itself
-		 */
-		g_free (respbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA response error: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	
-	/* setup stream filtering */
-	mimefilter = camel_mime_filter_crlf_new (CAMEL_MIME_FILTER_CRLF_ENCODE, CAMEL_MIME_FILTER_CRLF_MODE_CRLF_DOTS);
-        filtered_stream = camel_stream_filter_new_with_stream (transport->ostream);
-	id = camel_stream_filter_add (filtered_stream, CAMEL_MIME_FILTER (mimefilter));
-
-	if (camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), CAMEL_STREAM (filtered_stream)) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA send timed out: message termination: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-        
-	camel_stream_filter_remove (filtered_stream, id);
-	camel_stream_flush (CAMEL_STREAM(filtered_stream));
-	camel_object_unref (CAMEL_OBJECT(filtered_stream));
-
-	/* terminate the message body */
-
-	d(fprintf (stderr, "sending : \\r\\n.\\r\\n\n"));
-
-	if (camel_stream_write (transport->ostream, "\r\n.\r\n", 5) == -1) {
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "DATA send timed out: message termination: "
-				      "%s: mail not sent",
-				      g_strerror (errno));
-		return FALSE;
-	}
-
-	do {
-		/* Check for "250 Sender OK..." */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "DATA response error: message termination: "
-					      "%s: mail not sent",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while (*(respbuf+3) == '-'); /* if we got "250-" then loop again */
-	g_free (respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_rset (CamelSmtpTransport *transport, CamelException *ex)
-{
-	/* we are going to reset the smtp server (just to be nice) */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	cmdbuf = g_strdup ("RSET\r\n");
-
-	d(fprintf (stderr, "sending : %s", cmdbuf));
-
-	if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
-		g_free (cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "RSET request timed out: "
-				      "%s",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free (cmdbuf);
-
-	do {
-		/* Check for "250" */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "250", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "RSET response error: "
-					      "%s",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while (*(respbuf+3) == '-'); /* if we got "250-" then loop again */
-	g_free (respbuf);
-
-	return TRUE;
-}
-
-static gboolean
-smtp_quit (CamelSmtpTransport *transport, CamelException *ex)
-{
-	/* we are going to reset the smtp server (just to be nice) */
-	gchar *cmdbuf, *respbuf = NULL;
-
-	cmdbuf = g_strdup ("QUIT\r\n");
-
-	d(fprintf (stderr, "sending : %s", cmdbuf));
-
-	if (camel_stream_write (transport->ostream, cmdbuf, strlen (cmdbuf)) == -1) {
-		g_free (cmdbuf);
-		camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-				      "QUIT request timed out: "
-				      "%s: non-fatal",
-				      g_strerror (errno));
-		return FALSE;
-	}
-	g_free (cmdbuf);
-
-	do {
-		/* Check for "221" */
-		g_free (respbuf);
-		respbuf = camel_stream_buffer_read_line (CAMEL_STREAM_BUFFER (transport->istream));
-
-		d(fprintf (stderr, "received: %s\n", respbuf ? respbuf : "(null)"));
-
-		if (!respbuf || strncmp (respbuf, "221", 3)) {
-			camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
-					      "QUIT response error: "
-					      "%s: non-fatal",
-					      g_strerror (errno));
-			return FALSE;
-		}
-	} while (*(respbuf+3) == '-'); /* if we got "221-" then loop again */
-	g_free (respbuf);
-
-	return TRUE;
-}
diff --git a/camel/providers/smtp/camel-smtp-transport.h b/camel/providers/smtp/camel-smtp-transport.h
deleted file mode 100644
index 21bdaa03f7..0000000000
--- a/camel/providers/smtp/camel-smtp-transport.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* camel-smtp-transport.h : class for an smtp transfer */
-
-/* 
- * Authors:
- *   Jeffrey Stedfast 
- *
- * Copyright (C) 2000 Helix Code, Inc. (www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-#ifndef CAMEL_SMTP_TRANSPORT_H
-#define CAMEL_SMTP_TRANSPORT_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel-transport.h"
-
-#define CAMEL_SMTP_TRANSPORT_TYPE     (camel_smtp_transport_get_type ())
-#define CAMEL_SMTP_TRANSPORT(obj)     (CAMEL_CHECK_CAST((obj), CAMEL_SMTP_TRANSPORT_TYPE, CamelSmtpTransport))
-#define CAMEL_SMTP_TRANSPORT_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_SMTP_TRANSPORT_TYPE, CamelSmtpTransportClass))
-#define IS_CAMEL_SMTP_TRANSPORT(o)    (CAMEL_CHECK_TYPE((o), CAMEL_SMTP_TRANSPORT_TYPE))
-
-
-typedef struct {
-	CamelTransport parent_object;
-
-	CamelStream *istream, *ostream;
-
-	gboolean smtp_is_esmtp;
-
-	struct sockaddr_in localaddr;
-
-	GList *esmtp_supported_authtypes;
-	
-} CamelSmtpTransport;
-
-
-
-typedef struct {
-	CamelTransportClass parent_class;
-
-} CamelSmtpTransportClass;
-
-
-/* Standard Camel function */
-CamelType camel_smtp_transport_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CAMEL_SMTP_TRANSPORT_H */
-
-
diff --git a/camel/providers/smtp/libcamelsmtp.urls b/camel/providers/smtp/libcamelsmtp.urls
deleted file mode 100644
index ec2fc0fc16..0000000000
--- a/camel/providers/smtp/libcamelsmtp.urls
+++ /dev/null
@@ -1 +0,0 @@
-smtp
diff --git a/camel/providers/vee/.cvsignore b/camel/providers/vee/.cvsignore
deleted file mode 100644
index fd6b811c68..0000000000
--- a/camel/providers/vee/.cvsignore
+++ /dev/null
@@ -1,7 +0,0 @@
-.deps
-Makefile
-Makefile.in
-.libs
-.deps
-*.lo
-*.la
diff --git a/camel/providers/vee/Makefile.am b/camel/providers/vee/Makefile.am
deleted file mode 100644
index 6c0693b02d..0000000000
--- a/camel/providers/vee/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-libcamelveeincludedir = $(includedir)/camel
-
-
-providerdir = $(pkglibdir)/camel-providers/$(VERSION)
-
-provider_LTLIBRARIES = libcamelvee.la
-provider_DATA = libcamelvee.urls
-
-INCLUDES = -I.. \
-	-I$(srcdir)/..				\
-	-I$(top_srcdir)/camel			\
-	-I$(top_srcdir)/intl			\
-	-I$(top_srcdir)/libibex			\
-	-I$(top_srcdir)/e-util			\
-	-I$(top_srcdir)				\
-	-I$(includedir)				\
-	$(GTK_INCLUDEDIR)			\
-	-DG_LOG_DOMAIN=\"camel-vee-provider\"	
-
-libcamelvee_la_SOURCES = 			\
-	camel-vee-folder.c			\
-	camel-vee-provider.c			\
-	camel-vee-store.c
-
-libcamelveeinclude_HEADERS =			\
-	camel-vee-folder.h			\
-	camel-vee-store.h
-
-libcamelvee_la_LDFLAGS = -version-info 0:0:0
-
-libcamelvee_la_LIBADD = $(top_builddir)/e-util/libeutil.la $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-#libcamelvee_la_LIBADD = $(top_builddir)/libibex/libibex.la $(UNICODE_LIBS)
-
-EXTRA_DIST = libcamelvee.urls
-
diff --git a/camel/providers/vee/camel-vee-folder.c b/camel/providers/vee/camel-vee-folder.c
deleted file mode 100644
index 26e6be2667..0000000000
--- a/camel/providers/vee/camel-vee-folder.c
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *           Jeffrey Stedfast 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#include "camel-exception.h"
-#include "camel-vee-folder.h"
-#include "camel-folder-summary.h"
-#include "camel-mime-message.h"
-
-#include 
-
-/* our message info includes the parent folder */
-typedef struct _CamelVeeMessageInfo {
-	CamelMessageInfo info;
-	CamelFolder *folder;
-} CamelVeeMessageInfo;
-
-struct _CamelVeeFolderPrivate {
-	GList *folders;
-};
-
-#define _PRIVATE(o) (((CamelVeeFolder *)(o))->priv)
-
-static void vee_init (CamelFolder *folder, CamelStore *parent_store,
-		      CamelFolder *parent_folder, const gchar *name,
-		      gchar *separator, gboolean path_begins_with_sep,
-		      CamelException *ex);
-static void vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex);
-
-static GPtrArray *vee_get_uids  (CamelFolder *folder);
-GPtrArray *vee_get_summary (CamelFolder *folder);
-
-static gint vee_get_message_count (CamelFolder *folder);
-static gint vee_get_unread_message_count (CamelFolder *folder);
-static CamelMimeMessage *vee_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex);
-
-static const CamelMessageInfo *vee_get_message_info (CamelFolder *folder, const char *uid);
-static GPtrArray *vee_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex);
-
-static guint32 vee_get_message_flags (CamelFolder *folder, const char *uid);
-static void vee_set_message_flags (CamelFolder *folder, const char *uid, guint32 flags, guint32 set);
-static gboolean vee_get_message_user_flag (CamelFolder *folder, const char *uid, const char *name);
-static void vee_set_message_user_flag (CamelFolder *folder, const char *uid, const char *name, gboolean value);
-
-
-static void camel_vee_folder_class_init (CamelVeeFolderClass *klass);
-static void camel_vee_folder_init       (CamelVeeFolder *obj);
-static void camel_vee_folder_finalise   (CamelObject *obj);
-
-static void vee_folder_build(CamelVeeFolder *vf, CamelException *ex);
-static void vee_folder_build_folder(CamelVeeFolder *vf, CamelFolder *source, CamelException *ex);
-
-static CamelFolderClass *camel_vee_folder_parent;
-
-CamelType
-camel_vee_folder_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_folder_get_type (), "CamelVeeFolder",
-					    sizeof (CamelVeeFolder),
-					    sizeof (CamelVeeFolderClass),
-					    (CamelObjectClassInitFunc) camel_vee_folder_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_vee_folder_init,
-					    (CamelObjectFinalizeFunc) camel_vee_folder_finalise);
-	}
-	
-	return type;
-}
-
-static void
-camel_vee_folder_class_init (CamelVeeFolderClass *klass)
-{
-	CamelFolderClass *folder_class = (CamelFolderClass *) klass;
-
-	camel_vee_folder_parent = CAMEL_FOLDER_CLASS(camel_type_get_global_classfuncs (camel_folder_get_type ()));
-
-	folder_class->init = vee_init;
-	folder_class->sync = vee_sync;
-
-	folder_class->get_uids = vee_get_uids;
-	folder_class->free_uids = camel_folder_free_deep;
-	folder_class->get_summary = vee_get_summary;
-	folder_class->free_summary = camel_folder_free_nop;
-	folder_class->get_message = vee_get_message;
-
-	folder_class->get_message_info = vee_get_message_info;
-
-	folder_class->get_message_count = vee_get_message_count;
-	folder_class->get_unread_message_count = vee_get_unread_message_count;
-	folder_class->search_by_expression = vee_search_by_expression;
-
-	folder_class->get_message_flags = vee_get_message_flags;
-	folder_class->set_message_flags = vee_set_message_flags;
-	folder_class->get_message_user_flag = vee_get_message_user_flag;
-	folder_class->set_message_user_flag = vee_set_message_user_flag;
-}
-
-static void
-camel_vee_folder_init (CamelVeeFolder *obj)
-{
-	struct _CamelVeeFolderPrivate *p;
-
-	p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
-}
-
-static void
-camel_vee_folder_finalise (CamelObject *obj)
-{
-	CamelVeeFolder *vf = (CamelVeeFolder *)obj;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE(vf);
-	GList *node;
-
-	node = p->folders;
-	while (node) {
-		CamelFolder *f = node->data;
-		camel_object_unref((CamelObject *)f);
-		node = g_list_next(node);
-	}
-}
-
-/**
- * camel_vee_folder_new:
- *
- * Create a new CamelVeeFolder object.
- * 
- * Return value: A new CamelVeeFolder widget.
- **/
-CamelVeeFolder *
-camel_vee_folder_new (void)
-{
-	CamelVeeFolder *new = CAMEL_VEE_FOLDER ( camel_object_new (camel_vee_folder_get_type ()));
-	return new;
-}
-
-static void
-folder_changed(CamelFolder *sub, gpointer type, CamelVeeFolder *vf)
-{
-	CamelException *ex;
-
-	ex = camel_exception_new();
-	vee_folder_build_folder(vf, sub, ex);
-	camel_exception_free(ex);
-	/* FIXME: should only raise follow-on event if the result changed */
-	camel_object_trigger_event( CAMEL_OBJECT(vf), "folder_changed", GINT_TO_POINTER(0));
-}
-
-/* track flag changes in the summary */
-static void
-message_changed(CamelFolder *f, const char *uid, CamelVeeFolder *mf)
-{
-	const CamelMessageInfo *info;
-	CamelMessageInfo *vinfo;
-	CamelFlag *flag;
-	char *vuid;
-
-	info = camel_folder_get_message_info(f, uid);
-
-	vuid = g_strdup_printf("%p:%s", f, uid);
-	vinfo = (CamelMessageInfo *)vee_get_message_info((CamelFolder *)mf, vuid);
-	if (info && vinfo) {
-		vinfo->flags = info->flags;
-		camel_flag_list_free(&vinfo->user_flags);
-		flag = info->user_flags;
-		while (flag) {
-			camel_flag_set(&vinfo->user_flags, flag->name, TRUE);
-			flag = flag->next;
-		}
-		camel_object_trigger_event( CAMEL_OBJECT(mf), "message_changed", vinfo->uid);
-	}
-	g_free(vuid);
-}
-
-void
-camel_vee_folder_add_folder(CamelVeeFolder *vf, CamelFolder *sub)
-{
-	struct _CamelVeeFolderPrivate *p = _PRIVATE(vf);
-	CamelException *ex;
-
-	camel_object_ref((CamelObject *)sub);
-	p->folders = g_list_append(p->folders, sub);
-
-	camel_object_hook_event ((CamelObject *)sub, "folder_changed", (CamelObjectEventHookFunc) folder_changed, vf);
-	camel_object_hook_event ((CamelObject *)sub, "message_changed", (CamelObjectEventHookFunc) message_changed, vf);
-
-	ex = camel_exception_new();
-	vee_folder_build_folder(vf, sub, ex);
-	camel_exception_free(ex);
-	/* FIXME: should only raise follow-on event if the result changed */
-	camel_object_trigger_event( CAMEL_OBJECT(vf), "folder_changed", GINT_TO_POINTER(0));
-}
-
-
-static void vee_init (CamelFolder *folder, CamelStore *parent_store,
-		      CamelFolder *parent_folder, const gchar *name,
-		      gchar *separator, gboolean path_begins_with_sep,
-		      CamelException *ex)
-{
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	char *namepart, *searchpart;
-
-	namepart = g_strdup(name);
-	searchpart = strchr(namepart, '?');
-	if (searchpart == NULL) {
-		/* no search, no result! */
-		searchpart = "(body-contains \"=some-invalid_string-sequence=xx\")";
-	} else {
-		*searchpart++ = 0;
-	}
-
-	camel_vee_folder_parent->init (folder, parent_store, parent_folder, name, separator, TRUE, ex);
-	if (camel_exception_get_id (ex))
-		return;
-
-	folder->can_hold_messages = TRUE;
-	folder->can_hold_folders = FALSE;
-	folder->has_summary_capability = TRUE;
-	folder->has_search_capability = TRUE;
-
-	/* FIXME: what to do about user flags if the subfolder doesn't support them? */
-	folder->permanent_flags = CAMEL_MESSAGE_ANSWERED |
-		CAMEL_MESSAGE_DELETED |
-		CAMEL_MESSAGE_DRAFT |
-		CAMEL_MESSAGE_FLAGGED |
-		CAMEL_MESSAGE_SEEN;
-
-	vf->messages = g_ptr_array_new();
-	vf->messages_uid = g_hash_table_new(g_str_hash, g_str_equal);
-
-	vf->expression = g_strdup_printf("(or\n (match-all (user-flag \"%s\"))\n %s\n)", namepart, searchpart);
-	vf->vname = g_strdup(namepart);
-
-	g_free(namepart);
-
-	vee_folder_build(vf, ex);
-}
-
-static void
-vee_sync (CamelFolder *folder, gboolean expunge, CamelException *ex)
-{
-	;
-}
-
-static gint vee_get_message_count (CamelFolder *folder)
-{
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-
-	return vf->messages->len;
-}
-
-static gint
-vee_get_unread_message_count (CamelFolder *folder)
-{
-	CamelVeeFolder *vee_folder = CAMEL_VEE_FOLDER (folder);
-	CamelMessageInfo *info;
-	GPtrArray *infolist;
-	gint i, count = 0;
-
-	g_return_val_if_fail (folder != NULL, -1);
-
-	infolist = vee_folder->messages;
-	
-	for (i = 0; i < infolist->len; i++) {
-		info = (CamelMessageInfo *) g_ptr_array_index (infolist, i);
-		if (!(info->flags & CAMEL_MESSAGE_SEEN))
-			count++;
-	}
-	
-	return count;
-}
-
-static gboolean
-get_real_message(CamelFolder *folder, const char *uid, CamelFolder **out_folder, const char **out_uid)
-{
-	CamelVeeMessageInfo *mi;
-
-	mi = (CamelVeeMessageInfo *)vee_get_message_info(folder, uid);
-	g_return_val_if_fail(mi != NULL, FALSE);
-
-	*out_folder = mi->folder;
-	*out_uid = strchr(mi->info.uid, ':')+1;
-	return TRUE;
-}
-
-static CamelMimeMessage *vee_get_message(CamelFolder *folder, const gchar *uid, CamelException *ex)
-{
-	const char *real_uid;
-	CamelFolder *real_folder;
-
-	if (!get_real_message(folder, uid, &real_folder, &real_uid)) {
-		camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
-				     "No such message %s in %s", uid,
-				     folder->name);
-		return NULL;
-	}
-
-	return camel_folder_get_message (real_folder, real_uid, ex);
-}
-
-GPtrArray *vee_get_summary(CamelFolder *folder)
-{
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-
-	return vf->messages;
-}
-
-static const CamelMessageInfo *vee_get_message_info(CamelFolder *f, const char *uid)
-{
-	CamelVeeFolder *vf = (CamelVeeFolder *)f;
-
-	return g_hash_table_lookup(vf->messages_uid, uid);
-}
-
-static GPtrArray *vee_get_uids (CamelFolder *folder)
-{
-	GPtrArray *result;
-	int i;
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-
-	result = g_ptr_array_new ();
-	g_ptr_array_set_size (result, vf->messages->len);
-	for (i=0;imessages->len;i++) {
-		CamelMessageInfo *mi = g_ptr_array_index(vf->messages, i);
-		result->pdata[i] = g_strdup(mi->uid);
-	}
-
-	return result;
-}
-
-static GPtrArray *
-vee_search_by_expression(CamelFolder *folder, const char *expression, CamelException *ex)
-{
-	GList *node;
-	GPtrArray *matches, *result = g_ptr_array_new ();
-	char *expr;
-	CamelVeeFolder *vf = (CamelVeeFolder *)folder;
-	struct _CamelVeeFolderPrivate *p = _PRIVATE(vf);
-
-	expr = g_strdup_printf("(and %s %s)", vf->expression, expression);
-	node = p->folders;
-	while (node) {
-		CamelFolder *f = node->data;
-		int i;
-
-		matches = camel_folder_search_by_expression(f, expression, ex);
-		for (i = 0; i < matches->len; i++) {
-			char *uid = matches->pdata[i];
-			g_ptr_array_add(result, g_strdup_printf("%p:%s", f, uid));
-		}
-		camel_folder_search_free(f, matches);
-		node = g_list_next(node);
-	}
-	return result;
-}
-
-static guint32
-vee_get_message_flags(CamelFolder *folder, const char *uid)
-{
-	const char *real_uid;
-	CamelFolder *real_folder;
-
-	if (!get_real_message (folder, uid, &real_folder, &real_uid))
-		return 0;
-
-	return camel_folder_get_message_flags(real_folder, real_uid);
-}
-
-static void
-vee_set_message_flags(CamelFolder *folder, const char *uid, guint32 flags, guint32 set)
-{
-	const char *real_uid;
-	CamelFolder *real_folder;
-
-	if (!get_real_message(folder, uid, &real_folder, &real_uid))
-		return;
-
-	camel_folder_set_message_flags(real_folder, real_uid, flags, set);
-}
-
-static gboolean
-vee_get_message_user_flag(CamelFolder *folder, const char *uid, const char *name)
-{
-	const char *real_uid;
-	CamelFolder *real_folder;
-
-	if (!get_real_message(folder, uid, &real_folder, &real_uid))
-		return FALSE;
-
-	return camel_folder_get_message_user_flag(real_folder, real_uid, name);
-}
-
-static void
-vee_set_message_user_flag(CamelFolder *folder, const char *uid,
-			  const char *name, gboolean value)
-{
-	const char *real_uid;
-	CamelFolder *real_folder;
-
-	if (!get_real_message(folder, uid, &real_folder, &real_uid))
-		return;
-
-	return camel_folder_set_message_user_flag(real_folder, real_uid, name, value);
-}
-
-
-/*
-  need incremental update, based on folder.
-  Need to watch folders for changes and update accordingly.
-*/
-
-/* this does most of the vfolder magic */
-static void
-vee_folder_build(CamelVeeFolder *vf, CamelException *ex)
-{
-	struct _CamelVeeFolderPrivate *p = _PRIVATE(vf);
-	GList *node;
-	int i;
-	GPtrArray *messages;
-	GHashTable *messages_uid;
-
-	for (i=0;imessages->len;i++) {
-		CamelMessageInfo *mi = g_ptr_array_index(vf->messages, i);
-		camel_message_info_free(mi);
-	}
-
-	messages = g_ptr_array_new();
-	messages_uid = g_hash_table_new(g_str_hash, g_str_equal);
-
-	node = p->folders;
-	while (node) {
-		GPtrArray *matches;
-		CamelFolder *f = node->data;
-		CamelVeeMessageInfo *mi;
-		const CamelMessageInfo *info;
-		int i;
-
-		matches = camel_folder_search_by_expression(f, vf->expression, ex);
-		for (i = 0; i < matches->len; i++) {
-			info = camel_folder_get_message_info(f, matches->pdata[i]);
-			if (info) {
-				mi = g_malloc0(sizeof(*mi));
-				camel_message_info_dup_to(info, (CamelMessageInfo *)mi);
-				g_free (mi->info.uid);
-				mi->info.uid = g_strdup_printf("%p:%s", f, info->uid);
-				mi->folder = f;
-				g_ptr_array_add(messages, mi);
-				g_hash_table_insert(messages_uid, mi->info.uid, mi);
-			}
-		}
-		camel_folder_search_free(f, matches);
-		node = g_list_next(node);
-	}
-
-	g_ptr_array_free(vf->messages, TRUE);
-	vf->messages = messages;
-	g_hash_table_destroy(vf->messages_uid);
-	vf->messages_uid = messages_uid;
-}
-
-
-/* build query contents for a single folder */
-static void
-vee_folder_build_folder(CamelVeeFolder *vf, CamelFolder *source, CamelException *ex)
-{
-	GPtrArray *matches;
-	CamelFolder *f = source;
-	CamelVeeMessageInfo *mi;
-	const CamelMessageInfo *info;
-
-	GPtrArray *messages;
-	GHashTable *messages_uid;
-	int i;
-
-	for (i=0;imessages->len;i++) {
-		CamelVeeMessageInfo *mi = g_ptr_array_index(vf->messages, i);
-		if (mi->folder == source) {
-			g_hash_table_remove(vf->messages_uid, mi->info.uid);
-			g_ptr_array_remove_index_fast(vf->messages, i);
-
-			camel_message_info_free((CamelMessageInfo *)mi);
-			i--;
-		}
-	}
-
-	messages = vf->messages;
-	messages_uid = vf->messages_uid;
-	
-	matches = camel_folder_search_by_expression(f, vf->expression, ex);
-	for (i = 0; i < matches->len; i++) {
-		info = camel_folder_get_message_info(f, matches->pdata[i]);
-		if (info) {
-			mi = g_malloc0(sizeof(*mi));
-			camel_message_info_dup_to(info, (CamelMessageInfo*)mi);
-			g_free (mi->info.uid);
-			mi->info.uid = g_strdup_printf("%p:%s", f, info->uid);
-			mi->folder = f;
-			g_ptr_array_add(messages, mi);
-			g_hash_table_insert(messages_uid, mi->info.uid, mi);
-		}
-	}
-	camel_folder_search_free(f, matches);
-}
-
-
-/*
-
-  (match-folder "folder1" "folder2")
-
- */
diff --git a/camel/providers/vee/camel-vee-folder.h b/camel/providers/vee/camel-vee-folder.h
deleted file mode 100644
index 6f7c788125..0000000000
--- a/camel/providers/vee/camel-vee-folder.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#ifndef _CAMEL_VEE_FOLDER_H
-#define _CAMEL_VEE_FOLDER_H
-
-#include 
-
-#define CAMEL_VEE_FOLDER(obj)         CAMEL_CHECK_CAST (obj, camel_vee_folder_get_type (), CamelVeeFolder)
-#define CAMEL_VEE_FOLDER_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vee_folder_get_type (), CamelVeeFolderClass)
-#define IS_CAMEL_VEE_FOLDER(obj)      CAMEL_CHECK_TYPE (obj, camel_vee_folder_get_type ())
-
-typedef struct _CamelVeeFolder      CamelVeeFolder;
-typedef struct _CamelVeeFolderClass CamelVeeFolderClass;
-
-struct _CamelVeeFolder {
-	CamelFolder parent;
-
-	struct _CamelVeeFolderPrivate *priv;
-
-	char *expression;	/* query expression */
-	char *vname;		/* local name */
-	CamelFolder *local;	/* local storage for folder */
-
-	/* FIXME: Move this to a summary object??? */
-	GPtrArray *messages; /* message info's */
-	GHashTable *messages_uid;
-};
-
-struct _CamelVeeFolderClass {
-	CamelFolderClass parent_class;
-};
-
-guint		camel_vee_folder_get_type	(void);
-CamelVeeFolder      *camel_vee_folder_new	(void);
-
-void camel_vee_folder_add_folder(CamelVeeFolder *vf, CamelFolder *sub);
-
-#endif /* ! _CAMEL_VEE_FOLDER_H */
diff --git a/camel/providers/vee/camel-vee-provider.c b/camel/providers/vee/camel-vee-provider.c
deleted file mode 100644
index e36e7fcff1..0000000000
--- a/camel/providers/vee/camel-vee-provider.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#include "config.h"
-#include "camel-vee-store.h"
-#include "camel-provider.h"
-#include "camel-session.h"
-#include "camel-url.h"
-
-static CamelProvider vee_provider = {
-	"vfolder",
-	"Virtual folder email provider",
-
-	"For reading mail as a query of another set of folders",
-
-	"vfolder",
-
-	0,
-
-	{ 0, 0 },
-
-	NULL
-};
-
-void
-camel_provider_module_init (CamelSession *session)
-{
-	vee_provider.object_types[CAMEL_PROVIDER_STORE] =
-		camel_vee_store_get_type();
-
-	vee_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal);
-	
-	camel_session_register_provider (session, &vee_provider);
-}
diff --git a/camel/providers/vee/camel-vee-store.c b/camel/providers/vee/camel-vee-store.c
deleted file mode 100644
index 8be8298b2c..0000000000
--- a/camel/providers/vee/camel-vee-store.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#include "camel-vee-store.h"
-#include "camel-vee-folder.h"
-
-static CamelFolder *vee_get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelException *ex);
-static char *vee_get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex);
-
-struct _CamelVeeStorePrivate {
-};
-
-#define _PRIVATE(o) (((CamelVeeStore *)(o))->priv)
-
-static void camel_vee_store_class_init (CamelVeeStoreClass *klass);
-static void camel_vee_store_init       (CamelVeeStore *obj);
-
-static CamelStoreClass *camel_vee_store_parent;
-
-CamelType
-camel_vee_store_get_type (void)
-{
-	static CamelType type = CAMEL_INVALID_TYPE;
-	
-	if (type == CAMEL_INVALID_TYPE) {
-		type = camel_type_register (camel_store_get_type (), "CamelVeeStore",
-					    sizeof (CamelVeeStore),
-					    sizeof (CamelVeeStoreClass),
-					    (CamelObjectClassInitFunc) camel_vee_store_class_init,
-					    NULL,
-					    (CamelObjectInitFunc) camel_vee_store_init,
-					    NULL);
-	}
-	
-	return type;
-}
-
-static void
-
-camel_vee_store_class_init (CamelVeeStoreClass *klass)
-{
-	CamelStoreClass *store_class = (CamelStoreClass *) klass;
-	
-	camel_vee_store_parent = CAMEL_STORE_CLASS(camel_type_get_global_classfuncs (camel_store_get_type ()));
-
-	/* virtual method overload */
-	store_class->get_folder = vee_get_folder;
-	store_class->get_folder_name = vee_get_folder_name;
-}
-
-static void
-camel_vee_store_init (CamelVeeStore *obj)
-{
-	struct _CamelVeeStorePrivate *p;
-
-	p = _PRIVATE(obj) = g_malloc0(sizeof(*p));
-}
-
-/**
- * camel_vee_store_new:
- *
- * Create a new CamelVeeStore object.
- * 
- * Return value: A new CamelVeeStore widget.
- **/
-CamelVeeStore *
-camel_vee_store_new (void)
-{
-	CamelVeeStore *new = CAMEL_VEE_STORE ( camel_object_new (camel_vee_store_get_type ()));
-	return new;
-}
-
-static CamelFolder *
-vee_get_folder (CamelStore *store, const char *folder_name, gboolean create, CamelException *ex)
-{
-	CamelFolder *folder;
-
-	folder =  CAMEL_FOLDER (camel_object_new (camel_vee_folder_get_type()));
-
-	((CamelFolderClass *)(CAMEL_OBJECT_GET_CLASS(folder)))->init (folder, store, NULL, folder_name, "/", TRUE, ex);
-	return folder;
-}
-
-static char *
-vee_get_folder_name (CamelStore *store, const char *folder_name, CamelException *ex)
-{
-	return g_strdup(folder_name);
-}
-
diff --git a/camel/providers/vee/camel-vee-store.h b/camel/providers/vee/camel-vee-store.h
deleted file mode 100644
index d4ed7a0610..0000000000
--- a/camel/providers/vee/camel-vee-store.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Copyright (C) 2000 Helix Code Inc.
- *
- *  Authors: Michael Zucchi 
- *
- *  This program is free software; you can redistribute it and/or 
- *  modify it under the terms of the GNU General Public License as 
- *  published by the Free Software Foundation; either version 2 of the
- *  License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- *  USA
- */
-
-#ifndef _CAMEL_VEE_STORE_H
-#define _CAMEL_VEE_STORE_H
-
-#include 
-
-#define CAMEL_VEE_STORE(obj)         CAMEL_CHECK_CAST (obj, camel_vee_store_get_type (), CamelVeeStore)
-#define CAMEL_VEE_STORE_CLASS(klass) CAMEL_CHECK_CLASS_CAST (klass, camel_vee_store_get_type (), CamelVeeStoreClass)
-#define IS_CAMEL_VEE_STORE(obj)      CAMEL_CHECK_TYPE (obj, camel_vee_store_get_type ())
-
-typedef struct _CamelVeeStore      CamelVeeStore;
-typedef struct _CamelVeeStoreClass CamelVeeStoreClass;
-
-struct _CamelVeeStore {
-	CamelStore parent;
-
-	struct _CamelVeeStorePrivate *priv;
-};
-
-struct _CamelVeeStoreClass {
-	CamelStoreClass parent_class;
-};
-
-guint		camel_vee_store_get_type	(void);
-CamelVeeStore      *camel_vee_store_new	(void);
-
-#endif /* ! _CAMEL_VEE_STORE_H */
diff --git a/camel/providers/vee/libcamelvee.urls b/camel/providers/vee/libcamelvee.urls
deleted file mode 100644
index 6fa58dadb5..0000000000
--- a/camel/providers/vee/libcamelvee.urls
+++ /dev/null
@@ -1 +0,0 @@
-vfolder
diff --git a/camel/string-utils.c b/camel/string-utils.c
deleted file mode 100644
index 023aee16af..0000000000
--- a/camel/string-utils.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* string-util : utilities for gchar* strings  */
-
-/* 
- *
- * Authors: Bertrand Guiheneuf 
- *          Jeffrey Stedfast 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-#include 
-#include "string-utils.h"
-#include "string.h"
-
-gboolean
-string_equal_for_glist (gconstpointer v, gconstpointer v2)
-{
-	return (!strcmp ( ((const gchar *)v), ((const gchar*)v2))) == 0;
-}
-
-/* utility func : frees a gchar element in a GList */
-static void 
-__string_list_free_string (gpointer data, gpointer user_data)
-{
-	gchar *string = (gchar *)data;
-	g_free (string);
-}
-
-void 
-string_list_free (GList *string_list)
-{
-	if (string_list == NULL) return; 
-
-	g_list_foreach (string_list, __string_list_free_string, NULL);
-	g_list_free (string_list);
-}
-
-GList *
-string_split (const gchar *string, char sep, const gchar *trim_chars, StringTrimOption trim_options)
-{
-	GList *result = NULL;
-	gint first, last, pos;
-	gchar *new_string;
-
-	g_assert (string);
-	
-	first = 0;
-	last = strlen(string) - 1;
-	
-	/* strip leading and trailing separators */
-	while ( (first<=last) && (string[first]==sep) )
-		first++;
-	while ( (first<=last) && (string[last]==sep) )
-		last--;
-
-	
-	while (first<=last)  {
-		pos = first;
-		/* find next separator */
-		while ((pos<=last) && (string[pos]!=sep)) pos++;
-		if (first != pos) {
-			new_string = g_strndup (string+first, pos-first);
-			/* could do trimming in line to speed up this code */
-			if (trim_chars) string_trim (new_string, trim_chars, trim_options);
-			result = g_list_append (result, new_string);
-		}	
-		first = pos + 1;
-	}
-
-	return result;
-}
-
-void 
-string_trim (gchar *string, const gchar *trim_chars, StringTrimOption options)
-{
-	gint first_ok;
-	gint last_ok;
-	guint length;
-
-	g_return_if_fail (string);
-	length = strlen (string);
-	if (length==0)
-		return;
-	
-	first_ok = 0;
-	last_ok = length - 1;
-
-	if (options & STRING_TRIM_STRIP_LEADING)
-		while  ( (first_ok <= last_ok) && (strchr (trim_chars, string[first_ok])!=NULL) )
-			first_ok++;
-	
-	if (options & STRING_TRIM_STRIP_TRAILING)
-		while  ( (first_ok <= last_ok) && (strchr (trim_chars, string[last_ok])!=NULL) )
-			last_ok--;
-	
-	if (first_ok > 0)
-		memmove (string, string+first_ok, last_ok - first_ok + 1);
-	string[last_ok - first_ok +1] = '\0';
-	
-}
-
-
-/**
- * remove_suffix: remove a suffix from a string
- * @s: the string to remove the suffix from. 
- * @suffix: the suffix to remove
- * @suffix_found : suffix found flag
- *
- * Remove a suffix from a string. If the 
- * string ends with the full suffix, a copy 
- * of the string without the suffix is returned and
- * @suffix_found is set to %TRUE. 
- * Otherwise, NULL is returned and
- * @suffix_found is set to %FALSE. 
- * 
- * Return value: an allocated copy of the string without the suffix or NULL if the suffix was not found.
- **/
-gchar *
-string_prefix (const gchar *s, const gchar *suffix, gboolean *suffix_found)
-{
-	guint s_len, suf_len;
-	guint suffix_pos;
-	char *result_string;
-
-	g_assert (s);
-	g_assert (suffix);
-	g_assert (suffix_found);
-
-	s_len = strlen (s);
-	suf_len = strlen (suffix);
-
-	/* if the string is shorter than the suffix, do nothing */
-	if (s_len < suf_len) {
-		*suffix_found = FALSE;
-		return NULL;
-	}
-	
-	/* theoretical position of the prefix */
-	suffix_pos = s_len - suf_len;
-
-	/* compare the right hand side of the string with the suffix */
-	if (!strncmp (s+suffix_pos, suffix, suf_len)) {
-
-		/* if the suffix matches, check that there are 
-		   characters before */
-		if (suffix_pos == 0) {
-			result_string = NULL;
-			*suffix_found = TRUE;
-		} else { 
-			result_string = g_strndup (s, suffix_pos);
-			*suffix_found = TRUE;
-		}
-
-	} else { 
-		result_string = NULL;
-		*suffix_found = FALSE;
-	}
-
-	return result_string;
-}
-
-void
-string_unquote (gchar *string)
-{
-	/* if the string is quoted, unquote it */
-
-	g_return_if_fail (string != NULL);
-	
-	if (*string == '"' && *(string + strlen (string) - 1) == '"') {
-		*(string + strlen (string) - 1) = '\0';
-		if (*string)
-			memmove (string, string+1, strlen (string));
-	}
-}
-
-gchar *
-strip (gchar *string, gchar c)
-{
-	/* strip all occurances of c from the string */
-	gchar *src, *dst;
-	
-	g_return_val_if_fail (string != NULL, NULL);
-	
-	for (src = dst = string; *src; src++)
-		if (*src != c)
-			*dst++ = *src;
-	*dst = '\0';
-	
-	return string;
-}
diff --git a/camel/string-utils.h b/camel/string-utils.h
deleted file mode 100644
index 1556faa1df..0000000000
--- a/camel/string-utils.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* string-util : utilities for normal gchar * strings  */
-
-/* 
- *
- * Authors: Bertrand Guiheneuf 
- *          Jeffrey Stedfast 
- *
- * Copyright 1999, 2000 Helix Code, Inc. (http://www.helixcode.com)
- *
- * This program is free software; you can redistribute it and/or 
- * modify it under the terms of the GNU General Public License as 
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-#ifndef STRING_UTIL_H
-#define STRING_UTIL_H 1
-
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus }*/
-
-#include 
-
-typedef enum {
-	STRING_TRIM_NONE            =     0,
-	STRING_TRIM_STRIP_TRAILING  =     1,
-	STRING_TRIM_STRIP_LEADING   =     2
-} StringTrimOption;
-
-
-
-gboolean string_equal_for_glist (gconstpointer v, gconstpointer v2);
-
-void     string_list_free       (GList *string_list);
-
-GList   *string_split           (const gchar *string, char sep,
-				 const gchar *trim_chars, StringTrimOption trim_options);
-void     string_trim            (gchar *string, const gchar *chars,
-				 StringTrimOption options);
-
-gchar   *string_prefix          (const gchar *s, const gchar *suffix,
-				 gboolean *suffix_found);
-
-void    string_unquote          (gchar *string);
-
-gchar   *strip                  (gchar *string, gchar c);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* STRING_UTIL_H */
diff --git a/composer/.cvsignore b/composer/.cvsignore
deleted file mode 100644
index 8acab05c77..0000000000
--- a/composer/.cvsignore
+++ /dev/null
@@ -1,12 +0,0 @@
-.deps
-.libs
-evolution-msg-composer
-Makefile
-Makefile.in
-*.lo
-*.la
-Evolution-Addressbook-SelectNames-stubs.c
-Evolution-Addressbook-SelectNames-skels.c
-Evolution-Addressbook-SelectNames-common.c
-Evolution-Addressbook-SelectNames.h
-
diff --git a/composer/ChangeLog b/composer/ChangeLog
deleted file mode 100644
index 9f5db71457..0000000000
--- a/composer/ChangeLog
+++ /dev/null
@@ -1,580 +0,0 @@
-2000-08-12  Michael Meeks  
-
-	* e-msg-composer.c (get_text): get_text not get_txt.
-
-2000-08-11  JP Rosevear  
-
-	* e-msg-composer.c (e_msg_composer_new_with_message): Use
-	new config accessors
-
-2000-08-10  Dan Winship  
-
-	* e-msg-composer.c: Remove unneeded e-setup.h include
-
-2000-08-10  Jeffrey Stedfast  
-
-	* e-msg-composer.c (exit_dialog_cb): Made async
-
-2000-08-10  Peter Williams  
-
-	* e-msg-composer.c (do_exit): Temporarily disable draft saving
-	while we figure out how to work around Zucchi's new append_message.
-
-2000-08-10  Jeffrey Stedfast  
-
-	* e-msg-composer-hdrs.c (e_msg_composer_hdrs_get_from): Return the
-	text in GtkCombo->entry
-
-2000-08-09  Jeffrey Stedfast  
-
-	* e-msg-composer-hdrs.c (create_dropdown_entry): Fixed the GList
-	identity stuff, should now display all configured identities.
-
-2000-08-09  Christopher James Lahey  
-
-	* e-msg-composer-address-dialog.c: Fixed some warnings.
-
-	* e-msg-composer-hdrs.c: Switched the composer to use an EEntry
-	for the subject field.
-
-	* e-msg-composer.c: Changed the non scaling objects in this vbox
-	to be FALSE, FALSE instead of FALSE, TRUE.
-
-2000-08-09  Jeffrey Stedfast  
-
-	* e-msg-composer-hdrs.c (add_header): Modified to allow dropdown
-	entry-boxes as well (for headers like From:)
-	(setup_headers): Modified to use the correct enum type.
-	(create_dropdown_entry): New convenience function to add a
-	drop-down combo box and fill it in with identities
-	(init): Set from_entry to NULL
-	(e_msg_composer_hdrs_get_from): New convenience function to get
-	the text in the From widget in the composer
-	(e_msg_composer_hdrs_set_from): New convenience function to set
-	the From header in the composer
-
-2000-08-08  JP Rosevear  
-
-	* Makefile.am: Fix build by allowing includes for e-table dir
-
-2000-08-07  Jeffrey Stedfast  
-
-	* e-msg-composer-attachment-bar.c (attach_to_multipart):
-	s/strcasecmp/g_strcasecmp
-
-	* e-msg-composer.c: s/strncasecmp/g_strncasecmp - this will help
-	later with building on different platforms :-)
-
-2000-08-07  Jeffrey Stedfast  
-
-	* e-msg-composer.c (e_msg_composer_new_with_message): Added code
-	to set the body text based on the CamelMimeMessage.
-	(set_editor_text): Use lowercase html tags...
-
-2000-08-07  Jeffrey Stedfast  
-
-	* e-msg-composer.c (do_exit): Prompt the user to save their
-	composition in Drafts.
-	(set_editor_text): Uhm, use "-- \n" not "--\n" because the space
-	is called for in the standard
-	(e_msg_composer_new_with_message): New convenience function that
-	takes a CamelMimeMessage as an argument. This will be useful when
-	we code the ability to resume the editing of a message draft (like
-	in the Drafts folder).
-
-2000-08-01  JP Rosevear  
-
-	* e-msg-composer.h: Constify param
-
-	* e-msg-composer.c (get_signature): Constify param
-	(set_editor_text): ditto
-	(e_msg_composer_new_with_sig_file): ditto
-
-2000-08-01  Peter Williams  
-
-	* e-msg-composer.c (set_editor_text): sizeof("--\") !=
-	strlen("--\n"), breaking the test for the signature prefix.
-
-2000-07-28  JP Rosevear  
-
-	* e-msg-composer.c (e_msg_composer_new_with_sig_file): New
-	function to create composer with sig file set.
-	(e_msg_composer_get_sig_file): New function to get sig file
-	(e_msg_composer_set_sig_file): New function to set sig file
-
-2000-07-25  Michael Meeks  
-
-	* e-msg-composer.c (get_text): add textual exception printout.
-	(set_editor_text): close pre tags & check for pre-existing
-	sig separator.
-
-2000-07-25  Peter Williams  
-
-	* e-msg-composer.c (menu_file_insert_file_cb): Mark this function
-	as FIXME because we're waiting for the HTML Editor Control to
-	support paste commands. Also some updates for when that happens.
-
-2000-07-24  Dan Winship  
-
-	* e-msg-composer.c: Remove GOAD support.
-	(create_editor): Try to give a more helpful error message when
-	failing to load the editor control.
-
-2000-07-23  Ettore Perazzoli  
-
-	* e-msg-composer.c (menu_format_html_cb): New callback for the
-	"Send HTML" menu toggle item.
-	(create_menubar_format): New.
-	(create_menubar): Call it.
-	(create_menubar_options): Removed.
-	(init): Initialize `send_html' and `attachment_bar_visible' to
-	FALSE.
-	(get_signature): Add `void' to the declaration.  This is C, not
-	C++.
-	(menu_file_close_cb): Renamed from `exit_cb'.
-	(menu_file_send_cb): Renamed from `send_cb'.
-	(menu_file_save_as_cb): Renamed from `save_as_cb'.
-	(menu_file_save_cb): Renamed from `save_cb'.
-	(menu_file_open_cb): Renamed from `open_cb'.
-	(menu_file_add_attachment_cb): Renamed from `add_attachment_cb'.
-	(menu_file_insert_file_cb): Renamed from `insert_file_cb'.
-	(e_msg_composer_set_send_html): New.
-	(build_message): Use the `send_html' flag instead of peeking the
-	`msg_format' gnome-config value directly.
-
-	* e-msg-composer.h: New member `send_html' in `EMsgComposer'.
-
-2000-07-23  Ettore Perazzoli  
-
-	* e-msg-composer.c: Changed to use BonoboUIHandler stuff directly
-	instead of translating from GnomeUIInfo.
-	(create_menubar_file): New.
-	(create_menubar_edit): New.
-	(create_menubar_view): New.
-	(create_menubar_options): New.
-	(create_menubar): Use these functions to set up the menu bar.
-	(create_toolbar): Use BonoboUIHandler directly instead of
-	converting from GnomeUIInfo.
-	(toolbar_view_attachments_clicked_cb): Removed.
-	(address_dialog_cb): Removed.
-	(address_dialog_destroy_cb): Removed.
-	(address_dialog_apply_cb): Removed.
-	(setup_address_dialog): Removed.
-
-2000-07-12  Peter Williams  
-
-	* e-msg-composer.c: (view_tree) Make the "View Attachments" item
-	a toggleitem ... so that it can be toggled...
-	(menu_view_attachments_activate_cb): Treat the widget correctly
-	and toggle correctly.
-
-2000-07-10  Ettore Perazzoli  
-
-	* e-msg-composer.c (exit_cb): Use it.
-	(delete_event): New, handler for the "delete_event" signal.
-
-2000-07-09  Dan Winship  
-
-	* e-msg-composer.c (set_editor_text): Don't load "" into the
-	editor, because it will cause the editor component to g_warning.
-
-2000-07-09  Christopher James Lahey  
-
-	* e-msg-composer-hdrs.c: Removed the extra frame here.
-
-2000-07-08  Dan Winship  
-
-	* e-msg-composer.c (create_menubar): Create an empty "Edit" menu
-	for the editor control to insert itself into.
-
-2000-07-08  Jeffrey Stedfast  
-
-	* .cvsignore: Ignore dynamically created source files
-
-2000-07-08  Ettore Perazzoli  
-
-	* e-msg-composer-hdrs.c (set_entry): New.
-	(e_msg_composer_hdrs_set_to): Use it.
-	(e_msg_composer_hdrs_set_cc): Likewise
-	(e_msg_composer_hdrs_set_bcc): Likewise.
-	(e_msg_composer_hdrs_get_to): Replace implementation with a
-	`g_assert_not_reached()'.
-	(e_msg_composer_hdrs_get_cc): Likewise.
-	(e_msg_composer_hdrs_get_bcc): Likewise.
-
-	* e-msg-composer.c: Get rid of cut/copy/paste/undo as they
-	duplicate the editor toolbar and cannot be made to work for all
-	the widgets anyway.
-
-2000-07-08  Ettore Perazzoli  
-
-	* e-msg-composer-hdrs.c: New member `corba_select_names' in
-	`EMsgComposerHdrsPrivate'.
-	(destroy): If not `CORBA_OBJECT_NIL', release.
-	(init): Init to `CORBA_OBJECT_NIL'.
-	(setup_corba): New.
-	(e_msg_composer_hdrs_new): Call it.
-	(add_entry): Create the entries by using the ::SelectNames
-	interface.
-	(address_button_clicked_cb): Activate the dialog through the
-	::SelectNames interface.
-
-2000-06-29  Jeffrey Stedfast  
-
-	* e-msg-composer.c: Changed "Exit" to "Close" in the File menu.
-	This is a little more intuitive as it does not suggest exiting
-	the application, just says "close this window".
-
-2000-06-26  Christopher James Lahey  
-
-	* Makefile.am: Added e-msg-composer-select-file.h for make
-	distcheck.
-
-2000-06-26  Ettore Perazzoli  
-
-	* e-msg-composer.c
-	(load): New.
-	(open_cb): Use it.
-	(save): New function.
-	(save_cb): Implemented by using it.
-	(save_as_cb): Likewise.
-
-2000-06-17  Ettore Perazzoli  
-
-	* e-msg-composer.c (e_msg_composer_construct): I18N the title bar.
-
-	* Makefile.am (libcomposerinclude_HEADERS): Removed.  Move all the
-	`.h' files into `libcomposer_la_SOURCES' so that they get
-	distributed, but not installed.
-
-	* e-msg-composer.c (open_cb): New; implement the `Open' command.
-	(save_as_cb): New; implement the `Save as' command.
-	(init): Initialize the `persist_file_interface' and
-	`persist_stream_interface' members to NULL.
-	(destroy): Release the PersistStream and PersistFile interfaces.
-	(e_msg_composer_construct): Query the PersistFile and
-	PersistStream interfaces on the control and save them in the
-	`persist_file_interface' and `persist_stream_interface' members.
-	(get_text): Renamed from `get_editor_text'.  Get a
-	@persist_stream_interface instead of querying it a the control.
-	(build_message): Return NULL if `persist_stream_interface' is nil.
-
-	* e-msg-composer.h: New member `persist_file_interface' in
-	`EMsgComposer'.
-
-	* e-msg-composer-select-file.c: New.
-	* e-msg-composer-select-file.h: New.
-
-	* e-msg-composer.c (e_msg_composer_construct): Make the `To:'
-	entry grab the keyboard focus.
-
-	* e-msg-composer-hdrs.c (e_msg_composer_hdrs_get_to_entry): New.
-	(e_msg_composer_hdrs_get_cc_entry): New.
-	(e_msg_composer_hdrs_get_bcc_entry): New.
-	(e_msg_composer_hdrs_get_subject_entry): New.
-
-	* e-msg-composer.c (e_msg_composer_construct): Set the scroll
-	frame's shadow type to `GTK_SHADOW_IN'.
-	(format_text): Initialize `tabbing' to zero to shut down the
-	compiler.
-
-2000-06-14  Dan Winship  
-
-	* e-msg-composer-attachment-bar.c (add_from_user): keep the
-	GtkFileSelection around between calls so we start up in the same
-	directory we ended up in last time around. (Also fixes a big
-	memory leak in that the code was already keeping the
-	GtkFileSelection around, it just wasn't remembering to reuse it.)
-
-	* e-msg-composer.c (format_text): Don't line-wrap lines that start
-	with ">".
-
-2000-06-12  Dan Winship  
-
-	* e-msg-composer.c (format_text): If a paragraph starts with TABs,
-	indent the whole paragraph to that tab level.
-
-2000-06-12  Ettore Perazzoli  
-
-	* e-msg-composer.c: Make the `attachment_scroll_frame' an
-	`EScrollFrame'.
-	(exit_cb): I18N the quit message.
-
-	* e-msg-composer.h: `attachment_scrolled_window' renamed to
-	`attachment_scroll_frame'.
-
-2000-06-12  Dan Winship  
-
-	* e-msg-composer.c (format_text): Don't break on non-breaking
-	spaces, don't keep non-breaking spaces that fall after a line
-	wrap, and translate non-breaking spaces to regular ones after
-	wrapping.
-
-2000-06-05  Dan Winship  
-
-	* e-msg-composer.c (e_msg_composer_attach): New convenience
-	function.
-
-	* e-msg-composer-attachment.c: Store a CamelMimePart rather than
-	filename/description/mime_type info. Also record whether we were
-	told or guessed the MIME type.
-	(e_msg_composer_attachment_new_from_mime_part): New constructor.
-	(e_msg_composer_attachment_edit): Remove the "browse" button. (If
-	the user wants to change the actual file that the attachment is
-	based on, he should delete the attachment and create a new one...)
-	Remove the "Apply" button, because it's not all that useful. Make
-	the MIME type only track the filename if it was guessed rather
-	than being provided.
-
-	* e-msg-composer-attachment.glade: Remove "browse" and "apply"
-	buttons. Make filename editable.
-
-	* e-msg-composer-attachment-bar.c (sort): Removed. Send the
-	attachments in the order the user attached them in.
-	(text_changed): Removed, since we weren't enabling the relevant
-	GnomeIconList functionality that would have used this.
-	(update): Don't print the size if it's 0.
-	(attach_to_multipart, etc): adjust for EMsgComposerAttachment
-	changes.
-	(attach_to_multipart): Use 7bit encoding for message/ subparts.
-	(e_msg_composer_attachment_bar_attach_mime_part): New convenience
-	function.
-	
-
-2000-06-02  Christopher James Lahey  
-
-	* e-msg-composer.c: Added the ability to save plain text mail.
-
-2000-05-29  Dan Winship  
-
-	* e-msg-composer.c (get_editor_text): add a "format" argument so
-	we can fetch different kinds of text.
-	(format_text): New function to do line wrapping on plain text.
-	(build_message): Build multipart/alternative messages rather than
-	HTML-only ones. Yay. We don't suck (as much) any more!
-
-2000-05-28  Dan Winship  
-
-	* e-msg-composer.c: #include 
-
-2000-05-26  Dan Winship  
-
-	* e-msg-composer.c (get_editor_text, set_editor_text): Update for
-	PersistStream changes
-	(build_message): Update for CamelMultipart changes.
-
-	* e-msg-composer.c (get_signature): routine to read the user's
-	signature file.
-	(set_editor_text): If the user has configured a signature, append
-	it to the set text.
-	(e_msg_composer_new): Call set_editor_text with "" to load the
-	signature (if any).
-	
-2000-05-25  Not Zed  
-
-	* e-msg-composer.c (build_message): Use camel_data_wrapper_new
-	instead of camel_simple_data_wrapper_new.
-
-2000-05-17  Dan Winship  
-
-	* e-msg-composer.c (build_message): Use
-	camel_simple_data_wrapper_new rather than camel_data_wrapper_new.
-
-2000-05-13  Valek Filippov  
-
-	* e-msg-composer-attachment.glade: save translatable strings
-	* e-msg-composer-attachment.glade.h: file with strings
-	* e-msg-composer-address-dialog.glade: save translatable strings
-	* e-msg-composer-address-dialog.glade.h: file with strings
-
-2000-05-12  Dan Winship  
-
-	* e-msg-composer.c (get_editor_text): NUL-terminate the data
-	extracted from the BonoboStream.
-
-2000-05-10  Dan Winship  
-
-	* e-msg-composer-attachment-bar.c (attach_to_multipart): deal with
-	Content-Transfer-Encoding a little bit at least.
-
-2000-05-07  Mathieu Lacage 
-
-	* e-msg-composer.c (create_editor): remove FIXME and hardcoded 
-	string. You can write mails with OAF now.
-	
-2000-05-07  Dan Winship  
-
-	* e-msg-composer.c (build_message): unref content, etc. after
-	attaching it to message.
-
-	* e-msg-composer-attachment-bar.c (attach_to_multipart): unref
-	part after attaching it.
-
-2000-05-06  Christopher James Lahey  
-
-	* e-msg-composer-hdrs.c: Turned off focus in the To, Cc, and Bcc
-	buttons.
-
-2000-05-02  Matt Loper  
-
-	* Makefile.am: set G_LOG_DOMAIN.
-
-2000-04-28  Dan Winship  
-
-	* e-msg-composer-hdrs.c (set_recipients): Update (minimally) for
-	Camel recipient changes.
-
-2000-04-27  Dan Winship  
-
-	* e-msg-composer.c (e_msg_composer_new_from_url): New routine, to
-	process mailto URLs.
-
-2000-04-26  Dan Winship  
-
-	* e-msg-composer.c (build_message): Only generate a multipart
-	message if there are attachments. Otherwise generate a single
-	part.
-
-	* Update for CamelMimeBodyPart -> CamelMimePart
-
-2000-04-26  Dan Winship  
-
-	* e-msg-composer-attachment-bar.c (attach_to_multipart): add a
-	s/SIMPLE_// that notzed missed. Update to use
-	camel_mime_part_set_content.
-	* e-msg-composer.c (build_message): remove a now-unused variable.
-	Update for camel_mime_part_set_content.
-
-2000-04-26  NotZed  
-
-	* e-msg-composer.c (build_message): Use camel_mime_part_set_text()
-	to set the text rather than messing with data wrappers.
-
-	* e-msg-composer-attachment-bar.c (attach_to_multipart): Change
-	for new camel-stream interfaces.
-	(attach_to_multipart): Also set base64 encoding by default.
-
-2000-04-25  Radek Doulik  
-
-	* e-msg-composer.c (create_editor): use uih here
-	(e_msg_composer_construct): create menubar/toolbar before creating
-	editor control
-
-2000-04-23  Dan Winship  
-
-	* Makefile.am: build libcomposer static and don't install it.
-
-	* e-msg-composer-attachment-bar.c (attach_to_multipart): This was
-	only half-implemented. Finish it, mostly.
-
-2000-04-22  Dan Winship  
-
-	* e-msg-composer.c (e_msg_composer_add_header): new function to
-	make the composer record additional headers it should output.
-	(In-Reply-To), etc.
-	(build_message): output them
-
-2000-04-21  Dan Winship  
-
-	* e-msg-composer.c (e_msg_composer_set_headers): 
-	(e_msg_composer_set_body_text): new functions
-	(exit_cb): Connect "Exit" menu item finally.
-
-	* e-msg-composer-hdrs.c: const poisoning
-	(e_msg_composer_hdrs_set_subject): 
-	(e_msg_composer_hdrs_get_subject): new functions
-
-	* e-msg-composer-address-entry.c: const poisoning
-
-2000-04-20  Dan Winship  
-
-	* e-msg-composer.c (get_editor_text, set_editor_text): new
-	functions to get and set the contents of the HTML editor via
-	Bonobo::PersistStream.
-	(build_message): use get_editor_text. This works again.
-
-2000-04-17  Dan Winship  
-
-	* e-msg-composer.c (build_message): Change
-	camel_mime_message_new_with_session to camel_mime_message_new
-
-2000-03-17  bertrand  
-
-	* e-msg-composer.c (create_menubar): Pass the composer as the data
-	for the menubar callbacks.
-
-2000-03-12  Matt Loper  
-
-	* Makefile.am: Modified to make the composer into a library, to be
-	used by the mail component.
-
-2000-03-07  Ettore Perazzoli  
-
-	* e-msg-composer.c (create_toolbar): Pass the composer as the data
-	for the toolbar callbacks.
-	(e_msg_composer_construct): Connect the "changed" signal of the
-	attachment bar to `attachment_bar_changed()'.
-	(attachment_bar_changed): Renamed to `attachment_bar_changed_cb'.
-
-2000-03-02  Ettore Perazzoli  
-
-	* e-msg-composer.c (e_msg_composer_new): Precondition:
-	gtk_main_level() greater than zero.
-	(e_msg_composer_construct): Likewise.
-	(create_menus): New function.  Set up menus through
-	BonoboUIHandler.
-	(e_msg_composer_construct): Use it.
-
-	* main.c (main): Initialize Bonobo.
-
-	* e-msg-composer.c (init): Initialize `uih' and `editor' to NULL.
-	Do not init `text' and `text_scrolled_window' anymore.
-	(destroy): Unref `uih'.
-	(e_msg_composer_construct): Create a new BonoboUIHandler and put
-	it into `uih'.
-	(create_editor): New helper function.
-	(e_msg_composer_construct): Use it to set up the editor.
-
-	* e-msg-composer.h: New member `uih' in `EMsgComposer'.  Removed
-	members `text', `text_scrolled_window'.  New member `editor'.
-
-	* Makefile.am (INCLUDES): Add `$(BONOBO_GNOME_CFLAGS)'.
-	(evolution_msg_composer_LDADD): Add `$(BONOBO_GNOME_LIBS)'.
-
-	* e-msg-composer.c (glade_connect): Removed.
-	(setup_signals): Removed.
-	(e_msg_composer_construct): Do not use libglade to set the toolbar
-	and menubar up.
-	(destroy): Removed libglade stuff.
-	(init): Likewise.
-
-	* e-msg-composer.h: Removed `menubar_gui', `toolbar_gui',
-	`appbar_gui'.
-
-	* e-msg-composer.glade: Removed.
-
-2000-01-12  bertrand  
-
-	* Makefile.am (evolution_msg_composer_LDADD): 
-	use $(EXTRA_GNOME_LIBS_THREADS) to link with gthread
-
-1999-11-17  Ettore Perazzoli  
-
-	* Makefile.am: New Makefile to compile the message composer
-	executable.
-
-	* main.c: New file.
-
-	* e-msg-composer-hdrs.c (e_msg_composer_hdrs_to_message): Use
-	`CAMEL_RECIPIENT*' macros instead of the old `RECIPIENT*' ones
-	that do not exist anymore.
-
-	* e-msg-composer-address-dialog.c
-	(e_msg_composer_address_dialog_construct): Use `E_GLADEDIR'
-	instead of `E_GUIDIR'.
-	* e-msg-composer-attachment.c (e_msg_composer_attachment_edit):
-	Likewise.
-	* e-msg-composer.c (e_msg_composer_construct): Likewise.
-
-(See `$(top_srcdir)/widgets/ChangeLog' for previous changes to the
-message composer.)
diff --git a/composer/Makefile.am b/composer/Makefile.am
deleted file mode 100644
index bb0f18b036..0000000000
--- a/composer/Makefile.am
+++ /dev/null
@@ -1,69 +0,0 @@
-## CORBA stuff
-
-IDLS = \
-	$(top_srcdir)/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl
-
-IDL_GENERATED = \
-	Evolution-Addressbook-SelectNames.h		\
-	Evolution-Addressbook-SelectNames-common.c	\
-	Evolution-Addressbook-SelectNames-skels.c	\
-	Evolution-Addressbook-SelectNames-stubs.c
-
-Evolution-Addressbook-SelectNames-impl.o: Evolution-Addressbook-SelectNames.h
-
-$(IDL_GENERATED): $(IDLS)
-	$(ORBIT_IDL) -I$(datadir)/idl `$(GNOME_CONFIG) --cflags idl`	\
-		$(top_srcdir)/addressbook/gui/component/select-names/Evolution-Addressbook-SelectNames.idl
-
-##
-
-gladedir = $(datadir)/evolution/glade
-
-glade_DATA =					\
-	e-msg-composer-address-dialog.glade	\
-	e-msg-composer-address-dialog.glade.h	\
-	e-msg-composer-attachment.glade		\
-	e-msg-composer-attachment.glade.h
-
-libcomposerincludedir = $(includedir)/composer
-
-noinst_LTLIBRARIES = libcomposer.la
-libcomposer_la_LDFLAGS = -static
-
-INCLUDES =								\
-	-I$(top_srcdir)							\
-	-I$(top_builddir)						\
-	-I$(top_srcdir)/widgets						\
-	-I$(top_builddir)/widgets					\
-	-I$(top_srcdir)/camel					 	\
-	-I$(top_builddir)/camel					 	\
-	-I$(top_builddir)/addressbook/gui/component/select-names	\
-	$(GNOME_INCLUDEDIR)						\
-	$(BONOBO_GNOME_CFLAGS)						\
-	$(GTKHTML_CFLAGS)						\
-	$(UNICODE_CFLAGS)						\
-	-DG_LOG_DOMAIN=\"composer\"
-
-CPPFLAGS =					\
-	-DE_GLADEDIR=\"$(gladedir)\"
-
-libcomposer_la_SOURCES = 			\
-	$(IDL_GENERATED)			\
-	e-msg-composer-address-dialog.c		\
-	e-msg-composer-address-dialog.h		\
-	e-msg-composer-address-entry.c		\
-	e-msg-composer-address-entry.h		\
-	e-msg-composer-attachment-bar.c		\
-	e-msg-composer-attachment-bar.h		\
-	e-msg-composer-attachment.c		\
-	e-msg-composer-attachment.h		\
-	e-msg-composer-hdrs.c			\
-	e-msg-composer-hdrs.h			\
-	e-msg-composer-select-file.c		\
-	e-msg-composer-select-file.h		\
-	e-msg-composer.c			\
-	e-msg-composer.h			
-
-EXTRA_DIST =					\
-	$(glade_DATA)				\
-	ChangeLog
diff --git a/composer/e-msg-composer-address-dialog.c b/composer/e-msg-composer-address-dialog.c
deleted file mode 100644
index 5eec51c435..0000000000
--- a/composer/e-msg-composer-address-dialog.c
+++ /dev/null
@@ -1,656 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-address-dialog.c
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#include 
-#include "e-msg-composer-address-dialog.h"
-
-
-enum {
-	APPLY,
-	LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static GnomeDialogClass *parent_class = NULL;
-
-
-/* This function should load the addresses we know of into the dialog.  We
-   don't have a precise setup for the addressbook yet, so we will just put some
-   fake entries in.  */
-static void
-load_addresses (EMsgComposerAddressDialog *dialog)
-{
-	gchar *text[][3] = {
-		{ "Bertrand Guiheneuf", "Bertrand.Guiheneuf@aful.org", NULL },
-		{ "Ettore Perazzoli", "ettore@gnu.org", NULL },
-		{ "Miguel de Icaza", "miguel@gnu.org", NULL },
-		{ "Nat Friedman", "nat@nat.org", NULL },
-		{ NULL, NULL, NULL }
-	};
-	GtkCList *clist;
-	guint i;
-
-	clist = GTK_CLIST (glade_xml_get_widget (dialog->gui, "address_clist"));
-
-	for (i = 0; text[i][0] != NULL; i++)
-		gtk_clist_append (clist, text[i]);
-}
-
-/* Combine name and email into an address, e.g. "Ettore Perazzoli
-   ".  FIXME FIXME FIXME this does not handle quoting (commas
-   will cause troubles), but it should.  */
-static gchar *
-make_full_address (const gchar *name,
-		   const gchar *email)
-{
-	return g_strconcat (name, " <", email, ">", NULL);
-}
-
-/* This loads the selected address in the address GtkCList into the requested
-   GtkList.  */
-static void
-add_address (EMsgComposerAddressDialog *dialog,
-	     const gchar *list_name)
-{
-	GtkCList *src_clist;
-	GtkCList *dest_clist;
-	gchar *name, *email;
-	gchar *text[2];
-	guint row;
-
-	src_clist = GTK_CLIST (glade_xml_get_widget (dialog->gui,
-						     "address_clist"));
-	if (src_clist->selection == NULL)
-		return;
-
-	dest_clist = GTK_CLIST (glade_xml_get_widget (dialog->gui, list_name));
-	row = GPOINTER_TO_INT (src_clist->selection->data);
-
-	gtk_clist_get_text (src_clist, row, 0, &name);
-	gtk_clist_get_text (src_clist, row, 1, &email);
-
-	text[0] = make_full_address (name, email);
-	text[1] = NULL;
-
-	gtk_clist_append (dest_clist, text);
-
-	g_free (text[0]);
-}
-
-static void
-apply (EMsgComposerAddressDialog *dialog)
-{
-	gtk_signal_emit (GTK_OBJECT (dialog), signals[APPLY]);
-}
-
-
-/* Recipient list popup menu.  */
-
-struct _RecipientListInfo {
-	EMsgComposerAddressDialog *dialog;
-	GtkCList *clist;
-	gint row;		/* -1 if menu was popped up in an empty
-				   area.  */
-};
-typedef struct _RecipientListInfo RecipientListInfo;
-
-static void
-copy_recipient (RecipientListInfo *info,
-		gboolean remove)
-{
-	gchar *text;
-	gint row;
-
-	if (info->clist->selection == NULL)
-		return;
-
-	row = GPOINTER_TO_INT (info->clist->selection->data);
-	gtk_clist_get_text (info->clist, row, 0, &text);
-
-	g_free (info->dialog->cut_buffer);
-	info->dialog->cut_buffer = g_strdup (text);
-
-	if (remove)
-		gtk_clist_remove (info->clist, row);
-
-	gtk_selection_owner_set (GTK_WIDGET (info->clist),
-				 GDK_SELECTION_PRIMARY,
-				 GDK_CURRENT_TIME);
-}
-
-static void
-copy_recipient_cb (GtkWidget *widget,
-		   gpointer data)
-{
-	RecipientListInfo *info;
-
-	info = (RecipientListInfo *) data;
-	copy_recipient (info, FALSE);
-	g_free (info);
-}
-
-static void
-cut_recipient_cb (GtkWidget *widget,
-		  gpointer data)
-{
-	RecipientListInfo *info;
-
-	info = (RecipientListInfo *) data;
-	copy_recipient (info, TRUE);
-	g_free (info);
-}
-
-static void
-paste_recipient_cb (GtkWidget *widget,
-		    gpointer data)
-{
-	RecipientListInfo *info;
-	GdkAtom atom;
-
-	info = (RecipientListInfo *) data;
-
-	atom = gdk_atom_intern ("STRING", FALSE);
-	gtk_selection_convert (GTK_WIDGET (info->clist),
-			       GDK_SELECTION_PRIMARY,
-			       atom,
-			       GDK_CURRENT_TIME);
-
-	g_free (info);
-}
-
-static GnomeUIInfo recipient_list_item_popup_info[] = {
-	GNOMEUIINFO_ITEM_STOCK (N_("Cut"),
-				N_("Cut selected item into clipboard"),
-				cut_recipient_cb,
-				GNOME_STOCK_MENU_CUT),
-	GNOMEUIINFO_ITEM_STOCK (N_("Copy"),
-				N_("Copy selected item into clipboard"),
-				copy_recipient_cb,
-				GNOME_STOCK_MENU_COPY),
-	GNOMEUIINFO_ITEM_STOCK (N_("Paste"),
-				N_("Paste item from clipboard"),
-				paste_recipient_cb,
-				GNOME_STOCK_MENU_PASTE),
-	GNOMEUIINFO_END
-};
-
-static GnomeUIInfo recipient_list_popup_info[] = {
-	GNOMEUIINFO_ITEM_STOCK (N_("Paste"),
-				N_("Paste item from clipboard"),
-				paste_recipient_cb,
-				GNOME_STOCK_MENU_PASTE),
-	GNOMEUIINFO_END
-};
-
-
-/* Signals.  */
-
-static void
-add_to_cb (GtkWidget *widget,
-	   gpointer data)
-{
-	add_address (E_MSG_COMPOSER_ADDRESS_DIALOG (data), "to_clist");
-}
-
-static void
-add_cc_cb (GtkWidget *widget,
-	   gpointer data)
-{
-	add_address (E_MSG_COMPOSER_ADDRESS_DIALOG (data), "cc_clist");
-}
-
-static void
-add_bcc_cb (GtkWidget *widget,
-	   gpointer data)
-{
-	add_address (E_MSG_COMPOSER_ADDRESS_DIALOG (data), "bcc_clist");
-}
-
-static void
-glade_connect (GladeXML *gui,
-	       const gchar *widget_name,
-	       const gchar *signal_name,
-	       GtkSignalFunc callback,
-	       gpointer callback_data)
-{
-	GtkWidget *widget;
-
-	widget = glade_xml_get_widget (gui, widget_name);
-	if (widget == NULL)
-		g_warning ("Widget `%s' was not found.", widget_name);
-	else
-		gtk_signal_connect (GTK_OBJECT (widget), signal_name,
-				    GTK_SIGNAL_FUNC (callback), callback_data);
-}
-
-static gint
-recipient_clist_button_press_cb (GtkWidget *widget,
-				 GdkEventButton *event,
-				 gpointer data)
-{
-	EMsgComposerAddressDialog *dialog;
-	RecipientListInfo *info;
-	GtkWidget *popup;
-	GtkCList *clist;
-	gboolean on_row;
-	gint row, column;
-
-	dialog = E_MSG_COMPOSER_ADDRESS_DIALOG (data);
-
-	clist = GTK_CLIST (widget);
-
-	if (event->window != clist->clist_window || event->button != 3)
-		return FALSE;
-
-	on_row = gtk_clist_get_selection_info (clist, event->x, event->y,
-					       &row, &column);
-
-	info = g_new (RecipientListInfo, 1);
-	info->dialog = dialog;
-	info->clist = clist;
-
-	if (on_row) {
-		gtk_clist_unselect_all (clist);
-		gtk_clist_select_row (clist, row, 0);
-		info->row = row;
-		popup = gnome_popup_menu_new (recipient_list_item_popup_info);
-	} else {
-		info->row = -1;
-		popup = gnome_popup_menu_new (recipient_list_popup_info);
-	}
-
-	gnome_popup_menu_do_popup_modal (popup, NULL, NULL, event, info);
-
-	gtk_widget_destroy (popup);
-
-	return TRUE;
-}
-
-/* FIXME needs more work.  */
-static void
-recipient_clist_selection_received_cb (GtkWidget *widget,
-				       GtkSelectionData *selection_data,
-				       guint time,
-				       gpointer data)
-{
-	GtkCList *clist;
-	gchar *text[2];
-	gchar *p;
-
-	puts (__FUNCTION__);
-
-	if (selection_data->length < 0)
-		return;
-
-	clist = GTK_CLIST (widget);
-
-	/* FIXME quoting.  */
-	text[0] = g_strdup (selection_data->data);
-	text[1] = NULL;
-
-	/* It is a common mistake to paste `\n's, let's work around that.  */
-	for (p = text[0]; *p != '\0'; p++) {
-		if (*p == '\n') {
-			*p = '\0';
-			break;
-		}
-	}
-
-	if (clist->selection != NULL) {
-		gint row;
-
-		row = GPOINTER_TO_INT (clist->selection->data);
-		gtk_clist_insert (clist, row, text);
-	} else {
-		gtk_clist_append (clist, text);
-	}
-
-	g_free (text[0]);
-}
-
-static void
-recipient_clist_selection_get_cb (GtkWidget *widget, 
-				  GtkSelectionData *selection_data,
-				  guint info,
-				  guint time,
-				  gpointer data)
-{
-	EMsgComposerAddressDialog *dialog;
-	GdkAtom atom;
-
-	puts (__FUNCTION__);
-
-	dialog = E_MSG_COMPOSER_ADDRESS_DIALOG (data);
-	if (dialog->cut_buffer == NULL)
-		return;		/* FIXME should I do something special?  */
-
-	atom = gdk_atom_intern ("STRING", FALSE);
-	gtk_selection_data_set (selection_data, atom, 8,
-				dialog->cut_buffer,
-				strlen (dialog->cut_buffer));
-}
-
-static void
-recipient_clist_selection_clear_event_cb (GtkWidget *widget,
-					  GdkEventSelection *selection,
-					  gpointer data)
-{
-	EMsgComposerAddressDialog *dialog;
-
-	dialog = E_MSG_COMPOSER_ADDRESS_DIALOG (data);
-	g_free (dialog->cut_buffer);
-	dialog->cut_buffer = NULL;
-}
-
-static void
-setup_recipient_list_signals (EMsgComposerAddressDialog *dialog,
-			      const gchar *name)
-{
-	glade_connect (dialog->gui, name, "button_press_event",
-		       GTK_SIGNAL_FUNC (recipient_clist_button_press_cb),
-		       dialog);
-	glade_connect (dialog->gui, name, "selection_received",
-		       GTK_SIGNAL_FUNC (recipient_clist_selection_received_cb),
-		       dialog);
-	glade_connect (dialog->gui, name, "selection_get",
-		       GTK_SIGNAL_FUNC (recipient_clist_selection_get_cb),
-		       dialog);
-	glade_connect (dialog->gui, name, "selection_clear_event",
-		       GTK_SIGNAL_FUNC (recipient_clist_selection_clear_event_cb),
-		       dialog);
-}
-
-static void
-setup_signals (EMsgComposerAddressDialog *dialog)
-{
-	glade_connect (dialog->gui, "to_add_button", "clicked",
-		       GTK_SIGNAL_FUNC (add_to_cb), dialog);
-	glade_connect (dialog->gui, "cc_add_button", "clicked",
-		       GTK_SIGNAL_FUNC (add_cc_cb), dialog);
-	glade_connect (dialog->gui, "bcc_add_button", "clicked",
-		       GTK_SIGNAL_FUNC (add_bcc_cb), dialog);
-
-	setup_recipient_list_signals (dialog, "to_clist");
-	setup_recipient_list_signals (dialog, "cc_clist");
-	setup_recipient_list_signals (dialog, "bcc_clist");
-}
-
-
-static void
-setup_selection_targets (EMsgComposerAddressDialog *dialog)
-{
-	gtk_selection_add_target (glade_xml_get_widget (dialog->gui, "to_clist"),
-				  GDK_SELECTION_PRIMARY,
-				  GDK_SELECTION_TYPE_STRING, 0);
-	gtk_selection_add_target (glade_xml_get_widget (dialog->gui, "cc_clist"),
-				  GDK_SELECTION_PRIMARY,
-				  GDK_SELECTION_TYPE_STRING, 0);
-	gtk_selection_add_target (glade_xml_get_widget (dialog->gui, "bcc_clist"),
-				  GDK_SELECTION_PRIMARY,
-				  GDK_SELECTION_TYPE_STRING, 0);
-}
-
-
-/* GnomeDialog methods.  */
-
-static void
-clicked (GnomeDialog *dialog,
-	 gint button_number)
-{
-	switch (button_number) {
-	case 0:			/* OK */
-		apply (E_MSG_COMPOSER_ADDRESS_DIALOG (dialog));
-		gnome_dialog_close (dialog);
-		break;
-	case 1:			/* Apply */
-		apply (E_MSG_COMPOSER_ADDRESS_DIALOG (dialog));
-		break;
-	case 2:			/* Cancel */
-		gnome_dialog_close (dialog);
-		break;
-	}
-}
-
-
-/* GtkObject methods.  */
-
-static void
-destroy (GtkObject *object)
-{
-	EMsgComposerAddressDialog *dialog;
-
-	dialog = E_MSG_COMPOSER_ADDRESS_DIALOG (object);
-
-	gtk_object_unref (GTK_OBJECT (dialog->gui));
-	g_free (dialog->cut_buffer);
-
-	if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL)
-		(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-
-/* Initialization.  */
-
-static void
-class_init (EMsgComposerAddressDialogClass *class)
-{
-	GtkObjectClass *object_class;
-	GnomeDialogClass *gnome_dialog_class;
-
-	object_class = GTK_OBJECT_CLASS (class);
-	object_class->destroy = destroy;
-
-	gnome_dialog_class = GNOME_DIALOG_CLASS (class);
-	gnome_dialog_class->clicked = clicked;
-
-	parent_class = gtk_type_class (gnome_dialog_get_type ());
-
-	signals[APPLY]
-		= gtk_signal_new ("apply",
-				  GTK_RUN_FIRST,
-				  object_class->type,
-				  GTK_SIGNAL_OFFSET (EMsgComposerAddressDialogClass,
-						     apply),
-				  gtk_marshal_NONE__NONE,
-				  GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-init (EMsgComposerAddressDialog *dialog)
-{
-	dialog->gui = NULL;
-	dialog->cut_buffer = NULL;
-}
-
-
-GtkType
-e_msg_composer_address_dialog_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"EMsgComposerAddressDialog",
-			sizeof (EMsgComposerAddressDialog),
-			sizeof (EMsgComposerAddressDialogClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (gnome_dialog_get_type (), &info);
-	}
-
-	return type;
-}
-
-void
-e_msg_composer_address_dialog_construct (EMsgComposerAddressDialog *dialog)
-{
-	static const gchar *buttons[] = {
-		GNOME_STOCK_BUTTON_OK,
-		GNOME_STOCK_BUTTON_APPLY,
-		GNOME_STOCK_BUTTON_CANCEL,
-		NULL
-	};
-
-	g_return_if_fail (dialog != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog));
-
-	gnome_dialog_constructv (GNOME_DIALOG (dialog),
-				 _("Select recipients' addresses"),
-				 buttons);
-
-	dialog->gui = glade_xml_new
-		(E_GLADEDIR "/e-msg-composer-address-dialog.glade",
-		 "main_table");
-	if (dialog->gui == NULL) {
-		g_warning ("Cannot load `e-msg-composer-address-dialog.glade");
-		return;
-	}
-
-	gtk_container_add (GTK_CONTAINER (GNOME_DIALOG (dialog)->vbox),
-			   glade_xml_get_widget (dialog->gui, "main_table"));
-
-	setup_selection_targets (dialog);
-	load_addresses (dialog);
-	setup_signals (dialog);
-}
-
-GtkWidget *
-e_msg_composer_address_dialog_new (void)
-{
-	EMsgComposerAddressDialog *new;
-
-	new = gtk_type_new (e_msg_composer_address_dialog_get_type ());
-	e_msg_composer_address_dialog_construct (new);
-
-	return GTK_WIDGET (new);
-}
-
-
-static void
-set_list (EMsgComposerAddressDialog *dialog,
-	  const gchar *list_name,
-	  GList *list)
-{
-	GtkCList *clist;
-	GList *p;
-	gchar *text[2];
-
-	clist = GTK_CLIST (glade_xml_get_widget (dialog->gui, list_name));
-
-	gtk_clist_freeze (clist);
-	gtk_clist_clear (clist);
-
-	text[1] = NULL;
-	for (p = list; p != NULL; p = p->next) {
-		text[0] = (gchar *) p->data;
-		gtk_clist_append (clist, text);
-	}
-
-	gtk_clist_thaw (clist);
-}
-
-void
-e_msg_composer_address_dialog_set_to_list (EMsgComposerAddressDialog *dialog, 
-					   GList *to_list)
-{
-	g_return_if_fail (dialog != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog));
-
-	set_list (dialog, "to_clist", to_list);
-}
-
-void
-e_msg_composer_address_dialog_set_cc_list (EMsgComposerAddressDialog *dialog, 
-					   GList *cc_list)
-{
-	g_return_if_fail (dialog != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog));
-
-	set_list (dialog, "cc_clist", cc_list);
-}
-
-void
-e_msg_composer_address_dialog_set_bcc_list (EMsgComposerAddressDialog *dialog, 
-					    GList *bcc_list)
-{
-	g_return_if_fail (dialog != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog));
-
-	set_list (dialog, "bcc_clist", bcc_list);
-}
-
-
-static GList *
-get_list (EMsgComposerAddressDialog *dialog,
-	  const gchar *clist_name)
-{
-	GtkCList *clist;
-	GList *list;
-	guint i;
-
-	clist = GTK_CLIST (glade_xml_get_widget (dialog->gui, clist_name));
-
-	list = NULL;
-	for (i = 0; i < clist->rows; i++) {
-		gchar *addr;
-
-		gtk_clist_get_text (clist, i, 0, &addr);
-		list = g_list_prepend (list, g_strdup (addr));
-	}
-
-	return g_list_reverse (list);
-}
-
-GList *
-e_msg_composer_address_dialog_get_to_list (EMsgComposerAddressDialog *dialog)
-{
-	g_return_val_if_fail (dialog != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog), NULL);
-
-	return get_list (dialog, "to_clist");
-}
-
-GList *
-e_msg_composer_address_dialog_get_cc_list (EMsgComposerAddressDialog *dialog)
-{
-	g_return_val_if_fail (dialog != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog), NULL);
-
-	return get_list (dialog, "cc_clist");
-}
-
-GList *
-e_msg_composer_address_dialog_get_bcc_list (EMsgComposerAddressDialog *dialog)
-{
-	g_return_val_if_fail (dialog != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_ADDRESS_DIALOG (dialog), NULL);
-
-	return get_list (dialog, "bcc_clist");
-}
diff --git a/composer/e-msg-composer-address-dialog.glade b/composer/e-msg-composer-address-dialog.glade
deleted file mode 100644
index c90ef3f245..0000000000
--- a/composer/e-msg-composer-address-dialog.glade
+++ /dev/null
@@ -1,576 +0,0 @@
-
-
-
-
-  address-composer
-  address-composer
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  False
-  True
-  True
-  True
-  True
-  interface.c
-  interface.h
-  callbacks.c
-  callbacks.h
-  support.c
-  support.h
-  True
-  e-msg-composer-address-dialog.glade.h
-
-
-
-  GnomeDialog
-  dialog1
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  False
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    dialog-vbox1
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkTable
-      main_table
-      3
-      2
-      False
-      0
-      2
-      
-	0
-	True
-	True
-      
-
-      
-	GtkLabel
-	label3
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0.5
-	0.5
-	0
-	0
-	
-	  1
-	  2
-	  2
-	  3
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  False
-	  False
-	
-      
-
-      
-	GtkLabel
-	label1
-	
-	GTK_JUSTIFY_CENTER
-	False
-	0.5
-	0.5
-	0
-	0
-	
-	  1
-	  2
-	  0
-	  1
-	  0
-	  0
-	  True
-	  True
-	  False
-	  False
-	  True
-	  True
-	
-      
-
-      
-	GtkHBox
-	hbox1
-	False
-	5
-	
-	  0
-	  1
-	  0
-	  1
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  False
-	  False
-	
-
-	
-	  GtkLabel
-	  label2
-	  
-	  GTK_JUSTIFY_CENTER
-	  False
-	  0.5
-	  0.5
-	  0
-	  0
-	  
-	    0
-	    False
-	    False
-	  
-	
-
-	
-	  GtkEntry
-	  name_entry
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    5
-	    True
-	    True
-	  
-	
-
-	
-	  GtkButton
-	  search_button
-	  65
-	  True
-	  
-	  
-	    0
-	    False
-	    False
-	  
-	
-      
-
-      
-	GtkScrolledWindow
-	scrolledwindow1
-	GTK_POLICY_AUTOMATIC
-	GTK_POLICY_AUTOMATIC
-	GTK_UPDATE_CONTINUOUS
-	GTK_UPDATE_CONTINUOUS
-	
-	  0
-	  1
-	  1
-	  2
-	  0
-	  5
-	  True
-	  True
-	  False
-	  False
-	  True
-	  True
-	
-
-	
-	  GtkCList
-	  address_clist
-	  180
-	  200
-	  True
-	  2
-	  128,107
-	  GTK_SELECTION_BROWSE
-	  True
-	  GTK_SHADOW_IN
-
-	  
-	    GtkLabel
-	    CList:title
-	    label5
-	    50
-	    
-	    GTK_JUSTIFY_LEFT
-	    False
-	    0.5
-	    0.5
-	    0
-	    0
-	  
-
-	  
-	    GtkLabel
-	    CList:title
-	    label6
-	    100
-	    
-	    GTK_JUSTIFY_LEFT
-	    False
-	    0.5
-	    0.5
-	    0
-	    0
-	  
-	
-      
-
-      
-	GtkHBox
-	hbox2
-	True
-	10
-	
-	  0
-	  1
-	  2
-	  3
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-
-	
-	  GtkButton
-	  button5
-	  True
-	  
-	  
-	    0
-	    True
-	    True
-	  
-	
-
-	
-	  GtkButton
-	  button6
-	  True
-	  
-	  
-	    0
-	    True
-	    True
-	  
-	
-      
-
-      
-	GtkTable
-	table2
-	3
-	2
-	False
-	0
-	0
-	
-	  1
-	  2
-	  1
-	  2
-	  0
-	  5
-	  False
-	  False
-	  False
-	  False
-	  True
-	  True
-	
-
-	
-	  GtkButton
-	  to_add_button
-	  60
-	  True
-	  
-	  
-	    0
-	    1
-	    0
-	    1
-	    5
-	    0
-	    True
-	    True
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  cc_add_button
-	  60
-	  True
-	  
-	  
-	    0
-	    1
-	    1
-	    2
-	    5
-	    0
-	    True
-	    True
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkButton
-	  bcc_add_button
-	  60
-	  True
-	  
-	  
-	    0
-	    1
-	    2
-	    3
-	    5
-	    0
-	    True
-	    True
-	    False
-	    False
-	    True
-	    False
-	  
-	
-
-	
-	  GtkScrolledWindow
-	  scrolledwindow4
-	  GTK_POLICY_AUTOMATIC
-	  GTK_POLICY_AUTOMATIC
-	  GTK_UPDATE_CONTINUOUS
-	  GTK_UPDATE_CONTINUOUS
-	  
-	    1
-	    2
-	    2
-	    3
-	    2
-	    0
-	    True
-	    True
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkCList
-	    bcc_clist
-	    180
-	    100
-	    True
-	    1
-	    80
-	    GTK_SELECTION_BROWSE
-	    False
-	    GTK_SHADOW_IN
-
-	    
-	      GtkLabel
-	      CList:title
-	      label9
-	      
-	      GTK_JUSTIFY_CENTER
-	      False
-	      0.5
-	      0.5
-	      0
-	      0
-	    
-	  
-	
-
-	
-	  GtkScrolledWindow
-	  scrolledwindow2
-	  GTK_POLICY_AUTOMATIC
-	  GTK_POLICY_AUTOMATIC
-	  GTK_UPDATE_CONTINUOUS
-	  GTK_UPDATE_CONTINUOUS
-	  
-	    1
-	    2
-	    0
-	    1
-	    2
-	    0
-	    True
-	    True
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkCList
-	    to_clist
-	    180
-	    100
-	    True
-	    1
-	    80
-	    GTK_SELECTION_BROWSE
-	    False
-	    GTK_SHADOW_IN
-
-	    
-	      GtkLabel
-	      CList:title
-	      label7
-	      
-	      GTK_JUSTIFY_CENTER
-	      False
-	      0.5
-	      0.5
-	      0
-	      0
-	    
-	  
-	
-
-	
-	  GtkScrolledWindow
-	  scrolledwindow3
-	  GTK_POLICY_AUTOMATIC
-	  GTK_POLICY_AUTOMATIC
-	  GTK_UPDATE_CONTINUOUS
-	  GTK_UPDATE_CONTINUOUS
-	  
-	    1
-	    2
-	    1
-	    2
-	    2
-	    4
-	    True
-	    True
-	    False
-	    False
-	    True
-	    True
-	  
-
-	  
-	    GtkCList
-	    cc_clist
-	    180
-	    100
-	    True
-	    1
-	    80
-	    GTK_SELECTION_BROWSE
-	    False
-	    GTK_SHADOW_IN
-
-	    
-	      GtkLabel
-	      CList:title
-	      label8
-	      
-	      GTK_JUSTIFY_CENTER
-	      False
-	      0.5
-	      0.5
-	      0
-	      0
-	    
-	  
-	
-      
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      dialog-action_area1
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	button1
-	True
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	button2
-	True
-	True
-	GNOME_STOCK_BUTTON_APPLY
-      
-
-      
-	GtkButton
-	button3
-	True
-	True
-	GNOME_STOCK_BUTTON_CANCEL
-      
-    
-  
-
-
-
diff --git a/composer/e-msg-composer-address-dialog.glade.h b/composer/e-msg-composer-address-dialog.glade.h
deleted file mode 100644
index a5d48ec275..0000000000
--- a/composer/e-msg-composer-address-dialog.glade.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("Recipient list:");
-gchar *s = N_("Name:");
-gchar *s = N_("Search...");
-gchar *s = N_("Name");
-gchar *s = N_("Address");
-gchar *s = N_("Properties...");
-gchar *s = N_("Add...");
-gchar *s = N_("To: >>");
-gchar *s = N_("Cc: >>");
-gchar *s = N_("Bcc: >>");
-gchar *s = N_("label9");
-gchar *s = N_("label7");
-gchar *s = N_("label8");
diff --git a/composer/e-msg-composer-address-dialog.h b/composer/e-msg-composer-address-dialog.h
deleted file mode 100644
index 19ffeda703..0000000000
--- a/composer/e-msg-composer-address-dialog.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-address-dialog.h
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-#ifndef __E_MSG_COMPOSER_ADDRESS_DIALOG_H__
-#define __E_MSG_COMPOSER_ADDRESS_DIALOG_H__
-
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-
-#define E_TYPE_MSG_COMPOSER_ADDRESS_DIALOG			(e_msg_composer_address_dialog_get_type ())
-#define E_MSG_COMPOSER_ADDRESS_DIALOG(obj)			(GTK_CHECK_CAST ((obj), E_TYPE_MSG_COMPOSER_ADDRESS_DIALOG, EMsgComposerAddressDialog))
-#define E_MSG_COMPOSER_ADDRESS_DIALOG_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_TYPE_MSG_COMPOSER_ADDRESS_DIALOG, EMsgComposerAddressDialogClass))
-#define E_IS_MSG_COMPOSER_ADDRESS_DIALOG(obj)			(GTK_CHECK_TYPE ((obj), E_TYPE_MSG_COMPOSER_ADDRESS_DIALOG))
-#define E_IS_MSG_COMPOSER_ADDRESS_DIALOG_CLASS(klass)		(GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_MSG_COMPOSER_ADDRESS_DIALOG))
-
-
-typedef struct _EMsgComposerAddressDialog       EMsgComposerAddressDialog;
-typedef struct _EMsgComposerAddressDialogClass  EMsgComposerAddressDialogClass;
-
-struct _EMsgComposerAddressDialog {
-	GnomeDialog parent;
-
-	GladeXML *gui;
-
-	gchar *cut_buffer;
-};
-
-struct _EMsgComposerAddressDialogClass {
-	GnomeDialogClass parent_class;
-
-	void (* apply) (EMsgComposerAddressDialog *dialog);
-};
-
-
-GtkType e_msg_composer_address_dialog_get_type (void);
-GtkWidget *e_msg_composer_address_dialog_new (void);
-void e_msg_composer_address_dialog_construct (EMsgComposerAddressDialog *dialog);
-void e_msg_composer_address_dialog_set_to_list (EMsgComposerAddressDialog *dialog, GList *to_list);
-void e_msg_composer_address_dialog_set_cc_list (EMsgComposerAddressDialog *dialog, GList *cc_list);
-void e_msg_composer_address_dialog_set_bcc_list (EMsgComposerAddressDialog *dialog, GList *bcc_list);
-GList *e_msg_composer_address_dialog_get_to_list (EMsgComposerAddressDialog *dialog);
-GList *e_msg_composer_address_dialog_get_cc_list (EMsgComposerAddressDialog *dialog);
-GList *e_msg_composer_address_dialog_get_bcc_list (EMsgComposerAddressDialog *dialog);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_MSG_COMPOSER_ADDRESS_DIALOG_H__ */
diff --git a/composer/e-msg-composer-address-entry.c b/composer/e-msg-composer-address-entry.c
deleted file mode 100644
index ce946d203e..0000000000
--- a/composer/e-msg-composer-address-entry.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-address-entry.c
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* This is a custom GtkEntry for entering address lists.  For now, it does not
-   have any fancy features, but in the future we might want to make it
-   cooler.  */
-
-#include 
-
-#include "e-msg-composer-address-entry.h"
-
-
-static GtkEntryClass *parent_class = NULL;
-
-
-/* Initialization.  */
-
-static void
-class_init (EMsgComposerAddressEntryClass *klass)
-{
-	GtkObjectClass *object_class;
-
-	object_class = (GtkObjectClass*) klass;
-
-	parent_class = gtk_type_class (gtk_entry_get_type ());
-}
-
-static void
-init (EMsgComposerAddressEntry *msg_composer_address_entry)
-{
-}
-
-GtkType
-e_msg_composer_address_entry_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"EMsgComposerAddressEntry",
-			sizeof (EMsgComposerAddressEntry),
-			sizeof (EMsgComposerAddressEntryClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (gtk_entry_get_type (), &info);
-	}
-
-	return type;
-}
-
-
-GtkWidget *
-e_msg_composer_address_entry_new (void)
-{
-	GtkWidget *new;
-
-	new = gtk_type_new (e_msg_composer_address_entry_get_type ());
-
-	return new;
-}
-
-
-/**
- * e_msg_composer_address_entry_get_addresses:
- * @entry: An address entry widget
- * 
- * Retrieve the list of addresses stored in @entry.
- * 
- * Return value: A GList of pointers to strings representing the addresses.
- * Notice that the strings must be freed by the caller when not needed anymore.
- **/
-GList *
-e_msg_composer_address_entry_get_addresses (EMsgComposerAddressEntry *entry)
-{
-	GList *list;
-	const gchar *s;
-	const gchar *p, *oldp;
-	gboolean in_quotes;
-
-	s = gtk_entry_get_text (GTK_ENTRY (entry));
-
-	in_quotes = FALSE;
-	list = NULL;
-
-	p = s;
-	oldp = s;
-
-	while (1) {
-		if (*p == '"') {
-			in_quotes = ! in_quotes;
-			p++;
-		} else if ((! in_quotes && *p == ',') || *p == 0) {
-			if (p != oldp) {
-				gchar *new_addr;
-
-				new_addr = g_strndup (oldp, p - oldp);
-				new_addr = g_strstrip (new_addr);
-				if (*new_addr != '\0')
-					list = g_list_prepend (list, new_addr);
-				else
-					g_free (new_addr);
-			}
-
-			while (*p == ',' || *p == ' ' || *p == '\t')
-				p++;
-
-			if (*p == 0)
-				break;
-
-			oldp = p;
-		} else {
-			p++;
-		}
-	}
-
-	return g_list_reverse (list);
-}
-
-/**
- * e_msg_composer_address_entry_set_list:
- * @entry: An address entry
- * @list: List of pointers to strings representing the addresses that must
- * appear in the entry
- * 
- * Set the address list from @list.
- **/
-void
-e_msg_composer_address_entry_set_list (EMsgComposerAddressEntry *entry,
-				       const GList *list)
-{
-	GString *string;
-	const GList *p;
-
-	g_return_if_fail (entry != NULL);
-
-	if (list == NULL) {
-		gtk_editable_delete_text (GTK_EDITABLE (entry), -1, -1);
-		return;
-	}
-
-	string = g_string_new (NULL);
-	for (p = list; p != NULL; p = p->next) {
-		if (string->str[0] != '\0')
-			g_string_append (string, ", ");
-		g_string_append (string, p->data);
-	}
-
-	gtk_entry_set_text (GTK_ENTRY (entry), string->str);
-	g_string_free (string, TRUE);
-}
diff --git a/composer/e-msg-composer-address-entry.h b/composer/e-msg-composer-address-entry.h
deleted file mode 100644
index f2b671bde4..0000000000
--- a/composer/e-msg-composer-address-entry.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-address-entry.h
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_MSG_COMPOSER_ADDRESS_ENTRY_H__
-#define __E_MSG_COMPOSER_ADDRESS_ENTRY_H__
-
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_MSG_COMPOSER_ADDRESS_ENTRY			(e_msg_composer_address_entry_get_type ())
-#define E_MSG_COMPOSER_ADDRESS_ENTRY(obj)			(GTK_CHECK_CAST ((obj), E_TYPE_MSG_COMPOSER_ADDRESS_ENTRY, EMsgComposerAddressEntry))
-#define E_MSG_COMPOSER_ADDRESS_ENTRY_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_TYPE_MSG_COMPOSER_ADDRESS_ENTRY, EMsgComposerAddressEntryClass))
-#define E_IS_MSG_COMPOSER_ADDRESS_ENTRY(obj)			(GTK_CHECK_TYPE ((obj), E_TYPE_MSG_COMPOSER_ADDRESS_ENTRY))
-#define E_IS_MSG_COMPOSER_ADDRESS_ENTRY_CLASS(klass)		(GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_MSG_COMPOSER_ADDRESS_ENTRY))
-
-
-typedef struct _EMsgComposerAddressEntry       EMsgComposerAddressEntry;
-typedef struct _EMsgComposerAddressEntryClass  EMsgComposerAddressEntryClass;
-
-struct _EMsgComposerAddressEntry {
-	GtkEntry parent;
-};
-
-struct _EMsgComposerAddressEntryClass {
-	GtkEntryClass parent_class;
-};
-
-
-GtkType    e_msg_composer_address_entry_get_type      (void);
-GtkWidget *e_msg_composer_address_entry_new           (void);
-GList     *e_msg_composer_address_entry_get_addresses (EMsgComposerAddressEntry *entry);
-void	   e_msg_composer_address_entry_set_list      (EMsgComposerAddressEntry *entry,
-						       const GList *list);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_MSG_COMPOSER_ADDRESS_ENTRY_H__ */
diff --git a/composer/e-msg-composer-attachment-bar.c b/composer/e-msg-composer-attachment-bar.c
deleted file mode 100644
index 20b6c3d3d2..0000000000
--- a/composer/e-msg-composer-attachment-bar.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-attachment-bar.c
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#include 
-#include 
-
-#include "e-msg-composer-attachment.h"
-#include "e-msg-composer-attachment-bar.h"
-#include "camel/camel-data-wrapper.h"
-#include "camel/camel-stream-fs.h"
-#include "camel/camel-mime-part.h"
-
-
-#define ICON_WIDTH 64
-#define ICON_SEPARATORS " /-_"
-#define ICON_SPACING 2
-#define ICON_ROW_SPACING ICON_SPACING
-#define ICON_COL_SPACING ICON_SPACING
-#define ICON_BORDER 2
-#define ICON_TEXT_SPACING 2
-
-
-static GnomeIconListClass *parent_class = NULL;
-
-struct _EMsgComposerAttachmentBarPrivate {
-	GList *attachments;
-	guint num_attachments;
-
-	GtkWidget *context_menu;
-	GtkWidget *icon_context_menu;
-};
-
-
-enum {
-	CHANGED,
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-
-static void update (EMsgComposerAttachmentBar *bar);
-
-
-static gchar *
-size_to_string (gulong size)
-{
-	gchar *size_string;
-
-	/* FIXME: The following should probably go into a separate module, as
-           we might have to do the same thing in other places as well.  Also,
-	   I am not sure this will be OK for all the languages.  */
-
-	if (size < 1e3L) {
-		if (size == 1)
-			size_string = g_strdup (_("1 byte"));
-		else
-			size_string = g_strdup_printf (_("%u bytes"),
-						       (guint) size);
-	} else {
-		gdouble displayed_size;
-
-		if (size < 1e6L) {
-			displayed_size = (gdouble) size / 1.0e3;
-			size_string = g_strdup_printf (_("%.1fK"),
-						       displayed_size);
-		} else if (size < 1e9L) {
-			displayed_size = (gdouble) size / 1.0e6;
-			size_string = g_strdup_printf (_("%.1fM"),
-						       displayed_size);
-		} else {
-			displayed_size = (gdouble) size / 1.0e9;
-			size_string = g_strdup_printf (_("%.1fG"),
-						       displayed_size);
-		}
-	}
-
-	return size_string;
-}
-
-/* Attachment handling functions.  */
-
-static void
-free_attachment_list (EMsgComposerAttachmentBar *bar)
-{
-	EMsgComposerAttachmentBarPrivate *priv;
-	GList *p;
-
-	priv = bar->priv;
-
-	for (p = priv->attachments; p != NULL; p = p->next)
-		gtk_object_unref (GTK_OBJECT (p->data));
-}
-
-static void
-attachment_changed_cb (EMsgComposerAttachment *attachment,
-		       gpointer data)
-{
-	update (E_MSG_COMPOSER_ATTACHMENT_BAR (data));
-}
-
-static void
-add_common (EMsgComposerAttachmentBar *bar,
-	    EMsgComposerAttachment *attachment)
-{
-	gtk_signal_connect (GTK_OBJECT (attachment), "changed",
-			    GTK_SIGNAL_FUNC (attachment_changed_cb),
-			    bar);
-
-	bar->priv->attachments = g_list_append (bar->priv->attachments,
-						attachment);
-	bar->priv->num_attachments++;
-
-	update (bar);
-
-	gtk_signal_emit (GTK_OBJECT (bar), signals[CHANGED]);
-}
-
-static void
-add_from_mime_part (EMsgComposerAttachmentBar *bar,
-		    CamelMimePart *part)
-{
-	add_common (bar, e_msg_composer_attachment_new_from_mime_part (part));
-}
-
-static void
-add_from_file (EMsgComposerAttachmentBar *bar,
-	       const gchar *file_name)
-{
-	add_common (bar, e_msg_composer_attachment_new (file_name));
-}
-
-static void
-remove_attachment (EMsgComposerAttachmentBar *bar,
-		   EMsgComposerAttachment *attachment)
-{
-	bar->priv->attachments = g_list_remove (bar->priv->attachments,
-						attachment);
-	bar->priv->num_attachments--;
-
-	gtk_object_unref (GTK_OBJECT (attachment));
-
-	gtk_signal_emit (GTK_OBJECT (bar), signals[CHANGED]);
-}
-
-
-/* Icon list contents handling.  */
-
-static void
-update (EMsgComposerAttachmentBar *bar)
-{
-	EMsgComposerAttachmentBarPrivate *priv;
-	GnomeIconList *icon_list;
-	GList *p;
-
-	priv = bar->priv;
-	icon_list = GNOME_ICON_LIST (bar);
-
-	gnome_icon_list_freeze (icon_list);
-
-	gnome_icon_list_clear (icon_list);
-
-	/* FIXME could be faster, but we don't care.  */
-
-	for (p = priv->attachments; p != NULL; p = p->next) {
-		EMsgComposerAttachment *attachment;
-		const gchar *icon_name, *desc;
-		gchar *size_string, *label, *mime_type;
-		GMimeContentField *content_type;
-
-		attachment = p->data;
-		content_type = camel_mime_part_get_content_type (attachment->body);
-		mime_type = g_strdup_printf ("%s/%s", content_type->type,
-					     content_type->subtype);
-		icon_name = gnome_mime_get_value (mime_type, "icon-filename");
-		g_free (mime_type);
-
-		/* FIXME we need some better default icon.  */
-		if (icon_name == NULL)
-			icon_name = gnome_mime_get_value ("text/plain",
-							  "icon-filename");
-
-		desc = camel_mime_part_get_description (attachment->body);
-		if (!desc)
-			desc = camel_mime_part_get_filename (attachment->body);
-		if (!desc)
-			desc = "attachment";
-
-		if (attachment->size) {
-			size_string = size_to_string (attachment->size);
-			label = g_strdup_printf ("%s (%s)", desc, size_string);
-			g_free (size_string);
-		} else
-			label = g_strdup (desc);
-
-		gnome_icon_list_append (icon_list, icon_name, label);
-		g_free (label);
-	}
-
-	gnome_icon_list_thaw (icon_list);
-}
-
-static void
-remove_selected (EMsgComposerAttachmentBar *bar)
-{
-	GnomeIconList *icon_list;
-	EMsgComposerAttachment *attachment;
-	GList *attachment_list;
-	GList *p;
-	gint num;
-
-	icon_list = GNOME_ICON_LIST (bar);
-
-	/* Weee!  I am especially proud of this piece of cheesy code: it is
-           truly awful.  But unless one attaches a huge number of files, it
-           will not be as greedy as intended.  FIXME of course.  */
-
-	attachment_list = NULL;
-	for (p = icon_list->selection; p != NULL; p = p->next) {
-		num = GPOINTER_TO_INT (p->data);
-		attachment = E_MSG_COMPOSER_ATTACHMENT
-			(g_list_nth (bar->priv->attachments, num)->data);
-		attachment_list = g_list_prepend (attachment_list, attachment);
-	}
-
-	for (p = attachment_list; p != NULL; p = p->next)
-		remove_attachment (bar, E_MSG_COMPOSER_ATTACHMENT (p->data));
-
-	g_list_free (attachment_list);
-
-	update (bar);
-}
-
-static void
-edit_selected (EMsgComposerAttachmentBar *bar)
-{
-	GnomeIconList *icon_list;
-	EMsgComposerAttachment *attachment;
-	gint num;
-
-	icon_list = GNOME_ICON_LIST (bar);
-
-	num = GPOINTER_TO_INT (icon_list->selection->data);
-	attachment = g_list_nth (bar->priv->attachments, num)->data;
-
-	e_msg_composer_attachment_edit (attachment, GTK_WIDGET (bar));
-}
-
-
-/* "Attach" dialog.  */
-
-static void
-attach_cb (GtkWidget *widget,
-	   gpointer data)
-{
-	EMsgComposerAttachmentBar *bar;
-	GtkWidget *file_selection;
-	const gchar *file_name;
-
-	file_selection = gtk_widget_get_toplevel (widget);
-	bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data);
-
-	file_name = gtk_file_selection_get_filename
-		                          (GTK_FILE_SELECTION (file_selection));
-	add_from_file (bar, file_name);
-
-	gtk_widget_hide (file_selection);
-}
-
-static void
-add_from_user (EMsgComposerAttachmentBar *bar)
-{
-	static GtkWidget *fs;
-
-	if (!fs) {
-		GtkWidget *cancel_button;
-		GtkWidget *ok_button;
-
-		fs = gtk_file_selection_new (_("Add attachment"));
-
-		ok_button = GTK_FILE_SELECTION (fs)->ok_button;
-		gtk_signal_connect (GTK_OBJECT (ok_button),
-				    "clicked", GTK_SIGNAL_FUNC (attach_cb),
-				    bar);
-
-		cancel_button = GTK_FILE_SELECTION (fs)->cancel_button;
-		gtk_signal_connect_object (GTK_OBJECT (cancel_button),
-					   "clicked",
-					   GTK_SIGNAL_FUNC (gtk_widget_hide),
-					   GTK_OBJECT (fs));
-
-		gtk_signal_connect (GTK_OBJECT (fs), "delete_event",
-				    GTK_SIGNAL_FUNC (gtk_widget_hide), NULL);
-	} else
-		gtk_file_selection_set_filename (GTK_FILE_SELECTION (fs), "");
-
-	gtk_window_set_position (GTK_WINDOW (fs), GTK_WIN_POS_MOUSE);
-
-	gtk_widget_show (GTK_WIDGET (fs));
-}
-
-
-/* Callbacks.  */
-
-static void
-add_cb (GtkWidget *widget,
-	gpointer data)
-{
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data));
-
-	add_from_user (E_MSG_COMPOSER_ATTACHMENT_BAR (data));
-}
-
-static void
-properties_cb (GtkWidget *widget,
-	       gpointer data)
-{
-	EMsgComposerAttachmentBar *bar;
-
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data));
-
-	bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data);
-	edit_selected (data);
-}
-
-static void
-remove_cb (GtkWidget *widget,
-	   gpointer data)
-{
-	EMsgComposerAttachmentBar *bar;
-
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data));
-
-	bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data);
-	remove_selected (bar);
-}
-
-
-/* Popup menu handling.  */
-
-static GnomeUIInfo icon_context_menu_info[] = {
-	GNOMEUIINFO_ITEM (N_("Remove"),
-			  N_("Remove selected items from the attachment list"),
-			  remove_cb, NULL),
-	GNOMEUIINFO_MENU_PROPERTIES_ITEM (properties_cb, NULL),
-	GNOMEUIINFO_END
-};
-
-static GtkWidget *
-get_icon_context_menu (EMsgComposerAttachmentBar *bar)
-{
-	EMsgComposerAttachmentBarPrivate *priv;
-
-	priv = bar->priv;
-	if (priv->icon_context_menu == NULL)
-		priv->icon_context_menu = gnome_popup_menu_new
-						       (icon_context_menu_info);
-
-	return priv->icon_context_menu;
-}
-
-static void
-popup_icon_context_menu (EMsgComposerAttachmentBar *bar,
-			 gint num,
-			 GdkEventButton *event)
-{
-	GtkWidget *menu;
-
-	menu = get_icon_context_menu (bar);
-	gnome_popup_menu_do_popup (menu, NULL, NULL, event, bar);
-}
-
-static GnomeUIInfo context_menu_info[] = {
-	GNOMEUIINFO_ITEM (N_("Add attachment..."),
-			  N_("Attach a file to the message"),
-			  add_cb, NULL),
-	GNOMEUIINFO_END
-};
-
-static GtkWidget *
-get_context_menu (EMsgComposerAttachmentBar *bar)
-{
-	EMsgComposerAttachmentBarPrivate *priv;
-
-	priv = bar->priv;
-	if (priv->context_menu == NULL)
-		priv->context_menu = gnome_popup_menu_new (context_menu_info);
-
-	return priv->context_menu;
-}
-
-static void
-popup_context_menu (EMsgComposerAttachmentBar *bar,
-		    GdkEventButton *event)
-{
-	GtkWidget *menu;
-
-	menu = get_context_menu (bar);
-	gnome_popup_menu_do_popup (menu, NULL, NULL, event, bar);
-}
-
-
-/* GtkObject methods.  */
-
-static void
-destroy (GtkObject *object)
-{
-	EMsgComposerAttachmentBar *bar;
-
-	bar = E_MSG_COMPOSER_ATTACHMENT_BAR (object);
-
-	free_attachment_list (bar);
-
-	if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL)
-		(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-
-/* GtkWidget methods.  */
-
-static gint
-button_press_event (GtkWidget *widget,
-		    GdkEventButton *event)
-{
-	EMsgComposerAttachmentBar *bar;
-	GnomeIconList *icon_list;
-	gint icon_number;
-
-	bar = E_MSG_COMPOSER_ATTACHMENT_BAR (widget);
-	icon_list = GNOME_ICON_LIST (widget);
-
-	if (event->button != 3)
-		return GTK_WIDGET_CLASS (parent_class)->button_press_event
-							        (widget, event);
-
-	icon_number = gnome_icon_list_get_icon_at (icon_list,
-						   event->x, event->y);
-
-	if (icon_number >= 0) {
-		gnome_icon_list_select_icon (icon_list, icon_number);
-		popup_icon_context_menu (bar, icon_number, event);
-	} else {
-		popup_context_menu (bar, event);
-	}
-
-	return TRUE;
-}
-
-
-/* Initialization.  */
-
-static void
-class_init (EMsgComposerAttachmentBarClass *class)
-{
-	GtkObjectClass *object_class;
-	GtkWidgetClass *widget_class;
-	GnomeIconListClass *icon_list_class;
-
-	object_class = GTK_OBJECT_CLASS (class);
-	widget_class = GTK_WIDGET_CLASS (class);
-	icon_list_class = GNOME_ICON_LIST_CLASS (class);
-
-	parent_class = gtk_type_class (gnome_icon_list_get_type ());
-
-	object_class->destroy = destroy;
-
-	widget_class->button_press_event = button_press_event;
-
-	/* Setup signals.  */
-
-	signals[CHANGED] =
-		gtk_signal_new ("changed",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EMsgComposerAttachmentBarClass,
-						   changed),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-init (EMsgComposerAttachmentBar *bar)
-{
-	EMsgComposerAttachmentBarPrivate *priv;
-	guint icon_size;
-
-	priv = g_new (EMsgComposerAttachmentBarPrivate, 1);
-
-	priv->attachments = NULL;
-	priv->context_menu = NULL;
-	priv->icon_context_menu = NULL;
-
-	priv->num_attachments = 0;
-
-	bar->priv = priv;
-
-	/* FIXME partly hardcoded.  We should compute height from the font, and
-           allow at least 2 lines for every item.  */
-	icon_size = ICON_WIDTH + ICON_SPACING + ICON_BORDER + ICON_TEXT_SPACING;
-	icon_size += 24;
-
-	gtk_widget_set_usize (GTK_WIDGET (bar), icon_size * 4, icon_size);
-}
-
-
-GtkType
-e_msg_composer_attachment_bar_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"EMsgComposerAttachmentBar",
-			sizeof (EMsgComposerAttachmentBar),
-			sizeof (EMsgComposerAttachmentBarClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (gnome_icon_list_get_type (), &info);
-	}
-
-	return type;
-}
-
-GtkWidget *
-e_msg_composer_attachment_bar_new (GtkAdjustment *adj)
-{
-	EMsgComposerAttachmentBar *new;
-	GnomeIconList *icon_list;
-
-	gtk_widget_push_visual (gdk_imlib_get_visual ());
-	gtk_widget_push_colormap (gdk_imlib_get_colormap ());
-	new = gtk_type_new (e_msg_composer_attachment_bar_get_type ());
-	gtk_widget_pop_visual ();
-	gtk_widget_pop_colormap ();
-
-	icon_list = GNOME_ICON_LIST (new);
-
-	gnome_icon_list_construct (icon_list, ICON_WIDTH, adj, 0);
-
-	gnome_icon_list_set_separators (icon_list, ICON_SEPARATORS);
-	gnome_icon_list_set_row_spacing (icon_list, ICON_ROW_SPACING);
-	gnome_icon_list_set_col_spacing (icon_list, ICON_COL_SPACING);
-	gnome_icon_list_set_icon_border (icon_list, ICON_BORDER);
-	gnome_icon_list_set_text_spacing (icon_list, ICON_TEXT_SPACING);
-	gnome_icon_list_set_selection_mode (icon_list, GTK_SELECTION_MULTIPLE);
-
-	return GTK_WIDGET (new);
-}
-
-
-static void
-attach_to_multipart (CamelMultipart *multipart,
-		     EMsgComposerAttachment *attachment)
-{
-	GMimeContentField *content_type;
-
-	content_type = camel_mime_part_get_content_type (attachment->body);
-
-	/* Kludge a bit on CTE. For now, we set QP for text and B64
-	 * for all else except message (which must be 7bit, 8bit, or
-	 * binary). FIXME.
-	 */
-	if (!g_strcasecmp (content_type->type, "text")) {
-		camel_mime_part_set_encoding (attachment->body,
-					      CAMEL_MIME_PART_ENCODING_QUOTEDPRINTABLE);
-	} else if (g_strcasecmp (content_type->type, "message") != 0) {
-		camel_mime_part_set_encoding (attachment->body,
-					      CAMEL_MIME_PART_ENCODING_BASE64);
-	}
-
-	camel_multipart_add_part (multipart, attachment->body);
-}
-
-void
-e_msg_composer_attachment_bar_to_multipart (EMsgComposerAttachmentBar *bar,
-					    CamelMultipart *multipart)
-{
-	EMsgComposerAttachmentBarPrivate *priv;
-	GList *p;
-
-	g_return_if_fail (bar != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar));
-	g_return_if_fail (multipart != NULL);
-	g_return_if_fail (CAMEL_IS_MULTIPART (multipart));
-
-	priv = bar->priv;
-
-	for (p = priv->attachments; p != NULL; p = p->next) {
-		EMsgComposerAttachment *attachment;
-
-		attachment = E_MSG_COMPOSER_ATTACHMENT (p->data);
-		attach_to_multipart (multipart, attachment);
-	}
-}
-
-
-guint
-e_msg_composer_attachment_bar_get_num_attachments (EMsgComposerAttachmentBar *bar)
-{
-	g_return_val_if_fail (bar != NULL, 0);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar), 0);
-
-	return bar->priv->num_attachments;
-}
-
-
-void
-e_msg_composer_attachment_bar_attach (EMsgComposerAttachmentBar *bar,
-				      const gchar *file_name)
-{
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar));
-
-	if (file_name == NULL)
-		add_from_user (bar);
-	else
-		add_from_file (bar, file_name);
-}
-
-void
-e_msg_composer_attachment_bar_attach_mime_part (EMsgComposerAttachmentBar *bar,
-						CamelMimePart *part)
-{
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar));
-
-	add_from_mime_part (bar, part);
-}
diff --git a/composer/e-msg-composer-attachment-bar.h b/composer/e-msg-composer-attachment-bar.h
deleted file mode 100644
index 1f331c2870..0000000000
--- a/composer/e-msg-composer-attachment-bar.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* msg-composer-attachment-bar.h
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef __E_MSG_COMPOSER_ATTACHMENT_BAR_H__
-#define __E_MSG_COMPOSER_ATTACHMENT_BAR_H__
-
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_MSG_COMPOSER_ATTACHMENT_BAR \
-	(e_msg_composer_attachment_bar_get_type ())
-#define E_MSG_COMPOSER_ATTACHMENT_BAR(obj) \
-	(GTK_CHECK_CAST ((obj), E_TYPE_MSG_COMPOSER_ATTACHMENT_BAR, EMsgComposerAttachmentBar))
-#define E_MSG_COMPOSER_ATTACHMENT_BAR_CLASS(klass) \
-	(GTK_CHECK_CLASS_CAST ((klass), E_TYPE_MSG_COMPOSER_ATTACHMENT_BAR, EMsgComposerAttachmentBarClass))
-#define E_IS_MSG_COMPOSER_ATTACHMENT_BAR(obj) \
-	(GTK_CHECK_TYPE ((obj), E_TYPE_MSG_COMPOSER_ATTACHMENT_BAR))
-#define E_IS_MSG_COMPOSER_ATTACHMENT_BAR_CLASS(klass) \
-	(GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_MSG_COMPOSER_ATTACHMENT_BAR))
-
-
-typedef struct _EMsgComposerAttachmentBarPrivate EMsgComposerAttachmentBarPrivate;
-
-struct _EMsgComposerAttachmentBar {
-	GnomeIconList parent;
-
-	EMsgComposerAttachmentBarPrivate *priv;
-};
-typedef struct _EMsgComposerAttachmentBar       EMsgComposerAttachmentBar;
-
-struct _EMsgComposerAttachmentBarClass {
-	GnomeIconListClass parent_class;
-
-	void (* changed) (EMsgComposerAttachmentBar *bar);
-};
-typedef struct _EMsgComposerAttachmentBarClass  EMsgComposerAttachmentBarClass;
-
-
-GtkType e_msg_composer_attachment_bar_get_type (void);
-GtkWidget *e_msg_composer_attachment_bar_new (GtkAdjustment *adj);
-void e_msg_composer_attachment_bar_to_multipart (EMsgComposerAttachmentBar *bar, CamelMultipart *multipart);
-guint e_msg_composer_attachment_bar_get_num_attachments (EMsgComposerAttachmentBar *bar);
-void e_msg_composer_attachment_bar_attach (EMsgComposerAttachmentBar *bar, const gchar *file_name);
-void e_msg_composer_attachment_bar_attach_mime_part (EMsgComposerAttachmentBar *bar, CamelMimePart *part);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_MSG_COMPOSER_ATTACHMENT_BAR_H__ */
diff --git a/composer/e-msg-composer-attachment.c b/composer/e-msg-composer-attachment.c
deleted file mode 100644
index 9883640e23..0000000000
--- a/composer/e-msg-composer-attachment.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-attachment.c
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/* This is the object representing an email attachment.  It is implemented as a
-   GtkObject to make it easier for the application to handle it.  For example,
-   the "changed" signal is emitted whenever something changes in the
-   attachment.  Also, this contains the code to let users edit the
-   attachment manually. */
-
-#include 
-
-#include 
-#include 
-
-#include "e-msg-composer-attachment.h"
-
-
-enum {
-	CHANGED,
-	LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static GtkObjectClass *parent_class = NULL;
-
-
-/* Utility functions.  */
-
-static const gchar *
-get_mime_type (const gchar *file_name)
-{
-	const gchar *mime_type;
-
-	mime_type = gnome_mime_type_of_file (file_name);
-	if (mime_type == NULL)
-		mime_type = "application/octet-stream";
-
-	return mime_type;
-}
-
-static void
-changed (EMsgComposerAttachment *attachment)
-{
-	gtk_signal_emit (GTK_OBJECT (attachment), signals[CHANGED]);
-}
-
-
-/* GtkObject methods.  */
-
-static void
-destroy (GtkObject *object)
-{
-	EMsgComposerAttachment *attachment;
-
-	attachment = E_MSG_COMPOSER_ATTACHMENT (object);
-
-	camel_object_unref (CAMEL_OBJECT (attachment->body));
-}
-
-
-/* Signals.  */
-
-static void
-real_changed (EMsgComposerAttachment *msg_composer_attachment)
-{
-	g_return_if_fail (msg_composer_attachment != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT (msg_composer_attachment));
-}
-
-
-static void
-class_init (EMsgComposerAttachmentClass *klass)
-{
-	GtkObjectClass *object_class;
-
-	object_class = (GtkObjectClass*) klass;
-
-	parent_class = gtk_type_class (gtk_object_get_type ());
-
-	object_class->destroy = destroy;
-
-	signals[CHANGED] = gtk_signal_new ("changed",
-					   GTK_RUN_FIRST,
-					   object_class->type,
-					   GTK_SIGNAL_OFFSET
-					   	(EMsgComposerAttachmentClass,
-						 changed),
-					   gtk_marshal_NONE__NONE,
-					   GTK_TYPE_NONE, 0);
-
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-
-	klass->changed = real_changed;
-}
-
-static void
-init (EMsgComposerAttachment *msg_composer_attachment)
-{
-	msg_composer_attachment->editor_gui = NULL;
-	msg_composer_attachment->body = NULL;
-	msg_composer_attachment->size = 0;
-}
-
-GtkType
-e_msg_composer_attachment_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"EMsgComposerAttachment",
-			sizeof (EMsgComposerAttachment),
-			sizeof (EMsgComposerAttachmentClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (gtk_object_get_type (), &info);
-	}
-
-	return type;
-}
-
-
-/**
- * e_msg_composer_attachment_new:
- * @file_name: 
- * 
- * Return value: 
- **/
-EMsgComposerAttachment *
-e_msg_composer_attachment_new (const gchar *file_name)
-{
-	EMsgComposerAttachment *new;
-	CamelMimePart *part;
-	CamelDataWrapper *wrapper;
-	CamelStream *data;
-	struct stat statbuf;
-
-	g_return_val_if_fail (file_name != NULL, NULL);
-
-	data = camel_stream_fs_new_with_name (file_name, O_RDONLY, 0);
-	if (!data)
-		return NULL;
-	wrapper = camel_data_wrapper_new ();
-	camel_data_wrapper_construct_from_stream (wrapper, data);
-	camel_object_unref (CAMEL_OBJECT (data));
-	camel_data_wrapper_set_mime_type (wrapper, get_mime_type (file_name));
-
-	part = camel_mime_part_new ();
-	camel_medium_set_content_object (CAMEL_MEDIUM (part), wrapper);
-	camel_object_unref (CAMEL_OBJECT (wrapper));
-
-	camel_mime_part_set_disposition (part, "attachment");
-	if (strchr (file_name, '/'))
-		camel_mime_part_set_filename (part, strrchr (file_name, '/') + 1);
-	else
-		camel_mime_part_set_filename (part, file_name);
-
-	new = e_msg_composer_attachment_new_from_mime_part (part);
-	if (stat (file_name, &statbuf) < 0)
-		new->size = 0;
-	else
-		new->size = statbuf.st_size;
-	new->guessed_type = TRUE;
-
-	return new;
-}
-
-
-/**
- * e_msg_composer_attachment_new_from_mime_part:
- * @part: a CamelMimePart
- * 
- * Return value: a new EMsgComposerAttachment based on the mime part
- **/
-EMsgComposerAttachment *
-e_msg_composer_attachment_new_from_mime_part (CamelMimePart *part)
-{
-	EMsgComposerAttachment *new;
-
-	g_return_val_if_fail (CAMEL_IS_MIME_PART (part), NULL);
-
-	new = gtk_type_new (e_msg_composer_attachment_get_type ());
-
-	new->editor_gui = NULL;
-	new->body = part;
-	camel_object_ref (CAMEL_OBJECT (part));
-	new->guessed_type = FALSE;
-	new->size = 0;
-
-	return new;
-}
-
-
-/* The attachment property dialog.  */
-
-struct _DialogData {
-	GtkWidget *dialog;
-	GtkEntry *file_name_entry;
-	GtkEntry *description_entry;
-	GtkEntry *mime_type_entry;
-	EMsgComposerAttachment *attachment;
-};
-typedef struct _DialogData DialogData;
-
-static void
-destroy_dialog_data (DialogData *data)
-{
-	g_free (data);
-}
-
-static void
-update_mime_type (DialogData *data)
-{
-	const gchar *mime_type;
-	const gchar *file_name;
-
-	if (!data->attachment->guessed_type)
-		return;
-
-	file_name = gtk_entry_get_text (data->file_name_entry);
-	mime_type = get_mime_type (file_name);
-
-	gtk_entry_set_text (data->mime_type_entry, mime_type);
-}
-
-static void
-set_entry (GladeXML *xml,
-	   const gchar *widget_name,
-	   const gchar *value)
-{
-	GtkEntry *entry;
-
-	entry = GTK_ENTRY (glade_xml_get_widget (xml, widget_name));
-	if (entry == NULL)
-		g_warning ("Entry for `%s' not found.", widget_name);
-	gtk_entry_set_text (entry, value ? value : "");
-}
-
-static void
-connect_widget (GladeXML *gui,
-		const gchar *name,
-		const gchar *signal_name,
-		GtkSignalFunc func,
-		gpointer data)
-{
-	GtkWidget *widget;
-
-	widget = glade_xml_get_widget (gui, name);
-	gtk_signal_connect (GTK_OBJECT (widget), signal_name, func, data);
-}
-
-static void
-close_cb (GtkWidget *widget,
-	  gpointer data)
-{
-	EMsgComposerAttachment *attachment;
-	DialogData *dialog_data;
-
-	dialog_data = (DialogData *) data;
-	attachment = dialog_data->attachment;
-
-	gtk_widget_destroy (glade_xml_get_widget (attachment->editor_gui,
-						  "dialog"));
-	gtk_object_unref (GTK_OBJECT (attachment->editor_gui));
-	attachment->editor_gui = NULL;
-
-	destroy_dialog_data (dialog_data);
-}
-
-static void
-ok_cb (GtkWidget *widget,
-       gpointer data)
-{
-	DialogData *dialog_data;
-	EMsgComposerAttachment *attachment;
-
-	dialog_data = (DialogData *) data;
-	attachment = dialog_data->attachment;
-
-	camel_mime_part_set_filename (attachment->body, gtk_entry_get_text
-				      (dialog_data->file_name_entry));
-
-	camel_mime_part_set_description (attachment->body, gtk_entry_get_text
-					 (dialog_data->description_entry));
-
-	camel_mime_part_set_content_type (attachment->body, gtk_entry_get_text
-					  (dialog_data->mime_type_entry));
-	camel_data_wrapper_set_mime_type (
-		camel_medium_get_content_object (CAMEL_MEDIUM (attachment->body)),
-		gtk_entry_get_text (dialog_data->mime_type_entry));
-
-	changed (attachment);
-	close_cb (widget, data);
-}
-
-static void
-file_name_focus_out_cb (GtkWidget *widget,
-			GdkEventFocus *event,
-			gpointer data)
-{
-	DialogData *dialog_data;
-
-	dialog_data = (DialogData *) data;
-	update_mime_type (dialog_data);
-}
-
-
-void
-e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment,
-				GtkWidget *parent)
-{
-	DialogData *dialog_data;
-	GladeXML *editor_gui;
-
-	g_return_if_fail (attachment != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT (attachment));
-
-	if (attachment->editor_gui != NULL) {
-		GtkWidget *window;
-
-		window = glade_xml_get_widget (attachment->editor_gui,
-					       "dialog");
-		gdk_window_show (window->window);
-		return;
-	}
-
-	editor_gui = glade_xml_new (E_GLADEDIR "/e-msg-composer-attachment.glade",
-				    NULL);
-	if (editor_gui == NULL) {
-		g_warning ("Cannot load `e-msg-composer-attachment.glade'");
-		return;
-	}
-
-	attachment->editor_gui = editor_gui;
-
-	gtk_window_set_transient_for
-		(GTK_WINDOW (glade_xml_get_widget (editor_gui, "dialog")),
-		 GTK_WINDOW (gtk_widget_get_toplevel (parent)));
-
-	dialog_data = g_new (DialogData, 1);
-	dialog_data->attachment = attachment;
-	dialog_data->dialog = glade_xml_get_widget (editor_gui, "dialog");
-	dialog_data->file_name_entry = GTK_ENTRY (glade_xml_get_widget
-						  (editor_gui,
-						   "file_name_entry"));
-	dialog_data->description_entry = GTK_ENTRY (glade_xml_get_widget
-						    (editor_gui,
-						     "description_entry"));
-	dialog_data->mime_type_entry = GTK_ENTRY (glade_xml_get_widget
-						  (editor_gui,
-						   "mime_type_entry"));
-
-	if (attachment != NULL) {
-		GMimeContentField *content_type;
-		char *type;
-
-		set_entry (editor_gui, "file_name_entry",
-			   camel_mime_part_get_filename (attachment->body));
-		set_entry (editor_gui, "description_entry",
-			   camel_mime_part_get_description (attachment->body));
-		content_type = camel_mime_part_get_content_type (attachment->body);
-		type = g_strdup_printf ("%s/%s", content_type->type,
-					content_type->subtype);
-		set_entry (editor_gui, "mime_type_entry", type);
-		g_free (type);
-	}
-
-	connect_widget (editor_gui, "ok_button", "clicked", ok_cb, dialog_data);
-	connect_widget (editor_gui, "close_button", "clicked", close_cb, dialog_data);
-
-	connect_widget (editor_gui, "file_name_entry", "focus_out_event",
-			file_name_focus_out_cb, dialog_data);
-}
diff --git a/composer/e-msg-composer-attachment.glade b/composer/e-msg-composer-attachment.glade
deleted file mode 100644
index a9717bef69..0000000000
--- a/composer/e-msg-composer-attachment.glade
+++ /dev/null
@@ -1,258 +0,0 @@
-
-
-
-
-  e-msg-composer-attachment
-  e-msg-composer-attachment
-  
-  src
-  pixmaps
-  C
-  True
-  True
-  True
-  e-msg-composer-attachment.glade.h
-
-
-
-  GnomeDialog
-  dialog
-  Attachment properties
-  GTK_WINDOW_TOPLEVEL
-  GTK_WIN_POS_NONE
-  False
-  False
-  False
-  False
-  False
-  False
-
-  
-    GtkVBox
-    GnomeDialog:vbox
-    dialog-vbox1
-    False
-    8
-    
-      4
-      True
-      True
-    
-
-    
-      GtkHButtonBox
-      GnomeDialog:action_area
-      dialog-action_area1
-      GTK_BUTTONBOX_END
-      8
-      85
-      27
-      7
-      0
-      
-	0
-	False
-	True
-	GTK_PACK_END
-      
-
-      
-	GtkButton
-	ok_button
-	True
-	True
-	True
-	GNOME_STOCK_BUTTON_OK
-      
-
-      
-	GtkButton
-	close_button
-	True
-	True
-	GNOME_STOCK_BUTTON_CLOSE
-      
-    
-
-    
-      GtkTable
-      table1
-      3
-      2
-      False
-      10
-      5
-      
-	0
-	True
-	True
-      
-
-      
-	GtkEntry
-	description_entry
-	True
-	True
-	True
-	0
-	
-	
-	  1
-	  2
-	  1
-	  2
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkHBox
-	hbox3
-	False
-	10
-	
-	  1
-	  2
-	  0
-	  1
-	  0
-	  0
-	  True
-	  True
-	  True
-	  True
-	  True
-	  True
-	
-
-	
-	  GtkEntry
-	  file_name_entry
-	  290
-	  True
-	  True
-	  True
-	  0
-	  
-	  
-	    0
-	    True
-	    True
-	  
-	
-      
-
-      
-	GtkEntry
-	mime_type_entry
-	False
-	True
-	False
-	True
-	0
-	
-	
-	  1
-	  2
-	  2
-	  3
-	  0
-	  0
-	  True
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkLabel
-	label3
-	
-	GTK_JUSTIFY_LEFT
-	False
-	1
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  2
-	  3
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkLabel
-	label1
-	
-	GTK_JUSTIFY_CENTER
-	False
-	1
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  1
-	  2
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-
-      
-	GtkLabel
-	label2
-	
-	GTK_JUSTIFY_CENTER
-	False
-	1
-	0.5
-	0
-	0
-	
-	  0
-	  1
-	  0
-	  1
-	  0
-	  0
-	  False
-	  False
-	  False
-	  False
-	  True
-	  False
-	
-      
-    
-  
-
-
-
diff --git a/composer/e-msg-composer-attachment.glade.h b/composer/e-msg-composer-attachment.glade.h
deleted file mode 100644
index 845aea9b32..0000000000
--- a/composer/e-msg-composer-attachment.glade.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * Translatable strings file generated by Glade.
- * Add this file to your project's POTFILES.in.
- * DO NOT compile it as part of your application.
- */
-
-gchar *s = N_("Attachment properties");
-gchar *s = N_("MIME type:");
-gchar *s = N_("Description:");
-gchar *s = N_("File name:");
diff --git a/composer/e-msg-composer-attachment.h b/composer/e-msg-composer-attachment.h
deleted file mode 100644
index e0cd2eb867..0000000000
--- a/composer/e-msg-composer-attachment.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-attachment.h
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-#ifndef __E_MSG_COMPOSER_ATTACHMENT_H__
-#define __E_MSG_COMPOSER_ATTACHMENT_H__
-
-#include 
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_MSG_COMPOSER_ATTACHMENT			(e_msg_composer_attachment_get_type ())
-#define E_MSG_COMPOSER_ATTACHMENT(obj)			(GTK_CHECK_CAST ((obj), E_TYPE_MSG_COMPOSER_ATTACHMENT, EMsgComposerAttachment))
-#define E_MSG_COMPOSER_ATTACHMENT_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_TYPE_MSG_COMPOSER_ATTACHMENT, EMsgComposerAttachmentClass))
-#define E_IS_MSG_COMPOSER_ATTACHMENT(obj)		(GTK_CHECK_TYPE ((obj), E_TYPE_MSG_COMPOSER_ATTACHMENT))
-#define E_IS_MSG_COMPOSER_ATTACHMENT_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_MSG_COMPOSER_ATTACHMENT))
-
-
-typedef struct _EMsgComposerAttachment       EMsgComposerAttachment;
-typedef struct _EMsgComposerAttachmentClass  EMsgComposerAttachmentClass;
-
-struct _EMsgComposerAttachment {
-	GtkObject parent;
-
-	GladeXML *editor_gui;
-
-	CamelMimePart *body;
-	gboolean guessed_type;
-	gulong size;
-};
-
-struct _EMsgComposerAttachmentClass {
-	GtkObjectClass parent_class;
-
-	void (*changed)	(EMsgComposerAttachment *msg_composer_attachment);
-};
-
-
-GtkType e_msg_composer_attachment_get_type (void);
-EMsgComposerAttachment *e_msg_composer_attachment_new (const gchar *file_name);
-EMsgComposerAttachment *e_msg_composer_attachment_new_from_mime_part (CamelMimePart *part);
-void e_msg_composer_attachment_edit (EMsgComposerAttachment *attachment,
-				     GtkWidget *parent);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __E_MSG_COMPOSER_ATTACHMENT_H__ */
diff --git a/composer/e-msg-composer-hdrs.c b/composer/e-msg-composer-hdrs.c
deleted file mode 100644
index 1e3502c79a..0000000000
--- a/composer/e-msg-composer-hdrs.c
+++ /dev/null
@@ -1,709 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* msg-composer-hdrs.c
- *
- * Copyright (C) 1999 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifdef _HAVE_CONFIG_H
-#include 
-#endif
-
-#include 
-#include 
-
-#include 
-
-#include 
-
-#include "Evolution-Addressbook-SelectNames.h"
-
-#include "e-msg-composer-address-entry.h"
-#include "e-msg-composer-hdrs.h"
-#include "widgets/e-text/e-entry.h"
-
-#include "mail/mail-config.h"
-
-
-#define SELECT_NAMES_OAFID "OAFIID:addressbook:select-names:39301deb-174b-40d1-8a6e-5edc300f7b61"
-
-struct _EMsgComposerHdrsPrivate {
-	Evolution_Addressbook_SelectNames corba_select_names;
-
-	/* Total number of headers that we have.  */
-	guint num_hdrs;
-
-	/* The tooltips.  */
-	GtkTooltips *tooltips;
-
-	/* Standard headers.  */
-	GtkWidget *from_entry;
-	GtkWidget *to_entry;
-	GtkWidget *cc_entry;
-	GtkWidget *bcc_entry;
-	GtkWidget *subject_entry;
-};
-
-
-static GtkTableClass *parent_class = NULL;
-
-enum {
-	SHOW_ADDRESS_DIALOG,
-	LAST_SIGNAL
-};
-
-enum {
-	HEADER_ADDRBOOK,
-	HEADER_COMBOBOX,
-	HEADER_ENTRYBOX
-};
-
-static gint signals[LAST_SIGNAL];
-
-
-static gboolean
-setup_corba (EMsgComposerHdrs *hdrs)
-{
-	EMsgComposerHdrsPrivate *priv;
-	CORBA_Environment ev;
-
-	priv = hdrs->priv;
-
-	g_assert (priv->corba_select_names == CORBA_OBJECT_NIL);
-
-	CORBA_exception_init (&ev);
-
-	priv->corba_select_names = oaf_activate_from_id (SELECT_NAMES_OAFID, 0, NULL, &ev);
-
-	/* OAF seems to be broken -- it can return a CORBA_OBJECT_NIL without
-           raising an exception in `ev'.  */
-	if (ev._major != CORBA_NO_EXCEPTION || priv->corba_select_names == CORBA_OBJECT_NIL) {
-		g_warning ("Cannot activate -- %s", SELECT_NAMES_OAFID);
-		CORBA_exception_free (&ev);
-		return FALSE;
-	}
-
-	CORBA_exception_free (&ev);
-
-	return TRUE;
-}
-
-
-static void
-address_button_clicked_cb (GtkButton *button,
-			   gpointer data)
-{
-	EMsgComposerHdrs *hdrs;
-	EMsgComposerHdrsPrivate *priv;
-	CORBA_Environment ev;
-
-	hdrs = E_MSG_COMPOSER_HDRS (data);
-	priv = hdrs->priv;
-
-	CORBA_exception_init (&ev);
-
-	/* FIXME section.  */
-	Evolution_Addressbook_SelectNames_activate_dialog (priv->corba_select_names, "", &ev);
-
-	CORBA_exception_free (&ev);
-}
-
-static GtkWidget *
-create_dropdown_entry (EMsgComposerHdrs *hdrs,
-		       const char *name)
-{
-	GtkWidget *combo;
-	GList *values = NULL;
-	
-	combo = gtk_combo_new ();
-	gtk_combo_set_use_arrows (GTK_COMBO (combo), TRUE);
-	gtk_combo_set_case_sensitive (GTK_COMBO (combo), FALSE);
-	if (!strcmp (name, _("From:"))) {
-		CamelInternetAddress *ciaddr;
-		GSList *ids, *stmp;
-		GList *tmp;
-		MailConfigIdentity *id;
-		char *val;
-		
-		ids = mail_config_get_identities ();
-		stmp = ids;
-		while (stmp) {
-			char *address;
-			
-			id = stmp->data;
-			g_assert (id);			
-			g_assert (id->name);
-			g_assert (id->address);
-			
-			ciaddr = camel_internet_address_new ();
-			camel_internet_address_add (ciaddr, id->name, id->address);
-			address = camel_address_encode (CAMEL_ADDRESS (ciaddr));
-			values = g_list_append (values, address);
-			stmp = stmp->next;
-		}
-		
-		gtk_combo_set_popdown_strings (GTK_COMBO (combo), values);
-
-		tmp = values;
-		while (tmp) {
-			g_free (tmp->data);
-			tmp = tmp->next;
-		}
-		g_list_free (values);
-
-		id = mail_config_get_default_identity ();
-		g_assert (id);			
-		g_assert (id->name);
-		g_assert (id->address);
-		
-		ciaddr = camel_internet_address_new ();
-		camel_internet_address_add (ciaddr, id->name, id->address);
-		val = camel_address_encode (CAMEL_ADDRESS (ciaddr));
-		
-		gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), val);
-		g_free (val);
-	}
-	
-	return combo;
-}
-
-static GtkWidget *
-create_addressbook_entry (EMsgComposerHdrs *hdrs,
-			  const char *name)
-{
-	EMsgComposerHdrsPrivate *priv;
-	Evolution_Addressbook_SelectNames corba_select_names;
-	Bonobo_Control corba_control;
-	GtkWidget *control_widget;
-	CORBA_Environment ev;
-
-	priv = hdrs->priv;
-	corba_select_names = priv->corba_select_names;
-
-	CORBA_exception_init (&ev);
-
-	Evolution_Addressbook_SelectNames_add_section (corba_select_names, name, name, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		CORBA_exception_free (&ev);
-		return NULL;
-	}
-
-	corba_control = Evolution_Addressbook_SelectNames_get_entry_for_section (corba_select_names, name, &ev);
-
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		CORBA_exception_free (&ev);
-		return NULL;
-	}
-
-	CORBA_exception_free (&ev);
-
-	control_widget = bonobo_widget_new_control_from_objref (corba_control, CORBA_OBJECT_NIL);
-
-	return control_widget;
-}
-
-static GtkWidget *
-add_header (EMsgComposerHdrs *hdrs,
-	    const gchar *name,
-	    const gchar *tip,
-	    const gchar *tip_private,
-	    int type)
-{
-	EMsgComposerHdrsPrivate *priv;
-	GtkWidget *label;
-	GtkWidget *entry;
-	guint pad;
-	
-	priv = hdrs->priv;
-	
-	if (type == HEADER_ADDRBOOK) {
-		label = gtk_button_new_with_label (name);
-		GTK_OBJECT_UNSET_FLAGS(label, GTK_CAN_FOCUS);
-		gtk_signal_connect (GTK_OBJECT (label), "clicked",
-				    GTK_SIGNAL_FUNC (address_button_clicked_cb),
-				    hdrs);
-		pad = 2;
-		gtk_tooltips_set_tip (hdrs->priv->tooltips, label,
-				      _("Click here for the address book"),
-				      NULL);
-	} else {
-		label = gtk_label_new (name);
-		pad = GNOME_PAD;
-	}
-	
-	gtk_table_attach (GTK_TABLE (hdrs), label,
-			  0, 1, priv->num_hdrs, priv->num_hdrs + 1,
-			  GTK_FILL, GTK_FILL,
-			  pad, pad);
-	gtk_widget_show (label);
-	
-	switch (type) {
-	case HEADER_ADDRBOOK:
-		entry = create_addressbook_entry (hdrs, name);
-		break;
-	case HEADER_COMBOBOX:
-		entry = create_dropdown_entry (hdrs, name);
-		break;
-	default:
-		entry = e_entry_new ();
-		gtk_object_set(GTK_OBJECT(entry),
-			       "editable", TRUE,
-			       "use_ellipsis", TRUE,
-			       NULL);
-	}
-
-	if (entry != NULL) {
-		gtk_widget_show (entry);
-		
-		gtk_table_attach (GTK_TABLE (hdrs), entry,
-				  1, 2, priv->num_hdrs, priv->num_hdrs + 1,
-				  GTK_FILL | GTK_EXPAND, 0,
-				  2, 2);
-		
-		gtk_tooltips_set_tip (hdrs->priv->tooltips, entry, tip, tip_private);
-	}
-	
-	priv->num_hdrs++;
-	
-	return entry;
-}
-
-static void
-setup_headers (EMsgComposerHdrs *hdrs)
-{
-	EMsgComposerHdrsPrivate *priv;
-
-	priv = hdrs->priv;
-	
-	priv->from_entry = add_header
-		(hdrs, _("From:"), 
-		 _("Enter the identitiy you wish to send this message from"),
-		 NULL,
-		 HEADER_COMBOBOX);
-	priv->to_entry = add_header
-		(hdrs, _("To:"), 
-		 _("Enter the recipients of the message"),
-		 NULL,
-		 HEADER_ADDRBOOK);
-	priv->cc_entry = add_header
-		(hdrs, _("Cc:"),
-		 _("Enter the addresses that will receive a carbon copy of "
-		   "the message"),
-		 NULL,
-		 HEADER_ADDRBOOK);
-	priv->bcc_entry = add_header
-		(hdrs, _("Bcc:"),
-		 _("Enter the addresses that will receive a carbon copy of "
-		   "the message without appearing in the recipient list of "
-		   "the message."),
-		 NULL,
-		 HEADER_ADDRBOOK);
-	priv->subject_entry = add_header
-		(hdrs, _("Subject:"),
-		 _("Enter the subject of the mail"),
-		 NULL,
-		 HEADER_ENTRYBOX);
-}
-
-
-/* GtkObject methods.  */
-
-static void
-destroy (GtkObject *object)
-{
-	EMsgComposerHdrs *hdrs;
-	EMsgComposerHdrsPrivate *priv;
-
-	hdrs = E_MSG_COMPOSER_HDRS (object);
-	priv = hdrs->priv;
-
-	if (priv->corba_select_names != CORBA_OBJECT_NIL) {
-		CORBA_Environment ev;
-
-		CORBA_exception_init (&ev);
-		CORBA_Object_release (priv->corba_select_names, &ev);
-		CORBA_exception_free (&ev);
-	}
-
-	gtk_object_destroy (GTK_OBJECT (priv->tooltips));
-
-	if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL)
-		(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-
-static void
-class_init (EMsgComposerHdrsClass *class)
-{
-	GtkObjectClass *object_class;
-
-	object_class = GTK_OBJECT_CLASS (class);
-	object_class->destroy = destroy;
-
-	parent_class = gtk_type_class (gtk_table_get_type ());
-
-	signals[SHOW_ADDRESS_DIALOG] =
-		gtk_signal_new ("show_address_dialog",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (EMsgComposerHdrsClass,
-						   show_address_dialog),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
-}
-
-static void
-init (EMsgComposerHdrs *hdrs)
-{
-	EMsgComposerHdrsPrivate *priv;
-
-	priv = g_new (EMsgComposerHdrsPrivate, 1);
-
-	priv->corba_select_names = CORBA_OBJECT_NIL;
-
-	priv->from_entry    = NULL;
-	priv->to_entry      = NULL;
-	priv->cc_entry      = NULL;
-	priv->bcc_entry     = NULL;
-	priv->subject_entry = NULL;
-
-	priv->tooltips = gtk_tooltips_new ();
-
-	priv->num_hdrs = 0;
-
-	hdrs->priv = priv;
-}
-
-
-GtkType
-e_msg_composer_hdrs_get_type (void)
-{
-	static GtkType type = 0;
-
-	if (type == 0) {
-		static const GtkTypeInfo info = {
-			"EMsgComposerHdrs",
-			sizeof (EMsgComposerHdrs),
-			sizeof (EMsgComposerHdrsClass),
-			(GtkClassInitFunc) class_init,
-			(GtkObjectInitFunc) init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		type = gtk_type_unique (gtk_table_get_type (), &info);
-	}
-
-	return type;
-}
-
-GtkWidget *
-e_msg_composer_hdrs_new (void)
-{
-	EMsgComposerHdrs *new;
-	EMsgComposerHdrsPrivate *priv;
-	
-	new = gtk_type_new (e_msg_composer_hdrs_get_type ());
-	priv = new->priv;
-	
-	if (! setup_corba (new)) {
-		gtk_widget_destroy (GTK_WIDGET (new));
-		return NULL;
-	}
-	
-	setup_headers (new);
-
-	return GTK_WIDGET (new);
-}
-
-
-static GList *
-decode_addresses (const char *s)
-{
-	const char *p, *oldp;
-	gboolean in_quotes;
-	GList *list;
-
-	g_print ("Decoding addresses -- %s\n", s ? s : "(null)");
-
-	if (s == NULL)
-		return NULL;
-
-	in_quotes = FALSE;
-	list = NULL;
-
-	p = s;
-	oldp = s;
-
-	while (1) {
-		if (*p == '"') {
-			in_quotes = ! in_quotes;
-			p++;
-		} else if ((! in_quotes && *p == ',') || *p == 0) {
-			if (p != oldp) {
-				char *new_addr;
-
-				new_addr = g_strndup (oldp, p - oldp);
-				new_addr = g_strstrip (new_addr);
-				if (*new_addr != '\0')
-					list = g_list_prepend (list, new_addr);
-				else
-					g_free (new_addr);
-			}
-
-			while (*p == ',' || *p == ' ' || *p == '\t')
-				p++;
-
-			if (*p == 0)
-				break;
-
-			oldp = p;
-		} else {
-			p++;
-		}
-	}
-
-	return g_list_reverse (list);
-}
-
-static void
-set_recipients (CamelMimeMessage *msg,
-		GtkWidget *entry_widget,
-		const gchar *type)
-{
-	GList *list;
-	GList *p;
-	struct _header_address *addr;
-	char *s;
-
-	bonobo_widget_get_property (BONOBO_WIDGET (entry_widget), "text", &s, NULL);
-
-	list = decode_addresses (s);
-
-	g_free (s);
-
-	/* FIXME leak?  */
-
-	for (p = list; p != NULL; p = p->next) {
-		addr = header_address_decode (p->data);
-		camel_mime_message_add_recipient (msg, type, addr->name,
-						  addr->v.addr);
-		header_address_unref (addr);
-	}
-
-	g_list_free (list);
-}
-
-void
-e_msg_composer_hdrs_to_message (EMsgComposerHdrs *hdrs,
-				CamelMimeMessage *msg)
-{
-	const gchar *s;
-
-	g_return_if_fail (hdrs != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs));
-	g_return_if_fail (msg != NULL);
-	g_return_if_fail (CAMEL_IS_MIME_MESSAGE (msg));
-
-	gtk_object_get(GTK_OBJECT(hdrs->priv->subject_entry),
-		       "text", &s,
-		       NULL);
-	camel_mime_message_set_subject (msg, g_strdup (s));
-
-	set_recipients (msg, hdrs->priv->to_entry, CAMEL_RECIPIENT_TYPE_TO);
-	set_recipients (msg, hdrs->priv->cc_entry, CAMEL_RECIPIENT_TYPE_CC);
-	set_recipients (msg, hdrs->priv->bcc_entry, CAMEL_RECIPIENT_TYPE_BCC);
-}
-
-
-static void
-set_entry (BonoboWidget *bonobo_widget,
-	   const GList *list)
-{
-	GString *string;
-	const GList *p;
-
-	string = g_string_new (NULL);
-	for (p = list; p != NULL; p = p->next) {
-		if (string->str[0] != '\0')
-			g_string_append (string, ", ");
-		g_string_append (string, p->data);
-	}
-
-	bonobo_widget_set_property (BONOBO_WIDGET (bonobo_widget), "text", string->str, NULL);
-
-	g_string_free (string, TRUE);
-}
-
-void
-e_msg_composer_hdrs_set_from (EMsgComposerHdrs *hdrs,
-			      const char *from)
-{
-	GtkEntry *entry;
-	
-	g_return_if_fail (hdrs != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs));
-
-	entry = GTK_ENTRY (GTK_COMBO (hdrs->priv->from_entry)->entry);
-	gtk_entry_set_text (entry, from);
-}
-
-void
-e_msg_composer_hdrs_set_to (EMsgComposerHdrs *hdrs,
-			    const GList *to_list)
-{
-	g_return_if_fail (hdrs != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs));
-
-	set_entry (BONOBO_WIDGET (hdrs->priv->to_entry), to_list);
-}
-
-void
-e_msg_composer_hdrs_set_cc (EMsgComposerHdrs *hdrs,
-			    const GList *cc_list)
-{
-	g_return_if_fail (hdrs != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs));
-
-	set_entry (BONOBO_WIDGET (hdrs->priv->cc_entry), cc_list);
-}
-
-void
-e_msg_composer_hdrs_set_bcc (EMsgComposerHdrs *hdrs,
-			     const GList *bcc_list)
-{
-	g_return_if_fail (hdrs != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs));
-
-	set_entry (BONOBO_WIDGET (hdrs->priv->bcc_entry), bcc_list);
-}
-
-void
-e_msg_composer_hdrs_set_subject (EMsgComposerHdrs *hdrs,
-				 const char *subject)
-{
-	g_return_if_fail (hdrs != NULL);
-	g_return_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs));
-	g_return_if_fail (subject != NULL);
-
-	gtk_object_set(GTK_OBJECT(hdrs->priv->subject_entry),
-		       "text", subject,
-		       NULL);
-}
-
-
-char *
-e_msg_composer_hdrs_get_from (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-	
-	return gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (hdrs->priv->from_entry)->entry));
-}
-
-/* FIXME this is currently unused and broken.  */
-GList *
-e_msg_composer_hdrs_get_to (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	g_assert_not_reached ();
-
-	return NULL;
-}
-
-/* FIXME this is currently unused and broken.  */
-GList *
-e_msg_composer_hdrs_get_cc (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	g_assert_not_reached ();
-
-	return NULL;
-}
-
-/* FIXME this is currently unused and broken.  */
-GList *
-e_msg_composer_hdrs_get_bcc (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	g_assert_not_reached ();
-
-	return NULL;
-}
-
-const char *
-e_msg_composer_hdrs_get_subject (EMsgComposerHdrs *hdrs)
-{
-	gchar *subject;
-
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	gtk_object_get(GTK_OBJECT(hdrs->priv->subject_entry),
-		       "text", &subject,
-		       NULL);
-	
-	return subject;
-}
-
-
-GtkWidget *
-e_msg_composer_hdrs_get_to_entry (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	return hdrs->priv->to_entry;
-}
-
-GtkWidget *
-e_msg_composer_hdrs_get_cc_entry (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	return hdrs->priv->cc_entry;
-}
-
-GtkWidget *
-e_msg_composer_hdrs_get_bcc_entry (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	return hdrs->priv->bcc_entry;
-}
-
-GtkWidget *
-e_msg_composer_hdrs_get_subject_entry (EMsgComposerHdrs *hdrs)
-{
-	g_return_val_if_fail (hdrs != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER_HDRS (hdrs), NULL);
-
-	return hdrs->priv->subject_entry;
-}
diff --git a/composer/e-msg-composer-hdrs.h b/composer/e-msg-composer-hdrs.h
deleted file mode 100644
index 78a478dbfa..0000000000
--- a/composer/e-msg-composer-hdrs.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* msg-composer-hdrs.h
- *
- * Copyright (C) 1999 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef ___E_MSG_COMPOSER_HDRS_H__
-#define ___E_MSG_COMPOSER_HDRS_H__
-
-#include 
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-#define E_TYPE_MSG_COMPOSER_HDRS		(e_msg_composer_hdrs_get_type ())
-#define E_MSG_COMPOSER_HDRS(obj)		(GTK_CHECK_CAST ((obj), E_TYPE_MSG_COMPOSER_HDRS, EMsgComposerHdrs))
-#define E_MSG_COMPOSER_HDRS_CLASS(klass)	(GTK_CHECK_CLASS_CAST ((klass), E_TYPE_MSG_COMPOSER_HDRS, EMsgComposerHdrsClass))
-#define E_IS_MSG_COMPOSER_HDRS(obj)		(GTK_CHECK_TYPE ((obj), E_TYPE_MSG_COMPOSER_HDRS))
-#define E_IS_MSG_COMPOSER_HDRS_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_MSG_COMPOSER_HDRS))
-
-
-typedef struct _EMsgComposerHdrs        EMsgComposerHdrs;
-typedef struct _EMsgComposerHdrsClass   EMsgComposerHdrsClass;
-typedef struct _EMsgComposerHdrsPrivate EMsgComposerHdrsPrivate;
-
-struct _EMsgComposerHdrs {
-	GtkTable parent;
-
-	EMsgComposerHdrsPrivate *priv;
-};
-
-struct _EMsgComposerHdrsClass {
-	GtkTableClass parent_class;
-
-	void (* show_address_dialog) (EMsgComposerHdrs *hdrs);
-};
-
-
-GtkType     e_msg_composer_hdrs_get_type           (void);
-GtkWidget  *e_msg_composer_hdrs_new                (void);
-
-void        e_msg_composer_hdrs_to_message         (EMsgComposerHdrs *hdrs,
-						    CamelMimeMessage *msg);
-
-void        e_msg_composer_hdrs_set_from           (EMsgComposerHdrs *hdrs,
-						    const char       *from);
-void        e_msg_composer_hdrs_set_to             (EMsgComposerHdrs *hdrs,
-						    const GList      *to_list);
-void        e_msg_composer_hdrs_set_cc             (EMsgComposerHdrs *hdrs,
-						    const GList      *cc_list);
-void        e_msg_composer_hdrs_set_bcc            (EMsgComposerHdrs *hdrs,
-						    const GList      *bcc_list);
-void        e_msg_composer_hdrs_set_subject        (EMsgComposerHdrs *hdrs,
-						    const char       *subject);
-
-char       *e_msg_composer_hdrs_get_from           (EMsgComposerHdrs *hdrs);
-GList      *e_msg_composer_hdrs_get_to             (EMsgComposerHdrs *hdrs);
-GList      *e_msg_composer_hdrs_get_cc             (EMsgComposerHdrs *hdrs);
-GList      *e_msg_composer_hdrs_get_bcc            (EMsgComposerHdrs *hdrs);
-const char *e_msg_composer_hdrs_get_subject        (EMsgComposerHdrs *hdrs);
-
-GtkWidget  *e_msg_composer_hdrs_get_to_entry       (EMsgComposerHdrs *hdrs);
-GtkWidget  *e_msg_composer_hdrs_get_cc_entry       (EMsgComposerHdrs *hdrs);
-GtkWidget  *e_msg_composer_hdrs_get_bcc_entry      (EMsgComposerHdrs *hdrs);
-GtkWidget  *e_msg_composer_hdrs_get_subject_entry  (EMsgComposerHdrs *hdrs);
-
-#ifdef _cplusplus
-}
-#endif /* _cplusplus */
-
-
-#endif /* __E_MSG_COMPOSER_HDRS_H__ */
diff --git a/composer/e-msg-composer-select-file.c b/composer/e-msg-composer-select-file.c
deleted file mode 100644
index e9f4e421a3..0000000000
--- a/composer/e-msg-composer-select-file.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-select-file.c
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#include 
-
-#include "e-msg-composer-select-file.h"
-
-
-struct _FileSelectionInfo {
-	GtkWidget *widget;
-	char *selected_file;
-};
-typedef struct _FileSelectionInfo FileSelectionInfo;
-
-
-static void
-confirm (FileSelectionInfo *info)
-{
-	const char *filename;
-
-	filename = gtk_file_selection_get_filename (GTK_FILE_SELECTION (info->widget));
-	info->selected_file = g_strdup (filename);
-
-	gtk_widget_hide (info->widget);
-
-	gtk_main_quit ();
-}
-
-static void
-cancel (FileSelectionInfo *info)
-{
-	g_assert (info->selected_file == NULL);
-
-	gtk_widget_hide (info->widget);
-
-	gtk_main_quit ();
-}
-
-
-/* Callbacks.  */
-
-static void
-ok_clicked_cb (GtkWidget *widget,
-	       void *data)
-{
-	FileSelectionInfo *info;
-
-	info = (FileSelectionInfo *) data;
-	confirm (info);
-}
-
-static void
-cancel_clicked_cb (GtkWidget *widget,
-		   void *data)
-{
-	FileSelectionInfo *info;
-
-	info = (FileSelectionInfo *) data;
-	cancel (info);
-}
-
-static int
-delete_event_cb (GtkWidget *widget,
-		 GdkEventAny *event,
-		 void *data)
-{
-	FileSelectionInfo *info;
-
-	info = (FileSelectionInfo *) data;
-	cancel (info);
-
-	return TRUE;
-}
-
-
-/* Setup.  */
-
-static FileSelectionInfo *
-create_file_selection (EMsgComposer *composer)
-{
-	FileSelectionInfo *info;
-	GtkWidget *widget;
-	GtkWidget *ok_button;
-	GtkWidget *cancel_button;
-
-	info = g_new (FileSelectionInfo, 1);
-
-	widget        = gtk_file_selection_new (NULL);
-	ok_button     = GTK_FILE_SELECTION (widget)->ok_button;
-	cancel_button = GTK_FILE_SELECTION (widget)->cancel_button;
-
-	gtk_signal_connect (GTK_OBJECT (ok_button),
-			    "clicked", GTK_SIGNAL_FUNC (ok_clicked_cb), info);
-	gtk_signal_connect (GTK_OBJECT (cancel_button),
-			    "clicked", GTK_SIGNAL_FUNC (cancel_clicked_cb), info);
-	gtk_signal_connect (GTK_OBJECT (widget), "delete_event",
-			    GTK_SIGNAL_FUNC (delete_event_cb), info);
-
-	info->widget        = widget;
-	info->selected_file = NULL;
-
-	return info;
-}
-
-static void
-file_selection_info_destroy_notify (void *data)
-{
-	FileSelectionInfo *info;
-
-	info = (FileSelectionInfo *) data;
-
-	g_free (info->selected_file);
-	g_free (info);
-}
-
-
-char *
-e_msg_composer_select_file (EMsgComposer *composer,
-			    const char *title)
-{
-	FileSelectionInfo *info;
-	char *retval;
-
-	g_return_val_if_fail (composer != NULL, NULL);
-	g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL);
-
-	info = gtk_object_get_data (GTK_OBJECT (composer),
-				    "e-msg-composer-file-selection-info");
-
-	if (info == NULL) {
-		info = create_file_selection (composer);
-		gtk_object_set_data_full (GTK_OBJECT (composer),
-					  "e-msg-composer-file-selection-info", info,
-					  file_selection_info_destroy_notify);
-	}
-
-	if (GTK_WIDGET_VISIBLE (info->widget))
-		return NULL;		/* Busy!  */
-
-	gtk_window_set_title (GTK_WINDOW (info->widget), title);
-	gtk_widget_show (info->widget);
-
-	GDK_THREADS_ENTER();
-	gtk_main ();
-	GDK_THREADS_LEAVE();
-
-	retval = info->selected_file;
-	info->selected_file = NULL;
-
-	return retval;
-}
diff --git a/composer/e-msg-composer-select-file.h b/composer/e-msg-composer-select-file.h
deleted file mode 100644
index 2f89bd58b4..0000000000
--- a/composer/e-msg-composer-select-file.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer-select-file.c
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-#ifndef E_MSG_COMPOSER_SELECT_FILE_H
-#define E_MSG_COMPOSER_SELECT_FILE_H
-
-#include "e-msg-composer.h"
-
-char *e_msg_composer_select_file (EMsgComposer *composer,
-				  const char *title);
-
-#endif /* E_MSG_COMPOSER_SELECT_FILE_H */
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
deleted file mode 100644
index 2d74775c7d..0000000000
--- a/composer/e-msg-composer.c
+++ /dev/null
@@ -1,1756 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* e-msg-composer.c
- *
- * Copyright (C) 1999  Helix Code, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Ettore Perazzoli
- */
-
-/*
-
-   TODO
-
-   - Somehow users should be able to see if any file(s) are attached even when
-     the attachment bar is not shown.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include 
-#endif
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "camel/camel.h"
-
-#include "mail/mail.h"
-#include "mail/mail-tools.h"
-#include "mail/mail-threads.h"
-
-#include "e-util/e-html-utils.h"
-#include "e-util/e-gui-utils.h"
-#include "widgets/misc/e-scroll-frame.h"
-
-#include "e-msg-composer.h"
-#include "e-msg-composer-address-dialog.h"
-#include "e-msg-composer-attachment-bar.h"
-#include "e-msg-composer-hdrs.h"
-#include "e-msg-composer-select-file.h"
-
-#define HTML_EDITOR_CONTROL_ID "OAFIID:control:html-editor:63c5499b-8b0c-475a-9948-81ec96a9662c"
-
-
-#define DEFAULT_WIDTH 600
-#define DEFAULT_HEIGHT 500
-
-enum {
-	SEND,
-	POSTPONE,
-	LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static GnomeAppClass *parent_class = NULL;
-
-/* local prototypes */
-static GList *add_recipients (GList *list, const char *recips, gboolean decode);
-static void free_recipients (GList *list);
-
-
-static GtkWidget *
-create_editor (EMsgComposer *composer)
-{
-	GtkWidget *control;
-
-	control = bonobo_widget_new_control (HTML_EDITOR_CONTROL_ID,
-					     bonobo_object_corba_objref (BONOBO_OBJECT (composer->uih)));
-	if (control == NULL) {
-		g_error ("Cannot activate `%s'. Did you build gtkhtml with Bonobo and OAF support?", HTML_EDITOR_CONTROL_ID);
-		return NULL;
-	}
-
-	return control;
-}
-
-static char *
-get_text (Bonobo_PersistStream persist, char *format)
-{
-	BonoboStream *stream;
-	BonoboStreamMem *stream_mem;
-	CORBA_Environment ev;
-	char *text;
-
-	CORBA_exception_init (&ev);
-
-	stream = bonobo_stream_mem_create (NULL, 0, FALSE, TRUE);
-	Bonobo_PersistStream_save (persist, (Bonobo_Stream)bonobo_object_corba_objref (BONOBO_OBJECT (stream)),
-				   format, &ev);
-	if (ev._major != CORBA_NO_EXCEPTION) {
-		g_warning ("Exception getting mail '%s'",
-			   bonobo_exception_get_text (&ev));
-		return NULL;
-	}
-	
-	CORBA_exception_free (&ev);
-
-	stream_mem = BONOBO_STREAM_MEM (stream);
-	text = g_malloc (stream_mem->pos + 1);
-	memcpy (text, stream_mem->buffer, stream_mem->pos);
-	text[stream_mem->pos] = 0;
-	bonobo_object_unref (BONOBO_OBJECT(stream));
-
-	return text;
-}
-
-#define LINE_LEN 72
-
-/* This might be a temporary function... the GtkHTML export interfaces are
- * not yet complete, so some or all of this may move into GtkHTML.
- */
-static char *
-format_text (char *text)
-{
-	GString *out;
-	char *s, *space, *outstr;
-	int len, tabbing, i;
-	gboolean linestart = TRUE, cited = FALSE;
-
-	tabbing = 0;		/* Shut down compiler.  */
-	len = strlen (text);
-	out = g_string_sized_new (len + len / LINE_LEN);
-
-	s = text;
-	while (*s) {
-		if (linestart) {
-			tabbing = 0;
-			while (*s == '\t') {
-				s++;
-				tabbing++;
-			}
-			cited = (tabbing == 0 && *s == '>');
-		}
-
-		len = strcspn (s, "\n");
-		if (!cited && len > LINE_LEN - tabbing * 8) {
-			/* If we can break anywhere between s and
-			 * s + LINE_LEN, do that. We can break between
-			 * space and anything but  
-			 */
-			space = s + LINE_LEN - tabbing * 8;
-			while (space > s && (*space != ' '
-					     || (*(space + 1) == '\240')
-					     || (*(space - 1) == '\240')))
-				space--;
-
-			if (space != s)
-				len = space - s;
-		}
-
-		/* Do initial tabs */
-		for (i = 0; i < tabbing; i++)
-			g_string_append_c (out, '\t');
-
-		/* Copy the line... */
-		while (len--) {
-			g_string_append_c (out, *s == '\240' ? ' ' : *s);
-			s++;
-		}
-
-		/* Eat whitespace... */
-		while (*s == ' ' || *s == '\240')
-			s++;
-		if (*s == '\n') {
-			s++;
-			linestart = TRUE;
-		} else
-			linestart = FALSE;
-
-		/* And end the line. */
-		g_string_append_c (out, '\n');
-	}
-
-	outstr = out->str;
-	g_string_free (out, FALSE);
-	return outstr;
-}
-
-typedef enum {
-	MSG_FORMAT_PLAIN,
-	MSG_FORMAT_ALTERNATIVE,
-} MsgFormat;
-
-/* This functions builds a CamelMimeMessage for the message that the user has
-   composed in `composer'.  */
-static CamelMimeMessage *
-build_message (EMsgComposer *composer)
-{
-	EMsgComposerAttachmentBar *attachment_bar =
-		E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar);
-	CamelMimeMessage *new;
-	CamelMultipart *body = NULL;
-	CamelMimePart *part;
-	char *html = NULL, *plain = NULL, *fmt = NULL;
-	int i;
-	MsgFormat type = MSG_FORMAT_ALTERNATIVE;
-
-	if (composer->persist_stream_interface == CORBA_OBJECT_NIL)
-		return NULL;
-
-	if (composer->send_html)
-		type = MSG_FORMAT_ALTERNATIVE;
-	else
-		type = MSG_FORMAT_PLAIN;
-
-	new = camel_mime_message_new ();
-
-	e_msg_composer_hdrs_to_message (E_MSG_COMPOSER_HDRS (composer->hdrs), new);
-	for (i = 0; i < composer->extra_hdr_names->len; i++) {
-		camel_medium_add_header (CAMEL_MEDIUM (new),
-					 composer->extra_hdr_names->pdata[i],
-					 composer->extra_hdr_values->pdata[i]);
-	}
-	
-	plain = get_text (composer->persist_stream_interface, "text/plain");
-	fmt = format_text (plain);
-	g_free (plain);
-	
-	if (type != MSG_FORMAT_PLAIN)
-		html = get_text (composer->persist_stream_interface, "text/html");
-
-	if (type == MSG_FORMAT_ALTERNATIVE) {
-		body = camel_multipart_new ();
-		camel_data_wrapper_set_mime_type (CAMEL_DATA_WRAPPER (body),
-						  "multipart/alternative");
-		camel_multipart_set_boundary (body, NULL);
-
-		part = camel_mime_part_new ();
-		camel_mime_part_set_content (part, fmt, strlen (fmt), "text/plain");
-		g_free (fmt);
-		camel_multipart_add_part (body, part);
-		camel_object_unref (CAMEL_OBJECT (part));
-		
-		part = camel_mime_part_new ();
-		camel_mime_part_set_content (part, html, strlen (html), "text/html");
-		g_free (html);
-		camel_multipart_add_part (body, part);
-		camel_object_unref (CAMEL_OBJECT (part));
-	}
-
-	if (e_msg_composer_attachment_bar_get_num_attachments (attachment_bar)) {
-		CamelMultipart *multipart = camel_multipart_new ();
-
-		/* Generate a random boundary. */
-		camel_multipart_set_boundary (multipart, NULL);
-
-		part = camel_mime_part_new ();
-		switch (type) {
-		case MSG_FORMAT_ALTERNATIVE:
-			camel_medium_set_content_object (CAMEL_MEDIUM (part),
-							 CAMEL_DATA_WRAPPER (body));
-			camel_object_unref (CAMEL_OBJECT (body));
-			break;
-		case MSG_FORMAT_PLAIN:
-			camel_mime_part_set_content (part, fmt, strlen (fmt), "text/plain");
-			g_free(fmt);
-			break;
-		}
-		camel_multipart_add_part (multipart, part);
-		camel_object_unref (CAMEL_OBJECT (part));
-
-		e_msg_composer_attachment_bar_to_multipart (attachment_bar, multipart);
-
-		camel_medium_set_content_object (CAMEL_MEDIUM (new), CAMEL_DATA_WRAPPER (multipart));
-		camel_object_unref (CAMEL_OBJECT (multipart));
-	} else {
-		CamelDataWrapper *cdw;
-		CamelStream *stream;
-		switch (type) {
-		case MSG_FORMAT_ALTERNATIVE:
-			camel_medium_set_content_object (CAMEL_MEDIUM (new), CAMEL_DATA_WRAPPER (body));
-			camel_object_unref (CAMEL_OBJECT (body));
-			break;
-		case MSG_FORMAT_PLAIN:
-			stream = camel_stream_mem_new_with_buffer (fmt, strlen (fmt));
-			cdw = camel_data_wrapper_new ();
-			camel_data_wrapper_construct_from_stream (cdw, stream);
-			camel_object_unref (CAMEL_OBJECT (stream));
-			
-			camel_data_wrapper_set_mime_type (cdw, "text/plain");
-
-			camel_medium_set_content_object (CAMEL_MEDIUM (new), CAMEL_DATA_WRAPPER (cdw));
-			camel_object_unref (CAMEL_OBJECT (cdw));
-			g_free (fmt);
-			break;
-
-		}
-	}
-
-	return new;
-}
-
-static char *
-get_signature (const char *sigfile)
-{
-	char *rawsig;
-	static char *htmlsig = NULL;
-	static time_t sigmodtime = -1;
-	struct stat st;
-	int fd;
-
-	if (!sigfile || !*sigfile) {
-		return NULL;
-	}
-
-	if (stat (sigfile, &st) == -1) {
-		char *msg;
-
-		msg = g_strdup_printf ("Could not open signature file %s:\n%s",
-				       sigfile, g_strerror (errno));
-		gnome_error_dialog (msg);
-		g_free (msg);
-
-		return NULL;
-	}
-
-	if (st.st_mtime == sigmodtime)
-		return htmlsig;
-
-	rawsig = g_malloc (st.st_size + 1);
-	fd = open (sigfile, O_RDONLY);
-	if (fd == -1) {
-		char *msg;
-
-		msg = g_strdup_printf ("Could not open signature file %s:\n%s",
-				       sigfile, g_strerror (errno));
-		gnome_error_dialog (msg);
-		g_free (msg);
-
-		return NULL;
-	}
-
-	read (fd, rawsig, st.st_size);
-	rawsig[st.st_size] = '\0';
-	close (fd);
-
-	htmlsig = e_text_to_html (rawsig, 0);
-	sigmodtime = st.st_mtime;
-
-	return htmlsig;
-}
-
-static void
-set_editor_text (BonoboWidget *editor, const char *sig_file, const char *text)
-{
-	Bonobo_PersistStream persist;
-	BonoboStream *stream;
-	CORBA_Environment ev;
-	char *sig, *fulltext;
-
-	sig = get_signature (sig_file);
-	if (sig) {
-		if (!strncmp ("-- \n", sig, 3))
-			fulltext = g_strdup_printf ("%s
\n
\n%s
", - text, sig); - else - fulltext = g_strdup_printf ("%s
\n
\n-- \n%s
", - text, sig); - } else { - if (!*text) - return; - fulltext = (char*)text; - } - - CORBA_exception_init (&ev); - persist = (Bonobo_PersistStream) - bonobo_object_client_query_interface ( - bonobo_widget_get_server (editor), - "IDL:Bonobo/PersistStream:1.0", - &ev); - g_assert (persist != CORBA_OBJECT_NIL); - - stream = bonobo_stream_mem_create (fulltext, strlen (fulltext), - TRUE, FALSE); - if (sig) - g_free (fulltext); - Bonobo_PersistStream_load (persist, (Bonobo_Stream)bonobo_object_corba_objref (BONOBO_OBJECT (stream)), "text/html", &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - /* FIXME. Some error message. */ - return; - } - if (ev._major != CORBA_SYSTEM_EXCEPTION) - CORBA_Object_release (persist, &ev); - - Bonobo_Unknown_unref (persist, &ev); - CORBA_exception_free (&ev); - bonobo_object_unref (BONOBO_OBJECT(stream)); -} - - -/* Commands. */ - -static void -show_attachments (EMsgComposer *composer, - gboolean show) -{ - if (show) { - gtk_widget_show (composer->attachment_scroll_frame); - gtk_widget_show (composer->attachment_bar); - } else { - gtk_widget_hide (composer->attachment_scroll_frame); - gtk_widget_hide (composer->attachment_bar); - } - - composer->attachment_bar_visible = show; - - /* Update the GUI. */ - -#if 0 - gtk_check_menu_item_set_active - (GTK_CHECK_MENU_ITEM - (glade_xml_get_widget (composer->menubar_gui, - "menu_view_attachments")), - show); -#endif - - /* XXX we should update the toggle toolbar item as well. At - this point, it is not a toggle because Glade is broken. */ -} - -static void -save (EMsgComposer *composer, - const char *file_name) -{ - CORBA_Environment ev; - char *my_file_name; - - if (file_name != NULL) - my_file_name = g_strdup (file_name); - else - my_file_name = e_msg_composer_select_file (composer, _("Save as...")); - - if (my_file_name == NULL) - return; - - CORBA_exception_init (&ev); - - Bonobo_PersistFile_save (composer->persist_file_interface, my_file_name, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - e_notice (GTK_WINDOW (composer), GNOME_MESSAGE_BOX_ERROR, - _("Error saving file: %s"), g_basename (file_name)); - } - - CORBA_exception_free (&ev); - - g_free (my_file_name); -} - -static void -load (EMsgComposer *composer, - const char *file_name) -{ - CORBA_Environment ev; - - CORBA_exception_init (&ev); - - Bonobo_PersistFile_load (composer->persist_file_interface, file_name, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - e_notice (GTK_WINDOW (composer), GNOME_MESSAGE_BOX_ERROR, - _("Error loading file: %s"), g_basename (file_name)); - - CORBA_exception_free (&ev); -} - -/* Exit dialog. (Displays a "Save composition to 'Drafts' before exiting?" warning before actually exiting.) */ - -enum { REPLY_YES = 0, REPLY_NO, REPLY_CANCEL }; - -typedef struct save_draft_input_s { - EMsgComposer *composer; -} save_draft_input_t; - -typedef struct save_draft_data_s { - CamelMimeMessage *msg; - CamelMessageInfo *info; -} save_draft_data_t; - -static gchar * -describe_save_draft (gpointer in_data, gboolean gerund) -{ - if (gerund) { - return g_strdup (_("Saving changes to message...")); - } else { - return g_strdup (_("About to save changes to message...")); - } -} - -static void -setup_save_draft (gpointer in_data, gpointer op_data, CamelException *ex) -{ - save_draft_input_t *input = (save_draft_input_t *) in_data; - save_draft_data_t *data = (save_draft_data_t *) op_data; - - g_return_if_fail (input->composer != NULL); - - /* initialize op_data */ - data->msg = e_msg_composer_get_message (input->composer); - data->info = g_new0 (CamelMessageInfo, 1); - data->info->flags = CAMEL_MESSAGE_DRAFT; -} - -static void -do_save_draft (gpointer in_data, gpointer op_data, CamelException *ex) -{ - /*save_draft_input_t *input = (save_draft_input_t *) in_data;*/ - save_draft_data_t *data = (save_draft_data_t *) op_data; - extern CamelFolder *drafts_folder; - - /* perform camel operations */ - mail_tool_camel_lock_up (); - camel_folder_append_message (drafts_folder, data->msg, data->info, ex); - mail_tool_camel_lock_down (); -} - -static void -cleanup_save_draft (gpointer in_data, gpointer op_data, CamelException *ex) -{ - save_draft_input_t *input = (save_draft_input_t *) in_data; - /*save_draft_data_t *data = (save_draft_data_t *) op_data;*/ - - if (camel_exception_is_set (ex)) { - char *reason; - - reason = g_strdup_printf ("Error saving composition to 'Drafts': %s", - camel_exception_get_description (ex)); - - gnome_warning_dialog_parented (reason, GTK_WINDOW (input->composer)); - g_free (reason); - } else { - gtk_widget_destroy (GTK_WIDGET (input->composer)); - } -} - -static const mail_operation_spec op_save_draft = { - describe_save_draft, - sizeof (save_draft_data_t), - setup_save_draft, - do_save_draft, - cleanup_save_draft -}; - -static void -exit_dialog_cb (int reply, EMsgComposer *composer) -{ - save_draft_input_t *input; - - switch (reply) { - case REPLY_YES: - /* this has to be done async */ - input = g_new0 (save_draft_input_t, 1); - input->composer = composer; - mail_operation_queue (&op_save_draft, input, TRUE); - case REPLY_NO: - gtk_widget_destroy (GTK_WIDGET (composer)); - break; - case REPLY_CANCEL: - default: - } -} - -static void -do_exit (EMsgComposer *composer) -{ - GtkWidget *dialog; - GtkWidget *label; - gint button; - - dialog = gnome_dialog_new (_("Evolution"), - GNOME_STOCK_BUTTON_YES, /* Save */ - GNOME_STOCK_BUTTON_NO, /* Don't save */ - GNOME_STOCK_BUTTON_CANCEL, /* Cancel */ - NULL); - - label = gtk_label_new (_("This message has not been sent.\n\nDo you wish to save your changes?")); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), label, TRUE, TRUE, 0); - gtk_widget_show (label); - gnome_dialog_set_parent (GNOME_DIALOG (dialog), GTK_WINDOW (composer)); - gnome_dialog_set_default (GNOME_DIALOG (dialog), 0); - button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - - exit_dialog_cb (button, composer); -} - -/* Menu callbacks. */ - -static void -menu_file_open_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EMsgComposer *composer; - char *file_name; - - composer = E_MSG_COMPOSER (data); - - file_name = e_msg_composer_select_file (composer, _("Open file")); - if (file_name == NULL) - return; - - load (composer, file_name); - - g_free (file_name); -} - -static void -menu_file_save_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EMsgComposer *composer; - CORBA_char *file_name; - CORBA_Environment ev; - - composer = E_MSG_COMPOSER (data); - - CORBA_exception_init (&ev); - - file_name = Bonobo_PersistFile_get_current_file (composer->persist_file_interface, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - save (composer, NULL); - } else { - save (composer, file_name); - CORBA_free (file_name); - } - - CORBA_exception_free (&ev); -} - -static void -menu_file_save_as_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EMsgComposer *composer; - - composer = E_MSG_COMPOSER (data); - - save (composer, NULL); -} - -static void -menu_file_send_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - /* FIXME: We should really write this to Outbox in the future? */ - gtk_signal_emit (GTK_OBJECT (data), signals[SEND]); -} - -static void -menu_file_close_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EMsgComposer *composer; - - composer = E_MSG_COMPOSER (data); - do_exit (composer); -} - -static void -menu_file_add_attachment_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EMsgComposer *composer; - - composer = E_MSG_COMPOSER (data); - - e_msg_composer_attachment_bar_attach - (E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar), - NULL); -} - -static void -menu_view_attachments_activate_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - gboolean state; - - state = bonobo_ui_handler_menu_get_toggle_state (uih, path); - e_msg_composer_show_attachments (E_MSG_COMPOSER (data), state); -} - -#if 0 -static void -insert_file_ok_cb (GtkWidget *widget, void *user_data) -{ - GtkFileSelection *fs; - GdkAtom selection_atom = GDK_NONE; - char *name; - EMsgComposer *composer; - struct stat sb; - int fd; - guint8 *buffer; - size_t bufsz, actual; - - fs = GTK_FILE_SELECTION (gtk_widget_get_ancestor (widget, - GTK_TYPE_FILE_SELECTION)); - composer = E_MSG_COMPOSER (user_data); - name = gtk_file_selection_get_filename (fs); - - if (stat (name, &sb) < 0) { - GtkWidget *dlg; - - dlg = gnome_error_dialog_parented( _("That file does not exist."), - GTK_WINDOW (fs)); - gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); - gtk_widget_destroy (GTK_WIDGET (dlg)); - return; - } - - if( !(S_ISREG (sb.st_mode)) ) { - GtkWidget *dlg; - - dlg = gnome_error_dialog_parented( _("That is not a regular file."), - GTK_WINDOW (fs)); - gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); - gtk_widget_destroy (GTK_WIDGET (dlg)); - return; - } - - if (access (name, R_OK) != 0) { - GtkWidget *dlg; - - dlg = gnome_error_dialog_parented( _("That file exists but is not readable."), - GTK_WINDOW (fs)); - gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); - gtk_widget_destroy (GTK_WIDGET (dlg)); - return; - } - - if ((fd = open (name, O_RDONLY)) < 0) { - GtkWidget *dlg; - - dlg = gnome_error_dialog_parented( _("That file appeared accesible but open(2) failed."), - GTK_WINDOW (fs)); - gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); - gtk_widget_destroy (GTK_WIDGET (dlg)); - return; - } - - buffer = NULL; - bufsz = 0; - actual = 0; - #define CHUNK 5120 - - while( 1 ) { - ssize_t chunk; - - if( bufsz - actual < CHUNK ) { - bufsz += CHUNK; - - if( bufsz >= 102400 ) { - GtkWidget *dlg; - gint result; - - dlg = gnome_dialog_new( _("The file is very large (more than 100K).\n" - "Are you sure you wish to insert it?"), - GNOME_STOCK_BUTTON_YES, - GNOME_STOCK_BUTTON_NO, - NULL); - gnome_dialog_set_parent (GNOME_DIALOG (dlg), GTK_WINDOW (fs)); - result = gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); - gtk_widget_destroy (GTK_WIDGET (dlg)); - - if (result == 1) - goto cleanup; - } - - buffer = g_realloc (buffer, bufsz * sizeof (guint8)); - } - - chunk = read (fd, &(buffer[actual]), CHUNK); - - if (chunk < 0) { - GtkWidget *dlg; - - dlg = gnome_error_dialog_parented( _("An error occurred while reading the file."), - GTK_WINDOW (fs)); - gnome_dialog_run_and_close (GNOME_DIALOG (dlg)); - gtk_widget_destroy (GTK_WIDGET (dlg)); - goto cleanup; - } - - if( chunk == 0 ) - break; - - actual += chunk; - } - - buffer[actual] = '\0'; - - if (selection_atom == GDK_NONE) - selection_atom = gdk_atom_intern ("TEMP_PASTE", FALSE); - gtk_object_set_data (GTK_OBJECT (fs), "ev_file_buffer", buffer); - gtk_selection_owner_set (GTK_WIDGET (fs), selection_atom, GDK_CURRENT_TIME); - /*gtk_html_paste (composer->send_html);*/ - - cleanup: - close( fd ); - g_free( buffer ); - gtk_widget_destroy (GTK_WIDGET(fs)); -} - -static void fs_selection_get (GtkWidget *widget, GtkSelectionData *sdata, - guint info, guint time) -{ - gchar *buffer; - GdkAtom encoding; - gint format; - guchar *ctext; - gint length; - - buffer = gtk_object_get_data (GTK_OBJECT (widget), "ev_file_buffer"); - if (gdk_string_to_compound_text (buffer, &encoding, &format, &ctext, - &length) == Success) - gtk_selection_data_set (sdata, encoding, format, ctext, length); - g_free (buffer); - gtk_object_remove_data (GTK_OBJECT (widget), "ev_file_buffer"); -} - -#endif -static void -menu_file_insert_file_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ -#if 0 - EMsgComposer *composer; - GtkFileSelection *fs; - - composer = E_MSG_COMPOSER (data); - - fs = GTK_FILE_SELECTION (gtk_file_selection_new ("Choose File")); - /* FIXME: remember the location or something */ - /*gtk_file_selection_set_filename( fs, g_get_home_dir() );*/ - gtk_signal_connect (GTK_OBJECT (fs->ok_button), "clicked", - GTK_SIGNAL_FUNC (insert_file_ok_cb), data); - gtk_signal_connect_object (GTK_OBJECT (fs->cancel_button), - "clicked", - GTK_SIGNAL_FUNC (gtk_widget_destroy), - GTK_OBJECT (fs)); - gtk_widget_show (GTK_WIDGET(fs)); -#else - g_message ("Insert file is unimplemented! oh no!"); -#endif -} - -static void -menu_format_html_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EMsgComposer *composer; - gboolean new_state; - - composer = E_MSG_COMPOSER (data); - - new_state = bonobo_ui_handler_menu_get_toggle_state (uih, path); - if ((new_state && composer->send_html) || (! new_state && ! composer->send_html)) - return; - - e_msg_composer_set_send_html (composer, new_state); -} - - -/* Menu bar creation. */ - -static void -create_menubar_file (EMsgComposer *composer, - BonoboUIHandler *uih) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/File", - _("_File"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - bonobo_ui_handler_menu_new_item (uih, "/File/Open", - _("_Open..."), - _("Load a previously saved message"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_OPEN, - 0, 0, - menu_file_open_cb, composer); - - bonobo_ui_handler_menu_new_item (uih, "/File/Save", - _("_Save..."), - _("Save message"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_SAVE, - 0, 0, - menu_file_save_cb, composer); - - bonobo_ui_handler_menu_new_item (uih, "/File/Save as", - _("_Save as..."), - _("Save message with a different name"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_SAVE_AS, - 0, 0, - menu_file_save_as_cb, composer); - - bonobo_ui_handler_menu_new_item (uih, "/File/Save in folder", - _("Save in _folder..."), - _("Save the message in a specified folder"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - NULL, composer); - - bonobo_ui_handler_menu_new_separator (uih, "/File/Separator1", -1); - - bonobo_ui_handler_menu_new_item (uih, "/File/Insert text file", - _("_Insert text file... (FIXME)"), - _("Insert a file as text into the message"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - menu_file_insert_file_cb, composer); - - bonobo_ui_handler_menu_new_separator (uih, "/File/Separator2", -1); - - bonobo_ui_handler_menu_new_item (uih, "/File/Send", - _("_Send"), - _("Send the message"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_MAIL_SND, - 0, 0, - menu_file_send_cb, composer); - - bonobo_ui_handler_menu_new_separator (uih, "/File/Separator3", -1); - - bonobo_ui_handler_menu_new_item (uih, "/File/Close", - _("_Close..."), - _("Quit the message composer"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_CLOSE, - 0, 0, - menu_file_close_cb, composer); -} - -static void -create_menubar_edit (EMsgComposer *composer, - BonoboUIHandler *uih) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/Edit", - _("_Edit"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); -} - -static void -create_menubar_format (EMsgComposer *composer, - BonoboUIHandler *uih) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/Format", - _("_Format"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - bonobo_ui_handler_menu_new_toggleitem (uih, "/Format/HTML", - _("HTML"), - _("Send the mail in HTML format"), - -1, - 0, 0, - menu_format_html_cb, composer); - - bonobo_ui_handler_menu_set_toggle_state (uih, "/Format/HTML", composer->send_html); -} - -static void -create_menubar_view (EMsgComposer *composer, - BonoboUIHandler *uih) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/View", - _("_View"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - bonobo_ui_handler_menu_new_toggleitem (uih, "/View/Show attachments", - _("Show _attachments"), - _("Show/hide attachments"), - -1, - 0, 0, - menu_view_attachments_activate_cb, composer); -} - -static void -create_menubar (EMsgComposer *composer) -{ - BonoboUIHandler *uih; - - uih = composer->uih; - bonobo_ui_handler_create_menubar (uih); - - create_menubar_file (composer, uih); - create_menubar_edit (composer, uih); - create_menubar_format (composer, uih); - create_menubar_view (composer, uih); -} - - -/* Toolbar implementation. */ - -static void -create_toolbar (EMsgComposer *composer) -{ - BonoboUIHandler *uih; - - uih = composer->uih; - bonobo_ui_handler_create_toolbar (uih, "Toolbar"); - - bonobo_ui_handler_toolbar_new_item (uih, - "/Toolbar/Send", - _("Send"), - _("Send this message"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_PIXMAP_MAIL_SND, - 0, 0, - menu_file_send_cb, composer); - - bonobo_ui_handler_toolbar_new_item (uih, - "/Toolbar/Attach", - _("Attach"), - _("Attach a file"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_PIXMAP_ATTACH, - 0, 0, - menu_file_add_attachment_cb, composer); -} - - -/* Miscellaneous callbacks. */ - -static void -attachment_bar_changed_cb (EMsgComposerAttachmentBar *bar, - void *data) -{ - EMsgComposer *composer; - - composer = E_MSG_COMPOSER (data); - - if (e_msg_composer_attachment_bar_get_num_attachments (bar) > 0) - e_msg_composer_show_attachments (composer, TRUE); - else - e_msg_composer_show_attachments (composer, FALSE); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EMsgComposer *composer; - CORBA_Environment ev; - - composer = E_MSG_COMPOSER (object); - - bonobo_object_unref (BONOBO_OBJECT (composer->uih)); - - /* FIXME? I assume the Bonobo widget will get destroyed - normally? */ - - if (composer->address_dialog != NULL) - gtk_widget_destroy (composer->address_dialog); - if (composer->hdrs != NULL) - gtk_widget_destroy (composer->hdrs); - - if (composer->extra_hdr_names) { - int i; - - for (i = 0; i < composer->extra_hdr_names->len; i++) { - g_free (composer->extra_hdr_names->pdata[i]); - g_free (composer->extra_hdr_values->pdata[i]); - } - g_ptr_array_free (composer->extra_hdr_names, TRUE); - g_ptr_array_free (composer->extra_hdr_values, TRUE); - } - - CORBA_exception_init (&ev); - - if (composer->persist_stream_interface != CORBA_OBJECT_NIL) { - Bonobo_Unknown_unref (composer->persist_stream_interface, &ev); - CORBA_Object_release (composer->persist_stream_interface, &ev); - } - - if (composer->persist_file_interface != CORBA_OBJECT_NIL) { - Bonobo_Unknown_unref (composer->persist_file_interface, &ev); - CORBA_Object_release (composer->persist_file_interface, &ev); - } - - CORBA_exception_free (&ev); - - if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL) - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* GtkWidget methods. */ - -static int -delete_event (GtkWidget *widget, - GdkEventAny *event) -{ - do_exit (E_MSG_COMPOSER (widget)); - - return TRUE; -} - - -static void -class_init (EMsgComposerClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - - object_class->destroy = destroy; - - widget_class->delete_event = delete_event; - - parent_class = gtk_type_class (gnome_app_get_type ()); - - signals[SEND] = - gtk_signal_new ("send", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EMsgComposerClass, send), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - signals[POSTPONE] = - gtk_signal_new ("postpone", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EMsgComposerClass, postpone), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EMsgComposer *composer) -{ - composer->uih = NULL; - - composer->hdrs = NULL; - composer->extra_hdr_names = g_ptr_array_new (); - composer->extra_hdr_values = g_ptr_array_new (); - - composer->editor = NULL; - - composer->address_dialog = NULL; - - composer->attachment_bar = NULL; - composer->attachment_scroll_frame = NULL; - - composer->persist_file_interface = CORBA_OBJECT_NIL; - composer->persist_stream_interface = CORBA_OBJECT_NIL; - - composer->attachment_bar_visible = FALSE; - composer->send_html = FALSE; -} - - -GtkType -e_msg_composer_get_type (void) -{ - static GtkType type = 0; - - if (type == 0) { - static const GtkTypeInfo info = { - "EMsgComposer", - sizeof (EMsgComposer), - sizeof (EMsgComposerClass), - (GtkClassInitFunc) class_init, - (GtkObjectInitFunc) init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (gnome_app_get_type (), &info); - } - - return type; -} - -/** - * e_msg_composer_construct: - * @composer: A message composer widget - * - * Construct @composer. - **/ -void -e_msg_composer_construct (EMsgComposer *composer) -{ - GtkWidget *vbox; - BonoboObject *editor_server; - - g_return_if_fail (gtk_main_level () > 0); - - gtk_window_set_default_size (GTK_WINDOW (composer), - DEFAULT_WIDTH, DEFAULT_HEIGHT); - - gnome_app_construct (GNOME_APP (composer), "e-msg-composer", - _("Compose a message")); - - composer->uih = bonobo_ui_handler_new (); - bonobo_ui_handler_set_app (composer->uih, GNOME_APP (composer)); - - vbox = gtk_vbox_new (FALSE, 0); - - composer->hdrs = e_msg_composer_hdrs_new (); - gtk_box_pack_start (GTK_BOX (vbox), composer->hdrs, FALSE, FALSE, 0); - gtk_widget_show (composer->hdrs); - - /* Editor component. */ - - create_menubar (composer); - create_toolbar (composer); - composer->editor = create_editor (composer); - - editor_server = BONOBO_OBJECT (bonobo_widget_get_server (BONOBO_WIDGET (composer->editor))); - - composer->persist_file_interface - = bonobo_object_query_interface (editor_server, "IDL:Bonobo/PersistFile:1.0"); - composer->persist_stream_interface - = bonobo_object_query_interface (editor_server, "IDL:Bonobo/PersistStream:1.0"); - - gtk_widget_show (composer->editor); - gtk_box_pack_start (GTK_BOX (vbox), composer->editor, TRUE, TRUE, 0); - gtk_widget_show (composer->editor); - - /* Attachment editor, wrapped into an EScrollFrame. We don't - show it for now. */ - - composer->attachment_scroll_frame = e_scroll_frame_new (NULL, NULL); - e_scroll_frame_set_shadow_type (E_SCROLL_FRAME (composer->attachment_scroll_frame), - GTK_SHADOW_IN); - e_scroll_frame_set_policy (E_SCROLL_FRAME (composer->attachment_scroll_frame), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - composer->attachment_bar = e_msg_composer_attachment_bar_new (NULL); - GTK_WIDGET_SET_FLAGS (composer->attachment_bar, GTK_CAN_FOCUS); - gtk_container_add (GTK_CONTAINER (composer->attachment_scroll_frame), - composer->attachment_bar); - gtk_box_pack_start (GTK_BOX (vbox), - composer->attachment_scroll_frame, - FALSE, FALSE, GNOME_PAD_SMALL); - - gtk_signal_connect (GTK_OBJECT (composer->attachment_bar), "changed", - GTK_SIGNAL_FUNC (attachment_bar_changed_cb), composer); - - gnome_app_set_contents (GNOME_APP (composer), vbox); - gtk_widget_show (vbox); - - e_msg_composer_show_attachments (composer, FALSE); - - /* Set focus on the `To:' field. */ - - gtk_widget_grab_focus (e_msg_composer_hdrs_get_to_entry (E_MSG_COMPOSER_HDRS (composer->hdrs))); -} - -/** - * e_msg_composer_new: - * - * Create a new message composer widget. This function must be called - * within the GTK+ main loop, or it will fail. - * - * Return value: A pointer to the newly created widget - **/ -GtkWidget * -e_msg_composer_new (void) -{ - GtkWidget *new; - - g_return_val_if_fail (gtk_main_level () > 0, NULL); - - new = gtk_type_new (e_msg_composer_get_type ()); - e_msg_composer_construct (E_MSG_COMPOSER (new)); - - /* Load the signature, if any. */ - set_editor_text (BONOBO_WIDGET (E_MSG_COMPOSER (new)->editor), - NULL, ""); - - return new; -} - -/** - * e_msg_composer_new_with_sig_file: - * - * Create a new message composer widget. This function must be called - * within the GTK+ main loop, or it will fail. Sets the signature - * file. - * - * Return value: A pointer to the newly created widget - **/ -GtkWidget * -e_msg_composer_new_with_sig_file (const char *sig_file) -{ - GtkWidget *new; - - g_return_val_if_fail (gtk_main_level () > 0, NULL); - - new = gtk_type_new (e_msg_composer_get_type ()); - e_msg_composer_construct (E_MSG_COMPOSER (new)); - - /* Load the signature, if any. */ - set_editor_text (BONOBO_WIDGET (E_MSG_COMPOSER (new)->editor), - sig_file, ""); - - return new; -} - -/** - * e_msg_composer_new_with_message: - * - * Create a new message composer widget. This function must be called - * within the GTK+ main loop, or it will fail. - * - * Return value: A pointer to the newly created widget - **/ -GtkWidget * -e_msg_composer_new_with_message (CamelMimeMessage *msg) -{ - const CamelInternetAddress *to, *cc, *bcc; - GList *To = NULL, *Cc = NULL, *Bcc = NULL; - gboolean want_plain, is_html; - CamelDataWrapper *contents; - const gchar *subject; - GtkWidget *new; - char *text, *final_text; - guint len, i; - - g_return_val_if_fail (gtk_main_level () > 0, NULL); - - new = gtk_type_new (e_msg_composer_get_type ()); - e_msg_composer_construct (E_MSG_COMPOSER (new)); - - subject = camel_mime_message_get_subject (msg); - - to = camel_mime_message_get_recipients (msg, CAMEL_RECIPIENT_TYPE_TO); - cc = camel_mime_message_get_recipients (msg, CAMEL_RECIPIENT_TYPE_CC); - bcc = camel_mime_message_get_recipients (msg, CAMEL_RECIPIENT_TYPE_BCC); - - len = CAMEL_ADDRESS (to)->addresses->len; - for (i = 0; i < len; i++) { - const char *addr; - - if (camel_internet_address_get (to, i, NULL, &addr)) - To = g_list_append (To, g_strdup (addr)); - } - - len = CAMEL_ADDRESS (cc)->addresses->len; - for (i = 0; i < len; i++) { - const char *addr; - - if (camel_internet_address_get (cc, i, NULL, &addr)) - Cc = g_list_append (Cc, g_strdup (addr)); - } - - len = CAMEL_ADDRESS (bcc)->addresses->len; - for (i = 0; i < len; i++) { - const char *addr; - - if (camel_internet_address_get (bcc, i, NULL, &addr)) - Bcc = g_list_append (Bcc, g_strdup (addr)); - } - - e_msg_composer_set_headers (E_MSG_COMPOSER (new), To, Cc, Bcc, subject); - - free_recipients (To); - free_recipients (Cc); - free_recipients (Bcc); - - want_plain = !mail_config_send_html (); - - contents = camel_medium_get_content_object (CAMEL_MEDIUM (msg)); - text = mail_get_message_body (contents, want_plain, &is_html); - if (is_html) - final_text = g_strdup (text); - else - final_text = e_text_to_html (text, E_TEXT_TO_HTML_CONVERT_NL | - E_TEXT_TO_HTML_CONVERT_SPACES); - g_free (text); - - e_msg_composer_set_body_text (E_MSG_COMPOSER (new), final_text); - - /*set_editor_text (BONOBO_WIDGET (E_MSG_COMPOSER (new)->editor), - NULL, "FIXME: like, uh... put the message here and stuff\n");*/ - - return new; -} - -static GList * -add_recipients (GList *list, const char *recips, gboolean decode) -{ - int len; - char *addr; - - while (*recips) { - len = strcspn (recips, ","); - if (len) { - addr = g_strndup (recips, len); - if (decode) - camel_url_decode (addr); - list = g_list_append (list, addr); - } - recips += len; - if (*recips == ',') - recips++; - } - - return list; -} - -static void -free_recipients (GList *list) -{ - GList *l; - - for (l = list; l; l = l->next) - g_free (l->data); - g_list_free (list); -} - -/** - * e_msg_composer_new_from_url: - * @url: a mailto URL - * - * Create a new message composer widget, and fill in fields as - * defined by the provided URL. - **/ -GtkWidget * -e_msg_composer_new_from_url (const char *url) -{ - EMsgComposer *composer; - EMsgComposerHdrs *hdrs; - GList *to = NULL, *cc = NULL, *bcc = NULL; - char *subject = NULL, *body = NULL; - const char *p, *header; - int len, clen; - char *content; - - g_return_val_if_fail (g_strncasecmp (url, "mailto:", 7) == 0, NULL); - - /* Parse recipients (everything after ':' until '?' or eos. */ - p = url + 7; - len = strcspn (p, "?,"); - if (len) { - content = g_strndup (p, len); - to = add_recipients (to, content, TRUE); - g_free (content); - } - - p += len; - if (*p == '?') { - p++; - - while (*p) { - len = strcspn (p, "=&"); - - /* If it's malformed, give up. */ - if (p[len] != '=') - break; - - header = p; - p += len + 1; - - clen = strcspn (p, "&"); - content = g_strndup (p, clen); - camel_url_decode (content); - - if (!g_strncasecmp (header, "to", len)) - to = add_recipients (to, content, FALSE); - else if (!g_strncasecmp (header, "cc", len)) - cc = add_recipients (cc, content, FALSE); - else if (!g_strncasecmp (header, "bcc", len)) - bcc = add_recipients (bcc, content, FALSE); - else if (!g_strncasecmp (header, "subject", len)) - subject = g_strdup (content); - else if (!g_strncasecmp (header, "body", len)) - body = g_strdup (content); - - g_free (content); - p += clen; - if (*p == '&') { - p++; - if (!strcmp (p, "amp;")) - p += 4; - } - } - } - - composer = E_MSG_COMPOSER (e_msg_composer_new ()); - hdrs = E_MSG_COMPOSER_HDRS (composer->hdrs); - e_msg_composer_hdrs_set_to (hdrs, to); - free_recipients (to); - e_msg_composer_hdrs_set_cc (hdrs, cc); - free_recipients (cc); - e_msg_composer_hdrs_set_bcc (hdrs, bcc); - free_recipients (bcc); - if (subject) { - e_msg_composer_hdrs_set_subject (hdrs, subject); - g_free (subject); - } - - if (body) { - char *htmlbody = e_text_to_html (body, E_TEXT_TO_HTML_PRE); - set_editor_text (BONOBO_WIDGET (composer->editor), - NULL, htmlbody); - g_free (htmlbody); - } - - return GTK_WIDGET (composer); -} - -/** - * e_msg_composer_show_attachments: - * @composer: A message composer widget - * @show: A boolean specifying whether the attachment bar should be shown or - * not - * - * If @show is %FALSE, hide the attachment bar. Otherwise, show it. - **/ -void -e_msg_composer_show_attachments (EMsgComposer *composer, - gboolean show) -{ - g_return_if_fail (composer != NULL); - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - - show_attachments (composer, show); -} - -/** - * e_msg_composer_set_headers: - * @composer: a composer object - * @to: the values for the "To" header - * @cc: the values for the "Cc" header - * @bcc: the values for the "Bcc" header - * @subject: the value for the "Subject" header - * - * Sets the headers in the composer to the given values. - **/ -void -e_msg_composer_set_headers (EMsgComposer *composer, const GList *to, - const GList *cc, const GList *bcc, - const char *subject) -{ - EMsgComposerHdrs *hdrs; - - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - hdrs = E_MSG_COMPOSER_HDRS (composer->hdrs); - - e_msg_composer_hdrs_set_to (hdrs, to); - e_msg_composer_hdrs_set_cc (hdrs, cc); - e_msg_composer_hdrs_set_bcc (hdrs, bcc); - e_msg_composer_hdrs_set_subject (hdrs, subject); -} - - -/** - * e_msg_composer_set_body_text: - * @composer: a composer object - * @text: the HTML text to initialize the editor with - * - * Loads the given HTML text into the editor. - **/ -void -e_msg_composer_set_body_text (EMsgComposer *composer, const char *text) -{ - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - - set_editor_text (BONOBO_WIDGET (composer->editor), - composer->sig_file, text); -} - - -/** - * e_msg_composer_add_header: - * @composer: a composer object - * @name: the header name - * @value: the header value - * - * Adds a header with @name and @value to the message. This header - * may not be displayed by the composer, but will be included in - * the message it outputs. - **/ -void -e_msg_composer_add_header (EMsgComposer *composer, const char *name, - const char *value) -{ - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - g_return_if_fail (name != NULL); - g_return_if_fail (value != NULL); - - g_ptr_array_add (composer->extra_hdr_names, g_strdup (name)); - g_ptr_array_add (composer->extra_hdr_values, g_strdup (value)); -} - - -/** - * e_msg_composer_attach: - * @composer: a composer object - * @attachment: the CamelMimePart to attach - * - * Attaches @attachment to the message being composed in the composer. - **/ -void -e_msg_composer_attach (EMsgComposer *composer, CamelMimePart *attachment) -{ - EMsgComposerAttachmentBar *bar; - - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - g_return_if_fail (CAMEL_IS_MIME_PART (attachment)); - - bar = E_MSG_COMPOSER_ATTACHMENT_BAR (composer->attachment_bar); - e_msg_composer_attachment_bar_attach_mime_part (bar, attachment); -} - - -/** - * e_msg_composer_get_message: - * @composer: A message composer widget - * - * Retrieve the message edited by the user as a CamelMimeMessage. The - * CamelMimeMessage object is created on the fly; subsequent calls to this - * function will always create new objects from scratch. - * - * Return value: A pointer to the new CamelMimeMessage object - **/ -CamelMimeMessage * -e_msg_composer_get_message (EMsgComposer *composer) -{ - g_return_val_if_fail (composer != NULL, NULL); - g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL); - - return build_message (composer); -} - - - -/** - * e_msg_composer_set_sig: - * @composer: A message composer widget - * @path: Signature file - * - * Set a signature - **/ -void -e_msg_composer_set_sig_file (EMsgComposer *composer, const char *sig_file) -{ - g_return_if_fail (composer != NULL); - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - - composer->sig_file = g_strdup (sig_file); -} - -/** - * e_msg_composer_get_sig_file: - * @composer: A message composer widget - * - * Get the signature file - * - * Return value: The signature file. - **/ -char * -e_msg_composer_get_sig_file (EMsgComposer *composer) -{ - g_return_val_if_fail (composer != NULL, NULL); - g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL); - - return composer->sig_file; -} - - -/** - * e_msg_composer_set_send_html: - * @composer: A message composer widget - * @send_html: Whether the composer should have the "Send HTML" flag set - * - * Set the status of the "Send HTML" toggle item. The user can override it. - **/ -void -e_msg_composer_set_send_html (EMsgComposer *composer, - gboolean send_html) -{ - g_return_if_fail (composer != NULL); - g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - - if (composer->send_html && send_html) - return; - if (! composer->send_html && ! send_html) - return; - - composer->send_html = send_html; - bonobo_ui_handler_menu_set_toggle_state (composer->uih, "/Format/HTML", send_html); -} - -/** - * e_msg_composer_get_send_html: - * @composer: A message composer widget - * - * Get the status of the "Send HTML mail" flag. - * - * Return value: The status of the "Send HTML mail" flag. - **/ -gboolean -e_msg_composer_get_send_html (EMsgComposer *composer) -{ - g_return_val_if_fail (composer != NULL, FALSE); - g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), FALSE); - - return composer->send_html; -} diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h deleted file mode 100644 index 3e9be58891..0000000000 --- a/composer/e-msg-composer.h +++ /dev/null @@ -1,118 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-msg-composer.h - * - * Copyright (C) 1999 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef ___E_MSG_COMPOSER_H__ -#define ___E_MSG_COMPOSER_H__ - -#include -#include - -#include "e-msg-composer-attachment-bar.h" -#include "e-msg-composer-hdrs.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - - -#define E_TYPE_MSG_COMPOSER (e_msg_composer_get_type ()) -#define E_MSG_COMPOSER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_MSG_COMPOSER, EMsgComposer)) -#define E_MSG_COMPOSER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_MSG_COMPOSER, EMsgComposerClass)) -#define E_IS_MSG_COMPOSER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_MSG_COMPOSER)) -#define E_IS_MSG_COMPOSER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_MSG_COMPOSER)) - - -typedef struct _EMsgComposer EMsgComposer; -typedef struct _EMsgComposerClass EMsgComposerClass; - -struct _EMsgComposer { - GnomeApp parent; - - BonoboUIHandler *uih; - - GtkWidget *hdrs; - GPtrArray *extra_hdr_names, *extra_hdr_values; - - GtkWidget *editor; - - GtkWidget *attachment_bar; - GtkWidget *attachment_scroll_frame; - - GtkWidget *address_dialog; - - Bonobo_PersistFile persist_file_interface; - Bonobo_PersistStream persist_stream_interface; - - char *sig_file; - - gboolean attachment_bar_visible : 1; - gboolean send_html : 1; -}; - -struct _EMsgComposerClass { - GnomeAppClass parent_class; - - void (* send) (EMsgComposer *composer); - void (* postpone) (EMsgComposer *composer); -}; - - -GtkType e_msg_composer_get_type (void); - -void e_msg_composer_construct (EMsgComposer *composer); -GtkWidget *e_msg_composer_new (void); -GtkWidget *e_msg_composer_new_with_sig_file (const char *sig_file); -GtkWidget *e_msg_composer_new_with_message (CamelMimeMessage *msg); -GtkWidget *e_msg_composer_new_from_url (const char *url); -void e_msg_composer_show_attachments (EMsgComposer *composer, - gboolean show); - -void e_msg_composer_set_headers (EMsgComposer *composer, - const GList *to, - const GList *cc, - const GList *bcc, - const char *subject); -void e_msg_composer_set_body_text (EMsgComposer *composer, - const char *text); -void e_msg_composer_add_header (EMsgComposer *composer, - const char *name, - const char *value); -void e_msg_composer_attach (EMsgComposer *composer, - CamelMimePart *attachment); - -CamelMimeMessage *e_msg_composer_get_message (EMsgComposer *composer); - -void e_msg_composer_set_sig_file (EMsgComposer *composer, - const char *sig_file); -char *e_msg_composer_get_sig_file (EMsgComposer *composer); - -void e_msg_composer_set_send_html (EMsgComposer *composer, - gboolean send_html); -gboolean e_msg_composer_get_send_html (EMsgComposer *composer); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* ___E_MSG_COMPOSER_H__ */ diff --git a/composer/main.c b/composer/main.c deleted file mode 100644 index 383504d30d..0000000000 --- a/composer/main.c +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ - -#include -#include -#include - -#include - -#include -#include -#include - -#include "e-msg-composer.h" - -static void -send_cb (EMsgComposer *composer, - gpointer data) -{ - CamelMimeMessage *message; - CamelStream *stream; - gint stdout_dup; - - message = e_msg_composer_get_message (composer); - - stdout_dup = dup (1); - stream = camel_stream_fs_new_with_fd (stdout_dup); - camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), - stream); - camel_stream_close (stream); - - camel_object_unref (CAMEL_OBJECT (message)); - -#if 0 - gtk_widget_destroy (GTK_WIDGET (composer)); - gtk_main_quit (); -#endif -} - -static guint -create_composer (void) -{ - GtkWidget *composer; - - composer = e_msg_composer_new (); - gtk_widget_show (composer); - - gtk_signal_connect (GTK_OBJECT (composer), "send", GTK_SIGNAL_FUNC (send_cb), NULL); - - return FALSE; -} - -int -main (int argc, char **argv) -{ - CORBA_Environment ev; - CORBA_ORB orb; - - CORBA_exception_init (&ev); - gnome_CORBA_init ("evolution-test-msg-composer", "0.0", &argc, argv, 0, &ev); - CORBA_exception_free (&ev); - - orb = gnome_CORBA_ORB (); - - glade_gnome_init (); - - if (bonobo_init (orb, NULL, NULL) == FALSE) - g_error ("Could not initialize Bonobo\n"); - - /* We can't make any CORBA calls unless we're in the main loop. So we - delay creating the container here. */ - gtk_idle_add ((GtkFunction) create_composer, NULL); - - bonobo_main (); - - return 0; -} diff --git a/configure.in b/configure.in deleted file mode 100644 index 8e2beb49fb..0000000000 --- a/configure.in +++ /dev/null @@ -1,612 +0,0 @@ -# Process this file with autoconf to produce a configure script. -AC_INIT(camel) -AM_CONFIG_HEADER(config.h) - -cflags_set=${CFLAGS+set} - -EVOLUTION_MAJOR_VERSION=0 -EVOLUTION_MINOR_VERSION=0 -EVOLUTION_MICRO_VERSION=4 -VERSION=$EVOLUTION_MINOR_VERSION.$EVOLUTION_MICRO_VERSION -PACKAGE=evolution - -AM_INIT_AUTOMAKE($PACKAGE, $VERSION) -AC_SUBST(VERSION) - - -dnl Initialize libtool -AM_PROG_LIBTOOL - -dnl Initialize maintainer mode -AM_MAINTAINER_MODE - -AC_CANONICAL_HOST - -AM_ACLOCAL_INCLUDE(macros) -GNOME_INIT(capplet) -GNOME_COMPILE_WARNINGS -AC_ISC_POSIX -AC_PROG_CC -AC_PROG_CPP -AM_PROG_LEX -AC_PROG_YACC -AC_STDC_HEADERS -AC_ARG_PROGRAM -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_MAKE_SET - -AC_PATH_PROG(SENDMAIL, sendmail, /usr/sbin/sendmail, /usr/sbin:/usr/lib) -AC_DEFINE_UNQUOTED(SENDMAIL_PATH, "$SENDMAIL") - -AC_MSG_CHECKING(system mail directory) -if test -d /var/mail; then - system_mail_dir=/var/mail -else - system_mail_dir=/var/spool/mail -fi -AC_MSG_RESULT($system_mail_dir) -AC_DEFINE_UNQUOTED(SYSTEM_MAIL_DIR, "$system_mail_dir") - -dnl Check for new enough gnome-libs -CFLAGS_save=$CFLAGS -LIBS_save=$LIBS -CFLAGS=`gnome-config --cflags gnomeui` -LIBS=`gnome-config --libs gnomeui` - -AC_CHECK_LIB(gnomeui, gnome_window_icon_set_default_from_file, ,[ -AC_MSG_ERROR(gnome-libs 1.0.59 or higher is required.)]) - -CFLAGS=$CFLAGS_save -LIBS=$LIBS_save - -ALL_LINGUAS="da de el fr ga gl hu it ja ko nl no ru sl sv tr uk es pl" - -AM_GNOME_GETTEXT - -GNOME_X_CHECKS - -dnl -dnl Purify support -dnl -AC_ARG_ENABLE(purify, -[ --enable-purify=[no/yes] Enable support for building executables with - Purify.],,enable_purify=no) -AC_PATH_PROG(PURIFY, purify, impure) -AC_ARG_WITH(purify-options, [ --with-purify-options=OPTIONS Options passed to the purify command line (defaults to PURIFYOPTIONS variable).]) -if test "x$with_purify_options" = "xno"; then - with_purify_options="-always-use-cache-dir=yes -cache-dir=/gnome/lib/purify" -fi -if test "x$PURIFYOPTIONS" = "x"; then - PURIFYOPTIONS=$with_purify_options -fi -AC_SUBST(PURIFY) -AM_CONDITIONAL(ENABLE_PURIFY, test "x$enable_purify" = "xyes" -a "x$PURIFY" != "ximpure") -PURIFY="$PURIFY $PURIFYOPTIONS" - -dnl * Time zone stuff -AC_CACHE_CHECK(for timezone variable, ac_cv_var_timezone, - AC_TRY_COMPILE([ - #include - ], [ - timezone = 1; - ], ac_cv_var_timezone=yes, ac_cv_var_timezone=no)) -if test $ac_cv_var_timezone = yes; then - AC_DEFINE(HAVE_TIMEZONE) -else - AC_CACHE_CHECK(for tm_gmtoff in struct tm, ac_cv_struct_tm_gmtoff, - AC_TRY_COMPILE([ - #include - ], [ - struct tm tm; - tm.tm_gmtoff = 1; - ], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)) - if test $ac_cv_struct_tm_gmtoff = yes; then - AC_DEFINE(HAVE_TM_GMTOFF) - else - AC_ERROR(unable to find a way to determine timezone) - fi -fi - -AC_CHECK_FUNCS(mkstemp mkdtemp) - -dnl ************************************************** -dnl ctime_r prototype -dnl ************************************************** - -AC_CACHE_CHECK([if ctime_r wants three arguments], ac_cv_ctime_r_three_args, -[ - AC_TRY_COMPILE([ - #include - ],[ - char *buf; - time_t date; - ctime_r( &date, buf, 100 ); - ],[ - ac_cv_ctime_r_three_args=yes - ],[ - ac_cv_ctime_r_three_args=no - ]) -]) - -if test x"$ac_cv_ctime_r_three_args" = xyes ; then - AC_DEFINE(CTIME_R_THREE_ARGS) -fi - -dnl ************************************************** -dnl * pas-backend-file stuff. -dnl * check for db_185.h. if it's there, we use it. -dnl * otherwise, we use db.h (since it'll be 185). -dnl * Except on RH7.0, which puts db in yet another place -dnl ************************************************** -AC_CHECK_HEADERS(db_185.h) -AC_CHECK_HEADERS(db1/db.h) - -dnl ************************************************** -dnl * ldap related stuff. -dnl ************************************************** -AC_CHECK_LIB(lber, ber_get_tag, LDAP_LIBS="-llber") -if test x$ac_cv_lib_lber_ber_get_tag = xyes; then -AC_CHECK_LIB(ldap, ldap_open, LDAP_LIBS="-lldap $LDAP_LIBS", ,-llber) -fi -if test x$ac_cv_lib_ldap_ldap_open = xyes; then - AC_DEFINE(HAVE_LDAP) - AC_SUBST(LDAP_LIBS) -else - AC_MSG_WARN(no ldap support present) -fi -AM_CONDITIONAL(ENABLE_LDAP, test x$ac_cv_lib_ldap_ldap_open = xyes) - -dnl ************************************************** -dnl * Posix thread support -dnl ************************************************** - -dnl Hah! Threads are no longer an option -dnl AC_ARG_WITH(threads, [ --with-threads Include thread support],[ -dnl FIXME: support more thread types, pth at least - -GNOME_PTHREAD_CHECK - -if test "x$PTHREAD_LIB" = "x" ; then - AC_MSG_ERROR([POSIX threads are currently required for Evolution]) -fi - -dnl -dnl Notice that this is a hack, and we wont be able to use this forever, but -dnl at least for some time -dnl - -THREADS_LIBS="$PTHREAD_LIB `glib-config --libs gthread`" -THREADS_CFLAGS="`glib-config --cflags gthread`" - -AC_SUBST(THREADS_LIBS) -AC_SUBST(THREADS_CFLAGS) - -dnl ************************************************** -dnl * Print check -dnl ************************************************** -AC_MSG_CHECKING(for GnomePrint libraries version 0.20) -if gnome-config --libs print > /dev/null 2>&1; then - vers=`gnome-config --modversion print | sed -e "s/gnome-print-//"` - if test "$vers" = "0.20"; then - AC_MSG_RESULT(found) - else - AC_MSG_ERROR(Please make sure you are using the released version of gnome-print-0.20. Please note that CVS HEAD versions will not work.) - fi -else - AC_MSG_ERROR(Did not find GnomePrint installed. Please make sure you are using the released version of gnome-print-0.20. Please note that CVS HEAD versions will not work.) -fi -GNOME_PRINT_LIBS=`gnome-config --libs print` -GNOME_PRINT_CFLAGS=`gnome-config --cflags print` -AC_SUBST(GNOME_PRINT_LIBS) -AC_SUBST(GNOME_PRINT_CFLAGS) - -dnl ************************************************** -dnl * ORBit support -dnl ************************************************** -dnl GNOMEGNORBA_LIBS="$GNOMEGNORBA_LIBS" -dnl AC_SUBST(GNOMEGNORBA_LIBS) - - -dnl ****************************** -dnl Check for Bonobo -dnl ****************************** -AC_MSG_CHECKING(for Bonobo >= 0.17) -if gnome-config --libs bonobox > /dev/null 2>&1; then - vers=`gnome-config --modversion bonobo | sed -e "s/bonobo-//" | \ - awk 'BEGIN { FS = "."; } { printf "%d", $1 * 1000 + $2;}'` - if test "$vers" -ge 17; then - bonobo_ok=true - else - bonobo_ok=false - fi -else - bonobo_ok=false -fi - -if $bonobo_ok; then - AC_MSG_RESULT($vers found) -else - AC_MSG_ERROR(Bonobo newer than 0.16 is required to compile Evolution) -fi - -dnl ****************************** -dnl LibGlade checking -dnl ****************************** -AC_MSG_CHECKING(for Glade libraries) -if gnome-config --libs libglade > /dev/null 2>&1; then - AC_MSG_RESULT(found) -else - AC_MSG_ERROR(Did not find libGlade installed) -fi - -dnl ****************************** -dnl libunicode checking -dnl ****************************** -AC_MSG_CHECKING(for libunicode) -if unicode-config --libs > /dev/null 2>&1; then - UNICODE_LIBS=`unicode-config --libs` - UNICODE_CFLAGS=`unicode-config --cflags` - AC_SUBST(UNICODE_LIBS) - AC_SUBST(UNICODE_CFLAGS) - AC_MSG_RESULT(found) -else - AC_MSG_ERROR(libunicode not found) -fi - -dnl ****************************** -dnl GdkPixbuf checking -dnl ****************************** -AC_MSG_CHECKING(for Gdkpixbuf libraries) -if gnome-config --libs gdk_pixbuf gnomecanvaspixbuf > /dev/null 2>&1; then - AC_MSG_RESULT(found) -else - AC_MSG_ERROR(Did not find gdkpixbuf installed) -fi - -GLIB_CFLAGS="`glib-config --cflags`" -GLIB_LIBS="`glib-config --libs`" - -AC_SUBST(GLIB_CFLAGS) -AC_SUBST(GLIB_LIBS) - - -EXTRA_GNOME_LIBS="`gnome-config --libs libglade gdk_pixbuf gnomecanvaspixbuf gnomeui ` $THREADS_LIBS `unicode-config --libs`" -EXTRA_GNOME_CFLAGS="`gnome-config --cflags libglade gdk_pixbuf gnomecanvaspixbuf gnomeui ` $THREADS_CFLAGS `unicode-config --cflags`" - -AC_SUBST(EXTRA_GNOME_LIBS) -AC_SUBST(EXTRA_GNOME_CFLAGS) - - -BONOBO_GNOME_LIBS="`gnome-config --libs bonobox libglade gdk_pixbuf gnomecanvaspixbuf gnomeui`" -BONOBO_GNOME_CFLAGS="`gnome-config --cflags bonobox libglade gdk_pixbuf gnomecanvaspixbuf gnomeui `" -AC_SUBST(BONOBO_GNOME_LIBS) -AC_SUBST(BONOBO_GNOME_CFLAGS) - -BONOBO_HTML_GNOME_LIBS="`gnome-config --libs bonobox libglade gdk_pixbuf gtkhtml gnomecanvaspixbuf gnomeui ` $THREAD_LIBS" -BONOBO_HTML_GNOME_CFLAGS="`gnome-config --cflags bonobox libglade gdk_pixbuf gtkhtml gnomecanvaspixbuf gnomeui ` $THREAD_CFLAGS" -AC_SUBST(BONOBO_HTML_GNOME_LIBS) -AC_SUBST(BONOBO_HTML_GNOME_CFLAGS) - -dnl ****************************** -dnl GtkHTML checking -dnl ****************************** - -AC_MSG_CHECKING(for GtkHTML) -if gnome-config --libs gtkhtml > /dev/null 2>&1; then - vers=`gnome-config --modversion gtkhtml` - case $vers - in - gtkhtml-0.[01234]) gtkhtml_ok=false ;; - *) gtkhtml_ok=true ;; - esac -else - gtkhtml_ok=false -fi - -if $gtkhtml_ok; then - AC_MSG_RESULT($vers found) -else - AC_MSG_ERROR(GtkHTML 0.5 or later is required to compile Evolution) -fi - -GTKHTML_CFLAGS="`gnome-config --cflags gtkhtml`" -GTKHTML_LIBS="`gnome-config --libs gtkhtml`" - -AC_SUBST(GTKHTML_CFLAGS) -AC_SUBST(GTKHTML_LIBS) - -dnl ****************************** -dnl Gnome-VFS checking -dnl ****************************** -AC_MSG_CHECKING(for GNOME-VFS) -if gnome-config --libs vfs > /dev/null 2>&1; then - vers=`gnome-config --modversion vfs` - case $vers - in - gnome-vfs-0.[012]) vfs_ok=false ;; - *) vfs_ok=true ;; - esac -else - vfs_ok=false -fi - -if $vfs_ok; then - AC_MSG_RESULT($vers) -else - AC_MSG_ERROR(GNOME-VFS 0.3 or newer is required to compile Evolution) -fi - -GNOME_VFS_LIBS="`gnome-config --libs vfs`" -GNOME_VFS_CFLAGS="`gnome-config --cflags vfs`" -AC_SUBST(GNOME_VFS_LIBS) -AC_SUBST(GNOME_VFS_CFLAGS) - -save_CFLAGS="$CFLAGS" -save_LIBS="$LIBS" -CFLAGS="$GNOME_VFS_CFLAGS" -LIBS="$GNOME_VFS_LIBS" -AC_CHECK_LIB(gnomevfs, gnome_vfs_mime_get_default_action_without_fallback,[], -[ - AC_MSG_ERROR([You need a newer Gnome VFS. Try the CVS version]) -]) -CFLAGS="$save_CFLAGS" -LIBS="$save_LIBS" - -BONOBO_VFS_GNOME_LIBS="`gnome-config --libs bonobox libglade gdk_pixbuf gnomecanvaspixbuf vfs gnomeui `" -BONOBO_VFS_GNOME_CFLAGS="`gnome-config --cflags bonobox libglade gdk_pixbuf gnomecanvaspixbuf vfs gnomeui `" -AC_SUBST(BONOBO_VFS_GNOME_LIBS) -AC_SUBST(BONOBO_VFS_GNOME_CFLAGS) - -dnl ****************************** -dnl Pilot checking -dnl ****************************** -AC_ARG_ENABLE(pilot-conduits, -[ --enable-pilot-conduits=[no/yes] Enable support for building pilot conduits.],,enable_pilot_conduits=no) -if test "x$enable_pilot_conduits" = "xyes"; then -GNOME_PILOT_CHECK -fi -AM_CONDITIONAL(ENABLE_PILOT_CONDUITS, test "x$enable_pilot_conduits" = "xyes") - -dnl ****** -dnl XML -dnl ****** -GNOME_XML_CHECK -xmlversion=`xml-config --version | sed 's/^libxml//'` -xmlmajor=`echo $xmlversion | awk -F. '{print $1;}'` -xmlminor=`echo $xmlversion | awk -F. '{print $2;}'` -xmlpatch=`echo $xmlversion | awk -F. '{print $3;}'` -if test "$xmlmajor" -ne 1 -o "$xmlminor" -ne 8 -o "$xmlpatch" -lt 7; then - AC_MSG_ERROR(gnome-xml 1.8.7 (or later, but not 2.0) is required to compile Evolution) -fi - -AC_SUBST(CAPPLET_LIBS) - -dnl ****************************** -dnl Whether to use OAF -dnl ****************************** - -AC_MSG_CHECKING(if Bonobo uses OAF) -if ( gnome-config --libs bonobo | grep oaf ) > /dev/null 2>&1 ; then - enable_oaf="yes" -else - enable_oaf="no" -fi - -AC_MSG_RESULT("$enable_oaf") - -if test "x$enable_oaf" = "xyes"; then - AC_PATH_PROG(OAF_CONFIG,oaf-config,no) - if test x$OAF_CONFIG = xno; then - AC_MSG_ERROR("You enabled OAF support but oaf-config was not found") - else - OAF_LIBS=`$OAF_CONFIG --libs` - OAF_CFLAGS=`$OAF_CONFIG --cflags` - GNORBA_LIBNAME= - fi -else - OAF_LIBS= - OAF_CFLAGS= - GNORBA_LIBNAME=gnorba -fi - -AC_SUBST(OAF_LIBS) -AC_SUBST(OAF_CFLAGS) - -AM_CONDITIONAL(USING_OAF, test "x$enable_oaf" = "xyes") - -if test "x$enable_oaf" = "xyes"; then - AC_DEFINE(USING_OAF) - BONOBO_GNOME_LIBS="`oaf-config --libs` $BONOBO_GNOME_LIBS" - BONOBO_GNOME_CFLAGS="`oaf-config --cflags ` $BONOBO_GNOME_CFLAGS" -fi - -dnl ******** -dnl Kerberos -dnl ******** -AC_ARG_WITH(krb5, [ --with-krb5=PREFIX Location of Kerberos 5 libs/includes]) -AC_ARG_WITH(krb4, [ --with-krb4=PREFIX Location of Kerberos 4 libs/includes]) -AC_MSG_CHECKING(for Kerberos 5) -AC_MSG_RESULT(${with_krb5:=no}) -if test x$with_krb5 != xno; then - KRB5_CFLAGS="-I$with_krb5/include/krb5" - KRB5_LDFLAGS="-L$with_krb5/lib -lkrb5 -lk5crypto -lcom_err" - AC_DEFINE(HAVE_KRB5) -fi -AC_MSG_CHECKING(for Kerberos 4) -AC_MSG_RESULT(${with_krb4:=no}) -if test x$with_krb4 != xno; then - KRB4_CFLAGS="-I$with_krb4/include -I$with_krb4/include/kerberosIV $KRB5_CFLAGS" - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -L$with_krb4/lib" - AC_CHECK_LIB(krb, krb_mk_req, - [KRB4_LDFLAGS="-L$with_krb4/lib -lkrb -ldes"], - [KRB4_LDFLAGS="-L$with_krb4/lib -lkrb4 -ldes425 -lkrb5 -lk5crypto -lcom_err"], - -ldes) - LDFLAGS="$save_LDFLAGS" - AC_DEFINE(HAVE_KRB4) -fi -AC_SUBST(KRB5_CFLAGS) -AC_SUBST(KRB5_LDFLAGS) -AC_SUBST(KRB4_CFLAGS) -AC_SUBST(KRB4_LDFLAGS) - - -dnl ****************************** -dnl gtk-doc -dnl ****************************** - -AC_CHECK_PROG(GTKDOC, gtkdoc-mkdb, true, false) -AM_CONDITIONAL(HAVE_GTK_DOC, $GTKDOC) -AC_SUBST(HAVE_GTK_DOC) - -dnl Let people disable the gtk-doc stuff. -AC_ARG_ENABLE(gtk-doc, [ --enable-gtk-doc Use gtk-doc to build documentation [default=auto]], enable_gtk_doc="$enableval", enable_gtk_doc=auto) - -if test x$enable_gtk_doc = xauto ; then - if test x$GTKDOC = xtrue ; then - enable_gtk_doc=yes - else - enable_gtk_doc=no - fi -fi - -dnl NOTE: We need to use a separate automake conditional for this -dnl to make this work with the tarballs. -AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes) - -dnl ******** -dnl movemail -dnl ******** -AC_ARG_WITH(movemail, [ --with-movemail=PATH Path to a movemail binary]) -AC_MSG_CHECKING(for movemail) -if test x$with_movemail = xyes -o x$with_movemail = x; then - with_movemail=no -fi -if test x$with_movemail != xno; then - AC_DEFINE_UNQUOTED(MOVEMAIL_PATH, "$with_movemail") - AC_MSG_RESULT($with_movemail) -else - emacs_exec_dir=`emacs --batch --eval '(message exec-directory)' 2>&1` - case $emacs_exec_dir in - /*) if test -x $emacs_exec_dir/movemail; then - if test -u $emacs_exec_dir/movemail -o -g $emacs_exec_dir/movemail; then - AC_MSG_RESULT($emacs_exec_dir/movemail) - AC_DEFINE_UNQUOTED(MOVEMAIL_PATH, "$emacs_exec_dir/movemail") - else - AC_MSG_RESULT($emacs_exec_dir/movemail... not set-id: ignored) - fi - else - AC_MSG_RESULT(no) - fi - ;; - *) - AC_MSG_RESULT(no) - ;; - esac -fi - -dnl ********** -dnl GPGPGPGPGP -dnl ********** -AC_PATH_PROG(GPG, gpg) -if test -n "$GPG"; then - AC_DEFINE_UNQUOTED(GPG_PATH, "$GPG") - AC_DEFINE(PGP_PROGRAM, "GPG") -else - AC_PATH_PROG(PGP5, pgpv) - if test -n "$PGP5"; then - AC_DEFINE_UNQUOTED(PGP5_PATH, "$PGP5") - AC_DEFINE(PGP_PROGRAM, "PGP") - else - AC_PATH_PROG(PGP, pgp) - if test -n "$PGP"; then - AC_DEFINE_UNQUOTED(PGP_PATH, "$PGP") - AC_DEFINE(PGP_PROGRAM, "PGP") - fi - fi -fi - -dnl ****************************** -dnl Makefiles -dnl ****************************** - -AC_CONFIG_SUBDIRS(libical) - -EVOLUTION_DIR=`(cd $srcdir; pwd)` -AC_SUBST(EVOLUTION_DIR) - -AC_OUTPUT([ -Makefile -evolution.spec -macros/Makefile -intl/Makefile -po/Makefile.in -e-util/Makefile -libibex/Makefile -camel/Makefile -camel/providers/Makefile -camel/providers/mbox/Makefile -camel/providers/pop3/Makefile -camel/providers/sendmail/Makefile -camel/providers/smtp/Makefile -camel/providers/vee/Makefile -camel/providers/imap/Makefile -camel/providers/mh/Makefile -camel/providers/nntp/Makefile -composer/Makefile -widgets/Makefile -widgets/e-paned/Makefile -widgets/e-table/Makefile -widgets/e-text/Makefile -widgets/meeting-time-sel/Makefile -widgets/misc/Makefile -widgets/shortcut-bar/Makefile -addressbook/Makefile -addressbook/ename/Makefile -addressbook/conduit/Makefile -addressbook/contact-editor/Makefile -addressbook/printing/Makefile -addressbook/backend/Makefile -addressbook/backend/idl/Makefile -addressbook/backend/pas/Makefile -addressbook/backend/ebook/Makefile -addressbook/gui/Makefile -addressbook/gui/minicard/Makefile -addressbook/gui/search/Makefile -addressbook/gui/component/Makefile -addressbook/gui/component/select-names/Makefile -shell/Makefile -shell/glade/Makefile -mail/Makefile -data/Makefile -libversit/Makefile -libibex/Makefile -calendar/Makefile -calendar/idl/Makefile -calendar/cal-util/Makefile -calendar/cal-client/Makefile -calendar/pcs/Makefile -calendar/gui/Makefile -calendar/gui/dialogs/Makefile -executive-summary/Makefile -filter/Makefile -notes/Makefile -wombat/Makefile -art/Makefile -default_user/Makefile -default_user/local/Makefile -default_user/local/Calendar/Makefile -default_user/local/Contacts/Makefile -default_user/local/Drafts/Makefile -default_user/local/Inbox/Makefile -default_user/local/Outbox/Makefile -default_user/local/Trash/Makefile -tools/Makefile -doc/Makefile -doc/C/Makefile -doc/devel/Makefile -doc/devel/calendar/Makefile -doc/devel/calendar/cal-client/Makefile -doc/devel/calendar/cal-util/Makefile -]) diff --git a/data/.cvsignore b/data/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/data/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/data/Makefile.am b/data/Makefile.am deleted file mode 100644 index 1748709438..0000000000 --- a/data/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -mimedir = $(datadir)/mime-info -mime_DATA = evolution.keys - -EXTRA_DIST = \ - evolution.desktop \ - $(mime_DATA) \ No newline at end of file diff --git a/data/evolution.desktop b/data/evolution.desktop deleted file mode 100644 index 48e0fe2d32..0000000000 --- a/data/evolution.desktop +++ /dev/null @@ -1,20 +0,0 @@ -[Desktop Entry] -Name=Evolution -Name[sl]=Evolucija -Name[da]=Evolution -Name[hu]=Evolúció -Name[lt]=Evolution -Name[no]=Evolution -Name[ru]=ü×ÏÌÀÃÉÑ -Name[tr]=Evolution -Comment=Mail, Contacts and Task. -Comment[sl]=Po¹ta, stiki in naloge. -Comment[da]=E-post, kontakter og opgaver. -Comment[hu]=E-mail, névjegyek, munkák. -Comment[lt]=El. paðtas, adresai ir uþduotys -Comment[no]=E-post, kontakter og oppgaver. -Comment[ru]=üÌ.ÐÏÞÔÁ, ËÏÎÔÁËÔÙ É ÚÁÄÁÎÉÑ. -Comment[tr]=ePosta, tanýk ve görevler -Exec=evolution -Terminal=0 -Type=Application diff --git a/data/evolution.keys b/data/evolution.keys deleted file mode 100644 index 91d5372ac0..0000000000 --- a/data/evolution.keys +++ /dev/null @@ -1,7 +0,0 @@ -text/x-vcard - description=address card - default_action_type=component - default_component_iid=OAFIID:control:e_minicard:f9542709-fb31-4c6a-bc00-d462ba41e4b9 - short_list_component_iids_for_novice_user_level=OAFIID:control:e_minicard:f9542709-fb31-4c6a-bc00-d462ba41e4b9 - short_list_component_iids_for_intermediate_user_level=OAFIID:control:e_minicard:f9542709-fb31-4c6a-bc00-d462ba41e4b9 - short_list_component_iids_for_hacker_user_level=OAFIID:control:e_minicard:f9542709-fb31-4c6a-bc00-d462ba41e4b9 diff --git a/default_user/.cvsignore b/default_user/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/ChangeLog b/default_user/ChangeLog deleted file mode 100644 index 69427ff050..0000000000 --- a/default_user/ChangeLog +++ /dev/null @@ -1,69 +0,0 @@ -2000-07-12 Chris Toshok - - (install-data-hook): ignore error on mkdir. - -2000-07-12 Chris Toshok - - * Makefile.am (install-data-hook): create an empty news directory - in $(defaultdir). - -2000-07-06 Chris Toshok - - * ldapservers.xml: break up the uri into it's component pieces. - - don't store the uri in this file. - -2000-07-05 Chris Toshok - - * shortcuts.xml: remove the Internet Directories group. - - * Makefile.am (default_DATA): add ldapservers.xml. - - * local/Makefile.am (SUBDIRS): remove Directories. - - * ldapservers.xml: new ldap metadata. - - * local/Directories/*: remove directories. - -2000-06-01 Ettore Perazzoli - - * local/Inbox/mbox: Removed `
' from the main text so - that the welcome mail is all visible when loaded into Evolution at - startup. - -2000-05-10 Matt Loper - - * local/Inbox/mbox: Commented out currently unimplemented shortcut - items. - -2000-05-10 Christopher James Lahey - - * Makefile.am, local/Calendar/Makefile.am, - local/Contacts/Makefile.am, local/Directories/Makefile.am, - local/Directories/subfolders/Bigfoot/Makefile.am, - local/Directories/subfolders/Netcenter/Makefile.am, - local/Drafts/Makefile.am, local/Inbox/Makefile.am, - local/Outbox/Makefile.am, local/Trash/Makefile.am: Created a - proper EXTRA_DIST section. - -2000-05-09 Christopher James Lahey - - * local/Directories/subfolders/Bigfoot/.cvsignore: New .cvsignore - file. - -2000-05-09 Christopher James Lahey - - * local/Contacts/Makefile.am, local/Contacts/addressbook.db: - Removed addressbook.db since this is now handled by the pas. - -2000-05-08 Matt Loper - - * shortcuts.xml: Removed unused shortcuts which point to - unimplemented folders. - -2000-05-08 Christopher James Lahey - - * local/Contacts/Makefile.am: Install `addressbook.db'. - -000-05-06 Ettore Perazzoli - - * default_user/local/Inbox/Makefile.am: Install `mbox'. diff --git a/default_user/Makefile.am b/default_user/Makefile.am deleted file mode 100644 index 2cff4d1435..0000000000 --- a/default_user/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -SUBDIRS = local - -defaultdir = $(prefix)/share/evolution/default_user -default_DATA = ldapservers.xml shortcuts.xml - -EXTRA_DIST = $(default_DATA) - -install-data-hook: - -mkdir $(defaultdir)/news diff --git a/default_user/ldapservers.xml b/default_user/ldapservers.xml deleted file mode 100644 index 5469fecc52..0000000000 --- a/default_user/ldapservers.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - Bigfoot - Bigfoot - ldap.bigfoot.com - 389 - - one - - - Netcenter - Netcenter Member Directory - memberdir.netscape.com - 389 - ou=member_directory,o=netcenter.com - one - - diff --git a/default_user/local/.cvsignore b/default_user/local/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Calendar/.cvsignore b/default_user/local/Calendar/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/Calendar/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Calendar/Makefile.am b/default_user/local/Calendar/Makefile.am deleted file mode 100644 index 9117ae6373..0000000000 --- a/default_user/local/Calendar/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -defaultcalendardir = $(datadir)/evolution/default_user/local/Calendar -defaultcalendar_DATA = folder-metadata.xml -EXTRA_DIST = $(defaultcalendar_DATA) diff --git a/default_user/local/Calendar/folder-metadata.xml b/default_user/local/Calendar/folder-metadata.xml deleted file mode 100644 index 9313cb5f50..0000000000 --- a/default_user/local/Calendar/folder-metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - calendar - Calendar items - diff --git a/default_user/local/Contacts/.cvsignore b/default_user/local/Contacts/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/Contacts/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Contacts/Makefile.am b/default_user/local/Contacts/Makefile.am deleted file mode 100644 index 6c0407f9e4..0000000000 --- a/default_user/local/Contacts/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -defaultcalendardir = $(datadir)/evolution/default_user/local/Contacts -defaultcalendar_DATA = \ - folder-metadata.xml -EXTRA_DIST = $(defaultcalendar_DATA) diff --git a/default_user/local/Contacts/folder-metadata.xml b/default_user/local/Contacts/folder-metadata.xml deleted file mode 100644 index dcee1ec826..0000000000 --- a/default_user/local/Contacts/folder-metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - contacts - Contacts - diff --git a/default_user/local/Drafts/.cvsignore b/default_user/local/Drafts/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/Drafts/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Drafts/Makefile.am b/default_user/local/Drafts/Makefile.am deleted file mode 100644 index 144b8bb834..0000000000 --- a/default_user/local/Drafts/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -defaultcalendardir = $(datadir)/evolution/default_user/local/Drafts -defaultcalendar_DATA = folder-metadata.xml - -EXTRA_DIST = $(defaultcalendar_DATA) diff --git a/default_user/local/Drafts/folder-metadata.xml b/default_user/local/Drafts/folder-metadata.xml deleted file mode 100644 index ee9cafe3b2..0000000000 --- a/default_user/local/Drafts/folder-metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - mail - Drafts - diff --git a/default_user/local/Inbox/.cvsignore b/default_user/local/Inbox/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/Inbox/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Inbox/Makefile.am b/default_user/local/Inbox/Makefile.am deleted file mode 100644 index ed3ecd58d4..0000000000 --- a/default_user/local/Inbox/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -defaultcalendardir = $(datadir)/evolution/default_user/local/Inbox - -defaultcalendar_DATA = \ - folder-metadata.xml \ - mbox - -EXTRA_DIST = $(defaultcalendar_DATA) diff --git a/default_user/local/Inbox/folder-metadata.xml b/default_user/local/Inbox/folder-metadata.xml deleted file mode 100644 index 64cfbadfc3..0000000000 --- a/default_user/local/Inbox/folder-metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - mail - Inbox folder - diff --git a/default_user/local/Inbox/mbox b/default_user/local/Inbox/mbox deleted file mode 100644 index 9b3910df46..0000000000 --- a/default_user/local/Inbox/mbox +++ /dev/null @@ -1,2225 +0,0 @@ -From - -Return-Path: danw@helixcode.com -Delivery-Date: Tue May 9 11:16:21 2000 -Received: from trna.helixcode.com (IDENT:root@trna.helixcode.com [140.239.238.2]) - by twelve-monkeys.helixcode.com (8.9.3/8.9.3) with ESMTP id LAA26395 - for ; Tue, 9 May 2000 11:16:21 -0400 (EDT) -Received: from twelve-monkeys.helixcode.com (twelve-monkeys.helixcode.com [140.239.238.12]) - by trna.helixcode.com (8.9.3/8.9.3) with ESMTP id LAA02867 - for ; Tue, 9 May 2000 11:14:49 -0400 -Received: (from danw@localhost) - by twelve-monkeys.helixcode.com (8.9.3/8.9.3) id LAA26391; - Tue, 9 May 2000 11:16:21 -0400 (EDT) -Message-Id: <200005091516.LAA26391@twelve-monkeys.helixcode.com> -To: Eva Lucy Ann Tester -MIME-Version: 1.0 -Content-Type: multipart/related; boundary="----- =_aaaaaaaaaa0" -Content-ID: <26389.957885364.0@twelve-monkeys.helixcode.com> -Date: Tue, 09 May 2000 11:16:21 -0400 -From: "Helix Code, Inc." -Subject: Welcome to Evolution! - -------- =_aaaaaaaaaa0 -Content-Type: text/html; charset="us-ascii" -Content-ID: <26389.957885364.1@twelve-monkeys.helixcode.com> -Content-Transfer-Encoding: quoted-printable - - - - - Welcome to Evolution Pre-Release! - - - -
- = - -
- = - -

A warm welcome from the whole Evolution development - team. Thank you for helping us test Evolution; with - your feedback we can make it the best groupware suite - available today.

- = - -
= - - -

Getting Started

- -
- -

On the left of the Evolution window is the Shortcut Bar, with - icons labelled Inbox, Calendar, and Contacts. You can click on those icons to jump from one tool to - another.

- = - -
- = - - - -
Inbox
= - -
Click on this icon to see your email - all of it. Your - Inbox is also where you can access Evolution's powerful tools - to sort, filter, organize, and search your mail. -
- = - -
Calendar
Network - and share your calendar to keep your whole - organization on schedule and up to date.
- = - -
Contacts
= - -
The Contact manager holds your addresses, phone numbers, and - contact information. Like calendar information, contact data - can be synchronized with hand-held devices and shared over a - network.
- = - - - = - - - -
- = - -
- = - - - - - -------- =_aaaaaaaaaa0 -Content-Type: image/png -Content-ID: <26389.957885364.2@twelve-monkeys.helixcode.com> -Content-Transfer-Encoding: base64 - -iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABGdBTUEAALGPC/xhBQAAAAZiS0dE -AP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9AFAhEcJQyUsSkAACAASURB -VHjabL3ZcuRIkiyqAByOLSJIZlZN95z//6Hzch5G5J5lZrqWriQZG/btPpiruYHZKVLSXZVkBBZ3 -czM1VbXkr7/+c++6Fnmew/sCSZJg2zY45zDPM/7885/4+9//hiRJsCwLsixDkiRwLsM0zUiSBGma -Yl1XpGmKtn2iqmqkaYp933G73dE0NZxzWNcV27Yizz32fce2bfq7+75hXTcURQHvc+w7kKUJrrc7 -8jxHlmXI8xzrumJZFgDAy+WMfQfGaULfd3AuR5qm2LYNAJCmKbquQ13XAIBt28K1O2zbpj93u93Q -NA2SJNHfA4Asy9C2LZqmwb7vh89YlgVJkiDPc4zjgCRJkWUZvM9xvd7gfY6iKPHx8YG3tzds24b7 -/Y6Xlxf9rHVd9fklSYJ931FVJR6PB+Z5Rl03uN1uOJ1OODUNxmnCMAzw3qPwOQBgmhc4l2GeF0zT -hDRN4ZzD4/GAcw7TNOF0OgEA5nnGvu8oy1LvbxgGZFmGrutQVRWausK8rGjbFmVZYhgGNE2D3GWY -lxXbtmGeJyRJqp+fZRmcc3AuQ+E9lnXFMIxYlgWPxwOnUwPncuR5jnmesW0b8jzXZ5BlGbIsxTTN -KAsPX1Ro2ye2bcPtdsMvv3zHum7h9xy6rkOSpMjzXJ/bvu/o+x7OZfC+0Pt9PB749ddfkSTAum6Y -5zk8dyDPPfLcYV1lHS7LgjRNkWUp+l6ey+12w+vrK/Z9R5IkuN2u8L5AXdfIsiysaVkT67qCf5xz -KIsCv//xB15fX8NzTnE+n+F9gc/PT2RZhsLncC7Hf/7nf6E5NZjnGWVZoChK7PuO6/WKt7c3fXdN -XSFNM3R9jyRJMAyDfFdZoqpqDEOHdd10bX1+fuJ8PqOpK+R5jmGcdP8kSQI3zxPSNEOeeziXYVlW -fXh84Fxs27bp/+dGybJMN5M3P1dVJaZp1oeR5w5pmmKe5d+fzyecc7oQk8Rhmlp0XYd5zrFtG+q6 -hssyDTphfyJNU6RpinGadBHxpUtg2jQATdOMpkl0ocpmk2vs+14XYha+x75E+f1JAwg3Lu+Jf/Lc -h8Uni0muN0XuMgDAOI5I0xRVVcmzcA7DOKLrOhRFoQFgHAc8nyucy5EkKcqywLLUsnGWBfM8I89z -5LnDs23hfQGfO92wSQINvlVVwXtZ4HVVYl5Wvb91XQ/P3jmHl5cXDVrz46FBQn4mRZKm2Pcl3Hse -3uWMJJFnwWc9z4v+ngS3DFVVY1kW3fhZKv9921Z9H/zzeLYY3z/0+vnMs0w2pssc8tzr5x/fiaxj -e4gBcpBs+66HFJ+DHD6brneuJR5IaZojy5weVgBQFCXKssQpbFZ+zrIs2Pdd11HuMizrgvv9JuvY -OQlYSND3na7pddsxdh3KqkSe56iqSp6TyzCFZynXI4HbFwX6fsC6ruH5J7qGPz8/UJYlpmk6HCzO -yRqRZybPbZ5neffruoUIUmCaZkzTiDz3WJYZSZJKVpCm+Py8Is9zbOFFcyMuy3J4mN4XaJoaRVGi -74fwIFPsu2y6fd+RpQmqqkKSJOi6Ds45VFWJNE1DJJPgkaYpun5AnQB8z2ma4vl8Is9zvFzO2MJf -JGYV8cYl0u260HmyM8jJZsrx8vIiGyWcuM45XbDjOGGaRl30/HwGkKqqkKYpvPdo6jqckDOKosAw -ThiGEUmSoK4rZFmGZVlQFrJIJdvx8D5H23YhCDsU3uPZtti3DdM4hcxMNhoXmHMSJJM0xTRJICuK -Iiws6CIch10XUpqmaOoaaZZiWzcNoAzi0zTrBuA9TtOMYRj13m1Ak8zMI8vSsIkWzQ64OadJMgFm -CO/vH6jrWt8XN2vMroCyLPSkkw2wIctkffX9U7PBLE303mQjePOOFw0Az7ZFkqQagJjJSrayYFlW -zUTWdQ17QLILCVapHijOORSFx75t+m6TJNHf5Trb9h3zvMB7CRi5y7Bushb5nJkV8x3UVYmyOmEc -O+R5gXG6Azh+/vPZ6gHrvdxvlib6/Ppe1hGzWhvE123XYMLrdNyIcmFTSNWc3gwXAX9OFuCmF87/ -pidFkqBtO11EXAgMFAAwLyucy7CuG8qyRJIk8CED4SmUpRmmeQoLzZuMQ05Gpr88mXkPf/z+J5pT -oxuTfyQFv8E52Sh5nuvJJRt+xTTKC73fb2FDlchzp6eKDTRMsfZ9R+7kOd3ud5RleThpm6bBt2+v -ckJlDl3fY5wmOc2cQ+4yZGGh8zrXTZ79vKzYwulzu900YMzzrCcwF1Lf9/C5g3M5+pDWT/OC2/2B -t7dM31E/DPqu5B1IOfR4PPS5LMt8CHh1VWKaFz0lsyxFmsbP5OaX8iPH8/nUbIf/bNuGYVg0SOUu -w2hKyHme9ZTMXQxwfL/Lsup75rNfwvsYx1GvhYGbz0WCc6Hvimuav8PgxQ3BNVuWBfYdmOYZdSgx -sizTTKdfh8P65jriRmd5XFUl6qpEmjl8fn7qu2Pg4J+iKNB2fcjUUixLxzz0EGT6vsM8zxiGFE3T -IEsTJGmK57PVbLSpa+z7Du9zTOOoQZSlii3nHdPKBEnYFBIZh2HUl/31j6YPYRNz4S4hzdz3HZJZ -ZADkAbVtGzd3+EwGiaLwmgauqyxGbiBZjE7xgmGQ07gsPOZlxTgO8TRMElS1RNyyKND1fXhxKbZN -rsX7HE1daTSU615wu91Q1xWcE/whz+VklvLIwWUO4zTpy2bq7HNn0tENXddpRsDNmmUZHo8H0jTU -ypnDskrK2HY9siyWJ/u+YxhGXcBMLcuy0JrVPud5XkKpsGDddmyznOqs2SV1zvS04QKUZ9shTTPF -XQDA5043HlPFYZx0bazrphux8B7DOGKaZnif4/F4AgBOpxOqqtRyIUnketouXpsvKozhJDyWDKmU -NF2v2RQPjySB3jt/j5vWOafZhJSEHmVZoO+9btKi8JrN2FOZ98M1lGUZfO4PWBKzV/4s/2Hw4j76 -vF5DEJVrABLZ2CF48vM/Pz+1zLEBK2Yly6H0mKYxZFYpiqLU4DZOsx6wDLbLItciWXSm1/n1z/P5 -gPvx4x0vLxeM4xguHJjnTqOUTauZDXChzvNyqMM0mCSJPtxtk438uN/x7ft3FN5jnCaN4ltIpfZ9 -1xSO0UletDyAYRg0SEhNLJu/KCTCDuMUUqMahc/hiwqDiX5JkuByueByOSPLCoxDq9fgnMPpdJJT -30u2UZUlXO4xjiP6fkCe59j3XR8kXwyBMZuplGWBfdswTnPAOuRE46kzLwu6rgsvPQOQ/UtQ0G4K -1vvO5Zim9lDSAID3XmvreR4wTjHaO+eQpQmWZT+8TwZOYijysznybdc6VDZ9zOb4Xpdl0Wzifr+j -rmMpxAzNZRnWkGJv26Z177ysGKf7IXMj0Et8hnWt9zFbk39HWCvukEr73CFNMwxhHe/7DpdlGEcp -QYqiwLZtmp00daW4wRjWyTgOWFfBnt4/PjSoSMaTKvBrMaLn84ksk3JIsJc6lHepPsOIc8VUndlW -4b1mbBL8FozjqBkF9x1BZv5cWXgkIfiMYwR/y8JrZriuK4ZxwOl8OoCVfd9j3zc4l8Odzyf88v27 -qZUSfTFyyuCQikmaNcP7QlFkbgBe4LIsGMYppGdyar6+veHlcoEvCjzbVoG0ZVm0ls7zXGuYeONA -13Wa3shLiXVr7jIkAUhq21ZPjbaTurjrOpxOJ3jvw80PSJIBfT/ooiL6630OXxQYpwnbtioSzbQy -or6rvhAJYIOcKAFR3sMC3sJL5LOqqhIuy9D1QwDsKgFHkwRdP+jG5POX551odH88W33RfB/7vuP3 -3/9A0zRYQ/DlZzCAyDUnh4XIf6T7w+7KimmeQrDYMC/xxCJAzLRdAr6UjHVdCfZTV5LKh3sc90mz -CHZTyrJUFJplpr0XBlnnMs1CuYmmeYkZV5oiyyLwPM0LlmXQ7GxZZs1KmZFIyVlI/VxUeDzuWnbI -ppSs5dQ0GMYxnNqJBhqu2b7vw6b3GkirqsRvv/2uHZfL5YxlWUNGuR9K2GVZUdc1cucE1BuGQ2a2 -batmPty07KBwDX58XjUYMOPJc4d9h64lCaqyx5Zl0cOZ2EHfd3Cvry/IfQEgh58nuMzpySmnw89R -j6eZbSexRcfOAVO1ovABIKuwY8e27boIuYHKsghYADDPqYIvy7LpTRIUWtYlpKGyOFnnykbzWk91 -XafdiWVZNCUlyPP5eUOSJHh9vSBJUkzTqBnOtm0YJ6K+PrysTE/8adr1dCCYJxtWntk///oMi+Ci -z0zR5dwhyySNK8KLWLfVBNCITMvvxv/PwMtsSzbXhDQAVWXhD6DY7XY7gJjDMGCaRtR1rZ/De5aU -8BmyqErxkRiMwvOeRq3/pTySANL3A5L0jHWbMHX9YVNL8KsEH0kTDGEx8n3Zzc8/LDW2bcUwTnoq -Lt5r+cNgl4fui63lidsQUPRFhWWWwyhNEiyhVGIwimUE4HKPItTeW+jqxJ/JEBIf5CEYFT5Hnhea -CXifYxylrOv6DkVZYN93PcjKshTAbhjweD4PKTrBTJsNz/OE57ONXaTcYVkyDVzTNGLfQ4u07zVj -A+RQBHZpP4aOEbOVLDsj+d//+3/tdV3h+WyxLHOoqTIAe2gnpOELF6235FQSpHvfgWHo0dQ15kXa -J0mShv8l8CIpaB96lkz7y7LQk7UJrbau75E7SXXvj4cGlKqskPscHyE1S9MMfd/rjTLQrOsKn3s8 -no+QLo9wzuF8PqFteyzLjLaVWvV8vuB8PmEYRuUrJEkaIq3cqwCj8v3crI/HU/vWPvRxiWssoV03 -jiPO57MAb/2AovAovA/YwxI2GMKGYneB4NikCDjATZhi2+REKbzH/fFAbur1pm7gco/H4w5gD4j8 -LFlHyLTWdcU4jmiaE/Z9U6zma7Cpqgr7LgHHlgwA0HU9yrIIte8SShjJ0oQvIFiJPTTk/yfa7dh3 -CTLrKmBcURT6/ZIBBMAynLTe+5AF5aGrk2gLERAQkF/nQ4CQz0PoFMza/ZFywOsaZwAiCMnP5Pr9 -+PiQ9dk0ep3DINdcVQU+P69aoo3jiLoqUdVnDEOLMWQRzNj4TLLMBUxhC1mCZDvbtuJ8voR3Ks+B -e7Pve5xOTdjcUlrxsxjgvc9xu93R9x2a5oSiiDgG12/btQdgPvnx4792/gderHMOwyAtvOezxa+/ -/orH46Fts0iYyFCVJT6v14B+p/rQCU6QyGD751yIZSmtP+IPrMN4wuz7jo+PD/z66696MhJMKYpC -ywWmPkmCkOJLRK2rCu/v77i8vKCqavR9h2URwkxZljifX5AkGdZ1wPV60xbP89lqjfTx8YHv37/r -M4mdkUlblvu2KQZhEd7L5YL39w8NJnKCRsBPUjz2/ZMDQMPP+Pz8xMvLiy7UsvBS2vSDPhP20omU -82fZqvzbv/0bukCSWZYV5/MZfd8pnhPRfTlV6rrGPE3o+h73+/1AhGEaSsIS+/nO5TifGiRpisfj -qTjO7XbT989Fx9//+PgIQarWGp3P5vF46Lv69ddf9fRNwuZvu16zL7YlWVJwjZKItK0bmpNs4HVd -NRW2YCezRa47tpp/+8fv+Pf/8Xf88v27Es6kPe51vTKl5+exXBBQeMAvv3zTLIt7Zllm3SMsd7uu -w/l81g5Jmqa43e44n09I0xSn0wnrsqALHZ9hnDDPsxLDhnHS766qEmmS4P3jE29vrwo8E7dj9uey -LNN+KlNKvqiiKFB4j3/+85/Ytx3fvn+THqipUduAegvjrJFI9i9ALNvrJamhCiUEA4psoECkyF04 -YaS1QiLHNE3aA04S2URVWSpCz0CSJInUccty6JNy0VRliW2b8f7+Z+ixh99DoimaBKPUoPEbkkR6 -8WVZhgXvsK0LxlCGcONKytdiW1fkudNsRTYqF56kqoXPw/1tyrRzTtpx87wc0t15WTGHvjUDDhev -dBAGTa8jHtJhnidsm3zm4xE3ex5qWoJSbAnak5vvzmIPxGQkBZdDwAYulnnPkOI2TaP1ts8dXJYp -wHdqhCn44/1d61OSYoZ+QOE95mUJPJVJDyKCeNuWK4bD7hNLvW3bcL6c4b3HqanR9YMwTbcN03wE -RW3qXJYFvC/w/ZfveHt7Re5rTIHjwEyFwHVRRH7INI0YBimzqqrGOE7wucc0zXp49AE3syVPkiQ4 -n884nSQ7e7YtnMv1pF/XFY/Hw3QfsuO1h64Wn5/PPdIsRZokmOcFfT8oDmBxIMeTna2ibZPTqq5r -TNOEddsDcFLjcjnracFFSYCKNS4/r6oq9H2P5/OJl5cXZf7xu9Z11TYdb1BeZiAoZE5TNgJPSZLg -/f0D57OASfxettQ+Pj5wPp+VSEQgqOsH/QyeQG3XGcDJacCZA/AipYcH0OK///sf8D7H29ubAn3T -NIVuxnBgmFmG4Lpu6IceRVlocKirUjc7f29eVmGOhWfKHjxbaFw4Nl3lhrSdAAZAkotut5vWuNys -XKQEJplKp2kqLahlDjjHFFLpCCbyVJW2VCTHrJt8b1l45SEQnS/LCk3TaPpKIJHlonMCvO4Be7D3 -VVcV5vCc9y+EL6Lzuwl+PGF3fX855nmVNmfukLkc29YpuDgMg8kkc91UQkWXtmHTVFiWFX13MyxP -6Tps+64Z7+3+EKwol/KiaQRn+fHjHffHQ1vB5L1YYJB09Dp0JoSjkRvsZ1EMiP898jkyDYQ8LJM0 -xe1+l0MgrKlpGjHPcqjbbNYRuWfqI+kR9N/7fsDLy0tI8Uu0bYdhGDRKc2FL6yUCX2VRoG2fUv8H -cMs5Sf3IxGPqbxl62hoMpBzb7tq2DW9vr3h9fUFdN7her6EF5LGuUmeTLdf3Nz0p2BbiRuILIK8+ -z11AjldlSvHnkyTBr7/+gqIo0DSNdhpI+2XrzmokyNbi9zJtZpdhWzfcB8kYqCN4PEYFE4m6p4nT -mn+cJkzTFAJYeih92DPm7+Yu03dDlucwjApkEjiKYF7M2NjWfDweaJpG+8jHGjYzVOBEg2WSpsjC -Pe27dAmyLMXp1EiNPPS68Xi93qeGny/Pz4UaeZwm3O4PfA8AM4HJ2H9fvnRMoGAhsYXcZfC5Q9v1 -uN7uShcmPySu41wziGEYQ8a04Xq94+0tVSajtsS1I7ZgMUGL7eoECdZlASDvRJ5FYDBmKeZ5N5ia -4C5VVSs+Ro2JpRezfOEfliNt22JdSyV/2T9sgRdFibqOnJYlXK9j7V54j7br8ecff8IXHlVVaY06 -zwv+/PM/Q4TLlXxDUIQvhH3SsijgCxE0nE47TqeTElKKokTXtVq72jYQe8pFUQSAcdceMmub0+mE -wnuJwuGF9cMQePUlTk2NJBWQ0PsC+xbTO5bZTJ1tWvvx8QHvC21TsWVjazqi76xHheyR670wiEnw -3A7tNv7d4/HUFy+YSxQ68Tn2fWcWdqTsWk6AZb7xDwUnz2WGn5dwLysys4lZ6qWpUE/ZzmNWwe8p -AtawrdsBVyAhiO1etummeVfaMIFj5xy6bsAYKNG2FZYkkYGXpbHlx3SVB5AtKyzvnRnl17KL77oo -5F2yJczsk6Sqvh8CMSuDz4Uy64sK7+8/VHB2OuVBaDWHzGkzQTDVg4zXxeyS19h2nWZQ6yoZTtPU -AFKs61OvlZhW7qRDdAvfF2nQobMROBjEuvZdshV+X1WW6Ppen+u6SmZpWYzM+ngfjkgwF1nd1HAu -w+nUoO8H7eOfTiejqltRVTXqWoA1exLu+45xmvBsW72J5/Op7ZdpHPXBuXDDBPd4WtmUlui1jYTP -tgPQaUfBplPLumJoO6XkkvwhAKU3GgGz2L03hJNMyxirDnw+BdiiUjGyH/GTipBlDhFsZiUA8P7+ -Hlti4fqE3lxiGgXN/fz8RF3HrIxZBBcauegsaxggmRnY5yGAmQQUKwhyzmGaF5RFEeraCEaNo5QI -VVX+lDFxE/FkoaCF74tkoNxJm1DqUXfQI5DPkTuHHXvAJR4a+C0piKkt01YudoJ/3nvt1BA74SZ0 -gWbNYOW9V/xBxTjrhonah73T35W2aoHb7aZZgsVaJsOH+CoqExJZjmfbout6NE2jJLlt3fD+8UMz -NB42SZKowk/S9CxQ0Qfd2PO86SHAcrMoPBIk2LEjzVLtiKgyNrQf+Tz7XoIGW4LOLjCypC7nC4qy -CqdZxASaptH0TjYlDmQhLrwpBBMGi2mSE+Ya2hWsQ6xIiIANU/ay8Pi8XnXzE3VlXz/PhXPO9ImY -gDMABwAs64I0TUz/NJJPCJQJ9Tc36r5c+7n237lgSPf9ypYk1TbiHJtmMNwcTdMcGGBrAAmlRz8j -CboLLgLbossy+VwBlNKfWm15LpRg8tgFcFwUp7GnFkFKboxpmhRniF0KwXReX18VYRe6ao4xoNrc -FJYtSLCWp81kGKPK46c6MFCWlUUYiDH8OX4HM0gLKgufIdeUX07qTDcWAFxvN3z//i1QaVleThG/ -CCfw9fqJqqo1YOfOhe6GU9BZuBSjZsZ57nVtc42s64p+GLD3MevgZxIE5ua3JWkkvsk1tu2odT9B -Q3vIxKx71extGEYjFoskO5EgR6FUmsQunYtgD4LwRaSnw+2K6/WKruuNcq/VL5GA8TjwstmO4Yti -QODNVlWlCDNPWda99CMg33wYJxRFiaapUVXloUZnPcbAwBNx3XaVMUcCjjC8hKJaKl+dbcjC5wc9 -t6X9WoGOBRBPp5O2bSzPnp97bC1FZFnr3twhDzx6BlDZ7HPcrGlyUIpRT28ZcrZ9ZaXZfT9ocCPI -6ZwwDu1GZNCzKkc+V5Kx+LMx3ZbT5Wutyc1vWYgSrISIdL890Jwa1EGown9Enz7rKc3ft5tz33fc -7w8jtXWqg5d03wfQrjhQghk4ZPMJRbcqS8WXuOmkz3/Ssu09dCOsepOfGQVxWShxxEujaWokSJRN -S6qyc5IRJAk0y1aKcZpg/cLaJEef3hjEPfi+vBeOP/8b1bQ2A/ntt98AAG9vbyoNJ/W564ewTybh -IEhNAqgsuCjgco/n8xEkslK3jON0ZFoFfjvJOxaRPPLUowFH7jLk395QljVOpxHjOKlAwzlJS3xR -4Y8/fkfX9Xh5uRiBxBo2BZREI+24ImQDbaghY50mJcSMNG1EELRuh5qN1ziG048LPUkSXK+fmKZa -a1XNBFymqDXBwCxN9Hu5OEiRXgK3m1TOJAHartcTlKkvF5yeotse0rnk0AkYhlgSMWjZzc97Jxst -4h+iBbC1Mr8vS5PIyjNGKXJ/sUPEhON6u2pXwX5eZF7OyHOvmw8ALi9nZT92oSUahTUpytIHZucE -73MlMvHaRdwyYtskcyL7jTJ0fg/bpwfNe9Bb7DvgcockaFH4rtSnIMs0QHGd9GFtD+OoWg4CeTE7 -9MjzAsMQO0up4RlwfU3ThI+PTxV2jdOmhwp/lp9ZVTnqqgL0cIgdDitIIpfG+1zlySQtff/2DX+G -5zdOk3IAZB2mqCoPlyYiJ0xVpDFhWYXhVdcNHo8n8lxAk64btaX0z78+0TSNRhZeoFBTi6j9z1Ij -TpAbTZMEZVUjSzO4oFqa51nbQ1mW4eVFhDt//fWOv368B7Q+V+CLG2dZVgzDgPv9Hii/lVKUmbKn -aYr7/diCIVouRJb5IL4AgKY5aXbDjcZSyaaQEtj84YUwIq/rGngAudaR9pTs+14XHx2Y+DnMHsho -4wJi6cJ692sb0LZVy6LQAIwv0lkLvq7brqn4uu6HFHNdoypN3uVyUCVaujAXM4VFs9KSpRPAVls/ -DIcM0foF+NwHSngsTYpgDOKcQ1PX6AMWQAbmPC8q5OmzKP+NJUnEqO73x0/CK1u+jIHVum1bbAkb -jQIPiVml6Ahq1+ehKzIvUGMYObh2pSZXVa2OWsxA+BxIBS7LArn3mOYJ5RrNWabQ+bCZqZWU7/uO -19dXnE5nOFejLB8KrlrtBUtiR8KBBZzIxmNt9fHxI8h4s/AiMhXvUCdOCjBBv7qu0bZP9H1vNgV7 -7Su6jw89hVjDcGOQFVYUNcrioVROy42mDRJTIql7C2Wj8eGyxScLdA7uPV0gWayH+o01mqTkTk9E -vnxGT4Kgqi0PVlx8bsQH6tBJYSDxPkcaEPgu1IhFUSihaFnuuoDi5lj1ngl++dwZwk2q7EdKTKuq -CifQCmA/gI3blh+YiAxq879webL4EHUI8QSRUoaZDDdUFF/lyjQkbkHg0rZG7SlGfsbXMmKcJs2i -mCFEUll0JErTTU9nbnoi9rv2wyeT0UQO/v1+x+VyCSB2zCCIwpPJR5zCOjQx+3HO4ePjA+Mw4Nv3 -76EMW1UYJ98p+BYADNt4MDexRh3TNCt5x5aoNlPghp5m4cpwrQmT8o51/UTbtni5/F1BeWbjxPDS -57PVupm+Y87l0Zwhd6rhtzVTXddClKgrVbzJgi7Vvkkinbj9WCMNe2rQt4/ZAhf2NE24Xj+CR1qp -9S83QlVVKLxHlmYqA67rGmVVI8+LQ0RlUCmKEufz6eCe4wLYw2uTzseovz+ZhRpPqtgh+Pz8xDgO -B5MMnhRdIEJt24a//vqBHz9+hJclC3rbNpV19n13wAoIaJVlob5x9DlIzAZJDVeiacQIpa4qTPMS -ar0l0H4nNe0Yx0Flsgzy9iSyGvTPj6tufouLLMui4F1E93MFL6WXPh8wBmvYYSnT2hpE8pM3wDiO -+Pz81ExJXIGGw+flAWMiuJpqCbipIjBmMcF0xljbSXu6ONiFRaOYBX/99QPjOBpzkxW5yapYio7j -iLbt4IsCL5cLTk19AIopCLrdH3i2nQkK8TpyFyXR5ATwmVlcxNrYuX8hOY7PfVdNB1vPlrLsiBA2 -Ta09ajHv8OJk8pMtE9l+/qCk8j5XhJk/fz41+PHjB1LVGgh6um1pJOcEezBp0Xi0c6engvc5ltlk -J4Fwwo1N7MGCYY/HQ1+2JbBwQQl4lCuHWmpvYR7OATWVk3INJJhUAxo30MVu8gAAIABJREFUQFWV -8ME2TbIbOdmfz6ec6OcTPj7E146p1+VyRl3XOJ1OISgEvCFNNdLbAKn2UqFEs+41wzBqS4wLgr3v -fZd2EF/0V8cbZhV5Huvz9tni8iI+CQR5WU+fLydcLqKlmOdRuxpW2mr78Lzmqixxf9wPBjJ2kfIk -svRwptX0tGOwvVzOxoh2O6S/Sch0+FlDIAJF78LsIDPm2pyDToLt2PtdSkpmbTGjS1EUhfhIBJeq -aV7QdXc1IJVW84BlmfH9+zf8/e9/R55fMM/PQ0s28iicZr7btuGf//wL3uc4nU7BF7INOpNKRW5s -RTP7tGYoq8G2bGlFOT5l5F+9IPd9h2PKtK1iO3W5XA6KKqtoWgJ9kzUgXxi982xaxowiSVJMc+T6 -F0WJtm21sxB9AyJoxii8LLKQ81ADrtuukVuygcimsuSe2D5ag/Bo0F63DQT7Lh6GQu3tNbWk4y1d -YIvC43Q6oSyEWkm9+bqJzLLwHi7PjaXWeshabCoqBCVxRiqKAknQ+0fAMtOSpCg8tnVVLoYYps5a -L1vHIEuc6XvxJ4jsulzTTMpBq6pU7gHReTHvXPV9sJwRk5TNuETFQ+GrMSWNPeXkS/V05s9pmRHk -3l9bmRTh8H5ut0/UdYlT04hrlYvlifoOzssBS7Agme2+0FKLh5pz2UFNSsCVz/e3337HNI0oy78J -dyDQnOMBkx9wInatksRhnu+4hjb2UUrvDu1dcScq1Pm57TpUlVjllWURCTuO/IRC3bDkvmIwbNun -4ixRFu00gNhDUa9HPc76QXvUzmWSChsFk233WbOQrwwyopgAsG7Sa57nFxUKRdUZKbtDQHjl1Kuq -UqWokmYuX4AxKPhiRTSWiMRNzgVMjIM37XOHpGm0TKFgZVlWTQXLosCOHS8vL1JaFB5dP2hrkWk6 -PfTGadKIneeFtpxsCryuW2jxrAY1Xw/GnFJvjtphGacJuY+eiGS45U5MNyzKb/0ZyTMg9pEkCZL8 -qFOY51lBJZFn1+b5RV3DNVhh2xadXfg8RK7Xm5ZWLK/atkMV3GgpGrN1rGUZCjU4PxwwcoJDn4X8 -vQseiaUCzyQXxSxqC2Yc8XSkY1KkvMt1p6FtV5YFXF7h+f6hmdztJmy6W8gQRKknG7SuxKWXrWU+ -k8/PH5rB0Udhnme1Xmd5RUD9crlIlqTu2bVK03k/47hr5uBcXPepOfFJZiPJx7oCiy16XCe0fU/+ -z//5X/vj8VRTDrFRzvDb77/Be4/z+aInBxcrRSqsU6lbV5useQl24tHuyAcbL0kbl3BaSruRCy5L -E/iixDQO6PohGC4kwe64Umvxr6mOJSzdbleUZa1mDYJnSPvEuRxd3wWXlFm9BdVBxWWY5lk12tSm -F97DF+K0ynsjKMNFFlmLW6DB5iqPZtB1mTDfqImnr0Gkli7hpe8hUOWqracfAGWh+77hdrsbYJY+ -+8vBaisq9/ID/kLd+7atSqwqiiKAXfvhpJ/nGVVZBTOWFV0XsyWdCZA5vH98BE/7AmnIPKg/T5JU -/e5YTt505kOqPA8KYaRd2GlGJn4Ondaz4zgdNlN0SkpC5id6ezo08+/2fQte+ZfA7pNSj07ARVHg -+XzGtmySoKrPWGZx7dkCZsJ16PP84DfA05228FxbDERlWQWMZNDNSeyJfgrX201LTV6zDZgHe7V5 -0QxBOgJO1znXEvckM14+w6IokDwf/9yfbXsQeJAAQSeY86nRejsi8YKGF0V5kCHaVlXuMvz2+x/4 -29/+FvTjz58svK0mO9Y0q/aTu65Hnjs0zUlRZ56eLBektSWnOb322Wa53x94e3tV9RNLA74knrxM -+cn7Jjg5DAMulwvSNMXH+wfKqlTbpwhMrYeoTiBUvl/QZZJDxARjCItuOqTPdpAJlXX//Y9/KJOL -15bn4u5jdd/zsqIqS01Ref8fHx/45ZdfVL02m3KMmQjNPE5NLR2BgOVs24YfP97xyy/f9dqp+rSq -Tm4IMSapdLCHVWgKVhJZjGkipBnKodkdsG1SKcHu6qqcJgl+hNOZFm9lUWAYRziXmRIpV0n3+/s7 -/v73vx06Knz+r68vanfPNVuVJdquk9Q59/jt99/x9vamknNiTdZUg+vADpShnPx2e+DXX+PzL8sS -27ppt4OHxLIsaOoamXN4f/+h4qR//vMvvL6+Hmp8i39IK3nV098CtWma4uPjAy8vLxo0qrLEsi64 -XsU23M1m2o8VyBQ+x7rt+Py8Kjpv/dFlkZUB/ZwOZYC2Gjbp0d7vN0VRrYjEAiRRMLOYm5VT6uXl -BT73yAJ/XUC67QAokesstEtyvRcF7yLivx0AM0tisRzrLE2Auj448J4vZxRFoToJy9GnSIc22uu6 -YUljej+OA7quDfxur4gy68+27XS4CkuLx/V6QOd5HZYOHU8Ah3Vbf6rz+L5GM8uBz4/PnaIuOvHa -dxy177HWJMvQmrRqgNt2TGN/mPyUqTlndgD95KSnD+N8GNwicxKE/EMtvQuALSfqDKNIhX3ucLs/ -sG2rHhTX2101AkUInrynqpIAKwq52tC3U8F2QqYkLj3Cv7BlmzUesd2mWILCeChk2jYUyvHtUEJZ -KvBvv/+u8ykKnyvXwe5N+25YEpJfIG3t5QCME5inj8Lj+dSuR547uLLwaNdVQTu+XDHNzAPqWKqW -2+IA3PzcfOmX6MQBBnXdBAOOVfXJtu6z3upH89EFbfvE9+/f0HbdwZU1puDRY0BkwZtaP9t+McEz -a39t6Z1WJcg2IO+rKkvMQQjkMqfKu7Z9hsk3cYoNBUkE7uJCyBWM25RFKKdWXVXB2nsF4IKcOlqK -83eYLsahHBEITBIcHJv54lnL871xQVufO/otZlkalHOZtg/7IFDJUvHhZwAh9iOjukY11ByV3vyz -1Xbhc8Uc+N7HadbgxO4Hs7/oiZAoBnA6iWNOUVaaDUYwrURdVUgzh6oKa3mVcoB6BF2bQQtRFF7p -xTtk07NWJzGMAY7ZrTWIjYKy3HR0oujJ57OuKYKhEoCTn1qEbKM3tZiPtF2vhiA2cFqbcn3WSEJn -KrY8qYBlV83yP1juu2fbHSSVdN+hqWKahtosTX5KL8jg2/ddI7IVLTBSSstKuOj00+P0IerNLYNN -DSqKQk/VwucHQs7XwSPP5xNzAPCinXN2GLzAkob//f64BxpqqSAV/e1Yy4oD66c+wL5/6mfWdY00 -zXBqGmzbiq6nuWZ7iNqWrlsWcXYeAcW261D4XFNHEpS8z9VPcZ7jadF1UgtXVS3OSOHZTkZAY3EA -uuNwM1G9xtQR8Ni2SCSZZ+GKc9ITg7fy94dYAxOUEtJMeujKsEZlyUCyCjeWBaW+/pERXEK5tqWh -dIOkJRZZmpYgBfzzn38Gfn+NcVx+AlqtgetkRE3TNGHfN6WXF4XH45EdAFob3OK8xU0di59PwdP4 -rOdlVRJOtON2gcUaO17EKpqmhssLNfzg95D5GklPqWJHXdehbZ8KilJEtCzrof1HA1XiD9u2wZHg -ot7+ppfvc/rJL5jDTdtBopS72oXOGXk8EZ/PFt+/vyl4xtSXRpfWStwqtBh5mdo45w/e9NY7UNP2 -ID4Rn7kquAItZrGm6uM2z5nRoyeHsUkMPIWmuokuYqbtzDDUAjt4JBzNQdxPPAWWOPM8qf8A0+D7 -/aHZCp/pNI3qf2c7Mnw+lOLOYTNwQCafrZxm5ZfTn3MKRXhFZNu6GXkvzyBLU7jc4+Pjh3RedPxY -Ehh0j8NwUOF6bEZvkGqKvavjkWzU5/MRvufoDmx9Irp+gDMDWMVIc/mJ+MKMTIZqbsjzMmycO5Lk -fMCb7vc75nnG+Xw6TCBi4KFxCgfTMNuhyQj3DD0AmCEQeSe4TJZsFGVlcK7UzJL2e5ansa4r7vfr -IRummQj3mkwGGqL0OrgQsZQjmLzv80//3ZL+qqqMcmCbhrOunWYREVTBB4C9Ti5CRk9uRiKnZFtx -Qq0M+XQKjLEWt1N2483flffPDcPJK4pIV5XxoxMDxSi3TELP1B3kuNYEkmnxvmeK2M9BvMMa1078 -4aIvC49/BD1/HfCBZVnx+fmB0+mMuorDSPjCv7ZI44y5aCBB1p7NWqxAxWoUWNfaIRDWMo0cAuli -IFC0oQM67YDSNE2xJLOq+5ittW0r/g9ViS5NMQzRzpoppDgWJeofIBbU8RSyAYveksu6oG07FTcJ -0OXD1KD+wLiMWov1MHTFUpG/KhmZNYisHZrm0gaNa4bZ3fl8xr5t4hZ0veosvc3o/RnU6bdg260M -pmUpXQ+xz5MyxBcF1q0NqkAxkBVVqhwayyqEHlrhUfzE+6P/AWcLAFI6SJm7aqbLbIs8D87cELFP -DZfJxOUxrBuLKRXeSwZghw/ak8tO5rEIJwGKOJ7pOKpJUvwCRTEjzwdtfz2CYo9ur7yJ+/2O0+kU -ZqmJFr4sCh2QwEkq0gVwurn/+udfeHl90YxCRi6neDEuwEztv9ajDBSSom4HCbE13+TzmecZHYCm -adD3vZqjrOuqQNKO/RBsyHug5j62GpeD3Rmzh+fzib4flDUozkepMbxcD2CmGKPgCzAbx3R3/aBW -U8J3eChAKhbRnOE4HdxphHX20K6OqMhSnS67mwGxLK8o2aYzDTnwwzDi5UV8GVzmtHTM89gpkpbp -dKAMW/amLRGpg7DdIt53kiRwmWSf9PkT1eCupSb9A6g1WZcRWTYFsZJXVV1sN0Ml7MyM6qpS/Uca -XJApNOPkp2Vd1IVaMKJcB4MO26iuS1maHMBEAYK9Blw793DfYbo8TjsVTOmjI3CNcRxxv9/Epm+V -ISWWX0JMxUU0/YjK26mjFH7M4UPkBJgP4hFbbwtfuzNUz1WBHh3mkOd6StrZdEmSoKkrLCutnyMI -s267zg+YMKEMi04MNUYVKPncY56mA4JvdfBc2HYTWgziK4JuT18rG+ULFsrpFowtS0VjbZvIcrm/ -ljwRb0nRNLVKUtkqskxLzoS30lFeM7kNbdsFzoK0UUWVuCjmcAt95qY5HWbqEVS6XC7wuUNZ1ehV -p5EpRZyGI/xeDryoKxn+4nKHx2PQuY4kxHBsFzEIps1MnS1Zy2akYpDRKknLIuzRH284UITr+hTY -jZVmqUAJn8dx34/HzVhylcrQpLeE7RiRmSdZ36yZK9cvW6CPZ6sHHFN/Aujx72fZzKFcdm4+6EBs -MGc2/XxOB/NSUoDHfVJmKolFuTE0mYMIiwe1Have94OYgtJg0Tq8pGmKwURYPhB+uaC/ndEKrNoi -2znUMRAg7LSao6trFlhYucpI7/c7bvdHHEAZggNLjjYstnmehFvfNMi9vBjq59MsVcdh27n4V4w5 -K3CyFFNrN0ZugRhOiuqRtTX76lkm4GldlBiUwJKEfjUOBhlfTzkGChmdVaAsT1jXOSi6loMpqr12 -Bs15jtx3y70/nYRI4s3EGLLgmFLbGtbKTOdlRTIO8IU3bU7RjGRB0huNZIKyUh2DZzPhJvjc3W5B -3GTLCHdI563PgXWfPnY+Uvz2j3/g8nJBVdWHZ8N1FAeNCPGGpZHFZOigy4wsy1IdypqGMkRS8EUy -ylLGiQEdXCjbmOWtq2zuLJQLfO+BH4c6eG4suv5SpMGDgXiIHXrKjg/dnKjPoOCOGfBR1hwVjmz1 -Ub3piwrz8tTMl4d5lmVwBDwW4zTKhcQXbJFlKyqxP8eXer3efjL6/Ooqa80srIEHiTTclCQbUQBj -qb6kWI5hgEUU8WxqxiG/12OeG62NbTtN56av28EnkKgp/05SdKemqJx+MwVuAyXE4lt/PURjCoq4 -2G1bz3ZL7Kiptr0JLdlTtSiim65rcb8/0TQiKvK5xxpMW63Dzel0kv5zWQv7q6gwzY8DiEjnYLrU -dF0ceMET6PF44H5/4JdffjlYvTVNfWjZRVPT4xhqMtDEjrpUghbfoxirLgeWGzf75+c1DMTIzKCa -kKG8XHA6nYPg6BFnHIR3Q2+9aewDntHo7EIC3eu6HrgREXBbDP8+zkHo+h73x/0AhNrOyjjN2Pb2 -gE3Qk5HXbYMPZw9wFgU9FrnxibEQBCTGVpUyanwYuoP4LkrpvR5cbfvE89mpgI7ZcBtGtznn4Gxq -LvVHbIGwjcAW3mpcX+wUFT5AOrlYE08yx65hehAjo3NORx6rXvyLVzrTRdbSVsOtJhvG/825HKem -DhqFBbfbVfvDtNY+1lS7ahFsGWDTzCxL0TQnNLWUF7f7Q+o2M6xExyzxZMkjJ+B2u6LvC3z//k3b -ilmaIEszXYiWzLQHq7E8F5fmYRhwPp/Vnef19UVFRxwqaVtcVio6jT2ez1YBR56gbN9mUxQWMbOL -I87W4OoTx8AT5I3gbzSgZKvR+yIE40xLS3GpifMI6dXQhyEd9DMgW3MMzL5tWwMOkuicClkDQivO -fYEs6/Dx8SEDRk4nsd4KaD0PEQse2vVu02GrarRTrLwvFNGnJJolHAE6OmUzSBLbmqZJcJi6Pvgh -cu3ZQ+2r1Prj4xOXywXDMOJ0avSz2ZngoWIPWnkHkQtS1w3u96cGWjt1W0lvX6m5bdvicrkgSzMs -WNX+2k4EspxkBg4aFPJl78FJhVkCnXoo8iDCas00Se+0rMOmbnBqGk05rU8eBySw9cWUmGVCUZSY -5zVYhcvoZdsP5axCm3pZVFlqwE3Te6Zdn9cr6rr5Msl3AxCxAo6/8l6kpJfzWX3hSEBidNdTZJwU -E6DvwbFcgEpWfVGogpILiKXKvm/qmWcHX349haLqcvkC/K4/ZW9U4bGDMBvzCVqjM5hzTFZZeDyf -Lqj8WizLTdtods3Z2RTkV+z7jrqq8HhGHMR7r0GiHwY821Z9JOiDMAacJnpTxpNc2nITpinqA74a -sHxVJxK/ii1NYbayBRjbu6sCmwwezHL4nCzQbFV+5ITweqRjIKA37cNs2m8zFErgl2VGXddY1/Rw -MDdNoyPv7RwFgusuKoUInlQKKpDkw8XJ3qMl29hgEF2BZ6NDFzSVclqmytw8TN9sLWjT43GaAnjk -dGCEZTqRw02fwGfbKWmiLEv5Dpcr8KW1PY7ZxsfHhwzwLMpDNOYDn6YZS7oeWnP3+01bWWpH7QzZ -JFB7ZQJzhXnq8fHxGYZvbqpXt0YU7GmTCJXnk7LwGDCHcQy2WO4w8MQOA2HvvQ+KQctKjIHr2KK0 -ZhGWebauGxbTIua74nPwuUe/DgfTFNGxFxrg2cmJcxWcptwsH1iPW3/7aRxwPn07UMlfXy5IUoe2 -FTLQ29s3aZGF0e7WvYmnLDcvn6G1GrdtywjMuS/PYDVdokwp3WxFE4xOA8vQOl2xlJTuyXiYibCu -ycGUl5uU05dFtOS0I1cEl6F1YwkFXevi6fE4ZDbTNOLzehU5tap1ncrPXRF8x3ijy7KiqlIRdHS9 -Ejv4EC2d1d5YtBnaDwDaMIxomgbbtuF2f6hwiGpCuuW8vr7gfGrweLYH+THrabE/jsi5pMnRI57y -XY635uKcpgn3e7Ta4mZpAwMyuu+kSlm2Mw2ou2edH1NK4HJ5CdOIZVAjwVJr7En8gkIUmTnnfzLT -oOEpuyZ5LqaQXdcpSj6Og/jFBW65tTi3nP4sTZCE+QXkpdODkNRpzjRg/e9CO46dBCvKoRkFZzpa -4I3OR1ZbwEPA1qj0ILBrh2Ufy7J1XRV4Y6AhxmNVoMu6wmfybmVq7in8vASf2+2mwVAA5DRYsaWh -k+PVZanvOwCZli1fN//XrIDu1nT6FX/IDPPcSkCZJlU2fi0voklJbG3yGfJgsfMGHs9n8M4o9NAc -Qxlg236abYTsS8q1aAqbJKkGDHnmQjWf0hTu/eNDp7vyNBZGX6dRjeDUsmRqkUxZ59eJqJbqKewt -eWjP5wPzPON0OisDijdaFPlhjJcFFY+TdZaDbtz7IqrcluWn4Rl5XiBNrwe2FcVB6ZcBpmLIIDTM -OXDr2RmhH53lsPNF0aCELZo8EDUYfQlqMSUvilKBnLZ9aokVDR7CGKfA3ovjtOtgcLoq2ePrZGG2 -GDlrsAv++lE8FUdcdd1oHH8z5RtQhZYqsy3Tz0jTTE1R4lTiI8BrQT3LMOWCFSxC/Bzv94duVH4W -dfZrqOH3QAbb9x1//vEHXoIybhhGtOE5iH+DD+amTvX159MpmKPU2NZFyU5t22JZCni/KlIuGMNo -3IWPQzvshkuSRGcXLMuMJffKKIzlUHIwIrEqQjuQl+tShsFU2hK2Za5kzdMBRLZdm7ZtFWvRATpp -prZvljkJzCHQBvLYf/zH/9zJCnq2XTCzLJGkaVBkOYzBu31ZFjyfbZjNJ4YFfGjHgYeZzoK3qd/z -+cDb2zekaYr39x8oy0qdWOqqRuYyfH5eg4KqDAi1zIMH9p+UbtShcwIwR2ZbNSFtzGKdK/W6kFHc -oY63TjfWEVc0/rmiul812naSLt11qVGvgmVY27UHFtbRxyB6KkRHn0KNGy2ZiTpz61tAHX80Zt1V -F09jlHEcMU2jYjFxuEkWho44FScxq4qU0k215uwc0DCTwYPfSbELNw9PJ7LTxKNOUnFq8H2eH2bt -cYaBOEB5tF2r0tbX19fgDdDj8bijLCu8vb0iTTPcblf1aEAgbbVtq9dvS1SWunxuLJmaug4uVTCO -zOu/sCHbAvV6EHelIjr3tl2r921r7iRJ9UA8qmGz8P0OhS8wjIMBLhd9nsw+hbGYHHwoxDG5wbLM -QTi3qmAvDg1JA3gYuTHJ/fb7Ps0LmrrCQO//VNoa8zyhbTvVv7NOfH2RyUGcMW8jPNM9ors/fvzA -v//7v2uq8/r6im1b8f7+gZfLBTuEVca5Z5Z3fTqd8OPHD7y9vR3qTpmyKiafFnuIPvAxIH18fODt -7e2gNZehHq3R4cvvcNKQ5btfr1e8vr5qGTAbW2YL7nifqzXz7X5Xrf7j/sTr24si3ZRZ22zGLk67 -CaZpQtu2+B///u/aY2fJMZsJP01dhdRwO2AkaZrier3qwNY4tiyWbtbZ12o6uEg/Pz/x+vqqGoz5 -C6/CeuuL+5P0zdlqbZ9PNGGQyr9C34ntfIZBrza4SxfljtOp0RKhrioU5QW321+YphGnpkFZSe1L -7MTOd3w+Hqib5qdMRNx8Kjyfj58Gb9ANel5WvL+/4+3t7XCiM2vj763riqaptZVq5fVcf2Iykisu -EudPxmy38DnKqsb//b//N6D4NZ7PFr/88t1QyKU9OIzTAU/hcyR2wvfZPp/4/v07HsHkxLItAcBx -019vd/R9j8vlgqpqtLaxeu+mkQsqqxpJkmNdn0aS6w5tNEveIFghqqUWZZBg7thRFDWAzgB61mcN -yDKnUU5ntgVvdXuyW/Se+nAGAmuX/NU+yfoTML0qy0LrU9u3JYuObTi+ONkoV508a0lO27YGiSj1 -DKL1Xr9oA76OgiYaPk2TTGoKYFUenJWI/pZlcQCcrFTbBjcdpx3UkFys/8qWiwGNs+UZvNc1+6nP -zZ9nK64Jm43ZDi247iEoCkchgpTTNGPCrNjEV0LSui4HO++u77FjVwu3cZoxzXcN/oIHedyCPoE4 -TDxRJySJUL27/tN45MvQl74f8N///Q98+/YGH6ZG0TSF+EC0hJsUCCQFl0GRJZec+onyQpq6wrPt -NEiQkSr1/Yx5eQQMK8WpaVREx5JsDwmxlOLpoQMnEn6nWAeDOPUp0s1xOm59WRa4ZRGkVFh8p9A/ -HrXG5A9S5kqnk33rvgyOHA+tl9QM4WSUJEj18Sn9+T///CdOp5M5lVbtzSdJIgNEQokg6WyhqSRP -Qp4iTNO34D3PDe0NpkAlldV45+GkEuIMlXlVCEobgOTgN0jEldr2SCIRk8g4508AmH4Y4IsiIMeB -wmkWJUFIKzeldJQb1g5ykA0sL14ARZkqy2m5dMLhzHmO3SKISRrxviPMTJTgbN8le9oSXNLDyDfr -BG1baBRInU4NtnXDSkPWaURVVwrM2qGvFuylLiBJU4zj9FOrkP9Okhclu3zOUfItxibXzyvSLP1J -iGVPR7FHn0JWuil99/v3N1wuL6Ek6oO2JcrRrW+ilX1XVam28tFMZdN1Iy7Qlo2YHcrPyGcRK/2q -PqF8tjrAVP0qtk07LV9NR9mVmCbBBshDIAZh5xns+47UuRxVVemH5yYSk8nGqb0+tCM4yotDEtkf -jidanGCyrit+/Pihc/SskolZgzi2LD+9rHXblanG1Imbre97dKFWTpVVOGtWUJbiJGv5z5aTr2aL -4fNpMrpuO+732yHVt78XhRjHBcFpuhy3TsdZAm08GcST3usmsK1QO4SUcwycy3TAictcSHVHdSDy -uYNjOyr44lPnbqWuNAGNWU4Z3umR32GHoc7zopkXXY6tmIpqTQYZMu0oMrLybG7Qy/mMsizUsZlE -H7oJP5/toWWZZe4g/Y1DYJ3Kzu1kITG47VFWJS6XC87n02HoDdczr+lyueAcphaJv3+JtzBZpyxP -B/SfTDy7RtmKnOcFj8dTXajpv2cZtELr7UwJhIMk/Xa7KmYhdnI3Q2mfD9dCDEls2rYwtLaVwzaU -mKRuq3Q87I0D5Vi90KpSFWRWz82UegjOP/SAiyOSJv3/Nn3nQtp3hCmuhf4u7YjeXl+lregLVTnZ -aE8vAm7651NYgefzSWiiiTDq7gG85EnlvUcXzCj7QRaDdXJhGkgMQLKODkVRqt++de3liWxxEEsb -js4swGJGZ5VljarsjCXWgmVxGJbxsKj7vg8TZzgBGZqyZwEg6rpZTzzy0ykl7vpPdYO1p54IdyrD -ghwOarA0zOKL2vdFmYw0WWXwJ9hlTTyHYQwjuoWyPAYBFrM4S0JSv4hhQO4yvL2+qkks3wH5IGzJ -FUER+vXk9XkQugQSVVmKi461KONAzMezC6rPWTMcOuJeLi9Sjrochd/02uZlxXj9PIC1KqAJOEMc -1gE1rOGhR9qz+GA+NPOUCUtOMQprVz+rCUqpvn1t2xnLt/wgmLKIIQQ/AAAgAElEQVR4lJWYW5KQ -cw5rIPHFtYqgkhWeibNtnS5QM6mhZw02TrNuDGqsWdvbIYxpYHxZiiLNOkkCUmPCRcwnkzTFNvQH -YOJ+vyNNE1wuL4YZmOn8+JfLBS73WOZJnVNInIlEByiTTySZpTnhIoFjmhedAc/R5SRv2GBkCUCU -cHbGQoyL4n6/4f39E7/88h3ruuF6u+EtjZZVVVXjzz9/N6YqcR79uu2aonPB3R8PpGkSXGbojJyh -rkr8eP84gJbrtusJamcjdIEpyWyEpJiPz4eeelmW4f3HO85BisyNnOe56v6ZEdgOCPEQGagxw+fi -28gTh6egdZwi14ODab+ebJRaU436k8OREabxfpZlhi+qQzdnnKZg+W4UroYdKAM2Ntzvd7TtU+t1 -uvyI4/OucxKsiSxxrrquUVcVXO5Vb8H1b6duxdFz0V4tdlicSuHrqkLmHLpbr2uZA3TjcJT5y3DV -JI4tK2XWRB+MU+QZtJoVs81Mta+bl1VPbhJWvv6Jtd4WZIZH8QwNIiUCDQe0lYYR1hEndxk+Pq+h -fXUcmWz9y05Ng+v1qoYj7BFnrkCSpDryymoEnMvgMheYhwXW14u2lZYvDD8uJC7i86kJ46qXw89b -U1GaKwzjdFgU0Ywkx7dvb3h9ufw0YRcAlnlSvkBReIxjNPgovNex6V+ppKfT+dCNyVyOl8tZjTQi -kWs5DJs8Wqdnx5FaYXY9vR3Pl7NYUmVRpbcsC+gaXfhcrcI42IXZwPpF8h2lyz22bQmj5Eql1RI3 -spwMrgWxPj8DODrwWkm3tFkzJfm0Xa9DZqws3QaQ2+0WMosytJ+Bx6PVE1b+zh9k21zH5N5b3j6D -yrIuat9u/962rSMommrLU4KX18Om7wc81ShHMj7sEPXhNB02vR1uyoAu+M10yAasJJ9+Cl0vGFVd -13BVWcq4o/BiCBZZ6aytvXixkdQh9eLj8QzqrdTYHe8HGir/d17WcMrEmXN22qzM/ZPSgHRZPnwx -wegOhA2e5sIN90rEkDSqx7/9WsMXFcbpfhBlsPVjh5lw0wzjpOIKG/Gvt7ueDl+n8/KlNk0NXxQA -UhSFpPbDOClXn0w0EZFMCgSu66pRuiwKLOuCLHM4n0+H2rM3zLt/Vbp9FTTZhWlprczGXO4xTbOK -fXLvkWiqu+q0InYV6rrWqUKbWXT2e2zwaZoTTqdG7dPiXAh3UA9yw0lZ1B0cc21ZKsSXJJCUNqxf -5gla5uo4jihLH8qy4ECUO2Uq8hmxBZjnhd6PrPXEyIkz5REcDpI1Suitd581+7SAuFX90XGZcSta -z8XBMMyYvlJ8efgQ2CZdmlgN9THcuyyT9qAGzLIMjm6y0TNu+3r+ayq4GwYYgRXKItfgviqLesQ0 -7Tqa2XriU1giixZK4eUpxUXzbFs82xbrGhaLc8o+/Ko92PddjCXmWeWa8cWsIgJZngeMIU5ZcQf5 -8VcxkGVY8WXyeUT6K6KWPHgr9P1V0+stUJelD5yrMEUox+wDzz9ZQAu4swRvvB5+oXFnqtF83SQo -2uDMICwL4XhCsFQhAj+MI6bHXYNZ3w+hbo0W3Uyzh6AHkXJvPIyqlhN8PDDZiA1RSTmNoxKQWFqk -LsO84IC9kKdAMJNmnbxG3cihazAZS3H6G1rXIg67VbPZQHrj5ieLU+7hph0Vmqx8HWpqdSuWLajO -VcGaXuYULIqtUPdveRq2nqcG56se46DgC/6VLH+s8jJyKLKg+BSXLJbu0zypjL6qKpk98fF5/ekD -rMSXbQxKP7/SaDnvj+lYEVDZyATLdKqrcgpCe4wofNd1OvSQDz8izvLgWOvboZI2ABCJJw14DESJ -rutRFE/UdXMYXfbV430YBqX13m43DRDkBezbdrC05sx3RnGyBC2VOXcZljm2WWmR3ratlgZ2s+d5 -PMHuj7t6GpIYxQ2mIpyiwhJ0HF+djARLueF2u+P19eUnBqV122HtG0uJo1GKXYzqyhPKEw61kNM7 -6icoJSe28Xg8Dy43DOg0FbVINYMVA7C8n/mghiODkuPPLD5gefwqSksTAHJKcohrBChrBbvHaVab -9yKoD5n96cDW8HwpE7aMPz19DUEqBpP1X1p8W3MPBl57D1ZQtaWpll3cyJI5FsZ+3R8wHOJWQ9AG -HAxXN2O7bKOSrf95obYXTdujiLx6rR01SucOQ1F8+Txo7cfNS4loFQZasl2278D4BRSLfey4gezD -J388erhF1Jt1lF3YNnqTK872EtV0CRIs27FfO5o00Fp7FYUXEGYYMM1iJMHJQmlwVeYz4kkiL3c1 -qjVxc73fHgoECdaRq2Js2zZ8fn4cQC978oq8ukBdN8ocpKbBPjPBZ1Y1lVzCc7QlBKmkXDz25LXp -PrGM1KwZtmEZJHT2Y0C5o6TYh9kGo9bb9hmdz+fAJfHhdFswTbNmGZKZpOrFYLM4vlu2ZkkW2oxQ -x7kMvigwBExGSEDWNCY1gjinY92SZD1I4ilEIo/Cbr77/X7g+8soufUwlUr9+l0GIAvDUrPQEnZ6 -PxYYratScIIgGV+COzefa+FzpYMTMKZxjqP5pDilLEr0+Vrfkk+dJgm6kAbKB63GA/3o7rIZ1xid -XrNu6gnHKMb6yhcFpo931HWDsqxxv9/QDwPqudEHZlFWLn47yGNZZvx///gNLy8Xcc3xPoy3LkVd -Nk5mfLQ7ePbzZKLayxcF2rY9eNLbMsECRbE2mw+tLVuHczQXxVHW1ryuG5RFgWfb6si1b9+/YZ7E -/5+Lfd9z9Sakew/rwK/XU1UVsjQT5uY4HOjUUpJ4SQ2nCW37RJ/GzWgnEX2doDSMIoIpitKkwrNS -s9nGpFCFhqH2uRFXitOHEXreErQj2p0dCFtZmqHwCQbTiv461coOkLHmFyxH+S5cRixgPhDQqBHg -qc9yhMxFBm3bV4+j46vg8e/Vx3Hddnifo66rMGZ9PkzAsi5ADLBUgJZlgaY5oa4qXG/XgxFIDOCb -OmNL2TNrpruEUW/rOgV+wq5dljzPxRIsTVNMs+jOHw9pGdR1dhikwDRx3fYDsYXkkyFciF0wP368 -o++Hwyw9PsijJJbqrmhH1rZPba9ZR2I7hYUtL2vaCQAvLxd8+/amc9+psXeZE+KME0FLbiIqh2Sy -ZfT+8R4EK7OmmdZdxgKQthzhNVg+uD2JYpsJ2nlY1y0AfvRZyHWw6rqJoefRtckfamXnMq31nHPK -5HPOYZon/PjxV+iXi5lnlprNV/g4Cs10R7iJisBPkAWWHdyCbPBMEqcDLOycBp6W1obNTlb+66+/ -cD6fo/ErnY8zh2EbA4hawOUe+zCo3ZcFGdkCoyqw0yG1s25YUqfZ8RGcZoiDaQ1VnFmWXG+C//zP -/8L53KiQzaLr0zSpHwXfjfxTqAU6SzySxWgCop4YaYItWJ/TacrqTcqiQBaGfjKLY1bFk57j4PmH -bFViZkLlP4lJTe71ObphnJBMs3moW4g69aFlFDe9oLCcpEpSECM7qajjOISBlssh3WHQYB1DW24h -7qS6MLkZ0jQaN6rrbdfjX/2xTLXCe7i8Qtf9P1wu5+AkLKc39Q92SAcdXSJYlunJOhlPdW4yCwAy -Rf6qKrTp8dfWUVmWuJzPYlZy/1DHlji2LFU5sLRsKh3RTR9HjqIizZpuQQw0tIKqqko/b1mWsNjy -AzI9jgsu5zNcXmCZR6WzzssS/O4FB/m8XsO7Lw8Zx3FaUjQ44ffwmc3zruOp60ARJo/gGdaVdWdK -0wzvH++hW7R9acdtP7np0hAkalGkbKX9WFmWmpLHISWJthOnedESRk72Dedzg5eXV5zPZyX28DsY -eIgfqGah61BXJZ7PXDGxRTPs8UDbJm5Bl2RmSHyPNMXh5m/qSvkFTdNoJ4gDZJQvMC9o2xYvoSWt -hKwtEpucbfVxuAL924QxlGgH4I8//tTU5uXlErzinBmuGMEdaRcVyNIMp1ODNnjYc8Fdr0+NxgTw -LOuMwxGmaTRz3Y6DGQofhTEEPFh7fXxekSTXgxuvTIzxPw0kYfAgFVhaRyGCLueDSQTR3Nhf3dTD -7XSq1SSEABk3iBXakEBDEY1kH6sGv2ledNiHc5mMjc5zlIFtt64kxcQN6L3gD1k4ebMs1TmG1Pwf -OR170IWPuoHarsM8X7+Uf8kB1CWxh3oEdnU43TfLsiAnd8FT4lgujeMQgq1T34N9B1xeAGg1UJSG -5861QQovS0gmAHnoJLAEsziUjrbLMqRprmzLaV4MczRXgG7fd8WCJBjnaE4nscnLaqzrVe+bjEK2 -7fh7zJznedVTnpZ3mZp2rIf3YEtFrk/ibLZU+Aoaei/Y27puuF4/dUYjcTW6ekn5uCneRGOf5D/+ -43/utoYVf/3yMCJ8DPpo6RUH80Uk8IUPwzgyM1v+OOtexRDeBwnrri9K2nsZfrz/QJ4XMqopc0FP -nYeFRc88KDjGceDn0xld3+kJ6DKHx/OhrS+2mpI0RYIE4zT+Cx+8yOsW9HTGvCzB9y6CQOy1x0GP -KR6PO7Is14m+7HdTVsw2DdtxxFEsEkwuRTxNUwUEI9MrDSYiSTAI2VVbz+zEAntfSSixZ7789P30 -AyBoaGfZcwNMhvrMkquuKnQaqI89am7A6K+wajuOugHOPHQux/3xOMy453VFVuoaAlyB2+0WNwPv -Lxiu/PjxgaapzKjsaGlGZ6c0SXALRiQEWKO+JTvY3H0Fwu0fu1fEO2HVTpmMVEvQBsUls8CXkIkm -gV+hMzPC/uI6oTv2um4KJEpHaNYSmV4K7LwAO7qu17mEfNf8b3aYbgSvMyQ/fvzXblsOjFSsg263 -m6oEqVLKshLbNqmX3uPx0BnwtBVnUPntt9/x/fs39eez6KVMRsnweb0qgYYnEk/59/cP/I9//zum -ecLj8VRzEdqAaS0TrKCSBKjrRk+Sru1QlIUirBKIlujQE059m3bZCUe///4nvn//pq1C7h/v43BH -GUfVBopyjvv9rn/3xx9/4m9/+zf1R7CgFFNwK/ckxZcn2O12w8vLy0/26+y7d12POohwSHG2JceP -H+/4/v2b6hm+moNajoPlNvRhtsE4TrhcLgdFpPoKpFGXTuDQPkPrp0DpLO/VuRyf16ueVn3fKwIe -uewZ/vzzL7y+vpiW2ao4kJSDYlpzu91U2ccMripL/PHnn7hcLrpGCJYyo0gSwOdebeB4QHATPp8t -zufzQaU5jkOwiPdo6hpp5vB8PnC9XlUVyUPmfr/j27dvOjglScS3kid8UcgsjKqqBA8KdHCWyl3b -4du318Po9ljiRT9PAs40jO26Fi5z+O333/H29qYkJckmI+nOsX3Di+dY5qostSalNZjPfRB5DPrF -cvpEmyO2ffiyCPhVpTj8ECSS8U1DHP6RO+R51OHbFlTX92jb50HDLzW+B1QttejmPzV1GNG9YhgH -mVYThkAImShGQk40tu1BBgdiFbF+FkSem5mZUlFI4OIkH3YlODuOo8snM8PP3h9fBkk+dqbdV9KI -BSJFyRnq7nCyMfWLQyLlc3789QMuz1AUL3qv1kuBPXfrceB9gX07jnG3GQQzJGGDugPgxABqrcYI -3o7jFMo6KNbCYMxOibSpFjwedz1lLeloC179fH5FIRyLl5cXbNsaWozC5LMgrCUcRfWoZb3CuPck -hs7tjGV5tKMbpwnbNpiBsT7U49FxiQGXlGrrhDyOowaNoqzw8fFxsFTvhx7jVB+CKoVrhc/xeLZ6 -P/QMnAPethhLtyiq20NmKjMgHSMtraKyTFpOO3Y1FhiGAbfbqJpuSw4Rk4czzqcGmSvU54xAFVMv -C7qx3pZZ9O4wJ94SfexC5hRZpukERiyPoa4bNHWNzOV4tp3KI+u61lFX0zii7wdM06iDLKn4s044 -rMNsKl0UpbCnnAQAOhz3/cdhkfEk4RwA7/PAaoy6d8EahpDmleY714NvnO0kWEqspTL73CPNUhTF -pLyHvh8MGSbD+XIOLdGL4CohGFlC1DAMSpDJc2Gz9eaebDr8r6zD7WzBI9FlPbSq7Jw9BvN1lVmC -3ueHNJyuy9a5yA7wiMh9rhOIpmmSCUah5CCBinoW62PJFjSZnNuWHTo4VBuShcfZlefzGdu64Lf/ -91+oagk+0lLPkWbuYBdv+R42i+IamedZW6HExCwoTMpyFCJlBx6LzSitqzFlxGRfns9npTsnSYem -acQVWOoWr5NLpUVVHF4onVwIbhHp54iprh9Q+CjcICDC0+7H+7v2fkVWWhhTxPRAjrFGEcBuXFPT -MBSz1ZrVLqhlWXC73w+8dbIR123H0HfaAfC+UAMJIut86WxbSls0MywtYbVNfa8RWrKBFc8wjoky -1I/Pq57MWRoZYZSF0i0nTTM9+azd1DzPWEL9b0EqOxiTp9YzcOOpMS+81ynMPNG99zg1tbDn+uEQ -VGjGYvUMz+cTt9uIeV5Q1dWhNPpKoRXAeDBDXqFya1KZv+IBVqBDkdft/jjoQ+hsRL2CFfvwfXz1 -epD5hXkAA29hzeYGxM3DzMAaWdYFt+AMaTofAkr8nkWNWTZDiZ+mEeM4oTk1KIoCTV2j7bqQwYz6 -WdSSMBMehgHX6w1NU2u2xnUo/pqRRflVy6EGqMHLIUszJMmg4HucaJXpXoqEpBxNcwrDYsxId6ZR -BPs+g922Pc2kxeTDF8pmZ83JsUUSwccDWEL3Fj4w8VLP8Xy2ivjKaZIc0zsTobl4+bJ5vYzMlopL -IwXWR2VZYgumE23Xo+8jy4zqu23bcLu94/+n6017JLuSLDF7++pLRCTJUo8awuj//xBBgDCD+TCt -akDVXWSxmJmREeHL29f5YHbs2vWgCBSqm5UZ4f7eXcyOnWUcJ3p6etJxECcDh5ohh01r8+tsICX4 -1kWea/mHCQpsrVHmvn9cVPGIMhHhnZg/47B9DHTAYnAhILvXN0Nzb9OeccDd5bnb0tYKcdjjP6ZA -DoWyLGiefFILtw6zlPaRVgrzPNPhUEuoB3l++48Vo61icHuBploUpQLOeIbjNKlxC6pIjMRQPblo -d1Za1lWpXA8c1kg3iuOI9m3Ri8uOEm0lh8+ITYzRI1B4cC7KsqQkLWi53eTvLB5LFFOZ799fKY5j -quuSXp5fuFURNec8z5RmGd1u90+HkMXOwPJ0GQaRZ5HPAC63u23bKv+AcyrYGRl7cds2xgAAKuGF -ATCzXu/Q+btRhEN2YYVsyRFWVIMSnvnwpQKF/ABHT42HGCoHBCVqSx4abzVgEs6vblWFHpKEYIF0 -lYcK9RSAP1QS4B/YHtUp5za1/rIjyGEY3LjQlHHcQ05qUnEzNzV/TtIbD1TU0Yx6gAxvW0j7HilB -ybeJ3kVYlOrzxZx+HBdtNZqm0cWyPQiBHg1IAUrNcyyEmZROpxP1wahmp3bmDxwHseU/Xl/p5cuL -5hUCcCUKPD+9R899a/2Oag1jO1irPTozqfdfnuuftyNDbKhhGGmSMRhKfLD59njzRER4Nvg8bgMG -nv+ha00iWY/8Xseh9VqHbduoae4uMi5iXX9ZVkIN5ynFuu2UZ3xBQdAGNSHGgG3b0O16o/PTk6Yu -oRLAZWdjxwIxDQWYjz0FvMuOeUN7+uOWYsAs9k5DVf+JSw8UgDY6ygJP8F/nYMjMZKRvklePfjrW -F4+IJStZtbpuSHRxKzats9oehSiBPgkeB3aUk+qYb/Xam7Is6enpTHlR6xzVDHx0AfaSsGv1CrDR -jiWOuesHdyhuK72+/vhUrsK8I01STybtnl/4SbzTto0GZEJ3AFUlPtMoM3B8ToREoBR1nIDYEEbi -T/+pqordcvJcrNd6BdBwuINB2vcDh7/UtRhskNjIL+I2tHsXh3VDBu9DGW9ym4PXjyzJNIm9DESk -UAcB6eEE23o1E92cchM4D9o9ti3rPU79o/QYzxSjRJ9uHOmhClUdzEgsc9UlNbGZKTIheDryRvf7 -1YTgoqUWu7Ys9QxssfmxrqEsZStxfkbWh8NVnCkfyqtLz3b4EjERyMk5wY5KdS5uOdzoq/edRz9F -kchJtdKvv/5Gz89PdDgcnGyxquh+v+tm6/tBYrVLjdp69Eez1F6UNDbk0c6o2TQhdTLPLGNTDenH -+ecE+hKsGuty+eDgR3OLDMMHDRK4WRSF52nvwjFCKXnZ+gktR5rE9OPtneq6VrIGK/xcKrCfmjsr -ucbX0G/euAxceFRYPH/vFWdBdYLfta6JuPNyjPftduP3GAaK2o+jy3Lo+14JWbj5DnWl+MQw9FQU -+Se9/rz4Go+npyeqqoqWedbUXOslADegYVw9EBEtRJqk6ksBezXwPvjvD2rn1vedSr25l49M5Fek -LlBWIIaEXPzvqBLw387ZylWKVmNhS/FhGBUwTaW9tNmaUE3y2kDlxJVWPwx0vd1k7p+KeCiW0XWi -I1g18RSS3aGu2adBWs9hGNUSDWvDqhUxmt3Exuz97Z2KMtcLbt34z8Q24NOJc5hDHppwDZiEoFyd -55nKMlBWXFWVVFUV1XXNltNSMtVVpRRKXkSJztJxG9jTj0u40AthsMIUoJ3WhBSLMMt4NGhzAdjq -/ED7HgnpJhUPu1yps4NxLHKRUu52dvHMuaK1QGbTNGE1VlJQ1rRK5QXACc4/A3muzLSsRNs2WZtp -LtlWSVRiYVOSZhQLddkiyxg3RlFEr68/XF7AyNFaVVno1AXPEN+VGZ+VVnZfv7K5S1VVn7j8uP1s -6AvGZ7fbTTc/gEsXsMGx1DgM7G0LHYh9lzxSZlLUXay1kHmPYBEGDJ1lmU3KgQVa1/VUVZU3vcLa -wvjSUrgt4BxHsbL3bAuC8ttWUuu2G6ffSP/3QWTvmG7ZdGsIthhELDSQZNsSz/U5inh83d8Gz7vC -+idYF6OyKCQIN9KLtaxKOh6ZqwNW7rLMXAFALqqGEjKWA23Qesjjxq6qWmWGc8AmlezAmtO63jXJ -ZBgGOk4TWxEJWJHnB3p9/eGJfJg8FGoaikV2MZKzBpOgLStoJ30ebmQAPxwRxqQVlL+7IPJ1VVGS -ZjRI64A+D6KSpu0U57BhpT7wlsi/I32RYRTTNN/VVUZLQnWB2fRmt+iu9TLwcgMjFz5p1Wm2ekN2 -orVqw8+DswxQ+vvtTmVVSlkcCjgbu8joOKGThIlcw0jjvOxoytqsYzGCm2B9BNG+aWSVMY191Njr -xGbdNGAThJjHDIWiyCkg8eIb+0/WZ1pFmXeKdhIGnlDPYWrAEvRdBTnLunhkLbRTuCiS2OUesNkH -H0zcEmS0yCQMpqw46DlGnVu4XQD2e9PS5XKhWsRhPLp2PXxAgcqnQZMvC/bhcLJlaYdWHl9/+/am -nApWfbKnwjRNVJUFY2YWFLKMIi6LHOEEDx9iiFQAM5sW3LYdJfHonZT4QNM00/VyofPTkzyYUD3+ -0dep2WY/fJoxwzXHEmkQnzWKpBMKtT+LcYpCB3Au0n92fU/RNH0yV1zXVcs6FrPMOo77M+ONeV5U -3YUJyWNYB8JBITRCVQDHG5SvURh9sunGs1/Xjdq28VBiHnulOp6Kooiens6SmJsb7n/EPonSV4OJ -Cfnyvjsch8vmlfKiVFoyAipwOIOQhYw7bFx4Ntgb9zGVJwgCent7U+6JdbIJg4BmM3K0Y1M8f3bU -nSQHcfFGlJZYlmaZsWeP1O3KWtYz/2HTdOkgcN8H4zhMZ6zNF/NjNrXEWwyAh1g9WKph6mPXA3/m -SKpf5trUNVfLACxhggNpsjugY5XPL/NC96al97c3Op6OdDyeVGTH4DQnDg0S77euK1VlIXTk2caD -r+rIC4VWFEU0a0+2M3ouNEdIZYlmz6hxniPvg76/f6gO+/z0RE/nM2V5TenoYpuxYcZxUsNELPCu -42gynLpZmqhL8b7vMn/n8RHm7HYzY9FhdAbPABvkaVl21tgCB2El0cq8qF2pCTEJbnTYRyEM9HHs -ZUUd1iFGzU1k5PXIuLPUXme1xZtFHV+i0EPL7/cbJUmn8/pty9XwM05iut8bShLmsEPnsK7Gv35Z -aF5WdUq2cmFr+LpFkdrGXy4XjVjHJWG9Ie0/rDitqCxy+d2rHpKP8mkr58X0yB4+jyPSbWOHa1fF -bjpWXB48Kyw+AeDQsjTtQQ9cQenIIujCz4TZBgOTzr7Nkna4Xa6pKguK4kRFX2VZUp5llGY834dd -u429w82PgxucgjAM6XQ+i5aBlE7PMfQ73ZuW+r6n0+kknIqYFolKjyFdBNpYloUKdYZhYL+5xCHq -oMiCLMO+Z7OO2VDK2jRavHCYjsTrpC9q2zYq8px2CY20RCCrBNMTXiSe0xRqqq81C7HeadyHB+qE -Yo0imKji7MNtxWL7rL7nHhLhEdYQApuhbRnYZOBnFGDLEU8sjRYLxjowoWfGi7bfR0G3eZIDsZVF -m1M/uUUSGlcaO9JCZFUurVDb9XR7ffWo2vem9cprlM5JHKmkeDativU84PZiFpyiorqqOCrtcqFt -K/WAfSTwFAUb0URxQuvaakKuu3xCORBcm2DNaiFr/jOCEhKEwLWADgHvDJcGbOLgKYnDE7kRuJQ4 -+8A3ScHzGUyKEUJQnJR4NxeHs6GPIha50TR51eo4TZo7gPh06zGBwx7Sc2BQbozNGFHb3j0rOXaV -5vTry/WmJjd1XXMwyLpuWjbxuIzHLBjpIe3GOqDiIdpNhVEP/PJmKaVAPwR6Cq69IuKS7msViI5n -EDlLo2lib75pVgBHqbuU0zCOak6yLLvh7+dqKwVr7wWL/954uXEWiQWJAj3o/d7oHN0RUTLtB2GI -ChDL8d1DVe3BRu1xpr6uGy2ipGO76kYO2eDB+CLTWwqVA3j5+Ls296BpGpUYs4lKo+0Tekho6K3s -F6Dd6+t3+stf/jdKkoQulwtVVaVpPI8j1jzPKM9LmqfR+/eWyIIKM8s4DIaFYKFiHAzM5jSo07Dj -kljji0f5rL2tNUJrHLSFdc9sV0q7HfnZywNrAG0SDD9ADS44tBgAACAASURBVEdFCaotDjN7efG4 -fDe+EL4f4GOVYcNt/Ti00DOizbOUZllbGP2hxYGBjPVphEdDVZUUJzUliQ+KxnmW0rLkSnPFh0BE -NXL4lA4pHxzKOB6phGoPxZxvP4657wdx79lMFHLisZvWlRRjOB6PWkUEQUA/3t6V+LEZthb3nO7W -zNKE4iSmuWkUZXeuRUwSYjNSuM3OejtAYmsXEwxPApEUAzHGyBG3P8tjjxRGzshjk81sc/+s95tN -G3bx0YExFY30lsahwWlDMjcPI7rdV73FASihVePQTP5O4NEjpBR02CRJNJ/Bthd/+9t/0NPTmY7H -I6VprpLmw+Gg4JETuzjef9t2+p6LoqRKAkbsP9j8uRwAkHJjMsMhGxktbWc8GGcVnvH8mpF2TKDc -JGVUdio89ebZ+R0mMYNxGP3ypdR9unRsiIkLVyXPCIQlyplMcnzffzBMg2DxDiisdeskhX8PKvlj -e9i2DZUyvoP6UpWrxn0LICY0HVEU0fV6pWEY6Xw+C67wrnR8BPUE//Zv/23nUUzPMVJZqtrxvh9U -LAEtNXpUNjishCjBaLstw4PA6ead86wtoSLV+9tZeNf1Okvn2zSSyoF7GKgN4Q4Dog4YfTzHDTRX -blU7Lf6zNmiCgZJUrMNuhJzEKAyoaTvxpou1BOUDZ/N6TjX4SFOaZMOnwoBzn5E/bxQhv07syGT2 -z71zTmVZsNAj5ANn3zZKs5wul4vmNUCzzmVm7GkQVskRYDux3pTHzmeOM/k2Oh4OtG6rjupQ1ez7 -Tt+/fafnl2d6enqmtm01k34YXGTX7Xb7JP1FeT+Ok8S3Z1LCL14/i2fFvoR843Os+l0Ulq7CcWrJ -jaqylEO8Nx6QbmL08X6hOOH2om1bqusDlUVOmRCaLIBrDw5L0OJLzmER8BLAGuKIt1meN6qwx4M9 -kGlEqLyBVC4gHMD8sxdtSZCcXBYlTfOkVl8Ig8W6t/6cFh8C5wVMUvg8gBAGxi32tAK6f/zxtx2n -TmYcdFFSdl1P//Ivf6FpHMV4YfS0xXnOL7ksOR8dckv0RE3T0NPTk3qtgc47TrM6+jw65B4PBwqj -mG63K91udzqdjtLvH2ieR5UR294Lm82GlURRSF+/fqPz+axWTdZIcxiYx82kHDa1RGpREHCgxf1+ -p6ens45GYZFuLZ2AYwxi3f329kHPz0+U5zldrzc6Hg8eeGT9BjjWuZcwU+avY9QGujFixvDnrTJu -nieqq0qz7h/xhcvlQs/Pz0JeWqjrWsoytiNDkCfaorvwGLZto+fnZ4qiiv7jP/6NzuczlQWPN+/3 -m3dgO8do/vlod+AK/e37Kz09PX3itKNHh/szSmt85kK087fbnc7nM+37TufTkdZ1Ewnupq2k1Wlw -5t+B/vrXf6fT6UQBEb28MO/e9uuPiUOggWNtwevvcrnwzzGWeUnC8vbZMg8fxFTwH2zbjsoyV84H -ql9MGUD3LYqCDgcevf71r/8vVVVJp9OZrtcbvbzw+4P2xFYpbduoYvLj40OEQrnuqff3D/o//+v/ -oepYVDRpmnJbWhQ5xVFsnGzdogCFchgGen//UHYcCCBZmggxo1PjSgsO8WkYarbZvhONs4uGQh8z -L/7Du95uOtrCIs8yNhvJs1T7b9zO6IWxmKDkA0vOllzwh3PjLtePFbKhh36g0/lEeZZR2zQs+zU9 -L9BeZK0jgy2XEvx8PrHaK03F8stlzC/LzJFMJrmX3YtiiuKEZnH8wecbx8m41TJOsxnSB9oNou0T -X9+OjhzCLoESEoQJsorlwIPGncSjYhBd3+vh+jiVAOFkUADLn9/bRYv/RqYeI/a9xmEVRak26ojn -htYCASjWBt4CxhCtBUFIX758kcM9UH28NfS0ZCRIkYEtOD0+9+Bu08aa2hRFITXtSGWRU57l1EjL -gmeYpgkVRU7bumkSVBg6NijnUUZ6kRQyDr3fb+LzV0jLuamfpj2YbCAosKi6rihNM3p7e9Pnge+W -55l6X0LDEUUhxRwbPXyyPbJpqvO8SBwUu8pCibbtO41D79kcY0MhIGTfN817v16vciq2Gr6ASuNR -bAMgbhxHprXK7XdvWrMBgcKG3gjOBoPgZwJlR6w0QDLm7rMTLysde0ozTktOs4wm+W6QmQLVj6JQ -Z9D22SHngIHTzJOYgr8Nj3ubhMQ92vZJRcYONJyInOeZx09w72qh2+2VAdMs101s2W2WiIMAyWEc -xSU59lxi8OwHY2NmPRAtecd+D3gJ4KYbH9Shj8KzcXJJQwDZ7LqDmAgtShiG9Pb2ptqSSfr5oshp -F508/8xRE6+n6UbbFnt8fgvAPY5nUb0MGo0207alypC9XK5a6gNcddZxkQayZFnO1d0wUBRHNE5E -Ybjqd4BzLyrSYRxpE83F8Xiksigoywv6449venldLh8COLp0KYD3KsxLYvr555+ZqVsUFAgIOE+T -5FaEVBY5tzZRzGpAO3d/fCAAxuyCA8NsmmZaHh4sIqxb435igbOicF8a82O7+R2hg1QJCOApinix -PfL6LUKLUd3tdpODIlbAMo4T+n555flzWdI///lVQcDz05kWyeura/Ym3LbdmKVmHiXWmjRgJDOo -IIkty7ftTtfrVQ+7oijper0KXTilvr95kmsGeVaPmxBFPK758vJCYRTS5XLVgA3ekKCz5hqEwoxI -8PEXwVZaNVWxmXib2ZQYB3M71+t78bEdFxwShYEnFsPvv1yu1DYtVaIpsBsNPwMx59ZaHsExcRTT -7X6jy3URQ43FM2hBiq5zXprFVyBjc8yPD5mLMw/l559/ojiOhUcQ6SHeto3yQexYNIkj2uTz4LBB -hB2qDtjA2XxJZC1gcjQMA/V9T09PZ+8ZpGnKY7n6wK4/faffEVXGMI7UCfgKWrV6WAjBSG3ml5W2 -bfY0GjDo2fadZjNexOUexyxTj29ioIE5uS0heZHsugCmadcXFlDgzUF//PihC71tG0aBq5IWYT+h -auCHV9I8j5Smmc5FIZ9EP4MNjnBQlInbtlHfd56Xu1WKJXFMd4kXY4vqiIjcDBsjkHmeaZy4uvjy -5QulSaq5bGEY0sfloj6GznHGjXdUqy4JwRYstXpr5laUFMc8U8YGLWRGbduTefGDPcCpOJ/Ya3Db -dhWgpEmqL3XfiV5ff1BdlzqHfwx2KYrSMArdGOt+7xWo7dqODseDgF7ynaWFsso5R7vdTAUzeIYf -h+OBnp/OdLnevb9jPQDAaGPJ9WQ4EKswL1MtY3HA1HXF9O60oHH8pocHVzF8w23bSufTUcEuXE6M -/Keqf+ASPPFyAOAkHMcOsASbsB8GHXdySzp4HBI8bxzOWcZkp6qqaRg65ZCg/YmihNr2qsw9x+u3 -sWC7trS4eJMko8vlu5cibR2rMcK93b7xaHddvHezritt4k8ZQwmWZ6kktzrnUYQbWmtrJNNaRxrX -x7IKbdtWqquKivJIbdOpwi5JEvrjj6/Kzw+C1ltcLLhJlavNwNlC80MIhHP6ib2ydBf+Nh5MEsfU -zA2VknGAW4ZpooW+rDw/0b7PFMU8QnTKw53SJFEGYZqmNEspDXkwV0Shjk6x2dBy5HmmVtR3ibTm -1KHC87B/XEg2F6BpW+rkhTn14qyHD8u02bI7jEIPII2imD4+PqiuueqJo1h56VikGJOdn87c0xYl -HY+zKA8nnj3L7YvPaA1SWWCVKlsOlV6cFER01/bndrvrGAqbGov/sVXAtCUKI2Xc4XexOUmjbrc7 -cdoN7M/r+kBFeXSyceFCoNcOArA4RVabpEr1jeOIdtr1MOr6gacI66AVkq854GeH9wOfCvhY8ufe -6H5vjBFpwBJrmbDMM6+vv/3tP+h8PtHpdDLeAhH7PAgjF+NrjE5tWrFNh8LIdZkX/X4WZ1PujuNN -F5rdjpMaaDoQdDU9lLmxTWc5Hk8irinEjiqhdR2p7Vqd65dFLgakH1RVtRed7ND7WHrvRRhdo04W -7LgGbYINoYTwBe7BLN4ZKcszPcHRO217R2XBh8A8NXIDLR7bMU1i6kXAhN/P4E2oJeD5fNToaxxC -EBwVeU5d19HH5aK3jXW4scEh6DGXZSVUZSj/VgGSQIgZNBAz1ISl0/lE5xN71wdBZzznF6nMMnW/ -xUaxSbVJzDcjTxc6BYDHoaM8izyPP4xdy7L0xlGsbst13HS/36lpWpkC8YIE2OryGmcdK+OdQZAU -xxGNJkqMmXS78ueLgidP6InRe/N7ejehNqHn0TAMo0e4+bhcVB8BUZXDbpiC7Pz/mYoLfkYcx7TK -n8WGhFw7TTOa55aGYaC2aelwPFCSxNKiTR6IGYYhvbw80fF4ouPxQB8fF70AWeuyfMqBDEWF+Aiw -Wl0EuB/zPCnhD4D/tm0sB56XVeOzrYXUvDh/fZhbIu5o38lbEIgXg/mlzYDjh5FSIAkqT0/PdDw+ -0Tz1CgTt+y4WX6v8jkB6+ljLa+s6y+Vro23FrkGPpFwAa+v0iG9wRmGj828LYKkl2cZJM8fTSQ1S -lI8tgOC6rhQLoGWzCpHvB7IIxqVR6DICMVK83e50PB4oSWqVOvNCy7SFKPJckXhlm0XOxjrGRGK9 -6vtANNb5fGYcJcko7Hu63+/eoYZEHWu5lefM3Bynkaa58IxIeWSaqUEqLM/++fvvdDqf9Ta21RoO -rbLIKRG2JsDU9/cPxW8slsROyy2tG2TIuZdXqMlG2+7x8fOMWXnrtguj80R1lepNahOuUXh0XWsc -rlLdIK+vb/Tzzy+UJAcVS0VhpBZpvinqJozAxatW0ySlsuKWGF4YaCXg3RjHkW7+JDlQHDee8xbz -SBINVmEAPdQcT8vGtYcBxp/c+uxaRbA+YmIMAHNObASAQ0kceUGOaZJSHw5KNbTRUChHrTedRVuR -L4DRW9/dKM0KmudWudbQds9yM12vV8eii2Lqupvq662oxpbsMJnI84ySBxoqbug0Tb1NYA8R++dx -6loKKDZgmjFn/eNyUYMJ8NY5bTeVm4epzLHwyjEuto48dV3qpoGdV1nkukE53ZbHjKoajGBiMnoO -StfrldZ1U7oryExdP9DatJ5BJWsqbJjLqhOBgHw/OuugpJJf0LPlcDg/PdHpeFCm4ONtFIYhzctK -0/2us3s++DNxiSpp31jdZpF/UHHtAWUTeYOAqJTw1ziOaFlXRebzvJBoNHdIW+MQKAKR28eKQBf1 -VhQZnU5nwbMW6oeBBlHvYSTq2Y7LwYZSe9tWakSxaY1RkyThRJ9I2iqZnDRNS0HQ6UWAvwMeAV8o -u4d9Oa3E7rXEeGZ4jrzPEs8aLj4ej1SVzD4CIIX+LpHeAYfAKDPIKAwozjOaJidw+PXX3+n5+Uwv -Ly8qUcUH1MguKdG3MFQbcABzQMnHoVf7IhVghIEEdHJJBk9BHWtlqb7wr1+/0eFQKzX1cdyD74je -N8v4MHDCCWaSWVooNhhwh3meqW0bA9iwdHYYRn1JccyHVtM0VIkbL8pb9Go4gPI8p6qqiCikJBl0 -AQ3mluHFOmnpZ6O5bVmIMSBKcSTwEDlyEErXPC9pXRsRwCyetwA2AH6HndSoW42M7bDY4G0fBBEN -w7sGftj0Ziy+6+VKlQiswLbbt4X++PqNHW+NYSpuSCT48PoYVBeBagr05rbtdA0hUi2RQBh3qK9a -zSUJz+yLolSNCw61w+Hg3JSHxhzwifd9HoNWHL8k8BKH4XgEjwYrQkOli4sA2JmlXMP/IkkSGnQM -uxhNyfogjuLL+fX1h2phbEx6DDcXlN9M6kiVNGNBAywE+L4BuY7jiM6nIz0/c2kPzKAscs+aKQwj -ipOYprmlv//9V6qrio6ng2xm3kzzsupMvxQueWjklUmSSO9JanYwTpv2gXCySdNEXYh8S7OQbjcm -YRRFLj4BbtTJ1NGC7ve7N7rC34WFVlWVKkyal5XCcfwUCNp1HU3jLL1XrgYh07TrDYcTHONB25uy -jmD95A4LZ1eblWil0GnK5pOL6BAu15vOna1as+87xSzQtuCgQmlpfQRtS9U0dy+zD8+5aRp1rgUK -DgNUa2SSZqk6Mn1/fVUAFcaxaJXYIHWjvp89z4Msy2kcB280iU3DrarLIJiXhQZ5PxZ0Bv6EZz5P -k1rdp6lTD0ItiQvg9fWV6rqiJMmNtVnySfbN686xJVFl2cpOcw4WRzfHpZtLOE+R54IjcTW0GPUi -BHxcPTREtKsnACq7OGbuyZP4Co5DT4us0xg3O3zUVHUlriZJ4ju5Wulk0zRCbsno/HSmuj6oh1+W -JpTlBRF9qCNK1/cUDOxDV5YljdNIcfxMXdfRumZaksFdh3UAPd2bRi2WMIpj0kOqnvhN2yqXnzX8 -pYwKmeWIWC6X/BvSPC/ag3FPXyoHHTNiaxoJUVQQBDSNIxOhZGGhpGWzilH7ycOxFjVWLVRdF1SJ -hCE7R7cR64+cdZsKxMBg9GlMhr66bVu63a40TSOVZa6It3XogUMRRnjwebSVBMaJ1rwUHHlbEVjf -PMzq8yylRXrxJI5p3x1xiqPkMsryQsdiO0kWgAhVfry90TRN9PHxIUS0XL0cMc6FpBseCfBiVFGW -CUeBwhN4jy/IIbo3jZi1xMZKfqCyLHSsu22biqLmZZXnW2r75RKlXAXjqNPkYRcWi7AsRPzvuK2R -G2jJb05n4zwtEOGHjAJoa8Iw0EsTkw0FW/HBnN2xYzhBkgm2luWY49RLEnYk5ZK70eivTZR9TdOq -AgzlTJqm9NNPTCs+HL7Q8djwBg0Dz/1l0T6O1UuwpgrDSAMlEQGNh4YSt2laNpvoeq+KgXCGbc1K -vXnGaVbXFEQ/8YEzeQ49TMZIKY6YReiiythqvOtaHddFYSA360bT2Ht6ACC0sIECD+NR1w6zj8Vw -BELPiSn6VAZmqZM7c3lb6nO8XK46YrN5eNxycR/ciyNTmqbq3gTcx2EiqxfmAg/FZZnp9fUH5XlO -379/pzhOaF4+h7hAwbZvjToqo+K4G4INiFnMSGR9RpIkmr+w76T2bbCuS1NHF0+S2Ku2sEFh5mL5 -I70AbUybhvAplcQfPhDwXMIwoqoqHKlrcI6+IBlxhPriJUM/KgLt2sI7dSYljKVxliDvi8C4HuH9 -QxPBNnclxUlGsRCtAKKDIDdNF70I13VlSzBrKAjJJcQmcI7N80wYYqP235jZJ0lCX799174CD2wY -7jQMvVoyQz9twyX7/kOz5rO0oCiaPzm2JJKOCmsquxl6IQghJISlyZmQPtjaClZPrqzetLREKo87 -dRNvo2UyHrKl3TTN1Eyt01RLfkF7u3GSb1FQUeRs13Rv9PklMSlmgp8HEw2EQljOOnzpoQVAmbmu -q6bybNtGt9tVuAcp9X0nJp+uf87SVDMQnBOvT4/FXBnWaVpJdK3yKGz+H8IxLQcfbeH5fPLCZp6f -n9XCCwYyWMDItAfmwdmUkTEPDelQ17QTj9XWdWMNg5T8qDhiLxnHaejhXCVwkq4nO0IGfwQmIEkc -Udv19P7+zuK3B+UdEdHtftPDBlZb8MeoyoI2MWHp+14NRrDpHyu6x39vJzM43BF7DkKXvSjwfeM4 -Vum8f1E4Q5JNKNaoImIIC97f3ukgqrVF0FYcDkDveVOP+pDGadMse3DB67qmKAwUrT8cDlq+8d9N -9DScF6J1nXRWafPP0A6gh7NqKzffjZSiG4UBrWb8Mc+LlPiT58Xm8tdinXZAa76uHPEFVxpYSyWy -enBQIvONKFKRD8p+pY1uG/XDQOfzmTMH8hO17bsCVuDbY56+zIuna3c+jJvnn7Cuq5qrghtQ1weP -qg2hET5vI4QTmzEPpx9kOtiWo+97nSLYVGxLIWYLNufahCTdIAjpdDpRnpcym2+oLJ9pGP7wSlmb -sPRoFxbKuBhMOFQq8C9s2laVi5Y9xzLlK5VlpQcI3j2byKTqUYkLBa0gJiD7vtP1dtd3CSrz99dX -rWIwckZBAzCb13foCdng7WCtxXChqIGOfAZ4DYIubPMKwLko8lxDb1j9l6mzUSLCIlxq1i4cno4M -fjrBWfA//+f/s0N7fDqdtaRwHzLxONr35q7jPqa8ZoqEHuoDZXlJb2+vWqpD2x5HkbzISAkTzu4o -0NMJixwPmeWXiSLa7IAaeJpojAn7oVeNNrLTUe46SnCgZT40+k7EtGqPyLr92XM9ciqyUOXHiTix -4KQF43CWMnnfdyqLkuIkptvtRsMwip99objL8VAroIp3gXEsq8FWSpKYirygfuBgU4y39m1lAVOa -6jOG0eY0zd7nw7vkDL1GFrhL0B3k+fGtnipCD6OJvu+1+rIWZtDptyI3xWhu34nBUjG8gDMyyCto -X5xuI1JPB8dY3L2UHoCfWBOYzUOVCZ57XZU0i/oRnwXZCGzGOnlyZtva4sDNBAMjCunbt2+MBYh/ -IrQlaZro4d91HZUlqxnZrPOuVQ94/LYlcIYnC7Vtp/sJa8ONZ5HiHInZyEqTcDy2baPz6aQ8DgC5 -8ITAhV1X/I6m2VUVcRxT8Ntv/74jHYets0L6+PjQ3rC53+nl5UXTYRySftNy34JVkP6iJ/727Ru9 -vLx8isTWubA6EHHPBbACt823b9/py5cXT4hjI8vQH1tVHhBUIqLX11f66aefPN5C17UaKIGSG/23 -zl1FKdg0DbMTjTWYLdUsCw6gntWZv76+KnsS2gKIZrC5eBy3UtPcpaS/aU7h6+sPOp/P+mwhRLJj -MXtzPvItmvudyqrSdgr9ohW+MJjluPjMemPA9f3tnZ6ezmqwacFGLHr0vU5xGKqt+cfHhb58eaZh -GCnPMwoltgoa/CRJnONTlmpcGn7e5XLR7w8dhR1z7kJks34CeZZSLqYgX79+o5NMmvB+LdBqzWJx -mTVNwwaaRU7/+Mfvyp47HA5ijXZVQRAmYsiPgDcDaMBd21JRlp78/M+8EfB+IM8Hn+B2Y3mwrR7s -gaVmLX2nWRR930sAT0Ft29H5zN8FY3FU/dfrlWI2ImBziHVZqB86RZb3fafL9UqJIP0ujSeh8/ns -5qsmqhuo+ob8NBO8aDnqlt5rxyjWk856srmgicBzVekECIJHgUZzp5xR5zL5Vh2VQfsAk8xHOS9b -eTFrjTMREw3OnGaWBgNYsfLYcdw/ZcjxSy3U/ALe7lEU6Tx/HC/6GYDmpmlC+4PhpWWfocUB6Kl2 -VIYsNAwLNW1HhZCM+CbcDLYSCe26dWQv4cYjzXleFqVl2zRh3KhbntM4jlTXtWIMuHXatpEIuU05 -/2jlkiTRZCPLKmy77k/dkAEawrcRt5/dFPjPME5qOIMx2CMGZHEWFVhJpQMrOGxu7qnZoWkSMxjE -2KElZD7EJpuw1/U7LysVOkrld/JnbSzG5hwtvtE+DJRK1biuC0e1Gb4LJhJoGdhladFWPI5jyU5w -JL45ddOF243HzjFnrLFPu5XvwqWG+2GXzw76K8qNfSdlWLkQRVJOteXvo7xn1iB581Cc/iix7KHx -aKYI92G475xORzVQsAQWe1MBgYYTCrAL5xIbKa9eXV+xSQzYOc3OcYgNK0BySbWlwVwcn5Utn1PN -UUB5DtcYTky+a5XB8dwt4d20bavjJpsN/2gVjsUExVgr6DFuxlmsoLGJQcays/44ioUUFunzwkaD -ExK+XxTG5jm5Vsqaa0LPgCgrYAZgpimBRWLXbQ4CDsVHIZhda0ppNTN9RIxbXwW7luBGhH7e2biR -FxiayXrAcwgEh8DPseM8HCSxtLJoVbitXBU8tu7LFmyGccc8t17aELdRNR3qihoxi/GDQF0ep90r -PO0qqe9Hj6wFVeE9CCnPE4q3ddNbySKw+GJFXqibCUwOcZKOQoKxL+hx1uoLGIi+fftOWZZQXR+U -2TSOA3XdpjmDeEn4HChPsWjcKC2k47Gm56cnvsnGkaJo+VMvfXuAIJXlQ7z4MLu3VstxnFDTdhIT -HuhtZeezbC6SqHaCN6KLLgOnAOagvhw2pKEflAyDFuVy+dADBsYWSFdmh5vF8wuw1GvQsSGiAjsP -FYEVToUPnoaO579oOOfhcKCm6bxDFFRhpPdoXNu6iFR6U3ltnuc0jpN+FyDh1gXKXgwqioojFcDY -1o7jsGO9ZIZhlFCORVWIoM0CfLNVhw0OQfkOh2lElDkKLzsVgaTmFICh8gyYrn7RUWvfdxRFBy+J -ehwnquvNc1PC2gB5Ca0wJMpY98gfPNQ1xUlBYTjogeVcl1J9n5PR3swze2K0LbczsAfHJYYWOZ7m -Sfqeu4RlZp5rTpxEgvJP3ukFD0H4qLnFHenJj5eKFzBNIxVFTnXNJ9o88wHy22+/U55n9PPPP6tZ -hKNjhh5aisWItJOqqinNCtp3dl+xfSjz3AMPVbfThLo+6NhwWRY6HGrtk/AQUTJbrwRk753PJy3f -bO8KgopdCPb3opw9ng6sJJRxJQNPTzqXZrv0iPKajUGPx4P4KIaf+Pk6z5bNiR7f3hbAZ3Bj/tno -CVRX+NldLhf6y19+8aiuYRDQMM+0bZGW5DbV2ZJw1nXR8Sa/h9hzn0bVBo9Gm7dnnZTtAYTEHfSx -4JhgI6MyYFXe5lUSqFjcDbzohYBoeBsQ49ylGZgE/dkeXkXBPgyaCRAG3mfFfmCQclJbL0u15kMh -1LVLRHS9XPnvLAuNtw/FWyyWoOtp9h2IofVI5PlZpiK3k3yRxtZsgJHkWOmnURTROOwUJK6PVvQ1 -gcVWZII0Ji1RMWu1o5h9J938cZLR5Xqjfd/o5eWJwjCil5cXJRIFAbPzlnnx6JsIYEwSN+rouruO -UfCy7bjS2n3f73d2lBEz0DDM2KFXyvXD4UTrMtJibiS0D5BwVhWPh07HI0tmp9njUmAkxDeS34pY -LITn2itNo/HRT2JhUPKsue1aeilenJd7GGklYstHtUNLU8VEQPLClMRm9D0q2XC7sgox1568aVpl -CoJcsytiH+jkw/LgsXn48AmVnoy/g4sBjEIcRHme5FpWKAAAIABJREFUi2tPbA6SwBvfxjHbXe87 -qU0diE5oQ7q+p7/+9d/p+flZrdwRQIs26/ff/6C6LlWWjv758fPjc0CLsZuqh3UsNdUVr2c3f2fq -Oq8pUgcnduSNlcsAFaOjCkdeNmdZMTjMLseNCSQlWtdAAFzycg1A4cZn3kzlhINuFjpyHMcUwwkH -2eWryAcd0DFTRpmHQmqCyrJ6pBYr+Hh7f/NUe5ZcMs+zJtWu60rH44ktjKKKsnTUsM5hnLS0nGeH -9Pf9QH3v2E+h8d3Dza1l7ea7+QDXsO44KHud/ffqiTzY8XbWzVYUpXi2HWmZG413srfVtq1ezDPM -TUE0cvHPDOaxXj+mQG61R1cfVo9FFCcFRSIi4dZiUpBr2zb1DETFxEywWIg2o/bosEKD8zCAI1QY -19tdA2GQa4fodzjUAky0vIZ13YxpCVt64eAEDhKQ890Hgs+HV0J7XcscO1YMyU5+5plHujAd6XtS -ang/DFSI3uGXX36m5+dnbSOwWUEXrqqS+RNC+rHEKKDkTIN3KUU4ANXKLI5oXVlluG7OZanre10v -1kMCGxXveVtmT5X6qEgty5LaptHoPs2/EDs+EKDs38GaQcs3z7NWDexjuXpVUNwJ8BIEgRIM1Bbr -44PatqVM7KuwgTGjtOIQoKJsybRJL5NSEs8eR31dN+qlp8cHA3V1vH9X1pW3cZbVA740/ktJQ7vn -VOMird3IZ1kWWuWWwYwbefHWDBPtECcPR577kbVPX9aFxtsPL90XLwK3AJewzoqab5HxE4inBpvb -Tn1717bhdrvSOM7yLt4FrOq0HE7T1MNKbFqPE6YEqjeA3h74CeKp45h9FwGyjWP7YP21iDakoG1d -NAjD4hCwP1NvCKmKPL77ttMyjS7uTA1JVrrdOgEwM6N+XD9Roy3ZKssLFWMBzOyHgW63m9iDH+l6 -HWnfezEInZkwlKbUioFHlpXqTu1s3wdlUSaqzttUlqyYlnx/aBWsn4GNtstz9nvM0oIPB+Ph52zy -Mj3wMAmbponePz4oSRPFNaZpdH4VIn7Cbf7Yoj9WzZjEWKBaydlW/cVkm5gqmR8fDwfq+p6maaRl -iT7Ngq09tFVaZWlC85R4p3gQBHS9XClOHMr88fEuIEpPbdvSTz990Vz00Bwc+G/0exbdxYNgnvdg -TB3WTwEQiN+Gnx7MSPCQ8LNRYsdRrP09NmqWptRMrRcGikPJBkfixEdSkCVO4SWBfejahI2iCIm/ -KG0d9oH05GWZ6XplC/VCqNCP1lo8D849JqG15cqyVJNmb7c7NU0jZXVBVVnSKFMVBkHvn1yLAcxa -Gnkgt52VYIN7YcVDzm47obpO1A8CakdOm+o/4Rtw0b1LzJmND09ip/XoupYulx/05csXGsdJk4NQ -lvf94MlzHR0+UbLT7bZ7ORR936nrUCTtD+LhwOjDJYRDsihKniDMk1bVIDM1TSOOzzlN090bT377 -9p3WdVGvCHbXTj5NWyz3AgeItZez3hF2jcZxxFqAx/GKTgDEZCGKY4mljtSY4JEEg9Nu2zb69dff -NBij63s6CV96GEa+cRIm/Dydz14PmKYpVVVFT0/PagzBJJX5UwCD7SUBcljHWjALLUCGG0UrAqN/ -YIAGrjK5ovqsflwUnEQ5frlePBqstXbyTUgWNT7F5ofRJObInKnHXnXfv78y4SSOGOBMJ8ryQj0T -8qI004hEZKmxuuzY94ES3WovLF7BtN9Bqo07LcvMEeJSqi/LTMM4UCySU9trWnBRc+klRBQ5i4xQ -Rx4LEbFluM1A8Nl3FtUEAem42QrVJpOabB1vnK8go+hLltO+b5SmufbMqCbRKoXG7o7Hzr0aveL9 -RRHP/Yehp7IsTFSdc2tGPFocu2zIeXaJwLD0CgLSCDkYctjRISjKTsLLysXz+UR9P1BVHajvGomp -I60QIU+OY35/j4ehtXHDgWGxmnXdKIYDzSNXGXZJ0zTR169/KNca5iH4Qkyumbz59PPzE/3ll18o -lkBJgEFcWbB/YJomYhrZU11VtG6rxiJHUUKbnjG798DwxZWp9v5OWZZ7Xv8IIEUFY28oy8SyCkfb -xqA8xedumkb75G1zSbXWqgyKQCDJVhuulYD0lujpmAHGC3OeZ8qzVIVEccwg5+XSUxS9O9uzeaY0 -ibVvZZJRSUEQeSCcxVwY/InVHRY3xroGynpECZ9nGecrzjNdb3cxP2FfRyteAT3aJunaQBJsFLw7 -y0/AAVCWld6e93vjuRW7g3qmOD44LCR2IKh1FsbmBVkGhxuSd6yNGkCwUWzcsXZaoVFbzAEXlJ2U -YWKAuT7GxBhtYpSXxDGNwyAu2IuyXdFaJhITxz4WR48gtO9Ex+NRXKASBWGhU2GjmUoMTifPSWoU -fOB2u3nYla3Omf9yZ1PQPMuoaVtdOL49OB8EmBuuwpfHTQu9gG0Ljscj+8+FmXdrnE5n5o0nCQ19 -R8vc0zBOCoRgg18ub96MGskziPAKQ9yemzcLxwLlcoo3YZok3me1SL1F0T+PD6H849FllmXiNPRQ -AstILIp8lR8onnZkZLX3LMDZ5GDcRP3FmXNxFFMYxTR3HW3bquMfJPqgTcBn/vh4/9SWIdATbcG2 -rWwiaUpztCLT7A4NCIeGYdCRKIeEJlQWBScwZ6mHhlsFI2ba+r1Dh+kMw0jfvn3XiYANDsElgsVp -rdHx/eHpD9DVchf00AtDKvJEfCJIDyLrZGQj8Hzk35mLvL+/0/F4VMt0TMqSJKHr7a5tI1yFbEYE -ngmb1Ux0v9+05Lbcl3VNhPe/0jT2oiuYFMjOMg7i+e23/4+enp6UKszipVlThZqm1YCULMtp3Vqf -F2Hi02xYTJIkFHM4Zuj1Cz6QtFGeVxrgOJkSEmXlME5eJHMYRnS9fuj4xYJJoyTdfn/9oaMtkCTw -8lEeO7CMVL+Nw0aDJrNcEWH0PjgEioITUayLsL2VLCcct+diUGm9VTR7PaV1WajtOjWiAECJGxGo -7N///isdjwePFYhbhohoMGUaMgZRIs7LQhachRIMGxaHLnrmdY08Q1PnhBtr1QG5LfIZLA4B1pp9 -/2VZSvZ8QOfzmcZx0OonkrK+ae56i6dJSpMw/Wx68ibP+TEdOE1irz/FRsV7xgFmDVHCIFCji8dW -B3x+dwCyyQyqVExCuq6jSezYcRtDvNV1LftJiiCnLHKaxGRjE5ffWDAGeBmCA8OCn0RbM3uQOfwp -VLMRNsFZ9WdleSHxaqNiNHEc0UfPictZltHpeNC2No65fbFjWGBbOOSzLCPayeQixN60LklSiqdp -pmEbvVNSraIxKhDyBiKSWSk3qlGIdbMBDmCJQXZzYCECUc3ShJqGD4e6rqSc2fSkAmmBVU6hlvmY -oeJnvr7+8Bbe29sbFQWbRMSGsw+9OCidjwvJKapCIXaQ/rvb7WYUYwuPqzb6k6iuic7nIz09PQvw -FOtsnoMiSp31gsEHlt84+r0uqh4G0NzBjPEnxjrgmrvv5XvAb2rbXSjvvRVqKdo3x6EY1JqLK6ld -Y7/TNFPCVZrys2Yl5qDrxo4h1W5rnr2KLi9KWrddfSLtpAV+AzhYITaydvH2UsEzUUNbY3y6rZtO -FTCCnufFE0yNk09RhlrTOgS7Km4VxyO+bbFhq6oSxmZKrbhUWSNaVG2sZ3AZjSBn3e93qsrCrLtd -cJGEfv75Jzodj5TlFV2vXO0dDgf2RFjmT9FrPPdHtTTRNE9aBaNiUkMZ9CAooXFb4L+xoewXWZZF -F6S15oaABYsSH4bzzZlws9NOAXE5hISVouDeCP8eOmYAFXya5SpCsQIenyTkePFlyV74aAXA9gPt -F85EdtE6xlmiJR3m3KPhgMN/3uoNsOj4c0tOQl3T9cqZiFVVq5hqXTfK5f8Pw5zGaWKHWJlwWAo1 -MyETPUQtE3CaHVUWh7Fl0E3TqIvJJS3FXo48U5HZsy8MArreOq/Cu9/vpjKIKE1iPXyBgTyO6hzn -fjRp0aT6knXd6PX1lcZxlNSk2BPocF5hyZwUuWF7sURno9FOJwhoRwFegg+Adq7rOwqj0POZKIqC -zucTLfOixh54Zqk4OE8zV2FQBq7rplgCeP3QczCL9KA9uJ3DW8svtHs8mRLAUVqSdduVIIRnye3Z -TMfTSTCbWeXFibTRgRk/932noLQLy3VAb2SegwL4//2//187fP2c0QSPnUBJdL02RkyBnpTct/m2 -VOBMMyrKJ1RVMtAHAYizRYo01z7PUmq7TvXvDhCKPI09TvnHTHS2ZCpU157IKfj99btIKiMr4tWN -ge+JF2V16Sg9p3nWEFIOLK0oSzMaJe3n0afAIuMIutyEoQiR0ThxDnyaZjQMvZSDpIflsi5a5dgo -MEd3XT3qq0V4NY8hST6l+kAYxOSeWpJsOj0kNG4riWgaJ5nXb57uQNVu86KVoUPnQy/Hvm1but9b -Oh4P9PL8zADdwCPfw+GgNz3Sk/Ocw2DB5kR7h3YM2AQfzuzpwK7CLu8wFCXj9XqRiUDmuQcdDgea -xonarpUq0gppXKsFfUCeZ67yCiU9WTQPyG9klD6kIpdDPY7ofm+klXLPBM8ROMhjgjIo8PYfNqNN -RQk56t+/Xm+6Z6EOdUrPlC6Xm4494WPhuU798cff9r7vFeVFSY3b7e3tnb58eVFgCDenl62epRRJ -ft8jAeE///M/6V//9V+pLPJPjCvQGlG22oBGxHu/v7/T8/Oz56cH1p6jRgYPoSa8eaZppre3d47r -Lpm+u5gYc5hzYAwDtRr+f+aa3+hwqLUi+vjgmPTnpzNFMd+QMGq0ACPUdD9+vNPpdPQio7IspYAC -ZYyxWxK7Ij2dOUgyzTh56OPjg56enlxak7EU8/3nN514uJYhoKZp6Hg86uJlK7FUf15dV7Stm/bW -SCjC3PlyudLpdPSixi2aDHaaJQXhImFA90JlyWarX16eKQhj2tZFhDYuJ7LvB5mfR0rtBRD5yy8/ -iWx6YM69HNp5zrZruBTazlUJaNW+f3+lX375mer6QG3beMQ1cPJt2q6Vd3Pm5Rudzyet8FDN8HdM -lftQlDWNQ0/DOHqt2MfHB728vKgxrdKtRWWJ0a19n5Y+3zQNPT8/e5JvFaxFMV1vNw0ZGcdJsBW3 -zv/5zz/oy5cvlGepRz1WjgsUY2VR0JZlNIoQByMOBF7aiCVrEQ1+vUVw7S21LFzWbjLuscm+ViyE -UYxFXG1U2cOH/rQgLcEE5TJO8zznEjegXcCXTUt7/r/Jo1FaBiAcXFR3LcYe67rRvbk82DuzTRhK -xGWZ9cQfhlHos5s3ZcmyjArJrONo8oKGodNbLnhgRgLNtac4Ji0XsY6G4+4kijocnKDM2jTltu1E -LxFotYHsenYXbqgs809ho/jzwQMN24FuiZqXgAYcxQlNknoLrsEwdMr+LApWnuZFqZoAtCt8MaQa -WDMvKzVN60V1A8G30xz2N4hFPTiYFKlF7bPASHyU6QK5B/IOqy1E31n/zHm56ibd90h8M1JvkoFn -EQQkzk6TN5GCLB0THwCFePeIq5vmRdykRgVUeTTYfnKYRvWOww1eGtpC4yaG0Qd6NvxCBEuM66p9 -Beya3Dgp+kSFBXHmeDzQ0/lMWV5R216NGm76pBVAKAM+MIwvYCphR4WIV+Y/M5qgjJne3j7oeKyl -vdiMNoA599b9B301Tk2EVIyjawUs6YRvjNQD43AAJQkrsEJjp6YKMSlzcVBaIAsmGBgHPXoiwFIL -VFmrR7dRYgD4MFPGxse7uTetSZpx0uu26z/lEazrSKfTyfPpx5z7UacPIdjHx1VSjio1oYxjxobg -Es0VT8ZxdPOgFSF8AOdlpbVtVbizCBEMG2pdN4rTlLZtVg6CpcOCFGQPqnXj5wf+BTZZkecUJymt -W+cRzOwIEoc38JpJuAMYsa7GoQdTDEs62o11fFEUsglJKyfbtqmfQ8ouSQC1szRx41LjlqT4jxig -2CmIdcy2l5od2a/rygcAUysnyRBzUl7cxriJQZ3th+HTLwIRAQcAa/x7Hb9sm/MwA7j2mMWHFwi2 -mA02iGPyRDT8Yjo2sJhmb+pwONRiDBkrCQibNQoDb7GHYahGJEuPvL7J9NGbHlJxHGlvqdFK4vLi -WIBEs1G74VDl3mtjuXWc0eXCsWds8uFm6NO8PBBCdu1BYUkOJPoxXtyVs5xGa//hwwCgLnm8cwv6 -hmFI5/MT7ftOpxOHvODAwy2CcSYf8EdF3w+HWiTLfIDNhjk3G/JOGAS0mwMYhyNuYi7jcwHEVp0C -QWsAuywl3Ch127V1wAiALfB3nlW6y3ySkC6XD/1ctj2wuArezyLVICoHiOYspoWRo5vQOOdohNde -LleliuNZotJOJU8DRjHLPFOaZcKOjPTn2kwOy8lomrva3cEty7YW1jBU1LyhxxEOw5A3SRjLzDHy -yr3HwM3g4QQEis9OOIVQFHmEhlPcZ/aFylpipmFBaZZpeIFNsmEUM/xki2U/D6LGDoeaoiijj4+L -Y/7JYWbHkhjtsPXS6rEhUfaD2+2Hi646irMpLOj9oKt3N07lsheiWNKYMqqrSu2f8Vwu15seki63 -nunDURjRsIw6J4fEMwwj+vH2RvOcUGKIMhYw1YgtMcpoJSkY38WCoOzKu1FAgWfTBc/7ICCJzapo -l9aKe9GSoiihvev1GfB7mhRQtvwD67VowUu47bZtq1RcKDoxkXFe/7wxAo/KGykJCQy6snTeejb3 -Am1PkrAU2h6GtvVkMtokB4+jZCMwFZgAi+JSkQ874HWaZnUjqqvSi86zUl2oSNXXsWl19AyuDW5z -jBHxObBfsVcgHtI2WcaLSoO3gQT4g4u5OdqupSgO9SS3fHyrSbckA/Th/MUyeWB+RBI2rhNMFLoQ -GgmGsGNHqLRQWuFFwL/QHkz4GVE06Je1L9UCWYgKQ3TZYwaAPT0hRrFzV5TPMKnAYdm2rUhsEynj -WE03jT1FUUhlWWl6Erceq2klEuVIgNCDg+p+f9cACqU+j5Mi5G7CMH8ShsBqDJsHXnjWxRcUVVSE -wzhQWZXqNsT8jUQPa/T1ThTVmXe7PojFEkoSH+yFohFrCOaarHzklge5CfM8K9KPgwuiIttKqGuV -VEp5nrG9GvEtjgsHMXMw1kTOJMbMlsDkvAEirZijKBKswll/b9tGl8tFCU+P9mGq3JSfdbvfnPN2 -GNK2zd6lNw4DRVXlqS/DMBLBVq4/Gwd4URSUJjGlGac7l2VJVVlyRPiy0v3eaKXCjkCmv7JlsS9V -jR587gI1H8AXt4GINjIcI7osTU16rqOxWsUYEnfQiozj6Pno44R1lmGp0iutqSZ6X1+L75tIQr0F -bAF6fFhW4zs1TUtVValT0jT1XpWAzwOhBlSMEO9E8mdZBrp4Jfe8rNT+ePV84C3HnUtiUvsxHKr2 -s1umHTTqaVbo7WRRbfvuEhH4QMQyjBPlWUo/3t6V9g38AswzO3VIhdx0uVxUyAV3H7QbkBxjc6K1 -hCsyxo3WQQitI1cTPB3Z9p2mcVRRlZUJjybzDxJauPgg1i7Lck07hrEHwOGqqllEtCxUFLmuZ6s8 -tAnJ4JQkhrWaJKm2rUxiEhJREnsgsc3J3LeNhmmm+70RR+5CVYfQL+z7rrZrLs5898h30DvYKorl -0Y1iWF3ff6reoSqNcaL41lLuhrbyYJvdbjMDbNADNkae59R1XMp8/fZd6a5WFWdJNOiNgCADIR/H -UUcYjxyCJIn5wNhGT+Ti+OXzJzkwHhw00fxzUhWqcH7fogYXoBVDaz4Mg2coYinDQOnBmNu2jSO6 -zGFoDyYbNmpvbStSwYv9/Z//pDzPvPSaaV29mTzK5tEzrlzVbINzFxJnbyXGqOC2z3Ou/TxorfDV -t2zDfd/VxNOCWIxNrEoMs+QX50rsDGeRS3m9XulwOLAhzbrS8ZioXfrteuVJRZJ4GYz2AIbP4KZu -R5FMijbzXCbFgXBQ26mGDQiBM1YYuBg33pSjtiIIq8HFkWaZmrHgEkBV6arYjYIg0haEx7C1BOoc -tPS3lQJo8PbWBpV5HLmaQhIXPpO1Gm9bTqfG1AOfK80KxjBs78/o96Qnny2B7MjHGiNi7vjx8aGl -qUMgEwGTjnqqslmkWGGZhYpeDKMOq6xKM8e5tlHMEAj5VMj1kzsRPgs+K/fmkffzLperByjB622a -ZrVkQmIORmxOMeZAOYyM0oRjmvp+oPPpSOu2i2nm7lVaeZ6Jz3+iyD8+R5omYnTKJV9V1RrBNRt/ -Ai/vXaYSkM+inYAXv0PtrUou9CTDKNfv90Y8IJzO3CoYbavnnItS40rsoraZtHKVg9G9I4C07Dkw -6eHGE5SRun6gU5oog46fG6+r9/d3LYXnhSnVAPp43EyeWeqj8y8R0TT2wgyFAUgsbYIzGdGqJ810 -CrQKvoPN3PWDYhr8/Ec9NJYlV5s7tG33pqWmaaiua3kfo4av4LJk8U+mzw/jWwugq6/gungzfrSN -VVWpaAhhsNw2MZAa+x9680I+HHuIVKjCxgrOAut6u0uZlUkr4ayckiQh2olOpyda5pHiJKGua5lq -aR4uNhFOct6ks5B+errfG7k5+dCAUAXjSJyIlsRke3mYJdh+/fEws2g6ytUoDKiNhbgiijSAN9wn -r0Ztt3mGpRBtZFlGeVHSm/js2w2r3gMJP/eyyLXMZSCWNQ/cy1VU15WGV8KVxzrI4HZzB0KoPARr -mAn3WTXxiDL1ll+WWRc0m7CGHtDLWMSmZb+d3uCSAIEIC9Zt9kli2Uvqulbp0Tic06yg2+3KNOXr -zZiZ5qr/QJWFLD6MgsdxkF6+9sI6VPQiz8aCooinsy3IMI5eSKtVTkZRRIVJXbIXD7/rXKcsuByt -sSnCOjdZX5wazQG1sIFn1eRgJMqj5jVkaUqt8l9CDRBBK/DYSmqisJDQoAkAEHy/37kFeEytfQTA -YBm+rolurvv9rtbKmKuO4ygpN45x9fXbH7Sss4wrWG+P8k8VWaEjs6zbTm3X6Ak9ygvB/88hoMxZ -uDeN3ngQF2ER2lmpi1mKvAhmKyayNmLjuAvowzfIP//4g3vSLKUgjGleBg+QtNVGFIXi7y5gTky0 -iQsuzEzx56E/j2M+yNDqoJS/Ny2N40hHyWxs205vM1sm8uGUeWUyqinITRUdDwOP+w7J7jQvagln -gWGuPDi7EJRi+AZwLkSiP/ftetFN4HrV2ESPsxnr4XCQg8JZVa/bLtOFwFu8g3ymeSFFtruON9+X -L1+oLCvaNibnIFsijlhzgiAVvGdUtnj/jwGpTkkZeTN1uxc+LhevB7cXzmPZju9v9SqonKEELMtK -R3uROZSLIqdQhFb2vdoJmHWpst8HI0BwIuZ58QJOIevPsoxiBHdCGWb9xhDZVRS5arhdFnvsWW4V -BfcZyzxJ+ugoZVOu5ReflAtLXmWmvO87zYajbZ1LeAEWKsfFOEpjpKSXLsvSlI2zUimxKR/993j0 -GBn/uumTl55tTRBXFoaR3lAYZ6KCcEDRpm6w/Fxb5ivEkVpJ4bay2AkOJFtB2V53fwD71EdwhZ14 -rrRqHGhwv8nzTM1TZiljo4i95Fk3H3pqQIiW2JWHbxcbSooDy7oJw3QTIS/cH7vAEGx0zPaxWI/H -k1JrrZrSElbwnoBLwcMwL0qaxpHehZ4dxwnd7neK4/WTFBeVGlKVgebb5CieraeeshPrAWNq1dHH -Mb29/WAHZbnQ7O9Be7SuLnMC4C2k7tu20f1+9yoS7C2wGPuhp/pQa8uG9wKOg12naA8gMXcZHpM3 -qge5Kk1TivkkafVUVNqo9GWJKWP4w0W66ZqmUSILegomS7iQEAgvypK1+Z2o5SzZx86hH+2q7dzf -2jst66rABzz0t3n6NMbzBUCkAg93E4ceW85ODfCPeqynKQXCOkuTmP7+91/pcDzqSM6aVPBL3YSJ -uKi7bBgEtG2peNbx7LyuSmraTqsqTGSsbdU4Tao5fxwtFUXhHT62FZrmWeyoE6qqWkddXT/Qalic -lv9uWYyowDC35/4/Fhpxq9VfHHPvfr3dJQCWpz7jNFFRFnozIWBFb655olRIMY54E0moRUtdxwnL -iaGf6yx/HGkUPn+SxHS5XhzBJY49p2e0AOMYeeEbWF/7vuvkpqpKvRCxD6Bcxe/Os5SyLFcAbhhH -xVSwZvKcHbSsC+/j2M6u70UOC7hPwasATEsAjDjA5znwvBXtd2Uad0ePIL+djAVBQHEvybKWxw0O -NBscyuklmwz6Z6TY8sI60L6vEv9kgQjEZ3X0/ft3DQnlQyZSlqDlB3Rdp9MFHEaLQTfVilrGKPjf -HxOAMCXgqPL9k4+hs5lePGNFpxvHLRRrybXvnaP+hiEVZSlpsCcVmqB/5BN6JiInsNl3okHAORhL -4BmgnUIbgnn9tq2qAkQ/i8PTkVISzxQDIh33LmO9OZkOu2kL46jBiReXfb1elYCDRV+WpVYxcKxx -tmirI6pME1VVSfd740lQH8MsOMePbeC/f3+lqio02vt4PFJd19T3Pctxl9k7oGFCg0qo65xEGFgK -+x5kXpDG7Xanl5dnvYnxmbmKzYWkFX7KWygKDs/d1k1FXPYQsZ/FS1paV0ozdgVG1Jfl6sNmTG3C -pLqoZJTYSIUA7wWbiMzrdxI+R6IXbxxHdLlc9RmfjgdJT169DI+u6yk+Hg98KwmCjh5o312cV2xy -3/Z9p7cfb5RmKYtOspSINnp7++EBRviANp4KqkE2jyDPpwxEGixKFw+1fqoKuFfzVVt2YTHifKG6 -5i+eLYsnnHFxy6Hnhgyw835vlHoKvTtOWuu+cj6f5UXlFEWd2TilZuqxLRnzC5AvADRdDRwDx26D -SMYJqxy4pjyHDQeh40VwtcVmq6FYmdmDEQfNPC+6MR9dhHDrzPMiugJ2lGHb9kUTcrBYcWgDhGIf -vk7BQVcGr9qSPbZXzgO/4JCNuqK27XQMHIY7C+wxAAAgAElEQVQJBUFG6zo+yMD9gE3cjucT29HN -tyu1bUPD0FMcv9A4rnLLl4qKo7XBGsANfvnjD8rzXCda1nMBIrl1c7023rnlOeBz8hRpV6djJF1Z -qjguq1lyJ6MoVMtxhLtq8Okw0LbFXmBJGG68h4kPmF0uQLUBM5mGsR4e4p78P/7H/72XZSF66F09 -/fmHG+5zltH9fpc+igkL59OJdtrpcrnqCQp9fxCE9PXrN6prdsCJopiqqqRtW1WjjC/AizFSRZ1b -1L3aKDmtPT+Ir1+/URSGVB9qwRRmr42Atvx4POnDdm4piSDqkYA1sTFqCLT/KgtmUKHf5Wpj1c3D -v6dXPTaeDasrc/r++oPKsqDD4Ui9xqs7TwVQP/nfBQqSoi0JglB9AxwYxZvuer3pDb2uK7Vtq2zK -NEnp67evPDkQqjHeZxAEdL1eKM9L9jjcNq0wHklgEB85XYENXWXde9u1WnF1Mgev61oouy5ODlZk -lsjj/ByY5lpXFWV5rvx8pE0z/yHwEHmeFLFlHacwpTKGzmiZufUYxb+wF1o5vAzTJKGirFQgxIdI -rDyTprkznVwuEHx3pEKnYsUFP4ZlWagq2fob/HtcnhbH4VaQgUG8C76MuGphOT1X17YaxDsfx5Fu -txsdj0eqyor6offEeNh3WMfDMFJdV+pnEQkF3Zm7JhT89tu/70mSUF1V1EhPB9FM2/V0v9/p6enJ -c/6dpkmCF04SXsGsvKos6Xq70ffv3+nLly80zzNN00T/+3/5L3S733WOC2mpFVvglm3bRm7eWMCX -O3358qybGn+3bRua54V+/umLloThn7qjBFTXpZao+OxOZrqphTg83aMo1Jz3f/zjH3Q6HT2LLksn -xtwWwCYWaF3X9Pb2g4Zhon/5l78ok80uYjgowcACOgWrO7jdbnQ6ncyGIW0RDnWtB7DaoWvQ5UDH -44HutzslwrbDxuNpDbPg+P2NniejJWddr1c6nU4PzE4HRoLGiylQWeSU5YV6J97vDX15eaKuHyjP -MzZRFRqtcwsKjF1bpBl668o8eC7ZI88PAgefksbSRJ8vLLGSJKWhHzRiC9jHo2TdthGYPhR5Tkma -0X/+53/Q+XxWVR8AaMu03LaNjocDhRFXjzZC/XK50OFwUGAQCcIY26GV4PW4KbbC76eky8eVDsda -n9s4jpojcL83WjlM06QHrNXttG1LX768aAAwFLPgbIRlWdLxcKAsL7ScXpaFrre7h0DjRsBCHMeB -+q7R0ximCix+YLbfX/7yCx0ONSUpl13M8d/cLNL0TDb6Gz2zs5neRNEVKmGpLCs6n89UlEfK8sJz -H8JUgu2QepWVso8d++EFFOiGHcXeyQkzMlq3nW63K20bW2f9/vvv1DR3Q6VMdeHnGZND8HmnaaLb -7eYi1LfNU/mh/B3HiZq2pUnYeNCrw97adzziZzAMg1s8y6LZjEgZDgLSNJtpmumPr1/per2ogAQY -CttRLd6hNk0jTdMoWMhKXdd6h9rjWIw/S69ZkGAIrstCt/td7NnZ+RktFg5wfGbMqTGyss7JwBgw -A3dWaaFnTAM7dn8kG4lib1DX6VRQfFt+W0oxDuUkjiR05UJt66TCeMZpVqhFGX5e1/eeAhOKTfu8 -cIixYnHzMhPDwM9ARKJy07Yc6iGYhyWqYW/YfAQQuex0w1ZcqGJRNYTTNNH1dqPffvvVc7RBqQNb -bRdeEDp+tRgY4gO9vb9TEIT0l7/8QqfTM0VRSU3T0u32rl+WTR9SBQvxHzDX4MaK/gv216g+7Jdf -loVutw9aZYTGVcFEmfDMeU5PGkCBh962Hf362z+o73ulTeJ2wSJ8TDnifptbBwYC3ahpNi/Ijvf4 -mQXqVGN7Xvd5kKwT6mLf5MCwQSMOBU7Vq6/vO3r/uCgpiNlgqybzgO785csXenn54iXWruuqiksQ -q9ifLzH+eHxbff3jD2qa5pN1FdYIbhTcPqP8XnAcsGgXORjgb6CbLnHkFWz+OGYLbABeILxYm/VK -/ATDMBIAejYblSsRYAn4u9ZZ2bY7OFCgKpzEMg3JwwD5+ELoTPJv/IkrMI6D+gK8v7/r2BemLdYI -pOtYVg1c5zHJFz27HWVPoiGwOEqeZ3Jp+JgYsi5cUK6zN6+qkmLLjAPXG2YYCFGACeaj4GYcdy19 -p9lZUfMIpqEk4ZuXS/dYbsuMYuPT/2cuLMx+G4yxyKgYAQAlVBpwdcVCxox01JhvTjCeyDdMqOuK -DoeDsN8WZSEuS6LKO0uw+OmnL3Q6nSgIMuq7D9WuP7IQH2O7M+Mqa5lxAEAdASlWJySevbPlFBOw -VqWq8lhoVdAry1L69u27nOiZ8yCU2/X56ZnKsqIgcFXXanLkraAJASe4fe53rgK//PSToutIdMaB -bCPNiiLX6QVKXn6H9ImPgU0JdxwnMBvF4DPTiQJuOcflZ9fnw+HgIfyW4LNuu4p8oEOIQPeVCjSO -Yrrf7zqyg4JwHMUePM8pywY6HQ/a81spsqVOO/SfPE8BVgWy+UjTtkwllpAUBhQj3XdgaFrmYVmU -VJWFslh3dUT6PNqeTUQ4qkmIklgj4rwtxpFb3RgbuKpK2reNk1s0nGARcUclrC9H0AF5Zl0Den9/ -5yy5qvIoiu/v758UbOM0qV+Zj+rP6mhqkVSAHLZdKIrck+VaL7pK3XbdzLPr3Tw4ikK631mTzQSf -iKKoUwoy+tBEWYWhGjx0XUth0KlCyx5eWGh2MpHEEe0CrKrRp/RnbdsyndlMWKKQOeIuXSb+dDjj -lj8ej1QWBcVJRlXFYF8nFY3t1+/NnaIfoRKX2N12VOdjJuUkNM+OjISDAQErp+OR4iSRQ8S5BtuZ -diwV4rJcneLNLEyX0BSqwzPGlvYW1s2ZxPT9+yv1fa/P1DIUj8ej5hG4sJTdKO5Yl9+2DR0OB6Y4 -x7NXjjssh8vycRzkorPxcYuwM1e1qbOS+M1wDGzZn6bJA/lpMyYurCto204zLSxD1E43pnmirh+0 -9dl3Ukr0n01UnFWcY/BaHYizKueJUIyyCzNWgGl2rgm+OGyhQHOE0cK+7bTvG5VFTk3bef00qKQB -CZff6N4tE8t6C1i7JBvhlaaJOMWG3szd9Wi5ptKweeYuhhSzfqemuaszzjTxIYUZ67IM4g9wU2GT -OgaHIU3Se9uHyYrBUumv3mx4d0YZ9juCYFOWJeVZpsaQsHVyz2XzWH/TNJuDzE0H9p038vF40Mg2 -FpZ0MiaKHjz7IwX+WAdBEoqRyI2Vyviq4FszSeh6vXqyYtxwuIFvt6sHVHLuAGtDijxXZBoAmfWF -xM/QNRcEtK2bVhiI+8KmwO2WJinFSUa7HHwuUIO578vSOz8GvXF5fQ3DpjiEnb8jhQqsTFd1ur3x -mIn4OPrDWBQXgTWMHcdBvCGdBoYPn8mzlMPPhO7BXZSOqmwrTbQk+B2agxhGn0bk+O8gCJgJ6Nh8 -s76QaRo94GhZFiKxLELfjzLzdD7xg08KCsNBNziXH+yzjkRbi/pbv7wwTBQVX8SNx94ODNRMCmJY -/gBKLpghZHmh0kpUMZBGghGXxDG9f3xISMRBe29sDGyEMIy8l2ldYhCOweVxobFl4zRpyq1FuwE6 -xXFMu8yR2f2o90gyllE4z7MyBFGhPAacJknKISPbrrl1GGllWarVHfIaLPqMAwuHYJrwjDlLU2ra -ltqupfAt9A49/H44EbmDaFcTjEgISjGyIIS0gsAPnnmnnh8jfvY4zdQJe7HImRCDBCYchn3fC425 -88pebOhpniTgttAbl3kmTOdm5Jxt0QsBT8HJCMQW3MqJH0NksMYfDVdwiDklauRNGsKwNsKr5U8D -O2cvmSryDhbbxlpQ1FYEeK6wc0flCysyAOZRFFEMBBU9L6in7HSS0Lruao7A46VFfyBKjbqupKxY -PHJNGIbUDwP9/s8/ZGademWIjTm27sKuhPdvzUcvv0cCEKSZ69Zp/BLK3ixzVNiqLIQZtTCZp2JO -OXo2RHrHJv7a9ay+FRWz41JOUO46WtfBq0ogYAIfH6Yop/NJlWU2LvrRcBPAKKfOZJqmCxNUT60m -oh4smG/fvjHLLIyoE8vozSjF+PsyIaYoWLIaRxE1bacMOcs0tLbh+84LrOvuXl8NYQs894gCveW6 -rqdlWaUkX9T0ZF0nD0SzPgvzsmheobXFtrLz6/WqrRvWn036YVu1xuPLp2lGdR1oa8ZU3tEztLEB -Gn9Wmbpsgl3xHR5huvj6t7cftG0rnU4nozSNH+jukby7XaY9redubNmY8EcEI5Nl0R8SmNKrE9Em -CceoGn1Ha5Yd13VNMVszj57NNNR2DLrwS53kh0BMYQMiUM51XatlZ5qGRldfaN/Xtp32+zgpnbMu -f1nQOuua551pEnvpwEB7bdinXRxA8rmkSrQyQCkPJPVwONDxeCSikMapURlmKiEebddLZVGqDhyG -lHw772o/FsejZ1XuEn7A/CLPCp2BqpXCzWEP9lZx4Gyo0eF5XtI09nS5XD0ZM0hAqxwgEIx8+fKF -Fol33/edPi4XsZPKvcguAJNc+q66mC+Xi8SVjXo5wIeBQWDkKhRKs31EseEJyC6/HP9eFLnXRtgb -znpNYo4dhoFUDqFWf056nVJd19p2hFLFgGtgzWGAt4BBycS1xJsygAOAjAuLc1i9hwO7B8VNMKHB -Jsf7AV4BWj1vyk3p9rxmV8/aHCQwXLw2DAYmK6g+sGZxSYFIBI0KPAiaho1FijynWUxt4v1PLLym -2amKMC5yo5LME+VYdHddmZXFfVtGy8qmnfzia5rGnufUMj7CIn5M+AXzsK4qIZpERDSrDNl6uGG8 -gUQYfE5YibdtQ6fTUd1i4C4D6W3XtSqrtKcu+m+rIAQNNgqDTziG5fPzgnsEORcaR8e5R1ruOLq4 -KTundzeEA3z6nisbHMD4/XVd6xRjFM96Dd6cZ6HTBgqyYnEyM7LTQ8qmO0HkE4YstoFFFfIF5tm5 -OyFcBC3JY+w6Do2iyDmGTMhX07z/6XjUfxaxoRWHn8ao4zRRWRQ0LwtlaUrfX19pnmeqqlp4Ef70 -wX5P+EzYSnJdVzUm4X8deGW6BZhd8nWolvkq+eWxAxVFQcfjgaIo84I7scYcFXtWARaL7XJKZUN3 -XasXATNtV88EN01TsTiPaRpHyrITjeMk7MhYR4lWvp7nOedETOJegwf0qHF+f/+gX375WRVw96b1 -eng7GrQOp1EUUj841VPbNp6FEmb0nXiaPXLD66qiCJRgA1LCm9+WwY+x3MsyCz00cyaOMicGmQmO -Q3aRKtiYpNQtvRk3hqKT4Ipg+f9x4rEpxha5HobBux1sLoJdeKo8M4fnJI7BqAzw+xAG0fWDZvul -WaHpS1i0rKq7yu/dVL56vzfKr3i0BYf5SVWxkebhUFPbdlQWDLKCIVrXPF5klplzXirE0QbVkvV+ -CMKY2ubuWaOB+WjXEcRYaZrRWTAmbhObTwcFvBbv8yygX67tg9UNWD0LMgXsO2GSWqAXBV+Mdn04 -sZqVy9d1TcfjicIwoHWZqWk7+vF2dZOYe0P7fvd6eBc6u3l5lLgg2a17UD9GPFtbZeIyCuS7Yhpy -vV7peDzqJY4pDNZNLJOTcV0p3raNo6xPR9VJ84J1eWY8jyy8fh0fBMGGGL9gdJTEkZB7SMtvAHFb -UVI4Lx7l1N6kithfr4qWv/14o7IqVfqJZNaPjw8tER3LMKGy9EeHZZHToGWsr/u3hCTObV89CypM -PGwJaAkldq7PsdmONDNNoyTJZp5e/zEXwSOSKHff0WPtzYdDj6W3Ia2yMObZgUo2UQa23Hifg8kY -tMQlvN88z/VQ6YeemqZVvT50CnXNo0e0kHbujwh4+1xxKWzr8imMFWNJP6GalEOwLMzGTI2lvJ2q -2DId8txYPPUt+m0rFGxiGxOGn7l7DL5Qb20brIH3AH/IeR69PImiEGatOczsev8z0NeRqxicvd3u -tCwMVMKuTEHGkAV867bT/L/oeq8dybLkStSOlu7hkaK7SV5gZv7/W+ZlLgZzQRIg2dUlMiPC5dHy -Ppgt27Y9ahIgmlWVGel+zhZmy5aQNYvLlrU9pLiW8wWYaZDLT63xoyiiLM+pLCuqypJaI9pYFr4x -D3VFUZxIgEGspbB1XLEgEcILsyyjtm01TgkPniOzSF/uNI0yiXAPFl75ePhFmevYrB8Gul6vmg/I -6bCVij7caITjl3nenlA4O+8AO5Gw45QkST2PePRb1oQSC8neKhYcAhJdliX34CCiRBEFwWJCJCJ9 -js+bwo1hI9UqIKHWxoRBAGTHh2ypnXrVHBYuiESDfC7cgLYCQjvF0tjAO7BADQYIBYq1neHj1rO+ -BOCVAJSCFR2sy9DKrduuF4dLJSZN433eMBYHwia9XK9q/IlnDDIaLhBMaUCqwUQkzzMKKDD5AqEn -6LHR55bWbseAOHByER8BP7AeEzaMxClw+bvD2Zip75Hy/e1ocl4+U3yhhwgCppKnWfanPoG2Koq3 -bRNWXE1xXFIvwQVRGBBlKd1uD+r6gZrmTft/SD9hJ/0sy03TTMcQruxZPFfgLOUyJE13LxDymQSE -8ho9XZK6/MJlkamFmDOA4ACHmX1PBfQqOeRCbqfnktc5BPMMuCwZtMzSlGaTioQbyVUzrZe7zlbm -fBpXVUVVVdH7+ztVNYs59m2jnz/fqChyAa548//6669UVZXaSQPD4KkJ8wOsFTbchgBuJkkiiz40 -zk27VkMQmoRhqKGp1uhV3YNkkrBgw9HszbvhsY+Dv2lb/fkIl9n3SIlP1hLMklvczD3W952YTWQN -NHFBoJWzGZIKpsr6A/0ZgCZ0GYggh19jGEbaNuBnaDW4bbSb9Yc21+JdAEAt8cs6NeG53u4Pejwe -9P37d09G7ZyvQnVSfqa5R1EqorfOO2TxHm1UueIJcmBO06ijVJ+lCD+BmAbsLeZK8ygoCkc5qWda -xPQDHxROJC6qOPMIQ0BgEZdkuc27AczwwqZ5olKCDXAAzHK7jeMgUsbaM9zs+p7IsN1sHJQtvzAL -hRjlfr/pLQbQCw+v7zvP4Rcegtu2UZywE08hmw8Cn7IsXZ6d3Chc4YQyqps96y81MRGM4Hg80PH4 -QsPQ6Uirrms6Hg7ax0EUBTEQFocKaIwl2yBmm3i2l8tFJyiIJLOAFfgKwCCwwdjEZHsqrVflRgC4 -xC2EGzaOYoqi5VNFhGg5e9BgFBkqil/ooYwIOhfHRcpUxKFox3NIasboFu8efTl4HBbFB2/Btp5o -2Syt2B02n7n4wJmAKVl7NtvO8npI9WaeplGt22wrAK5AmiZ0Pj/YFOUpbMTmNtpcSxx6zDdxvoNJ -QnoBONk5STS70yYE//Wf/2ffQPSRhccz91BQ/Z6mcabXLyeqSo63ut1vOpsGkARQDn8WCwisrK7v -1AocJTn05VhUGAWiPISTCUon9Ib7vtF//Md/0ffvX+l0OsnDjj89LLQweChY7IyoZrSumzobwVVl -mmb1ucOf5T/PNycz2woaZTFCLHUX5xag/EkcixHDJBhEwcSatqWvX79Snh/px49/yO2z0evrScRT -F0+jjkBLEiYlemVo4e3CxILBdyrLwmtVGNEOleJspzA8u2bfBRiYWnT82Y/BzfnJW8iM7s/eRrAl -up2hI94Mz2wWPYnFOjrhwNvQDrb2GtW4hKvJ3szKJzocai/RZ1NyTaTP14Ggu0aF48BlVN7ZyKNN -y7LU+055ltNOO+0bR6zbCoX5J8wzGA3HwOpHrL/CPM/09vZGr6+vVJn8Qn5uoefpgM9pfQDsWJcN -XRKt9mxwDVc1MhW4Xn/bkaDr+jz3F//xxw/OV68qCgJOkrU3LUqaZVnocrno3BPA2f1+13x7S/2E -+g8nOqSdP3++0eFQ08uRJcq//fabkhsQuYWe7tu3b3Q4HCTOOvRGbtiMt9uN/p9/+WfVA+DfYyyJ -FCLYPU3zJA4vnCP38fFBX758Mc62uc7j4W1n2Yp2FJTEEf32+x+GBMIbqK4ryrKczuezAmR2k1hE -/Hq9qh4dSjkg4hYwtSSaJIll1p/Q77//phULeA7PYZqoMGz8NW7sj48P+vr1q2fpZclHz2vBjkb3 -fafb7U5fv37xHIJA0GKwi2/Ipm01DgzkpH3f6MePn/TXv/6FyrKk8/kieE+tEWZJklAUZ/R43DyU -H1OkX375hb59+6o9tG1Vn1OJizz3Lhx2lrrT4VB7gKwFIDHxcJVb4LkstW1Hr68n7x09j4cRjwbg -+euXr5RmGd3vd41J37ZV1+RzeKmdntgRYZrE9PPtg5mgJi0JeFyaJhT/8fsPqupKuey//fY7ZVlK -r6+vyvoax5FOpy8ikug8Zl5ZFPLQJgnNyJVpt22rF+SBRWXde/Cw4CfAvnCs6uu6jpqm1QWfJLEu -GvaErymKKgqCu5bb/N8iBTHnmccyqDBcpFKnQNO2bTSNoyquwLiz9EssgGVZ6XI56wMFCOU4BBFn -0C2jsvKsJBU3Og4yEFj6fv0UxmLj1qwfAyzGcCBi9IpDfN+JLpcrH6rk1JTou8FWs+QW5fAnqQHb -yJtwWPvsZ4rss20b5tlI98V7B6sySRI61BU1bScWaNyboy3ELw56PSihC2KaaWJq87rtROOk7x+t -E+KwiAKdItjDE4cR5NzbttHH+SzMu/STug9gdJ45TQx8AJ4pvTat2Y0TdyWIKX5mPpNmNYr5LJ5p -07R0PNYyvs0kKHSj6/VOdV2xFse0yZZqDx8G4B9d16rnIiqluKor1YOP40RFkYvSjIU9ccyimPP5 -XdNdLPI8L3AjybUaCKOY9n1Saa7NWbMuptYJaN3gmJJr8gpuLEhl52XVGyOOWcqZZaNHckAfzH8H -+w8UOZdpNl3VGmJO00TzHEh4ZqMLDZUQx127GCyc2Fb/jdASjNFsUhEzsXj6YEMt0Zviz2GEiA1t -Kc+KbcQuLwF6cR4RRaqtsEDqMA5UxaUab+AgfTxYj5+mibI052X1jEt4DQbaEqFkBYfBhqy6sacD -p9CD8vPhgwkbP80KCgUf+P33C9V1pUSleVm9PEGMtNgss5SNcdafz6PNUdZa5NmJP0uQ2Q0pexpD -TiZB+Wldrs6JuG0bejweGolu9SjAssBUxESjbRvNdXh23IYy0nkgROqIbL0K0pQFdUmSURzze4eG -oSwKut6uehkREX18fOi0Dqa0vJYjBQEfTcP2eyzjLZkOO0708vJCdV1TGOYUBL0ackRRpKWQJSWg -fEe/cblctDoACgymHfvR3dQbAIcO2gX8PbYMswmreEnny9UtpDRTkRBSb4CUcv4533Jd39NNgitQ -ygGF5e9IQmtNdAoyyEa6XK9qMQZ6JZulxCK84U2EbAR2P2o07z2KWBYMIo8FRO1iQ0UCu67Hg0tA -VFYcfRV5IJUzLEloVSkxZ84fj0dh+SXqSmyfK4AvtqLmw9WnhDMNeJln5WDg9gpNFPefzbP9xOld -M+u3baM0K2hbF2qaXtbVwR0g8+IpURXNh6RYvP7SNFMyUpKkaspZ5DlNs4u3W8RNmLMlElVoWotv -jEJBmeV3ihbVmcJUVc3tY1lIr+2APBvOiUPMui8h0s1WTlmWm2kNqxvvj4f3XJNEHIKjSByqNo1D -CyigJC0ojlvd5OAgANM6n6+UZamavha5MAybhtcGEakHOr7M5XLxuOg4JR+Pho6HA00S/gGzBqDD -IEYURU77tsn4atGpAd82mR4YUGfBZ9DJXifNn8szSQA2fQ5O+LbrvTEkZuPYqEFA1DQL3e53AZJK -lYau66oBmU46GcrNTpRmmeQWBKqWrMqCgjCkvh9EMhzrPBxe8UscaWiDvVGeyU7Pv6wTEUxSQd8F -MwyGlTjE4AMHujZcedldt6Y8S6k3YN7tdqNpmuhwOJg46ZKSOFZjUFs98MKOJR2ZDyV2XZqVUPX8 -nWxCEgOMbk0kScYmHfNEnQCVdhNWVUWPx8MzEIWjjSVcuQBTpsAGAXtCwpwDUttFbOzBF8EhkiT8 -5643NzrFwY2EX6zJ9/ezOgRjVBwnGQVhrCU26x2I9j3+xGjV1lCmES7FKfVjxdKUwij2Mv9uN97w -m8SRO+4AiaX5LKK2WcaxqRvBhgHlRU2Pe0O7HKhtKweFfFep7CIZIYyfiAUOuAo0R34VcQfLOWNv -JmlJBmlWmNGDK33gvsJAIJRKszFPiNUoAn1MWZVavqu5hqgWp3kiokSrDPi3p2km1cAq38FVHXya -PtS7H5RQvDCmTg56A/R9R0VRahINV0CxItjo64ZxUq06iC1JHH3qoe20wsqtYT02zwt13UPxAf6M -AXVdT1mW0+n0wrkIcqNkaUr3x13MSA8MgEUhLesqxCvHgDscDnR6OdKyrtQ0rQZ4ctJy7JFZoCdn -AlbqJLOGBu58EXpPJMY8DHY75pj0iLaVtQebuX2BuA/DQFHIoBqMWzEGtF6P4GLMxpQzzQpa2o5W -STqy7V2aJhIbx447uCBGaVux5tHuWZo7nKPQIvOUa9Gb2I7lrKEpKs08z71wFYS8IutwnGbPdsy5 -WO1GmRoI5XjwxqOY3tiUbnx2tMvT/Upt11IiVShCZWyoa2xzw56BjHVd6Xq9KukkikLJI581hdVq -nfGl2IRx1IWEW5B780mpqM9BneB17/tGeV5RkefSUnwOa8SiBkWZjUIi9exHxgFRoGKXKAxc0IkZ -P+HE//j4ULeZREAre0O/v7/paAfEpFgcX+D7Dy84INXjNFFlCE72JsOhCOwECa6Yiz+P4k6nkxB/ -Mi2LucUIVYTFFuzsK983LXV9p3wK0GSjOKN17Z+is1Z6PBpqm5aOLwcvPhsL+M906Ou60eVy1o2O -9+QCMbmf74dBSFLbJz1EkqQUBItiEM76zM3ILeAI9Sk7B69EBlBFxWrp6mmaiB1YIsSwTN+FdQpO -00QdhqBKZRDyhYg2nY7Y3r/veyrLwuYt0FsAACAASURBVPEbJEQEcXaWyo2KDlULkrFgpmonK2hb -7veHYkb4OZjaIbsClxeqd45YPyogjACRJEnVOPbRCItxXVcaJ6fEs2glKKUgcPAIcJPEn0RHDWx6 -OSvPfBwHqirn2mojqPnPOqou996bh4rDRinUPxMLj34yRqF8YHV9T9M0eo6qTYPbfZWXWCr6jI2I -AyESLQP2QlEUVNeVxnLbA6wsS6OTZ3szBGryz4vEZiygqixpmifjbLx6Cr4oipSwA6EQbzL6BKzF -cUJZmlBelHS/32nbO9G4r95tURQ5RSHr+d1t4Vx7mBCy0P3xQycmz242QeguAz4Ad2Wq4TDA4W0X -dZ7ndKgr9jMU8VMYhrStKyVxTP/4x6+UCwMyzzKaxfrbXgIKcE6zR1Z53tCWMfqs1AOuAhsuJZ5N -rsrEpGYWPUXXdfT6+kpxFKuRiObsrSsNfUOTjBFtddy2DRHt0pIl2mqi145MIKnVXjRSisOCnsvx -Tn+vzZGEliPPc2qaxsPEwI607xDahLquNEUa3xkEPOazcLUdWw88e+Oh1CjLkl6OR3kwm+fistNO -AcEgI/IAlbquKI4iuih/3r2wxKSTgPPP1NeESiEbAfl1Cb+r2eSpviB2Q0kUGErk4XE5zWYJmA7Y -OfYufRU2JnrLuq4oDBOal05vIHvzgEc+S4CHZb31IqLad6IojilcnGmHS/oJ9TZlM5FM9Q3gy4ON -aWPEOVPvLoSO3KMyIwYcVlM47X1XZbYo43BTrlC6rv3kD/D6+qrKNkivIcxJn0apeJ7suhNT1w/q -qwfeQdt1lKSpkxiL0pEnPInmMwA4szHnwBCe0fZnZybo6i2vZF4cym+5DrfbTcwzOmW3vry8iCPU -qmo/ENpcOtOgoaZ29FlVNVVVrRbr+IytCTt1lPbI009gLVvjGJfo4zIGWOqbmkxB8i7G9/cPIf6k -ymnJspKicDRs3VAdj1BBb9tGMW76zniOo6RlM85YRnKjUj95bjp76C8WonK9jc+7TT3F3PX5sKmq -Wkk2P3/+8NBllMs21RZe8rsAXxDGbLLZgG3kOfsKwJ3IevbZ8RuwCm57ziJdTnU6cb3yXJ03Tqdo -q69g23UBYvPYX1aYoU5BWUZxktIuoBhaAjxTHNCY9yuqLGnJ4IdbhmCaZnqjWx75MIxit80WZvjs -VVlqBef5DsSRtFDkvQ+MNWFC+uxUw+X9qDN56/OfZgUN96uX/GPZhM/CqmfVnB0zPh4P8YUoTby3 -09XbfhqXQJ5nMhV5UYNZTKKWZdXpAE9xCmfxJu8mTWJ1KMoyVk2GYUBtP2mlDI6GVU8iG3AxEmUL -LDqTkpKCoFPlYxSF1LQt7XujVetmDEAhPgO+1feDxMjztKQVJ2LwZ/7r77/Ty8tR1LMrawGsVXQY -htR2vTd6243PWRzF1PeN28wmhhu3PBMkBo/E8owOW+GDqs2CgLZ1UXIDQAvbF9l0H4z7+CTPdDM1 -zUODH3XUFoUq4oB0+LPHn5GeykPDCzydTkJ8yo2GO1KePZDxHz9+0rYudHp91enB82K2JqH9MNAu -4Rp4NpbhRRRou4SWjJ2Oe681AsEHv3ddA2HKxZ+ixCXky7x314/inWI9EDmQad12BTzZ5mtQiykc -/PAfdLNzpseeXk+C16zqP4FS/XZ/6EjWjnOrqvZGi7bkT5JYx6NFwaxKtEvO2nww34MoCgMF4NIs -o2VeKM3YnReTKhyMZVlSnmfU0+iHoYwT7Ttpa8wWdK1ueADfIFsp1dpkXH6WMjuhF7cVRN3S6xQJ -E4nAxLnbSgQ5CGinYxPJnucFt5nCASkKVtXW9YEejzvFQLSxmKz5JW/SXa2q3Q2TGlBuo20LPD80 -oP0WbMMLAI6A0gdaaZhBgoiSS9bbc2Q4b1b3RTkUk8eFO+00DJ1Hpd33XXuu6/UqAhGrhXc2U1DS -HQ4HLbNwkyJNKIozSpJJQj9TWoJZudUw4cyyA3398oXGaaKP9zMlSawMrOfvY/tauziMNYv2sPDm -n2f3nPDZtfSV5z8MA61mNm11Csg/BMHpcr1SmmaepNtFV9s0IHd4fXx8mDATly7dNK1OBLhVDBXf -iCJJIzIgIg5/vgk3nfLAr3AypiLOcJOrQAZNI6k0rDMu/3dshMlIy2Htfbs/mBikSlC+vXdiKnQc -x3IhrbSu/iGOUfL9/tB/tqQiUL6TxBHh+n7wQkTsYcsWfKlJpHbOvVh/uVCO953X2DMdeBgnbREw -jcB6qeuKiDiKHWzDMJQ4NowYbDgETheUgG3bUlVVKvFFTwGQyfKkUVE822WB1QfjQvQ6UOZZ4QIs -smezuC35xQkoDEAkxgi4HVg/PnrcaHDwq6qiq5B78MBtJh2kybuIk1j622kbge9mxR/YyF+/fpWZ -94HC6EH1gXtE9PnAIqBu8+2lt0+2YFyCB1rCzfNMwSdTDCdFZbAv9iYcKI0BGsHf8P64K/BUls5/ -Ds/6/f2Duq6n4/GgwaexAHp1VdHrty9UFrlWjGiXVFOywHyyUt4G2HJcfWy0GKeaJEnodn9QEscU -SfApAEw7ckRbE4imv+3OHtMRLs78eUhUkX47gfeG2bjKhbOUxnHgKVKaUtu1dEpPXrUbx9x6ck7f -gaqy9LQAcZw6x6h5oTiKJfjV5T5aQpVrlUbKMnqKy1s9N6yqKikVlaq1xcdoj4F3J4KaZbqDy5bF -fA+1oI8ZLY09iyvLVtt3RhYPdcVzcJHE4iXoyY7MPAk/DAjpsJEXIoGyLUtTleZawAW9m81tw2GB -Htq2K+Dtg7mHeCeYe2CchfFMHEe0StoO2GkudnnTFGQbZsKLdvHENwDa8OecRJMPO4SB8uEYUZKm -9NvvrLMoilKdaa17z/5EdsKNbq3UbE9qqwX+PQzALuuiWE4qzxE0W91EK9teg9m470RVVapPHrIL -932jPGOL8K7rqCxL+vLllV5eXuh0+ivNc/vEhNsoTXPFCcAVAXGItQbtJw9AVH+w8goCop9vb9Q0 -HX3//u1PAzBw6MEU1YKm8JHAJsF4FRcXbtiqqnRjA7tBiZ/nGT0ewSfLuHXdqJ8mzrwoS4qTjLau -M9FdTtY+jjMV4vMAQ5bRmLpglBhFEdV1LSBeSY/H3RMuWTARmAvovnYigp/7HKaCaVaSBOqLEIQh -ewJaRhZSgJEEZEMuNqPxd+UO+O6uv2Tb4UH57JYVlWcZbdtKNzlIMDVAP2/HLNaEAX0hDpw0zTVH -gBfP/km4YufWuO3neVa+P0YhlmOAMAoFXNQfYPXCSTCfxonOlVRnXG6ci8zj0dA0zSLeKJWogQMD -1Y/1nHs2n0SLtO+Tbm6k2UK8EgaOCQduP3gIalohfzdKaE7BTYWh53sz1jWPPYvySMM4CcmqlP44 -F975u5b4YOgh4NPansF6e547r0e2mgKLC8VRLNLVm1YXocmitOsEmx9TCqzZosglX5B1GKhccaCr -wCdnEA2VAzgBcRQpr8AeuHakPc0TrXJL2/wHbjcOFEW9176MsmesCQueW56l6lptLcnsFAS8gDRN -6X6/e9W0bYGex4NWIevWQkTBv/3b/9qZYtooZ1wZRcY6Gmkybn6/C5jnct7x0MDXfiZw8I0j1NWu -V7oq00Ij9h6QPHhGsl3AJb5IlnHENOKRkC0PsA46d5h3wFKJhSixzlURBmFTg/A99n1Te7S+H6gs -SyLaJXGWtedd12ugJvrpYRxUw2+NTqFyW7jnojCKROoJg5Fa/QmWxaUDwYIrlpt8mmc1L2E682ZI -IKsuvOfIqGfVHlRy8Dx0I7ZAmZ84BHg0W9LQ97TJZtnWnTqZvLgc+0S16mCJ2tYNKc0+m3AR/In/ -rLXvxq11uVzoy5evaoltAzJRsmNtVGVF/dDre0cJDYDZovkQOHFbtMlG3w23gSdA8ICAlR3WmPb5 -wq1gnj8JIJ24+O0woG3bqWkeFEUs63UXlPs70yShNMupF14LLkS0TBB9Kb6SZdQ0jVa48FV8fk5Y -NxbbwUQpzwsKfvnlX/ckSejt5086vb7S4VB7LqK3211CPRJ9kTj9vcy6hfPXh3HyaKKPB9ty42bO -80xpnIiMatpWZ/vw0sNt/v7+Tt++ffP018vi8IFFmIMYUeJhIUL7fL7Q9+/fPPBoENWja1OcwScA -mSxN6NG09Mcfv9N/+2//3SvzQe+c51lyBchDteM4EZQ+ovf3D3p9fVWRybKsn1yJcCjiMxciiZ3n -hW63G72+vmqVwDRpbmcsEARDC4wsUeHcbjc6nU5edWdDSq1yDjiBVbrdbndVs9lRIByTUS4ji8/Z -wjH77h+//kqn04mWZdbPbOPAcGmAjWe/CxHRP/7xD/of/+O/U1keqOseYi7TezJyjJXjOFaeAbIL -LpeL+lFYnwIrakPLaydW+PXz5xt9//7N4xpgfQP3QptmA0MxVYGfAg5KvPtcQ2EWLwnq2W8A2Qwv -L0f9XGWR6xrLs0xGhZ0HHLrq80Ffv7yqOOnZhDZmU82YTq+vdDq98MvoOu0Zt22l6+VKlWiPUTbO -UsLB7z6KIhqeeAG86VftU5yIhP/yZYU5BN/SWcoIbSJxUvZBYFxk+QNg9m2b/J3KugM5Z9VsuUE0 -43GcqJTXJsBYKzHWPPDtdzy+qOEoMhTBvOM5bqSLDYSd2/2hZhrTNFNVTbRtsUF/QzWNhD06lGLI -xmN2YmBcfgbdOEweSkUMMutoMUtTmgVnQfbB3fSQ7obYlINuzVEhKbXEq2ka6X7f9WdyDuBdJxsg -hcECHEy2fduoHUa1JgeTsixyCbskYzk2uUxHmSokSazrkO3fHxLCsXpVQpIkMhePdU3N86Kg87Pv -v93kGJGO4yi2YEyXvl6vKoACeSc0VdHz5sfm7rqW1jVTlicAVqRegYNgR602adn28mixl2Wlqip0 -BN20rfr9hWFIl+tVhVP8fGbKMlaOAl+D1RoOfcW2ImECxlFMh0NNURiJ5RZ5RodFUaggpGk7mpdF -mYPPQAVONEYlZ01Cga+c/SAIrkSJdrs/vNsUNxx8z3ADq6uJoa1icuBe9CpBDIs+YHvKos0BNmBH -M+62dic+0mwmMzaCXrws2EkGZSnonYdDLa2Ocyy24BVoodYsdds2bW/meda4KrtwoTFAJaU25eui -hwRs1/6sHQB2AdYiosgta4z1FYPLXBReRNO0SjypylLLbDwnPlSIGgmz4BaHY+E4NXpSZSJYiNap -KBbgkINESmrbThe2tQ536cetJ5+174BlzpOuU48GLsQfTCR41JZRUZQyass0um3fd2UpWmIRkHbn -fszvpxY7L9iZ5Xkm68YF0jB/gygMnRQZlZlzhuJ38Xo68bNJWGDHbUfogeUAHsuypEK4GWhZLJ4G -3Ot8YXel2MYiIfgCNwxTZU0OWxR7Pms+FdWVXPgizNKKdeYLP/M4z6iX8EeAaOPkACH8TCLetL// -/ju9vLxIpBgvpDlY6NG0XriGG2WuOv5p205jnvIspTDk6iXPUpkBJ4bItOimxKGBRQXTURxy1tdt -ngUDEGdctCNFntO+kWYYWP4BqgUsbNhRW9deq7C0s3lEOz8n2nh6dFFs2pGZy5LnEM04YmT88Wgk -vgoLZ5VNmEmfztoMBH7CiZlluKN+J5vyiyonimJl16VZQTt1NAyLylez1NnNV2Wh9ufruqpZp+Nn -HFWObMVkIGTZGDAm6iQUSMm8bs4Sjd+fA3JByy4lphuuy1GUfELgIWj7M3tykJKimAHMuqpoGDeK -xZ0qz3NJ1x6Ut4CWBe/w58+fdDgc6HA4qPgozTKaxlHbVXcIrJ77EGK/LGEqjie9rKwSkNu3jWJX -Ho/GmCLQMlZPwHmmnz9/6ikPkMSimPu+UyW021SopGEYeGOobd9pltIQc3dUAzbwEQBREIRUVSUd -DgdOVF0X1iCI44yV48Kh1kYoA+gDBoFblkvOxRMq2VIZBwp82h067OjIOMnnZRVMYvUW5DT11PUd -Xa9Xj9Jsx3Ef7x90fDl6VFa3eRj881mHm6q7rOz12VJ9N5Ro9Mm4OTkZ6KGLuCxLQcxLOp/Pn7zr -4jii//P//St9//5NMQ8bBrIsi44T1RXKuOSwHRVPcLI08aSxSZJRnvOBZHt5/Pemab1wTLRfFmAE -2w6tnHVb6vqBvn9PiCTvEs8Ehyy3GYkg+osahuBngsoM89YwjOQzJtKy+mKlaZqVCTlOPHHKs1fJ -wkRQba4EtGVdVLm67zudTi9UVTUdDgea54k6AaKtRN4e9GjHqqpWleGjaQ2uwM7M6+pT1uEvGC8y -p57n0HN5sf+LB4vMPkdbTdQqCeMoiFt2khe0OQIGSmrcnogQx/+PjYYZJ3/HnV5eTsLOi2nr7nqj -Kqde8uND8YIDkAcqZVWxDBYv9dE0tK6RF09lfzl6sCuXY/EpaJqGDoeDSJFzCsJQwjojb6Fa4onl -9zfNw5NwHl+OdDy+UFmy0m/fSeKsuTyHvfowjOoKzOUhfepr7cjTjuAsDXX3HKADmfowuQT+BwDI -wOmfppleX0/05csrFaJItHNmXADADuzocppmKktHDgK2wfTWmS7i7hQEJBdGqK1dGJY0jhPVdc0+ -AuuilwZixnEQWeCLJzwgoPV0fzwU79i2jcIgVht7bb8Ef+LyP/feI96/i0DnSikwOJdv4R15btKw -yge+48bfkzI58a7AkQkCNrAZx0mswkKP22AvXOtSNIyO/IYWcjIBrzgY4bcQ3+8Ple2CPmjlspP8 -N6DISZKKvpwU9WWaa6w3QycLQI0qTUoN3Fng+gK7JBs8sa6rKu7wq20d33oYr2okse87LfLZ9z1R -BDxN+eQGH7vrB0WmrTIM0w2O8GLbKyjGgqBQJRximSwZqWlbdRlCUiwSaCDwsJlyXDq7LARYU2Vp -quWok25uurj2fafr5UpFmWuqshqYxBEN46qVAwhPSLm9yThMy35ZQNzHZ5RlJbXtg1q5odHHWjJJ -EATsE1my8Ibo/hQ+4oNYDvz1tfw44LEZ8Bxikc3O4kBkQ0fgorNtG3VLb9qw9UnItXnYCrAMGIpm -4vqDfh5O0mVZUlWW1LStWoE75p0jDKEtRXXAaH8kbY+j3oJgY63VQPbBhcr5BuQZ0mDqsa4r3R8P -2ve7THW4BcVkKAw4uMUd4NKOhTENox+jHoahOk9jNG15AMMwshbA+tKhX0TySdd3lOWZzjXZGuzx -xBHgQM1QLLYs1RLltJMvBiq9hfBi21Z15F2WVVODMGXAaWZvU8x6ne7dKezKsqSqKukuIhM82Lad -tT1Bmi9Gfj/f3lXjgEyAXPL8wJyL45hOpxMdjy+0b4JBxDFt0u7gEMDBp+GVs4u/wk3CbjGLZgEy -7hB6M3jr9R+EgWTaH2gae1qMys4SabyWYHNAkIt7W+h+v9PhcGBXob75lMIEEA4TC6yPtm2JqPW0 -+RBoobpK4kgDO5JELhGZUbvwVaeYcyavPNZyPgfMqDx/XDwgkmPGMxW32LWFQwtVCzz53YjTgZxA -5IuCPQSHYWDTmzCgcVxMS+ZuW8STgWPvR6/Fyhe4XK+0LDOVZSXitVFB11Auq2dDHJurYZWvmAbg -n62JiDOlnXSK5KL5XBYhJmzTvKgXQxTKCN99CKO0iv1ZoiWQYPNYamwQBOr4AlQfY7+u7ygXBN2p -n7hE32mnKIzo59ub9vNsKDIajr0b0VmKMkYxcFfFGKiqKuq6TpFQHDh29IMbZFlWKoqYsrygl5cX -OhyOFIaB2j/HSaoVADYHm1wsLo9eNgfMLKuyoLyoaZlHzxAEtN8kjulyvXJvKH1zFAa0PGED+PmJ -ADh1XVNdV+LE7KPZhQpFds/Gehg2L9kGtxhGXM9pPIqwBwENoj4DvdiOS6391DOmMU4iy4Zl1rJQ -ludqyMIyYTeLZlAvURmxL0QjejkdaZeRbCYsUgvOPhuSRhHEQUiCGjToBJccV66haDYSEf9wG5Bm -GbVd72VB5lmq4itMw7K8oFXYhJbotkWbVmiFjBH18JOxrt1n8CC0fhm4iGdZUzjcbPYm9pm1MnNj -2MTsVwZ7kzSlaX7Qx/lDHLz5GcQ2ywyl0zhtZtzyORrJqrMsOMPosU9dtBZNasQxjDIWiuj946xj -M/TjQH2xCWx8ts2Tgy6fS3W3QFFaVWVBj8fDW6TzvND5fNYbha2+3vWGYCCF0fhff/tNBS7jOOmt -ABtmHCQWgGra1psioM1pmodyENqmpbIqneXW00J2GAxRP/QUxVy17NtG8zR6i9NOFhhoS5QdZt+p -9SPAlIcP18Wb6GA6YYU3lvyCxYsAT7Q0ALjAVGNEvKQougquMyjXAOuGXY5n2Yyh+ik6diE7LB2P -B6qqg1fa80a9Gusxd2vDGCPPMrpuNy+OGy0LvAiAJaVpRuu2qxYCLVYYsiGtbV83aRmxJmy68az5 -h0w/tjoNJuMsyq8AGOrckzfvGSsHQSjQVjNjMQmbRA3qMLCENE1op53GoRfODnshHg4HbgGArEOj -z4y0XsEdINvPiiwk0GCOjLEOIsMxorBiBSwwlIcMeMUUBAzURWHE6cTSR80zM98Oh8Mn+2nwmrlc -T8UHcNGbgogoF89C9L3IJ+DcuEzn85aLD4sv0JXZRCM2oNb0yZ7KVkJMmR6oKBI9FOEspOEgL0TH -w5FSER75FF3XLyPXD4ku88I5gJbK+mljy4u/y8+1hpqWf992vlmGPUDtXB4tEOLabGCGFXrhz9oJ -wPl8Nhs6UWfmYeA8xmVZqa4PVBY5ZXmhh8xDQDuOSmv49g4CyotSN8q+D588LJ2eRSTRYlKC7wHc -YFlcXBgOEBuTZnMo9t2ZlvBkizUN+Fncpq4ajwcW7SJKSJf8tKnoDKnPDmid1JnY4hqh2W/AkIqi -pL7vtN3atthcCIkn18cB9Hg8lAF6OByoqkqKYXcH5pSlQt7vD8pEj2+jquwiRYmyKCNw1ROLU0p3 -ORyc/DfwEFCXvxbHMQXECD6TJmaa50HHh9bFh5FfFzaZQX8g5ZP1JLhcr8KmWtRfvyoLojwXbfqm -PTsbfKZqWR0EAX379pWWZaG6/kLjcFcpMFEoICGpHmIyPIayZEPTMAzpcrnq3+0wj43iJFYHInsL -WLYZJgJqQybvZxydlxyio60jLNx0gyD0WjVMWDaRsgYBefRce/sCT3BuTJnacAOgA6kEQhuLmHMv -7SSzECJtst7GcZRcP2YSrsuik4/D4cDjSvFuWBa2PR9Mn2uRc1wy9iCwrSJEY3YCYinQAHXBEMUt -/9xeWJ69TW1iZyeeRAFsxTpnPkwp4buBGU/7BqsWI8P3G8ZVR9xwE2bPST7MIMNWz0f5XzsV4e/F -QbvWkux65Si1uChKmqabd3IeDrXEW9d0vV692xf8ZqSyYgpgT02AOJawYckabla7Kz+6l1sCYx2U -UcgTiMKIpnliMY25eS311rYO6IUsZRS32jSzX7z1QRjGkTaT/oNxUt/1RDTz4SDEFBsTHkWhLmhO -nXEtRLgFtCwzHY8HPcS6vtcTHCM7WEut624qHB75pWJT/scfP+h4rEVKnAqwx3bbuHUgqx0nhyyz -x6FTiKFCwvvADe/Hu6fKZ7BjUsdTCDzlJbghyPxDBZGmGc0ilGLzWUddZmv3WME/Ta6VEebhcKAg -jJWJiug44B/2wLRtihspj/qcnEM0eQeDOyxICU92fm5BcRCoLOiM5+aPCDNtefadqOt6ejwanVZZ -FiMqHhtZbpmYMNwBRZ2IaJ4mut8fahy677uQgkiNci6XCy3LSi/CL4GtOcamODSLoqR4390tiEVa -VZWUM6OW9IjucsQRvtFghBlHES3rSlnKpddzyR4GAS1PjDQXLpqowMb63sWinurFXgw9vAUmHQKb -eOyoICC6Xnl8ZEEyK2JClDTAONt/60sfB/r4ePcimcFR4E0/eGlDFhmHeKqqqiewzAKLbj5u5/pd -11NZEk3zTOEwUFHkVNcHlSPHkjeA8i4ShSH6b8tJgLwWbR7iy6ZxFHceFh1hpoxyeBxXD5Tb952m -eaGua7Uys+w7TUaWf49Al34YtE2x5qiYHtgDhcEtxjsej7v+/dO8UJaltO+Lp3vHxrYpS2AiwlAF -Gw3PHBMutHNg0eHPgyi0LLNOV6xHhPVuUA8IqU4sxsAj7uETtf0iNFyujCPBXBbT/s3aVttAXR5B -rgafcD4Hl8tZNjq7FdV1omsLvz8gZ86jrNz//I//ojRL9cOgpIX/P/cqEa3bYkofSfSR3ngYNm9T -gi/gSYrlFH5GjkErhlVREHJpDjMNa5zw3Cc/TwMsWAPTRqLJyDhZ/ZfEEbXd5L1IbCzEVmNDo3zy -DTvJAzntC8Ehpmq1LOMQ0zBQ15gsy3T0Bd86bBoAskgdgq9+XddUVQcVDjnvQDdeRGAK2qimaeh2 -u2tVggWPDYt0Y9jCwbUXxhnc58ZPphKRUJ2N2YbhJAA4AxjWNC2t66ImKBYQ5ViyQUdWEALBaszm -FHLbMn1yiLKb344zbTDLs7W4c6xCHL0TYvH7nzUkNo65dMdnK/KcWgGfgXvgtkfJ70xIIs03YPdj -h12hXQTd167tHz9+Upom9PpaihhqMhkKibYbMGaFaApeE1vB1vSHQ61/N2siFsPQZF1G8L//9//c -Uc4v80zDOHg9BPeyEfVDr7pt9PtQG6G3+L9FX+HG5EARUHwDBXyiiN1awzBSLjN03TjlsanYwTX8 -FJxp9fxEboFAZ81mi4GqoJxuPKQiLyiMIjUTxW1VFLmIPZzO2nIQwJo71AdaxbsAFQ0y7J+foQv5 -RK7gqOBhFAY0GSk1rL2GcdKF1Ha+A8/z8+XZdkGtxG1DKu209pHq2XmzoHVbqMgZB0HUNvwA8XuB -2MNXARp5X1MvClJRqWlVKRLv6+1Gy7LQ4XCQvMORoihWTMK3fMMhH3qfHeIj56AUyAE+iKcCVwt8 -wPZeBQOgD6AwKwd72tadXr+cfFNg4wAAIABJREFUtDJhjCUxh88oB3eqAi42rQ2FkOYYkTwJiWkc -Jx07g4I9ClOPqcQpXa5XXftEDAj2fU/H45GOxyMt80I/335SURR0PBz082Mtwfu/yHMetw6DXjTQ -pAQU0CD6A7ynLOUxfHC9/rbzTDhUR1Jrqdy2Lb2+vnpaY4w14ohPIKCfzrfcvZzL5Upfv35RR16r -94f3Gs9WmaCAvgsLgPPdvwn1k11mYcKICgEMszRNdTzFoaEjXa83+utf/6LEERvZ7URHpA7CTjLJ -KsmPjw96Ob2IocTsudMi0ATjqkXn847Jd71e9flZTTyQ9XXdRLLM9GnccvaARFqxteC2ikRL/rH9 -7bZt9PHxQf/yL//8FCWWKFZj7drxc8C8y/Ocrter6PkXRZizlA+lZ7q4jYgDsWYcRjocOA14mSe6 -3e9SFR0ku7Hx9Cb2AICsFvbrim4bVyC0K89W5CjV398/6Pv3b58cpqwDERSex+ORpmnUGK4kien9 -/YNeXl68KghzeOt9uSwLVWVB67arurLrWur7gf72t7+yBiBNtT3G50D7neeZ4l+4vcMwob///T8p -TVN6fT1Rntc0Dq2XVI22CjF5wLWwNrB+0HrhUtI2ezGmgX8W8ogYL2uhFEpAJm4fFr5MCijZ/t+W -YPjv6NGDIKSyzETw0CtHGbxlB4bFGlcOA8k4ThSVRw/HmgZuP1LRk6s4x3i14wbAYmvbRok6jnS0 -6k2PHEGUp9a8U/UMBtu4Xm+eYalz/42EUryqFTYTUcZP7RFGQ3Y8a7n3znjCf28YVcZxTD9/vum8 -OstSTzZt26f4iebs3k9gpkCOM4/Fb3PqbOQ2V4Q5lUUhaTQLjdNd6eHbtnFOoIxcoU5LEt4IaD/h -XKTsTEn3hUsvfPfQQizLSnmeGEk3UndjejStmtsCI0Hluq4r1VVJYZhQHC3eyNpKqJPYGZdYVisO -z9msGd4vm7I+r9ebJ5+38lzGu3i0u20bVVUlNPaGbrcb/e1vf5PPOdPlevWi2q3pK/NwEgWp8Wyf -nb7R8u47UYzACyugsH/AUUI/9952ZvlsZYy+ahI67zxPuuGdFJetmGc5rZ8XOv8dibIP4UNvc+xB -c83gP1jwuAk88iAglb3aXD6L3qK3ShNOh7WEinGaqCxzk1w8GyLLqA8zjhOVsuKf+VncVeuAeGuX -K+DrwwEQWp6B671jb5KCEty+CzviYv7+gcYxpaosqGk7baWgJEQFgPeGv5P/PEtVM9GCANMJJBIN -iDvoyPvuwjlwGHZ9LxHetQeiQt/P2vtdD3/Wb4xKIc9SkSHLRGgTOq497IAl2EhxuAXjUJilTEbQ -J6PznTMU2TZq2o7yfNUNjTVs21oO6CDFq6BezGWs7KqwWEd3WGPPFZoKkwx/AdbfaOkwieK4+kiD -XG2VhJ9h8wJ4vzmMKo5jxaaAbQFgj7H5izzXcYzlE/PJsijDix1MQ8qyXDc1HgL72Tl98rNkM0ki -DbgIlezCi+9Q15SkKf38+VNMPzMNrcDGQB+GDEPLCrRU5ChiZLUoCr5daP9To1CuSEhSWZDWOhmz -ylTZa1kK0Gr0sv5A8bQbG1z1JGGtexRG+nmjMKBhXPXADcOIpnlUKTNKROX3h5Z8Rd53t4nO27bR -7XbVeLUgCOjleKDrbZcw0Men719XlQJawDhsWTtOE23mgGmahi4XvnGzLBOW5CbMzkTJLPj89vYE -Y47fD6+fKAyoaXqn4ZCpkoLD267qQVSZaDF8c5OI9i2g1QiT2rYTYBVZA7xJy7KibduNOYh7N/B8 -eHZmtll8qEC3fRc+hlPqDcOolSXo7kGw0jIvTz4XRMtijFyWhR6z02wgD2FZdmOiMyuIiwwPyNkx -8rYVm1WnPrd6XdfR4/6goswp/vL6ymypNKW1abQUwwwVABgefF3XKsGF/591Ju06jtK2HxaUWNcf -jp6QKM9z6oeBmrZVB5R13eh2v6vJ4v3xkEqFo5wgsHgGiywPIBWVXUCBZ4pgS22g7mw1NQnbLTIm -IbNHj8VNaQkvm2S5T9Oko7RpXqjrB/rx44eSSzB+QfnOzL5RbpuN/vj4QWVVugBLUUTWRuGGPtm6 -x6CUzbJcVX7jONEshI84jhR7SKQ8t2V+lqUclilTCYwuq6rU3t+BjZkGp3DWPY8nWSG6ebcaDgOb -6YjFiT8L8RZATqtBeQ5JsUo9EG4ADLsenehyuXr6DbQ4TDC7SUI1E5SemYGW7QmzU0zF7Awfwp00 -DZ8qkljbPahY0erZMbb1bZhnNmXBeL1pWu9ZLMtCI2jIZiqGdguf345+wX6cppHmOfcSsIKA6HA8 -MB8EdNTp8dAHDORy30kYXYOGdzB1eFXutDWNqKpSwQ7ndU86OoGtMT4gjEXyLKVOT1pGx7OkoFRe -8jCMetAgdxCeeqPc4taIAuQcjCxRsj7bgS3L+icTi0gByUxcZaCkmk3OHghMIGhwWkzGTEMTdJnn -hSz0jMYxMJ57jD2AQ7DvO6VZSl3b0ddvXw3Is3lKTRCesjRVQhbKWICJSZrqAsXYLgoDmmdnuAGp -NDaQUy+uHIldV9piWJIYx39V6lMYhiGVRc6W6CbPDiWsLX2de02i3vRxnFAYhbStm1agFodCBWSl -xsCKnvt0l1MR6cju9sSz53fvrN93E8P2PG6eZ0bkQRLChgSYyvLxRLgFjqWIdi0UFqIFVqFG9UG8 -RMfFRcEuVhaHsJs9oFjBcl5HgQfg4rtaPQ4mQeAsoKLN8oJi8LXxcBxXmU/waZ4pldub+7pB0O/O -e1hYDEEQ0Cr5b9fbnemu2+opCJ2LbKiKP3uTsyCDZae//fY7/eUv3+h0OlEtuXM/39505omeHKXQ -c5KspXsCRbb0ZjvPxcm+RpuqFu2N5Fucr9L+sLgCCy5OOGV2mltpJWKRHSdykE1edWVBoePxSPM8 -08vLKy3zSDcx3rD4SBzH9Hg8TERV5hFxur4n6nuv2nHJQ6tuEOQYnk4vlGWZUqgRplqUR9q2+VPF -hMkExoPzPNMoVGhLB7csOugQLPKOtOIgIPrx44coSDfloyhbTsDR/YnjYct/HGC2J87ShGIRHmGG -bpF8XDxsmjF5JC4ckGyAk6qGBL/OH2et1JaFD7u7TDfsRCaKInp7e6O//OUvOjlTebcp1zkct6I8 -S4nI187Y5KlWQHCAxFADguGpTlXm2bNGITMSbF5D277T4/Gg+M9UaFzGF15wJ060WVJxLPCHzVJX -FWe7S8ACf9hAGUhA7HHyz3OnsmFnhLh7G7euK3p95SSadZnpLA4ySeLYic+RzZv5jHbkw5sxp7u4 -C6NEdDbRkbodzfNC48ToKlDz55EbQEqmsPZ0uZyV8IJSCyUmlGNAiLlfntVs83x+UJYJjXgeKYxi -vf0x+nrOa3g5Msc+lQ1sLd3wTJxOfvdMK+ZlVTlsWRR6gADNH4ZGbyJbgtseX63TolgPTeYjLNp3 -4nDFyPNwONDlclZuAjZ+kpBKlCHhhevP7XaT5NzC8EEGHb09x9GN40ht11Pb9TpFieOIzueL4kvz -PFMrAKSdellefpLEVOQFpUlK/epk6ofjQd2xGRjcNdcBgDUOPaT3WBeeRTz9JtMOBEGgMmRfq0B+ -cG/bqsLU3vwgFWEyAno52rJ5WbW1wXi8rkuKyyL35J/YFGVR0DS7P9A0s46f8OIReoi0nk3ah/P5 -orNrRnGdGy425jjN3uYFicZaWQGlZYluQl3/cKw32UDYJM8P1NqD42e9v7/r54de3AIkuHWswaRF -aZ3sefEkmUREx+OB5rnwXF05y+/mWXbBkzBNE4mCDmjfNnNwMKDphFATe7qZWxAtRRxFdL3d6SFO -vaAHA/EFcHW73eR9hPr954U9Bg51RXFSUJoOSr9GBqI94HGr2LEXwEc1qxThiv3vMG1BLDkYjmhl -tm2jl5cXsQNjGjmj6pFyN7Duipzdl13oBk8BoC/ArY3LC8xFrInD4UC321VDZ4IgURwBTlTLsn6q -VOCWhCp2XVdW1CUZRdGgNzXMRJ3lN+NSnEdZ0zyPhnPCFxi8/myLgT/PeMLiWe6B6m3zFTDpUnMe -KfctM9bZ3ieCVTHLMM6LksaJFylLL/mk/e3337TEQEmC01fniQZouVwuKkApioLquqJlWalpWgmF -jHX0Za2J8OVC4zjr22CH9Gga7Q9dEMksXmuJHihAOPn0TilNA6LdCUcQ+nmoK5qXVeiZIc1zoGVe -aOzAYYuNHs56sD0Hn+57qkEnnEDLfm/TNFPbtlSWpUdjHYZRHWLiOKFoWVnJZyTEvAH5u9lQ0Xl2 -OnZUMAAyrZYBCwhzb4Sl4vlCznq93XUzwt/fsi0di85VQM8HLvj1zj1n0moKBw9GhIdDra67bftg -3cE0U5L4FSBjLqTtVSrYjP27mral+/0muY+x9sr7TpI/2WubGYYhHY8vdDy+0LYuNM1MC7c6DNu2 -rOtG/dBTLpUS1iys087nd71t3QYe1CEaZDd2MUqIOTcPAYknFYW5qnM2OYqBmuJycvOm75q1CpzP -gPW4rptGk4GvgurT4l5cAfFBUtcHillM4qyS8LC7LlHBArLXqqqmZZ4UuV5Xl3IKameepUK3jbT0 -fzautKorINdAM3Gzv3/ctNQBCQRknsejMXr1QF5i6CHkUG/dHw/a9tVTwRVlTdQ16gEAHjyMN1nd -luttiSrGmqNYRRrSWGfhgaMsZmJKJr5zhUY4Wzk1FHx8szgsBhsIcVvbttHbzzcqypzKsvKANetS -bDXlibEfY3DzqLc1+l1rMZUmMafzJgntu6tuAHbisN+2TceD2OxYsLjhbJDmbDQHkMxaPX3fd9Q0 -HZ1OLxL5HYt5hfNmaNqWoqdAF1Rvx+OLTlaCMKSAAiUZsZ+ePwKe55GyzGUaoA216Dp+b98PVNez -SbMOdCScpSk1piXDBWRxqaqqtLobhlFve9zYaLsCCigMZw/byASzmqZRvSO5wpvUdr8ocvXPVEu3 -OJL8hVmNbXGgn88XHgHXXJHE1i6blUQZpVlGQcCGinG8UJZyeQ+qsKVC2sWaZynFSUnDOClYaH8B -qXcediERsaY8TlIahruKKbBhl9mN4dIkplVuJxtEast1tB1YuKzIyqmqSr15r9eLWn7j5+D2xBwf -6sKu68XsJBPwKFEWpANxOEw1Eedg9KE6KhSlZBQGtJmQSXtbA0fB3wPOhZ1H50Wu0muU+ejrrFIR -G8RGVi/LKvHTmVqlO5s0wXhkRm/BUVexDFp6WuDWEltgYuH35Bt9vH9QWZXahgC4jGPmFvBtxKGj -SRzr52aDi/apolm9cBBsyDQriGij+/2hmgjIaS3TkAlcHOJifxaqPDhFuZY49KTR+87chKFpNQQE -z3NeVi9u/rlNxMibvf0mul459i0KI2W1ooJBrgNXcKX4ZnbKU4GxTZ6XtG9sZw5wnSvQ2Sf1CTkK -7VSa8LOM7UwSHG42oeCF3ncdhWFNaRJTOwzad1nZJA6Crh9oE+DIctKfNycMQFGy9MNAJLFbAIyy -LGdmnjEVBdUSVN9AXqY1M8HvY81BRUmc0On0Stu6eAva6haso00UJRrZBYqlzaJ7PB50udzo9fVF -gSwQlkah70IyDUzFKsSAh9hEGfeiYvPyJ201YEtWVRVPQsQw02bbWxqzM5OcvYMG7U23bcpxwAJB -u4J3aw84xErneaYzZ/uOtcSUmwh8BXx+PrhY7zFIpiK/4y9ejHsSx5TllaQsufeKVqlpW33/9u8f -xkkXvJ2uwNTU8kVcCb+baO7QgN2xV7EiZSlNUq1skC6MFhGAn2VTgikI0BezfbBJ53mmL1++0On0 -QknKBChUNfhszzyIzISOam7F2Hu5f6hA7MQDTshYj6kcmE3zoBjKPCvssJziaZ4pk54YAFaepbTt -uyb0WNqq3Yhc1vogxjg5yiZuArDMAAyhZOKxY0epsQ23Udno1VHyw2oc5qKQPM7zqGPKZwELXFMt -t98FfWxebwj67Zcvr3QQemsjqKzln+/SFs3zTHEUq804LKQtB9+Kr+xhiY04TZNEj3EZ2na9Jt+g -/bAecjCStLLf5wMZ3x2BrDZRyaLpduKBhftsDmoP0EfjIuFxC2ZpSmVVUV0fNB4bybh9PwjZiMeH -DxEG2QgvZAPy4dvQ4VBrOc63diubNPO48W6s5yTfWZbqd7BVBaom9S2MI+r6WZ2ueMMuT8k67lC1 -uBEOvdv9oXiN5UDgWUIAlGWlRoDZz41n+vb2oSEpVwlqFTdflc4PIiBzhqiBF9b6bOjD7sZsix6j -lLOjBqtoc1ZXIT0eiGXipNKP84eWjUTxJ9dY3CxlWaqvnY29gp1Uon27z36K88zjN0OYZC2sYeoB -22WLogKYwfzU3kqWPAJN9rOqzi380Qsw4Zw2jn62Jfq277TK98ONBNkxj4EyfSmuCog8x2MrbrGU -VhY8RTq+ZForcyHSrKDH4y7fcfEYjmq5JuMntGu+mMkdAE3TeNiLnaLAtAUH3vPY1s7r9ZCV38OC -q8RT+hVFTlmWayDKvm/qI4DvjyqMiOjr169UlQWFcqg6DwG2cGeZLvMzYPHFfg6rEp7sAWbfsTWN -WbedyiKnKY5Vrm1JRnZUCBs2Vw2FmnLV972hsu/eCBcGnaBzW4GRnT5VVUFfvrxKmlPDIaXbRjdZ -07x2ZvVntGNB29ZaU1f8vn3fKfj3f/9/d7tx7cw3FLtviG2ut5uaemJxBgGJq04hC3xRFRfIItAf -R1GoKjjLhLIe+GzQaUUYgWao//jjB72cTlRVlQI4uMHiOFHWGHT2WZZJf9UTUaA68s+eBYGWgnyD -BXIqx4Z+G3l6ajL6AhxQ1idh21Z17kG8WZZl+sysRZXrN2NBuEM1jYS2nFuSVRiObt4chpFKQdMk -pbZzYZnI+MN3hyEEpwFFNAwua36XcR407Ha6YDfMIunDaOGs/h6XAbcCiwacwNYKzxWbUBmKhm6M -nwFjmqZp9fDMcx7vLfNM4zTq2liWhcqylIPe4kOboucMRs5eGMk4jjKhqYQMNevzhFEu3jdjLrGO -Nnken3r8GWBB7qBwBwuCW5+9NRljspcTee5BcRxRVZYUJzndbmcqi5LCKKDb7a7rzrFgI90ruFSm -aXbKv9glC8G7Ifj113/fIdN8TvolIrpcLvTlyxeKolBBpKIoVc6JGxkGC2AI4qa9Xq/07Rvnqz8e -Dz0dYcbgypKJ47bKUllL27bR+Xym0+lEQRDQ+Xym4/FIr6+vqiN3kdKJGB+MnhHk+8eFXl9PHksM -bEf4GNge7tkI8uPjg+pakFwBqKwJiWenLQpHRdjHkbquo7/97a+0w9BTKgObHPOMl3C/x9pxfn5f -lcCEXxgrAYXHiMqSoTiKjIM/fYIQSYzaoJMRtEi4PaD1uF6vwv0PlCRm+Qzcd/pluEWdf/vtd3p9 -fVXQ1YpnULEBVFXbMeN7//PnG/3lL9917LjvO/3xxw86HGqq61q9ALHpt23TidG2bdQ8HvT161eN -oge4CL5E23b0/fs3Korc+OVFqnK8Xm/0/fs3D1vBZ8YzR1WG6s3exOfzmf75n/6mVvGImEOLDRfu -sixoWfx9uO873aTst2vStjqwCs+ynF2C910BP/aDONP3798U+wCXQr0b2cW21EVhbZh2b9Qza4nI -Wee5fnkXOlkqBx8v0aHxkXAABkUln9F7fHkAFpauSyRyziKnMEw8vCGREeI//vErvbwcqSgKncNi -zGONLc/nC9V1SWn64hGg7KiR8wI+aJpGp8+WktSyB11O4ua5F+OfU9EuXB4PtQ+zTrT4TCAluZbC -PgNSQ0rrAGR15Tagwv67+/0uY8BYOepN03qtS9/P3ndZxH4cd4G9jVB58Kw90pucJasBvX+ctapA -fDrIWn//+y/0ejrR129fNdHmeVIE+ioTnZiNl0i4BrgeLy9HqqpKPSIw+gpCvqTAEGUPQwZxATbi -cFoWXj9fv36h0+mk3pOBxsxtytFPUTGJ8atNLE4MO/J6vevBhICbeV5oEuKP8vnlkEmSRDgMBZ1e -TrRuzJthKjNfAAjpseAkTETQpmF0CpLUYFijTBdnj8VFzG9ddTBSjOSTZV1lbr+YkyXyNiGALXt6 -ObnvSn3fUVWWNMptjnhoeOWjl4WgAgvL4wjEsTrj2MMB6Oe67XS/X7yHwWwqLrOPx4NYfg0eGAmO -N6cHlVRVNZVlJf3n7s3EUQIfDjVNU0qvpxNN82Ty+py5pg1VccEni3IS5mWh6+2uiDLKUAuUgdxh -xUlt12u5bEvHyfgaWDooblSYWaIKw0gzy1IVVVlWG4BYkEdQlQGfgGkqemgEu2J23fW9jtoSIUKF -oYuXz/NMq6fv37/R6+srHY+vdL1+KKaDw89uvtmwU6F1d8BgqmsGz6LrB6+qeh5j2jwJVGgYOxKF -tIvuwbUJiY5HufKYNXkJxpvP7k1lWXDMeFlqC7ptu/osYi0DEM7SVPkmYRSKZd5Mh7qmnZimfH80 -9D13eZLLQkrk4fcVqJLSHv54lsPQU9t2niU6S/cXVCQ8o4aWOZIsc/izaa9gEGSM4FzMkkOCp3nS -TZGlCfWit86yXHnm+05emW/FPIOwvOxt9vb2psYIll8OMhDmq0FAVJYHZ/P9JJ20iarcv4WekYal -ECdxRKfTC/fEaSE5e74MGBMNu7ieNzb7EPKIL01cfl1R5Fr6ohTGz2jbht7ePuj7969aRdk2AUo1 -LFLYZmHECI5GEsNaPVVffAsMwmFH8xyj2COxLMLEAwqN6ZBNRLKpO8M4cpLP4ag5djAV7fqeTqeT -kFtSfXeoSpYlNO69kaEcs+9BnmdC4d0U/bc2XM9GoTbS3bIV7eZwY+PHp8kGRmo3YUliTWYZawBC -eVa25YI+wEqRJwkn4Qsw9eLqpnkSnCqgbd2o7XrlCQALyLKUysLlFNzvdyXmcUDMoGNq247i0mua -htI0lTWffbKai/O8pJ8/f+jsHZs+CAI2tZDeHcgwgw5u/l0UuSdYwIFgFWjolfp+4BjjdaVtIwVb -XEILtyGb9LXn80VkwKDYxt6MEyUp05fZ13DoG6Uew+DRvlT06X0/eDJYp6iK1MaKU1Ua9cKDOSQb -jey6CS1KbmfoGA2qVFN8AfkwzKUn9XPu+IbI6XR6oS9fvtD7+4eU8ZnOtXGgYgwIWTV/9sGEg+6a -DIM/a6WoYRhRHLrE22eXZUjD88w5Mlk6KjzsIPBidmDuouFFjm1DTPthoEfzi7Y9yDZYV9dTszmq -m7mjciyLXEBkF76SpCmNQ0+jSflJ4kis0PzqrO87TU4GVmFLZxfCkSsL0V4yqMTshrMHB4fp9jRe -r7I3Cg1+5cM61vBT3kuk5jWjTNvshYwxKqs8B3XPxt/XmkkAWjc7ZWGNylGp+drai+3Yoa4o3jcX -eng4HBRI0/GBQX0R/vA8KdgEebRCGJRlYPXxghmo7XrxulufmGo+9sAHUkpZltLXr1+ZyprXtO83 -vfHwEh+Ph24+lPrOGYXBDsR/o+R1c303ejmfz+oZB00BEGwcEGqpPY0eG9FWGja0YjOfMRV/gXVd -6Xw+s3dCFunGBc02iiIB/moqik5vj+dKIFFPeRL0O6M4HvU53MSBF+0T4tjQ+1vqclmWVBa5LjTL -CUCmnTtUZ81q2DbrDUEmoXfWDeaoyRFtu0+1xWjueV6tkwdlj/r2dLxRFhqbSTeUbVvB/cfF5WTd -bGbTSvu6rIsXoYbSGoKaRRKLrGrV+hJY0ByVLycuFTptgf6e3ZPJu6k5A6JTS3F+j4boI99L2bZ5 -zpOLwmVRBAEp5mUrRK44YEOeEdFGTdNqgAkRUdy0nQaBZBlbEeFWnJdQNzWPYbgEhyXSvpNyu7ll -SP7UFhzCiqIoVOFl46XtL9wW4zhpRFRVVTSOA63rzOWSWFelCRN9wB9I00QNPLHowOirqloXnuUD -uLLaZys6FyTDIgsDGmUhlWWli3qQReymKe4gwmZDpYJFxfTiUBeXsinl4GHzlItz5xEn5X4Y1JwS -txLMQ3/77VfdzOq01Pu8Aoz5rOlEkqTMyjQJuu5wDD01GZKY3UEbUZalHN/Vdfr7bWp0fTh47ss4 -TLFUbDTdsiw0S+la17WWvrOkOdlJFYd7DvpssYFddZFp2c9+Cy9UFDlFcUJRNHmViXMA4mczjiMd -j0dti9iRulXxja0q3Y1uqLZpoocJREtFUXqaA0fISnSyAhIPKsJxHKnrB9r3je73Vh25AIjatWwr -WHhO6KRpWyQEJvBwphj215gB+84poT6UYRh1pgi3G7Cinum+z1lzAOnSNPMSVNgfb/IeJjThKC2n -aab7/a48fizwJGE64yBppwiYBKnHqp9AOsH4cpSRputnF01EIiL+OfOiggxLybR+d0z+CbXNgUrN -ft9pmtR9BrgH+v5UTnrQqcGTRxkLy7Vt26gfBiqkP+z6gZqmobIsqK4qCYmIVD+Pfn3bNjoeDnLI -bNq3Q7f+HIgyTrNyOVDWJybzYVCZcurbdIl3oevVc12YzDqbNJHHLlIrabU2XLi53RTBxz/wOYCk -53nmefIx94HX17qstMarp4mIo1kUnJtnU4aLwFZz87LoJAb8E57bO40EgMFWEHyMFB+Ph2YjctKS -W3OomC3jkttYoih07RWIWVVVKeaT5xmFsoca4ZWgesShgMuGzWgYswNPgttfXqsxynx7EqrkNww8 -zznf5JNvhevlSseXAx0PR20ZbP4fSqXUKJtgwrk/AYCWAQU0H6CUPbk0mnt2yOq2cwQyPnuR5/T2 -/kb3+52+ffvGnn/TpASPbVuJyJf1ogybplFtwcZpEpxj/1NP+VRUcuM4UV3X2vvxLR952gN7uO47 -aaoL97n+QbM9CXKsuAfejIy4RzTPg3IB0oTps/vW07rynymrUm3ZbLURRaycQ5u2yiRIS+pl1RYG -VHDb4jgLKtL+FIdxJ20vxTDQAAAgAElEQVRJmiZqeoIwWBzoOLB6cTBiTkJsIr6dAg+HNP+zLway -/A0LUI7T7FHJnSMxWJLpp1IerUuec4T2NI26WfWmlooLzsKwlC8rngDgmSKbEs8OlnpN23nMPKwP -XLD/+V9/pzRN6OXlhXv1w8Gb1CVpSrfbjeZl1SRtu09sqCvHii+0rp0qUK0GJU6TVIUIdhyHUhSn -sL3p7aZha6RUFU4QSji02Uknd3KBncw8m0UrnSnIhl4LJSb3Mi4WGv29M01wiadBECg+gPSVNM3o -UFe0bruCPfhvlh9g+28nS2YtgwItoc2940nAuq1K8uGTOKI0ccw89GN2mvIsjcYzBcJrLdqsIatV -r4GIs9Oull4YWU3zwxzWfn4eDjIwBVF+owdmwCr2jEDA6YCS0LoXW/086xJCGmRcaE011bQ0TWk/ -HMSLv9J3AiCTLb5WLfu5FD94IC6X2rlGXmGaYgU/zzoIKATxbDXOzPhA2A2kwTXzqpMcG+pZFo46 -jLaWQ0xTCqNYHYVQ2SnF3bxDtAi+m/BKVVVQWVZ0ONSslhTeB3gKFoQ8X660bZuk/8ZGHr/rQfnc -lmP9hmFI8TRPlKYJNSJvdKSPWHPMLWnFzmfZCkncaZKMfv3td2EKFk/ZbZHHDQgC8kIUAPJgfIO+ -qOtaatuODoeDdwPbcQ02Pl4e/AvyLKNGvNnzoqRxHGgYFk8E4ma+sfegmqah0TDr9ObXOT9LYymO -aRTJMfp3nOJZllO/DtQL264oMo9/b2W8SvkUABKcAAfgcTkbhdxCIGGJNyinvF4uZ4+rDtSbc+MS -VS7ag9byxsdxoLKsFOEHFdf6FzgX2+WTmxMswtB6WFPTeV70ZgURpapKSrNCDVSyjH0T1mXx0ngx -igTOUBQ5zfMis+9VZ+O4oHBA4JbD5wGzEN/Boeb0KS9CjU23jYZxoDIqPdPNcdpUnAWpOtYJG8F0 -ymzlVqAxwi8/eCQ0akrEwJclYz5RxBVp1/caP2a9NKy6DzF2NreCKffhJz8OG8Yas4fbatDV2DPQ -zIXv7CyWIw1vwAcBPgCABKQT5sfPCvygLLHiI8RE53kuCKULT1zXjOZ51QkC2hH4zgGHuN1uLu5Y -Dq4kTSkSrjrGYLZ6sVMH9Ob4edqHpr40FvFnz8oubOCuW3WMhxgzzhgsPFEN2F1AladppG1LFBiL -woimbVZ+ubV+RvWDZ8SbsdH35tuigwSUmxSkVp2CbTWCUVeWcmgLmGgIIIXYCgeTiklkk2+b8wBA -eCU0H6g4gHbDg98i19u20WjyGgFqMXOOQeGPjw8JPDlqNdkqvZfX5o8//qDjy1EBa/THuHjefr5R -nER0PL4YRtykwN08L3Q+nynPMwWO0Y7Ad89dhi501qUWbR6tmxV/2adIczt29LgjoHC3LW2Phx4s -POWKdI0AG0GOQJJkNE2Nrg0bL24vOrw7BT7n2U8ndTpmPv3vjwd9NdFbz6GcFhdAr7ebnDjravpn -aD+P8xzVlfEBdr5FOZMkGaXprGAMWgx8dk5gwQvkl9pJ4AXRrtRcWwrZlxSEIUWEG5UMbTYRAcvu -jz6fkmid8CZRn/t9hxtNrv6KaDmGcdU+lzPhnIkGL7DNa0/QFtnSMctYP29HtmxiwkxKPG+Occ8/ -ORnhPY3T5vHjd3le1sDFWWGxqclCfmmJwwS3qs0dhFYBOBCYiFYOjctgnDavveSNG+vfjfdcVxVt -20rdOHmJ1Pue0un1Vb53KUk6rn3r+oHSLKW6rj1WJiTVURTR9XoT6/Paq4hh0PGcyOPG5auW+vy9 -N6bGT7Pv27f4TFuMZlEtPKsrQQQDY7AoSlrmiebZ+mfMSkrCQe6b67pD3O6BbdsoRt+LHhjuoRas -Qs8AooH7M5Hm5OF0RwmPkxeJvG5UGCufOs9zytJEhRJW0BEL/3uZZ7rfb+pahL7Gxj3j0AgtoScM -aNucIurPpKrYUG9v7yp4sQxE9KdWP25/RhDQ0yyeb5l1WdRUMxaiyf1+Y4OSJFbU/5k4FYUBLSJk -WleUqBv98suvlKYJHY9HXahoAyzFE+lN9kWD1BSok1LMstKw9uynbZxbbERPziMfM3A35oP/AlKg -pmnWwA8+zCbPMMYdJqEe5FzZhd47sV4Ny+L8D+HDn+UVDUOjaDdMQGDEgtbSti7zwj/3cDhQXZUU -xQkN4sk3yN8JIDLPc6qqyk16TIw8U6JHHc8CE+LyezJy7Yj6vqP740F5kcuFOn4i6li7cWdZNikZ -DyNujKe3ddF22iUu+e0ksA3Gd0JPh+BAbM2QjL2eDbeNih2S+FMAg3U+wcaCkxD+OxMVEnp/f9eR -GxY5UNayKChOYkoNmQXZ8RiVOeeWzsyPAw/wQT8/yMnLJ7YP6FgPOfsz7M/Ms0zNR20JZUt+mxOw -LCvTbI3Ec1036tfBePqtkmKTa4+njC/1xxOyVRjrRnLfL6bjkU/+4/FAbdt5GgqU9tDM29Qg9Oe4 -6Yoi10N8WZZPibTcVsSew+zzd8e/04RowW9QGjP+kSmyzfiDk+fiZ7j4q0XB3izLtSQHY9Fy/lEy -r+vFe+Z2LItJztA3VFUl/fz5RvM8eRfMo2m1VC6K3LtQMB57PB56mWGT2TbueDxSLhJoG9iJzQ/n -K0b+E801fKYbWwZf27aaLsXy6pCapnHkpm2nUSY5fzaVspUpAkO8oFNTUSrP49/+7X/ttlwA+GMf -CuvaY5NJv3txzsAB6rqiLE2p6wflpWNBY7HwREFy7CUSjMEcLl8fzUM2JGvukQ67rove8vdHo6AJ -3GWg/OM2Bv3Y6gGWIBjlYjRCtNP5zF7+X15fKYojOp/PT38/qZ7ejv+sjPdZOYnMeD8JNlLgatLS -0znWMOjZ6+ltF8myLHQ8HChOCuq7uwCo/GwYCXeR01nKzLdH81DvvudxJPwJYqGu+od7LFTcWemm -wGk4ZTjT5xxF7DoMwo2jGyeaSY9NwSXq5t3K0MzjgMLBAQMWPHOYsbDPIpxuQ61M+r4XvCNWXTzU -lPadYN26yyvSTEQ3/eqVVOZcsCNPeosqKc8zattenYdLSYVCL98ZAPhyuSoxDWnUzrI80F6dbcQz -xb3Q2o2iRIQewnomILAUtGabe8nfLTA+FqTfIwwjCn755V93WBKDJgo2ExHRx8eZ6rpSIosl7tg0 -2WmaqCoLJucMnc5U7/c7vby8aBjFx8eHot2WL+DP+WMxILnT7XYTP4JIZ7CX61VBv/v9Rn030OF4 -MCYZDLSN00wfHx90Op20UgD5Asq5UXzoUflAOsu5arPq4a3pJgt2Wu35rY2VjYDuupbGcRK56fbJ -Yssh0pEcnP2TQUhEl8uVqqr0BEaWdo0+1TrbIMyEiOj33/+gf/qnvyk5CDe7fX//t18sxHqnv/71 -L+wJKTRui5jbNbAYBB+f53K50svLUW91O33Bn4Nyzh7YuDXf3z/om8iH7Qx7WRbK0kTjuoFBOQLS -pH4Ir6+vHrHKkqAcxrJ4YR51XdEyL/T2/i6tl2+ECvu1rmuV+4AwXWRewOru+7dvOl5FVHmSJJKS -PX/y/cuLkqZxpPvjrn4FqLAsC9G+BxixgGiHdXq5XOh0OnmXlTuAYm4B3t/eKJVsMpgPnM9nDeZU -FNU47VgzyEI28zjNCgA1TcOMJQmGWDfedDDXKIpcdelAOVEKssVX5M3OcWv0MoLD5ACuNLDHGqXf -n4wVNT6nFeugFMd/R6Amxk3W/NKmxthN+8wBf+7DbAyU7W/tBkGVNCBqPHGjJSxQbHQAs70cFGma -0uPxEKZjIfTOzpt02IWCgxZqzqaZvLLRMvXsYYyk4yRZFPNwN3ggZi+Ntna+B97uTQKQP1GWpU4V -bArvuq4qJbbAMdolbII0TSmQdgSbKQjZtg4VFRyb933X1B0cCNy2MrYAsRUSqaMoomVetIKyORWP -x0P8MwKT75ApKw/Vm+3xB3GIRvoP9Aicc7B6beXt/lDTXBw41mkZbTSLh2LVWwAMZiWvc3aGR6TF -sKyALc7znL58/cre9dWBiDZajC8++i78n0tkHfXh32XMZvsQ2IxjxIhEFR7VMZj07MNuqaY46TC/ -tlruPwtCqKoDrctIwzip1TQCRz7eP+hwPEhkM4/Ftn2XwMxNOeiVGKPA1WjfN42WglYeNwRukQQ+ -+ZvLEwSinmUZ0U5UlaWSrWxLYvkVuqDGSauSHz9+Utu29PJy/GS2CtLJLIAbBFT25bqqKRHGIGMt -7x9npVNjjo7ZOHAfkHBmUarhpmq7XoVVfBjsEn02UF0fKEtTuj/unruwxWJ4Zl1oRj1u3kZav+Ph -SHGS6iSq7wfVAABvQBmMCDEr+0Zcl6sUZv09aZrS4VBrIrLNt0QQqnIdloXu95uyF/HvwVYEs5Kt -uXNaVk6XxgHlftbmAdb7zlHlaK8sxsEuz0RxnAtBaeU2a3N4x/1+k4kXsxE/Pj480NIBfrFHlLOV -GQ75LE15CoBZYhAkdLn80MXDXyb20mDwC+msz+aSDFqEyuqKQj/zD+O+KBo/AYvY3FEYSHTS6s1N -8zzTRYwFA9FD1z0kGvqiL4lfLttSBwHR8fiiopd5WWkxQNI8T4QoPHcohYpQYzQH0A09L4Ava6Ht -YsW5F4Wdta0C7Jjv2fMen72qKrVx6vqefvvtd6rEXz/Pc4qTlIhaZSV2XasjOTuHDqTPfXZggqkF -7N2tao0JNKui93bsicpwmp3xSVXVSu6JpSfGoW1pw5gKAPTVkl+4Cpx/1xhiFwfHcIu6acbDMi/0 -aBoF/lDio8VDqe/nJEbaimZZrmV1XdcKSFv77TTNxHbeYTxZlol/ZGQOBF7nUFzCWSswN7djxybq -WzgaUBCHI55nmrAOJgr5Gby9vYvsvdQ9ApesJOEwn/ePDzMFIs8l+HkUj2o6hpqKSSutxwfo+oH6 -flQjDKLUEyjAvAAWWrAnUinjNFM/9BSEpB/kuVKwozfoD9j+adITEwsJBhcoj+a5p9MpE9YbHyzI -u0NQBFEgJ2RJeV47Zx4htDg+PRMtkJVo6bjOHHN1dtdSCdn+EZsLzycIAjVOGcUsA9gATnGM7jC2 -tO1FXVe0rRuPvcZRb8+qLPjzz5PncXg8vnDUej945T9AWCu44sOWFziosGg9tm1S8wt2tEm118Yh -CAdi5zocSLXX6SjQGlDY4A3NOxB+AFKA1pW1DHbW3os8GRHy8OnD76nrWhOQ4BC975v6BfgGLrNx -Nx682PplXWgRoBlhsDrVkedptfjLslBdVdQPg1Yibvw5e20rcx9mNWqBzThGt5As88GaCTYwqRgJ -lQq8GlGxMIuXHZHjJFOw0K5FZhDuSmAbx0Gt6ZZlodiaOdhMus3w3bGpAayhtMHCg9oNp2cQhhSF -cNoJVOgCAOhZhWYR6mkalVQDFSK0zbOUmvgCnKle0Y8fP9iBtSgEe8gpLwJ6PFyJd7lc//+2vmxH -jmvZLnIeq6q7SUp6uv//M36zDRgwYPvcI4pkT1WZlfPkh4gVO3bxChDOla7YXZW5h4gVa6CiYLWa -jcdS8EyCOuE954DJwJhjpHpz7UIzBtvvEbxTmujMCyNNE+1tgfSmSayhIWgHcCAhn2EYB3p7+0lx -HNP5fKaqLKgoaxo/P9Trzoq3WOmXePx4NjKZvYUB5yEs1Edxihv9kurRgSTjszmMgAFMeD+iAovC -QP87fsaFRs/Ny2w2g3M3Yg67s3pXcs1+KNJ9u900VDQKA4oTdt5xNGa+9eFOBX0IqqxQvAOtbwR6 -fRsaY29S7AEen+YSP55QKBZtiDiDrgXPDyxUvqkTbSXBh0EliA3JHICAShnZYv05HIi9CcfJCeH6 -YWCZuOyZSnIo122lt9c3yvNchWogBKE1iANx4HlkN4HvPS8LVVIRpFlG08yxzXmeUZqk9CY9SJIk -HNUchmo6wBv7cEi3mZnD8++RocalUORSgLNU883tBIKVZCERceAjSmWo7sahlxBNdlzFS8GNbTct -qJywKHMhEZFWIIhHRyAKTxCcb2Ep7i+WXFPkOX1+fjrLL6FWJ0mibMFfr28q6+VEnENJVnyzOGQ9 -TfkQpP6uQJrlqC8r0XGsv4FBeCY+0SrWlm6SpBqAojjsl5VkbLkKsWVSMg7Ay2EYtZSGxRqAMPA5 -8P6tjySAVsSfoQTO85LmadDbVunMKYvWMLas65pOpzMNQy95FbNcDCkVRazSb0R3p2mqACaqLoyR -IfwBaGsNVNM00/gvHIZII5pNCMs8M4CM4A4w84qioNPpRJczq2UboffisM2yTIxuI/XpgxsRWlhc -ytu2USu8AJuP+Gimcr3x5GpZVqpPJzqdTlQWObVisQ5S377vFA/DQNM0id449man9odO86J9jQVY -EAi6H4dok39XH63rotxlawTBikOfugiDC8Q1P7rGQtEFO7FhYGJEIT0xAJo0y9Q0Y5pGXbgBBVp+ -WcYVnGQdKBd64zKb84by7DH7zbrKsCPtrJ83DDez+FeaRo504lsx09ElUaojHQipoPzDAl4kbAUm -LZimuECI1cv9c24zkUegQdUXBAG9vb3Tly/PVNcV38rr7x72PO7iXvnnz1+q259nh4TjZum6nsZo -0mw9EMBg5x5FvtstiGdddzc3XqiGl9j4jq3HDjcuLcrP4mvbRpV+HDsWSas3eGI3IO0WPMWNjtKd -jU8Pz5cAVQW4C5huVdWFjmNVv0z9XXFMi5CycLjhUA7CkA46TCsc6Wd/NM6F+IczKHn+//iejoPE -xi9XA9x5GtTOzhqhxDChYPeYnsZxUjolHHGwqGyFYI03gjCkPMmIqFfE1sZEn89nimMyllqrOtHY -AwNmpGAtQW+NESNKniBgZxxWfi16esIOaxhHHb1gYeIEtR6BKDvxO/FSgOTGcaSpRQgOQRvwSDCy -M3wVf8jPg3iKk5acFTZosHmWURTHdGsax4/30n0iapqeNvkeeA9vb+/0x7evv4V52u+WiveCCqmE -oDIMvd7YYRjS0xPHZmeZ88e3laCCWduq5TyYdKBaR2GgJqN45nGcKE183ze5jRMJMXHuR0kceQck -t4srTfNEURxq6cqBLVyNdV2vFFxQxyGUQYXiOC4HHcfsKT+jMKJ9nzwg1ordLA3a5gvadiaKInp9 -fWWuSBjQugyi95+FRu8SltEOaZstrtZdd6eyrLyQGRxMjyxFF6zKgh8kOjvQm9SgpKpKut0a6ro7 -9X1PZcm+EPfdTbbi4yC6nE+UF6Xw7EN1IeXbwW8NsEFsvziOkz60MAzp+/fv9PR0UXUe5tthGNFB -h3eYzMq35/4S7r74kvCIH4bRpPG6+S9uufu9pePINEyirvnkcyzDSEhKn6r+Au0TM3SXWsz/++vX -By3LSqVUR2wK4Y9UUDrbxGO40yzmZLa6eZTJQVCoicq96/SgtaSjpmk1tAMvzY1zmJyDTWhRd9wa -wzgSBSSjxYySJFUJLjQU9iYOgtjLGcD3YUBuoG3jkExgR3EU0RZt+r6gznNBqKsy9IIg8SYC+D3W -UxFzeDD+cCNic6r3QBhSGB7KzMM7ZTJbSPseeenKj8IjmHuijHbpTqtwK0JRA4Ye3XxZFmGPFtxy -bquOrcdpVkNa58UXK72aPSAz41SVCVg+6edjNyk3draXDExFrKCL7fU3SpJCVbho/eBIvG2bp46E -bfy27RRC5z5N3G8WwmhC+YEZqi0zlESgZZQLTCQiulwu9Pz0ROfzxZtHTyIOefQLxGjJOgPjxufo -p83zKcAhBB4AWFg4kYsi57FUWTg0dz9ongbPYAOsP2u4gb9Z6JIqeISDoipLURt2+kCHoVc6Lls/ -zaaCCvU5OtZW5H33LHWuuwDmEPMM8BATlzhyM+myrDgsRW4P+zMBMMFBBxvUxmRlKWsMMmHojeNI -TfPp2YBx2d6KsGfyTGHHaabrraFlYaS6aVtPiHS93pRKjBYGEWrTPOsYEO/VypLDB1DVJRhPWl7j -f9HT42LhXt0J2oBZIJLNHsbOGizWOX6eZ1SWlYC0TjHIDEM2q4Xv4jwvdDqd6Hw+06mu9Oej9QJz -8v3jXSYdktAklXUcR0KM44wCDRM1hjDOWIQrnziKDY6yUFXVVNcVRUK6G4aB+r5TkhF+zjRNdL01 -1PcDdd2ddTccxcVjB6voAoPKItQWcQbfGL39cTCqPI4TnU41ZXlBYZi7xe85szr6L9/QMZVFQeu6 -sGhCWgTnXLMakUWsPgPguGOysO87lQVbOWVZSlGceL9vWXbtN7M0UXZYUTDwtCxuHAZuxDRx7hw7 -s7CxCXr8ssg1Ex4jnba9C+Ox1s8OH3Z2Oc4VRQedFCWvTY3FYscBDbYXRk7gYrRtS9+//0MvLy/a -N6JPdovQhXPEiaPiBmHIvaEAVugvozAimri9slz8OGbqc12V9Pr2rmlOiUwz3CTCiaw4GIQR7Vla -A2s6Yr0Z8J6YGbl5BBqwH3GgYgJlDzwNTJX5d5axYxDkxJZ1aNci+zdEoptI1Kuf28BE3xc8Fooi -p7KsPE5H13UabedlC+674hCoVrdtU0dmV0nePHPSXYhBu/z5aRo1OgwTBFR1cRxJroCLbUuSRMag -yYPYyxnmlkVBMQgFlheOB4HFA6ME67RikXu1IpKc9zzPaRoH6voP6rpOiSsOLMMEINY8OSTvuJ5t -9/ps3KDOwivxePAurWhX4Qq//FhZiy5HkNF0lwPX6yzcGjWGQUA/fnynaRrYrWY/9MYoipLSLKNt -d/7xbMyQ6CK3C7uuK7XEQqqy9XnHS8mFiuwCPnjisAQO2OO0nkxn+7zouF2a58HDM2ye3cfnp+oa -MHfn22RRMtQwkOFAREJIKimU70BEFCeZ4kSI3MbixqQIU4tCJkQYQ1r672OOvcVgrPsv9BUYpx77 -Tu298xY1Pzvpj4UghYg1cEQsyDcJRgTq8mFakyAgZT9yRFikF50r1Tttu6y67v39nc7nM9VVRes6 -qd8mgljSjNtZ66tgGaKguccRtzwANyHqgmYCOAT2FVpISwCLBd9yFvkOP2IwN6O4vXeeyyuAKQuO -hWr8kHr6d3f7Hyr2ONU1pRKJhDKe04UTRZatPhkgCYglruRDT9pT09wUCziO+DdvPTj4zvMikwHe -lFikAArRq6VpQm3b6s9M00ymCTvd7634zaVizBmKZ35BvTDAmOHHefWsREvF+7+X6qOk4+CoNLDG -cBLHSaolO0pstFBpyuIQFaRUFW3r5nEl8L2qqqQkySgMRBeQFYzhjKMyAkHlthUXHzopvb290bbt -dDrVv01hrFVYIoQujBXTNKUoZD386VQrW049BYSIYo1F7Vh4ErbeOB6/aSegILVcen5H3KrlGdNf -V3FvQvvHMWoHrRtbhY1j77nkgmgF5p016USM3LJuEjYKnUhsotY3r2W1LWnTNAKGsuX96XSSkNDY -0yLANGRe+FmschHaKZgble4URbz2kpirsn3P5QBhsR1MSvFMxn1SXIt1DqRRcI8GIYgUvzUNxegx -YJ0FExAswnmedP7+aCxoT2vt07aVhtuovQs70hQUJynduzfjAehYUdDOW8Tz/e2dnp6fKIpilVle -zidaxfcMC2UcRxNX3eq/54Ua0LatVJYnj/xgJc5wH8JEIsuYNFGWJc0zT0SYaZXQ0feejhtlOHp9 -jpFmk8q+l7wF4/bLQphWUe80K+jYVxWMoLy1Tkr90NNz/uwZVqL3DCjQQxXjM4ww8TzhqrSsDASl -SUyx3NZ1XVNRcHuDUjPLElVKgq2XZplWhOM4anoO99+9d4PNi2/hbf/q+06TeSzCrTPu9k77vqml -GqPou7YWy7J4IiEEguJnWYYd9CrL4kxKbrebRKVBP0GaYoSR6zwvRGYM+7jmXfpxJKlVhW72XpKv -mCjE5ChImq1234agAqex1Glen7AG6ymBlmMNaT96WhaXZN2JfBnVK8aMID3Bmg/mLcBjlpVl18H/ -/t///eBEmEFv8TTlLDmejfsSTGeuseupzV/OIcagI1p+/OfnBxEd4sUWeiIJTBss57zvB/EXyKjr -O539juMkXOvFhEnC0nuRwBCWiVZVKSmts/RKsVYu3A7EVOQF3Zqb6sjneaJKhDIcShnQz5+vdDpV -Oi0AQDqOA0URS0cTCQJF69APo/q3z8uitwhcjQCGOTuqWG2roigUjr47tDBKA9sLfx4oOI9fQwX5 -KnFr7rq76sFxOKCsrqqS0jSl6/VKURTRzx8/6fL0RE+Xi1pXQfuPnh5MQ6UFRzEN4uX3//7fv+jp -6aIb7NEDAii4ajHWxbO9AuBs/xv4HhAd9Pff36mu2SbbEccCr120Gw0tZRhGAq5yqGlVVupDYac0 -TEmePJcjYDVgrfJEIyGiQyLCYzrVJ07nUV0FG5DkWUqf15t6Rtpy/9FvwsfUdk8qjyph21bde/he -APeOY5d2eudE6jihYRxkJBs7Y1QJlQFuE7y///uwNtzWZ7zIc/r56xfVdU1Z6sQL+BIofzGbtHpu -nO6fn5/08vKiWMDpdKZlmbxZMxHR6+sbPT2dPX/8p6cLNU1PRJvHwXZe6k55V5WFfr48y6i931Wc -xL2jC2aEDZl62MumA8BmqZzfv/9DZVnQy8sLVWVBd1EM2Tipqio9x1f0fHmW0q9fr1RIK2JFGdAL -4LZ/zFxAFfPvf/+bXl5e1JAFno12BAknXPTCoCmv60avr2/0119/eqnEaIlwQKHtQIhFVdV0vX5S -GIZ0u93o+flZD2YWPpEHAONz3243qutaOfJd19H1eqNv377qhq3KQqWz+MzwGsBzq6uSjoPo1jTU -ti29vLzQsizUdXe6XJ7odDpT2zb6XaHJtyM/OAsNw0B//vmHrrc0iSkvSmqaxhu5ProeAdv4+fMn -ffv2TfwFGDDGhAVtSBAEur4zGc1htHi9Xunr169cwaybly6Nzw/WKNOpBy9/4fPzSs/PT1QWuTgO -bwpiWtWhdXcGc7nZ1KwAACAASURBVHYSP4tv375SHMXawkLAtm3iCWhVYvwhZ411Wk1+nP3A1tQS -vTMCN5h1l3p9K2f7ZWKSMHsedlEUiRd6SXle0sfHmzin9HS9MtXYWY3vdL8Pehti0YyC9t7vrfbT -qu2Wf4b+YNtjJajg4X1+fiqFld15enV94Ujrs/jhtbrRQGiJk4zmafCYjeu60n1d6e39nb7KwmG6 -qJsDp2nqub5YeTSAoKqqFRyK40gi3H1cAHHPCBCFwGcSyy0bwwaSkA0kxYK8XCQ6K+LvcL1eNS0K -ZS8mRpb3gfbkcmGn3Syv6CDnZov3kKapbHQ7n3dlPPwgPj5nLVVZjAP6r/j5RYnO/XEJ2FQquyHa -tqW6rrXl5Pfe6YUHgI9xmEXFNQcdxpk4Vh4A8iLw+6zEFuNmm8cQBE7gNi+rYim2QsYzsjRyq5jc -910PSFQFsB2zlzJXgIkGw+J9D8OoLQurHytto2NsbivSYBDDBTrYTYQP6rwAJ47lkrLPkkBshgD6 -7kcLcn2wgpBD8IAS0k0mNp1KQKr5GCqZxBFVVa1l8+12o2EY6du3r96isFhAksQ62y7Lig+pMNID -AOypfd/oev3wDCtd1l2nZZ0FYngMVqjfPg7bJInV+51LsU3BLGvNFga8KJ+eLpqPCEospi82Bhtz -cfgJpCnzGDAFwc2Im8tmyjMzsOJsyLWXQ7miMIxkHDorJZfTckiNQbG54Q0ZBJ9iEsMb+eX5mUNE -s4L2vdG1g3J2Fo99EIZ6b5w1Ul3XrLYTlRwcdaxRS5HntAnibx2pi4J1FiBcIbClbe/0n//5b/rr -rz91ps8WWruyOhfj5KymKcaAExMNGKnkWUbrZuzm05TWZaVdSEeWcpwmsWesYqPO4CKNyZvv8OuE -QYGOyRexVgs8+jrwGkzpMEJEZFsYhhSjjED0lE1htWmsTredKUVXUcv9UI+5IIyJiOef4Jnb+CSM -JWwqDk7Pddvo7f0f7dWRac/jjoziKJKXz1OLqixVgIPPYYGlLMsEJMxVEosMA/egdjE/Sekk8WZt -29DpVCvXehhH6t479YmzYZko2UFA4hLL6uc5XwC25VmaErIYenE+yjJOk8G4y96czlO/oziKPTah -deWxwKaaski2H1oaqxm3IyE+tEa9OSx6Tgepdt7y7i27zrYuYMiF8lnb9i5S5ROFIZfK0A/EcUJV -VeqFA/CZBTKFqulYb8+3aD8MCnRhIjULqciCYxY0PYjn97emoSiK6O3tncIwpK9fv9DLyzMVRSkA -YaKALo+TU8/W3kXIxXpwWf3BIiAcRuLwqQRmZEeRdjPbS27bNvof/+f/0rdvX9Vnomlu0mrWjigl -ZimogJhvM6utH8am8PTAGHFZVpVTp2nK2YA4kcbJpfKwtJPdU97f3qkoXR+NRYMHDS963GD2xPrX -v/6TSF4A3xKx3jqgAXOJn1NAriqwtl4oV4/YF0Z8Xq88AxcKJE48/myL/t9xFNFMi24QOABhfDnP -E1VVTfd7Sx8fHxTHMV0uF15g0yzxZ4mCKM4Hzy066+uvVE2xbGKLp5nyjDd/1/fqVHscB318fKrL -kHW5VZWf8CZA0HosdSHDXlaeLgAMi+NE59BZmqpmHNUeo9S7cAkqnVNjbMdt4EBt2/5mjwbQCuNi -+NGx/VZvWImhHpp933n07eMgYbxFHvfeXkZsgTZCkaaXCP4CWcpSobHxYO46jhNdrze9lc/nM3Mz -qpLipCaiXScFqAQY0HbBLPf73QPDkbBk2bGgzWOS8RhGg7W877tOS+y/w2Hy/PxEZVnSqa6o70cq -y1wFRwhmcQ7XqY7Y55mt6kFk4vfBz/gq1nHA62A3HmP0MRn/du7vkVIbS6+fa4QYghb4YezKInyM -IGLN9pkulycvlcQZZ7SevBQZhCAyYJEDgNn31FuEzkfAtRUw0ET1wWKWXeWtQeCIJSidrC4AhB2U -lNM8U32qlT8Q2FSgB+WjjYnG3Bf0W+Ark+jfmdXFt+g8zWaaQl4CEJfakTHdWD2gENXHsrpMRatM -JAoUz/n+zz8S5ZZ7ixeTG0x77XdCdXi9XtXM1foL2nHbSZKIQYW2N1wYMAiGA4CJMsvDBgG4OosT -b/SbSak6Egkaz6M45mns+2Y8KTt1YrbtZp5nSvqZ5pne3v+lqUfYHCBQsQ/hQHeR0drR6mP7CVGS -DVnBO7cXosXTgiCgv//+m6qqpPP5os/q69cvEj9fUBT9YjlyGFKWlRTQoCpFG2uGUh8t7LZvimts -++EpQ5lZuVCWha4CsNn0Lss+pDRLmR4peXe4RZd18ySRlvkGeSj03HzSFtR1NwqDgNaVb6i6Psl4 -r5RxFUkLsj+QL1zv5IwznMsu3GIgcOgEqYdy0Oapg/GHMs2ewkWeUyN+8IUsdOsptywrte1dyzCo -sIDGW2AH5hDsBFRoIAgQ+HnmCco0TZRLdPnlcqFefN+tTz/EWbFEioGZaf3dePPExjuukUxFJ5nF -5o/jiMkvpgqxhqO4Ce0ti3/Xi+koi7YC9a2HytEFnbBasRffPBcswpuFw2D4d5wk6Rjy7UdpLlKl -USlAHTrNzsPgoEPz+o7joPP5TOfTiW5NqwdAksT0+XnVZGKYjsDNB7N7PmRjPYD1XQjoZs1b23un -XpM2zyI0Phv0QPqxCcvY/OfzRaXtmKiEYauHT57nys3AvlK14upGtbC5By6DyxpEJQi2gLXEWZqq -h5nNcsOCf3v7oD///EMcf1tPcYZkFOtAa/nMrZgfjNNMwczIdCPZdJaX3baNQeozFchM8mfw4ACc -PPadLodg15sRC/Z+v3sJP1B0wcTExm9v+6YYx+vbqwKbIGqg14R2wRI80HehysFMFlLcRwkytASB -tFMQBDHKvAi70bkxz4LkgrOOhB/LeHO/gwG8oshp30yyjABM4Hw8ehRqrqIw51DSMz8+V+IN0pPn -ZdaWgkfFKYURO/MilmyWePXZyLnB7QcgtawrJWozxu5PLtwycGi6Uck5F6FUpyPWYHXbNn3vbhOu -GiDrvP1zqsqCcyTENxHOPbYsR+KujQkfxS8Q7S3W4HEQLQbRV6cp46gN23Iea9YURTmta+MxcvE5 -wKS9Na2H0aEqdVqHVQ+sLE1pkfYJdu6oQNEKxXFM8b3rOQVlmqkoc6qqTG9ULi9Db8RidedsP1So -Xxx6wzzPKQoDGqS04kTXRUgkqY6r1nWjJI7o3rFhBwdScH/TSM8CbQB8/B6ttW3bYTPXCtUe+Hn2 -t+uNcgHr0LOhVEVp23Ud1XVFdVXpuAkvclkWPf0dAzBQsBElOsp+8A7w8tI003y8/TioSF1w5M+f -P8UpiA+2pmno+9/fKQwDqqpaS3ubCoSFtxrK8DwvYjmW0pTM+jmiiG9+DphIaVlmWpbNG0FadeJm -WGZRFLJQaxglrjukVWbWPOLlpJ9gD83CJ3E/qigMejURtZmDwG/Azcfmx/dwFuIsOmJZ+K5YCEJY -u67TC8k5Py0yanZGrnDKzSRDIAhYbMUHX/Ygvd7ZkUret2JKhqOPgA+sH7w7VMTruqiXhJ2+uJ8V -0/v7B23bq6nmAv3v1f4uLyh7YOQis9BWyzCKiZOY7pJdgRE4522GCgofx8FjwDAM6cvXL5TnmeAB -s56A+MJMtV29OeRxHPTr9ZWCIFRDBDjg4sTHl3h9fZOk1Fxvma7r9RRPZMM8BiU4RVuifaTVjj+C -KBo2Mc80DL1SMQE8FmVO5/NFFYC+c5FT4IUhU3WzDJmGkRp8MMtq1AMHBwhKNCua6rqBKiECoSVA -BXIc7FNvxRoA9MZJTC9PJ7pcLuq79xjOmogRxjx3npoOXnFt29LlcvHsp5kSmlJVltRJfDgOkTAM -qWlbYQCGgmG4DMh1XTQDwKYmb1vvJf5Yq+1xcJvfG3mJm667JSMdxYHIggWLtYl3A54A/qqqSvGf -2bQGOMzwrgA+jtMsAHEsz3VRth8OaMV2draQt5gTnhUqMvAiQLCxawBGJgBMyyLXKQ0qA6xxPGdU -vVmWeWG3CBMdhl7Hm0gl9rUlm+4zGwuG548DMt73XdlfUZTQtt00rRQvGKVmmqZKmOGRREzrmggS -mSqohmRdAA77tip9E4w7ZNLB2PIxFcdyyW2K774vv3HM7WGg8+QopjVJKY5nz2gCNymHLDqXWGd0 -QvT8/Ex1VVIQRDQOHdWnkyrK4jhWXzccFhAMZWnKvahQQoG2OpZbRGlSUdcPdD6dRHU2a2mapqmG -cIxCX07ihKrqhY5jou4Nt0QmLsK70JVD7VPRCwKQGganlbDPF0Bdoc7Om1Y4cNjBrW5BTlilJXFE -b+8fSpu1QhMLjMExynrtIXVp2zaD7PPIUHMnZheznSQxRWFE09SqToDjy2c1kMUF8ei4M4ycCAz1 -XFUWmrwzjKMe5FEU0e12U3csSyleloXWh5GvDVyxQp7HDEUVI4mwat83HRVy67poS5gmKW3R5mlT -+BKGocimDk1Jknp5g6pHMBHsblK16J9xsWF8WMfcw3Be2aNDadM0NE2zoLspWfswmGAi4y+MYrq+ -vzunmNipCT+vVzqfznTvOkkLcg8NFMpH73L7gK1zrn3Qj2myTnTSC6U3+y0O3IomfG8D598Odl4Q -DDQLZmAz6LEQkB+Pg22R8YxllzkwkgHIQ1qkMIoV9MH3QDUx6UtNaJo6Wpe7OM3wYQtlG9RmeZ7R -7XYTzkTuRWjZeG8sTotgYxSIhQljFZT2i6Qrw7sBBwBwF7xvkFpsdegyFObfbMtsJeMqIMeCRKIN -8KIwWKRS5IkHfr8TE+00iM14ksSerZfFOIIwZLMMQ1IDSQp/g86L99Y0N61EoaWAyhOHnwWn7azf -AtlN2+h48DcG7rLoJcgYD8lId5e15Axxrb3XGm5egjGP8Fm+Po4j9eJQhAtcSWbIWuQxXKakGw0B -kd6BU2gcyy/Pc93w7+//iOX0pLfdtm207Qct40jjOEpUU0VpOomRwayBFDiFoOizmxi0XBf66eiR -PK2IdIPbzWytxJIkYWab4cGP0gNDQ7+oNn3WcSfKNxxgNgIrNESj1LjfwoYZAhIAjuM40eVCHtDH -VNre24w4LDCPtmM/yF3RBycJb7jX1zeqqsJ4GMaatoNnWFWlptgCFIM4ZTMAIdB3KP76vpf+daTL -5aKlN54L9+aFWlAfx+IRXbDZVzMGw/uGMo2RdTY6wVQGRi2w39YQTYTBhiEROUdirDvngRjLtGDR -NsNiRiA04bPa9hDlcpYXRvLOJh8go7H3AZuClobJiXVqI7vt2NDlMkZqeMttNa99+xmxYXtxXLbt -G+T68DqwbTqeR1mWdD6dNLELFQ00I7gUyrKkkG/WneYH/7FRMvieLhcqS+YOY7w2zTO1baObua5r -BXuqqhRE1821QdYpxbffzolh713KQ3BEGNKe2lIvnSGj89W3KDj+7yzL1BHlkXBhbblA+LBmFBDy -pEmqYy/9TMame5xmuned/v329qalNzYa+/AlSm758fOnRIJvnmgKwJiN7LKkKjybdd20pShLphl3 -Hcdd11VJiQA8YRjSx8cn3W4NzctKt6ZR5B+3jD0Um6bRCPF5npSeDWYfgDT+m3vusiwpjBhsslbX -EKV0Xady3kdTCjz/QZKi7EjLXir7vqkFO+zW/Ci21XvH87JqWxmGoSL39nc/Ol7j+cNSbltXyjLH -OeFJQakHBFSNZVlSWZ689kixjQeG377vwlfIlZugbEsjifbt2zdlkjofwFRp5KnoSiwvA8rIdV3o -fDqpjV1iplFoFe/3lnMBxnFUauZirKynaaT7vaeyKr2SBh+0rkt6eXmhPD9RnjlXnXmZxdEkliSa -TBxYXW9WFM59lo0qd40Lt0QX6/6DTYh+moUxTqtgnVt5PDjQMA6UZqmhJKfqcrNvu5bA1oxyWVZq -hWwBJPfR2PMxf4+pwKUSpiDA4JIylZAKlrdipIkcQ/ToOtcPA0ozDh3BgrdTGJvwU+Q5hV++MMAW -J/T+/v5bv2+/OyK00Kei7dDKYuJ5++V8oqKsaVs3ipNYgGEXd87Pg2hZJq+qAE9CDV5ltLl4QBb3 -7GVZ6cFjW4RlWagsCzqdamrbuyf4sfbctr2xUnW0cEVRGAntpvN4IPgWNINRa9+ztyHwK7zbeZlp -7hbvUEjThLZ1ol+/XqmqCsUnAjMxAhHLXkKoWC1ZKhGbL0w2fv78pYdMILd3lmV0v7dU1yfFN/DM -hmH0pij7cQiYuysZCOsAI+yyLCn417/+15Ek7BCDU69tG0nKCYWbnWrmuu3PX1/f6evXF7pcLnS7 -3Uw806ia8eMg8a/nLHXOd2NjgqZphGKZiNhlorZtqKpqtbsiCrS0wkz+cXEHAWff4UDRYE6jpsLN -1zQ3Ksta/PxWQeo75eq7oIhZDCAzqXBSvdFA6EEmve/LHghANWoJj1IbpV9VVpSkCTUNG2py+Emq -oaaYEwNxxjODdh757vaw4/FPTU3zqRr+deXnUFU1NQ0TYNIkoRmegPJ7cEilWU77tlF7b6nIcwl5 -uaumH4SsRIhEvrEHa/YXcWcCVlAUBc3TSF3fayISPCbyPJOJQqTto7thU9UD3JrWodmHSdK9XSlN -cy2h4S+wCKclw+zbBNlaXwQ4RrvJT6imouw+RZqpaKPD4f2AdYNqDCW9k65v+iwcOBd5uAc4+phw -MKmOE5Q5s7Ck9t6KYW/heR9iogReCE9ddiXrgcrs2mheEywVF2zn8/P7gRIJuWNdP2jKz48fP+k/ -/uM/NFrZlXo8f0UsN+yQbeABEdHb2xsbVsYs5BmGgZ1yhEuNOXuepdLr7mqc2TQ36ntW8zHldPRK -MDv2A9KJHh4n7sfHB10uF42tmqZRxoC58sOBjMJCjBVlk3rZ/fXnH3pyW8qtFYqAATYb26l5nqhp -eAyH/xbuNhy1PmvcM1tntapmBIjVNA09PT1pZWJRZ8ufh5/gXbzy8S5ut4b++vMPmTYsKnXGiAit -B4g/ViQ0zzO1bUtfvnzxVJCWc28Ze9aunAFe5pg8PT0p2ImLoet6VRAOQ69aCw2Jjfnz/f39Hzqf -z55IB2sQm6quKlrWVTUJSBbO0pT+/fffVNeV9t7o1+GrYFWrNhUpzRgX++fHLzqfT78Fg1i8pq5K -imTk+ePHP1QUpZOE3zv649sXJePY32ezFp2IyJHTTnVFTesCUKE2ZE5/rp4GzpfAjbJxob2+vqmf -gyOEOVfhGKDDtm3iRNqzt5wxO5jnSUt4II1gE+VZSqtBP7XHDgPVJH9+fmjceJLE5kEsiiK7Pp8d -V9/eXtX5BP0Reqwsi7zejcMeJ0XpwYDbBDzkci5TeWhpAEeUkTi1Me4rCgbPgiD6zc4coKELkti9 -eKvjIKXtwixUrZxl/AjGm4vmmtmL0JCMLLMSI7txmoQWmygzEtyD/uH9oEpg2u9ivPVJKx+n/yBv -kdhxlhMcpeoUZPv2x7+4QuKQ0Ka5sW+CMDzBOrXPEm2eNRuZ5oX6YdQpkfWMHMdR3nNBeZZRmhU0 -zTe9TNBeMfGHAUJu59xoGxx9zPOtFn+cZrXB27ZVy2goLnGQvb6+0bdvX6VVaVVDY4NPEK2G9ovb -7FUt0raNS3Ec2EWeS/IUsLY7PT1dZD1t4ma16uewADUuB7gRpVlGkdjIW+k0fCvWdaGYxRS5IrZK -4BDTS5TDdryBnhlc6I/3DyHYnHS+30pc1TTNdLmcdU7e97364eG2BEkkFals0zR0HJwvMM+Lx9G2 -OXF6cOEWE0okZJIs2ZzUGAN8b/TjCHkMQy5pkZSst91x0DyNNE2jotZWZrptm0ZeYTHhVoLs1UWr -zXqADkOvpaNjDvIGgGssDlOmj6Z0HKmWlFFU6gFrWyELbOG2tMAn6/idKevpdBIKdqKzZ2vLZkdV -mHIAL3I5DoHSU53VO0tp6zoiokC56VB46uUh2BC0/mlWqBORH0Weqi4jSVJFtaFpgBgNhwm48Tjc -mVCT6yGGQJD7/a6HE2c7zFTXleIN+77T9XpVroPTMvBGf3l5Fk2EH93FRrWzZhOg1ZpnoihiIPbX -r1dKU/YnZKl7LI4/LseBD7xdyVbWkGdZFnp/e6eqrkT2PnkYwxiGdO86iQPLdbRvI+yDIKQ4z1Iv -IsnO8ZmVF/w2RwfqiNOnrEpB+nMta/p+01OaUfuEEjGo2I+Djn3VPtrO0tMkpXvXyedIdT6KUmdd -V1oE9MFLh/Amz1IKVEu/6yQCaKol/Gh+fBjqGApjtjRJJXpsUStw0FanaVZGGyih+76YYNNUk3z3 -faddyBu2XOeflXuGGnjh29Z7ElN4FeLQ6aWXtgeVA4L4YMHz4MpnNWm3iW5wtFMuU3FURR4qhyzL -qOs6SuJIS1iLIjtptRv1ITUHLLYiL5Q6vK0rdX3vjT4P0y7O0+BVPCBmuUM6UFEViDMcStLpGPQx -Is2G027bpoYdcKPidRLpGLGuKmXWRVEkk61Kq595nsWVueZItyikMMyJqDEOVNb9OvRuYBzYdc3K -SvbIJJrGQWXCMESB8aodo1oOTFGygS0o9NYZyI2TI2370HJhUpFlKcUs1Fm8mK5RblfL8LJkh0dZ -LysCU6V8Wgrv/d5JuRsryLWuG8XRrlRRxgImRZaxAcZpoo+PD3p+ftYHCPEDFg1CK5OEI84XOQkR -OFLkuUSUiY7fjpyW2SOj4AXdmkZNFqMw0N8JNSRuwONIaJwm+v79u9hhEX18XOmPP75x3yiA0uPt -zOUwp/ygekDqjHU6enSASWJmN1pCE8pAjMPYhShXXMP6KIL8YQkyy7oqAcWCV0CxEc2N6gcHTxxH -FEeR59IL5B1KQbgKv76+6RqxvTZm4zbfAd/NBliyUO3wLOqDIFDKMucCxppuZCvVR3n6OK66NmEY -EwSk+QBpVtC6zDTPg4yTU91UCCvZ953WZaaDDrreGoqiTg9o6zcB3MNpN3iKhTDeQhylYWNncQZM -SpgIxZWP88JcJWviJNoRomluFKhkqjRPupZ50e9grflB3Irt6cSoZqxEFKi2ONEmMydMpP2W08Bv -enBkqQMymJQReSAZTDjSNPPUc2CfoZSE/TUWSRAEFAqwBztrTBSQ/ooTU4lMyyoz5UxPSvTnuIUt -pRNtSZKACbfR+XwWgDTUchKfdV2Z5lzXtTxo0pIMOXNPT096wFpLbYij8NmtmxECSGwGAqYhRMR+ -DCYmzfrEp1lG8zRpm+EmIpFx3s31fWh0m4nItmIe4AbsYZBoFWQJP4+RcVVVUd93NI4DhWHpaeYt -M9HejPguavstt7pyBoZBo7tCY6sFzCkMIxr1e84acWc3DVpI8P3RdlZVSW17p667/3ZjL8tC7X1X -kByA5CjOzS4H0SUWofLcNheuyhLfSMM8EHdu9xVufvBHoMewB5qVFg9D702leHKV6++Ik0jbAxYH -pT5lGSw5cI6rqqKnp2edq1pyilM4uX7EppyCxpmawwKuuXle0iH9C8c8hR4wUZWFzvZRaXCZnmgS -LYgiEFDg38ei08ZcFKdgmibU9R1rzfteuOOrAnqQBicmGNJy6sMHggqyBfd9E1xho2XhkpBLuovm -xF0uz3oT2ufECzDREnieZ+qHUaKkNr0peAOk+hz6vhdmGN+4uHnZ93DQA3IRDGRe/HIbh8ayLHS/ -t8L5X9QYNZW2D7fYJHwATkYelRAFsOu/0m1gEa/rStfrVSOsy7Lk9xuZSYjhqD+yIYeh98gxOLQQ -7ILRIAhIifhTAOxkGbojYqkhi3j8TUKIAqDIepVdKw/3mfz8SgbO+EJ5e/9Qhqm9RCzBJwzZoj7P -Uh1Xw94e7wAg9qOxzDTNGvtupxNgZGIq13U93e93r2UBw3IYRnp7+xCrsEPp6RhFSpUcm4z2TBYn -eaix5sXJKQwars1qs9Fc9oOjOljXXoI6NpdXHwYUpImJP549WaU7sRO1ZkKflWWZhH8ShVFM69oa -B5ud4jjVXLYkYQusQ4JG8cDxHRe5PVG1gMbJ/7wLn91l8l2vDVVVocSLYRjo169X73lgXux6N1I3 -HeAr+C4wMsEpfsifR99urcOtRgKHHWK6kXZk+2huWWYjMOK+sCxy7wazYirc/FmW0SBEKbxvfB47 -jnx07LE0bphyMmOw8Zx4QYLC4YHPUhSlphp9fn7K2DihfXeUbfT7XdfpM8Dti7WYiogGDj/47BZj -yfNcM/jc4RTpmBAHHDvz9vrf4L/DLYznjnXUNDdhs85KwsH6jcX4dp5nqqrKk3hzS7wRUexNWqwZ -L9oMawYTx0wgi9KEp290mPcZelmNDISOTNxD2cimi/ylwdUuipzyLOcbYBh0XssjsszrF1HitG2r -1cM0TTSOg4pvptkFP5RlSWlW6FgDMmA+/UatPoIg1NOdJwxOPIFRDYNfkcye78pIXCR4g91PYwWV -0D+jX06k3QFq/PHxqYcElHbor+OYg0Cen57odDpp5XM6nQxhJpCgiEk2ys6eeRJGse2bZzGls2/p -8+yEgIhfHCTF1hEYYNLlfOIKS54NKgybneduIf6suYw5MRkJ5TC53+/08+cvJ4CKYhPQGooV1eGx -Am1kvOO9r1qdzcus6wKINhZ/VZVqK4bZOqoVsAWLIqdURqaW7wFpM/wmdjF0OdU1nU8n2YybquhQ -eSQPZJyqYu8HxVpEigx3pv8qHRttACcrJ14qMkbWvCZcajEOiXXb6HSqmU4tCD0OeTBjXRQ8c2VQ -mSgNXRizwLjw89HbQxdgE4rBpIUmJMsyHgN2vZ+qYscZhyxAuLKodxv5fGosSkRl3W43ZVVZtR6Y -TFEU0TwN6tRrx4sQ8uTCfrMIqA1zwIO1M1xNYZX+HV++63pDe3W9JQQ6+P3sU5jTqa5EfrzpiYub -Ms9zyeILFCzFS0jTlMoiV0IONjQcl+I4oYACPXRYMDTqjb9tm5pqsrxzoLqedKPBv46TgCL1KeSw -h1SrBoxWkVqoDgAAEPFJREFUXR+feIfs7XbTfjqKQmX2resqHHfWdEzzRFmemeiw3AMg8ZxRNdn8 -gff3d5ombpHs+NQKXtCPL7LxjiNzgjKJ3srzkkE3xXZ4zq523DmHl3IGAIPH2to+AKrLg6MU/ndd -FzV0gZ4fVZB1XQI+g+/Qdb1n88VTnZAPlbo2TkjO8yCgQOS9s25G9gdwLZ9zH950QmUPIWzsg1w6 -9uP3Qpl/v3N1fD5flHWo6+nz80p1XdH5fFKiBX7gNI2qVoLUFPReOw5Tb7fTibI0pSTN9IF197um -7yA8JI4LNf94PESs0o7LaZ9+jJkqUHocAPaUQ0rtfozq5Au/OLDAdpnbr+uinwN+fWVZUV6U1Lat -aPWdkg0HwTj2KrtN4oiOfVX7q3vXa6kKYUaSpGrueJBTsqE8tWM9d1BGakXOz8LlKdpIcfamb70M -QiQsYz4/yA0CQo0zqiAhnjjM5nSqKc9LJQvB9xE9KEpjZMzZigDeAvf7XUtlTJbwHVEJ7CblFyQX -JgMluhn2fVOpum0pt23UVoRj6UcFmm2KtA3HdF4JE93vnY6oIewaJeT0x4+flCQxffnyhXYjT8fv -c+vMHeI4GNDOQZt/v7f0/PyseBIz9RxbFLLnJEn0UgUtGj/LZRDaEWMsPAWOHkO2AbQ9WHvIuzwO -NjWJwoiOw2UbxKdTLS88p3XtHuSvyW9sLxYJzaqLx0Nl+yUWBNU1c/nzvGTLos0RjLIsknIrpP5h -TGPjxsbp0I2J8s4l2nArgL6UwTbShwkKJvdOq7LlPj8/6enpSUtN9EZ242ECAjUbOAV2RONIGocS -mWajwV+WWZxvS9U6YOOkaegh7yokEiEU+liUhGmaeQwygJWg9WICYBWDrn0KKMvm3zIE/JtvfUgf -3qSEn2iaZp3OsMvS4gFVNm0J1ZAdXfKhkSjzEqYdoxxeltwTBKFa0MHohAG/wHvuoEQ3TaMMQfTH -eZ5r8GnX9YqEWwoxvifH1NXK/nRis4PqulTl3ufnJ8VJ4jn6qnW93MTANWwoR55l6qVg3YUsp8Za -6zEnIvJwFtCmY/VLXL1cAjwvjLlBcLJELpT6URhoQAmew77vFBdFIYET4W837TD0ctNE6j2GhT/P -uz4wVAtcMkU6LrnfW7rfW0rTRFHksmTJqnPT8S2o0ctDXPRYGQAkwuTg1rTUNI06z+KWwBe06DTA -JA495SRcLFqw1wBgDcMoCcEcojlPE82y8GymnxJMpCTGhKESfjhaFnDAJ3HAARiKiQeYgta7nZHf -2GTVH+prWFalcsM5jNU/ADTFNvR5+/aZOnmvlRyLJFvGkpymm1JAzvjVahE0YkonB6FWMEmSUJxE -dGsaAUB32gyRyG4GVAcAqHCQW4k3Dl4o46qyoDDkhY93G8UZte1NCU0Qp8EK3ZmcRlLl7F7MGSLI -yiKXzAB6CPV0fAmQb+Z5omGQqHWpgtr7XTEwHC7WuMPyHlAhweEaBy1i1zG6DALSypGDcpmEFYWB -HnqYUqkXpTy/aXJ7Axb9RMQ8gH4YKBBQwXeXTdTT3d6S1tXUUj9RlsAgg2g1RhCbChbYE2BUUMSW -d+jhcVMjeAN91LpuBgTi0w0lGLjkcMyxvvZW752mmRgkck8GcxJWV4UqqUSwB9tqlbQfPeV5pimz -KOlAF8WNw5wIF4OG0tACRTachIHPyTsQ0I9P80SlpBzrjF1YZHGSKkbzOErSymzddNph0WTwMECV -tWKUMAwpNMxJO0nAbeXGmJNeHta7AbHZQz8ohmCrg02rwljf1yhjPOtteBy7JzjCpsGYDeuSk6FD -WpfJqCNziiLY3Ee0rn5oDRyZgNw74DcQYVrvHXq4reHR50JsWPGH9ClwV9I0oa9fvtDpVMv4dfTE -RLaNw4gzMJgXEqH2/UVowquCvxZ8v3cdtT9+Up5nHPCS5QoKQpXpyZ5l0hOGIcUowUCxRInBJTYj -nGmW0bL23swXC8U60uIl30VkYl96HMv0IC+Vsmr19JYxhY1RFgVt26Ea9nFcFWxajFVXXdfCiGI+ -wi6jPHsjop8cx9HzfTv23evFsaj4Vl7087Rto2M/BjtLGkeewYLck+cZ/fz5S01QgoB03Aj7KLyE -RzUfSjWLqjvDzU0rDp7hFmKgEuipD259QAyCGf6mB6I6wDSiQWK2Us1kdCMmeAH+V/ZWfkmeKJiK -9ZHEER0Zh2wuy6rOvlVV6o21rg7U3YJAx8tO1bbKZvOpsNaabd831YQQ69oMsYZ06uKMPNff2lY1 -xxSWHrz0Lbcf6x3aj/0hFFXR+zgyGgYGg8d408PBrnOLKTz6KNrvm+eFtk69HMKYkux7oHoWXLoQ -E4GFaUVdwGgWsb3b952C//k//9uBEdOtaWXkwppxd+I6JRKyxicxreSct9nrkbk/zPTh4/8HF1bW -yofKOYeSD77mIMJwj76bcSMZn/ZY3F4WJUZYvTjMIhkAnE2oiOOe82J1+fb8gBiZZlvyUOa1wBwS -z4MAnx0ZCVma0sfnJ0VRSE+Xi2oYNCXpfJHfFXibE/+MKmnbNsrSTMlBFiuII//z+vn2TuttWwH+ -s7HyO+znT1MWfjln2f03r4XjYBsvvtVZX4B/D14DpgEufjw07QBboBUFjyqTJPaqFXgepGmmAbXc -OsUqeuIqYfa+rwP3QnmWgXoV2EmWNSjFe59FHs0isUInNAj8nOdJKOqL6kAAiFpPBg7smH2qt+wf -PGOU5D6YuKt/Qp5nXvVh2zLmMyQS6NEJ32FSTAX7hFvjjKIoo6a5Cms08t4LgGHQ8adpoqC5/XMk -SUL94NRwP378pKLI6Xw+U9M0qidellmRd0wHrCLPykfBF397e9dy3toeWU01Tkz0y9aN5Xq90dPT -Rf8MXjyCQx5vJmfdzOo/RFq5uSqpOytcgR1t2VFSgcziWYAN+frrlYqSJcu2JyzynC2z7x3leU6n -04Xa9kafn5/0/PzMscwSh7U8SFAfP7t1kPn8vNKXLy+eE9Mj8QY4BiYH9kbB78dBhAWIYJG65nn0 -uix0vV29Wz0MQ3p//6CyZOpyJeCtrfg0y084IkmSerr519dXtWhjw5VQKyBURnj28PNDBTNNE3Vd -R9++ffOchLHmbNAIQEFUWZiB//z5k6dTgtuogeviDlc2KdnU8xHxYkREP378pL/++lMdssLQof1Y -/wCg7YGL6rTrOvUzwJ8DIcziKfYzowrouo6GYaQ//vimzxoEJQSkAnd5fX2jui7Veh4jzKZp6eXl -yYuCh+tzEEg0GD44wJnL5Syz7VzdZkFNTZNYmU0oOW+3m4JX+FJdd9dNcr1+qr+cLW9sJlySxAak -iNSJFcaH9nS0c0/w6x+FS6BsWgYVnHlsa2JxDRujbdNh8jyj8+lE67pQVbMXHmb96iA0z0qsYTyh -lwonEIuwTa3Suq4xVMxEe1BNNVagchNUfvXoprYiABMNt43jtx9Cfd29Del4FaQhsPhzaH+sHwBu -mDxP1Pbcj20LdNT0GJ/FFvADFXnBpJ+ypDhJaN/ZI8Jy7h2GsT3Yve8ysSEvZ/HRORqakDSJqevd -eBa4BVqL2+3GlUaRu5aKHEsvDCPatlmnHHmeKZPR6iPQog6yqdVlWXIW0EoAY7AxbtZ3weo/bNQ7 -Ds19PyQF+VCqNwhQ6OW3bddJHlepuwbtWJm/i1xPtPqOl3VTI0aXFMthi0laUBD88l42bi8HRJjZ -uyH12HDRQE49kBCsKg0fiA0zVol9WoQMlFKSzF4ZhxuAf9ZueuPYsAITpT0uZv5vN75dvFbzjhcH -80seGfHC7SU3jzMUIiLqdZRmQ0ERZc7g4m6synaa50FP3yjKdPHbkhXP2I72vv/9NxVlyfLPB8PJ -IGAhV1kWyglHeQivP034kZIa1VaWsYy6MziDM5ZATqOAT+RSbxwY5aq2TJB8N75dWTf/5YWqsqQw -wucs9Z3gsANJy7dgj9XZGOvKeTE6vwN87txMT+CLB+k0vj+AT8sqBEaRZ6m2rQ6bikSe7gJkwzCk -qixUQAUZPPYOuzNxCzyFToWJjRcGAXX9aqLfe+f6HEfKUWG9xiQt7qox6gCIrWgO77yqTqpc3dZF -359/+B8spsoyii0Cb8cSwzjSvMwKEAFAsRvR8qkRLb2uztk0y1Kap4Ri4fNneUHL0picdf5voNNG -2mnT3AQwzNSJ5fHEn0ygBHp53KjO/40Zi3YsZkdfLn8t8r4HcuitWxL44rxg2t9QXFZTuuDQ6Zip -73ux1T48U089oEQ9OEWRIeks3ggT3IiiZNLK+XRS11vLTrtcLoq9WK98S2BiDIS8jctBnb0njpnn -SW2t7GYHpZZ9I1v97wBejtNkvO6g2Uid1Zy4SgNBZ/p5QrPkBDpV4uT1wk3T8u0m5a/FOCxQOYlQ -yt5w+77R+/u7tGUnja1jiu7mAdr7cSjD0h40MAHBc9j3nd7eP/QQsu2pcwXmsJuu72g/GGCe58PP -a5D+XJOSkkSqa9KwXLhIAY/Bc7UXGS4enj71orhdPG6HJWBZR+vwcVRmN8e27XRIv29VUlgUls8+ -inoJ831mQXWKyo7TTG9vb3oapUIBdWknO31+fkrZyw8hoECFRTrXNtFS1kl2GEe1y2azzUVptrbc -hzsQej4LFEE/ADdVTAAGAfOwiSdZ6HYMComtdeFBFQLV32yca1grwFRQeC1CpWUptZ+frEu4XJ7o -y5evFAstG88OQB5YaaUwxg5DXbYjQmuWYUtX6C9wewBpBsr9CKix8qz0bOB9R6JImW79MNL1dtVA -VMixp3kRs9BApyWuMkl1wwEUhiLOgZ6ruhy5NjVR6zFL+4V9HcDuz+vVmwQEQaC6B2cMO4nv3uJd -HDgYIAt3HnurhK2MdGtaGkcmk0Hnkee5KhJx4KBN4RQoNrcZhtHZ7JcMLoM+D/KVnXAp5z+JKZZW -wkbFAyS0Kc46xbFJsNhU9kUiW9yOriyy/Qh88ElJOtdcl9XjL9ubC8IRhCugVK0qnmUy3z70Nlog -IyOg/4+MOkhAp2miuq494gbwBsu7hwcf7LVcsOOio0Gks9oZrZNU7jrBQEsD9xiktNZ15bHNbBQX -fkffd146EhY5CDKMFE90vd40odhVNc70Y9s3KgoetUah8+m33A3779y7SRXQws9j08zYc7DFYke/ -nxclbetCt6ZXNSPGYmzUEWmwCxJ1HxN0sOk4apyJXgjggNEJ+ypGKgBzVGbfaQeH4rq6No+NOyuK -4oyWe6c9PNYyDphHYxS0DAgnsb6QSZLKBIVTg3n+P5sbl3X/EL4lcUytyHaZyEYauYd9AGyGtQ5M -Vx8HUro02qN19XkXbetck+GPYBORbHAqHL+gkYj5RfgJwKCZck8/UJ6nnkINQgksKDtmQQ45NhRu -LCU8CNI7iakmRltw+o0ilqrempbWZdKXZNFtgFwITgT9FiabIBNx6Ejs+bLFMbcjmHyAJgxj0m0j -Z3qaxNTnBeVZashNZNJgd0MhznTjrNuqYp9Z0oHAzIJwBxsAwFOahtoOjeMklk68+NhsJKe+77SE -rMqC2nvnTQXiOKZj32mZZ03Rta2O3ZioVLCI+r6jMIwUqG3bVtKaHIiKvl459ctKy9oqgIw1g3KU -vRldJh0AQsz8eZw2a54kfgaLcjZVf7Ls1/XJdkyZJEzJdaCpu1yYiTfR6XRiMHWZ9MCOTXgH5uez -gKb2gM6Ez0BEtEWuQuYIOesFYAlYcMrKKZf1Yzn9+GcbR4ZDP8syKotCK8RxGikvck1rOp1qz5vS -8kcwQXhkfCrOJlqCXTAAIqL/Dyy2Xw3ACWE3AAAAAElFTkSuQmCC - -------- =_aaaaaaaaaa0 -Content-Type: image/png -Content-ID: <26389.957885364.3@twelve-monkeys.helixcode.com> -Content-Transfer-Encoding: base64 - -iVBORw0KGgoAAAANSUhEUgAAAgIAAABaCAYAAADKBz5/AAAABGdBTUEAALGPC/xhBQAAAAZiS0dE -AP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9AFAhIaFX5RmFoAACAASURB -VHja7J13mCVVmf8/Vbdu7tu5p8P05MwwTCQnySAgyYTKKogBMK26JtR1Dav+TKuiYkBRxCVKkKDk -AWaAgck5h8755lTp98c9ZZ+pud3TAzMEt77PU0+HW7fCOe/7nu95wzkKb0L8+GuXqmvXdzRHaiqm -R2Paglik5ngjYJxjGlZ9X1+uPxzm7lC4+u/5XOHRn/3sfh0PHjx48ODBw6uC8mZ6mP/92QeUPe3F -2aZlXdrR1Xtqw/j6k3vjicoqNUzSp2PrClplJY2xGqpqK4zaytbP7F277JYbf3xPwXUp2+taDx48 -ePDg4S1CBG79wfVqfyEVSeWLX0l2FS6dMrFmmuLXAts6u5i/cD6nnvQ+fn3LL3noHw9y9vnn8j/f -/jn+gJ9Eoi+xddtTnzn11A/eXiyYlnRJyyMEHjx48ODBw8GhvdEPcPP/XDV5oJD9oBnihlBcbfC3 -TmBb7yADXR2sWLWB2Uedw4xZMwlGoxRzBqueXcsd9/+VbCpDJr2tSk/k3vnu8459+s8PvtgrCIAt -CI7tOjx48ODBgwcPbxaPwF9++mnf7kzHBZVKxafymnXOQHs/6ZzCjd/6KZm+Ns6/4lpMw6Shpopx -4+pYs34rqUwGza+B6kcv6CiKwZknzUw11FW94ze3Pr5GEAFTHJZ0eGTAgwcPHjx4KAPfG3HT39x0 -Xayts+eT2Xzue4Sb5w11divnnXM+a7YMUNRNdu3p4777HkLVVHr6B+lPZDHMImF/jGAkjF0sEoxE -sYsFGirDwUg0+OSa9Xvbxfuo4lC87vXgwYMHDx5Gx+seGrjzr1+c276h62taqPI9+oCPlvmTec+7 -r2fqlFmY4alcdPEVhCIRqmsqSefSxCoqSScT+ANhjICNBmihIKpPxQxqFE2D2mjFImA1oANFIC9+ -OmTA8wh48ODBgwcPbyQR+P4Pr1TCmfyivm29Px4cHDzFopJ1Gzbxzve/j6lTZgFw8y9+QSwaxrB1 -0tkMiqqRSKb4wFXvJZu1ePhvj5DPpVAUhUI+T6QiSko3MC2rCagFCkBO8grYDIcGoBQy8ODBgwcP -HjwIqK/XjQJJ8/RQTfVfO7v7T776w59QF550PjlD47Of+ibvee+VLF6yhGUvrMIXCqHaFr/81U00 -1lWj6yb11TF+9YufMW3aRAzbZsHC+Xzx6zeQzKewDZtxNZXzgXFAPVADVAIRIAj4GQ4VeOECDx48 -ePDg4fUmAnfe/NF5mWzmr6l+Ju7bO+SbdvR5TB4/EfCzY/culi9fTnf/AJZqYxl5wMe7L3sP//Zv -HyIWsln58mpQCtiWgc8yuejCi/jK576Dr2gR8kNNbWwqMB5oFGSgCqgAwoIIaHh5Ax48ePDgwcMB -OOLJgjd/5/wZmUzwJ35/8KihREZZt2U3xWySO/5yFytWr8MfjKKpGnWNjXz+E59kzcpVWIUUHT19 -PP/C0wwmB+iPp3ny6cfoau9Az+UJ+KA26uOue+5hfGM9c6dPtB5+etU68T42YIjDyRkwGK4k8HIF -PHjw4MGDh9eDCDz15/NCvYZ6naoFPrhxd6/W06uTzCvc9/en2blnF7bPR9inYKo+Jk6bws9+8iM2 -bXqeLdvb2Ll9E2kjTyKRR/Gp9HT0ktPzKAE/Q719LF+6lIxRZPa0JmZNG289+PjKnQyvH1AUJKAg -EQGD4YWGPHjw4MGDBw8c4dBApj9dX+juunLSrOn+n9/8KPPmL2LHll0EbBPFH2D+0VOYNXMShUyc -LavXsGDOXB5/6HkKuTwP3nMvzzz5LIuPn4dt51mweAENLeOwsEnreQYSOaqCQWJakEBAt4A6SgmD -clggSCks4JQVeqEBDx48ePDg4fUiAsVqKzzt2BNnnXHWtfhUjRlHLcT0+TBtH6qm8qUbv8bPfvEr -qhrqiFaG6I8PUDBsLBT+dOfddLR18tGPXUNdrJnb/3g7119zNUP9Q3z4Ix/muJNPYzBnE4oEWbOp -O00pQbACiEokwO8iAV7CoAcPHjx48CDhiJYPBpXGgekz3/6Az998ybe+/H6eWrGbcChEOBxhKNXH -I488xMypU0nl8/gNBdWv8Y5LLuelVS/wh1v/wD333o8SMFiwcCE1VXVc97HP84tf385Xb/wmd9// -Bx5+/CGqI2F6hrJQqhKIACFBAgKSN8AjAB48ePDgwcPrTQSWPbcy9dDybS9rhf+65OGlHRR0hcqK -KlKpFLbi5667H6KYLwAKpqqwaOFCbvr5TbT37uHUk05iyTGN9Lb1oUp7C158wWI0xcfe3b2EolFC -1RGUbMEnBv6AiwB4ZYMePHjw4MHDKDiiyYLvXzLJfmZ7ccIrawbO9WmBgKHDzJkz+OY3v8kra18m -lUljFnQCqkqqWCQUVOkb3McjDzzJ4O6tnHr0eKojQXZu38Vzz68g37aB9dt3oIY0HnziYaZObaWl -2s+OHR3ZLbu6UpQWE0oBCSApjjSlpEGdUsKgt8qgBw8ePHjw8HoQgYdX9jKtuTYTT6VP9PsDE1vG -N9OXyPPD73+XbD7Liy88S3NrE4/edzOKFWX9+hWsWv48mf5txDSF6dU6x4YKpLNZJugdrF6/lueX -beZvTzzG2886jWNmNJPr38PSFbvSvQOpDJAVRGAIiEtEIEepesApIfTgwYMHDx48cOSXGFb29Mbb -FJ+ybfbsWSfd/8Bj6g2f/gSnnX4KPr9JMWuh+VQaxp/C939wHrNmtHDvL3/CR945kw0bephp5mio -q+P0TJ5qn8L4cdUEYgHaEgaP3n832aLGF649E9te795y2MLbfdCDBw8ePHh4Yz0CgDI0lFXmHd3o -69nXc2FXZ2dg1erV7NixjWw2RbBCY8/WfUyc0MSiRcex4Jg57FtzFzVmEX0wS7BCQ0kV0HwKxXFB -lEyWHXGbSTXVRKsiBEIhzjllPvc8sioVT2ZTYvYfBwbEz4TwEOTYPzTgwYMHDx48eBirR+D66y5W -Kir0aE1ttKG6oS5ayNvJ7nQqPpCyM7/9zp2jbeSjAEpiKLeUoNJ3+1/+t2LcuEpOPvl4+nt7+fPt -d/Pv13+U55Yt5+xzL2LX6kdZvjZFdE6AuXMaGdjVjw+bign1ZNIJAiEfiqKQzmXoTVk0VofRLdPW -DdOZ+RtlDtPzDHjw4MGDBw+v0iPw9a9d5AtXN5w9cdLMT0Qj0a9PGD/3a1WxljMjvrqjx1dOnLNk -yYmx09+2uOuZZ17Qy5AAFVB7ejMcN6+1LpO3Tjl9yRx+d9vfSA7uZuuWLcycM5tf3/Qr/vdPt7Ls -idU0BgtUa1Dr0wnWVhJTFXr7hvD5FPZEguhFhUA4RntXksYJTeQNU//70+uTumEmhQdgEOhnOE8g -RWlbYh1viWEPHjx48ODh0DwCCZ9yZrO/+jeXXXr9pKqKEIXUXlZu2T5/z9aO+XYoihahwyxEV3/l -y+96oDFQvPPT//VAqgzZ8MWivudnTol88bmXNvG5T1zHlt3b2L7iJcxQmIa6OrSwxofOmcTcap0d -O3tQ4wV2JeOs2JqjI6UTUX3kSdPYEGFKSxV5RaOpuoJk1jYLhuXsK+AcRfbfY8D2vAEePHjw4MHD -IXgErr/+NN+ZZxx/cW2o9uYvfeUXkyoilfz59t9x5dUf44n7HuPppS+xdsUGtq3dVNnWsXdmwCie -P3lC+F3vuvz49PVfOKc32RfLbt2+UxX3CFiaZs6YVtewr3tgbsfO7XR1DhAIRZjWFOWso6rxFZIo -+QFmNoeIpXW6ckV643n8LY1cMg0qagNs687R2uJnXJ1FVzLFCQtmsLUtnntlzY6E8AbEhTdA9ghk -GC4f9MiABw8ePHjwMBYicPTR0+c1jW/58UeuvmFORayJvz/5GN/98c+w0iaGrmBpAUL+AKlsBttn -0tM34Hv6le31mXTvRX39AwuOXZJPNDXW7lu9plcBAn19af+s+U3jDNM6LpU0A7FIiPqqCA3+Ai3V -Ieo1i/Y+k+lRCzUAG7pzTJs+k0/+5C9kuv9Ojd+iZY6fceMC9MUt+jMqjZPq6EkUs6vX7nLKBAfE -0cdw+WAWr3TQgwcPHjx4KIuyew386EdX+mMx7VvZgr3Yp1g8/exSvv7VG+nc3U4iXSSezGCYJmYw -iD8YpqKilmIBND3M6o1J7a47Np1z+517f5nMDPz2CzeeP07cR924uW9964TYroKtY1hFLJ9O1oow -WNBpmBhkYkzhub0ZwgtbScUC3PFKN0mji5a3Xcnsyy5g3oXX074nRWVtHfG+Aq2tDdhK0CkX1MTM -3znKhQY8ePDgwYMHDwcjAt3dxhmx6LiLE71DXPWpr/CBaz7InvZuApEIKBaTZ07ny1/8PO+6/BIM -FDK5InlDozdZ4Jijj+E/PvVR0ml/y66N6nueemzrC28/f+71rZPqa9e90jZAuPaV2rDfyOYM0ski -scYQBrX05TRCLS34/CpPPt1JciAA6SQnzTifX333V3QmZzO5ZRa5VIiCBS2tMdSiqj/39NI0pWTA -MKUywaz429mK2PEEeETAgwcPHjx4cOGAZMH/+s9LfF2p3Cc/+aH/UCorwnzz//03mzQTFR+2ZeH3 -+TjqqKP4xCc+XfpCIMhtv/4jiuZH9YeYOH4WanACqYSKpqFYvfq4nu7erze2VCyoqFYee+pvrzx7 -2aULLnzmse3jdNNi1544VqVO+95+zrvgZIr+KjZu3cz8Ga3U1vqwIyHuf7yTh5f+O7oNV5xeT188 -QbUFOT1ndvZm88IDEBJEIO/yCFgeEfDgwYMHDx7K44AcgcmLW49OdiWvnzCxqm7Vhs3c89cnKOTy -5HI6hlkgncmwfecennjyKf7x6FOsePFlBocG0M0itqWwauUaNmzYhG5bBLQAtgm2AgO9AzMSKWOh -EtSGNEXr0FRlfjyZZ/z4Fr7ww1+T6OkiVtXIZ3/0fdo2rqN9zx4WTa9k7qwGlkyNYvltckWVaa0B -YsEQuUSSqbNjxTv+tq2PUi6ACmymlCMwSKls0EkU9MIDHjx48ODBw1g8AheddsXZ0WBt6y//8hvW -LN9MoWASAiojEdauWsPO9p1cdfVVrN+4htX6y2j+IJYKdTUVnHHWOZgFg2eXP4+d1MkXdFQtREAL -8/Cjv1e37Nja8vOf3vZJxR7a1NxUu2+gPzcxm8uR7l9F04xGVjz9JDdPvo2GqJ/KmB8jG6K6MkZj -pMAxxzXSOzFFsF5j1ZZBJk5SyeRTReEFyAkikBVHThAAQ/IGeImCHjx48ODBw2hE4Cc3XaVd+LYL -JoSqJoX/8exj7Khowx8woGCTzxe48etfJpmLM9AziOozGF83jqF8hlR/mspINd/48udobJrM5798 -Lbf87n4aaqoIBjU6u3vp6Ehz+cWf5PKLr1XOeNviuYWCTUNtFe3tg1xz9VcoFC1Mw6K2QmNC2Mec -JhszkaKqIUBOt0lU2fh1HVQ/Qb9KVLfsZ1btdnYWLAgi4IQGnPwAOTTgwYMHDx48eBjVIxBo1bRI -S8C0bVYuX0s6kUcNKBTyFioqf779XoJRH1beIBgNc8edd9A4roWhgQH+/Qs3cNHF7+Gb3/gsG9bu -RdVsMsUshbxFSINvf+sHnHP25dz6x9/Q2TFIMKKj6CbVVRHyBR9TJlSQjCc4urmCOTPriLZ3QNFm -3/ZB1JxJbaKIokOxYJFOm0ycBq88mEhLHoHiCN4AjwR48ODBgwcPI2C/qoFw0N/Y1ds226eoGEEd -Q7VIJQoctegovv/drzF33lSMgg8lEKSY1vnvb30fFYtsNkt3T5LdHTv40DUfZ/XqVdRFI1RofgIh -qKqJ0tPfTWNzjM994WvE/DGUokVIiwIW2byO369yzFETmNTajGUX6asJEmiq4JLvnMlgUxhfzsRq -CWHZNr6QRWR8hb11ezolBn9naeGMRAScigEvN8CDBw8ePHgYi0cg27+XwcEeamoaSfSmqYpVkSgO -8Z9f/A9OO+VsVry8hu0b29FzBuObmli+YgUXXXwhHZ0DpJND+KIBogE/QZ9N0bTwqX60YJBCwSCr -FxhXXUs0HAFdwSiYFC0DFYWKiEbXYJramI/taZPBwTg9PQOcP6+avuUa0XHVmP095NUIhpUiaVvs -G8gUbOufA39WeABkEiDnB3jw4MGDBw8eymC/qoHKqoqal9avueTvTz0yZeuWvRTSefApbNy4nhdf -fIXnnn6SVMGgvrGJv91/N9OmzeC2P92OpvmoigQJaBqa5sO2LUIRDVCxC0WKxQKhgEYqmcdPAFXx -oft8+GwbVTUIh6A/naMuGqS9L8lVH/0wl7znVDauWEZi807uer6PigqFurog+AwCFXn2Zhha9kp6 -n/AEDAhvwD5KFQQZDlxQyIMHDx48ePAwChFQjjt2VsSXKp7bXB2e1REfwLTzhDQ/A939tO3rIJsq -ENBUMokhCsUh7rz7AfKpDK11tdiajaqAiU3ADyFVQ8cmns0T0lQqA37i6QyqT8MwdVRVxe9XsJUi -yUKe6roQuztzXHbpVbz9sg8wuC9D/IV/MPuEZk4PqUxqrcWn2eR2ZJi9JMDdzwzu3bFP7xYkIA90 -Ad2UygazklfACw148ODBgwcPI2C/0EC6dzB54plndFaEwHzuBQzbQjFLJYC1jTWk+uKkMjn8gRC3 -3/ZQiSj4A6SyKVpa67FtnURWh2yWnF4ka+hMn9LIdddeR2NdAx+74dP4ikWyKvhNA9MIUFsbQin6 -8CkqoaCPhx65i5eW3cHaFR3MmVbN4ikt+PUh8v1JNMuHv0WndU6YvEleEACnSiDv8gJYHgnw4MGD -Bw8eRoeTLKgAylPLNhgnnXlF/gMf/iqf//g1ZFMGuWKA1gkTufeee/nF724mFU+RyaZRDIOa6hpa -JzSTKmTYsn0PnZ1xUukcaRN0S8VPkAvPfTvv/+B1hKpNFNPADBiEwhBQFbKFPPF0CjWoEA5HGN9a -z7iaGqZOnEBtUwU1NX5U20IL+gjVVxIcV4NeUFm1Tk9s2mkkGa4YMF1eAG81QQ8ePHjw4OEQiACA -MpgsYuTTXZFwde708z/M5KkzCUY08IOl5zj15JOINVTjC4Vobm1k69ZtLH/hFZYcdzrRiijjmuqY -Mq6eaDSMYhoU8ln+dNufmD25iUsv+jCKZjB/RgPXXHYsJy6sozqskMlYZNI5hnrSFAZz2GaOzi37 -uODsKSxZVM9QKkC2pZreXI5cPgOTi7y4PRXv6Sk6ewwUAD+lbYe9nAAPHjx48ODhEOCTPAIqoFWY -2/NBRTnn2eXP1z79/DIKuQLxoRQvLn+C559fwfatOwkHNQrFHDt27mLnzp08ev/91FTGaKxvoKG5 -jvraBqZPbmF8cxPxwSLJfJG6qiATmmOcf/ZMaptrqauw6e0dpD9hoGkqOV3ByhWIBFWKFqAomDZU -+WpYsaWNtGFCJEl9pWWua9d6Xl6b6hGDf0I8/z7hFShXOugRAw8ePHjw4KEMFMkz4ANC06fX106Z -WP1Xf+34RV27EwwmMxh2nrAWIpcYQotWYOYNLAVsw6RY1ImEfdiKn0goiM9nEzRN1HAIyzSpidZR -KKTpSwxQFbSpqNQ49ZQp1FWGeGZZGys2DBALB6mKRqitrSSR7sLIm6iKTSiiMHdGC3ohy8KjGojW -J8n3dqeu/0H/BrNodaDQVVet9Q8MGQawXBCDOKWqgTxvrjJCZQz/L/eM9hivbf8LyePB4BE7Dx48 -eDiMHgHHG6ACgcHBrO/tpzRNam2ZcPycJcexafsOIoEAuUSSU885gU985NNs3b6DgaEBPvC+d5JK -xclkdaqiUWJVEQKBIFUN9Vx3w/WcftKJPPDw45iWRUt9FYZdoD9lsmFbN1t39JJNm4R8KroCM1pb -mT13EsnuPnL5AnPmzCRQUUGoLkIxn6VnMElYNenNmpmly5M9VVHF/u8v1R/zH5+se1tTvd9q6zJ3 -xRNmmgMTBd8MBMAnDk0cfunQXP93fveJPlFGGPzkflNd574VCYDP1Taa6/C9Rd9R7iffW7yf/i9N -kP6v95nien/VE4t/XWiujlcAZeve+MNfeMdRn6yacQUdW/fwzOrVWKrFtR+6hjNPv4S2rm5u/f3v -+NRnPsPKV1YTrTYI+YKotkm2YBKJ6OQGE/TaIdJ6kaKqMLW+idaKKpKpFJpRoLOrwGA6hS8QJRSy -SZgFdnf0EY5V0xwOsPi0hbTvaSeRjpNImQSDNsFYJc1RK3r+WRWTzj9JC4QrlKZ1G7KcuDjyjunT -IupPbxm8de26tMH+CYPu6gH7dVYmH3AKMEca7BSXYVFcz+dsknSv8HDIng1ZSWcBpwL9wD/EOW+1 -PAnH2LwTqB3F8FrAKmAtw3tJvNkTQp1+mgycDaSBB0T/6Ly5l8BWXHL6fyXM5vTZROAcSt7Ft0qf -He42WAwsBPYCz79F7YuHQyQC/zTMS1/s7Puvb9srjp2/8Lieyy7gmdVr0FG46abb6O3Nc/ttf6Kj -t58zzriA6oZqbMtgIJslFo5SXV+Palrccdd97O3upiqkodsWQ6kcqh6jJ5HDZxrsyxSJaSEaakP0 -pfLEU1kaxtex8MwLiPd08vhjLxHvjtPcWEtlTSXHz6vGsIuEw/7gzKnZ1gGfppLx0ZvIkDZs31mL -w2//xnWN7Zddl76H4fUDTMlD8EYMGqpo4w8CH3oV339FPH/aZYQVcd1TgJvFeS9SCoc4+y68FZTV -MThB4FvAtIOc/wNgt9Qe+luACGjAEtFPu4ClUj8V3qSDq0NgjwECwDqhP/8X9u9w+mwh8Gtg51uk -zw633fID7wBuBO4TMuC0gY1XlfUv7REAsItF9L/e9re7p4x/21H+UKpCKSpUKBGee34pfsXmo9de -w//7+c84422n8dtf/ZYrrrycjWs3EQwGUPQCuVSOnAKVsUoKhTwUdfa2ddHDIJlihmAgiKabZG2V -TNFPZX0loYhGZyJPavlKtq/dgWIUqa2K0DuUptgxhJlJc9yiyfQVdKxQgzqU8LNjWyfVDZV0RTT6 -k6p/75DeDEoN2M5A6Mwc34h1BRRJofYBK8XvsqtthvjZRym/QfYGWEAlEJM8As7g7hMGOiju5Qca -KK2qaLve961gdMOS63FAtIfbS2IJQ1QjDUpv5r0k5P53+snn6qc34zLYDgmYBawQ73CW8MQ4a3X8 -qw6Ecp+FJRv5Zu+zI9EGsn0JizZIiHc38TZz+5clAvsZ3bse69v2qa/PWH3eeaeceuYpr/DCi6sp -2jbf/+EPmTxxCr+77VY6Ozr5+U2/oKOzi6r6Jux8moJexAyESAz2U8wXMAp5bJ9N0YTmCa3UaY3o -CtQ0RDj3nPOI+qPcde/dJPoGMXw+lGKQgqET80fIZkyKuUHqmipR0j70gsFL27vxR6qZMXchSs86 -ioTQFJv+3qHss892KmDPYHgXQnngVd4gpfIBfwT+DjRScn9XABHg60LJ1guj6+ybkBGGxwRCHBhO -cBTVMVYBYJz43NmW2XiLGB2feA+ngmUN8KwwNEXpyFBaTjos+vWtELd195MmZEAVfZR/HfpJkdp5 -LLkziqQzDtGKCEIK//prdDh9FpL6bNzr3GdvBp0MSkQgJIiAzXDJtuNt9fAvRgTkmZe5b293/J2X -X3H7Cy++2PiJT94wc8+W69H1AK+sW87qVWsI+UN0D3Zz25/+SFEtYOVzKCr4CIGRpzISIDq+ldNO -WUx1NMJgPMX8o6fQ05ti9XMr0XwKm1/ewMZNG2nv76CmLorPX0lBT+PDRzaTxB8KEjJt4okM2UyA -1Ip2wg11ZPIakUCMc088w9yya6teUx3UN+ztXnf/Y/E1lNzGC4Ct0gDyRg0YtjRDN8TzFCQFQ2Lc -FZL3wjnPnRvgdt35pX6sFd9JiXc2JMPNIRhud2zY/S72ETI6qtQWMfYvBXXITdE1IyuXQEkZb4L7 -cw6hTRTXYY+xPf5ZkuvyCNQIYxpnOFmXEd6j3LMeyjs4+RdVwGeA70kzOjlkVq5PeoELRF/0A1Gp -H5TXSYYUV5+WuxaHUSZH6rM6IXvJV6lbh7s9lCOslw4ZcuxLUNiXvLAvOendD5UUjvYOh8NOjVU3 -D4d+Qfl8r3KT6zc1cdbKkQBhfIsrXl7VdfzipluvueFzV9bXF8fnbX/Nd278f4qBYfpCPiOZydqa -qioLpk9WjIqIr7WlSZ1SW62Eq+uZPL6evniCdWvbGDSzbNi6k+62NqZMnkBP/y4sxUI1bPqSQ9RF -QlTYEQYHMyghBUvxU9TzVFWomNEgKd1HwIIKK0CNoVLXZLBhxWO5l9Z2de3c1NUO9ACdQkELQJsw -XDNEx7S9gURAF4oTlxh1hv3j25Y4Z0gY4CFhdBKC2Mgxf9kroEnGKiaUNCquBfuHFA4W25WzhH2u -QUoePA63O1513UsRz50SA5C8gmRa/O3MymzXdeTqCdtFGORMcHlmO5IhUw+hPUa6hlwx4vwdEYZ1 -JBKgSt9zv4fcT/Jn1ghkUQPqKSWdAvxW0pHRymude/SKc91VG8pBiN1raTO3LKqu+youWzUW2T5U -uPssJmSvQtKt4hh1S5YjTXoX5zvGIbaH5pINc4zXeDUeJKcN/JTClI7+FSU91cd474PZl9dqp9xy -NlLo0G0nLEmeFJd+jWYj3O2kliEnR9JuHnYiILMnuRELQP6VNYPtKz9y4z1TWqtmaeGKCabuq8rk -c8FsJhdIpzM+y7a13Zt2aSeevCR86VknRkLBCt/GTbtI9g1iVqi09/QRCAYIh2y6BjsJhkwmNtfy -8totjKutpToYJGcUSRRzWLZJLp+lsT5GTyFJPJVB80OxaKIE/BgGWLaFrRd56omt8e6+TMrVgc7g -a1BK8tGFAM8BNrzOLj2nPXUx8JvCiCTEMxUloSgIotALtDO8m6IzABbYP/nPPaipwARKCYnzxN8v -AN8QnpG8azZdTrmcWP3HgauA6eKeK4H/AZZJbsHDHSdVXe2Wk9pjSGoDwiiI+AAAIABJREFUJ3SS -d7WHYxh+AhxPqYLix5KhsgVBelC4Ob8m3qdc9YE8K5wAfFrMjCeIZ9gK/BX4iyArBYmoWaMYLrmd -3eEqx6g77/ER4GrgGeC/pQEb4LPAZWJwv9kh7a4ZqvP8TeJZF4t2e0QaPD4ObBFtqrue3RaycLu4 -zueF3I42u3Hu2SDa7GJgqrj2DuBvwK2iX/OjtJljXN8mPBj7gO8AX6CUxR+kFEb7ptBpt0werlCK -3GdNwPuEp9FPKTn3mwznTRRG8dxpwAnAV8TPqJi03Af8rEx72CPoZj2lhNoLxe89lJIYf8twIt/h -ShJ2t0EUeI+wLXWCoD8K/FDoqBwusEYh+5XAJ8W1pgrZexn4EaWKoIPZF6c9xwv9OEHIm3sWfhml -MKLjUUTSL03c70ShP/dI+qWI9pwDfBd4gv3zzOwyz/K8+P064HIhJ41i/PmZ6Oe89CxvyrCaNooL -Oy8YYNiG3l3tCQUScaC+qqqiNp3Jhi3bDsdqQlVf/vJ7J2jhyf5YTYVSyNkoWpHBoRx2Joxh6vS2 -dZQClKZGciBDVjexfQGskEIxbZNIFzC0IgEzgG3l8BuQ01XMYo7ZE2sI+jUi0QDRsEJDJaBbnHv6 -+Ni9f98Zz6RNdRR3U4rSroRB0fGbKCWiFV+n9rWkgd4QbZoV9/e7iEBKGIUBoWhy9r/MuMu5oarF -AGEJwzmVUrnaPOASQS5S0izQLmNoYsCd4nuI5wgBp1GqTviEGEiS0rMdLoMjow6YTSku2yp5RHTg -OfEeZpnB2y+MyQ1Ckf8q+jorzv034GRKO1TukWY47jCDE3Y5A/hf4VZHXCdKqQJgiVD4j1AqrcpI -XoqDDUbqCC5vOUlrirhHlwgl5MT1bUHQlgjjXyPu7ciQ3B71lMreFoj/RYCjpOdoEQOSXaYN5KoB -xDON5g1w2myRaPcm8f+80L354vgA8GFBptLivdxt5lxrnCAwk4X8BShVXUwXJGGBkO1dkrv6cJEB -XIPgvwsd2UuprPBUMYBcKgx+ssz9nTacBzzp8r5OFGRpDvApoffpEQi/kxj8Z+BM8dkg0CxksFJc -K+my4xxG3ZwjDscWNYmB+AzxDPsk++LuA0UKiT0EHCv+3y9k8mzgdHE9R7+zZeyUIxcnAvdLeinb -+z5x70bxHEnJ2yC35WwhW1OE7cxKXo65lCpGJorPMuKQ29UhNmGhiwiSO0OMMT7RXr8S9/ubINLZ -w2Q3j2hoQHZV6ZILOyDFcC2fTzHy+VzOsqzogoUTpl72nrOaTznp9MC6je3s29tB92Ce3r49FHMG -GcvEyPuIVUSJBgN09w6Ss03GVVegtzbR35+kMlZFfeNEOvq7GewcIBIOkrTyzJvRjOLTsXSDwe4U -0aBGJBxhdkOYvA3HTAtVvH2xPeGnt+0rvrCpMCTNtHwutyJC0ZYLAZgAbJZmOK8HGbBd7i8fw2U4 -MJwX4BCFnGRY7FHczjIReAV4WBiJIPBVoRBXAb9j/3JKs0w88N+FUvYLpt8t/n+WYPDODEh1eTvs -w2x0ZomjHN4p3s/t0naMxFIxeDYL78gfGc50/ri4xt9EvFORZtOm9AyaMBAOCVgpZsZOouJCYfyO -Bn4OfEzMiuwRYpPKIQ4+QdHuCCI2TsivKg3KzgDVIGTJcLWH49L9AnClMLIdghhkRB9nJVd3wRV6 -Ul22IcKBSZqKa5Y1TngpmoR+/VHMWoOCgHxADOq/Fu3XI3l/3OEbOcGyTnhG/iyes1J4uhoEqfgf -DqyUOZwENSo8D/czXM3yFfG+1wrPU7n7O+3SLN7xj5SSgh2SeQVwriA060YImTiDV5MgAQivQJto -nwXi+WqkCdzh9NY5bWAI3XpF6NM0qT+/Kg6FA9dtkQffbwgS0CFm5IPi/xeL41tCVtVRrhMUg2sV -8JSQ5yrxvTliovKEkOuYy0uCNHg7sl0p5MhZjVaVdKdakGmljL1x7ETEpSNfErZAAT4qJh43CA8W -b+YQgeryCFjSoJQTjZMQndYLdFuW3VEomG0zp9emv/XFd804bsH8yKZN29i7Z4j1G3aQ7eqlkChi -KAqBokkxD6lsnJ6+OG17d9Ld3UNjfQP9Q3mKpsbMRUdzwXnncsxR86htaaB1/ASax9UQqY4SiPip -jgV51+WnMG/uRGa0tBAOmdRW+QiGkkxtKVR87MLg5KooMYazXB1D6iS7OATBFgYqLQbHE9+AMIE1 -wmDsjnkeasyvW7BpR1mKwuWGmKU1CKF3x6ZVSaCvFf/7X6FA48SAuUrMhOqFMaoTxsfPkVltLCsM -bpcweHvErG+HGBhjrvdQXKGS+8R13i1ciOMEmZkl2uUlYTgjDFdjlCNFVeLev5VCTH4xKPxa9MuS -EdpEeZVG110W6mRrV0mDcUAyPPVSe7g9Y0XRhjmXjOUlElzuWeXBGMlgVoj/+UbwYnxUDHr9wE1C -zyrFZzuBX4p2nC5ct3XSNVVGrojpEwa+ShhnhdKaGQgvwzjxWVAy4ocTCeBxcV+nkkC+v6NboRFk -MkVpHZG/iz7xCXKZF9c4WmoLt07JoSQnNHScaOeI0PF7xL0PdyWNfJ3tIozkE/fZLvoEQWYmjaBT -jkxXCY8cwG1CFp0KqmVCZqaId3Ou4yadTkhgthi4b2c45+p+ce1LhU7I/eGO5wcZToKMSToUlp4f -8czlZFQZgQjcLf5fI77zrPj/dOF9G8nmvOk8AnJygy4JqjOA5YCMbZMAort2D8Zvuum+EMHoArTq -xlhFTTAYqwlZ4aBqBmIECjr4w+j2IPHuDCctaiaZ6megb4gn126kp6+HgmXw+IMDPMk/0Px+IrU1 -DA4OEK3wEw7ZoMRY++IWErkUQcvHoklRIpPG0aAZGH6wdGiZMaHqD9/WFl/71eWZwYzuxJAdN5s7 -flsAtonZyKVCEB+T4khvVeiSR8FJRIxLRrxa/J2QPA24ZsBNkmE6Who4ZDmZJ4ygkz1dPAIxr22U -SgiTIj8gLe6VEuGKcBmDKTPsf4iZYqMgAEsZXszpJWmgUUZwh4fE9xDkKsxwfkdRfH+HOGaI0Mkq -KXdBf5XuaXkmrkmz/5jUBrb0WVB8Fmc4CY2DxPGdxNW05JovF7f0ScYSYdjCZQZtJON6rvh7mTjP -krwNDjFZJ1yyp4gZXdb1DLLB9kv2J8z+24zHJUPulu3Dve+G20NaFHJZ7v5Zly1RhJw0CHksiPeZ -JfVXlRgkBoXMF6R3cGTCEAPNlcD5YnB5QNzT5MjU9duuccEJFSfEO74sCJ2z+NKgK0RjSyG7+YIo -26L/NZd9ce51DLDRFR6wXCTZOb/Kpce4bIO7EkGVPIc+iWhXSKEdWY+cSq5QGf1yP49jI/0MVzsN -SMS2SbSP47kuvtkGkHLrCFjSQCHPVJ1krUzQT+3Mqa2R1tkL+9OZ/Cpd97ceNW/q5HA02jw0mFcD -4Xrad++lvy9JeiBJRs+zdNVmEv1xIuEIA/t6wVaIRmJMbx3PULyP/v40RjpHTUWIQCTMjMnTCFdX -sW3rLvwBjektk8jGh4iNG0+sejKq9hKmWkVH90zqihuqfvRvcxZ//i/rCgOJ/Wp9DZd73ZYU+U8i -TPCvAFsYqSHBrnUhkI4gyrNJn8vQOAleDk4awRjkheFzst61I+QRsCXj65CbkcoH5UHPcY0OClfy -ecDbhSfrBGkmp43gRnXaIiRmAjBcepoW7eq4D6uFF2aGOLdK3DfBcCLjq4Uc0pJnMD6X29/9mXsp -YJP9kwwtYfCcBZscw10uLq24ZteBMt4AN3mqF/9LSzPhfvFTFW3UJc6pEW045BrA4cBEWMelmpHC -QhlJtsMc2bUlbKFLcfE+Ben+iku3VBfBdGxpQUw63ivCApbUvmExSIbKzBZl/btFnHOJIAKfopTT -cxeHt2qgHBkwhez0S/bFIadRoQMxye0ue0ScfA+nvU4bxb5Uu+yL4pLHjPBMzKa06uHz4tkuFNfY -xXCCsF6GICkuGfZLOqS52t/vsnMjec7kd8lLYQb53ULsXy2k8iZLGhxpHQE3G3TiwcaPvnr2cUtO -PePDXXuTlZZWMW5dW0bbt71d27StK6SoATq7eglHwrTt2kVQUxhIDGFYFhWaSkV1CAubUDRKnRak -qqaSxdOaWbOjSG4oQ1ApYBs+zLzCylXriDbUUNNchV6wMRWdoxZNJd25i6MWRkgOhUm0F5g6fQZW -KkdTvGPc9Wc3z//eA91F3bCLLje7XYaBmsJl+VZeGEUmb1lhVAcYTkx0s1V3qY2jGDnp3D+Kazmz -fkuSk1SZGOqR8G44RqdXKFZWeqZySVWW9M7O2vDnCoN5lVC8XdJA4lxPzrKWZwxpMXDVivMTYvBM -SEQiKu5dEEoeOgzhknIJhHIJXbkyqJHq003JIDrGPCXeIS7NgnRGT0Qtdy+ljLFPS4O8k6jVx3B+ -Q1Fy9+ddbeZzzezc7+TUrw9JYUvnPeVNqg4XEXDPJjOSbhUlku3WLbXMQG6KsMmnKSXV/YpS8u53 -xOCpCRKhcWD+hSPbzj3vER6zy4CZlOL0GvBTjuwCW47sOCFiR2ZCkg6EJLKoumbyWek6v2P/NRlk -L1fC1f/lBt8fAt+nlDD6NldI8VGG86tGypdQRtAv98A+loXoFJfdSgsZTbnGVs0lo2O5nn0I9uI1 -n68dhAXKxMA8dv7kSPPEJR9du7Jv4fq1m1m9rY1Uqki0pgbDgGhlhFR/gh7DpKmpjnwmxfSJk7Hs -HP2pFJXBavr6+2hoquXUJbPZ3dnLI39/jtraCJe/fTaZlMIr6/aQSiTRjTy7+nuY3NyEVh+lI56n -89l1bNywk/e+sJd/+0wr1aECe++9lZaTVWqOrdbmqqHpnwsGtO/9Za/J/vW2spI5BsvJEjXeomTA -dv1eYHhVQkNyP8mDnLtkzTmGhNFuEGGBFey/sp9znRzly80Op+GVZx/dwvg47ja56sIq872C6N8d -lBIbFzCceLhWvGtWcj0WR5gxrBfxyIUi1leU3t0nPpsrvrOb/ZNUOQzuaV3ST58rXOBzzUiUEZRc -Tk5FknnHszJa/bdyEIJSbma0Xrh2F4rwjNNmWfF5jXALQyn3wt1mlPFqIHnxcpJrvljm/od7ILRH -0K1iGd3yjTJrPJnSYk69wJfFYFntIlm+gxAJXSJCO4DfU8q0v4BSLsydEklWD1N4pFwf5CX9P048 -sy5CrWoZT45jX/aJ9otQSupby/5LwDuJhhlXSMA9ITUEoX9AEHyTUuXLbhGq6JE8FfkRbLst6VeA -/Xc91Tgwr2Cskx6D/VeGzZaxK+ooBEcmIzblq3lGknn30vSM4Xw5iX1EduJOHjQBs6m+3pdNFRcu -XbaBp1ZvYsbR8/mPGz+HP6yiGwW+8Z+f4qc3fZ9MNo0flVAoTCYTJ5vOMmlCK1e86x1MmTuB9t5u -nnxpFVs2bqU6pnLKMeNYMG0ypy2ayfHzWgmE/ERiYeqrq7A0H4mhPOmMQayqlauv/ywts1rYs0ph -3Z1DbFq5j+7nOgkMhGkK1yonTmue9N4T6uZRSqhpEsc44b6qllxYAQ5c2OKNGshHi+uO9RqGyy1W -rj57pJXNdErJTAg3+mxJsDNidvxuMfiVcycfTviFwXAyf50Yaq342xyh7eSZU5JSqRKSJ6NNfJ4S -xiI/QpjBopRwaAnX/8WSvAQolTR+X7j5eoSr0hpFCe1XYXx3ib+nM5zkGRYk7bQys/TR9NcxSA2S -6zZIab0F7RBn0vYo93pQtG+zkBUnySpIKT7+XaF/SUo5IOUWarFHMbJul+9oxOVw66fpegbzILMt -OaFMLpcLCU9SwGV7RyMTTsnod4UsxIUM75S+O47hBLkjkYzml54xRKl88tPis5Xsn4dllZGNPKVs -fsR3p7F/vkoNpWTCycLeyPbFHWY5HrhGDP6/EF6SZQznE8VHsVHOtXaLv+cK+QwJ3TiPUuk1jG3r -Zbf9dcup+7yRSIBP2JVfAZ8TuhMcoS+d86dTSmT+6EHCtc758wWBfH+ZMEVZj4D88DJDx19VoTRM -nYzx0k6SOYtTzzyND3/o44yfNJkPXfVB/nDrX6mpqEYxTfp7eyjmdKK1EWx/gIrKaqbObmbK7skM -7O3Glytg5guMn9jA+OoQvnCSUKSK9vYEhVyBQMBCqYphqyqpbBpdU/neD77NwqMXs+eZn7Lijz9n -+tsnsFgpkOiqIbPDRKsPMn5uk/qubOGoXQOGtWJ7wpJcVDajL/n4eu7WZ48SkrEPcdCQZw7lVsIa -6dpyLLlIKRnpJKGk54tY5qAwXJXiOy8x8mp0r3XW4cCp0y+HRyiV67mrMOQZQ04YgpeFC7aVUqZ/ -TnKNlwsvyCWRmyhlN39QGIcTxEwsKEiSJgbY2xnOnRnrQksjbYst98cyQTIaKZWqrRHG+ARpNqoy -8nKmMut/UTxbhbiW0yZrhRF3zjUYeZlXawTZUaQ2a6NUTXGDmAUvEG5sp6baL867neFExbEssjJW -2T6S+jnaLqYj6a2T+LlX/H0UpRyBXjGbdkJLsyjlV/ygTHhAHjwuohQL3y5kb7b43Ll+hPLJnIfj -/ecJ8uuQGSenqFt4fxxvXZEDyygd+3Kb0OsWSvH9c8SgHROyiUQmzRH62RTPYAnScJrQy50ML9aW -4MBEZtv1PA8JsjqZ0u6Km8Q7HSO+F+LAvJuDwXoVMiLLyVcYrtzaIOxXhgNLkp1Q3HcolaB+UNiH -7WXOl0N3PxKhlPcLve9mOMHZ1sYoGCrgq62fqS1YdBHFmx+kqibCL396E5n+3Tz+1CqKhSJLH3uC -pilNhEIaOb3I1NlTiad6KORsVr+wgq0bNlMZCePzQc9QnFg0yOrtHazfvoNIUCFp+IlEapgybRpD -Q0MkU1lMFcZHK1CLWW7+9FVMmuBnMNHDcaEo+qBKW3c12S0DTDpHwdZ8pDf5aRrXHPjSxxcv/O5v -/sbLW3tUVwxPTkLxlelM63UgAO5FP4wRlOhgA6jbdadzYBaxNUq8zJYGz0FKK7ldLVh3UMzuELHR -Rykl5xyJZKyxtnlIzB5sDkyQsl3hgUFBHD4oBsNB8R5ydrddZsBxvn+fIA6XiVDAYmlQWCEMoDML -kaso3EtByzIl95M1woBriGt+h1JdcotQ4DSl0s4pYqB1G5+RBtA+SrXunxDelSrxjtsZ3snRdJEq -u0xIoVzylbvNHhOG5Z3iORdKz7lWyFAfw5tqpcfYZrpLtk3XZ4ezdr5cPpG8nLDpIp+jxaJVISuP -i4HvXPG8TmXFZEEKHna5puUYuypI4Z/FADpTukcbpQWcRssXeS3vv04MslPFjNlJrs6L93pS6EiK -AxcCkol1VrzDtylV9CxkOMkT8dlDUviOEbyZPuFV6hRk9lhxOCvJ3i/CEKN5DXURmvqxIK3jxdFL -aSXAyyktJsRB7PFIOmJIHiQ51KePIiN+QWgc72VRTL5MSbZM1/nbxPnO2hYxDlxa2Rm7A5QW8Xqb -kJmQdL4OWGMhAv/shGw6rTXUBqmtUynuM8llkuzaleLyd76LhoYWVq1cxeXvuIhHHnyG7q5utu7Z -Sm0ojKr4OXnxQsLhED2JFFs291NfXcsPv/efhGJNbN++ll/cfCvptm58/hiB+kn4DYtowSZkmKT6 -OpnVWM1ZZ53K9KNNtOIghb0p0m1tBMIBqhcpGGmDrBWjf3cHr7S1ceJFReV9Z7fO6erp19vjpjxD -UlwdYrkGZF4HMuAI5CXC0Ackd/VYPBPOQHi/YI5VUhzVMUy3C0WNSbE9owxDdojAkBCS3wulHC/u -NSgUNTVKHPe1wGmLDwlXfDPDayE4jNWZdceFgjjJfsoIA2lWvM9DDC/ZnBDKnhzFbWgyXGffT6l8 -cCPDteq6uIbz3aw4b1Aa1Kwys4QnKFUwVEsuUZ0Dy6ec2VNGzFJuFIY/SGkhlqJg/w9JcevCKCEO -pw2XCgM5Q3y+UxjTqBTPVFzfjVMqo3R2tXTnZrjbzKlIeElcv16EcwxhrJwBIifabEDyzIzUZhcI -sqJLsq2LmeNLEqnJcXiWb5UJ5dOu+2el+z9EaXGdcvcvF676sdBFZ50FJ7lugpCdnWW8PHJ8OiNm -dHcKd3aTRBizjF4K+mrbwSEsXYIITJDsVK80iDj5PEPiWdybgsn6uIfSsr6Nwu45qwH2CfuiUL6s -1wmzfEEQWsdrV5BCT7OAL4r++h+pPWTyKpPWZ8XzTBeft4tzfi7ulZH0q5ytcOzWGQzvKCpvlDYg -yJ9TTeNOTna77u8V3h2nyiTMcM4HHJjg+AfhOXAqm8IMVzW5k3k1SsuvLxf9EMJVFukbAwlwanr9 -c+fOrX7v+67+WHu8g7XrNuIrKHzq3z/Nle9+L1OnT+ahxx5jx+YddPV0o2katmGiKgbTp7dSV19J -Z18/8fgQvb0JDJ9FfW0dPttkyUknEYxUsXnTBuqbJ2BhEu/vIxIJ01xZQ9Yq0lBXQ0QzWfZCH7kd -eyh2DqD1FzHT4G+uw2xoIZQpcOfLXdy3ehBfKMTsea3+iRX5yu6+QmEgbbg3+SnnbjzUnfpeDZw2 -lRc6cga5IVd8a1QPjTR7cDJWE+L7ukuhndhZuQ17ygm4IT1PWhp0ZNf6WJfUPVhbOAw3IIWqHGWQ -Z2Kj1cCPFKt1XIkpyeDEXaRoLF6XnNR+TsKdYwB7GN4caaQlYh2FM1x94X4OdwkdDGciyzsxZsQ1 -+oTBGYncyJuiOEtuO3s3OG3pJFbprlmoI5+WdL94mVlfufaSS6kSUps5a0H0Sm2WP0ib6dL9ndmS -Lc20RpPtVyOPo/VZiv0TFd3PlnN5N+REtKLUfo4+Of0XZ7j8NOfyVsnbIjsEOSn13aDUnvFDmEyM -1e47Nf8Z6RllGewVOjAwAhkuJx+6ZF8yUnskXaE7Z2KmCRL9J/H7/1DKzekQM93l4ruzBHG+j+Hy -43JLHstJeU4VjVyu7Oic0z+pMp4rec0PuWrLKSGWJ50Z9l9rwijj6g9JfeesW1JuXxWfdH5OOj/r -Ii6W6/pB8bm8Ed4/yYk2BoH45+DT3rbXBDadc9JZR93557/SmRri05//Erf8/ves37ydbHwA/AFm -zp7JrbfcQsu4Rs458xR27m5jx869aD4/waBGJOLHKir88re/x+8PUhGoJJVLoNh+ahpM0okh6moj -7OvqMhNpTQ0oAWX15h6eXbWLXO8AlfVhJk+fQmNNgHcvCJDPGKRWtvH7R/bS74uyO7mXx/70Gza/ -8iSzZs2uvGygOO+36T57IG04jSIrvHtXM/0I5wzILNkpZ3NK+JJjIAGySzIluZNMicXKm0clJWNW -jgS4r2WI6zgJK7LBS4wwgL0Wb4DTFgOiD1KC3fo4cI2ADPsvilTO4Diz6rTExH3STGC0Z7fZfw0G -R8HkRCykmXZCGgQO1rZOxYrcT0aZ2bDT1v3i3LTUHpbUHg4ZGcn4yySwT7pWUPq9XAmh7M4dFNdW -GDmj2+1VcoxYJfuv1KZLxl4mQqaLgI/UZk42tkziU9K7HI4BsJw+jPX+OZcr2ZLk0OnLBAfWxzvy -MET5ZcVNiUT5GS7l0yS9HhJ9dTj1siA9rzNwBxmutMpLBEkmSeU8RnJ7OhUQMYYX5ClKg6Wb0Dl2 -2rFHlniukBSO00WoCymHIceB1QNyn/RJ9jHoyqsxpJyDVBly47bhBclrJj8TDJe6yhVdliuXx5Ds -vy7JhDtpUnHZTE06Z6QF3mR91qT22C+UqY1BMf6JbbvWG08svWXXth1DR+WSKcY3NtPX28Oqlaux -TINIOEIym6MiEKKncw9de3czadIE2l/qYsb0KRiWQvuedlRFoaq2Cl0PUCiYFIw8gWgYtQBBzSaq -QTybpbOjy5wyfQrhqOorWhGu/tCHUI0C9f5ervrct1i/9D7W3/I9zEgF9z3fht0S4TPvv5KBpM74 -BYvp2beRRDHBpEVTKs9V1Vn/+2hHTmp4gwPXCHcnlxypRCSn453V1xTXLPhgyVOWNDMxpEFTFkBn -9uhj/1LA0VzitqS0YYk0mRJrzx2GmZf73vLWrkPsvziMmwxkJTexNULszpAMc06a2Y20k1i5tnW7 -NeUlbHUp3JJzxf0ZQQkN8V6H0heO0Qyw/x4PptS/uRG8AZb0/rY0k/RLf2dHGNxl+cy45MkYwYsk -t5kTXnG3WYH9d9Q0xtBmmitPwJJmb7LcH65KFpmMGaL9X839ZflxPCRDHFilZLF/qaW7Lxx5QHoe -Rx6cz+TZ4OEIj8hk2pEBtz3Qpb7MMfLuprJMyCQrJF3PYOTdRR3vp7Oa4bGUkupWCE9EQbjmnc3S -NkgkVF4Ey3L1iUx2/Oy/V4K8um5+BIIj60i2TK5XUSLiI+mPm3g7pNIpWR0podkhTqakH4UyZNgu -I8+a9O7/XPxMOwThsHu70vovbrplu1+pwO/zk8gnyeVyvOOiCznvoou44/bbefTRx1izfgPXfvQG -0pkChXSKCZMmkstBR1cHmAYWPqxsDl0v0FBVRTJToJhLEonWceVVH+D9V1zBipUrrDPOPCdfURsJ -G1l8lVVwyfkLyaTTPHrHbbz0wlLW3PoTxleGiLXWULdmL9d9/kssuvSTbF7+QXpfzrD6pa3kMDhh -YSsnzq6tzw5acx54qQtXwo/hSpZyu8yPxGpdlqTwBUkIx7q3uryroe4aJOTdz3QO3L/dHuF6stsu -z/41tTJ5OtyrmLnbYrSFVSzXM9gHIVuWK0xijWGwsKVzDMkN6nO1s9weo5UOGlK7uvvJGsVLIhst -H+XrheXktZG8I25joLruo48yKzfYf292cxTyZbmMYJr9y5lMycCO9swHazOk51YOoV8Plajb0vuX -u3+xDDmzR5AjSyLl6gj95NatcraiKMmi/Kz6QeTw1ZKBvDTgaS5ybrrkZ7T2l99Bvt5I9mWkScZ3 -KG1etIDhhD4Zm0T+yGiltZaL0GU4sL7erV/WCPkfst3CFWZWJPmJaZ0yAAAQjElEQVRhFP2xysg7 -Lt22D6IfsgxZYzjfdp+vjVEo/tmAg4lMx4JjJ+vx5IC/d3cfFfUxzn77BVx8/oVMaqlh7bptJNMJ -0ok0s2bPZM/OHbT3thPW/GQSGfyRABYmRrqI6lPo7BskqCpUVtbh92ucftJ8/MEIW7ft1vWCkZtU -VxXcNrAbVQ9x3Yc+xdGzKjjhhAkkH/suQc1HXs/TEFF4x8njKPT/ifWPp9n04iaeerqf9r0pFi2p -Z7BziPrx1crRU5XWngy8uKFLjrXLA+dINc0mhxeyJ8JdomIfwgDqXKfcNZQyn9ljfCbDpUhH0kvi -vu9omc8j7fA32nnmSB6uMT6TKQ067oQ6+xDa1XTJmD3Gvi0y8j4CY7m/fK1yfTrSwF5OPg+lzYsc -uLjN4WqzQ5XtVyuTr/X+Y5Htcm0zmiwWy3gU7CPQBu5Q0Wu1B/J7HMr1ZOLdQ2k9hXmUSlIrJPf+ -bimXJsPIOURuOS23CNjBSs3HqiPKGGV0JFs+kjzYh3i+WwYPOH8su3WpkntGe8+7Lox95obPHBcO -azWPP/0iqq2yeeMW+gcGueeBR2nftwe/ohKrquTm3/0Kw9R5bukLHD19Cr5ghP6BARRMFs6bgeYP -MNSfxBfyEwyFiFTE0CIROnv6uPbqa5KGruemT2+IWpmcVqlAZbBIfdBPtZqhSgVrTz+Gz0dVax2K -qdG5qo+dS19g1/Y49dWVXDQpwPyjGqit87N1bwqNWizbF22Pp9RcXs+4WJzlYuTlapaPBA6HAtsH -mR2/mkVtrDLHkV5nYbR7W7wx23faI8wQXusCUK+lPexX2a+vpj/tw/Tc5hFoM/t1ksnDcf/R5PpQ -+uL11gn34nLWa/QIjiQbI11PTu5zEl8zlDLst1BKFtzLcM6JnOSXPEjIyD6InXk1a7q8Vhk5lHsf -tvPHUjWwXxmCbgbNz332a8c0VVkzfn/HfSiqxmB/gvWr17Bv1y7yus7gQD+FfJ5N6zexactWpk2a -xIMPPsTV11zL1j3bMHMmTz61lNPOOIs///F2IlWVKNhYus2mzbv5+z8e1Tv3tcWB3NvOOrair6c/ -4DMVmqpqqQwrmP09TDt+EvrOAaoaYoRDAdL5BGHdplJVmXF0hAXTTeyCSc0MG82qZtm6PsxAmC3d -Q+pR02dGw9VVRldXrzGCobc5sAzmrbwngQcPHjy8leHeTMvJy3ByJJyKmH6Gq4OyHP7l0P8loR1q -B6x48cWh1atWLY9o+VMnTp9Q0bmti5b6eizFx1nnnMvRs2dz5113s237Dl5ZuRLLhi/c+FlyVp4V -y15k98atRGoq2L59J7t278EG0vE09TU1GLZOhaLbu9vbnMzwTCgQMi3VxPZFSBYtgsUCe/p9aM/s -4oGNORZlLGoTFslckoaojxOXTCazfi8JVKqnQ9sqFV80z9QZLazZmKK7L8WlV10fOFNTpm/Z9CUr -myu460zl38vlC3hC5cGDBw+vHwGQKw+cBNgw+yejygnNToVLkdd3xdi3LMYSGpA9Airge3HFc0OR -Kt+Fho+qnq5uUmmDytpKvvaVr3Dm284ibxRZtvwFmsa3Usxn6Oho5+GHHuDWP9zJnvYuUvEh/nrv -Pdxx931MnNTExRecxfbdu/FHfVAs5HbvboublpUC0osWTavv6yuGE9kiuzuSbNk7QE+2SKS2BcvM -0Z30MWnhBSw4+Qq27exBCRcJxFMoWKT2KITqKljfb/PEqn5SSoiFJ5zEJz71OQb6uv3r1q2L9vYO -ZCRhkRM03GECzyvgwYMHD28cIZArNpzywIwgCEmG9xGRFxPybPZhIgIOGcAhAz3d/fqxixcl/usr -3zi7JhRUVm3aQrw7zspVa3jkiad5+OF/YOl55i1ahF7Q2bGrjYHuAQp2kdrGGvLpHEVbR/MHaJ40 -jllzZ7Fl525aWhuNbes2Dwwm0knRsclZs2a09GQKEX8gyu9v+QMfu+EGJs+cwee++j22tXdx3FlX -8JkvfJU58xezp7+X1cvWsXhSiFRbmqCiMGQGeOCVHhZdcQU3//YvzJo3j4pojMWLjmPz9i3BXbu2 -h7OZfIYD42CG63ePDHjw4MHDG08GDPZfAMg5nCqqw7nk9P8JjHXvdMvVAbm//+OFp2uqJz235JQz -qGusxUJh4+bNLF+2jEx8iONPP5bf/OInfPHznyEaCtLUOp7bbrmVe+/6E/XNEwn7Y/gUP+tWbOc3 -N/2ZqU1NpLtTibau/jjDq+QNtYybpGdSGcK+ANlcjq079/Dcc8/y0GNP8Ktb7kXXhxf62rGzk0fX -7OObTyT54x6DPXWNrPfVUtSqeNel78OnBRhX38TFF13Ecy88RzgYo662uq65tW62ojCO0kIUzk95 -t0L37k6KJzoePHjw8IYSgYLr8EjAEfYIHOAV6Orq+v/tnXtsU+cZxp9zsY/t2LETyI1rGi7hEli4 -3zsuAqH1grZK7daOMaAqaOPSThvStmpbWammru2mQaFF29oBE1QCSjtooTSUGCgtNEBJAiEJiUMS -27HjS+zj67F99kdymhPj0LJOLYj3J33K8cnxybEU5Xvyfu/3PEmdTteycOGSMn2WIb+65jIiYgJG -gw5dogi3O4i6a/U4/t67cLm9ePyxR7By5WoUDByMv7+5CwzLQyMI0BsETCgdgoKiwsjBtw/bZVlW -bCa9AHxTxw4vag+IeaLfh5qGBhz+zwFUVJzC6dPHoGElBMIhjB4xCOc+O4sdO17HhMnfwebnX8T0 -mbOw6/0atHQEcN3hRO2Vy3jsh49AJ5iwY/sO7N69G1drr0LLC0wgENSBQVKSEhH03TKmjpbsL1mK -IAiC+PbEAf09/gaFgCIGvvBDr6ioCESCvprVK9dMqW+8khuTojBodZAZFojHcK2xEU6nCwmGwfWm -dhz+4AO8feQIaqtroON5mHRajC8dhJKhQ+JHjla2ezzeTqUSgJ4wF8GSK3GpxIS83Hy89NLLKCos -QNn4SXht+07U1V/FZ5cv4djRkzh+4kOEwmEUFA/FL9ZvQkfYiz1vHUJjayd++/vnMG/BQjz/h9+h -4YYN1sozSDIsIKcw+f5y3D9nOtvRYjf7u4JhudchTZ0klW7YQb94BEEQxD0pBG7i3PkLgdOnK6oe -evC7Yxcsmjdgzdr1nOjzo6G5FRazCZyGRyImIRIN4UbrDXTYHWAYGTISKCrKQknJgMhx64Wmq7X1 -DvR6ZnvQvQWkc/jQbGgY/Vy70wshy4BzZ6xgNUYsXTIP7xx9H87WToRDQYjBCAAOtvpmHHrnEPbt -OQh3hxMbnl6PDes2wGQ2Y83ap1FXew2JZAo8xyEFGUvnL8YLW15GU6uNvd7cYEzGEmIilUqPk4zj -Zie524nPJQiCIIi7Xggozkvp1q9oa3OGvG7/5XmzF4WHFRePFYMOTbaRR1FBLlpdPhg0enAA4vEU -si0ChhQOxIyZEzGkiI8fO1pVU1vd2KaqBHh6xEB3RYBnvWOGFX/f1eWH1foxWmxONNpaYD1Zidoa -G+JSDCNGl2LL5s2IxmKwd7iQiEbRJYYgSUmEwyF0BQJ4Y9cutNrsyDYZsGHdo5g4aQ4qz5yF0+VG -ltGIqk/Po8Xepsk1GbhQKCymUrLiFa2sRcXR10uaKgMEQRDEXQ/zP1yvjmDUoruJTgfAKOgEy+y5 -s0dOnDhyyc/Wrps7etT4nE6vTydoBeG9w3txvdWOKdOmg5Eckarzte5/vrm3trHB6cLNMZRKj0AA -QOSpVfOPNTVJRkP2AHT6PHC5umA2ZcHlDoLRJPHAkgXY+uqr+Msrf8W2nTshxeJYt24NZs2cieUr -ngTLsMjPNcNgysbFS5dxYP8eLJ6/BBt++Svs378fLCMjEgqAE7SwGLWpiBhuaGvz1KA7i9uB7ix3 -J3odq9TRrbRFhSAIgrgnKgKZBEQfj+hkIinZmmy+T89eqN629bUTtpaWWrMp22k2ZwezLfnto0aM -axeDYce2bXtO7djxr0+8XtGBbgcoT8/o7BEAXpUQEIsHmZJ5w/JmP/H4A1j10xXYuPEpmPMKUGk9 -A44HXHYH9h04iI8+OglJSmCgxYJhQweD5VhcvFgNKRbDvrf2YO2qn+DkyROwnr2E8kllsFZY0WRr -gsViRiKVBAMWWk5mhg8qMsejklcMRwIqkZK+ReXrWM0SBEEQxF1ZEVC/T51BoOmpDmjR7fikR/eW -OwOALNU5oedaJZNb2Qqi7AcV0esKpRhDxMvLC0ZZ8kzbps6aNHbZ936OkvtKEQx24bk/bkGnuxOd -dheanHbwHAdB0HbPy3IKPMcjGo4iCRbLli3BxPETsOffe+H2dMFsyYbH5UUyJUFv1EOKxcHJKcTj -EVgMHPJMOQ5rVW0FgHYAbQDsAFw9owt94zKpV4AgCIK4pyoCyFQRQF8DHrUftJIzHeqZ4BUnKH+G -0YW+DlExny/i0glyu73TM7Kh5fPCG61NiPrcqLM5oGV4TB07CM9sfBLDBw9BW5sdiXgU5dOnYsq0 -6RhXNg55hRZ8ePwYrNZzCPi7wCSTiEsxyHIKMgPIiRQ4gYVOlrBo/nRsffE3GFxSrK+6dDHs94dv -KJUJ9LpZKbnSJAIIgiCIuxr+a7w3PT5THdqjdn3S9lQBlKFkcqfnWivZ70qTnjLZpmKxFGqrvYfL -pgiXCkz6Z+ubG8pu1DeM5WMJXo7IGDd5Bh58eAXmzHfA7nfA1erErzdtwtTyaV887JpnVuPKlXpk -sTyu1jVBjoWhN1kwY9o0BEUfrtka8MKmZ/GDR1cAAOpb/saPLCkcFg5EtC6PGEf/mdsMaGmAIAiC -uEcrAsDN2dFq9ye1MFAmd2WtPdLPULtEqSdf2eUQxfqr9kqTJqvKoGcv5+rMosyxuSGf1+hsuYaa -i6fQ3NGKYNAHzsDC7XKg/kodImE3Ovz1mFc+Ew8tnQNnswusTosf/fgJvPKnP2P0qJH45MwpDBie -g1iXC/94fTvqqs+heNgAQyIWr2lu9VzvqQqEVBUBdaMgCQGCIAjiroT5P98rPbaYVVUAWFUlgM0g -HNRLC6m0/77V91N2KuiNBr1ZI2gt+XnGonxzdsl9owaPGTpyyLSwK5Yl68F5EyG20+MRomKUc7vD -zJjSEjy8eDH27T5o8oaCbGnp+Mjy5SukiuPv4mjlx8jR8SmO4aMTp5TJ5hxT4MAb+45eaXR8HpeS -bnRvbVSWM5RdA3FQIiFBEARBQuCWgqC/oUa9vKAWB+n35HqGeuuigO5GRF3PEAAYdFmCMZFICgWF -5sIskz6L4WU2EpQ4PsWymqQ8Jid/oODz+tu9ouiPJSQmx2SR9XpWsjU7HNFYUmlcVGddB9Hb4xBB -7xIGGQsRBEEQJARucW8m7Tj9++rSevpx+v3UVQYevX0Hyo4Fjeorr7pG8T1gM1QnmDRBos4aUPoc -lGULZadAerMgLQ0QBEEQJARu8+dkEgJftdqgFgScatJPP/4yAZAuBOQMYqC/JkYSAQRBEAQJgW/p -mdWCgEHfXgQuw8TPpl3f3xJFpp4F9a4G5TgF6g0gCIIgSAjcMYIgkzDIdD59maI/IYC0yT6Z9poq -AQRBEAQJgTvwMzBfMuEzX+Ezy7cQBennCYIgCIKEwB38eZjbPJ+pUVHO8JogCIIgSAjcAc9OSwME -QRAE8TX4Lybv2o9oSY6CAAAAAElFTkSuQmCC - -------- =_aaaaaaaaaa0 -Content-Type: image/png -Content-ID: <26389.957885364.4@twelve-monkeys.helixcode.com> -Content-Transfer-Encoding: base64 - -iVBORw0KGgoAAAANSUhEUgAAAFcAAABVCAYAAAA8AHhnAAAABGdBTUEAALGPC/xhBQAAAAZiS0dE -AP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9AFAhIKIGIgTigAACAASURB -VHja5b13lGTned75u/neylXdXZ27p2emJw9mgJlBIEAkggkkQXIZlHkoWV6ttVrJKx3t2pZ2Ja7P -UtJ65bUtyaa8FkVZgZJMUzTFAFAgQBJxBmEiJvZ093QOlcPNYf/oauxFoQeBHJAKdc53qupUd917 -n/u+zxu/twT+4T2Ezoo/wrfqQP8QgRW3APaGAyz+AwNWBKSPv/fmD44WE0lA6qy3RNDEH6D0CN9H -zXlZYm/emfxfbav9hf2Tg+/uALsJ+t9pcF+WHEDuLOmturCtrnWkQLbVdH5ZkuTTi2vm051j/73Q -XhFQAB1IdVay815+iy9SBJSizr+9ZTL/BJAHckAaMN6q48s/AKlVAa3zPgLc2HorDIsACH1Jbb+m -RT+T682/nyvVzc+iznrL7uj3W3rVw5NDRztSk45JjxqjiRvOtZHofWZ8Z+9fPPbM9PNdwL5l4Eo/ -CMkVHfOz+ZR6qG4Hz3W0R+hcZNhZ0Q28mcIt+3v/aTKp3LNWDT9Wb1hx1yu+uNFAS99Hqd0EWN45 -2js+Mtz/j3sKyebSWuNKjCJCILhBFykAwp1Htk2KQvQnyXTmo2fOLy1vcSP/3oArAEI2k5kRIu+H -7rv/3rvDMHhhYWm9FJOmG6WuIiCMDKS+HIbhf376hfn/FvNK4jcyfKvo4fsJ7uYFCOV6yzQ05Ykw -9D501523v+vkmZe+5riB3bn4sEuyvusbedfR8X/mum7vc2dXfzHm8kVbUNBbwrvfT3BfAXKlaZer -1fITVrv1Yx9+6H3Hnj5x8uHolcBG34MUiw/eu+eWRrP1a00z/HC5avpdvnR0g7Xkbw24L1+c6YQl -WQgvCEg//c773p448eLZZ7ti/rhxe6MAiPsm87oiRX/VaJj//YXpynxXoBLy6pvI3ydwXwa40rBm -hcg5p+vy/3HHrUevnDx7YbpLfaM3YXAEQEjn+TeiIH/x9MXKN7dw76IucLuTWMKNCtF/kOC+TBGl -Wnsmk1ZqiiL/GkTfLFXq1S6efiMSLABCcYf8kB+EO69cbv32dcLrrdy96DWAja/o7xK4L3sIi8vV -k7LombcdO/LP5xaWv2TZjreFBMddOjEGngiImVHGBMJfsWv8rGtHdH2+FZC8DqjX+7u/M+C+LJ1r -5ebJSml970c++L6Hnnvx7Ne2kJiXfeWtVqqPz4aW8PP1UmR2JYbELdT+FRFc7GbFpV3sWtdzL/9W -gHs9HntZQust69HK2tJ7//FPfXLHU88+/1wXMJsZNa2T8NE7obNeGBd+KXT5Um2Zuc7nShf4cZCl -LjDjWTqp879K1/+Jb0CyX3VR3wtI35W6vI7jL2VSemqkv+fPP/DQhz77W//P7z3ZxbubF/8ygNke -blEMaby0EHxxMzAYG0ru7uspTIgCo57nRK7nlBCks+evVJ6/jo+7lWTHDZ/fFXjEX7OVTRC+C4mL -q1L3a15Dfa5HCWxxkVImnUzumRj7kwfe8+Cvffr/+u15QJgY7r+nv9jz6YH+gYHZ2ZnLl2cXfj0I -AyWblz++tup+rtBrHMjlEnf157O3G5KSzOeLeJ6H69p4votpNgjCYNnzo98/eX7lT7sMm7AFN0dd -QPqA13ntXSfKi94oLcTVKK4u6haqmYg9x1dyi9dGbG1+hxZ7Vh3XE+qN5pOOZf2aphvPVKpVxkcG -/8D3g+G777kH3/d7dFUOfM+6X1IMc2yi/2d27dr5YFJPbh/o6VdDV0AQdcJgQ/tFUUYUFDLpfDqT -Tt/bk1XvaFut47YTBZ1jajGNUDvnEqeHbj4WtqC1NyRRAq+uHGweRO06aPfBX+sEXuUlbJFAiTrS -ABBJMLlrYviTdTv4DUMW/ri/f3RClgxSqSzDw7n2E099J7n/0AH80MfQVcrldYQgQBZErKZNEILv -efh+QCQI9PX2MTQ8jOfZXLry3MzzZxZ/yg8iNyZsQlcOwo9JrBN7jueh/c45B3Gpl18D2LikajEp -M7IZY3tCU7fJUpTpyecGdC2RSiRSoq4lBUmSxX37DgpRFAmjoyPMzc0Js7OzeJ7L6Ogonh9U10sl -q91uoypSJEmSOzUzs6rreuh5XrheKrUXV9dKm+oWQLtUqT5W7Ov5V6qW+urFi5d/7uMf/Un27TtE -uTGTvMV2WVpeYOfOCRYWZnEsCyOh4vs+ohAiiuCHPpbpEAkS5XKLVNJldHQMb9yaqNfMT12YqfzG -Fp5BELv5m4CqgMUri5rhFgGPsBW4m8DKMVATyaTWf2DPjk9oonxXykgdzKQzSsJIIqsGAwODyLJG -b08R07QprVfpzfYRRiHNapPIj0jqSUQjjWf7mG2TlJZACSUK2RyyJHHz7ptIJlNYlokgiEiSjGm2 -Lcv3n3rkW48eP3PxpWt+KJ4ZKEof+PjHP4rjtllenWXm6lnm52a5447buXDhHGarDkKIFGjYtotv -u0iCSOgEBLaDJCn4tKmurLBzfJSx0THqjbW7G6Z1fHHVOhnT1HhaclMyNzVW6gAMYG7BueH1VFWM -SawOpI4cO/yz/T29//P+XXvUYrYXvACr2abdtFiut1BUHc/zERAIggjbdogiyOay1BtLGIa+UU+S -ZVKpFM1mk3Q6TWl9jchyMdttJicnCaOIVCpFFEW4jkMYRezYu5+HPvQQ80vXnJ/7p/9TfdeeyeKl -qasEIfze7/57PvzgO3nvu97Nr3/q1/nZf/IzSJKI5zmomky72SKwA1zbwzYtPC9AEkQSegJdTzAy -OszA5ACW2+TE808vPXdm6V9u4c8GMePldMBsd5YJtDrPTowyXvYmpC6pjfuRyWN33Pmr99/7zl/Y -t/uAtDC9yNzVWVbmlikvr9OoNTADC9tu44cOrtvGD0yiyEVVIyyngaooCIKAqqqk02nCMMQPAkzT -JJVKIIsufcUsghTQaFaQ5YhafR3Pt1hYnmdprcqpM+fYtWeffM999yeXV9c5dMstnDl7iumZKVKq -Sn+xn/n5BZrNNn4QYRhpFFnHtnxCL8RxXDzPJ/R8Qj9AEQXEKKLVbCAYEggiuqama7VKrWl69Zhh -VWOlJykWvARbeBBxV+1lD0Tqklpx01LefPOh+z724R/59J6dezn+5DPMz84hI3ZEWyAioOnX8EML -P2gThiae38KPWoiKC9iE4QYl+YFDq9XAcS1EMUI3VGRZwA9MvMBBVkRsz6bRbqAYKn39vYxv34Yd -RFydmeXFU6ept0yCSGRgcIjZa7OIsoIiaRT7B1leXWdhaZ2x8UnyPQOsrdUJULBdC8fzkGQJRZaB -aOP8xQhZElhYX0U3EoyNb8NsN7Pzy+XLMWCVLaK8sPPsd62t3DJB3qoMA2jjY2O/sGNwnAtnznPt -8lVSCR1VlRGiAM9z8UKXKIoIgxCCgDDa+F5RijBNB1GUMHQVP9gwxJIkEYRgNmokEgmCMCST66PV -auM7Er0DO9ANnXK5zErVoXx1iUJPlm07h1lcrDA3t4wgytQaJoqaxrID9u+5iVqtQd/gds5PLTO0 -bS+rqyWM7Ahes0ZoN0nrBrIYYdZqyLqC4LogQCSG+H6AJCmMju6gUW+Pv3hueshyvFrMUG1SgtJF -E3qHd5WYZHdHbpHUBawCaHfddefeH//Rn/gX5mqdxx/5G3RVRtcU/NDBx8OLXNzQxw80BBREQUWU -VAI/QpZUfC9EECSCwMVxTaIoQFElwshDkgRUVSKTzeJFvezacytDI7vIFkYp9IwxPLqbsYn9DAyO -02jNM3ttlkQyh+9L+KFIOpMn39MLosTySolDt9zG7PwymVyRw7fcgZbIUambDI1O0NOfwnJt2mab -SAjxPRfbMnEcEz/wQVPxg4jdu/YxOraNmZlpc7VcqXRJLF0GLtjCJfM6y9+KFsQYuPonP/mTn/zQ -hz7ytvmLV7hw7iyI4IUefhjghQFeGOKFIWHQMZCCgCAIRBGI0sZ5SaKMKHqoiowkyng+OE6IJKeQ -pCSKmmVoaIJSqczs3CKimmRhpULFDEnmRxnduZe2WeWmg7fSrIWUSxbpVB/DY9u4trSIqKpUWz67 -9hxkdWWNZMJgbW2VEyeOoyeSuJ6LbddJpwwUUcB1WkhiROQHRKGAJKoYqoJlmh1qGEdWkJ8/dXY6 -VpGOS+Km1G56D3YHXLsL3E0X7hWSuxkgGJM7d/yK2XIGHn/4YdbWV9ANnZAIUZYJI4EgEogQEAQP -UQpBjBCECFHaOA9FUdAMHc9uoSgKkqDh+RKCmGR4ZA/JVD+ilCTy6zQaZZZWl1mt1DByPbR8ETmV -x5cNVM2g1RYpZMfYM3kztXqTQl8vs4uzSAkNxzNYWS1z9ObD7N01ydrSAhcvXUSUJEzbxmu3kSJw -7CaRbxP6DkIoEIUSBCJy6COLIl4Qsn33DoyUlnj08ScvdIX0USyw8WISa3WAtWLBxCvcMrk7Gtu9 -a3vxnrvuPNyXH+SJICCbTiMS4fkeiBBGIWEQEoYBoti5L9HGs+97G2ogSoiI5HK9BGFEGCkkVINE -skAun6daM4lCWKmW8Yko9BRJF4aomzb9w8OUKlValsu1+ctkEmn0QKa6eoXJ7aOMjo/zX/768+zK -7SFCZP7aKs1dLr65zvDIDm4+HKEm0rx4+iyRbdLSgMjHbnt4poMUBkRCRBD5BMHG6Z8/fx4xoXL4 -yMFNbyleHN30BMQtos2teiCI04IYN2THbjnw0PjQyLtPPPk05eUVhDDED3xURSYIA8IwIAx8otBH -lCQEYeO+CIKArhskkykMI4koSQRBiKwYJFM50pkevEDAdgKaLZMgDIkIcL2QIFJwApGm5bG4UiGR -ypMtFEkWR7k6s4SeSHPfvfeyd+8ujj//DK5vMzs3RyozhusEhJ7HttExPvbRD/HEky+gJdIMj24n -l81hGEnS6QypdIowCAhDD8cxcT2byPVAFIgkmXxfD7Im8/zJcxe2yCNvqrsVo4JNn9ftvPe7aOHl -u/Fysri3p++Ogd5ecB3sdhNJDFHEjbuvSgKaLKLKApIoIEnyhkETZSRRxfcjPC8kCCJEFHKFAUQp -geOJLK1WcLwQ03bxw5AgjChXmwSRhKqnQFCY2LGHm246yk2HjtJsu7xw7iq7Dx5Dz+R58dxZnLBB -qVLB9UPCUMZ2I1KpPNlcH6Zt8e9+9w/J5ArISopGyyaTLYKcRNYLaHofg6O7KfSPIicShLKAIIl4 -no8kSWQyWYIgYIvEObGmle7gItziOdqqV0wExPe///0333HsGG6jhqEpaLKEqojoiowqi4iECFGA -LIKuJpBlDbFjXGVJw9BTKIqB4wTMza1TaziUKy0Gh8YYG9tBIpkmmc6CrLB330G279hNNtfDxI7d -SJJBrWUxt7jC5alZDu7dT+j7tJs1FhZmmFtYJxIE8j0DVKttjGQSRde4OjtDo2Xz9PFn+aM/+hxI -IkEUUmpUGRwbx/FFikM78QIdpAyZwiCKnkIUJXRdR1VVYCMyVFVZv04KNYpRQNCVrAnihmwTULm7 -lysIgp0XT59hZe4aLdOGTJYgCtETBoqk4roBhAGqomLbLhEgCiKyKOK6HpZVRdM00pksucIoqWyG -nr5+5hcWuTa/wMDQCOlsDj8IWF1eQRB9JC1F23SotEzQ0ly+MsP+AzeRSxqceuEUoVnh9AtPc/LZ -b3L09lspFAfJFYcZGRth9uoljKQGckgyqXHsztt46eJZRsbHMc0W56+cZ7h/iKXVKgNDk6yvyjQa -DTK5QcRodYO+FA1BENENg4SuJlzXd7fIF4Rdvm8Y42N/qzL9K0oXud58enb2Gj25HDu3bSOh6yQM -HVEAURAgClFkCUWWIApRVQVRlDaOEAToRoLR0VG2b99OX1+RVDpLEIicOXseP4goDgyhJ5KsrK5y -4dJlBKQN7yMUmJqeJZFM027b3PG2u1BkhTPHn0B2G1SWZxnpz7Fz+zYM3WDH5BiCYuBHLj29eWy/ -zej4MHfffzerpWUGh3s5efp5EmmNZNpgenaGXL6P9UqLRKqX4ZFJwCAKIQxDyuUyvu8zNjbGyHB/ -pstYRVtIqx9zyfyuisTWLaT5ntzQ+lqJ3t4BevNF8qkUCVVGikJ820ZGQEZCQUYMJdqWhSCJpDMZ -Cj295PMFZFkhDMAybZbW1/GBsW3b6OkromoaKytLRFGIAoS2hy4bOJaPYWTxvYA7jtzMYEbn2unj -rM1doVWr4viQKoxgBgb1RkBvYZDJ7btot5r0Dw5SHBrl8adOYIUiiUyB5bUyt9xyhCunXkL2A1Kq -wOL8ZQYHe/AC0FMDaKkhhGQKJaViGNCfyzFSGGGodygbC3OFLYIINwauF5Pi7j6IV4I7c2nmcqVc -xnMjMtkijt1GCHz68jkG+nrRZAVJEBEjEUmQ0FNJAgFsd8NIGYkUmWyBldUSzZZJtlBAVFVsz6Nt -mSwtLeLYNo5lUuzrRRYE5mfnaTZMBCR2ToyjhBZf/NzvUJo5RUqTcByP3QeOUncU1mo+1VbEyrKJ -02gyuW2CSrnM2nqV4fFJ1GQCPV2gWmuxurJGwciwNDVFSoWkETI9fZZsLoEXCKiJApGewMMnmVLR -EHBqHpFFbotkf9AVJLgxnvWv15n5qnq+KAluKAgoCaPzaYSiyARBQBB4CAKIokAUBeB7aKpCJp0i -k0lTqVS5Oj1N/8AgvcUBgiAimUwhywr1eoNsNkcmk8V1fZaWl1iulJnYtZ1MPsHuXaOsLF7h63/9 -59jtNeTIpFKtMTw6xvmLl1FVne07dnL01iNcm76KRMjpF0/QV8igyiJ7d42ytrJGJpmkkM9tREWK -gCCFrK0t4HsmouAxN3uJTEom8s0NF1KU0DSN+flriKLAof0HCoosq10+bhCrSsTpwLkeJcRdjJej -kInt26eSPQWWqzXCaCOjFRFg2W0azQaua20AS4AQBUS+S7NZZ2VpmSiKyGTzVOpNHC9EUTRKpQqV -SvVlUE3TJp8vkMrkGNm+jYZZo6+YZmXxEpfPHSd0SoRuFT9oMbl7D+vlKv0Dg7RMC9NscfbkSW49 -ehO3HTtCWhdZvjbF4b27OPH0Cf67Dz5Au9Wg2WwQhgFIAcmUynppmbn5K7Qaa0hYLF67QH8xRcJI -ISCjaRql8joXL51n9+494r7JnYWuyCwuofFyz3UpodvNiIDw2uLCybptc9+DD9Jb7EOUwLZNqrUy -YeghySKCGCGKApIYEbg2oe+iqgqeH7BertJbHEDVE7RaFkQiimzQbFikklkSRpowECCSsOw2hUIG -s7HO8vwlGpV5KusL6LpMtpAl29NDKCoIkoJhGOSyWVRVxjZtJkaHSMqQlGBssMCB3ROsLS2T0BUG -+4vIkkgmmyaby9DblycKHFQZQq+NJvk0Sqtk0z3IcgIQUFWZ8+fPkUwmeOd994zFcOnOkG0C676W -MesGNwSCheXlZ64uziEmk2SyKSyrjSQJJBIa2VyadDqJrqsYuooQeCgSiFGIaZlYlsXQyCjVRoty -vUUqnUeSVEAklysgCBKCIFEuV8nn8rhmk2tT57l6/hRuvUTkWQwODpAq9JLtG8YNJfoHh/HDiCAI -MC0TVZaw2y3WluYoL85QXbnG8Sce5+KZUxw9fDP5bAZNlUklk4ShQBBAf98AKSPJ4twcTruFKoAS -RZgtByKRMIyQJBHd0FleXkURpEFZEpWu0DaIGTG/q+pw3Y6bePZHajQa5dGJnZ84dPiomhPazExd -Qjd0enp6yefzCKIIkoAkSfj+Rk3M8wNUPUEyncN0fBQ9RU9fP62mhW05KLIKCKytrROGEQMDg6yu -LJOUQ5Znp8joCookoqo6WroHIz+MQ4KGBaqepGXaqKqK2awzOtjL+GAfa/OzjAxkUEU4dvQIiWSS -VttmeWUV1/Op1erokopjOfTks1itJilDI7B8EooOASTTBYgsBByEMCCKZDQtjZpQhcXla3al3lyN -Zb9anVUHmp21mbCJrgduFAfXbFtB7/D4vn17D+wpKg4nXzhBuVxBVjWqtRqlSpkgDBFEEc/1cFwP -UVZIpXMIooakJcgVilRrLTzHJ5fLE4YR9XqDTDpNb0+Rq1evIokCVmUBQ4KUruGYNj3FIfTsIIFe -QEwUECQD03aoNVokDR1NFhnsySNHLoFrsjhzjnazzlNPP83ly1e4+977sV0X03FQZA3P9NE0jVaz -iqEpKIKI2zIRQoF8poe2E+A4NUTBQhbBtkI0Pc3eg3txvJZx7uLUhQ64m8A2gUZnmTFq4PVo4eUa -/ckXnvn3337i6zR8ifHJw4QkwFdJGwXaTZ9G06fR9onCiJSRIJdOIYtA5JJQRarlRVIJgVRGBhxK -a0sErkW9tMzK3Euk9TZ++xq2tU42n6TpmLiSgq+k8CSDlh2iqEkC18I1WwiBTyqRxG6b2FaLRn2d -2269iRdePMHcwgzJlEFxoMju3ROISIQeNOptbMdCkiRCZFQjixNKhFqCtu+zWFmjZyBBOp8gCCPc -IEIzZBpmhUJvL+9690PZbWODg1sUKoMuro1erxHvFX1SlfX1+vi2vr3vuO/9k7fefg8ri+sszi4R -edBs2Wh6imQmjyxGGy6PrBCEAa7nIxBu5HaFEC/waTUbDA30Y7daeGadvoKG3VqmUZsDEZqOjYOM -mMhRGNyOg8rg0DaWlpZJqjKtRpN8poDvBOgyFNIqIwMp/vpLf0YmreH7AYVikR/5kR9DNwpMz8wj -KwaNehMhcrAdE4Bmq0kkiggiKIaGLwS0rBVuu/VmGvU6rXoTQRLp6SvSUxwile2hXFkTLl6+cqWT -DYvTQqsj0e7rce5Wzb+i57mXewr9Pzo2Mi7VqzVeOneWZrNJPpchndYRIg9dU4kiCCKwLBcECT8C -SZKRJIVatY6hG5RWVunrKVDIp2i1qqyuLpFOJ/EjiTCS2L5zH7YLbSdk28QeTNMjmUhit5qk0lks -y0XXdJIJhXxSIanB7slt9PflmNy1m92799FsOyiqxuy1BTTdYHFxkaSh0W43MdtNrHYLVZHRNAlN -VVA1Fdts4dkOtx09RiFboFJpUKtZZHJFLNun1ljLvnThwskoijZpYJNv2x3A/TcC7qt6GNbXKs0Q -0bg6M3PbwYMHufmmQ1y5dBERj75CmkImgSirOI5LGEQb5R1BwXV9JEmGUEAIwXdddu3YgSrD1NWL -mGYTSRJotduISgJVT1HoHcILRIZHd9A2fRTVYH11DVURaTRa9BcHqFYqGJpEQg0ZHczRm0vw7cce -pa+3yP4DB3jm2efoHxhhdX2NdCZDrVZFQsD17I0ctL+h0bomE4UBRBFEYDbbVEplDu2/idtvvwtV -TbJt+14OHDqCIPni2bOnrzWareWOtLaBWgfoTXCjNwJu1A300tLimbbVuvvIkaMDtxw5QuC6VNZX -8Kw6uioSomDbDoIgIckKCBKOF4AgIgoiKT3BkcOHaTUqTE1doN2qEYQeju2Sy/ci6UkSyRyuL5Ap -FEmm8hh6mlqtidXhV1VVMbQkltlGEUL68gkCt8HMlfMUsllUWcV2PARBZs++vSwuL5FMGSwtLiKw -QQNRsIFBFPposkQYbtgg17GRBYFWo8n87CyqmuCBd76Hvv4R8j1FkimdE889W11cWroSM2ib9OC9 -lqfwel2Ogu/7YRC432nWax9VFd146IMPkcukuXLpJaqVUqfo6CHJKkEIYSRS6OmlUq1x8MBBDu3b -T6te5eyZ5wkjB0naKAHJioZpe+SKQxjJHEEk4gUSkqzTatq4jocoimRSOvVqHT2RJPADdFkgnZQZ -G8zTm09QWlklQsD1XA4cPEjbNAnY8GRKpTVaLQvHsVEUGU2VCXyXjYTeRjQbBi4EHroq4tkWpXKJ -5dV1ltdLrJcr9PX18MyzT1kz12ZOdiR10wUzYz7vmwL3Ffu1TNO2SqW1p4IgfF8QCMadd72NWqXM -mdOnUEQNTdURRIkgjDBtj77iAHfd9XZ27phk6vx5nj/+FI7bRpFDgshDkVUkWSed7SVfHGJ1vUIy -lSOb78MyPdptC8/xkQSJRELBc31kRdswBr6LoYaUV6bJJjUuX7xM4IfYjotlWViODUJErV5FFCVc -NyIMQ1RFpl6rQhSgKiKiAIoio6ohlllDlSFpqKQzKZaXV7g0NcXi8hKTu/Zy4eL5mUtXzl/sANqM -tTJZrxdEiNfbwhSLSOxyrXHm2089+aOPP/X0fCDpfOQTP8U973wvzWYT27bxfY97776HT//mb/KB -970fWZI49eKLzExd2QhDUwaObaKpCpqhIYoKqVSWcqVOMpWl0Fuk3baxTAtZlJEEEbPVoidfQJZF -FEnEd2xkReKHP/YRCvk8mUyaXCaLgEC1XAYiBgeLtJo1MukEq6uLGx6M69I2TRKJxEa4FYUEwUZj -i6IIqJpI26ojiAG208QLTMLIwbQatFsWpmnWu6oSwnVaZN8ULbyi69u0zFLbbD0yNrpt56Fjt0+M -jGxn4qZD7Dl8lKGJ3Xz0Jz+JIOv81z/7POvLS8xNXUQMWqSTCpbZQJJk2raPbuQZHt9NIGik0lk0 -WaPdsJFFFdsOAAlDT+K6HmrGoFytkUlnUSQRMXQwGxXGR/qZnr5MhIWqSzieyTvecS/5Qpql+Xny -6RSryyvYgU6j0cSslOhNJ5CjgBCBdhCxVquT11wE38Iya0gKuJ7LWrlKIplBkg3uvfedfPmrf/nc -ytryakdiNxvvzFiO4bvi3FcBXK1X21/66n/7+vy15WttN5jce/ut+bn1GrfcejsD/UX+47/5DPNX -LyMFbUTfxPUbRPi4jo+iJDGSBUIpiaRmMJI5FEQKmTy25XF1aobBgRFEFBRZJQgj7MjD9TwIA3RJ -wGyU6C0k0dQQy2pQayxh2U0kWcB1bXZO7GB5YYFWrQGhSMURMNsmmgAZQ0MkwidEz6QxrRZKfR4V -GyMhIUgRLcvCC0SSyV727zvM3v373d/87U893lXtjXc2vmYgIb7eDsdYRrZsCwAADsZJREFURLLZ -CNH847/4wy/8/C//k/f94s//jz/2hb/80z9JpzQWp69x+rln2L1jhIQcktQEVCNDywZBzyDqaQJB -ZXBgCE0WsVt12o0mYRBimW0md+6E0EdVRKIwwNBVDEVHE2XSRgLHbqMqYCQgwsZxGtz5trdTq7UZ -HZmgXKoBIg8++H5arTae69CT1YlCl0DRKJkBDgqB3Uaz1uijgtheY7wvw9F9e+lJZ9BklZ7eIoqe -YGhsnIuXz61fZ9dOd6sTbxbcOMivAhioPf6tR5/xrNbE8twsn//Pn6U3ZzA/9RJeq0xWBy8ICUQV -HxVf1Mn3DnWaki16UgYiAp7jktQNErqOoalY7TqBbyJEHm6ziRoJRI5FYLWQcGnU11hdvUrbLHHT -wZtJpfKYpoMkyczPzbNtYoL77ruXSmUV2W+gyj6e71EzLSIiBKeBOXeWYUqMF3QSuIRmi4XpWSRk -2qZH03KRNI1HHv3qUtc2qXhztMjrjM16o+CGXYU5G2hnc9nBu+6+684D+/dz+tTzHD64m9LKHKMD -eQwlRPRdCpk06VSG7Tt2IUoqYRAhBAGC55FJpqlVqiiiSOC5pFMGZruBGHmoUkDkNNEiF6dVoTeb -wDVryILH6to8hd4MFy9eJJ/LMTU1ha6piBJcOH+GIHScYjGL114lMNfQBBPVr9NamSLpVeiJarx9 -/xg37dtBFHhMX5mmXGpgGHmaLYd0tsDEzh088+wT89eLYN/I3uA3M0/mVTQxtmPygUNHjyGqGplC -ASOZQJQERCGgXl5j32AO3W2SM2Rc08RstZBEiVw6QzaVplVrICORNAwMVWZhfhZdFdF1EUKbpOKS -0j10wSbymihiyP69k4Sez9rqKtMzU4RiUNk2MYIgBayXF3jq2cfXf/lXf/Hc0aP7qJdmaCyfR6xc -pNebZ0KtcsdkL2lMArOBqCdxBY1K20fWCjTbIc2WS09vH1dnrlRXVldaXbZJejPewpudzhRvjKA4 -tu1Yy4uo2xZ2EDGxazeFvuJG/1c+w1AyolVqIUg+lVYdAhHfcdELeURBoFKusn3nTkRBxHYd6tUS -o+NjCGKIIAVUy/Ok+orYQQsCjUppBV3RWV5eI5dLsO2uET71r37r0tuPHT4yOjqsprMC//GP/vzi -5alrc1/+yp8f3DM5qib9CsO6QMKuoUcht47vpF89zNx6hTPTZeq2RK64A7mgY/oKd997C/fc/w7+ -4r/80bXrbAAUuwTzupuuv5vRV5v530jUjB25gWFqloPpBVyZmaN3YIh0TiXdk2Z3UkAT4exqlSgI -2TZ+EMsJMPQk6ysr9BZ6yaZzhFGA53tk0imiKMS1bXRdQgib+LaIpsgookyxt4f+4gCFbB+TuydA -8HE913v0yWefHO7PbPvqN4LqwmpjGnBOnnlhblt/dufhnUPsT4dkTbj60jQ56iwKAr6SYqZUIRBT -jO/byey5aXKFAvfc+y76+4vh3zzy5Zmua5auA/INoYVXRXITE7u4+dBe6rUmkR/yjUceRlUV1tZX -ccOA4kAfvTnokVfJWFdoXHgCa+ES1YVpZqdOkWSG5txllHqA3KiSDqeJGk9DbRa1KZKIFLzGCrI1 -g9ieQg/WqazN0bCbVJwWp849j+N6lusHzZnF6vGF1caZTZepWm9dadcWSSVV1GQ/1aCPNb/AtWaK -P3vkBdpKDtnIIatpREWnVKmy58AeRsaKfPnLn581zbZ3HVqka0vUDaOFV6jI1MXLfPuxE+wZGcJu -tRkdyBKFPtPTV5m51GJX+gHWV68xmmtz+4EJZubaXJhbxGspFBNraJZLY3WUsV0fwG5dRNWeI5Lq -VBujZKUikdBk+zaV0Ckz0DfEuYtVxFaDIwcP07djhOX5c2HMizFjqUC7aXFmvb7y3iuKxsmzK5gV -nz277+E7ixbnyj6jcpr+4hiakeHCSy+Ry6Qo5AzOX3gx/NznPnO5S9WjLaRVeL0BG9/LRDxhfXm+ -NDdzBXN1CVnTqLUs9u8ao/GczUhPnnLZRlWT3P/eO1Bos3e3w95rLU5PneKudx0k9FXWF/v5+lf+ -mOKwwtseGKLQP8nidJavfulbDI7Y/MRP/BDXzr3ASHEPw4UQVU4RrfvsumMXV86daHeiJDuWb20B -dtsM/TnTWXbM5uDIyDjZPo2db7uVb33nSbRCEV80cD2L2bmNNqoH3nU/B27azTe++bXZer1ubVEy -32oszGsOuPhuaUEAkCLnxLNPPMbg4ADvePd7KDXbXF1Y5oH3vZ9scZBqpONoOf7669/gyvw0ckHG -al7jvtt76UsuMjzcYrRvgaMHLN59T4E92wR6jDoT/Q57xgMGB1NIakRPXy/T8wssr5XxbJ+luUW2 -DY2gKIl6xzXcLCDWgApQBWpr7fAE6Sy1KGR4726uldaYXVzmnre/k+q6yZWpJTxf5IMf/giFnhRf -/OKftv/DZz5zrmunTve22a3Gw9wwyX35TlVX57504MH3/NKxYzcRuD43r93J/OXThH6TXDrDuXKL -cmkeMahxbrnCkXmfpDDMoJDBcSwCrwGCimFEjOwY48rF59i+bwcyOqlUhnW28Sd/cY5iX5LvfOc0 -ojiOvvoUY4cn8HWLk2fPrccoYbN4uJnMDlbnWg/fvF/5oK7qzMxcpV22MCSFpx75NqlMnluO3kEi -ZVAc6OXC5RfDL3zpS896nudtsVvd6wI63KJZ74YNsxAAsV5rlraNDLyv2fb6jVSebD5P6LucOnmc -kICe8UmWGnUagYCU3IbLOKY3xMOPnuexx+ZJZbKEYj96ejsXLy/zB398houXljl89AN85ZtXyOz6 -GH/16ElaJLnzPR/jxKV5Ts1O8wu/+nM89uxX+cM/+MvjjuNtAlqOSW0dsBzTL+2ZGBrLJo3t46Oj -/MtP/waH9x0ioyX5wHs/yJH77+OmWw7iR63gt/7v33p2ba1U6soIbkak7a5kudVZHq8xwe97AhcQ -7WZtdmFp7Uci0eDQzUdJJjXOnX6BZr3Ezh376evvwwkEVGOAnoGDVBsyc8tVlFSa+YpAxcriacM8 -/NRL1IOIpbpCqv8QFxY8Pv7T/4zJg0fIDRX59L/+HZxI5Zf+xf/Czbfu5//8zU8tnjs1fb5z4ZUu -YDcLiEGt2jw3ur3n3vnSQqZcLXPo1tsYHZ1gYHSc2dIKU7MXmr/zu//6WxcuXlqP9YZ5sfb8dhe4 -ccMZvFYd7XsBF0As1RrLupFMOZF8649/4ifQNYWB3hTZhMal46fpzaSwLZN602T37gMEvs1qeQrT -r2H0HyI9uB8lP8rzl+aoehq21IOUHmOhYmE5Hk898whf/8Z/5R/99D/iQx/8GOPDowiByz//5V89 -4dh+qQNmGSh1AG7EdtqErbZtVertJws7C6NT64tDJ86elsZ27eWRbz+++LWHv3Ly9373t59aWFhs -bzGwonvvQ7urOOl09YrdsDEsxDepAMl3vffBf3v02O0f37PrIBMjEyQVlSf/6vM89/wTzC1fo394 -iJtuOsyttxykUb1Gs1XiqZNLZHI9vO3Ou5idm6O/fwRdz/Cnf/YF1lYrSHKSj/7Q+/ixT/wojz3+ -GKlUFs9zOPfS87O/8r/979/qALsCLAHLHZBrsQ0gmxvEc0AWKHRWhv9/OLLGK4cTb4Jsxri8Aqx3 -nusdDWl3AXxDBwi94sZcnbrybSFqppqmf6R/9BByapRDRw+TKQ7RckCUda5eneKl8+dYXF5naaXO -xWtXKNcrVGtV1lYrvHTuMn/zjcepV1scvulmPv7jP8X9DzyA5wv8p8/+vyhaxInnv934/d//T0/Y -trPJtaXOhdc6F76Za91s3OjOAyi8eqZj3DtwY/vLWrEOm3asAmx31dCiG+3nhl2NwdZ3vvP8b1yd -XT3p+vzKz/wPvzTcPzrMA4MfZMfeI0hCxNSlC6wszTM7PY1pNikUDSRZBrmPMAwYnxxg3+EMR48c -ww8Cas0mjdY6mi7xxJOPUCpPt77zxFNP1WvNeqzMXY31E1hd/bNC1wyJ7n1mm4ZLie2aDGPGrBkD -047tlvS7poJwo2mhe/iF2plfk5Zkqf/DH//hH3773Q99aHRsYlQWZXbt2M7c3DKpRIpsOkvCkJmb -m+f4c8e58223s7q2wvbt47iuQ6tV42tff5jdu0ZIJFQe+cZXOH78mdWZ6cVnXNevd8BcBxY6dLDW -AbodA2BTopTOlJMUr5w2neyszanTcXC9rtx1I/b9zS7teEs4t9tz2JxHbnROPgf0jO/cddvR2972 -jg995CMHp67M9OQyvTzwzgcQibh0YZmTL77IsWOHcT2L8W3DPPrNh/E8myuXL2C3lzh96mS93XIu -Li6sz8bcolIH1CVgtcOF7S7Jjbo2jCdiPJvqGnYUnyG2KdF2F++2YiUet+s4bxm43QBvGpFkx4jk -Nw2JkUqM79i1a/Ke++4fq1Rq/Yvz1cz2iQlNkhDmFmbYsWNMOHfudNho1Jori8vVVr22ZLadRkyK -zI4ErXXAXekYsVbMuvtdjr4Qm9VjdE2I0mNTmOLjvePca8ZK6VaMb1+XGm7k7zMIW0wb2VTHTAzo -bOd9OiY5Wkw1pa52eTcGbKMD5lqHFqodqYobmPgkD6HLs1FjgOpdE0HELbrIvRjXOl0jAAJeZ/bu -jfwpg6grqRHGJGBTnesdUDddoVTXfDEldk7d4LZiBqzaed3qUtHu5EoYA8zvcrU225HiowaFrr9x -Y3/nbjVT4Q27U2+RFMfHA2oxMBNd6hmX3nhhNC65ce6Lb8XfasZM9Bpz0iReOetR6RoBQNeGPm+L -jdOvOzH6rf7ZFoGtJ4eqsaXxykFwUpe7F1fPuGpuNVvmtX4hStjipktbVHTjm6fDrr29b2oa9ff7 -h4deawKoGDMqxNQ5Dp7XtYl5qxHZr6eu3Tv1hS12p0dcf3D8Gx7z/YP4PbQ3MnBzqyz/VkPio+/m -otl6hm53Nfd63x29mQv9QT+26mh5o/0U0RZtV2/2Jl+3w/M6x+LvErhvBOw30st2I7Tphn7v3/af -SewGOrpeVeRv4+P/A9Q+PxXM9RiwAAAAAElFTkSuQmCC - -------- =_aaaaaaaaaa0-- diff --git a/default_user/local/Makefile.am b/default_user/local/Makefile.am deleted file mode 100644 index 3c89920d47..0000000000 --- a/default_user/local/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -SUBDIRS = \ - Calendar \ - Contacts \ - Drafts \ - Inbox \ - Outbox \ - Trash diff --git a/default_user/local/Outbox/.cvsignore b/default_user/local/Outbox/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/Outbox/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Outbox/Makefile.am b/default_user/local/Outbox/Makefile.am deleted file mode 100644 index d9ccc4dba4..0000000000 --- a/default_user/local/Outbox/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -defaultcalendardir = $(datadir)/evolution/default_user/local/Outbox -defaultcalendar_DATA = folder-metadata.xml - -EXTRA_DIST = $(defaultcalendar_DATA) diff --git a/default_user/local/Outbox/folder-metadata.xml b/default_user/local/Outbox/folder-metadata.xml deleted file mode 100644 index 4452fb9e0c..0000000000 --- a/default_user/local/Outbox/folder-metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - mail - Outbox - diff --git a/default_user/local/Trash/.cvsignore b/default_user/local/Trash/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/default_user/local/Trash/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/default_user/local/Trash/Makefile.am b/default_user/local/Trash/Makefile.am deleted file mode 100644 index 25def5bfe9..0000000000 --- a/default_user/local/Trash/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -defaultcalendardir = $(datadir)/evolution/default_user/local/Trash -defaultcalendar_DATA = folder-metadata.xml - -EXTRA_DIST = $(defaultcalendar_DATA) diff --git a/default_user/local/Trash/folder-metadata.xml b/default_user/local/Trash/folder-metadata.xml deleted file mode 100644 index 6f1acf7a4a..0000000000 --- a/default_user/local/Trash/folder-metadata.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - mail - Trash - diff --git a/default_user/shortcuts.xml b/default_user/shortcuts.xml deleted file mode 100644 index fadf740c5a..0000000000 --- a/default_user/shortcuts.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - evolution:/local/Inbox - - evolution:/local/Calendar - evolution:/local/Contacts - - - - - - diff --git a/devel-docs/.cvsignore b/devel-docs/.cvsignore deleted file mode 100644 index d436efd0f7..0000000000 --- a/devel-docs/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -Makefile.in -Makefile - diff --git a/devel-docs/Makefile.am b/devel-docs/Makefile.am deleted file mode 100644 index 74a5ff5b60..0000000000 --- a/devel-docs/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -## Process this file with automake to produce Makefile.in - -SUBDIRS=camel diff --git a/devel-docs/camel/.cvsignore b/devel-docs/camel/.cvsignore deleted file mode 100644 index 56d9506207..0000000000 --- a/devel-docs/camel/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -sgml -html -Makefile.in -Makefile -camel.signals -camel.hierarchy -camel.args -camel-decl.txt -camel-unused.txt -camel.html -camel-decl-list.txt - diff --git a/devel-docs/camel/Makefile.am b/devel-docs/camel/Makefile.am deleted file mode 100644 index 276059cf88..0000000000 --- a/devel-docs/camel/Makefile.am +++ /dev/null @@ -1,101 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# The name of the module. -DOC_MODULE=camel - -# The top-level SGML file. -DOC_MAIN_SGML_FILE=camel-docs.sgml - -# The directory containing the source code (if it contains documentation). -DOC_SOURCE_DIR=$(top_srcdir)/camel - -CFLAGS=`gtk-config --cflags gtk` -LDFLAGS="-lcamel `gtk-config --libs gtk` " - - -HTML_DIR=$(datadir)/gnome/html - - - -TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) - -tmpl_sources = \ - tmpl/camel-data-wrapper.sgml \ - tmpl/camel-folder.sgml \ - tmpl/camel-mime-message.sgml \ - tmpl/camel-mime-part.sgml \ - tmpl/camel-recipient.sgml \ - tmpl/camel-service.sgml \ - tmpl/camel-store.sgml \ - tmpl/camel-stream.sgml - - -camel_docdir = $(HTML_DIR) -camel_doc_DATA = \ - camel.html \ - camel.hierarchy \ - camel.types \ - camel-scan.c \ - camel-decl.txt \ - camel-sections.txt - -EXTRA_DIST = $(camel_doc_DATA) - -camel.html: html/book1.html - -cd $(srcdir) && cp html/book1.html camel.html - -html/book1.html: sgml/camel-doc.bottom - $(MAKE) html - -sgml/camel-doc.bottom: $(tmpl_sources) - $(MAKE) sgml - -camel-scan.c: - -scan: camel-scan.c - CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) gtkdoc-scanobj --module=$(DOC_MODULE) - gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) - -templates: scan - gtkdoc-mktmpl --module=$(DOC_MODULE) - -sgml: - gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) - -html: - if ! test -d html ; then mkdir html ; fi - -cd html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) - -clean-local: - rm -f *~ *.bak *.hierarchy *.signals *.args *-unused.txt camel.html - -maintainer-clean-local: clean - rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt Makefile.in - -install-data-local: - $(mkinstalldirs) $(TARGET_DIR) - (installfiles=`echo $(srcdir)/html/*.html`; \ - if test "$$installfiles" = '$(srcdir)/html/*.html'; \ - then echo '-- Nothing to install' ; \ - else \ - for i in $$installfiles; do \ - echo '-- Installing '$$i ; \ - $(INSTALL_DATA) $$i $(TARGET_DIR); \ - done; \ - echo '-- Installing $(srcdir)/html/index.sgml' ; \ - $(INSTALL_DATA) $(srcdir)/html/index.sgml $(TARGET_DIR); \ - echo '-- Fixing Crossreferences' ; \ - gtkdoc-fixxref --module=$(DOC_MODULE) --html-dir=$(HTML_DIR)|| true; \ - fi) - -dist-hook: - mkdir $(distdir)/html - mkdir $(distdir)/sgml - mkdir $(distdir)/tmpl - -cp $(srcdir)/html/*.html $(srcdir)/html/*.css $(distdir)/html - -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl - -cp $(srcdir)/sgml/*.sgml $(distdir)/sgml - -cp $(srcdir)/sgml/*.bottom $(srcdir)/sgml/*.top $(distdir)/sgml - - -.PHONY : html sgml templates scan diff --git a/devel-docs/camel/README_AND_TODO.txt b/devel-docs/camel/README_AND_TODO.txt deleted file mode 100644 index 5feeb1e4e9..0000000000 --- a/devel-docs/camel/README_AND_TODO.txt +++ /dev/null @@ -1,43 +0,0 @@ -Camel is currently (conceptualy) separated in four parts: - -* the session handling -* the storage mechanism. -* the (mime) message handling. -* some general utilities class/functions. - - - -* Session handling ------------------- - -(This is not gnome session managing related) -CamelSession is an object used to store some parameters on a user -basis. This can be a permanent (fs based) or volatile -(ram only) storage depending on user preferences. -The session object is, for example, responsible for -remembering authentication datas during application lifetime. -It is also responsible for selecting and loading providers -corresponding to protocols. In the case where only one -provider exists for a given protocol, the task is trivial, -but when multiple providers exist for a given protocol, the -user can choose their prefered one. Given its relationship -with providers, the session object is also used to instanciate -a store given an URL. - -Associated Classes: - CamelSession - implementation: 5% - -Associated Files: - camel-provider.[ch] - implementation: 2.5% (a struct in camel-provider.h) - - -* the storage mechanism. ------------------------- - -The storage mechanism is mainly represented by -the Store class and the Folder class. -* the (mime) message handling. -* some general utilities class/functions. - diff --git a/devel-docs/camel/camel-docs.sgml b/devel-docs/camel/camel-docs.sgml deleted file mode 100644 index 33c6623731..0000000000 --- a/devel-docs/camel/camel-docs.sgml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - -]> - - - - Camel Messaging Library Reference Manual - - - - Camel Objects - &CamelMimeMessage; - &CamelService; - &CamelStore; - &CamelFolder; - &CamelMimePart; - &CamelDataWrapper; - &CamelRecipient; - - - diff --git a/devel-docs/camel/camel-sections.txt b/devel-docs/camel/camel-sections.txt deleted file mode 100644 index 1f6d45c03c..0000000000 --- a/devel-docs/camel/camel-sections.txt +++ /dev/null @@ -1,154 +0,0 @@ - -gnome.h -camel-data-wrapper.h - - -
-camel-data-wrapper -CamelDataWrapper -CamelDataWrapper -camel_data_wrapper_write_to_stream - -CAMEL_DATA_WRAPPER -camel_data_wrapper_get_type -CAMEL_DATA_WRAPPER_CLASS -
- -
-camel-recipient -CamelRecipientTable -CamelRecipientTable -camel_recipient_table_new -camel_recipient_table_get -camel_recipient_table_add -camel_recipient_table_add_list -camel_recipient_table_remove -camel_recipient_table_ref -camel_recipient_table_unref -
- -
-camel-mime-part -CamelMimePart -CamelMimePart -camel_mime_part_add_header -camel_mime_part_set_content_object -camel_mime_part_set_filename -camel_mime_part_get_disposition -camel_mime_part_get_content_MD5 -camel_mime_part_get_encoding -camel_mime_part_set_header_lines -camel_mime_part_get_content_object -camel_mime_part_get_content_id -camel_mime_part_set_description -camel_mime_part_set_text -camel_mime_part_set_encoding -camel_mime_part_set_disposition -camel_mime_part_remove_header -camel_mime_part_get_filename -camel_mime_part_get_content_languages -camel_mime_part_set_content_languages -camel_mime_part_get_header_lines -camel_mime_part_get_description -camel_mime_part_get_header - -CAMEL_MIME_PART -camel_mime_part_get_type -CAMEL_MIME_PART_CLASS -
- - - -
-camel-mime-message -CamelMimeMessage -CamelMimeMessage -camel_mime_message_remove_recipient -camel_mime_message_get_recipients -camel_mime_message_set_flag -camel_mime_message_set_subject -camel_mime_message_get_reply_to -camel_mime_message_get_from -camel_mime_message_set_reply_to -camel_mime_message_get_sent_date -camel_mime_message_new_with_session -camel_mime_message_add_recipient -camel_mime_message_get_subject -camel_mime_message_set_from -camel_mime_message_get_flag -camel_mime_message_get_message_number -camel_mime_message_get_received_date -camel_mime_message_set_received_date - -CAMEL_MIME_MESSAGE -camel_mime_message_get_type -CAMEL_MIME_MESSAGE_CLASS -
- - -
-camel-folder -CamelFolder -CamelFolder -camel_folder_get_folder -camel_folder_create -camel_folder_delete -camel_folder_delete_messages -camel_folder_get_parent_folder -camel_folder_get_parent_store -camel_folder_get_mode -camel_folder_list_subfolders - -CAMEL_FOLDER -camel_folder_get_type -CAMEL_FOLDER_CLASS -
- -
-camel-service -CamelService -CamelService -camel_service_connect -camel_service_is_connected -camel_service_connect_to_with_login_passwd -camel_service_connect_to_with_login_passwd_port -camel_service_get_url - -CAMEL_SERVICE -camel_service_get_type -CAMEL_SERVICE_CLASS -
- -
-camel-store -CamelStore -CamelStore -camel_store_get_separator -camel_store_get_folder - -CAMEL_STORE -camel_store_get_type -CAMEL_STORE_CLASS -
- - -
-camel-stream -CamelStream -CamelStream -camel_stream_seek -camel_stream_write -camel_stream_flush -camel_stream_eos -camel_stream_write_string -camel_stream_close -camel_stream_write_strings -camel_stream_read -camel_stream_available - -CAMEL_STREAM -camel_stream_get_type -CAMEL_STREAM_CLASS -
- - diff --git a/devel-docs/camel/camel.types b/devel-docs/camel/camel.types deleted file mode 100644 index 93142d8692..0000000000 --- a/devel-docs/camel/camel.types +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -camel_data_wrapper_get_type -camel_folder_get_type -camel_mime_message_get_type -camel_mime_part_get_type -camel_service_get_type -camel_store_get_type -camel_stream_get_type diff --git a/devel-docs/camel/tmpl/.cvsignore b/devel-docs/camel/tmpl/.cvsignore deleted file mode 100644 index 29db8d052d..0000000000 --- a/devel-docs/camel/tmpl/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -camel-unused.sgml - diff --git a/devel-docs/camel/tmpl/camel-data-wrapper.sgml b/devel-docs/camel/tmpl/camel-data-wrapper.sgml deleted file mode 100644 index 6fce9eb128..0000000000 --- a/devel-docs/camel/tmpl/camel-data-wrapper.sgml +++ /dev/null @@ -1,26 +0,0 @@ - -CamelDataWrapper - - -data container with streaming methods - - - -A CamelDataWrapper is wrapper around data which can save them to a stream -and restore them from a stream. - - - - - - - - - - - - -@data_wrapper: -@stream: - - diff --git a/devel-docs/camel/tmpl/camel-folder.sgml b/devel-docs/camel/tmpl/camel-folder.sgml deleted file mode 100644 index 882d63499c..0000000000 --- a/devel-docs/camel/tmpl/camel-folder.sgml +++ /dev/null @@ -1,96 +0,0 @@ - -CamelFolder - - -Represents a folder of messages on a store. - - - -CamelFolder represents a folder in a message store. - - - - - - - - - - - - - - - - - - -@folder: -@folder_name: -@Returns: - - - - - - - -@folder: -@Returns: - - - - - - - -@folder: -@recurse: -@Returns: - - - - - - - -@folder: -@Returns: - - - - - - - -@folder: -@Returns: - - - - - - - -@folder: -@Returns: - - - - - - - -@folder: -@Returns: - - - - - - - -@folder: -@Returns: - - diff --git a/devel-docs/camel/tmpl/camel-mime-message.sgml b/devel-docs/camel/tmpl/camel-mime-message.sgml deleted file mode 100644 index 704f3d3572..0000000000 --- a/devel-docs/camel/tmpl/camel-mime-message.sgml +++ /dev/null @@ -1,171 +0,0 @@ - -CamelMimeMessage - - - - - - - - - - - - - - - - - - - - - - - - - -@mime_message: -@recipient_type: -@recipient: - - - - - - - -@mime_message: -@recipient_type: -@Returns: - - - - - - - -@mime_message: -@flag: -@value: - - - - - - - -@mime_message: -@subject: - - - - - - - -@mime_message: -@Returns: - - - - - - - -@mime_message: -@Returns: - - - - - - - -@mime_message: -@reply_to: - - - - - - - -@mime_message: -@Returns: - - - - - - - -@session: -@Returns: - - - - - - - -@mime_message: -@recipient_type: -@recipient: - - - - - - - -@mime_message: -@Returns: - - - - - - - -@mime_message: -@from: - - - - - - - -@mime_message: -@flag: -@Returns: - - - - - - - -@mime_message: -@Returns: - - - - - - - -@mime_message: -@Returns: - - - - - - - -@mime_message: -@received_date: - - diff --git a/devel-docs/camel/tmpl/camel-mime-part.sgml b/devel-docs/camel/tmpl/camel-mime-part.sgml deleted file mode 100644 index 2db158b25f..0000000000 --- a/devel-docs/camel/tmpl/camel-mime-part.sgml +++ /dev/null @@ -1,151 +0,0 @@ - -CamelMimePart - - - - - - - - - - - - - - - - - - - -@mime_part: -@filename: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@header_lines: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@description: - - - - - - - -@camel_mime_part: -@text: - - - - - - - -@mime_part: -@encoding: - - - - - - - -@mime_part: -@disposition: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@content_languages: - - - - - - - -@mime_part: -@Returns: - - - - - - - -@mime_part: -@Returns: - - diff --git a/devel-docs/camel/tmpl/camel-recipient.sgml b/devel-docs/camel/tmpl/camel-recipient.sgml deleted file mode 100644 index 4af84cf58e..0000000000 --- a/devel-docs/camel/tmpl/camel-recipient.sgml +++ /dev/null @@ -1,88 +0,0 @@ - -CamelRecipientTable - - - - - - - - - - - - - - - - - - - -@recipient_hash_table: -@ref_count: - - - - - - -@Returns: - - - - - - - -@recipient_table: - - - - - - - -@recipient_table: -@recipient_type: -@Returns: - - - - - - - -@recipient_table: -@recipient_type: -@recipient: - - - - - - - -@recipient_table: -@recipient_type: -@recipient: - - - - - - - -@recipient_table: -@recipient_type: -@recipient_list: - - - - - - - -@recipient_table: - - diff --git a/devel-docs/camel/tmpl/camel-service.sgml b/devel-docs/camel/tmpl/camel-service.sgml deleted file mode 100644 index 5b51ea902e..0000000000 --- a/devel-docs/camel/tmpl/camel-service.sgml +++ /dev/null @@ -1,72 +0,0 @@ - -CamelService - - - - - - - - - - - - - - - - - - - -@e: - - - - - - -@service: - - - - - - - -@service: -@Returns: - - - - - - - -@service: -@host: -@login: -@passwd: - - - - - - - -@service: -@host: -@login: -@passwd: -@port: - - - - - - - -@service: -@Returns: - - diff --git a/devel-docs/camel/tmpl/camel-store.sgml b/devel-docs/camel/tmpl/camel-store.sgml deleted file mode 100644 index 2882c09986..0000000000 --- a/devel-docs/camel/tmpl/camel-store.sgml +++ /dev/null @@ -1,45 +0,0 @@ - -CamelStore - - - -A class representing a message (local or distant) repository - - - -The store class models a place where messages can be stored and retreived. It can be a local -store (for example an mbox-style store) or a distant server (for example an POP3 server). Messages are -not retreived or stored directly with a CamelStore object. Instead, a CamelFolder object must be -obtained from the store first. - - - - - - - - - - - - - - - - - - -@store: -@Returns: - - - - - - - -@store: -@folder_name: -@Returns: - - diff --git a/devel-docs/camel/tmpl/camel-stream.sgml b/devel-docs/camel/tmpl/camel-stream.sgml deleted file mode 100644 index e965db2e45..0000000000 --- a/devel-docs/camel/tmpl/camel-stream.sgml +++ /dev/null @@ -1,101 +0,0 @@ - -CamelStream - - - - - - - - - - - - - - - - - - - -@stream: -@offset: -@policy: -@Returns: - - - - - - - -@stream: -@buffer: -@n: -@Returns: - - - - - - - -@stream: - - - - - - - -@stream: -@Returns: - - - - - - - -@stream: -@string: - - - - - - - -@stream: - - - - - - - -@stream: -@Varargs: - - - - - - - -@stream: -@buffer: -@n: -@Returns: - - - - - - - -@stream: -@Returns: - - diff --git a/devel-docs/misc/ref_and_id_proposition.txt b/devel-docs/misc/ref_and_id_proposition.txt deleted file mode 100644 index 2127b45a57..0000000000 --- a/devel-docs/misc/ref_and_id_proposition.txt +++ /dev/null @@ -1,237 +0,0 @@ -Author: Bertrand Guiheneuf -Date: August 9th 1999 -Last revision date : September 3rd 1999 -Version: 0.2 - -The last version of this document is always available in gnome CVS in -the gnome-mailer module: devel-docs/misc/ref_and_id_proposition.txt - - - -A) Identifying messages within folders --------------------------------------- - -Currently, in Camel there is only one way to retrieve a message from a -mail store: - CamelMimeMessage * - get_message (CamelFolder *folder, gint number) - -where number is an integer representing the message rank within its -parent folder. - -This is a traditional method (JavaMail, MAPI) and it is very useful -because this is often the only way to get a message in from a -classical store (pop3 for example). - -Moreover, various documents ([1], [2]) proposed to generalize the URL -scheme used in Camel ([3]) to access mail stores in order to identify -messages. Such an URL would be, for instance: - -pop3://po.myisp.com:1 - -Meaning: "Access message 1 on Pop3 server po.myisp.com" - - -However, referencing a message with its number within a folder is a -very unreliable method: - -1) Message order in a folder can change during a session: - - The user can move or remove messages from the folder, thus - completely changing message numbers. We could however imagine to - follow message operations in order to keep camel in a coherent - state at each time instant. This could be quite complex but may - be feasible using gtk signal system. - -2) Message order can change between sessions: - - Gnome-mailer was designed from the begining to allow messages to be - stored in classical mailboxes (mbox, maildir, MH, IMAP ...), in - order to allow users to run other MUA on their mailboxes if - necessary. These other MUA can change message order within folders - without any chance for Camel to trace the operations. - -These two scenarii show that it is quite impossible to use reliable -folder caching or message referencing if messages are referenced only -by their position within their parent folder. - - -We thus have to find a general way to identify and retreive a message -within its folder. One thing is sure, however: all folders -implementation won't allow this method. Pop3 stores will always access -messages using their rank on the server. MUA using Camel will thus -have to be prepared to access some stores providing only the old -fashionned message number access method. - -Basically, we have two choices: - -1) Accessing messages using (mailbox) Unique ID (UID) - - A UID is a string identifier associated to a message, which is - guaranteed to be unique within its parent folder and which will not - change between sessions. - -2) Accessing messages using Message ID - - A Message ID is a string identifier associated to a messages which - is guaranteed to be unique in the world, that is, no other message - can have the same Message ID. The message ID is defined in RFC 822, - and is stored as the message header "Message-id" - -Method (1) already exists in IMAP. -It is quite simple to define on local stores (MH, mbox, ....) but it -may not resist to message modification by other MUA. -Methods based on Message-id matching or message content checksum seem -to be the best one. Using an "X-" header is another possibility for -non read-only folders. A combination of these three methods may be the -most reliable solution. -The UID is impossible to implement in a POP3 store provider. - -(2) Can be used with IMAP, but would be very ineficient. -The main issue with this method is its dependancy upon other MUAs and -MTAs. Message-id is set before or during message transport. Moreover, -some rfc822 compliant messages may not even have any Message-id -header. -These are major issues when accessing read-only stores. -The M-ID is also impossible to implement in a POP3 store provider. - - -We may not rely on external MUA and MTA to guarentee the uniqueness of -the identifier . We may loose messages by never being able to read them -if two had the same uid. It would be possible to find workarounds, but -it could make Camel use a bit tricky. - -Given that most users will use IMAP or a database based store as their -main mail store, and given that this stores allow UID very -easily, I suggest that we use method (1). Discussion is still open, -though. - -Here are the public methods I propose to add to CamelFolder: - -gboolean camel_folder_supports_uid (CamelFolder *folder) - returns true if the folder can get messages - by their uid. - -gchar * camel_folder_get_uid_by_number (CamelFolder *folder, gint message_number) - return the uid of message which number in the folder - is %message_number. - -gchar * camel_folder_get_message_uid (CamelFolder *folder, CamelMimeMessage *message) - return the uid of the message within the folder. - -CamelMimeMessage *camel_folder_get_message_by_uid (CamelFolder *folder, gchar *uid) - return the message which uid is %uid - -In addition, the CamelMessage Class will have a new public method - -gchar * camel_mime_message_get_uid (CamelMimeMessage *message) - return the uid associated to the message in its physical parent - folder. - - - -B) Handling message references in (v)folders. ---------------------------------------------- - - -We want the future Gnome mailer to be able to build (virtual) folders -holding references to messages physically located in other -folders. More generally, we would like folders to be able to hold: - -1) messages -2) subfolders -3) references to messages - -(1) and (2) are already implemented in Camel because most mail stores -can hold messages and/or subfolders. - -(3) is a different issue, because no existing mail store can currently -hold, within folders, references to messages in other folders. -It will thus be a specific gnome-mailer extension. - - -One of the main issue is to determine what kind of behaviour we expect -from folders holding references. Here is a possible API. - -( the world (v)folder is used to distinguish between the physical -parent folder and the folder holding a reference to the message, when -a confusion may arise) - -Addition to CamelFolder: - -gboolean camel_folder_can_hold_references (CamelFolder *folder) - return true if the folder can contain references - -void camel_folder_add_reference_by_uid (CamelFolder *folder, gchar *folder_url, gchar *message_uid) - add a reference into a folder. %folder_url is the url of - the folder, %message_uid is the uid of the message within - its physical parent folder. - -void camel_folder_add_reference_by_message (CamelFolder *folder, CamelMessage *message) - add a reference. The place where the reference points - to is found using CamelMessage methods - -void camel_folder_remove_reference_by_uid (CamelFolder *folder, gchar *uid) - remove a message reference form a folder. Reference - is identified using its uid within the folder. - -gboolean camel_folder_uid_is_reference (CamelFolder *folder, gchar *uid) - return true if the message corresponding to the uid is a reference. - -Then all usual operations on the folder act if the message was -actually physically stored in this folder. For example, when the mailer -uses camel_folder_get_message_by_uid onto the (v)folder, the actual -message is retreived from its physical store. - -As you can see, the uid of the message within its physical parent -folder is different than its uid within the (v)folder. This is because -there is no way to guarantee that the uids of two messages in two -different folders would be different. Using references on this two -message in the same vfolder would break uniqueness of the uid in the -(v)folder. - -A couple of other methods could be defined but all the basics are -described here. - -This draft API is far from complete nor perfect, and is described here -only to stimulate discussions before the actual implementation. - - -The question now is to know how we store references. There are basically -two ways: - -1) references are stored using the URL of the physical folder - and the uid of the message within the folder - -2) a list of reference is kept, and in this list, reference are stored -as in (1). Folders would refer to the actual message using index in -the list - - - -The main problem with (1) is that references get lost as soon -as the actual message is moved. There is no way to find in which -folders references to the message exist. - -(2) is a way to solve this issue. When messages are used, Camel looks -in the list to see if the message is refered somewhere, and actualize -the URL and the uid with their new values. - -The problem with (2) is that we need to keep this information in a file -and libraries writing automatically to files are generally a bad idea. - -As in additional remark, it is clear that Camel will only be able to -hold references to messages on stores supporting UIDs. - - -Thanks in advance for your comments and ideas, - - - Bertrand - - --- - -[1] : http://www.selequa.com/%7epurp/gnomail/mail2db.html -[2] : http://www.selequa.com/%7epurp/gnomail/dbRecFmt.html -[3] : http://www.gnome.org/mailing-lists/archives/gnome-mailer-list/1999-April/0248.shtml diff --git a/devel-docs/query/virtual-folder-in-depth.sgml b/devel-docs/query/virtual-folder-in-depth.sgml deleted file mode 100644 index d3e3e0504b..0000000000 --- a/devel-docs/query/virtual-folder-in-depth.sgml +++ /dev/null @@ -1,407 +0,0 @@ - - - - -
- - - - Giao - Nguyen - - - - An in-depth look at the virtual folder mechanism - - - This document describes a different way of approaching mail - organization and how all things are possible in this brave new - world. This document does not describe physical storage issues - nor interface issues. - - - Historically mail has been organized into folders. These - folders usually mapped to a single storage medium. The - relationship between mail organization and storage medium was - one to one. There was one mail organization for every storage - medium. This scheme had its limitations. - - - Efforts at categorizations are only meaningful at the instance that - one categorized. To find any piece of data, regardless of how well - it was categorized, required some amount of searching. Therefore, any - attempts to nullify searching is doomed to fail. It's time to embrace - searching as a way of life. - - - These are the terms and their definitions. The example rules used are - based on the syntax for VM (http://www.wonderworks.com/vm/) by Kyle - Jones whose ideas form the basis for this. I'm only adding the - existence of summary files to aid in scaling. I currently use VM and - it's virtual-folder rules for my daily mail purposes. To date, my only - complaints are speed (it has no caches) and for the unitiated, it's - not very user-friendly. - - - Comments, questions, rants, etc. should be directed at Giao Nguyen - (grail@cafebabe.org) who will try to address issues in a timely - manner. - - - - - - - Definitions - - Store - - A location where mail can be found. This may be a file (Berkeley - mbox), directory (MH), IMAP server, POP3 server, Exchange server, - Lotus Notes server, a stack of Post-Its by your monitor fed through - some OCR system. - - - - - Message - - An individual mail message. - - - - Vfolder - - A group of messages sharing some commonality. This is the result of a - query. The vfolder maybe contained in a store, but it is not necessary - that a store holds only one vfolder. There is always an implicit - vfolder rule which matches all messages. A store contains the vfolder - which is the result of the query (any). It's short for virtual folder - or maybe view folder. I dunno. - - - - Default-vfolder - - The vfolder defined by (any) applied to the store. This is not the - inbox. The inbox could easily be defined by a query. A default rule - for the inbox could be (new) but it doesn't have to be. Mine happens - to be (or (unread) (new)). - - - - Folder - - The classical mail folder approach: one message organization per - store. - - - - Query - - A search for messages. The result of this is a vfolder. There are two - kinds of queries: named queries and lambda queries. More on this - later. - - - - Summary file - - An external file that contains pointers to messages which are matches - for a named query. In addition to pointers, the summary file should - also contain signatures of the store for sanity checks. When the term - "index" is used as a verb, it means to build a summary file for a - given name-value pair. - - - - - - - Queries - - Named queries are analogous to classical mail folders. Because named - queries maybe reused, summary files are kept as caches to reduce - the overall cost of viewing a vfolder. Summary files are superior to - folders in that they allow for the same messages to appear in multiple - vfolders without message duplications. Duplications of messages - defeats attempts at tagging a message with additional user information - like annotations. Named queries will define folders. - - - Lambda queries are similar to named queries except that they have no - name. These are created on the fly by the user to filter out or - include certain messages. - - - All queries can be layered on top of each other. A lambda query can be - layered on a named query and a named query can be layered on a lambda - query. The possibilities are endless. - - - The layerings can be done as boolean operations (and, or, not). Short - circuiting should be used. - - - Examples: - -(and (author "Giao") - (unread)) - - The (unread) query should only be evaluated on the results of (author - "Giao"). - -(or (author "Giao") - (unread)) - - Both of these queries should be evaluated. Any matches are added to the - resulting vfolder. - - - - - - Summary files - - Summary files are only meaningful when applied to the context of the - default-vfolder of a store. - - - Summary files should be generated for queries of the form: - -(function "constant value") - - Summary files should never be generated for queries of the form: - - (function (function1)) - - (and (function "value") - (another-function "another value")) - - Given a query of the form: - - (and (function "value") - (another-function "another value")) - - The system should use one summary file for (function "value") and - another summary file for (another-function "another value"). I will - call the prior form the "plain form". - - - It should be noted that the signature of the store should be based on - the assumption that new data may have been added to the store since - the application generated the summary file. Signatures generated on - the entirety of the store will most likely be meaningless for things - like POP/IMAP servers. - - - - - - Incremental indexing - - When new messages are detected, all known queries should be evaluated - on the new messages. vfolders should be notified of new messages that - are positive matches for their queries. The indexes generated by this - process should be merged into the current indexes for the vfolder. - - - - - - Can I have multiple stores? - - I don't see why not. Again, the inbox is a vfolder so you can get a - unified inbox consisting of all new mail sent to all your stores or - your can get inboxes for each store or any combination your heart - desire. You get your cake, eat it, and someone else cleans the dishes! - - - - - - Why all this? - - Consider the dynamic nature of the following query: - -(and (author "Giao") - (sent-after (today-midnight))) - - today-midnight would be a function that is evaluated at run-time to - calculate the appropriate object. - - - - - - Scenarios of usage and their solutions - - Mesage alterations - - This is a fuzzy area that should be left to the UI to handle. Messages - are altered. Read status are altered when a new message is read for - example. How do we handle this if our query is for unread messages? - Upon viewing the state would change. - - - One idea is to not evaluate the queries unless we're changing between - vfolder views. This assumes that one can only view a particular - vfolder at a time. For multi-vfolder viewing, a message change should - propagate through the vfolder system. Certain effects (as in our - example) would not be intuitive. - - - It would not be a clean solution to make special cases but they may be - necessary where certain defined fields are ignored when they are - changed. Some combination of the above rules can be used. I don't - think it's an easy solution. - - - - Message inclusion and exclusion - - Messages are included and excluded also with queries. The final query - will have the form of: - - (and (author "Giao") - (criteria value) - (not (criteria other-value))) - - Userland criterias may be a label of some sort. These may be userland - labels or Message-IDs. What are the performance issues involved in - this? With short circuiting, it's not a major problem. - - - The criterias and values are determined by the UI. The vfolder - mechanism isn't concerned with such issues. - - - Messages can be included and excluded at will. The idea is often - called "arbitrary inclusion/exclusion". This can be done by - Message-IDs or other fields. It's been noted that Message-IDs are not - unique. - - - I propose that any given vfolder is allocated an inclusion label and an - exclusion label. These should be randomly generated. This should be - part of the vfolder description. It should be noted that the vfolder - description has not been drafted yet. - - - The result is such that the rules for a given named query is: - - (and (user-query) - (label inclusion-label) - (not exclusion-label)) - - - - - Query scheduling - - Consider the following extremely dynamic queries: - - A: - (and (author "Giao") - (sent-after (today-midnight))) - - B: - (and (sent-after (today-midnight)) - (author "Giao")) - - C: - (or (author "Giao") - (sent-after (today-midnight))) - - Query A would be significantly faster because (author "Giao") is not - dynamic. A summary file could be generated for this query. Query B is - slow and can be optimized if there was a query compiler of some - sort. Query C demonstrates a query in which there is no good - optimization which can be applied. These come with a certain amount of - baggage. - - - It seems then that for boolean 'and' operations, plain forms should be - moved forward and other queries should be moved such that they are - evaluated later. I would expect that the majority of queries would be - of the plain form. - - - First is that the summary file is tied to the query and the store - where the query originates from. Second, a hashing function for - strings needs to be calculated for the query so that the query and the - summary file can be associated. This hashing function could be similar - to the hashing function described in Rob Pike's "The Practice of - Programming". (FIXME: Stick page number here) - - - - Archives - - Many people are concerned that archives won't be preserved, archives - aren't supported, and many other archive related issues. This is the - short version. - - - Archives are just that, archives. Archives are stores. Take your - vfolder, export it to a store. You are done. If you load up the store - again, then the default-vfolder of that store is the view of the - vfolder, except the query is different. - - - The point to vfolder is not to do away with classical folder - representation but to move the queries to the front where it would - make data management easier for people who don't think in terms of - files but in terms of queries because ordinary people don't think in - terms of files. - - - - - - - Miscellany - - Annotations - - There should be a scheme to add annotations to messages. Common mail - user agents have used a tag in the message header to mark messages as - read/unread for example. Extending on this we have the ability to add - our own data to a message to add meaning to it. If we have a good - scheme for doing this, new possibilities are opened. - - - Keywords - - When sending a message, a message could have certain keywords attached - to it. While this can be done with the subject line, the subject line - has a tendency to be munged by other mail applications. One popular - example is the "[rR]e:" prefix. Using the subject line also breaks the - "contract" with other mail user agents. Using keywords in another - field in the message header allows the sender to assist the recipient - in organizing data automatically. Note that the sender can only - provide hints as the sender is unlikely to know the organization - schemes of the recipient. - - - - - Scope - - Let us assume that we have multiple stores. Does a query work on a - given store? Or does it work on all stores? Or is it configurable such - that a query can work on a user-selected list of stores? - - - - - - - Alternatives to the above - - Jim Meyer (purp@selequa.com) is putting some notes on where - annotations needs to be located. They'll be located here as well as - any contributions I may have to them. - - -
diff --git a/devel-docs/query/virtual-folder-in-depth.txt b/devel-docs/query/virtual-folder-in-depth.txt deleted file mode 100644 index 01718a5f05..0000000000 --- a/devel-docs/query/virtual-folder-in-depth.txt +++ /dev/null @@ -1,309 +0,0 @@ -TITLE: An in-depth look at the virtual folder mechanism -AUTHOR: Giao Nguyen - -* introduction - -This document describes a different way of approaching mail -organization and how all things are possible in this brave new -world. This document does not describe physical storage issues nor -interface issues. - -Historically mail has been organized into folders. These folders -usually mapped to a single storage medium. The relationship between -mail organization and storage medium was one to one. There was one -mail organization for every storage medium. This scheme had its -limitations. - -Efforts at categorizations are only meaningful at the instance that -one categorized. To find any piece of data, regardless of how well -it was categorized, required some amount of searching. Therefore, any -attempts to nullify searching is doomed to fail. It's time to embrace -searching as a way of life. - -These are the terms and their definitions. The example rules used are -based on the syntax for VM (http://www.wonderworks.com/vm/) by Kyle -Jones whose ideas form the basis for this. I'm only adding the -existence of summary files to aid in scaling. I currently use VM and -it's virtual-folder rules for my daily mail purposes. To date, my only -complaints are speed (it has no caches) and for the unitiated, it's -not very user-friendly. - -Comments, questions, rants, etc. should be directed at Giao Nguyen - who will try to address issues in a timely -manner. - -* Definitions - -** store - -A location where mail can be found. This may be a file (Berkeley -mbox), directory (MH), IMAP server, POP3 server, Exchange server, -Lotus Notes server, a stack of Post-Its by your monitor fed through -some OCR system. - -** message - -An individual mail message. - -** vfolder - -A group of messages sharing some commonality. This is the result of a -query. The vfolder maybe contained in a store, but it is not necessary -that a store holds only one vfolder. There is always an implicit -vfolder rule which matches all messages. A store contains the vfolder -which is the result of the query (any). It's short for virtual folder -or maybe view folder. I dunno. - -** default-vfolder - -The vfolder defined by (any) applied to the store. This is not the -inbox. The inbox could easily be defined by a query. A default rule -for the inbox could be (new) but it doesn't have to be. Mine happens -to be (or (unread) (new)). - -** folder - -The classical mail folder approach: one message organization per -store. - -** query - -A search for messages. The result of this is a vfolder. There are two -kinds of queries: named queries and lambda queries. More on this -later. - -** summary file - -An external file that contains pointers to messages which are matches -for a named query. In addition to pointers, the summary file should -also contain signatures of the store for sanity checks. When the term -"index" is used as a verb, it means to build a summary file for a -given name-value pair. - -* Queries - -Named queries are analogous to classical mail folders. Because named -queries maybe reused, summary files are kept as caches to reduce -the overall cost of viewing a vfolder. Summary files are superior to -folders in that they allow for the same messages to appear in multiple -vfolders without message duplications. Duplications of messages -defeats attempts at tagging a message with additional user information -like annotations. Named queries will define folders. - -Lambda queries are similar to named queries except that they have no -name. These are created on the fly by the user to filter out or -include certain messages. - -All queries can be layered on top of each other. A lambda query can be -layered on a named query and a named query can be layered on a lambda -query. The possibilities are endless. - -The layerings can be done as boolean operations (and, or, not). Short -circuiting should be used. - -Examples: - -(and (author "Giao") - (unread)) - -The (unread) query should only be evaluated on the results of (author -"Giao"). - -(or (author "Giao") - (unread)) - -Both of these queries should be evaluated. Any matches are added to the -resulting vfolder. - -* Summary files - -Summary files are only meaningful when applied to the context of the -default-vfolder of a store. - -Summary files should be generated for queries of the form: - -(function "constant value") - -Summary files should never be generated for queries of the form: - -(function (function1)) - -(and (function "value") - (another-function "another value")) - -Given a query of the form: - -(and (function "value") - (another-function "another value")) - -The system should use one summary file for (function "value") and -another summary file for (another-function "another value"). I will -call the prior form the "plain form". - -It should be noted that the signature of the store should be based on -the assumption that new data may have been added to the store since -the application generated the summary file. Signatures generated on -the entirety of the store will most likely be meaningless for things -like POP/IMAP servers. - -* Incremental indexing - -When new messages are detected, all known queries should be evaluated -on the new messages. vfolders should be notified of new messages that -are positive matches for their queries. The indexes generated by this -process should be merged into the current indexes for the vfolder. - -* Can I have multiple stores? - -I don't see why not. Again, the inbox is a vfolder so you can get a -unified inbox consisting of all new mail sent to all your stores or -your can get inboxes for each store or any combination your heart -desire. You get your cake, eat it, and someone else cleans the dishes! - -* Why all this? - -Consider the dynamic nature of the following query: - -(and (author "Giao") - (sent-after (today-midnight))) - -today-midnight would be a function that is evaluated at run-time to -calculate the appropriate object. - -* Scenarios of usage and their solutions - -** Mesage alterations - -This is a fuzzy area that should be left to the UI to handle. Messages -are altered. Read status are altered when a new message is read for -example. How do we handle this if our query is for unread messages? -Upon viewing the state would change. - -One idea is to not evaluate the queries unless we're changing between -vfolder views. This assumes that one can only view a particular -vfolder at a time. For multi-vfolder viewing, a message change should -propagate through the vfolder system. Certain effects (as in our -example) would not be intuitive. - -It would not be a clean solution to make special cases but they may be -necessary where certain defined fields are ignored when they are -changed. Some combination of the above rules can be used. I don't -think it's an easy solution. - -** Message inclusion and exclusion - -Messages are included and excluded also with queries. The final query -will have the form of: - -(and (author "Giao") - (criteria value) - (not (criteria other-value))) - -Userland criterias may be a label of some sort. These may be userland -labels or Message-IDs. What are the performance issues involved in -this? With short circuiting, it's not a major problem. - -The criterias and values are determined by the UI. The vfolder -mechanism isn't concerned with such issues. - -Messages can be included and excluded at will. The idea is often -called "arbitrary inclusion/exclusion". This can be done by -Message-IDs or other fields. It's been noted that Message-IDs are not -unique. - -I propose that any given vfolder is allocated an inclusion label and an -exclusion label. These should be randomly generated. This should be -part of the vfolder description. It should be noted that the vfolder -description has not been drafted yet. - -The result is such that the rules for a given named query is: - -(and (user-query) - (label inclusion-label) - (not exclusion-label)) - -** Query scheduling - -Consider the following extremely dynamic queries: - -A: -(and (author "Giao") - (sent-after (today-midnight))) - -B: -(and (sent-after (today-midnight)) - (author "Giao")) - -C: -(or (author "Giao") - (sent-after (today-midnight))) - -Query A would be significantly faster because (author "Giao") is not -dynamic. A summary file could be generated for this query. Query B is -slow and can be optimized if there was a query compiler of some -sort. Query C demonstrates a query in which there is no good -optimization which can be applied. These come with a certain amount of -baggage. - -It seems then that for boolean 'and' operations, plain forms should be -moved forward and other queries should be moved such that they are -evaluated later. I would expect that the majority of queries would be -of the plain form. - -First is that the summary file is tied to the query and the store -where the query originates from. Second, a hashing function for -strings needs to be calculated for the query so that the query and the -summary file can be associated. This hashing function could be similar -to the hashing function described in Rob Pike's "The Practice of -Programming". (FIXME: Stick page number here) - -** Archives - -Many people are concerned that archives won't be preserved, archives -aren't supported, and many other archive related issues. This is the -short version. - -Archives are just that, archives. Archives are stores. Take your -vfolder, export it to a store. You are done. If you load up the store -again, then the default-vfolder of that store is the view of the -vfolder, except the query is different. - -The point to vfolder is not to do away with classical folder -representation but to move the queries to the front where it would -make data management easier for people who don't think in terms of -files but in terms of queries because ordinary people don't think in -terms of files. - -* Miscellany - -** Annotations - -There should be a scheme to add annotations to messages. Common mail -user agents have used a tag in the message header to mark messages as -read/unread for example. Extending on this we have the ability to add -our own data to a message to add meaning to it. If we have a good -scheme for doing this, new possibilities are opened. - -*** Keywords - -When sending a message, a message could have certain keywords attached -to it. While this can be done with the subject line, the subject line -has a tendency to be munged by other mail applications. One popular -example is the "[rR]e:" prefix. Using the subject line also breaks the -"contract" with other mail user agents. Using keywords in another -field in the message header allows the sender to assist the recipient -in organizing data automatically. Note that the sender can only -provide hints as the sender is unlikely to know the organization -schemes of the recipient. - -** Scope - -Let us assume that we have multiple stores. Does a query work on a -given store? Or does it work on all stores? Or is it configurable such -that a query can work on a user-selected list of stores? - -* Alternatives to the above - -Jim Meyer is putting some notes on where -annotations needs to be located. They'll be located here as well as -any contributions I may have to them. diff --git a/doc/.cvsignore b/doc/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/doc/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/doc/C/.cvsignore b/doc/C/.cvsignore deleted file mode 100644 index cba1534920..0000000000 --- a/doc/C/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -Makefile -Makefile.in -evolution-guide -evolution-guide.junk diff --git a/doc/C/Makefile.am b/doc/C/Makefile.am deleted file mode 100644 index 0d02ac056f..0000000000 --- a/doc/C/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -evolution_helpdir = $(datadir)/gnome/help/evolution/C - -SGML_FILES = \ - apx-authors.sgml \ - apx-bugs.sgml \ - apx-fdl.sgml \ - apx-gloss.sgml \ - config-prefs.sgml \ - config-setupassist.sgml \ - config-sync.sgml \ - evolution-guide.sgml \ - preface.sgml \ - usage-calendar.sgml \ - usage-contact.sgml \ - usage-mail.sgml \ - usage-mainwindow.sgml \ - usage-sync.sgml - - -EXTRA_DIST = \ - $(SGML_FILES) - -all: evolution-guide - -evolution-guide: $(SGML_FILES) - -db2html evolution-guide.sgml - -dist-hook: - mkdir $(distdir)/evolution-guide - -cp evolution-guide/*.html evolution-guide/*.css \ - $(distdir)/evolution-guide - mkdir $(distdir)/fig - -cp fig/*.png $(distdir)/fig - -install-data-local: evolution-guide - $(top_srcdir)/mkinstalldirs $(DESTDIR)$(evolution_helpdir)/fig - -for file in $(srcdir)/evolution-guide/*.html $(srcdir)/evolution-guide/*.css; do \ - basefile=`basename $$file`; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(evolution_helpdir)/$$basefile; \ - done - -for file in $(srcdir)/fig/*.png; do \ - basefile=`basename $$file`; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(evolution_helpdir)/fig/$$basefile; \ - done - -evolution.ps: evolution.sgml - -db2ps $< - -evolution.rtf: evolution.sgml - -db2rtf $< - diff --git a/doc/C/apx-authors.sgml b/doc/C/apx-authors.sgml deleted file mode 100644 index e064276be3..0000000000 --- a/doc/C/apx-authors.sgml +++ /dev/null @@ -1,74 +0,0 @@ - - - Authors - - Evolution was written by: - - Seth Alves: alves@helixcode.com - Anders Carlssonandersca@gnu.org - Damon Chaplin:damon@helixcode.com - Clifford R. Conover rusty@zootweb.com - Miguel De Icaza: miguel@helixcode.com - Arturo Espinoza arturo@nucleu.unam.mx - Larry Ewing: lewing@helixcode.com - Bertrand Guiheneuf: bertrand@helixcode.com - Tuomas Kuosmanen: tigert@gimp.org - Christopher J. Lahey: clahey@helixcode.com - Matthew Loper: matt@helixcode.com - Federico Mena: federico@helixcode.com - Eskil Heyn Olsendeity@eski.dk - Nat Friedman: nat@helixcode.com - Ettore Perazzoli:ettore@helixcode.com - Russell Steinthal: rms39@columbia.edu - Peter Teichman: peter@helixcode.com - Chris Toshok: toshok@helixcode.com - Radek Doulik: rodo@helixcode.com - Dan Winship: danw@helixcode.com - Michael Zucchi: notzed@helixcode.com - -and other dedicated GNOME programmers. - - - The Evolution code owes a great debt - to the GNOME-pim and - GNOME-Calendar applications, and to - KHTMLW. The developers of - Evolution acknowledge the efforts - and contributions of all who worked on those projects. - - - - For more information please visit the - Evolution Web page. Please send all comments, - suggestions, and bug reports to the GNOME bug tracking - database. Instructions for submitting bug reports can be - found on-line at - http://bugs.gnome.org/Reporting.html. You can also use - command bug-buddy for submitting bug reports. - - - This manual was written by Aaron Weber - (aaron@helixcode.com) and Kevin Breit - (battery841@mypad.com) with the help of the - application programmers and the GNOME Documentation Project. - Please send all comments and suggestions regarding the manual to - the GNOME Documentation Project at - docs@gnome.org. You can also add your comments - online by using GNOME Documentation - Status Table. - - - - - - - - diff --git a/doc/C/apx-bugs.sgml b/doc/C/apx-bugs.sgml deleted file mode 100644 index e7a501acba..0000000000 --- a/doc/C/apx-bugs.sgml +++ /dev/null @@ -1,19 +0,0 @@ - - - Known bugs and limitations - - - This appendix describes known bugs and limitations of - Evolution. Please use the GNOME - Bug Report Tool (known as - bug-buddy at the command line) if you find one - we have not listed. - - - - - The bugs are many, but the application is young, and this is to - be expected. - - - diff --git a/doc/C/apx-fdl.sgml b/doc/C/apx-fdl.sgml deleted file mode 100644 index 8b49729cfc..0000000000 --- a/doc/C/apx-fdl.sgml +++ /dev/null @@ -1,678 +0,0 @@ - - GNU Free Documentation License - - Version 1.1, March 2000 - - - - Copyright © 2000 -
- Free Software Foundation, Inc. - 59 Temple Place, Suite 330, - Boston, - MA - 02111-1307 - USA -
- Everyone is permitted to copy and distribute verbatim copies of this license - document, but changing it is not allowed. -
- - - - 0. PREAMBLE - - - The purpose of this License is to make a manual, textbook, or other - written document "free" in the sense of freedom: to assure everyone - the effective freedom to copy and redistribute it, with or without - modifying it, either commercially or noncommercially. Secondarily, - this License preserves for the author and publisher a way to get - credit for their work, while not being considered responsible for - modifications made by others. - - - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. It - complements the GNU General Public License, which is a copyleft - license designed for free software. - - - - We have designed this License in order to use it for manuals for free - software, because free software needs free documentation: a free - program should come with manuals providing the same freedoms that the - software does. But this License is not limited to software manuals; it - can be used for any textual work, regardless of subject matter or - whether it is published as a printed book. We recommend this License - principally for works whose purpose is instruction or reference. - - - - - 1. APPLICABILITY AND DEFINITIONS - - - This License applies to any manual or other work that contains a - notice placed by the copyright holder saying it can be distributed - under the terms of this License. The "Document" , below, refers to any such - manual or work. Any member of the public is a licensee, and is - addressed as "you". - - - - A "Modified Version" of the - Document means any work containing the Document or a portion of it, - either copied verbatim, or with modifications and/or translated into - another language. - - - - A "Secondary Section" is a named - appendix or a front-matter section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the Document's overall subject (or to - related matters) and contains nothing that could fall directly within - that overall subject. (For example, if the Document is in part a textbook of - mathematics, a Secondary Section - may not explain any mathematics.) The relationship could be a matter - of historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - - - The "Invariant Sections" are - certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in the notice that - says that the Document is released - under this License. - - - - The "Cover Texts" are certain - short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that - says that the Document is released - under this License. - - - - A "Transparent" copy of the - Document means a machine-readable - copy, represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly and - straightforwardly with generic text editors or (for images composed of - pixels) generic paint programs or (for drawings) some widely available - drawing editor, and that is suitable for input to text formatters or - for automatic translation to a variety of formats suitable for input - to text formatters. A copy made in an otherwise Transparent file format whose markup - has been designed to thwart or discourage subsequent modification by - readers is not Transparent. A - copy that is not "Transparent" - is called "Opaque". - - - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, SGML - or XML using a publicly available DTD, and standard-conforming simple - HTML designed for human modification. Opaque formats include - PostScript, PDF, proprietary formats that can be read and edited only - by proprietary word processors, SGML or XML for which the DTD and/or - processing tools are not generally available, and the - machine-generated HTML produced by some word processors for output - purposes only. - - - - The "Title Page" means, for a - printed book, the title page itself, plus such following pages as are - needed to hold, legibly, the material this License requires to appear - in the title page. For works in formats which do not have any title - page as such, "Title Page" - means the text near the most prominent appearance of the work's title, - preceding the beginning of the body of the text. - - - - - - 2. VERBATIM COPYING - - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License applies - to the Document are reproduced in - all copies, and that you add no other conditions whatsoever to those - of this License. You may not use technical measures to obstruct or - control the reading or further copying of the copies you make or - distribute. However, you may accept compensation in exchange for - copies. If you distribute a large enough number of copies you must - also follow the conditions in section - 3. - - - - You may also lend copies, under the same conditions stated above, and - you may publicly display copies. - - - - - - 3. COPYING IN QUANTITY - - - If you publish printed copies of the Document numbering more than 100, and - the Document's license notice - requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover - Texts on the front cover, and Back-Cover Texts on the back cover. Both - covers must also clearly and legibly identify you as the publisher of - these copies. The front cover must present the full title with all - words of the title equally prominent and visible. You may add other - material on the covers in addition. Copying with changes limited to - the covers, as long as they preserve the title of the Document and satisfy these conditions, - can be treated as verbatim copying in other respects. - - - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto adjacent - pages. - - - - If you publish or distribute Opaque copies of the Document numbering more than 100, you - must either include a machine-readable Transparent copy along with each - Opaque copy, or state in or - with each Opaque copy a - publicly-accessible computer-network location containing a complete - Transparent copy of the Document, free of added material, which - the general network-using public has access to download anonymously at - no charge using public-standard network protocols. If you use the - latter option, you must take reasonably prudent steps, when you begin - distribution of Opaque copies - in quantity, to ensure that this Transparent copy will remain thus - accessible at the stated location until at least one year after the - last time you distribute an Opaque copy (directly or through your - agents or retailers) of that edition to the public. - - - - It is requested, but not required, that you contact the authors of the - Document well before - redistributing any large number of copies, to give them a chance to - provide you with an updated version of the Document. - - - - - - 4. MODIFICATIONS - - - You may copy and distribute a Modified - Version of the Document - under the conditions of sections 2 - and 3 above, provided that you - release the Modified Version under - precisely this License, with the Modified - Version filling the role of the Document, thus licensing distribution - and modification of the Modified - Version to whoever possesses a copy of it. In addition, you - must do these things in the Modified - Version: - - - - - - A - - Use in the Title Page (and - on the covers, if any) a title distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed in - the History section of the Document). You may use the same - title as a previous version if the original publisher of that - version gives permission. - - - - - - - B - - List on the Title Page, as - authors, one or more persons or entities responsible for - authorship of the modifications in the Modified Version, together with at - least five of the principal authors of the Document (all of its principal - authors, if it has less than five). - - - - - - - C - - State on the Title Page - the name of the publisher of the Modified Version, as the - publisher. - - - - - - - D - - Preserve all the copyright notices of the Document. - - - - - - - E - - Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - - - - - - F - - Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified Version under the terms - of this License, in the form shown in the Addendum below. - - - - - - - G - - Preserve in that license notice the full lists of Invariant Sections and required - Cover Texts given in the - Document's license notice. - - - - - - - H - - Include an unaltered copy of this License. - - - - - - - I - - Preserve the section entitled "History", and its title, and add - to it an item stating at least the title, year, new authors, and - publisher of the Modified Version - as given on the Title - Page. If there is no section entitled "History" in the - Document, create one stating - the title, year, authors, and publisher of the Document as given on its Title Page, then add an item - describing the Modified - Version as stated in the previous sentence. - - - - - - - J - - Preserve the network location, if any, given in the Document for public access to a - Transparent copy of the - Document, and likewise the - network locations given in the Document for previous versions it - was based on. These may be placed in the "History" section. You - may omit a network location for a work that was published at - least four years before the Document itself, or if the - original publisher of the version it refers to gives permission. - - - - - - - K - - In any section entitled "Acknowledgements" or "Dedications", - preserve the section's title, and preserve in the section all - the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - - - - - - L - - Preserve all the Invariant - Sections of the Document, unaltered in their text - and in their titles. Section numbers or the equivalent are not - considered part of the section titles. - - - - - - - M - - Delete any section entitled "Endorsements". Such a section may - not be included in the Modified - Version. - - - - - - - N - - Do not retitle any existing section as "Endorsements" or to - conflict in title with any Invariant Section. - - - - - - - If the Modified Version includes - new front-matter sections or appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option designate - some or all of these sections as invariant. To do this, add their - titles to the list of Invariant - Sections in the Modified - Version's license notice. These titles must be distinct from - any other section titles. - - - - You may add a section entitled "Endorsements", provided it contains - nothing but endorsements of your Modified - Version by various parties--for example, statements of peer - review or that the text has been approved by an organization as the - authoritative definition of a standard. - - - - You may add a passage of up to five words as a Front-Cover Text, and a passage of up - to 25 words as a Back-Cover - Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of - Front-Cover Text and one of - Back-Cover Text may be added by - (or through arrangements made by) any one entity. If the Document already includes a cover text - for the same cover, previously added by you or by arrangement made by - the same entity you are acting on behalf of, you may not add another; - but you may replace the old one, on explicit permission from the - previous publisher that added the old one. - - - - The author(s) and publisher(s) of the Document do not by this License give - permission to use their names for publicity for or to assert or imply - endorsement of any Modified Version - . - - - - - - 5. COMBINING DOCUMENTS - - - You may combine the Document with - other documents released under this License, under the terms defined - in section 4 above for modified - versions, provided that you include in the combination all of the - Invariant Sections of all of the - original documents, unmodified, and list them all as Invariant Sections of your combined - work in its license notice. - - - - The combined work need only contain one copy of this License, and - multiple identical Invariant - Sections may be replaced with a single copy. If there are - multiple Invariant Sections with - the same name but different contents, make the title of each such - section unique by adding at the end of it, in parentheses, the name of - the original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in the - list of Invariant Sections in the - license notice of the combined work. - - - - In the combination, you must combine any sections entitled "History" - in the various original documents, forming one section entitled - "History"; likewise combine any sections entitled "Acknowledgements", - and any sections entitled "Dedications". You must delete all sections - entitled "Endorsements." - - - - - - 6. COLLECTIONS OF DOCUMENTS - - - You may make a collection consisting of the Document and other documents released - under this License, and replace the individual copies of this License - in the various documents with a single copy that is included in the - collection, provided that you follow the rules of this License for - verbatim copying of each of the documents in all other respects. - - - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert a - copy of this License into the extracted document, and follow this - License in all other respects regarding verbatim copying of that - document. - - - - - - 7. AGGREGATION WITH INDEPENDENT WORKS - - - A compilation of the Document or - its derivatives with other separate and independent documents or - works, in or on a volume of a storage or distribution medium, does not - as a whole count as a Modified - Version of the Document, - provided no compilation copyright is claimed for the compilation. - Such a compilation is called an "aggregate", and this License does not - apply to the other self-contained works thus compiled with the Document , on account of their being - thus compiled, if they are not themselves derivative works of the - Document. If the Cover Text requirement of section 3 is applicable to these copies - of the Document, then if the Document is less than one quarter of the - entire aggregate, the Document's - Cover Texts may be placed on - covers that surround only the Document within the aggregate. Otherwise - they must appear on covers around the whole aggregate. - - - - - - 8. TRANSLATION - - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations - requires special permission from their copyright holders, but you may - include translations of some or all Invariant Sections in addition to the - original versions of these Invariant - Sections. You may include a translation of this License - provided that you also include the original English version of this - License. In case of a disagreement between the translation and the - original English version of this License, the original English version - will prevail. - - - - - - 9. TERMINATION - - - You may not copy, modify, sublicense, or distribute the Document except as expressly provided - for under this License. Any other attempt to copy, modify, sublicense - or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, from - you under this License will not have their licenses terminated so long - as such parties remain in full compliance. - - - - - - 10. FUTURE REVISIONS OF THIS LICENSE - - - The Free - Software Foundation may publish new, revised versions of the - GNU Free Documentation License from time to time. Such new versions - will be similar in spirit to the present version, but may differ in - detail to address new problems or concerns. See http://www.gnu.org/copyleft/. - - - - Each version of the License is given a distinguishing version - number. If the Document specifies - that a particular numbered version of this License "or any later - version" applies to it, you have the option of following the terms and - conditions either of that specified version or of any later version - that has been published (not as a draft) by the Free Software - Foundation. If the Document does - not specify a version number of this License, you may choose any - version ever published (not as a draft) by the Free Software - Foundation. - - - - - - Addendum - - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and - license notices just after the title page: - - - - Copyright © YEAR YOUR NAME. - - - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 or - any later version published by the Free Software Foundation; with the - Invariant Sections being LIST - THEIR TITLES, with the Front-Cover - Texts being LIST, and with the Back-Cover Texts being LIST. A copy - of the license is included in the section entitled GNU Free - Documentation License. - - - - If you have no Invariant - Sections, write "with no Invariant Sections" instead of saying - which ones are invariant. If you have no Front-Cover Texts, write "no - Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise - for Back-Cover Texts. - - - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public - License, to permit their use in free software. - - - - -
\ No newline at end of file diff --git a/doc/C/apx-gloss.sgml b/doc/C/apx-gloss.sgml deleted file mode 100644 index 55ab3ed8a1..0000000000 --- a/doc/C/apx-gloss.sgml +++ /dev/null @@ -1,284 +0,0 @@ - - - Glossary - - - Attachment - - - Any file sent along with an email. Attachments may be embedded in - a message or appended to it. - - - - - - Automatic Indexing - - - Pre-sorting procedure that allows - Evolution to refer to data quickly. - It enables faster searches and decreases memory usage for - data displays. - - - - - - Bcc (Blind Carbon Copy) - - - A way of addressing a message. Bcc is used to send a group of - people an e-mail, while hiding their names and addresses from each - other. - - - - - - Cc (Carbon Copy) - - - Carbon-copies are used to send a 3rd party a copy of the e-mail, - so they an keep up to date on a conversation, without being in the - To: list. - - - - - - - Emoticon - - - Also called smileys, emoticons are the little sideways faces made - of colons and parentheses which people use to convey emotion in email. - Examples: :-) or ;( . - - - - - - Evolution - - - Evolution is the GNOME - groupware application. - - - - - - Execute - - - To run a program. Any file that can be run is called an - executable. Evolution can download - executable attachments, but before they can be run, the files must - be marked as executable with a shell or file manager. This - security precaution prevents the automatic or accidental execution - of malicious programs. - - - - - - Filter - - - Within Evolution, a filter is a method - of sorting mail automatically. You can create filters to perform - one or more actions on a message that meets any (or all) of a wide - range of criteria. - - - - - - Forward - - - the user can send a third party a message - which was sent to the user originally. - - - - - - Groupware - - - Groupware is a term describing an application which helps groups - of people work together. Typically, a groupware application will - have several productivity features built into one program. - - - - - - Haiku - - - A Japanese form of poetry. Haiku are unrhymed, and - three lines long. The first and last lines should have five - syllables, and the second line seven syllables. The subject - matter is traditionally related to the seasons. - - - - - - HTML - - - Hyper-text Markup Language(HTML) is the layout - language which all webpages are written in. HTML can be used - inside of e-mails to insert images, justfiy text different ways, - and even include webpages inside the e-mail itself. - - - - - - Hot Key - - - Hot-keys are keyboard combinations used to do actions on a - computer instead of using the mouse to do the same action. - Hot-keys can speed up computer usage. - - - - - - iCal - - - iCal is the program which - Evolution uses to manage the calendar - section. - - - - - - - LDAP - - - LDAP is a protocol which allows a client to search through a large database - of addresses, phone numbers, and people, as an alternative to a physical - phone book. - - - - - - Mail Client - - - A mail client is the application with which a person reads and - sends e-mail. Its counterparts are the various types of mail - servers, which handle user authentication and direct messages from - sender to recipient. - - - - - - - Minicard - - - A format for the display of contact data. Similar in appearance - to a small business card. - - - - - - Nautilus - - - Nautilus is the next generation file - manager for GNOME being written by Eazel. - - - - - - Nickname - - - An alias for an e-mail address. - - - - - - Script - - - A program which is written in an interpreted language, which can - be executed. - - - - - - Shortcut Bar - - - The Shortcut Bar is where the user accesses - all the components of Evolution from. - - - - - - Signature - - - Signatures allow a user to specify a message to place at the bottom of - every email sent. A signature can be anything from a favorite quote to - a link to a webpage. - - - - - - - Spam - - - Spam: useless, unwanted e-mail. Spam normally comes in forms of - chain-letters and advertisements for unscrupulous websites or - services. Messages that are merely useless are called - "opt-in newsletters." - - - - - - vFolder - - - vFolders allow an e-mail to be shared among multiple folders, so - it appears that theres a copy of the e-mail in each folder. - - - - - diff --git a/doc/C/apx-gpl.sgml b/doc/C/apx-gpl.sgml deleted file mode 100644 index 7c7e4cd0f7..0000000000 --- a/doc/C/apx-gpl.sgml +++ /dev/null @@ -1,414 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - - - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - - The precise terms and conditions for copying, distribution and -modification follow. - - - - - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - - -NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - - END OF TERMS AND CONDITIONS - - - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - <one line to give the program's name and a brief idea of what it does.> -Copyright (C) < year> <name of author> - - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - - -Also add information on how to contact you by electronic and paper mail. - - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - - - - - - - - - - - - diff --git a/doc/C/config-prefs.sgml b/doc/C/config-prefs.sgml deleted file mode 100644 index e0f6dd0297..0000000000 --- a/doc/C/config-prefs.sgml +++ /dev/null @@ -1,570 +0,0 @@ - - - - - Advanced Configuration - - Perhaps your mail server has changed names. Perhaps you've - grown tired of a certain layout for your appointments. - Whatever the reason, you want to change your - Evolution settings. This chapter - will tell you how to do just that. - - - - Mail Settings - - To change your mail settings, first go to your - Inbox. Then select Mail - Settings from the Tools menu. - This will open the mail preferences - window, illustrated in . Mail Preferences are - separated into several categories: - - - Identity - - - This allows you to set - your name, email address, and other information. The - default values are the ones found on your system account. - - - - - Sources - - - Set your mail-checking protocols and servers here. - - - - - - Sources - - - Set your mail-checking protocols and servers here. - - - - - - News Servers - - - Specify your News Server preferences here. - - - - - - - - - - - -
- Preferences Dialog - - Setting mail preferences - - - -
- - - - - Identity Settings - - If you have only one email address, or use automatic - forwarding to funnel multiple addresses to one account, then - you will only need to configure one identity. You may, - however, want more that one. To alter an identity, click on - it in the Identity tab of the - Preferences window, and then click - Edit. To add a new identity, simply - click Add. - - - - In either case, you'll be presented with a dialog box with - four fields: - - - - Full Name: by default, this is the - same name as the full name described in your user - account on your computer. You can select another if you - wish. - - - - - Email address: Enter your email - address in this space. - - - - - Organization: If you send email as - a representative of a company or other organization, - enter its name here. - - - - - Signature file: You may choose a - small text file to be appended to every message that you - send. Typically, signature files include address or - other contact information, or a favorite quotation. - They should not be more than three lines long. - - - - - - - - - Network Settings - - In order to send mail with - Evolution, you need to connect to - your network. To do that, you'll need to know your user name - and password, what sort of mail sending and receiving - protocols your network uses, and the names of the servers - you'll be using. If you're switching from another groupware - or email program, you can almost certainly use the same - settings as you did with that program. Select the - Sources tab in the - Preferences window to tell - Evolution where you want to get - your mail, and click Transports to - determine how you want to send your mail. - - - - Mail Sources - - The Mail Sources tab allows you to - edit, add, or delete methods of retrieving mail from - servers. Clicking on Add or - Edit will bring up a dialog box to - offer you the following options: - - - Mail source type: - - - Select from IMAP, POP or Unix-style - mbox files. - - - - - Server: - - - Enter the name of your mail server in this field. - For example: - mail.mycompany.com - - - - - Username: - - - Enter your user name here. Eva Lucianne Tester's - user name is eltester. - - - - - Authentication: - - - Your system administrator will know which type of - authentication your system requires. - Evolution can also detect - what sorts of authentication are available once it - knows where to find the server. - - - - - Test values before continuing - - - If this box is checked, - Evolution will attempt to - make sure that all the other entries in the dialog - window are correct. - - - - - - - - Transports - - The Transports tab lets you set how - you will send mail. Evolution currently supports two mail - transport options: SMTP, which uses a - remote mail server, and sendmail, - which uses the sendmail program - on your local system. Sendmail - is more difficult to configure, but offers more flexibility - than plain SMTP. - - - To use SMTP, you'll need to enter the - name of your SMTP server, which should look like: - smtp.isp.net. - - - Evolution can - attempt to determine if you have entered the right server - name. To have it do so, check the box labelled - Test these values before continuing - before you click OK. - - - - - - - - News Servers - - When you first select the News - Servers tab, you will see a blank box with - three familiar buttons on the right: - Add, Edit, - and Delete. - - - Click Add to add a news server; you - will be prompted for its name. Enter the name, click - OK, and you're done. (FIXME, this needs work). - - - - - Other Mail Preferences - - Not everything fits neatly into categories. This tab - contains some miscellaneous configurations that don't have - too much to do with each other. - - - - Send messages in HTML format - - - If you check this box, you will send - messages as HTML by default. If you leave it unchecked, your - messages will be sent without HTML formatting unless you select - Format HTML - in the message composer. - See - for more information about HTML mail. - - - - - Folder Format - - By default, - Evolution saves its mail - in the - mbox - format. You can switch to the - mh - format if you like. Note that this is an advanced - feature and may cause you to lose some messages, so - you should probably make a backup of your - evolution - directory first. In addition, it will take quite - some time if you have a large mailbox. - - - - - -
- - - Managing the Contact Manager - - To set the behavior of your Contact Manager, click on the - Contact Manager tab in the - Preferences window. - - - You can set the following options: - - - - - Configuring the Calendar - - This section discusses calendar-specific preferences. While - looking at your calendar, select - Preferences from the - Edit menu. This will open up the - Preferences window. It contains four - tabs: Time display, - Colors, To Do List - and Alarms. The calendar - preferences window is illustrated in . - - -
- Calendar Preferences Dialog - - If this worked on my job as well as my calendar... - - - -
- -
- - - Time Display Settings - - The Time display tab lets you set the - following: - - - Time format - - You may choose between twelve-hour (AM/PM) and - twenty-four hour time formats here by clicking the - appropriate radio button. - - - - - Weeks start on - - You can set weeks to start on Sunday or on Monday. - - - - Day range - - - When does your work day start, and when does it end? - In the day and week views, - Evolution displays all the - hours in the range you select here, even if there are - no appointments for those times. Of course, you can - still schedule an appointment outside of these hours, - and if you do, the display will be extended to show - it. - - - - - - - - Calendar Colors - - The colors tab allows you to decide - what color your calendar will be. The tab consists of a - sample calendar on the right and a list of ten items that can - be colored in different ways. If you click on the color - button to the right of each item, you will bring up a - color-selector window where you can choose to alter that - color. By clicking OK in the color - selection dialog, you can see the results of the color on the - sample calendar. - - The display elements whose color you can set are: - - - - - Outline: The lines between days - and at the top of the display. - - - - - Headings: Text color for day - and month names and other headings. - - - - - Empty days: This is the - background color for any time slots in which you have no appointments. - - - - - - Appointments: This is the - background color for any time slots in which you have appointments. - - - - - Highlighted day: The - background color for a selected time slot. - - - - - - - Day numbers: Text color for date numbers. - - - - - - - Current day's number: Text color for today's date. - - - - - To-Do item that is not yet - due: Text color for To-Do list items that are - not yet due. (Or maybe background color? find out!) - - - - - - To-Do item that is due today: - Text color for today's tasks. - - - - - To-Do item that is overdue: - Text color for overdue tasks. - - - - - - - - - To Do List Settings - - You can choose what information the To Do list displays and the - way it is displayed. The two areas of the To Do - List tab offer several options each: - - - Show on To Do List - - - This box contains three items. If you select the - check boxes next to them, that information will appear - in the To Do list for each task it contains: - - - Due Date - - - Time Until Due - - - Priority - - - - - - - Style Options - - - Select among the following checkboxes to determine - how your To Do list will look: - - - Highlight overdue items - - - Highlight items due today - - - Highlight not yet due items - - - - - - - - - - - Alarms Settings - - The alarms tab enables you to select from three boxes: - - - Beep on display alarms: select - this box to have Evolution beep - at you for any alarms you have set. If you leave this box - unchecked, Evolution will only - alert you to events by opening a dialog box. - - - - Audio alarms timeout after: - Select this button to have the beeping stop automatically - after a certain number of seconds. - - - Enable snoozing for: If you - would like to have the option to tell - Evolution to repeat an alarm in - a few minutes, select this button and decide how long - you'd like it to wait. - - - - - - - -
- - - General Preferences - - Additional configuration options will be covered here, as - they become available. - - -
- - - - - - diff --git a/doc/C/config-setupassist.sgml b/doc/C/config-setupassist.sgml deleted file mode 100644 index 52ca546b9a..0000000000 --- a/doc/C/config-setupassist.sgml +++ /dev/null @@ -1,159 +0,0 @@ - - Easy Setup with the Setup Assistant - - The setup assistant can gather most of the information - necessary for Evolution's daily - operation. If you prefer more detailed or advanced - configuration, see . - - - - Mail Setup - - The first time you try to send or receive mail with - Evolution, the mail - setup assistant will pop up to help you with your - email preferences. If you don't plan to use email, or if - you'd rather deal with your email preferences later, click - Cancel. - - - The setup assistant (sometimes called a - Druid) will guide you through the - network configuration process. It will ask you for some - basic information; your system administrator or ISP should - have the answers you'll need. The mail setup assistant is - pictured in . - - - - -
- Mail Setup Assistant - - Evolution Main Window - - - -
- - - - - The assistant will ask you for the following information: - - - - Name: - Your - full name: eg. Eva Lucianne Tester - - - - Email address: - - Your email address: eg. eltester@helixcode.com - - - - - Organization: - - - Organization: Any organization you - represent. Leave this blank if you wish. - - - - - - Signature File: - - - A text file appended to any email you send. A signature - file typically consists of your name and email address, - or a quotation you like. It should be fewer than four - lines of text. - - - - - - Mail source type: - - - Evolution supports three mail - sources: POP servers, the most common email server type; - IMAP, which stores mail remotely and allows access from - multiple locations, and UNIX-style - mbox files. Ask your system - administrator which one you use. - - - - - - Server: - - - This should be the name of your mail server: it should - look something like: - mailserver.organization.org. - - - - - - Username: - - - Normally, this is the part of your email address before - the @ character, and - Evolution has selected that - value as the default. If you have a different username, - you can enter it here. - - - - - - Authentication: - - - Select the type of authentication you will use. You can - click Detect supported types to - find out which authentication protocols your network - allows. - - - - - - Mail Transport: - - - This is the mail sending protocol you will want to use. - Evolution supports both SMTP - and sendmail. - - - - -
- - To learn how to configure Evolution - in greater detail, or to change preferences once you have set - them, see . - -
- -
- - - - - - - - - diff --git a/doc/C/config-sync.sgml b/doc/C/config-sync.sgml deleted file mode 100644 index ae78a6daaf..0000000000 --- a/doc/C/config-sync.sgml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Setting up your synchronization system - - Synchronization presents you with two issues you'll need to - deal with. The first one is pretty simple: you'll need to get - the data to move among the various devices you're using. If - you've already got Gnome-Pilot - working, then all you have to do is tell it to use Evolution - as a conduit. If you haven't used - Gnome-Pilot before, you'll need to - run the GNOME Control Center and go - through the hand-held device setup assistant. Then you can - create the Evolution conduit and press the hotsync button. - - - If that doesn't work, jump up and down several times and swear - loudly. Then make sure you've got - Gnome-Pilot going to the right - device (for my serial port, it's /dev/ttys0, not the default - /dev/pilot) and that you have read and write permission on - that device. If you don't you'll need to be added to whatever - group has those permissions (for my system, it's tty). - Alternately, if you're the only user of your computer and - don't care too much about security, just use - su to become root, and then use - chmod a+rw /dev/[DEVICENAME] to set - universal read and write permissions on that port— just - don't tell your sysadmin I said you could. (Sysadmins, of - course, would never do such a thing.) - - - Once Evolution knows where to get - the mail, address, and calendar data, it needs to know what to - do with it. When you synchronize your local data with the data on - a server or handheld device, you may run into conflicts: - perhaps you have ended up with two cards with the same name - and different addresses, or old mail that has been deleted - from one device but not the other. What if you want to keep - only the most recent mail on your hand-held or your laptop, - but all the mail on the LDAP server or your desktop machine? - Select the Synchronization tab from the - Preferences window to set up the - conflict resolution preferences. - - - You can set Evolution's - synchronization behavior in the following ways: - - - - - Data Loss Prevention - - It's always a good idea to make a backup. If you set your - synchronization behaviors wrong, you could end up deleting - the messages and cards you want to keep, and keeping the - ones you want to delete. Before you change these - preferences, make a backup of your - Evolution files. You can do - this by... - - - - diff --git a/doc/C/evolution-guide.sgml b/doc/C/evolution-guide.sgml deleted file mode 100644 index 59b50120b9..0000000000 --- a/doc/C/evolution-guide.sgml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - -]> - - - - - - A User's Guide to Evolution - - AaronWeber - KevinBreit - - - 2000 - Helix Code, Inc., - Kevin Breit - - - - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free - Documentation License, (FDL) Version 1.1 or any later - version published by the Free Software Foundation with no - Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. - - - The software described by this document falls under the - GNU General Public License, or GPL. - - - The licenses are included with this document in , and ; you may also obtain - a copy from the Free Software Foundation by visiting their Web site or - by writing to: Free Software Foundation, Inc., 59 Temple Place - - Suite 330, Boston, MA 02111-1307, USA. - - - Many of the names used by companies to distinguish their - products and services are claimed as trademarks. Where those - names appear in any GNOME documentation, and those trademarks - are made aware to the members of the GNOME Documentation - Project, the names have been printed in caps or initial caps. - - - - - - This is version 0.4 of the Evolution manual, describing version - 0.3.1 of Evolution. - - - - - &PREFACE; - - - Using Evolution - - - Part one of the Evolution manual - describes how to use Evolution - for email, contact management, and appointment and task - scheduling. You'll find as you go along that, as with most of - Linux, there's more than one way to do things, and you can - pick whichever method you like best. - - - - &USAGE-MAINWINDOW; - &USAGE-MAIL; - &USAGE-CONTACT; - &USAGE-CALENDAR; - &USAGE-NOTES; - &USAGE-SYNC; - - - - Configuring and Managing Evolution - - - Evolution is highly configurable. - Usually, when developers say that, they mean that they didn't - test it out thoroughly and have left it to other hackers to - "configure" themselves a working system. When we say - configurable, we mean that although - Evolution will work perfectly well - with minimal setup hassle, you can alter its behavior to fit - your needs with just a little more work. - - - - &CONFIG-SETUPASSIST; - &CONFIG-PREFS; - &CONFIG-SYNC; - - &APX-GLOSS; - &APX-BUGS; - &APX-AUTHORS; - &APX-FDL; - &APX-GPL; - - - - - - - - - - - - - diff --git a/doc/C/fig/calendar.png b/doc/C/fig/calendar.png deleted file mode 100644 index 47354813a2..0000000000 Binary files a/doc/C/fig/calendar.png and /dev/null differ diff --git a/doc/C/fig/config-cal.png b/doc/C/fig/config-cal.png deleted file mode 100644 index e124196279..0000000000 Binary files a/doc/C/fig/config-cal.png and /dev/null differ diff --git a/doc/C/fig/config-mail.png b/doc/C/fig/config-mail.png deleted file mode 100644 index ef270858f7..0000000000 Binary files a/doc/C/fig/config-mail.png and /dev/null differ diff --git a/doc/C/fig/contact.png b/doc/C/fig/contact.png deleted file mode 100644 index 1610e278a4..0000000000 Binary files a/doc/C/fig/contact.png and /dev/null differ diff --git a/doc/C/fig/filter-new-fig.png b/doc/C/fig/filter-new-fig.png deleted file mode 100644 index 4c612ce5fc..0000000000 Binary files a/doc/C/fig/filter-new-fig.png and /dev/null differ diff --git a/doc/C/fig/mail-druid-pic.png b/doc/C/fig/mail-druid-pic.png deleted file mode 100644 index f29f3e77be..0000000000 Binary files a/doc/C/fig/mail-druid-pic.png and /dev/null differ diff --git a/doc/C/fig/mainwindow-pic.png b/doc/C/fig/mainwindow-pic.png deleted file mode 100644 index 0ff712efa5..0000000000 Binary files a/doc/C/fig/mainwindow-pic.png and /dev/null differ diff --git a/doc/C/fig/vfolder-createrule-fig.png b/doc/C/fig/vfolder-createrule-fig.png deleted file mode 100644 index 571a487ba4..0000000000 Binary files a/doc/C/fig/vfolder-createrule-fig.png and /dev/null differ diff --git a/doc/C/preface.sgml b/doc/C/preface.sgml deleted file mode 100644 index bb6cb4d948..0000000000 --- a/doc/C/preface.sgml +++ /dev/null @@ -1,174 +0,0 @@ - - - - Introduction - -
- What is Evolution, and What Can It Do for Me? - - The word "evolution" means "a process of improvement and - development." The GNOME application - Evolution is meant to be a more - evolved groupware program, and an - integral part of the Internet-connected desktop. - - - As part of the GNOME project, - Evolution is free software. The - program and its source code are released under the terms of - the GNU Public License (GPL), and the documentation falls - under the Free Documentation License (FDL), which is included - with this document (). For more - information about the GPL and the FDL, visit the Free Software - Foundation's website at http://www.fsf.org. - - - - This is a preview release - - Please help develop Evolution - by submitting bug reports when you find bugs. You can do - so by using the Bug Report - Tool (known as bug-buddy - at the command line). - - - - - - Evolution is a suite of tools to - help you work in a group. You can use it to send, receive, - and organize email, manage address and other contact - information, and maintain a calendar. It enables you to do - those things on one or several computers, connected directly - or over a network, for one person or for large groups. - Evolution can handle almost all - your communications tasks with the power and flexibility of - the GNOME desktop environment. - - - The developers of Evolution had - four major goals for their project: - - - - - The application must be both powerful and easy - to use. That means a familiar and intuitive - interface that users could customize to their liking, and - the development of shortcuts for complex tasks. - - - - - Evolution must meet and - exceed the standards set by other groupware products. - It must include support for most major network protocols - so that it can integrate seamlessly with existing - hardware and network environments. - - - - - The project must support open standards and protocols - to turn Evolution into an - advanced development platform. From the simplest - scripting to the most complex network and component - programming, Evolution - needed to offer developers an environment for - cutting-edge application development. - - - - - Data must be safe: Evolution - must not lose mail or corrupt mailbox files. It will - not execute scripts, automatically forward a virus to - your entire contacts list, or delete files from your - hard disk. - - - - - - Evolution is designed to make most - daily tasks faster. For example, it takes only one or two - clicks to enter an appointment or an address card sent to you - by email, or to send email to a contact or appointment. - Evolution makes displays faster and - more efficient, so searches are faster and memory usage is - lower. People who get lots of mail will appreciate advanced - features like vFolders, which - let you save searches as though they were ordinary mail - folders. - - -
- -
- About This Book - - - This version of the Evolution - User's Guide is a draft. It is missing - huge chunks of information, and many of the features it - describes are unimplemented. All the content is subject to - change, especially if you help. Please send comments on the - guide to aaron@helixcode.com. If you would like - to work on the guide please contact me or see the GNOME - Documentation project web site. This - paragraph will be removed in later versions of the manual. - - - - - This book is divided into two sections. The first section is a - guided tour— it will - explain how to use Evolution. If - you are new to Evolution or to - groupware in general, this is the section for you. The second - section, covering configuration, - is targeted at more advanced users, but anyone who wants to - change the way Evolution looks or - acts can benefit from reading it. - - - Typographical conventions - - Some kinds of words are marked off with special typography: - - Applications - Commands typed at the command line - Labels for interface items - - Menu selections look like this: - - Menu - Submenu - Menu Item - - - Buttons you can click - Anything you type in - Text output from a computer - - - - -
-
- - - - - - - - - - - - diff --git a/doc/C/usage-calendar.sgml b/doc/C/usage-calendar.sgml deleted file mode 100644 index 9ec3b0f60e..0000000000 --- a/doc/C/usage-calendar.sgml +++ /dev/null @@ -1,356 +0,0 @@ - - - - The Evolution Calendar - - To begin using the calendar, select - Calendar from the shortcut - bar. By default, the calendar starts showing today's - schedule on a grey and white ruled background. At the upper - right, there's a monthly calendar you can use to switch days. - Below that, there's a TaskPad, where you can - keep a sort of glorified to-do list that's not linked to your - calendar. The calendar's daily view is shown in . - - -
- Evolution Calendar View - - Evolution Contact Manager Window - - - -
- - -
- - Ways of Looking at your Calendar - - - You can view your calendar by the day, by the week, by the - month, or by the year; press the calendar-shaped buttons on the - right side of the toolbar to switch between views. - - - To view yesterday's appointments, (last week's, if you're in - the weekly view, and last month's for the monthly view), click - the Pref button. For tomorrow, next week, - or next month, click Next, and of course, - click Today for today. - - - To visit a specific date's calendar entries, click - Go To and select the date in the dialog - box that appears. - - - - - - - - Scheduling With the Evolution Calendar - - The Evolution calendar allows you to - schedule events for yourself or a group of people. It can - handle events that repeat, event lengths from ten minutes to - multiple days, and events that have a date but no specific - time. Of course, you can also set event reminders and alarms - so that you don't forget about everything you've just put into - your calendar. Basically, it can handle almost any schedule you - throw at it. - - - Creating events - - To create a new calendar event, select - - File - New - Appointment - - or click the New button on the left end - of the toolbar. The New Appointment - dialog will pop up with the usual menu bar, tool bar, and - window full of choices for you. - - - Your event must have a starting and ending date — by - default, today — but you can choose whether to give it - starting and ending times or to mark it as an All - day event. For the purposes of the calendar, an - All day event begins at ten in the - morning, runs until eleven at night, and is displayed at the - top of a day's event list rather than inside it. That makes - it easy to have events that overlap and fit inside each other. - For example, a conference might be an all day event, and the - meetings at the conference would be timed events. Events with - starting and ending times can also overlap, however, and when - they do they're displayed as multiple columns in the day view - of the calendar. - - - Doing Two Things At Once - - If you create two calendar events that overlap, - Evolution will display them as - multiple columns in the calendar window. If you manage to - do both things at once, I'd like to meet you. - - - - You can have as many as four different - Alarms, any time prior to the event - you've scheduled. You can have one alarm of each type: - - - Display - - - A window will pop up on your screen to remind you of - your event. - - - - - Audio - - - Choose this to have your deliver a sound alarm. - - - - - Program - - - Select this if you would like some additional application - to run as a reminder. You can enter its name in the - text field, or find it with the - Browse button. - - - - - Mail - - - Evolution will send an - email reminder to the address you enter into the text - field. - - - - - - - - Classification is a little more - complicated, and only applies to calendars on a - network. Public is the default category, - and a public event can be viewed by anyone on the calendar - sharing network. Private denotes one - level of security, and Confidential a - higer level. Exact determinations and implementations of - this feature have yet to be determined. - - - The Recurrence tab lets you describe - repetition in events ranging from once every day up to once - every 100 years. You can then choose a time when repetition - will stop, and, under Exceptions, pick - individual days when the event will not - recur. - - - - Once you're done with all those settings, click on the disk - icon in the toolbar. That will save the event and close the - event editor window. If you want, you can alter an event - summary in the calendar view by clicking on it and typing. You - can change other settings by right-clicking on the event in - the and then choosing Edit this Appointment. - - - - - - - - - The Task Pad - - The Task Pad, located in the lower right corner of the - calendar, lets you keep a list of tasks separate from your - calendar events. Tasks are colored and sorted by priority and - due-date (see for more - information), and are included with calendar data during - synchronization with a hand-held device. - - - To record a new task, click the Add - button below the list. Evolution - will pop up a small window with five items in it: - - - - Summary: - - - The description you enter here will appear in the To Do - list itself. - - - - - - Due Date: - - - Decide when this item is - due. You can either type in a date and time, or select one from - the Calendar and time drop-down menus. - - - - - Priority: - - - Select a level of importance from 1 (most important) to 9 - (least important). - - - - - Item Comments: - - - If you wish, you can keep a more detailed description of - the item here. - - - - - - - Once you've added a task to your to-do list, its summary - appears in the Summary section of the - calendar window. To view or edit a detailed description of an - item, double-click on it, or select it and click - Edit. You can delete items by selecting - them and clicking on the Delete button. - - - - - Multiple Calendars - - Evolution permits you to have and - maintain multiple calendars. This is useful if you maintain - schedules for other people, if you are responsible for resource - or room allocation, or if you have multiple personalities. - - - - Keeping Multiple Calendars - - Keelyn has one calendar for her own schedule. Next to that - she maintains one for the conference room, so people know when - they can schedule meetings. On the local network, she - maintains a calendar that reflects when consultants are going - to be on site, and another that keeps track of when the Red - Sox are playing. - - - - To create a new calendar, select - - File New - Calendar - . - - You can place the calendar in any calendar folder and access it - from the folder view. Alarms, configuration, and display for - each calendar are seperate from each other. - - - -
- - - - - - - - - - diff --git a/doc/C/usage-contact.sgml b/doc/C/usage-contact.sgml deleted file mode 100644 index 4f9b9fd058..0000000000 --- a/doc/C/usage-contact.sgml +++ /dev/null @@ -1,504 +0,0 @@ - - - - The Evolution Contact Manager - - - The Evolution contact manager can - handle all of the functions of an address book, phone book, or - Rolodex. Of course, it's a lot easier to update - Evolution than it is to change an - actual paper book. Evolution also - allows easy synchronization with hand-held and remote devices. - Since Evolution supports most major - network protocols, including LDAP, it can - fit into almost any existing network. - - - Another advantage of the Evolution - address book is its integration with the rest of the - application. That means that when you look for someone's - address, you can also see a history of appointments with that - person. Or, you can get an e-mail with contact information in - it and create a new address card on the spot. In addition, - searches and folders and all work in the same way they do in the - other components, so you don't have to learn another system for - similar tasks. - - - This chapter will cover using the - Evolution contact manager to organize - any amount of contact information, share addresses over a - network, and several ways to save time with everyday tasks. To - learn about configuring the contact manager, see . - - - - Getting Started With the Contact Manager - - - To open up your address book, click on - Contacts in the shortcut bar. The - contact manager is illustrated in . By default, the contact manager - shows all your cards in alphabetical order, in a - minicard format. You can select other - views from the View menu, and adjust the - width of the colums by clicking and dragging the grey column - dividers. - - - -
- Evolution Contact Manager - - Evolution Contact Manager Window - - - -
- - - The toolbar for the address book is quite simple: - - - Press New for a new contact. - - - - Find brings up an in-depth search window. - - - - Press Print to print one or more cards. - - - Delete deletes a selected card. - - - - - The last feature is Quick Search; to use - it, just type in the name of the person you're looking for and - hit Enter. - Evolution will search through all - the cards to find one that matches. - - - If there are no matches, the card display will be blank. To - display all of your contacts, you can - leave the Quick Search field blank, and - press enter. - - - The rest of the contact manager is taken up by the display of - your cards. You can view it as a table or as a list of - cards— switch between them in the View - menu — and move through them alphabetically alphanumeric - buttons and the scrollbar at the right of the window. - -
- - Destroy, Create, or Change Cards - - - To delete a card, click on it once to select it, then press the - Delete Card button. If you have - multiple cards selected, you'll delete mutliple cards. - - - Adding or changing cards is slightly more complicated. Any - time you add information to the contact manager, whether it's - an old card you're editing or a new card you're just adding to - your address book, you'll use the contact editor. To change a - card that already exists, just double click it to open the - contact editor window with all the current information already - filled in. If you want to create a new one, clicking the - New Card button will open up that same - window, but with empty fields instead of full ones. Either - way, it's the same tool for quite similar tasks, and you'll - find that it's pretty flexible and can store quite a lot more - than you'd think would fit onto a file card. - - - - The contact editor window has two tabs, - General, for basic contact information, - and Details, for a more specific - description of the person. In addition, it contains a full - menu bar, which is still evolving rapidly. - - -
- Evolution Contact Editor - - Evolution Contact Editor - - - -
- - The General tab contains no less - than seven sections, each with an icon: a face, for name and - company; a telephone for phone numbers; an envelope for email - address; a house for postal address; a file folder for - contacts, and a briefcase for categories. You can guess what - sort of information belongs in fields like Job - Title and Web page address, - but there are several parts of the window that are a little - more interesting. - - - The Categories feature is discussed in - , but the remaining - features are described here: - - - Full Name - - - The Full Name field has two - major features: - - - - You can enter a name into the Full - Name field, but you can also click the - Full Name button to bring - up a small dialog box with a few text boxes - - - Title: - - Enter an honorific or select one from the menu. - - - - First: - - The person's first, or given, name. - - - - Middle: - - The middle name or initial, if any, goes here. - - - - Last: - - The last name (surname) belongs here. - - - - Suffix: - - Suffixes such as "Jr." or "III" can go here. - - - - - - - - The Full Name field also - interacts with the File As - box to help you organize your contacts. - - - To see how it works, type a name in the - Full Name field: - Eva Lucianne Tester. - You'll notice that the File - As field also fills up, but in reverse: - Tester, Lucianne. - You can pick Eva - Tester from the drop-down, or - type in your own, such as Lucianne - Tester, Eva. - - - Filing Suggestion - - Don't enter something entirely different from - the actual name, since you might forget that - you've filed Eva's information under "F" for - "Fictitious Helix Code Employees" - - - - - - - - - Multiple Values for Fields - - - If you click on the small arrow buttons next to the - Primary Email field, you can also - choose Email 2 and - Email 3. Although the contact - editor will only display one of those at any given - time, Evolution will - remember them all. The arrow buttons next to the - telephone and postal address fields work in the same - way. - - - - - - - -
- - - Organizing your Contact Manager - - Organizing your contact manager is a lot like organizing your - mail. You can have folders and searches the same way you can - with mail, but the contact manager does not allow vFolders. It - does, however, allow each card to fall under several - categories, and allow you to create your own categories. - Categories are discussed . - - - - - - Groups of contacts - - Evolution offers two ways for you - to organize your cards. The first way is to use folders; - this works the same way that mail folders do. For more - flexibility, you can also mark contacts as members of - different categories. - - - - Grouping with Folders - - The simplest way to group address cards is to use folders. - By default, cards start in the - Contacts folder. If you've read then you already know that you - can create a new folder by selecting - - File - New - Folder - - and that you can put new folders anywhere you like. Note - that each card must be in one and only one folder, unless - you want to have duplicate cards. - - - To put a card into a folder, just drag it there from the - folder view. Remember that contact cards can only go in - contact folders, just like mail can only go in mail folders, - and calendars in calendar folders. - - - - - Grouping with Categories - - The other way to group cards is to mark them as belonging - to different categories. The difference between folders - and categories is that folders contain cards, but category - membership is a property of each card. That means that you - can mark a card as being in several categories or no - category at all. For example, I put my friend Matthew's - card in the "Business" category, because he works with me, - the "Friends" category, because he's also my friend, and - the "Frequent" category, because I call him all the time - and can never remember his phone number. - - - To mark a card as belonging to a category, click the - Categories button at the lower - right. From the dialog box that appears, you can check as - many or as few categories as you like. - - - Then, you can refer to all the cards in that category by: - FEATURE NOT IMPLEMENTED... FIXME - - - If the master list of categories doesn't suit you, you can - add your own. Just enter the new category's name in the - text box, then click Categories and - choose Add to Master List in the - window that appears. - - - - Another way to use Categories - - You can categorize contacts by typing the category - names into the Categories - field. You can also create new categories that way: - just type in a category name, and it counts as a - category. - - - - - - - - Sharing your Cards (and keeping them to yourself) - - Cards can be shared over a network. This is the sort of - feature you'll want to use if your company has a list of - vendors and clients that needs constant updating. If you - also share your calendars, people can avoid duplicating - work and keep up to date on developments within their - workgroup or across the entire company. - - - - Sharing Address Cards and Calendar Data - - Ray wants to schedule a meeting with Company X, so he - checks the network for the Company X address card so he - knows whom to call there. Since his company also shares - calendars, he then learns that his co-worker Deanna has - already scheduled a meeting with Company X next Thursday. - He can either go to the meeting himself or ask Deanna to - discuss his concerns for him. Either way, he avoids - scheduling an extra meeting with Company X. - - - - Of course, you don't want to share all of your cards— why - overload the network with a list of babysitters, or tell - everyone in the office you're talking to new job prospects? - Evolution lets you decide which - folders you want to make accessible to others. - - - To begin sharing a folder of address cards, wait until - Evolution supports this - feature. - - - - - Contact Manager Tools - - The contact manager works with - Evolution mail and the calendar to - help you add new address cards quickly. However, it can also - manage mailing lists. There are more tools planned, and when - they arrive, they will be described in this - section. - - - - Send me a Card: Adding New Cards Quickly - - As noted before, when you get information about a person in - the mail or in a calendar entry, you can add it to an address - card. To do so, right click on any email address or email - message, and select Add Address - Card from the menu that appears. Of course, - Evolution also adds cards from a - hand-held device during HotSync operation. For more - information about that, see . - - - - - Managing a Mailing list - - You already know that when you are writing an email, you can - address it to one or more people, and that - Evolution will fill in addresses - from your contact manager's address cards if you let it. In - addition to that, you can send email to everyone in a - particular group. - - - - Future versions of Evolution will - allow you to you export a group of cards to a spreadsheet, - database, or word processor so you can print address labels - or prepare large postal mailings. - - - - - - - Contact Manager Menubar Reference - - - -
- - - - - - - - - - - - - - diff --git a/doc/C/usage-mail.sgml b/doc/C/usage-mail.sgml deleted file mode 100644 index de2f3b0a23..0000000000 --- a/doc/C/usage-mail.sgml +++ /dev/null @@ -1,1132 +0,0 @@ - - - - Evolution Mail - - An Overview of the Evolution Mailer - - Evolution email is like other email - programs in all the ways you would hope: - - - - It can sort and organize your mail in a wide variety of ways with - folders, searches, and filters. - - - - - It can send and receive mail in HTML or as plain text, and - supports file attachments. - - - - - It supports multiple mail sources, including IMAP, POP3, - and local mbox files. - - - - - - However, Evolution has some important - differences. First, it's built to handle very large amounts of - mail without slowing down or crashing. Both the filtering and searching functions - were built for speed and efficiency on gargantuan mail - volumes. There's also the Evolution - vFolder, an - advanced organizational feature not found in other mail clients. - If you get a lot of mail, or if you keep every message you get - in case you need to refer to it later, you'll find that feature - especially useful. - - - - You can start reading email by clicking - Inbox in the shortcut bar. By - default, the Inbox is open when you - start Evolution, and the first - time you see your inbox, there's a message in it from Helix - Code welcoming you to the application. - - - - - Reading, Getting and Sending Mail - - Reading a Message - - The first time you open your - Evolution - Inbox, you will see a window like the one - in , with a message from - Helix Code in the message list. The - message is displayed below that, in the view - pane. If you find the view - pane too small, you can double-click on the - message in the message list to have it - open in a new window. As is the case with folders, you can - right-click on messages in the message list and get a menu of - possible actions: - - - - View Message - - Select this item to view the message in - the view pane of the Evolution - window. - - - - - Edit Message - - This item is available only for messages and drafts - that you have written. Select it to open the message - composer and make changes to the message. - - - - - Print Message - - Select this item to print a message. - - - - - Reply to Sender - - Use this item to reply only to the author of the message. - - - - - Reply to All - - Send a reply to the author of the message - and to all others on the recipient list. See for more information. - - - - - Forward Message - - Send the message on to another person. - See for - information about how to use the Forward feature. - - - - - Delete Message - - Mark the message for deletion. Choose - ActionsExpunge - to delete marked messages permanently. - - - - - Move Message - - Select this item to move the message to another folder. - This will open a dialog to let you choose the destination - from a folder tree. - - - - - - - You can also select the order in which messages appear in - that list. To sort by sender, subject, or date, click on the - bars with those labels at the top of the message list. If - you click twice, you'll sort them in reverse order. - - - Aside from sorting the messages, you can opt to have the - messages threaded. Select - View Threaded Message - List to turn the threaded view on - or off. If the option selected, - Evolution will attempt to - associate related messages by using the - References, - In-Reply-To, and - Subject message headers. Messages - which are related are then placed next to each other, so that - it's easier to follow the thread of a conversation from - message to message. - - - Go ahead and click on the message in the message - list. That selects the message. Then click on - the Delete button in the tool bar. The - message now has a line through it, because you've marked it - for deletion. If you really want to get rid of it, choose - Expunge from the - Tools menu. That will delete it - permanently. If you want to keep it, click - Delete again, and it will no longer be - marked as deleted. At some point in the future, this feature - will change to something a little less counter-intuitive. - - - -
- Evolution Mail - - Inbox - - - -
- - -
- - - Checking Mail - - To check your email, just click Get - mail in the toolbar. If this is the first time - you've done so, the mail setup - assistant will ask you for the information it - needs to check your mail (see for more information). If - you're checking mail over a network (instead of from local - mbox files), you'll need to enter your - email password. Type it in, click OK and - Evolution will download your mail. - New mail will appear in your Inbox. - - - - Once you've entered your password, - Evolution will hold it in memory so - that you don't have to retype it every time you want to check - mail. It will only remember the password until you quit the - application; each time you run - Evolution, you need to re-enter - your password. If you'd like - Evolution to forget your password - sooner, select - ActionsForget - Passwords, and it will do so - immediately. - - - If you get an error message instead of mail, you probably - need to change your network settings. To learn how to - do that, have a look at , or ask your system - administrator. - - - - Attachments, HTML Mail, and Live Documents - - If someone sends you a file attached to an email (an - "attachment"), Evolution will - display the file at the bottom of the message to which it's - attached. Text, HTML, and most images will be displayed in - the message itself. For other files, - Evolution will provide a link and - icon at the end of the message. Click on that, and - Evolution will ask you where you - want to put the file. Once you've chosen a location and - saved the file, you can open, move, copy, or execute it just - like any other, using Nautilus or - your favorite shell or file manager. - - - - Evolution can also display - HTML-formatted mail, complete with graphics. HTML - formatting will display automatically, although you can - turn it off if you prefer. - - - - - - - - - Writing and Sending Mail - - You can start writing a new email message by selecting - File - New - Mail, or by pressing the - Compose button in the Inbox toolbar. - When you do so, the New Message window - will open, as shown in . - - - -
- New Message Window - - Evolution Main Window - - - -
- - - - - Enter an address in the To: field, a - subject in the Subject: and a message in - the big empty box at the bottom of the window, and press - Send. That's easy. It may even be - too easy, which is why I like to queue my messages up to be - sent a few minutes later. - - - Send Now, Send Later - - Evolution will send mail immediately unless you tell it to - do otherwise by selecting Send - Later from the MENU in - the message composition window. Then, when you press - Send, all your unsent messages will - go out at once. I like to use "Send Later" because it - gives me a chance to change my mind about a message before - it goes out. That way, I don't send anything I'll regret - the next day. - - - To learn more about how you can specify message queue - and filter behavior, see . - - - - - - You can probably guess the purpose of the buttons labelled - Cut, Copy, - Paste and Undo, but - there's a bit more to sending mail that's less obvious. In - the next few sections, you'll see how - Evolution handles additional - features, including mailing lists, attachments, and - forwarding. - - - - - Choosing Recipients - - If you have created address cards in the contact manager, - you can also enter nicknames or other portions of address - data, and Evolution will complete - the address for you. If you enter a name or - nickname that can go with more than one card, Evolution will - open a dialog box to ask you which person you meant. - - - Alternately, you can click on the - To:, Cc:, or - Bcc: buttons to get a list of email - addresses. Click the check-boxes next to the addresses, then - click OK, and the address will be - added to the appropriate form field. - - - For more information about using email together with the - contact manager and the calendar, see and . - - - - Multiple Recipients - - In addition, you can mark recipients in three different - ways. The To: field is for the - primary recipients of the message you are going to send. - However, it is considered bad form to have more than a few - email addresses in this section. - - - If you're writing to one person, but want to keep a third - party up to date, you can use Cc:. - Hearkening back to the dark ages when people used - typewriters and there were no copy machines, "Cc" stands - for "Carbon Copy." Use it whenever you want to share a - message you've written to someone else. - - Using the Cc: field - - When Susan sends an email to a client, she puts her - co-worker, Tim, in the in the - Cc: field, so that he know - what's going on. The client can see that Tim also - received the message, and knows that he can talk to - Tim about the message as well. - - - - - If you have a large number of recipients, or if you want - to send mail to several people without sharing the - recipient list, you should use - Bcc:. "Bcc" stands for "Blind Carbon - Copy", and means that people you put in the - Bcc: field get the message, but - nobody else sees their email address. They will still see - the list of addresses from the To: - and Cc: fields, though. - - - Using the Bcc: field - - Tim is sending an email announcement to all of his - company's clients, some of whom are in competition - with each other, and all of whom value their - privacy. He needs to use the - Bcc: field here. If he puts - every address from his address book's "Clients" - category into the To: or - Cc: fields, he'll make the - company's entire client list - public. Don't assume it won't happen to you! - - - - - - - - Replying to Messages - - In order to reply to a message, click on it once in the - message list to select it. Then press the - Reply button. A window like the - New Message window will appear, but - the subject will already be present— the same subject - as the message to which you are replying, but with Re: - before it, to mark it as a reply. In addition, the full - text of the previous message is inserted into the new - message, either in italics (for HTML display) or with the - > character (in plain text mode) before each line. This - indicates quoting. You can intersperse your message with - the quoted material as shown in - - - -
- Reply Message Window - - Evolution Main Window - - - -
- -
- - - If a message has several recipients, as in the case of - mailing lists or messages that have been carbon copied, you - may wish to click Reply to All - instead of Reply. If there are large - numbers of people in the Cc: or - To: fields, this can save substantial - amounts of time. But be careful, and always make sure you - know who is getting a message: it could be a mailing list - with thousands of subscribers. - - Using the Reply to All feature - - Susan sends an email to a client, and sends copies to - Tim and to an internal company mailing list of - co-workers. If Tim wants to make a comment to all of - them, he uses Reply to All, but - if he just wants to tell Susan that he agrees with her, - he uses Reply. - - - -
- - - Embellish your email with HTML - - You can't normally use text treatments or pictures in - emails, which is why you've probably seen people use - asterisks for emphasis or use - emoticons to convey their - feelings. However, most of the newer email programs can - include and display images and text treatments as well as - basic alignment and paragraph formatting. - - - HTML Mail is not a Default Setting - - Some people do not have HTML-capable mail clients, or - prefer not to receive HTML-enhanced mail because it is - slower to download and display. Some - people refer to HTML mail as "the root of all evil" and - get very angry if you send them HTML mail, which is why - Evolution sends plain text - unless you explicitly ask for HTML. To send HTML mail, - you will need to select - HTML in the mail settings dialog box. See - for more information. - - - If you format a message with HTML, but do not have - Send Messages as HTML enabled in your - mail settings, the composer will remove your text styles. - It will, however, preserve indentation and lists. The - same is true for individuals in your address book whom you - have not marked as wanting to receive HTML mail. - - - - HTML formatting tools are located just above the - composition frame, and in the Insert and - Format menus. Your message text will - appear formatted in the composer window, and the message - will be sent as HTML. - - - The icons in the toolbar are explained in tool-tips, which - appear when you hold your mouse over the buttons. The - buttons fall into four categories: - - - Headers and lists - - - Choose Normal for a default - text style, or Header 1 through - Header 6 for varying sizes of - header. You can also select - pre for preformatted text - blocks, and three types of List - Item. - - - - - Text style - - - - B is for bold text - I for italics - U to underline - S for a strikethrough. - - - - - - Alignment - - - Located next to the text style buttons, - these three paragraph icons should be familiar to - users of most word processing software. The - leftmost button will make your text left-justified, - the center button, centered, and the right hand - button, right-justified. - - - - - - Indentation rules - - - The button with the arrow pointing left will reduce - a paragraph's indentation, and the right arrow will - increase its indentation. - - - - - - - There are three tools that you can find only in the - Insert menu. - - - Insert Link: - - - Use this tool to - put hyperlinks in your HTML messages. When you - select it, Evolution will - prompt you for the Text that - will appear, and the Link, where - you should enter the actual web address (URL). - - - - - Insert Image: - - - Insert Image: Select this item to - embed an image into your email, as was done in the welcome - message. Images will appear at the location of the - cursor. - - - - - Insert Rule: - - This will insert a horizontal line, or rule, into your document. - You'll be presented with a dialog box which gives you - the choice of size, percentage of screen, shading, and - alignment; if you leave everything at the default - values you'll get a thin black rule all the way across - the screen. - - - - - - A Technical note on HTML Tags - - The composer is a WYSIWYG (What You See Is What You Get) - editor for HTML. That means that if you enter HTML - directly into the composer— say, <B>Bold Text</B>, the - the composer will assume you meant exactly that string - of characters, and not "make this text bold," as an HTML - composition tool or text editor would. - - - - - Attachments - - If you want to attach a file to your email message, you - can drag it from your desktop into the message window, or - click the button in the toolbar with a paper clip on it, - labelled Attach. If you click the - Attach button, - Evolution will open a file - selection dialog box, to ask you which file you want to - send. Select the file and click OK. - - - When you send the message, a copy of the file will - go with it. Be aware that big attachments can take a long - time to download. - - - - - - - - Forwarding Mail - - The post office forwards your mail for you when you change - addresses, and you can forward mail when you get a letter by - mistake. The email Forward button - works in much the same way. It's particularly useful if you - have received a message and you think someone else would - like to see it. You can forward a message as an attachment - to a new message (this is the default) or - you can send it inline as a quoted - portion of the message you are sending. Attachment - forwarding is best if you want to send the full, unaltered - message on to someone else. Inline forwarding is best if - you want to send portions of a message, or if you have a - large number of comments on different sections of the - message you are forwarding. Remember to note from whom the - message came, and where, if at all, you have removed or - altered content. - - - To forward a message you are reading, press - Forward on the toolbar, or select - Message - Forward . If you - prefer to forward the message inline - instead of attached, select - Message Forward - Inline from the menu. Choose an - addressee as you would when sending a new message; the - subject will already be entered, but you can alter it. - Enter your comments on the message in the - composition frame, and press - Send. - - - - Seven Tips for Email Usage - - I started with ten, but four were "Don't send - spam." - - - - - Don't send spam or forward chain mail. If you must, - watch out for hoaxes and urban legends, and make sure - the message doesn't have multiple layers of email - quotation symbols (>) indicating multiple layers - of careless inline forwarding. - - - - - - Always begin and close with a salutation. Say - "please" and "thank you", just like you do in real - life. You can keep your pleasantries short, but be pleasant! - - - - - - ALL CAPS MEANS YOU'RE SHOUTING! - - - - - - Never write anything in email you wouldn't say in - public. Old messages have a nasty habit of - resurfacing when you least expect. - - - - - - Check your spelling and use complete sentences. - - - - - - Don't send nasty emails (flames). If you get one, - don't write back. - - - - - - When you reply or forward, include just enough of - the previous message to provide context: not too - much, not too little. - - - - - Happy mailing! - -
-
- - - Organizing Your Mail - - Even if you only get a few email messages a day, you probably - want to sort and organize them. When you get a hundred a day - and you want to refer to a message you received six weeks ago, - you need to sort and organize them. - Fortunately, Evolution has the tools - to help you do it. - - - - Getting Organized with Folders - - Evolution keeps mail, as well as - address cards and calendars, in folders. You start out with a - few, like Inbox, - Outbox, and Drafts, - but you can create as many as you like. Create new folders by - selecting New and then - Folder from the - File menu. - Evolution will as you for the name - and the type of the folder, and will provide you with a folder - tree so you can pick where it goes. - - - When you click OK, your new folder will - appear in the folder view. You can - then put messages in it by dragging and dropping them, or by - using the Move button in the toolbar. - If you create a filter with the filter - assistant, you can have mail moved to your folder - automatically. - - - - - Searching for Messages - - Most mail clients can search through your messages for you, - but Evolution does it faster. You - can search through just the message subjects, just the message - body, or both body and subject. - - - To start searching, enter a word or phrase in the text area - right below the toolbar, and choose a search type: - - - Body or subject contains: - - - This will search message subjects and the messages - themselves for the word or phrase you've entered in - the search field. - - - - - Body contains: - - - This will search only in message text, not the subject - lines. - - - - - Subject contains: - - - This will show you messages where the search text is - in the subject line. It will not search in the - message body. - - - - - Body does not contain: - - - This finds every email message that does not have the - search text in the message body. It will still show - messages that have the search text in the subject - line, if it is not also in the body. - - - - - Subject does not contain: - - - This finds every mail whose subject does not contain - the search text. - - - - - - Then, press Enter. - Evolution will show your search - results in the message list. - - - - - - Staying organized: Mail Filters in Evolution - - Filters sort your email for you as it arrives. Most often, - you'll want to have Evolution put - mail into different folders, but you can have it do anything - you like. People who subscribe to multiple mailing lists, or - who often need to refer to messages they have sent, find - filters especially helpful to separate personal from - list-related mail, but they're good for anybody who gets more - than a few messages a day. To create a filter, select - - Tools Filter - Assistant . This will bring up a - window which will guide you through filter creation. The - filter assistant is shown in - -
- Creating a new Filter - - Creating a new Filter - - - -
- -
- - The filter assistant window - contains a window listing rules, and an option to create a - new rule. To start filtering your mail, click - Add to add a filtering rule. - You'll decide when it should take place: - - - - When mail arrives: Select - this option to have messages filtered as they - arrive. - - - - - When mail is sent: Select - this option to filter your outgoing mail. You - can use this feature to keep your - Outbox as organized as - your Inbox. - - - - - - - Then, the filter assistant will ask you which emails it should - act upon. You can set criteria based on message size, the - sender, primary addressee or Cc: list, words in the subject or - body of the message, or any combination of criteria. Check the - boxes next to each criterion you would like to use. - - - Once you've decided which messages to filter, the assistant - will ask you the sort of action you wish to take. You can - file, delete, or forward the message, and you can also have it - be exempted from other filters which would otherwise have - acted upon it. - - - - Two Notable Filter Features - - - Any incoming email that does not meet - filter action criteria remains in the Inbox. - - - If you move a folder, your filters - will follow it. - - - -
- - - - - Getting Really Organized with Virtual Folders - - If filters aren't flexible enough for you, or you find - yourself performing the same search again and again, consider - a virtual folder. Virtual folders, or vFolders, are an - advanced way of viewing your email messages within - Evolution. If you get a lot of - mail or often forget where you put messages, vFolders can help - you stay on top of things. - - - A vFolder is really a hybrid of all the other organizational - tools: it looks like a folder, it acts like a search, and you - set it up like a filter. Once you've set it up, you'll be - able to open it and read the messages in it as though it were - a normal mail folder. It's not a folder, though, because when - you open a vFolder, Evolution - performs a search for you. It's not a regular search, though, - because you can build a vFolder with a very complicated set of - criteria with multiple inclusions and exclusions, as though - you were setting up a filter. - - - - - - As messages that meet the vFolder criteria arrive or are - deleted, Evolution will - automatically place them in and and remove them from the - vFolder contents list. When you delete a message, it gets - erased from the folder in which it actually exists, as well as - any vFolders which include it. - - - That's pretty complicated, but it can be useful. For example, - if I have a folder for all the email from one person, and - another folder for all the email on a given topic, I - feel organized. But when the person - sends me mail about the topic, my whole email filing universe - becomes chaotic, and I need vFolders to save the day for me. - - - That sounds silly, but imagine a business trying to keep track - of mail from hundreds of vendors and clients, or a university - with overlapping and changing groups of faculty, staff, - administrators and students. The more mail you need to organize, the less - you can afford the sort of confusion that stems from an - organizational system that's not flexible enough. vFolders - make for better organization because they can accept - overlapping groups in a way that regular folders and filing - systems can't. - - - - Using Folders, Searches, and vFolders - - To organize my mail box, I can set up a vFolder for emails - from my friend Vince. Then, whenever I want to see the - messages Vince has sent me, I open the vFolder, and every - message he's sent me shows up, no matter where I've - actually filed it. If I want, I can also create a vFolder - containing any message from my list of co-workers which - also has the name of the project in it. That way, when - Vince sends me mail about the project, I can see that - message both in the "Vince" vFolder and in the "Project" - vFolder. That's because when I open up the "Vince" folder, - I'm really performing a search for all the mail from Vince, - and when I open the "Project" folder I'm really performing - a search for all the mail about the project. - - - - - - - To create a vFolder, select VFolder - Assistant from the Tools - menu in the main window. This - will bring up a dialog box that looks suspiciously like - the Filter Assistant (for more information on filters, see - ), and which - presents you with a list of vFolders you have previously - created. If you have already created vFolders, you can - click on them in the frame labelled Select Rule - Type, and edit or remove them. If you have - not created any, there will be only one available option: - click Add to add a new vFolder. - - - You'll be prompted to create a filtering rule. You can build - your own from the ground up, or select one of several base - rules to customize. Your options are: - - - For matching messages: - - - Choose this to create your own set of rules for the - vFolder. You may select one or more search criteria; - the vFolder you create will contain messages that - match all of them. - - - - - Messages from a certain person: - - - The remaining three rules are simpler. Select this - one to create a vFolder that will contain only - messages from an address you enter. - - - - - Messages to a certain address: - - - Any messages sent directly to this address will be in - the vFolder you create. This vFolder is an absolute - must for people with multiple email addresses. - - - - - Messages with a given subject: - - - Enter a subject, and the vFolder will contain messages - with that subject. - - - - - - The selection window is shown in - -
- Selecting a vFolder Rule - - Selecting a vFolder Rule - - - -
-
- - - Once you click Next, you'll customize - the vFolder rule. The rules for the vFolder you're creating - will appear as phrases in the bottom pane of the window. You - can click on the blue underlined text in the phrase to alter - it to your liking. For example, when I create a vFolder to - contain all messages from rupert@helixcode.com - that have the word "evolution" in the message body, the bottom - frame says: The From address matches - rupert@helixcode.com and the body contains - "evolution".. - -
- -
-
diff --git a/doc/C/usage-mainwindow.sgml b/doc/C/usage-mainwindow.sgml deleted file mode 100644 index 8a71f2d4f2..0000000000 --- a/doc/C/usage-mainwindow.sgml +++ /dev/null @@ -1,420 +0,0 @@ - - - - The Main Window: Evolution Basics - - Start Evolution by selecting - Evolution from the - Applications of the Main Panel - Menu, or by typing evolution at the - command-line. The first time you run the program, it will create - a directory called evolution in your home - directory, where it will keep all your - Evolution-related files. - - - After Evolution starts - up, you will see the main window, with the - Inbox open. It should look a lot like the - picture in . On the left of - the main window is the shortcut - bar, with several buttons in it. Just underneath the - title bar is a series of menus in the menu - bar, and below that, the tool - bar with buttons for different functions. The largest - part of the main window is taken up by the - actual Inbox, where messages are listed - and displayed. If you're running the program for the first time, - you'll have just one message: a welcome from Helix Code. - - - -
- Evolution Main Window and Inbox - - Evolution Main Window - - - -
- -
- - - - The Way Evolution Looks - - The appearance of both Evolution - and GNOME is very easy to - customize, so your screen might not look like this picture. - You might configure Evolution to - start with a different view, without the shortcut - bar, or with the folder bar - instead. - - - - - - The Shortcut Bar - - Evolution's most important job is - to give you access to your information and help you use it - quickly. One way it does that is through the - shortcut bar, the column on the left - hand side of the main window. The large buttons with names - like Inbox and - Contacts are the shortcuts, and you can - select different groups of shortcuts by clicking the - rectangular category buttons. - - - The category buttons are Evolution - Shortcuts and Internet - Directories. When you click on them, they'll slide - up and down to give you access to different sorts of shortcuts. - When you first start Evolution, you - are looking at the Evolution Shortcuts - category. If you click Internet - Directories, it will slide up and you'll see buttons - for the Bigfoot and - Netcenter directories, as well as any - others you or your system administrator might have added. - Internet directories behave a lot like the local contact - manager, which is covered in . - - - Take a look at the Evolution Shortcuts - again. They are: - - - - - - - Inbox: - - - The Inbox will show you all of your email. Your Inbox - is also where you can access Evolution's tools to - filter, sort, organize, and search your mail. - - - - - - Calendar: - - - The Calendar can store your appointments and To do lists - for you. Connected to a network, you can use it to keep - a group of people on schedule and up to date. - - - - - - Contacts: - - - The Contact Manager holds your addresses, phone numbers, - and contact information. Like calendar information, - contact data can be synchronized with hand-held devices - and shared over a network. - - - - - - - Notes: - - The note pad is your catch-all tool: use it to take - messages from phone conversations, keep small things - organized, write haiku, or whatever - you like. This feature is not yet implemented, but will be - soon. See for more - information. - - - - - - - If you prefer to use a keyboard shortcut, or hot - key, you can use those instead. They're shown next - to their equivalent menu items in the menu bar. You can also set - your own hot keys for functions that don't have any; this is - covered in . If you're using the - keyboard shortcuts you may also want to hide the - shortcut bar by selecting - View Show Shortcut - Bar . - - - - Two Shortcut Bar Tricks - - To remove a shortcut from the shortcut bar, right-click on it - and select Remove. - - To change the way the shortcut bar looks, right-click in an - empoy space on the shortcut bar. From the menu that appears, - you can select icon sizes. - - - - - - The Folder Bar - - The folder bar is a more comprehensive - way to view the information you've stored with - Evolution. It displays all your - appointments, address cards, and email in a tree that's a lot - like a file tree— it starts small - at the top, and branches downwards. On most computers, there - will be three folders at the base. The first one is - VFolders, for virtual folders (discussed in - . The next one is - External Directories, for contact - directories stored on a network. The most important one is - probably Local, which you can use to access - all the data that's stored on your computer. If you click on - the plus sign plus sign next to the Local - folder, you'll see the contents: - - - - Calendar, for appointments and - event listings. - - - - - Contacts, for address cards. - - - - - Directories, for Internet contact directories. - - - - - Inbox, for incoming mail. - - - - - Outbox, which is for drafts of - messages and mail that's already been sent. - - - - - - - - To create a new folder, select - File New - Folder. You'll be asked where you want to - put it, and what kind of folder it should be. You can choose - from three types: Mail, for storing mail, - Calendar for storing calendars, and - Contacts for storing contacts. - - - - Folders Have Limits - - You can always place a folder inside other folders, - regardless of folder type. However, calendars, - contacts, and mail can't go into the same - folder. Calendars have to go in calendar folders, mail - in mail folders, and contacts in contact folders. - - - - - Right-clicking will bring up a menu for just about anything - in GNOME, and Evolution is no - exception. If you right-click on a folder, you'll have a - menu with the following options: - - View, to view a message. - Something else, for another purpose. - Something else, for another purpose. - . - - - - Context-Sensitive Help - - GNOME 2.0 supports context-sensitive help, which means you can - almost always get help on an item by right-clicking it. If - you're not sure what something is, or don't know what you can - do with it, choosing Help from the - right-click menu is a good way to find out. - - - - - Any time new information arrives in a folder, that folder label - is displayed as bold text. - - - To delete a folder, right-click it and select - Delete from the menu that pops up. - To change the order of folders, or put one inside another, use - drag-and-drop. To move individual - messages, appointments, and address cards between folders, you - can do the same thing: drag them where you want them, and - they'll go. - - - - The Menu Bar - - The menu bar's contents will always - provide all the possible actions for any given view of your - data. That means that, depending on the context, menu bar items - will change. If you're looking at your Inbox, most of the menu - items will relate to mail; some will relate to other components - of Evolution and some, especially - those in the File Menu will relate to the - application as a whole. This section describes those items that - cover the application as a whole; items specific to mailer are - discussed in the mail chapter, calendar items in the calendar - chapter, and so forth. - - - - - File Menu - - - Anything related to a file falls under this - menu: - - - New... — If you - want to create a new folder, calendar, - appointment, address card, or message, this is - where you should look. - - - - Go to Folder — - Select this item, then choose which folder you'd - like to view. - - - Exit — Quits the application. - - - - Print... — Opens the printing - dialog box so you can print items from the view pane of - Evolution. - - - - - - - Edit Menu - - Although it doesn't contain anything at first, - the Edit menu fills up with - useful editing tools when you're... editing. - - - - - Tools Menu - All of your assistants and configuration - tools go here. For the Inbox, that - means things like Mail - Configuration and the vFolder - Editor. For the - Calendar and the Contact - Manager - - - - Actions Menu - - This menu contains a list of actions you can perform on - the information you've stored with - Evolution. The contents vary - depending on the view, but for the - Inbox, it contains items like - Mark All Messages Read and - Expunge, to erase all the - messages you've marked for deletion. - - - - - Help Menu - - Select among these items to open the - Help Browser to the appropriate section. - - - - - - Once you've familiarized yourself with the main - window you can start doing things with it. We'lql - start with your email inbox: you've got a letter waiting for you - already. - - -
- - - - - - - - - - - - - - - - - - - - - diff --git a/doc/C/usage-notes.sgml b/doc/C/usage-notes.sgml deleted file mode 100644 index a4161da810..0000000000 --- a/doc/C/usage-notes.sgml +++ /dev/null @@ -1,41 +0,0 @@ - - Evolution Notes - - An Overview of the Evolution Notes - - In the dark ages before email was invented, there were notes. - Even now, notes are an almost necessary part of our lives. It - only makes sense that Evolution has - a Notes feature. Evolution can help - you take notes in the following ways: - - - - You can take down phone numbers, take school notes, take phone - messages, or even write poetry. - - - - - You can color code each note to help cateogrize each note into - a topic. - - - - - Something - - - - - Something - - - - - - You can start writing notes by clicking Notes in the - shortcut bar. - - - diff --git a/doc/C/usage-sync.sgml b/doc/C/usage-sync.sgml deleted file mode 100644 index 07325e1848..0000000000 --- a/doc/C/usage-sync.sgml +++ /dev/null @@ -1,22 +0,0 @@ - - - Synchronizing with a Hand-held Device - - Once you've set up a synchronization system, it pretty much - takes care of itself. Not only that, it's entirely possible - that your system administrator has set it up for you. All - that this chapter covers is how to use that system once it's - installed and configured. If you need to set it up, consult - . - - - - If you've already got Gnome-pilot set up to use - Evolution, put - your hand-held device on the cradle and press the HotSync - button. - - - No, really. That's all there is to it. - - \ No newline at end of file diff --git a/doc/Camel-Classes b/doc/Camel-Classes deleted file mode 100644 index 93aec087dd..0000000000 --- a/doc/Camel-Classes +++ /dev/null @@ -1,35 +0,0 @@ -CamelException -CamelProvider -CamelThreadProxy -CamelURL -GtkObject - + CamelObject - + CamelAddress - | + CamelInternetAddress - | ` CamelNewsAddress - + CamelDataWrapper - | + CamelMedium - | | ` CamelMimePart - | | ` CamelMimeMessage - | ` CamelMultipart - + CamelFolder - | ` CamelFolderPtProxy - + CamelFolderSearch - + CamelFolderSummary - + CamelMimeFilter - | + CamelMimeFilterBasic - | + CamelMimeFilterCharset - | + CamelMimeFilterIndex - | ` CamelMimeFilterSave - + CamelService - | + CamelStore - | ` CamelTransport - + CamelSession - + CamelStream - | + CamelSeekableStream - | | + CamelSeekableSubstream - | | + CamelStreamFs - | | ` CamelStreamMem - | + CamelStreamBuffer - | ` CamelStreamFilter - ` CamelThreadProxy \ No newline at end of file diff --git a/doc/ChangeLog b/doc/ChangeLog deleted file mode 100644 index 9aedca8af0..0000000000 --- a/doc/ChangeLog +++ /dev/null @@ -1,329 +0,0 @@ -2000-08-09 Aaron Weber - - * C/usage-mainwindow.sgml: Redid menubar description. - - - * C/config-prefs.sgml: Added coverage of folder config, requested - that feature be transferred to config section. Switched to - variablelist in "Other" config section. - - * C/usage-mail.sgml: Added coverage of right-click on messages, - threaded-view. - - * C/usage-mainwindow.sgml: Right-click on folder menu reinstated. - -2000-08-07 Aaron Weber - - * C/config-prefs.sgml: Added news server coverage. Other config - proofing changes. - - -2000-08-05 Aaron Weber - - * C/apx-gpl.sgml: New file. Contains contents of "COPYING", - but marked up (probably not very well, but valid) as docbook - (SGML). - - * C/evolution-guide.sgml: Subtle change to the legal notice: - distinguished manual license from software license. Linked to - apx-gpl.sgml above. - - * C/usage-calendar.sgml: I redid all the usage files. - -2000-07-21 Aaron Weber - - * C/usage-mail.sgml: Added password remembering/forgetting feature. - - * C/config-prefs.sgml: Mostly moved to variablelists, a few - language changes. - - * C/config-setupassist.sgml: Minor changes to formatting, wording. - - * C/usage-notes.sgml: Changed trademark references, other minor - changes. - - * C/usage-calendar.sgml: Minor fixes, added additional calendar - section, removed references to unimplemented features. Spellcheck, - prep for 0.3 release. - -2000-07-19 Aaron Weber - - * C/usage-mail.sgml: lots of minor fixes to language. added - desc. of clahey's cool button-address thing. - - * C/usage-mainwindow.sgml: fixed itemizedlists, ch. to shortcut - bar & folder descs, removed refs to trash. - -2000-07-18 Aaron Weber - - * C/usage-contact.sgml: Altered category addition stuff, plus - suggestions from Kevin. - - * C/apx-gloss.sgml: Added ldap and signature definitions (from - Kevin). - - * C/usage-mail.sgml: Move to variablelists from itemizedlists. - -2000-07-14 Aaron Weber - - * C/usage-contact.sgml: moved to variablelists from itemizedlists - * C/usage-calendar.sgml: moved to variablelists from itemizedlists - -2000-06-29 Aaron Weber - - * C/preface.sgml: Minor fixes. - - * C/usage-notes.sgml: New File for feature that is yet to come. - * C/evolution-guide.sgml: Added entity for notes chapter. - * C/usage-mainwindow.sgml: Un-commented references to notes section. - - * C/apx-authors.sgml: Removed dcm from author list. - - * C/usage-calendar.sgml: Added to-do list features. - -2000-06-28 Aaron Weber - - * C/usage-contact.sgml: commented out future features; redid - contact editor stuff. - - * C/apx-gloss.sgml: Removed "live doc" and added "minicard" - -2000-06-27 Aaron Weber - - * C/devel-action.sgml: Removed file. - * C/devel-script.sgml: Same. - * C/devel-component.sgml: Same. - * C/preface.sgml: Removed references to devel section. - * C/evolution-guide.sgml: Removed references to devel section. - -2000-06-23 Aaron Weber - - * C/evolution-guide.sgml: Made moderate to major stylistic updates - to this, apx-gloss.sgml, and to all files beginning with "usage," - especially wrt HTML mail. - - -<<<<<<< ChangeLog -2000-06-15 Aaron Weber - - * C/usage-contact.sgml: Category stuff improved. - - * C/usage-calendar.sgml: Now covers how to add an event properly. - -======= -======= -======= -2000-07-17 Federico Mena Quintero - - * Makefile.am (SUBDIRS): Added the devel directory. - ->>>>>>> 1.15 -2000-06-28 Peter Williams - - * C/Makefile.am (SGML_FILES): Don't depend on the newly-removed - devel-*.sgml files. - ->>>>>>> 1.13 -2000-06-16 Damon Chaplin - - * C/.cvsignore: added evolution-guide and evolution-guide.junk - so we don't get the '? doc/C/evolution-guide' messages each time we - do a cvs update. - ->>>>>>> 1.12 -2000-06-14 Aaron Weber - - * C/usage-mainwindow.sgml: added sect on menubar, other minor changes. - - * C/usage-mail.sgml: Improved filter and vfolder - description, and some minor changes from me and Kevin. - -2000-06-07 Aaron Weber - - * C/config-prefs.sgml: finished adding calendar prefs. screenshots. - * C/fig/config-cal.png: new file (screenshot for above) - * C/fig/config-mail.png: same - -2000-06-05 Aaron Weber - - * C/usage-calendar.sgml: Incorporated chgs from Kevin. - - * C/config-prefs.sgml: began total overhaul of structure and added - content reflecting new prefs items. needs LOTS more work. - - * C/usage-mail.sgml: changed some references to id's in the - config-prefs section. - - * C/fig/config-mail.png: changed filename from config-prefs.png - -2000-06-01 Aaron Weber - - * C/config-prefs.sgml: filename was wrong, altered. - - * C/usage-mail.sgml: improved filter instructions, vFolder - instructions. still need work though. - - - * C/usage-contact.sgml: added screenshot. - - * C/usage-calendar.sgml: added screenshot. - - * C/config-prefs.sgml: added screenshots, and now describes the - actual prefs dialogs. - - * C/fig/config-camel.png: new (screenshot) file - * C/fig/filter-druid.png: same - * C/fig/vfolder-druid.png: same - * C/fig/calendar.png: same - * C/fig/contact.png: same - * C/fig/vfolder-createrule-fig.png: same - * C/fig/filter-new-fig.png: same - * C/fig/config-camel.png: same - -2000-06-01 Dan Winship - - * Makefile.am: recurse into the C directory - - * C/Makefile.am: Rules to build and install the docs. Mostly - stolen from gnomecal. Only works if you have GDP stuff - (http://www.gnome.org/gdp/) set up on your machine, but won't make - the build fail if you don't. - -2000-05-29 Aaron Weber - - * C/usage-contact.sgml: incorporated kevins notes. - * C/usage-mainwindow.sgml: incorporated kevins notes. - -2000-05-27 Aaron Weber - - * C/evolution-guide.sgml: added Kevin Breit to author and - copyright. - - * C/apx-authors.sgml: Put app authors in a simplelist. - - * C/usage-mail.sgml: Removed USAGE-SETUP insertion, added xref to send - users to config-setupassist chapter. This and the following changes - take setup druid coverage out of usage - section and put it in config section. - * C/config-setupassist.sgml: Added mail druid coverage from - usage-setup.sgml. - * C/usage-setup.sgml: Removed file. contents in - config-setupassist.sgml. - * C/evolution-guide.sgml: Removed - USAGE-SETUP entity (and file usage-setup.sgml.) - - -2000-05-26 Aaron Weber - - * C/fig/mainwindow-pic.png: new file - * C/fig/mail-druid-pic.png: new file - * C/fig: New directory, for figure graphics. - - * C/apx-gloss.sgml: new file. glossary. thx. to kevin from chicago. - - * C/usage-setup.sgml: More accurate description of druid, and - moved to mail section-- see usage-mail.sgml entry. This is a new - location for this entity, and it may move more later. - - - * C/usage-mainwindow.sgml: altered description of starting - evolution. added screenshot for main-window picture. - - * C/usage-mail.sgml: added screenshots, added coverage of setup - druid and put it into get-and-send section, which is probably not - where it should stay. Also started filter druid coverage and - clarified examples, esp. in Bcc: section. - - * C/usage-contact.sgml: Clarified examples. - - * C/preface.sgml: rewording of "what is" and "about book" sections. - - * C/evolution-guide.sgml: added glossary entity APX-GLOSS, altered - phrasing in part intros, changed order of Setup-assistant section. - - * C/config-prefs.sgml: changed wording, removed ref. to re-running - setup assistant. - -2000-05-18 Aaron Weber - - * C/evo_book_0.1.sgml: removed. - - * C/apx-authors.sgml: new file. - * C/apx-bugs.sgml: same. - * C/apx-fdl.sgml: same. - * C/config-prefs.sgml: same. - * C/config-setupassist.sgml: same. - * C/config-sync.sgml: same. - * C/devel-action.sgml: same. - * C/devel-component.sgml: same. - * C/devel-script.sgml: same. - * C/evolution-guide.sgml: same. - * C/preface.sgml: same. - * C/usage-calendar.sgml: same. - * C/usage-contact.sgml: same. - * C/usage-mail.sgml: same. - * C/usage-mainwindow.sgml: same. - * C/usage-setup.sgml: same. - * C/usage-sync.sgml: same. - -2000-05-07 Dan Winship - - * Camel-Classes: sync - -2000-04-16 Aaron Weber - - * C/evo_book_0.1.sgml: new file (doc sgml) - - * C/ : New directory for doc sgml & graphics - -2000-03-05 Christopher James Lahey - - * white-papers/widgets/e-table.sgml: Added Miguel to the author - list for ETable. - -2000-03-03 Christopher James Lahey - - * white-papers/widgets/, white-papers/widgets/e-table.sgml: New - doc for the ETable widget. - - * ChangeLog: Created a ChangeLog file for the docs file and - integrated the individual ChangeLogs. - -2000-03-01 Dan Winship - - * ibex.sgml: Ibex white paper - -2000-02-29 Federico Mena Quintero - - * calendar.sgml: Sections for the calendar user agent and the - calendar client library. - -2000-02-29 Dan Winship - - * camel.sgml: Reorg a bit more, make the
 section narrower,
-	add more references to graphics (the graphics themselves are
-	still in beta), add a section on CamelStream.
-
-2000-02-28  Federico Mena Quintero  
-
-	* calendar.sgml: Section for the personal calendar server.
-
-2000-02-28  Dan Winship  
-
-	* camel.sgml: add Bertrand to authors, edit his additions
-
-2000-02-28  bertrand  
-
-	* camel.sgml: add a blurb about camel offering
-	uniform interface. needs style and grammar corrections. 
-	Talk about virtual folders.
-	Talk about lightweight messages
-	Talk about IMAP. 
-
-2000-02-28  Dan Winship  
-
-	* camel.sgml: Beginnings of a Camel white paper
-
-2000-02-25  Federico Mena Quintero  
-
-	* calendar.sgml: New file for the Evolution calendaring white paper.
diff --git a/doc/Design b/doc/Design
deleted file mode 100644
index 7b7cf6f821..0000000000
--- a/doc/Design
+++ /dev/null
@@ -1,201 +0,0 @@
-
-The Evolution Project specification
-Miguel de Icaza.
-
-
-* Introduction
-
-	Evolution is a project aiming at providing the free software
-	community with a professional, high-quality tool for managing
-	mail, appointments, tasks and other personal information
-	tools.  
-
-	We want to make Evolution a system that addresses our needs
-	(the free software development community) and we believe that
-	by addressing our needs, we will provide a system that will
-	scale in the years to come for other users that are just
-	starting to use computers and the internet.
-
-	The main objectives of Evolution are to provide these powerful
-	features, and to make the user interface as pretty and
-	polished as possible.
-
-	Evolution is a GNOME application and a number of auxiliary
-	CORBA servers that act as the storage backends. 
-
-	Evolution will copy the best user interface bits and the best
-	ideas and features found on contemporary groupware systems.
-
-* Evolution internals.
-
-	Evolution can store its information locally (files for mail,
-	calendar and address book) or on a remote server (imap/pop,
-	cap, ldap).  
-
-	Given the importance of syncing in this modern PDA world,
-	the Evolution GUI acts as a client to the data repository.
-	The data repository is a GUI-less CORBA server called Wombat.
-
-	Wombat provides a unified access system to the calendar and
-	addressbook data (doing mail is a bit hard, so we are leaving
-	this as a TODO item for now).
-
-	Wombat's CORBA interfaces are notifier-based.  This means that
-	CORBA requests sent to Wombat do not return values
-	inmediately, but rather than for Wombat requests the user has
-	to provide a CORBA object that will be notified of what
-	happened.
-
-	Yes, that sounds hairy.  It is actually pretty simple.  It
-	basically means that you submit requests to Wombat, and a
-	callback is invoked in your code when the request has been
-	carried away. 
-
-	This enables a Palm to sync to the repository without having
-	the GUI for Evolution running.  It also means that volunteers
-	will be able to write text-based and web-based versions of
-	Evolution (not me though :-).
-
-* Evolution as a platform
-
-	Evolution is more than a client for managing the above
-	information: Evolution is a platform for building groupware
-	applications that use the above components to get their work done.
-
-	To achieve this Evolution is designed to be scriptable, and it
-	exports its internals trough CORBA/Bonobo.  It is implemented
-	as a collection of Bonobo containers and Bonobo components.
-
-	There is a clean separation between the views (the user
-	interface) and the model (the view).  The views that we are
-	writing are GNOME based, and they talk to the Wombat CORBA
-	server.
-
-	Wombat takes care of notifications to the various clients for
-	the data. 
-
-* The overall organization
-
-	A bar similar to outlook provides shortcuts for accessing the
-	various resources managed by Evolution: mail folders,
-	contacts, tasks, journal entries, notes, messages and other
-	user-defined destinations. 
-
-* User interface widgets
-
-** The ETable package
-
-	This package provides a way of displaying and editing tables.
-
-	Tables are displayed based on a TableColumn definition that
-	defines the layout used for the display.  Table Columns can be
-	nested, and the package does grouping of information displayed
-	according to the criteria defined there.
-
-	This is used in multiple places troughout evolution: it is
-	used for the Mail summary display, for the TODO display and
-	TODO new data entry and for the address book.
-
-	Nesting in the address book can be performed on various
-	fields.  For example, a first level of nesting could be
-	"Company" and a second level would be "Country" the result is
-	a 2-level tree that can be collapsed expanded and contains the
-	information sorted/grouped by those two criteria.
-
-	The user interface for this will be copied from Outlook: the
-	possibility of adding and removing fields with drag and drop
-	as well as grouping using drag and drop.
-
-* The Mail system
-
-** The Mail sources
-
-	The mail system will support 4 sources of mail:
-
-		POP3 (transfer to a local file).
-		IMAP
-		Local mbox format in $MAIL.
-		Local mbox format that have other delivery points.
-
-	On top of that, it will be possible to browse existing mbox
-	archives (and possibly other formats in the future, like
-	Mailbox and Maildir).
-
-** Storing the mail
-
-	Mail that gets incorporated into the system is stored in mbox
-	format, and summary files are provided for quick access to the
-	files.  No modifications to the file on disk is performed (I
-	am not quite sure about this, perhaps we want to add the
-	status flags and some method for adding metadata to the mail).
-
-	Summary files are rebuilt on demand or rebuild if the mbox
-	file and the summary file have got out of sync.
-
-	A Metadata system that will enable us to attach information to
-	a message will have to be designed and implemented (enabling
-	users to add annotations to mails, and special keywords and
-	flags in a per-message fashion).
-
-** Folders
-
-	Michael Zucchi is working on a system that will let users
-	easily define rules for splitting their incoming mail into
-	physical folders.  
-
-	A further refinement to Folders are Virtual Folders.  This
-	basically provides a powerful search and viewing facility for
-	mail.  It works like this: when a mail is "incorporated" into
-	Evolution it is scanned and indexed.
-
-	Then users can enter queries into Evolution that will search
-	the entire database of messages.	
-
-** Virtual folders
-
-	Virtual folders will enable users to read/browse their mail in
-	new ways: by specifying search criterias, these folders will
-	contain messages that match the criteria given.  
-
-	There is more information about this in the libcamel
-	directory. 
-
-	We will index all headers from a message, and possible the
-	contents of messages and keep those on a separate file, to
-	enable users to query their mail database.
-
-** Mail summary display
-
-	The summary will be displayed using the ETable package, to
-	enable users to add a number of sorting criteria and various
-	display methods for the summary view.
-
-	The Outlook methods for displaying will be present on the
-	system.
-
-	Message threading will be supported in Evolution.
-
-** Message display engine
-
-	We are going to be using a combination of
-	libcamel/limime/libjamie to parse messages and render them
-	into an HTML buffer.
-
-* The HTML engine
-
-	The GtkHTML engine will be used to display messages, and will
-	be extended to support a number of features that we require:
-	internal handling of characters will be based on Unicode
-
-* The message composer
-
-	Regular features found in composers will be added: connecting
-	the composer to the address book, support for drag and drop
-	for including attachments, editing the message, archiving
-	drafts and archiving messages sent.
-
-	Ettore has been working on adding editing support to the
-	GtkHTML and he is working currently on a Bonobo component that
-	will provide a ready-to-use Bonobo control for embedding into
-	other applications.
-
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644
index 7b5420fee8..0000000000
--- a/doc/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = C devel
diff --git a/doc/devel/.cvsignore b/doc/devel/.cvsignore
deleted file mode 100644
index c24a54fbcc..0000000000
--- a/doc/devel/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Makefile
-Makefile.in
-html
-evolution-devel-guide.html
diff --git a/doc/devel/ChangeLog b/doc/devel/ChangeLog
deleted file mode 100644
index 7e0c8147ba..0000000000
--- a/doc/devel/ChangeLog
+++ /dev/null
@@ -1,35 +0,0 @@
-2000-08-14  Federico Mena Quintero  
-
-	* calendar/cal-util/*: Integrated the cal-util library into the
-	documentation framework.
-
-	* calendar/Makefile.am (SUBDIRS): Added the cal-util directory.
-
-	* evolution-devel-guide.sgml: Added entities for the cal-util stuff.
-	Added entity for libical.
-
-	* calendar/reference.sgml: Added the cal-util reference entries.
-
-	* calendar/cal-client/evolution-cal-client-sections.txt: Updated
-	for new API.
-
-2000-08-09  Peter Williams  
-
-	* Makefile.am (maintainer-clean-local): Don't depend
-	on 'clean'; this messes up maintainer-clean.
-
-2000-07-17  Federico Mena Quintero  
-
-	* calendar/cal-client/tmpl/cal-client.sgml: Populated.
-
-	* evolution-devel-guide.sgml: New  toplevel for the
-	Evolution Developer's Guide.
-
-	* calendar/evolution-calendar.sgml: New  for the calendar
-	developer's documentation.
-
-	* calendar/architecture.sgml: New  for the calendar
-	architecture.
-
-	* calendar/reference.sgml: New  for the calendar API
-	reference.
diff --git a/doc/devel/Makefile.am b/doc/devel/Makefile.am
deleted file mode 100644
index 0d3cec5a1c..0000000000
--- a/doc/devel/Makefile.am
+++ /dev/null
@@ -1,64 +0,0 @@
-SUBDIRS = calendar
-
-# The name of the module.
-DOC_MODULE=evolution-devel-guide
-
-# The top-level SGML file.
-DOC_MAIN_SGML_FILE=evolution-devel-guide.sgml
-
-HTML_DIR=$(datadir)/gnome/html
-
-TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
-
-evolution_devel_guidedir = $(HTML_DIR)
-evolution_devel_guide_DATA =			\
-	evolution-devel-guide.html
-
-content_files =					\
-	evolution-devel-guide.sgml
-
-EXTRA_DIST = 					\
-	$(evolution_devel_guide_DATA)		\
-	$(content_files)
-
-if ENABLE_GTK_DOC
-evolution-devel-guide.html: html/book1.html
-	-cd $(srcdir) && cp html/book1.html evolution-devel-guide.html
-else
-evolution-devel-guide.html:
-endif
-
-html/book1.html: $(content-files)
-	$(MAKE) html
-
-html:
-	test -d $(srcdir)/html || mkdir $(srcdir)/html
-	-cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
-
-clean-local:
-	rm -f *~ *.bak *.signals *-unused.txt
-
-maintainer-clean-local:
-	cd $(srcdir) && rm -rf html
-
-install-data-local:
-	$(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)
-	(installfiles=`echo $(srcdir)/html/*.html`; \
-	if test "$$installfiles" = '$(srcdir)/html/*.html'; \
-	then echo '-- Nothing to install' ; \
-	else \
-	  for i in $$installfiles; do \
-	    echo '-- Installing '$$i ; \
-	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
-	  done; \
-	  echo '-- Installing $(srcdir)/html/index.sgml' ; \
-	  $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR); \
-	  echo '-- Fixing Crossreferences' ; \
-	  gtkdoc-fixxref --module=$(DOC_MODULE) --html-dir=$(HTML_DIR)|| true; \
-	fi)
-
-dist-hook:
-	mkdir $(distdir)/html
-	-cp $(srcdir)/html/*.html $(srcdir)/html/*.css $(distdir)/html
-
-.PHONY: html
diff --git a/doc/devel/calendar/.cvsignore b/doc/devel/calendar/.cvsignore
deleted file mode 100644
index 282522db03..0000000000
--- a/doc/devel/calendar/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/doc/devel/calendar/Makefile.am b/doc/devel/calendar/Makefile.am
deleted file mode 100644
index 2220e1d59b..0000000000
--- a/doc/devel/calendar/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-SUBDIRS = cal-client cal-util
-
-EXTRA_DIST =				\
-	architecture.sgml		\
-	evolution-calendar.sgml		\
-	reference.sgml
diff --git a/doc/devel/calendar/architecture.sgml b/doc/devel/calendar/architecture.sgml
deleted file mode 100644
index 08e4c82b35..0000000000
--- a/doc/devel/calendar/architecture.sgml
+++ /dev/null
@@ -1,94 +0,0 @@
-  
-    Architecture of the Calendar
-
-    
-      This chapter gives an overview of the Evolution Calendar
-      architecture.  It describes the model/view split of the calendar
-      into a personal calendar server, or PCS, and the GUI clients
-      that appear inside the Evolution shell.
-    
-
-    
-
-    
-      Model/View Separation
-
-      
-	Like other base components in Evolution, the calendar
-	separates the data model from the views or clients.  This is
-	done so that multiple clients can access the same calendar
-	data in an orderly fashion and without clashes.  For example,
-	the user may be running a graphical calendar client.  If he
-	then wants to synchronize his calendar with a handheld device,
-	then the corresponding synchronization program (e.g. a conduit
-	for the gnome-pilot package) will
-	also need to access the calendar storage.  It is important
-	that both the GUI client and the synchronization program keep
-	a consistent view of the calendar at all times, otherwise one
-	of them will be left in an inconsistent state if the
-	calendar's data changes unexpectedly.
-      
-
-      
-	Evolution puts the calendar storage in a daemon called the
-	Wombat and completely separates it from clients who wants to
-	access calendar data.  This part of the Wombat is called the
-	personal calendar server, or &PCS;.  Clients must contact the
-	&PCS; and ask it to open an existing calendar or create a new
-	one.  When a calendar component object (e.g. an appointment or
-	to-do item) changes in the &PCS; it will notify all the
-	clients that are using the component's parent calendar.
-      
-    
-
-    
-
-    
-      Personal Calendar Server
-
-      
-	The personal calendar server, or &PCS;, provides centralized
-	management and storage of a user's personal calendar.
-	Multiple clients can connect to the &PCS; simultaneously to
-	query and modify the user's calendar in a synchronized
-	fashion.  The main features of the &PCS; are as follows:
-      
-
-      
-	Storage
-
-	
-	  The &PCS; is responsible for loading and saving calendars.
-	  Centralizing the loading and saving functionality allows
-	  multiple clients to use the same calendar at the same time
-	  without having to worry about each other.
-	
-      
-
-      
-	Basic Queries
-
-	
-	  The &PCS; provides functions to do basic queries on a
-	  calendar, for example, a client can ask the server for a
-	  list of all the appointments in the calendar, or for all the
-	  data for a specific appointment.
-	
-      
-
-      
-	Recurrence and Alarm Queries
-
-	
-	  
-	
-      
-    
-  
-
-
diff --git a/doc/devel/calendar/cal-client/.cvsignore b/doc/devel/calendar/cal-client/.cvsignore
deleted file mode 100644
index 0842a93f7a..0000000000
--- a/doc/devel/calendar/cal-client/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-sgml
-Makefile
-Makefile.in
diff --git a/doc/devel/calendar/cal-client/Makefile.am b/doc/devel/calendar/cal-client/Makefile.am
deleted file mode 100644
index 44d43639a8..0000000000
--- a/doc/devel/calendar/cal-client/Makefile.am
+++ /dev/null
@@ -1,76 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# The name of the module.
-DOC_MODULE=evolution-cal-client
-
-# The top-level SGML file.
-DOC_MAIN_SGML_FILE=evolution-cal-client.sgml
-
-# The directory containing the source code (if it contains documentation).
-DOC_SOURCE_DIR=$(EVOLUTION_DIR)/calendar/cal-client
-
-CFLAGS ="						\
-	-I$(top_srcdir)/calendar			\
-	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
-	-I$(top_builddir)/libical/src/libical		\
-	-I$(top_srcdir)/libical/src/libical		\
-	$(BONOBO_VFS_GNOME_CFLAGS)			\
-	"
-
-LDFLAGS="								\
-	$(BONOBO_VFS_GNOME_LIBS)					\
-	$(top_builddir)/calendar/cal-client/.libs/libcal-client.a	\
-	$(top_builddir)/calendar/cal-util/.libs/libcal-util.a		\
-	$(top_builddir)/libical/src/libical/libical.a			\
-	$(top_builddir)/libversit/.libs/libversit.al			\
-	"
-
-HTML_DIR=$(datadir)/gnome/html
-
-TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
-
-tmpl_sources =					\
-	tmpl/cal-client.sgml			\
-	tmpl/evolution-cal-client-unused.sgml
-
-evolution_cal_client_docdir = $(HTML_DIR)
-evolution_cal_client_doc_DATA =			\
-	evolution-cal-client.hierarchy		\
-	evolution-cal-client.types		\
-	evolution-cal-client-decl.txt		\
-	evolution-cal-client-sections.txt
-
-EXTRA_DIST = 					\
-	$(evolution_cal_client_doc_DATA)
-
-sgml/evolution-cal-client-doc.bottom: $(tmpl_sources)
-	$(MAKE) sgml
-
-scan:
-	-(cd $(srcdir) \
-	&& env CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) \
-		 gtkdoc-scanobj --module=$(DOC_MODULE) \
-	&& gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="cal-listener.h evolution-calendar.h" )
-
-templates: scan
-	cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE)
-
-sgml:
-	cd $(srcdir) \
-	&& gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)
-
-clean-local:
-	rm -f *~ *.bak *.signals *-unused.txt
-
-maintainer-clean-local: clean
-	cd $(srcdir) && rm -rf sgml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
-
-dist-hook:
-	mkdir $(distdir)/sgml
-	mkdir $(distdir)/tmpl
-	-cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
-	-cp $(srcdir)/sgml/*.sgml $(distdir)/sgml
-	-cp $(srcdir)/sgml/*.bottom $(srcdir)/sgml/*.top $(distdir)/sgml
-
-.PHONY : sgml templates scan
diff --git a/doc/devel/calendar/cal-client/evolution-cal-client-decl.txt b/doc/devel/calendar/cal-client/evolution-cal-client-decl.txt
deleted file mode 100644
index 0574d70678..0000000000
--- a/doc/devel/calendar/cal-client/evolution-cal-client-decl.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-
-CAL_CLIENT_TYPE
-#define CAL_CLIENT_TYPE            (cal_client_get_type ())
-
-
-CAL_CLIENT
-#define CAL_CLIENT(obj)            (GTK_CHECK_CAST ((obj), CAL_CLIENT_TYPE, CalClient))
-
-
-CAL_CLIENT_CLASS
-#define CAL_CLIENT_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), CAL_CLIENT_TYPE, CalClientClass))
-
-
-IS_CAL_CLIENT
-#define IS_CAL_CLIENT(obj)         (GTK_CHECK_TYPE ((obj), CAL_CLIENT_TYPE))
-
-
-IS_CAL_CLIENT_CLASS
-#define IS_CAL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_CLIENT_TYPE))
-
-
-CalClient
-
-
-CalClientClass
-
-
-CalClientLoadStatus
-typedef enum {
-	CAL_CLIENT_LOAD_SUCCESS,
-	CAL_CLIENT_LOAD_ERROR,
-	CAL_CLIENT_LOAD_IN_USE,
-	CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED
-} CalClientLoadStatus;
-
-
-CalClientGetStatus
-typedef enum {
-	CAL_CLIENT_GET_SUCCESS,
-	CAL_CLIENT_GET_NOT_FOUND,
-	CAL_CLIENT_GET_SYNTAX_ERROR
-} CalClientGetStatus;
-
-
-CalClient
-struct CalClient {
-	GtkObject object;
-
-	/* Private data */
-	gpointer priv;
-};
-
-
-cal_client_get_type
-GtkType  
-void
-
-
-cal_client_construct
-CalClient  *
-CalClient *client
-
-
-cal_client_new
-CalClient  *
-void
-
-
-cal_client_load_calendar
-gboolean  
-CalClient *client, const char *str_uri
-
-
-cal_client_create_calendar
-gboolean  
-CalClient *client, const char *str_uri
-
-
-cal_client_get_n_objects
-int  
-CalClient *client, CalObjType type
-
-
-cal_client_get_object
-CalClientGetStatus  
-CalClient *client,const char *uid,CalComponent **comp
-
-
-cal_client_get_uid_by_pilot_id
-CalClientGetStatus  
-CalClient *client,unsigned long pilot_id,char **uid
-
-
-cal_client_update_pilot_id
-void  
-CalClient *client, char *uid,unsigned long pilot_id,unsigned long pilot_status
-
-
-cal_client_get_uids
-GList  *
-CalClient *client, CalObjType type
-
-
-cal_client_get_objects_in_range
-GList  *
-CalClient *client, CalObjType type,time_t start, time_t end
-
-
-cal_client_generate_instances
-void  
-CalClient *client, CalObjType type,time_t start, time_t end,CalRecurInstanceFn cb, gpointer cb_data
-
-
-cal_client_get_alarms_in_range
-GList  *
-CalClient *client, time_t start, time_t end
-
-
-cal_client_get_alarms_for_object
-gboolean  
-CalClient *client, const char *uid,time_t start, time_t end,GList **alarms
-
-
-cal_client_update_object
-gboolean  
-CalClient *client, CalComponent *comp
-
-
-cal_client_remove_object
-gboolean  
-CalClient *client, const char *uid
-
diff --git a/doc/devel/calendar/cal-client/evolution-cal-client-sections.txt b/doc/devel/calendar/cal-client/evolution-cal-client-sections.txt
deleted file mode 100644
index c37b223247..0000000000
--- a/doc/devel/calendar/cal-client/evolution-cal-client-sections.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-cal-client/cal-client.h
-
-
-cal-client -CAL_CLIENT -CalClient - -CalClientLoadStatus -CalClientGetStatus -cal_client_new -cal_client_load_calendar -cal_client_create_calendar -cal_client_get_n_objects -cal_client_get_object -cal_client_get_objects_in_range -cal_client_generate_instances -cal_client_get_uid_by_pilot_id -cal_client_update_pilot_id -cal_client_get_uids -cal_client_get_alarms_in_range -cal_client_get_alarms_for_object -cal_client_update_object -cal_client_remove_object - - - -CAL_CLIENT_TYPE -IS_CAL_CLIENT -CAL_CLIENT_CLASS -IS_CAL_CLIENT_CLASS -cal_client_get_type -cal_client_construct - - -CalClient - -
diff --git a/doc/devel/calendar/cal-client/evolution-cal-client.args b/doc/devel/calendar/cal-client/evolution-cal-client.args deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/devel/calendar/cal-client/evolution-cal-client.hierarchy b/doc/devel/calendar/cal-client/evolution-cal-client.hierarchy deleted file mode 100644 index 88efa3e673..0000000000 --- a/doc/devel/calendar/cal-client/evolution-cal-client.hierarchy +++ /dev/null @@ -1,2 +0,0 @@ -GtkObject - CalClient diff --git a/doc/devel/calendar/cal-client/evolution-cal-client.signals b/doc/devel/calendar/cal-client/evolution-cal-client.signals deleted file mode 100644 index 97e360b6a2..0000000000 --- a/doc/devel/calendar/cal-client/evolution-cal-client.signals +++ /dev/null @@ -1,21 +0,0 @@ - -CalClient::cal-loaded -void -CalClient *calclient -GtkEnum arg1 - - - -CalClient::obj-updated -void -CalClient *calclient -GtkString arg1 - - - -CalClient::obj-removed -void -CalClient *calclient -GtkString arg1 - - diff --git a/doc/devel/calendar/cal-client/evolution-cal-client.types b/doc/devel/calendar/cal-client/evolution-cal-client.types deleted file mode 100644 index 84d65a6637..0000000000 --- a/doc/devel/calendar/cal-client/evolution-cal-client.types +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -cal_client_get_type diff --git a/doc/devel/calendar/cal-client/tmpl/cal-client.sgml b/doc/devel/calendar/cal-client/tmpl/cal-client.sgml deleted file mode 100644 index a146709b8a..0000000000 --- a/doc/devel/calendar/cal-client/tmpl/cal-client.sgml +++ /dev/null @@ -1,291 +0,0 @@ - -CalClient - - -GTK+ object for communication with personal calendar server. - - - - The #CalClient object provides a nice GTK+ wrapper for the CORBA - interfaces that are used to communicate between calendar clients - and the personal calendar server in the user's Wombat daemon. - - - - After a #CalClient object is created with cal_client_new(), it - should be asked to send a request to the personal calendar server - to load or create a calendar based on its URI. The server will - asynchronously notify the client about completion of the request, - and will return an appropriate result code; this should be noted - by the client with the cal_loaded signal. - - - - When a client asks the server to update or delete a calendar - component from the storage, the server will do so and then notify - all the clients about the update or removal. This is the core of - the model/view split between calendar clients and the storage in - the personal calendar server. Clients should watch the obj_updated and obj_removed signals on the - CalClient objects they create so that they can be notified about - changes in the storage. - - - - - - - - - - Casts a #GtkObject to a #CalClient. - - -@obj: A GTK+ object. - - - - - These values describe the status of a calendar load or create - request. After asking a calendar factory to load or create a - calendar, the provided listener will get notification about the - result in asynchronous fashion. Such notification is represented - by one of these enumeration values. For values other than - #CAL_CLIENT_LOAD_SUCCESS, the #CalClient object will not accept - any other operations on the calendar and it should just be - destroyed. - - -@CAL_CLIENT_LOAD_SUCCESS: Indicates a successful load or create - operation; the corresponding calendar is ready for use. -@CAL_CLIENT_LOAD_ERROR: Indicates an error while loading or creating - the calendar. -@CAL_CLIENT_LOAD_IN_USE: Indicates that a create request failed - because the specified calendar was already being used by another - client. -@CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED: Indicates an error due to - trying to load a calendar for which a backend type is not present. - - - - These values describe the result of the cal_client_get_object() - function. - - -@CAL_CLIENT_GET_SUCCESS: Indicates a successful get operation. -@CAL_CLIENT_GET_NOT_FOUND: Indicates that the requested object was - not found. -@CAL_CLIENT_GET_SYNTAX_ERROR: Indicates a syntax error when parsing - the requested object. This could indicate a bug in the calendar - client libraries or in the Wombat server. - - - - - - -@Returns: - - - - - - - -@client: -@str_uri: -@Returns: - - - - - - - -@client: -@str_uri: -@Returns: - - - - - - - -@client: -@type: -@Returns: - - - - - - - -@client: -@uid: -@comp: -@Returns: - -@ico: - - - - - - - -@client: -@type: -@start: -@end: -@Returns: - - - - - - - -@client: -@type: -@start: -@end: -@cb: -@cb_data: - - - - - - - -@client: -@pilot_id: -@uid: -@Returns: - - - - - - - -@client: -@uid: -@pilot_id: -@pilot_status: - - - - - - - -@client: -@type: -@Returns: - - - - - - - -@client: -@start: -@end: -@Returns: - - - - - - - -@client: -@uid: -@start: -@end: -@alarms: -@Returns: - - - - - - - -@client: -@comp: -@Returns: - -@ico: - - - - - - - -@client: -@uid: -@Returns: - - - - - This signal is emitted some time after the calendar clients sends - a load or create request to the personal calendar server. The - server will notify the client asynchronously of the completion of - the request. The @status parameter indicates the status of the - request. - - -@calclient: the object which received the signal. -@arg1: - -@client: Calendar client which received the notification. -@status: Status of the request. See the description of - #CalClientLoadStatus for more details. - - - - This signal is emitted when the calendar clients receives - notification of a calendar component's data being changed in the - personal calendar server. Graphical clients may want to get the - new version of the object and update their display, for example. - - -@calclient: the object which received the signal. -@arg1: - -@client: Calendar client which received the notification. -@uid: Unique identifier of the calendar component that changed in the - personal calendar server's storage. - - - - This signal is emitted when the calendar client receives - notification for a calendar component being removed from the - storage in the personal calendar server. Graphical clients may - want to delete the corresponding object from their display, for - example. - - -@calclient: the object which received the signal. -@arg1: - -@client: Calendar client which received the notification. -@uid: Unique identifier of the calendar component that was removed - from the personal calendar server's storage. - - - diff --git a/doc/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml b/doc/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml deleted file mode 100644 index 5576dbd57f..0000000000 --- a/doc/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -@client: -@start: -@end: -@Returns: - diff --git a/doc/devel/calendar/cal-util/.cvsignore b/doc/devel/calendar/cal-util/.cvsignore deleted file mode 100644 index 0842a93f7a..0000000000 --- a/doc/devel/calendar/cal-util/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -sgml -Makefile -Makefile.in diff --git a/doc/devel/calendar/cal-util/Makefile.am b/doc/devel/calendar/cal-util/Makefile.am deleted file mode 100644 index 8861aa03cb..0000000000 --- a/doc/devel/calendar/cal-util/Makefile.am +++ /dev/null @@ -1,75 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# The name of the module. -DOC_MODULE=evolution-cal-util - -# The top-level SGML file. -DOC_MAIN_SGML_FILE=evolution-cal-util.sgml - -# The directory containing the source code (if it contains documentation). -DOC_SOURCE_DIR=$(EVOLUTION_DIR)/calendar/cal-util - -CFLAGS =" \ - -I$(top_srcdir)/calendar \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -I$(top_builddir)/libical/src/libical \ - -I$(top_srcdir)/libical/src/libical \ - $(BONOBO_VFS_GNOME_CFLAGS) \ - " - -LDFLAGS=" \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(top_builddir)/calendar/cal-util/.libs/libcal-util.a \ - $(top_builddir)/libical/src/libical/libical.a \ - $(top_builddir)/libversit/.libs/libversit.al \ - " - -HTML_DIR=$(datadir)/gnome/html - -TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) - -tmpl_sources = \ - tmpl/cal-util.sgml \ - tmpl/evolution-cal-util-unused.sgml - -evolution_cal_util_docdir = $(HTML_DIR) -evolution_cal_util_doc_DATA = \ - evolution-cal-util.hierarchy \ - evolution-cal-util.types \ - evolution-cal-util-decl.txt \ - evolution-cal-util-sections.txt - -EXTRA_DIST = \ - $(evolution_cal_util_doc_DATA) - -sgml/evolution-cal-util-doc.bottom: $(tmpl_sources) - $(MAKE) sgml - -scan: - -(cd $(srcdir) \ - && env CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) \ - gtkdoc-scanobj --module=$(DOC_MODULE) \ - && gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="calobj.h icalendar-save.h icalendar.h" ) - -templates: scan - cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) - -sgml: - cd $(srcdir) \ - && gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) - -clean-local: - rm -f *~ *.bak *.signals *-unused.txt - -maintainer-clean-local: clean - cd $(srcdir) && rm -rf sgml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt - -dist-hook: - mkdir $(distdir)/sgml - mkdir $(distdir)/tmpl - -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl - -cp $(srcdir)/sgml/*.sgml $(distdir)/sgml - -cp $(srcdir)/sgml/*.bottom $(srcdir)/sgml/*.top $(distdir)/sgml - -.PHONY : sgml templates scan diff --git a/doc/devel/calendar/cal-util/evolution-cal-util-decl.txt b/doc/devel/calendar/cal-util/evolution-cal-util-decl.txt deleted file mode 100644 index eb108b868f..0000000000 --- a/doc/devel/calendar/cal-util/evolution-cal-util-decl.txt +++ /dev/null @@ -1,852 +0,0 @@ - -CAL_COMPONENT_TYPE -#define CAL_COMPONENT_TYPE (cal_component_get_type ()) - - -CAL_COMPONENT -#define CAL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), CAL_COMPONENT_TYPE, CalComponent)) - - -CAL_COMPONENT_CLASS -#define CAL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_COMPONENT_TYPE, \ - CalComponentClass)) - - -IS_CAL_COMPONENT -#define IS_CAL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), CAL_COMPONENT_TYPE)) - - -IS_CAL_COMPONENT_CLASS -#define IS_CAL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_COMPONENT_TYPE)) - - -CalComponentVType -typedef enum { - CAL_COMPONENT_NO_TYPE, - CAL_COMPONENT_EVENT, - CAL_COMPONENT_TODO, - CAL_COMPONENT_JOURNAL, - CAL_COMPONENT_FREEBUSY, - CAL_COMPONENT_TIMEZONE -} CalComponentVType; - - -CalComponentField -typedef enum { - CAL_COMPONENT_FIELD_CATEGORIES, /* concatenation of the categories list */ - CAL_COMPONENT_FIELD_CLASSIFICATION, - CAL_COMPONENT_FIELD_COMPLETED, - CAL_COMPONENT_FIELD_DTEND, - CAL_COMPONENT_FIELD_DTSTART, - CAL_COMPONENT_FIELD_DUE, - CAL_COMPONENT_FIELD_GEO, - CAL_COMPONENT_FIELD_PERCENT, - CAL_COMPONENT_FIELD_PRIORITY, - CAL_COMPONENT_FIELD_SUMMARY, - CAL_COMPONENT_FIELD_TRANSPARENCY, - CAL_COMPONENT_FIELD_URL, - CAL_COMPONENT_FIELD_HAS_ALARMS, /* not a real field */ - CAL_COMPONENT_FIELD_ICON, /* not a real field */ - CAL_COMPONENT_FIELD_COMPLETE, /* not a real field */ - CAL_COMPONENT_FIELD_RECURRING, /* not a real field */ - CAL_COMPONENT_FIELD_OVERDUE, /* not a real field */ - CAL_COMPONENT_FIELD_COLOR, /* not a real field */ - CAL_COMPONENT_FIELD_NUM_FIELDS -} CalComponentField; - - -CalComponentClassification -typedef enum { - CAL_COMPONENT_CLASS_NONE, - CAL_COMPONENT_CLASS_PUBLIC, - CAL_COMPONENT_CLASS_PRIVATE, - CAL_COMPONENT_CLASS_CONFIDENTIAL, - CAL_COMPONENT_CLASS_UNKNOWN -} CalComponentClassification; - - -CalComponentDateTime -typedef struct { - /* Actual date/time value */ - struct icaltimetype *value; - - /* Timezone ID */ - const char *tzid; -} CalComponentDateTime; - - -CalComponentPeriodType -typedef enum { - CAL_COMPONENT_PERIOD_DATETIME, - CAL_COMPONENT_PERIOD_DURATION -} CalComponentPeriodType; - - -CalComponentPeriod -typedef struct { - CalComponentPeriodType type; - - struct icaltimetype start; - - union { - struct icaltimetype end; - struct icaldurationtype duration; - } u; -} CalComponentPeriod; - - -CalComponentText -typedef struct { - /* Description string */ - const char *value; - - /* Alternate representation URI */ - const char *altrep; -} CalComponentText; - - -CalComponentTransparency -typedef enum { - CAL_COMPONENT_TRANSP_NONE, - CAL_COMPONENT_TRANSP_TRANSPARENT, - CAL_COMPONENT_TRANSP_OPAQUE, - CAL_COMPONENT_TRANSP_UNKNOWN -} CalComponentTransparency; - - -CalComponentAlarm - - -CalComponent - - -CalComponentClass - - -CalComponentPrivate - - -CalComponent -struct CalComponent { - GtkObject object; - - /* Private data */ - CalComponentPrivate *priv; -}; - - -cal_component_get_type -GtkType -void - - -cal_component_gen_uid -char * -void - - -cal_component_new -CalComponent * -void - - -cal_component_clone -CalComponent * -CalComponent *comp - - -cal_component_set_new_vtype -void -CalComponent *comp, CalComponentVType type - - -cal_component_set_icalcomponent -gboolean -CalComponent *comp, icalcomponent *icalcomp - - -cal_component_get_icalcomponent -icalcomponent * -CalComponent *comp - - -cal_component_get_vtype -CalComponentVType -CalComponent *comp - - -cal_component_get_as_string -char * -CalComponent *comp - - -cal_component_commit_sequence -void -CalComponent *comp - - -cal_component_get_uid -void -CalComponent *comp, const char **uid - - -cal_component_set_uid -void -CalComponent *comp, const char *uid - - -cal_component_get_categories_list -void -CalComponent *comp, GSList **categ_list - - -cal_component_set_categories_list -void -CalComponent *comp, GSList *categ_list - - -cal_component_get_classification -void -CalComponent *comp, CalComponentClassification *classif - - -cal_component_set_classification -void -CalComponent *comp, CalComponentClassification classif - - -cal_component_get_comment_list -void -CalComponent *comp, GSList **text_list - - -cal_component_set_comment_list -void -CalComponent *comp, GSList *text_list - - -cal_component_get_completed -void -CalComponent *comp, struct icaltimetype **t - - -cal_component_set_completed -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_created -void -CalComponent *comp, struct icaltimetype **t - - -cal_component_set_created -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_description_list -void -CalComponent *comp, GSList **text_list - - -cal_component_set_description_list -void -CalComponent *comp, GSList *text_list - - -cal_component_get_dtend -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_set_dtend -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_get_dtstamp -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_set_dtstamp -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_dtstart -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_set_dtstart -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_get_due -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_set_due -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_get_exdate_list -void -CalComponent *comp, GSList **exdate_list - - -cal_component_set_exdate_list -void -CalComponent *comp, GSList *exdate_list - - -cal_component_get_exrule_list -void -CalComponent *comp, GSList **recur_list - - -cal_component_set_exrule_list -void -CalComponent *comp, GSList *recur_list - - -cal_component_get_geo -void -CalComponent *comp, struct icalgeotype **geo - - -cal_component_set_geo -void -CalComponent *comp, struct icalgeotype *geo - - -cal_component_get_last_modified -void -CalComponent *comp, struct icaltimetype **t - - -cal_component_set_last_modified -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_percent -void -CalComponent *comp, int **percent - - -cal_component_set_percent -void -CalComponent *comp, int *percent - - -cal_component_get_priority -void -CalComponent *comp, int **priority - - -cal_component_set_priority -void -CalComponent *comp, int *priority - - -cal_component_get_rdate_list -void -CalComponent *comp, GSList **period_list - - -cal_component_set_rdate_list -void -CalComponent *comp, GSList *period_list - - -cal_component_has_rdates -gboolean -CalComponent *comp - - -cal_component_get_rrule_list -void -CalComponent *comp, GSList **recur_list - - -cal_component_set_rrule_list -void -CalComponent *comp, GSList *recur_list - - -cal_component_has_rrules -gboolean -CalComponent *comp - - -cal_component_get_sequence -void -CalComponent *comp, int **sequence - - -cal_component_set_sequence -void -CalComponent *comp, int *sequence - - -cal_component_get_summary -void -CalComponent *comp, CalComponentText *summary - - -cal_component_set_summary -void -CalComponent *comp, CalComponentText *summary - - -cal_component_get_transparency -void -CalComponent *comp, CalComponentTransparency *transp - - -cal_component_set_transparency -void -CalComponent *comp, CalComponentTransparency transp - - -cal_component_get_url -void -CalComponent *comp, const char **url - - -cal_component_set_url -void -CalComponent *comp, const char *url - - -cal_component_get_pilot_id -void -CalComponent *comp, unsigned long *pilot_id - - -cal_component_set_pilot_id -void -CalComponent *comp, unsigned long pilot_id - - -cal_component_get_pilot_status -void -CalComponent *comp, unsigned long *pilot_status - - -cal_component_set_pilot_status -void -CalComponent *comp, unsigned long pilot_status - - -cal_component_free_categories_list -void -GSList *categ_list - - -cal_component_free_datetime -void -CalComponentDateTime *dt - - -cal_component_free_exdate_list -void -GSList *exdate_list - - -cal_component_free_geo -void -struct icalgeotype *geo - - -cal_component_free_icaltimetype -void -struct icaltimetype *t - - -cal_component_free_percent -void -int *percent - - -cal_component_free_priority -void -int *priority - - -cal_component_free_period_list -void -GSList *period_list - - -cal_component_free_recur_list -void -GSList *recur_list - - -cal_component_free_sequence -void -int *sequence - - -cal_component_free_text_list -void -GSList *text_list - - -CalComponentAlarmAction -typedef enum { - CAL_COMPONENT_ALARM_NONE, - CAL_COMPONENT_ALARM_AUDIO, - CAL_COMPONENT_ALARM_DISPLAY, - CAL_COMPONENT_ALARM_EMAIL, - CAL_COMPONENT_ALARM_PROCEDURE, - CAL_COMPONENT_ALARM_UNKNOWN -} CalComponentAlarmAction; - - -CalComponentAlarmTriggerType -typedef enum { - CAL_COMPONENT_ALARM_TRIGGER_RELATIVE, - CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE -} CalComponentAlarmTriggerType; - - -CalComponentAlarmTriggerRelated -typedef enum { - CAL_COMPONENT_ALARM_TRIGGER_RELATED_START, - CAL_COMPONENT_ALARM_TRIGGER_RELATED_END -} CalComponentAlarmTriggerRelated; - - -CalComponentAlarmTrigger -typedef struct { - CalComponentAlarmTriggerType type; - - union { - struct { - struct icaldurationtype duration; - CalComponentAlarmTriggerRelated related; - } relative; - - struct icaltimetype absolute; - } u; -} CalComponentAlarmTrigger; - - -cal_component_get_first_alarm -CalComponentAlarm * -CalComponent *comp - - -cal_component_get_next_alarm -CalComponentAlarm * -CalComponent *comp - - -cal_component_alarm_free -void -CalComponentAlarm *alarm - - -cal_component_alarm_get_action -void -CalComponentAlarm *alarm, CalComponentAlarmAction *action - - -cal_component_alarm_set_action -void -CalComponentAlarm *alarm, CalComponentAlarmAction action - - -cal_component_alarm_get_trigger -void -CalComponentAlarm *alarm, CalComponentAlarmTrigger **trigger - - -cal_component_alarm_set_trigger -void -CalComponentAlarm *alarm, CalComponentAlarmTrigger *trigger - - -cal_component_alarm_free_trigger -void -CalComponentAlarmTrigger *trigger - - -CalRecurType -typedef enum { - CAL_RECUR_YEARLY, - CAL_RECUR_MONTHLY, - CAL_RECUR_WEEKLY, - CAL_RECUR_DAILY, - CAL_RECUR_HOURLY, - CAL_RECUR_MINUTELY, - CAL_RECUR_SECONDLY -} CalRecurType; - - -CalRecurrence -typedef struct { - CalRecurType type; - - int interval; - - /* Specifies the end of the recurrence. No occurrences are generated - after this date. If it is 0, the event recurs forever. */ - time_t enddate; - - /* WKST property - the week start day: 0 = Monday to 6 = Sunday. */ - gint week_start_day; - - - /* NOTE: I've used GList's here, but it doesn't matter if we use - other data structures like arrays. The code should be easy to - change. So long as it is easy to see if the modifier is set. */ - - /* For BYMONTH modifier. A list of GINT_TO_POINTERs, 0-11. */ - GList *bymonth; - - /* For BYWEEKNO modifier. A list of GINT_TO_POINTERs, [+-]1-53. */ - GList *byweekno; - - /* For BYYEARDAY modifier. A list of GINT_TO_POINTERs, [+-]1-366. */ - GList *byyearday; - - /* For BYMONTHDAY modifier. A list of GINT_TO_POINTERs, [+-]1-31. */ - GList *bymonthday; - - /* For BYDAY modifier. A list of GINT_TO_POINTERs, in pairs. - The first of each pair is the weekday, 0 = Monday to 6 = Sunday. - The second of each pair is the week number [+-]0-53. */ - GList *byday; - - /* For BYHOUR modifier. A list of GINT_TO_POINTERs, 0-23. */ - GList *byhour; - - /* For BYMINUTE modifier. A list of GINT_TO_POINTERs, 0-59. */ - GList *byminute; - - /* For BYSECOND modifier. A list of GINT_TO_POINTERs, 0-60. */ - GList *bysecond; - - /* For BYSETPOS modifier. A list of GINT_TO_POINTERs, +ve or -ve. */ - GList *bysetpos; -} CalRecurrence; - - -CalObjTime - - -CalObjTime -struct CalObjTime { - guint16 year; - guint8 month; /* 0 - 11 */ - guint8 day; /* 1 - 31 */ - guint8 hour; /* 0 - 23 */ - guint8 minute; /* 0 - 59 */ - guint8 second; /* 0 - 59 (maybe 60 for leap second) */ -}; - - -CalRecurInstanceFn -gboolean -CalComponent *comp, - time_t instance_start, - time_t instace_end, - gpointer data - - -cal_recur_generate_instances -void -CalComponent *comp,time_t start,time_t end,CalRecurInstanceFn cb,gpointer cb_data - - -cal_recur_from_icalrecurrencetype -CalRecurrence * -struct icalrecurrencetype *ir - - -cal_recur_free -void -CalRecurrence *r - - -CalObjInstance -typedef struct { - char *uid; /* UID of the object */ - time_t start; /* Start time of instance */ - time_t end; /* End time of instance */ -} CalObjInstance; - - -cal_obj_instance_list_free -void -GList *list - - -CalAlarmInstance -typedef struct { - char *uid; /* UID of object */ -#if 0 - enum AlarmType type; /* Type of alarm */ -#endif - time_t trigger; /* Alarm trigger time */ - time_t occur; /* Occurrence time */ -} CalAlarmInstance; - - -cal_alarm_instance_list_free -void -GList *list - - -CalObjType -typedef enum { - CALOBJ_TYPE_EVENT = 1 << 0, - CALOBJ_TYPE_TODO = 1 << 1, - CALOBJ_TYPE_JOURNAL = 1 << 2, - CALOBJ_TYPE_ANY = 0x07 -} CalObjType; - - -cal_obj_uid_list_free -void -GList *list - - -time_from_icaltimetype -time_t -struct icaltimetype itt - - -time_from_isodate -time_t -char *str - - -time_from_start_duration -time_t -time_t start, char *duration - - -isodate_from_time_t -char * -time_t t - - -get_time_t_hour -int -time_t t - - -isodiff_to_secs -int -char *str - - -isodiff_from_secs -char * -int secs - - -time_add_minutes -time_t -time_t time, int minutes - - -time_add_day -time_t -time_t time, int days - - -time_add_week -time_t -time_t time, int weeks - - -time_add_month -time_t -time_t time, int months - - -time_add_year -time_t -time_t time, int years - - -format_simple_hour -char * -int hour, int use_am_pm - - -time_days_in_month -int -int year, int month - - -time_from_day -time_t -int year, int month, int day - - -time_day_hour -time_t -time_t t, int hour - - -time_year_begin -time_t -time_t t - - -time_year_end -time_t -time_t t - - -time_month_begin -time_t -time_t t - - -time_month_end -time_t -time_t t - - -time_week_begin -time_t -time_t t - - -time_week_end -time_t -time_t t - - -time_day_begin -time_t -time_t t - - -time_day_end -time_t -time_t t - - -parse_date -time_t -char *str - - -print_time_t -void -time_t t - diff --git a/doc/devel/calendar/cal-util/evolution-cal-util-sections.txt b/doc/devel/calendar/cal-util/evolution-cal-util-sections.txt deleted file mode 100644 index cd928fc7e3..0000000000 --- a/doc/devel/calendar/cal-util/evolution-cal-util-sections.txt +++ /dev/null @@ -1,166 +0,0 @@ -
-cal-component -CAL_COMPONENT -CalComponent - -CalComponentVType -CalComponentField -CalComponentClassification -CalComponentDateTime -CalComponentPeriodType -CalComponentPeriod -CalComponentText -CalComponentTransparency -CalComponentAlarm -CalComponentPrivate - -cal_component_gen_uid -cal_component_new -cal_component_clone -cal_component_set_new_vtype -cal_component_set_icalcomponent -cal_component_get_icalcomponent -cal_component_get_vtype -cal_component_get_as_string -cal_component_commit_sequence -cal_component_get_uid -cal_component_set_uid -cal_component_get_categories_list -cal_component_set_categories_list -cal_component_get_classification -cal_component_set_classification -cal_component_get_comment_list -cal_component_set_comment_list -cal_component_get_completed -cal_component_set_completed -cal_component_get_created -cal_component_set_created -cal_component_get_description_list -cal_component_set_description_list -cal_component_get_dtend -cal_component_set_dtend -cal_component_get_dtstamp -cal_component_set_dtstamp -cal_component_get_dtstart -cal_component_set_dtstart -cal_component_get_due -cal_component_set_due -cal_component_get_exdate_list -cal_component_set_exdate_list -cal_component_get_exrule_list -cal_component_set_exrule_list -cal_component_get_geo -cal_component_set_geo -cal_component_get_last_modified -cal_component_set_last_modified -cal_component_get_percent -cal_component_set_percent -cal_component_get_priority -cal_component_set_priority -cal_component_get_rdate_list -cal_component_set_rdate_list -cal_component_has_rdates -cal_component_get_rrule_list -cal_component_set_rrule_list -cal_component_has_rrules -cal_component_get_sequence -cal_component_set_sequence -cal_component_get_summary -cal_component_set_summary -cal_component_get_transparency -cal_component_set_transparency -cal_component_get_url -cal_component_set_url -cal_component_get_pilot_id -cal_component_set_pilot_id -cal_component_get_pilot_status -cal_component_set_pilot_status - -cal_component_free_categories_list -cal_component_free_datetime -cal_component_free_exdate_list -cal_component_free_geo -cal_component_free_icaltimetype -cal_component_free_percent -cal_component_free_priority -cal_component_free_period_list -cal_component_free_recur_list -cal_component_free_sequence -cal_component_free_text_list - -CalComponentAlarmAction -CalComponentAlarmTriggerType -CalComponentAlarmTriggerRelated -CalComponentAlarmTrigger - -cal_component_get_first_alarm -cal_component_get_next_alarm -cal_component_alarm_free -cal_component_alarm_get_action -cal_component_alarm_set_action -cal_component_alarm_get_trigger -cal_component_alarm_set_trigger -cal_component_alarm_free_trigger - - -CAL_COMPONENT_TYPE -CAL_COMPONENT_CLASS -IS_CAL_COMPONENT -IS_CAL_COMPONENT_CLASS -cal_component_get_type - - -CalComponent - -
- -
-cal-recur -CalRecurType -CalRecurrence -CalObjTime -CalRecurInstanceFn -cal_recur_generate_instances -cal_recur_from_icalrecurrencetype -cal_recur_free -
- -
-cal-util -CalObjInstance -cal_obj_instance_list_free -CalAlarmInstance -cal_alarm_instance_list_free -CalObjType -cal_obj_uid_list_free -
- -
-timeutil -time_from_icaltimetype -time_from_isodate -time_from_start_duration -isodate_from_time_t -get_time_t_hour -isodiff_to_secs -isodiff_from_secs -time_add_minutes -time_add_day -time_add_week -time_add_month -time_add_year -format_simple_hour -time_days_in_month -time_from_day -time_day_hour -time_year_begin -time_year_end -time_month_begin -time_month_end -time_week_begin -time_week_end -time_day_begin -time_day_end -parse_date -print_time_t -
diff --git a/doc/devel/calendar/cal-util/evolution-cal-util.args b/doc/devel/calendar/cal-util/evolution-cal-util.args deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/devel/calendar/cal-util/evolution-cal-util.hierarchy b/doc/devel/calendar/cal-util/evolution-cal-util.hierarchy deleted file mode 100644 index cc235653f2..0000000000 --- a/doc/devel/calendar/cal-util/evolution-cal-util.hierarchy +++ /dev/null @@ -1,2 +0,0 @@ -GtkObject - CalComponent diff --git a/doc/devel/calendar/cal-util/evolution-cal-util.signals b/doc/devel/calendar/cal-util/evolution-cal-util.signals deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/devel/calendar/cal-util/evolution-cal-util.types b/doc/devel/calendar/cal-util/evolution-cal-util.types deleted file mode 100644 index 52b2d9bf90..0000000000 --- a/doc/devel/calendar/cal-util/evolution-cal-util.types +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -cal_component_get_type diff --git a/doc/devel/calendar/cal-util/tmpl/cal-component.sgml b/doc/devel/calendar/cal-util/tmpl/cal-component.sgml deleted file mode 100644 index 2f800e583f..0000000000 --- a/doc/devel/calendar/cal-util/tmpl/cal-component.sgml +++ /dev/null @@ -1,934 +0,0 @@ - -CalComponent - - -RFC 2445 iCalendar component object. - - - - The #CalComponent object provides a wrapper over the &libical; - functions for manipulating calendar components. #CalComponent - presents a GTK+-like interface to calendar components according to - RFC 2445. - - - - While &libical; supports almost all of the features of the - iCalendar RFCs, applications are normally not interested in all - the mindless gunk that is there. Still, applications should do - their best not to drop extension fields from calendar components - or any other extra information they do not support (including - standard fields they are not interested in). The #CalComponent - object provides a wrapper over - icalcomponent structures from &libical; - so that no information in them will be lost even if the - application is not designed to handle it. Also, #CalComponent - provides a higher-level API to many of the &libical; operations so - as to make it less painful to deal with iCalendar components. - - - - A #CalComponent object starts out empty. It must be initialized - from an existing icalcomponent structure - by using the cal_component_set_icalcomponent() function, or from a - completely new data by specifying the desired component type to - the cal_component_set_new_vtype() function. - - - - #CalComponent will create an internal map of the properties in the - icalcomponent structure and then allow - random access to them via the #CalComponent API functions; - normally the &libical; API would have to be used by creating many - iterators and other unpleasant constructs. #CalComponent keeps - handles to the properties it scanned from the - icalcomponent and will let the parent - application modify them at any time without having to do any - iteration. - - - - Eventually a #CalComponent may be turned into the RFC 2445 string - representation of an iCalendar component by using the - cal_component_get_as_string() function. Applications can then - transfer this interoperable - - - “Interoperable.” Heavens, I love that word. - - - string to other programs that deal with iCalendar. - - - - - - - - - - Casts a #GtkObject to a #CalComponent. - - -@obj: A GTK+ object. - - - - - Calendar component types as defined by RFC 2445. These values can - be used to create a new calendar component by passing them to the - cal_component_set_new_vtype() function. They are also the return - value of the cal_component_get_vtype() function. The only time - the @CAL_COMPONENT_NO_TYPE value is used is when querying the - vtype of an uninitialized #CalComponent. - - -@CAL_COMPONENT_NO_TYPE: Returned from cal_component_get_vtype() to - indicate an uninitialized #CalComponent object. - -@CAL_COMPONENT_EVENT: Indicates a VEVENT component. -@CAL_COMPONENT_TODO: Indicates a VTODO component. -@CAL_COMPONENT_JOURNAL: Indicates a VJOURNAL component. -@CAL_COMPONENT_FREEBUSY: Indicates a VFREEBUSY component. -@CAL_COMPONENT_TIMEZONE: Indicates a VTIMEZOME component. - - - - These values are used as identifiers for #ETable columns. These - are used by the calendar GUI code in Evolution. - - -@CAL_COMPONENT_FIELD_CATEGORIES: Component's list of categories. -@CAL_COMPONENT_FIELD_CLASSIFICATION: Component's classification. -@CAL_COMPONENT_FIELD_COMPLETED: Component's completion date. -@CAL_COMPONENT_FIELD_DTEND: Component's ending date. -@CAL_COMPONENT_FIELD_DTSTART: Component's starting date. -@CAL_COMPONENT_FIELD_DUE: Component's due date. -@CAL_COMPONENT_FIELD_GEO: Component's geographical position. -@CAL_COMPONENT_FIELD_PERCENT: Component's percent completed value. -@CAL_COMPONENT_FIELD_PRIORITY: Component's priority. -@CAL_COMPONENT_FIELD_SUMMARY: Component's summary. -@CAL_COMPONENT_FIELD_TRANSPARENCY: Component's transparency value. -@CAL_COMPONENT_FIELD_URL: Component's URL. -@CAL_COMPONENT_FIELD_HAS_ALARMS: Whether the component has any alarms. -@CAL_COMPONENT_FIELD_ICON: Which icon to use for the component. -@CAL_COMPONENT_FIELD_COMPLETE: Whether the component has been completed. -@CAL_COMPONENT_FIELD_RECURRING: Whether the component has any recurrences. -@CAL_COMPONENT_FIELD_OVERDUE: Whether the component is overdue. -@CAL_COMPONENT_FIELD_COLOR: Which color to use for the component. -@CAL_COMPONENT_FIELD_NUM_FIELDS: Total number of enumerated fields. - - - - Values for the access classification property of a calendar - component. - - -@CAL_COMPONENT_CLASS_NONE: Indicates that no access classification has - been set for the corresponding component. - -@CAL_COMPONENT_CLASS_PUBLIC: Public access. -@CAL_COMPONENT_CLASS_PRIVATE: Private access. -@CAL_COMPONENT_CLASS_CONFIDENTIAL: Confidential access. - -@CAL_COMPONENT_CLASS_UNKNOWN: Unknown access classification value, - used when &libical; returns something #CalComponent does not know - about. - - - - This structure defines a date and time value. - - - - - - Defines how a period of time is specified. - - -@CAL_COMPONENT_PERIOD_DATETIME: Indicates that the period is specified - by starting and ending date/time values. - -@CAL_COMPONENT_PERIOD_DURATION: Indicates that the period is specified - as a starding date/time and a duration value. - - - - This structure defines a period of time. - - - - - - This structure defines the value of a text property that may have - an alternate representation parameter. - - - - - - - - -@CAL_COMPONENT_TRANSP_NONE: -@CAL_COMPONENT_TRANSP_TRANSPARENT: -@CAL_COMPONENT_TRANSP_OPAQUE: -@CAL_COMPONENT_TRANSP_UNKNOWN: - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@type: - - - - - - - -@comp: -@icalcomp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: - - - - - - - -@comp: -@uid: - - - - - - - -@comp: -@uid: - - - - - - - -@comp: -@categ_list: - - - - - - - -@comp: -@categ_list: - - - - - - - -@comp: -@classif: - - - - - - - -@comp: -@classif: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@exdate_list: - - - - - - - -@comp: -@exdate_list: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@geo: - - - - - - - -@comp: -@geo: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@percent: - - - - - - - -@comp: -@percent: - - - - - - - -@comp: -@priority: - - - - - - - -@comp: -@priority: - - - - - - - -@comp: -@period_list: - - - - - - - -@comp: -@period_list: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@sequence: - - - - - - - -@comp: -@sequence: - - - - - - - -@comp: -@summary: - - - - - - - -@comp: -@summary: - - - - - - - -@comp: -@transp: - - - - - - - -@comp: -@transp: - - - - - - - -@comp: -@url: - - - - - - - -@comp: -@url: - - - - - - - -@comp: -@pilot_id: - - - - - - - -@comp: -@pilot_id: - - - - - - - -@comp: -@pilot_status: - - - - - - - -@comp: -@pilot_status: - - - - - - - -@categ_list: - - - - - - - -@dt: - - - - - - - -@exdate_list: - - - - - - - -@geo: - - - - - - - -@t: - - - - - - - -@percent: - - - - - - - -@priority: - - - - - - - -@period_list: - - - - - - - -@recur_list: - - - - - - - -@sequence: - - - - - - - -@text_list: - - - - - - - -@CAL_COMPONENT_ALARM_NONE: -@CAL_COMPONENT_ALARM_AUDIO: -@CAL_COMPONENT_ALARM_DISPLAY: -@CAL_COMPONENT_ALARM_EMAIL: -@CAL_COMPONENT_ALARM_PROCEDURE: -@CAL_COMPONENT_ALARM_UNKNOWN: - - - - - - -@CAL_COMPONENT_ALARM_TRIGGER_RELATIVE: -@CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE: - - - - - - -@CAL_COMPONENT_ALARM_TRIGGER_RELATED_START: -@CAL_COMPONENT_ALARM_TRIGGER_RELATED_END: - - - - - - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@alarm: - - - - - - - -@alarm: -@action: - - - - - - - -@alarm: -@action: - - - - - - - -@alarm: -@trigger: - - - - - - - -@alarm: -@trigger: - - - - - - - -@trigger: - - - diff --git a/doc/devel/calendar/cal-util/tmpl/cal-recur.sgml b/doc/devel/calendar/cal-util/tmpl/cal-recur.sgml deleted file mode 100644 index 703f8b2b85..0000000000 --- a/doc/devel/calendar/cal-util/tmpl/cal-recur.sgml +++ /dev/null @@ -1,88 +0,0 @@ - -cal-recur - - - - - - - - - - - - - - - - - - - -@CAL_RECUR_YEARLY: -@CAL_RECUR_MONTHLY: -@CAL_RECUR_WEEKLY: -@CAL_RECUR_DAILY: -@CAL_RECUR_HOURLY: -@CAL_RECUR_MINUTELY: -@CAL_RECUR_SECONDLY: - - - - - - - - - - - - -@year: -@month: -@day: -@hour: -@minute: -@second: - - - - - - -@comp: -@instance_start: -@instace_end: -@data: -@Returns: - - - - - - - -@comp: -@start: -@end: -@cb: -@cb_data: - - - - - - - -@ir: -@Returns: - - - - - - - -@r: - - diff --git a/doc/devel/calendar/cal-util/tmpl/cal-util.sgml b/doc/devel/calendar/cal-util/tmpl/cal-util.sgml deleted file mode 100644 index 8d4516c2ec..0000000000 --- a/doc/devel/calendar/cal-util/tmpl/cal-util.sgml +++ /dev/null @@ -1,62 +0,0 @@ - -cal-util - - - - - - - - - - - - - - - - - - - - - - - - - -@list: - - - - - - - - - - - - - -@list: - - - - - - - -@CALOBJ_TYPE_EVENT: -@CALOBJ_TYPE_TODO: -@CALOBJ_TYPE_JOURNAL: -@CALOBJ_TYPE_ANY: - - - - - - -@list: - - diff --git a/doc/devel/calendar/cal-util/tmpl/evolution-cal-util-unused.sgml b/doc/devel/calendar/cal-util/tmpl/evolution-cal-util-unused.sgml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/doc/devel/calendar/cal-util/tmpl/timeutil.sgml b/doc/devel/calendar/cal-util/tmpl/timeutil.sgml deleted file mode 100644 index 3b62fbba3f..0000000000 --- a/doc/devel/calendar/cal-util/tmpl/timeutil.sgml +++ /dev/null @@ -1,260 +0,0 @@ - -timeutil - - - - - - - - - - - - - - - - - - - -@itt: -@Returns: - - - - - - - -@str: -@Returns: - - - - - - - -@start: -@duration: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@str: -@Returns: - - - - - - - -@secs: -@Returns: - - - - - - - -@time: -@minutes: -@Returns: - - - - - - - -@time: -@days: -@Returns: - - - - - - - -@time: -@weeks: -@Returns: - - - - - - - -@time: -@months: -@Returns: - - - - - - - -@time: -@years: -@Returns: - - - - - - - -@hour: -@use_am_pm: -@Returns: - - - - - - - -@year: -@month: -@Returns: - - - - - - - -@year: -@month: -@day: -@Returns: - - - - - - - -@t: -@hour: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@str: -@Returns: - - - - - - - -@t: - - diff --git a/doc/devel/calendar/evolution-calendar.sgml b/doc/devel/calendar/evolution-calendar.sgml deleted file mode 100644 index f3936d9bbc..0000000000 --- a/doc/devel/calendar/evolution-calendar.sgml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - Federico - Mena Quintero - -
- federico@helixcode.com -
-
-
-
-
- - Developing Applications for the Evolution Calendar - - - - This part of the Evolution Developer's Guide describes how to - write applications for the Evolution Calendar by using its - public interfaces. The Evolution Calendar exports its - functionality through a number of interfaces, including CORBA, - GTK+ wrappers for Bonobo objects, and other utility libraries. - - - - You should read this part of the Evolution Developer's guide - if you intend to write client applications that use the - functionality of the Evolution Calendar. - - - - This part does not describe the internal interfaces of the - Evolution Calendar; for that you should read the Evolution - Internals Guide. You should only need to read that guide if - you are interested in the way the calendar works internally or - if you want to make changes directly to the Evolution Calendar - code. - - - - &calendar-architecture; -
- - diff --git a/doc/devel/calendar/public-reference.sgml b/doc/devel/calendar/public-reference.sgml deleted file mode 100644 index f8aa6e848d..0000000000 --- a/doc/devel/calendar/public-reference.sgml +++ /dev/null @@ -1,24 +0,0 @@ - - Calendar Public API Reference - - - - This part presents the class and function reference for the - public APIs of the different components of the Evolution - Calendar. - - - - &CalClient; - &CalComponent; - &cal-util; - &cal-recur; - &timeutil; - - - diff --git a/doc/devel/calendar/reference.sgml b/doc/devel/calendar/reference.sgml deleted file mode 100644 index f8aa6e848d..0000000000 --- a/doc/devel/calendar/reference.sgml +++ /dev/null @@ -1,24 +0,0 @@ - - Calendar Public API Reference - - - - This part presents the class and function reference for the - public APIs of the different components of the Evolution - Calendar. - - - - &CalClient; - &CalComponent; - &cal-util; - &cal-recur; - &timeutil; - - - diff --git a/doc/devel/evolution-devel-guide.sgml b/doc/devel/evolution-devel-guide.sgml deleted file mode 100644 index ca80ec533a..0000000000 --- a/doc/devel/evolution-devel-guide.sgml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - -PCS"> -libical"> -]> - - - - Evolution Developer's Guide - - - - Helix Code, Inc. - - - - - 2000 - Helix Code, Inc. - - - - - - &evolution-calendar; - - - - - Evolution Public API Reference - - - - This part presents the class and function reference for the - different libraries and interfaces that Evolution provides. - Classes are described together with their methods; individual - functions are grouped by functional group. - - - - &calendar-reference; - - diff --git a/doc/white-papers/calendar/calendar.sgml b/doc/white-papers/calendar/calendar.sgml deleted file mode 100644 index 2cb3132e2b..0000000000 --- a/doc/white-papers/calendar/calendar.sgml +++ /dev/null @@ -1,209 +0,0 @@ -Evolution"> -CUA"> -PCS"> -Bonobo"> -CORBA"> -GTK+"> -]> - -
- - - &Evolution; Calendaring Framework - - - - Federico - Mena Quintero - -
- federico@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - - - - The &Evolution; groupware suite provides a framework for - developing calendaring applications, as well as a graphical - calendar client and a personal calendar server. This white - paper describes the architecture of the &Evolution; - calendaring framework. - - -
- - - - - Introduction - - - Calendaring is an important part of a groupware suite. A - calendaring framework will allow a user to keep a personal - calendar and have several applications use it. Such - applications could be a graphical calendar client that the user - employs to schedule appointments and keep track of his time, a - Palm Pilot synchronization client, or - a simple alarm or reminder utility. A comprehensive calendaring - framework will also allow multiple users to schedule - appointments between each other; for example, a project director - may want to schedule a weekly meeting with the rest of the - project members, or a person who owns a large house may want to - schedule a big party with his friends. The attendees will then - want to reply with messages such as, “I will - attend”, or “I will attend only if the proposed time - is changed”. - - - - The &Evolution; groupware suite provides a framework for - developing calendaring applications, as well as a graphical - calendar client or calendar user agent (&CUA;) and a personal - calendar server (&PCS;). - - - - The following sections explain the basic calendaring framework, - the functions of the calendar user agent and the personal - calendar server, and the relationship between the two. - - - - - - - Personal Calendar Server - - - The personal calendar server (&PCS;) provides centralized - management and storage of a user's personal calendar. Multiple - clients can connect to the &PCS; simultaneously to query and - modify the user's calendar in a synchronized fashion. The main - features of the &PCS; are as follows: - - - - Storage - - - The &PCS; is responsible for loading and saving calendars. - Centralizing the loading and saving functionality allows - multiple clients to use the same calendar at the same time - without having to worry about each other. - - - - - Basic Queries - - - The &PCS; provides functions to do basic queries on a - calendar, for example, a client can ask the server for a list - of all the appointments in the calendar, or for all the data - for a specific appointment. - - - - - Recurrence and Alarm Queries - - - Clients can ask the &PCS; for a list of the appointments that - occur within a specified time range; for example a graphical - client that has a per-week view could ask the &PCS; for all - the appointments that occur in a particular week. This - includes multiple occurrences of a single recurring event; for - example, the object for “a 1-hour meeting that occurs on - every Tuesday and Thursday” is represented inside the - &PCS; as a single event with a recurrence rule. Similarly, - clients can ask the &PCS; for a list of events that have - alarms that trigger within a specified time range. - - - - - Notification of Changes - - - This is the most important function of the &PCS;, as it allows - multiple calendar clients to maintain a unified view of the - calendar between the server and themselves. When a client - asks the &PCS; to modify or remove an event, the &PCS; - notifies all the clients that are connected to it about the - change. The policy is that “the server is always - right”; clients can act as dumb views onto the - calendar's data and they will be notified by the &PCS; when - something changes. - - - - - - - - Calendar User Agent - - - A calendar user agent (&CUA;) is a program that lets a user - manipulate a calendar. &Evolution; provides an attractive, - graphical calendar client that communicates with the &Evolution; - personal calendar server. - - - - The &Evolution; calendar client just provides a view onto the - data that is stored and managed by the personal calendar server. - The calendar client does not perform direct manipulations on a - calendar's data; instead it offloads those requests to the - calendar server, which takes care of making the appropriate - modifications in the calendar and then notifies all the clients - about the changes. - - - - - - - Calendar Client Library - - - Communication between the personal calendar server and calendar - clients is defined by a set of &Bonobo; &CORBA; interfaces. - Clients can be written by implementing the client-side - Listener interface, which defines the - notification callbacks that the PCS uses to inform clients about - changes to the calendar. - - - - As a convenience for >K; programmers, &Evolution; also - includes a library which provides a - CalClient class which can be used for - communication with the personal calendar server. Objects of - this class automatically contact the PCS when they are created. - CalClient provides functions to request - changes in the calendar, and it also emits signals when it gets - notification about changes from the PCS. This makes it easy and - convenient to write calendar clients for &Evolution; using - >K;. - - - - The implementation of the CalClient class - simply wraps the &Evolution; &CORBA; interfaces for calendaring - with a familiar-looking >K; object. Calls to the - Listener interface get translated to - signal emissions from the CalClient, thus - shielding programmers from the details of the &CORBA; - interfaces. - - -
diff --git a/doc/white-papers/mail/camel.sgml b/doc/white-papers/mail/camel.sgml deleted file mode 100644 index a339909f54..0000000000 --- a/doc/white-papers/mail/camel.sgml +++ /dev/null @@ -1,339 +0,0 @@ -Evolution"> - -]> - -
- - - The &Camel; Messaging Library - - - - Dan - Winship - -
- danw@helixcode.com -
-
-
- - - Bertrand - Guiheneuf - -
- bertrand@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - -
- - - Introduction - - - &Camel; is a generic messaging library. It is being used as the - back end for the mail component of &Evolution;. The name - "&Camel;" is an acronym; it refers to the fact that the - library is capable of going several days without food or water. - It means : Camel's Acronym Makes Everyone Laugh. - - - - &Camel;'s initial design is heavily based on Sun's - JavaMail API. It uses the Gtk+ object - system, and many of its classes are direct analags of JavaMail - classes. Its design has also been influenced by the features of - IMAP, and the limitations of the standard UNIX mbox mail store, - which set some of the boundaries on its requirements and - extensibility. - - - - &Camel; sees all message repositories as stores containing - folders. These folders in turn contain the messages the client - actually accesses. The use of such a unified interface allows - the client applications to be very extensible. &Camel; includes - an external provider mechanism which allows applications to - dynamically load and use protocols which were not available when - the application was initially written. - - - - The abstract store/folder mechanism is a powerful and versatile - way of accessing messages. No particular asumptions are made on - the client side, thus allowing new ways of managing the - messages. For example, the messages stored in the folders don't - necessarily have to share some common physical location. The - folder can be a purely virtual folder, containing only - references to the actual messages. This is used by the "vFolder" - provider, which allows you select messages meeting particular - criteria and deal with them as a group. - - - - In addition to these possibilities, &Camel; has full MIME - support. &Camel; MIME messages are lightweight objects - representing the MIME skeleton of the actual message. The data - contained in the subparts are never stored in memory except when - they are actually needed. The application, when accessing the - various MIME objects contained in the message (text parts, - attachments, embedded binary objects ...) asks &Camel; for a - stream that it can read data from. This scheme is particularly - useful with the IMAP provider. IMAP has strong MIME support - built-in, which allows &Camel; to download only the parts of - messages that it actually needs: attachments need not be - downloaded until they are viewed, and unnecessary - "multipart/alternative" parts will never be read off the server. - - - - - Overview - - - - - To begin using &Camel;, an application first creates a - CamelSession object. This object is used - to store application defaults, and to coordinate communication - between providers and the application. - - - - A CamelProvider is a dynamically-loadable - module that provides functionality associated with a specific - service. Examples of providers are IMAP and SMTP. Providers - include subclasses of the various other &Camel; classes for - accessing and manipulating messages. - - - - CamelService is an abstract class for - describing a connection to a local or remote service. It - currently has two subclasses: CamelStore, - for services that store messages (such as IMAP servers and mbox - files), and CamelTransport, for services - that deliver messages (such as SMTP, or a local MTA). A provider - could also be both a store and a transport, as in the case of - NNTP. - - - - A CamelStore contains some number of - CamelFolder objects, which in turn - contain messages. A CamelFolder provides - a CamelFolderSummary object, which - includes details about the subject, date, and sender of each - message in the folder. The folder also includes the messages - themselves, as subclasses of CamelMedium. - - - - Email messages are represented by the - CamelMimeMessage class, a subclass of - CamelMedium. This class includes - operations for accessing RFC822 and MIME headers, accessing - subparts of MIME messages, encoding and decoding Base64 and - Quoted-Printable, etc. - - - - CamelTransport includes methods for - delivering messages. While the abstract - CamelTransport::send method takes a - CamelMedium, its subclasses may only be - able to deliver messages of specific - CamelMedium subclasses. For instance, - CamelSendmailTransport requires a - CamelMimeMessage, because it needs a - message that includes a "To:" header. A hypothetical - CamelNNTPTransport would need a - CamelNewsMessage, which would have a - "Newsgroups:" header. - - - - The content of messages are referred to using - CamelStream and its subclasses. In the - case of an mbox-based store, the - CamelStream would abstract the operation - of reading the correct section of the mbox file. For IMAP, - reading off the CamelStream might result - in commands being issued to the remote IMAP server and data - being read off a socket. - - - - The final major class in &Camel; is - CamelException, which is used to - propagate information about errors. Many methods take a - CamelException as an argument, which the - caller can then check if an error occurs. It includes both a - numeric error code which can be interpreted by the program, and - a text error message that can be displayed to the user. - - - - - Major Subcomponents - - - The Message Store - - - A CamelStore inherits the ability to - connect and authenticate to a service from its parent class, - CamelService. It then adds the ability - to retrieve folders. A store must contain at least one folder, - which can be retrieved with - CamelStore::get_default_folder. There are - also methods to retrieve the "top-level" folder (for - hieararchical stores), and to retrieve an arbitrary folder by - name. - - - - All CamelFolders must implement certain - core operations, most notably generating a summary and - retrieving and deleting messages. A - CamelFolder must assign a permanently - unique identifier to each message it contains. Messages can - then be retrieved via - CamelFolder::get_message_by_uid. Alternately, - within a single mail-reading session, messages can be referred - to by their linear position within the store using - CamelFolder::get_message_by_number. - - - - Folders must also implement the - get_parent_folder and - list_subfolders methods. For stores that - don't allow multiple folders, they would return NULL and an - empty list, respectively. Stores that do allow multiple - folders will also define methods for creating and deleting - folders, and for moving messages between them (assuming the - folders are writable). - - - - Folders that support searching can define the - search_by_expression method. For mbox - folders, this is implemented by indexing the messages with the - ibex library and using that to search them later. For IMAP - folders, this uses the IMAP SEARCH command. Other folder types - might not be able to implement this functionality, in which - case users would not be able to do full-content searches on - them. - - - - - Messages - - - As mentioned before, messages are represented by subclasses of - CamelMedium. - CamelMedium itself is a subclass of - CamelDataWrapper, a generic class for - connecting a typed data source to a data sink. - CamelMedium adds the concept of message - headers versus message body. - (CamelDataWrapper has one other - important subclass, CamelMultipart, - which is used to provide separate access to the multiple - independent parts of a multipart MIME type.) - CamelMedium's subclasses provide more - specialized handling of various headers: - CamelMimePart adds special handling for - the &ldquot;Content-*&rdquot; headers in MIME messages, and - its subclass CamelMimeMessage adds - handling for the RFC822 headers. - - - - - - Consider a message with two parts: a text part (in both plain - text and HTML), and an attached image: - - - - From: Dan Winship <danw@helixcode.com> - To: Matt Loper <matt@helixcode.com> - Subject: the Camel white paper - MIME-Version: 1.0 - Content-Type: multipart/mixed; - boundary="jhTYrnsRrdhDFGa" - - This is a multi-part message in MIME format. - --jhTYrnsRrdhDFGa - Content-Type: multipart/alternative; - boundary="sFSenbAFDSgDfg" - - --sFSenbAFDSgDfg - Content-Type: text/plain - - Hey, Matt - - Check out this graphic... - - -- Dan - - --sFSenbAFDSgDfg - Content-Type: text/html - - Hey, Matt<br> - <br> - Check out this graphic...<br> - <br> - -- Dan<br> - <br> - --sFSenbAFDSgDfg-- - - --jhTYrnsRrdhDFGa - Content-Type: image/png - Content-Transfer-Encoding: base64 - - F4JLw0ORrkRa8AwAMQJLAaI3UDIGsco9RAaB92... - --jhTYrnsRrdhDFGa-- - - - - In &Camel;, this would be represented as follows: - - - - - - - Streams - - - Streams are a generic data transport layer. Two basic stream - classes are CamelStreamFs, for - reading and writing files, and - CamelStreamMem, for reading from and - writing to objects that are already in memory. - - - - Streams can also be chained together. So a CamelMimePart - containing base64-encoded data can filter its output through - a CamelStreamB64. Other parts of the application that want - to read its data will never need to even realize that the - original data was encoded. - - - -
diff --git a/doc/white-papers/mail/ibex.sgml b/doc/white-papers/mail/ibex.sgml deleted file mode 100644 index dcb8f5ca4b..0000000000 --- a/doc/white-papers/mail/ibex.sgml +++ /dev/null @@ -1,158 +0,0 @@ -Evolution"> - - -]> - -
- - - Ibex: an Indexing System - - - - Dan - Winship - -
- danw@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - -
- - - Introduction - - - &Ibex; is a library for text indexing. It is being used by - &Camel; to allow it to quickly search locally-stored messages, - either because the user is looking for a specific piece of text, - or because the application is contructing a vFolder or filtering - incoming mail. - - - - - Design Goals and Requirements for Ibex - - - The design of &Ibex; is based on a number of requirements. - - - - - First, obviously, it must be fast. In particular, searching - the index must be appreciably faster than searching through - the messages themselves, and constructing and maintaining - the index must not take a noticeable amount of time. - - - - - - The indexes must not take up too much space. Many users have - limited filesystem quotas on the systems where they read - their mail, and even users who read mail on private machines - have to worry about running out of space on their disks. The - indexes should be able to do their job without taking up so - much space that the user decides he would be better off - without them. - - - - Another aspect of this problem is that the system as a whole - must be clever about what it does and does not index: - accidentally indexing a "text" mail message containing - uuencoded, BinHexed, or PGP-encrypted data will drastically - affect the size of the index file. Either the caller or the - indexer itself has to avoid trying to index these sorts of - things. - - - - - - The indexing system must allow data to be added to the index - incrementally, so that new messages can be added to the - index (and deleted messages can be removed from it) without - having to re-scan all existing messages. - - - - - - It must allow the calling application to explain the - structure of the data however it wants to, rather than - requiring that the unit of indexing be individual files. - This way, &Camel; can index a single mbox-format file and - treat it as multiple messages. - - - - - - It must support non-ASCII text, given that many people send - and receive non-English email, and even people who only - speak English may receive email from people whose names - cannot be written in the US-ASCII character set. - - - - - - While there are a number of existing indexing systems, none of - them met all (or even most) of our requirements. - - - - - The Implementation - - - &Ibex; is still young, and many of the details of the current - implementation are not yet finalized. - - - - With the current index file format, 13 megabytes of Info files - can be indexed into a 371 kilobyte index file—a bit under - 3% of the original size. This is reasonable, but making it - smaller would be nice. (The file format includes some simple - compression, but gzip can compress an - index file to about half its size, so we can clearly do better.) - - - - The implementation has been profiled and optimized for speed to - some degree. But, it has so far only been run on a 500MHz - Pentium III system with very fast disks, so we have no solid - benchmarks. - - - - Further optimization (of both the file format and the in-memory - data structures) awaits seeing how the library is most easily - used by &Evolution;: if the indexes are likely to be kept in - memory for long periods of time, the in-memory data structures - need to be kept small, but the reading and writing operations - can be slow. On the other hand, if the indexes will only be - opened when they are needed, reading and writing must be fast, - and memory usage is less critical. - - - - Of course, to be useful for other applications that have - indexing needs, the library should provide several options, so - that each application can use the library in the way that is - most suited for its needs. - - -
diff --git a/doc/white-papers/widgets/e-table.sgml b/doc/white-papers/widgets/e-table.sgml deleted file mode 100644 index 5ff4faf2ae..0000000000 --- a/doc/white-papers/widgets/e-table.sgml +++ /dev/null @@ -1,279 +0,0 @@ -Evolution"> -ETable"> -ETableModel"> -ETableSimple"> -ETableHeader"> -ETableSpecification"> -ETableCol"> -]> - -
- - - The ETable Widget - - - - Chris - Lahey - -
- clahey@helixcode.com -
-
-
- - Miguel - de Icaza - -
- miguel@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - -
- - - Introduction - - - &ETable; is a table widget on steroids. It is intended to provide - all the table functionality needed throughout &Evolution;, and - hopefully be general purpose enough to be used in other projects. - - - - &ETable; provides a lot of interactive control over the data in the - table. Without any work from the programmer, &ETable; provides - rearrangeable columns and editable data. When finished, &ETable; will - also provide, again with no programmer intervention, easy interactive - sorting and grouping. - - - - &ETable; gives you a great deal of functionality, flexibility, and - power. Most of this power is internal to the widget, but some of - the flexibility requires a bit of work by the programmer. - However, once you learn it, &ETable; is not very hard at all to - use. - - - - &ETable;'s power comes from the fact that it is fully - model/view/controller based. Various models are involved into - the process of rendering the information, and various views are - provided. The programmer has a wide range of options: from the - most finely hand-tuned table to a generic all-encompasing widget - that takes over most of tasks. It is up to the programmer: he - can use the simple to use &ETable; widget that takes care of - everything in a generic way, or he can use the various - components to roll his own tabular display. - - - - &ETable; ships with a standard set of information renderers: - strings, bitmaps, toggle-buttons, check-boxes, and multi-line - strings. But the programmer can write and implement his own - renderer for his information. This means that by default - &ETable; provides the basic display facilities that programmers - required, but they offer the programmer a complete freedom to - incorporate new cell renderers. - - - - - - ETableModel - - - The data back end for the &ETable; is an &ETableModel;. The - &ETableModel is an abstract interface that acts as the - information repository for the various &ETable components. - - - - To use &ETable; you have to create a subclass of the abstract - &ETableModel; class. However, to save you the work of defining - a new GtkClass every time you use - &ETable, there is a predefined subclass of &ETableModel; called - &ETableSimple; which simply takes a list of function callbacks - to perform the various operations. - - - - - - Columns - - - There are two different meanings to the word "column". The first - is the model column (defined by the &ETableCol: object). A model - column describes how it maps to the column in the &ETableModel; - as well as containing information about its properties (name, - resizability, resize dimensions, and a renderer for this - specific columns). - - - - &ETable; distinguishes between a model column index, and a view - column index. The former reflects the column in which the data - is stored in the &ETableModel; The later represents the actual - location at which the column is being displayed in the screen. - - - - Each view column index corresponds to a specific model column, - though a model column may have any number of view columns - associated with it (including zero). For example the same - column might be rendered twice, or the data from one column - could be used to display different bits of information - - - - The view column does not necessarily depend on only one model - column. In some cases, the view column renderer can be given a - reference to another model column to get extra information about - its display. For example, a mail program could display deleted - messages with a line through them by creating a model column - with no corresponding view column that told whether or not the - message is deleted, and then having the text column - strikethrough the display if the invisible column had a value - corresponding to "deleted". - - - - The view column also specifies a few other pieces of - information. One piece of information is the renderer. &ETable; - provides a number of renderers to choose from, or you can write - your own. Currently, there are renderers for text, image sets, - and checkboxes. - - - - The view column also includes information about the header. - There are two types of headers: text, and pixbuf. The first - allows you to specify a string which is rendered in the header. - The second allows you to specify an image to copy into the - header. - - - - - Header - - - The &ETableHeader; represents the header information for the - table. The &ETableHeader; is used in two different ways. The - first is the in the full_header - element of an &ETable;. This is the list of possible columns in - the view. You add each of your columns to this &ETableHeader; - and then pass it into the &ETable;. - - - - The second use is completely internal. &ETable; uses another - &ETableHeader; to store the actual displayed columns. Many of - the &ETableHeader; functions are for this purpose. The only - functions that users of the library should need to use are - e_table_header_new and - e_table_header_add_col. - - - - - Layout Specification - - - &ETable; uses an &ETableSpecification; to layout the columns of - the widget. The &ETableSpecification; is specified as XML data - passed into the &ETable; as a string. - - - - The most powerful part of the &ETableSpecification; is that when - finished, &ETable; will allow you to get a copy of an - &ETableSpecification; that describes the current view of the - tree. This allows the developer to save the current view so that - next time the user opens this table, they find it in exactly the - state that they left it. - - - - The XML specification allows for a number of things. First, it - allows you to pick a set of default columns to be shown. Thus, - even if you had hundreds of pieces of data, you could choose to - only display a few that fit on the screen by default. - - - - The second major thing that the &ETableSpecification; allows you - to specify is the column grouping and sorting. &ETable; has a - powerful mechanism for allowing the user to choose columns to - group by, thus allowing multiple columns of sorting, as well as - visual grouping of similar elements and interactive selection of - what data to display. - - - - The grouping in &ETableSpecification; is specified as a - hierarchy of columns to group by. Each level of the hierarchy - lets you sort by a particular column, either ascending or - descending. All levels except the last cause the canvas to group - by the given column. - - - - An example &ETableSpecification; follows. - - - - <ETableSpecification> - <columns-shown frozen_columns="2"> - <column> 0 </column> - <column> 1 </column> - <column> 2 </column> - <column> 3 </column> - <column> 4 </column> - </columns-shown> - <grouping> - <group column="3" ascending="1"> - <group column="4" ascending="0"> - <leaf column="2" ascending="1"/> - </group> - </group> - </grouping> - </ETableSpecification> - - - - This example has 5 columns which are initially in order. It has - 2 levels of grouping. The first is grouped by the 4th column - (all indexes are 0 based) and sorts those groups in ascending - order. Inside those groups, the data is grouped by the fifth - column and sorted in descending order of the fifth column. - Finally, the data in those groups is sorted by the third column - in ascending order. Due to the "frozen_columns" attribute on the - columns-shown element, the user will not be - able to rearrange the first two columns. They will always be the - first two. - - - - - Conclusion - - - All in all, &ETable; is a very powerful widget. Once you learn - to use it, you have access to a vast amount of power requiring a - comparatively small amount of work. - - -
diff --git a/e-util/.cvsignore b/e-util/.cvsignore deleted file mode 100644 index cb49036068..0000000000 --- a/e-util/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -.deps -Makefile -Makefile.in -.libs -*.lo -*.la diff --git a/e-util/ChangeLog b/e-util/ChangeLog deleted file mode 100644 index 9958171157..0000000000 --- a/e-util/ChangeLog +++ /dev/null @@ -1,495 +0,0 @@ -2000-08-21 Lauris Kaplinski - - * e-font.h: - * e-font.c: Changed UTF-8 syntax from char-based to byte-based - -2000-08-21 Peter Williams - - * e-html-utils.c (e_text_to_html): Fix a booboo in the tab - expansion code (didn't use the new value of 'out'). - -2000-08-19 Lauris Kaplinski lauris@helixcode.com - - * e-font.h: #define e_font_height(f) to save some space - -2000-08-19 Lauris Kaplinski lauris@helixcode.com - - * e-font.h: - * e-font.c: Thin wrapper around GdkFont to deal with UTF-8 directly - Also handles bold/italic styling - -2000-08-14 Peter Williams - - * e-sexp.c (scanner_config): Add "-" to be an acceptable - first character for an operation -- yaaay subtraction! - -2000-08-11 Peter Williams - - * e-html-utils.c (e_text_to_html): Fix the tab expansion - for when the length would exceed the ten characters that - we allocated. - -2000-08-10 Dan Winship - - * e-setup.[ch]: Remove. The shell tells the components where - the evolution homedir is now. - - * Makefile.am (libeutil_la_SOURCES): Remove e-setup.c - - * e-html-utils.c (e_text_to_html): If converting both spaces and - newlines, then convert tabs too. The joys of pseudo-
.
-
-2000-08-09  Christopher James Lahey  
-
-	* e-popup-menu.c: Fix the bug where it truncates the last item
-
-2000-08-09  Christopher James Lahey  
-
-	* e-popup-menu.c: Ooops.
-
-2000-08-09  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added uncompiled e_read_uri function.
-
-2000-08-09  Christopher James Lahey  
-
-	* e-popup-menu.c, e-popup-menu.h: Added a hide_mask argument to
-	the two popup menu functions.
-
-2000-08-07  Christopher James Lahey  
-
-	* e-gui-utils.c, e-gui-utils.c: Added
-	e_container_change_tab_order.
-
-2000-07-27  Peter Williams  
-
-	* e-canvas.c (e_canvas_destroy): Chain the
-	destroy handler.
-	
-2000-07-25  Peter Williams  	
-	
-	* e-canvas.c (emit_event): Don't bother with 
-	dereferencing the event pointer.
-	(e_canvas_item_set_cursor): Reference our selection
-	item; print a debug message. Deref when destroying
-	(e_canvas_item_add_selection): Same.
-	(e_canvas_item_remove_selection): Same.
-	
-2000-07-25  Peter Williams  
-
-	* Makefile.am (libeutil_static_la_LDFLAGS): Build both libraries
-	(a typo didn't build libeutil.la, only -static.)
-
-2000-07-25  Seth Alves  
-
-	* Makefile.am (libeutil_static_la_LDFLAGS): build static version
-	of library for conduit to use
-
-2000-07-25  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added a bunch of e_marshal functions.
-
-2000-07-12  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added e_strstrcase function.
-
-2000-07-11  Christopher James Lahey  
-
-	* e-canvas-vbox.c: Removed some debugging printfs.
-	
-	* e-canvas.c (e_canvas_unrealize): Call parent unrealize method.
-
-2000-07-10  Ettore Perazzoli  
-
-	* e-sexp.c (eval_dump_result): `#if 0'ed out.
-
-	* e-popup-menu.h (e_popup_menu_create): New prototype.
-
-2000-07-10  Dan Winship  
-
-	* e-html-utils.c: Fix warnings.
-
-2000-07-08  Christopher James Lahey  
-
-	* e-list.c, e-list.h: Added e_list_duplicate.
-
-2000-07-07  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added e_strsplit to work around a bug in
-	g_strsplit.
-
-2000-07-07  Christopher James Lahey  
-
-	* e-iterator.c, e-iterator.h, e-list-iterator.c,
-	e-list-iterator.h: Added last and insert functions.
-
-2000-07-06  Federico Mena Quintero  
-
-	* e-dialog-widgets.c: Added docstrings.  This file did not have
-	them at all.  EEEEEEK!
-
-2000-07-05  Dan Winship  
-
-	* e-sexp.c (e_sexp_parse): Kill debugging message
-
-2000-07-03  Christopher James Lahey  
-
-	* e-iterator.c, e-iterator.h, e-list-iterator.c,
-	e-list-iterator.h, e-list.c, e-list.h: New list class with
-	iterators.
-
-	* e-canvas.c: Made it so that you don't get the same selection in
-	the selection list more than once.
-
-2000-07-01  Ettore Perazzoli  
-
-	* e-gui-utils.h: #include .  It's
-	needed to be able to pass an appropriate @type arg to
-	`e_notice()'.
-
-2000-06-29  Jody Goldberg 
-
-	* e-canvas.c (e_canvas_init) : Init the InputContext members
-	(e_canvas_class_init) : Add a handler for unrealize.
-	(e_canvas_focus_in) : enable the input context.
-	(e_canvas_focus_out) : enable the input context.
-	(e_canvas_realize) : Create an input context.
-	(e_canvas_unrealize) : New function to release the input context.
-
-2000-06-28  Dan Winship  
-
-	* e-html-utils.c (url_extract): add ")" to the set of characters
-	to back up over at the end of a potential URL.
-
-2000-06-27  Ettore Perazzoli  
-
-	* e-dialog-widgets.c (get_toggle_value): Use `value_var', not
-	`value'.
-
-2000-06-27  Ettore Perazzoli  
-
-	* Makefile.am (INCLUDES): `-I$(top_srcdir)' to fix compilation
-	with builddir != srcdir.
-
-2000-06-26  Christopher James Lahey  
-
-	* Makefile.am: Added e-canvas-vbox.c and e-canvas-vbox.h.
-
-	* e-canvas-vbox.c, e-canvas-vbox.h: New canvas object to act like
-	a vbox using the reflow system.
-
-2000-06-20  Christopher James Lahey  
-
-	* e-canvas.c, e-canvas.h: Added a variable to keep track of the
-	cursor.  Set the cursor when selection_add is called.  Properly
-	unset the cursor at the right times.
-
-2000-06-20  Christopher James Lahey  
-
-	* e-canvas.c: Grab the focus when setting the cursor.
-
-2000-06-20  Christopher James Lahey  
-
-	* e-canvas.c, e-canvas.h: Built a system for doing selections
-	and/or a cursor in canvas.
-
-2000-06-13  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Changed the needed e_marshal functions.
-
-	* e-printable.c, e-printable.h: Added a quantize parameter to
-	e_printable_height.  Also, added a e_printable_will_fit function.
-	
-2000-06-10  Christopher James Lahey  
-
-	* Makefile.am: Added e-printable.c and e-printable.h.
-
-	* e-printable.c, e-printable.h: This new class is a printing
-	context.  Other classes return an EPrintable which represents a
-	context for printing that object.
-
-	* e-util.c, e-util.h: Added
-	e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL and
-	e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE.
-
-2000-06-01  Christopher James Lahey  
-
-	* e-util.c: Fixed e_marshal_INT__INT_INT_POINTER.
-
-2000-06-01  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added e_marshal_INT__INT_INT_POINTER.
-
-2000-06-01  Dan Winship  
-
-	* e-util.c (g_int_compare): Duh! -1 != 1. :)
-
-2000-06-01  Christopher James Lahey  
-
-	* e-sexp.c (e_sexp_term_eval): g_return_val_if_fail to prevent a crash.
-
-2000-05-30  Not Zed  
-
-	* e-sexp.c (e_sexp_encode_bool): Utility function to build a bool
-	as part of an expression string.
-	(e_sexp_encode_string): Likewise for strings.
-
-2000-05-30  Christopher James Lahey  
-
-	* e-canvas-utils.c, e-canvas-utils.h: Added
-	e_canvas_item_show_area which makes sure that a particular area of
-	a given item is in the scroll area.
-
-2000-05-30  Federico Mena Quintero  
-
-	* e-dialog-widgets.c (hook_radio): Use the exported function to
-	set the value.
-	(get_radio_value): Likewise.
-	(hook_option_menu): Likewise.
-	(get_option_menu_value): Likewise.
-	(hook_toggle): Likewise.
-	(get_toggle_value): Likewise.
-	(hook_spin_button): Likewise.
-	(get_spin_button_value): Likewise.
-	(hook_editable): Likewise.
-	(get_editable_value): Likewise.
-	(e_dialog_radio_set): Radio buttons are prepended to their parent
-	group's list, so we need to flip the index around when
-	getting/setting the value.
-	(e_dialog_radio_get): Likewise.
-
-2000-05-27  Federico Mena Quintero  
-
-	* e-dialog-widgets.c (e_dialog_editable_set): Moved over from
-	event-editor-utils.c.
-	(e_dialog_editable_get): Likewise.
-	(e_dialog_toggle_set): Likewise.
-	(e_dialog_toggle_get): Likewise.
-	(e_dialog_spin_set): Likewise.
-	(e_dialog_spin_get_double): Likewise.
-	(e_dialog_spin_get_int): Likewise.
-	(e_dialog_option_menu_set): Likewise, and added a value map.
-	(e_dialog_option_menu_get): Likewise.
-	(e_dialog_dateedit_set): Likewise.
-	(e_dialog_dateedit_get): Likewise.
-	(e_dialog_radio_set): New function.
-	(e_dialog_radio_get): New function.
-
-2000-05-24  Christopher James Lahey  
-
-	* e-paned.c, e-paned.h: Removed.
-
-2000-05-23  Federico Mena Quintero  
-
-	* e-dialog-widgets.c (get_radio_value): Implemented.  Amazing that
-	one has to go through so much pain to get a stupid value from
-	GTK+.
-	(hook_option_menu): Implemented.  Same complaint.
-	(get_toggle_value): Implemented.
-	(get_spin_button_value): Implemented.
-	(get_entry_value): Implemented.
-	(e_dialog_widget_hook_value): Function to hook a widget to the
-	variable it will modify.
-	(e_dialog_get_values): Function to feed the variables from a
-	dialog's widgets.
-	(e_dialog_xml_widget_hook_value): Function to hook a widget from
-	a Glade file.
-
-2000-05-23  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added e_write_file.
-
-2000-05-19  Federico Mena Quintero  
-
-	* e-dialog-widgets.[ch]: New files with utilities for hooking up
-	widgets in Glade-generated dialogs.
-
-	* Makefile.am (libeutil_la_SOURCES): Added e-dialog-widgets.[ch].
-
-2000-05-19  Christopher James Lahey  
-
-	* e-gui-utils.c, e-gui-utils.h: Added e_container_foreach_leaf.
-
-2000-05-18  Christopher James Lahey  
-
-	* Makefile.am: Add imagesdir support.
-
-	* e-gui-utils.c, e-gui-utils.h: Added e_create_image_widget for
-	glade use.
-
-2000-05-16  Christopher James Lahey  
-
-	* e-xml-utils.c: xmlGetProp appears to return malloced memory.
-	Thus we must free it.
-
-2000-05-15  Ettore Perazzoli  
-
-	* e-util.c (e_free_string_list): New function.
-
-2000-05-14  Christopher James Lahey  
-
-	* e-util.c, e-util.h: Added e_strdup_strip which returns a copy of
-	the string with the leading and trailing spaces removed.
-
-2000-05-11  NotZed  
-
-	* e-sexp.c (e_sexp_finalise): Destroy the g_scanner when cleaning up.
-	(e_sexp_finalise): Free symbol table on finalise.
-
-2000-05-09  Christopher James Lahey  
-
-	* e-canvas.c: Remove reflow idle when being destroyed.
-
-2000-05-06  Christopher James Lahey  
-
-	* e-html-utils.c: Got rid of some warnings.
-
-	* e-util.c, e-util.h: Added e_read_file which takes a filename and
-	returns a newly allocated string containing the contents of that
-	file.
-
-2000-05-03  Ettore Perazzoli  
-
-	* e-util.h: #include  and .
-
-	* e-util.c (e_free_object_list): New utility function.
-
-2000-05-02  Damon Chaplin  
-
-	* e-canvas.c (e_canvas_focus_in): 
-	(e_canvas_focus_out): set and reset the GTK_HAS_FOCUS flag. We now get
-	focus_out events correctly.
-
-2000-05-02  NotZed  
-
-	* e-sexp.c (e_sexp_finalise): Free the parse tree if we have one.
-	(e_sexp_parse): If we already have a parse tree, free it.
-
-2000-05-02  Matt Loper  
-
-	* Makefile.am: set G_LOG_DOMAIN.
-
-2000-05-01  Ettore Perazzoli  
-
-	* e-xml-utils.c, e-xml-utils.h: Constified all the functions.
-
-2000-04-27  Dan Winship  
-
-	* e-html-utils.c (e_text_to_html): Moved here from the mailer,
-	since it's of general use, and the composer needs it too.
-
-2000-04-24  Miguel de Icaza  
-
-	* e-popup-menu.c: New file.  Implements easy to use popup menus. 
-
-2000-04-24  Matt Loper  
-
-	* e-paned.c: New file. Makes a GtkPaned with more than two
-	children.
-	* e-paned.h: same.
-
-	* Makefile.am: added e-paned.[ch].
-
-2000-04-19  Christopher James Lahey  
-
-	* e-xml-utils.c, e-xml-utils.h: Added
-	e_xml_get_child_by_name_by_lang.
-
-2000-04-16  Anders Carlsson  
-
-      * e-canvas.c (e_canvas_class_init): Add realize.
-      (e_canvas_realize): Set the back pixmap to NULL to reduce flicker.
-
-2000-04-14  Christopher James Lahey  
-
-	* e-xml-utils.c: Fixing a warning.
-
-2000-04-14  Christopher James Lahey  
-
-	* e-xml-utils.c: Add g_return_if_fails.
-
-2000-04-12  Miguel de Icaza  
-
-	* e-cursors.c (e_cursor_get): Prevent next hacker to get bitten by this.
-
-2000-04-10  Christopher James Lahey  
-
-	* e-canvas.c: Added proper keyboard focus handling.
-
-2000-04-06  Matt Loper  
-
-	* e-setup.c (e_setup_base_dir): Get/set Evolution's base directory
-	via gnome-config.
-	(mkdir_if_necessary): New function.
-	(e_setup_base_dir): Use mkdir_if_necessary().
-
-2000-03-22  NotZed  
-
-	* e-util/e-sexp.h: Formatting cleanup.
-
-2000-03-07  NotZed  
-
-	* e-util/Makefile.am (libeutil_la_SOURCES): s-sexp.h -> e-sexp.h.
-
-2000-03-12  Christopher James Lahey  
-	
-	* e-util/e-canvas.c, e-util/e-canvas.h: Fixed some bugs here to
-	speed up reflow and to make it fail less often.
-
-2000-03-10  Christopher James Lahey  
-
-	* e-util/e-canvas.c, e-util/e-canvas.h: Designed a new system for
-	doing hierarchical displays in the canvas.  Adds an extra idle
-	loop to the canvas system.
-
-2000-03-05  Christopher James Lahey  
-
-	* e-util/e-xml-utils.c: Fixed e_xml_set_integer_prop_by_name.
-
-2000-03-04  Christopher James Lahey  
-
-	* e-util/e-xml-utils.c, e-util/e-xml-utils.h: Added
-	e_xml_set_integer_prop_by_name.
-
-2000-02-28  NotZed  
-	
-	* e-util/e-sexp.[ch]: Added.  moved from filter-sexp.[ch]
-
-	* e-util/Makefile.am (libeutil_a_SOURCES): Add e-sexp.
-	(noinst_LTLIBRARIES): Changed to a libtool library.
-
-2000-02-24  Christopher James Lahey  
-
-	* e-util/e-xml-utils.c, e-util/e-xml-utils.h: Added
-	e_xml_get_integer_prop_by_name.
-
-	* e-util/Makefile.am: Added e-util.c.
-
-	* e-util/e-util.h: Added e-util.c functions.
-
-	* e-util/e-util.c: New file for compare functions
-
-2000-02-24  Christopher James Lahey  
-	
-	* e-util/e-canvas-utils.h: Fixed the comment at the top and added
-	#ifndef __E_CANVAS_UTILS__.
-
-	* e-util/Makefile.am: Added e-xml-utils.c and
-	e-xml-utils.h.
-
-	* e-util/e-xml-utils.h, e-util/e-xml-utils.c: Added files for some
-	xml utilities.
-
-	* e-util/e-util.h: Added type EFocus which describes which
-	direction the focus will be coming from.
-
-2000-02-23  Dan Winship  
-
-	* e-util/e-setup.c (e_setup_base_dir): Make ~/evolution mode 700
-	rather than mode 600 (and use the symbolic name rather than the
-	number).
-	
-2000-02-09  Christopher James Lahey  
-	
-	* e-util/Makefile.am: Add canvas utilities to libeutil.
-
diff --git a/e-util/Makefile.am b/e-util/Makefile.am
deleted file mode 100644
index 6a1dd2cb02..0000000000
--- a/e-util/Makefile.am
+++ /dev/null
@@ -1,48 +0,0 @@
-imagesdir = $(datadir)/images/evolution
-
-INCLUDES =					\
-	-I$(top_srcdir)				\
-	$(GNOME_INCLUDEDIR)			\
-	$(UNICODE_CFLAGS)			\
-	-DEVOLUTION_IMAGES=\""$(imagesdir)"\"	\
-	-DG_LOG_DOMAIN=\"e-utils\"		\
-	$(UNICODE_CFLAGS)
-
-noinst_LTLIBRARIES = libeutil.la libeutil-static.la
-
-libeutil_la_SOURCES =			\
-	e-canvas.c			\
-	e-canvas.h			\
-	e-canvas-utils.c		\
-	e-canvas-utils.h		\
-	e-canvas-vbox.c			\
-	e-canvas-vbox.h			\
-	e-cursors.c			\
-	e-cursors.h			\
-	e-dialog-widgets.c		\
-	e-dialog-widgets.h		\
-	e-gui-utils.c			\
-	e-gui-utils.h			\
-	e-html-utils.c			\
-	e-html-utils.h			\
-	e-iterator.c			\
-	e-iterator.h			\
-	e-list.c			\
-	e-list.h			\
-	e-list-iterator.c		\
-	e-list-iterator.h		\
-	e-popup-menu.c			\
-	e-popup-menu.h			\
-	e-printable.c			\
-	e-printable.h			\
-	e-sexp.c			\
-	e-sexp.h			\
-	e-util.c			\
-	e-util.h			\
-	e-xml-utils.c			\
-	e-xml-utils.h			\
-	e-font.c			\
-	e-font.h
-
-libeutil_static_la_SOURCES = $(libeutil_la_SOURCES)
-libeutil_static_la_LDFLAGS = --all-static
\ No newline at end of file
diff --git a/e-util/e-canvas-utils.c b/e-util/e-canvas-utils.c
deleted file mode 100644
index ac61545b5f..0000000000
--- a/e-util/e-canvas-utils.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * e-canvas-utils.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "e-canvas-utils.h"
-
-void
-e_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy)
-{
-	double translate[6];
-
-	g_return_if_fail (item != NULL);
-	g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
-
-	art_affine_translate (translate, dx, dy);
-
-	gnome_canvas_item_affine_absolute (item, translate);
-}
-
-void
-e_canvas_item_show_area (GnomeCanvasItem *item, double x1, double y1, double x2, double y2)
-{
-	GtkAdjustment *h, *v;
-	double dx = 0, dy = 0;
-	
-	g_return_if_fail (item != NULL);
-	g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
-	
-	gnome_canvas_item_i2w(item, &x1, &y1);
-	gnome_canvas_item_i2w(item, &x2, &y2);
-
-	h = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas));
-	v = gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas));
-
-	if (x2 > h->value + h->page_size)
-		dx = (x2 - (h->value + h->page_size));
-	if (y2 > v->value + v->page_size)
-		dy = (y2 - (v->value + v->page_size));
-
-	if (x1 < h->value + dx)
-		dx = (x1 - h->value);
-	if (y1 < v->value + dy)
-		dy = (y1 - v->value);
-
-	if (dx)
-		gtk_adjustment_set_value(h, h->value + dx);
-	if (dy)
-		gtk_adjustment_set_value(v, v->value + dy);
-}
diff --git a/e-util/e-canvas-utils.h b/e-util/e-canvas-utils.h
deleted file mode 100644
index a940ea393c..0000000000
--- a/e-util/e-canvas-utils.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * e-canvas-utils.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __E_CANVAS_UTILS__
-#define __E_CANVAS_UTILS__
-
-#include 
-void e_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy);
-void e_canvas_item_show_area     (GnomeCanvasItem *item, double x1, double y1, double x2, double y2);
-
-#endif /* __E_CANVAS_UTILS__ */
diff --git a/e-util/e-canvas-vbox.c b/e-util/e-canvas-vbox.c
deleted file mode 100644
index 2d389a83e6..0000000000
--- a/e-util/e-canvas-vbox.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* 
- * e-canvas-vbox.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-#include "e-canvas-vbox.h"
-#include 
-#include 
-#include 
-
-static void e_canvas_vbox_init		(ECanvasVbox		 *CanvasVbox);
-static void e_canvas_vbox_class_init	(ECanvasVboxClass	 *klass);
-static void e_canvas_vbox_set_arg (GtkObject *o, GtkArg *arg, guint arg_id);
-static void e_canvas_vbox_get_arg (GtkObject *object, GtkArg *arg, guint arg_id);
-static void e_canvas_vbox_destroy (GtkObject *object);
-
-static gint e_canvas_vbox_event   (GnomeCanvasItem *item, GdkEvent *event);
-static void e_canvas_vbox_realize (GnomeCanvasItem *item);
-
-static void e_canvas_vbox_reflow (GnomeCanvasItem *item, int flags);
-
-static void e_canvas_vbox_real_add_item(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item);
-static void e_canvas_vbox_resize_children (GnomeCanvasItem *item);
-
-static GnomeCanvasGroupClass *parent_class = NULL;
-
-/* The arguments we take */
-enum {
-	ARG_0,
-	ARG_WIDTH,
-	ARG_HEIGHT,
-	ARG_SPACING,
-};
-
-GtkType
-e_canvas_vbox_get_type (void)
-{
-  static GtkType type = 0;
-
-  if (!type)
-    {
-      static const GtkTypeInfo info =
-      {
-        "ECanvasVbox",
-        sizeof (ECanvasVbox),
-        sizeof (ECanvasVboxClass),
-        (GtkClassInitFunc) e_canvas_vbox_class_init,
-        (GtkObjectInitFunc) e_canvas_vbox_init,
-        /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-
-      type = gtk_type_unique (gnome_canvas_group_get_type (), &info);
-    }
-
-  return type;
-}
-
-static void
-e_canvas_vbox_class_init (ECanvasVboxClass *klass)
-{
-	GtkObjectClass *object_class;
-	GnomeCanvasItemClass *item_class;
-
-	object_class = (GtkObjectClass*) klass;
-	item_class = (GnomeCanvasItemClass *) klass;
-
-	parent_class = gtk_type_class (gnome_canvas_group_get_type ());
-  
-	gtk_object_add_arg_type ("ECanvasVbox::width", GTK_TYPE_DOUBLE, 
-				 GTK_ARG_READWRITE, ARG_WIDTH); 
-	gtk_object_add_arg_type ("ECanvasVbox::height", GTK_TYPE_DOUBLE, 
-				 GTK_ARG_READABLE, ARG_HEIGHT);
-	gtk_object_add_arg_type ("ECanvasVbox::spacing", GTK_TYPE_DOUBLE, 
-				 GTK_ARG_READWRITE, ARG_SPACING);
-
-	klass->add_item       = e_canvas_vbox_real_add_item;
- 
-	object_class->set_arg   = e_canvas_vbox_set_arg;
-	object_class->get_arg   = e_canvas_vbox_get_arg;
-	object_class->destroy   = e_canvas_vbox_destroy;
-  
-	/* GnomeCanvasItem method overrides */
-	item_class->event       = e_canvas_vbox_event;
-	item_class->realize     = e_canvas_vbox_realize;
-}
-
-static void
-e_canvas_vbox_init (ECanvasVbox *vbox)
-{
-	vbox->items = NULL;
-
-	vbox->width = 10;
-	vbox->height = 10;
-	vbox->spacing = 0;
-
-	e_canvas_item_set_reflow_callback(GNOME_CANVAS_ITEM(vbox), e_canvas_vbox_reflow);
-}
-
-static void
-e_canvas_vbox_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
-{
-	GnomeCanvasItem *item;
-	ECanvasVbox *e_canvas_vbox;
-
-	item = GNOME_CANVAS_ITEM (o);
-	e_canvas_vbox = E_CANVAS_VBOX (o);
-	
-	switch (arg_id){
-	case ARG_WIDTH:
-		e_canvas_vbox->width = GTK_VALUE_DOUBLE (*arg);
-		e_canvas_vbox_resize_children(item);
-		e_canvas_item_request_reflow(item);
-		break;
-	case ARG_SPACING:
-		e_canvas_vbox->spacing = GTK_VALUE_DOUBLE (*arg);
-		e_canvas_item_request_reflow(item);
-		break;
-	}
-}
-
-static void
-e_canvas_vbox_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
-{
-	ECanvasVbox *e_canvas_vbox;
-
-	e_canvas_vbox = E_CANVAS_VBOX (object);
-
-	switch (arg_id) {
-	case ARG_WIDTH:
-		GTK_VALUE_DOUBLE (*arg) = e_canvas_vbox->width;
-		break;
-	case ARG_HEIGHT:
-		GTK_VALUE_DOUBLE (*arg) = e_canvas_vbox->height;
-		break;
-	case ARG_SPACING:
-		GTK_VALUE_DOUBLE (*arg) = e_canvas_vbox->spacing;
-		break;
-	default:
-		arg->type = GTK_TYPE_INVALID;
-		break;
-	}
-}
-
-static void
-e_canvas_vbox_destroy (GtkObject *object)
-{
-	ECanvasVbox *vbox = E_CANVAS_VBOX(object);
-
-	g_list_foreach(vbox->items, (GFunc) gtk_object_unref, NULL);
-	g_list_free(vbox->items);
-	vbox->items = NULL;
-	
-	GTK_OBJECT_CLASS(parent_class)->destroy (object);
-}
-
-static gint
-e_canvas_vbox_event (GnomeCanvasItem *item, GdkEvent *event)
-{
-	gint return_val = TRUE;
-
-	switch (event->type) {
-	case GDK_KEY_PRESS:
-		switch (event->key.keyval) {
-		case GDK_Tab:
-		case GDK_KP_Tab:
-		case GDK_ISO_Left_Tab:
-		case GDK_Left:
-		case GDK_KP_Left:
-		case GDK_Right:
-		case GDK_KP_Right:
-		case GDK_Down:
-		case GDK_KP_Down:
-		case GDK_Up:
-		case GDK_KP_Up:
-		case GDK_Return:
-		case GDK_KP_Enter:
-			return_val = TRUE;
-			break;
-		default:
-			return_val = FALSE;
-			break;
-		}
-		break;
-	default:
-		return_val = FALSE;
-		break;
-	}
-	if (!return_val) {
-		if (GNOME_CANVAS_ITEM_CLASS(parent_class)->event)
-			return GNOME_CANVAS_ITEM_CLASS (parent_class)->event (item, event);
-	}
-	return return_val;
-	
-}
-
-static void
-e_canvas_vbox_realize (GnomeCanvasItem *item)
-{
-	if (GNOME_CANVAS_ITEM_CLASS(parent_class)->realize)
-		(* GNOME_CANVAS_ITEM_CLASS(parent_class)->realize) (item);
-	
-	e_canvas_vbox_resize_children(item);
-	e_canvas_item_request_reflow(item);
-}
-
-static void
-e_canvas_vbox_remove_item (GnomeCanvasItem *item, ECanvasVbox *vbox)
-{
-	vbox->items = g_list_remove(vbox->items, item);
-	gtk_object_unref(GTK_OBJECT(vbox));
-}
-
-static void
-e_canvas_vbox_real_add_item(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item)
-{
-	e_canvas_vbox->items = g_list_append(e_canvas_vbox->items, item);
-	gtk_object_ref(GTK_OBJECT(item));
-	gtk_object_ref(GTK_OBJECT(e_canvas_vbox));
-	gtk_signal_connect(GTK_OBJECT(item), "destroy",
-			   GTK_SIGNAL_FUNC(e_canvas_vbox_remove_item), e_canvas_vbox);
-	if ( GTK_OBJECT_FLAGS( e_canvas_vbox ) & GNOME_CANVAS_ITEM_REALIZED ) {
-		gnome_canvas_item_set(item,
-				      "width", (double) e_canvas_vbox->width,
-				      NULL);
-		e_canvas_item_request_reflow(item);
-	}
-
-}
-
-static void
-e_canvas_vbox_resize_children (GnomeCanvasItem *item)
-{
-	GList *list;
-	ECanvasVbox *e_canvas_vbox;
-
-	e_canvas_vbox = E_CANVAS_VBOX (item);
-	for ( list = e_canvas_vbox->items; list; list = list->next ) {
-		GnomeCanvasItem *child = GNOME_CANVAS_ITEM(list->data);
-		gnome_canvas_item_set(child,
-				      "width", (double) e_canvas_vbox->width,
-				      NULL);
-	}
-}
-
-static void
-e_canvas_vbox_reflow( GnomeCanvasItem *item, int flags )
-{
-	ECanvasVbox *e_canvas_vbox = E_CANVAS_VBOX(item);
-	if ( GTK_OBJECT_FLAGS( e_canvas_vbox ) & GNOME_CANVAS_ITEM_REALIZED ) {
-
-		gdouble old_height;
-		gdouble running_height;
-
-		old_height = e_canvas_vbox->height;
-		
-		running_height = 0;
-
-		if (e_canvas_vbox->items == NULL) {
-		} else {
-			GList *list;
-			gdouble item_height;
-
-			list = e_canvas_vbox->items;
-			gtk_object_get (GTK_OBJECT(list->data),
-					"height", &item_height,
-					NULL);
-			e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(list->data),
-						    (double) 0,
-						    (double) running_height);
-			running_height += item_height;
-			list = g_list_next(list);
-			
-			for( ; list; list = g_list_next(list)) {
-				running_height += e_canvas_vbox->spacing;
-
-				gtk_object_get (GTK_OBJECT(list->data),
-						"height", &item_height,
-						NULL);
-
-				e_canvas_item_move_absolute(GNOME_CANVAS_ITEM(list->data),
-							    (double) 0,
-							    (double) running_height);
-
-				running_height += item_height;
-			}
-				 
-		}
-		e_canvas_vbox->height = running_height;
-		if (old_height != e_canvas_vbox->height)
-			e_canvas_item_request_parent_reflow(item);
-	}
-}
-
-void
-e_canvas_vbox_add_item(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item)
-{
-	if (E_CANVAS_VBOX_CLASS(GTK_OBJECT(e_canvas_vbox)->klass)->add_item)
-		(E_CANVAS_VBOX_CLASS(GTK_OBJECT(e_canvas_vbox)->klass)->add_item) (e_canvas_vbox, item);
-}
diff --git a/e-util/e-canvas-vbox.h b/e-util/e-canvas-vbox.h
deleted file mode 100644
index c45baa0b0a..0000000000
--- a/e-util/e-canvas-vbox.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-canvas-vbox.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef __E_CANVAS_VBOX_H__
-#define __E_CANVAS_VBOX_H__
-
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* ECanvasVbox - A canvas item container.
- *
- * The following arguments are available:
- *
- * name		type		read/write	description
- * --------------------------------------------------------------------------------
- * width        double          RW              width of the CanvasVbox
- * height       double          R               height of the CanvasVbox
- * spacing      double          RW              Spacing between items.
- */
-
-#define E_CANVAS_VBOX_TYPE			(e_canvas_vbox_get_type ())
-#define E_CANVAS_VBOX(obj)			(GTK_CHECK_CAST ((obj), E_CANVAS_VBOX_TYPE, ECanvasVbox))
-#define E_CANVAS_VBOX_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_CANVAS_VBOX_TYPE, ECanvasVboxClass))
-#define E_IS_CANVAS_VBOX(obj)		(GTK_CHECK_TYPE ((obj), E_CANVAS_VBOX_TYPE))
-#define E_IS_CANVAS_VBOX_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_CANVAS_VBOX_TYPE))
-
-
-typedef struct _ECanvasVbox       ECanvasVbox;
-typedef struct _ECanvasVboxClass  ECanvasVboxClass;
-
-struct _ECanvasVbox
-{
-	GnomeCanvasGroup parent;
-
-	/* item specific fields */
-	GList *items; /* Of type GnomeCanvasItem */
-
-	double width;
-	double height;
-	double spacing;
-};
-
-struct _ECanvasVboxClass
-{
-	GnomeCanvasGroupClass parent_class;
-
-	/* Virtual methods. */
-	void (* add_item) (ECanvasVbox *CanvasVbox, GnomeCanvasItem *item);
-};
-
-/* 
- * To be added to a CanvasVbox, an item must have the argument "width" as
- * a Read/Write argument and "height" as a Read Only argument.  It
- * should also do an ECanvas parent CanvasVbox request if its size
- * changes.
- */
-void       e_canvas_vbox_add_item(ECanvasVbox *e_canvas_vbox, GnomeCanvasItem *item);
-GtkType    e_canvas_vbox_get_type (void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CANVAS_VBOX_H__ */
diff --git a/e-util/e-canvas.c b/e-util/e-canvas.c
deleted file mode 100644
index fb67bf0379..0000000000
--- a/e-util/e-canvas.c
+++ /dev/null
@@ -1,696 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * e-canvas.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include "e-canvas.h"
-static void e_canvas_init           (ECanvas         *card);
-static void e_canvas_destroy        (GtkObject        *object);
-static void e_canvas_class_init	    (ECanvasClass    *klass);
-static void e_canvas_realize        (GtkWidget        *widget);
-static void e_canvas_unrealize      (GtkWidget        *widget);
-static gint e_canvas_key            (GtkWidget        *widget,
-				     GdkEventKey      *event);
-
-static gint e_canvas_focus_in       (GtkWidget        *widget,
-				     GdkEventFocus    *event);
-static gint e_canvas_focus_out      (GtkWidget        *widget,
-				     GdkEventFocus    *event);
-
-static int emit_event (GnomeCanvas *canvas, GdkEvent *event);
-
-static GnomeCanvasClass *parent_class = NULL;
-
-enum {
-	REFLOW,
-	LAST_SIGNAL
-};
-
-static guint e_canvas_signals [LAST_SIGNAL] = { 0, };
-
-GtkType
-e_canvas_get_type (void)
-{
-	static GtkType canvas_type = 0;
-
-	if (!canvas_type)
-	{
-		static const GtkTypeInfo canvas_info =
-		{
-			"ECanvas",
-			sizeof (ECanvas),
-			sizeof (ECanvasClass),
-			(GtkClassInitFunc) e_canvas_class_init,
-			(GtkObjectInitFunc) e_canvas_init,
-			/* reserved_1 */ NULL,
-			/* reserved_2 */ NULL,
-			(GtkClassInitFunc) NULL,
-		};
-
-		canvas_type = gtk_type_unique (gnome_canvas_get_type (), &canvas_info);
-	}
-
-	return canvas_type;
-}
-
-static void
-e_canvas_class_init (ECanvasClass *klass)
-{
-	GtkObjectClass *object_class;
-	GnomeCanvasClass *canvas_class;
-	GtkWidgetClass *widget_class;
-
-	object_class = (GtkObjectClass*) klass;
-	canvas_class = (GnomeCanvasClass *) klass;
-	widget_class = (GtkWidgetClass *) klass;
-
-	parent_class = gtk_type_class (gnome_canvas_get_type ());
-
-	object_class->destroy = e_canvas_destroy;
-
-	widget_class->key_press_event = e_canvas_key;
-	widget_class->key_release_event = e_canvas_key;
-	widget_class->focus_in_event = e_canvas_focus_in;
-	widget_class->focus_out_event = e_canvas_focus_out;
-	widget_class->realize = e_canvas_realize;
-	widget_class->unrealize = e_canvas_unrealize;
-
-	klass->reflow = NULL;
-
-	e_canvas_signals [REFLOW] =
-		gtk_signal_new ("reflow",
-				GTK_RUN_LAST,
-				object_class->type,
-				GTK_SIGNAL_OFFSET (ECanvasClass, reflow),
-				gtk_marshal_NONE__NONE,
-				GTK_TYPE_NONE, 0);
-
-	gtk_object_class_add_signals (object_class, e_canvas_signals, LAST_SIGNAL);
-}
-
-static void
-e_canvas_init (ECanvas *canvas)
-{
-	canvas->selection = NULL;
-	canvas->cursor = NULL;
-	canvas->ic = NULL;
-	canvas->ic_attr = NULL;
-}
-
-static void
-e_canvas_destroy (GtkObject *object)
-{
-	ECanvas *canvas = E_CANVAS(object);
-	if (canvas->idle_id)
-		g_source_remove(canvas->idle_id);
-	if ((GTK_OBJECT_CLASS (parent_class))->destroy)
-		(*(GTK_OBJECT_CLASS (parent_class))->destroy) (object);
-}
-
-GtkWidget *
-e_canvas_new ()
-{
-	return GTK_WIDGET (gtk_type_new (e_canvas_get_type ()));
-}
-
-
-/* Returns whether the item is an inferior of or is equal to the parent. */
-static int
-is_descendant (GnomeCanvasItem *item, GnomeCanvasItem *parent)
-{
-	for (; item; item = item->parent)
-		if (item == parent)
-			return TRUE;
-
-	return FALSE;
-}
-
-/* Emits an event for an item in the canvas, be it the current item, grabbed
- * item, or focused item, as appropriate.
- */
-static int
-emit_event (GnomeCanvas *canvas, GdkEvent *event)
-{
-	/*GdkEvent ev;*/
-	gint finished;
-	GnomeCanvasItem *item;
-	GnomeCanvasItem *parent;
-	guint mask;
-
-	/* Perform checks for grabbed items */
-
-	if (canvas->grabbed_item && !is_descendant (canvas->current_item, canvas->grabbed_item))
-		return FALSE;
-
-	if (canvas->grabbed_item) {
-		switch (event->type) {
-		case GDK_ENTER_NOTIFY:
-			mask = GDK_ENTER_NOTIFY_MASK;
-			break;
-
-		case GDK_LEAVE_NOTIFY:
-			mask = GDK_LEAVE_NOTIFY_MASK;
-			break;
-
-		case GDK_MOTION_NOTIFY:
-			mask = GDK_POINTER_MOTION_MASK;
-			break;
-
-		case GDK_BUTTON_PRESS:
-		case GDK_2BUTTON_PRESS:
-		case GDK_3BUTTON_PRESS:
-			mask = GDK_BUTTON_PRESS_MASK;
-			break;
-
-		case GDK_BUTTON_RELEASE:
-			mask = GDK_BUTTON_RELEASE_MASK;
-			break;
-
-		case GDK_KEY_PRESS:
-			mask = GDK_KEY_PRESS_MASK;
-			break;
-
-		case GDK_KEY_RELEASE:
-			mask = GDK_KEY_RELEASE_MASK;
-			break;
-
-		default:
-			mask = 0;
-			break;
-		}
-
-		if (!(mask & canvas->grabbed_event_mask))
-			return FALSE;
-	}
-
-	/* Convert to world coordinates -- we have two cases because of diferent
-	 * offsets of the fields in the event structures.
-	 */
-
-	/*ev = *event;*/
-
-	switch (event->type) {
-	case GDK_ENTER_NOTIFY:
-	case GDK_LEAVE_NOTIFY:
-		gnome_canvas_window_to_world (canvas,
-					      event->crossing.x, 
-					      event->crossing.y,
-					      &(event->crossing.x), 
-					      &(event->crossing.y));
-		break;
-
-	case GDK_MOTION_NOTIFY:
-	case GDK_BUTTON_PRESS:
-	case GDK_2BUTTON_PRESS:
-	case GDK_3BUTTON_PRESS:
-	case GDK_BUTTON_RELEASE:
-		gnome_canvas_window_to_world (canvas,
-					      event->motion.x, 
-					      event->motion.y,
-					      &(event->motion.x), 
-					      &(event->motion.y));
-		break;
-
-	default:
-		break;
-	}
-
-	/* Choose where we send the event */
-
-	item = canvas->current_item;
-
-	if (canvas->focused_item
-	    && ((event->type == GDK_KEY_PRESS) || (event->type == GDK_KEY_RELEASE) || (event->type == GDK_FOCUS_CHANGE)))
-		item = canvas->focused_item;
-
-	/* The event is propagated up the hierarchy (for if someone connected to
-	 * a group instead of a leaf event), and emission is stopped if a
-	 * handler returns TRUE, just like for GtkWidget events.
-	 */
-
-	finished = FALSE;
-
-	while (item && !finished) {
-		gtk_object_ref (GTK_OBJECT (item));
-
-		gtk_signal_emit_by_name (GTK_OBJECT (item), "event",
-					 event,
-					 &finished);
-
-		if (GTK_OBJECT_DESTROYED (item))
-			finished = TRUE;
-
-		parent = item->parent;
-		gtk_object_unref (GTK_OBJECT (item));
-
-		item = parent;
-	}
-
-	return finished;
-}
-
-/* Key event handler for the canvas */
-static gint
-e_canvas_key (GtkWidget *widget, GdkEventKey *event)
-{
-	GnomeCanvas *canvas;
-
-	g_return_val_if_fail (widget != NULL, FALSE);
-	g_return_val_if_fail (GNOME_IS_CANVAS (widget), FALSE);
-	g_return_val_if_fail (event != NULL, FALSE);
-
-	canvas = GNOME_CANVAS (widget);
-
-	return emit_event (canvas, (GdkEvent *) event);
-}
-
-
-/**
- * e_canvas_item_grab_focus:
- * @item: A canvas item.
- *
- * Makes the specified item take the keyboard focus, so all keyboard events will
- * be sent to it.  If the canvas widget itself did not have the focus, it grabs
- * it as well.
- **/
-void
-e_canvas_item_grab_focus (GnomeCanvasItem *item)
-{
-	GnomeCanvasItem *focused_item;
-	GdkEvent ev;
-
-	g_return_if_fail (item != NULL);
-	g_return_if_fail (GNOME_IS_CANVAS_ITEM (item));
-	g_return_if_fail (GTK_WIDGET_CAN_FOCUS (GTK_WIDGET (item->canvas)));
-
-	focused_item = item->canvas->focused_item;
-
-	if (focused_item) {
-		ev.focus_change.type = GDK_FOCUS_CHANGE;
-		ev.focus_change.window = GTK_LAYOUT (item->canvas)->bin_window;
-		ev.focus_change.send_event = FALSE;
-		ev.focus_change.in = FALSE;
-
-		emit_event (item->canvas, &ev);
-	}
-
-	item->canvas->focused_item = item;
-
-	if (!GTK_WIDGET_HAS_FOCUS (GTK_WIDGET(item->canvas))) {
-		gtk_widget_grab_focus (GTK_WIDGET (item->canvas));
-	}
-
-	if (focused_item) {
-		ev.focus_change.type = GDK_FOCUS_CHANGE;
-		ev.focus_change.window = GTK_LAYOUT (item->canvas)->bin_window;
-		ev.focus_change.send_event = FALSE;
-		ev.focus_change.in = TRUE;
-
-		emit_event (item->canvas, &ev);
-	}
-}
-
-/* Focus in handler for the canvas */
-static gint
-e_canvas_focus_in (GtkWidget *widget, GdkEventFocus *event)
-{
-	GnomeCanvas *canvas;
-	ECanvas *ecanvas;
-
-	canvas = GNOME_CANVAS (widget);
-	ecanvas = E_CANVAS (widget);
-
-	GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
-
-	if (ecanvas->ic)
-		gdk_im_begin (ecanvas->ic, canvas->layout.bin_window);
-
-	if (canvas->focused_item)
-		return emit_event (canvas, (GdkEvent *) event);
-	else
-		return FALSE;
-}
-
-/* Focus out handler for the canvas */
-static gint
-e_canvas_focus_out (GtkWidget *widget, GdkEventFocus *event)
-{
-	GnomeCanvas *canvas;
-	ECanvas *ecanvas;
-
-	canvas = GNOME_CANVAS (widget);
-	ecanvas = E_CANVAS (widget);
-
-	GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-
-	if (ecanvas->ic)
-		gdk_im_end ();
-
-	if (canvas->focused_item)
-		return emit_event (canvas, (GdkEvent *) event);
-	else
-		return FALSE;
-}
-
-static void
-e_canvas_realize (GtkWidget *widget)
-{
-	ECanvas *ecanvas = E_CANVAS (widget);
-
-	if (GTK_WIDGET_CLASS (parent_class)->realize)
-		(* GTK_WIDGET_CLASS (parent_class)->realize) (widget);
-
-	gdk_window_set_back_pixmap (GTK_LAYOUT (widget)->bin_window, NULL, FALSE);
-
-	if (gdk_im_ready () && (ecanvas->ic_attr = gdk_ic_attr_new ()) != NULL) {
-		GdkEventMask mask;
-		GdkICAttr *attr = ecanvas->ic_attr;
-		GdkICAttributesType attrmask = GDK_IC_ALL_REQ;
-		GdkIMStyle style;
-		GdkIMStyle supported_style = GDK_IM_PREEDIT_NONE |
-			GDK_IM_PREEDIT_NOTHING |
-			GDK_IM_STATUS_NONE |
-			GDK_IM_STATUS_NOTHING;
-
-		attr->style = style = gdk_im_decide_style (supported_style);
-		attr->client_window = ecanvas->parent.layout.bin_window;
-
-		ecanvas->ic = gdk_ic_new (attr, attrmask);
-		if (ecanvas->ic != NULL) {
-			mask = gdk_window_get_events (attr->client_window);
-			mask |= gdk_ic_get_events (ecanvas->ic);
-			gdk_window_set_events (attr->client_window, mask);
-
-			if (GTK_WIDGET_HAS_FOCUS (widget))
-				gdk_im_begin (ecanvas->ic, attr->client_window);
-		} else
-			g_warning ("Can't create input context.");
-	}
-
-}
-
-static void
-e_canvas_unrealize (GtkWidget *widget)
-{
-	ECanvas * ecanvas = E_CANVAS (widget);
-	if (ecanvas->ic) {
-		gdk_ic_destroy (ecanvas->ic);
-		ecanvas->ic = NULL;
-	}
-	if (ecanvas->ic_attr) {
-		gdk_ic_attr_destroy (ecanvas->ic_attr);
-		ecanvas->ic_attr = NULL;
-	}
-	if (GTK_WIDGET_CLASS (parent_class)->unrealize)
-		(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
-}
-
-static void
-e_canvas_item_invoke_reflow (GnomeCanvasItem *item, int flags)
-{
-	GnomeCanvasGroup *group;
-	GList *list;
-	GnomeCanvasItem *child;
-
-	if (GNOME_IS_CANVAS_GROUP (item)) {
-		group = GNOME_CANVAS_GROUP (item);
-		for (list = group->item_list; list; list = list->next) {
-			child = GNOME_CANVAS_ITEM (list->data);
-			if (child->object.flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
-				e_canvas_item_invoke_reflow (child, flags);
-		}
-	}
-
-	if (item->object.flags & E_CANVAS_ITEM_NEEDS_REFLOW) {
-		ECanvasItemReflowFunc func;
-		func = gtk_object_get_data (GTK_OBJECT (item),
-					    "ECanvasItem::reflow_callback");
-		if (func)
-			func (item, flags);
-	}
-
-	item->object.flags &= ~E_CANVAS_ITEM_NEEDS_REFLOW;
-	item->object.flags &= ~E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW;
-}
-
-static void
-do_reflow (ECanvas *canvas)
-{
-	if (GNOME_CANVAS(canvas)->root->object.flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
-		e_canvas_item_invoke_reflow (GNOME_CANVAS(canvas)->root, 0);
-}
-
-/* Idle handler for the e-canvas.  It deals with pending reflows. */
-static gint
-idle_handler (gpointer data)
-{
-	ECanvas *canvas;
-
-	GDK_THREADS_ENTER();
-
-	canvas = E_CANVAS (data);
-	do_reflow (canvas);
-
-	/* Reset idle id */
-	canvas->idle_id = 0;
-
-	gtk_signal_emit (GTK_OBJECT (canvas),
-			 e_canvas_signals [REFLOW]);
-
-	GDK_THREADS_LEAVE();
-
-	return FALSE;
-}
-
-/* Convenience function to add an idle handler to a canvas */
-static void
-add_idle (ECanvas *canvas)
-{
-	if (canvas->idle_id != 0)
-		return;
-
-	canvas->idle_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE, idle_handler, (gpointer) canvas, NULL);
-}
-
-static void
-e_canvas_item_descendent_needs_reflow (GnomeCanvasItem *item)
-{
-	if (item->object.flags & E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW)
-		return;
-
-	item->object.flags |= E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW;
-	if (item->parent)
-		e_canvas_item_descendent_needs_reflow(item->parent);
-}
-
-void
-e_canvas_item_request_reflow (GnomeCanvasItem *item)
-{
-	if (item->object.flags & GNOME_CANVAS_ITEM_REALIZED) {
-		item->object.flags |= E_CANVAS_ITEM_NEEDS_REFLOW;
-		e_canvas_item_descendent_needs_reflow(item);
-		add_idle(E_CANVAS(item->canvas));
-	}
-}
-
-void
-e_canvas_item_request_parent_reflow (GnomeCanvasItem *item)
-{
-	g_return_if_fail(item != NULL);
-	g_return_if_fail(GNOME_IS_CANVAS_ITEM(item));
-	e_canvas_item_request_reflow(item->parent);
-}
-
-void
-e_canvas_item_set_reflow_callback (GnomeCanvasItem *item, ECanvasItemReflowFunc func)
-{
-	gtk_object_set_data(GTK_OBJECT(item), "ECanvasItem::reflow_callback", (gpointer) func);
-}
-
-
-void
-e_canvas_item_set_selection_callback (GnomeCanvasItem *item, ECanvasItemSelectionFunc func)
-{
-	gtk_object_set_data(GTK_OBJECT(item), "ECanvasItem::selection_callback", (gpointer) func);
-}
-
-void
-e_canvas_item_set_selection_compare_callback (GnomeCanvasItem *item, ECanvasItemSelectionCompareFunc func)
-{
-	gtk_object_set_data(GTK_OBJECT(item), "ECanvasItem::selection_compare_callback", (gpointer) func);
-}
-
-void
-e_canvas_item_set_cursor (GnomeCanvasItem *item, gpointer id)
-{
-	GList *list;
-	int flags;
-	ECanvas *canvas;
-	ECanvasSelectionInfo *info;
-	ECanvasItemSelectionFunc func;
-
-	g_return_if_fail(item != NULL);
-	g_return_if_fail(GNOME_IS_CANVAS_ITEM(item));
-	g_return_if_fail(item->canvas != NULL);
-	g_return_if_fail(E_IS_CANVAS(item->canvas));
-
-	canvas = E_CANVAS(item->canvas);
-	flags = E_CANVAS_ITEM_SELECTION_DELETE_DATA;
-
-	for (list = canvas->selection; list; list = g_list_next(list)) {
-		info = list->data;
-
-		func = gtk_object_get_data(GTK_OBJECT(info->item), "ECanvasItem::selection_callback");
-		if (func)
-			func(info->item, flags, info->id);
-		g_message ("ECANVAS: free info (2): item %p, id %p",
-			   info->item, info->id);
-		gtk_object_unref (GTK_OBJECT (info->item));
-		g_free(info);
-	}
-	g_list_free(canvas->selection);
-
-	canvas->selection = NULL;
-
-	gnome_canvas_item_grab_focus(item);
-
-	info = g_new(ECanvasSelectionInfo, 1);
-	info->item = item;
-	gtk_object_ref (GTK_OBJECT (info->item));
-	info->id = id;
-	g_message ("ECANVAS: new info item %p, id %p", item, id);
-
-	flags = E_CANVAS_ITEM_SELECTION_SELECT | E_CANVAS_ITEM_SELECTION_CURSOR;
-	func = gtk_object_get_data(GTK_OBJECT(item), "ECanvasItem::selection_callback");
-	if (func)
-		func(item, flags, id);
-
-	canvas->selection = g_list_prepend(canvas->selection, info);
-	canvas->cursor = info;
-}
-
-void
-e_canvas_item_set_cursor_end (GnomeCanvasItem *item, gpointer id)
-{
-}
-
-void
-e_canvas_item_add_selection (GnomeCanvasItem *item, gpointer id)
-{
-	int flags;
-	ECanvas *canvas;
-	ECanvasSelectionInfo *info;
-	ECanvasItemSelectionFunc func;
-	GList *list;
-
-	g_return_if_fail(item != NULL);
-	g_return_if_fail(GNOME_IS_CANVAS_ITEM(item));
-	g_return_if_fail(item->canvas != NULL);
-	g_return_if_fail(E_IS_CANVAS(item->canvas));
-
-	flags = E_CANVAS_ITEM_SELECTION_SELECT;
-	canvas = E_CANVAS(item->canvas);
-
-	if (canvas->cursor) {
-		func = gtk_object_get_data(GTK_OBJECT(canvas->cursor->item), "ECanvasItem::selection_callback");
-		if (func)
-			func(canvas->cursor->item, flags, canvas->cursor->id);
-	}
-
-	gnome_canvas_item_grab_focus(item);
-
-	flags = E_CANVAS_ITEM_SELECTION_SELECT | E_CANVAS_ITEM_SELECTION_CURSOR;
-
-	for (list = canvas->selection; list; list = g_list_next(list)) {
-		ECanvasSelectionInfo *search;
-		search = list->data;
-
-		if (search->item == item) {
-			ECanvasItemSelectionCompareFunc compare_func;
-			compare_func = gtk_object_get_data(GTK_OBJECT(search->item), "ECanvasItem::selection_compare_callback");
-
-			if (compare_func(search->item, search->id, id, 0) == 0) {
-				canvas->cursor = search;
-				func = gtk_object_get_data(GTK_OBJECT(item), "ECanvasItem::selection_callback");
-				if (func)
-					func(item, flags, search->id);
-				return;
-			}
-		}
-	}
-
-	info = g_new(ECanvasSelectionInfo, 1);
-	info->item = item;
-	gtk_object_ref (GTK_OBJECT (info->item));
-	info->id = id;
-	g_message ("ECANVAS: new info (2): item %p, id %p", item, id);
-
-	func = gtk_object_get_data(GTK_OBJECT(item), "ECanvasItem::selection_callback");
-	if (func)
-		func(item, flags, id);
-
-	canvas->selection = g_list_prepend(canvas->selection, info);
-	canvas->cursor = info;
-}
-
-void
-e_canvas_item_remove_selection (GnomeCanvasItem *item, gpointer id)
-{
-	int flags;
-	ECanvas *canvas;
-	ECanvasSelectionInfo *info;
-	GList *list;
-
-	g_return_if_fail(item != NULL);
-	g_return_if_fail(GNOME_IS_CANVAS_ITEM(item));
-	g_return_if_fail(item->canvas != NULL);
-	g_return_if_fail(E_IS_CANVAS(item->canvas));
-
-	flags = E_CANVAS_ITEM_SELECTION_DELETE_DATA;
-	canvas = E_CANVAS(item->canvas);
-
-	for (list = canvas->selection; list; list = g_list_next(list)) {
-		info = list->data;
-
-		if (info->item == item) {
-			ECanvasItemSelectionCompareFunc compare_func;
-			compare_func = gtk_object_get_data(GTK_OBJECT(info->item), "ECanvasItem::selection_compare_callback");
-
-			if (compare_func(info->item, info->id, id, 0) == 0) {
-				ECanvasItemSelectionFunc func;
-				func = gtk_object_get_data(GTK_OBJECT(info->item), "ECanvasItem::selection_callback");
-				if (func)
-					func(info->item, flags, info->id);
-				canvas->selection = g_list_remove_link(canvas->selection, list);
-
-				if (canvas->cursor == info)
-					canvas->cursor = NULL;
-
-				g_message ("ECANVAS: removing info: item %p, info %p",
-					   info->item, info->id);
-				gtk_object_unref (GTK_OBJECT (info->item));
-				g_free(info);
-				g_list_free_1(list);
-				break;
-			}
-		}
-	}
-}
diff --git a/e-util/e-canvas.h b/e-util/e-canvas.h
deleted file mode 100644
index b13a9dd2ab..0000000000
--- a/e-util/e-canvas.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-canvas.h
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Chris Lahey 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifndef __E_CANVAS_H__
-#define __E_CANVAS_H__
-
-#include 
-
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
-
-/* ECanvas - A class derived from canvas for the purpose of adding
- * evolution specific canvas hacks.
- */
-
-#define E_CANVAS_TYPE			(e_canvas_get_type ())
-#define E_CANVAS(obj)			(GTK_CHECK_CAST ((obj), E_CANVAS_TYPE, ECanvas))
-#define E_CANVAS_CLASS(klass)		(GTK_CHECK_CLASS_CAST ((klass), E_CANVAS_TYPE, ECanvasClass))
-#define E_IS_CANVAS(obj)		(GTK_CHECK_TYPE ((obj), E_CANVAS_TYPE))
-#define E_IS_CANVAS_CLASS(klass)	(GTK_CHECK_CLASS_TYPE ((obj), E_CANVAS_TYPE))
-
-typedef void		(*ECanvasItemReflowFunc)		(GnomeCanvasItem *item,
-								 gint   	  flags);
-
-typedef void            (*ECanvasItemSelectionFunc)             (GnomeCanvasItem *item,
-								 gint             flags,
-								 gpointer         user_data);
-/* Returns the same as strcmp does. */
-typedef gint            (*ECanvasItemSelectionCompareFunc)      (GnomeCanvasItem *item,
-								 gpointer         data1,
-								 gpointer         data2,
-								 gint             flags);
-
-
-typedef struct _ECanvas       ECanvas;
-typedef struct _ECanvasClass  ECanvasClass;
-
-/* Object flags for items */
-enum {
-	E_CANVAS_ITEM_NEEDS_REFLOW            = 1 << 13,
-	E_CANVAS_ITEM_DESCENDENT_NEEDS_REFLOW = 1 << 14
-};
-
-enum {
-	E_CANVAS_ITEM_SELECTION_SELECT        = 1 << 0, /* TRUE = select.  FALSE = unselect. */
-	E_CANVAS_ITEM_SELECTION_CURSOR        = 1 << 1, /* TRUE = has become cursor.  FALSE = not cursor. */
-	E_CANVAS_ITEM_SELECTION_DELETE_DATA   = 1 << 2,
-};
-
-typedef struct {
-	GnomeCanvasItem *item;
-	gpointer         id;
-} ECanvasSelectionInfo;
-
-struct _ECanvas
-{
-	GnomeCanvas parent;
-		             
-	int                   idle_id;
-	GList                *selection;
-	ECanvasSelectionInfo *cursor;
-
-	/* Input context for dead key support */
-	GdkIC     *ic;
-	GdkICAttr *ic_attr;
-};
-
-struct _ECanvasClass
-{
-	GnomeCanvasClass parent_class;
-	void (* reflow) (ECanvas *canvas);
-};
-
-
-GtkType    e_canvas_get_type (void);
-GtkWidget *e_canvas_new      (void);
-
-/* Used to send all of the keystroke events to a specific item as well as
- * GDK_FOCUS_CHANGE events.
- */
-void e_canvas_item_grab_focus (GnomeCanvasItem *item);
-
-void e_canvas_item_request_reflow (GnomeCanvasItem *item);
-void e_canvas_item_request_parent_reflow (GnomeCanvasItem *item);
-void e_canvas_item_set_reflow_callback (GnomeCanvasItem *item, ECanvasItemReflowFunc func);
-
-void e_canvas_item_set_selection_callback (GnomeCanvasItem *item, ECanvasItemSelectionFunc func);
-void e_canvas_item_set_selection_compare_callback (GnomeCanvasItem *item, ECanvasItemSelectionCompareFunc func);
-
-void e_canvas_item_set_cursor (GnomeCanvasItem *item, gpointer id);
-void e_canvas_item_add_selection (GnomeCanvasItem *item, gpointer id);
-void e_canvas_item_remove_selection (GnomeCanvasItem *item, gpointer id);
-
-/* Not implemented yet. */
-void e_canvas_item_set_cursor_end (GnomeCanvasItem *item, gpointer id);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __E_CANVAS_H__ */
diff --git a/e-util/e-cursors.c b/e-util/e-cursors.c
deleted file mode 100644
index 56a5015cbd..0000000000
--- a/e-util/e-cursors.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * cursors.c: cursor handling for Evolution.
- *            copied from Gnumeric.
- *
- * Authors:
- *   Miguel de Icaza (miguel@gnu.org)
- */
-#include 
-#include 
-#include "e-cursors.h"
-
-static GdkColor black, white;
-
-#define GDK_INTERNAL_CURSOR -1
-
-typedef struct {
-	GdkCursor *cursor;
-	int       hot_x, hot_y;
-	char      **xpm;
-} CursorDef;
-
-static CursorDef cursors [] = {
-	{ NULL, GDK_INTERNAL_CURSOR,   GDK_CROSSHAIR,         NULL },
-	{ NULL, GDK_INTERNAL_CURSOR,   GDK_LEFT_PTR,          NULL },
-	{ NULL, GDK_INTERNAL_CURSOR,   GDK_FLEUR,             NULL },
-	{ NULL, GDK_INTERNAL_CURSOR,   GDK_SB_H_DOUBLE_ARROW, NULL },
-	{ NULL, GDK_INTERNAL_CURSOR,   GDK_SB_V_DOUBLE_ARROW, NULL },
-	{ NULL, 0,    0,  NULL }
-};
-
-static int inited = FALSE;
-
-static void
-create_bitmap_and_mask_from_xpm (GdkBitmap **bitmap, GdkBitmap **mask, gchar **xpm)
-{
-	int height, width, colors;
-	char pixmap_buffer [(32 * 32)/8];
-	char mask_buffer [(32 * 32)/8];
-	int x, y, pix, yofs;
-	int transparent_color, black_color;
-
-	sscanf (xpm [0], "%d %d %d %d", &height, &width, &colors, &pix);
-
-	g_assert (height == 32);
-	g_assert (width  == 32);
-	g_assert (colors <= 3);
-
-	transparent_color = ' ';
-	black_color = '.';
-
-	yofs = colors + 1;
-	for (y = 0; y < 32; y++){
-		for (x = 0; x < 32;){
-			char value = 0, maskv = 0;
-
-			for (pix = 0; pix < 8; pix++, x++){
-				if (xpm [y + yofs][x] != transparent_color){
-					maskv |= 1 << pix;
-
-					/*
-					 * Invert the colours here because it seems
-					 * to workaround a bug the Matrox G100 Xserver?
-					 * We reverse the foreground & background in the next
-					 * routine to compensate.
-					 */
-					if (xpm [y + yofs][x] == black_color){
-						value |= 1 << pix;
-					}
-				}
-			}
-			pixmap_buffer [(y * 4 + x/8)-1] = value;
-			mask_buffer [(y * 4 + x/8)-1] = maskv;
-		}
-	}
-	*bitmap = gdk_bitmap_create_from_data (NULL, pixmap_buffer, 32, 32);
-	*mask   = gdk_bitmap_create_from_data (NULL, mask_buffer, 32, 32);
-}
-
-void
-e_cursors_init (void)
-{
-	GdkColormap *colormap;
-	int i;
-
-	colormap = gtk_widget_get_default_colormap ();
-	gdk_color_white (colormap, &white);
-	gdk_color_black (colormap, &black);
-	
-	for (i = 0; cursors [i].hot_x; i++){
-		GdkBitmap *bitmap, *mask;
-
-		if (cursors [i].hot_x < 0)
-			cursors [i].cursor = gdk_cursor_new (cursors [i].hot_y);
-		else {
-			create_bitmap_and_mask_from_xpm (&bitmap, &mask, cursors [i].xpm);
-
-			/* The foreground and background colours are reversed.
-			 * See comment above for explanation.
-			 */
-			cursors [i].cursor =
-				gdk_cursor_new_from_pixmap (
-					bitmap, mask,
-					&black, &white,
-					cursors [i].hot_x,
-					cursors [i].hot_y);
-		}
-	}
-
-	inited = TRUE;
-	
-	g_assert (i == E_NUM_CURSORS);
-}
-
-void
-e_cursors_shutdown (void)
-{
-	int i;
-
-	for (i = 0; cursors [i].hot_x; i++)
-		gdk_cursor_destroy (cursors [i].cursor);
-}
-
-
-/* Returns a cursor given its type */
-GdkCursor *
-e_cursor_get (ECursorType type)
-{
-	g_return_val_if_fail (type >= 0 && type < E_NUM_CURSORS, NULL);
-
-	if (!inited)
-		g_warning ("e_cursors_init not called");
-	
-	return cursors [type].cursor;
-}
diff --git a/e-util/e-cursors.h b/e-util/e-cursors.h
deleted file mode 100644
index 771e5f6d4d..0000000000
--- a/e-util/e-cursors.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef E_CURSORS_H
-#define E_CURSORS_H
-
-/* Copied from Gnumeric */
-
-typedef enum {
-	E_CURSOR_THIN_CROSS,
-	E_CURSOR_ARROW,
-	E_CURSOR_MOVE,
-	E_CURSOR_SIZE_X,
-	E_CURSOR_SIZE_Y,
-	E_NUM_CURSORS
-} ECursorType;
-
-void    e_cursors_init      (void);
-void    e_cursors_shutdown  (void);
-
-#define e_cursor_set(win, c)					   \
-G_STMT_START {							   \
-     if (win) 							   \
-         gdk_window_set_cursor (win, e_cursor_get (c)); \
-} G_STMT_END
-
-#define e_cursor_set_widget(w, c)						     \
-G_STMT_START {									     \
-     if (GTK_WIDGET (w)->window)						     \
-	gdk_window_set_cursor (GTK_WIDGET (w)->window, e_cursor_get (c)); \
-} G_STMT_END
-
-GdkCursor *e_cursor_get (ECursorType type);
-
-#endif /* E_CURSORS_H */
-
diff --git a/e-util/e-dialog-widgets.c b/e-util/e-dialog-widgets.c
deleted file mode 100644
index 19c698af02..0000000000
--- a/e-util/e-dialog-widgets.c
+++ /dev/null
@@ -1,824 +0,0 @@
-/* Evolution internal utilities - Glade dialog widget utilities
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * Author: Federico Mena-Quintero 
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "e-dialog-widgets.h"
-
-
-
-/* A widget, a pointer to the variable it will modify, and extra information */
-typedef struct {
-	GtkWidget *widget;
-	gpointer value_var;
-	gpointer info;
-} WidgetHook;
-
-/* Hook information for a complete dialog */
-typedef struct {
-	GSList *whooks;
-} DialogHooks;
-
-
-
-/* Destroy handler for the dialog; frees the dialog hooks */
-static void
-dialog_destroy_cb (GtkObject *dialog, gpointer data)
-{
-	DialogHooks *hooks;
-
-	hooks = data;
-
-	g_slist_free (hooks->whooks);
-	hooks->whooks = NULL;
-
-	g_free (hooks);
-	gtk_object_set_data (dialog, "dialog-hooks", NULL);
-}
-
-/* Ensures that the dialog has the necessary attached data to store the widget
- * hook information.
- */
-static DialogHooks *
-get_dialog_hooks (GtkWidget *dialog)
-{
-	DialogHooks *hooks;
-
-	hooks = gtk_object_get_data (GTK_OBJECT (dialog), "dialog-hooks");
-	if (!hooks) {
-		hooks = g_new0 (DialogHooks, 1);
-		gtk_object_set_data (GTK_OBJECT (dialog), "dialog-hooks", hooks);
-		gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
-				    GTK_SIGNAL_FUNC (dialog_destroy_cb), hooks);
-	}
-
-	return hooks;
-}
-
-/* Converts an mapped value to the appropriate index in an item group.  The
- * values for the items are provided as a -1-terminated array.
- */
-static int
-value_to_index (const int *value_map, int value)
-{
-	int i;
-
-	for (i = 0; value_map[i] != -1; i++)
-		if (value_map[i] == value)
-			return i;
-
-	return -1;
-}
-
-/* Converts an index in an item group to the appropriate mapped value.  See the
- * function above.
- */
-static int
-index_to_value (const int *value_map, int index)
-{
-	int i;
-
-	/* We do this the hard way, i.e. not as a simple array reference, to
-	 * check for correctness.
-	 */
-
-	for (i = 0; value_map[i] != -1; i++)
-		if (i == index)
-			return value_map[i];
-
-	return -1;
-}
-
-/* Callback for the "toggled" signal of toggle buttons */
-static void
-toggled_cb (GtkToggleButton *toggle, gpointer data)
-{
-	GnomePropertyBox *pbox;
-
-	pbox = GNOME_PROPERTY_BOX (data);
-
-	/* For radio buttons, we only notify the property box if the button is
-	 * active, because we'll get one call for each of the changed buttons in
-	 * the radio group.
-	 */
-	if (!GTK_IS_RADIO_BUTTON (toggle) || toggle->active)
-		gnome_property_box_changed (pbox);
-}
-
-/* Hooks a radio button group */
-static void
-hook_radio (GtkWidget *dialog, GtkRadioButton *radio, gpointer value_var, gpointer info)
-{
-	GSList *group;
-	GSList *l;
-	int *value;
-	const int *value_map;
-
-	group = gtk_radio_button_group (radio);
-
-	/* Set the value */
-
-	value = (int *) value_var;
-	value_map = (const int *) info;
-
-	e_dialog_radio_set (GTK_WIDGET (radio), *value, value_map);
-
-	/* Hook to changed */
-
-	if (GNOME_IS_PROPERTY_BOX (dialog))
-		for (l = group; l; l = l->next)
-			gtk_signal_connect (GTK_OBJECT (l->data), "toggled",
-					    GTK_SIGNAL_FUNC (toggled_cb), dialog);
-}
-
-/* Gets the value of a radio button group */
-static void
-get_radio_value (GtkRadioButton *radio, gpointer value_var, gpointer info)
-{
-	int *value;
-	const int *value_map;
-
-	value = (int *) value_var;
-	value_map = (const int *) info;
-
-	*value = e_dialog_radio_get (GTK_WIDGET (radio), value_map);
-}
-
-/* Callback for the "activate" signal of menu items */
-static void
-activate_cb (GtkMenuItem *item, gpointer data)
-{
-	GnomePropertyBox *pbox;
-
-	pbox = GNOME_PROPERTY_BOX (data);
-	gnome_property_box_changed (pbox);
-}
-
-/* Hooks an option menu */
-static void
-hook_option_menu (GtkWidget *dialog, GtkOptionMenu *omenu, gpointer value_var, gpointer info)
-{
-	int *value;
-	const int *value_map;
-
-	/* Set the value */
-
-	value = (int *) value_var;
-	value_map = (const int *) info;
-
-	e_dialog_option_menu_set (GTK_WIDGET (omenu), *value, value_map);
-
-	/* Hook to changed */
-
-	if (GNOME_IS_PROPERTY_BOX (dialog)) {
-		GtkMenu *menu;
-		GList *l;
-
-		menu = GTK_MENU (gtk_option_menu_get_menu (omenu));
-
-		for (l = GTK_MENU_SHELL (menu)->children; l; l = l->next)
-			gtk_signal_connect (GTK_OBJECT (l->data), "activate",
-					    GTK_SIGNAL_FUNC (activate_cb), dialog);
-	}
-}
-
-/* Gets the value of an option menu */
-static void
-get_option_menu_value (GtkOptionMenu *omenu, gpointer value_var, gpointer info)
-{
-	int *value;
-	const int *value_map;
-
-	value = (int *) value_var;
-	value_map = (const int *) info;
-
-	*value = e_dialog_option_menu_get (GTK_WIDGET (omenu), value_map);
-}
-
-/* Hooks a toggle button */
-static void
-hook_toggle (GtkWidget *dialog, GtkToggleButton *toggle, gpointer value_var, gpointer info)
-{
-	gboolean *value;
-
-	/* Set the value */
-
-	value = (gboolean *) value_var;
-	e_dialog_toggle_set (GTK_WIDGET (toggle), *value);
-
-	/* Hook to changed */
-
-	if (GNOME_IS_PROPERTY_BOX (dialog))
-		gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
-				    GTK_SIGNAL_FUNC (toggled_cb), dialog);
-}
-
-/* Gets the value of a toggle button */
-static void
-get_toggle_value (GtkToggleButton *toggle, gpointer value_var, gpointer info)
-{
-	gboolean *value;
-
-	value = (gboolean *) value_var;
-	*value = e_dialog_toggle_get (GTK_WIDGET (toggle));
-}
-
-/* Callback for the "value_changed" signal of the adjustment of a spin button */
-static void
-value_changed_cb (GtkAdjustment *adj, gpointer data)
-{
-	GnomePropertyBox *pbox;
-
-	pbox = GNOME_PROPERTY_BOX (data);
-	gnome_property_box_changed (pbox);
-}
-
-/* Hooks a spin button */
-static void
-hook_spin_button (GtkWidget *dialog, GtkSpinButton *spin, gpointer value_var, gpointer info)
-{
-	double *value;
-	GtkAdjustment *adj;
-
-	/* Set the value */
-
-	value = (double *) value_var;
-	e_dialog_spin_set (GTK_WIDGET (spin), *value);
-
-	/* Hook to changed */
-
-	adj = gtk_spin_button_get_adjustment (spin);
-
-	if (GNOME_IS_PROPERTY_BOX (dialog))
-		gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
-				    GTK_SIGNAL_FUNC (value_changed_cb), dialog);
-}
-
-/* Gets the value of a spin button */
-static void
-get_spin_button_value (GtkSpinButton *spin, gpointer value_var, gpointer info)
-{
-	double *value;
-
-	value = (double *) value_var;
-	*value = e_dialog_spin_get_double (GTK_WIDGET (spin));
-}
-
-/* Callback for the "changed" signal of a GtkEditable widget */
-static void
-changed_cb (GtkEditable *editable, gpointer data)
-{
-	GnomePropertyBox *pbox;
-
-	pbox = GNOME_PROPERTY_BOX (data);
-	gnome_property_box_changed (pbox);
-}
-
-/* Hooks a GtkEditable widget */
-static void
-hook_editable (GtkWidget *dialog, GtkEditable *editable, gpointer value_var, gpointer info)
-{
-	char **value;
-
-	/* Set the value */
-
-	value = (char **) value_var;
-
-	e_dialog_editable_set (GTK_WIDGET (editable), *value);
-
-	/* Hook to changed */
-
-	if (GNOME_IS_PROPERTY_BOX (dialog))
-		gtk_signal_connect (GTK_OBJECT (editable), "changed",
-				    GTK_SIGNAL_FUNC (changed_cb), dialog);
-}
-
-/* Gets the value of a GtkEditable widget */
-static void
-get_editable_value (GtkEditable *editable, gpointer value_var, gpointer data)
-{
-	char **value;
-
-	value = (char **) value_var;
-	if (*value)
-		g_free (*value);
-
-	*value = e_dialog_editable_get (GTK_WIDGET (editable));
-}
-
-/**
- * e_dialog_editable_set:
- * @widget: A #GtkEditable widget.
- * @value: String value.
- * 
- * Sets the string value inside a #GtkEditable-derived widget.
- **/
-void
-e_dialog_editable_set (GtkWidget *widget, char *value)
-{
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GTK_IS_EDITABLE (widget));
-
-	gtk_editable_delete_text (GTK_EDITABLE (widget), 0, -1);
-
-	if (value) {
-		gint pos;
-
-		pos = 0;
-		gtk_editable_insert_text (GTK_EDITABLE (widget), value, strlen (value), &pos);
-	}
-}
-
-/**
- * e_dialog_editable_get:
- * @widget: A #GtkEditable widget.
- * 
- * Queries the string value inside a #GtkEditable-derived widget.
- * 
- * Return value: String value.
- **/
-char *
-e_dialog_editable_get (GtkWidget *widget)
-{
-	g_return_val_if_fail (widget != NULL, NULL);
-	g_return_val_if_fail (GTK_IS_EDITABLE (widget), NULL);
-
-	return gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1);
-}
-
-/**
- * e_dialog_radio_set:
- * @widget: A #GtkRadioButton in a radio button group.
- * @value: Enumerated value.
- * @value_map: Map from enumeration values to array indices.
- * 
- * Sets the selected item in a radio group.  The specified @widget can be any of
- * the #GtkRadioButtons in the group.  Each radio button should correspond to an
- * enumeration value; the specified @value will be mapped to an integer from
- * zero to the number of items in the group minus 1 by using a mapping table
- * specified in @value_map.  The last element in this table should be -1.  Thus
- * a table to map three possible interpolation values to integers could be
- * specified as { NEAREST_NEIGHBOR, BILINEAR, HYPERBOLIC, -1 }.
- **/
-void
-e_dialog_radio_set (GtkWidget *widget, int value, const int *value_map)
-{
-	GSList *group;
-	int i;
-	GSList *l;
-
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GTK_IS_RADIO_BUTTON (widget));
-	g_return_if_fail (value_map != NULL);
-
-	group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
-
-	i = value_to_index (value_map, value);
-	if (i != -1) {
-		/* Groups are built by prepending items, so the list ends up in reverse
-		 * order; we need to flip the index around.
-		 */
-		i = g_slist_length (group) - i - 1;
-
-		l = g_slist_nth (group, i);
-		if (!l)
-			g_message ("e_dialog_radio_set(): could not find index %d in radio group!",
-				   i);
-
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l->data), TRUE);
-	} else
-		g_message ("e_dialog_radio_set(): could not find value %d in value map!",
-			   value);
-}
-
-/**
- * e_dialog_radio_get:
- * @widget: A #GtkRadioButton in a radio button group.
- * @value_map: Map from enumeration values to array indices.
- * 
- * Queries the selected item in a #GtkRadioButton group.  Please read the
- * description of e_dialog_radio_set() to see how @value_map maps enumeration
- * values to button indices.
- * 
- * Return value: Enumeration value which corresponds to the selected item in the
- * radio group.
- **/
-int
-e_dialog_radio_get (GtkWidget *widget, const int *value_map)
-{
-	GSList *group;
-	GSList *l;
-	int i;
-	int v;
-
-	g_return_val_if_fail (widget != NULL, -1);
-	g_return_val_if_fail (GTK_IS_RADIO_BUTTON (widget), -1);
-	g_return_val_if_fail (value_map != NULL, -1);
-
-	group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
-
-	for (i = 0, l = group; l; l = l->next, i++) {
-		widget = GTK_WIDGET (l->data);
-
-		if (GTK_TOGGLE_BUTTON (widget)->active)
-			break;
-	}
-
-	if (!l)
-		g_assert_not_reached ();
-
-	/* Groups are built by prepending items, so the list ends up in reverse
-	 * order; we need to flip the index around.
-	 */
-	i = g_slist_length (group) - i - 1;
-
-	v = index_to_value (value_map, i);
-	if (v == -1) {
-		g_message ("e_dialog_radio_get(): could not find index %d in value map!", i);
-		return -1;
-	}
-
-	return v;
-}
-
-/**
- * e_dialog_toggle_set:
- * @widget: A #GtkToggleButton.
- * @value: Toggle value.
- * 
- * Sets the value of a #GtkToggleButton-derived widget.  This should not be used
- * for radio buttons; it is more convenient to use use e_dialog_radio_set()
- * instead.
- **/
-void
-e_dialog_toggle_set (GtkWidget *widget, gboolean value)
-{
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));
-
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
-}
-
-/**
- * e_dialog_toggle_get:
- * @widget: A #GtkToggleButton.
- * 
- * Queries the value of a #GtkToggleButton-derived widget.  This should not be
- * used for radio buttons; it is more convenient to use e_dialog_radio_get()
- * instead.
- * 
- * Return value: Toggle value.
- **/
-gboolean
-e_dialog_toggle_get (GtkWidget *widget)
-{
-	g_return_val_if_fail (widget != NULL, FALSE);
-	g_return_val_if_fail (GTK_IS_TOGGLE_BUTTON (widget), FALSE);
-
-	return GTK_TOGGLE_BUTTON (widget)->active;
-}
-
-/**
- * e_dialog_spin_set:
- * @widget: A #GtkSpinButton.
- * @value: Numeric value.
- * 
- * Sets the value of a #GtkSpinButton widget.
- **/
-void
-e_dialog_spin_set (GtkWidget *widget, double value)
-{
-	GtkAdjustment *adj;
-
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GTK_IS_SPIN_BUTTON (widget));
-
-	adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget));
-
-	adj->value = value;
-	gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed");
-}
-
-/**
- * e_dialog_spin_get_double:
- * @widget: A #GtkSpinButton.
- * 
- * Queries the floating-point value of a #GtkSpinButton widget.
- * 
- * Return value: Numeric value.
- **/
-double
-e_dialog_spin_get_double (GtkWidget *widget)
-{
-	GtkAdjustment *adj;
-
-	g_return_val_if_fail (widget != NULL, 0.0);
-	g_return_val_if_fail (GTK_IS_SPIN_BUTTON (widget), 0.0);
-
-	adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget));
-	return adj->value;
-}
-
-/**
- * e_dialog_spin_get_int:
- * @widget: A #GtkSpinButton.
- * 
- * Queries the integer value of a #GtkSpinButton widget.
- * 
- * Return value: Numeric value.
- **/
-int
-e_dialog_spin_get_int (GtkWidget *widget)
-{
-	double value;
-
-	g_return_val_if_fail (widget != NULL, -1);
-	g_return_val_if_fail (GTK_IS_SPIN_BUTTON (widget), -1);
-
-	value = e_dialog_spin_get_double (widget);
-	return (int) floor (value);
-}
-
-/**
- * e_dialog_option_menu_set:
- * @widget: A #GtkOptionMenu.
- * @value: Enumerated value.
- * @value_map: Map from enumeration values to array indices.
- * 
- * Sets the selected item in a #GtkOptionMenu.  Please read the description of
- * e_dialog_radio_set() to see how @value_map maps enumeration values to item
- * indices.
- **/
-void
-e_dialog_option_menu_set (GtkWidget *widget, int value, const int *value_map)
-{
-	int i;
-
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GTK_IS_OPTION_MENU (widget));
-	g_return_if_fail (value_map != NULL);
-
-	i = value_to_index (value_map, value);
-
-	if (i != -1)
-		gtk_option_menu_set_history (GTK_OPTION_MENU (widget), i);
-	else
-		g_message ("e_dialog_option_menu_set(): could not find value %d in value map!",
-			   value);
-}
-
-/**
- * e_dialog_option_menu_get:
- * @widget: A #GtkOptionMenu.
- * @value_map: Map from enumeration values to array indices.
- * 
- * Queries the selected item in a #GtkOptionMenu.  Please read the description
- * of e_dialog_radio_set() to see how @value_map maps enumeration values to item
- * indices.
- * 
- * Return value: Enumeration value which corresponds to the selected item in the
- * option menu.
- **/
-int
-e_dialog_option_menu_get (GtkWidget *widget, const int *value_map)
-{
-	GtkMenu *menu;
-	GtkWidget *active;
-	GList *children;
-	GList *l;
-	int i;
-	int v;
-
-	g_return_val_if_fail (widget != NULL, -1);
-	g_return_val_if_fail (GTK_IS_OPTION_MENU (widget), -1);
-	g_return_val_if_fail (value_map != NULL, -1);
-
-	menu = GTK_MENU (gtk_option_menu_get_menu (GTK_OPTION_MENU (widget)));
-
-	active = gtk_menu_get_active (menu);
-	g_assert (active != NULL);
-
-	children = GTK_MENU_SHELL (menu)->children;
-
-	for (i = 0, l = children; l; l = l->next, i++) {
-		if (GTK_WIDGET (l->data) == active)
-			break;
-	}
-
-	if (!l)
-		g_assert_not_reached ();
-
-	v = index_to_value (value_map, i);
-	if (v == -1) {
-		g_message ("e_dialog_option_menu_get(): could not find index %d in value map!", i);
-		return -1;
-	}
-
-	return v;
-}
-
-/**
- * e_dialog_dateedit_set:
- * @widget: A #GnomeDateEdit widget.
- * @t: Date/time value.
- * 
- * Sets the value of a #GnomeDateEdit widget.
- **/
-void
-e_dialog_dateedit_set (GtkWidget *widget, time_t t)
-{
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GNOME_IS_DATE_EDIT (widget));
-
-	gnome_date_edit_set_time (GNOME_DATE_EDIT (widget), t);
-}
-
-/**
- * e_dialog_dateedit_get:
- * @widget: A #GnomeDateEdit widget.
- * 
- * Queries the value of a #GnomeDateEdit widget.
- * 
- * Return value: Date/time value.
- **/
-time_t
-e_dialog_dateedit_get (GtkWidget *widget)
-{
-	g_return_val_if_fail (widget != NULL, -1);
-	g_return_val_if_fail (GNOME_IS_DATE_EDIT (widget), -1);
-
-	return gnome_date_edit_get_date (GNOME_DATE_EDIT (widget));
-}
-
-/**
- * e_dialog_widget_hook_value:
- * @dialog: Dialog box in which the @widget lives in.
- * @widget: A widget that will control a variable.
- * @value_var: Pointer to the variable that the @widget will control.
- * @info: NULL for most widgets, or an integer value map array (see
- * e_dialog_radio_set() for details).
- * 
- * Hooks a widget from a dialog box to the variable it will modify.  Supported
- * widgets are:  #GtkEditable (char *), #GtkRadioButton (int/value_map pair; see
- * e_dialog_radio_set() for more information), #GtkTogglebutton (gboolean),
- * #GtkSpinButton (double), #GtkOptionMenu (int/value_map pair), and
- * #GnomeDateEdit (time_t).
- *
- * A pointer to the appropriate variable to modify should be passed in @value_var.
- * For values that take a value_map array as well, it should be passed in @info.
- *
- * The widgets within a dialog that are hooked with this function will set their
- * respective variables only when e_dialog_get_values() is called.  The typical
- * use is to call that function in the handler for the "OK" button of a dialog
- * box.
- *
- * In addition, if the specified @dialog is a #GnomePropertyBox, the widgets wil
- * automatically turn on the "Apply" button of the property box when they are
- * modified by the user.
- * 
- * Return value: TRUE if the type of the specified @widget is supported, FALSE
- * otherwise.
- **/
-gboolean
-e_dialog_widget_hook_value (GtkWidget *dialog, GtkWidget *widget,
-			    gpointer value_var, gpointer info)
-{
-	DialogHooks *hooks;
-	WidgetHook *wh;
-
-	g_return_val_if_fail (dialog != NULL, FALSE);
-	g_return_val_if_fail (widget != NULL, FALSE);
-	g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
-	g_return_val_if_fail (value_var != NULL, FALSE);
-
-	hooks = get_dialog_hooks (dialog);
-
-	/* First check if it is a "group" widget, like a radio button or an
-	 * option menu.  Then we check for normal ungrouped widgets.
-	 */
-
-	if (GTK_IS_RADIO_BUTTON (widget))
-		hook_radio (dialog, GTK_RADIO_BUTTON (widget), value_var, info);
-	else if (GTK_IS_OPTION_MENU (widget))
-		hook_option_menu (dialog, GTK_OPTION_MENU (widget), value_var, info);
-	else if (GTK_IS_TOGGLE_BUTTON (widget))
-		hook_toggle (dialog, GTK_TOGGLE_BUTTON (widget), value_var, info);
-	else if (GTK_IS_SPIN_BUTTON (widget))
-		hook_spin_button (dialog, GTK_SPIN_BUTTON (widget), value_var, info);
-	else if (GTK_IS_EDITABLE (widget))
-		hook_editable (dialog, GTK_EDITABLE (widget), value_var, info);
-	else
-		return FALSE;
-
-	wh = g_new (WidgetHook, 1);
-	wh->widget = widget;
-	wh->value_var = value_var;
-	wh->info = info;
-
-	hooks->whooks = g_slist_prepend (hooks->whooks, wh);
-
-	return TRUE;
-}
-
-/**
- * e_dialog_get_values:
- * @dialog: A dialog box whose widgets have been hooked to the appropriate
- * variables with e_dialog_widget_hook_value().
- * 
- * Makes every widget in a @dialog that was hooked with
- * e_dialog_widget_hook_value() apply its value to its corresponding variable.
- * The typical usage is to call this function in the handler for the "OK" button
- * of a dialog box.
- **/
-void
-e_dialog_get_values (GtkWidget *dialog)
-{
-	DialogHooks *hooks;
-	GSList *l;
-
-	g_return_if_fail (dialog != NULL);
-
-	hooks = get_dialog_hooks (dialog);
-
-	for (l = hooks->whooks; l; l = l->next) {
-		WidgetHook *wh;
-
-		wh = l->data;
-
-		if (GTK_IS_RADIO_BUTTON (wh->widget))
-			get_radio_value (GTK_RADIO_BUTTON (wh->widget), wh->value_var, wh->info);
-		else if (GTK_IS_OPTION_MENU (wh->widget))
-			get_option_menu_value (GTK_OPTION_MENU (wh->widget), wh->value_var, wh->info);
-		else if (GTK_IS_TOGGLE_BUTTON (wh->widget))
-			get_toggle_value (GTK_TOGGLE_BUTTON (wh->widget), wh->value_var, wh->info);
-		else if (GTK_IS_SPIN_BUTTON (wh->widget))
-			get_spin_button_value (GTK_SPIN_BUTTON (wh->widget), wh->value_var, wh->info);
-		else if (GTK_IS_EDITABLE (wh->widget))
-			get_editable_value (GTK_EDITABLE (wh->widget), wh->value_var, wh->info);
-		else
-			g_assert_not_reached ();
-	}
-}
-
-/**
- * e_dialog_xml_widget_hook_value:
- * @xml: Glade XML description of a dialog box.
- * @dialog: Dialog box in which the widget lives in.
- * @widget_name: Name of the widget in the Glade XML data.
- * @value_var: Pointer to the variable that the widget will control.
- * @info: NULL for most widgets, or an integer value map array (see
- * e_dialog_radio_set() for details).
- * 
- * Similar to e_dialog_widget_hook_value(), but uses the widget from a #GladeXML
- * data structure.
- * 
- * Return value: TRUE if the type of the specified widget is supported, FALSE
- * otherwise.
- **/
-gboolean
-e_dialog_xml_widget_hook_value (GladeXML *xml, GtkWidget *dialog, const char *widget_name,
-				gpointer value_var, gpointer info)
-{
-	GtkWidget *widget;
-
-	g_return_val_if_fail (xml != NULL, FALSE);
-	g_return_val_if_fail (GLADE_IS_XML (xml), FALSE);
-	g_return_val_if_fail (dialog != NULL, FALSE);
-	g_return_val_if_fail (widget_name != NULL, FALSE);
-	g_return_val_if_fail (value_var != NULL, FALSE);
-
-	widget = glade_xml_get_widget (xml, widget_name);
-	if (!widget) {
-		g_message ("e_dialog_xml_widget_hook_value(): could not find widget `%s' in "
-			   "Glade data!", widget_name);
-		return FALSE;
-	}
-
-	return e_dialog_widget_hook_value (dialog, widget, value_var, info);
-}
diff --git a/e-util/e-dialog-widgets.h b/e-util/e-dialog-widgets.h
deleted file mode 100644
index cbcdd1c8f1..0000000000
--- a/e-util/e-dialog-widgets.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Evolution internal utilities - Glade dialog widget utilities
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- * Author: Federico Mena-Quintero 
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef E_DIALOG_WIDGETS_H
-#define E_DIALOG_WIDGETS_H
-
-#include 
-#include 
-#include 
-
-
-
-void e_dialog_editable_set (GtkWidget *widget, char *value);
-char *e_dialog_editable_get (GtkWidget *widget);
-
-void e_dialog_radio_set (GtkWidget *widget, int value, const int *value_map);
-int e_dialog_radio_get (GtkWidget *widget, const int *value_map);
-
-void e_dialog_toggle_set (GtkWidget *widget, gboolean value);
-gboolean e_dialog_toggle_get (GtkWidget *widget);
-
-void e_dialog_spin_set (GtkWidget *widget, double value);
-double e_dialog_spin_get_double (GtkWidget *widget);
-int e_dialog_spin_get_int (GtkWidget *widget);
-
-void e_dialog_option_menu_set (GtkWidget *widget, int value, const int *value_map);
-int e_dialog_option_menu_get (GtkWidget *widget, const int *value_map);
-
-void e_dialog_dateedit_set (GtkWidget *widget, time_t t);
-time_t e_dialog_dateedit_get (GtkWidget *widget);
-
-gboolean e_dialog_widget_hook_value (GtkWidget *dialog, GtkWidget *widget,
-				     gpointer value_var, gpointer info);
-
-void e_dialog_get_values (GtkWidget *dialog);
-
-gboolean e_dialog_xml_widget_hook_value (GladeXML *xml, GtkWidget *dialog, const char *widget_name,
-					 gpointer value_var, gpointer info);
-
-
-
-#endif
diff --git a/e-util/e-font.c b/e-util/e-font.c
deleted file mode 100644
index a13f0b962c..0000000000
--- a/e-util/e-font.c
+++ /dev/null
@@ -1,128 +0,0 @@
-#define _E_FONT_C_
-
-/*
- * e-font
- *
- * Temporary wrappers around GdkFonts to get unicode displaying
- *
- * Author: Lauris Kaplinski 
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- */
-
-#include 
-#include "e-font.h"
-
-struct _EFont {
-	GdkFont font;
-};
-
-EFont *
-e_font_from_gdk_name (const gchar *name)
-{
-	GdkFont *font;
-
-	font = gdk_fontset_load (name);
-
-	return (EFont *) font;
-}
-
-EFont *
-e_font_from_gdk_font (GdkFont *font)
-{
-	gdk_font_ref (font);
-
-	return (EFont *) font;
-}
-
-void
-e_font_ref (EFont *font)
-{
-	gdk_font_ref (&font->font);
-}
-
-void
-e_font_unref (EFont *font)
-{
-	gdk_font_unref (&font->font);
-}
-
-gint
-e_font_ascent (EFont * font)
-{
-	return font->font.ascent;
-}
-
-gint
-e_font_descent (EFont * font)
-{
-	return font->font.descent;
-}
-
-void
-e_font_draw_utf8_text (GdkDrawable *drawable, EFont *font, EFontStyle style, GdkGC *gc, gint x, gint y, gchar *text, gint numbytes)
-{
-	guchar *iso;
-	gchar *p;
-	gint uni, len;
-
-	g_return_if_fail (drawable != NULL);
-	g_return_if_fail (font != NULL);
-	g_return_if_fail (gc != NULL);
-	g_return_if_fail (text != NULL);
-
-	if (numbytes < 1) return;
-
-	iso = alloca (numbytes);
-
-	for (len = 0, p = text; p != NULL && p < (text + numbytes); len++, p = unicode_next_utf8 (p)) {
-		unicode_get_utf8 (p, &uni);
-		if ((uni < ' ') || (uni > 255)) uni = ' ';
-		iso[len] = uni;
-	}
-
-	gdk_draw_text (drawable, &font->font, gc, x, y, iso, len);
-
-	if (style & E_FONT_BOLD)
-		gdk_draw_text (drawable, &font->font, gc, x + 1, y, iso, len);
-}
-
-gint
-e_font_utf8_text_width (EFont *font, EFontStyle style, char *text, int numbytes)
-{
-	guchar *iso;
-	gchar *p;
-	gint uni, len;
-
-	iso = alloca (numbytes);
-
-	for (len = 0, p = text; p != NULL && p < (text + numbytes); len++, p = unicode_next_utf8 (p)) {
-		unicode_get_utf8 (p, &uni);
-		if ((uni < ' ') || (uni > 255)) uni = ' ';
-		iso[len] = uni;
-	}
-
-	return gdk_text_width (&font->font, iso, len);
-}
-
-gint
-e_font_utf8_char_width (EFont *font, EFontStyle style, char *text)
-{
-	unicode_char_t uni;
-	guchar iso;
-
-	if (!unicode_get_utf8 (text, &uni)) return 0;
-
-	if ((uni < ' ') || (uni > 255)) uni = ' ';
-
-	iso = uni;
-
-	return gdk_text_width (&font->font, &iso, 1);
-}
-
-
-
-
-
-
diff --git a/e-util/e-font.h b/e-util/e-font.h
deleted file mode 100644
index 9616e9ef4b..0000000000
--- a/e-util/e-font.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef _E_FONT_H_
-#define _E_FONT_H_
-
-/*
- * e-font
- *
- * Temporary wrappers around GdkFonts to get unicode displaying
- *
- * Author: Lauris Kaplinski 
- *
- * Copyright (C) 2000 Helix Code, Inc.
- *
- */
-
-#include 
-#include 
-#include 
-
-BEGIN_GNOME_DECLS
-
-typedef struct _EFont EFont;
-
-/*
- * We use very primitive styling here, enough for marking read/unread lines
- */
-
-typedef enum {
-	E_FONT_PLAIN = 0,
-	E_FONT_BOLD = (1 << 0),
-	E_FONT_ITALIC = (1 << 4)
-} EFontStyle;
-
-EFont * e_font_from_gdk_name (const gchar *name);
-EFont * e_font_from_gdk_font (GdkFont *font);
-
-void e_font_ref (EFont *font);
-void e_font_unref (EFont *font);
-
-gint e_font_ascent (EFont * font);
-gint e_font_descent (EFont * font);
-
-#define e_font_height(f) (e_font_ascent (f) + e_font_descent (f))
-
-/*
- * NB! UTF-8 text widths are given in chars, not bytes
- */
-
-void e_font_draw_utf8_text (GdkDrawable *drawable,
-			    EFont *font, EFontStyle style,
-			    GdkGC *gc,
-			    gint x, gint y,
-			    gchar *text,
-			    gint numbytes);
-
-int e_font_utf8_text_width (EFont *font, EFontStyle style,
-			    char *text,
-			    int numbytes);
-
-int e_font_utf8_char_width (EFont *font, EFontStyle style,
-			    char *text);
-
-END_GNOME_DECLS
-
-#endif
diff --git a/e-util/e-gui-utils.c b/e-util/e-gui-utils.c
deleted file mode 100644
index 2e31eb101b..0000000000
--- a/e-util/e-gui-utils.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * GUI utility functions
- *
- * Author:
- *   Miguel de Icaza (miguel@helixcode.com)
- *
- * (C) 1999 Miguel de Icaza
- * (C) 2000 Helix Code, Inc.
- */
-#include 
-#include 
-#include 
-#include 
-#include 
-#include "e-gui-utils.h"
-#include 
-#include 
-
-void
-e_notice (GtkWindow *window, const char *type, const char *format, ...)
-{
-	GtkWidget *dialog;
-	va_list args;
-	char *str;
-
-	va_start (args, format);
-	str = g_strdup_vprintf (format, args);
-	dialog = gnome_message_box_new (str, type, GNOME_STOCK_BUTTON_OK, NULL);
-	va_end (args);
-	g_free (str);
-	
-	if (window)
-		gnome_dialog_set_parent (GNOME_DIALOG (dialog), window);
-
-	gnome_dialog_run (GNOME_DIALOG (dialog));
-}
-
-static void
-kill_popup_menu (GtkWidget *widget, GtkMenu *menu)
-{
-	g_return_if_fail (menu != NULL);
-	g_return_if_fail (GTK_IS_MENU (menu));
-
-	gtk_object_unref (GTK_OBJECT (menu));
-}
-
-void
-e_auto_kill_popup_menu_on_hide (GtkMenu *menu)
-{
-	g_return_if_fail (menu != NULL);
-	g_return_if_fail (GTK_IS_MENU (menu));
-
-	gtk_signal_connect (GTK_OBJECT (menu), "hide",
-			    GTK_SIGNAL_FUNC (kill_popup_menu), menu);
-}
-
-void
-e_popup_menu (GtkMenu *menu, GdkEventButton *event)
-{
-	g_return_if_fail (menu != NULL);
-	g_return_if_fail (GTK_IS_MENU (menu));
-
-	e_auto_kill_popup_menu_on_hide (menu);
-	gtk_menu_popup (menu, NULL, NULL, 0, NULL, event->button, event->time);
-}
-
-GtkWidget *e_create_image_widget(gchar *name,
-				 gchar *string1, gchar *string2,
-				 gint int1, gint int2)
-{
-	char *filename;
-	GdkPixbuf *pixbuf;
-	double width, height;
-	GtkWidget *canvas, *alignment;
-	if (string1) {
-		if (*string1 == '/')
-			filename = g_strdup(string1);
-		else
-			filename = g_concat_dir_and_file(EVOLUTION_IMAGES, string1);
-		pixbuf = gdk_pixbuf_new_from_file(filename);
-		width = gdk_pixbuf_get_width(pixbuf);
-		height = gdk_pixbuf_get_height(pixbuf);
-
-		canvas = gnome_canvas_new_aa();
-		GTK_OBJECT_UNSET_FLAGS(GTK_WIDGET(canvas), GTK_CAN_FOCUS);
-		gnome_canvas_item_new(gnome_canvas_root(GNOME_CANVAS(canvas)),
-				      gnome_canvas_pixbuf_get_type(),
-
-				      "pixbuf", pixbuf,
-				      NULL);
-
-		alignment = gtk_widget_new(gtk_alignment_get_type(),
-					   "child", canvas,
-					   "xalign", (double) 0,
-					   "yalign", (double) 0,
-					   "xscale", (double) 0,
-					   "yscale", (double) 0,
-					   NULL);
-	
-		gtk_widget_set_usize(canvas, width, height);
-
-		gdk_pixbuf_unref(pixbuf);
-
-		gtk_widget_show(canvas);
-		gtk_widget_show(alignment);
-		g_free(filename);
-
-		return alignment;
-	} else
-		return NULL;
-}
-
-typedef struct {
-	GtkCallback callback;
-	gpointer closure;
-} CallbackClosure;
-
-static void
-e_container_foreach_leaf_callback(GtkWidget *widget, CallbackClosure *callback_closure)
-{
-	if (GTK_IS_CONTAINER(widget)) {
-		e_container_foreach_leaf(GTK_CONTAINER(widget), callback_closure->callback, callback_closure->closure);
-	} else {
-		(*callback_closure->callback) (widget, callback_closure->closure);
-	}
-}
-
-void
-e_container_foreach_leaf(GtkContainer *container,
-			 GtkCallback callback,
-			 gpointer closure)
-{
-	CallbackClosure callback_closure;
-	callback_closure.callback = callback;
-	callback_closure.closure = closure;
-	gtk_container_foreach(container, (GtkCallback) e_container_foreach_leaf_callback, &callback_closure);
-}
-
-static void
-e_container_change_tab_order_destroy_notify(gpointer data)
-{
-	GList *list = data;
-	g_list_foreach(list, (GFunc) gtk_object_unref, NULL);
-	g_list_free(list);
-}
-
-
-static gint
-e_container_change_tab_order_callback(GtkContainer *container,
-				      GtkDirectionType direction,
-				      GList *children)
-{
-	GtkWidget *focus_child;
-	GtkWidget *child;
-
-	if (direction != GTK_DIR_TAB_FORWARD &&
-	    direction != GTK_DIR_TAB_BACKWARD)
-		return FALSE;
-
-	focus_child = container->focus_child;
-
-	if (direction == GTK_DIR_TAB_BACKWARD) {
-		children = g_list_last(children);
-	}
-
-	while (children) {
-		child = children->data;
-		if (direction == GTK_DIR_TAB_FORWARD)
-			children = children->next;
-		else
-			children = children->prev;
-
-		if (!child)
-			continue;
-
-		if (focus_child) {
-			if (focus_child == child) {
-				focus_child = NULL;
-
-				if (GTK_WIDGET_DRAWABLE (child) &&
-				    GTK_IS_CONTAINER (child) &&
-				    !GTK_WIDGET_HAS_FOCUS (child))
-					if (gtk_container_focus (GTK_CONTAINER (child), direction)) {
-						gtk_signal_emit_stop_by_name(GTK_OBJECT(container), "focus");
-						return TRUE;
-					}
-			}
-		}
-		else if (GTK_WIDGET_DRAWABLE (child)) {
-			if (GTK_IS_CONTAINER (child)) {
-				if (gtk_container_focus (GTK_CONTAINER (child), direction)) {
-					gtk_signal_emit_stop_by_name(GTK_OBJECT(container), "focus");
-					return TRUE;
-				}
-			}
-			else if (GTK_WIDGET_CAN_FOCUS (child)) {
-				gtk_widget_grab_focus (child);
-				gtk_signal_emit_stop_by_name(GTK_OBJECT(container), "focus");
-				return TRUE;
-			}
-		}
-	}
-
-	return FALSE;
-}
-
-gint
-e_container_change_tab_order(GtkContainer *container, GList *widgets)
-{
-	GList *list;
-	list = g_list_copy(widgets);
-	g_list_foreach(list, (GFunc) gtk_object_ref, NULL);
-	return gtk_signal_connect_full(GTK_OBJECT(container), "focus",
-				       GTK_SIGNAL_FUNC(e_container_change_tab_order_callback),
-				       NULL, list,
-				       e_container_change_tab_order_destroy_notify,
-				       FALSE, FALSE);
-}
diff --git a/e-util/e-gui-utils.h b/e-util/e-gui-utils.h
deleted file mode 100644
index 1d47a7b514..0000000000
--- a/e-util/e-gui-utils.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef E_GUI_UTILS_H
-#define E_GUI_UTILS_H
-
-#include 
-#include 
-
-#include 
-
-void  e_popup_menu                   (GtkMenu *menu, GdkEventButton *event);
-void  e_auto_kill_popup_menu_on_hide (GtkMenu *menu);
-void  e_notice                       (GtkWindow *window, const char *type, const char *format, ...);
-GtkWidget *e_create_image_widget     (gchar *name, gchar *string1, gchar *string2, gint int1, gint int2);
-void e_container_foreach_leaf        (GtkContainer *container,
-				      GtkCallback   callback,
-				      gpointer      closure);
-gint e_container_change_tab_order    (GtkContainer *container,
-				      GList        *widgets);
-
-#endif /* E_GUI_UTILS_H */
diff --git a/e-util/e-html-utils.c b/e-util/e-html-utils.c
deleted file mode 100644
index 91cb00aa4b..0000000000
--- a/e-util/e-html-utils.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* e-html-utils.c
- * Copyright (C) 2000  Helix Code, Inc.
- * Author: Dan Winship 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "e-html-utils.h"
-#include 
-#include 
-#include 
-#include 
-
-static int etth_interesting[] = {
-	4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0x00 - 0x0f */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0x10 - 0x1f */
-	1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2,	/*   sp - /    */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 2, 1, 2,	/*    0 - ?    */
-	2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*    @ - O    */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,	/*    P - _    */
-	2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/*    ` - o    */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,	/*    p - del  */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0x80 - 0x8f */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0x90 - 0x9f */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0xa0 - 0xaf */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0xb0 - 0xbf */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0xc0 - 0xcf */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0xd0 - 0xdf */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,	/* 0xe0 - 0xef */
-	3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3	/* 0xf0 - 0xff */
-};
-#define ETTH_SPECIAL     1
-#define ETTH_PUNCTUATION 2
-#define ETTH_ESCAPED     3
-#define ETTH_EOF         4
-
-static char *
-check_size (char **buffer, int *buffer_size, char *out, int len)
-{
-	if (out + len > *buffer + *buffer_size) {
-		int index = out - *buffer;
-
-		*buffer_size *= 2;
-		*buffer = g_realloc (*buffer, *buffer_size);
-		out = *buffer + index;
-	}
-	return out;
-}
-
-static char *
-url_extract (const unsigned char **text, gboolean check)
-{
-	const unsigned char *end = *text, *p;
-	char *out;
-
-	while (*end && !isspace (*end) && *end != '"')
-		end++;
-
-	/* Back up if we probably went too far. */
-	while (end > *text && strchr (",.!?;:>)", *(end - 1)))
-		end--;
-
-	if (check) {
-		/* Make sure we weren't fooled. */
-		p = memchr (*text, ':', end - *text);
-		if (!p || end - p < 3)
-			return NULL;
-	}
-
-	out = g_strndup (*text, end - *text);
-	*text = end;
-	return out;
-}
-
-/**
- * e_text_to_html:
- * @input: a NUL-terminated input buffer
- * @flags: some combination of the E_TEXT_TO_HTML_* flags defined
- * in e-html-utils.h
- *
- * This takes a buffer of text as input and produces a buffer of
- * "equivalent" HTML, subject to certain transformation rules.
- *
- * The set of possible flags is:
- *
- *   - E_TEXT_TO_HTML_PRE: wrap the output HTML in 
 and 
. - * Should only be used if @input is the entire buffer to be - * converted. If e_text_to_html is being called with small pieces - * of data, you should wrap the entire result in
 yourself.
- *
- *   - E_TEXT_TO_HTML_CONVERT_NL: convert "\n" to "
\n" on output. - * (should not be used with E_TEXT_TO_HTML_PRE, since that would - * result in double-newlines). - * - * - E_TEXT_TO_HTML_CONVERT_SPACES: convert a block of N spaces - * into N-1 non-breaking spaces and one normal space. A space - * at the start of the buffer is always converted to a - * non-breaking space, regardless of the following character, - * which probably means you don't want to use this flag on - * pieces of data that aren't delimited by at least line breaks. - * - * If E_TEXT_TO_HTML_CONVERT_NL and E_TEXT_TO_HTML_CONVERT_SPACES - * are both defined, then TABs will also be converted to spaces. - * - * - E_TEXT_TO_HTML_CONVERT_URLS: wrap around - * strings that look like URLs. - **/ -char * -e_text_to_html (const char *input, unsigned int flags) -{ - const unsigned char *cur = input, *end; - char *buffer = NULL; - char *out = NULL; - int buffer_size = 0, col; - - /* Allocate a translation buffer. */ - buffer_size = strlen (input) * 2 + 5; - buffer = g_malloc (buffer_size); - - out = buffer; - if (flags & E_TEXT_TO_HTML_PRE) - out += sprintf (out, "
\n");
-
-	col = 0;
-	while (*cur) {
-		if (isalpha (*cur) && (flags & E_TEXT_TO_HTML_CONVERT_URLS)) {
-			char *tmpurl = NULL, *refurl = NULL, *dispurl = NULL;
-
-			if (!strncasecmp (cur, "http://", 7) ||
-			    !strncasecmp (cur, "https://", 8) ||
-			    !strncasecmp (cur, "ftp://", 6) ||
-			    !strncasecmp (cur, "nntp://", 7) ||
-			    !strncasecmp (cur, "mailto:", 7) ||
-			    !strncasecmp (cur, "news:", 5)) {
-				tmpurl = url_extract (&cur, TRUE);
-				if (tmpurl) {
-					refurl = e_text_to_html (tmpurl, 0);
-					dispurl = g_strdup (refurl);
-				}
-			} else if (!strncasecmp (cur, "www.", 4) &&
-				   isalnum (*(cur + 4))) {
-				tmpurl = url_extract (&cur, FALSE);
-				dispurl = e_text_to_html (tmpurl, 0);
-				refurl = g_strdup_printf ("http://%s",
-							  dispurl);
-			}
-
-			if (tmpurl) {
-				out = check_size (&buffer, &buffer_size, out,
-						  strlen (refurl) +
-						  strlen (dispurl) + 15);
-				out += sprintf (out,
-						"%s",
-						refurl, dispurl);
-				col += strlen (tmpurl);
-				g_free (tmpurl);
-				g_free (refurl);
-				g_free (dispurl);
-			}
-		}
-
-		/* Skip until we need to care. */
-		end = cur;
-		while (!etth_interesting[*end] ||
-			(etth_interesting[*end] == ETTH_PUNCTUATION &&
-			 !(flags & E_TEXT_TO_HTML_CONVERT_URLS)))
-			end++;
-
-		out = check_size (&buffer, &buffer_size, out,
-				  end - cur + 10);
-		memcpy (out, cur, end - cur);
-		out += end - cur;
-		col += end - cur;
-
-		if (!*end)
-			break;
-		cur = end;
-
-		switch (*cur) {
-		case '<':
-			strcpy (out, "<");
-			out += 4;
-			col++;
-			break;
-
-		case '>':
-			strcpy (out, ">");
-			out += 4;
-			col++;
-			break;
-
-		case '&':
-			strcpy (out, "&");
-			out += 5;
-			col++;
-			break;
-
-		case '"':
-			strcpy (out, """);
-			out += 6;
-			col++;
-			break;
-
-		case '\n':
-			if (flags & E_TEXT_TO_HTML_CONVERT_NL) {
-				strcpy (out, "
"); - out += 4; - } - *out++ = *cur; - col = 0; - break; - - case '\t': - if (flags & (E_TEXT_TO_HTML_CONVERT_SPACES | - E_TEXT_TO_HTML_CONVERT_NL)) { - do { - out = check_size (&buffer, &buffer_size, - out, 6); - strcpy (out, " "); - out += 6; - col++; - } while (col % 8); - break; - } - /* otherwise, FALL THROUGH */ - - case ' ': - if (flags & E_TEXT_TO_HTML_CONVERT_SPACES) { - if (cur == (const unsigned char *)input || - *(cur + 1) == ' ' || *(cur + 1) == '\t') { - strcpy (out, " "); - out += 6; - col++; - break; - } - } - /* otherwise, FALL THROUGH */ - - default: - if ((*cur >= 0x20 && *cur < 0x80) || - (*cur == '\r' || *cur == '\t')) { - /* Default case, just copy. */ - *out++ = *cur; - } else - out += g_snprintf(out, 9, "&#%d;", *cur); - col++; - break; - } - - cur++; - } - - out = check_size (&buffer, &buffer_size, out, 7); - if (flags & E_TEXT_TO_HTML_PRE) - strcpy (out, "
"); - else - *out = '\0'; - - return buffer; -} diff --git a/e-util/e-html-utils.h b/e-util/e-html-utils.h deleted file mode 100644 index a56889f4d9..0000000000 --- a/e-util/e-html-utils.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-html-utils.c */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * Author: Dan Winship - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __E_HTML_UTILS__ -#define __E_HTML_UTILS__ - -#define E_TEXT_TO_HTML_PRE (1 << 0) -#define E_TEXT_TO_HTML_CONVERT_NL (1 << 1) -#define E_TEXT_TO_HTML_CONVERT_SPACES (1 << 2) -#define E_TEXT_TO_HTML_CONVERT_URLS (1 << 3) - -char *e_text_to_html (const char *input, unsigned int flags); - -#endif /* __E_HTML_UTILS__ */ diff --git a/e-util/e-iterator.c b/e-util/e-iterator.c deleted file mode 100644 index 874d05ccea..0000000000 --- a/e-util/e-iterator.c +++ /dev/null @@ -1,186 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Christopher James Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - * Copyright (C) 1999 The Free Software Foundation - */ - -#include -#include - -#include "e-iterator.h" - -#define ECI_CLASS(object) (E_ITERATOR_CLASS(GTK_OBJECT((object))->klass)) - -static void e_iterator_init (EIterator *card); -static void e_iterator_class_init (EIteratorClass *klass); - -#define PARENT_TYPE (gtk_object_get_type ()) - -static GtkObjectClass *parent_class; - -enum { - INVALIDATE, - LAST_SIGNAL -}; - -static guint e_iterator_signals [LAST_SIGNAL] = { 0, }; - -/** - * e_iterator_get_type: - * @void: - * - * Registers the &EIterator class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &EIterator class. - **/ -GtkType -e_iterator_get_type (void) -{ - static GtkType type = 0; - - if (!type) { - GtkTypeInfo info = { - "EIterator", - sizeof (EIterator), - sizeof (EIteratorClass), - (GtkClassInitFunc) e_iterator_class_init, - (GtkObjectInitFunc) e_iterator_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - type = gtk_type_unique (PARENT_TYPE, &info); - } - - return type; -} - -static void -e_iterator_class_init (EIteratorClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS(klass); - - parent_class = gtk_type_class (PARENT_TYPE); - - e_iterator_signals [INVALIDATE] = - gtk_signal_new ("invalidate", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EIteratorClass, invalidate), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, e_iterator_signals, LAST_SIGNAL); - - klass->invalidate = NULL; - klass->get = NULL; - klass->reset = NULL; - klass->last = NULL; - klass->next = NULL; - klass->prev = NULL; - klass->delete = NULL; - klass->insert = NULL; - klass->set = NULL; - klass->is_valid = NULL; -} - -/** - * e_iterator_init: - */ -static void -e_iterator_init (EIterator *card) -{ -} - -/* - * Virtual functions: - */ -const void * -e_iterator_get (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->get) - return ECI_CLASS(iterator)->get(iterator); - else - return NULL; -} - -void -e_iterator_reset (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->reset) - ECI_CLASS(iterator)->reset(iterator); -} - -void -e_iterator_last (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->last) - ECI_CLASS(iterator)->last(iterator); -} - -gboolean -e_iterator_next (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->next) - return ECI_CLASS(iterator)->next(iterator); - else - return FALSE; -} - -gboolean -e_iterator_prev (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->prev) - return ECI_CLASS(iterator)->prev(iterator); - else - return FALSE; -} - -void -e_iterator_delete (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->delete) - ECI_CLASS(iterator)->delete(iterator); -} - -void e_iterator_insert (EIterator *iterator, - const void *object, - gboolean before) -{ - if (ECI_CLASS(iterator)->insert) - ECI_CLASS(iterator)->insert(iterator, object, before); -} - -void -e_iterator_set (EIterator *iterator, - const void *object) -{ - if (ECI_CLASS(iterator)->set) - ECI_CLASS(iterator)->set(iterator, object); -} - -gboolean -e_iterator_is_valid (EIterator *iterator) -{ - if (ECI_CLASS(iterator)->is_valid) - return ECI_CLASS(iterator)->is_valid(iterator); - else - return FALSE; -} - -void -e_iterator_invalidate (EIterator *iterator) -{ - g_return_if_fail (iterator != NULL); - g_return_if_fail (E_IS_ITERATOR (iterator)); - - gtk_signal_emit (GTK_OBJECT (iterator), - e_iterator_signals [INVALIDATE]); -} diff --git a/e-util/e-iterator.h b/e-util/e-iterator.h deleted file mode 100644 index 84a2db142b..0000000000 --- a/e-util/e-iterator.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - * Copyright (C) 1999 The Free Software Foundation - */ - -#ifndef __E_ITERATOR_H__ -#define __E_ITERATOR_H__ - -#include -#include -#include - -#define E_TYPE_ITERATOR (e_iterator_get_type ()) -#define E_ITERATOR(obj) (GTK_CHECK_CAST ((obj), E_TYPE_ITERATOR, EIterator)) -#define E_ITERATOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_ITERATOR, EIteratorClass)) -#define E_IS_ITERATOR(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_ITERATOR)) -#define E_IS_ITERATOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_ITERATOR)) - -typedef struct _EIterator EIterator; -typedef struct _EIteratorClass EIteratorClass; - -struct _EIterator { - GtkObject object; -}; - -struct _EIteratorClass { - GtkObjectClass parent_class; - - /* Signals */ - void (*invalidate) (EIterator *iterator); - - /* Virtual functions */ - const void * (*get) (EIterator *iterator); - void (*reset) (EIterator *iterator); - void (*last) (EIterator *iterator); - gboolean (*next) (EIterator *iterator); - gboolean (*prev) (EIterator *iterator); - void (*delete) (EIterator *iterator); - void (*insert) (EIterator *iterator, - const void *object, - gboolean before); - void (*set) (EIterator *iterator, - const void *object); - gboolean (*is_valid) (EIterator *iterator); -}; - -const void *e_iterator_get (EIterator *iterator); -void e_iterator_reset (EIterator *iterator); -void e_iterator_last (EIterator *iterator); -gboolean e_iterator_next (EIterator *iterator); -gboolean e_iterator_prev (EIterator *iterator); -void e_iterator_delete (EIterator *iterator); -void e_iterator_insert (EIterator *iterator, - const void *object, - gboolean before); -void e_iterator_set (EIterator *iterator, - const void *object); -gboolean e_iterator_is_valid (EIterator *iterator); - -void e_iterator_invalidate (EIterator *iterator); - -/* Standard Gtk function */ -GtkType e_iterator_get_type (void); - -#endif /* ! __E_ITERATOR_H__ */ diff --git a/e-util/e-list-iterator.c b/e-util/e-list-iterator.c deleted file mode 100644 index 51480447b4..0000000000 --- a/e-util/e-list-iterator.c +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Christopher James Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - * Copyright (C) 1999 The Free Software Foundation - */ - -#include -#include - -#include "e-list-iterator.h" -#include "e-list.h" - -static void e_list_iterator_init (EListIterator *list); -static void e_list_iterator_class_init (EListIteratorClass *klass); - -static void e_list_iterator_invalidate (EIterator *iterator); -static gboolean e_list_iterator_is_valid (EIterator *iterator); -static void e_list_iterator_set (EIterator *iterator, - const void *object); -static void e_list_iterator_delete (EIterator *iterator); -static void e_list_iterator_insert (EIterator *iterator, - const void *object, - gboolean before); -static gboolean e_list_iterator_prev (EIterator *iterator); -static gboolean e_list_iterator_next (EIterator *iterator); -static void e_list_iterator_reset (EIterator *iterator); -static void e_list_iterator_last (EIterator *iterator); -static const void *e_list_iterator_get (EIterator *iterator); -static void e_list_iterator_destroy (GtkObject *object); - -#define PARENT_TYPE (e_iterator_get_type ()) - -static GtkObjectClass *parent_class; -#define PARENT_CLASS (E_LIST_ITERATOR_CLASS(parent_class)) - -/** - * e_list_iterator_get_type: - * @void: - * - * Registers the &EListIterator class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &EListIterator class. - **/ -GtkType -e_list_iterator_get_type (void) -{ - static GtkType type = 0; - - if (!type) { - GtkTypeInfo info = { - "EListIterator", - sizeof (EListIterator), - sizeof (EListIteratorClass), - (GtkClassInitFunc) e_list_iterator_class_init, - (GtkObjectInitFunc) e_list_iterator_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - type = gtk_type_unique (PARENT_TYPE, &info); - } - - return type; -} - -static void -e_list_iterator_class_init (EListIteratorClass *klass) -{ - GtkObjectClass *object_class; - EIteratorClass *iterator_class; - - object_class = GTK_OBJECT_CLASS(klass); - iterator_class = E_ITERATOR_CLASS(klass); - - parent_class = gtk_type_class (PARENT_TYPE); - - object_class->destroy = e_list_iterator_destroy; - - iterator_class->invalidate = e_list_iterator_invalidate; - iterator_class->get = e_list_iterator_get; - iterator_class->reset = e_list_iterator_reset; - iterator_class->last = e_list_iterator_last; - iterator_class->next = e_list_iterator_next; - iterator_class->prev = e_list_iterator_prev; - iterator_class->delete = e_list_iterator_delete; - iterator_class->insert = e_list_iterator_insert; - iterator_class->set = e_list_iterator_set; - iterator_class->is_valid = e_list_iterator_is_valid; -} - - - -/** - * e_list_iterator_init: - */ -static void -e_list_iterator_init (EListIterator *list) -{ -} - -EIterator * -e_list_iterator_new (EList *list) -{ - EListIterator *iterator = gtk_type_new(e_list_iterator_get_type()); - - iterator->list = list; - gtk_object_ref(GTK_OBJECT(list)); - iterator->iterator = list->list; - - return E_ITERATOR(iterator); -} - -/* - * Virtual functions: - */ -static void -e_list_iterator_destroy (GtkObject *object) -{ - EListIterator *iterator = E_LIST_ITERATOR(object); - e_list_remove_iterator(iterator->list, E_ITERATOR(iterator)); - gtk_object_unref(GTK_OBJECT(iterator->list)); -} - -static const void * -e_list_iterator_get (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - if (iterator->iterator) - return iterator->iterator->data; - else - return NULL; -} - -static void -e_list_iterator_reset (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - iterator->iterator = iterator->list->list; -} - -static void -e_list_iterator_last (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - iterator->iterator = g_list_last(iterator->list->list); -} - -static gboolean -e_list_iterator_next (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - if (iterator->iterator) - iterator->iterator = g_list_next(iterator->iterator); - return (iterator->iterator != NULL); -} - -static gboolean -e_list_iterator_prev (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - if (iterator->iterator) - iterator->iterator = g_list_previous(iterator->iterator); - return (iterator->iterator != NULL); -} - -static void -e_list_iterator_insert (EIterator *_iterator, - const void *object, - gboolean before) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - void *data; - if (iterator->list->copy) - data = iterator->list->copy(object, iterator->list->closure); - else - data = (void *) object; - if (iterator->iterator) { - if (before) { - iterator->list->list = g_list_first(g_list_prepend(iterator->iterator, data)); - iterator->iterator = iterator->iterator->prev; - } else { - if (iterator->iterator->next) - g_list_prepend(iterator->iterator->next, data); - else - g_list_append(iterator->iterator, data); - iterator->iterator = iterator->iterator->next; - } - e_list_invalidate_iterators(iterator->list, E_ITERATOR(iterator)); - } else { - if (before) { - iterator->list->list = g_list_append(iterator->list->list, data); - iterator->iterator = g_list_last(iterator->list->list); - } else { - iterator->list->list = g_list_prepend(iterator->list->list, data); - iterator->iterator = iterator->list->list; - } - e_list_invalidate_iterators(iterator->list, E_ITERATOR(iterator)); - } -} - -static void -e_list_iterator_delete (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - if (iterator->iterator) { - GList *temp = iterator->iterator->next; - if (iterator->list->free) - iterator->list->free(iterator->iterator->data, iterator->list->closure); - iterator->list->list = g_list_remove_link(iterator->list->list, iterator->iterator); - iterator->iterator = temp; - e_list_invalidate_iterators(iterator->list, E_ITERATOR(iterator)); - } -} - -static void -e_list_iterator_set (EIterator *_iterator, - const void *object) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - if (iterator->iterator) { - if (iterator->list->free) - iterator->list->free(iterator->iterator->data, iterator->list->closure); - if (iterator->list->copy) - iterator->iterator->data = iterator->list->copy(object, iterator->list->closure); - else - iterator->iterator->data = (void *) object; - } -} - -static gboolean -e_list_iterator_is_valid (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - return iterator->iterator != NULL; -} - -static void -e_list_iterator_invalidate (EIterator *_iterator) -{ - EListIterator *iterator = E_LIST_ITERATOR(_iterator); - iterator->iterator = NULL; -} diff --git a/e-util/e-list-iterator.h b/e-util/e-list-iterator.h deleted file mode 100644 index a2b7d82988..0000000000 --- a/e-util/e-list-iterator.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - * Copyright (C) 1999 The Free Software Foundation - */ - -#ifndef __E_LIST_ITERATOR_H__ -#define __E_LIST_ITERATOR_H__ - -typedef struct _EListIterator EListIterator; -typedef struct _EListIteratorClass EListIteratorClass; - -#include -#include -#include -#include -#include - -#define E_TYPE_LIST_ITERATOR (e_list_iterator_get_type ()) -#define E_LIST_ITERATOR(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LIST_ITERATOR, EListIterator)) -#define E_LIST_ITERATOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LIST_ITERATOR, EListIteratorClass)) -#define E_IS_LIST_ITERATOR(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LIST_ITERATOR)) -#define E_IS_LIST_ITERATOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_LIST_ITERATOR)) - -struct _EListIterator { - EIterator parent; - - EList *list; - GList *iterator; -}; - -struct _EListIteratorClass { - EIteratorClass parent_class; -}; - -EIterator *e_list_iterator_new (EList *list); - -/* Standard Gtk function */ -GtkType e_list_iterator_get_type (void); - -#endif /* ! __E_LIST_ITERATOR_H__ */ diff --git a/e-util/e-list.c b/e-util/e-list.c deleted file mode 100644 index 2a6f842888..0000000000 --- a/e-util/e-list.c +++ /dev/null @@ -1,158 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Christopher James Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - * Copyright (C) 1999 The Free Software Foundation - */ - -#include -#include - -#include "e-list.h" -#include "e-list-iterator.h" - -#define ECL_CLASS(object) (E_LIST_CLASS(GTK_OBJECT((object))->klass)) - -static void e_list_init (EList *list); -static void e_list_class_init (EListClass *klass); -static void e_list_destroy (GtkObject *object); - -#define PARENT_TYPE (gtk_object_get_type ()) - -static GtkObjectClass *parent_class; - -/** - * e_list_get_type: - * @void: - * - * Registers the &EList class if necessary, and returns the type ID - * associated to it. - * - * Return value: The type ID of the &EList class. - **/ -GtkType -e_list_get_type (void) -{ - static GtkType type = 0; - - if (!type) { - GtkTypeInfo info = { - "EList", - sizeof (EList), - sizeof (EListClass), - (GtkClassInitFunc) e_list_class_init, - (GtkObjectInitFunc) e_list_init, - NULL, /* reserved_1 */ - NULL, /* reserved_2 */ - (GtkClassInitFunc) NULL - }; - - type = gtk_type_unique (PARENT_TYPE, &info); - } - - return type; -} - -static void -e_list_class_init (EListClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS(klass); - - parent_class = gtk_type_class (PARENT_TYPE); - - object_class->destroy = e_list_destroy; -} - -/** - * e_list_init: - */ -static void -e_list_init (EList *list) -{ - list->list = NULL; - list->iterators = NULL; -} - -EList * -e_list_new (EListCopyFunc copy, EListFreeFunc free, void *closure) -{ - EList *list = gtk_type_new(e_list_get_type()); - list->copy = copy; - list->free = free; - list->closure = closure; - return list; -} - -EList * -e_list_duplicate (EList *old) -{ - EList *list = gtk_type_new(e_list_get_type()); - - list->copy = old->copy; - list->free = old->free; - list->closure = old->closure; - list->list = g_list_copy(old->list); - if (list->copy) { - GList *listlist; - for (listlist = list->list; listlist; listlist = listlist->next) { - listlist->data = list->copy (listlist->data, list->closure); - } - } - return list; -} - -EIterator * -e_list_get_iterator (EList *list) -{ - EIterator *iterator = e_list_iterator_new(list); - list->iterators = g_list_append(list->iterators, iterator); - return iterator; -} - -int -e_list_length (EList *list) -{ - return g_list_length(list->list); -} - -void -e_list_append (EList *list, const void *data) -{ - e_list_invalidate_iterators(list, NULL); - if (list->copy) - list->list = g_list_append(list->list, list->copy(data, list->closure)); - else - list->list = g_list_append(list->list, (void *) data); -} - -void -e_list_invalidate_iterators (EList *list, EIterator *skip) -{ - GList *iterators = list->iterators; - for (; iterators; iterators = iterators->next) { - if (iterators->data != skip) { - e_iterator_invalidate(E_ITERATOR(iterators->data)); - } - } -} - -void -e_list_remove_iterator (EList *list, EIterator *iterator) -{ - list->iterators = g_list_remove(list->iterators, iterator); -} - -/* - * Virtual functions - */ -static void -e_list_destroy (GtkObject *object) -{ - EList *list = E_LIST(object); - g_list_foreach(list->list, (GFunc) list->free, list->closure); - g_list_free(list->list); -} diff --git a/e-util/e-list.h b/e-util/e-list.h deleted file mode 100644 index 7a0170970f..0000000000 --- a/e-util/e-list.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: - * Chris Lahey - * - * Copyright (C) 2000 Helix Code, Inc. - * Copyright (C) 1999 The Free Software Foundation - */ - -#ifndef __E_LIST_H__ -#define __E_LIST_H__ - -typedef struct _EList EList; -typedef struct _EListClass EListClass; - -#include -#include -#include -#include - -#define E_TYPE_LIST (e_list_get_type ()) -#define E_LIST(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LIST, EList)) -#define E_LIST_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LIST, EListClass)) -#define E_IS_LIST(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LIST)) -#define E_IS_LIST_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_LIST)) - -typedef void *(*EListCopyFunc) (const void *data, void *closure); -typedef void (*EListFreeFunc) (void *data, void *closure); - -struct _EList { - GtkObject object; - GList *list; - GList *iterators; - EListCopyFunc copy; - EListFreeFunc free; - void *closure; -}; - -struct _EListClass { - GtkObjectClass parent_class; -}; - -EList *e_list_new (EListCopyFunc copy, - EListFreeFunc free, - void *closure); -EList *e_list_duplicate (EList *list); -EIterator *e_list_get_iterator (EList *list); -void e_list_append (EList *list, - const void *data); -int e_list_length (EList *list); - -/* For iterators to call. */ -void e_list_invalidate_iterators (EList *list, - EIterator *skip); -void e_list_remove_iterator (EList *list, - EIterator *iterator); - -/* Standard Gtk function */ -GtkType e_list_get_type (void); - -#endif /* ! __E_LIST_H__ */ diff --git a/e-util/e-popup-menu.c b/e-util/e-popup-menu.c deleted file mode 100644 index 3fb382ae20..0000000000 --- a/e-util/e-popup-menu.c +++ /dev/null @@ -1,114 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-popup-menu.c: popup menu display -nnn * - * Author: - * Miguel de Icaza (miguel@kernel.org) - * Jody Goldberg (jgoldberg@home.com) - * - * (C) 2000 Helix Code, Inc. - */ -#include -#include -#include "e-popup-menu.h" -#include "e-gui-utils.h" - -/* - * Creates an item with an optional icon - */ -static GtkWidget * -make_item (GtkMenu *menu, const char *name, const char *pixname) -{ - GtkWidget *label, *item; - guint label_accel; - - if (*name == '\0') - return gtk_menu_item_new (); - - /* - * Ugh. This needs to go into Gtk+ - */ - label = gtk_accel_label_new (""); - label_accel = gtk_label_parse_uline (GTK_LABEL (label), name); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_widget_show (label); - - item = gtk_pixmap_menu_item_new (); - gtk_container_add (GTK_CONTAINER (item), label); - - if (label_accel != GDK_VoidSymbol){ - gtk_widget_add_accelerator ( - item, - "activate_item", - gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)), - label_accel, 0, - GTK_ACCEL_LOCKED); - } - - if (pixname){ - GtkWidget *pixmap = gnome_stock_pixmap_widget (item, pixname); - - gtk_widget_show (pixmap); - gtk_pixmap_menu_item_set_pixmap ( - GTK_PIXMAP_MENU_ITEM (item), pixmap); - } - - return item; -} - -GtkMenu * -e_popup_menu_create (EPopupMenu *menu_list, int disable_mask, int hide_mask, void *closure) -{ - GtkMenu *menu = GTK_MENU (gtk_menu_new ()); - int i; - gboolean last_item_seperator = TRUE; - gint last_non_seperator = -1; - - for (i = 0; menu_list[i].name; i++) { - if (strcmp("", menu_list[i].name) && !(menu_list [i].disable_mask & hide_mask)) { - last_non_seperator = i; - } - } - - for (i = 0; i <= last_non_seperator; i++) { - GtkWidget *item; - gboolean seperator; - - seperator = !strcmp("", menu_list[i].name); - - if ((!(seperator && last_item_seperator)) && !(menu_list [i].disable_mask & hide_mask)) { - - item = make_item (menu, menu_list [i].name, - menu_list [i].pixname); - - if (menu_list [i].fn) - gtk_signal_connect ( - GTK_OBJECT (item), "activate", - GTK_SIGNAL_FUNC (menu_list [i].fn), - closure); - - if (menu_list [i].disable_mask & disable_mask) - gtk_widget_set_sensitive (item, FALSE); - - gtk_widget_show (item); - gtk_menu_append (menu, item); - } - last_item_seperator = seperator; - } - - return menu; -} - -void -e_popup_menu_run (EPopupMenu *menu_list, GdkEventButton *event, int disable_mask, int hide_mask, void *closure) -{ - GtkMenu *menu; - - g_return_if_fail (menu_list != NULL); - g_return_if_fail (event != NULL); - - menu = e_popup_menu_create (menu_list, disable_mask, hide_mask, closure); - - e_popup_menu (menu, event); -} - diff --git a/e-util/e-popup-menu.h b/e-util/e-popup-menu.h deleted file mode 100644 index ed54a632a5..0000000000 --- a/e-util/e-popup-menu.h +++ /dev/null @@ -1,25 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef E_POPUP_MENU_H -#define E_POPUP_MENU_H - -#include - -typedef struct { - char const * const name; - char const * const pixname; - void (*fn)(GtkWidget *widget, void *closure); - int disable_mask; -} EPopupMenu; - -GtkMenu *e_popup_menu_create (EPopupMenu *menu_list, - int disable_mask, - int hide_mask, - void *closure); - -void e_popup_menu_run (EPopupMenu *menu_list, - GdkEventButton *event, - int disable_mask, - int hide_mask, - void *closure); - -#endif /* E_POPUP_MENU_H */ diff --git a/e-util/e-printable.c b/e-util/e-printable.c deleted file mode 100644 index ed982469b8..0000000000 --- a/e-util/e-printable.c +++ /dev/null @@ -1,207 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-printable.c: an object printer. - * - * Author: - * Christopher James Lahey - * - * (C) 2000 Helix Code, Inc. - */ -#include -#include -#include "e-util.h" -#include "e-printable.h" - -#define EP_CLASS(e) ((EPrintableClass *)((GtkObject *)e)->klass) - -#define PARENT_TYPE gtk_object_get_type () - - -static GtkObjectClass *e_printable_parent_class; - -enum { - PRINT_PAGE, - DATA_LEFT, - RESET, - HEIGHT, - WILL_FIT, - LAST_SIGNAL -}; - -static guint e_printable_signals [LAST_SIGNAL] = { 0, }; - -static void -e_printable_class_init (GtkObjectClass *object_class) -{ - EPrintableClass *klass = E_PRINTABLE_CLASS(object_class); - e_printable_parent_class = gtk_type_class (PARENT_TYPE); - - e_printable_signals [PRINT_PAGE] = - gtk_signal_new ("print_page", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EPrintableClass, print_page), - e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL, - GTK_TYPE_NONE, 4, GTK_TYPE_OBJECT, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE, GTK_TYPE_BOOL); - - e_printable_signals [DATA_LEFT] = - gtk_signal_new ("data_left", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EPrintableClass, data_left), - gtk_marshal_BOOL__NONE, - GTK_TYPE_BOOL, 0, GTK_TYPE_NONE); - - e_printable_signals [RESET] = - gtk_signal_new ("reset", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EPrintableClass, reset), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0, GTK_TYPE_NONE); - - e_printable_signals [HEIGHT] = - gtk_signal_new ("height", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EPrintableClass, height), - e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL, - GTK_TYPE_DOUBLE, 4, GTK_TYPE_OBJECT, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE, GTK_TYPE_BOOL); - - e_printable_signals [WILL_FIT] = - gtk_signal_new ("will_fit", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EPrintableClass, will_fit), - e_marshal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL, - GTK_TYPE_BOOL, 4, GTK_TYPE_OBJECT, GTK_TYPE_DOUBLE, GTK_TYPE_DOUBLE, GTK_TYPE_BOOL); - - gtk_object_class_add_signals (object_class, e_printable_signals, LAST_SIGNAL); - - klass->print_page = NULL; - klass->data_left = NULL; - klass->reset = NULL; - klass->height = NULL; - klass->will_fit = NULL; -} - - -guint -e_printable_get_type (void) -{ - static guint type = 0; - - if (!type) - { - GtkTypeInfo info = - { - "EPrintable", - sizeof (EPrintable), - sizeof (EPrintableClass), - (GtkClassInitFunc) e_printable_class_init, - NULL, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - type = gtk_type_unique (gtk_object_get_type (), &info); - } - - return type; -} - -EPrintable * -e_printable_new(void) -{ - return E_PRINTABLE(gtk_type_new(e_printable_get_type())); -} - -void -e_printable_print_page (EPrintable *e_printable, - GnomePrintContext *context, - gdouble width, - gdouble height, - gboolean quantized) -{ - g_return_if_fail (e_printable != NULL); - g_return_if_fail (E_IS_PRINTABLE (e_printable)); - - gtk_signal_emit (GTK_OBJECT (e_printable), - e_printable_signals [PRINT_PAGE], - context, - width, - height, - quantized); -} - -gboolean -e_printable_data_left (EPrintable *e_printable) -{ - gboolean ret_val; - - g_return_val_if_fail (e_printable != NULL, FALSE); - g_return_val_if_fail (E_IS_PRINTABLE (e_printable), FALSE); - - gtk_signal_emit (GTK_OBJECT (e_printable), - e_printable_signals [DATA_LEFT], - &ret_val); - - return ret_val; -} - -void -e_printable_reset (EPrintable *e_printable) -{ - g_return_if_fail (e_printable != NULL); - g_return_if_fail (E_IS_PRINTABLE (e_printable)); - - gtk_signal_emit (GTK_OBJECT (e_printable), - e_printable_signals [RESET]); -} - -gdouble -e_printable_height (EPrintable *e_printable, - GnomePrintContext *context, - gdouble width, - gdouble max_height, - gboolean quantized) -{ - gdouble ret_val; - - g_return_val_if_fail (e_printable != NULL, -1); - g_return_val_if_fail (E_IS_PRINTABLE (e_printable), -1); - - gtk_signal_emit (GTK_OBJECT (e_printable), - e_printable_signals [HEIGHT], - context, - width, - max_height, - quantized, - &ret_val); - - return ret_val; -} - -gboolean -e_printable_will_fit (EPrintable *e_printable, - GnomePrintContext *context, - gdouble width, - gdouble max_height, - gboolean quantized) -{ - gboolean ret_val; - - g_return_val_if_fail (e_printable != NULL, -1); - g_return_val_if_fail (E_IS_PRINTABLE (e_printable), -1); - - gtk_signal_emit (GTK_OBJECT (e_printable), - e_printable_signals [WILL_FIT], - context, - width, - max_height, - quantized, - &ret_val); - - return ret_val; -} diff --git a/e-util/e-printable.h b/e-util/e-printable.h deleted file mode 100644 index 18e6ec8472..0000000000 --- a/e-util/e-printable.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-printable.h: an object printer. - * - * Author: - * Christopher James Lahey - * - * (C) 2000 Helix Code, Inc. - */ -#ifndef _E_PRINTABLE_H_ -#define _E_PRINTABLE_H_ - -#include -#include - -#define E_PRINTABLE_TYPE (e_printable_get_type ()) -#define E_PRINTABLE(o) (GTK_CHECK_CAST ((o), E_PRINTABLE_TYPE, EPrintable)) -#define E_PRINTABLE_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_PRINTABLE_TYPE, EPrintableClass)) -#define E_IS_PRINTABLE(o) (GTK_CHECK_TYPE ((o), E_PRINTABLE_TYPE)) -#define E_IS_PRINTABLE_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_PRINTABLE_TYPE)) - -typedef struct { - GtkObject base; -} EPrintable; - -typedef struct { - GtkObjectClass parent_class; - - /* - * Signals - */ - - void (*print_page) (EPrintable *etm, GnomePrintContext *context, gdouble width, gdouble height, gboolean quantized); - gboolean (*data_left) (EPrintable *etm); - void (*reset) (EPrintable *etm); - gdouble (*height) (EPrintable *etm, GnomePrintContext *context, gdouble width, gdouble max_height, gboolean quantized); - - /* e_printable_will_fit (ep, ...) should be equal in value to - * (e_printable_print_page (ep, ...), - * !e_printable_data_left(ep)) except that the latter has the - * side effect of doing the printing and advancing the - * position of the printable. - */ - - gboolean (*will_fit) (EPrintable *etm, GnomePrintContext *context, gdouble width, gdouble max_height, gboolean quantized); -} EPrintableClass; - -GtkType e_printable_get_type (void); - -EPrintable *e_printable_new (void); - -/* - * Routines for emitting signals on the e_table */ -void e_printable_print_page (EPrintable *e_printable, - GnomePrintContext *context, - gdouble width, - gdouble height, - gboolean quantized); -gboolean e_printable_data_left (EPrintable *e_printable); -void e_printable_reset (EPrintable *e_printable); -gdouble e_printable_height (EPrintable *e_printable, - GnomePrintContext *context, - gdouble width, - gdouble max_height, - gboolean quantized); -gboolean e_printable_will_fit (EPrintable *e_printable, - GnomePrintContext *context, - gdouble width, - gdouble max_height, - gboolean quantized); - -#endif /* _E_PRINTABLE_H_ */ diff --git a/e-util/e-sexp.c b/e-util/e-sexp.c deleted file mode 100644 index cc0452b6b2..0000000000 --- a/e-util/e-sexp.c +++ /dev/null @@ -1,1163 +0,0 @@ -/* - * Copyright 2000 HelixCode (http://www.helixcode.com). - * - * A simple, extensible s-exp evaluation engine. - * - * Author : - * Michael Zucchi - - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -/* - The following built-in s-exp's are supported: - - list = (and list*) - perform an intersection of a number of lists, and return that. - - bool = (and bool*) - perform a boolean AND of boolean values. - - list = (or list*) - perform a union of a number of lists, returning the new list. - - bool = (or bool*) - perform a boolean OR of boolean values. - - int = (+ int*) - Add integers. - - string = (+ string*) - Concat strings. - - int = (- int int*) - Subtract integers from the first. - - Comparison operators: - - bool = (< int int) - bool = (> int int) - bool = (= int int) - - bool = (< string string) - bool = (> string string) - bool = (= string string) - Perform a comparision of 2 integers, or 2 string values. - - Function flow: - - type = (if bool function) - type = (if bool function function) - Choose a flow path based on a boolean value - - type = (begin func func func) - Execute a sequence. The last function return is the return type. -*/ - -#include -#include -#include -#include - -#include "e-sexp.h" - -#define p(x) /* parse debug */ -#define r(x) /* run debug */ -#define d(x) /* general debug */ - - -static struct _ESExpTerm * parse_list(ESExp *f, int gotbrace); -static struct _ESExpTerm * parse_value(ESExp *f); - -static void parse_dump_term(struct _ESExpTerm *t, int depth); - -static GtkObjectClass *parent_class; - - - -static GScannerConfig scanner_config = -{ - ( " \t\r\n") /* cset_skip_characters */, - ( G_CSET_a_2_z - "_+-<=>" - G_CSET_A_2_Z) /* cset_identifier_first */, - ( G_CSET_a_2_z - "_0123456789-<>" - G_CSET_A_2_Z - G_CSET_LATINS - G_CSET_LATINC ) /* cset_identifier_nth */, - ( ";\n" ) /* cpair_comment_single */, - - FALSE /* case_sensitive */, - - TRUE /* skip_comment_multi */, - TRUE /* skip_comment_single */, - TRUE /* scan_comment_multi */, - TRUE /* scan_identifier */, - TRUE /* scan_identifier_1char */, - FALSE /* scan_identifier_NULL */, - TRUE /* scan_symbols */, - FALSE /* scan_binary */, - TRUE /* scan_octal */, - TRUE /* scan_float */, - TRUE /* scan_hex */, - FALSE /* scan_hex_dollar */, - TRUE /* scan_string_sq */, - TRUE /* scan_string_dq */, - TRUE /* numbers_2_int */, - FALSE /* int_2_float */, - FALSE /* identifier_2_string */, - TRUE /* char_2_token */, - FALSE /* symbol_2_token */, - FALSE /* scope_0_fallback */, -}; - -struct _ESExpResult * -e_sexp_result_new(int type) -{ - struct _ESExpResult *r = g_malloc0(sizeof(*r)); - r->type = type; - return r; -} - -void -e_sexp_result_free(struct _ESExpResult *t) -{ - if (t == NULL) - return; - - switch(t->type) { - case ESEXP_RES_ARRAY_PTR: - g_ptr_array_free(t->value.ptrarray, TRUE); - break; - case ESEXP_RES_BOOL: - case ESEXP_RES_INT: - break; - case ESEXP_RES_STRING: - g_free(t->value.string); - break; - case ESEXP_RES_UNDEFINED: - break; - } - g_free(t); -} - -/* implementations for the builtin functions */ - -/* can you tell, i dont like glib? */ -/* we can only itereate a hashtable from a called function */ -struct _glib_sux_donkeys { - int count; - GPtrArray *uids; -}; - -/* ok, store any values that are in all sets */ -static void -g_lib_sux_htand(char *key, int value, struct _glib_sux_donkeys *fuckup) -{ - if (value == fuckup->count) { - g_ptr_array_add(fuckup->uids, key); - } -} - -/* or, store all unique values */ -static void -g_lib_sux_htor(char *key, int value, struct _glib_sux_donkeys *fuckup) -{ - g_ptr_array_add(fuckup->uids, key); -} - -static ESExpResult * -term_eval_and(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r, *r1; - GHashTable *ht = g_hash_table_new(g_str_hash, g_str_equal); - struct _glib_sux_donkeys lambdafoo; - int type=-1; - int bool = TRUE; - int i; - - r(printf("( and\n")); - - r = e_sexp_result_new(ESEXP_RES_UNDEFINED); - - for (i=0;bool && itype; - if (type != r1->type) { - printf("invalid types in and operation, all types must be the same\n"); - } else if ( r1->type == ESEXP_RES_ARRAY_PTR ) { - char **a1; - int l1, j; - - a1 = (char **)r1->value.ptrarray->pdata; - l1 = r1->value.ptrarray->len; - for (j=0;jtype == ESEXP_RES_BOOL ) { - bool &= r1->value.bool; - } - e_sexp_result_free(r1); - } - - if (type == ESEXP_RES_ARRAY_PTR) { - lambdafoo.count = argc; - lambdafoo.uids = g_ptr_array_new(); - g_hash_table_foreach(ht, (GHFunc)g_lib_sux_htand, &lambdafoo); - r->type = ESEXP_RES_ARRAY_PTR; - r->value.ptrarray = lambdafoo.uids; - } else if (type == ESEXP_RES_BOOL) { - r->type = ESEXP_RES_BOOL; - r->value.bool = bool; - } - - g_hash_table_destroy(ht); - - return r; -} - -static ESExpResult * -term_eval_or(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r, *r1; - GHashTable *ht = g_hash_table_new(g_str_hash, g_str_equal); - struct _glib_sux_donkeys lambdafoo; - int type = -1; - int bool = FALSE; - int i; - - r(printf("(or \n")); - - r = e_sexp_result_new(ESEXP_RES_UNDEFINED); - - for (i=0;!bool && itype; - if (r1->type != type) { - printf("wrong types in or operation\n"); - } else if (r1->type == ESEXP_RES_ARRAY_PTR) { - char **a1; - int l1, j; - - a1 = (char **)r1->value.ptrarray->pdata; - l1 = r1->value.ptrarray->len; - for (j=0;jtype == ESEXP_RES_BOOL) { - bool |= r1->value.bool; - } - e_sexp_result_free(r1); - } - - if (type == ESEXP_RES_ARRAY_PTR) { - lambdafoo.count = argc; - lambdafoo.uids = g_ptr_array_new(); - g_hash_table_foreach(ht, (GHFunc)g_lib_sux_htor, &lambdafoo); - r->type = ESEXP_RES_ARRAY_PTR; - r->value.ptrarray = lambdafoo.uids; - } else if (type == ESEXP_RES_BOOL) { - r->type = ESEXP_RES_BOOL; - r->value.bool = bool; - } - g_hash_table_destroy(ht); - - return r; -} - -static ESExpResult * -term_eval_not(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data) -{ - int res = TRUE; - ESExpResult *r; - - if (argc>0) { - if (argv[0]->type == ESEXP_RES_BOOL - && argv[0]->value.bool) - res = FALSE; - } - r = e_sexp_result_new(ESEXP_RES_BOOL); - r->value.bool = res; - return r; -} - -/* this should support all arguments ...? */ -static ESExpResult * -term_eval_lt(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r, *r1, *r2; - - r = e_sexp_result_new(ESEXP_RES_UNDEFINED); - - if (argc == 2) { - r1 = e_sexp_term_eval(f, argv[0]); - r2 = e_sexp_term_eval(f, argv[1]); - if (r1->type != r2->type) { - printf("error, invalid types in compare\n"); - } else if (r1->type == ESEXP_RES_INT) { - r->type = ESEXP_RES_BOOL; - r->value.bool = r1->value.number < r2->value.number; - } else if (r1->type == ESEXP_RES_STRING) { - r->type = ESEXP_RES_BOOL; - r->value.bool = strcmp(r1->value.string, r2->value.string) < 0; - } - } - return r; -} - -/* this should support all arguments ...? */ -static ESExpResult * -term_eval_gt(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r, *r1, *r2; - - r = e_sexp_result_new(ESEXP_RES_UNDEFINED); - - if (argc == 2) { - r1 = e_sexp_term_eval(f, argv[0]); - r2 = e_sexp_term_eval(f, argv[1]); - if (r1->type != r2->type) { - printf("error, invalid types in compare\n"); - } else if (r1->type == ESEXP_RES_INT) { - r->type = ESEXP_RES_BOOL; - r->value.bool = r1->value.number > r2->value.number; - } else if (r1->type == ESEXP_RES_STRING) { - r->type = ESEXP_RES_BOOL; - r->value.bool = strcmp(r1->value.string, r2->value.string) > 0; - } - } - return r; -} - -/* this should support all arguments ...? */ -static ESExpResult * -term_eval_eq(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r, *r1, *r2; - - r = e_sexp_result_new(ESEXP_RES_BOOL); - - if (argc == 2) { - r1 = e_sexp_term_eval(f, argv[0]); - r2 = e_sexp_term_eval(f, argv[1]); - if (r1->type != r2->type) { - r->value.bool = FALSE; - } else if (r1->type == ESEXP_RES_INT) { - r->value.bool = r1->value.number == r2->value.number; - } else if (r1->type == ESEXP_RES_BOOL) { - r->value.bool = r1->value.bool == r2->value.bool; - } else if (r1->type == ESEXP_RES_STRING) { - r->value.bool = strcmp(r1->value.string, r2->value.string) == 0; - } - } - return r; -} - -static ESExpResult * -term_eval_plus(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data) -{ - struct _ESExpResult *r=NULL; - int type; - int i; - - if (argc>0) { - type = argv[0]->type; - switch(type) { - case ESEXP_RES_INT: { - int total = argv[0]->value.number; - for (i=1;itype == ESEXP_RES_INT;i++) { - total += argv[i]->value.number; - } - if (ivalue.number = total; - break; } - case ESEXP_RES_STRING: { - GString *s = g_string_new(argv[0]->value.string); - for (i=1;itype == ESEXP_RES_STRING;i++) { - g_string_append(s, argv[i]->value.string); - } - if (ivalue.string = s->str; - g_string_free(s, FALSE); - break; } - - } - } - - if (!r) { - r = e_sexp_result_new(ESEXP_RES_INT); - r->value.number = 0; - } - return r; -} - -static ESExpResult * -term_eval_sub(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data) -{ - struct _ESExpResult *r=NULL; - int type; - int i; - - if (argc>0) { - type = argv[0]->type; - switch(type) { - case ESEXP_RES_INT: { - int total = argv[0]->value.number; - for (i=1;itype == ESEXP_RES_INT;i++) { - total -= argv[i]->value.number; - } - if (ivalue.number = total; - break; } - } - } - - if (!r) { - r = e_sexp_result_new(ESEXP_RES_INT); - r->value.number = 0; - } - return r; -} - -/* implements 'if' function */ -static ESExpResult * -term_eval_if(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r; - int doit; - - if (argc >=2 && argc<=3) { - r = e_sexp_term_eval(f, argv[0]); - doit = (r->type == ESEXP_RES_BOOL && r->value.bool); - e_sexp_result_free(r); - if (doit) { - return e_sexp_term_eval(f, argv[1]); - } else if (argc>2) { - return e_sexp_term_eval(f, argv[2]); - } - } - return e_sexp_result_new(ESEXP_RES_UNDEFINED); -} - -/* implements 'begin' statement */ -static ESExpResult * -term_eval_begin(struct _ESExp *f, int argc, struct _ESExpTerm **argv, void *data) -{ - struct _ESExpResult *r=NULL; - int i; - - for (i=0;itype = ESEXP_RES_UNDEFINED; - - switch (t->type) { - case ESEXP_TERM_STRING: - r(printf(" (string \"%s\")\n", t->value.string)); - r->type = ESEXP_RES_STRING; - /* erk, this shoul;dn't need to strdup this ... */ - r->value.string = g_strdup(t->value.string); - break; - case ESEXP_TERM_INT: - r(printf(" (int %d)\n", t->value.number)); - r->type = ESEXP_RES_INT; - r->value.number = t->value.number; - break; - case ESEXP_TERM_BOOL: - r(printf(" (int %d)\n", t->value.number)); - r->type = ESEXP_RES_BOOL; - r->value.bool = t->value.bool; - break; - case ESEXP_TERM_IFUNC: { - if (t->value.func.sym->f.ifunc) { - r1 = t->value.func.sym->f.ifunc(f, t->value.func.termcount, t->value.func.terms, t->value.func.sym->data); - if (r1) { - e_sexp_result_free(r); - r = r1; - } - } - break; } - case ESEXP_TERM_FUNC: { - struct _ESExpResult **argv; - - /* first evaluate all arguments to result types */ - argv = alloca(sizeof(argv[0]) * t->value.func.termcount); - for (i=0;ivalue.func.termcount;i++) { - argv[i] = e_sexp_term_eval(f, t->value.func.terms[i]); - } - /* call the function */ - if (t->value.func.sym->f.func) { - r1 = t->value.func.sym->f.func(f, t->value.func.termcount, argv, t->value.func.sym->data); - if (r1) { - e_sexp_result_free(r); - r = r1; - } - } - for (i=0;ivalue.func.termcount;i++) { - e_sexp_result_free(argv[i]); - } - break; } - default: - printf("Warning: Unknown type encountered in parse tree: %d\n", t->type); - r->type = ESEXP_RES_UNDEFINED; - } - - return r; -} - -#if 0 -static void -eval_dump_result(ESExpResult *r, int depth) -{ - int i; - - if (r==NULL) { - printf("null result???\n"); - return; - } - - for (i=0;itype) { - case ESEXP_RES_ARRAY_PTR: - printf("array pointers\n"); - break; - case ESEXP_RES_INT: - printf("int: %d\n", r->value.number); - break; - case ESEXP_RES_STRING: - printf("string: '%s'\n", r->value.string); - break; - case ESEXP_RES_BOOL: - printf("bool: %c\n", r->value.bool?'t':'f'); - break; - case ESEXP_RES_UNDEFINED: - printf(" \n"); - break; - } - printf("\n"); -} -#endif - -static void -parse_dump_term(struct _ESExpTerm *t, int depth) -{ - int i; - - if (t==NULL) { - printf("null term??\n"); - return; - } - - for (i=0;itype) { - case ESEXP_TERM_STRING: - printf(" \"%s\"", t->value.string); - break; - case ESEXP_TERM_INT: - printf(" %d", t->value.number); - break; - case ESEXP_TERM_BOOL: - printf(" #%c", t->value.bool?'t':'f'); - break; - case ESEXP_TERM_IFUNC: - case ESEXP_TERM_FUNC: - printf(" (function %s\n", t->value.func.sym->name); - /*printf(" [%d] ", t->value.func.termcount);*/ - for (i=0;ivalue.func.termcount;i++) { - parse_dump_term(t->value.func.terms[i], depth+1); - } - for (i=0;ivalue.var->name); - break; - default: - printf("unknown type: %d\n", t->type); - } - - printf("\n"); -} - -/* - PARSER -*/ - -static struct _ESExpTerm * -parse_new_term(int type) -{ - struct _ESExpTerm *s = g_malloc0(sizeof(*s)); - s->type = type; - return s; -} - -static void -parse_term_free(struct _ESExpTerm *t) -{ - int i; - - if (t==NULL) { - return; - } - - switch (t->type) { - case ESEXP_TERM_FUNC: - case ESEXP_TERM_IFUNC: - for (i=0;ivalue.func.termcount;i++) { - parse_term_free(t->value.func.terms[i]); - } - g_free(t->value.func.terms); - break; - case ESEXP_TERM_VAR: - break; - case ESEXP_TERM_STRING: - g_free(t->value.string); - break; - case ESEXP_TERM_INT: - break; - default: - printf("parse_term_free: unknown type: %d\n", t->type); - } - g_free(t); -} - -static struct _ESExpTerm ** -parse_values(ESExp *f, int *len) -{ - int token; - struct _ESExpTerm **terms; - int i=0; - GScanner *gs = f->scanner; - - p(printf("parsing values\n")); - - /* FIXME: This hardcoded nonsense!!! :) */ - terms = g_malloc0(20*sizeof(*terms)); - - while ( (token = g_scanner_peek_next_token(gs)) != G_TOKEN_EOF - && token != ')') { - terms[i]=parse_value(f); - i++; - } - - p(printf("found %d subterms\n", i)); - *len = i; - - p(printf("dont parsing values\n")); - return terms; -} - -static struct _ESExpTerm * -parse_value(ESExp *f) -{ - int token; - struct _ESExpTerm *t = NULL; - GScanner *gs = f->scanner; - struct _ESExpSymbol *s; - - p(printf("parsing value\n")); - - token = g_scanner_get_next_token(gs); - switch(token) { - case G_TOKEN_LEFT_PAREN: - p(printf("got brace, its a list!\n")); - return parse_list(f, TRUE); - case G_TOKEN_STRING: - p(printf("got string\n")); - t = parse_new_term(ESEXP_TERM_STRING); - t->value.string = g_strdup(g_scanner_cur_value(gs).v_string); - break; - case G_TOKEN_INT: - t = parse_new_term(ESEXP_TERM_INT); - t->value.number = g_scanner_cur_value(gs).v_int; - p(printf("got int\n")); - break; - case '#': - printf("got bool?\n"); - token = g_scanner_get_next_token(gs); - t = parse_new_term(ESEXP_TERM_BOOL); - t->value.bool = token=='t'; - break; - case G_TOKEN_SYMBOL: - s = g_scanner_cur_value(gs).v_symbol; - switch (s->type) { - case ESEXP_TERM_FUNC: - case ESEXP_TERM_IFUNC: - /* this is basically invalid, since we can't use function - pointers, but let the runtime catch it ... */ - t = parse_new_term(s->type); - t->value.func.sym = s; - t->value.func.terms = parse_values(f, &t->value.func.termcount); - break; - case ESEXP_TERM_VAR: - t = parse_new_term(s->type); - t->value.var = s; - break; - default: - printf("Invalid symbol type: %d\n", s->type); - } - break; - case G_TOKEN_IDENTIFIER: - printf("Unknown identifier encountered: %s\n", g_scanner_cur_value(gs).v_identifier); - break; - default: - printf("Innvalid token trying to parse a list of values\n"); - } - p(printf("done parsing value\n")); - return t; -} - -/* FIXME: this needs some robustification */ -static struct _ESExpTerm * -parse_list(ESExp *f, int gotbrace) -{ - int token; - struct _ESExpTerm *t = NULL; - GScanner *gs = f->scanner; - - p(printf("parsing list\n")); - if (gotbrace) - token = '('; - else - token = g_scanner_get_next_token(gs); - if (token =='(') { - token = g_scanner_get_next_token(gs); - switch(token) { - case G_TOKEN_SYMBOL: { - struct _ESExpSymbol *s; - - s = g_scanner_cur_value(gs).v_symbol; - p(printf("got funciton: %s\n", s->name)); - t = parse_new_term(s->type); - p(printf("created new list %p\n", t)); - /* if we have a variable, find out its base type */ - while (s->type == ESEXP_TERM_VAR) { - s = ((ESExpTerm *)(s->data))->value.var; - } - if (s->type == ESEXP_TERM_FUNC - || s->type == ESEXP_TERM_IFUNC) { - t->value.func.sym = s; - t->value.func.terms = parse_values(f, &t->value.func.termcount); - } else { - printf("Error, trying to call variable as function\n"); - } - break; } - case G_TOKEN_IDENTIFIER: - printf("Unknown identifier: %s\n", g_scanner_cur_value(gs).v_identifier); - break; - default: - printf("unknown sequence encountered, type = %d\n", token); - } - token = g_scanner_get_next_token(gs); - if (token != ')') { - printf("Error, expected ')' not found\n"); - } - } else { - printf("Error, list term without opening (\n"); - } - - p(printf("returning list %p\n", t)); - return t; -} - -#if 0 -GList * -camel_mbox_folder_search_by_expression(CamelFolder *folder, char *expression, CamelException *ex) -{ - GScanner *gs; - int i; - struct _ESExpTerm *t; - struct _searchcontext *ctx; - struct _ESExpResult *r; - GList *matches = NULL; - - gs = g_scanner_new(&scanner_config); - for(i=0;ifolder = folder; - ctx->summary = camel_folder_get_summary(folder, ex); - ctx->message_info = camel_folder_summary_get_message_info_list(ctx->summary); -#ifdef HAVE_IBEX - ctx->index = ibex_open(CAMEL_MBOX_FOLDER(folder)->index_file_path, FALSE); - if (!ctx->index) { - perror("Cannot open index file, body searches will be ignored\n"); - } -#endif - r = term_eval(ctx, t); - - /* now create a folder summary to return?? */ - if (r - && r->type == ESEXP_RES_ARRAY_PTR) { - d(printf("got result ...\n")); - for (i=0;ivalue.ptrarray->len;i++) { - d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i))); - matches = g_list_prepend(matches, g_strdup(g_ptr_array_index(r->value.ptrarray, i))); - } - e_sexp_result_free(r); - } - - if (ctx->index) - ibex_close(ctx->index); - - gtk_object_unref((GtkObject *)ctx->summary); - g_free(ctx); - parse_term_free(t); - } else { - printf("Warning, Could not parse expression!\n %s\n", expression); - } - - g_scanner_destroy(gs); - - return matches; -} -#endif - - -static void e_sexp_finalise(GtkObject *); - -static void -e_sexp_class_init (ESExpClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) class; - - object_class->finalize = e_sexp_finalise; - - parent_class = gtk_type_class (gtk_object_get_type ()); -} - -/* 'builtin' functions */ -static struct { - char *name; - ESExpFunc *func; - int type; /* set to 1 if a function can perform shortcut evaluation, or - doesn't execute everything, 0 otherwise */ -} symbols[] = { - { "and", (ESExpFunc *)term_eval_and, 1 }, - { "or", (ESExpFunc *)term_eval_or, 1 }, - { "not", (ESExpFunc *)term_eval_not, 0 }, - { "<", (ESExpFunc *)term_eval_lt, 1 }, - { ">", (ESExpFunc *)term_eval_gt, 1 }, - { "=", (ESExpFunc *)term_eval_eq, 1 }, - { "+", (ESExpFunc *)term_eval_plus, 0 }, - { "-", (ESExpFunc *)term_eval_sub, 0 }, - { "if", (ESExpFunc *)term_eval_if, 1 }, - { "begin", (ESExpFunc *)term_eval_begin, 1 }, -}; - -static void -free_symbol(void *key, void *value, void *data) -{ - struct _ESExpSymbol *s = value; - - g_free(s->name); - g_free(s); -} - -static void -e_sexp_finalise(GtkObject *o) -{ - ESExp *s = (ESExp *)o; - - if (s->tree) { - parse_term_free(s->tree); - s->tree = NULL; - } - - g_scanner_scope_foreach_symbol(s->scanner, 0, free_symbol, 0); - g_scanner_destroy(s->scanner); - - ((GtkObjectClass *)(parent_class))->finalize((GtkObject *)o); -} - -static void -e_sexp_init (ESExp *s) -{ - int i; - - s->scanner = g_scanner_new(&scanner_config); - - /* load in builtin symbols? */ - for(i=0;iname = g_strdup(name); - s->f.func = func; - s->type = ESEXP_TERM_FUNC; - s->data = data; - g_scanner_scope_add_symbol(f->scanner, scope, s->name, s); -} - -void -e_sexp_add_ifunction(ESExp *f, int scope, char *name, ESExpIFunc *ifunc, void *data) -{ - struct _ESExpSymbol *s; - - g_return_if_fail(FILTER_IS_SEXP(f)); - g_return_if_fail(name != NULL); - - s = g_malloc0(sizeof(*s)); - s->name = g_strdup(name); - s->f.ifunc = ifunc; - s->type = ESEXP_TERM_IFUNC; - s->data = data; - g_scanner_scope_add_symbol(f->scanner, scope, s->name, s); -} - -void -e_sexp_add_variable(ESExp *f, int scope, char *name, ESExpTerm *value) -{ - struct _ESExpSymbol *s; - - g_return_if_fail(FILTER_IS_SEXP(f)); - g_return_if_fail(name != NULL); - - s = g_malloc0(sizeof(*s)); - s->name = g_strdup(name); - s->type = ESEXP_TERM_VAR; - s->data = value; - g_scanner_scope_add_symbol(f->scanner, scope, s->name, s); -} - -void -e_sexp_remove_symbol(ESExp *f, int scope, char *name) -{ - int oldscope; - struct _ESExpSymbol *s; - - g_return_if_fail(FILTER_IS_SEXP(f)); - g_return_if_fail(name != NULL); - - oldscope = g_scanner_set_scope(f->scanner, scope); - s = g_scanner_lookup_symbol(f->scanner, name); - g_scanner_scope_remove_symbol(f->scanner, scope, name); - g_scanner_set_scope(f->scanner, oldscope); - if (s) { - g_free(s->name); - g_free(s); - } -} - -int -e_sexp_set_scope(ESExp *f, int scope) -{ - g_return_val_if_fail(FILTER_IS_SEXP(f), 0); - - return g_scanner_set_scope(f->scanner, scope); -} - -void -e_sexp_input_text(ESExp *f, const char *text, int len) -{ - g_return_if_fail(FILTER_IS_SEXP(f)); - g_return_if_fail(text != NULL); - - g_scanner_input_text(f->scanner, text, len); -} - -void -e_sexp_input_file (ESExp *f, int fd) -{ - g_return_if_fail(FILTER_IS_SEXP(f)); - - g_scanner_input_file(f->scanner, fd); -} - -/* needs some error return? */ -void -e_sexp_parse(ESExp *f) -{ - g_return_if_fail(FILTER_IS_SEXP(f)); - - if (f->tree) - parse_term_free(f->tree); - - f->tree = parse_list(f, FALSE); -} - -struct _ESExpResult * -e_sexp_eval(ESExp *f) -{ - g_return_val_if_fail(FILTER_IS_SEXP(f), NULL); - g_return_val_if_fail(f->tree != NULL, NULL); - - return e_sexp_term_eval(f, f->tree); -} - -/** - * e_sexp_encode_bool: - * @s: - * @state: - * - * Encode a bool into an s-expression @s. Bools are - * encoded using #t #f syntax. - **/ -void -e_sexp_encode_bool(GString *s, gboolean state) -{ - if (state) - g_string_append(s, " #t"); - else - g_string_append(s, " #f"); -} - -/** - * e_sexp_encode_string: - * @s: Destination string. - * @string: String expression. - * - * Add a c string @string to the s-expression stored in - * the gstring @s. Quotes are added, and special characters - * are escaped appropriately. - **/ -void -e_sexp_encode_string(GString *s, const char *string) -{ - char c; - const char *p; - - p = string; - g_string_append(s, " \""); - while ( (c = *p++) ) { - if (c=='\\' || c=='\"' || c=='\'') - g_string_append_c(s, '\\'); - g_string_append_c(s, c); - } - g_string_append(s, "\""); -} - -#ifdef TESTER -int main(int argc, char **argv) -{ - ESExp *f; - char *t = "(+ \"foo\" \"\\\"\" \"bar\" \"\\\\ blah \\x \")"; - ESExpResult *r; - - gtk_init(&argc, &argv); - - f = e_sexp_new(); - - e_sexp_add_variable(f, 0, "test", NULL); - - e_sexp_input_text(f, t, strlen(t)); - e_sexp_parse(f); - - if (f->tree) { - parse_dump_term(f->tree, 0); - } - - r = e_sexp_eval(f); - if (r) { - eval_dump_result(r, 0); - } else { - printf("no result?|\n"); - } - - return 0; -} -#endif diff --git a/e-util/e-sexp.h b/e-util/e-sexp.h deleted file mode 100644 index 1030531133..0000000000 --- a/e-util/e-sexp.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - generic s-exp evaluator class -*/ -#ifndef _E_SEXP_H -#define _E_SEXP_H - -#include -#include - -#define E_SEXP(obj) GTK_CHECK_CAST (obj, e_sexp_get_type (), ESExp) -#define E_SEXP_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, e_sexp_get_type (), ESExpClass) -#define FILTER_IS_SEXP(obj) GTK_CHECK_TYPE (obj, e_sexp_get_type ()) - -typedef struct _ESExp ESExp; -typedef struct _ESExpClass ESExpClass; - -typedef struct _ESExpSymbol ESExpSymbol; -typedef struct _ESExpResult ESExpResult; -typedef struct _ESExpTerm ESExpTerm; - -typedef struct _ESExpResult *(ESExpFunc)(struct _ESExp *sexp, - int argc, - struct _ESExpResult **argv, - void *data); - -typedef struct _ESExpResult *(ESExpIFunc)(struct _ESExp *sexp, - int argc, - struct _ESExpTerm **argv, - void *data); -enum _ESExpResultType { - ESEXP_RES_ARRAY_PTR=0, /* type is a ptrarray, what it points to is implementation dependant */ - ESEXP_RES_INT, /* type is a number */ - ESEXP_RES_STRING, /* type is a pointer to a single string */ - ESEXP_RES_BOOL, /* boolean type */ - ESEXP_RES_UNDEFINED /* unknown type */ -}; - -struct _ESExpResult { - enum _ESExpResultType type; - union { - GPtrArray *ptrarray; - int number; - char *string; - int bool; - } value; -}; - -enum _ESExpTermType { - ESEXP_TERM_INT = 0, /* integer literal */ - ESEXP_TERM_BOOL, /* boolean literal */ - ESEXP_TERM_STRING, /* string literal */ - ESEXP_TERM_FUNC, /* normal function, arguments are evaluated before calling */ - ESEXP_TERM_IFUNC, /* immediate function, raw terms are arguments */ - ESEXP_TERM_VAR, /* variable reference */ -}; - -struct _ESExpSymbol { - int type; /* ESEXP_TERM_FUNC or ESEXP_TERM_VAR */ - char *name; - void *data; - union { - ESExpFunc *func; - ESExpIFunc *ifunc; - } f; -}; - -struct _ESExpTerm { - enum _ESExpTermType type; - union { - char *string; - int number; - int bool; - struct { - struct _ESExpSymbol *sym; - struct _ESExpTerm **terms; - int termcount; - } func; - struct _ESExpSymbol *var; - } value; -}; - - - -struct _ESExp { - GtkObject object; - - GScanner *scanner; /* for parsing text version */ - ESExpTerm *tree; /* root of expression tree */ -}; - -struct _ESExpClass { - GtkObjectClass parent_class; - -}; - -guint e_sexp_get_type (void); -ESExp *e_sexp_new (void); -void e_sexp_add_function (ESExp *f, int scope, char *name, ESExpFunc *func, void *data); -void e_sexp_add_ifunction (ESExp *f, int scope, char *name, ESExpIFunc *func, void *data); -void e_sexp_add_variable (ESExp *f, int scope, char *name, ESExpTerm *value); -void e_sexp_remove_symbol (ESExp *f, int scope, char *name); -int e_sexp_set_scope (ESExp *f, int scope); - -void e_sexp_input_text (ESExp *f, const char *text, int len); -void e_sexp_input_file (ESExp *f, int fd); - - -void e_sexp_parse (ESExp *f); -ESExpResult *e_sexp_eval (ESExp *f); - -ESExpResult *e_sexp_term_eval (struct _ESExp *f, struct _ESExpTerm *t); -ESExpResult *e_sexp_result_new (int type); -void e_sexp_result_free (struct _ESExpResult *t); - -/* utility functions for creating s-exp strings. */ -void e_sexp_encode_bool(GString *s, gboolean state); -void e_sexp_encode_string(GString *s, const char *string); - -#endif /* _E_SEXP_H */ diff --git a/e-util/e-text-event-processor-emacs-like.c b/e-util/e-text-event-processor-emacs-like.c deleted file mode 100644 index be323d028f..0000000000 --- a/e-util/e-text-event-processor-emacs-like.c +++ /dev/null @@ -1,372 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-text-event-processor.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include "e-text-event-processor-emacs-like.h" -static void e_text_event_processor_emacs_like_init (ETextEventProcessorEmacsLike *card); -static void e_text_event_processor_emacs_like_class_init (ETextEventProcessorEmacsLikeClass *klass); -static gint e_text_event_processor_emacs_like_event (ETextEventProcessor *tep, ETextEventProcessorEvent *event); - -static ETextEventProcessorClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0 -}; - -static const ETextEventProcessorCommand control_keys[26] = -{ - { E_TEP_START_OF_LINE, E_TEP_MOVE, 0, "" }, /* a */ - { E_TEP_BACKWARD_CHARACTER, E_TEP_MOVE, 0, "" }, /* b */ - { E_TEP_SELECTION, E_TEP_COPY, 0, "" }, /* c */ - { E_TEP_FORWARD_CHARACTER, E_TEP_DELETE, 0, "" }, /* d */ - { E_TEP_END_OF_LINE, E_TEP_MOVE, 0, "" }, /* e */ - { E_TEP_FORWARD_CHARACTER, E_TEP_MOVE, 0, "" }, /* f */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* g */ - { E_TEP_BACKWARD_CHARACTER, E_TEP_DELETE, 0, "" }, /* h */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* i */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* j */ - { E_TEP_END_OF_LINE, E_TEP_DELETE, 0, "" }, /* k */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* l */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* m */ - { E_TEP_FORWARD_LINE, E_TEP_MOVE, 0, "" }, /* n */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* o */ - { E_TEP_BACKWARD_LINE, E_TEP_MOVE, 0, "" }, /* p */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* q */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* r */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* s */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* t */ - { E_TEP_START_OF_LINE, E_TEP_DELETE, 0, "" }, /* u */ - { E_TEP_SELECTION, E_TEP_PASTE, 0, "" }, /* v */ - { E_TEP_SELECTION, E_TEP_DELETE, 0, "" }, /* w */ - { E_TEP_SELECTION, E_TEP_DELETE, 0, "" }, /* x */ - { E_TEP_SELECTION, E_TEP_PASTE, 0, "" }, /* y */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" } /* z */ -}; - -static const ETextEventProcessorCommand alt_keys[26] = -{ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* a */ - { E_TEP_BACKWARD_WORD, E_TEP_MOVE, 0, "" }, /* b */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* c */ - { E_TEP_FORWARD_WORD, E_TEP_DELETE, 0, "" }, /* d */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* e */ - { E_TEP_FORWARD_WORD, E_TEP_MOVE, 0, "" }, /* f */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* g */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* h */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* i */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* j */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* k */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* l */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* m */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* n */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* o */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* p */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* q */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* r */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* s */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* t */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* u */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* v */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* w */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* x */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" }, /* y */ - { E_TEP_SELECTION, E_TEP_NOP, 0, "" } /* z */ - -}; - -GtkType -e_text_event_processor_emacs_like_get_type (void) -{ - static GtkType text_event_processor_emacs_like_type = 0; - - if (!text_event_processor_emacs_like_type) - { - static const GtkTypeInfo text_event_processor_emacs_like_info = - { - "ETextEventProcessorEmacsLike", - sizeof (ETextEventProcessorEmacsLike), - sizeof (ETextEventProcessorEmacsLikeClass), - (GtkClassInitFunc) e_text_event_processor_emacs_like_class_init, - (GtkObjectInitFunc) e_text_event_processor_emacs_like_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - text_event_processor_emacs_like_type = gtk_type_unique (e_text_event_processor_get_type (), &text_event_processor_emacs_like_info); - } - - return text_event_processor_emacs_like_type; -} - -static void -e_text_event_processor_emacs_like_class_init (ETextEventProcessorEmacsLikeClass *klass) -{ - GtkObjectClass *object_class; - ETextEventProcessorClass *processor_class; - - object_class = (GtkObjectClass*) klass; - processor_class = (ETextEventProcessorClass*) klass; - - parent_class = gtk_type_class (e_text_event_processor_get_type ()); - - processor_class->event = e_text_event_processor_emacs_like_event; -} - -static void -e_text_event_processor_emacs_like_init (ETextEventProcessorEmacsLike *tep) -{ -} - -static gint -e_text_event_processor_emacs_like_event (ETextEventProcessor *tep, ETextEventProcessorEvent *event) -{ - ETextEventProcessorCommand command; - ETextEventProcessorEmacsLike *tep_el = E_TEXT_EVENT_PROCESSOR_EMACS_LIKE(tep); - command.action = E_TEP_NOP; - switch (event->type) { - case GDK_BUTTON_PRESS: - if (event->button.button == 1) { - command.action = E_TEP_GRAB; - command.time = event->button.time; - gtk_signal_emit_by_name (GTK_OBJECT (tep), "command", &command); - if (event->button.state & GDK_SHIFT_MASK) - command.action = E_TEP_SELECT; - else - command.action = E_TEP_MOVE; - command.position = E_TEP_VALUE; - command.value = event->button.position; - command.time = event->button.time; - tep_el->mouse_down = TRUE; - } - break; - case GDK_2BUTTON_PRESS: - if (event->button.button == 1) { - command.action = E_TEP_SELECT; - command.position = E_TEP_SELECT_WORD; - command.time = event->button.time; - } - break; - case GDK_3BUTTON_PRESS: - if (event->button.button == 1) { - command.action = E_TEP_SELECT; - command.position = E_TEP_SELECT_ALL; - command.time = event->button.time; - } - break; - case GDK_BUTTON_RELEASE: - if (event->button.button == 1) { - command.action = E_TEP_UNGRAB; - command.time = event->button.time; - gtk_signal_emit_by_name (GTK_OBJECT (tep), "command", &command); - command.time = event->button.time; - tep_el->mouse_down = FALSE; - command.action = E_TEP_NOP; - } else if (event->button.button == 2) { - command.action = E_TEP_MOVE; - command.position = E_TEP_VALUE; - command.value = event->button.position; - command.time = event->button.time; - gtk_signal_emit_by_name (GTK_OBJECT (tep), "command", &command); - - command.action = E_TEP_GET_SELECTION; - command.position = E_TEP_SELECTION; - command.value = 0; - command.time = event->button.time; - } - break; - case GDK_MOTION_NOTIFY: - if (tep_el->mouse_down) { - command.action = E_TEP_SELECT; - command.position = E_TEP_VALUE; - command.time = event->motion.time; - command.value = event->motion.position; - } - break; - case GDK_KEY_PRESS: - { - ETextEventProcessorEventKey key = event->key; - command.time = event->key.time; - if (key.state & GDK_SHIFT_MASK) - command.action = E_TEP_SELECT; - else - command.action = E_TEP_MOVE; - switch(key.keyval) { - case GDK_Home: - if (key.state & GDK_CONTROL_MASK) - command.position = E_TEP_START_OF_BUFFER; - else - command.position = E_TEP_START_OF_LINE; - break; - case GDK_End: - if (key.state & GDK_CONTROL_MASK) - command.position = E_TEP_END_OF_BUFFER; - else - command.position = E_TEP_END_OF_LINE; - break; - case GDK_Page_Up: command.position = E_TEP_BACKWARD_PAGE; break; - case GDK_Page_Down: command.position = E_TEP_FORWARD_PAGE; break; - /* CUA has Ctrl-Up/Ctrl-Down as paragraph up down */ - case GDK_Up: command.position = E_TEP_BACKWARD_LINE; break; - case GDK_Down: command.position = E_TEP_FORWARD_LINE; break; - case GDK_Left: - if (key.state & GDK_CONTROL_MASK) - command.position = E_TEP_BACKWARD_WORD; - else - command.position = E_TEP_BACKWARD_CHARACTER; - break; - case GDK_Right: - if (key.state & GDK_CONTROL_MASK) - command.position = E_TEP_FORWARD_WORD; - else - command.position = E_TEP_FORWARD_CHARACTER; - break; - - case GDK_BackSpace: - command.action = E_TEP_DELETE; - if (key.state & GDK_CONTROL_MASK) - command.position = E_TEP_BACKWARD_WORD; - else - command.position = E_TEP_BACKWARD_CHARACTER; - break; - case GDK_Clear: - command.action = E_TEP_DELETE; - command.position = E_TEP_END_OF_LINE; - break; - case GDK_Insert: - if (key.state & GDK_SHIFT_MASK) { - command.action = E_TEP_PASTE; - command.position = E_TEP_SELECTION; - } else if (key.state & GDK_CONTROL_MASK) { - command.action = E_TEP_COPY; - command.position = E_TEP_SELECTION; - } else { - /* gtk_toggle_insert(text) -- IMPLEMENT */ - } - break; - case GDK_Delete: - if (key.state & GDK_CONTROL_MASK){ - command.action = E_TEP_DELETE; - command.position = E_TEP_FORWARD_WORD; - } else if (key.state & GDK_SHIFT_MASK) { - command.action = E_TEP_COPY; - command.position = E_TEP_SELECTION; - gtk_signal_emit_by_name (GTK_OBJECT (tep), "command", &command); - - command.action = E_TEP_DELETE; - command.position = E_TEP_SELECTION; - } else { - command.action = E_TEP_DELETE; - command.position = E_TEP_FORWARD_CHARACTER; - } - break; - case GDK_Tab: - /* Don't insert literally */ - command.action = E_TEP_NOP; - command.position = E_TEP_SELECTION; - break; - case GDK_Return: - if (key.state & GDK_CONTROL_MASK) { - command.action = E_TEP_ACTIVATE; - command.position = E_TEP_SELECTION; - } else { - command.action = E_TEP_INSERT; - command.position = E_TEP_SELECTION; - command.value = 1; - command.string = "\n"; - } - break; - case GDK_Escape: - /* Don't insert literally */ - command.action = E_TEP_NOP; - command.position = E_TEP_SELECTION; - break; - - default: - if (key.state & GDK_CONTROL_MASK) { - if ((key.keyval >= 'A') && (key.keyval <= 'Z')) - key.keyval -= 'A' - 'a'; - - if ((key.keyval >= 'a') && (key.keyval <= 'z')) { - command.position = control_keys[(int) (key.keyval - 'a')].position; - if (control_keys[(int) (key.keyval - 'a')].action != E_TEP_MOVE) - command.action = control_keys[(int) (key.keyval - 'a')].action; - command.value = control_keys[(int) (key.keyval - 'a')].value; - command.string = control_keys[(int) (key.keyval - 'a')].string; - } - - if (key.keyval == 'x' || key.keyval == 'w') { - command.action = E_TEP_COPY; - command.position = E_TEP_SELECTION; - gtk_signal_emit_by_name (GTK_OBJECT (tep), "command", &command); - - command.action = E_TEP_DELETE; - command.position = E_TEP_SELECTION; - } - - break; - } else if (key.state & GDK_MOD1_MASK) { - if ((key.keyval >= 'A') && (key.keyval <= 'Z')) - key.keyval -= 'A' - 'a'; - - if ((key.keyval >= 'a') && (key.keyval <= 'z')) { - command.position = alt_keys[(int) (key.keyval - 'a')].position; - if (alt_keys[(int) (key.keyval - 'a')].action != E_TEP_MOVE) - command.action = alt_keys[(int) (key.keyval - 'a')].action; - command.value = alt_keys[(int) (key.keyval - 'a')].value; - command.string = alt_keys[(int) (key.keyval - 'a')].string; - } - } else if (key.length > 0) { - command.action = E_TEP_INSERT; - command.position = E_TEP_SELECTION; - command.value = strlen(key.string); - command.string = key.string; - - } else { - command.action = E_TEP_NOP; - } - } - break; - case GDK_KEY_RELEASE: - command.time = event->key.time; - command.action = E_TEP_NOP; - break; - default: - command.action = E_TEP_NOP; - break; - } - } - if (command.action != E_TEP_NOP) { - gtk_signal_emit_by_name (GTK_OBJECT (tep), "command", &command); - return 1; - } - else - return 0; -} - -ETextEventProcessor * -e_text_event_processor_emacs_like_new (void) -{ - ETextEventProcessorEmacsLike *retval = gtk_type_new (e_text_event_processor_emacs_like_get_type ()); - return E_TEXT_EVENT_PROCESSOR (retval); -} - diff --git a/e-util/e-text-event-processor-emacs-like.h b/e-util/e-text-event-processor-emacs-like.h deleted file mode 100644 index 651bb552b3..0000000000 --- a/e-util/e-text-event-processor-emacs-like.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-text-event-processor-emacs-like.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_H__ -#define __E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_H__ - -#include -#include "e-text-event-processor.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* ETextEventProcessorEmacsLike - Turns events on a text widget into commands. Uses an emacs-ish interface. - * - */ - -#define E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE (e_text_event_processor_emacs_like_get_type ()) -#define E_TEXT_EVENT_PROCESSOR_EMACS_LIKE(obj) (GTK_CHECK_CAST ((obj), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE, ETextEventProcessorEmacsLike)) -#define E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE, ETextEventProcessorEmacsLikeClass)) -#define E_IS_TEXT_EVENT_PROCESSOR_EMACS_LIKE(obj) (GTK_CHECK_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE)) -#define E_IS_TEXT_EVENT_PROCESSOR_EMACS_LIKE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_TYPE)) - - -typedef struct _ETextEventProcessorEmacsLike ETextEventProcessorEmacsLike; -typedef struct _ETextEventProcessorEmacsLikeClass ETextEventProcessorEmacsLikeClass; - -struct _ETextEventProcessorEmacsLike -{ - ETextEventProcessor parent; - - /* object specific fields */ - gboolean mouse_down; -}; - -struct _ETextEventProcessorEmacsLikeClass -{ - ETextEventProcessorClass parent_class; -}; - - -GtkType e_text_event_processor_emacs_like_get_type (void); -ETextEventProcessor *e_text_event_processor_emacs_like_new (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_TEXT_EVENT_PROCESSOR_EMACS_LIKE_H__ */ diff --git a/e-util/e-text-event-processor-types.h b/e-util/e-text-event-processor-types.h deleted file mode 100644 index 8f2ffbaf39..0000000000 --- a/e-util/e-text-event-processor-types.h +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-text-event-processor.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-1999. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef __E_TEXT_EVENT_PROCESSOR_TYPES_H__ -#define __E_TEXT_EVENT_PROCESSOR_TYPES_H__ - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#include - -typedef enum _ETextEventProcessorCommandPosition ETextEventProcessorCommandPosition; -typedef enum _ETextEventProcessorCommandAction ETextEventProcessorCommandAction; -typedef struct _ETextEventProcessorCommand ETextEventProcessorCommand; - -typedef union _ETextEventProcessorEvent ETextEventProcessorEvent; -typedef struct _ETextEventProcessorEventButton ETextEventProcessorEventButton; -typedef struct _ETextEventProcessorEventKey ETextEventProcessorEventKey; -typedef struct _ETextEventProcessorEventMotion ETextEventProcessorEventMotion; - -enum _ETextEventProcessorCommandPosition { - E_TEP_VALUE, - E_TEP_SELECTION, - - E_TEP_START_OF_BUFFER, - E_TEP_END_OF_BUFFER, - - E_TEP_START_OF_LINE, - E_TEP_END_OF_LINE, - - E_TEP_FORWARD_CHARACTER, - E_TEP_BACKWARD_CHARACTER, - - E_TEP_FORWARD_WORD, - E_TEP_BACKWARD_WORD, - - E_TEP_FORWARD_LINE, - E_TEP_BACKWARD_LINE, - - E_TEP_FORWARD_PARAGRAPH, - E_TEP_BACKWARD_PARAGRAPH, - - E_TEP_FORWARD_PAGE, - E_TEP_BACKWARD_PAGE, - - E_TEP_SELECT_WORD, - E_TEP_SELECT_ALL - -}; - -enum _ETextEventProcessorCommandAction { - E_TEP_MOVE, - E_TEP_SELECT, - E_TEP_DELETE, - E_TEP_INSERT, - - E_TEP_COPY, - E_TEP_PASTE, - E_TEP_GET_SELECTION, - E_TEP_SET_SELECT_BY_WORD, - E_TEP_ACTIVATE, - - E_TEP_GRAB, - E_TEP_UNGRAB, - - E_TEP_NOP -}; - -struct _ETextEventProcessorCommand { - ETextEventProcessorCommandPosition position; - ETextEventProcessorCommandAction action; - int value; - char *string; - guint32 time; -}; - -struct _ETextEventProcessorEventButton { - GdkEventType type; - guint32 time; - guint state; - guint button; - gint position; -}; - -struct _ETextEventProcessorEventKey { - GdkEventType type; - guint32 time; - guint state; - guint keyval; - gint length; - gchar *string; -}; - -struct _ETextEventProcessorEventMotion { - GdkEventType type; - guint32 time; - guint state; - gint position; -}; - -union _ETextEventProcessorEvent { - GdkEventType type; - ETextEventProcessorEventButton button; - ETextEventProcessorEventKey key; - ETextEventProcessorEventMotion motion; -}; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_TEXT_EVENT_PROCESSOR_TYPES_H__ */ diff --git a/e-util/e-text-event-processor.c b/e-util/e-text-event-processor.c deleted file mode 100644 index 47f028ca62..0000000000 --- a/e-util/e-text-event-processor.c +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-text-event-processor.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include "e-text-event-processor.h" -static void e_text_event_processor_init (ETextEventProcessor *card); -static void e_text_event_processor_class_init (ETextEventProcessorClass *klass); - -static GtkObjectClass *parent_class = NULL; - -/* The arguments we take */ -enum { - ARG_0 -}; - -enum { - E_TEP_EVENT, - E_TEP_LAST_SIGNAL -}; - -static guint e_tep_signals[E_TEP_LAST_SIGNAL] = { 0 }; - -GtkType -e_text_event_processor_get_type (void) -{ - static GtkType text_event_processor_type = 0; - - if (!text_event_processor_type) - { - static const GtkTypeInfo text_event_processor_info = - { - "ETextEventProcessor", - sizeof (ETextEventProcessor), - sizeof (ETextEventProcessorClass), - (GtkClassInitFunc) e_text_event_processor_class_init, - (GtkObjectInitFunc) e_text_event_processor_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - text_event_processor_type = gtk_type_unique (gtk_object_get_type (), &text_event_processor_info); - } - - return text_event_processor_type; -} - -static void -e_text_event_processor_class_init (ETextEventProcessorClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass*) klass; - - parent_class = gtk_type_class (gtk_object_get_type ()); - - e_tep_signals[E_TEP_EVENT] = - gtk_signal_new ("command", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (ETextEventProcessorClass, command), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - - gtk_object_class_add_signals (object_class, e_tep_signals, E_TEP_LAST_SIGNAL); - - klass->event = NULL; - klass->command = NULL; -} - -static void -e_text_event_processor_init (ETextEventProcessor *tep) -{ -} - -gint -e_text_event_processor_handle_event (ETextEventProcessor *tep, ETextEventProcessorEvent *event) -{ - if (E_TEXT_EVENT_PROCESSOR_CLASS(GTK_OBJECT(tep)->klass)->event) { - return E_TEXT_EVENT_PROCESSOR_CLASS(GTK_OBJECT(tep)->klass)->event(tep, event); - } else { - return 0; - } -} diff --git a/e-util/e-text-event-processor.h b/e-util/e-text-event-processor.h deleted file mode 100644 index 1fc79f3f70..0000000000 --- a/e-util/e-text-event-processor.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* e-text-event-processor.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -#ifndef __E_TEXT_EVENT_PROCESSOR_H__ -#define __E_TEXT_EVENT_PROCESSOR_H__ - -#include -#include "e-text-event-processor-types.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -/* ETextEventProcessor - Turns events on a text widget into commands. - * - */ - -#define E_TEXT_EVENT_PROCESSOR_TYPE (e_text_event_processor_get_type ()) -#define E_TEXT_EVENT_PROCESSOR(obj) (GTK_CHECK_CAST ((obj), E_TEXT_EVENT_PROCESSOR_TYPE, ETextEventProcessor)) -#define E_TEXT_EVENT_PROCESSOR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TEXT_EVENT_PROCESSOR_TYPE, ETextEventProcessorClass)) -#define E_IS_TEXT_EVENT_PROCESSOR(obj) (GTK_CHECK_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_TYPE)) -#define E_IS_TEXT_EVENT_PROCESSOR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TEXT_EVENT_PROCESSOR_TYPE)) - - -typedef struct _ETextEventProcessor ETextEventProcessor; -typedef struct _ETextEventProcessorClass ETextEventProcessorClass; - -struct _ETextEventProcessor -{ - GtkObject parent; - - /* object specific fields */ - -}; - -struct _ETextEventProcessorClass -{ - GtkObjectClass parent_class; - - /* signals */ - void (* command) (ETextEventProcessor *tep, ETextEventProcessorCommand *command); - - /* virtual functions */ - gint (* event) (ETextEventProcessor *tep, ETextEventProcessorEvent *event); -}; - - -GtkType e_text_event_processor_get_type (void); -gint e_text_event_processor_handle_event (ETextEventProcessor *tep, ETextEventProcessorEvent *event); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_TEXT_EVENT_PROCESSOR_H__ */ diff --git a/e-util/e-util.c b/e-util/e-util.c deleted file mode 100644 index 90a5697fb0..0000000000 --- a/e-util/e-util.c +++ /dev/null @@ -1,475 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-xml-utils.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "e-util.h" -#if 0 -#include -#endif - -int -g_str_compare(const void *x, const void *y) -{ - return strcmp(x, y); -} - -int -g_int_compare(const void *x, const void *y) -{ - if ( GPOINTER_TO_INT(x) < GPOINTER_TO_INT(y) ) - return -1; - else if ( GPOINTER_TO_INT(x) == GPOINTER_TO_INT(y) ) - return 0; - else - return 1; -} - -char * -e_strdup_strip(char *string) -{ - int i; - int length = 0; - int initial = 0; - for ( i = 0; string[i]; i++ ) { - if (initial == i && isspace(string[i])) { - initial ++; - } - if (!isspace(string[i])) { - length = i - initial + 1; - } - } - return g_strndup(string + initial, length); -} - -void -e_free_object_list (GList *list) -{ - GList *p; - - for (p = list; p != NULL; p = p->next) - gtk_object_unref (GTK_OBJECT (p->data)); - - g_list_free (list); -} - -void -e_free_string_list (GList *list) -{ - GList *p; - - for (p = list; p != NULL; p = p->next) - g_free (p->data); - - g_list_free (list); -} - -#define BUFF_SIZE 1024 - -char * -e_read_file(const char *filename) -{ - int fd; - char buffer[BUFF_SIZE]; - GList *list = NULL, *list_iterator; - GList *lengths = NULL, *lengths_iterator; - int length = 0; - int bytes; - char *ret_val; - - fd = open(filename, O_RDONLY); - if (fd == -1) - return NULL; - bytes = read(fd, buffer, BUFF_SIZE); - while (bytes) { - if (bytes > 0) { - char *temp = g_malloc(bytes); - memcpy (temp, buffer, bytes); - list = g_list_prepend(list, temp); - lengths = g_list_prepend(lengths, GINT_TO_POINTER(bytes)); - length += bytes; - } else { - if (errno != EINTR) { - close(fd); - g_list_foreach(list, (GFunc) g_free, NULL); - g_list_free(list); - g_list_free(lengths); - return NULL; - } - } - bytes = read(fd, buffer, BUFF_SIZE); - } - ret_val = g_new(char, length + 1); - ret_val[length] = 0; - lengths_iterator = lengths; - list_iterator = list; - for ( ; list_iterator; list_iterator = list_iterator->next, lengths_iterator = lengths_iterator->next) { - int this_length = GPOINTER_TO_INT(lengths_iterator->data); - length -= this_length; - memcpy(ret_val + length, list_iterator->data, this_length); - } - close(fd); - g_list_foreach(list, (GFunc) g_free, NULL); - g_list_free(list); - g_list_free(lengths); - return ret_val; -} - -gint -e_write_file(const char *filename, const char *data, int flags) -{ - int fd; - int length = strlen(data); - int bytes; - fd = open(filename, flags, 0666); - if (fd == -1) - return errno; - while (length > 0) { - bytes = write(fd, data, length); - if (bytes > 0) { - length -= bytes; - data += bytes; - } else { - if (errno != EINTR && errno != EAGAIN) { - int save_errno = errno; - close(fd); - return save_errno; - } - } - } - close(fd); - return 0; -} - -#if 0 -char * -e_read_uri(const char *uri) -{ - GnomeVFSHandle *handle; - GList *list = NULL, *list_iterator; - GList *lengths = NULL, *lengths_iterator; - gchar buffer[1025]; - gchar *ret_val; - int length = 0; - GnomeVFSFileSize bytes; - - gnome_vfs_open(&handle, uri, GNOME_VFS_OPEN_READ); - - gnome_vfs_read(handle, buffer, 1024, &bytes); - while (bytes) { - if (bytes) { - char *temp = g_malloc(bytes); - memcpy (temp, buffer, bytes); - list = g_list_prepend(list, temp); - lengths = g_list_prepend(lengths, GINT_TO_POINTER((gint) bytes)); - length += bytes; - } - gnome_vfs_read(handle, buffer, 1024, &bytes); - } - - ret_val = g_new(char, length + 1); - ret_val[length] = 0; - lengths_iterator = lengths; - list_iterator = list; - for ( ; list_iterator; list_iterator = list_iterator->next, lengths_iterator = lengths_iterator->next) { - int this_length = GPOINTER_TO_INT(lengths_iterator->data); - length -= this_length; - memcpy(ret_val + length, list_iterator->data, this_length); - } - gnome_vfs_close(handle); - g_list_foreach(list, (GFunc) g_free, NULL); - g_list_free(list); - g_list_free(lengths); - return ret_val; -} -#endif - -typedef gint (*GtkSignal_INT__INT_INT_POINTER) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gpointer user_data); - -void -e_marshal_INT__INT_INT_POINTER (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_INT__INT_INT_POINTER rfunc; - gint *return_val; - return_val = GTK_RETLOC_INT (args[3]); - rfunc = (GtkSignal_INT__INT_INT_POINTER) func; - *return_val = (*rfunc) (object, - GTK_VALUE_INT (args[0]), - GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - func_data); -} - -typedef void (*GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, - GtkObject *arg1, - gdouble arg2, - gdouble arg3, - gboolean arg4, - gpointer user_data); - -void -e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL rfunc; - rfunc = (GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL) func; - (*rfunc) (object, - GTK_VALUE_OBJECT (args[0]), - GTK_VALUE_DOUBLE (args[1]), - GTK_VALUE_DOUBLE (args[2]), - GTK_VALUE_BOOL (args[3]), - func_data); -} - -typedef gdouble (*GtkSignal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, - GtkObject *arg1, - gdouble arg2, - gdouble arg3, - gboolean arg4, - gpointer user_data); - -void -e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL rfunc; - gdouble *return_val; - return_val = GTK_RETLOC_DOUBLE (args[4]); - rfunc = (GtkSignal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL) func; - *return_val = (*rfunc) (object, - GTK_VALUE_OBJECT (args[0]), - GTK_VALUE_DOUBLE (args[1]), - GTK_VALUE_DOUBLE (args[2]), - GTK_VALUE_BOOL (args[3]), - func_data); -} - -typedef gdouble (*GtkSignal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, - GtkObject *arg1, - gdouble arg2, - gdouble arg3, - gboolean arg4, - gpointer user_data); - -void -e_marshal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL rfunc; - gboolean *return_val; - return_val = GTK_RETLOC_BOOL (args[4]); - rfunc = (GtkSignal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL) func; - *return_val = (*rfunc) (object, - GTK_VALUE_OBJECT (args[0]), - GTK_VALUE_DOUBLE (args[1]), - GTK_VALUE_DOUBLE (args[2]), - GTK_VALUE_BOOL (args[3]), - func_data); -} - -typedef void (*GtkSignal_NONE__INT_INT_POINTER_POINTER_INT_INT) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gpointer arg4, - gint arg5, - gint arg6, - gpointer user_data); -void -e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_NONE__INT_INT_POINTER_POINTER_INT_INT rfunc; - rfunc = (GtkSignal_NONE__INT_INT_POINTER_POINTER_INT_INT) func; - (*rfunc) (object, - GTK_VALUE_INT (args[0]), GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - GTK_VALUE_POINTER (args[3]), - GTK_VALUE_INT (args[4]), GTK_VALUE_INT (args[5]), func_data); -} - -typedef void (*GtkSignal_NONE__INT_INT_POINTER_INT) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gint arg4, gpointer user_data); -void -e_marshal_NONE__INT_INT_POINTER_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_NONE__INT_INT_POINTER_INT rfunc; - rfunc = (GtkSignal_NONE__INT_INT_POINTER_INT) func; - (*rfunc) (object, - GTK_VALUE_INT (args[0]), GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), GTK_VALUE_INT (args[3]), func_data); -} - -typedef gboolean (*GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gint arg4, - gint arg5, - gint arg6, - gpointer user_data); -void -e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT rfunc; - gboolean *return_val; - return_val = GTK_RETLOC_BOOL (args[6]); - rfunc = (GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT) func; - *return_val = (*rfunc) (object, - GTK_VALUE_INT (args[0]), - GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - GTK_VALUE_INT (args[3]), - GTK_VALUE_INT (args[4]), - GTK_VALUE_INT (args[5]), func_data); -} - -typedef void (*GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT) (GtkObject * - object, - gint arg1, - gint arg2, - gpointer - arg3, - gint arg4, - gint arg5, - gpointer - arg6, - gint arg7, - gint arg8, - gpointer - user_data); -void -e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args) -{ - GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT rfunc; - rfunc = (GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT) func; - (*rfunc) (object, - GTK_VALUE_INT (args[0]), GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - GTK_VALUE_INT (args[3]), - GTK_VALUE_INT (args[4]), - GTK_VALUE_POINTER (args[5]), - GTK_VALUE_INT (args[6]), GTK_VALUE_INT (args[7]), func_data); -} - -gchar** -e_strsplit (const gchar *string, - const gchar *delimiter, - gint max_tokens) -{ - GSList *string_list = NULL, *slist; - gchar **str_array, *s; - guint i, n = 1; - - g_return_val_if_fail (string != NULL, NULL); - g_return_val_if_fail (delimiter != NULL, NULL); - - if (max_tokens < 1) - max_tokens = G_MAXINT; - - s = strstr (string, delimiter); - if (s) - { - guint delimiter_len = strlen (delimiter); - - do - { - guint len; - gchar *new_string; - - len = s - string; - new_string = g_new (gchar, len + 1); - strncpy (new_string, string, len); - new_string[len] = 0; - string_list = g_slist_prepend (string_list, new_string); - n++; - string = s + delimiter_len; - s = strstr (string, delimiter); - } - while (--max_tokens && s); - } - - n++; - string_list = g_slist_prepend (string_list, g_strdup (string)); - - str_array = g_new (gchar*, n); - - i = n - 1; - - str_array[i--] = NULL; - for (slist = string_list; slist; slist = slist->next) - str_array[i--] = slist->data; - - g_slist_free (string_list); - - return str_array; -} - -const gchar * -e_strstrcase (const gchar *haystack, const gchar *needle) -{ - /* find the needle in the haystack neglecting case */ - gchar *ptr; - guint len; - - g_return_val_if_fail (haystack != NULL, NULL); - g_return_val_if_fail (needle != NULL, NULL); - - len = strlen(needle); - if (len > strlen(haystack)) - return NULL; - - if (len == 0) - return (char *)haystack; - - for (ptr = (char *)haystack; *(ptr + len - 1) != '\0'; ptr++) - if (!g_strncasecmp(ptr, needle, len)) - return ptr; - - return NULL; -} diff --git a/e-util/e-util.c-8611 b/e-util/e-util.c-8611 deleted file mode 100644 index 90a5697fb0..0000000000 --- a/e-util/e-util.c-8611 +++ /dev/null @@ -1,475 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-xml-utils.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "e-util.h" -#if 0 -#include -#endif - -int -g_str_compare(const void *x, const void *y) -{ - return strcmp(x, y); -} - -int -g_int_compare(const void *x, const void *y) -{ - if ( GPOINTER_TO_INT(x) < GPOINTER_TO_INT(y) ) - return -1; - else if ( GPOINTER_TO_INT(x) == GPOINTER_TO_INT(y) ) - return 0; - else - return 1; -} - -char * -e_strdup_strip(char *string) -{ - int i; - int length = 0; - int initial = 0; - for ( i = 0; string[i]; i++ ) { - if (initial == i && isspace(string[i])) { - initial ++; - } - if (!isspace(string[i])) { - length = i - initial + 1; - } - } - return g_strndup(string + initial, length); -} - -void -e_free_object_list (GList *list) -{ - GList *p; - - for (p = list; p != NULL; p = p->next) - gtk_object_unref (GTK_OBJECT (p->data)); - - g_list_free (list); -} - -void -e_free_string_list (GList *list) -{ - GList *p; - - for (p = list; p != NULL; p = p->next) - g_free (p->data); - - g_list_free (list); -} - -#define BUFF_SIZE 1024 - -char * -e_read_file(const char *filename) -{ - int fd; - char buffer[BUFF_SIZE]; - GList *list = NULL, *list_iterator; - GList *lengths = NULL, *lengths_iterator; - int length = 0; - int bytes; - char *ret_val; - - fd = open(filename, O_RDONLY); - if (fd == -1) - return NULL; - bytes = read(fd, buffer, BUFF_SIZE); - while (bytes) { - if (bytes > 0) { - char *temp = g_malloc(bytes); - memcpy (temp, buffer, bytes); - list = g_list_prepend(list, temp); - lengths = g_list_prepend(lengths, GINT_TO_POINTER(bytes)); - length += bytes; - } else { - if (errno != EINTR) { - close(fd); - g_list_foreach(list, (GFunc) g_free, NULL); - g_list_free(list); - g_list_free(lengths); - return NULL; - } - } - bytes = read(fd, buffer, BUFF_SIZE); - } - ret_val = g_new(char, length + 1); - ret_val[length] = 0; - lengths_iterator = lengths; - list_iterator = list; - for ( ; list_iterator; list_iterator = list_iterator->next, lengths_iterator = lengths_iterator->next) { - int this_length = GPOINTER_TO_INT(lengths_iterator->data); - length -= this_length; - memcpy(ret_val + length, list_iterator->data, this_length); - } - close(fd); - g_list_foreach(list, (GFunc) g_free, NULL); - g_list_free(list); - g_list_free(lengths); - return ret_val; -} - -gint -e_write_file(const char *filename, const char *data, int flags) -{ - int fd; - int length = strlen(data); - int bytes; - fd = open(filename, flags, 0666); - if (fd == -1) - return errno; - while (length > 0) { - bytes = write(fd, data, length); - if (bytes > 0) { - length -= bytes; - data += bytes; - } else { - if (errno != EINTR && errno != EAGAIN) { - int save_errno = errno; - close(fd); - return save_errno; - } - } - } - close(fd); - return 0; -} - -#if 0 -char * -e_read_uri(const char *uri) -{ - GnomeVFSHandle *handle; - GList *list = NULL, *list_iterator; - GList *lengths = NULL, *lengths_iterator; - gchar buffer[1025]; - gchar *ret_val; - int length = 0; - GnomeVFSFileSize bytes; - - gnome_vfs_open(&handle, uri, GNOME_VFS_OPEN_READ); - - gnome_vfs_read(handle, buffer, 1024, &bytes); - while (bytes) { - if (bytes) { - char *temp = g_malloc(bytes); - memcpy (temp, buffer, bytes); - list = g_list_prepend(list, temp); - lengths = g_list_prepend(lengths, GINT_TO_POINTER((gint) bytes)); - length += bytes; - } - gnome_vfs_read(handle, buffer, 1024, &bytes); - } - - ret_val = g_new(char, length + 1); - ret_val[length] = 0; - lengths_iterator = lengths; - list_iterator = list; - for ( ; list_iterator; list_iterator = list_iterator->next, lengths_iterator = lengths_iterator->next) { - int this_length = GPOINTER_TO_INT(lengths_iterator->data); - length -= this_length; - memcpy(ret_val + length, list_iterator->data, this_length); - } - gnome_vfs_close(handle); - g_list_foreach(list, (GFunc) g_free, NULL); - g_list_free(list); - g_list_free(lengths); - return ret_val; -} -#endif - -typedef gint (*GtkSignal_INT__INT_INT_POINTER) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gpointer user_data); - -void -e_marshal_INT__INT_INT_POINTER (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_INT__INT_INT_POINTER rfunc; - gint *return_val; - return_val = GTK_RETLOC_INT (args[3]); - rfunc = (GtkSignal_INT__INT_INT_POINTER) func; - *return_val = (*rfunc) (object, - GTK_VALUE_INT (args[0]), - GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - func_data); -} - -typedef void (*GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, - GtkObject *arg1, - gdouble arg2, - gdouble arg3, - gboolean arg4, - gpointer user_data); - -void -e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL rfunc; - rfunc = (GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL) func; - (*rfunc) (object, - GTK_VALUE_OBJECT (args[0]), - GTK_VALUE_DOUBLE (args[1]), - GTK_VALUE_DOUBLE (args[2]), - GTK_VALUE_BOOL (args[3]), - func_data); -} - -typedef gdouble (*GtkSignal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, - GtkObject *arg1, - gdouble arg2, - gdouble arg3, - gboolean arg4, - gpointer user_data); - -void -e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL rfunc; - gdouble *return_val; - return_val = GTK_RETLOC_DOUBLE (args[4]); - rfunc = (GtkSignal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL) func; - *return_val = (*rfunc) (object, - GTK_VALUE_OBJECT (args[0]), - GTK_VALUE_DOUBLE (args[1]), - GTK_VALUE_DOUBLE (args[2]), - GTK_VALUE_BOOL (args[3]), - func_data); -} - -typedef gdouble (*GtkSignal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, - GtkObject *arg1, - gdouble arg2, - gdouble arg3, - gboolean arg4, - gpointer user_data); - -void -e_marshal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL rfunc; - gboolean *return_val; - return_val = GTK_RETLOC_BOOL (args[4]); - rfunc = (GtkSignal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL) func; - *return_val = (*rfunc) (object, - GTK_VALUE_OBJECT (args[0]), - GTK_VALUE_DOUBLE (args[1]), - GTK_VALUE_DOUBLE (args[2]), - GTK_VALUE_BOOL (args[3]), - func_data); -} - -typedef void (*GtkSignal_NONE__INT_INT_POINTER_POINTER_INT_INT) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gpointer arg4, - gint arg5, - gint arg6, - gpointer user_data); -void -e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_NONE__INT_INT_POINTER_POINTER_INT_INT rfunc; - rfunc = (GtkSignal_NONE__INT_INT_POINTER_POINTER_INT_INT) func; - (*rfunc) (object, - GTK_VALUE_INT (args[0]), GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - GTK_VALUE_POINTER (args[3]), - GTK_VALUE_INT (args[4]), GTK_VALUE_INT (args[5]), func_data); -} - -typedef void (*GtkSignal_NONE__INT_INT_POINTER_INT) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gint arg4, gpointer user_data); -void -e_marshal_NONE__INT_INT_POINTER_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_NONE__INT_INT_POINTER_INT rfunc; - rfunc = (GtkSignal_NONE__INT_INT_POINTER_INT) func; - (*rfunc) (object, - GTK_VALUE_INT (args[0]), GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), GTK_VALUE_INT (args[3]), func_data); -} - -typedef gboolean (*GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT) (GtkObject * object, - gint arg1, - gint arg2, - gpointer arg3, - gint arg4, - gint arg5, - gint arg6, - gpointer user_data); -void -e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args) -{ - GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT rfunc; - gboolean *return_val; - return_val = GTK_RETLOC_BOOL (args[6]); - rfunc = (GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT) func; - *return_val = (*rfunc) (object, - GTK_VALUE_INT (args[0]), - GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - GTK_VALUE_INT (args[3]), - GTK_VALUE_INT (args[4]), - GTK_VALUE_INT (args[5]), func_data); -} - -typedef void (*GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT) (GtkObject * - object, - gint arg1, - gint arg2, - gpointer - arg3, - gint arg4, - gint arg5, - gpointer - arg6, - gint arg7, - gint arg8, - gpointer - user_data); -void -e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args) -{ - GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT rfunc; - rfunc = (GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT) func; - (*rfunc) (object, - GTK_VALUE_INT (args[0]), GTK_VALUE_INT (args[1]), - GTK_VALUE_POINTER (args[2]), - GTK_VALUE_INT (args[3]), - GTK_VALUE_INT (args[4]), - GTK_VALUE_POINTER (args[5]), - GTK_VALUE_INT (args[6]), GTK_VALUE_INT (args[7]), func_data); -} - -gchar** -e_strsplit (const gchar *string, - const gchar *delimiter, - gint max_tokens) -{ - GSList *string_list = NULL, *slist; - gchar **str_array, *s; - guint i, n = 1; - - g_return_val_if_fail (string != NULL, NULL); - g_return_val_if_fail (delimiter != NULL, NULL); - - if (max_tokens < 1) - max_tokens = G_MAXINT; - - s = strstr (string, delimiter); - if (s) - { - guint delimiter_len = strlen (delimiter); - - do - { - guint len; - gchar *new_string; - - len = s - string; - new_string = g_new (gchar, len + 1); - strncpy (new_string, string, len); - new_string[len] = 0; - string_list = g_slist_prepend (string_list, new_string); - n++; - string = s + delimiter_len; - s = strstr (string, delimiter); - } - while (--max_tokens && s); - } - - n++; - string_list = g_slist_prepend (string_list, g_strdup (string)); - - str_array = g_new (gchar*, n); - - i = n - 1; - - str_array[i--] = NULL; - for (slist = string_list; slist; slist = slist->next) - str_array[i--] = slist->data; - - g_slist_free (string_list); - - return str_array; -} - -const gchar * -e_strstrcase (const gchar *haystack, const gchar *needle) -{ - /* find the needle in the haystack neglecting case */ - gchar *ptr; - guint len; - - g_return_val_if_fail (haystack != NULL, NULL); - g_return_val_if_fail (needle != NULL, NULL); - - len = strlen(needle); - if (len > strlen(haystack)) - return NULL; - - if (len == 0) - return (char *)haystack; - - for (ptr = (char *)haystack; *(ptr + len - 1) != '\0'; ptr++) - if (!g_strncasecmp(ptr, needle, len)) - return ptr; - - return NULL; -} diff --git a/e-util/e-util.h b/e-util/e-util.h deleted file mode 100644 index 87af6032c2..0000000000 --- a/e-util/e-util.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef _E_UTIL_H_ -#define _E_UTIL_H_ - -#include -#include - -#define E_MAKE_TYPE(l,str,t,ci,i,parent) \ -GtkType l##_get_type(void)\ -{\ - static GtkType type = 0;\ - if (!type){\ - GtkTypeInfo info = {\ - str,\ - sizeof (t),\ - sizeof (t##Class),\ - (GtkClassInitFunc) ci,\ - (GtkObjectInitFunc) i,\ - NULL, /* reserved 1 */\ - NULL, /* reserved 2 */\ - (GtkClassInitFunc) NULL\ - };\ - type = gtk_type_unique (parent, &info);\ - }\ - return type;\ -} - -typedef enum { - E_FOCUS_NONE, - E_FOCUS_CURRENT, - E_FOCUS_START, - E_FOCUS_END -} EFocus; - -int g_str_compare (const void *x, const void *y); -int g_int_compare (const void *x, const void *y); - -char *e_strdup_strip (char *string); - -void e_free_object_list (GList *list); -void e_free_string_list (GList *list); - -char *e_read_file (const char *filename); -gint e_write_file(const char *filename, const char *data, int flags); -#if 0 -char *e_read_uri (const char *uri); -#endif - -gchar **e_strsplit (const gchar *string, - const gchar *delimiter, - gint max_tokens); - -const gchar *e_strstrcase (const gchar *haystack, - const gchar *needle); - -void e_marshal_INT__INT_INT_POINTER (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -void e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -void e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -void e_marshal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -#define e_marshal_NONE__INT_INT_POINTER_POINTER_UINT_UINT e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT -void e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args); - -#define e_marshal_NONE__INT_INT_POINTER_UINT e_marshal_NONE__INT_INT_POINTER_INT -void e_marshal_NONE__INT_INT_POINTER_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -#define e_marshal_BOOL__INT_INT_POINTER_INT_INT_UINT e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT -void e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args); - -#define e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_UINT_UINT e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT -void e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args); - -#endif /* _E_UTIL_H_ */ diff --git a/e-util/e-util.h-29002 b/e-util/e-util.h-29002 deleted file mode 100644 index 87af6032c2..0000000000 --- a/e-util/e-util.h-29002 +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef _E_UTIL_H_ -#define _E_UTIL_H_ - -#include -#include - -#define E_MAKE_TYPE(l,str,t,ci,i,parent) \ -GtkType l##_get_type(void)\ -{\ - static GtkType type = 0;\ - if (!type){\ - GtkTypeInfo info = {\ - str,\ - sizeof (t),\ - sizeof (t##Class),\ - (GtkClassInitFunc) ci,\ - (GtkObjectInitFunc) i,\ - NULL, /* reserved 1 */\ - NULL, /* reserved 2 */\ - (GtkClassInitFunc) NULL\ - };\ - type = gtk_type_unique (parent, &info);\ - }\ - return type;\ -} - -typedef enum { - E_FOCUS_NONE, - E_FOCUS_CURRENT, - E_FOCUS_START, - E_FOCUS_END -} EFocus; - -int g_str_compare (const void *x, const void *y); -int g_int_compare (const void *x, const void *y); - -char *e_strdup_strip (char *string); - -void e_free_object_list (GList *list); -void e_free_string_list (GList *list); - -char *e_read_file (const char *filename); -gint e_write_file(const char *filename, const char *data, int flags); -#if 0 -char *e_read_uri (const char *uri); -#endif - -gchar **e_strsplit (const gchar *string, - const gchar *delimiter, - gint max_tokens); - -const gchar *e_strstrcase (const gchar *haystack, - const gchar *needle); - -void e_marshal_INT__INT_INT_POINTER (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -void e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -void e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -void e_marshal_BOOL__OBJECT_DOUBLE_DOUBLE_BOOL (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -#define e_marshal_NONE__INT_INT_POINTER_POINTER_UINT_UINT e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT -void e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args); - -#define e_marshal_NONE__INT_INT_POINTER_UINT e_marshal_NONE__INT_INT_POINTER_INT -void e_marshal_NONE__INT_INT_POINTER_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, GtkArg * args); - -#define e_marshal_BOOL__INT_INT_POINTER_INT_INT_UINT e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT -void e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args); - -#define e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_UINT_UINT e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT -void e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT (GtkObject * object, - GtkSignalFunc func, - gpointer func_data, - GtkArg * args); - -#endif /* _E_UTIL_H_ */ diff --git a/e-util/e-xml-utils.c b/e-util/e-xml-utils.c deleted file mode 100644 index 89f8591e8a..0000000000 --- a/e-util/e-xml-utils.c +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-xml-utils.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include "e-xml-utils.h" -#include -#include - - -xmlNode *e_xml_get_child_by_name(xmlNode *parent, const xmlChar *child_name) -{ - xmlNode *child; - - g_return_val_if_fail(parent != NULL, NULL); - g_return_val_if_fail(child_name != NULL, NULL); - - for (child = parent->childs; child; child = child->next) { - if ( !xmlStrcmp( child->name, child_name ) ) { - return child; - } - } - return NULL; -} - -/* Returns the first child with the name child_name and the "lang" - * attribute that matches the current LC_MESSAGES, or else, the first - * child with the name child_name and no "lang" attribute. - */ -xmlNode * -e_xml_get_child_by_name_by_lang(xmlNode *parent, const xmlChar *child_name, const char *lang) -{ - xmlNode *child; - /* This is the default version of the string. */ - xmlNode *C = NULL; - - g_return_val_if_fail(parent != NULL, NULL); - g_return_val_if_fail(child_name != NULL, NULL); - - if (lang == NULL) - lang = setlocale(LC_MESSAGES, NULL); - - for (child = parent->childs; child; child = child->next) { - if ( !xmlStrcmp( child->name, child_name ) ) { - char *this_lang = xmlGetProp(child, "lang"); - if ( this_lang == NULL ) { - C = child; - } - else if (!strcmp(this_lang, "lang")) - return child; - } - } - return C; -} - -int -e_xml_get_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name) -{ - xmlChar *prop; - int ret_val = 0; - - g_return_val_if_fail (parent != NULL, 0); - g_return_val_if_fail (prop_name != NULL, 0); - - prop = xmlGetProp(parent, prop_name); - if (prop) { - ret_val = atoi(prop); - xmlFree(prop); - } - return ret_val; -} - -void -e_xml_set_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name, int value) -{ - xmlChar *valuestr; - - g_return_if_fail (parent != NULL); - g_return_if_fail (prop_name != NULL); - - valuestr = g_strdup_printf("%d", value); - xmlSetProp(parent, prop_name, valuestr); - g_free (valuestr); -} - - diff --git a/e-util/e-xml-utils.c-56826 b/e-util/e-xml-utils.c-56826 deleted file mode 100644 index 89f8591e8a..0000000000 --- a/e-util/e-xml-utils.c-56826 +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-xml-utils.c - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include -#include "e-xml-utils.h" -#include -#include - - -xmlNode *e_xml_get_child_by_name(xmlNode *parent, const xmlChar *child_name) -{ - xmlNode *child; - - g_return_val_if_fail(parent != NULL, NULL); - g_return_val_if_fail(child_name != NULL, NULL); - - for (child = parent->childs; child; child = child->next) { - if ( !xmlStrcmp( child->name, child_name ) ) { - return child; - } - } - return NULL; -} - -/* Returns the first child with the name child_name and the "lang" - * attribute that matches the current LC_MESSAGES, or else, the first - * child with the name child_name and no "lang" attribute. - */ -xmlNode * -e_xml_get_child_by_name_by_lang(xmlNode *parent, const xmlChar *child_name, const char *lang) -{ - xmlNode *child; - /* This is the default version of the string. */ - xmlNode *C = NULL; - - g_return_val_if_fail(parent != NULL, NULL); - g_return_val_if_fail(child_name != NULL, NULL); - - if (lang == NULL) - lang = setlocale(LC_MESSAGES, NULL); - - for (child = parent->childs; child; child = child->next) { - if ( !xmlStrcmp( child->name, child_name ) ) { - char *this_lang = xmlGetProp(child, "lang"); - if ( this_lang == NULL ) { - C = child; - } - else if (!strcmp(this_lang, "lang")) - return child; - } - } - return C; -} - -int -e_xml_get_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name) -{ - xmlChar *prop; - int ret_val = 0; - - g_return_val_if_fail (parent != NULL, 0); - g_return_val_if_fail (prop_name != NULL, 0); - - prop = xmlGetProp(parent, prop_name); - if (prop) { - ret_val = atoi(prop); - xmlFree(prop); - } - return ret_val; -} - -void -e_xml_set_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name, int value) -{ - xmlChar *valuestr; - - g_return_if_fail (parent != NULL); - g_return_if_fail (prop_name != NULL); - - valuestr = g_strdup_printf("%d", value); - xmlSetProp(parent, prop_name, valuestr); - g_free (valuestr); -} - - diff --git a/e-util/e-xml-utils.h b/e-util/e-xml-utils.h deleted file mode 100644 index 41b0f0b9d6..0000000000 --- a/e-util/e-xml-utils.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-xml-utils.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __E_XML_UTILS__ -#define __E_XML_UTILS__ - -#include -#include - -xmlNode *e_xml_get_child_by_name(xmlNode *parent, const xmlChar *child_name); -/* lang set to NULL means use the current locale. */ -xmlNode *e_xml_get_child_by_name_by_lang(xmlNode *parent, const xmlChar *child_name, const char *lang); -int e_xml_get_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name); -void e_xml_set_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name, int value); - -#endif /* __E_XML_UTILS__ */ diff --git a/e-util/e-xml-utils.h-82548 b/e-util/e-xml-utils.h-82548 deleted file mode 100644 index 41b0f0b9d6..0000000000 --- a/e-util/e-xml-utils.h-82548 +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * e-xml-utils.h - * Copyright (C) 2000 Helix Code, Inc. - * Author: Chris Lahey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __E_XML_UTILS__ -#define __E_XML_UTILS__ - -#include -#include - -xmlNode *e_xml_get_child_by_name(xmlNode *parent, const xmlChar *child_name); -/* lang set to NULL means use the current locale. */ -xmlNode *e_xml_get_child_by_name_by_lang(xmlNode *parent, const xmlChar *child_name, const char *lang); -int e_xml_get_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name); -void e_xml_set_integer_prop_by_name(xmlNode *parent, const xmlChar *prop_name, int value); - -#endif /* __E_XML_UTILS__ */ diff --git a/e-util/ename/.cvsignore b/e-util/ename/.cvsignore deleted file mode 100644 index 4f8c173841..0000000000 --- a/e-util/ename/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -*.lo -*.la -test-ename-western -test-ename-western-gtk diff --git a/e-util/ename/Makefile.am b/e-util/ename/Makefile.am deleted file mode 100644 index 25a67a929c..0000000000 --- a/e-util/ename/Makefile.am +++ /dev/null @@ -1,50 +0,0 @@ -INCLUDES = \ - -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ - -DG_LOG_DOMAIN=\"EName\" \ - -I$(srcdir) \ - -I$(srcdir)/.. \ - -I$(top_srcdir) \ - -I. \ - -I.. \ - -I$(top_builddir) \ - -I$(includedir) \ - $(GNOME_INCLUDEDIR) - -gnome_libs = \ - $(BONOBO_GNOME_LIBS) \ - $(INTLLIBS) - -ename_libs = \ - libename.la \ - $(gnome_libs) - -lib_LTLIBRARIES = libename.la - -libename_la_SOURCES = \ - e-name-western.c - -libenameincludedir = $(includedir)/ename - -libenameinclude_HEADERS = \ - e-name-western-tables.h \ - e-name-western.h - - -noinst_LTLIBRARIES = libename-static.la -libename_static_la_SOURCES = $(libename_la_SOURCES) -libename_static_la_LDFLAGS = --all-static - - -noinst_PROGRAMS = \ - test-ename-western \ - test-ename-western-gtk - -test_ename_western_SOURCES = \ - test-ename-western.c - -test_ename_western_LDADD = $(ename_libs) - -test_ename_western_gtk_SOURCES = \ - test-ename-western-gtk.c - -test_ename_western_gtk_LDADD = $(ename_libs) $(gnome_libs) diff --git a/e-util/ename/TODO b/e-util/ename/TODO deleted file mode 100644 index 669661eea7..0000000000 --- a/e-util/ename/TODO +++ /dev/null @@ -1,2 +0,0 @@ -* Support other naming systems. -* Handle misspelled suffixes better. diff --git a/e-util/ename/e-name-western-tables.h b/e-util/ename/e-name-western-tables.h deleted file mode 100644 index bb29cc5292..0000000000 --- a/e-util/ename/e-name-western-tables.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef __E_NAME_WESTERN_TABLES_H__ -#define __E_NAME_WESTERN_TABLES_H__ - -char *e_name_western_pfx_table[] = { - - /* - * English. - */ - "mister", "miss.", "mr.", "mrs.", "ms.", - "miss", "mr", "mrs", "ms", "sir", - "professor", "prof.", "dr", "dr.", "doctor", - "reverend", "president", "judge", "senator", - "congressman", "congresswoman", "commander", - "lieutenant", "colonel", "major", "general", - - "the honorable", "the reverend", "his holiness", - "his eminence", - - - /* - * French. - */ - "monsieur", "mr.", "mademoiselle", "melle.", - "madame", "mme.", "professeur", - - /* - * Spanish. - */ - "senor", "senora", "senorita", - - NULL}; - -char *e_name_western_sfx_table[] = { - - /* - * English. - */ - "junior", "senior", "jr", "sr", "I", "II", "III", "IV", "V", - "phd", "ms", "md", "esq", "esq.", "esquire", - - NULL}; - -char *e_name_western_twopart_sfx_table[] = { - - /* - * English. - */ - "the first", "the second", "the third", - - NULL}; - -char *e_name_western_complex_last_table[] = {"van", "von", "de", NULL}; - -#endif /* ! __E_NAME_WESTERN_TABLES_H__ */ diff --git a/e-util/ename/e-name-western.c b/e-util/ename/e-name-western.c deleted file mode 100644 index 698cceec0b..0000000000 --- a/e-util/ename/e-name-western.c +++ /dev/null @@ -1,868 +0,0 @@ -/* - * A simple Western name parser. - * - * Jamie, do you know anything about name parsing? - * Are you going down that rat hole? Bring a flashlight. - * - * Author: - * Nat Friedman (nat@helixcode.com) - * - * Copyright 1999, Helix Code, Inc. - */ - -#include -#include -#include - -#include -#include - -typedef struct { - int prefix_idx; - int first_idx; - int middle_idx; - int nick_idx; - int last_idx; - int suffix_idx; -} ENameWesternIdxs; - -static int -e_name_western_str_count_words (char *str) -{ - int word_count; - char *p; - - word_count = 0; - - for (p = str; p != NULL; p = strchr (p, ' ')) { - word_count ++; - p ++; - } - - return word_count; -} - -static void -e_name_western_cleanup_string (char **str) -{ - char *newstr; - char *p; - - if (*str == NULL) - return; - - /* skip any spaces and commas at the start of the string */ - p = *str; - while (isspace (*p) || *p == ',') - p ++; - - /* make the copy we're going to return */ - newstr = g_strdup (p); - - if ( strlen(newstr) > 0) { - /* now search from the back, skipping over any spaces and commas */ - p = newstr + strlen (newstr) - 1; - while (isspace (*p) || *p == ',') - p --; - /* advance p to after the character that caused us to exit the - previous loop, and end the string. */ - if ((! isspace (*p)) && *p != ',') - p ++; - *p = '\0'; - } - - g_free (*str); - *str = newstr; -} - -static char * -e_name_western_get_words_at_idx (char *str, int idx, int num_words) -{ - char *words; - char *p; - int word_count; - int words_len; - - /* - * Walk to the end of the words. - */ - word_count = 0; - p = str + idx; - while (word_count < num_words && *p != '\0') { - while (! isspace (*p) && *p != '\0') - p ++; - - while (isspace (*p) && *p != '\0') - p ++; - - word_count ++; - } - - words_len = p - str - idx - 1; - - if (*p == '\0') - words_len ++; - - words = g_malloc0 (1 + words_len); - strncpy (words, str + idx, words_len); - - return words; -} - -/* - * What the fuck is wrong with glib's MAX macro. - */ -static int -e_name_western_max (const int a, const int b) -{ - if (a > b) - return a; - - return b; -} - -static gboolean -e_name_western_word_is_suffix (char *word) -{ - int i; - - for (i = 0; e_name_western_sfx_table [i] != NULL; i ++) { - if (g_strcasecmp (word, e_name_western_sfx_table [i])) - continue; - - return TRUE; - } - - return FALSE; -} - -static char * -e_name_western_get_one_prefix_at_str (char *str) -{ - char *word; - int i; - - /* - * Check for prefixes from our table. - */ - for (i = 0; e_name_western_pfx_table [i] != NULL; i ++) { - int pfx_words; - char *words; - - pfx_words = e_name_western_str_count_words (e_name_western_pfx_table [i]); - words = e_name_western_get_words_at_idx (str, 0, pfx_words); - - if (! g_strcasecmp (words, e_name_western_pfx_table [i])) - return words; - - g_free (words); - } - - /* - * Check for prefixes we don't know about. These are always a - * sequence of more than one letters followed by a period. - */ - word = e_name_western_get_words_at_idx (str, 0, 1); - - if (strlen (word) > 2 && isalpha (word [0]) && isalpha (word [1]) && - word [strlen (word) - 1] == '.') - return word; - - g_free (word); - - return NULL; -} - -static char * -e_name_western_get_prefix_at_str (char *str) -{ - char *pfx; - char *pfx1; - char *pfx2; - char *p; - - /* Get the first prefix. */ - pfx1 = e_name_western_get_one_prefix_at_str (str); - - if (pfx1 == NULL) - return NULL; - - /* Check for a second prefix. */ - p = str + strlen (pfx1); - while (isspace (*p) && *p != '\0') - p ++; - - pfx2 = e_name_western_get_one_prefix_at_str (p); - - if (pfx2 != NULL) { - int pfx_len; - - pfx_len = (p + strlen (pfx2)) - str; - pfx = g_malloc0 (pfx_len + 1); - strncpy (pfx, str, pfx_len); - } else { - pfx = g_strdup (pfx1); - } - - g_free (pfx1); - g_free (pfx2); - - return pfx; -} - -static void -e_name_western_extract_prefix (ENameWestern *name, ENameWesternIdxs *idxs) -{ - char *pfx; - - pfx = e_name_western_get_prefix_at_str (name->full); - - if (pfx == NULL) - return; - - idxs->prefix_idx = 0; - name->prefix = pfx; -} - -static gboolean -e_name_western_is_complex_last_beginning (char *word) -{ - int i; - - for (i = 0; e_name_western_complex_last_table [i] != NULL; i ++) { - - if (! g_strcasecmp ( - word, e_name_western_complex_last_table [i])) - return TRUE; - } - - return FALSE; -} - -static void -e_name_western_extract_first (ENameWestern *name, ENameWesternIdxs *idxs) -{ - /* - * If there's a prefix, then the first name is right after it. - */ - if (idxs->prefix_idx != -1) { - int first_idx; - char *p; - - first_idx = idxs->prefix_idx + strlen (name->prefix); - - /* Skip past white space. */ - p = name->full + first_idx; - while (isspace (*p) && *p != '\0') - p++; - - if (*p == '\0') - return; - - idxs->first_idx = p - name->full; - name->first = e_name_western_get_words_at_idx ( - name->full, idxs->first_idx, 1); - - } else { - - /* - * Otherwise, the first name is probably the first string. - */ - idxs->first_idx = 0; - name->first = e_name_western_get_words_at_idx ( - name->full, idxs->first_idx, 1); - } - - /* - * Check that we didn't just assign the beginning of a - * compound last name to the first name. - */ - if (name->first != NULL) { - if (e_name_western_is_complex_last_beginning (name->first)) { - g_free (name->first); - name->first = NULL; - idxs->first_idx = -1; - } - } -} - -static void -e_name_western_extract_middle (ENameWestern *name, ENameWesternIdxs *idxs) -{ - char *word; - int middle_idx; - - /* - * Middle names can only exist if you have a first name. - */ - if (idxs->first_idx == -1) - return; - - middle_idx = idxs->first_idx + strlen (name->first) + 1; - - if (middle_idx > strlen (name->full)) - return; - - /* - * Search for the first space (or the terminating \0) - */ - while (isspace (name->full [middle_idx]) && - name->full [middle_idx] != '\0') - middle_idx ++; - - if (name->full [middle_idx] == '\0') - return; - - /* - * Skip past the nickname, if it's there. - */ - if (name->full [middle_idx] == '\"') { - if (idxs->nick_idx == -1) - return; - - middle_idx = idxs->nick_idx + strlen (name->nick) + 1; - - while (isspace (name->full [middle_idx]) && - name->full [middle_idx] != '\0') - middle_idx ++; - - if (name->full [middle_idx] == '\0') - return; - } - - /* - * Make sure this isn't the beginning of a complex last name. - */ - word = e_name_western_get_words_at_idx (name->full, middle_idx, 1); - if (e_name_western_is_complex_last_beginning (word)) { - g_free (word); - return; - } - - /* - * Make sure this isn't a suffix. - */ - e_name_western_cleanup_string (& word); - if (e_name_western_word_is_suffix (word)) { - g_free (word); - return; - } - - /* - * Make sure we didn't just grab a cute nickname. - */ - if (word [0] == '\"') { - g_free (word); - return; - } - - idxs->middle_idx = middle_idx; - name->middle = word; -} - -static void -e_name_western_extract_nickname (ENameWestern *name, ENameWesternIdxs *idxs) -{ - int idx; - int start_idx; - char *str; - - if (idxs->first_idx == -1) - return; - - if (idxs->middle_idx > idxs->first_idx) - idx = idxs->middle_idx + strlen (name->middle); - else - idx = idxs->first_idx + strlen (name->first); - - while (name->full [idx] != '\"' && name->full [idx] != '\0') - idx ++; - - if (name->full [idx] != '\"') - return; - - start_idx = idx; - - /* - * Advance to the next double quote. - */ - idx ++; - - while (name->full [idx] != '\"' && name->full [idx] != '\0') - idx ++; - - if (name->full [idx] == '\0') - return; - - str = g_malloc0 (idx - start_idx + 2); - strncpy (str, name->full + start_idx, idx - start_idx + 1); - - name->nick = str; - idxs->nick_idx = start_idx; -} - -static int -e_name_western_last_get_max_idx (ENameWestern *name, ENameWesternIdxs *idxs) -{ - int max_idx = -1; - - if (name->prefix != NULL) - max_idx = e_name_western_max ( - max_idx, idxs->prefix_idx + strlen (name->prefix)); - - if (name->first != NULL) - max_idx = e_name_western_max ( - max_idx, idxs->first_idx + strlen (name->first)); - - if (name->middle != NULL) - max_idx = e_name_western_max ( - max_idx, idxs->middle_idx + strlen (name->middle)); - - if (name->nick != NULL) - max_idx = e_name_western_max ( - max_idx, idxs->nick_idx + strlen (name->nick)); - - return max_idx; -} - -static void -e_name_western_extract_last (ENameWestern *name, ENameWesternIdxs *idxs) -{ - char *word; - int idx = -1; - - idx = e_name_western_last_get_max_idx (name, idxs); - - /* - * In the case where there is no preceding name element, the - * name is either just a first name ("Nat", "John"), is a - * single-element name ("Cher", which we treat as a first - * name), or is just a last name. The only time we can - * differentiate a last name alone from a single-element name - * or a first name alone is if it's a complex last name ("de - * Icaza", "van Josephsen"). So if there is no preceding name - * element, we check to see whether or not the first part of - * the name is the beginning of a complex name. If it is, - * we subsume the entire string. If we accidentally subsume - * the suffix, this will get fixed in the fixup routine. - */ - if (idx == -1) { - word = e_name_western_get_words_at_idx (name->full, 0, 1); - if (! e_name_western_is_complex_last_beginning (word)) { - g_free (word); - return; - } - - name->last = g_strdup (name->full); - idxs->last_idx = 0; - return; - } - - /* Skip past the white space. */ - while (isspace (name->full [idx]) && name->full [idx] != '\0') - idx ++; - - if (name->full [idx] == '\0') - return; - - word = e_name_western_get_words_at_idx (name->full, idx, 1); - e_name_western_cleanup_string (& word); - if (e_name_western_word_is_suffix (word)) { - g_free (word); - return; - } - g_free (word); - - /* - * Subsume the rest of the string into the last name. If we - * accidentally include the prefix, it will get fixed later. - * This is the only way to handle things like "Miguel de Icaza - * Amozorrutia" without dropping data and forcing the user - * to retype it. - */ - name->last = g_strdup (name->full + idx); - idxs->last_idx = idx; -} - -static char * -e_name_western_get_preceding_word (char *str, int idx) -{ - int word_len; - char *word; - char *p; - - p = str + idx; - - while (isspace (*p) && p > str) - p --; - - while (! isspace (*p) && p > str) - p --; - - if (isspace (*p)) - p ++; - - word_len = (str + idx) - p; - word = g_malloc0 (word_len + 1); - if (word_len > 0) - strncpy (word, p, word_len); - - return word; -} - -static char * -e_name_western_get_suffix_at_str_end (char *str) -{ - char *suffix; - char *p; - - /* - * Walk backwards till we reach the beginning of the - * (potentially-comma-separated) list of suffixes. - */ - p = str + strlen (str); - while (1) { - char *nextp; - char *word; - - word = e_name_western_get_preceding_word (str, p - str); - nextp = p - strlen (word) - 1; - - e_name_western_cleanup_string (& word); - - if (e_name_western_word_is_suffix (word)) { - p = nextp; - g_free (word); - } else { - g_free (word); - break; - } - } - - if (p == (str + strlen (str))) - return NULL; - - suffix = g_strdup (p); - e_name_western_cleanup_string (& suffix); - - if (strlen (suffix) == 0) { - g_free (suffix); - return NULL; - } - - return suffix; -} - -static void -e_name_western_extract_suffix (ENameWestern *name, ENameWesternIdxs *idxs) -{ - - name->suffix = e_name_western_get_suffix_at_str_end (name->full); - - if (name->suffix == NULL) - return; - - idxs->suffix_idx = strlen (name->full) - strlen (name->suffix); -} - -static gboolean -e_name_western_detect_backwards (ENameWestern *name, ENameWesternIdxs *idxs) -{ - char *comma; - char *word; - - comma = strchr (name->full, ','); - - if (comma == NULL) - return FALSE; - - /* - * If there's a comma, we need to detect whether it's - * separating the last name from the first or just separating - * suffixes. So we grab the word which comes before the - * comma and check if it's a suffix. - */ - word = e_name_western_get_preceding_word (name->full, comma - name->full); - - if (e_name_western_word_is_suffix (word)) { - g_free (word); - return FALSE; - } - - g_free (word); - return TRUE; -} - -static void -e_name_western_reorder_asshole (ENameWestern *name, ENameWesternIdxs *idxs) -{ - char *prefix; - char *last; - char *suffix; - char *firstmidnick; - char *newfull; - - char *comma; - char *p; - - if (! e_name_western_detect_backwards (name, idxs)) - return; - - /* - * Convert - * , - * to - * - */ - - /* - * Grab the prefix from the beginning. - */ - prefix = e_name_western_get_prefix_at_str (name->full); - - /* - * Everything from the end of the prefix to the comma is the - * last name. - */ - comma = strchr (name->full, ','); - if (comma == NULL) - return; - - p = name->full + (prefix == NULL ? 0 : strlen (prefix)); - - while (isspace (*p) && *p != '\0') - p ++; - - last = g_malloc0 (comma - p + 1); - strncpy (last, p, comma - p); - - /* - * Get the suffix off the end. - */ - suffix = e_name_western_get_suffix_at_str_end (name->full); - - /* - * Firstmidnick is everything from the comma to the beginning - * of the suffix. - */ - p = comma + 1; - - while (isspace (*p) && *p != '\0') - p ++; - - if (suffix != NULL) { - char *q; - - /* - * Point q at the beginning of the suffix. - */ - q = name->full + strlen (name->full) - strlen (suffix) - 1; - - /* - * Walk backwards until we hit the space which - * separates the suffix from firstmidnick. - */ - while (! isspace (*q) && q > comma) - q --; - - if ((q - p + 1) > 0) { - firstmidnick = g_malloc0 (q - p + 1); - strncpy (firstmidnick, p, q - p); - } else - firstmidnick = NULL; - } else { - firstmidnick = g_strdup (p); - } - - /* - * Create our new reordered version of the name. - */ -#define NULLSTR(a) ((a) == NULL ? "" : (a)) - newfull = g_strdup_printf ("%s %s %s %s", NULLSTR (prefix), NULLSTR (firstmidnick), - NULLSTR (last), NULLSTR (suffix)); - g_strstrip (newfull); - g_free (name->full); - name->full = newfull; - - - g_free (prefix); - g_free (firstmidnick); - g_free (last); - g_free (suffix); -} - -static void -e_name_western_zap_nil (char **str, int *idx) -{ - if (*str == NULL) - return; - - if (strlen (*str) != 0) - return; - - *idx = -1; - g_free (*str); - *str = NULL; -} - -static void -e_name_western_fixup (ENameWestern *name, ENameWesternIdxs *idxs) -{ - /* - * The middle and last names cannot be the same. - */ - if (idxs->middle_idx != -1 && idxs->middle_idx == idxs->last_idx) { - idxs->middle_idx = -1; - g_free (name->middle); - name->middle = NULL; - } - - /* - * If we have a middle name and no last name, then we mistook - * the last name for the middle name. - */ - if (idxs->last_idx == -1 && idxs->middle_idx != -1) { - idxs->last_idx = idxs->middle_idx; - name->last = name->middle; - name->middle = NULL; - idxs->middle_idx = -1; - } - - /* - * Check to see if we accidentally included the suffix in the - * last name. - */ - if (idxs->suffix_idx != -1 && idxs->last_idx != -1 && - idxs->suffix_idx < (idxs->last_idx + strlen (name->last))) { - char *sfx; - - sfx = name->last + (idxs->suffix_idx - idxs->last_idx); - if (sfx != NULL) { - char *newlast; - char *p; - - p = sfx - 1; - while (isspace (*p) && p > name->last) - p --; - p ++; - - newlast = g_malloc0 (p - name->last + 1); - strncpy (newlast, name->last, p - name->last); - g_free (name->last); - name->last = newlast; - } - } - - /* - * If we have a prefix and a first name, but no last name, - * then we need to assign the first name to the last name. - * This way we get things like "Mr Friedman" correctly. - */ - if (idxs->first_idx != -1 && idxs->prefix_idx != -1 && - idxs->last_idx == -1) { - name->last = name->first; - idxs->last_idx = idxs->first_idx; - idxs->first_idx = -1; - name->first = NULL; - } - - /* - * Remove stray spaces and commas (although there don't seem - * to be any in the test cases, they might show up later). - */ - e_name_western_cleanup_string (& name->prefix); - e_name_western_cleanup_string (& name->first); - e_name_western_cleanup_string (& name->middle); - e_name_western_cleanup_string (& name->nick); - e_name_western_cleanup_string (& name->last); - e_name_western_cleanup_string (& name->suffix); - - /* - * Make zero-length strings just NULL. - */ - e_name_western_zap_nil (& name->prefix, & idxs->prefix_idx); - e_name_western_zap_nil (& name->first, & idxs->first_idx); - e_name_western_zap_nil (& name->middle, & idxs->middle_idx); - e_name_western_zap_nil (& name->nick, & idxs->nick_idx); - e_name_western_zap_nil (& name->last, & idxs->last_idx); - e_name_western_zap_nil (& name->suffix, & idxs->suffix_idx); -} - -/** - * e_name_western_western_parse_fullname: - * @full_name: A string containing a Western name. - * - * Parses @full_name and returns an #ENameWestern object filled with - * the component parts of the name. - */ -ENameWestern * -e_name_western_parse (const char *full_name) -{ - ENameWesternIdxs *idxs; - ENameWestern *wname; - - wname = g_new0 (ENameWestern, 1); - - wname->full = g_strdup (full_name); - - idxs = g_new0 (ENameWesternIdxs, 1); - - idxs->prefix_idx = -1; - idxs->first_idx = -1; - idxs->middle_idx = -1; - idxs->nick_idx = -1; - idxs->last_idx = -1; - idxs->suffix_idx = -1; - - /* - * An extremely simple algorithm. - * - * The goal here is to get it right 95% of the time for - * Western names. - * - * First we check to see if this is an ass-backwards name - * ("Prefix Last, First Middle Suffix"). These names really - * suck (imagine "Dr von Johnson, Albert Roderick Jr"), so - * we reorder them first and then parse them. - * - * Next, we grab the most obvious assignments for the various - * parts of the name. Once this is done, we check for stupid - * errors and fix them up. - */ - e_name_western_reorder_asshole (wname, idxs); - - e_name_western_extract_prefix (wname, idxs); - e_name_western_extract_first (wname, idxs); - e_name_western_extract_nickname (wname, idxs); - e_name_western_extract_middle (wname, idxs); - e_name_western_extract_last (wname, idxs); - e_name_western_extract_suffix (wname, idxs); - - e_name_western_fixup (wname, idxs); - - g_free (idxs); - - return wname; -} - -/** - * e_name_western_free: - * @name: An ENameWestern object which needs to be freed. - * - * Deep-frees @name - */ -void -e_name_western_free (ENameWestern *w) -{ - - g_free (w->prefix); - g_free (w->first); - g_free (w->middle); - g_free (w->nick); - g_free (w->last); - g_free (w->suffix); - - g_free (w->full); - - g_free (w); -} diff --git a/e-util/ename/e-name-western.h b/e-util/ename/e-name-western.h deleted file mode 100644 index fa5bac494c..0000000000 --- a/e-util/ename/e-name-western.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __E_NAME_WESTERN_H__ -#define __E_NAME_WESTERN_H__ - -typedef struct { - - /* Public */ - char *prefix; - char *first; - char *middle; - char *nick; - char *last; - char *suffix; - - /* Private */ - char *full; -} ENameWestern; - -ENameWestern *e_name_western_parse (const char *full_name); -void e_name_western_free (ENameWestern *w); - -#endif /* ! __E_NAME_WESTERN_H__ */ diff --git a/e-util/ename/test-ename-western-gtk.c b/e-util/ename/test-ename-western-gtk.c deleted file mode 100644 index 17daf42b30..0000000000 --- a/e-util/ename/test-ename-western-gtk.c +++ /dev/null @@ -1,148 +0,0 @@ -#include -#include - -ENameWestern *name; -GtkWidget *full; -GtkWidget *prefix; -GtkWidget *first; -GtkWidget *middle; -GtkWidget *nick; -GtkWidget *last; -GtkWidget *suffix; - -static void -fill_entries (void) -{ - -#define SET(a,b) (gtk_entry_set_text (GTK_ENTRY (a), (b) == NULL ? "" : (b))) - SET(prefix, name->prefix); - SET(first, name->first); - SET(middle, name->middle); - SET(nick, name->nick); - SET(last, name->last); - SET(suffix, name->suffix); -} - -static void -full_changed_cb (GtkEntry *fulle) -{ - e_name_western_free (name); - name = e_name_western_parse (gtk_entry_get_text (fulle)); - fill_entries (); -} - -static void -create_window (void) -{ - GtkWidget *app; - GtkTable *table; - - GtkWidget *prefix_label; - GtkWidget *first_label; - GtkWidget *middle_label; - GtkWidget *nick_label; - GtkWidget *last_label; - GtkWidget *suffix_label; - - app = gnome_app_new ("test", "Evolution Western Name Parser"); - - table = GTK_TABLE (gtk_table_new (3, 6, FALSE)); - - full = gtk_entry_new (); - prefix = gtk_entry_new (); - first = gtk_entry_new (); - middle = gtk_entry_new (); - nick = gtk_entry_new (); - last = gtk_entry_new (); - suffix = gtk_entry_new (); - - gtk_widget_set_usize (prefix, 100, 0); - gtk_widget_set_usize (first, 100, 0); - gtk_widget_set_usize (middle, 100, 0); - gtk_widget_set_usize (nick, 100, 0); - gtk_widget_set_usize (last, 100, 0); - gtk_widget_set_usize (suffix, 100, 0); - - gtk_table_attach (table, full, 0, 6, 0, 1, - GTK_EXPAND | GTK_FILL, 0, - 0, 0); - - gtk_table_attach (table, prefix, 0, 1, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, first, 1, 2, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, middle, 2, 3, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, nick, 3, 4, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, last, 4, 5, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, suffix, 5, 6, 1, 2, - GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, - 0, 0); - - prefix_label = gtk_label_new ("Prefix"); - first_label = gtk_label_new ("First"); - middle_label = gtk_label_new ("Middle"); - nick_label = gtk_label_new ("Nick"); - last_label = gtk_label_new ("Last"); - suffix_label = gtk_label_new ("Suffix"); - - gtk_table_attach (table, prefix_label, 0, 1, 2, 3, - GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, first_label, 1, 2, 2, 3, - GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, middle_label, 2, 3, 2, 3, - GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, nick_label, 3, 4, 2, 3, - GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, last_label, 4, 5, 2, 3, - GTK_SHRINK, 0, - 0, 0); - - gtk_table_attach (table, suffix_label, 5, 6, 2, 3, - GTK_SHRINK, 0, - 0, 0); - - gnome_app_set_contents (GNOME_APP (app), GTK_WIDGET (table)); - - gtk_widget_show_all (app); - - gtk_entry_set_text (GTK_ENTRY (full), - "The Honorable Doctor van Jacobsen, Albert Roderick \"The Clenched Fist\" Jr, MD, PhD, Esquire"); - - name = e_name_western_parse ("The Honorable Doctor van Jacobsen, Albert Roderick \"The Clenched Fist\" Jr, MD, PhD, Esquire"); - fill_entries (); - - gtk_signal_connect (GTK_OBJECT (full), "changed", full_changed_cb, NULL); -} - -int -main (int argc, char **argv) -{ - gnome_init ("Test EName", "Test EName", argc, argv); - - create_window (); - - gtk_main (); - - return 0; -} diff --git a/e-util/ename/test-ename-western.c b/e-util/ename/test-ename-western.c deleted file mode 100644 index 6d3beaf16f..0000000000 --- a/e-util/ename/test-ename-western.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include - -#include - -static void -do_name (char *n) -{ - ENameWestern *wname; - - wname = e_name_western_parse (n); - - printf ("Full Name: [%s]\n", n); - - printf ("Prefix: [%s]\n", wname->prefix); - printf ("First: [%s]\n", wname->first); - printf ("Middle: [%s]\n", wname->middle); - printf ("Nick: [%s]\n", wname->nick); - printf ("Last: [%s]\n", wname->last); - printf ("Suffix: [%s]\n", wname->suffix); - - printf ("\n"); - - e_name_western_free (wname); -} - -int -main (int argc, char **argv) -{ - if (argc == 2) { - while (! feof (stdin)) { - char s[256]; - - if (fgets (s, sizeof (s), stdin) == NULL) - return 0; - - g_strstrip (s); - - do_name (s); - } - - return 0; - } - - do_name ("Nat"); - do_name ("Karl Anders Carlsson"); - do_name ("Miguel de Icaza Amozorrutia"); - do_name ("The Honorable Doctor de Icaza, Miguel \"Sparky\" Junior, PhD, MD"); - do_name ("Nat Friedman MD, Phd"); - do_name ("Nat Friedman PhD"); - do_name ("Friedman, Nat"); - do_name ("Miguel de Icaza Esquire"); - do_name ("Dr Miguel \"Sparky\" de Icaza"); - do_name ("Robert H.B. Netzer"); - do_name ("W. Richard Stevens"); - do_name ("Nat Friedman"); - do_name ("N. Friedman"); - do_name ("Miguel de Icaza"); - do_name ("Drew Johnson"); - do_name ("President Bill \"Slick Willy\" Clinton"); - do_name ("The Honorable Mark J. Einstein Jr"); - do_name ("Friedman, Nat"); - do_name ("de Icaza, Miguel"); - do_name ("Mr de Icaza, Miguel"); - do_name ("Smith, John Jr"); - do_name ("Nick Glennie-Smith"); - do_name ("Dr von Johnson, Albert Roderick Jr"); - - return 0; -} diff --git a/evolution.desktop b/evolution.desktop deleted file mode 100644 index 238b50c85d..0000000000 --- a/evolution.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Name=Evolution -Name[sl]=Evolucija -Name[tr]=Evolution -Comment=The Evolution groupware suite -Comment[sl]=Programje za delo v skupini Evolucija -Comment[tr]=Evolution kitlesel iþlemler uygulamasý -Exec=evolution -Icon=evolution.png -Terminal=0 -Type=Application diff --git a/evolution.png b/evolution.png deleted file mode 100644 index 3b0f90b292..0000000000 Binary files a/evolution.png and /dev/null differ diff --git a/evolution.spec.in b/evolution.spec.in deleted file mode 100644 index 38f8d855f9..0000000000 --- a/evolution.spec.in +++ /dev/null @@ -1,124 +0,0 @@ -# Note this is NOT a relocatable thing :) -%define name evolution -%define ver @VERSION@ -%define RELEASE 1 -%define rel %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE} -%define prefix /usr -%define sysconfdir /etc - -Name: %name -Summary: Integrated GNOME mail client, calendar and address book. -Version: %ver -Release: %rel -Copyright: GPL -Group: System Environment/Libraries -Source: %{name}-%{ver}.tar.gz -URL: http://www.gnome.org/ -BuildRoot: /var/tmp/%{name}-%{ver}-root -Docdir: %{prefix}/doc - -%description - -%package devel -Summary: Libraries and include files for developing Evolution components -Group: Development/Libraries -Requires: %name = %{PACKAGE_VERSION} -Obsoletes: %{name}-devel - -%description devel -This package provides the necessary development libraries and include -files to allow you to develop evolution components. - -%changelog -* Sun May 21 2000 Ross Golder -- created spec file - -%prep -%setup - -%build -%ifarch alpha - MYARCH_FLAGS="--host=alpha-redhat-linux" -%endif - -LC_ALL="" -LINGUAS="" -LANG="" -export LC_ALL LINGUAS LANG - -CFLAGS="$RPM_OPT_FLAGS" ./configure $MYARCH_FLAGS --prefix=%{prefix} \ - --sysconfdir=%{sysconfdir} - -if [ "$SMP" != "" ]; then - (make "MAKE=make -k -j $SMP"; exit 0) - make -else - make -fi - -%install -[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT - -make prefix=$RPM_BUILD_ROOT%{prefix} sysconfdir=$RPM_BUILD_ROOT%{sysconfdir} install - -for FILE in "$RPM_BUILD_ROOT/bin/*"; do - file "$FILE" | grep -q not\ stripped && strip $FILE -done - -%clean -[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf $RPM_BUILD_ROOT - -%post -if ! grep %{prefix}/lib /etc/ld.so.conf > /dev/null ; then - echo "%{prefix}/lib" >> /etc/ld.so.conf -fi - -/sbin/ldconfig - -%postun -p /sbin/ldconfig - -%files -%defattr(0555, bin, bin) - -%doc AUTHORS COPYING ChangeLog NEWS README -%{prefix}/bin/evolution -%{prefix}/bin/evolution-mail -%{prefix}/bin/evolution-addressbook -%{prefix}/bin/evolution-calendar -%{prefix}/bin/wombat -%{prefix}/bin/killev -%{prefix}/lib/lib*.so.* -%{prefix}/lib/evolution/camel-providers/*/lib*.so.* -#%{prefix}/lib/evolution/camel-providers/*/*.url -%{prefix}/share/evolution/default_user/local/* - -%defattr(0644, bin, bin) -%{prefix}/share/evolution/glade/*.glade -%{prefix}/share/evolution/filtertypes.xml -%{prefix}/share/evolution/default_user/shortcuts.xml - -%defattr (0444, bin, bin) -%{prefix}/share/locale/*/LC_MESSAGES/* -%{prefix}/share/gnome/help/gnomecal/* -%{prefix}/share/images/evolution/*.png -%{sysconfdir}/CORBA/servers/* - -%files devel - -%defattr(0555, bin, bin) -%{prefix}/lib/*.a -%{prefix}/lib/*.so -%{prefix}/lib/*.la -%{prefix}/lib/evolution/camel-providers/*/*.a -%{prefix}/lib/evolution/camel-providers/*/*.so -%{prefix}/lib/evolution/camel-providers/*/*.la - -%defattr(0444, bin, bin) -%{prefix}/include/*.h -%{prefix}/include/camel/*.h -%{prefix}/include/composer/*.h -%{prefix}/include/ename/*.h -%{prefix}/include/evolution/ebook/*.h -%{prefix}/include/evolution/cal-util/*.h -%{prefix}/include/evolution/cal-client/*.h -%{prefix}/share/idl/*.idl diff --git a/filter/.cvsignore b/filter/.cvsignore deleted file mode 100644 index 7c13af9a14..0000000000 --- a/filter/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -*.la -*.lo -.libs -.deps -.pure -Makefile -Makefile.in -filter-driver -filter-editor diff --git a/filter/ChangeLog b/filter/ChangeLog deleted file mode 100644 index 39ff8bf6f7..0000000000 --- a/filter/ChangeLog +++ /dev/null @@ -1,647 +0,0 @@ -2000-08-14 Ettore Perazzoli - - * vfolder-editor.c (rule_add): Add translation marks and use stock - buttons. - (rule_edit): Likewise. - - * score-editor.c (rule_add): Add translation marks and use stock - buttons. - (rule_edit): Likewise. - - * rule-context.c (rule_context_add_rule_gui): Add translation - marks and use stock buttons. - - * filter-part.c (main): Add translation marks and use - stock buttons. - - * filter-folder.c (button_clicked): Add translation marks and use - stock buttons. - - * filter-editor.c (rule_add): Add translation marks and use stock - buttons. - (rule_edit): Likewise. - - * filter-rule.c (get_widget): Add translation marks. - - * filter-filter.c (get_widget): Add translation marks. Add - padding to make it look like the buttons in `filter-rule.c'. - -2000-08-17 Peter Williams - - Implement filtering on demand. - - * rule-context.h: Add a new callback to rule_context_load - that allows the caller to hook on-demand rules into its UI. - - * rule-context.c (rule_context_load): Changed to pass the - extra parameters to load(). - (load): If the rule is successfully loaded, call the provided - callback so that the UI can be updated. - - * filter-editor.c (rule_add): Set the source of the new filter. - (rule_edit): Use the new rule_context_get_rank_rule_with_source() - so that we don't get a bad index into the GtkList. - (rule_delete): Same as above. - (rule_up): Same as above. - (rule_down): Same as above. - (select_source): New function. When the user changes the - dropdown list to select a new source type, repopulate the - list with rules of the appropriate type. - (filter_editor_construct): Code moved from here into - select_source(). Hook up all the elements of the source optionmenu - to callbacks to select_source(). - - * filter-rule.c (xml_encode): Save the rule's source type. - (xml_decode): Load it. Default to 'incoming' if unspecified. - - * filter-rule.h: New enumeration, _filter_source_t, the - specifies the rule's source. Add it to struct _FilterRule. - - * filter-driver.c (filter_driver_run): Add a new input, - sourcetype, that specifies which rules to run (only ones - with the same source will be run). struct filter_mail_input_t - changed to accomodate. - (do_filter_mail): Skip rules if they're not the specified source. - If source and dest are the same, don't delete the messages or - copy unnecessarily. - - * filter.glade: Make the optionmenu sensitive. Change "Outgoing" - to "On Demand" (outgoing should be added later). - -2000-08-15 Peter Williams - - * vfoldertype.xml, filtertypes.xml: Add entries defining the - date-based message filtering and vfoldering. - - * filter-datespec.{c,h}: New files implementing the UI for - date-based filtering and vfoldering -- specifically, choosing - what to compare the message to. - - * filter-element,c: Hook up to create a datespec filter if - that's what's called for. - - * Makefile.am: Build the new -datespec files. - -2000-08-13 Dan Winship - - * Makefile.am (EXTRA_DIST): remove blank.xpm and check.xpm which - no longer exist. Add filter.glade. - -2000-08-12 Dan Winship - - * filter-driver.c (describe_filter_mail): Use - mail_tool_get_folder_name here too. (Hm... this directory really - shouldn't depend on stuff in mail/, but it already did. We'll have - to sort this out later.) - -2000-08-11 Dan Winship - - * filter-driver.c (do_filter_mail): Remove an '#if 0' that must - have been left in accidentally, so that messages which are copied - to other folders will not also be copied into the Inbox. Also, - #ifdef out the line that printfs the rule, because the rules are - often very large. - -2000-08-11 Not Zed - - * filter-driver.c (do_colour): Use proper accessor function - instead of poking the structure. - -2000-08-10 Christopher James Lahey - - * filter-driver.c, filter-folder.c, rule-context.c, - vfolder-editor.c: Fixed some warnings. - -2000-08-10 Peter Williams - - * filter-driver.c (do_filter_mail): Fix the infinite fetchmail. - -2000-08-10 Not Zed - - * filter-driver.c (filter_driver_run): Save the results of - searches till we're done. So we dont have to go strduping strings - agian and again and again and again ... Remove all the unecessary - strdups. - (do_colour): Implement. - (filter_driver_run): Change for append api change. - (free_key): Removed. - -2000-08-09 Not Zed - - * rule-context.c (rule_context_add_rule_gui): Helper function to - add a rule, but present a gui first, asking for confirmation/allow - editing. - (rule_context_add_rule_gui): Keep track of context so it isn't freed under us. - - * filter-context.c (filter_context_create_action): Implement, - helper to aid filter generation. - -2000-08-08 Peter Williams - - * filter-driver.c (close_folder): Fix an accidental GTK unref - of a CamelObject. - -2000-08-03 Ettore Perazzoli - - * filter-folder.c (button_clicked): Use the base name of the - Evoluton URI for the button's label. - (get_widget): Likewise. - -2000-08-03 Peter Williams - - * filter-driver.c (op_filter_mail): Conform to the new mail-threads - interface. - -2000-08-01 Not Zed - - * vfolder-editor.c (rule_add): Oops, create a vfolder_rule when we - add a new one. - - * rule-context.c (load): If there are no user rules, dont bomb - out. - -2000-07-31 Not Zed - - * filter-input.c (filter_input_set_value): Set value of a simple - type to a new string. - - * filter-option.c (filter_option_set_current): New function to set - the current value of an option. - - * filter-rule.c (filter_rule_find_list): New function to find a - rule in a list, by name. - (filter_rule_set_name): Let you set the name of a rule. - - * rule-context.c (rule_context_find_rule): Find a rule by name. - (rule_context_create_part): Helper to find and clone a part by - name. - - * filter-folder.c (button_clicked): Fix warning. - - * filter.glade: Add new widgets for vfolder rule editor. - - * vfolder-context.c (vfolder_context_init): Changed to use vfolder - rule as the rule type. - - * vfolder-rule.c: New class to encode extra information required - for vfolder rules. - -2000-07-30 Not Zed - - ** Almost a total rewrite of every file, except for filter-driver - which just had minor updates. - - The rule format has changed. - -2000-07-24 Dan Winship - - * filter-driver.c (do_delete, filter_driver_run): Update for - CamelFolder API changes. (delete_message and get_uids don't take - exceptions any more.) - -2000-07-21 Peter Williams - - * filter-driver.c (cleanup_filter_mail): Use the exception - provided to us by the async manager instead of allocating - our own; use mail_tool_camel_lock_{up,down} around camel - operations. - (filter_driver_run): Make it return void. - -2000-07-20 Jeffrey Stedfast - - * filter-driver.c: Update to make "async". - -2000-07-11 Dan Winship - - * filter-driver.c: Update for CamelFolder API changes - -2000-07-11 Jeffrey Stedfast - - * filter-driver.c (filter_driver_run): Updated to reflect changes to - camel_folder_append_message () - -2000-07-09 Dan Winship - - * filter-xml.[ch]: add a "string" type - - * filtertype.xml, vfoldertypes.xml: Use type="string" rather than - "folder" for subject/body matching. - - * filter-arg-types.c: Update some strings for "text" input. Fix - some warnings (including one that pointed out a real bug). - - * filter-arg.c, filter-druid.c, filter-format.c: fix warnings - -2000-07-07 Dan Winship - - * filter-driver.c: Update for camel_folder_search_by_expression - change (GList -> GPtrArray). - - * vfoldertypes.xml: sync this to filtertypes.xml (to/cc thing) - -2000-07-05 Dan Winship - - * remove some non-error case debugging messages. - - * filtertypes.xml: Fix typos and update the "to-address" rule to - match To or Cc. - * vfoldertypes.xml: Fix typos. - - * filter-driver.c (do_delete, do_copy, do_stop, - filter_driver_run): Add uids to the "processed" list only after - succesfully doing something with them. Fixes the problem where - copying a message to a folder that didn't exist would result in it - disapearing. - -2000-07-02 Ettore Perazzoli - - * filter-driver.c (filter_driver_new): Don't free the ruleset nor - the xmlDoc. This will make us leak [I think], but at least - filters work. - -2000-07-02 Dan Winship - - * filter-driver.c (open_folder): freeze the folder to avoid - multiple folder_changed's - (close_folder): and thaw it. - -2000-07-02 Dan Winship - - * filter-driver.c (filter_driver_new): kill - filter_driver_set_session and filter_driver_set_rules and instead - make filter_driver_new take the rules and a callback function it - can use to turn URIs into folders. - (open_folder): Use the callback function rather than calling camel - directly: some URIs need special handling to turn them into stores - and folders correctly, so let the mailer do that. - -2000-07-01 Ettore Perazzoli - - * filter-arg-types.c (arg_folder_edit_value): Only allow type - "mail" when selecting a folder for the filter. - -2000-07-01 Jeffrey Stedfast - - * filter-driver.c: Updated to reflect changes made to - camel-folder. - -2000-06-30 Peter Williams - - * filter-xml.c (filter_load_optionset_file): Check for failure - when loading the filter doc. - - * filter-driver.c (filter_driver_set_rules): Ditto. - - * filter-editor.c (filter_editor_set_rule_files): Ditto. - -2000-06-29 Ettore Perazzoli - - * filter-arg-types.c: Replaced `global_shell_interface' with - `global_shell_client'. - (arg_folder_edit_value): Use - `evolution_shell_client_user_select_folder()'. - (create_listener): Removed. - (impl_FolderSelectionListener_selected): Removed, together with - all the ::Listener stuff. - -2000-06-29 Arik Devens - - * vfoldertypes.xml (ruleset type="match"): Changed Cc to CC to be - the same as the other CC rule. None of this works however, cause - the CC code is not hooked up to camel... oh well ;-( - -2000-06-29 Arik Devens - - * vfoldertypes.xml (ruleset type="match"): Added a Cc rule to - vfolders. Works like To except on the Cc of a message ;-) - -2000-06-28 Jeffrey Stedfast - - * filter-arg-types.c (arg_string_edit_value): Changed "Filter name" - to "Option value" as "Filter name" made no sense in the dialog - (arg_address_edit_value): Same - (arg_folder_edit_value): What do we want to return?? - -2000-06-27 Ettore Perazzoli - - * filter-xml.c (load_desc): Strdup content before assigning the - value. Also, no need to check for NULL when g_strdup()ing as - g_strdup() returns NULL for a NULL arg. - -2000-06-27 Ettore Perazzoli - - * Makefile.am (INCLUDES): `-I$(top_builddir)/shell' so that it - works with builddir != srcdir. [We need to #include - "Evolution.h".] - -2000-06-27 Michael Zucchi - - * Makefile.am (INCLUDES): Add the shell dir for includes (for - corba interfaces). - - * filter-arg-types.c (impl_FolderSelectionListener_selected): - Listener for folder query. Sigh. - (create_listener): Create the listener object for the folder - dialogue query. Uses a global for linkage to the shell object, - via the mail component. - (arg_folder_edit_value): Call the folder selection dialogue to - edit the value, rather than a simple text widget. - -2000-06-26 Jeffrey Stedfast - - * filter-editor.c: Added a #include as this - was needed (since we used the xml parser...) - (druid_dialogue_clicked): Do we want to use struct filter_option - or do we instead want to use struct filter_optionrule as we had before? - Since the function we pass the data to expects filter_option, I suspect - that that is what we want. - - * filter-format.h (filter_description_html_write): Renamed from - description_html_write in order to match function name in - filter-format.c - - * filter-druid.c (option_name_changed): Fixed a memory leak (Free'd - a filter description list). - - * filter-arg-types.c (arg_folder_edit_values): Free'd GList data in - argin->values. - - * filter-driver.c (filter_driver_set_rules): Added code to free an - xmlDoc and some other data. - - * filter-arg.h: Add prototypes for filter_arg_write_html() and - filter_arg_write_text(); - - * filter-arg-types.c: Lets see if we can't get rid of some of these - warnings... (use some casts to make warnings go away) - (arg_address_edit_value): Lets make sure that ad exists before looking - at member data. - -2000-06-16 Dan Winship - - * filter-driver.c (do_delete, filter_driver_run): Update for Camel - flag handling changes. - -2000-06-15 Dan Winship - - * filter-driver.c (open_folder, close_folder): Update for - CamelFolder changes. - -2000-06-09 Jacob Berkman - - * filter-editor.c (add_or_edit): use stock pixmap buttons - - * filter-druid.c (build_druid): remove the border on the notebook, - put the html widget in a scroll frame, and add some padding - -2000-06-06 Dan Winship - - * filter-driver.c (open_folder): Update for folder - existence/creation changes. - -2000-06-02 Christopher James Lahey - - * filter-driver.c: Free the exception and the priv struct. - -2000-06-01 Christopher James Lahey - - * filter-arg-types.c (arg_address_edit_value): Search for ad in - arg->values instead of text since it's a list of - filter_arg_adresses. Also, free the old value in the list. - -2000-05-30 Not Zed - - * filtertypes.xml: And here too. - - * vfoldertypes.xml: Add body-contains and not-body-contains - types. - -2000-05-27 Not Zed - - * vfoldertypes.xml: New file - lists rules appropriate for - vfolders (no actions, etc). - - * Makefile.am (EXTRA_DIST): Add vfoldertypes.xml - - * filter-driver.c (filter_driver_expand_option): Made public from - expand_filter_option. - (filter_driver_rule_count): find out how many user rules are - defined. - (filter_driver_rule_get): Get a user rule by index. - -2000-05-21 Ettore Perazzoli - - * filter-druid.c: Don't pass an empty URL to `gtk_html_begin()' - anymore. - - * filter-arg-types.c: Updated for the new GtkHTML API which uses - `GtkHTMLStream *' instead of `GtkHTMLStreamHandle'. - * filter-arg.c: Likewise. - * filter-arg.h: Likewise. - * filter-druid.c: Likewise. - - * filter-format.c: Likewise. - * filter-format.h: Likewise. - -2000-05-18 Dan Winship - - * filter-driver.c (filter_driver_run): update for - camel_folder_get_uids change - -2000-05-17 NotZed - - * filter-druid.c: Fix some html formatting. - -2000-05-16 NotZed - - * filter-driver.c (filter_driver_run): Delete all processed - messages. This is probably going to slow it down a bit. - (filter_driver_run): Close folders before destroying them *sigh*. - (open_folder): Actually open the folder. Doh. - - * filtertypes.xml: Initial filter rules. - - * filter-xml.c (filter_write_optionset): Save the description - also. - (write_description): Routine to save description - only saves 1 - node of description. - - * filter-arg.c (filter_arg_edit_clicked): Dont free edata here, - let the destroy do it(?) - - * filter-editor.c (main): Simple driver program for testing, so i - can fix all this really broken code *sigh* - -2000-05-15 NotZed - - * filter-editor.c (filter_editor_set_rule_files): filename based - interface. - (filter_editor_save_rules): Interface to save the options to a - filename. - - * filter-xml.[ch]: Bunch of cleanup. - - * filter-xml.c (filter_*_file): New interfaces to read/write files - directly, rather than messing with xmldoc crap. - - * Makefile.am: Removed filter-driver test program, now just part - of libfilter. - - * filter-driver.c: Made an object, with an api and everything, can - apply a filter to a given mailbox. - -2000-05-10 Christopher James Lahey - - * filter-arg.h: Changed tree.h to gnome-xml/tree.h. - - * Makefile.am: Added filter-arg-types.h, filter-arg.h, - filter-xml.h, filter-format.h, filter-druid.h, filter-editor.h. - -2000-05-02 Matt Loper - - * Makefile.am: set G_LOG_DOMAIN. - -2000-05-01 NotZed - - * filter-driver.c (main): Fix for api. - -2000-04-30 Dan Winship - - * filter-driver.c (start): Remove no-longer-necessary call to - camel_provider_register_as_module. - -2000-04-25 Ettore Perazzoli - - * Makefile.am (INCLUDES): Use `$(GTKHTML_CFLAGS)'. - -2000-04-20 NotZed - - * filter-driver.c: Removed a bunch of crappy unrequired headers. - - * Makefile.am (filter_driver_LDADD): Added libibex back again. - -2000-04-18 Dan Winship - - * filter-driver.c: remove unused camel-log.h include - -2000-04-12 Matt Loper - - * filter-arg.c (filter_arg_edit_value): Return a value. - -2000-03-27 NotZed - - * filter-xml.c (tokenise_xmlfreeprop): Free a prop after - tokenising it. - (find_node_attr): Free the prop after using it. - (load_desc): Ditto. I use free() because xmlFree() is nowhere to - be found. - (filter_load_optionset): Ditto. - - * filter-arg-types.c (arg_address_values_add_xml): free() xml - stuff, plugs a leak. - (arg_folder_values_add_xml): Ditto. - -2000-03-22 NotZed - - * filter-driver.c (main): Changed to use async search api. - -2000-03-04 NotZed - - * filter-druid.c (html_write_options): Output 'and' bits between - the rules. - - * filter-driver.c (main): Actually implement filtering, at least, - from Inbox. Copy messages to folder (in the same store only, so - far), delete, and stop processing are implemented, and the logic - to handle default processing. - - * filter-xml.c (load_optionvalue): Fix up a bug where we lost the - name of the arg (ouch). - * filter-xml.c: Wrapped printf's in debug macros. - -2000-03-02 NotZed - - * filter-druid.c (object_destroy): Disconnect the list signal, so - we dont get spurious emits during destroy. - (arg_changed): Callback to update filter arg asynchronously. - (arg_link_clicked): Edit the value non-modally. - - * filter-arg.c (filter_arg_edit_values_1): Changed to use - non-modal interface. - -2000-03-01 Ettore Perazzoli - - * Makefile.am: New file. - - * Makefile: Removed. I wonder why we are using plain Makefiles - instead of automake Makefiles at all. - -2000-02-29 NotZed - - * filter-driver.c (main): Remove gui code, this will be actual - filtering code. - - * Makefile: Added filter-editor to the library. - - * filter-editor.c (main): Comment out, make it a proper library. - -2000-02-28 NotZed - - * filter-druid.c: Removed unused header. - - * Makefile: Removed references to filter-sexp.[ch]. - - * filter-sexp.[ch]: Removed some unecessary includes. Moved to - e-util. Renamed callers. - -2000-02-24 NotZed - - * filter-xml.c (filter_description_free): - (filter_load_ruleset_free): - (filter_load_optionset_free): Functions for memory management. - - * filter-arg.c (filter_arg_copy): Copy the values of one arg into - another. - - * filter-editor.c: New widget, a dialogue which uses filter-druid - to present the various editing views. - (druid_dialogue_clicked): On finish, save the user's new filter - definition where it came from. - - * filter-druid.c: Changed to just being a notebook with no tabs, - rather than a full druid (no next/prev/etc buttons). - (option_name_changed): Update the option's description as the user - enters it in. - -2000-02-22 NotZed - - * filter-xml.c (filter_clone_optionrule): - (filter_clone_optionrule_free): - (filter_optionrule_new_from_rule): New utility functions for - working with the internal rule format. - - * filter-arg.[ch]: Added new callbacks for editing a single value, - and a new editor which shows all items in a list, and allows you - to edit them via the single-edit method. This needs some cleanup - for some unused/unusable virtual methods (edit_values, - write_html?). - - * Makefile: Add the druid for build. - - * filter-druid.c: A 'druid' widget for editing a single filter - rule. - -2000-02-21 Matt Loper - - * .cvsignore: New file. - -2000-02-18 NotZed - - * blank/check.xpm: Added forgotten files. - - * Uh, more changes, lots, its still work in progress. - -2000-02-14 NotZed - - * Initial import. - diff --git a/filter/Makefile.am b/filter/Makefile.am deleted file mode 100644 index 65927b827a..0000000000 --- a/filter/Makefile.am +++ /dev/null @@ -1,72 +0,0 @@ - -gladedir = $(prefix)/share/evolution/glade -glade_DATA = filter.glade - -INCLUDES = \ - -I $(top_srcdir) \ - -I $(top_srcdir)/libibex \ - -I $(top_srcdir)/camel \ - -I $(top_srcdir)/e-util \ - -I $(top_srcdir)/shell \ - -I $(top_srcdir)/camel/providers/mbox \ - -I $(top_builddir)/shell \ - -I $(GNOME_INCLUDEDIR) \ - $(GTKHTML_CFLAGS) \ - $(UNICODE_CFLAGS) \ - $(BONOBO_GNOME_CFLAGS) \ - -DFILTER_GLADEDIR=\"$(gladedir)\" \ - -DG_LOG_DOMAIN=\"filter\" -## - -noinst_LTLIBRARIES = \ - libfilter.la - -libfilter_la_SOURCES = \ - filter-code.c \ - filter-code.h \ - filter-colour.c \ - filter-colour.h \ - filter-context.c \ - filter-context.h \ - filter-datespec.c \ - filter-datespec.h \ - filter-driver.c \ - filter-driver.h \ - filter-editor.c \ - filter-editor.h \ - filter-element.c \ - filter-element.h \ - filter-filter.c \ - filter-filter.h \ - filter-folder.c \ - filter-folder.h \ - filter-input.c \ - filter-input.h \ - filter-option.c \ - filter-option.h \ - filter-part.c \ - filter-part.h \ - filter-rule.c \ - filter-rule.h \ - rule-context.c \ - rule-context.h \ - score-context.c \ - score-context.h \ - score-editor.c \ - score-editor.h \ - score-rule.c \ - score-rule.h \ - vfolder-context.c \ - vfolder-context.h \ - vfolder-editor.c \ - vfolder-editor.h \ - vfolder-rule.c \ - vfolder-rule.h - -EXTRA_DIST = filtertypes.xml vfoldertypes.xml \ - filter.glade - -# basic rules. -filterdir = $(prefix)/share/evolution -filter_DATA = filtertypes.xml vfoldertypes.xml - diff --git a/filter/filter-code.c b/filter/filter-code.c deleted file mode 100644 index cbab60359e..0000000000 --- a/filter/filter-code.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "filter-code.h" - -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff); -static void format_sexp(FilterElement *, GString *); - -static void filter_code_class_init (FilterCodeClass *class); -static void filter_code_init (FilterCode *gspaper); -static void filter_code_finalise (GtkObject *obj); - -static FilterInputClass *parent_class; - -guint -filter_code_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterCode", - sizeof(FilterCode), - sizeof(FilterCodeClass), - (GtkClassInitFunc)filter_code_class_init, - (GtkObjectInitFunc)filter_code_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_input_get_type (), &type_info); - } - - return type; -} - -static void -filter_code_class_init (FilterCodeClass *class) -{ - GtkObjectClass *object_class; - FilterElementClass *filter_element = (FilterElementClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_input_get_type ()); - - filter_element->build_code = build_code; - filter_element->format_sexp = format_sexp; - - object_class->finalize = filter_code_finalise; - /* override methods */ - -} - -static void -filter_code_init (FilterCode *o) -{ - ((FilterInput *)o)->type = g_strdup("code"); -} - -static void -filter_code_finalise(GtkObject *obj) -{ - FilterCode *o = (FilterCode *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_code_new: - * - * Create a new FilterCode object. - * - * Return value: A new #FilterCode object. - **/ -FilterCode * -filter_code_new(void) -{ - FilterCode *o = (FilterCode *)gtk_type_new(filter_code_get_type ()); - return o; -} - -/* here, the string IS the code */ -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff) -{ - GList *l; - FilterInput *fi = (FilterInput *)fe; - - l = fi->values; - while (l) { - g_string_append(out, (char *)l->data); - l = g_list_next(l); - } -} - -/* and we have no value */ -static void format_sexp(FilterElement *fe, GString *out) -{ - return; -} diff --git a/filter/filter-code.h b/filter/filter-code.h deleted file mode 100644 index c4bb04caab..0000000000 --- a/filter/filter-code.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_CODE_H -#define _FILTER_CODE_H - -#include - -#include "filter-input.h" - -#define FILTER_CODE(obj) GTK_CHECK_CAST (obj, filter_code_get_type (), FilterCode) -#define FILTER_CODE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_code_get_type (), FilterCodeClass) -#define IS_FILTER_CODE(obj) GTK_CHECK_TYPE (obj, filter_code_get_type ()) - -typedef struct _FilterCode FilterCode; -typedef struct _FilterCodeClass FilterCodeClass; - -struct _FilterCode { - FilterInput parent; -}; - -struct _FilterCodeClass { - FilterInputClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_code_get_type (void); -FilterCode *filter_code_new (void); - -/* methods */ - -#endif /* ! _FILTER_CODE_H */ - diff --git a/filter/filter-colour.c b/filter/filter-colour.c deleted file mode 100644 index 202908d016..0000000000 --- a/filter/filter-colour.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "e-util/e-sexp.h" -#include "filter-colour.h" - -#define d(x) - -static void xml_create(FilterElement *fe, xmlNodePtr node); -static xmlNodePtr xml_encode(FilterElement *fe); -static int xml_decode(FilterElement *fe, xmlNodePtr node); -static GtkWidget *get_widget(FilterElement *fe); -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff); -static void format_sexp(FilterElement *, GString *); - -static void filter_colour_class_init (FilterColourClass *class); -static void filter_colour_init (FilterColour *gspaper); -static void filter_colour_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterColour *)(x))->priv) - -struct _FilterColourPrivate { -}; - -static FilterElementClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_colour_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterColour", - sizeof(FilterColour), - sizeof(FilterColourClass), - (GtkClassInitFunc)filter_colour_class_init, - (GtkObjectInitFunc)filter_colour_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_element_get_type (), &type_info); - } - - return type; -} - -static void -filter_colour_class_init (FilterColourClass *class) -{ - GtkObjectClass *object_class; - FilterElementClass *filter_element = (FilterElementClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_element_get_type ()); - - object_class->finalize = filter_colour_finalise; - - /* override methods */ - filter_element->xml_create = xml_create; - filter_element->xml_encode = xml_encode; - filter_element->xml_decode = xml_decode; - filter_element->get_widget = get_widget; - filter_element->build_code = build_code; - filter_element->format_sexp = format_sexp; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_colour_init (FilterColour *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_colour_finalise(GtkObject *obj) -{ - FilterColour *o = (FilterColour *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_colour_new: - * - * Create a new FilterColour object. - * - * Return value: A new #FilterColour object. - **/ -FilterColour * -filter_colour_new(void) -{ - FilterColour *o = (FilterColour *)gtk_type_new(filter_colour_get_type ()); - return o; -} - -static void xml_create(FilterElement *fe, xmlNodePtr node) -{ - /*FilterColour *fc = (FilterColour *)fe;*/ - - /* parent implementation */ - ((FilterElementClass *)(parent_class))->xml_create(fe, node); -} - -static xmlNodePtr xml_encode(FilterElement *fe) -{ - xmlNodePtr value; - FilterColour *fc = (FilterColour *)fe; - char hex[16]; - - d(printf("Encoding colour as xml\n")); - value = xmlNewNode(NULL, "value"); - xmlSetProp(value, "name", fe->name); - xmlSetProp(value, "type", "colour"); - - sprintf(hex, "%04x", fc->r); - xmlSetProp(value, "red", hex); - sprintf(hex, "%04x", fc->g); - xmlSetProp(value, "green", hex); - sprintf(hex, "%04x", fc->b); - xmlSetProp(value, "blue", hex); - sprintf(hex, "%04x", fc->a); - xmlSetProp(value, "alpha", hex); - - return value; -} - -static guint16 -get_value(xmlNodePtr node, char *name) -{ - unsigned int ret; - char *value; - - value = xmlGetProp(node, name); - sscanf(value, "%04x", &ret); - xmlFree(value); - return ret; -} - - -static int xml_decode(FilterElement *fe, xmlNodePtr node) -{ - FilterColour *fc = (FilterColour *)fe; - - fe->name = xmlGetProp(node, "name"); - fc->r = get_value(node, "red"); - fc->g = get_value(node, "green"); - fc->b = get_value(node, "blue"); - fc->a = get_value(node, "alpha"); - - return 0; -} - -static void set_colour(GnomeColorPicker *cp, guint r, guint g, guint b, guint a, FilterColour *fc) -{ - fc->r = r; - fc->g = g; - fc->b = b; - fc->a = a; -} - -static GtkWidget *get_widget(FilterElement *fe) -{ - FilterColour *fc = (FilterColour *)fe; - GnomeColorPicker *cp; - - cp = (GnomeColorPicker *)gnome_color_picker_new(); - gnome_color_picker_set_i16(cp, fc->r, fc->g, fc->b, fc->a); - gtk_widget_show((GtkWidget *)cp); - gtk_signal_connect((GtkObject *)cp, "color_set", set_colour, fe); - return (GtkWidget *)cp; -} - -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff) -{ - return; -} - -static void format_sexp(FilterElement *fe, GString *out) -{ - char *str; - FilterColour *fc = (FilterColour *)fe; - - str =g_strdup_printf("rgb:%04x/%04x/%04x", fc->r, fc->g, fc->b); - e_sexp_encode_string(out, str); - g_free(str); -} diff --git a/filter/filter-colour.h b/filter/filter-colour.h deleted file mode 100644 index 3526dfcfda..0000000000 --- a/filter/filter-colour.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_COLOUR_H -#define _FILTER_COLOUR_H - -#include -#include "filter-element.h" - -#define FILTER_COLOUR(obj) GTK_CHECK_CAST (obj, filter_colour_get_type (), FilterColour) -#define FILTER_COLOUR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_colour_get_type (), FilterColourClass) -#define IS_FILTER_COLOUR(obj) GTK_CHECK_TYPE (obj, filter_colour_get_type ()) - -typedef struct _FilterColour FilterColour; -typedef struct _FilterColourClass FilterColourClass; - -struct _FilterColour { - FilterElement parent; - struct _FilterColourPrivate *priv; - - guint16 r,g,b,a; -}; - -struct _FilterColourClass { - FilterElementClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_colour_get_type (void); -FilterColour *filter_colour_new (void); - -/* methods */ - -#endif /* ! _FILTER_COLOUR_H */ - diff --git a/filter/filter-context.c b/filter/filter-context.c deleted file mode 100644 index c31eba205a..0000000000 --- a/filter/filter-context.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "filter-context.h" -#include "filter-filter.h" - -#define d(x) - -static void filter_context_class_init (FilterContextClass *class); -static void filter_context_init (FilterContext *gspaper); -static void filter_context_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterContext *)(x))->priv) - -struct _FilterContextPrivate { -}; - -static RuleContextClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_context_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterContext", - sizeof(FilterContext), - sizeof(FilterContextClass), - (GtkClassInitFunc)filter_context_class_init, - (GtkObjectInitFunc)filter_context_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(rule_context_get_type (), &type_info); - } - - return type; -} - -static void -filter_context_class_init (FilterContextClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(rule_context_get_type ()); - - object_class->finalize = filter_context_finalise; - /* override methods */ - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_context_init (FilterContext *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); - - rule_context_add_part_set((RuleContext *)o, "partset", filter_part_get_type(), - rule_context_add_part, rule_context_next_part); - rule_context_add_part_set((RuleContext *)o, "actionset", filter_part_get_type(), - (RCPartFunc)filter_context_add_action, - (RCNextPartFunc)filter_context_next_action); - - rule_context_add_rule_set((RuleContext *)o, "ruleset", filter_filter_get_type(), - (RCRuleFunc)rule_context_add_rule, rule_context_next_rule); -} - -static void -filter_context_finalise(GtkObject *obj) -{ - FilterContext *o = (FilterContext *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_context_new: - * - * Create a new FilterContext object. - * - * Return value: A new #FilterContext object. - **/ -FilterContext * -filter_context_new(void) -{ - FilterContext *o = (FilterContext *)gtk_type_new(filter_context_get_type ()); - return o; -} - -void filter_context_add_action(FilterContext *f, FilterPart *action) -{ - d(printf("find action : ")); - f->actions = g_list_append(f->actions, action); -} - -FilterPart *filter_context_find_action(FilterContext *f, const char *name) -{ - d(printf("find action : ")); - return filter_part_find_list(f->actions, name); -} - -FilterPart *filter_context_create_action(FilterContext *f, const char *name) -{ - FilterPart *part; - - part = filter_context_find_action(f, name); - if (part) - part = filter_part_clone(part); - return part; -} - -FilterPart *filter_context_next_action(FilterContext *f, FilterPart *last) -{ - return filter_part_next_list(f->actions, last); -} diff --git a/filter/filter-context.h b/filter/filter-context.h deleted file mode 100644 index 1fa0b80af7..0000000000 --- a/filter/filter-context.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_CONTEXT_H -#define _FILTER_CONTEXT_H - -#include -#include "rule-context.h" - -#define FILTER_CONTEXT(obj) GTK_CHECK_CAST (obj, filter_context_get_type (), FilterContext) -#define FILTER_CONTEXT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_context_get_type (), FilterContextClass) -#define IS_FILTER_CONTEXT(obj) GTK_CHECK_TYPE (obj, filter_context_get_type ()) - -typedef struct _FilterContext FilterContext; -typedef struct _FilterContextClass FilterContextClass; - -struct _FilterContext { - RuleContext parent; - struct _FilterContextPrivate *priv; - - GList *actions; -}; - -struct _FilterContextClass { - RuleContextClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_context_get_type (void); -FilterContext *filter_context_new (void); - -/* methods */ -void filter_context_add_action(FilterContext *f, FilterPart *action); -FilterPart *filter_context_find_action(FilterContext *f, const char *name); -FilterPart *filter_context_create_action(FilterContext *f, const char *name); -FilterPart *filter_context_next_action(FilterContext *f, FilterPart *last); - -#endif /* ! _FILTER_CONTEXT_H */ - diff --git a/filter/filter-datespec.c b/filter/filter-datespec.c deleted file mode 100644 index c087401ee2..0000000000 --- a/filter/filter-datespec.c +++ /dev/null @@ -1,703 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include - -#include "filter-datespec.h" -#include "e-util/e-sexp.h" - -#define d(x) x - -static void xml_create(FilterElement *fe, xmlNodePtr node); -static xmlNodePtr xml_encode(FilterElement *fe); -static int xml_decode(FilterElement *fe, xmlNodePtr node); -static GtkWidget *get_widget(FilterElement *fe); -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *fds); -static void format_sexp(FilterElement *, GString *); -static void filter_datespec_class_init (FilterDatespecClass *class); -static void filter_datespec_init (FilterDatespec *gspaper); -static void filter_datespec_finalise (GtkObject *obj); - -static void make_span_editor (FilterDatespec *fds); -static void adj_value_changed (GtkAdjustment *adj, gpointer user_data); -static gchar *describe_button (FilterDatespec *fds); -static gchar *stringify_agoness (FilterDatespec *fds); -static void set_adjustments (FilterDatespec *fds); - -static void cal_day_selected (GtkCalendar *cal, gpointer user_data); -static void cal_day_selected_double_click (GtkCalendar *cal, gpointer user_data); - -#define PRIV(x) (((FilterDatespec *)(x))->priv) - -typedef struct _timespan -{ - guint32 seconds; - const gchar *singular; - const gchar *plural; - gfloat max; -} timespan; - -static const timespan timespans[] = { - { 31557600, N_("year"), N_("years"), 1000.0 }, - { 2419200, N_("month"), N_("months"), 12.0 }, - { 604800, N_("week"), N_("weeks"), 52.0 }, - { 86400, N_("day"), N_("days"), 31.0 }, - { 3600, N_("hour"), N_("hours"), 23.0 }, - { 60, N_("minute"), N_("minutes"), 59.0 }, - { 1, N_("second"), N_("seconds"), 59.0 } -}; - -#define N_TIMECHUNKS 3 - -static const guint timechunks[N_TIMECHUNKS] = { 2, 2, 3 }; -#define MAX_CHUNK 3 - -#define N_TIMESPANS (sizeof (timespans) / sizeof (timespans[0])) - -struct _FilterDatespecPrivate { - GnomeDialog *gd; - GtkWidget *descriptive_label; - GtkWidget *cur_extra_widget; - FilterDatespec_type selected_type; - - GtkWidget *date_chooser; - GtkWidget *span_chooser; - gboolean double_click; - GtkWidget **spinbuttons; -}; - -static FilterElementClass *parent_class; - -guint -filter_datespec_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterDatespec", - sizeof(FilterDatespec), - sizeof(FilterDatespecClass), - (GtkClassInitFunc)filter_datespec_class_init, - (GtkObjectInitFunc)filter_datespec_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_element_get_type (), &type_info); - } - - return type; -} - -static void -filter_datespec_class_init (FilterDatespecClass *class) -{ - GtkObjectClass *object_class; - FilterElementClass *filter_element = (FilterElementClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_element_get_type ()); - - object_class->finalize = filter_datespec_finalise; - - /* override methods */ - filter_element->xml_create = xml_create; - filter_element->xml_encode = xml_encode; - filter_element->xml_decode = xml_decode; - filter_element->get_widget = get_widget; - filter_element->build_code = build_code; - filter_element->format_sexp = format_sexp; -} - -static void -filter_datespec_init (FilterDatespec *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); - o->type = FDST_UNKNOWN; - PRIV(o)->selected_type = FDST_UNKNOWN; - PRIV(o)->spinbuttons = g_new (GtkWidget *, N_TIMESPANS ); -} - -static void -filter_datespec_finalise(GtkObject *obj) -{ - FilterDatespec *o = (FilterDatespec *)obj; - - if (o->priv) { - g_free (PRIV(o)->spinbuttons); - g_free (o->priv); - } - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_datespec_new: - * - * Create a new FilterDatespec object. - * - * Return value: A new #FilterDatespec object. - **/ -FilterDatespec * -filter_datespec_new(void) -{ - FilterDatespec *o = (FilterDatespec *)gtk_type_new(filter_datespec_get_type ()); - return o; -} - -static void xml_create(FilterElement *fe, xmlNodePtr node) -{ - /* parent implementation */ - ((FilterElementClass *)(parent_class))->xml_create(fe, node); -} - -static xmlNodePtr xml_encode(FilterElement *fe) -{ - xmlNodePtr value, work; - FilterDatespec *fds = (FilterDatespec *)fe; - gchar str[32]; - - d(printf("Encoding datespec as xml\n")); - - value = xmlNewNode(NULL, "value"); - xmlSetProp(value, "name", fe->name); - xmlSetProp(value, "type", "datespec"); - - work = xmlNewChild(value, NULL, "datespec", NULL); - sprintf (str, "%d", fds->type); - xmlSetProp(work, "type", str); - sprintf (str, "%d", (int)fds->value); - xmlSetProp(work, "value", str); - - return value; -} - -static int xml_decode(FilterElement *fe, xmlNodePtr node) -{ - FilterDatespec *fds = (FilterDatespec *)fe; - xmlNodePtr n; - gchar *val; - - d(printf("Decoding datespec from xml %p\n", fe)); - - fe->name = xmlGetProp(node, "name"); - - n = node->childs; - while (n) { - if (!strcmp(n->name, "datespec")) { - val = xmlGetProp(n, "type"); - fds->type = atoi (val); - g_free (val); - val = xmlGetProp(n, "value"); - fds->value = atoi (val); - g_free (val); - break; - } - n = n->next; - } - return 0; -} - -static void activate_now(GtkMenuItem *item, FilterDatespec *fds) -{ - if (PRIV(fds)->cur_extra_widget) { - gtk_container_remove (GTK_CONTAINER (PRIV(fds)->gd->vbox), - PRIV(fds)->cur_extra_widget); - PRIV (fds)->cur_extra_widget = NULL; - } - - - gtk_label_set_text (GTK_LABEL (PRIV(fds)->descriptive_label), - _("The message's date will be compared against\n" - "whatever the time is when the filter is run\n" - "or vfolder is opened.")); - - PRIV(fds)->selected_type = FDST_NOW; -} - -static void activate_specified(GtkMenuItem *item, FilterDatespec *fds) -{ - struct tm *seltime; - - /* Remove other widget if it exists */ - - if (PRIV(fds)->cur_extra_widget) { - gtk_container_remove (GTK_CONTAINER (PRIV(fds)->gd->vbox), - PRIV(fds)->cur_extra_widget); - PRIV (fds)->cur_extra_widget = NULL; - } - - /* Set description */ - - gtk_label_set_text (GTK_LABEL (PRIV(fds)->descriptive_label), - _("The message's date will be compared against\n" - "the time that you specify here.")); - - /* Reset if going from one type to another */ - if (PRIV(fds)->selected_type != FDST_SPECIFIED) - fds->value = 0; - - PRIV(fds)->selected_type = FDST_SPECIFIED; - - /* Set the calendar's time */ - - if (fds->value > 0) { - /* gmtime? */ - seltime = localtime (&(fds->value)); - - gtk_calendar_select_month (GTK_CALENDAR (PRIV(fds)->date_chooser), - seltime->tm_mon, - seltime->tm_year + 1900); - gtk_calendar_select_day (GTK_CALENDAR (PRIV(fds)->date_chooser), - seltime->tm_mday); - /* free seltime?? */ - } - - gtk_box_pack_start (GTK_BOX (PRIV(fds)->gd->vbox), - PRIV(fds)->date_chooser, - TRUE, TRUE, 3); - gtk_widget_show (PRIV(fds)->date_chooser); - PRIV(fds)->cur_extra_widget = PRIV(fds)->date_chooser; -} - -static void activate_x_ago(GtkMenuItem *item, FilterDatespec *fds) -{ - if (PRIV(fds)->cur_extra_widget) { - gtk_container_remove (GTK_CONTAINER (PRIV(fds)->gd->vbox), - PRIV(fds)->cur_extra_widget); - PRIV (fds)->cur_extra_widget = NULL; - } - - gtk_label_set_text (GTK_LABEL (PRIV(fds)->descriptive_label), - _("The message's date will be compared against\n" - "a time relative to when the filter is run;\n" - "\"a week ago\", for example.")); - - /* Reset if going from one type to another */ - if (PRIV(fds)->selected_type != FDST_X_AGO) - fds->value = 0; - - PRIV(fds)->selected_type = FDST_X_AGO; - - if (fds->value > 0) - set_adjustments (fds); - - gtk_box_pack_start (GTK_BOX (PRIV(fds)->gd->vbox), - PRIV(fds)->span_chooser, - TRUE, TRUE, 3); - gtk_widget_show (PRIV(fds)->span_chooser); - PRIV(fds)->cur_extra_widget = PRIV(fds)->span_chooser; - -} - -typedef void (*my_menu_callback) (GtkMenuItem *, FilterDatespec *); - -static void button_clicked(GtkButton *button, FilterDatespec *fds) -{ - GnomeDialog *gd; - GtkWidget *box; - GtkWidget *label; - GtkWidget *menu; - GtkWidget *selectomatic; - GtkWidget *sep; - int i; - gchar *desc; - - /* keep in sync with FilterDatespec_type! */ - const char *items[] = { N_("the current time"), N_("a time you specify"), - N_("a time relative to the current time"), NULL }; - const my_menu_callback callbacks[] - = { activate_now, activate_specified, activate_x_ago }; - - PRIV(fds)->descriptive_label = gtk_label_new(""); - PRIV(fds)->cur_extra_widget = NULL; - PRIV(fds)->double_click = FALSE; - - /* The calendar */ - - PRIV(fds)->date_chooser = gtk_calendar_new (); - gtk_object_ref (GTK_OBJECT (PRIV(fds)->date_chooser)); - gtk_signal_connect (GTK_OBJECT (PRIV(fds)->date_chooser), "day_selected", - cal_day_selected, fds); - gtk_signal_connect (GTK_OBJECT (PRIV(fds)->date_chooser), "day_selected_double_click", - cal_day_selected_double_click, fds); - - /* The span editor thingie */ - - make_span_editor (fds); - gtk_object_ref (GTK_OBJECT (PRIV(fds)->span_chooser)); - - /* The dialog */ - - gd = (GnomeDialog *) gnome_dialog_new ("Select a time to compare against", - GNOME_STOCK_BUTTON_OK, - GNOME_STOCK_BUTTON_CANCEL, - NULL); - PRIV(fds)->gd = gd; - - /* The menu */ - - menu = gtk_menu_new (); - - for (i = 0; items[i]; i++) { - GtkWidget *item; - - item = gtk_menu_item_new_with_label (gettext (items[i])); - gtk_signal_connect (GTK_OBJECT (item), "activate", - callbacks[i], fds); - gtk_menu_append (GTK_MENU (menu), item); - gtk_widget_show (item); - } - - gtk_widget_show (menu); - - /* The selector */ - - selectomatic = gtk_option_menu_new(); - gtk_option_menu_set_menu (GTK_OPTION_MENU (selectomatic), GTK_WIDGET (menu)); - if (fds->type != FDST_UNKNOWN) - /* Keep in sync with FilterDatespec_type! */ - gtk_option_menu_set_history (GTK_OPTION_MENU (selectomatic), fds->type); - - gtk_widget_show ((GtkWidget *)selectomatic); - - /* The label */ - - label = gtk_label_new (_("Compare against")); - gtk_widget_show (label); - - /* The hbox */ - - box = gtk_hbox_new (FALSE, 3); - gtk_box_pack_start (GTK_BOX (box), label, - TRUE, TRUE, 2); - gtk_box_pack_start (GTK_BOX (box), selectomatic, - TRUE, TRUE, 2); - gtk_widget_show (box); - gtk_box_pack_start ((GtkBox *)gd->vbox, (GtkWidget *)box, TRUE, TRUE, 3); - - /* The separator */ - - sep = gtk_hseparator_new (); - gtk_widget_show (sep); - gtk_box_pack_start (GTK_BOX (gd->vbox), sep, TRUE, TRUE, 3); - - /* The descriptive label */ - - gtk_box_pack_start (GTK_BOX (gd->vbox), PRIV(fds)->descriptive_label, TRUE, TRUE, 3); - gtk_misc_set_alignment (GTK_MISC (PRIV(fds)->descriptive_label), 0.5, 0.5); - gtk_widget_show (PRIV(fds)->descriptive_label); - - /* Set up the current view */ - - if (fds->type == FDST_UNKNOWN) - fds->type = FDST_NOW; - - (callbacks[fds->type]) (NULL, fds); - - /* go go gadget gnomedialog! */ - - switch (gnome_dialog_run_and_close(gd)) { - case -1: /*wm close*/ - if (PRIV(fds)->double_click == FALSE) - break; - /* else fall */ - case 0: - fds->type = PRIV(fds)->selected_type; - - PRIV(fds)->descriptive_label = NULL; - - desc = describe_button (fds); - gtk_label_set_text (GTK_LABEL (GTK_BIN (button)->child), desc); - g_free (desc); - /* falllllll */ - case 1: - /* cancel */ - break; - } - - gtk_widget_destroy (PRIV(fds)->date_chooser); - gtk_widget_destroy (PRIV(fds)->span_chooser); -} - -static GtkWidget * -get_widget(FilterElement *fe) -{ - FilterDatespec *fds = (FilterDatespec *)fe; - GtkWidget *button; - GtkWidget *label; - gchar *desc; - - desc = describe_button (fds); - label = gtk_label_new (desc); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - g_free (desc); - - button = gtk_button_new(); - gtk_container_add (GTK_CONTAINER (button), label); - gtk_signal_connect(GTK_OBJECT (button), "clicked", button_clicked, fds); - - gtk_widget_show(button); - gtk_widget_show(label); - return button; -} - -static void -build_code(FilterElement *fe, GString *out, struct _FilterPart *fp) -{ - return; -} - -static void -format_sexp(FilterElement *fe, GString *out) -{ - FilterDatespec *fds = (FilterDatespec *)fe; - - switch (fds->type) { - case FDST_UNKNOWN: - g_warning ("user hasn't selected a datespec yet!"); - /* fall through */ - case FDST_NOW: - g_string_append (out, "(get-current-date)"); - break; - case FDST_SPECIFIED: - g_string_sprintfa (out, "%d", (int) fds->value); - break; - case FDST_X_AGO: - g_string_sprintfa (out, "(- (get-current-date) %d)", (int) fds->value); - break; - } -} - -static gchar * -stringify_agoness (FilterDatespec *fds) -{ - time_t val; - GString *str; - gchar *ret; - - str = g_string_new(""); - val = fds->value; - - if (val == 0) { - g_string_append (str, _("now")); - } else { - int where; - - where = 0; - - while (val) { - int count; - - count = 0; - - while (timespans[where].seconds <= val) { - count++; - val -= timespans[where].seconds; - } - - if (count != 0 ) { - if (count > 1) - g_string_sprintfa (str, "%d %s", (int) count, gettext (timespans[where].plural)); - else - g_string_sprintfa (str, "%d %s", (int) count, gettext (timespans[where].singular)); - - if (val) - g_string_append (str, ", "); - } - - where++; - } - - g_string_append (str, " ago"); - } - - ret = str->str; - g_string_free (str, FALSE); - return ret; -} - -static void -make_span_editor (FilterDatespec *fds) -{ - int i; - int chunk; - int delta; - GtkWidget *table; - - /*PRIV(fds)->span_chooser = gtk_vbox_new (TRUE, 3);*/ - table = gtk_table_new (N_TIMECHUNKS, MAX_CHUNK * 2, FALSE); - - i = 0; - - for (chunk = 0; chunk < N_TIMECHUNKS; chunk++ ) { - /*GtkWidget *hbox;*/ - - /*hbox = gtk_hbox_new (FALSE, 1);*/ - /*gtk_box_pack_start (GTK_BOX (PRIV(fds)->span_chooser), - * hbox, TRUE, TRUE, 1); - */ - /*gtk_table_attach (GTK_TABLE (PRIV(fds)->span_chooser), - * hbox, - * 0, 1, chunk, chunk + 1, - * 0, GTK_EXPAND | GTK_FILL, - * 3, 3); - *gtk_widget_show (hbox); - */ - - for (delta = 0; delta < timechunks[chunk]; delta++, i++ ) { - gchar *text; - GtkObject *adj; - GtkWidget *sb; - GtkWidget *label; - - adj = gtk_adjustment_new (0.0, 0.0, - timespans[i].max, - 1.0, 10.0, 0.0); - - sb = gtk_spin_button_new (GTK_ADJUSTMENT (adj), - 0, 0); - - /*gtk_box_pack_start (GTK_BOX (hbox), sb, FALSE, FALSE, 1);*/ - gtk_table_attach (GTK_TABLE (table), sb, - delta * 2, delta * 2 + 1, - chunk, chunk + 1, - 0, GTK_EXPAND | GTK_FILL, - 2, 4); - PRIV(fds)->spinbuttons[i] = sb; - - gtk_widget_show (GTK_WIDGET (sb)); - - if (delta + 1 < timechunks[chunk]) - text = g_strdup_printf ("%s, ", gettext (timespans[i].plural)); - else - text = g_strdup_printf ("%s ago", gettext (timespans[i].plural)); - - label = gtk_label_new (text); - g_free (text); - - /*gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 3);*/ - gtk_table_attach (GTK_TABLE (table), label, - delta * 2 + 1, (delta + 1) * 2, - chunk, chunk + 1, - 0, GTK_EXPAND | GTK_FILL, - 2, 4); - gtk_widget_show (label); - - gtk_signal_connect (adj, "value_changed", - adj_value_changed, fds); - } - } - - PRIV(fds)->span_chooser = table; -} - -static void -adj_value_changed (GtkAdjustment *adj, gpointer user_data) -{ - FilterDatespec *fds = (FilterDatespec *) user_data; - int i; - - fds->value = 0; - - for (i = 0; i < N_TIMESPANS; i++) - fds->value += timespans[i].seconds * - (gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (PRIV(fds)->spinbuttons[i]))); -} - -static void -set_adjustments (FilterDatespec *fds) -{ - time_t val; - int where; - - val = fds->value; - where = 0; - - while (val) { - int count; - - count = 0; - - while (timespans[where].seconds <= val) { - count++; - val -= timespans[where].seconds; - } - - gtk_spin_button_set_value (GTK_SPIN_BUTTON (PRIV(fds)->spinbuttons[where]), - (gfloat) count); - where++; - } -} - -static gchar * -describe_button (FilterDatespec *fds) -{ - gchar *desc = NULL; - - switch (fds->type) { - case FDST_UNKNOWN: - desc = g_strdup (_("")); - break; - case FDST_NOW: - desc = g_strdup (_("now")); - break; - case FDST_SPECIFIED: - desc = g_strdup (ctime (&(fds->value))); - break; - case FDST_X_AGO: - desc = stringify_agoness (fds); - break; - } - - return desc; -} - -static void -cal_day_selected (GtkCalendar *cal, gpointer user_data) -{ - FilterDatespec *fds = (FilterDatespec *)user_data; - extern int daylight; - struct tm seltime; - - seltime.tm_sec = 0; - seltime.tm_min = 0; - seltime.tm_hour = 0; - seltime.tm_mday = cal->selected_day; - seltime.tm_mon = cal->month; - seltime.tm_year = cal->year - 1900; - seltime.tm_isdst = daylight; - - fds->value = mktime (&seltime); -} - -static void -cal_day_selected_double_click (GtkCalendar *cal, gpointer user_data) -{ - FilterDatespec *fds = (FilterDatespec *)user_data; - - cal_day_selected (cal, user_data); - PRIV(fds)->double_click = TRUE; - gnome_dialog_close (PRIV(fds)->gd); -} diff --git a/filter/filter-datespec.h b/filter/filter-datespec.h deleted file mode 100644 index 1292a94e36..0000000000 --- a/filter/filter-datespec.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_DATESPEC_H -#define _FILTER_DATESPEC_H - -#include -#include "filter-element.h" - -#define FILTER_DATESPEC(obj) GTK_CHECK_CAST (obj, filter_datespec_get_type (), FilterDatespec) -#define FILTER_DATESPEC_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_datespec_get_type (), FilterDatespecClass) -#define IS_FILTER_DATESPEC(obj) GTK_CHECK_TYPE (obj, filter_datespec_get_type ()) - -typedef struct _FilterDatespec FilterDatespec; -typedef struct _FilterDatespecClass FilterDatespecClass; - -typedef enum _FilterDatespec_type { FDST_NOW, FDST_SPECIFIED, FDST_X_AGO, FDST_UNKNOWN } FilterDatespec_type; - -struct _FilterDatespec { - FilterElement parent; - struct _FilterDatespecPrivate *priv; - - FilterDatespec_type type; - - /* either a timespan, an absolute time, or 0 - * depending on type -- the above mapping to - * (X_AGO, SPECIFIED, NOW) - */ - - time_t value; -}; - -struct _FilterDatespecClass { - FilterElementClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_datespec_get_type (void); -FilterDatespec *filter_datespec_new (void); - -/* methods */ - -#endif /* ! _FILTER_DATESPEC_H */ - diff --git a/filter/filter-driver.c b/filter/filter-driver.c deleted file mode 100644 index e3e1c7df5e..0000000000 --- a/filter/filter-driver.c +++ /dev/null @@ -1,636 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Michael Zucchi - * Jeffrey Stedfast - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include "filter-driver.h" - -#include -#include -#include -#include - -#include -#include - -#include -#include "mail/mail-tools.h" /*mail_tool_camel_lock_up*/ -#include "filter-context.h" -#include "filter-filter.h" -#include "e-util/e-sexp.h" - -#define d(x) - -/* mail-thread filter input data type */ -typedef struct { - FilterDriver *driver; - CamelFolder *source; - CamelFolder *inbox; - enum _filter_source_t sourcetype; - gboolean self_destruct; - gpointer unhook_func; - gpointer unhook_data; -} filter_mail_input_t; - -/* mail-thread filter functions */ -static gchar *describe_filter_mail (gpointer in_data, gboolean gerund); -static void setup_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex); -static void do_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex); -static void cleanup_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex); - - -struct _FilterDriverPrivate { - GHashTable *globals; /* global variables */ - - FilterContext *context; - - /* for callback */ - FilterGetFolderFunc get_folder; - void *data; - - /* run-time data */ - GHashTable *folders; /* currently open folders */ - GPtrArray *matches; /* all messages which match current rule */ - GHashTable *terminated; /* messages for which processing is terminated */ - GHashTable *processed; /* all messages that were processed in some way */ - GHashTable *copies; /* lists of folders to copy messages to */ - - CamelFolder *source; /* temporary input folder */ - - GList *searches; /* search results */ - - CamelException *ex; - - /* evaluator */ - ESExp *eval; -}; - -#define _PRIVATE(o) (((FilterDriver *)(o))->priv) - -static void filter_driver_class_init (FilterDriverClass *klass); -static void filter_driver_init (FilterDriver *obj); -static void filter_driver_finalise (GtkObject *obj); - -static CamelFolder *open_folder (FilterDriver *d, const char *folder_url); -static int close_folders (FilterDriver *d); - -static ESExpResult *do_delete(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *); -static ESExpResult *mark_forward(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *); -static ESExpResult *mark_copy(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *); -static ESExpResult *do_stop(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *); -static ESExpResult *do_colour(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *); - -static struct { - char *name; - ESExpFunc *func; - int type; /* set to 1 if a function can perform shortcut evaluation, or - doesn't execute everything, 0 otherwise */ -} symbols[] = { - { "delete", (ESExpFunc *)do_delete, 0 }, - { "forward-to", (ESExpFunc *)mark_forward, 0 }, - { "copy-to", (ESExpFunc *)mark_copy, 0 }, - { "stop", (ESExpFunc *)do_stop, 0 }, - { "set-colour", (ESExpFunc *)do_colour, 0 }, -}; - -static GtkObjectClass *filter_driver_parent; - -enum SIGNALS { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_driver_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterDriver", - sizeof (FilterDriver), - sizeof (FilterDriverClass), - (GtkClassInitFunc) filter_driver_class_init, - (GtkObjectInitFunc) filter_driver_init, - (GtkArgSetFunc) NULL, - (GtkArgGetFunc) NULL - }; - - type = gtk_type_unique (gtk_object_get_type (), &type_info); - } - - return type; -} - -static void -filter_driver_class_init (FilterDriverClass *klass) -{ - GtkObjectClass *object_class = (GtkObjectClass *) klass; - - filter_driver_parent = gtk_type_class (gtk_object_get_type ()); - - object_class->finalize = filter_driver_finalise; - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -filter_driver_init (FilterDriver *obj) -{ - struct _FilterDriverPrivate *p; - int i; - - p = _PRIVATE (obj) = g_malloc0 (sizeof (*p)); - - p->eval = e_sexp_new (); - /* Load in builtin symbols */ - for (i = 0; i < sizeof (symbols) / sizeof (symbols[0]); i++) { - if (symbols[i].type == 1) { - e_sexp_add_ifunction (p->eval, 0, symbols[i].name, (ESExpIFunc *)symbols[i].func, obj); - } else { - e_sexp_add_function (p->eval, 0, symbols[i].name, symbols[i].func, obj); - } - } - - p->globals = g_hash_table_new (g_str_hash, g_str_equal); - - /* Will get set in filter_driver_run */ - p->ex = NULL; -} - -static void -free_hash_strings (void *key, void *value, void *data) -{ - g_free (key); - g_free (value); -} - -static void -filter_driver_finalise (GtkObject *obj) -{ - FilterDriver *d = (FilterDriver *) obj; - struct _FilterDriverPrivate *p = _PRIVATE (d); - - g_hash_table_foreach (p->globals, free_hash_strings, d); - g_hash_table_destroy (p->globals); - - gtk_object_unref (GTK_OBJECT (p->eval)); - - /*Was set to the mail_operation_queue exception, - * not our responsibility to free it.*/ - /*camel_exception_free (p->ex);*/ - - g_free (p); - - ((GtkObjectClass *)(filter_driver_parent))->finalize (GTK_OBJECT (obj)); -} - -/** - * filter_driver_new: - * @system: path to system rules - * @user: path to user rules - * @get_folder: function to call to fetch folders - * - * Create a new FilterDriver object. - * - * Return value: A new FilterDriver widget. - **/ -FilterDriver * -filter_driver_new (FilterContext *context, FilterGetFolderFunc get_folder, void *data) -{ - FilterDriver *new; - struct _FilterDriverPrivate *p; - - new = FILTER_DRIVER (gtk_type_new (filter_driver_get_type ())); - p = _PRIVATE(new); - - p->get_folder = get_folder; - p->data = data; - p->context = context; - gtk_object_ref((GtkObject *)context); - - return new; -} - - -#if 0 -void filter_driver_set_global(FilterDriver *d, const char *name, const char *value) -{ - struct _FilterDriverPrivate *p = _PRIVATE (d); - char *oldkey, *oldvalue; - - if (g_hash_table_lookup_extended (p->globals, name, (void *)&oldkey, (void *)&oldvalue)) { - g_free (oldvalue); - g_hash_table_insert (p->globals, oldkey, g_strdup (value)); - } else { - g_hash_table_insert (p->globals, g_strdup (name), g_strdup (value)); - } -} -#endif - -static ESExpResult * -do_delete (struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *driver) -{ - struct _FilterDriverPrivate *p = _PRIVATE (driver); - char *uid; - int i; - - printf ("doing delete\n"); - for (i = 0; i < p->matches->len; i++) { - uid = p->matches->pdata[i]; - printf (" %s\n", uid); - - mail_tool_camel_lock_up (); - camel_folder_delete_message (p->source, uid); - mail_tool_camel_lock_down (); - } - return NULL; -} - -static ESExpResult * -mark_forward (struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *driver) -{ - struct _FilterDriverPrivate *p = _PRIVATE (driver); - int i; - - printf ("marking the following messages for forwarding:\n"); - for (i = 0; i < p->matches->len; i++) { - printf (" %s\n", (char *)p->matches->pdata[i]); - } - return NULL; -} - -static ESExpResult * -mark_copy (struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *driver) -{ - struct _FilterDriverPrivate *p = _PRIVATE (driver); - int i, m; - char *uid; - - printf ("marking for copy\n"); - for (i = 0; i < argc; i++) { - if (argv[i]->type == ESEXP_RES_STRING) { - char *folder = argv[i]->value.string; - CamelFolder *outbox; - - outbox = open_folder (driver, folder); - if (outbox == NULL) - continue; - - for (m = 0; m < p->matches->len; m++) { - gpointer old_key, old_value; - - uid = p->matches->pdata[m]; - printf (" %s\n", uid); - - if (g_hash_table_lookup_extended (p->copies, uid, &old_key, &old_value)) - g_hash_table_insert (p->copies, old_key, g_list_prepend (old_value, outbox)); - else - g_hash_table_insert (p->copies, uid, g_list_append (NULL, outbox)); - } - } - } - - return NULL; -} - -static ESExpResult * -do_stop (struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *driver) -{ - struct _FilterDriverPrivate *p = _PRIVATE (driver); - char *uid; - int i; - - printf ("doing stop on the following messages:\n"); - for (i = 0; i < p->matches->len; i++) { - uid = p->matches->pdata[i]; - printf (" %s\n", uid); - g_hash_table_insert (p->terminated, uid, GINT_TO_POINTER (1)); - } - return NULL; -} - -static ESExpResult * -do_colour(struct _ESExp *f, int argc, struct _ESExpResult **argv, FilterDriver *d) -{ - int i; - char *uid; - struct _FilterDriverPrivate *p = _PRIVATE(d); - - if (argc>0 && argv[0]->type == ESEXP_RES_STRING) { - for (i=0 ; imatches->len; i++) { - uid = p->matches->pdata[i]; - camel_folder_set_message_user_tag(p->source, uid, "colour", argv[0]->value.string); - } - } - - return NULL; -} - -static CamelFolder * -open_folder (FilterDriver *driver, const char *folder_url) -{ - CamelFolder *camelfolder; - struct _FilterDriverPrivate *p = _PRIVATE (driver); - - /* we have a lookup table of currently open folders */ - camelfolder = g_hash_table_lookup (p->folders, folder_url); - if (camelfolder) - return camelfolder; - - camelfolder = p->get_folder(driver, folder_url, p->data); - - if (camelfolder) { - g_hash_table_insert (p->folders, g_strdup (folder_url), camelfolder); - mail_tool_camel_lock_up (); - camel_folder_freeze (camelfolder); - mail_tool_camel_lock_down (); - } - - return camelfolder; -} - -static void -close_folder (void *key, void *value, void *data) -{ - CamelFolder *folder = value; - FilterDriver *driver = data; - struct _FilterDriverPrivate *p = _PRIVATE (driver); - - g_free (key); - mail_tool_camel_lock_up (); - camel_folder_sync (folder, FALSE, p->ex); - camel_folder_thaw (folder); - mail_tool_camel_lock_down (); - camel_object_unref (CAMEL_OBJECT (folder)); -} - -/* flush/close all folders */ -static int -close_folders (FilterDriver *driver) -{ - struct _FilterDriverPrivate *p = _PRIVATE (driver); - - g_hash_table_foreach (p->folders, close_folder, driver); - g_hash_table_destroy (p->folders); - p->folders = g_hash_table_new (g_str_hash, g_str_equal); - - /* FIXME: status from driver */ - return 0; -} - -#if 0 -static void -free_key (gpointer key, gpointer value, gpointer user_data) -{ - g_free (key); -} -#endif - -static const mail_operation_spec op_filter_mail = -{ - describe_filter_mail, - 0, - setup_filter_mail, - do_filter_mail, - cleanup_filter_mail -}; - -void -filter_driver_run (FilterDriver *d, CamelFolder *source, CamelFolder *inbox, - enum _filter_source_t sourcetype, - gboolean self_destruct, gpointer unhook_func, gpointer unhook_data) -{ - filter_mail_input_t *input; - - input = g_new (filter_mail_input_t, 1); - input->driver = d; - input->source = source; - input->inbox = inbox; - input->sourcetype = sourcetype; - input->self_destruct = self_destruct; - input->unhook_func = unhook_func; - input->unhook_data = unhook_data; - - mail_operation_queue (&op_filter_mail, input, TRUE); -} - -static gchar *describe_filter_mail (gpointer in_data, gboolean gerund) -{ - filter_mail_input_t *input = (filter_mail_input_t *) in_data; - - if (gerund) - return g_strdup_printf ("Filtering messages into \"%s\"", - mail_tool_get_folder_name (input->inbox)); - else - return g_strdup_printf ("Filter messages into \"%s\"", - mail_tool_get_folder_name (input->inbox)); -} - -static void -setup_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - filter_mail_input_t *input = (filter_mail_input_t *) in_data; - - if (!input->driver) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "Bad filter driver passed to filter_mail"); - return; - } - - if (!CAMEL_IS_FOLDER (input->source)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "Bad source folder passed to filter_mail"); - return; - } - - if (!CAMEL_IS_FOLDER (input->inbox)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "Bad Inbox passed to filter_mail"); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->source)); - camel_object_ref (CAMEL_OBJECT (input->inbox)); -} - -static void -do_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - filter_mail_input_t *input = (filter_mail_input_t *) in_data; - FilterDriver *d = input->driver; - CamelFolder *source = input->source; - CamelFolder *inbox = input->inbox; - struct _FilterDriverPrivate *p = _PRIVATE (d); - ESExpResult *r; - GString *s, *a; - GPtrArray *all; - char *uid; - int i; - FilterFilter *rule; - GList *l; - - /* FIXME: needs to check all failure cases */ - p->source = source; - - /* setup runtime data */ - p->folders = g_hash_table_new(g_str_hash, g_str_equal); - p->terminated = g_hash_table_new(g_str_hash, g_str_equal); - p->processed = g_hash_table_new(g_str_hash, g_str_equal); - p->copies = g_hash_table_new(g_str_hash, g_str_equal); - - mail_tool_camel_lock_up (); - camel_folder_freeze(inbox); - mail_tool_camel_lock_down (); - - s = g_string_new(""); - a = g_string_new(""); - - rule = NULL; - while ( (rule = (FilterFilter *)rule_context_next_rule((RuleContext *)p->context, (FilterRule *)rule)) ) { - - if (((FilterRule *)rule)->source != input->sourcetype) { - d(printf("skipping rule %s - wrong source type (%d %d)\n", ((FilterRule *)rule)->name, - ((FilterRule *)rule)->source, input->sourcetype)); - continue; - } - - g_string_truncate(s, 0); - g_string_truncate(a, 0); - - filter_rule_build_code((FilterRule *)rule, s); - filter_filter_build_action(rule, a); - - d(printf("applying rule %s\n action %s\n", s->str, a->str)); - - mail_tool_camel_lock_up (); - p->matches = camel_folder_search_by_expression (p->source, s->str, p->ex); - mail_tool_camel_lock_down (); - - /* remove uid's for which processing is complete ... */ - for (i = 0; i < p->matches->len; i++) { - uid = p->matches->pdata[i]; - - /* for all matching id's, so we can work out what to default */ - if (g_hash_table_lookup (p->processed, uid) == NULL) { - g_hash_table_insert (p->processed, uid, GINT_TO_POINTER (1)); - } - - if (g_hash_table_lookup (p->terminated, uid)) { - g_ptr_array_remove_index_fast (p->matches, i); - i--; - } - } - -#ifndef NO_WARNINGS -#warning "Must check expression parsed and executed properly?" -#endif - e_sexp_input_text(p->eval, a->str, strlen(a->str)); - e_sexp_parse(p->eval); - r = e_sexp_eval(p->eval); - e_sexp_result_free(r); - - p->searches = g_list_append(p->searches, p->matches); - } - - g_string_free(s, TRUE); - g_string_free(a, TRUE); - - /* Do any queued copies, and make sure everything is deleted from - * the source. If we have an inbox, anything that didn't get - * processed otherwise goes there. - */ - mail_tool_camel_lock_up (); - all = camel_folder_get_uids (p->source); - mail_tool_camel_lock_down (); - for (i = 0; i < all->len; i++) { - char *uid = all->pdata[i], *procuid; - GList *copies, *tmp; - CamelMimeMessage *mm; - const CamelMessageInfo *info; - - copies = g_hash_table_lookup (p->copies, uid); - procuid = g_hash_table_lookup (p->processed, uid); - - mail_tool_camel_lock_up (); - info = camel_folder_get_message_info (p->source, uid); - - if (copies || !procuid) { - mm = camel_folder_get_message (p->source, uid, p->ex); - - while (copies) { - camel_folder_append_message(copies->data, mm, info, p->ex); - tmp = copies->next; - g_list_free_1 (copies); - copies = tmp; - } - - if (!procuid && inbox != source) { - printf("Applying default rule to message %s\n", uid); - camel_folder_append_message(inbox, mm, info, p->ex); - } - - camel_object_unref (CAMEL_OBJECT (mm)); - } - - if (inbox != source) - camel_folder_delete_message (p->source, uid); - mail_tool_camel_lock_down (); - - } - mail_tool_camel_lock_up (); - camel_folder_free_uids (p->source, all); - if (input->unhook_func) - camel_object_unhook_event (CAMEL_OBJECT (input->inbox), "folder_changed", - input->unhook_func, input->unhook_data); - mail_tool_camel_lock_down (); - - /* now we no longer need our keys */ - l = p->searches; - while (l) { - camel_folder_search_free (p->source, l->data); - l = l->next; - } - g_list_free (p->searches); - - g_hash_table_destroy (p->copies); - g_hash_table_destroy (p->processed); - g_hash_table_destroy (p->terminated); - close_folders (d); - g_hash_table_destroy (p->folders); - mail_tool_camel_lock_up (); - camel_folder_sync (p->source, TRUE, ex); - camel_folder_thaw (inbox); - mail_tool_camel_lock_down (); -} - -static void -cleanup_filter_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - filter_mail_input_t *input = (filter_mail_input_t *) in_data; - - camel_object_unref (CAMEL_OBJECT (input->source)); - camel_object_unref (CAMEL_OBJECT (input->inbox)); - - if (input->self_destruct) - gtk_object_unref (GTK_OBJECT (input->driver)); -} diff --git a/filter/filter-driver.h b/filter/filter-driver.h deleted file mode 100644 index 1ef62b7118..0000000000 --- a/filter/filter-driver.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Michael Zucchi - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#ifndef _FILTER_DRIVER_H -#define _FILTER_DRIVER_H - -#include -#include -#include -#include - -#include "filter-context.h" - -#define FILTER_DRIVER(obj) GTK_CHECK_CAST (obj, filter_driver_get_type (), FilterDriver) -#define FILTER_DRIVER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_driver_get_type (), FilterDriverClass) -#define IS_FILTER_DRIVER(obj) GTK_CHECK_TYPE (obj, filter_driver_get_type ()) - -typedef struct _FilterDriver FilterDriver; -typedef struct _FilterDriverClass FilterDriverClass; - -struct _FilterDriver { - GtkObject parent; - - struct _FilterDriverPrivate *priv; -}; - -struct _FilterDriverClass { - GtkObjectClass parent_class; -}; - -typedef CamelFolder * (*FilterGetFolderFunc) (FilterDriver *, const char *uri, void *data); - -guint filter_driver_get_type (void); -FilterDriver *filter_driver_new (FilterContext *ctx, FilterGetFolderFunc fetcher, void *data); - -/* - void filter_driver_set_global(FilterDriver *, const char *name, const char *value);*/ - -/* apply rules to a folder, unmatched messages goto inbox, if not NULL */ -void filter_driver_run(FilterDriver *d, CamelFolder *source, CamelFolder *inbox, - enum _filter_source_t sourcetype, - gboolean self_destruct, gpointer unhook_func, gpointer unhook_data); - -#if 0 -/* generate the search query/action string for a filter option */ -void filter_driver_expand_option(FilterDriver *d, GString *s, GString *action, struct filter_option *op); - -/* get info about rules (options) */ -int filter_driver_rule_count(FilterDriver *d); -struct filter_option *filter_driver_rule_get(FilterDriver *d, int n); -#endif - -#endif /* ! _FILTER_DRIVER_H */ diff --git a/filter/filter-editor.c b/filter/filter-editor.c deleted file mode 100644 index 9f4a0e1872..0000000000 --- a/filter/filter-editor.c +++ /dev/null @@ -1,389 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "filter-editor.h" -#include "filter-context.h" -#include "filter-filter.h" - -#define d(x) - -#if 0 -static void filter_editor_class_init (FilterEditorClass *class); -static void filter_editor_init (FilterEditor *gspaper); -static void filter_editor_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterEditor *)(x))->priv) - -struct _FilterEditorPrivate { -}; - -static GnomeDialogClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_editor_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterEditor", - sizeof(FilterEditor), - sizeof(FilterEditorClass), - (GtkClassInitFunc)filter_editor_class_init, - (GtkObjectInitFunc)filter_editor_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gnome_dialog_get_type (), &type_info); - } - - return type; -} - -static void -filter_editor_class_init (FilterEditorClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gnome_dialog_get_type ()); - - object_class->finalize = filter_editor_finalise; - /* override methods */ - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_editor_init (FilterEditor *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_editor_finalise(GtkObject *obj) -{ - FilterEditor *o = (FilterEditor *)obj; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_editor_new: - * - * Create a new FilterEditor object. - * - * Return value: A new #FilterEditor object. - **/ -FilterEditor * -filter_editor_new(void) -{ - FilterEditor *o = (FilterEditor *)gtk_type_new(filter_editor_get_type ()); - return o; -} - -#endif - - -enum { - BUTTON_ADD, - BUTTON_EDIT, - BUTTON_DELETE, - BUTTON_UP, - BUTTON_DOWN, - BUTTON_LAST -}; - -struct _editor_data { - RuleContext *f; - FilterRule *current; - GtkList *list; - GtkButton *buttons[BUTTON_LAST]; - enum _filter_source_t current_source; -}; - -static void set_sensitive(struct _editor_data *data); - -static void rule_add(GtkWidget *widget, struct _editor_data *data) -{ - FilterFilter *rule; - int result; - GnomeDialog *gd; - GtkWidget *w; - FilterPart *part; - - d(printf("add rule\n")); - /* create a new rule with 1 match and 1 action */ - rule = filter_filter_new(); - ((FilterRule *)rule)->source = data->current_source; - - part = rule_context_next_part(data->f, NULL); - filter_rule_add_part((FilterRule *)rule, filter_part_clone(part)); - part = filter_context_next_action((FilterContext *)data->f, NULL); - filter_filter_add_action(rule, filter_part_clone(part)); - - w = filter_rule_get_widget((FilterRule *)rule, data->f); - gd = (GnomeDialog *)gnome_dialog_new(_("Add Rule"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - result = gnome_dialog_run_and_close(gd); - if (result == 0) { - GtkListItem *item = (GtkListItem *)gtk_list_item_new_with_label(((FilterRule *)rule)->name); - GList *l = NULL; - - gtk_object_set_data((GtkObject *)item, "rule", rule); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(l, item); - gtk_list_append_items(data->list, l); - gtk_list_select_child(data->list, (GtkWidget *)item); - data->current = (FilterRule *)rule; - rule_context_add_rule(data->f, (FilterRule *)rule); - set_sensitive(data); - } else { - gtk_object_unref((GtkObject *)rule); - } -} - -static void rule_edit(GtkWidget *widget, struct _editor_data *data) -{ - GtkWidget *w; - int result; - GnomeDialog *gd; - FilterRule *rule; - int pos; - - d(printf("edit rule\n")); - rule = data->current; - w = filter_rule_get_widget(rule, data->f); - gd = (GnomeDialog *)gnome_dialog_new(_("Edit Rule"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, - NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - result = gnome_dialog_run_and_close(gd); - - if (result == 0) { - pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source); - if (pos != -1) { - GtkListItem *item = g_list_nth_data(data->list->children, pos); - gtk_label_set_text((GtkLabel *)(((GtkBin *)item)->child), data->current->name); - } - } -} - -static void rule_delete(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - GList *l; - GtkListItem *item; - - d(printf("ddelete rule\n")); - pos = rule_context_get_rank_rule_with_source (data->f, data->current, data->current_source); - if (pos != -1) { - rule_context_remove_rule(data->f, data->current); - - item = g_list_nth_data(data->list->children, pos); - l = g_list_append(NULL, item); - gtk_list_remove_items(data->list, l); - g_list_free(l); - - gtk_object_unref((GtkObject *)data->current); - data->current = NULL; - } - set_sensitive(data); -} - -static void rule_move(struct _editor_data *data, int from, int to) -{ - GList *l; - GtkListItem *item; - - d(printf("moving %d to %d\n", from, to)); - rule_context_rank_rule(data->f, data->current, to); - - item = g_list_nth_data(data->list->children, from); - l = g_list_append(NULL, item); - gtk_list_remove_items_no_unref(data->list, l); - gtk_list_insert_items(data->list, l, to); - gtk_list_select_child(data->list, (GtkWidget *)item); - set_sensitive(data); -} - -static void rule_up(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - - d(printf("up rule\n")); - pos = rule_context_get_rank_rule_with_source(data->f, data->current, data->current_source); - if (pos>0) { - rule_move(data, pos, pos-1); - } -} - -static void rule_down(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - - d(printf("down rule\n")); - pos = rule_context_get_rank_rule_with_source(data->f, data->current, data->current_source); - rule_move(data, pos, pos+1); -} - -static struct { - char *name; - GtkSignalFunc func; -} edit_buttons[] = { - { "rule_add", rule_add }, - { "rule_edit", rule_edit }, - { "rule_delete", rule_delete }, - { "rule_up", rule_up }, - { "rule_down", rule_down }, -}; - -static void -set_sensitive(struct _editor_data *data) -{ - FilterRule *rule = NULL; - int index=-1, count=0; - - while ((rule = rule_context_next_rule(data->f, rule))) { - if (rule == data->current) - index=count; - count++; - } - d(printf("index = %d count=%d\n", index, count)); - count--; - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_EDIT], index != -1); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_DELETE], index != -1); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_UP], index > 0); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_DOWN], index >=0 && indexcurrent = gtk_object_get_data((GtkObject *)child, "rule"); - if (data->current) - d(printf("seledct rule: %s\n", data->current->name)); - else - d(printf("bad data?\n")); - set_sensitive(data); -} - -/* FIXME: we need a way to change a rule from one source type - * to a different type. Maybe keep the selected ones? - */ - -static void -select_source (GtkMenuItem *mi, struct _editor_data *data) -{ - FilterRule *rule = NULL; - GList *newitems = NULL; - enum _filter_source_t source; - - source = (enum _filter_source_t) GPOINTER_TO_INT ( - gtk_object_get_data (GTK_OBJECT (mi), "number")); - - gtk_list_clear_items (GTK_LIST (data->list), 0, -1); - - d(printf("Checking for rules that are of type %d\n", source)); - while ((rule = rule_context_next_rule (data->f, rule)) != NULL) { - GtkWidget *item; - - if (rule->source != source) { - d(printf(" skipping %s: %d != %d\n", rule->name, rule->source, source)); - continue; - } - - d(printf(" hit %s (%d)\n", rule->name, source)); - item = gtk_list_item_new_with_label (rule->name); - gtk_object_set_data (GTK_OBJECT (item), "rule", rule); - gtk_widget_show (GTK_WIDGET (item)); - newitems = g_list_append (newitems, item); - } - - gtk_list_append_items (data->list, newitems); - data->current_source = source; - data->current = NULL; - set_sensitive (data); -} - -GtkWidget *filter_editor_construct (struct _FilterContext *f) -{ - GladeXML *gui; - GtkWidget *d, *w, *b, *firstitem = NULL; - GList *l; - struct _editor_data *data; - int i; - - g_assert(IS_FILTER_CONTEXT(f)); - - data = g_malloc0(sizeof(*data)); - data->f = (RuleContext *)f; - - gui = glade_xml_new(FILTER_GLADEDIR "/filter.glade", "edit_filter"); - d = glade_xml_get_widget (gui, "edit_filter"); - gtk_object_set_data_full((GtkObject *)d, "data", data, g_free); - - gtk_window_set_title((GtkWindow *)d, "Edit Filters"); - for (i=0;ibuttons[i] = (GtkButton *)w = glade_xml_get_widget (gui, edit_buttons[i].name); - gtk_signal_connect((GtkObject *)w, "clicked", edit_buttons[i].func, data); - } - - w = glade_xml_get_widget (gui, "filter_source"); - l = GTK_MENU_SHELL(GTK_OPTION_MENU(w)->menu)->children; - i = 0; - while (l) { - b = GTK_WIDGET (l->data); - - if (i == 0) - firstitem = b; - - /* make sure that the glade is in sync with enum _filter_source_t! */ - gtk_object_set_data (GTK_OBJECT (b), "number", GINT_TO_POINTER (i)); - gtk_signal_connect (GTK_OBJECT (b), "activate", select_source, data); - - i++; - l = l->next; - } - - w = glade_xml_get_widget (gui, "rule_list"); - data->list = (GtkList *)w; - gtk_signal_connect((GtkObject *)w, "select_child", select_rule, data); - select_source (GTK_MENU_ITEM (firstitem), data); - - gtk_object_unref((GtkObject *)gui); - - return d; -} diff --git a/filter/filter-editor.h b/filter/filter-editor.h deleted file mode 100644 index 20369a9536..0000000000 --- a/filter/filter-editor.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_EDITOR_H -#define _FILTER_EDITOR_H - -#include -#include - -#if 0 -/* NOTE: object stuff not used (yet?), this is just a holder file for a static factory */ - -#define FILTER_EDITOR(obj) GTK_CHECK_CAST (obj, filter_editor_get_type (), FilterEditor) -#define FILTER_EDITOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_editor_get_type (), FilterEditorClass) -#define IS_FILTER_EDITOR(obj) GTK_CHECK_TYPE (obj, filter_editor_get_type ()) - -typedef struct _FilterEditor FilterEditor; -typedef struct _FilterEditorClass FilterEditorClass; - -struct _FilterEditor { - GnomeDialog parent; - struct _FilterEditorPrivate *priv; - -}; - -struct _FilterEditorClass { - GnomeDialogClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_editor_get_type (void); -FilterEditor *filter_editor_new (void); -#endif - -struct _FilterContext; - -/* methods */ -GtkWidget *filter_editor_construct (struct _FilterContext *f); - -#endif /* ! _FILTER_EDITOR_H */ - diff --git a/filter/filter-element.c b/filter/filter-element.c deleted file mode 100644 index e0b896daf2..0000000000 --- a/filter/filter-element.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "filter-element.h" -#include "filter-input.h" -#include "filter-option.h" -#include "filter-code.h" -#include "filter-colour.h" -#include "filter-datespec.h" -#include "filter-folder.h" - -static void xml_create(FilterElement *fe, xmlNodePtr node); -static FilterElement *clone(FilterElement *fe); - -static void filter_element_class_init (FilterElementClass *class); -static void filter_element_init (FilterElement *gspaper); -static void filter_element_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterElement *)(x))->priv) -struct _FilterElementPrivate { -}; - -static GtkObjectClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_element_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterElement", - sizeof(FilterElement), - sizeof(FilterElementClass), - (GtkClassInitFunc)filter_element_class_init, - (GtkObjectInitFunc)filter_element_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gtk_object_get_type (), &type_info); - } - - return type; -} - -static void -filter_element_class_init (FilterElementClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gtk_object_get_type ()); - - object_class->finalize = filter_element_finalise; - - /* override methods */ - class->xml_create = xml_create; - class->clone = clone; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_element_init (FilterElement *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_element_finalise(GtkObject *obj) -{ - FilterElement *o = (FilterElement *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_element_new: - * - * Create a new FilterElement object. - * - * Return value: A new #FilterElement object. - **/ -FilterElement * -filter_element_new(void) -{ - FilterElement *o = (FilterElement *)gtk_type_new(filter_element_get_type ()); - return o; -} - -/** - * filter_element_xml_create: - * @fe: - * @node: - * - * Create a new filter element based on an xml definition of - * that element. - **/ -void filter_element_xml_create (FilterElement *fe, xmlNodePtr node) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->xml_create(fe, node); -} - -/** - * filter_element_xml_encode: - * @fe: - * - * Encode the values of a filter element into xml format. - * - * Return value: - **/ -xmlNodePtr filter_element_xml_encode (FilterElement *fe) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->xml_encode(fe); -} - -/** - * filter_element_xml_decode: - * @fe: - * @node: - * - * Decode the values of a fitler element from xml format. - * - * Return value: - **/ -int filter_element_xml_decode (FilterElement *fe, xmlNodePtr node) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->xml_decode(fe, node); -} - -/** - * filter_element_clone: - * @fe: - * - * Clones the FilterElement @fe. - * - * Return value: - **/ -FilterElement *filter_element_clone (FilterElement *fe) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->clone(fe); -} - -/** - * filter_element_get_widget: - * @fe: - * @node: - * - * Create a widget to represent this element. - * - * Return value: - **/ -GtkWidget *filter_element_get_widget (FilterElement *fe) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->get_widget(fe); -} - -/** - * filter_element_build_code: - * @fe: - * @out: - * @ff: - * - * Add the code representing this element to the output string @out. - **/ -void filter_element_build_code (FilterElement *fe, GString *out, struct _FilterPart *ff) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->build_code(fe, out, ff); -} - -/** - * filter_element_format_sexp: - * @fe: - * @out: - * - * Format the value(s) of this element in a method suitable for the context of - * sexp where it is used. Usually as space separated, double-quoted strings. - **/ -void filter_element_format_sexp (FilterElement *fe, GString *out) -{ - return ((FilterElementClass *)((GtkObject *)fe)->klass)->format_sexp(fe, out); -} - -/** - * filter_element_new_type_name: - * @type: - * - * Create a new filter element based on its type name. - * - * Return value: - **/ -FilterElement *filter_element_new_type_name (const char *type) -{ - if (type == NULL) - return NULL; - - if (!strcmp(type, "string")) { - return (FilterElement *)filter_input_new(); - } else if (!strcmp(type, "folder")) { - return (FilterElement *)filter_folder_new(); - } else if (!strcmp(type, "address")) { - /* FIXME: temporary ... need real address type */ - return (FilterElement *)filter_input_new_type_name(type); - } else if (!strcmp(type, "code")) { - return (FilterElement *)filter_code_new(); - } else if (!strcmp(type, "colour")) { - return (FilterElement *)filter_colour_new(); - } else if (!strcmp(type, "optionlist")) { - return (FilterElement *)filter_option_new(); - } else if (!strcmp(type, "datespec")) { - return (FilterElement *)filter_datespec_new(); - } else { - g_warning("Unknown filter type '%s'", type); - return 0; - } -} - -/* default implementations */ -static void xml_create(FilterElement *fe, xmlNodePtr node) -{ - fe->name = xmlGetProp(node, "name"); -} - -static FilterElement *clone(FilterElement *fe) -{ - xmlNodePtr node; - FilterElement *new; - - new = (FilterElement *)gtk_type_new( ((GtkObject *)fe)->klass->type ); - node = filter_element_xml_encode(fe); - filter_element_xml_decode(new, node); - xmlFreeNodeList(node); - return new; -} - - diff --git a/filter/filter-element.h b/filter/filter-element.h deleted file mode 100644 index 8fe82402ee..0000000000 --- a/filter/filter-element.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_ELEMENT_H -#define _FILTER_ELEMENT_H - -#include -#include - -#define FILTER_ELEMENT(obj) GTK_CHECK_CAST (obj, filter_element_get_type (), FilterElement) -#define FILTER_ELEMENT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_element_get_type (), FilterElementClass) -#define IS_FILTER_ELEMENT(obj) GTK_CHECK_TYPE (obj, filter_element_get_type ()) - -typedef struct _FilterElement FilterElement; -typedef struct _FilterElementClass FilterElementClass; - -struct _FilterElement { - GtkObject parent; - struct _FilterElementPrivate *priv; - - char *name; -}; - -struct _FilterPart; - -struct _FilterElementClass { - GtkObjectClass parent_class; - - /* virtual methods */ - void (*xml_create)(FilterElement *, xmlNodePtr); - xmlNodePtr (*xml_encode)(FilterElement *); - int (*xml_decode)(FilterElement *, xmlNodePtr); - - FilterElement *(*clone)(FilterElement *fe); - - GtkWidget *(*get_widget)(FilterElement *); - void (*build_code)(FilterElement *, GString *, struct _FilterPart *ff); - void (*format_sexp)(FilterElement *, GString *); - - /* signals */ -}; - -guint filter_element_get_type (void); -FilterElement *filter_element_new (void); - -FilterElement *filter_element_new_type_name (const char *type); - -/* methods */ -void filter_element_xml_create (FilterElement *fe, xmlNodePtr node); - -xmlNodePtr filter_element_xml_encode (FilterElement *fe); -int filter_element_xml_decode (FilterElement *fe, xmlNodePtr node); -FilterElement *filter_element_clone (FilterElement *fe); - -GtkWidget *filter_element_get_widget (FilterElement *fe); -void filter_element_build_code (FilterElement *fe, GString *out, struct _FilterPart *ff); -void filter_element_format_sexp (FilterElement *fe, GString *out); - -#endif /* ! _FILTER_ELEMENT_H */ - diff --git a/filter/filter-filter.c b/filter/filter-filter.c deleted file mode 100644 index b0699ce827..0000000000 --- a/filter/filter-filter.c +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "filter-filter.h" -#include "filter-context.h" - -#define d(x) - -static xmlNodePtr xml_encode(FilterRule *); -static int xml_decode(FilterRule *, xmlNodePtr, struct _RuleContext *f); -/*static void build_code(FilterRule *, GString *out);*/ -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f); - -static void filter_filter_class_init (FilterFilterClass *class); -static void filter_filter_init (FilterFilter *gspaper); -static void filter_filter_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterFilter *)(x))->priv) - -struct _FilterFilterPrivate { -}; - -static FilterRuleClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_filter_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterFilter", - sizeof(FilterFilter), - sizeof(FilterFilterClass), - (GtkClassInitFunc)filter_filter_class_init, - (GtkObjectInitFunc)filter_filter_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_rule_get_type (), &type_info); - } - - return type; -} - -static void -filter_filter_class_init (FilterFilterClass *class) -{ - GtkObjectClass *object_class; - FilterRuleClass *filter_rule = (FilterRuleClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_rule_get_type ()); - - object_class->finalize = filter_filter_finalise; - - /* override methods */ - filter_rule->xml_encode = xml_encode; - filter_rule->xml_decode = xml_decode; - /*filter_rule->build_code = build_code;*/ - filter_rule->get_widget = get_widget; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_filter_init (FilterFilter *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -unref_list(GList *l) -{ - while (l) { - gtk_object_unref((GtkObject *)l->data); - l = g_list_next(l); - } -} - -static void -filter_filter_finalise(GtkObject *obj) -{ - FilterFilter *o = (FilterFilter *)obj; - - unref_list(o->actions); - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_filter_new: - * - * Create a new FilterFilter object. - * - * Return value: A new #FilterFilter object. - **/ -FilterFilter * -filter_filter_new(void) -{ - FilterFilter *o = (FilterFilter *)gtk_type_new(filter_filter_get_type ()); - return o; -} - -void filter_filter_add_action (FilterFilter *fr, FilterPart *fp) -{ - fr->actions = g_list_append(fr->actions, fp); -} - -void filter_filter_remove_action (FilterFilter *fr, FilterPart *fp) -{ - fr->actions = g_list_remove(fr->actions, fp); -} - -void filter_filter_replace_action(FilterFilter *fr, FilterPart *fp, FilterPart *new) -{ - GList *l; - - l = g_list_find(fr->actions, fp); - if (l) { - l->data = new; - } else { - fr->actions = g_list_append(fr->actions, new); - } -} - -void filter_filter_build_action (FilterFilter *fr, GString *out) -{ - g_string_append(out, "(begin\n"); - filter_part_build_code_list(fr->actions, out); - g_string_append(out, ")\n"); -} - -static xmlNodePtr xml_encode(FilterRule *fr) -{ - xmlNodePtr node, set, work; - GList *l; - FilterFilter *ff = (FilterFilter *)fr; - - node = ((FilterRuleClass *)(parent_class))->xml_encode(fr); - g_assert(node != NULL); - set = xmlNewNode(NULL, "actionset"); - xmlAddChild(node, set); - l = ff->actions; - while (l) { - work = filter_part_xml_encode((FilterPart *)l->data); - xmlAddChild(set, work); - l = g_list_next(l); - } - return node; - -} - -static void load_set(xmlNodePtr node, FilterFilter *ff, RuleContext *f) -{ - xmlNodePtr work; - char *rulename; - FilterPart *part; - - work = node->childs; - while (work) { - if (!strcmp(work->name, "part")) { - rulename = xmlGetProp(work, "name"); - part = filter_context_find_action((FilterContext *)f, rulename); - if (part) { - part = filter_part_clone(part); - filter_part_xml_decode(part, work); - filter_filter_add_action(ff, part); - } else { - g_warning("cannot find rule part '%s'\n", rulename); - } - xmlFree(rulename); - } else { - g_warning("Unknwon xml node in part: %s", work->name); - } - work = work->next; - } -} - -static int xml_decode(FilterRule *fr, xmlNodePtr node, struct _RuleContext *f) -{ - xmlNodePtr work; - FilterFilter *ff = (FilterFilter *)fr; - int result; - - result = ((FilterRuleClass *)(parent_class))->xml_decode(fr, node, f); - if (result != 0) - return result; - - work = node->childs; - while (work) { - if (!strcmp(work->name, "actionset")) { - load_set(work, ff, f); - } - work = work->next; - } - return 0; -} - -/*static void build_code(FilterRule *fr, GString *out) -{ - return ((FilterRuleClass *)(parent_class))->build_code(fr, out); -}*/ - -struct _part_data { - FilterRule *fr; - FilterContext *f; - FilterPart *part; - GtkWidget *partwidget, *container; -}; - -static void option_activate(GtkMenuItem *item, struct _part_data *data) -{ - FilterPart *part = gtk_object_get_data((GtkObject *)item, "part"); - FilterPart *newpart; - - /* dont update if we haven't changed */ - if (!strcmp(part->title, data->part->title)) - return; - - /* here we do a widget shuffle, throw away the old widget/rulepart, - and create another */ - if (data->partwidget) - gtk_container_remove((GtkContainer *)data->container, data->partwidget); - newpart = filter_part_clone(part); - filter_filter_replace_action((FilterFilter *)data->fr, data->part, newpart); - gtk_object_unref((GtkObject *)data->part); - data->part = newpart; - data->partwidget = filter_part_get_widget(newpart); - if (data->partwidget) - gtk_box_pack_start((GtkBox *)data->container, data->partwidget, FALSE, FALSE, 0); -} - -static GtkWidget * -get_rule_part_widget(FilterContext *f, FilterPart *newpart, FilterRule *fr) -{ - FilterPart *part = NULL; - GtkMenu *menu; - GtkMenuItem *item; - GtkOptionMenu *omenu; - GtkHBox *hbox; - GtkWidget *p; - int index=0, current=0; - struct _part_data *data; - - data = g_malloc0(sizeof(*data)); - data->fr = fr; - data->f = f; - data->part = newpart; - - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 0); - p = filter_part_get_widget(newpart); - - data->partwidget = p; - data->container = (GtkWidget *)hbox; - - menu = (GtkMenu *)gtk_menu_new(); - while ((part=filter_context_next_action(f, part))) { - item = (GtkMenuItem *)gtk_menu_item_new_with_label(part->title); - gtk_object_set_data((GtkObject *)item, "part", part); - gtk_signal_connect((GtkObject *)item, "activate", option_activate, data); - gtk_menu_append(menu, (GtkWidget *)item); - gtk_widget_show((GtkWidget *)item); - if (!strcmp(newpart->title, part->title)) { - current = index; - } - index++; - } - - omenu = (GtkOptionMenu *)gtk_option_menu_new(); - gtk_option_menu_set_menu(omenu, (GtkWidget *)menu); - gtk_option_menu_set_history(omenu, current); - gtk_widget_show((GtkWidget *)omenu); - - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)omenu, FALSE, FALSE, 0); - if (p) { - gtk_box_pack_start((GtkBox *)hbox, p, FALSE, FALSE, 0); - } - gtk_widget_show_all((GtkWidget *)hbox); - - return (GtkWidget *)hbox; -} - -struct _rule_data { - FilterRule *fr; - FilterContext *f; - GtkWidget *parts; -}; - -static void -less_parts(GtkWidget *button, struct _rule_data *data) -{ - GList *l; - FilterPart *part; - GtkWidget *w; - - l = ((FilterFilter *)data->fr)->actions; - if (g_list_length(l) < 2) - return; - - /* remove the last one from the list */ - l = g_list_last(l); - part = l->data; - filter_filter_remove_action((FilterFilter *)data->fr, part); - gtk_object_unref((GtkObject *)part); - - /* and from the display */ - l = g_list_last(GTK_BOX(data->parts)->children); - w = ((GtkBoxChild *)l->data)->widget; - gtk_container_remove((GtkContainer *)data->parts, w); -} - -static void -more_parts(GtkWidget *button, struct _rule_data *data) -{ - FilterPart *new; - GtkWidget *w; - - /* create a new rule entry, use the first type of rule */ - new = filter_context_next_action((FilterContext *)data->f, NULL); - if (new) { - new = filter_part_clone(new); - filter_filter_add_action((FilterFilter *)data->fr, new); - w = get_rule_part_widget(data->f, new, data->fr); - gtk_box_pack_start((GtkBox *)data->parts, w, FALSE, FALSE, 0); - } -} - -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f) -{ - GtkWidget *widget; - GtkVBox *parts, *inframe; - GtkHBox *hbox; - GtkWidget *w; - GtkFrame *frame; - GList *l; - FilterPart *part; - struct _rule_data *data; - FilterFilter *ff = (FilterFilter *)fr; - - d(printf("filter filter.get widget\n")); - - widget = ((FilterRuleClass *)(parent_class))->get_widget(fr, f); - - /* and now for the action area */ - frame = (GtkFrame *)gtk_frame_new("Perform actions"); - inframe = (GtkVBox *)gtk_vbox_new(FALSE, 3); - gtk_container_add((GtkContainer *)frame, (GtkWidget *)inframe); - - parts = (GtkVBox *)gtk_vbox_new(FALSE, 3); - data = g_malloc0(sizeof(*data)); - data->f = (FilterContext *)f; - data->fr = fr; - data->parts = (GtkWidget *)parts; - - l = ff->actions; - while (l) { - part = l->data; - d(printf("adding action %s\n", part->title)); - w = get_rule_part_widget((FilterContext *)f, part, fr); - gtk_box_pack_start((GtkBox *)parts, (GtkWidget *)w, FALSE, FALSE, 3); - l = g_list_next(l); - } - gtk_box_pack_start((GtkBox *)inframe, (GtkWidget *)parts, FALSE, FALSE, 3); - - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 3); - w = gtk_button_new_with_label(_("Less")); - gtk_signal_connect((GtkObject *)w, "clicked", less_parts, data); - gtk_box_pack_end((GtkBox *)hbox, (GtkWidget *)w, FALSE, FALSE, 3); - w = gtk_button_new_with_label(_("More")); - gtk_signal_connect((GtkObject *)w, "clicked", more_parts, data); - gtk_box_pack_end((GtkBox *)hbox, (GtkWidget *)w, FALSE, FALSE, 3); - gtk_box_pack_start((GtkBox *)inframe, (GtkWidget *)hbox, FALSE, FALSE, 3); - - gtk_widget_show_all((GtkWidget *)frame); - - gtk_box_pack_start((GtkBox *)widget, (GtkWidget *)frame, FALSE, FALSE, 3); - - return widget; -} - diff --git a/filter/filter-filter.h b/filter/filter-filter.h deleted file mode 100644 index 944aba42ae..0000000000 --- a/filter/filter-filter.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_FILTER_H -#define _FILTER_FILTER_H - -#include -#include "filter-rule.h" - -#define FILTER_FILTER(obj) GTK_CHECK_CAST (obj, filter_filter_get_type (), FilterFilter) -#define FILTER_FILTER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_filter_get_type (), FilterFilterClass) -#define IS_FILTER_FILTER(obj) GTK_CHECK_TYPE (obj, filter_filter_get_type ()) - -typedef struct _FilterFilter FilterFilter; -typedef struct _FilterFilterClass FilterFilterClass; - -struct _FilterFilter { - FilterRule parent; - struct _FilterFilterPrivate *priv; - - GList *actions; -}; - -struct _FilterFilterClass { - FilterRuleClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_filter_get_type (void); -FilterFilter *filter_filter_new (void); - -/* methods */ -void filter_filter_add_action (FilterFilter *fr, FilterPart *fp); -void filter_filter_remove_action (FilterFilter *fr, FilterPart *fp); -void filter_filter_replace_action (FilterFilter *fr, FilterPart *fp, FilterPart *new); - -void filter_filter_build_action (FilterFilter *fr, GString *out); - -#endif /* ! _FILTER_FILTER_H */ - diff --git a/filter/filter-folder.c b/filter/filter-folder.c deleted file mode 100644 index 60212086ee..0000000000 --- a/filter/filter-folder.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#define SHELL - -#include "filter-folder.h" -#ifdef SHELL -#include "shell/evolution-shell-client.h" -#endif -#include "e-util/e-sexp.h" - -#define d(x) - -static void xml_create(FilterElement *fe, xmlNodePtr node); -static xmlNodePtr xml_encode(FilterElement *fe); -static int xml_decode(FilterElement *fe, xmlNodePtr node); -static GtkWidget *get_widget(FilterElement *fe); -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff); -static void format_sexp(FilterElement *, GString *); - -#ifdef SHELL -extern EvolutionShellClient *global_shell_client; -#endif - -static void filter_folder_class_init (FilterFolderClass *class); -static void filter_folder_init (FilterFolder *gspaper); -static void filter_folder_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterFolder *)(x))->priv) - -struct _FilterFolderPrivate { -}; - -static FilterElementClass *parent_class; - -guint -filter_folder_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterFolder", - sizeof(FilterFolder), - sizeof(FilterFolderClass), - (GtkClassInitFunc)filter_folder_class_init, - (GtkObjectInitFunc)filter_folder_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_element_get_type (), &type_info); - } - - return type; -} - -static void -filter_folder_class_init (FilterFolderClass *class) -{ - GtkObjectClass *object_class; - FilterElementClass *filter_element = (FilterElementClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_element_get_type ()); - - object_class->finalize = filter_folder_finalise; - - /* override methods */ - filter_element->xml_create = xml_create; - filter_element->xml_encode = xml_encode; - filter_element->xml_decode = xml_decode; - filter_element->get_widget = get_widget; - filter_element->build_code = build_code; - filter_element->format_sexp = format_sexp; -} - -static void -filter_folder_init (FilterFolder *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_folder_finalise(GtkObject *obj) -{ - FilterFolder *o = (FilterFolder *)obj; - - g_free(o->uri); - g_free(o->name); - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_folder_new: - * - * Create a new FilterFolder object. - * - * Return value: A new #FilterFolder object. - **/ -FilterFolder * -filter_folder_new(void) -{ - FilterFolder *o = (FilterFolder *)gtk_type_new(filter_folder_get_type ()); - return o; -} - -static void xml_create(FilterElement *fe, xmlNodePtr node) -{ - /* parent implementation */ - ((FilterElementClass *)(parent_class))->xml_create(fe, node); -} - -static xmlNodePtr xml_encode(FilterElement *fe) -{ - xmlNodePtr value, work; - FilterFolder *ff = (FilterFolder *)fe; - - d(printf("Encoding folder as xml\n")); - - value = xmlNewNode(NULL, "value"); - xmlSetProp(value, "name", fe->name); - xmlSetProp(value, "type", "folder"); - - work = xmlNewChild(value, NULL, "folder", NULL); - xmlSetProp(work, "name", ff->name); - xmlSetProp(work, "uri", ff->uri); - - return value; -} - -static int xml_decode(FilterElement *fe, xmlNodePtr node) -{ - FilterFolder *ff = (FilterFolder *)fe; - xmlNodePtr n; - - d(printf("Decoding folder from xml %p\n", fe)); - - fe->name = xmlGetProp(node, "name"); - - n = node->childs; - while (n) { - if (!strcmp(n->name, "folder")) { - ff->name = xmlGetProp(n, "name"); - ff->uri = xmlGetProp(n, "uri"); - break; - } - n = n->next; - } - return 0; -} - -static void button_clicked(GtkButton *button, FilterFolder *ff) -{ -#ifdef SHELL - const char *allowed_types[] = { "mail", NULL }; - char *def, *physical_uri, *evolution_uri; - - def = ff->uri ? ff->uri : ""; - - evolution_shell_client_user_select_folder (global_shell_client, - _("Select Folder"), - def, allowed_types, - &evolution_uri, - &physical_uri); - - if (physical_uri != NULL && physical_uri[0] != '\0') { - g_free(ff->uri); - ff->uri = physical_uri; - - g_free(ff->name); - ff->name = g_strdup(g_basename (evolution_uri)); - - gtk_label_set_text((GtkLabel *)GTK_BIN(button)->child, ff->name); - } else { - g_free (physical_uri); - } - g_free (evolution_uri); -#else - GnomeDialog *gd; - GtkEntry *entry; - char *uri, *str; - - gd = (GnomeDialog *)gnome_dialog_new(_("Enter folder URI"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, - NULL); - entry = (GtkEntry *)gtk_entry_new(); - if (ff->uri) { - gtk_entry_set_text(entry, ff->uri); - } - gtk_box_pack_start((GtkBox *)gd->vbox, (GtkWidget *)entry, TRUE, TRUE, 3); - gtk_widget_show((GtkWidget *)entry); - switch (gnome_dialog_run(gd)) { - case 0: - g_free(ff->uri); - g_free(ff->name); - uri = gtk_entry_get_text(entry); - ff->uri = g_strdup(uri); - str = strstr(uri, "//"); - if (str) - str = strchr(str+2, '/'); - if (str) - str++; - else - str = uri; - ff->name = g_strdup(str); - gtk_label_set_text((GtkLabel *)GTK_BIN(button)->child, ff->name); - case 1: - gnome_dialog_close(gd); - case -1: - /* nothing */ - } - -#endif -} - -static GtkWidget *get_widget(FilterElement *fe) -{ - FilterFolder *ff = (FilterFolder *)fe; - GtkButton *button; - GtkLabel *label; - - if (ff->name && ff->name[0]) - label = (GtkLabel *)gtk_label_new(g_basename (ff->name)); - else - label = (GtkLabel *)gtk_label_new(_("")); - - button = (GtkButton *)gtk_button_new(); - gtk_container_add((GtkContainer *)button, (GtkWidget *)label); - gtk_widget_show((GtkWidget *)button); - gtk_widget_show((GtkWidget *)label); - gtk_signal_connect((GtkObject *)button, "clicked", button_clicked, ff); - return (GtkWidget *)button; -} - -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff) -{ - return; -} - -static void format_sexp(FilterElement *fe, GString *out) -{ - FilterFolder *ff = (FilterFolder *)fe; - - e_sexp_encode_string(out, ff->uri); -} diff --git a/filter/filter-folder.h b/filter/filter-folder.h deleted file mode 100644 index ee52d7037b..0000000000 --- a/filter/filter-folder.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_FOLDER_H -#define _FILTER_FOLDER_H - -#include -#include "filter-element.h" - -#define FILTER_FOLDER(obj) GTK_CHECK_CAST (obj, filter_folder_get_type (), FilterFolder) -#define FILTER_FOLDER_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_folder_get_type (), FilterFolderClass) -#define IS_FILTER_FOLDER(obj) GTK_CHECK_TYPE (obj, filter_folder_get_type ()) - -typedef struct _FilterFolder FilterFolder; -typedef struct _FilterFolderClass FilterFolderClass; - -struct _FilterFolder { - FilterElement parent; - struct _FilterFolderPrivate *priv; - - char *uri; - char *name; /* name of folder for display? */ -}; - -struct _FilterFolderClass { - FilterElementClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_folder_get_type (void); -FilterFolder *filter_folder_new (void); - -/* methods */ - -#endif /* ! _FILTER_FOLDER_H */ - diff --git a/filter/filter-input.c b/filter/filter-input.c deleted file mode 100644 index f422a091b1..0000000000 --- a/filter/filter-input.c +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "filter-input.h" -#include "e-util/e-sexp.h" - -#define d(x) - -static void xml_create(FilterElement *fe, xmlNodePtr node); -static xmlNodePtr xml_encode(FilterElement *fe); -static int xml_decode(FilterElement *fe, xmlNodePtr node); -static GtkWidget *get_widget(FilterElement *fe); -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff); -static void format_sexp(FilterElement *, GString *); - -static void filter_input_class_init (FilterInputClass *class); -static void filter_input_init (FilterInput *gspaper); -static void filter_input_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterInput *)(x))->priv) - -struct _FilterInputPrivate { -}; - -static FilterElementClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_input_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterInput", - sizeof(FilterInput), - sizeof(FilterInputClass), - (GtkClassInitFunc)filter_input_class_init, - (GtkObjectInitFunc)filter_input_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_element_get_type (), &type_info); - } - - return type; -} - -static void -filter_input_class_init (FilterInputClass *class) -{ - GtkObjectClass *object_class; - FilterElementClass *filter_element = (FilterElementClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_element_get_type ()); - - object_class->finalize = filter_input_finalise; - - /* override methods */ - filter_element->xml_create = xml_create; - filter_element->xml_encode = xml_encode; - filter_element->xml_decode = xml_decode; - filter_element->get_widget = get_widget; - filter_element->build_code = build_code; - filter_element->format_sexp = format_sexp; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_input_init (FilterInput *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_input_finalise(GtkObject *obj) -{ - FilterInput *o = (FilterInput *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_input_new: - * - * Create a new FilterInput object. - * - * Return value: A new #FilterInput object. - **/ -FilterInput * -filter_input_new(void) -{ - FilterInput *o = (FilterInput *)gtk_type_new(filter_input_get_type ()); - return o; -} - -FilterInput *filter_input_new_type_name (const char *type) -{ - FilterInput *o = filter_input_new(); - o->type = g_strdup(type); - - d(printf("new type %s = %p\n", type, o)); - return o; -} - -void filter_input_set_value(FilterInput *fi, const char *value) -{ - GList *l; - - l = fi->values; - while (l) { - g_free(l->data); - l = g_list_next(l); - } - g_list_free(fi->values); - - fi->values = g_list_append(NULL, g_strdup(value)); -} - -static void xml_create(FilterElement *fe, xmlNodePtr node) -{ - /* parent implementation */ - ((FilterElementClass *)(parent_class))->xml_create(fe, node); - -} - -static xmlNodePtr xml_encode(FilterElement *fe) -{ - xmlNodePtr value; - GList *l; - FilterInput *fi = (FilterInput *)fe; - char *type; - - type = fi->type?fi->type:"string"; - - d(printf("Encoding %s as xml\n", type)); - - value = xmlNewNode(NULL, "value"); - xmlSetProp(value, "name", fe->name); - xmlSetProp(value, "type", type); - l = fi->values; - while (l) { - xmlNodePtr cur; - char *str = l->data; - - cur = xmlNewChild(value, NULL, type, NULL); - xmlNodeSetContent(cur, str); - l = g_list_next(l); - } - return value; -} - -static int xml_decode(FilterElement *fe, xmlNodePtr node) -{ - FilterInput *fi = (FilterInput *)fe; - char *name, *str, *type; - xmlNodePtr n; - - type = fi->type?fi->type:"string"; - - d(printf("Decoding %s from xml %p\n", type, fe)); - - name = xmlGetProp(node, "name"); - d(printf("Name = %s\n", name)); - fe->name = name; - fi->type = xmlGetProp(node, "type"); - n = node->childs; - while (n) { - if (!strcmp(n->name, type)) { - str = xmlNodeGetContent(n); - d(printf(" '%s'\n", str)); - fi->values = g_list_append(fi->values, str); - } else { - g_warning("Unknown node type '%s' encountered decoding a %s\n", n->name, type); - } - n = n->next; - } - return 0; -} - -static void entry_changed(GtkEntry *entry, FilterElement *fe) -{ - char *new; - FilterInput *fi = (FilterInput *)fe; - GList *l; - - new = gtk_entry_get_text(entry); - - /* NOTE: entry only supports a single value ... */ - l = fi->values; - while (l) { - g_free(l->data); - l = g_list_next(l); - } - g_list_free(fi->values); - - fi->values = g_list_append(NULL, g_strdup(new)); -} - -static GtkWidget *get_widget(FilterElement *fe) -{ - GtkEntry *entry; - FilterInput *fi = (FilterInput *)fe; - - entry = (GtkEntry *)gtk_entry_new(); - if (fi->values && fi->values->data) { - gtk_entry_set_text(entry, fi->values->data); - } - gtk_signal_connect((GtkObject *)entry, "changed", entry_changed, fe); - return (GtkWidget *)entry; -} - -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff) -{ - return; -} - -static void format_sexp(FilterElement *fe, GString *out) -{ - GList *l; - FilterInput *fi = (FilterInput *)fe; - - l = fi->values; - while (l) { - e_sexp_encode_string(out, l->data); - l = g_list_next(l); - } -} diff --git a/filter/filter-input.h b/filter/filter-input.h deleted file mode 100644 index 0ce43d980d..0000000000 --- a/filter/filter-input.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_INPUT_H -#define _FILTER_INPUT_H - -#include -#include "filter-element.h" - -#define FILTER_INPUT(obj) GTK_CHECK_CAST (obj, filter_input_get_type (), FilterInput) -#define FILTER_INPUT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_input_get_type (), FilterInputClass) -#define IS_FILTER_INPUT(obj) GTK_CHECK_TYPE (obj, filter_input_get_type ()) - -typedef struct _FilterInput FilterInput; -typedef struct _FilterInputClass FilterInputClass; - -struct _FilterInput { - FilterElement parent; - struct _FilterInputPrivate *priv; - - char *type; /* name of type */ - GList *values; /* strings */ -}; - -struct _FilterInputClass { - FilterElementClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_input_get_type (void); -FilterInput *filter_input_new (void); - -FilterInput *filter_input_new_type_name (const char *type); - -/* methods */ -void filter_input_set_value(FilterInput *fi, const char *value); - -#endif /* ! _FILTER_INPUT_H */ - diff --git a/filter/filter-option.c b/filter/filter-option.c deleted file mode 100644 index bbf1a8ef90..0000000000 --- a/filter/filter-option.c +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "filter-option.h" -#include "filter-part.h" -#include "e-util/e-sexp.h" - -#define d(x) - -static void xml_create(FilterElement *fe, xmlNodePtr node); -static xmlNodePtr xml_encode(FilterElement *fe); -static int xml_decode(FilterElement *fe, xmlNodePtr node); -static FilterElement *clone(FilterElement *fe); -static GtkWidget *get_widget(FilterElement *fe); -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff); -static void format_sexp(FilterElement *, GString *); - -static void filter_option_class_init (FilterOptionClass *class); -static void filter_option_init (FilterOption *gspaper); -static void filter_option_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterOption *)(x))->priv) - -struct _FilterOptionPrivate { -}; - -static FilterElementClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_option_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterOption", - sizeof(FilterOption), - sizeof(FilterOptionClass), - (GtkClassInitFunc)filter_option_class_init, - (GtkObjectInitFunc)filter_option_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_element_get_type (), &type_info); - } - - return type; -} - -static void -filter_option_class_init (FilterOptionClass *class) -{ - GtkObjectClass *object_class; - FilterElementClass *filter_element = (FilterElementClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_element_get_type ()); - - object_class->finalize = filter_option_finalise; - - /* override methods */ - filter_element->xml_create = xml_create; - filter_element->xml_encode = xml_encode; - filter_element->xml_decode = xml_decode; - filter_element->clone = clone; - filter_element->get_widget = get_widget; - filter_element->build_code = build_code; - filter_element->format_sexp = format_sexp; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_option_init (FilterOption *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_option_finalise(GtkObject *obj) -{ - FilterOption *o = (FilterOption *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_option_new: - * - * Create a new FilterOption object. - * - * Return value: A new #FilterOption object. - **/ -FilterOption * -filter_option_new(void) -{ - FilterOption *o = (FilterOption *)gtk_type_new(filter_option_get_type ()); - return o; -} - -static struct _filter_option * -find_option(FilterOption *fo, const char *name) -{ - GList *l = fo->options; - struct _filter_option *op; - - while (l) { - op = l->data; - if (!strcmp(name, op->value)) { - return op; - } - l = g_list_next(l); - } - return NULL; -} - -void filter_option_set_current(FilterOption *option, const char *name) -{ - g_assert(IS_FILTER_OPTION(option)); - - option->current = find_option(option, name); -} - -static void xml_create(FilterElement *fe, xmlNodePtr node) -{ - FilterOption *fo = (FilterOption *)fe; - xmlNodePtr n, work; - struct _filter_option *op; - - /* parent implementation */ - ((FilterElementClass *)(parent_class))->xml_create(fe, node); - - n = node->childs; - while (n) { - if (!strcmp(n->name, "option")) { - op = g_malloc0(sizeof(*op)); - op->value = xmlGetProp(n, "value"); - work = n->childs; - while (work) { - if (!strcmp(work->name, "title")) { - if (!op->title) { - op->title = xmlNodeGetContent(work); - } - } else if (!strcmp(work->name, "code")) { - if (!op->code) { - op->code = xmlNodeGetContent(work); - } - } - work = work->next; - } - d(printf("creating new option:\n title %s\n value %s\n code %s\n", op->title, op->value, op->code)); - fo->options = g_list_append(fo->options, op); - if (fo->current == NULL) - fo->current = op; - } else { - g_warning("Unknown xml node within optionlist: %s\n", n->name); - } - n = n->next; - } -} - -static xmlNodePtr xml_encode(FilterElement *fe) -{ - xmlNodePtr value; - FilterOption *fo = (FilterOption *)fe; - - d(printf("Encoding option as xml\n")); - value = xmlNewNode(NULL, "value"); - xmlSetProp(value, "name", fe->name); - xmlSetProp(value, "type", "option"); - if (fo->current) { - xmlSetProp(value, "value", fo->current->value); - } - return value; -} - -static int xml_decode(FilterElement *fe, xmlNodePtr node) -{ - FilterOption *fo = (FilterOption *)fe; - char *value; - - d(printf("Decoding option from xml\n")); - fe->name = xmlGetProp(node, "name"); - value = xmlGetProp(node, "value"); - if (value) { - fo->current = find_option(fo, value); - xmlFree(value); - } else { - fo->current = NULL; - } - return 0; -} - -static void option_activate(GtkMenuItem *item, FilterOption *fo) -{ - fo->current = gtk_object_get_data((GtkObject *)item, "option"); - d(printf("option changed to %s\n", fo->current->title)); -} - -static GtkWidget *get_widget(FilterElement *fe) -{ - FilterOption *fo = (FilterOption *)fe; - GtkMenu *menu; - GtkOptionMenu *omenu; - GtkMenuItem *item; - GList *l = fo->options; - struct _filter_option *op; - int index = 0, current=0; - - menu = (GtkMenu *)gtk_menu_new(); - while (l) { - op = l->data; - item = (GtkMenuItem *)gtk_menu_item_new_with_label(op->title); - gtk_object_set_data((GtkObject *)item, "option", op); - gtk_signal_connect((GtkObject *)item, "activate", option_activate, fo); - gtk_menu_append(menu, (GtkWidget *)item); - gtk_widget_show((GtkWidget *)item); - if (op == fo->current) { - current = index; - } - l = g_list_next(l); - index++; - } - - omenu = (GtkOptionMenu *)gtk_option_menu_new(); - gtk_option_menu_set_menu(omenu, (GtkWidget *)menu); - gtk_option_menu_set_history(omenu, current); - - return (GtkWidget *)omenu; -} - -static void build_code(FilterElement *fe, GString *out, struct _FilterPart *ff) -{ - FilterOption *fo = (FilterOption *)fe; - - d(printf("building option code %p, current = %p\n", fo, fo->current)); - - if (fo->current) { - filter_part_expand_code(ff, fo->current->code, out); - } -} - -static void format_sexp(FilterElement *fe, GString *out) -{ - FilterOption *fo = (FilterOption *)fe; - - if (fo->current) { - e_sexp_encode_string(out, fo->current->value); - } -} - -static FilterElement *clone(FilterElement *fe) -{ - FilterOption *fo = (FilterOption *)fe, *new; - GList *l; - struct _filter_option *fn, *op; - - d(printf("cloning option\n")); - - new = FILTER_OPTION(((FilterElementClass *)(parent_class))->clone(fe)); - l = fo->options; - while (l) { - op = l->data; - fn = g_malloc(sizeof(*fn)); - d(printf(" option %s\n", op->title)); - fn->title = g_strdup(op->title); - fn->value = g_strdup(op->value); - fn->code = g_strdup(op->code); - new->options = g_list_append(new->options, fn); - l = g_list_next(l); - - if (new->current == NULL) - new->current = fn; - } - - d(printf("cloning option code %p, current = %p\n", new, new->current)); - - return (FilterElement *)new; -} diff --git a/filter/filter-option.h b/filter/filter-option.h deleted file mode 100644 index 1bbec79d84..0000000000 --- a/filter/filter-option.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_OPTION_H -#define _FILTER_OPTION_H - -#include - -#include "filter-element.h" - -#define FILTER_OPTION(obj) GTK_CHECK_CAST (obj, filter_option_get_type (), FilterOption) -#define FILTER_OPTION_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_option_get_type (), FilterOptionClass) -#define IS_FILTER_OPTION(obj) GTK_CHECK_TYPE (obj, filter_option_get_type ()) - -typedef struct _FilterOption FilterOption; -typedef struct _FilterOptionClass FilterOptionClass; - -struct _filter_option { - char *title; /* button title */ - char *value; /* value, if it has one */ - char *code; /* used to string code segments together */ -}; - -struct _FilterOption { - FilterElement parent; - struct _FilterOptionPrivate *priv; - - GList *options; - struct _filter_option *current; -}; - -struct _FilterOptionClass { - FilterElementClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_option_get_type (void); -FilterOption *filter_option_new (void); - -/* methods */ -void filter_option_set_current(FilterOption *option, const char *name); - -#endif /* ! _FILTER_OPTION_H */ - diff --git a/filter/filter-part.c b/filter/filter-part.c deleted file mode 100644 index 31394b63fd..0000000000 --- a/filter/filter-part.c +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include - -#include "filter-part.h" -#include "filter-element.h" - -#define d(x) - -static void filter_part_class_init (FilterPartClass *class); -static void filter_part_init (FilterPart *gspaper); -static void filter_part_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterPart *)(x))->priv) - -struct _FilterPartPrivate { -}; - -static GtkObjectClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_part_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterPart", - sizeof(FilterPart), - sizeof(FilterPartClass), - (GtkClassInitFunc)filter_part_class_init, - (GtkObjectInitFunc)filter_part_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gtk_object_get_type (), &type_info); - } - - return type; -} - -static void -filter_part_class_init (FilterPartClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gtk_object_get_type ()); - - object_class->finalize = filter_part_finalise; - /* override methods */ - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_part_init (FilterPart *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -filter_part_finalise(GtkObject *obj) -{ - FilterPart *o = (FilterPart *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_part_new: - * - * Create a new FilterPart object. - * - * Return value: A new #FilterPart object. - **/ -FilterPart * -filter_part_new(void) -{ - FilterPart *o = (FilterPart *)gtk_type_new(filter_part_get_type ()); - return o; -} - - - -int filter_part_xml_create (FilterPart *ff, xmlNodePtr node) -{ - xmlNodePtr n; - char *type; - FilterElement *el; - - ff->name = xmlGetProp(node, "name"); - n = node->childs; - while (n) { - if (!strcmp(n->name, "input")) { - type = xmlGetProp(n, "type"); - d(printf("creating new element type input '%s'\n", type)); - if (type != NULL - && (el = filter_element_new_type_name(type)) != NULL) { - filter_element_xml_create(el, n); - xmlFree(type); - d(printf("adding element part %p %s\n", el, el->name)); - ff->elements = g_list_append(ff->elements, el); - } else { - g_warning("Invalid xml format, missing/unknown input type"); - } - } else if (!strcmp(n->name, "title")) { - if (!ff->title) - ff->title = xmlNodeGetContent(n); - } else if (!strcmp(n->name, "code")) { - if (!ff->code) - ff->code = xmlNodeGetContent(n); - } else { - g_warning("Unknwon part element in xml: %s\n", n->name); - } - n = n->next; - } - return 0; -} - -xmlNodePtr filter_part_xml_encode (FilterPart *fp) -{ - GList *l; - FilterElement *fe; - xmlNodePtr part, value; - - g_return_val_if_fail(fp != NULL, NULL); - - part = xmlNewNode(NULL, "part"); - xmlSetProp(part, "name", fp->name); - l = fp->elements; - while (l) { - fe = l->data; - value = filter_element_xml_encode(fe); - xmlAddChild(part, value); - l = g_list_next(l); - } - return part; -} - -int filter_part_xml_decode (FilterPart *fp, xmlNodePtr node) -{ - FilterElement *fe; - xmlNodePtr n; - char *name; - - g_return_val_if_fail(fp != NULL, -1); - g_return_val_if_fail(node != NULL, -1); - - n = node->childs; - while (n) { - if (!strcmp(n->name, "value")) { - name = xmlGetProp(n, "name"); - d(printf("finding element part %p %s = %p\n", name, name, fe)); - fe = filter_part_find_element(fp, name); - d(printf("finding element part %p %s = %p\n", name, name, fe)); - xmlFree(name); - if (fe) { - filter_element_xml_decode(fe, n); - } - } - n = n->next; - } - return 0; -} - -FilterPart *filter_part_clone (FilterPart *fp) -{ - FilterPart *new; - GList *l; - FilterElement *fe, *ne; - - new = (FilterPart *)gtk_type_new( ((GtkObject *)fp)->klass->type ); - new->name = g_strdup(fp->name); - new->title = g_strdup(fp->title); - new->code = g_strdup(fp->code); - l = fp->elements; - while (l) { - fe = l->data; - ne = filter_element_clone(fe); - new->elements = g_list_append(new->elements, ne); - l = g_list_next(l); - } - return new; -} - -FilterElement *filter_part_find_element(FilterPart *ff, const char *name) -{ - GList *l = ff->elements; - FilterElement *fe; - - if (name == NULL) - return NULL; - - while (l) { - fe = l->data; - if (fe->name && !strcmp(fe->name, name)) - return fe; - l = g_list_next(l); - } - - return NULL; -} - - -GtkWidget *filter_part_get_widget (FilterPart *ff) -{ - GtkHBox *hbox; - GList *l = ff->elements; - FilterElement *fe; - GtkWidget *w; - - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 3); - - while (l) { - fe = l->data; - w = filter_element_get_widget(fe); - if (w) { - gtk_box_pack_start((GtkBox *)hbox, w, FALSE, FALSE, 3); - } - l = g_list_next(l); - } - gtk_widget_show_all((GtkWidget *)hbox); - return (GtkWidget *)hbox; -} - -/** - * filter_part_build_code: - * @ff: - * @out: - * - * Outputs the code of a part. - **/ -void filter_part_build_code (FilterPart *ff, GString *out) -{ - GList *l = ff->elements; - FilterElement *fe; - - if (ff->code) { - filter_part_expand_code(ff, ff->code, out); - } - while (l) { - fe = l->data; - filter_element_build_code(fe, out, ff); - l = g_list_next(l); - } -} - -/** - * filter_part_build_code_list: - * @l: - * @out: - * - * Construct a list of the filter parts code into - * a single string. - **/ -void -filter_part_build_code_list(GList *l, GString *out) -{ - FilterPart *fp; - - while (l) { - fp = l->data; - filter_part_build_code(fp, out); - g_string_append(out, "\n "); - l = g_list_next(l); - } -} - -/** - * filter_part_find_list: - * @l: - * @name: - * - * Find a filter part stored in a list. - * - * Return value: - **/ -FilterPart *filter_part_find_list (GList *l, const char *name) -{ - FilterPart *part; - d(printf("Find part named %s\n", name)); - - while (l) { - part = l->data; - if (!strcmp(part->name, name)) { - d(printf("Found!\n")); - return part; - } - l = g_list_next(l); - } - return NULL; -} - -/** - * filter_part_next_list: - * @l: - * @last: The last item retrieved, or NULL to start - * from the beginning of the list. - * - * Iterate through a filter part list. - * - * Return value: The next value in the list, or NULL if the - * list is expired. - **/ -FilterPart *filter_part_next_list (GList *l, FilterPart *last) -{ - GList *node = l; - - if (last != NULL) { - node = g_list_find(node, last); - if (node == NULL) - node = l; - else - node = g_list_next(node); - } - if (node) - return node->data; - return NULL; -} - -/** - * filter_part_expand_code: - * @ff: - * @str: - * @out: - * - * Expands the variables in string @str based on the values of the part. - **/ -void filter_part_expand_code (FilterPart *ff, const char *source, GString *out) -{ - const char *newstart, *start, *end; - char *name=alloca(32); - int len, namelen=32; - FilterElement *fe; - - start = source; - while ( (newstart = strstr(start, "${")) - && (end = strstr(newstart+2, "}")) ) { - len = end-newstart-2; - if (len+1>namelen) { - namelen = (len+1)*2; - name = alloca(namelen); - } - memcpy(name, newstart+2, len); - name[len] = 0; - fe = filter_part_find_element(ff, name); - d(printf("expand code: looking up variab le '%s' = %p\n", name, fe)); - if (fe) { - g_string_sprintfa(out, "%.*s", newstart-start, start); - filter_element_format_sexp(fe, out); -#if 0 - } else if ( (val = g_hash_table_lookup(ff->globals, name)) ) { - g_string_sprintfa(out, "%.*s", newstart-start, start); - e_sexp_encode_string(out, val); -#endif - } else { - g_string_sprintfa(out, "%.*s", end-start+1, start); - } - start = end+1; - } - g_string_append(out, start); -} - -#if 0 -int main(int argc, char **argv) -{ - xmlDocPtr system; - FilterPart *ff; - GtkWidget *w; - GnomeDialog *gd; - xmlNodePtr node; - GString *code; - - gnome_init("test", "0.0", argc, argv); - - system = xmlParseFile("form.xml"); - if (system==NULL) { - printf("i/o error\n"); - return 1; - } - - ff = filter_part_new(); - filter_part_xml_create(ff, system->root); - - w = filter_part_get_widget(ff); - - gd = (GnomeDialog *)gnome_dialog_new(_("Test"), GNOME_STOCK_BUTTON_OK, NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - - gnome_dialog_run_and_close(gd); - - code = g_string_new(""); - filter_part_build_code(ff, code); - printf("code is:\n%s\n", code->str); - - return 0; -} -#endif diff --git a/filter/filter-part.h b/filter/filter-part.h deleted file mode 100644 index 2995046b20..0000000000 --- a/filter/filter-part.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_PART_H -#define _FILTER_PART_H - -#include -#include "filter-input.h" - -#define FILTER_PART(obj) GTK_CHECK_CAST (obj, filter_part_get_type (), FilterPart) -#define FILTER_PART_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_part_get_type (), FilterPartClass) -#define IS_FILTER_PART(obj) GTK_CHECK_TYPE (obj, filter_part_get_type ()) - -typedef struct _FilterPart FilterPart; -typedef struct _FilterPartClass FilterPartClass; - -struct _FilterPart { - GtkObject parent; - struct _FilterPartPrivate *priv; - - char *name; - char *title; - char *code; - GList *elements; -}; - -struct _FilterPartClass { - GtkObjectClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint filter_part_get_type (void); -FilterPart *filter_part_new (void); - -/* methods */ -int filter_part_xml_create (FilterPart *ff, xmlNodePtr node); - -xmlNodePtr filter_part_xml_encode (FilterPart *fe); -int filter_part_xml_decode (FilterPart *fe, xmlNodePtr node); - -FilterPart *filter_part_clone (FilterPart *fp); - -FilterElement *filter_part_find_element(FilterPart *ff, const char *name); - -GtkWidget *filter_part_get_widget (FilterPart *ff); -void filter_part_build_code (FilterPart *ff, GString *out); -void filter_part_expand_code (FilterPart *ff, const char *str, GString *out); - -/* static functions */ -void filter_part_build_code_list (GList *l, GString *out); -FilterPart *filter_part_find_list (GList *l, const char *name); -FilterPart *filter_part_next_list (GList *l, FilterPart *last); - -#endif /* ! _FILTER_PART_H */ - diff --git a/filter/filter-rule.c b/filter/filter-rule.c deleted file mode 100644 index 39012b9e54..0000000000 --- a/filter/filter-rule.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "filter-rule.h" -#include "filter-context.h" - -#define d(x) - -static xmlNodePtr xml_encode(FilterRule *); -static int xml_decode(FilterRule *, xmlNodePtr, RuleContext *); -static void build_code(FilterRule *, GString *out); -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f); - -static void filter_rule_class_init (FilterRuleClass *class); -static void filter_rule_init (FilterRule *gspaper); -static void filter_rule_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((FilterRule *)(x))->priv) - -struct _FilterRulePrivate { - GtkWidget *parts; /* where the parts are stored */ -}; - -static GtkObjectClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -filter_rule_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "FilterRule", - sizeof(FilterRule), - sizeof(FilterRuleClass), - (GtkClassInitFunc)filter_rule_class_init, - (GtkObjectInitFunc)filter_rule_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gtk_object_get_type (), &type_info); - } - - return type; -} - -static void -filter_rule_class_init (FilterRuleClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gtk_object_get_type ()); - - object_class->finalize = filter_rule_finalise; - - /* override methods */ - class->xml_encode = xml_encode; - class->xml_decode = xml_decode; - class->build_code = build_code; - class->get_widget = get_widget; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -filter_rule_init (FilterRule *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -unref_list(GList *l) -{ - while (l) { - gtk_object_unref((GtkObject *)l->data); - l = g_list_next(l); - } -} - -static void -filter_rule_finalise(GtkObject *obj) -{ - FilterRule *o = (FilterRule *)obj; - - g_free(o->name); - unref_list(o->parts); - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * filter_rule_new: - * - * Create a new FilterRule object. - * - * Return value: A new #FilterRule object. - **/ -FilterRule * -filter_rule_new(void) -{ - FilterRule *o = (FilterRule *)gtk_type_new(filter_rule_get_type ()); - return o; -} - -void filter_rule_set_name (FilterRule *fr, const char *name) -{ - g_free(fr->name); - fr->name = g_strdup(name); -} - -xmlNodePtr filter_rule_xml_encode (FilterRule *fr) -{ - return ((FilterRuleClass *)((GtkObject *)fr)->klass)->xml_encode(fr); -} - -static xmlNodePtr xml_encode(FilterRule *fr) -{ - xmlNodePtr node, set, work; - GList *l; - - node = xmlNewNode(NULL, "rule"); - switch (fr->grouping) { - case FILTER_GROUP_ALL: - xmlSetProp(node, "grouping", "all"); - break; - case FILTER_GROUP_ANY: - xmlSetProp(node, "grouping", "any"); - break; - } - - switch (fr->source) { - case FILTER_SOURCE_INCOMING: - xmlSetProp(node, "source", "incoming"); - break; - case FILTER_SOURCE_DEMAND: - xmlSetProp(node, "source", "ondemand"); - break; - case FILTER_SOURCE_OUTGOING: - xmlSetProp(node, "source", "outgoing"); - break; - } - - if (fr->name) { - work = xmlNewNode(NULL, "title"); - xmlNodeSetContent(work, fr->name); - xmlAddChild(node, work); - } - set = xmlNewNode(NULL, "partset"); - xmlAddChild(node, set); - l = fr->parts; - while (l) { - work = filter_part_xml_encode((FilterPart *)l->data); - xmlAddChild(set, work); - l = g_list_next(l); - } - return node; -} - -static void load_set(xmlNodePtr node, FilterRule *fr, RuleContext *f) -{ - xmlNodePtr work; - char *rulename; - FilterPart *part; - - work = node->childs; - while (work) { - if (!strcmp(work->name, "part")) { - rulename = xmlGetProp(work, "name"); - part = rule_context_find_part(f, rulename); - if (part) { - part = filter_part_clone(part); - filter_part_xml_decode(part, work); - filter_rule_add_part(fr, part); - } else { - g_warning("cannot find rule part '%s'\n", rulename); - } - xmlFree(rulename); - } else { - g_warning("Unknwon xml node in part: %s", work->name); - } - work = work->next; - } -} - -int filter_rule_xml_decode (FilterRule *fr, xmlNodePtr node, RuleContext *f) -{ - return ((FilterRuleClass *)((GtkObject *)fr)->klass)->xml_decode(fr, node, f); -} - -static int xml_decode(FilterRule *fr, xmlNodePtr node, RuleContext *f) -{ - xmlNodePtr work; - char *grouping; - char *source; - - if (fr->name) { - g_free(fr->name); - fr->name = NULL; - } - - grouping = xmlGetProp(node, "grouping"); - if (!strcmp(grouping, "any")) - fr->grouping = FILTER_GROUP_ANY; - else - fr->grouping = FILTER_GROUP_ALL; - - /* FIXME: free source and grouping? */ - source = xmlGetProp (node, "source"); - if (!source) /*default to incoming*/ - fr->source = FILTER_SOURCE_INCOMING; - else if (!strcmp (source, "outgoing")) - fr->source = FILTER_SOURCE_OUTGOING; - else if (!strcmp (source, "ondemand")) - fr->source = FILTER_SOURCE_DEMAND; - else if (!strcmp (source, "incoming")) - fr->source = FILTER_SOURCE_INCOMING; - else { - g_warning ("Unknown filter source type \"%s\"", source); - fr->source = FILTER_SOURCE_INCOMING; - } - - work = node->childs; - while (work) { - if (!strcmp(work->name, "partset")) { - load_set(work, fr, f); - } else if (!strcmp(work->name, "title")) { - if (!fr->name) - fr->name = xmlNodeGetContent(work); - } - work = work->next; - } - return 0; -} - -void filter_rule_add_part (FilterRule *fr, FilterPart *fp) -{ - fr->parts = g_list_append(fr->parts, fp); -} - -void filter_rule_remove_part (FilterRule *fr, FilterPart *fp) -{ - fr->parts = g_list_remove(fr->parts, fp); -} - -void filter_rule_replace_part(FilterRule *fr, FilterPart *fp, FilterPart *new) -{ - GList *l; - - l = g_list_find(fr->parts, fp); - if (l) { - l->data = new; - } else { - fr->parts = g_list_append(fr->parts, new); - } -} - -void filter_rule_build_code (FilterRule *fr, GString *out) -{ - return ((FilterRuleClass *)((GtkObject *)fr)->klass)->build_code(fr, out); -} - -static void build_code(FilterRule *fr, GString *out) -{ - switch (fr->grouping) { - case FILTER_GROUP_ALL: - g_string_append(out, " (and\n "); - break; - case FILTER_GROUP_ANY: - g_string_append(out, " (or\n "); - break; - default: - g_warning("Invalid grouping"); - } - - filter_part_build_code_list(fr->parts, out); - g_string_append(out, ")\n"); -} - - -static void -match_all(GtkRadioButton *w, FilterRule *fr) -{ - if (gtk_toggle_button_get_active((GtkToggleButton *)w)) - fr->grouping = FILTER_GROUP_ALL; -} - -static void -match_any(GtkRadioButton *w, FilterRule *fr) -{ - if (gtk_toggle_button_get_active((GtkToggleButton *)w)) - fr->grouping = FILTER_GROUP_ANY; -} - -struct _part_data { - FilterRule *fr; - RuleContext *f; - FilterPart *part; - GtkWidget *partwidget, *container; -}; - -static void option_activate(GtkMenuItem *item, struct _part_data *data) -{ - FilterPart *part = gtk_object_get_data((GtkObject *)item, "part"); - FilterPart *newpart; - - /* dont update if we haven't changed */ - if (!strcmp(part->title, data->part->title)) - return; - - /* here we do a widget shuffle, throw away the old widget/rulepart, - and create another */ - if (data->partwidget) - gtk_container_remove((GtkContainer *)data->container, data->partwidget); - newpart = filter_part_clone(part); - filter_rule_replace_part(data->fr, data->part, newpart); - gtk_object_unref((GtkObject *)data->part); - data->part = newpart; - data->partwidget = filter_part_get_widget(newpart); - if (data->partwidget) - gtk_box_pack_start((GtkBox *)data->container, data->partwidget, FALSE, FALSE, 0); -} - -static GtkWidget * -get_rule_part_widget(RuleContext *f, FilterPart *newpart, FilterRule *fr) -{ - FilterPart *part = NULL; - GtkMenu *menu; - GtkMenuItem *item; - GtkOptionMenu *omenu; - GtkHBox *hbox; - GtkWidget *p; - int index=0, current=0; - struct _part_data *data; - - data = g_malloc0(sizeof(*data)); - data->fr = fr; - data->f = f; - data->part = newpart; - - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 0); - /* only set to automatically clean up the memory */ - gtk_object_set_data_full((GtkObject *)hbox, "data", data, g_free); - - p = filter_part_get_widget(newpart); - - data->partwidget = p; - data->container = (GtkWidget *)hbox; - - menu = (GtkMenu *)gtk_menu_new(); - /* sigh, this is a little ugly */ - while ((part=rule_context_next_part(f, part))) { - item = (GtkMenuItem *)gtk_menu_item_new_with_label(part->title); - gtk_object_set_data((GtkObject *)item, "part", part); - gtk_signal_connect((GtkObject *)item, "activate", option_activate, data); - gtk_menu_append(menu, (GtkWidget *)item); - gtk_widget_show((GtkWidget *)item); - if (!strcmp(newpart->title, part->title)) { - current = index; - } - index++; - } - - omenu = (GtkOptionMenu *)gtk_option_menu_new(); - gtk_option_menu_set_menu(omenu, (GtkWidget *)menu); - gtk_option_menu_set_history(omenu, current); - gtk_widget_show((GtkWidget *)omenu); - - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)omenu, FALSE, FALSE, 0); - if (p) { - gtk_box_pack_start((GtkBox *)hbox, p, FALSE, FALSE, 0); - } - gtk_widget_show_all((GtkWidget *)hbox); - - return (GtkWidget *)hbox; -} - -struct _rule_data { - FilterRule *fr; - RuleContext *f; - GtkWidget *parts; -}; - -static void -less_parts(GtkWidget *button, struct _rule_data *data) -{ - GList *l; - FilterPart *part; - GtkWidget *w; - - l = data->fr->parts; - if (g_list_length(l) < 2) - return; - - /* remove the last one from the list */ - l = g_list_last(l); - part = l->data; - filter_rule_remove_part(data->fr, part); - gtk_object_unref((GtkObject *)part); - - /* and from the display */ - l = g_list_last(GTK_BOX(data->parts)->children); - w = ((GtkBoxChild *)l->data)->widget; - gtk_container_remove((GtkContainer *)data->parts, w); -} - -static void -more_parts(GtkWidget *button, struct _rule_data *data) -{ - FilterPart *new; - GtkWidget *w; - - /* create a new rule entry, use the first type of rule */ - new = rule_context_next_part(data->f, NULL); - if (new) { - new = filter_part_clone(new); - filter_rule_add_part(data->fr, new); - w = get_rule_part_widget(data->f, new, data->fr); - gtk_box_pack_start((GtkBox *)data->parts, w, FALSE, FALSE, 0); - } -} - -static void -name_changed(GtkEntry *entry, FilterRule *fr) -{ - g_free(fr->name); - fr->name = g_strdup(gtk_entry_get_text(entry)); -} - -GtkWidget *filter_rule_get_widget (FilterRule *fr, struct _RuleContext *f) -{ - return ((FilterRuleClass *)((GtkObject *)fr)->klass)->get_widget(fr, f); -} - -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f) -{ - GtkVBox *vbox, *parts, *inframe; - GtkHBox *hbox; - GtkWidget *w; - GtkRadioButton *g0, *g1; - GtkFrame *frame; - GtkEntry *name; - GtkLabel *label; - GList *l; - FilterPart *part; - struct _rule_data *data; - - /* this stuff should probably be a table, but the - rule parts need to be a vbox */ - vbox = (GtkVBox *)gtk_vbox_new(FALSE, 3); - - label = (GtkLabel *)gtk_label_new("Name"); - name = (GtkEntry *)gtk_entry_new(); - if (fr->name) - gtk_entry_set_text(name, fr->name); - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 3); - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)label, FALSE, FALSE, 0); - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)name, TRUE, TRUE, 0); - gtk_box_pack_start((GtkBox *)vbox, (GtkWidget *)hbox, FALSE, FALSE, 3); - gtk_signal_connect((GtkObject *)name, "changed", name_changed, fr); - - frame = (GtkFrame *)gtk_frame_new("Messages matching"); - inframe = (GtkVBox *)gtk_vbox_new(FALSE, 3); - gtk_container_add((GtkContainer *)frame, (GtkWidget *)inframe); - - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 3); - g0 = (GtkRadioButton *)gtk_radio_button_new_with_label(NULL, "Match all parts"); - g1 = (GtkRadioButton *)gtk_radio_button_new_with_label(g0->group, "Match any part"); - if (fr->grouping == FILTER_GROUP_ALL) { - gtk_toggle_button_set_active((GtkToggleButton *)g0, TRUE); - } else { - gtk_toggle_button_set_active((GtkToggleButton *)g1, TRUE); - } - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)g0, FALSE, FALSE, 0); - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)g1, FALSE, FALSE, 0); - gtk_box_pack_start((GtkBox *)inframe, (GtkWidget *)hbox, FALSE, FALSE, 3); - - gtk_signal_connect((GtkObject *)g0, "toggled", match_all, fr); - gtk_signal_connect((GtkObject *)g1, "toggled", match_any, fr); - - /* this is the parts list, it should probably be inside a scrolling list */ - parts = (GtkVBox *)gtk_vbox_new(FALSE, 3); - - /* data for the parts part of the display */ - data = g_malloc0(sizeof(*data)); - data->f = f; - data->fr = fr; - data->parts = (GtkWidget *)parts; - - /* only set to automatically clean up the memory */ - gtk_object_set_data_full((GtkObject *)vbox, "data", data, g_free); - - l = fr->parts; - while (l) { - part = l->data; - w = get_rule_part_widget(f, part, fr); - gtk_box_pack_start((GtkBox *)parts, (GtkWidget *)w, FALSE, FALSE, 3); - l = g_list_next(l); - } - - gtk_box_pack_start((GtkBox *)inframe, (GtkWidget *)parts, FALSE, FALSE, 3); - - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 3); - w = gtk_button_new_with_label(_("Less")); - gtk_signal_connect((GtkObject *)w, "clicked", less_parts, data); - gtk_box_pack_end((GtkBox *)hbox, (GtkWidget *)w, FALSE, FALSE, 3); - w = gtk_button_new_with_label(_("More")); - gtk_signal_connect((GtkObject *)w, "clicked", more_parts, data); - gtk_box_pack_end((GtkBox *)hbox, (GtkWidget *)w, FALSE, FALSE, 3); - gtk_box_pack_start((GtkBox *)inframe, (GtkWidget *)hbox, FALSE, FALSE, 3); - - gtk_box_pack_start((GtkBox *)vbox, (GtkWidget *)frame, FALSE, FALSE, 3); - - gtk_widget_show_all((GtkWidget *)vbox); - return (GtkWidget *)vbox; -} - -FilterRule *filter_rule_next_list (GList *l, FilterRule *last) -{ - GList *node = l; - - if (last != NULL) { - node = g_list_find(node, last); - if (node == NULL) - node = l; - else - node = g_list_next(node); - } - if (node) - return node->data; - return NULL; -} - -FilterRule *filter_rule_find_list (GList *l, const char *name) -{ - while (l) { - FilterRule *rule = l->data; - if (!strcmp(rule->name, name)) - return rule; - l = g_list_next(l); - } - return NULL; -} - diff --git a/filter/filter-rule.h b/filter/filter-rule.h deleted file mode 100644 index 425d0ac350..0000000000 --- a/filter/filter-rule.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _FILTER_RULE_H -#define _FILTER_RULE_H - -#include - -#include "filter-part.h" - -#define FILTER_RULE(obj) GTK_CHECK_CAST (obj, filter_rule_get_type (), FilterRule) -#define FILTER_RULE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, filter_rule_get_type (), FilterRuleClass) -#define IS_FILTER_RULE(obj) GTK_CHECK_TYPE (obj, filter_rule_get_type ()) - -typedef struct _FilterRule FilterRule; -typedef struct _FilterRuleClass FilterRuleClass; - -struct _RuleContext; - -enum _filter_grouping_t { - FILTER_GROUP_ALL, /* all rules must match */ - FILTER_GROUP_ANY /* any rule must match */ -}; - -enum _filter_source_t { - FILTER_SOURCE_INCOMING, /* performed on incoming email */ - FILTER_SOURCE_DEMAND, /* performed on the selected folder - * when the user asks for it */ - FILTER_SOURCE_OUTGOING /* performed on outgoing mail */ -}; - -struct _FilterRule { - GtkObject parent; - struct _FilterRulePrivate *priv; - - char *name; - - enum _filter_grouping_t grouping; - enum _filter_source_t source; - GList *parts; -}; - -struct _FilterRuleClass { - GtkObjectClass parent_class; - - /* virtual methods */ - xmlNodePtr (*xml_encode)(FilterRule *); - int (*xml_decode)(FilterRule *, xmlNodePtr, struct _RuleContext *); - - void (*build_code)(FilterRule *, GString *out); - - GtkWidget *(*get_widget)(FilterRule *fr, struct _RuleContext *f); - - /* signals */ -}; - -guint filter_rule_get_type (void); -FilterRule *filter_rule_new (void); - -/* methods */ -void filter_rule_set_name (FilterRule *fr, const char *name); - -xmlNodePtr filter_rule_xml_encode (FilterRule *fr); -int filter_rule_xml_decode (FilterRule *fr, xmlNodePtr node, struct _RuleContext *f); - -void filter_rule_add_part (FilterRule *fr, FilterPart *fp); -void filter_rule_remove_part (FilterRule *fr, FilterPart *fp); -void filter_rule_replace_part(FilterRule *fr, FilterPart *fp, FilterPart *new); - -GtkWidget *filter_rule_get_widget (FilterRule *fr, struct _RuleContext *f); - -void filter_rule_build_code (FilterRule *fr, GString *out); -/* -void filter_rule_build_action(FilterRule *fr, GString *out); -*/ - -/* static functions */ -FilterRule *filter_rule_next_list (GList *l, FilterRule *last); -FilterRule *filter_rule_find_list (GList *l, const char *name); - -#endif /* ! _FILTER_RULE_H */ - diff --git a/filter/filter.glade b/filter/filter.glade deleted file mode 100644 index 5f8a04d64e..0000000000 --- a/filter/filter.glade +++ /dev/null @@ -1,702 +0,0 @@ - - - - - Filter - filter - - src - pixmaps - C - True - True - - - - GnomeDialog - edit_filter - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button1 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button3 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkOptionMenu - filter_source - True - Incoming -On Demand - - 0 - - 0 - False - False - - - - - GtkFrame - frame1 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - hbox1 - False - 0 - - - GtkScrolledWindow - scrolledwindow1 - 256 - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkViewport - viewport1 - GTK_SHADOW_IN - - - GtkList - rule_list - GTK_SELECTION_SINGLE - - - - - - GtkVBox - vbox1 - False - 0 - - 0 - False - False - - - - GtkVButtonBox - vbuttonbox1 - GTK_BUTTONBOX_DEFAULT_STYLE - 0 - 85 - 27 - 6 - 0 - - 0 - False - False - - - - GtkButton - rule_add - True - True - - - - - GtkButton - rule_edit - True - True - - - - - GtkButton - rule_delete - True - True - - - - - GtkButton - rule_up - True - True - GNOME_STOCK_BUTTON_UP - - - - GtkButton - rule_down - True - True - GNOME_STOCK_BUTTON_DOWN - - - - - - - - - - GnomeDialog - edit_vfolder - Edit VFolders - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox2 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area2 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button13 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button15 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkFrame - frame2 - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - hbox2 - False - 0 - - - GtkScrolledWindow - scrolledwindow2 - 256 - 167 - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkViewport - viewport2 - GTK_SHADOW_IN - - - GtkList - rule_list - GTK_SELECTION_SINGLE - - - - - - GtkVBox - vbox2 - False - 0 - - 0 - False - False - - - - GtkVButtonBox - vbuttonbox2 - GTK_BUTTONBOX_DEFAULT_STYLE - 0 - 85 - 27 - 6 - 0 - - 0 - False - False - - - - GtkButton - rule_add - True - True - - - - - GtkButton - rule_edit - True - True - - - - - GtkButton - rule_delete - True - True - - - - - GtkButton - rule_up - True - True - GNOME_STOCK_BUTTON_UP - - - - GtkButton - rule_down - True - True - GNOME_STOCK_BUTTON_DOWN - - - - - - - - - - GnomeDialog - vfolder_source - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox3 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area3 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button16 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button17 - True - True - GNOME_STOCK_BUTTON_APPLY - - - - GtkButton - button18 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkFrame - vfolder_source_frame - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - hbox3 - False - 0 - - - GtkScrolledWindow - scrolledwindow3 - 256 - 125 - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkViewport - viewport3 - GTK_SHADOW_IN - - - GtkList - source_list - GTK_SELECTION_SINGLE - - - - - - GtkVBox - vbox3 - False - 0 - - 0 - False - False - - - - GtkVButtonBox - vbuttonbox3 - GTK_BUTTONBOX_DEFAULT_STYLE - 0 - 85 - 27 - 6 - 0 - - 0 - False - False - - - - GtkButton - source_add - True - True - - - - - GtkButton - source_remove - True - True - - - - - - - - - - - GnomeDialog - vfolder_source - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - False - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox3 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area3 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - button16 - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - button17 - True - True - GNOME_STOCK_BUTTON_APPLY - - - - GtkButton - button18 - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkFrame - vfolder_source_frame - - 0 - GTK_SHADOW_ETCHED_IN - - 0 - True - True - - - - GtkHBox - hbox3 - False - 0 - - - GtkScrolledWindow - scrolledwindow3 - 256 - 125 - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_UPDATE_CONTINUOUS - GTK_UPDATE_CONTINUOUS - - 0 - True - True - - - - GtkViewport - viewport3 - GTK_SHADOW_IN - - - GtkList - source_list - GTK_SELECTION_SINGLE - - - - - - GtkVBox - vbox3 - False - 0 - - 0 - False - False - - - - GtkVButtonBox - vbuttonbox3 - GTK_BUTTONBOX_DEFAULT_STYLE - 0 - 85 - 27 - 6 - 0 - - 0 - False - False - - - - GtkButton - source_add - True - True - - - - - GtkButton - source_remove - True - True - - - - - - - - - - diff --git a/filter/filtertypes.xml b/filter/filtertypes.xml deleted file mode 100644 index 0c38ce575c..0000000000 --- a/filter/filtertypes.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - - - Sender - - - - - - - - Recipients - - - - - - - - Subject - - - - - - - - Message Body - - - - - - - - Expression - - - - - Message was sent - - - - - - - - - - - - Message was received - - - - - - - - - - - - - - - - Copy to Folder - (copy-to ${folder}) - - - - Forward to address - (forward-to ${address}) - - - - Delete - (delete) - - - Stop processing - (stop) - - - Assign Colour - (set-colour ${colour}) - - - - - - - - - diff --git a/filter/rule-context.c b/filter/rule-context.c deleted file mode 100644 index 653627a550..0000000000 --- a/filter/rule-context.c +++ /dev/null @@ -1,427 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "rule-context.h" - -#define d(x) x - -static int load(RuleContext *f, const char *system, const char *user, - RCRegisterFunc on_demand_cb, gpointer user_data); -static int save(RuleContext *f, const char *user); - -static void rule_context_class_init (RuleContextClass *class); -static void rule_context_init (RuleContext *gspaper); -static void rule_context_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((RuleContext *)(x))->priv) - -struct _RuleContextPrivate { -}; - -static GtkObjectClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -rule_context_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "RuleContext", - sizeof(RuleContext), - sizeof(RuleContextClass), - (GtkClassInitFunc)rule_context_class_init, - (GtkObjectInitFunc)rule_context_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gtk_object_get_type (), &type_info); - } - - return type; -} - -static void -rule_context_class_init (RuleContextClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gtk_object_get_type ()); - - object_class->finalize = rule_context_finalise; - - /* override methods */ - class->load = load; - class->save = save; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -rule_context_init (RuleContext *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); - - o->part_set_map = g_hash_table_new(g_str_hash, g_str_equal); - o->rule_set_map = g_hash_table_new(g_str_hash, g_str_equal); -} - -static void -rule_context_finalise(GtkObject *obj) -{ - RuleContext *o = (RuleContext *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * rule_context_new: - * - * Create a new RuleContext object. - * - * Return value: A new #RuleContext object. - **/ -RuleContext * -rule_context_new(void) -{ - RuleContext *o = (RuleContext *)gtk_type_new(rule_context_get_type ()); - return o; -} - -void rule_context_add_part_set(RuleContext *f, const char *setname, int part_type, RCPartFunc append, RCNextPartFunc next) -{ - struct _part_set_map *map; - - map = g_malloc0(sizeof(*map)); - map->type = part_type; - map->append = append; - map->next = next; - map->name = g_strdup(setname); - g_hash_table_insert(f->part_set_map, map->name, map); - f->part_set_list = g_list_append(f->part_set_list, map); - d(printf("adding part set '%s'\n", setname)); -} - -void rule_context_add_rule_set(RuleContext *f, const char *setname, int rule_type, RCRuleFunc append, RCNextRuleFunc next) -{ - struct _rule_set_map *map; - - map = g_malloc0(sizeof(*map)); - map->type = rule_type; - map->append = append; - map->next = next; - map->name = g_strdup(setname); - g_hash_table_insert(f->rule_set_map, map->name, map); - f->rule_set_list = g_list_append(f->rule_set_list, map); - d(printf("adding rule set '%s'\n", setname)); -} - -/** - * rule_context_set_error: - * @f: - * @error: - * - * Set the text error for the context, or NULL to clear it. - **/ -static void -rule_context_set_error(RuleContext *f, char *error) -{ - g_free(f->error); - f->error = error; -} - -/** - * rule_context_load: - * @f: - * @system: - * @user: - * @on_demand_cb: An optional callback to allow UI registration of on-demand rules - * @user_data: Extra data for the callback - * - * Load a rule context from a system and user description file. - * - * Return value: - **/ -int rule_context_load(RuleContext *f, const char *system, const char *user, - RCRegisterFunc on_demand_cb, gpointer user_data ) -{ - printf("rule_context: loading %s %s\n", system, user); - - return ((RuleContextClass *)((GtkObject *)f)->klass)->load(f, system, user, - on_demand_cb, - user_data); -} - -static int load(RuleContext *f, const char *system, const char *user, - RCRegisterFunc on_demand_cb, gpointer user_data) -{ - xmlNodePtr set, rule; - struct _part_set_map *part_map; - struct _rule_set_map *rule_map; - - rule_context_set_error(f, NULL); - - d(printf("loading rules %s %s\n", system, user)); - - f->system = xmlParseFile(system); - if (f->system == NULL) { - rule_context_set_error(f, g_strdup_printf("Unable to load system rules '%s': %s", - system, strerror(errno))); - return -1; - } - if (strcmp(f->system->root->name, "filterdescription")) { - rule_context_set_error(f, g_strdup_printf("Unable to load system rules '%s': Invalid format", - system)); - xmlFreeDoc(f->system); - f->system = NULL; - return -1; - } - /* doesn't matter if this doens't exist */ - f->user = xmlParseFile(user); - - /* now parse structure */ - /* get rule parts */ - set = f->system->root->childs; - while (set) { - d(printf("set name = %s\n", set->name)); - part_map = g_hash_table_lookup(f->part_set_map, set->name); - if (part_map) { - d(printf("loading parts ...\n")); - rule = set->childs; - while (rule) { - if (!strcmp(rule->name, "part")) { - FilterPart *part = FILTER_PART(gtk_type_new(part_map->type)); - if (filter_part_xml_create(part, rule) == 0) { - part_map->append(f, part); - } else { - gtk_object_unref((GtkObject *)part); - g_warning("Cannot load filter part"); - } - } - rule = rule->next; - } - } - set = set->next; - } - - /* now load actual rules */ - if (f->user) { - set = f->user->root->childs; - while (set) { - d(printf("set name = %s\n", set->name)); - rule_map = g_hash_table_lookup(f->rule_set_map, set->name); - if (rule_map) { - d(printf("loading rules ...\n")); - rule = set->childs; - while (rule) { - printf("checking node: %s\n", rule->name); - if (!strcmp(rule->name, "rule")) { - FilterRule *part = FILTER_RULE(gtk_type_new(rule_map->type)); - if (filter_rule_xml_decode(part, rule, f) == 0) { - rule_map->append(f, part); - - if (on_demand_cb && part->source == FILTER_SOURCE_DEMAND) - (on_demand_cb) (f, part, user_data); - } else { - gtk_object_unref((GtkObject *)part); - g_warning("Cannot load filter part"); - } - } - rule = rule->next; - } - } - set = set->next; - } - } - return 0; -} - -/** - * rule_context_save: - * @f: - * @user: - * - * Save a rule context to disk. - * - * Return value: - **/ -int rule_context_save(RuleContext *f, const char *user) -{ - return ((RuleContextClass *)((GtkObject *)f)->klass)->save(f, user); -} - -static int save(RuleContext *f, const char *user) -{ - xmlDocPtr doc; - xmlNodePtr root, rules, work; - GList *l; - FilterRule *rule; - struct _rule_set_map *map; - - doc = xmlNewDoc("1.0"); - root = xmlNewDocNode(doc, NULL, "filteroptions", NULL); - xmlDocSetRootElement(doc, root); - l = f->rule_set_list; - while (l) { - map = l->data; - rules = xmlNewDocNode(doc, NULL, map->name, NULL); - xmlAddChild(root, rules); - rule = NULL; - while ( (rule = map->next(f, rule)) ) { - d(printf("processing rule %s\n", rule->name)); - work = filter_rule_xml_encode(rule); - xmlAddChild(rules, work); - } - l = g_list_next(l); - } - xmlSaveFile(user, doc); - xmlFreeDoc(doc); - return 0; -} - -FilterPart *rule_context_find_part(RuleContext *f, const char *name) -{ - d(printf("find part : ")); - return filter_part_find_list(f->parts, name); -} - -FilterPart *rule_context_create_part(RuleContext *f, const char *name) -{ - FilterPart *part; - - part = rule_context_find_part(f, name); - if (part) - part = filter_part_clone(part); - return part; -} - -FilterPart *rule_context_next_part(RuleContext *f, FilterPart *last) -{ - return filter_part_next_list(f->parts, last); -} - -FilterRule *rule_context_next_rule(RuleContext *f, FilterRule *last) -{ - return filter_rule_next_list(f->rules, last); -} - -FilterRule *rule_context_find_rule(RuleContext *f, const char *name) -{ - return filter_rule_find_list(f->rules, name); -} - -void rule_context_add_part(RuleContext *f, FilterPart *part) -{ - f->parts = g_list_append(f->parts, part); -} - -void rule_context_add_rule(RuleContext *f, FilterRule *new) -{ - f->rules = g_list_append(f->rules, new); -} - -static void -new_rule_clicked(GtkWidget *w, int button, RuleContext *context) -{ -#ifndef NO_WARNINGS -#warning "Need a changed signal for this to work best" -#endif - if (button == 0) { - FilterRule *rule = gtk_object_get_data((GtkObject *)w, "rule"); - char *user = gtk_object_get_data((GtkObject *)w, "path"); - - gtk_object_ref((GtkObject *)rule); - rule_context_add_rule(context, rule); - if (user) { - rule_context_save((RuleContext *)context, user); - } - } - if (button != -1) { - gnome_dialog_close((GnomeDialog *)w); - } -} - -/* add a rule, with a gui, asking for confirmation first ... optionally save to path */ -void rule_context_add_rule_gui(RuleContext *f, FilterRule *rule, const char *title, const char *path) -{ - GtkWidget *w; - GnomeDialog *gd; - - w = filter_rule_get_widget(rule, f); - gd = (GnomeDialog *)gnome_dialog_new(title, GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - gtk_object_set_data_full((GtkObject *)gd, "rule", rule, (GtkDestroyNotify)gtk_object_unref); - if (path) - gtk_object_set_data_full((GtkObject *)gd, "path", g_strdup(path), (GtkDestroyNotify)g_free); - gtk_signal_connect((GtkObject *)gd, "clicked", new_rule_clicked, f); - gtk_object_ref((GtkObject *)f); - gtk_object_set_data_full((GtkObject *)gd, "context", f, (GtkDestroyNotify)gtk_object_unref); - gtk_widget_show((GtkWidget *)gd); -} - -void rule_context_remove_rule(RuleContext *f, FilterRule *rule) -{ - f->rules = g_list_remove(f->rules, rule); -} - -void rule_context_rank_rule(RuleContext *f, FilterRule *rule, int rank) -{ - f->rules = g_list_remove(f->rules, rule); - f->rules = g_list_insert(f->rules, rule, rank); -} - -int rule_context_get_rank_rule(RuleContext *f, FilterRule *rule) -{ - return g_list_index(f->rules, rule); -} - -int -rule_context_get_rank_rule_with_source(RuleContext *f, FilterRule *rule, enum _filter_source_t source) -{ - int i; - GList *iter; - - i = 0; - for (iter = f->rules; iter; iter = iter->next) { - if (iter->data == rule) - return i; - if (((FilterRule *)iter->data)->source == source) - i++; - } - - return -1; -} diff --git a/filter/rule-context.h b/filter/rule-context.h deleted file mode 100644 index 27078adbcf..0000000000 --- a/filter/rule-context.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _RULE_CONTEXT_H -#define _RULE_CONTEXT_H - -#include -#include - -#include "filter-part.h" -#include "filter-rule.h" - -#define RULE_CONTEXT(obj) GTK_CHECK_CAST (obj, rule_context_get_type (), RuleContext) -#define RULE_CONTEXT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, rule_context_get_type (), RuleContextClass) -#define IS_RULE_CONTEXT(obj) GTK_CHECK_TYPE (obj, rule_context_get_type ()) - -typedef struct _RuleContext RuleContext; -typedef struct _RuleContextClass RuleContextClass; - -struct _RuleContext { - GtkObject parent; - struct _RuleContextPrivate *priv; - - char *error; /* string version of error */ - - xmlDocPtr system; /* system rules source */ - xmlDocPtr user; /* user defined rules source */ - - GList *parts; - GList *rules; - - GHashTable *part_set_map;/* map set types to part types */ - GList *part_set_list; - GHashTable *rule_set_map;/* map set types to rule types */ - GList *rule_set_list; -}; - -typedef void (*RCRegisterFunc)(RuleContext *f, FilterRule *rule, gpointer data); - -struct _RuleContextClass { - GtkObjectClass parent_class; - - /* virtual methods */ - int (*load)(RuleContext *f, const char *system, const char *user, - RCRegisterFunc on_demand_cb, gpointer user_data); - int (*save)(RuleContext *f, const char *user); - - /* signals */ -}; - -typedef void (*RCPartFunc)(RuleContext *f, FilterPart *part); -typedef void (*RCRuleFunc)(RuleContext *f, FilterRule *part); -typedef FilterPart * (*RCNextPartFunc)(RuleContext *f, FilterPart *part); -typedef FilterRule * (*RCNextRuleFunc)(RuleContext *f, FilterRule *rule); - -struct _part_set_map { - char *name; - int type; - RCPartFunc append; - RCNextPartFunc next; -}; - -struct _rule_set_map { - char *name; - int type; - RCRuleFunc append; - RCNextRuleFunc next; -}; - -guint rule_context_get_type (void); -RuleContext *rule_context_new (void); - -/* methods */ -int rule_context_load(RuleContext *f, const char *system, const char *user, - RCRegisterFunc on_demand_cb, gpointer user_data); -int rule_context_save(RuleContext *f, const char *user); - -void rule_context_add_part(RuleContext *f, FilterPart *new); -FilterPart *rule_context_find_part(RuleContext *f, const char *name); -FilterPart *rule_context_create_part(RuleContext *f, const char *name); -FilterPart *rule_context_next_part(RuleContext *f, FilterPart *last); - -FilterRule *rule_context_next_rule(RuleContext *f, FilterRule *last); -FilterRule *rule_context_find_rule(RuleContext *f, const char *name); -void rule_context_add_rule(RuleContext *f, FilterRule *new); -void rule_context_add_rule_gui(RuleContext *f, FilterRule *rule, const char *title, const char *path); -void rule_context_remove_rule(RuleContext *f, FilterRule *rule); - -/* get/set the rank (position) of a rule */ -void rule_context_rank_rule(RuleContext *f, FilterRule *rule, int rank); -int rule_context_get_rank_rule(RuleContext *f, FilterRule *rule); -int rule_context_get_rank_rule_with_source(RuleContext *f, FilterRule *rule, enum _filter_source_t source); - -void rule_context_delete_rule(RuleContext *f, FilterRule *rule); - -/* setup type for set parts */ -void rule_context_add_part_set(RuleContext *f, const char *setname, int part_type, RCPartFunc append, RCNextPartFunc next); -void rule_context_add_rule_set(RuleContext *f, const char *setname, int rule_type, RCRuleFunc append, RCNextRuleFunc next); - -#endif /* ! _RULE_CONTEXT_H */ - diff --git a/filter/score-context.c b/filter/score-context.c deleted file mode 100644 index a171bd1240..0000000000 --- a/filter/score-context.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "score-context.h" -#include "score-rule.h" - -static void score_context_class_init (ScoreContextClass *class); -static void score_context_init (ScoreContext *gspaper); -static void score_context_finalise (GtkObject *obj); - -static RuleContextClass *parent_class; - -guint -score_context_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "ScoreContext", - sizeof(ScoreContext), - sizeof(ScoreContextClass), - (GtkClassInitFunc)score_context_class_init, - (GtkObjectInitFunc)score_context_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(rule_context_get_type (), &type_info); - } - - return type; -} - -static void -score_context_class_init (ScoreContextClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(rule_context_get_type ()); - - object_class->finalize = score_context_finalise; - /* override methods */ - -} - -static void -score_context_init (ScoreContext *o) -{ - rule_context_add_part_set((RuleContext *)o, "partset", filter_part_get_type(), - rule_context_add_part, rule_context_next_part); - - rule_context_add_rule_set((RuleContext *)o, "ruleset", score_rule_get_type(), - rule_context_add_rule, rule_context_next_rule); -} - -static void -score_context_finalise(GtkObject *obj) -{ - ScoreContext *o = (ScoreContext *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * score_context_new: - * - * Create a new ScoreContext object. - * - * Return value: A new #ScoreContext object. - **/ -ScoreContext * -score_context_new(void) -{ - ScoreContext *o = (ScoreContext *)gtk_type_new(score_context_get_type ()); - return o; -} diff --git a/filter/score-context.h b/filter/score-context.h deleted file mode 100644 index b89f70c1f8..0000000000 --- a/filter/score-context.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _SCORE_CONTEXT_H -#define _SCORE_CONTEXT_H - -#include - -#include "rule-context.h" - -#define SCORE_CONTEXT(obj) GTK_CHECK_CAST (obj, score_context_get_type (), ScoreContext) -#define SCORE_CONTEXT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, score_context_get_type (), ScoreContextClass) -#define IS_SCORE_CONTEXT(obj) GTK_CHECK_TYPE (obj, score_context_get_type ()) - -typedef struct _ScoreContext ScoreContext; -typedef struct _ScoreContextClass ScoreContextClass; - -struct _ScoreContext { - RuleContext parent; -}; - -struct _ScoreContextClass { - RuleContextClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint score_context_get_type (void); -ScoreContext *score_context_new (void); - -/* methods */ - -#endif /* ! _SCORE_CONTEXT_H */ - diff --git a/filter/score-editor.c b/filter/score-editor.c deleted file mode 100644 index 6598cd9e33..0000000000 --- a/filter/score-editor.c +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "score-editor.h" -#include "score-context.h" -#include "score-rule.h" - -#define d(x) - -#if 0 -static void score_editor_class_init (ScoreEditorClass *class); -static void score_editor_init (ScoreEditor *gspaper); - -static GnomeDialogClass *parent_class; - -guint -score_editor_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "ScoreEditor", - sizeof(ScoreEditor), - sizeof(ScoreEditorClass), - (GtkClassInitFunc)score_editor_class_init, - (GtkObjectInitFunc)score_editor_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gnome_dialog_get_type (), &type_info); - } - - return type; -} - -static void -score_editor_class_init (ScoreEditorClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gnome_dialog_get_type ()); - - /* override methods */ - -} - -static void -score_editor_init (ScoreEditor *o) -{ -} - -/** - * score_editor_new: - * - * Create a new ScoreEditor object. - * - * Return value: A new #ScoreEditor object. - **/ -ScoreEditor * -score_editor_new(void) -{ - ScoreEditor *o = (ScoreEditor *)gtk_type_new(score_editor_get_type ()); - return o; -} -#endif - - -enum { - BUTTON_ADD, - BUTTON_EDIT, - BUTTON_DELETE, - BUTTON_UP, - BUTTON_DOWN, - BUTTON_LAST -}; - -struct _editor_data { - RuleContext *f; - FilterRule *current; - GtkList *list; - GtkButton *buttons[BUTTON_LAST]; -}; - -static void set_sensitive(struct _editor_data *data); - -static void rule_add(GtkWidget *widget, struct _editor_data *data) -{ - ScoreRule *rule; - int result; - GnomeDialog *gd; - GtkWidget *w; - FilterPart *part; - - d(printf("add rule\n")); - /* create a new rule with 1 match and 1 action */ - rule = score_rule_new(); - - part = rule_context_next_part(data->f, NULL); - filter_rule_add_part((FilterRule *)rule, filter_part_clone(part)); - - w = filter_rule_get_widget((FilterRule *)rule, data->f); - gd = (GnomeDialog *)gnome_dialog_new(_("Add Rule"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, - NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - result = gnome_dialog_run_and_close(gd); - if (result == 0) { - GtkListItem *item = (GtkListItem *)gtk_list_item_new_with_label(((FilterRule *)rule)->name); - GList *l = NULL; - - gtk_object_set_data((GtkObject *)item, "rule", rule); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(l, item); - gtk_list_append_items(data->list, l); - gtk_list_select_child(data->list, (GtkWidget *)item); - data->current = (FilterRule *)rule; - rule_context_add_rule(data->f, (FilterRule *)rule); - set_sensitive(data); - } else { - gtk_object_unref((GtkObject *)rule); - } -} - -static void rule_edit(GtkWidget *widget, struct _editor_data *data) -{ - GtkWidget *w; - int result; - GnomeDialog *gd; - FilterRule *rule; - int pos; - - d(printf("edit rule\n")); - rule = data->current; - w = filter_rule_get_widget(rule, data->f); - gd = (GnomeDialog *)gnome_dialog_new(_("Edit Score Rule"), GNOME_STOCK_BUTTON_OK, NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - result = gnome_dialog_run_and_close(gd); - - if (result == 0) { - pos = rule_context_get_rank_rule(data->f, data->current); - if (pos != -1) { - GtkListItem *item = g_list_nth_data(data->list->children, pos); - gtk_label_set_text((GtkLabel *)(((GtkBin *)item)->child), data->current->name); - } - } -} - -static void rule_delete(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - GList *l; - GtkListItem *item; - - d(printf("ddelete rule\n")); - pos = rule_context_get_rank_rule(data->f, data->current); - if (pos != -1) { - rule_context_remove_rule(data->f, data->current); - - item = g_list_nth_data(data->list->children, pos); - l = g_list_append(NULL, item); - gtk_list_remove_items(data->list, l); - g_list_free(l); - - gtk_object_unref((GtkObject *)data->current); - data->current = NULL; - } - set_sensitive(data); -} - -static void rule_move(struct _editor_data *data, int from, int to) -{ - GList *l; - GtkListItem *item; - - d(printf("moving %d to %d\n", from, to)); - rule_context_rank_rule(data->f, data->current, to); - - item = g_list_nth_data(data->list->children, from); - l = g_list_append(NULL, item); - gtk_list_remove_items_no_unref(data->list, l); - gtk_list_insert_items(data->list, l, to); - gtk_list_select_child(data->list, (GtkWidget *)item); - set_sensitive(data); -} - -static void rule_up(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - - d(printf("up rule\n")); - pos = rule_context_get_rank_rule(data->f, data->current); - if (pos>0) { - rule_move(data, pos, pos-1); - } -} - -static void rule_down(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - - d(printf("down rule\n")); - pos = rule_context_get_rank_rule(data->f, data->current); - rule_move(data, pos, pos+1); -} - -static struct { - char *name; - GtkSignalFunc func; -} edit_buttons[] = { - { "rule_add", rule_add }, - { "rule_edit", rule_edit }, - { "rule_delete", rule_delete }, - { "rule_up", rule_up }, - { "rule_down", rule_down }, -}; - -static void -set_sensitive(struct _editor_data *data) -{ - FilterRule *rule = NULL; - int index=-1, count=0; - - while ((rule = rule_context_next_rule(data->f, rule))) { - if (rule == data->current) - index=count; - count++; - } - d(printf("index = %d count=%d\n", index, count)); - count--; - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_EDIT], index != -1); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_DELETE], index != -1); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_UP], index > 0); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_DOWN], index >=0 && indexcurrent = gtk_object_get_data((GtkObject *)child, "rule"); - if (data->current) - d(printf("seledct rule: %s\n", data->current->name)); - else - d(printf("bad data?\n")); - set_sensitive(data); -} - -GtkWidget *score_editor_construct (struct _ScoreContext *f) -{ - GladeXML *gui; - GtkWidget *d, *w; - GList *l; - FilterRule *rule = NULL; - struct _editor_data *data; - int i; - - g_assert(IS_SCORE_CONTEXT(f)); - - data = g_malloc0(sizeof(*data)); - data->f = (RuleContext *)f; - - gui = glade_xml_new(FILTER_GLADEDIR "/filter.glade", "edit_vfolder"); - d = glade_xml_get_widget (gui, "edit_vfolder"); - gtk_object_set_data_full((GtkObject *)d, "data", data, g_free); - - gtk_window_set_title((GtkWindow *)d, "Edit Score List"); - for (i=0;ibuttons[i] = (GtkButton *)w = glade_xml_get_widget (gui, edit_buttons[i].name); - gtk_signal_connect((GtkObject *)w, "clicked", edit_buttons[i].func, data); - } - - w = glade_xml_get_widget (gui, "rule_list"); - data->list = (GtkList *)w; - l = NULL; - while ((rule = rule_context_next_rule((RuleContext *)f, rule))) { - GtkListItem *item = (GtkListItem *)gtk_list_item_new_with_label(rule->name); - gtk_object_set_data((GtkObject *)item, "rule", rule); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(l, item); - } - gtk_list_append_items(data->list, l); - gtk_signal_connect((GtkObject *)w, "select_child", select_rule, data); - - set_sensitive(data); - gtk_object_unref((GtkObject *)gui); - - return d; -} diff --git a/filter/score-editor.h b/filter/score-editor.h deleted file mode 100644 index cb78d465f0..0000000000 --- a/filter/score-editor.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _SCORE_EDITOR_H -#define _SCORE_EDITOR_H - -#include -#include - -#if 0 -/* NOTE: object stuff not used (yet?), this is just a holder file for a static factory */ - -#define SCORE_EDITOR(obj) GTK_CHECK_CAST (obj, score_editor_get_type (), ScoreEditor) -#define SCORE_EDITOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, score_editor_get_type (), ScoreEditorClass) -#define IS_SCORE_EDITOR(obj) GTK_CHECK_TYPE (obj, score_editor_get_type ()) - -typedef struct _ScoreEditor ScoreEditor; -typedef struct _ScoreEditorClass ScoreEditorClass; - -struct _ScoreEditor { - GnomeDialog parent; -}; - -struct _ScoreEditorClass { - GnomeDialogClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint score_editor_get_type (void); -ScoreEditor *score_editor_new (void); -#endif - -struct _ScoreContext; - -/* methods */ -GtkWidget *score_editor_construct (struct _ScoreContext *f); - -#endif /* ! _SCORE_EDITOR_H */ - diff --git a/filter/score-rule.c b/filter/score-rule.c deleted file mode 100644 index 8eb51b6821..0000000000 --- a/filter/score-rule.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "score-rule.h" - -static xmlNodePtr xml_encode(FilterRule *); -static int xml_decode(FilterRule *, xmlNodePtr, struct _RuleContext *f); -/*static void build_code(FilterRule *, GString *out);*/ -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f); - -static void score_rule_class_init (ScoreRuleClass *class); -static void score_rule_init (ScoreRule *gspaper); -static void score_rule_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((ScoreRule *)(x))->priv) - -struct _ScoreRulePrivate { -}; - -static FilterRuleClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -score_rule_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "ScoreRule", - sizeof(ScoreRule), - sizeof(ScoreRuleClass), - (GtkClassInitFunc)score_rule_class_init, - (GtkObjectInitFunc)score_rule_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_rule_get_type (), &type_info); - } - - return type; -} - -static void -score_rule_class_init (ScoreRuleClass *class) -{ - GtkObjectClass *object_class; - FilterRuleClass *rule_class = (FilterRuleClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_rule_get_type ()); - - object_class->finalize = score_rule_finalise; - - /* override methods */ - rule_class->xml_encode = xml_encode; - rule_class->xml_decode = xml_decode; -/* rule_class->build_code = build_code;*/ - rule_class->get_widget = get_widget; - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -score_rule_init (ScoreRule *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -score_rule_finalise(GtkObject *obj) -{ - ScoreRule *o = (ScoreRule *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * score_rule_new: - * - * Create a new ScoreRule object. - * - * Return value: A new #ScoreRule object. - **/ -ScoreRule * -score_rule_new(void) -{ - ScoreRule *o = (ScoreRule *)gtk_type_new(score_rule_get_type ()); - return o; -} - -static xmlNodePtr xml_encode(FilterRule *fr) -{ - ScoreRule *sr = (ScoreRule *)fr; - xmlNodePtr node, value; - char number[16]; - - node = ((FilterRuleClass *)(parent_class))->xml_encode(fr); - sprintf(number, "%d", sr->score); - value = xmlNewNode(NULL, "score"); - xmlSetProp(value, "value", number); - xmlAddChild(node, value); - return node; -} - -static int xml_decode(FilterRule *fr, xmlNodePtr node, struct _RuleContext *f) -{ - ScoreRule *sr = (ScoreRule *)fr; - xmlNodePtr value; - int result; - char *str; - - result = ((FilterRuleClass *)(parent_class))->xml_decode(fr, node, f); - if (result != 0) - return result; - value = node->childs; - while (value) { - if (!strcmp(value->name, "score")) { - str = xmlGetProp(value, "value"); - sscanf(str, "%d", &sr->score); - } - value = value->next; - } - return 0; -} - -/*static void build_code(FilterRule *fr, GString *out) -{ -}*/ - -static void spin_changed(GtkAdjustment *adj, ScoreRule *sr) -{ - sr->score = adj->value; -} - -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f) -{ - GtkWidget *widget; - GtkFrame *frame; - GtkLabel *label; - GtkHBox *hbox; - GtkAdjustment *adj; - ScoreRule *sr = (ScoreRule *)fr; - GtkSpinButton *spin; - - widget = ((FilterRuleClass *)(parent_class))->get_widget(fr, f); - frame = (GtkFrame *)gtk_frame_new("Score"); - hbox = (GtkHBox *)gtk_hbox_new(FALSE, 3); - label = (GtkLabel *)gtk_label_new("Score"); - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)label, FALSE, FALSE, 3); - adj = (GtkAdjustment *)gtk_adjustment_new((float)sr->score, -100, 100, 1, 10, 10); - gtk_signal_connect((GtkObject *)adj, "value_changed", spin_changed, sr); - spin = (GtkSpinButton *)gtk_spin_button_new(adj, 1.0, 0); - gtk_box_pack_start((GtkBox *)hbox, (GtkWidget *)spin, FALSE, FALSE, 3); - gtk_container_add((GtkContainer *)frame, (GtkWidget *)hbox); - gtk_widget_show_all((GtkWidget *)frame); - - gtk_box_pack_start((GtkBox *)widget, (GtkWidget *)frame, FALSE, FALSE, 3); - return widget; -} diff --git a/filter/score-rule.h b/filter/score-rule.h deleted file mode 100644 index 25607fd7c4..0000000000 --- a/filter/score-rule.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _SCORE_RULE_H -#define _SCORE_RULE_H - -#include - -#include "filter-rule.h" - -#define SCORE_RULE(obj) GTK_CHECK_CAST (obj, score_rule_get_type (), ScoreRule) -#define SCORE_RULE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, score_rule_get_type (), ScoreRuleClass) -#define IS_SCORE_RULE(obj) GTK_CHECK_TYPE (obj, score_rule_get_type ()) - -typedef struct _ScoreRule ScoreRule; -typedef struct _ScoreRuleClass ScoreRuleClass; - -struct _ScoreRule { - FilterRule parent; - struct _ScoreRulePrivate *priv; - - int score; -}; - -struct _ScoreRuleClass { - FilterRuleClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint score_rule_get_type (void); -ScoreRule *score_rule_new (void); - -/* methods */ - -#endif /* ! _SCORE_RULE_H */ - diff --git a/filter/vfolder-context.c b/filter/vfolder-context.c deleted file mode 100644 index 41453ea310..0000000000 --- a/filter/vfolder-context.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#include "vfolder-context.h" -#include "vfolder-rule.h" - -static void vfolder_context_class_init (VfolderContextClass *class); -static void vfolder_context_init (VfolderContext *gspaper); -static void vfolder_context_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((VfolderContext *)(x))->priv) - -struct _VfolderContextPrivate { -}; - -static RuleContextClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -vfolder_context_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "VfolderContext", - sizeof(VfolderContext), - sizeof(VfolderContextClass), - (GtkClassInitFunc)vfolder_context_class_init, - (GtkObjectInitFunc)vfolder_context_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(rule_context_get_type (), &type_info); - } - - return type; -} - -static void -vfolder_context_class_init (VfolderContextClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(rule_context_get_type ()); - - object_class->finalize = vfolder_context_finalise; - /* override methods */ - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -vfolder_context_init (VfolderContext *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); - - rule_context_add_part_set((RuleContext *)o, "partset", filter_part_get_type(), - rule_context_add_part, rule_context_next_part); - - rule_context_add_rule_set((RuleContext *)o, "ruleset", vfolder_rule_get_type(), - rule_context_add_rule, rule_context_next_rule); -} - -static void -vfolder_context_finalise(GtkObject *obj) -{ - VfolderContext *o = (VfolderContext *)obj; - - o = o; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * vfolder_context_new: - * - * Create a new VfolderContext object. - * - * Return value: A new #VfolderContext object. - **/ -VfolderContext * -vfolder_context_new(void) -{ - VfolderContext *o = (VfolderContext *)gtk_type_new(vfolder_context_get_type ()); - return o; -} diff --git a/filter/vfolder-context.h b/filter/vfolder-context.h deleted file mode 100644 index 0bf1b5aaf2..0000000000 --- a/filter/vfolder-context.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _VFOLDER_CONTEXT_H -#define _VFOLDER_CONTEXT_H - -#include - -#include "rule-context.h" - -#define VFOLDER_CONTEXT(obj) GTK_CHECK_CAST (obj, vfolder_context_get_type (), VfolderContext) -#define VFOLDER_CONTEXT_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, vfolder_context_get_type (), VfolderContextClass) -#define IS_VFOLDER_CONTEXT(obj) GTK_CHECK_TYPE (obj, vfolder_context_get_type ()) - -typedef struct _VfolderContext VfolderContext; -typedef struct _VfolderContextClass VfolderContextClass; - -struct _VfolderContext { - RuleContext parent; - struct _VfolderContextPrivate *priv; - -}; - -struct _VfolderContextClass { - RuleContextClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint vfolder_context_get_type (void); -VfolderContext *vfolder_context_new (void); - -/* methods */ - -#endif /* ! _VFOLDER_CONTEXT_H */ - diff --git a/filter/vfolder-editor.c b/filter/vfolder-editor.c deleted file mode 100644 index c5bf378625..0000000000 --- a/filter/vfolder-editor.c +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "vfolder-editor.h" -#include "vfolder-context.h" -#include "vfolder-rule.h" - -#define d(x) - -#if 0 -static void vfolder_editor_class_init (VfolderEditorClass *class); -static void vfolder_editor_init (VfolderEditor *gspaper); -static void vfolder_editor_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((VfolderEditor *)(x))->priv) - -struct _VfolderEditorPrivate { -}; - -static GnomeDialogClass *parent_class; - -enum { - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -guint -vfolder_editor_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "VfolderEditor", - sizeof(VfolderEditor), - sizeof(VfolderEditorClass), - (GtkClassInitFunc)vfolder_editor_class_init, - (GtkObjectInitFunc)vfolder_editor_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(gnome_dialog_get_type (), &type_info); - } - - return type; -} - -static void -vfolder_editor_class_init (VfolderEditorClass *class) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(gnome_dialog_get_type ()); - - object_class->finalize = vfolder_editor_finalise; - /* override methods */ - - /* signals */ - - gtk_object_class_add_signals(object_class, signals, LAST_SIGNAL); -} - -static void -vfolder_editor_init (VfolderEditor *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -vfolder_editor_finalise(GtkObject *obj) -{ - VfolderEditor *o = (VfolderEditor *)obj; - - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * vfolder_editor_new: - * - * Create a new VfolderEditor object. - * - * Return value: A new #VfolderEditor object. - **/ -VfolderEditor * -vfolder_editor_new(void) -{ - VfolderEditor *o = (VfolderEditor *)gtk_type_new(vfolder_editor_get_type ()); - return o; -} -#endif - - - -enum { - BUTTON_ADD, - BUTTON_EDIT, - BUTTON_DELETE, - BUTTON_UP, - BUTTON_DOWN, - BUTTON_LAST -}; - -struct _editor_data { - RuleContext *f; - FilterRule *current; - GtkList *list; - GtkButton *buttons[BUTTON_LAST]; -}; - -static void set_sensitive(struct _editor_data *data); - -static void rule_add(GtkWidget *widget, struct _editor_data *data) -{ - FilterRule *rule; - int result; - GnomeDialog *gd; - GtkWidget *w; - FilterPart *part; - - d(printf("add rule\n")); - /* create a new rule with 1 match and 1 action */ - rule = (FilterRule *) vfolder_rule_new(); - - part = rule_context_next_part(data->f, NULL); - filter_rule_add_part(rule, filter_part_clone(part)); - - w = filter_rule_get_widget(rule, data->f); - gd = (GnomeDialog *)gnome_dialog_new(_("Add Rule"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, - NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - result = gnome_dialog_run_and_close(gd); - if (result == 0) { - GtkListItem *item = (GtkListItem *)gtk_list_item_new_with_label(rule->name); - GList *l = NULL; - - gtk_object_set_data((GtkObject *)item, "rule", rule); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(l, item); - gtk_list_append_items(data->list, l); - gtk_list_select_child(data->list, (GtkWidget *)item); - data->current = rule; - rule_context_add_rule(data->f, rule); - set_sensitive(data); - } else { - gtk_object_unref((GtkObject *)rule); - } -} - -static void rule_edit(GtkWidget *widget, struct _editor_data *data) -{ - GtkWidget *w; - int result; - GnomeDialog *gd; - FilterRule *rule; - int pos; - - d(printf("edit rule\n")); - rule = data->current; - w = filter_rule_get_widget(rule, data->f); - gd = (GnomeDialog *)gnome_dialog_new(_("Edit VFolder Rule"), GNOME_STOCK_BUTTON_OK, NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - result = gnome_dialog_run_and_close(gd); - - if (result == 0) { - pos = rule_context_get_rank_rule(data->f, data->current); - if (pos != -1) { - GtkListItem *item = g_list_nth_data(data->list->children, pos); - gtk_label_set_text((GtkLabel *)(((GtkBin *)item)->child), data->current->name); - } - } -} - -static void rule_delete(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - GList *l; - GtkListItem *item; - - d(printf("ddelete rule\n")); - pos = rule_context_get_rank_rule(data->f, data->current); - if (pos != -1) { - rule_context_remove_rule(data->f, data->current); - - item = g_list_nth_data(data->list->children, pos); - l = g_list_append(NULL, item); - gtk_list_remove_items(data->list, l); - g_list_free(l); - - gtk_object_unref((GtkObject *)data->current); - data->current = NULL; - } - set_sensitive(data); -} - -static void rule_move(struct _editor_data *data, int from, int to) -{ - GList *l; - GtkListItem *item; - - d(printf("moving %d to %d\n", from, to)); - rule_context_rank_rule(data->f, data->current, to); - - item = g_list_nth_data(data->list->children, from); - l = g_list_append(NULL, item); - gtk_list_remove_items_no_unref(data->list, l); - gtk_list_insert_items(data->list, l, to); - gtk_list_select_child(data->list, (GtkWidget *)item); - set_sensitive(data); -} - -static void rule_up(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - - d(printf("up rule\n")); - pos = rule_context_get_rank_rule(data->f, data->current); - if (pos>0) { - rule_move(data, pos, pos-1); - } -} - -static void rule_down(GtkWidget *widget, struct _editor_data *data) -{ - int pos; - - d(printf("down rule\n")); - pos = rule_context_get_rank_rule(data->f, data->current); - rule_move(data, pos, pos+1); -} - -static struct { - char *name; - GtkSignalFunc func; -} edit_buttons[] = { - { "rule_add", rule_add }, - { "rule_edit", rule_edit }, - { "rule_delete", rule_delete }, - { "rule_up", rule_up }, - { "rule_down", rule_down }, -}; - -static void -set_sensitive(struct _editor_data *data) -{ - FilterRule *rule = NULL; - int index=-1, count=0; - - while ((rule = rule_context_next_rule(data->f, rule))) { - if (rule == data->current) - index=count; - count++; - } - d(printf("index = %d count=%d\n", index, count)); - count--; - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_EDIT], index != -1); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_DELETE], index != -1); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_UP], index > 0); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_DOWN], index >=0 && indexcurrent = gtk_object_get_data((GtkObject *)child, "rule"); - if (data->current) - d(printf("seledct rule: %s\n", data->current->name)); - else - d(printf("bad data?\n")); - set_sensitive(data); -} - -GtkWidget *vfolder_editor_construct (struct _VfolderContext *f) -{ - GladeXML *gui; - GtkWidget *d, *w; - GList *l; - FilterRule *rule = NULL; - struct _editor_data *data; - int i; - - g_assert(IS_VFOLDER_CONTEXT(f)); - - data = g_malloc0(sizeof(*data)); - data->f = (RuleContext *)f; - - gui = glade_xml_new(FILTER_GLADEDIR "/filter.glade", "edit_vfolder"); - d = glade_xml_get_widget (gui, "edit_vfolder"); - gtk_object_set_data_full((GtkObject *)d, "data", data, g_free); - - gtk_window_set_title((GtkWindow *)d, "Edit VFolders"); - for (i=0;ibuttons[i] = (GtkButton *)w = glade_xml_get_widget (gui, edit_buttons[i].name); - gtk_signal_connect((GtkObject *)w, "clicked", edit_buttons[i].func, data); - } - - w = glade_xml_get_widget (gui, "rule_list"); - data->list = (GtkList *)w; - l = NULL; - while ((rule = rule_context_next_rule((RuleContext *)f, rule))) { - GtkListItem *item = (GtkListItem *)gtk_list_item_new_with_label(rule->name); - gtk_object_set_data((GtkObject *)item, "rule", rule); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(l, item); - } - gtk_list_append_items(data->list, l); - gtk_signal_connect((GtkObject *)w, "select_child", select_rule, data); - - set_sensitive(data); - gtk_object_unref((GtkObject *)gui); - - return d; -} diff --git a/filter/vfolder-editor.h b/filter/vfolder-editor.h deleted file mode 100644 index 2ff2b261dc..0000000000 --- a/filter/vfolder-editor.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _VFOLDER_EDITOR_H -#define _VFOLDER_EDITOR_H - -#include -#include - -#if 0 -/* NOTE: object stuff not used (yet?), this is just a holder file for a static factory */ - -#define VFOLDER_EDITOR(obj) GTK_CHECK_CAST (obj, vfolder_editor_get_type (), VfolderEditor) -#define VFOLDER_EDITOR_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, vfolder_editor_get_type (), VfolderEditorClass) -#define IS_VFOLDER_EDITOR(obj) GTK_CHECK_TYPE (obj, vfolder_editor_get_type ()) - -typedef struct _VfolderEditor VfolderEditor; -typedef struct _VfolderEditorClass VfolderEditorClass; - -struct _VfolderEditor { - GnomeDialog parent; - struct _VfolderEditorPrivate *priv; - -}; - -struct _VfolderEditorClass { - GnomeDialogClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint vfolder_editor_get_type (void); -VfolderEditor *vfolder_editor_new (void); -#endif - -struct _VfolderContext; - -/* methods */ -GtkWidget *vfolder_editor_construct (struct _VfolderContext *f); - -#endif /* ! _VFOLDER_EDITOR_H */ - diff --git a/filter/vfolder-rule.c b/filter/vfolder-rule.c deleted file mode 100644 index d6da471b07..0000000000 --- a/filter/vfolder-rule.c +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include - -#include "vfolder-context.h" -#include "vfolder-rule.h" -#include "shell/evolution-shell-client.h" - -#define d(x) x - -static xmlNodePtr xml_encode(FilterRule *); -static int xml_decode(FilterRule *, xmlNodePtr, struct _RuleContext *f); -/*static void build_code(FilterRule *, GString *out);*/ -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f); - -extern EvolutionShellClient *global_shell_client; - -static void vfolder_rule_class_init (VfolderRuleClass *class); -static void vfolder_rule_init (VfolderRule *gspaper); -static void vfolder_rule_finalise (GtkObject *obj); - -#define _PRIVATE(x) (((VfolderRule *)(x))->priv) - -struct _VfolderRulePrivate { -}; - -static FilterRuleClass *parent_class; - -guint -vfolder_rule_get_type (void) -{ - static guint type = 0; - - if (!type) { - GtkTypeInfo type_info = { - "VfolderRule", - sizeof(VfolderRule), - sizeof(VfolderRuleClass), - (GtkClassInitFunc)vfolder_rule_class_init, - (GtkObjectInitFunc)vfolder_rule_init, - (GtkArgSetFunc)NULL, - (GtkArgGetFunc)NULL - }; - - type = gtk_type_unique(filter_rule_get_type (), &type_info); - } - - return type; -} - -static void -vfolder_rule_class_init (VfolderRuleClass *class) -{ - GtkObjectClass *object_class; - FilterRuleClass *filter_rule = (FilterRuleClass *)class; - - object_class = (GtkObjectClass *)class; - parent_class = gtk_type_class(filter_rule_get_type ()); - - object_class->finalize = vfolder_rule_finalise; - - /* override methods */ - filter_rule->xml_encode = xml_encode; - filter_rule->xml_decode = xml_decode; - /*filter_rule->build_code = build_code;*/ - filter_rule->get_widget = get_widget; -} - -static void -vfolder_rule_init (VfolderRule *o) -{ - o->priv = g_malloc0(sizeof(*o->priv)); -} - -static void -vfolder_rule_finalise(GtkObject *obj) -{ - VfolderRule *o = (VfolderRule *)obj; - o = o; - ((GtkObjectClass *)(parent_class))->finalize(obj); -} - -/** - * vfolder_rule_new: - * - * Create a new VfolderRule object. - * - * Return value: A new #VfolderRule object. - **/ -VfolderRule * -vfolder_rule_new(void) -{ - VfolderRule *o = (VfolderRule *)gtk_type_new(vfolder_rule_get_type ()); - return o; -} - -void vfolder_rule_add_source (VfolderRule *vr, const char *uri) -{ - g_assert(IS_VFOLDER_RULE(vr)); - - vr->sources = g_list_append(vr->sources, g_strdup(uri)); -} - -const char *vfolder_rule_find_source (VfolderRule *vr, const char *uri) -{ - GList *l; - - g_assert(IS_VFOLDER_RULE(vr)); - - /* only does a simple string or address comparison, should - probably do a decoded url comparison */ - l = vr->sources; - while (l) { - if (l->data == uri || !strcmp(l->data, uri)) - return l->data; - l = g_list_next(l); - } - return NULL; -} - -void vfolder_rule_remove_source (VfolderRule *vr, const char *uri) -{ - char *found; - - g_assert(IS_VFOLDER_RULE(vr)); - - found = (char *)vfolder_rule_find_source(vr, uri); - if (found) { - vr->sources = g_list_remove(vr->sources, found); - g_free(found); - } -} - -const char *vfolder_rule_next_source (VfolderRule *vr, const char *last) -{ - GList *node; - - if (last == NULL) { - node = vr->sources; - } else { - node = g_list_find(vr->sources, (char *)last); - if (node == NULL) - node = vr->sources; - else - node = g_list_next(node); - } - if (node) - return (const char *)node->data; - return NULL; -} - -static xmlNodePtr xml_encode(FilterRule *fr) -{ - xmlNodePtr node, set, work; - GList *l; - VfolderRule *vr = (VfolderRule *)fr; - - node = ((FilterRuleClass *)(parent_class))->xml_encode(fr); - g_assert(node != NULL); - set = xmlNewNode(NULL, "sources"); - xmlAddChild(node, set); - l = vr->sources; - while (l) { - work = xmlNewNode(NULL, "folder"); - xmlSetProp(work, "uri", l->data); - xmlAddChild(set, work); - l = g_list_next(l); - } - return node; -} - -static int xml_decode(FilterRule *fr, xmlNodePtr node, struct _RuleContext *f) -{ - xmlNodePtr set, work; - int result; - VfolderRule *vr = (VfolderRule *)fr; - char *uri; - - result = ((FilterRuleClass *)(parent_class))->xml_decode(fr, node, f); - if (result != 0) - return result; - - set = node->childs; - while (set) { - if (!strcmp(set->name, "sources")) { - work = set->childs; - while (work) { - if (!strcmp(work->name, "folder")) { - uri = xmlGetProp(work, "uri"); - if (uri) - vr->sources = g_list_append(vr->sources, uri); - } - work = work->next; - } - } - set = set->next; - } - return 0; -} - -enum { - BUTTON_ADD, - BUTTON_REMOVE, - BUTTON_LAST, -}; - -struct _source_data { - RuleContext *f; - VfolderRule *vr; - const char *current; - GtkList *list; - GtkButton *buttons[BUTTON_LAST]; -}; - -static void source_add(GtkWidget *widget, struct _source_data *data); -static void source_remove(GtkWidget *widget, struct _source_data *data); - -static struct { - char *name; - GtkSignalFunc func; -} edit_buttons[] = { - { "source_add", source_add }, - { "source_remove", source_remove }, -}; - -static void -set_sensitive(struct _source_data *data) -{ - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_ADD], TRUE); - gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_REMOVE], data->current != NULL); -} - -static void -select_source(GtkWidget *w, GtkWidget *child, struct _source_data *data) -{ - data->current = gtk_object_get_data((GtkObject *)child, "source"); - set_sensitive(data); -} - -static void source_add(GtkWidget *widget, struct _source_data *data) -{ - const char *allowed_types[] = { "mail", NULL }; - char *def, *uri; - GtkListItem *item; - GList *l; - - def = ""; - evolution_shell_client_user_select_folder (global_shell_client, - _("Select Folder"), - def, allowed_types, NULL, &uri); - - if (uri != NULL && uri[0] != '\0') { - data->vr->sources = g_list_append(data->vr->sources, uri); - - l = NULL; - item = (GtkListItem *)gtk_list_item_new_with_label(uri); - gtk_object_set_data((GtkObject *)item, "source", uri); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(NULL, item); - gtk_list_append_items(data->list, l); - gtk_list_select_child(data->list, (GtkWidget *)item); - data->current = uri; - } else { - g_free(uri); - } - set_sensitive(data); -} - -static void source_remove(GtkWidget *widget, struct _source_data *data) -{ - const char *source; - int index = 0; - GList *l; - GtkListItem *item; - - source = NULL; - while ((source = vfolder_rule_next_source(data->vr, source))) { - if (data->current == source) { - vfolder_rule_remove_source(data->vr, source); - item = g_list_nth_data(data->list->children, index); - l = g_list_append(NULL, item); - gtk_list_remove_items(data->list, l); - g_list_free(l); - data->current = NULL; - break; - } - index++; - } - set_sensitive(data); -} - -static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f) -{ - GtkWidget *widget, *frame, *w; - GladeXML *gui; - const char *source; - VfolderRule *vr = (VfolderRule *)fr; - struct _source_data *data; - int i; - GList *l; - - widget = ((FilterRuleClass *)(parent_class))->get_widget(fr, f); - - data = g_malloc0(sizeof(*data)); - data->f = f; - data->vr = vr; - - gui = glade_xml_new(FILTER_GLADEDIR "/filter.glade", "vfolder_source_frame"); - frame = glade_xml_get_widget (gui, "vfolder_source_frame"); - - gtk_object_set_data_full((GtkObject *)frame, "data", data, g_free); - - for (i=0;ibuttons[i] = (GtkButton *)w = glade_xml_get_widget (gui, edit_buttons[i].name); - gtk_signal_connect((GtkObject *)w, "clicked", edit_buttons[i].func, data); - } - - w = glade_xml_get_widget (gui, "source_list"); - data->list = (GtkList *)w; - l = NULL; - source = NULL; - while ((source = vfolder_rule_next_source(vr, source))) { - GtkListItem *item = (GtkListItem *)gtk_list_item_new_with_label(source); - gtk_object_set_data((GtkObject *)item, "source", (void *)source); - gtk_widget_show((GtkWidget *)item); - l = g_list_append(l, item); - } - gtk_list_append_items(data->list, l); - gtk_signal_connect((GtkObject *)w, "select_child", select_source, data); - set_sensitive(data); - - gtk_box_pack_start(GTK_BOX(widget), frame, TRUE, TRUE, 3); - return widget; -} diff --git a/filter/vfolder-rule.h b/filter/vfolder-rule.h deleted file mode 100644 index c3fa130c84..0000000000 --- a/filter/vfolder-rule.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Not Zed - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _VFOLDER_RULE_H -#define _VFOLDER_RULE_H - -#include -#include "filter-rule.h" - -#define VFOLDER_RULE(obj) GTK_CHECK_CAST (obj, vfolder_rule_get_type (), VfolderRule) -#define VFOLDER_RULE_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, vfolder_rule_get_type (), VfolderRuleClass) -#define IS_VFOLDER_RULE(obj) GTK_CHECK_TYPE (obj, vfolder_rule_get_type ()) - -typedef struct _VfolderRule VfolderRule; -typedef struct _VfolderRuleClass VfolderRuleClass; - -struct _VfolderRule { - FilterRule parent; - struct _VfolderRulePrivate *priv; - - GList *sources; /* uri's of the source folders */ -}; - -struct _VfolderRuleClass { - FilterRuleClass parent_class; - - /* virtual methods */ - - /* signals */ -}; - -guint vfolder_rule_get_type (void); -VfolderRule *vfolder_rule_new (void); - -/* methods */ -void vfolder_rule_add_source (VfolderRule *vr, const char *uri); -void vfolder_rule_remove_source (VfolderRule *vr, const char *uri); -const char *vfolder_rule_find_source (VfolderRule *vr, const char *uri); -const char *vfolder_rule_next_source (VfolderRule *vr, const char *last); - -#endif /* ! _VFOLDER_RULE_H */ - diff --git a/filter/vfoldertypes.xml b/filter/vfoldertypes.xml deleted file mode 100644 index 52c2c0e8ca..0000000000 --- a/filter/vfoldertypes.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - Sender - - - - - - - - Recipients - - - - - - - - Subject - - - - - - - - Message Body - - - - - - - - Expression - - - - - Message was sent - - - - - - - - - - - - Message was received - - - - - - - - - - - diff --git a/help/.cvsignore b/help/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/help/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/help/C/.cvsignore b/help/C/.cvsignore deleted file mode 100644 index cba1534920..0000000000 --- a/help/C/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -Makefile -Makefile.in -evolution-guide -evolution-guide.junk diff --git a/help/C/Makefile.am b/help/C/Makefile.am deleted file mode 100644 index 0d02ac056f..0000000000 --- a/help/C/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -evolution_helpdir = $(datadir)/gnome/help/evolution/C - -SGML_FILES = \ - apx-authors.sgml \ - apx-bugs.sgml \ - apx-fdl.sgml \ - apx-gloss.sgml \ - config-prefs.sgml \ - config-setupassist.sgml \ - config-sync.sgml \ - evolution-guide.sgml \ - preface.sgml \ - usage-calendar.sgml \ - usage-contact.sgml \ - usage-mail.sgml \ - usage-mainwindow.sgml \ - usage-sync.sgml - - -EXTRA_DIST = \ - $(SGML_FILES) - -all: evolution-guide - -evolution-guide: $(SGML_FILES) - -db2html evolution-guide.sgml - -dist-hook: - mkdir $(distdir)/evolution-guide - -cp evolution-guide/*.html evolution-guide/*.css \ - $(distdir)/evolution-guide - mkdir $(distdir)/fig - -cp fig/*.png $(distdir)/fig - -install-data-local: evolution-guide - $(top_srcdir)/mkinstalldirs $(DESTDIR)$(evolution_helpdir)/fig - -for file in $(srcdir)/evolution-guide/*.html $(srcdir)/evolution-guide/*.css; do \ - basefile=`basename $$file`; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(evolution_helpdir)/$$basefile; \ - done - -for file in $(srcdir)/fig/*.png; do \ - basefile=`basename $$file`; \ - $(INSTALL_DATA) $$file $(DESTDIR)$(evolution_helpdir)/fig/$$basefile; \ - done - -evolution.ps: evolution.sgml - -db2ps $< - -evolution.rtf: evolution.sgml - -db2rtf $< - diff --git a/help/C/apx-authors.sgml b/help/C/apx-authors.sgml deleted file mode 100644 index e064276be3..0000000000 --- a/help/C/apx-authors.sgml +++ /dev/null @@ -1,74 +0,0 @@ - - - Authors - - Evolution was written by: - - Seth Alves: alves@helixcode.com - Anders Carlssonandersca@gnu.org - Damon Chaplin:damon@helixcode.com - Clifford R. Conover rusty@zootweb.com - Miguel De Icaza: miguel@helixcode.com - Arturo Espinoza arturo@nucleu.unam.mx - Larry Ewing: lewing@helixcode.com - Bertrand Guiheneuf: bertrand@helixcode.com - Tuomas Kuosmanen: tigert@gimp.org - Christopher J. Lahey: clahey@helixcode.com - Matthew Loper: matt@helixcode.com - Federico Mena: federico@helixcode.com - Eskil Heyn Olsendeity@eski.dk - Nat Friedman: nat@helixcode.com - Ettore Perazzoli:ettore@helixcode.com - Russell Steinthal: rms39@columbia.edu - Peter Teichman: peter@helixcode.com - Chris Toshok: toshok@helixcode.com - Radek Doulik: rodo@helixcode.com - Dan Winship: danw@helixcode.com - Michael Zucchi: notzed@helixcode.com - -and other dedicated GNOME programmers. - - - The Evolution code owes a great debt - to the GNOME-pim and - GNOME-Calendar applications, and to - KHTMLW. The developers of - Evolution acknowledge the efforts - and contributions of all who worked on those projects. - - - - For more information please visit the - Evolution Web page. Please send all comments, - suggestions, and bug reports to the GNOME bug tracking - database. Instructions for submitting bug reports can be - found on-line at - http://bugs.gnome.org/Reporting.html. You can also use - command bug-buddy for submitting bug reports. - - - This manual was written by Aaron Weber - (aaron@helixcode.com) and Kevin Breit - (battery841@mypad.com) with the help of the - application programmers and the GNOME Documentation Project. - Please send all comments and suggestions regarding the manual to - the GNOME Documentation Project at - docs@gnome.org. You can also add your comments - online by using GNOME Documentation - Status Table. - - - - - - - - diff --git a/help/C/apx-bugs.sgml b/help/C/apx-bugs.sgml deleted file mode 100644 index e7a501acba..0000000000 --- a/help/C/apx-bugs.sgml +++ /dev/null @@ -1,19 +0,0 @@ - - - Known bugs and limitations - - - This appendix describes known bugs and limitations of - Evolution. Please use the GNOME - Bug Report Tool (known as - bug-buddy at the command line) if you find one - we have not listed. - - - - - The bugs are many, but the application is young, and this is to - be expected. - - - diff --git a/help/C/apx-fdl.sgml b/help/C/apx-fdl.sgml deleted file mode 100644 index 8b49729cfc..0000000000 --- a/help/C/apx-fdl.sgml +++ /dev/null @@ -1,678 +0,0 @@ - - GNU Free Documentation License - - Version 1.1, March 2000 - - - - Copyright © 2000 -
- Free Software Foundation, Inc. - 59 Temple Place, Suite 330, - Boston, - MA - 02111-1307 - USA -
- Everyone is permitted to copy and distribute verbatim copies of this license - document, but changing it is not allowed. -
- - - - 0. PREAMBLE - - - The purpose of this License is to make a manual, textbook, or other - written document "free" in the sense of freedom: to assure everyone - the effective freedom to copy and redistribute it, with or without - modifying it, either commercially or noncommercially. Secondarily, - this License preserves for the author and publisher a way to get - credit for their work, while not being considered responsible for - modifications made by others. - - - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. It - complements the GNU General Public License, which is a copyleft - license designed for free software. - - - - We have designed this License in order to use it for manuals for free - software, because free software needs free documentation: a free - program should come with manuals providing the same freedoms that the - software does. But this License is not limited to software manuals; it - can be used for any textual work, regardless of subject matter or - whether it is published as a printed book. We recommend this License - principally for works whose purpose is instruction or reference. - - - - - 1. APPLICABILITY AND DEFINITIONS - - - This License applies to any manual or other work that contains a - notice placed by the copyright holder saying it can be distributed - under the terms of this License. The "Document" , below, refers to any such - manual or work. Any member of the public is a licensee, and is - addressed as "you". - - - - A "Modified Version" of the - Document means any work containing the Document or a portion of it, - either copied verbatim, or with modifications and/or translated into - another language. - - - - A "Secondary Section" is a named - appendix or a front-matter section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the Document's overall subject (or to - related matters) and contains nothing that could fall directly within - that overall subject. (For example, if the Document is in part a textbook of - mathematics, a Secondary Section - may not explain any mathematics.) The relationship could be a matter - of historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - - - The "Invariant Sections" are - certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in the notice that - says that the Document is released - under this License. - - - - The "Cover Texts" are certain - short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that - says that the Document is released - under this License. - - - - A "Transparent" copy of the - Document means a machine-readable - copy, represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly and - straightforwardly with generic text editors or (for images composed of - pixels) generic paint programs or (for drawings) some widely available - drawing editor, and that is suitable for input to text formatters or - for automatic translation to a variety of formats suitable for input - to text formatters. A copy made in an otherwise Transparent file format whose markup - has been designed to thwart or discourage subsequent modification by - readers is not Transparent. A - copy that is not "Transparent" - is called "Opaque". - - - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, SGML - or XML using a publicly available DTD, and standard-conforming simple - HTML designed for human modification. Opaque formats include - PostScript, PDF, proprietary formats that can be read and edited only - by proprietary word processors, SGML or XML for which the DTD and/or - processing tools are not generally available, and the - machine-generated HTML produced by some word processors for output - purposes only. - - - - The "Title Page" means, for a - printed book, the title page itself, plus such following pages as are - needed to hold, legibly, the material this License requires to appear - in the title page. For works in formats which do not have any title - page as such, "Title Page" - means the text near the most prominent appearance of the work's title, - preceding the beginning of the body of the text. - - - - - - 2. VERBATIM COPYING - - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License applies - to the Document are reproduced in - all copies, and that you add no other conditions whatsoever to those - of this License. You may not use technical measures to obstruct or - control the reading or further copying of the copies you make or - distribute. However, you may accept compensation in exchange for - copies. If you distribute a large enough number of copies you must - also follow the conditions in section - 3. - - - - You may also lend copies, under the same conditions stated above, and - you may publicly display copies. - - - - - - 3. COPYING IN QUANTITY - - - If you publish printed copies of the Document numbering more than 100, and - the Document's license notice - requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover - Texts on the front cover, and Back-Cover Texts on the back cover. Both - covers must also clearly and legibly identify you as the publisher of - these copies. The front cover must present the full title with all - words of the title equally prominent and visible. You may add other - material on the covers in addition. Copying with changes limited to - the covers, as long as they preserve the title of the Document and satisfy these conditions, - can be treated as verbatim copying in other respects. - - - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto adjacent - pages. - - - - If you publish or distribute Opaque copies of the Document numbering more than 100, you - must either include a machine-readable Transparent copy along with each - Opaque copy, or state in or - with each Opaque copy a - publicly-accessible computer-network location containing a complete - Transparent copy of the Document, free of added material, which - the general network-using public has access to download anonymously at - no charge using public-standard network protocols. If you use the - latter option, you must take reasonably prudent steps, when you begin - distribution of Opaque copies - in quantity, to ensure that this Transparent copy will remain thus - accessible at the stated location until at least one year after the - last time you distribute an Opaque copy (directly or through your - agents or retailers) of that edition to the public. - - - - It is requested, but not required, that you contact the authors of the - Document well before - redistributing any large number of copies, to give them a chance to - provide you with an updated version of the Document. - - - - - - 4. MODIFICATIONS - - - You may copy and distribute a Modified - Version of the Document - under the conditions of sections 2 - and 3 above, provided that you - release the Modified Version under - precisely this License, with the Modified - Version filling the role of the Document, thus licensing distribution - and modification of the Modified - Version to whoever possesses a copy of it. In addition, you - must do these things in the Modified - Version: - - - - - - A - - Use in the Title Page (and - on the covers, if any) a title distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed in - the History section of the Document). You may use the same - title as a previous version if the original publisher of that - version gives permission. - - - - - - - B - - List on the Title Page, as - authors, one or more persons or entities responsible for - authorship of the modifications in the Modified Version, together with at - least five of the principal authors of the Document (all of its principal - authors, if it has less than five). - - - - - - - C - - State on the Title Page - the name of the publisher of the Modified Version, as the - publisher. - - - - - - - D - - Preserve all the copyright notices of the Document. - - - - - - - E - - Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - - - - - - F - - Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified Version under the terms - of this License, in the form shown in the Addendum below. - - - - - - - G - - Preserve in that license notice the full lists of Invariant Sections and required - Cover Texts given in the - Document's license notice. - - - - - - - H - - Include an unaltered copy of this License. - - - - - - - I - - Preserve the section entitled "History", and its title, and add - to it an item stating at least the title, year, new authors, and - publisher of the Modified Version - as given on the Title - Page. If there is no section entitled "History" in the - Document, create one stating - the title, year, authors, and publisher of the Document as given on its Title Page, then add an item - describing the Modified - Version as stated in the previous sentence. - - - - - - - J - - Preserve the network location, if any, given in the Document for public access to a - Transparent copy of the - Document, and likewise the - network locations given in the Document for previous versions it - was based on. These may be placed in the "History" section. You - may omit a network location for a work that was published at - least four years before the Document itself, or if the - original publisher of the version it refers to gives permission. - - - - - - - K - - In any section entitled "Acknowledgements" or "Dedications", - preserve the section's title, and preserve in the section all - the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - - - - - - L - - Preserve all the Invariant - Sections of the Document, unaltered in their text - and in their titles. Section numbers or the equivalent are not - considered part of the section titles. - - - - - - - M - - Delete any section entitled "Endorsements". Such a section may - not be included in the Modified - Version. - - - - - - - N - - Do not retitle any existing section as "Endorsements" or to - conflict in title with any Invariant Section. - - - - - - - If the Modified Version includes - new front-matter sections or appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option designate - some or all of these sections as invariant. To do this, add their - titles to the list of Invariant - Sections in the Modified - Version's license notice. These titles must be distinct from - any other section titles. - - - - You may add a section entitled "Endorsements", provided it contains - nothing but endorsements of your Modified - Version by various parties--for example, statements of peer - review or that the text has been approved by an organization as the - authoritative definition of a standard. - - - - You may add a passage of up to five words as a Front-Cover Text, and a passage of up - to 25 words as a Back-Cover - Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of - Front-Cover Text and one of - Back-Cover Text may be added by - (or through arrangements made by) any one entity. If the Document already includes a cover text - for the same cover, previously added by you or by arrangement made by - the same entity you are acting on behalf of, you may not add another; - but you may replace the old one, on explicit permission from the - previous publisher that added the old one. - - - - The author(s) and publisher(s) of the Document do not by this License give - permission to use their names for publicity for or to assert or imply - endorsement of any Modified Version - . - - - - - - 5. COMBINING DOCUMENTS - - - You may combine the Document with - other documents released under this License, under the terms defined - in section 4 above for modified - versions, provided that you include in the combination all of the - Invariant Sections of all of the - original documents, unmodified, and list them all as Invariant Sections of your combined - work in its license notice. - - - - The combined work need only contain one copy of this License, and - multiple identical Invariant - Sections may be replaced with a single copy. If there are - multiple Invariant Sections with - the same name but different contents, make the title of each such - section unique by adding at the end of it, in parentheses, the name of - the original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in the - list of Invariant Sections in the - license notice of the combined work. - - - - In the combination, you must combine any sections entitled "History" - in the various original documents, forming one section entitled - "History"; likewise combine any sections entitled "Acknowledgements", - and any sections entitled "Dedications". You must delete all sections - entitled "Endorsements." - - - - - - 6. COLLECTIONS OF DOCUMENTS - - - You may make a collection consisting of the Document and other documents released - under this License, and replace the individual copies of this License - in the various documents with a single copy that is included in the - collection, provided that you follow the rules of this License for - verbatim copying of each of the documents in all other respects. - - - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert a - copy of this License into the extracted document, and follow this - License in all other respects regarding verbatim copying of that - document. - - - - - - 7. AGGREGATION WITH INDEPENDENT WORKS - - - A compilation of the Document or - its derivatives with other separate and independent documents or - works, in or on a volume of a storage or distribution medium, does not - as a whole count as a Modified - Version of the Document, - provided no compilation copyright is claimed for the compilation. - Such a compilation is called an "aggregate", and this License does not - apply to the other self-contained works thus compiled with the Document , on account of their being - thus compiled, if they are not themselves derivative works of the - Document. If the Cover Text requirement of section 3 is applicable to these copies - of the Document, then if the Document is less than one quarter of the - entire aggregate, the Document's - Cover Texts may be placed on - covers that surround only the Document within the aggregate. Otherwise - they must appear on covers around the whole aggregate. - - - - - - 8. TRANSLATION - - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations - requires special permission from their copyright holders, but you may - include translations of some or all Invariant Sections in addition to the - original versions of these Invariant - Sections. You may include a translation of this License - provided that you also include the original English version of this - License. In case of a disagreement between the translation and the - original English version of this License, the original English version - will prevail. - - - - - - 9. TERMINATION - - - You may not copy, modify, sublicense, or distribute the Document except as expressly provided - for under this License. Any other attempt to copy, modify, sublicense - or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, from - you under this License will not have their licenses terminated so long - as such parties remain in full compliance. - - - - - - 10. FUTURE REVISIONS OF THIS LICENSE - - - The Free - Software Foundation may publish new, revised versions of the - GNU Free Documentation License from time to time. Such new versions - will be similar in spirit to the present version, but may differ in - detail to address new problems or concerns. See http://www.gnu.org/copyleft/. - - - - Each version of the License is given a distinguishing version - number. If the Document specifies - that a particular numbered version of this License "or any later - version" applies to it, you have the option of following the terms and - conditions either of that specified version or of any later version - that has been published (not as a draft) by the Free Software - Foundation. If the Document does - not specify a version number of this License, you may choose any - version ever published (not as a draft) by the Free Software - Foundation. - - - - - - Addendum - - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and - license notices just after the title page: - - - - Copyright © YEAR YOUR NAME. - - - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 or - any later version published by the Free Software Foundation; with the - Invariant Sections being LIST - THEIR TITLES, with the Front-Cover - Texts being LIST, and with the Back-Cover Texts being LIST. A copy - of the license is included in the section entitled GNU Free - Documentation License. - - - - If you have no Invariant - Sections, write "with no Invariant Sections" instead of saying - which ones are invariant. If you have no Front-Cover Texts, write "no - Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise - for Back-Cover Texts. - - - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public - License, to permit their use in free software. - - - - -
\ No newline at end of file diff --git a/help/C/apx-gloss.sgml b/help/C/apx-gloss.sgml deleted file mode 100644 index 55ab3ed8a1..0000000000 --- a/help/C/apx-gloss.sgml +++ /dev/null @@ -1,284 +0,0 @@ - - - Glossary - - - Attachment - - - Any file sent along with an email. Attachments may be embedded in - a message or appended to it. - - - - - - Automatic Indexing - - - Pre-sorting procedure that allows - Evolution to refer to data quickly. - It enables faster searches and decreases memory usage for - data displays. - - - - - - Bcc (Blind Carbon Copy) - - - A way of addressing a message. Bcc is used to send a group of - people an e-mail, while hiding their names and addresses from each - other. - - - - - - Cc (Carbon Copy) - - - Carbon-copies are used to send a 3rd party a copy of the e-mail, - so they an keep up to date on a conversation, without being in the - To: list. - - - - - - - Emoticon - - - Also called smileys, emoticons are the little sideways faces made - of colons and parentheses which people use to convey emotion in email. - Examples: :-) or ;( . - - - - - - Evolution - - - Evolution is the GNOME - groupware application. - - - - - - Execute - - - To run a program. Any file that can be run is called an - executable. Evolution can download - executable attachments, but before they can be run, the files must - be marked as executable with a shell or file manager. This - security precaution prevents the automatic or accidental execution - of malicious programs. - - - - - - Filter - - - Within Evolution, a filter is a method - of sorting mail automatically. You can create filters to perform - one or more actions on a message that meets any (or all) of a wide - range of criteria. - - - - - - Forward - - - the user can send a third party a message - which was sent to the user originally. - - - - - - Groupware - - - Groupware is a term describing an application which helps groups - of people work together. Typically, a groupware application will - have several productivity features built into one program. - - - - - - Haiku - - - A Japanese form of poetry. Haiku are unrhymed, and - three lines long. The first and last lines should have five - syllables, and the second line seven syllables. The subject - matter is traditionally related to the seasons. - - - - - - HTML - - - Hyper-text Markup Language(HTML) is the layout - language which all webpages are written in. HTML can be used - inside of e-mails to insert images, justfiy text different ways, - and even include webpages inside the e-mail itself. - - - - - - Hot Key - - - Hot-keys are keyboard combinations used to do actions on a - computer instead of using the mouse to do the same action. - Hot-keys can speed up computer usage. - - - - - - iCal - - - iCal is the program which - Evolution uses to manage the calendar - section. - - - - - - - LDAP - - - LDAP is a protocol which allows a client to search through a large database - of addresses, phone numbers, and people, as an alternative to a physical - phone book. - - - - - - Mail Client - - - A mail client is the application with which a person reads and - sends e-mail. Its counterparts are the various types of mail - servers, which handle user authentication and direct messages from - sender to recipient. - - - - - - - Minicard - - - A format for the display of contact data. Similar in appearance - to a small business card. - - - - - - Nautilus - - - Nautilus is the next generation file - manager for GNOME being written by Eazel. - - - - - - Nickname - - - An alias for an e-mail address. - - - - - - Script - - - A program which is written in an interpreted language, which can - be executed. - - - - - - Shortcut Bar - - - The Shortcut Bar is where the user accesses - all the components of Evolution from. - - - - - - Signature - - - Signatures allow a user to specify a message to place at the bottom of - every email sent. A signature can be anything from a favorite quote to - a link to a webpage. - - - - - - - Spam - - - Spam: useless, unwanted e-mail. Spam normally comes in forms of - chain-letters and advertisements for unscrupulous websites or - services. Messages that are merely useless are called - "opt-in newsletters." - - - - - - vFolder - - - vFolders allow an e-mail to be shared among multiple folders, so - it appears that theres a copy of the e-mail in each folder. - - - - - diff --git a/help/C/apx-gpl.sgml b/help/C/apx-gpl.sgml deleted file mode 100644 index 7c7e4cd0f7..0000000000 --- a/help/C/apx-gpl.sgml +++ /dev/null @@ -1,414 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - - - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - -Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - - The precise terms and conditions for copying, distribution and -modification follow. - - - - - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - - -NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - - END OF TERMS AND CONDITIONS - - - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - <one line to give the program's name and a brief idea of what it does.> -Copyright (C) < year> <name of author> - - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - - -Also add information on how to contact you by electronic and paper mail. - - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - - - - - - - - - - - - diff --git a/help/C/config-prefs.sgml b/help/C/config-prefs.sgml deleted file mode 100644 index e0f6dd0297..0000000000 --- a/help/C/config-prefs.sgml +++ /dev/null @@ -1,570 +0,0 @@ - - - - - Advanced Configuration - - Perhaps your mail server has changed names. Perhaps you've - grown tired of a certain layout for your appointments. - Whatever the reason, you want to change your - Evolution settings. This chapter - will tell you how to do just that. - - - - Mail Settings - - To change your mail settings, first go to your - Inbox. Then select Mail - Settings from the Tools menu. - This will open the mail preferences - window, illustrated in . Mail Preferences are - separated into several categories: - - - Identity - - - This allows you to set - your name, email address, and other information. The - default values are the ones found on your system account. - - - - - Sources - - - Set your mail-checking protocols and servers here. - - - - - - Sources - - - Set your mail-checking protocols and servers here. - - - - - - News Servers - - - Specify your News Server preferences here. - - - - - - - - - - - -
- Preferences Dialog - - Setting mail preferences - - - -
- - - - - Identity Settings - - If you have only one email address, or use automatic - forwarding to funnel multiple addresses to one account, then - you will only need to configure one identity. You may, - however, want more that one. To alter an identity, click on - it in the Identity tab of the - Preferences window, and then click - Edit. To add a new identity, simply - click Add. - - - - In either case, you'll be presented with a dialog box with - four fields: - - - - Full Name: by default, this is the - same name as the full name described in your user - account on your computer. You can select another if you - wish. - - - - - Email address: Enter your email - address in this space. - - - - - Organization: If you send email as - a representative of a company or other organization, - enter its name here. - - - - - Signature file: You may choose a - small text file to be appended to every message that you - send. Typically, signature files include address or - other contact information, or a favorite quotation. - They should not be more than three lines long. - - - - - - - - - Network Settings - - In order to send mail with - Evolution, you need to connect to - your network. To do that, you'll need to know your user name - and password, what sort of mail sending and receiving - protocols your network uses, and the names of the servers - you'll be using. If you're switching from another groupware - or email program, you can almost certainly use the same - settings as you did with that program. Select the - Sources tab in the - Preferences window to tell - Evolution where you want to get - your mail, and click Transports to - determine how you want to send your mail. - - - - Mail Sources - - The Mail Sources tab allows you to - edit, add, or delete methods of retrieving mail from - servers. Clicking on Add or - Edit will bring up a dialog box to - offer you the following options: - - - Mail source type: - - - Select from IMAP, POP or Unix-style - mbox files. - - - - - Server: - - - Enter the name of your mail server in this field. - For example: - mail.mycompany.com - - - - - Username: - - - Enter your user name here. Eva Lucianne Tester's - user name is eltester. - - - - - Authentication: - - - Your system administrator will know which type of - authentication your system requires. - Evolution can also detect - what sorts of authentication are available once it - knows where to find the server. - - - - - Test values before continuing - - - If this box is checked, - Evolution will attempt to - make sure that all the other entries in the dialog - window are correct. - - - - - - - - Transports - - The Transports tab lets you set how - you will send mail. Evolution currently supports two mail - transport options: SMTP, which uses a - remote mail server, and sendmail, - which uses the sendmail program - on your local system. Sendmail - is more difficult to configure, but offers more flexibility - than plain SMTP. - - - To use SMTP, you'll need to enter the - name of your SMTP server, which should look like: - smtp.isp.net. - - - Evolution can - attempt to determine if you have entered the right server - name. To have it do so, check the box labelled - Test these values before continuing - before you click OK. - - - - - - - - News Servers - - When you first select the News - Servers tab, you will see a blank box with - three familiar buttons on the right: - Add, Edit, - and Delete. - - - Click Add to add a news server; you - will be prompted for its name. Enter the name, click - OK, and you're done. (FIXME, this needs work). - - - - - Other Mail Preferences - - Not everything fits neatly into categories. This tab - contains some miscellaneous configurations that don't have - too much to do with each other. - - - - Send messages in HTML format - - - If you check this box, you will send - messages as HTML by default. If you leave it unchecked, your - messages will be sent without HTML formatting unless you select - Format HTML - in the message composer. - See - for more information about HTML mail. - - - - - Folder Format - - By default, - Evolution saves its mail - in the - mbox - format. You can switch to the - mh - format if you like. Note that this is an advanced - feature and may cause you to lose some messages, so - you should probably make a backup of your - evolution - directory first. In addition, it will take quite - some time if you have a large mailbox. - - - - - -
- - - Managing the Contact Manager - - To set the behavior of your Contact Manager, click on the - Contact Manager tab in the - Preferences window. - - - You can set the following options: - - - - - Configuring the Calendar - - This section discusses calendar-specific preferences. While - looking at your calendar, select - Preferences from the - Edit menu. This will open up the - Preferences window. It contains four - tabs: Time display, - Colors, To Do List - and Alarms. The calendar - preferences window is illustrated in . - - -
- Calendar Preferences Dialog - - If this worked on my job as well as my calendar... - - - -
- -
- - - Time Display Settings - - The Time display tab lets you set the - following: - - - Time format - - You may choose between twelve-hour (AM/PM) and - twenty-four hour time formats here by clicking the - appropriate radio button. - - - - - Weeks start on - - You can set weeks to start on Sunday or on Monday. - - - - Day range - - - When does your work day start, and when does it end? - In the day and week views, - Evolution displays all the - hours in the range you select here, even if there are - no appointments for those times. Of course, you can - still schedule an appointment outside of these hours, - and if you do, the display will be extended to show - it. - - - - - - - - Calendar Colors - - The colors tab allows you to decide - what color your calendar will be. The tab consists of a - sample calendar on the right and a list of ten items that can - be colored in different ways. If you click on the color - button to the right of each item, you will bring up a - color-selector window where you can choose to alter that - color. By clicking OK in the color - selection dialog, you can see the results of the color on the - sample calendar. - - The display elements whose color you can set are: - - - - - Outline: The lines between days - and at the top of the display. - - - - - Headings: Text color for day - and month names and other headings. - - - - - Empty days: This is the - background color for any time slots in which you have no appointments. - - - - - - Appointments: This is the - background color for any time slots in which you have appointments. - - - - - Highlighted day: The - background color for a selected time slot. - - - - - - - Day numbers: Text color for date numbers. - - - - - - - Current day's number: Text color for today's date. - - - - - To-Do item that is not yet - due: Text color for To-Do list items that are - not yet due. (Or maybe background color? find out!) - - - - - - To-Do item that is due today: - Text color for today's tasks. - - - - - To-Do item that is overdue: - Text color for overdue tasks. - - - - - - - - - To Do List Settings - - You can choose what information the To Do list displays and the - way it is displayed. The two areas of the To Do - List tab offer several options each: - - - Show on To Do List - - - This box contains three items. If you select the - check boxes next to them, that information will appear - in the To Do list for each task it contains: - - - Due Date - - - Time Until Due - - - Priority - - - - - - - Style Options - - - Select among the following checkboxes to determine - how your To Do list will look: - - - Highlight overdue items - - - Highlight items due today - - - Highlight not yet due items - - - - - - - - - - - Alarms Settings - - The alarms tab enables you to select from three boxes: - - - Beep on display alarms: select - this box to have Evolution beep - at you for any alarms you have set. If you leave this box - unchecked, Evolution will only - alert you to events by opening a dialog box. - - - - Audio alarms timeout after: - Select this button to have the beeping stop automatically - after a certain number of seconds. - - - Enable snoozing for: If you - would like to have the option to tell - Evolution to repeat an alarm in - a few minutes, select this button and decide how long - you'd like it to wait. - - - - - - - -
- - - General Preferences - - Additional configuration options will be covered here, as - they become available. - - -
- - - - - - diff --git a/help/C/config-setupassist.sgml b/help/C/config-setupassist.sgml deleted file mode 100644 index 52ca546b9a..0000000000 --- a/help/C/config-setupassist.sgml +++ /dev/null @@ -1,159 +0,0 @@ - - Easy Setup with the Setup Assistant - - The setup assistant can gather most of the information - necessary for Evolution's daily - operation. If you prefer more detailed or advanced - configuration, see . - - - - Mail Setup - - The first time you try to send or receive mail with - Evolution, the mail - setup assistant will pop up to help you with your - email preferences. If you don't plan to use email, or if - you'd rather deal with your email preferences later, click - Cancel. - - - The setup assistant (sometimes called a - Druid) will guide you through the - network configuration process. It will ask you for some - basic information; your system administrator or ISP should - have the answers you'll need. The mail setup assistant is - pictured in . - - - - -
- Mail Setup Assistant - - Evolution Main Window - - - -
- - - - - The assistant will ask you for the following information: - - - - Name: - Your - full name: eg. Eva Lucianne Tester - - - - Email address: - - Your email address: eg. eltester@helixcode.com - - - - - Organization: - - - Organization: Any organization you - represent. Leave this blank if you wish. - - - - - - Signature File: - - - A text file appended to any email you send. A signature - file typically consists of your name and email address, - or a quotation you like. It should be fewer than four - lines of text. - - - - - - Mail source type: - - - Evolution supports three mail - sources: POP servers, the most common email server type; - IMAP, which stores mail remotely and allows access from - multiple locations, and UNIX-style - mbox files. Ask your system - administrator which one you use. - - - - - - Server: - - - This should be the name of your mail server: it should - look something like: - mailserver.organization.org. - - - - - - Username: - - - Normally, this is the part of your email address before - the @ character, and - Evolution has selected that - value as the default. If you have a different username, - you can enter it here. - - - - - - Authentication: - - - Select the type of authentication you will use. You can - click Detect supported types to - find out which authentication protocols your network - allows. - - - - - - Mail Transport: - - - This is the mail sending protocol you will want to use. - Evolution supports both SMTP - and sendmail. - - - - -
- - To learn how to configure Evolution - in greater detail, or to change preferences once you have set - them, see . - -
- -
- - - - - - - - - diff --git a/help/C/config-sync.sgml b/help/C/config-sync.sgml deleted file mode 100644 index ae78a6daaf..0000000000 --- a/help/C/config-sync.sgml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - Setting up your synchronization system - - Synchronization presents you with two issues you'll need to - deal with. The first one is pretty simple: you'll need to get - the data to move among the various devices you're using. If - you've already got Gnome-Pilot - working, then all you have to do is tell it to use Evolution - as a conduit. If you haven't used - Gnome-Pilot before, you'll need to - run the GNOME Control Center and go - through the hand-held device setup assistant. Then you can - create the Evolution conduit and press the hotsync button. - - - If that doesn't work, jump up and down several times and swear - loudly. Then make sure you've got - Gnome-Pilot going to the right - device (for my serial port, it's /dev/ttys0, not the default - /dev/pilot) and that you have read and write permission on - that device. If you don't you'll need to be added to whatever - group has those permissions (for my system, it's tty). - Alternately, if you're the only user of your computer and - don't care too much about security, just use - su to become root, and then use - chmod a+rw /dev/[DEVICENAME] to set - universal read and write permissions on that port— just - don't tell your sysadmin I said you could. (Sysadmins, of - course, would never do such a thing.) - - - Once Evolution knows where to get - the mail, address, and calendar data, it needs to know what to - do with it. When you synchronize your local data with the data on - a server or handheld device, you may run into conflicts: - perhaps you have ended up with two cards with the same name - and different addresses, or old mail that has been deleted - from one device but not the other. What if you want to keep - only the most recent mail on your hand-held or your laptop, - but all the mail on the LDAP server or your desktop machine? - Select the Synchronization tab from the - Preferences window to set up the - conflict resolution preferences. - - - You can set Evolution's - synchronization behavior in the following ways: - - - - - Data Loss Prevention - - It's always a good idea to make a backup. If you set your - synchronization behaviors wrong, you could end up deleting - the messages and cards you want to keep, and keeping the - ones you want to delete. Before you change these - preferences, make a backup of your - Evolution files. You can do - this by... - - - - diff --git a/help/C/evolution-guide.sgml b/help/C/evolution-guide.sgml deleted file mode 100644 index 59b50120b9..0000000000 --- a/help/C/evolution-guide.sgml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - -]> - - - - - - A User's Guide to Evolution - - AaronWeber - KevinBreit - - - 2000 - Helix Code, Inc., - Kevin Breit - - - - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free - Documentation License, (FDL) Version 1.1 or any later - version published by the Free Software Foundation with no - Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. - - - The software described by this document falls under the - GNU General Public License, or GPL. - - - The licenses are included with this document in , and ; you may also obtain - a copy from the Free Software Foundation by visiting their Web site or - by writing to: Free Software Foundation, Inc., 59 Temple Place - - Suite 330, Boston, MA 02111-1307, USA. - - - Many of the names used by companies to distinguish their - products and services are claimed as trademarks. Where those - names appear in any GNOME documentation, and those trademarks - are made aware to the members of the GNOME Documentation - Project, the names have been printed in caps or initial caps. - - - - - - This is version 0.4 of the Evolution manual, describing version - 0.3.1 of Evolution. - - - - - &PREFACE; - - - Using Evolution - - - Part one of the Evolution manual - describes how to use Evolution - for email, contact management, and appointment and task - scheduling. You'll find as you go along that, as with most of - Linux, there's more than one way to do things, and you can - pick whichever method you like best. - - - - &USAGE-MAINWINDOW; - &USAGE-MAIL; - &USAGE-CONTACT; - &USAGE-CALENDAR; - &USAGE-NOTES; - &USAGE-SYNC; - - - - Configuring and Managing Evolution - - - Evolution is highly configurable. - Usually, when developers say that, they mean that they didn't - test it out thoroughly and have left it to other hackers to - "configure" themselves a working system. When we say - configurable, we mean that although - Evolution will work perfectly well - with minimal setup hassle, you can alter its behavior to fit - your needs with just a little more work. - - - - &CONFIG-SETUPASSIST; - &CONFIG-PREFS; - &CONFIG-SYNC; - - &APX-GLOSS; - &APX-BUGS; - &APX-AUTHORS; - &APX-FDL; - &APX-GPL; - - - - - - - - - - - - - diff --git a/help/C/fig/calendar.png b/help/C/fig/calendar.png deleted file mode 100644 index 47354813a2..0000000000 Binary files a/help/C/fig/calendar.png and /dev/null differ diff --git a/help/C/fig/config-cal.png b/help/C/fig/config-cal.png deleted file mode 100644 index e124196279..0000000000 Binary files a/help/C/fig/config-cal.png and /dev/null differ diff --git a/help/C/fig/config-mail.png b/help/C/fig/config-mail.png deleted file mode 100644 index ef270858f7..0000000000 Binary files a/help/C/fig/config-mail.png and /dev/null differ diff --git a/help/C/fig/contact.png b/help/C/fig/contact.png deleted file mode 100644 index 1610e278a4..0000000000 Binary files a/help/C/fig/contact.png and /dev/null differ diff --git a/help/C/fig/filter-new-fig.png b/help/C/fig/filter-new-fig.png deleted file mode 100644 index 4c612ce5fc..0000000000 Binary files a/help/C/fig/filter-new-fig.png and /dev/null differ diff --git a/help/C/fig/mail-druid-pic.png b/help/C/fig/mail-druid-pic.png deleted file mode 100644 index f29f3e77be..0000000000 Binary files a/help/C/fig/mail-druid-pic.png and /dev/null differ diff --git a/help/C/fig/mainwindow-pic.png b/help/C/fig/mainwindow-pic.png deleted file mode 100644 index 0ff712efa5..0000000000 Binary files a/help/C/fig/mainwindow-pic.png and /dev/null differ diff --git a/help/C/fig/vfolder-createrule-fig.png b/help/C/fig/vfolder-createrule-fig.png deleted file mode 100644 index 571a487ba4..0000000000 Binary files a/help/C/fig/vfolder-createrule-fig.png and /dev/null differ diff --git a/help/C/preface.sgml b/help/C/preface.sgml deleted file mode 100644 index bb6cb4d948..0000000000 --- a/help/C/preface.sgml +++ /dev/null @@ -1,174 +0,0 @@ - - - - Introduction - -
- What is Evolution, and What Can It Do for Me? - - The word "evolution" means "a process of improvement and - development." The GNOME application - Evolution is meant to be a more - evolved groupware program, and an - integral part of the Internet-connected desktop. - - - As part of the GNOME project, - Evolution is free software. The - program and its source code are released under the terms of - the GNU Public License (GPL), and the documentation falls - under the Free Documentation License (FDL), which is included - with this document (). For more - information about the GPL and the FDL, visit the Free Software - Foundation's website at http://www.fsf.org. - - - - This is a preview release - - Please help develop Evolution - by submitting bug reports when you find bugs. You can do - so by using the Bug Report - Tool (known as bug-buddy - at the command line). - - - - - - Evolution is a suite of tools to - help you work in a group. You can use it to send, receive, - and organize email, manage address and other contact - information, and maintain a calendar. It enables you to do - those things on one or several computers, connected directly - or over a network, for one person or for large groups. - Evolution can handle almost all - your communications tasks with the power and flexibility of - the GNOME desktop environment. - - - The developers of Evolution had - four major goals for their project: - - - - - The application must be both powerful and easy - to use. That means a familiar and intuitive - interface that users could customize to their liking, and - the development of shortcuts for complex tasks. - - - - - Evolution must meet and - exceed the standards set by other groupware products. - It must include support for most major network protocols - so that it can integrate seamlessly with existing - hardware and network environments. - - - - - The project must support open standards and protocols - to turn Evolution into an - advanced development platform. From the simplest - scripting to the most complex network and component - programming, Evolution - needed to offer developers an environment for - cutting-edge application development. - - - - - Data must be safe: Evolution - must not lose mail or corrupt mailbox files. It will - not execute scripts, automatically forward a virus to - your entire contacts list, or delete files from your - hard disk. - - - - - - Evolution is designed to make most - daily tasks faster. For example, it takes only one or two - clicks to enter an appointment or an address card sent to you - by email, or to send email to a contact or appointment. - Evolution makes displays faster and - more efficient, so searches are faster and memory usage is - lower. People who get lots of mail will appreciate advanced - features like vFolders, which - let you save searches as though they were ordinary mail - folders. - - -
- -
- About This Book - - - This version of the Evolution - User's Guide is a draft. It is missing - huge chunks of information, and many of the features it - describes are unimplemented. All the content is subject to - change, especially if you help. Please send comments on the - guide to aaron@helixcode.com. If you would like - to work on the guide please contact me or see the GNOME - Documentation project web site. This - paragraph will be removed in later versions of the manual. - - - - - This book is divided into two sections. The first section is a - guided tour— it will - explain how to use Evolution. If - you are new to Evolution or to - groupware in general, this is the section for you. The second - section, covering configuration, - is targeted at more advanced users, but anyone who wants to - change the way Evolution looks or - acts can benefit from reading it. - - - Typographical conventions - - Some kinds of words are marked off with special typography: - - Applications - Commands typed at the command line - Labels for interface items - - Menu selections look like this: - - Menu - Submenu - Menu Item - - - Buttons you can click - Anything you type in - Text output from a computer - - - - -
-
- - - - - - - - - - - - diff --git a/help/C/usage-calendar.sgml b/help/C/usage-calendar.sgml deleted file mode 100644 index 9ec3b0f60e..0000000000 --- a/help/C/usage-calendar.sgml +++ /dev/null @@ -1,356 +0,0 @@ - - - - The Evolution Calendar - - To begin using the calendar, select - Calendar from the shortcut - bar. By default, the calendar starts showing today's - schedule on a grey and white ruled background. At the upper - right, there's a monthly calendar you can use to switch days. - Below that, there's a TaskPad, where you can - keep a sort of glorified to-do list that's not linked to your - calendar. The calendar's daily view is shown in . - - -
- Evolution Calendar View - - Evolution Contact Manager Window - - - -
- - -
- - Ways of Looking at your Calendar - - - You can view your calendar by the day, by the week, by the - month, or by the year; press the calendar-shaped buttons on the - right side of the toolbar to switch between views. - - - To view yesterday's appointments, (last week's, if you're in - the weekly view, and last month's for the monthly view), click - the Pref button. For tomorrow, next week, - or next month, click Next, and of course, - click Today for today. - - - To visit a specific date's calendar entries, click - Go To and select the date in the dialog - box that appears. - - - - - - - - Scheduling With the Evolution Calendar - - The Evolution calendar allows you to - schedule events for yourself or a group of people. It can - handle events that repeat, event lengths from ten minutes to - multiple days, and events that have a date but no specific - time. Of course, you can also set event reminders and alarms - so that you don't forget about everything you've just put into - your calendar. Basically, it can handle almost any schedule you - throw at it. - - - Creating events - - To create a new calendar event, select - - File - New - Appointment - - or click the New button on the left end - of the toolbar. The New Appointment - dialog will pop up with the usual menu bar, tool bar, and - window full of choices for you. - - - Your event must have a starting and ending date — by - default, today — but you can choose whether to give it - starting and ending times or to mark it as an All - day event. For the purposes of the calendar, an - All day event begins at ten in the - morning, runs until eleven at night, and is displayed at the - top of a day's event list rather than inside it. That makes - it easy to have events that overlap and fit inside each other. - For example, a conference might be an all day event, and the - meetings at the conference would be timed events. Events with - starting and ending times can also overlap, however, and when - they do they're displayed as multiple columns in the day view - of the calendar. - - - Doing Two Things At Once - - If you create two calendar events that overlap, - Evolution will display them as - multiple columns in the calendar window. If you manage to - do both things at once, I'd like to meet you. - - - - You can have as many as four different - Alarms, any time prior to the event - you've scheduled. You can have one alarm of each type: - - - Display - - - A window will pop up on your screen to remind you of - your event. - - - - - Audio - - - Choose this to have your deliver a sound alarm. - - - - - Program - - - Select this if you would like some additional application - to run as a reminder. You can enter its name in the - text field, or find it with the - Browse button. - - - - - Mail - - - Evolution will send an - email reminder to the address you enter into the text - field. - - - - - - - - Classification is a little more - complicated, and only applies to calendars on a - network. Public is the default category, - and a public event can be viewed by anyone on the calendar - sharing network. Private denotes one - level of security, and Confidential a - higer level. Exact determinations and implementations of - this feature have yet to be determined. - - - The Recurrence tab lets you describe - repetition in events ranging from once every day up to once - every 100 years. You can then choose a time when repetition - will stop, and, under Exceptions, pick - individual days when the event will not - recur. - - - - Once you're done with all those settings, click on the disk - icon in the toolbar. That will save the event and close the - event editor window. If you want, you can alter an event - summary in the calendar view by clicking on it and typing. You - can change other settings by right-clicking on the event in - the and then choosing Edit this Appointment. - - - - - - - - - The Task Pad - - The Task Pad, located in the lower right corner of the - calendar, lets you keep a list of tasks separate from your - calendar events. Tasks are colored and sorted by priority and - due-date (see for more - information), and are included with calendar data during - synchronization with a hand-held device. - - - To record a new task, click the Add - button below the list. Evolution - will pop up a small window with five items in it: - - - - Summary: - - - The description you enter here will appear in the To Do - list itself. - - - - - - Due Date: - - - Decide when this item is - due. You can either type in a date and time, or select one from - the Calendar and time drop-down menus. - - - - - Priority: - - - Select a level of importance from 1 (most important) to 9 - (least important). - - - - - Item Comments: - - - If you wish, you can keep a more detailed description of - the item here. - - - - - - - Once you've added a task to your to-do list, its summary - appears in the Summary section of the - calendar window. To view or edit a detailed description of an - item, double-click on it, or select it and click - Edit. You can delete items by selecting - them and clicking on the Delete button. - - - - - Multiple Calendars - - Evolution permits you to have and - maintain multiple calendars. This is useful if you maintain - schedules for other people, if you are responsible for resource - or room allocation, or if you have multiple personalities. - - - - Keeping Multiple Calendars - - Keelyn has one calendar for her own schedule. Next to that - she maintains one for the conference room, so people know when - they can schedule meetings. On the local network, she - maintains a calendar that reflects when consultants are going - to be on site, and another that keeps track of when the Red - Sox are playing. - - - - To create a new calendar, select - - File New - Calendar - . - - You can place the calendar in any calendar folder and access it - from the folder view. Alarms, configuration, and display for - each calendar are seperate from each other. - - - -
- - - - - - - - - - diff --git a/help/C/usage-contact.sgml b/help/C/usage-contact.sgml deleted file mode 100644 index 4f9b9fd058..0000000000 --- a/help/C/usage-contact.sgml +++ /dev/null @@ -1,504 +0,0 @@ - - - - The Evolution Contact Manager - - - The Evolution contact manager can - handle all of the functions of an address book, phone book, or - Rolodex. Of course, it's a lot easier to update - Evolution than it is to change an - actual paper book. Evolution also - allows easy synchronization with hand-held and remote devices. - Since Evolution supports most major - network protocols, including LDAP, it can - fit into almost any existing network. - - - Another advantage of the Evolution - address book is its integration with the rest of the - application. That means that when you look for someone's - address, you can also see a history of appointments with that - person. Or, you can get an e-mail with contact information in - it and create a new address card on the spot. In addition, - searches and folders and all work in the same way they do in the - other components, so you don't have to learn another system for - similar tasks. - - - This chapter will cover using the - Evolution contact manager to organize - any amount of contact information, share addresses over a - network, and several ways to save time with everyday tasks. To - learn about configuring the contact manager, see . - - - - Getting Started With the Contact Manager - - - To open up your address book, click on - Contacts in the shortcut bar. The - contact manager is illustrated in . By default, the contact manager - shows all your cards in alphabetical order, in a - minicard format. You can select other - views from the View menu, and adjust the - width of the colums by clicking and dragging the grey column - dividers. - - - -
- Evolution Contact Manager - - Evolution Contact Manager Window - - - -
- - - The toolbar for the address book is quite simple: - - - Press New for a new contact. - - - - Find brings up an in-depth search window. - - - - Press Print to print one or more cards. - - - Delete deletes a selected card. - - - - - The last feature is Quick Search; to use - it, just type in the name of the person you're looking for and - hit Enter. - Evolution will search through all - the cards to find one that matches. - - - If there are no matches, the card display will be blank. To - display all of your contacts, you can - leave the Quick Search field blank, and - press enter. - - - The rest of the contact manager is taken up by the display of - your cards. You can view it as a table or as a list of - cards— switch between them in the View - menu — and move through them alphabetically alphanumeric - buttons and the scrollbar at the right of the window. - -
- - Destroy, Create, or Change Cards - - - To delete a card, click on it once to select it, then press the - Delete Card button. If you have - multiple cards selected, you'll delete mutliple cards. - - - Adding or changing cards is slightly more complicated. Any - time you add information to the contact manager, whether it's - an old card you're editing or a new card you're just adding to - your address book, you'll use the contact editor. To change a - card that already exists, just double click it to open the - contact editor window with all the current information already - filled in. If you want to create a new one, clicking the - New Card button will open up that same - window, but with empty fields instead of full ones. Either - way, it's the same tool for quite similar tasks, and you'll - find that it's pretty flexible and can store quite a lot more - than you'd think would fit onto a file card. - - - - The contact editor window has two tabs, - General, for basic contact information, - and Details, for a more specific - description of the person. In addition, it contains a full - menu bar, which is still evolving rapidly. - - -
- Evolution Contact Editor - - Evolution Contact Editor - - - -
- - The General tab contains no less - than seven sections, each with an icon: a face, for name and - company; a telephone for phone numbers; an envelope for email - address; a house for postal address; a file folder for - contacts, and a briefcase for categories. You can guess what - sort of information belongs in fields like Job - Title and Web page address, - but there are several parts of the window that are a little - more interesting. - - - The Categories feature is discussed in - , but the remaining - features are described here: - - - Full Name - - - The Full Name field has two - major features: - - - - You can enter a name into the Full - Name field, but you can also click the - Full Name button to bring - up a small dialog box with a few text boxes - - - Title: - - Enter an honorific or select one from the menu. - - - - First: - - The person's first, or given, name. - - - - Middle: - - The middle name or initial, if any, goes here. - - - - Last: - - The last name (surname) belongs here. - - - - Suffix: - - Suffixes such as "Jr." or "III" can go here. - - - - - - - - The Full Name field also - interacts with the File As - box to help you organize your contacts. - - - To see how it works, type a name in the - Full Name field: - Eva Lucianne Tester. - You'll notice that the File - As field also fills up, but in reverse: - Tester, Lucianne. - You can pick Eva - Tester from the drop-down, or - type in your own, such as Lucianne - Tester, Eva. - - - Filing Suggestion - - Don't enter something entirely different from - the actual name, since you might forget that - you've filed Eva's information under "F" for - "Fictitious Helix Code Employees" - - - - - - - - - Multiple Values for Fields - - - If you click on the small arrow buttons next to the - Primary Email field, you can also - choose Email 2 and - Email 3. Although the contact - editor will only display one of those at any given - time, Evolution will - remember them all. The arrow buttons next to the - telephone and postal address fields work in the same - way. - - - - - - - -
- - - Organizing your Contact Manager - - Organizing your contact manager is a lot like organizing your - mail. You can have folders and searches the same way you can - with mail, but the contact manager does not allow vFolders. It - does, however, allow each card to fall under several - categories, and allow you to create your own categories. - Categories are discussed . - - - - - - Groups of contacts - - Evolution offers two ways for you - to organize your cards. The first way is to use folders; - this works the same way that mail folders do. For more - flexibility, you can also mark contacts as members of - different categories. - - - - Grouping with Folders - - The simplest way to group address cards is to use folders. - By default, cards start in the - Contacts folder. If you've read then you already know that you - can create a new folder by selecting - - File - New - Folder - - and that you can put new folders anywhere you like. Note - that each card must be in one and only one folder, unless - you want to have duplicate cards. - - - To put a card into a folder, just drag it there from the - folder view. Remember that contact cards can only go in - contact folders, just like mail can only go in mail folders, - and calendars in calendar folders. - - - - - Grouping with Categories - - The other way to group cards is to mark them as belonging - to different categories. The difference between folders - and categories is that folders contain cards, but category - membership is a property of each card. That means that you - can mark a card as being in several categories or no - category at all. For example, I put my friend Matthew's - card in the "Business" category, because he works with me, - the "Friends" category, because he's also my friend, and - the "Frequent" category, because I call him all the time - and can never remember his phone number. - - - To mark a card as belonging to a category, click the - Categories button at the lower - right. From the dialog box that appears, you can check as - many or as few categories as you like. - - - Then, you can refer to all the cards in that category by: - FEATURE NOT IMPLEMENTED... FIXME - - - If the master list of categories doesn't suit you, you can - add your own. Just enter the new category's name in the - text box, then click Categories and - choose Add to Master List in the - window that appears. - - - - Another way to use Categories - - You can categorize contacts by typing the category - names into the Categories - field. You can also create new categories that way: - just type in a category name, and it counts as a - category. - - - - - - - - Sharing your Cards (and keeping them to yourself) - - Cards can be shared over a network. This is the sort of - feature you'll want to use if your company has a list of - vendors and clients that needs constant updating. If you - also share your calendars, people can avoid duplicating - work and keep up to date on developments within their - workgroup or across the entire company. - - - - Sharing Address Cards and Calendar Data - - Ray wants to schedule a meeting with Company X, so he - checks the network for the Company X address card so he - knows whom to call there. Since his company also shares - calendars, he then learns that his co-worker Deanna has - already scheduled a meeting with Company X next Thursday. - He can either go to the meeting himself or ask Deanna to - discuss his concerns for him. Either way, he avoids - scheduling an extra meeting with Company X. - - - - Of course, you don't want to share all of your cards— why - overload the network with a list of babysitters, or tell - everyone in the office you're talking to new job prospects? - Evolution lets you decide which - folders you want to make accessible to others. - - - To begin sharing a folder of address cards, wait until - Evolution supports this - feature. - - - - - Contact Manager Tools - - The contact manager works with - Evolution mail and the calendar to - help you add new address cards quickly. However, it can also - manage mailing lists. There are more tools planned, and when - they arrive, they will be described in this - section. - - - - Send me a Card: Adding New Cards Quickly - - As noted before, when you get information about a person in - the mail or in a calendar entry, you can add it to an address - card. To do so, right click on any email address or email - message, and select Add Address - Card from the menu that appears. Of course, - Evolution also adds cards from a - hand-held device during HotSync operation. For more - information about that, see . - - - - - Managing a Mailing list - - You already know that when you are writing an email, you can - address it to one or more people, and that - Evolution will fill in addresses - from your contact manager's address cards if you let it. In - addition to that, you can send email to everyone in a - particular group. - - - - Future versions of Evolution will - allow you to you export a group of cards to a spreadsheet, - database, or word processor so you can print address labels - or prepare large postal mailings. - - - - - - - Contact Manager Menubar Reference - - - -
- - - - - - - - - - - - - - diff --git a/help/C/usage-mail.sgml b/help/C/usage-mail.sgml deleted file mode 100644 index de2f3b0a23..0000000000 --- a/help/C/usage-mail.sgml +++ /dev/null @@ -1,1132 +0,0 @@ - - - - Evolution Mail - - An Overview of the Evolution Mailer - - Evolution email is like other email - programs in all the ways you would hope: - - - - It can sort and organize your mail in a wide variety of ways with - folders, searches, and filters. - - - - - It can send and receive mail in HTML or as plain text, and - supports file attachments. - - - - - It supports multiple mail sources, including IMAP, POP3, - and local mbox files. - - - - - - However, Evolution has some important - differences. First, it's built to handle very large amounts of - mail without slowing down or crashing. Both the filtering and searching functions - were built for speed and efficiency on gargantuan mail - volumes. There's also the Evolution - vFolder, an - advanced organizational feature not found in other mail clients. - If you get a lot of mail, or if you keep every message you get - in case you need to refer to it later, you'll find that feature - especially useful. - - - - You can start reading email by clicking - Inbox in the shortcut bar. By - default, the Inbox is open when you - start Evolution, and the first - time you see your inbox, there's a message in it from Helix - Code welcoming you to the application. - - - - - Reading, Getting and Sending Mail - - Reading a Message - - The first time you open your - Evolution - Inbox, you will see a window like the one - in , with a message from - Helix Code in the message list. The - message is displayed below that, in the view - pane. If you find the view - pane too small, you can double-click on the - message in the message list to have it - open in a new window. As is the case with folders, you can - right-click on messages in the message list and get a menu of - possible actions: - - - - View Message - - Select this item to view the message in - the view pane of the Evolution - window. - - - - - Edit Message - - This item is available only for messages and drafts - that you have written. Select it to open the message - composer and make changes to the message. - - - - - Print Message - - Select this item to print a message. - - - - - Reply to Sender - - Use this item to reply only to the author of the message. - - - - - Reply to All - - Send a reply to the author of the message - and to all others on the recipient list. See for more information. - - - - - Forward Message - - Send the message on to another person. - See for - information about how to use the Forward feature. - - - - - Delete Message - - Mark the message for deletion. Choose - ActionsExpunge - to delete marked messages permanently. - - - - - Move Message - - Select this item to move the message to another folder. - This will open a dialog to let you choose the destination - from a folder tree. - - - - - - - You can also select the order in which messages appear in - that list. To sort by sender, subject, or date, click on the - bars with those labels at the top of the message list. If - you click twice, you'll sort them in reverse order. - - - Aside from sorting the messages, you can opt to have the - messages threaded. Select - View Threaded Message - List to turn the threaded view on - or off. If the option selected, - Evolution will attempt to - associate related messages by using the - References, - In-Reply-To, and - Subject message headers. Messages - which are related are then placed next to each other, so that - it's easier to follow the thread of a conversation from - message to message. - - - Go ahead and click on the message in the message - list. That selects the message. Then click on - the Delete button in the tool bar. The - message now has a line through it, because you've marked it - for deletion. If you really want to get rid of it, choose - Expunge from the - Tools menu. That will delete it - permanently. If you want to keep it, click - Delete again, and it will no longer be - marked as deleted. At some point in the future, this feature - will change to something a little less counter-intuitive. - - - -
- Evolution Mail - - Inbox - - - -
- - -
- - - Checking Mail - - To check your email, just click Get - mail in the toolbar. If this is the first time - you've done so, the mail setup - assistant will ask you for the information it - needs to check your mail (see for more information). If - you're checking mail over a network (instead of from local - mbox files), you'll need to enter your - email password. Type it in, click OK and - Evolution will download your mail. - New mail will appear in your Inbox. - - - - Once you've entered your password, - Evolution will hold it in memory so - that you don't have to retype it every time you want to check - mail. It will only remember the password until you quit the - application; each time you run - Evolution, you need to re-enter - your password. If you'd like - Evolution to forget your password - sooner, select - ActionsForget - Passwords, and it will do so - immediately. - - - If you get an error message instead of mail, you probably - need to change your network settings. To learn how to - do that, have a look at , or ask your system - administrator. - - - - Attachments, HTML Mail, and Live Documents - - If someone sends you a file attached to an email (an - "attachment"), Evolution will - display the file at the bottom of the message to which it's - attached. Text, HTML, and most images will be displayed in - the message itself. For other files, - Evolution will provide a link and - icon at the end of the message. Click on that, and - Evolution will ask you where you - want to put the file. Once you've chosen a location and - saved the file, you can open, move, copy, or execute it just - like any other, using Nautilus or - your favorite shell or file manager. - - - - Evolution can also display - HTML-formatted mail, complete with graphics. HTML - formatting will display automatically, although you can - turn it off if you prefer. - - - - - - - - - Writing and Sending Mail - - You can start writing a new email message by selecting - File - New - Mail, or by pressing the - Compose button in the Inbox toolbar. - When you do so, the New Message window - will open, as shown in . - - - -
- New Message Window - - Evolution Main Window - - - -
- - - - - Enter an address in the To: field, a - subject in the Subject: and a message in - the big empty box at the bottom of the window, and press - Send. That's easy. It may even be - too easy, which is why I like to queue my messages up to be - sent a few minutes later. - - - Send Now, Send Later - - Evolution will send mail immediately unless you tell it to - do otherwise by selecting Send - Later from the MENU in - the message composition window. Then, when you press - Send, all your unsent messages will - go out at once. I like to use "Send Later" because it - gives me a chance to change my mind about a message before - it goes out. That way, I don't send anything I'll regret - the next day. - - - To learn more about how you can specify message queue - and filter behavior, see . - - - - - - You can probably guess the purpose of the buttons labelled - Cut, Copy, - Paste and Undo, but - there's a bit more to sending mail that's less obvious. In - the next few sections, you'll see how - Evolution handles additional - features, including mailing lists, attachments, and - forwarding. - - - - - Choosing Recipients - - If you have created address cards in the contact manager, - you can also enter nicknames or other portions of address - data, and Evolution will complete - the address for you. If you enter a name or - nickname that can go with more than one card, Evolution will - open a dialog box to ask you which person you meant. - - - Alternately, you can click on the - To:, Cc:, or - Bcc: buttons to get a list of email - addresses. Click the check-boxes next to the addresses, then - click OK, and the address will be - added to the appropriate form field. - - - For more information about using email together with the - contact manager and the calendar, see and . - - - - Multiple Recipients - - In addition, you can mark recipients in three different - ways. The To: field is for the - primary recipients of the message you are going to send. - However, it is considered bad form to have more than a few - email addresses in this section. - - - If you're writing to one person, but want to keep a third - party up to date, you can use Cc:. - Hearkening back to the dark ages when people used - typewriters and there were no copy machines, "Cc" stands - for "Carbon Copy." Use it whenever you want to share a - message you've written to someone else. - - Using the Cc: field - - When Susan sends an email to a client, she puts her - co-worker, Tim, in the in the - Cc: field, so that he know - what's going on. The client can see that Tim also - received the message, and knows that he can talk to - Tim about the message as well. - - - - - If you have a large number of recipients, or if you want - to send mail to several people without sharing the - recipient list, you should use - Bcc:. "Bcc" stands for "Blind Carbon - Copy", and means that people you put in the - Bcc: field get the message, but - nobody else sees their email address. They will still see - the list of addresses from the To: - and Cc: fields, though. - - - Using the Bcc: field - - Tim is sending an email announcement to all of his - company's clients, some of whom are in competition - with each other, and all of whom value their - privacy. He needs to use the - Bcc: field here. If he puts - every address from his address book's "Clients" - category into the To: or - Cc: fields, he'll make the - company's entire client list - public. Don't assume it won't happen to you! - - - - - - - - Replying to Messages - - In order to reply to a message, click on it once in the - message list to select it. Then press the - Reply button. A window like the - New Message window will appear, but - the subject will already be present— the same subject - as the message to which you are replying, but with Re: - before it, to mark it as a reply. In addition, the full - text of the previous message is inserted into the new - message, either in italics (for HTML display) or with the - > character (in plain text mode) before each line. This - indicates quoting. You can intersperse your message with - the quoted material as shown in - - - -
- Reply Message Window - - Evolution Main Window - - - -
- -
- - - If a message has several recipients, as in the case of - mailing lists or messages that have been carbon copied, you - may wish to click Reply to All - instead of Reply. If there are large - numbers of people in the Cc: or - To: fields, this can save substantial - amounts of time. But be careful, and always make sure you - know who is getting a message: it could be a mailing list - with thousands of subscribers. - - Using the Reply to All feature - - Susan sends an email to a client, and sends copies to - Tim and to an internal company mailing list of - co-workers. If Tim wants to make a comment to all of - them, he uses Reply to All, but - if he just wants to tell Susan that he agrees with her, - he uses Reply. - - - -
- - - Embellish your email with HTML - - You can't normally use text treatments or pictures in - emails, which is why you've probably seen people use - asterisks for emphasis or use - emoticons to convey their - feelings. However, most of the newer email programs can - include and display images and text treatments as well as - basic alignment and paragraph formatting. - - - HTML Mail is not a Default Setting - - Some people do not have HTML-capable mail clients, or - prefer not to receive HTML-enhanced mail because it is - slower to download and display. Some - people refer to HTML mail as "the root of all evil" and - get very angry if you send them HTML mail, which is why - Evolution sends plain text - unless you explicitly ask for HTML. To send HTML mail, - you will need to select - HTML in the mail settings dialog box. See - for more information. - - - If you format a message with HTML, but do not have - Send Messages as HTML enabled in your - mail settings, the composer will remove your text styles. - It will, however, preserve indentation and lists. The - same is true for individuals in your address book whom you - have not marked as wanting to receive HTML mail. - - - - HTML formatting tools are located just above the - composition frame, and in the Insert and - Format menus. Your message text will - appear formatted in the composer window, and the message - will be sent as HTML. - - - The icons in the toolbar are explained in tool-tips, which - appear when you hold your mouse over the buttons. The - buttons fall into four categories: - - - Headers and lists - - - Choose Normal for a default - text style, or Header 1 through - Header 6 for varying sizes of - header. You can also select - pre for preformatted text - blocks, and three types of List - Item. - - - - - Text style - - - - B is for bold text - I for italics - U to underline - S for a strikethrough. - - - - - - Alignment - - - Located next to the text style buttons, - these three paragraph icons should be familiar to - users of most word processing software. The - leftmost button will make your text left-justified, - the center button, centered, and the right hand - button, right-justified. - - - - - - Indentation rules - - - The button with the arrow pointing left will reduce - a paragraph's indentation, and the right arrow will - increase its indentation. - - - - - - - There are three tools that you can find only in the - Insert menu. - - - Insert Link: - - - Use this tool to - put hyperlinks in your HTML messages. When you - select it, Evolution will - prompt you for the Text that - will appear, and the Link, where - you should enter the actual web address (URL). - - - - - Insert Image: - - - Insert Image: Select this item to - embed an image into your email, as was done in the welcome - message. Images will appear at the location of the - cursor. - - - - - Insert Rule: - - This will insert a horizontal line, or rule, into your document. - You'll be presented with a dialog box which gives you - the choice of size, percentage of screen, shading, and - alignment; if you leave everything at the default - values you'll get a thin black rule all the way across - the screen. - - - - - - A Technical note on HTML Tags - - The composer is a WYSIWYG (What You See Is What You Get) - editor for HTML. That means that if you enter HTML - directly into the composer— say, <B>Bold Text</B>, the - the composer will assume you meant exactly that string - of characters, and not "make this text bold," as an HTML - composition tool or text editor would. - - - - - Attachments - - If you want to attach a file to your email message, you - can drag it from your desktop into the message window, or - click the button in the toolbar with a paper clip on it, - labelled Attach. If you click the - Attach button, - Evolution will open a file - selection dialog box, to ask you which file you want to - send. Select the file and click OK. - - - When you send the message, a copy of the file will - go with it. Be aware that big attachments can take a long - time to download. - - - - - - - - Forwarding Mail - - The post office forwards your mail for you when you change - addresses, and you can forward mail when you get a letter by - mistake. The email Forward button - works in much the same way. It's particularly useful if you - have received a message and you think someone else would - like to see it. You can forward a message as an attachment - to a new message (this is the default) or - you can send it inline as a quoted - portion of the message you are sending. Attachment - forwarding is best if you want to send the full, unaltered - message on to someone else. Inline forwarding is best if - you want to send portions of a message, or if you have a - large number of comments on different sections of the - message you are forwarding. Remember to note from whom the - message came, and where, if at all, you have removed or - altered content. - - - To forward a message you are reading, press - Forward on the toolbar, or select - Message - Forward . If you - prefer to forward the message inline - instead of attached, select - Message Forward - Inline from the menu. Choose an - addressee as you would when sending a new message; the - subject will already be entered, but you can alter it. - Enter your comments on the message in the - composition frame, and press - Send. - - - - Seven Tips for Email Usage - - I started with ten, but four were "Don't send - spam." - - - - - Don't send spam or forward chain mail. If you must, - watch out for hoaxes and urban legends, and make sure - the message doesn't have multiple layers of email - quotation symbols (>) indicating multiple layers - of careless inline forwarding. - - - - - - Always begin and close with a salutation. Say - "please" and "thank you", just like you do in real - life. You can keep your pleasantries short, but be pleasant! - - - - - - ALL CAPS MEANS YOU'RE SHOUTING! - - - - - - Never write anything in email you wouldn't say in - public. Old messages have a nasty habit of - resurfacing when you least expect. - - - - - - Check your spelling and use complete sentences. - - - - - - Don't send nasty emails (flames). If you get one, - don't write back. - - - - - - When you reply or forward, include just enough of - the previous message to provide context: not too - much, not too little. - - - - - Happy mailing! - -
-
- - - Organizing Your Mail - - Even if you only get a few email messages a day, you probably - want to sort and organize them. When you get a hundred a day - and you want to refer to a message you received six weeks ago, - you need to sort and organize them. - Fortunately, Evolution has the tools - to help you do it. - - - - Getting Organized with Folders - - Evolution keeps mail, as well as - address cards and calendars, in folders. You start out with a - few, like Inbox, - Outbox, and Drafts, - but you can create as many as you like. Create new folders by - selecting New and then - Folder from the - File menu. - Evolution will as you for the name - and the type of the folder, and will provide you with a folder - tree so you can pick where it goes. - - - When you click OK, your new folder will - appear in the folder view. You can - then put messages in it by dragging and dropping them, or by - using the Move button in the toolbar. - If you create a filter with the filter - assistant, you can have mail moved to your folder - automatically. - - - - - Searching for Messages - - Most mail clients can search through your messages for you, - but Evolution does it faster. You - can search through just the message subjects, just the message - body, or both body and subject. - - - To start searching, enter a word or phrase in the text area - right below the toolbar, and choose a search type: - - - Body or subject contains: - - - This will search message subjects and the messages - themselves for the word or phrase you've entered in - the search field. - - - - - Body contains: - - - This will search only in message text, not the subject - lines. - - - - - Subject contains: - - - This will show you messages where the search text is - in the subject line. It will not search in the - message body. - - - - - Body does not contain: - - - This finds every email message that does not have the - search text in the message body. It will still show - messages that have the search text in the subject - line, if it is not also in the body. - - - - - Subject does not contain: - - - This finds every mail whose subject does not contain - the search text. - - - - - - Then, press Enter. - Evolution will show your search - results in the message list. - - - - - - Staying organized: Mail Filters in Evolution - - Filters sort your email for you as it arrives. Most often, - you'll want to have Evolution put - mail into different folders, but you can have it do anything - you like. People who subscribe to multiple mailing lists, or - who often need to refer to messages they have sent, find - filters especially helpful to separate personal from - list-related mail, but they're good for anybody who gets more - than a few messages a day. To create a filter, select - - Tools Filter - Assistant . This will bring up a - window which will guide you through filter creation. The - filter assistant is shown in - -
- Creating a new Filter - - Creating a new Filter - - - -
- -
- - The filter assistant window - contains a window listing rules, and an option to create a - new rule. To start filtering your mail, click - Add to add a filtering rule. - You'll decide when it should take place: - - - - When mail arrives: Select - this option to have messages filtered as they - arrive. - - - - - When mail is sent: Select - this option to filter your outgoing mail. You - can use this feature to keep your - Outbox as organized as - your Inbox. - - - - - - - Then, the filter assistant will ask you which emails it should - act upon. You can set criteria based on message size, the - sender, primary addressee or Cc: list, words in the subject or - body of the message, or any combination of criteria. Check the - boxes next to each criterion you would like to use. - - - Once you've decided which messages to filter, the assistant - will ask you the sort of action you wish to take. You can - file, delete, or forward the message, and you can also have it - be exempted from other filters which would otherwise have - acted upon it. - - - - Two Notable Filter Features - - - Any incoming email that does not meet - filter action criteria remains in the Inbox. - - - If you move a folder, your filters - will follow it. - - - -
- - - - - Getting Really Organized with Virtual Folders - - If filters aren't flexible enough for you, or you find - yourself performing the same search again and again, consider - a virtual folder. Virtual folders, or vFolders, are an - advanced way of viewing your email messages within - Evolution. If you get a lot of - mail or often forget where you put messages, vFolders can help - you stay on top of things. - - - A vFolder is really a hybrid of all the other organizational - tools: it looks like a folder, it acts like a search, and you - set it up like a filter. Once you've set it up, you'll be - able to open it and read the messages in it as though it were - a normal mail folder. It's not a folder, though, because when - you open a vFolder, Evolution - performs a search for you. It's not a regular search, though, - because you can build a vFolder with a very complicated set of - criteria with multiple inclusions and exclusions, as though - you were setting up a filter. - - - - - - As messages that meet the vFolder criteria arrive or are - deleted, Evolution will - automatically place them in and and remove them from the - vFolder contents list. When you delete a message, it gets - erased from the folder in which it actually exists, as well as - any vFolders which include it. - - - That's pretty complicated, but it can be useful. For example, - if I have a folder for all the email from one person, and - another folder for all the email on a given topic, I - feel organized. But when the person - sends me mail about the topic, my whole email filing universe - becomes chaotic, and I need vFolders to save the day for me. - - - That sounds silly, but imagine a business trying to keep track - of mail from hundreds of vendors and clients, or a university - with overlapping and changing groups of faculty, staff, - administrators and students. The more mail you need to organize, the less - you can afford the sort of confusion that stems from an - organizational system that's not flexible enough. vFolders - make for better organization because they can accept - overlapping groups in a way that regular folders and filing - systems can't. - - - - Using Folders, Searches, and vFolders - - To organize my mail box, I can set up a vFolder for emails - from my friend Vince. Then, whenever I want to see the - messages Vince has sent me, I open the vFolder, and every - message he's sent me shows up, no matter where I've - actually filed it. If I want, I can also create a vFolder - containing any message from my list of co-workers which - also has the name of the project in it. That way, when - Vince sends me mail about the project, I can see that - message both in the "Vince" vFolder and in the "Project" - vFolder. That's because when I open up the "Vince" folder, - I'm really performing a search for all the mail from Vince, - and when I open the "Project" folder I'm really performing - a search for all the mail about the project. - - - - - - - To create a vFolder, select VFolder - Assistant from the Tools - menu in the main window. This - will bring up a dialog box that looks suspiciously like - the Filter Assistant (for more information on filters, see - ), and which - presents you with a list of vFolders you have previously - created. If you have already created vFolders, you can - click on them in the frame labelled Select Rule - Type, and edit or remove them. If you have - not created any, there will be only one available option: - click Add to add a new vFolder. - - - You'll be prompted to create a filtering rule. You can build - your own from the ground up, or select one of several base - rules to customize. Your options are: - - - For matching messages: - - - Choose this to create your own set of rules for the - vFolder. You may select one or more search criteria; - the vFolder you create will contain messages that - match all of them. - - - - - Messages from a certain person: - - - The remaining three rules are simpler. Select this - one to create a vFolder that will contain only - messages from an address you enter. - - - - - Messages to a certain address: - - - Any messages sent directly to this address will be in - the vFolder you create. This vFolder is an absolute - must for people with multiple email addresses. - - - - - Messages with a given subject: - - - Enter a subject, and the vFolder will contain messages - with that subject. - - - - - - The selection window is shown in - -
- Selecting a vFolder Rule - - Selecting a vFolder Rule - - - -
-
- - - Once you click Next, you'll customize - the vFolder rule. The rules for the vFolder you're creating - will appear as phrases in the bottom pane of the window. You - can click on the blue underlined text in the phrase to alter - it to your liking. For example, when I create a vFolder to - contain all messages from rupert@helixcode.com - that have the word "evolution" in the message body, the bottom - frame says: The From address matches - rupert@helixcode.com and the body contains - "evolution".. - -
- -
-
diff --git a/help/C/usage-mainwindow.sgml b/help/C/usage-mainwindow.sgml deleted file mode 100644 index 8a71f2d4f2..0000000000 --- a/help/C/usage-mainwindow.sgml +++ /dev/null @@ -1,420 +0,0 @@ - - - - The Main Window: Evolution Basics - - Start Evolution by selecting - Evolution from the - Applications of the Main Panel - Menu, or by typing evolution at the - command-line. The first time you run the program, it will create - a directory called evolution in your home - directory, where it will keep all your - Evolution-related files. - - - After Evolution starts - up, you will see the main window, with the - Inbox open. It should look a lot like the - picture in . On the left of - the main window is the shortcut - bar, with several buttons in it. Just underneath the - title bar is a series of menus in the menu - bar, and below that, the tool - bar with buttons for different functions. The largest - part of the main window is taken up by the - actual Inbox, where messages are listed - and displayed. If you're running the program for the first time, - you'll have just one message: a welcome from Helix Code. - - - -
- Evolution Main Window and Inbox - - Evolution Main Window - - - -
- -
- - - - The Way Evolution Looks - - The appearance of both Evolution - and GNOME is very easy to - customize, so your screen might not look like this picture. - You might configure Evolution to - start with a different view, without the shortcut - bar, or with the folder bar - instead. - - - - - - The Shortcut Bar - - Evolution's most important job is - to give you access to your information and help you use it - quickly. One way it does that is through the - shortcut bar, the column on the left - hand side of the main window. The large buttons with names - like Inbox and - Contacts are the shortcuts, and you can - select different groups of shortcuts by clicking the - rectangular category buttons. - - - The category buttons are Evolution - Shortcuts and Internet - Directories. When you click on them, they'll slide - up and down to give you access to different sorts of shortcuts. - When you first start Evolution, you - are looking at the Evolution Shortcuts - category. If you click Internet - Directories, it will slide up and you'll see buttons - for the Bigfoot and - Netcenter directories, as well as any - others you or your system administrator might have added. - Internet directories behave a lot like the local contact - manager, which is covered in . - - - Take a look at the Evolution Shortcuts - again. They are: - - - - - - - Inbox: - - - The Inbox will show you all of your email. Your Inbox - is also where you can access Evolution's tools to - filter, sort, organize, and search your mail. - - - - - - Calendar: - - - The Calendar can store your appointments and To do lists - for you. Connected to a network, you can use it to keep - a group of people on schedule and up to date. - - - - - - Contacts: - - - The Contact Manager holds your addresses, phone numbers, - and contact information. Like calendar information, - contact data can be synchronized with hand-held devices - and shared over a network. - - - - - - - Notes: - - The note pad is your catch-all tool: use it to take - messages from phone conversations, keep small things - organized, write haiku, or whatever - you like. This feature is not yet implemented, but will be - soon. See for more - information. - - - - - - - If you prefer to use a keyboard shortcut, or hot - key, you can use those instead. They're shown next - to their equivalent menu items in the menu bar. You can also set - your own hot keys for functions that don't have any; this is - covered in . If you're using the - keyboard shortcuts you may also want to hide the - shortcut bar by selecting - View Show Shortcut - Bar . - - - - Two Shortcut Bar Tricks - - To remove a shortcut from the shortcut bar, right-click on it - and select Remove. - - To change the way the shortcut bar looks, right-click in an - empoy space on the shortcut bar. From the menu that appears, - you can select icon sizes. - - - - - - The Folder Bar - - The folder bar is a more comprehensive - way to view the information you've stored with - Evolution. It displays all your - appointments, address cards, and email in a tree that's a lot - like a file tree— it starts small - at the top, and branches downwards. On most computers, there - will be three folders at the base. The first one is - VFolders, for virtual folders (discussed in - . The next one is - External Directories, for contact - directories stored on a network. The most important one is - probably Local, which you can use to access - all the data that's stored on your computer. If you click on - the plus sign plus sign next to the Local - folder, you'll see the contents: - - - - Calendar, for appointments and - event listings. - - - - - Contacts, for address cards. - - - - - Directories, for Internet contact directories. - - - - - Inbox, for incoming mail. - - - - - Outbox, which is for drafts of - messages and mail that's already been sent. - - - - - - - - To create a new folder, select - File New - Folder. You'll be asked where you want to - put it, and what kind of folder it should be. You can choose - from three types: Mail, for storing mail, - Calendar for storing calendars, and - Contacts for storing contacts. - - - - Folders Have Limits - - You can always place a folder inside other folders, - regardless of folder type. However, calendars, - contacts, and mail can't go into the same - folder. Calendars have to go in calendar folders, mail - in mail folders, and contacts in contact folders. - - - - - Right-clicking will bring up a menu for just about anything - in GNOME, and Evolution is no - exception. If you right-click on a folder, you'll have a - menu with the following options: - - View, to view a message. - Something else, for another purpose. - Something else, for another purpose. - . - - - - Context-Sensitive Help - - GNOME 2.0 supports context-sensitive help, which means you can - almost always get help on an item by right-clicking it. If - you're not sure what something is, or don't know what you can - do with it, choosing Help from the - right-click menu is a good way to find out. - - - - - Any time new information arrives in a folder, that folder label - is displayed as bold text. - - - To delete a folder, right-click it and select - Delete from the menu that pops up. - To change the order of folders, or put one inside another, use - drag-and-drop. To move individual - messages, appointments, and address cards between folders, you - can do the same thing: drag them where you want them, and - they'll go. - - - - The Menu Bar - - The menu bar's contents will always - provide all the possible actions for any given view of your - data. That means that, depending on the context, menu bar items - will change. If you're looking at your Inbox, most of the menu - items will relate to mail; some will relate to other components - of Evolution and some, especially - those in the File Menu will relate to the - application as a whole. This section describes those items that - cover the application as a whole; items specific to mailer are - discussed in the mail chapter, calendar items in the calendar - chapter, and so forth. - - - - - File Menu - - - Anything related to a file falls under this - menu: - - - New... — If you - want to create a new folder, calendar, - appointment, address card, or message, this is - where you should look. - - - - Go to Folder — - Select this item, then choose which folder you'd - like to view. - - - Exit — Quits the application. - - - - Print... — Opens the printing - dialog box so you can print items from the view pane of - Evolution. - - - - - - - Edit Menu - - Although it doesn't contain anything at first, - the Edit menu fills up with - useful editing tools when you're... editing. - - - - - Tools Menu - All of your assistants and configuration - tools go here. For the Inbox, that - means things like Mail - Configuration and the vFolder - Editor. For the - Calendar and the Contact - Manager - - - - Actions Menu - - This menu contains a list of actions you can perform on - the information you've stored with - Evolution. The contents vary - depending on the view, but for the - Inbox, it contains items like - Mark All Messages Read and - Expunge, to erase all the - messages you've marked for deletion. - - - - - Help Menu - - Select among these items to open the - Help Browser to the appropriate section. - - - - - - Once you've familiarized yourself with the main - window you can start doing things with it. We'lql - start with your email inbox: you've got a letter waiting for you - already. - - -
- - - - - - - - - - - - - - - - - - - - - diff --git a/help/C/usage-notes.sgml b/help/C/usage-notes.sgml deleted file mode 100644 index a4161da810..0000000000 --- a/help/C/usage-notes.sgml +++ /dev/null @@ -1,41 +0,0 @@ - - Evolution Notes - - An Overview of the Evolution Notes - - In the dark ages before email was invented, there were notes. - Even now, notes are an almost necessary part of our lives. It - only makes sense that Evolution has - a Notes feature. Evolution can help - you take notes in the following ways: - - - - You can take down phone numbers, take school notes, take phone - messages, or even write poetry. - - - - - You can color code each note to help cateogrize each note into - a topic. - - - - - Something - - - - - Something - - - - - - You can start writing notes by clicking Notes in the - shortcut bar. - - - diff --git a/help/C/usage-sync.sgml b/help/C/usage-sync.sgml deleted file mode 100644 index 07325e1848..0000000000 --- a/help/C/usage-sync.sgml +++ /dev/null @@ -1,22 +0,0 @@ - - - Synchronizing with a Hand-held Device - - Once you've set up a synchronization system, it pretty much - takes care of itself. Not only that, it's entirely possible - that your system administrator has set it up for you. All - that this chapter covers is how to use that system once it's - installed and configured. If you need to set it up, consult - . - - - - If you've already got Gnome-pilot set up to use - Evolution, put - your hand-held device on the cradle and press the HotSync - button. - - - No, really. That's all there is to it. - - \ No newline at end of file diff --git a/help/Camel-Classes b/help/Camel-Classes deleted file mode 100644 index 93aec087dd..0000000000 --- a/help/Camel-Classes +++ /dev/null @@ -1,35 +0,0 @@ -CamelException -CamelProvider -CamelThreadProxy -CamelURL -GtkObject - + CamelObject - + CamelAddress - | + CamelInternetAddress - | ` CamelNewsAddress - + CamelDataWrapper - | + CamelMedium - | | ` CamelMimePart - | | ` CamelMimeMessage - | ` CamelMultipart - + CamelFolder - | ` CamelFolderPtProxy - + CamelFolderSearch - + CamelFolderSummary - + CamelMimeFilter - | + CamelMimeFilterBasic - | + CamelMimeFilterCharset - | + CamelMimeFilterIndex - | ` CamelMimeFilterSave - + CamelService - | + CamelStore - | ` CamelTransport - + CamelSession - + CamelStream - | + CamelSeekableStream - | | + CamelSeekableSubstream - | | + CamelStreamFs - | | ` CamelStreamMem - | + CamelStreamBuffer - | ` CamelStreamFilter - ` CamelThreadProxy \ No newline at end of file diff --git a/help/ChangeLog b/help/ChangeLog deleted file mode 100644 index 9aedca8af0..0000000000 --- a/help/ChangeLog +++ /dev/null @@ -1,329 +0,0 @@ -2000-08-09 Aaron Weber - - * C/usage-mainwindow.sgml: Redid menubar description. - - - * C/config-prefs.sgml: Added coverage of folder config, requested - that feature be transferred to config section. Switched to - variablelist in "Other" config section. - - * C/usage-mail.sgml: Added coverage of right-click on messages, - threaded-view. - - * C/usage-mainwindow.sgml: Right-click on folder menu reinstated. - -2000-08-07 Aaron Weber - - * C/config-prefs.sgml: Added news server coverage. Other config - proofing changes. - - -2000-08-05 Aaron Weber - - * C/apx-gpl.sgml: New file. Contains contents of "COPYING", - but marked up (probably not very well, but valid) as docbook - (SGML). - - * C/evolution-guide.sgml: Subtle change to the legal notice: - distinguished manual license from software license. Linked to - apx-gpl.sgml above. - - * C/usage-calendar.sgml: I redid all the usage files. - -2000-07-21 Aaron Weber - - * C/usage-mail.sgml: Added password remembering/forgetting feature. - - * C/config-prefs.sgml: Mostly moved to variablelists, a few - language changes. - - * C/config-setupassist.sgml: Minor changes to formatting, wording. - - * C/usage-notes.sgml: Changed trademark references, other minor - changes. - - * C/usage-calendar.sgml: Minor fixes, added additional calendar - section, removed references to unimplemented features. Spellcheck, - prep for 0.3 release. - -2000-07-19 Aaron Weber - - * C/usage-mail.sgml: lots of minor fixes to language. added - desc. of clahey's cool button-address thing. - - * C/usage-mainwindow.sgml: fixed itemizedlists, ch. to shortcut - bar & folder descs, removed refs to trash. - -2000-07-18 Aaron Weber - - * C/usage-contact.sgml: Altered category addition stuff, plus - suggestions from Kevin. - - * C/apx-gloss.sgml: Added ldap and signature definitions (from - Kevin). - - * C/usage-mail.sgml: Move to variablelists from itemizedlists. - -2000-07-14 Aaron Weber - - * C/usage-contact.sgml: moved to variablelists from itemizedlists - * C/usage-calendar.sgml: moved to variablelists from itemizedlists - -2000-06-29 Aaron Weber - - * C/preface.sgml: Minor fixes. - - * C/usage-notes.sgml: New File for feature that is yet to come. - * C/evolution-guide.sgml: Added entity for notes chapter. - * C/usage-mainwindow.sgml: Un-commented references to notes section. - - * C/apx-authors.sgml: Removed dcm from author list. - - * C/usage-calendar.sgml: Added to-do list features. - -2000-06-28 Aaron Weber - - * C/usage-contact.sgml: commented out future features; redid - contact editor stuff. - - * C/apx-gloss.sgml: Removed "live doc" and added "minicard" - -2000-06-27 Aaron Weber - - * C/devel-action.sgml: Removed file. - * C/devel-script.sgml: Same. - * C/devel-component.sgml: Same. - * C/preface.sgml: Removed references to devel section. - * C/evolution-guide.sgml: Removed references to devel section. - -2000-06-23 Aaron Weber - - * C/evolution-guide.sgml: Made moderate to major stylistic updates - to this, apx-gloss.sgml, and to all files beginning with "usage," - especially wrt HTML mail. - - -<<<<<<< ChangeLog -2000-06-15 Aaron Weber - - * C/usage-contact.sgml: Category stuff improved. - - * C/usage-calendar.sgml: Now covers how to add an event properly. - -======= -======= -======= -2000-07-17 Federico Mena Quintero - - * Makefile.am (SUBDIRS): Added the devel directory. - ->>>>>>> 1.15 -2000-06-28 Peter Williams - - * C/Makefile.am (SGML_FILES): Don't depend on the newly-removed - devel-*.sgml files. - ->>>>>>> 1.13 -2000-06-16 Damon Chaplin - - * C/.cvsignore: added evolution-guide and evolution-guide.junk - so we don't get the '? doc/C/evolution-guide' messages each time we - do a cvs update. - ->>>>>>> 1.12 -2000-06-14 Aaron Weber - - * C/usage-mainwindow.sgml: added sect on menubar, other minor changes. - - * C/usage-mail.sgml: Improved filter and vfolder - description, and some minor changes from me and Kevin. - -2000-06-07 Aaron Weber - - * C/config-prefs.sgml: finished adding calendar prefs. screenshots. - * C/fig/config-cal.png: new file (screenshot for above) - * C/fig/config-mail.png: same - -2000-06-05 Aaron Weber - - * C/usage-calendar.sgml: Incorporated chgs from Kevin. - - * C/config-prefs.sgml: began total overhaul of structure and added - content reflecting new prefs items. needs LOTS more work. - - * C/usage-mail.sgml: changed some references to id's in the - config-prefs section. - - * C/fig/config-mail.png: changed filename from config-prefs.png - -2000-06-01 Aaron Weber - - * C/config-prefs.sgml: filename was wrong, altered. - - * C/usage-mail.sgml: improved filter instructions, vFolder - instructions. still need work though. - - - * C/usage-contact.sgml: added screenshot. - - * C/usage-calendar.sgml: added screenshot. - - * C/config-prefs.sgml: added screenshots, and now describes the - actual prefs dialogs. - - * C/fig/config-camel.png: new (screenshot) file - * C/fig/filter-druid.png: same - * C/fig/vfolder-druid.png: same - * C/fig/calendar.png: same - * C/fig/contact.png: same - * C/fig/vfolder-createrule-fig.png: same - * C/fig/filter-new-fig.png: same - * C/fig/config-camel.png: same - -2000-06-01 Dan Winship - - * Makefile.am: recurse into the C directory - - * C/Makefile.am: Rules to build and install the docs. Mostly - stolen from gnomecal. Only works if you have GDP stuff - (http://www.gnome.org/gdp/) set up on your machine, but won't make - the build fail if you don't. - -2000-05-29 Aaron Weber - - * C/usage-contact.sgml: incorporated kevins notes. - * C/usage-mainwindow.sgml: incorporated kevins notes. - -2000-05-27 Aaron Weber - - * C/evolution-guide.sgml: added Kevin Breit to author and - copyright. - - * C/apx-authors.sgml: Put app authors in a simplelist. - - * C/usage-mail.sgml: Removed USAGE-SETUP insertion, added xref to send - users to config-setupassist chapter. This and the following changes - take setup druid coverage out of usage - section and put it in config section. - * C/config-setupassist.sgml: Added mail druid coverage from - usage-setup.sgml. - * C/usage-setup.sgml: Removed file. contents in - config-setupassist.sgml. - * C/evolution-guide.sgml: Removed - USAGE-SETUP entity (and file usage-setup.sgml.) - - -2000-05-26 Aaron Weber - - * C/fig/mainwindow-pic.png: new file - * C/fig/mail-druid-pic.png: new file - * C/fig: New directory, for figure graphics. - - * C/apx-gloss.sgml: new file. glossary. thx. to kevin from chicago. - - * C/usage-setup.sgml: More accurate description of druid, and - moved to mail section-- see usage-mail.sgml entry. This is a new - location for this entity, and it may move more later. - - - * C/usage-mainwindow.sgml: altered description of starting - evolution. added screenshot for main-window picture. - - * C/usage-mail.sgml: added screenshots, added coverage of setup - druid and put it into get-and-send section, which is probably not - where it should stay. Also started filter druid coverage and - clarified examples, esp. in Bcc: section. - - * C/usage-contact.sgml: Clarified examples. - - * C/preface.sgml: rewording of "what is" and "about book" sections. - - * C/evolution-guide.sgml: added glossary entity APX-GLOSS, altered - phrasing in part intros, changed order of Setup-assistant section. - - * C/config-prefs.sgml: changed wording, removed ref. to re-running - setup assistant. - -2000-05-18 Aaron Weber - - * C/evo_book_0.1.sgml: removed. - - * C/apx-authors.sgml: new file. - * C/apx-bugs.sgml: same. - * C/apx-fdl.sgml: same. - * C/config-prefs.sgml: same. - * C/config-setupassist.sgml: same. - * C/config-sync.sgml: same. - * C/devel-action.sgml: same. - * C/devel-component.sgml: same. - * C/devel-script.sgml: same. - * C/evolution-guide.sgml: same. - * C/preface.sgml: same. - * C/usage-calendar.sgml: same. - * C/usage-contact.sgml: same. - * C/usage-mail.sgml: same. - * C/usage-mainwindow.sgml: same. - * C/usage-setup.sgml: same. - * C/usage-sync.sgml: same. - -2000-05-07 Dan Winship - - * Camel-Classes: sync - -2000-04-16 Aaron Weber - - * C/evo_book_0.1.sgml: new file (doc sgml) - - * C/ : New directory for doc sgml & graphics - -2000-03-05 Christopher James Lahey - - * white-papers/widgets/e-table.sgml: Added Miguel to the author - list for ETable. - -2000-03-03 Christopher James Lahey - - * white-papers/widgets/, white-papers/widgets/e-table.sgml: New - doc for the ETable widget. - - * ChangeLog: Created a ChangeLog file for the docs file and - integrated the individual ChangeLogs. - -2000-03-01 Dan Winship - - * ibex.sgml: Ibex white paper - -2000-02-29 Federico Mena Quintero - - * calendar.sgml: Sections for the calendar user agent and the - calendar client library. - -2000-02-29 Dan Winship - - * camel.sgml: Reorg a bit more, make the
 section narrower,
-	add more references to graphics (the graphics themselves are
-	still in beta), add a section on CamelStream.
-
-2000-02-28  Federico Mena Quintero  
-
-	* calendar.sgml: Section for the personal calendar server.
-
-2000-02-28  Dan Winship  
-
-	* camel.sgml: add Bertrand to authors, edit his additions
-
-2000-02-28  bertrand  
-
-	* camel.sgml: add a blurb about camel offering
-	uniform interface. needs style and grammar corrections. 
-	Talk about virtual folders.
-	Talk about lightweight messages
-	Talk about IMAP. 
-
-2000-02-28  Dan Winship  
-
-	* camel.sgml: Beginnings of a Camel white paper
-
-2000-02-25  Federico Mena Quintero  
-
-	* calendar.sgml: New file for the Evolution calendaring white paper.
diff --git a/help/Design b/help/Design
deleted file mode 100644
index 7b7cf6f821..0000000000
--- a/help/Design
+++ /dev/null
@@ -1,201 +0,0 @@
-
-The Evolution Project specification
-Miguel de Icaza.
-
-
-* Introduction
-
-	Evolution is a project aiming at providing the free software
-	community with a professional, high-quality tool for managing
-	mail, appointments, tasks and other personal information
-	tools.  
-
-	We want to make Evolution a system that addresses our needs
-	(the free software development community) and we believe that
-	by addressing our needs, we will provide a system that will
-	scale in the years to come for other users that are just
-	starting to use computers and the internet.
-
-	The main objectives of Evolution are to provide these powerful
-	features, and to make the user interface as pretty and
-	polished as possible.
-
-	Evolution is a GNOME application and a number of auxiliary
-	CORBA servers that act as the storage backends. 
-
-	Evolution will copy the best user interface bits and the best
-	ideas and features found on contemporary groupware systems.
-
-* Evolution internals.
-
-	Evolution can store its information locally (files for mail,
-	calendar and address book) or on a remote server (imap/pop,
-	cap, ldap).  
-
-	Given the importance of syncing in this modern PDA world,
-	the Evolution GUI acts as a client to the data repository.
-	The data repository is a GUI-less CORBA server called Wombat.
-
-	Wombat provides a unified access system to the calendar and
-	addressbook data (doing mail is a bit hard, so we are leaving
-	this as a TODO item for now).
-
-	Wombat's CORBA interfaces are notifier-based.  This means that
-	CORBA requests sent to Wombat do not return values
-	inmediately, but rather than for Wombat requests the user has
-	to provide a CORBA object that will be notified of what
-	happened.
-
-	Yes, that sounds hairy.  It is actually pretty simple.  It
-	basically means that you submit requests to Wombat, and a
-	callback is invoked in your code when the request has been
-	carried away. 
-
-	This enables a Palm to sync to the repository without having
-	the GUI for Evolution running.  It also means that volunteers
-	will be able to write text-based and web-based versions of
-	Evolution (not me though :-).
-
-* Evolution as a platform
-
-	Evolution is more than a client for managing the above
-	information: Evolution is a platform for building groupware
-	applications that use the above components to get their work done.
-
-	To achieve this Evolution is designed to be scriptable, and it
-	exports its internals trough CORBA/Bonobo.  It is implemented
-	as a collection of Bonobo containers and Bonobo components.
-
-	There is a clean separation between the views (the user
-	interface) and the model (the view).  The views that we are
-	writing are GNOME based, and they talk to the Wombat CORBA
-	server.
-
-	Wombat takes care of notifications to the various clients for
-	the data. 
-
-* The overall organization
-
-	A bar similar to outlook provides shortcuts for accessing the
-	various resources managed by Evolution: mail folders,
-	contacts, tasks, journal entries, notes, messages and other
-	user-defined destinations. 
-
-* User interface widgets
-
-** The ETable package
-
-	This package provides a way of displaying and editing tables.
-
-	Tables are displayed based on a TableColumn definition that
-	defines the layout used for the display.  Table Columns can be
-	nested, and the package does grouping of information displayed
-	according to the criteria defined there.
-
-	This is used in multiple places troughout evolution: it is
-	used for the Mail summary display, for the TODO display and
-	TODO new data entry and for the address book.
-
-	Nesting in the address book can be performed on various
-	fields.  For example, a first level of nesting could be
-	"Company" and a second level would be "Country" the result is
-	a 2-level tree that can be collapsed expanded and contains the
-	information sorted/grouped by those two criteria.
-
-	The user interface for this will be copied from Outlook: the
-	possibility of adding and removing fields with drag and drop
-	as well as grouping using drag and drop.
-
-* The Mail system
-
-** The Mail sources
-
-	The mail system will support 4 sources of mail:
-
-		POP3 (transfer to a local file).
-		IMAP
-		Local mbox format in $MAIL.
-		Local mbox format that have other delivery points.
-
-	On top of that, it will be possible to browse existing mbox
-	archives (and possibly other formats in the future, like
-	Mailbox and Maildir).
-
-** Storing the mail
-
-	Mail that gets incorporated into the system is stored in mbox
-	format, and summary files are provided for quick access to the
-	files.  No modifications to the file on disk is performed (I
-	am not quite sure about this, perhaps we want to add the
-	status flags and some method for adding metadata to the mail).
-
-	Summary files are rebuilt on demand or rebuild if the mbox
-	file and the summary file have got out of sync.
-
-	A Metadata system that will enable us to attach information to
-	a message will have to be designed and implemented (enabling
-	users to add annotations to mails, and special keywords and
-	flags in a per-message fashion).
-
-** Folders
-
-	Michael Zucchi is working on a system that will let users
-	easily define rules for splitting their incoming mail into
-	physical folders.  
-
-	A further refinement to Folders are Virtual Folders.  This
-	basically provides a powerful search and viewing facility for
-	mail.  It works like this: when a mail is "incorporated" into
-	Evolution it is scanned and indexed.
-
-	Then users can enter queries into Evolution that will search
-	the entire database of messages.	
-
-** Virtual folders
-
-	Virtual folders will enable users to read/browse their mail in
-	new ways: by specifying search criterias, these folders will
-	contain messages that match the criteria given.  
-
-	There is more information about this in the libcamel
-	directory. 
-
-	We will index all headers from a message, and possible the
-	contents of messages and keep those on a separate file, to
-	enable users to query their mail database.
-
-** Mail summary display
-
-	The summary will be displayed using the ETable package, to
-	enable users to add a number of sorting criteria and various
-	display methods for the summary view.
-
-	The Outlook methods for displaying will be present on the
-	system.
-
-	Message threading will be supported in Evolution.
-
-** Message display engine
-
-	We are going to be using a combination of
-	libcamel/limime/libjamie to parse messages and render them
-	into an HTML buffer.
-
-* The HTML engine
-
-	The GtkHTML engine will be used to display messages, and will
-	be extended to support a number of features that we require:
-	internal handling of characters will be based on Unicode
-
-* The message composer
-
-	Regular features found in composers will be added: connecting
-	the composer to the address book, support for drag and drop
-	for including attachments, editing the message, archiving
-	drafts and archiving messages sent.
-
-	Ettore has been working on adding editing support to the
-	GtkHTML and he is working currently on a Bonobo component that
-	will provide a ready-to-use Bonobo control for embedding into
-	other applications.
-
diff --git a/help/Makefile.am b/help/Makefile.am
deleted file mode 100644
index 7b5420fee8..0000000000
--- a/help/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = C devel
diff --git a/help/devel/.cvsignore b/help/devel/.cvsignore
deleted file mode 100644
index c24a54fbcc..0000000000
--- a/help/devel/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-Makefile
-Makefile.in
-html
-evolution-devel-guide.html
diff --git a/help/devel/ChangeLog b/help/devel/ChangeLog
deleted file mode 100644
index 7e0c8147ba..0000000000
--- a/help/devel/ChangeLog
+++ /dev/null
@@ -1,35 +0,0 @@
-2000-08-14  Federico Mena Quintero  
-
-	* calendar/cal-util/*: Integrated the cal-util library into the
-	documentation framework.
-
-	* calendar/Makefile.am (SUBDIRS): Added the cal-util directory.
-
-	* evolution-devel-guide.sgml: Added entities for the cal-util stuff.
-	Added entity for libical.
-
-	* calendar/reference.sgml: Added the cal-util reference entries.
-
-	* calendar/cal-client/evolution-cal-client-sections.txt: Updated
-	for new API.
-
-2000-08-09  Peter Williams  
-
-	* Makefile.am (maintainer-clean-local): Don't depend
-	on 'clean'; this messes up maintainer-clean.
-
-2000-07-17  Federico Mena Quintero  
-
-	* calendar/cal-client/tmpl/cal-client.sgml: Populated.
-
-	* evolution-devel-guide.sgml: New  toplevel for the
-	Evolution Developer's Guide.
-
-	* calendar/evolution-calendar.sgml: New  for the calendar
-	developer's documentation.
-
-	* calendar/architecture.sgml: New  for the calendar
-	architecture.
-
-	* calendar/reference.sgml: New  for the calendar API
-	reference.
diff --git a/help/devel/Makefile.am b/help/devel/Makefile.am
deleted file mode 100644
index 0d3cec5a1c..0000000000
--- a/help/devel/Makefile.am
+++ /dev/null
@@ -1,64 +0,0 @@
-SUBDIRS = calendar
-
-# The name of the module.
-DOC_MODULE=evolution-devel-guide
-
-# The top-level SGML file.
-DOC_MAIN_SGML_FILE=evolution-devel-guide.sgml
-
-HTML_DIR=$(datadir)/gnome/html
-
-TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
-
-evolution_devel_guidedir = $(HTML_DIR)
-evolution_devel_guide_DATA =			\
-	evolution-devel-guide.html
-
-content_files =					\
-	evolution-devel-guide.sgml
-
-EXTRA_DIST = 					\
-	$(evolution_devel_guide_DATA)		\
-	$(content_files)
-
-if ENABLE_GTK_DOC
-evolution-devel-guide.html: html/book1.html
-	-cd $(srcdir) && cp html/book1.html evolution-devel-guide.html
-else
-evolution-devel-guide.html:
-endif
-
-html/book1.html: $(content-files)
-	$(MAKE) html
-
-html:
-	test -d $(srcdir)/html || mkdir $(srcdir)/html
-	-cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
-
-clean-local:
-	rm -f *~ *.bak *.signals *-unused.txt
-
-maintainer-clean-local:
-	cd $(srcdir) && rm -rf html
-
-install-data-local:
-	$(mkinstalldirs) $(DESTDIR)$(TARGET_DIR)
-	(installfiles=`echo $(srcdir)/html/*.html`; \
-	if test "$$installfiles" = '$(srcdir)/html/*.html'; \
-	then echo '-- Nothing to install' ; \
-	else \
-	  for i in $$installfiles; do \
-	    echo '-- Installing '$$i ; \
-	    $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
-	  done; \
-	  echo '-- Installing $(srcdir)/html/index.sgml' ; \
-	  $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR); \
-	  echo '-- Fixing Crossreferences' ; \
-	  gtkdoc-fixxref --module=$(DOC_MODULE) --html-dir=$(HTML_DIR)|| true; \
-	fi)
-
-dist-hook:
-	mkdir $(distdir)/html
-	-cp $(srcdir)/html/*.html $(srcdir)/html/*.css $(distdir)/html
-
-.PHONY: html
diff --git a/help/devel/calendar/.cvsignore b/help/devel/calendar/.cvsignore
deleted file mode 100644
index 282522db03..0000000000
--- a/help/devel/calendar/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile
-Makefile.in
diff --git a/help/devel/calendar/Makefile.am b/help/devel/calendar/Makefile.am
deleted file mode 100644
index 2220e1d59b..0000000000
--- a/help/devel/calendar/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-SUBDIRS = cal-client cal-util
-
-EXTRA_DIST =				\
-	architecture.sgml		\
-	evolution-calendar.sgml		\
-	reference.sgml
diff --git a/help/devel/calendar/architecture.sgml b/help/devel/calendar/architecture.sgml
deleted file mode 100644
index 08e4c82b35..0000000000
--- a/help/devel/calendar/architecture.sgml
+++ /dev/null
@@ -1,94 +0,0 @@
-  
-    Architecture of the Calendar
-
-    
-      This chapter gives an overview of the Evolution Calendar
-      architecture.  It describes the model/view split of the calendar
-      into a personal calendar server, or PCS, and the GUI clients
-      that appear inside the Evolution shell.
-    
-
-    
-
-    
-      Model/View Separation
-
-      
-	Like other base components in Evolution, the calendar
-	separates the data model from the views or clients.  This is
-	done so that multiple clients can access the same calendar
-	data in an orderly fashion and without clashes.  For example,
-	the user may be running a graphical calendar client.  If he
-	then wants to synchronize his calendar with a handheld device,
-	then the corresponding synchronization program (e.g. a conduit
-	for the gnome-pilot package) will
-	also need to access the calendar storage.  It is important
-	that both the GUI client and the synchronization program keep
-	a consistent view of the calendar at all times, otherwise one
-	of them will be left in an inconsistent state if the
-	calendar's data changes unexpectedly.
-      
-
-      
-	Evolution puts the calendar storage in a daemon called the
-	Wombat and completely separates it from clients who wants to
-	access calendar data.  This part of the Wombat is called the
-	personal calendar server, or &PCS;.  Clients must contact the
-	&PCS; and ask it to open an existing calendar or create a new
-	one.  When a calendar component object (e.g. an appointment or
-	to-do item) changes in the &PCS; it will notify all the
-	clients that are using the component's parent calendar.
-      
-    
-
-    
-
-    
-      Personal Calendar Server
-
-      
-	The personal calendar server, or &PCS;, provides centralized
-	management and storage of a user's personal calendar.
-	Multiple clients can connect to the &PCS; simultaneously to
-	query and modify the user's calendar in a synchronized
-	fashion.  The main features of the &PCS; are as follows:
-      
-
-      
-	Storage
-
-	
-	  The &PCS; is responsible for loading and saving calendars.
-	  Centralizing the loading and saving functionality allows
-	  multiple clients to use the same calendar at the same time
-	  without having to worry about each other.
-	
-      
-
-      
-	Basic Queries
-
-	
-	  The &PCS; provides functions to do basic queries on a
-	  calendar, for example, a client can ask the server for a
-	  list of all the appointments in the calendar, or for all the
-	  data for a specific appointment.
-	
-      
-
-      
-	Recurrence and Alarm Queries
-
-	
-	  
-	
-      
-    
-  
-
-
diff --git a/help/devel/calendar/cal-client/.cvsignore b/help/devel/calendar/cal-client/.cvsignore
deleted file mode 100644
index 0842a93f7a..0000000000
--- a/help/devel/calendar/cal-client/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-sgml
-Makefile
-Makefile.in
diff --git a/help/devel/calendar/cal-client/Makefile.am b/help/devel/calendar/cal-client/Makefile.am
deleted file mode 100644
index 44d43639a8..0000000000
--- a/help/devel/calendar/cal-client/Makefile.am
+++ /dev/null
@@ -1,76 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# The name of the module.
-DOC_MODULE=evolution-cal-client
-
-# The top-level SGML file.
-DOC_MAIN_SGML_FILE=evolution-cal-client.sgml
-
-# The directory containing the source code (if it contains documentation).
-DOC_SOURCE_DIR=$(EVOLUTION_DIR)/calendar/cal-client
-
-CFLAGS ="						\
-	-I$(top_srcdir)/calendar			\
-	-I$(top_srcdir)					\
-	-I$(top_builddir)				\
-	-I$(top_builddir)/libical/src/libical		\
-	-I$(top_srcdir)/libical/src/libical		\
-	$(BONOBO_VFS_GNOME_CFLAGS)			\
-	"
-
-LDFLAGS="								\
-	$(BONOBO_VFS_GNOME_LIBS)					\
-	$(top_builddir)/calendar/cal-client/.libs/libcal-client.a	\
-	$(top_builddir)/calendar/cal-util/.libs/libcal-util.a		\
-	$(top_builddir)/libical/src/libical/libical.a			\
-	$(top_builddir)/libversit/.libs/libversit.al			\
-	"
-
-HTML_DIR=$(datadir)/gnome/html
-
-TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
-
-tmpl_sources =					\
-	tmpl/cal-client.sgml			\
-	tmpl/evolution-cal-client-unused.sgml
-
-evolution_cal_client_docdir = $(HTML_DIR)
-evolution_cal_client_doc_DATA =			\
-	evolution-cal-client.hierarchy		\
-	evolution-cal-client.types		\
-	evolution-cal-client-decl.txt		\
-	evolution-cal-client-sections.txt
-
-EXTRA_DIST = 					\
-	$(evolution_cal_client_doc_DATA)
-
-sgml/evolution-cal-client-doc.bottom: $(tmpl_sources)
-	$(MAKE) sgml
-
-scan:
-	-(cd $(srcdir) \
-	&& env CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) \
-		 gtkdoc-scanobj --module=$(DOC_MODULE) \
-	&& gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="cal-listener.h evolution-calendar.h" )
-
-templates: scan
-	cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE)
-
-sgml:
-	cd $(srcdir) \
-	&& gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR)
-
-clean-local:
-	rm -f *~ *.bak *.signals *-unused.txt
-
-maintainer-clean-local: clean
-	cd $(srcdir) && rm -rf sgml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
-
-dist-hook:
-	mkdir $(distdir)/sgml
-	mkdir $(distdir)/tmpl
-	-cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
-	-cp $(srcdir)/sgml/*.sgml $(distdir)/sgml
-	-cp $(srcdir)/sgml/*.bottom $(srcdir)/sgml/*.top $(distdir)/sgml
-
-.PHONY : sgml templates scan
diff --git a/help/devel/calendar/cal-client/evolution-cal-client-decl.txt b/help/devel/calendar/cal-client/evolution-cal-client-decl.txt
deleted file mode 100644
index 0574d70678..0000000000
--- a/help/devel/calendar/cal-client/evolution-cal-client-decl.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-
-CAL_CLIENT_TYPE
-#define CAL_CLIENT_TYPE            (cal_client_get_type ())
-
-
-CAL_CLIENT
-#define CAL_CLIENT(obj)            (GTK_CHECK_CAST ((obj), CAL_CLIENT_TYPE, CalClient))
-
-
-CAL_CLIENT_CLASS
-#define CAL_CLIENT_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), CAL_CLIENT_TYPE, CalClientClass))
-
-
-IS_CAL_CLIENT
-#define IS_CAL_CLIENT(obj)         (GTK_CHECK_TYPE ((obj), CAL_CLIENT_TYPE))
-
-
-IS_CAL_CLIENT_CLASS
-#define IS_CAL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_CLIENT_TYPE))
-
-
-CalClient
-
-
-CalClientClass
-
-
-CalClientLoadStatus
-typedef enum {
-	CAL_CLIENT_LOAD_SUCCESS,
-	CAL_CLIENT_LOAD_ERROR,
-	CAL_CLIENT_LOAD_IN_USE,
-	CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED
-} CalClientLoadStatus;
-
-
-CalClientGetStatus
-typedef enum {
-	CAL_CLIENT_GET_SUCCESS,
-	CAL_CLIENT_GET_NOT_FOUND,
-	CAL_CLIENT_GET_SYNTAX_ERROR
-} CalClientGetStatus;
-
-
-CalClient
-struct CalClient {
-	GtkObject object;
-
-	/* Private data */
-	gpointer priv;
-};
-
-
-cal_client_get_type
-GtkType  
-void
-
-
-cal_client_construct
-CalClient  *
-CalClient *client
-
-
-cal_client_new
-CalClient  *
-void
-
-
-cal_client_load_calendar
-gboolean  
-CalClient *client, const char *str_uri
-
-
-cal_client_create_calendar
-gboolean  
-CalClient *client, const char *str_uri
-
-
-cal_client_get_n_objects
-int  
-CalClient *client, CalObjType type
-
-
-cal_client_get_object
-CalClientGetStatus  
-CalClient *client,const char *uid,CalComponent **comp
-
-
-cal_client_get_uid_by_pilot_id
-CalClientGetStatus  
-CalClient *client,unsigned long pilot_id,char **uid
-
-
-cal_client_update_pilot_id
-void  
-CalClient *client, char *uid,unsigned long pilot_id,unsigned long pilot_status
-
-
-cal_client_get_uids
-GList  *
-CalClient *client, CalObjType type
-
-
-cal_client_get_objects_in_range
-GList  *
-CalClient *client, CalObjType type,time_t start, time_t end
-
-
-cal_client_generate_instances
-void  
-CalClient *client, CalObjType type,time_t start, time_t end,CalRecurInstanceFn cb, gpointer cb_data
-
-
-cal_client_get_alarms_in_range
-GList  *
-CalClient *client, time_t start, time_t end
-
-
-cal_client_get_alarms_for_object
-gboolean  
-CalClient *client, const char *uid,time_t start, time_t end,GList **alarms
-
-
-cal_client_update_object
-gboolean  
-CalClient *client, CalComponent *comp
-
-
-cal_client_remove_object
-gboolean  
-CalClient *client, const char *uid
-
diff --git a/help/devel/calendar/cal-client/evolution-cal-client-sections.txt b/help/devel/calendar/cal-client/evolution-cal-client-sections.txt
deleted file mode 100644
index c37b223247..0000000000
--- a/help/devel/calendar/cal-client/evolution-cal-client-sections.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-cal-client/cal-client.h
-
-
-cal-client -CAL_CLIENT -CalClient - -CalClientLoadStatus -CalClientGetStatus -cal_client_new -cal_client_load_calendar -cal_client_create_calendar -cal_client_get_n_objects -cal_client_get_object -cal_client_get_objects_in_range -cal_client_generate_instances -cal_client_get_uid_by_pilot_id -cal_client_update_pilot_id -cal_client_get_uids -cal_client_get_alarms_in_range -cal_client_get_alarms_for_object -cal_client_update_object -cal_client_remove_object - - - -CAL_CLIENT_TYPE -IS_CAL_CLIENT -CAL_CLIENT_CLASS -IS_CAL_CLIENT_CLASS -cal_client_get_type -cal_client_construct - - -CalClient - -
diff --git a/help/devel/calendar/cal-client/evolution-cal-client.args b/help/devel/calendar/cal-client/evolution-cal-client.args deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/help/devel/calendar/cal-client/evolution-cal-client.hierarchy b/help/devel/calendar/cal-client/evolution-cal-client.hierarchy deleted file mode 100644 index 88efa3e673..0000000000 --- a/help/devel/calendar/cal-client/evolution-cal-client.hierarchy +++ /dev/null @@ -1,2 +0,0 @@ -GtkObject - CalClient diff --git a/help/devel/calendar/cal-client/evolution-cal-client.signals b/help/devel/calendar/cal-client/evolution-cal-client.signals deleted file mode 100644 index 97e360b6a2..0000000000 --- a/help/devel/calendar/cal-client/evolution-cal-client.signals +++ /dev/null @@ -1,21 +0,0 @@ - -CalClient::cal-loaded -void -CalClient *calclient -GtkEnum arg1 - - - -CalClient::obj-updated -void -CalClient *calclient -GtkString arg1 - - - -CalClient::obj-removed -void -CalClient *calclient -GtkString arg1 - - diff --git a/help/devel/calendar/cal-client/evolution-cal-client.types b/help/devel/calendar/cal-client/evolution-cal-client.types deleted file mode 100644 index 84d65a6637..0000000000 --- a/help/devel/calendar/cal-client/evolution-cal-client.types +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -cal_client_get_type diff --git a/help/devel/calendar/cal-client/tmpl/cal-client.sgml b/help/devel/calendar/cal-client/tmpl/cal-client.sgml deleted file mode 100644 index a146709b8a..0000000000 --- a/help/devel/calendar/cal-client/tmpl/cal-client.sgml +++ /dev/null @@ -1,291 +0,0 @@ - -CalClient - - -GTK+ object for communication with personal calendar server. - - - - The #CalClient object provides a nice GTK+ wrapper for the CORBA - interfaces that are used to communicate between calendar clients - and the personal calendar server in the user's Wombat daemon. - - - - After a #CalClient object is created with cal_client_new(), it - should be asked to send a request to the personal calendar server - to load or create a calendar based on its URI. The server will - asynchronously notify the client about completion of the request, - and will return an appropriate result code; this should be noted - by the client with the cal_loaded signal. - - - - When a client asks the server to update or delete a calendar - component from the storage, the server will do so and then notify - all the clients about the update or removal. This is the core of - the model/view split between calendar clients and the storage in - the personal calendar server. Clients should watch the obj_updated and obj_removed signals on the - CalClient objects they create so that they can be notified about - changes in the storage. - - - - - - - - - - Casts a #GtkObject to a #CalClient. - - -@obj: A GTK+ object. - - - - - These values describe the status of a calendar load or create - request. After asking a calendar factory to load or create a - calendar, the provided listener will get notification about the - result in asynchronous fashion. Such notification is represented - by one of these enumeration values. For values other than - #CAL_CLIENT_LOAD_SUCCESS, the #CalClient object will not accept - any other operations on the calendar and it should just be - destroyed. - - -@CAL_CLIENT_LOAD_SUCCESS: Indicates a successful load or create - operation; the corresponding calendar is ready for use. -@CAL_CLIENT_LOAD_ERROR: Indicates an error while loading or creating - the calendar. -@CAL_CLIENT_LOAD_IN_USE: Indicates that a create request failed - because the specified calendar was already being used by another - client. -@CAL_CLIENT_LOAD_METHOD_NOT_SUPPORTED: Indicates an error due to - trying to load a calendar for which a backend type is not present. - - - - These values describe the result of the cal_client_get_object() - function. - - -@CAL_CLIENT_GET_SUCCESS: Indicates a successful get operation. -@CAL_CLIENT_GET_NOT_FOUND: Indicates that the requested object was - not found. -@CAL_CLIENT_GET_SYNTAX_ERROR: Indicates a syntax error when parsing - the requested object. This could indicate a bug in the calendar - client libraries or in the Wombat server. - - - - - - -@Returns: - - - - - - - -@client: -@str_uri: -@Returns: - - - - - - - -@client: -@str_uri: -@Returns: - - - - - - - -@client: -@type: -@Returns: - - - - - - - -@client: -@uid: -@comp: -@Returns: - -@ico: - - - - - - - -@client: -@type: -@start: -@end: -@Returns: - - - - - - - -@client: -@type: -@start: -@end: -@cb: -@cb_data: - - - - - - - -@client: -@pilot_id: -@uid: -@Returns: - - - - - - - -@client: -@uid: -@pilot_id: -@pilot_status: - - - - - - - -@client: -@type: -@Returns: - - - - - - - -@client: -@start: -@end: -@Returns: - - - - - - - -@client: -@uid: -@start: -@end: -@alarms: -@Returns: - - - - - - - -@client: -@comp: -@Returns: - -@ico: - - - - - - - -@client: -@uid: -@Returns: - - - - - This signal is emitted some time after the calendar clients sends - a load or create request to the personal calendar server. The - server will notify the client asynchronously of the completion of - the request. The @status parameter indicates the status of the - request. - - -@calclient: the object which received the signal. -@arg1: - -@client: Calendar client which received the notification. -@status: Status of the request. See the description of - #CalClientLoadStatus for more details. - - - - This signal is emitted when the calendar clients receives - notification of a calendar component's data being changed in the - personal calendar server. Graphical clients may want to get the - new version of the object and update their display, for example. - - -@calclient: the object which received the signal. -@arg1: - -@client: Calendar client which received the notification. -@uid: Unique identifier of the calendar component that changed in the - personal calendar server's storage. - - - - This signal is emitted when the calendar client receives - notification for a calendar component being removed from the - storage in the personal calendar server. Graphical clients may - want to delete the corresponding object from their display, for - example. - - -@calclient: the object which received the signal. -@arg1: - -@client: Calendar client which received the notification. -@uid: Unique identifier of the calendar component that was removed - from the personal calendar server's storage. - - - diff --git a/help/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml b/help/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml deleted file mode 100644 index 5576dbd57f..0000000000 --- a/help/devel/calendar/cal-client/tmpl/evolution-cal-client-unused.sgml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - -@client: -@start: -@end: -@Returns: - diff --git a/help/devel/calendar/cal-util/.cvsignore b/help/devel/calendar/cal-util/.cvsignore deleted file mode 100644 index 0842a93f7a..0000000000 --- a/help/devel/calendar/cal-util/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -sgml -Makefile -Makefile.in diff --git a/help/devel/calendar/cal-util/Makefile.am b/help/devel/calendar/cal-util/Makefile.am deleted file mode 100644 index 8861aa03cb..0000000000 --- a/help/devel/calendar/cal-util/Makefile.am +++ /dev/null @@ -1,75 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# The name of the module. -DOC_MODULE=evolution-cal-util - -# The top-level SGML file. -DOC_MAIN_SGML_FILE=evolution-cal-util.sgml - -# The directory containing the source code (if it contains documentation). -DOC_SOURCE_DIR=$(EVOLUTION_DIR)/calendar/cal-util - -CFLAGS =" \ - -I$(top_srcdir)/calendar \ - -I$(top_srcdir) \ - -I$(top_builddir) \ - -I$(top_builddir)/libical/src/libical \ - -I$(top_srcdir)/libical/src/libical \ - $(BONOBO_VFS_GNOME_CFLAGS) \ - " - -LDFLAGS=" \ - $(BONOBO_VFS_GNOME_LIBS) \ - $(top_builddir)/calendar/cal-util/.libs/libcal-util.a \ - $(top_builddir)/libical/src/libical/libical.a \ - $(top_builddir)/libversit/.libs/libversit.al \ - " - -HTML_DIR=$(datadir)/gnome/html - -TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) - -tmpl_sources = \ - tmpl/cal-util.sgml \ - tmpl/evolution-cal-util-unused.sgml - -evolution_cal_util_docdir = $(HTML_DIR) -evolution_cal_util_doc_DATA = \ - evolution-cal-util.hierarchy \ - evolution-cal-util.types \ - evolution-cal-util-decl.txt \ - evolution-cal-util-sections.txt - -EXTRA_DIST = \ - $(evolution_cal_util_doc_DATA) - -sgml/evolution-cal-util-doc.bottom: $(tmpl_sources) - $(MAKE) sgml - -scan: - -(cd $(srcdir) \ - && env CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) \ - gtkdoc-scanobj --module=$(DOC_MODULE) \ - && gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="calobj.h icalendar-save.h icalendar.h" ) - -templates: scan - cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) - -sgml: - cd $(srcdir) \ - && gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) - -clean-local: - rm -f *~ *.bak *.signals *-unused.txt - -maintainer-clean-local: clean - cd $(srcdir) && rm -rf sgml $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt - -dist-hook: - mkdir $(distdir)/sgml - mkdir $(distdir)/tmpl - -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl - -cp $(srcdir)/sgml/*.sgml $(distdir)/sgml - -cp $(srcdir)/sgml/*.bottom $(srcdir)/sgml/*.top $(distdir)/sgml - -.PHONY : sgml templates scan diff --git a/help/devel/calendar/cal-util/evolution-cal-util-decl.txt b/help/devel/calendar/cal-util/evolution-cal-util-decl.txt deleted file mode 100644 index eb108b868f..0000000000 --- a/help/devel/calendar/cal-util/evolution-cal-util-decl.txt +++ /dev/null @@ -1,852 +0,0 @@ - -CAL_COMPONENT_TYPE -#define CAL_COMPONENT_TYPE (cal_component_get_type ()) - - -CAL_COMPONENT -#define CAL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), CAL_COMPONENT_TYPE, CalComponent)) - - -CAL_COMPONENT_CLASS -#define CAL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), CAL_COMPONENT_TYPE, \ - CalComponentClass)) - - -IS_CAL_COMPONENT -#define IS_CAL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), CAL_COMPONENT_TYPE)) - - -IS_CAL_COMPONENT_CLASS -#define IS_CAL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), CAL_COMPONENT_TYPE)) - - -CalComponentVType -typedef enum { - CAL_COMPONENT_NO_TYPE, - CAL_COMPONENT_EVENT, - CAL_COMPONENT_TODO, - CAL_COMPONENT_JOURNAL, - CAL_COMPONENT_FREEBUSY, - CAL_COMPONENT_TIMEZONE -} CalComponentVType; - - -CalComponentField -typedef enum { - CAL_COMPONENT_FIELD_CATEGORIES, /* concatenation of the categories list */ - CAL_COMPONENT_FIELD_CLASSIFICATION, - CAL_COMPONENT_FIELD_COMPLETED, - CAL_COMPONENT_FIELD_DTEND, - CAL_COMPONENT_FIELD_DTSTART, - CAL_COMPONENT_FIELD_DUE, - CAL_COMPONENT_FIELD_GEO, - CAL_COMPONENT_FIELD_PERCENT, - CAL_COMPONENT_FIELD_PRIORITY, - CAL_COMPONENT_FIELD_SUMMARY, - CAL_COMPONENT_FIELD_TRANSPARENCY, - CAL_COMPONENT_FIELD_URL, - CAL_COMPONENT_FIELD_HAS_ALARMS, /* not a real field */ - CAL_COMPONENT_FIELD_ICON, /* not a real field */ - CAL_COMPONENT_FIELD_COMPLETE, /* not a real field */ - CAL_COMPONENT_FIELD_RECURRING, /* not a real field */ - CAL_COMPONENT_FIELD_OVERDUE, /* not a real field */ - CAL_COMPONENT_FIELD_COLOR, /* not a real field */ - CAL_COMPONENT_FIELD_NUM_FIELDS -} CalComponentField; - - -CalComponentClassification -typedef enum { - CAL_COMPONENT_CLASS_NONE, - CAL_COMPONENT_CLASS_PUBLIC, - CAL_COMPONENT_CLASS_PRIVATE, - CAL_COMPONENT_CLASS_CONFIDENTIAL, - CAL_COMPONENT_CLASS_UNKNOWN -} CalComponentClassification; - - -CalComponentDateTime -typedef struct { - /* Actual date/time value */ - struct icaltimetype *value; - - /* Timezone ID */ - const char *tzid; -} CalComponentDateTime; - - -CalComponentPeriodType -typedef enum { - CAL_COMPONENT_PERIOD_DATETIME, - CAL_COMPONENT_PERIOD_DURATION -} CalComponentPeriodType; - - -CalComponentPeriod -typedef struct { - CalComponentPeriodType type; - - struct icaltimetype start; - - union { - struct icaltimetype end; - struct icaldurationtype duration; - } u; -} CalComponentPeriod; - - -CalComponentText -typedef struct { - /* Description string */ - const char *value; - - /* Alternate representation URI */ - const char *altrep; -} CalComponentText; - - -CalComponentTransparency -typedef enum { - CAL_COMPONENT_TRANSP_NONE, - CAL_COMPONENT_TRANSP_TRANSPARENT, - CAL_COMPONENT_TRANSP_OPAQUE, - CAL_COMPONENT_TRANSP_UNKNOWN -} CalComponentTransparency; - - -CalComponentAlarm - - -CalComponent - - -CalComponentClass - - -CalComponentPrivate - - -CalComponent -struct CalComponent { - GtkObject object; - - /* Private data */ - CalComponentPrivate *priv; -}; - - -cal_component_get_type -GtkType -void - - -cal_component_gen_uid -char * -void - - -cal_component_new -CalComponent * -void - - -cal_component_clone -CalComponent * -CalComponent *comp - - -cal_component_set_new_vtype -void -CalComponent *comp, CalComponentVType type - - -cal_component_set_icalcomponent -gboolean -CalComponent *comp, icalcomponent *icalcomp - - -cal_component_get_icalcomponent -icalcomponent * -CalComponent *comp - - -cal_component_get_vtype -CalComponentVType -CalComponent *comp - - -cal_component_get_as_string -char * -CalComponent *comp - - -cal_component_commit_sequence -void -CalComponent *comp - - -cal_component_get_uid -void -CalComponent *comp, const char **uid - - -cal_component_set_uid -void -CalComponent *comp, const char *uid - - -cal_component_get_categories_list -void -CalComponent *comp, GSList **categ_list - - -cal_component_set_categories_list -void -CalComponent *comp, GSList *categ_list - - -cal_component_get_classification -void -CalComponent *comp, CalComponentClassification *classif - - -cal_component_set_classification -void -CalComponent *comp, CalComponentClassification classif - - -cal_component_get_comment_list -void -CalComponent *comp, GSList **text_list - - -cal_component_set_comment_list -void -CalComponent *comp, GSList *text_list - - -cal_component_get_completed -void -CalComponent *comp, struct icaltimetype **t - - -cal_component_set_completed -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_created -void -CalComponent *comp, struct icaltimetype **t - - -cal_component_set_created -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_description_list -void -CalComponent *comp, GSList **text_list - - -cal_component_set_description_list -void -CalComponent *comp, GSList *text_list - - -cal_component_get_dtend -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_set_dtend -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_get_dtstamp -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_set_dtstamp -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_dtstart -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_set_dtstart -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_get_due -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_set_due -void -CalComponent *comp, CalComponentDateTime *dt - - -cal_component_get_exdate_list -void -CalComponent *comp, GSList **exdate_list - - -cal_component_set_exdate_list -void -CalComponent *comp, GSList *exdate_list - - -cal_component_get_exrule_list -void -CalComponent *comp, GSList **recur_list - - -cal_component_set_exrule_list -void -CalComponent *comp, GSList *recur_list - - -cal_component_get_geo -void -CalComponent *comp, struct icalgeotype **geo - - -cal_component_set_geo -void -CalComponent *comp, struct icalgeotype *geo - - -cal_component_get_last_modified -void -CalComponent *comp, struct icaltimetype **t - - -cal_component_set_last_modified -void -CalComponent *comp, struct icaltimetype *t - - -cal_component_get_percent -void -CalComponent *comp, int **percent - - -cal_component_set_percent -void -CalComponent *comp, int *percent - - -cal_component_get_priority -void -CalComponent *comp, int **priority - - -cal_component_set_priority -void -CalComponent *comp, int *priority - - -cal_component_get_rdate_list -void -CalComponent *comp, GSList **period_list - - -cal_component_set_rdate_list -void -CalComponent *comp, GSList *period_list - - -cal_component_has_rdates -gboolean -CalComponent *comp - - -cal_component_get_rrule_list -void -CalComponent *comp, GSList **recur_list - - -cal_component_set_rrule_list -void -CalComponent *comp, GSList *recur_list - - -cal_component_has_rrules -gboolean -CalComponent *comp - - -cal_component_get_sequence -void -CalComponent *comp, int **sequence - - -cal_component_set_sequence -void -CalComponent *comp, int *sequence - - -cal_component_get_summary -void -CalComponent *comp, CalComponentText *summary - - -cal_component_set_summary -void -CalComponent *comp, CalComponentText *summary - - -cal_component_get_transparency -void -CalComponent *comp, CalComponentTransparency *transp - - -cal_component_set_transparency -void -CalComponent *comp, CalComponentTransparency transp - - -cal_component_get_url -void -CalComponent *comp, const char **url - - -cal_component_set_url -void -CalComponent *comp, const char *url - - -cal_component_get_pilot_id -void -CalComponent *comp, unsigned long *pilot_id - - -cal_component_set_pilot_id -void -CalComponent *comp, unsigned long pilot_id - - -cal_component_get_pilot_status -void -CalComponent *comp, unsigned long *pilot_status - - -cal_component_set_pilot_status -void -CalComponent *comp, unsigned long pilot_status - - -cal_component_free_categories_list -void -GSList *categ_list - - -cal_component_free_datetime -void -CalComponentDateTime *dt - - -cal_component_free_exdate_list -void -GSList *exdate_list - - -cal_component_free_geo -void -struct icalgeotype *geo - - -cal_component_free_icaltimetype -void -struct icaltimetype *t - - -cal_component_free_percent -void -int *percent - - -cal_component_free_priority -void -int *priority - - -cal_component_free_period_list -void -GSList *period_list - - -cal_component_free_recur_list -void -GSList *recur_list - - -cal_component_free_sequence -void -int *sequence - - -cal_component_free_text_list -void -GSList *text_list - - -CalComponentAlarmAction -typedef enum { - CAL_COMPONENT_ALARM_NONE, - CAL_COMPONENT_ALARM_AUDIO, - CAL_COMPONENT_ALARM_DISPLAY, - CAL_COMPONENT_ALARM_EMAIL, - CAL_COMPONENT_ALARM_PROCEDURE, - CAL_COMPONENT_ALARM_UNKNOWN -} CalComponentAlarmAction; - - -CalComponentAlarmTriggerType -typedef enum { - CAL_COMPONENT_ALARM_TRIGGER_RELATIVE, - CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE -} CalComponentAlarmTriggerType; - - -CalComponentAlarmTriggerRelated -typedef enum { - CAL_COMPONENT_ALARM_TRIGGER_RELATED_START, - CAL_COMPONENT_ALARM_TRIGGER_RELATED_END -} CalComponentAlarmTriggerRelated; - - -CalComponentAlarmTrigger -typedef struct { - CalComponentAlarmTriggerType type; - - union { - struct { - struct icaldurationtype duration; - CalComponentAlarmTriggerRelated related; - } relative; - - struct icaltimetype absolute; - } u; -} CalComponentAlarmTrigger; - - -cal_component_get_first_alarm -CalComponentAlarm * -CalComponent *comp - - -cal_component_get_next_alarm -CalComponentAlarm * -CalComponent *comp - - -cal_component_alarm_free -void -CalComponentAlarm *alarm - - -cal_component_alarm_get_action -void -CalComponentAlarm *alarm, CalComponentAlarmAction *action - - -cal_component_alarm_set_action -void -CalComponentAlarm *alarm, CalComponentAlarmAction action - - -cal_component_alarm_get_trigger -void -CalComponentAlarm *alarm, CalComponentAlarmTrigger **trigger - - -cal_component_alarm_set_trigger -void -CalComponentAlarm *alarm, CalComponentAlarmTrigger *trigger - - -cal_component_alarm_free_trigger -void -CalComponentAlarmTrigger *trigger - - -CalRecurType -typedef enum { - CAL_RECUR_YEARLY, - CAL_RECUR_MONTHLY, - CAL_RECUR_WEEKLY, - CAL_RECUR_DAILY, - CAL_RECUR_HOURLY, - CAL_RECUR_MINUTELY, - CAL_RECUR_SECONDLY -} CalRecurType; - - -CalRecurrence -typedef struct { - CalRecurType type; - - int interval; - - /* Specifies the end of the recurrence. No occurrences are generated - after this date. If it is 0, the event recurs forever. */ - time_t enddate; - - /* WKST property - the week start day: 0 = Monday to 6 = Sunday. */ - gint week_start_day; - - - /* NOTE: I've used GList's here, but it doesn't matter if we use - other data structures like arrays. The code should be easy to - change. So long as it is easy to see if the modifier is set. */ - - /* For BYMONTH modifier. A list of GINT_TO_POINTERs, 0-11. */ - GList *bymonth; - - /* For BYWEEKNO modifier. A list of GINT_TO_POINTERs, [+-]1-53. */ - GList *byweekno; - - /* For BYYEARDAY modifier. A list of GINT_TO_POINTERs, [+-]1-366. */ - GList *byyearday; - - /* For BYMONTHDAY modifier. A list of GINT_TO_POINTERs, [+-]1-31. */ - GList *bymonthday; - - /* For BYDAY modifier. A list of GINT_TO_POINTERs, in pairs. - The first of each pair is the weekday, 0 = Monday to 6 = Sunday. - The second of each pair is the week number [+-]0-53. */ - GList *byday; - - /* For BYHOUR modifier. A list of GINT_TO_POINTERs, 0-23. */ - GList *byhour; - - /* For BYMINUTE modifier. A list of GINT_TO_POINTERs, 0-59. */ - GList *byminute; - - /* For BYSECOND modifier. A list of GINT_TO_POINTERs, 0-60. */ - GList *bysecond; - - /* For BYSETPOS modifier. A list of GINT_TO_POINTERs, +ve or -ve. */ - GList *bysetpos; -} CalRecurrence; - - -CalObjTime - - -CalObjTime -struct CalObjTime { - guint16 year; - guint8 month; /* 0 - 11 */ - guint8 day; /* 1 - 31 */ - guint8 hour; /* 0 - 23 */ - guint8 minute; /* 0 - 59 */ - guint8 second; /* 0 - 59 (maybe 60 for leap second) */ -}; - - -CalRecurInstanceFn -gboolean -CalComponent *comp, - time_t instance_start, - time_t instace_end, - gpointer data - - -cal_recur_generate_instances -void -CalComponent *comp,time_t start,time_t end,CalRecurInstanceFn cb,gpointer cb_data - - -cal_recur_from_icalrecurrencetype -CalRecurrence * -struct icalrecurrencetype *ir - - -cal_recur_free -void -CalRecurrence *r - - -CalObjInstance -typedef struct { - char *uid; /* UID of the object */ - time_t start; /* Start time of instance */ - time_t end; /* End time of instance */ -} CalObjInstance; - - -cal_obj_instance_list_free -void -GList *list - - -CalAlarmInstance -typedef struct { - char *uid; /* UID of object */ -#if 0 - enum AlarmType type; /* Type of alarm */ -#endif - time_t trigger; /* Alarm trigger time */ - time_t occur; /* Occurrence time */ -} CalAlarmInstance; - - -cal_alarm_instance_list_free -void -GList *list - - -CalObjType -typedef enum { - CALOBJ_TYPE_EVENT = 1 << 0, - CALOBJ_TYPE_TODO = 1 << 1, - CALOBJ_TYPE_JOURNAL = 1 << 2, - CALOBJ_TYPE_ANY = 0x07 -} CalObjType; - - -cal_obj_uid_list_free -void -GList *list - - -time_from_icaltimetype -time_t -struct icaltimetype itt - - -time_from_isodate -time_t -char *str - - -time_from_start_duration -time_t -time_t start, char *duration - - -isodate_from_time_t -char * -time_t t - - -get_time_t_hour -int -time_t t - - -isodiff_to_secs -int -char *str - - -isodiff_from_secs -char * -int secs - - -time_add_minutes -time_t -time_t time, int minutes - - -time_add_day -time_t -time_t time, int days - - -time_add_week -time_t -time_t time, int weeks - - -time_add_month -time_t -time_t time, int months - - -time_add_year -time_t -time_t time, int years - - -format_simple_hour -char * -int hour, int use_am_pm - - -time_days_in_month -int -int year, int month - - -time_from_day -time_t -int year, int month, int day - - -time_day_hour -time_t -time_t t, int hour - - -time_year_begin -time_t -time_t t - - -time_year_end -time_t -time_t t - - -time_month_begin -time_t -time_t t - - -time_month_end -time_t -time_t t - - -time_week_begin -time_t -time_t t - - -time_week_end -time_t -time_t t - - -time_day_begin -time_t -time_t t - - -time_day_end -time_t -time_t t - - -parse_date -time_t -char *str - - -print_time_t -void -time_t t - diff --git a/help/devel/calendar/cal-util/evolution-cal-util-sections.txt b/help/devel/calendar/cal-util/evolution-cal-util-sections.txt deleted file mode 100644 index cd928fc7e3..0000000000 --- a/help/devel/calendar/cal-util/evolution-cal-util-sections.txt +++ /dev/null @@ -1,166 +0,0 @@ -
-cal-component -CAL_COMPONENT -CalComponent - -CalComponentVType -CalComponentField -CalComponentClassification -CalComponentDateTime -CalComponentPeriodType -CalComponentPeriod -CalComponentText -CalComponentTransparency -CalComponentAlarm -CalComponentPrivate - -cal_component_gen_uid -cal_component_new -cal_component_clone -cal_component_set_new_vtype -cal_component_set_icalcomponent -cal_component_get_icalcomponent -cal_component_get_vtype -cal_component_get_as_string -cal_component_commit_sequence -cal_component_get_uid -cal_component_set_uid -cal_component_get_categories_list -cal_component_set_categories_list -cal_component_get_classification -cal_component_set_classification -cal_component_get_comment_list -cal_component_set_comment_list -cal_component_get_completed -cal_component_set_completed -cal_component_get_created -cal_component_set_created -cal_component_get_description_list -cal_component_set_description_list -cal_component_get_dtend -cal_component_set_dtend -cal_component_get_dtstamp -cal_component_set_dtstamp -cal_component_get_dtstart -cal_component_set_dtstart -cal_component_get_due -cal_component_set_due -cal_component_get_exdate_list -cal_component_set_exdate_list -cal_component_get_exrule_list -cal_component_set_exrule_list -cal_component_get_geo -cal_component_set_geo -cal_component_get_last_modified -cal_component_set_last_modified -cal_component_get_percent -cal_component_set_percent -cal_component_get_priority -cal_component_set_priority -cal_component_get_rdate_list -cal_component_set_rdate_list -cal_component_has_rdates -cal_component_get_rrule_list -cal_component_set_rrule_list -cal_component_has_rrules -cal_component_get_sequence -cal_component_set_sequence -cal_component_get_summary -cal_component_set_summary -cal_component_get_transparency -cal_component_set_transparency -cal_component_get_url -cal_component_set_url -cal_component_get_pilot_id -cal_component_set_pilot_id -cal_component_get_pilot_status -cal_component_set_pilot_status - -cal_component_free_categories_list -cal_component_free_datetime -cal_component_free_exdate_list -cal_component_free_geo -cal_component_free_icaltimetype -cal_component_free_percent -cal_component_free_priority -cal_component_free_period_list -cal_component_free_recur_list -cal_component_free_sequence -cal_component_free_text_list - -CalComponentAlarmAction -CalComponentAlarmTriggerType -CalComponentAlarmTriggerRelated -CalComponentAlarmTrigger - -cal_component_get_first_alarm -cal_component_get_next_alarm -cal_component_alarm_free -cal_component_alarm_get_action -cal_component_alarm_set_action -cal_component_alarm_get_trigger -cal_component_alarm_set_trigger -cal_component_alarm_free_trigger - - -CAL_COMPONENT_TYPE -CAL_COMPONENT_CLASS -IS_CAL_COMPONENT -IS_CAL_COMPONENT_CLASS -cal_component_get_type - - -CalComponent - -
- -
-cal-recur -CalRecurType -CalRecurrence -CalObjTime -CalRecurInstanceFn -cal_recur_generate_instances -cal_recur_from_icalrecurrencetype -cal_recur_free -
- -
-cal-util -CalObjInstance -cal_obj_instance_list_free -CalAlarmInstance -cal_alarm_instance_list_free -CalObjType -cal_obj_uid_list_free -
- -
-timeutil -time_from_icaltimetype -time_from_isodate -time_from_start_duration -isodate_from_time_t -get_time_t_hour -isodiff_to_secs -isodiff_from_secs -time_add_minutes -time_add_day -time_add_week -time_add_month -time_add_year -format_simple_hour -time_days_in_month -time_from_day -time_day_hour -time_year_begin -time_year_end -time_month_begin -time_month_end -time_week_begin -time_week_end -time_day_begin -time_day_end -parse_date -print_time_t -
diff --git a/help/devel/calendar/cal-util/evolution-cal-util.args b/help/devel/calendar/cal-util/evolution-cal-util.args deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/help/devel/calendar/cal-util/evolution-cal-util.hierarchy b/help/devel/calendar/cal-util/evolution-cal-util.hierarchy deleted file mode 100644 index cc235653f2..0000000000 --- a/help/devel/calendar/cal-util/evolution-cal-util.hierarchy +++ /dev/null @@ -1,2 +0,0 @@ -GtkObject - CalComponent diff --git a/help/devel/calendar/cal-util/evolution-cal-util.signals b/help/devel/calendar/cal-util/evolution-cal-util.signals deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/help/devel/calendar/cal-util/evolution-cal-util.types b/help/devel/calendar/cal-util/evolution-cal-util.types deleted file mode 100644 index 52b2d9bf90..0000000000 --- a/help/devel/calendar/cal-util/evolution-cal-util.types +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include - -cal_component_get_type diff --git a/help/devel/calendar/cal-util/tmpl/cal-component.sgml b/help/devel/calendar/cal-util/tmpl/cal-component.sgml deleted file mode 100644 index 2f800e583f..0000000000 --- a/help/devel/calendar/cal-util/tmpl/cal-component.sgml +++ /dev/null @@ -1,934 +0,0 @@ - -CalComponent - - -RFC 2445 iCalendar component object. - - - - The #CalComponent object provides a wrapper over the &libical; - functions for manipulating calendar components. #CalComponent - presents a GTK+-like interface to calendar components according to - RFC 2445. - - - - While &libical; supports almost all of the features of the - iCalendar RFCs, applications are normally not interested in all - the mindless gunk that is there. Still, applications should do - their best not to drop extension fields from calendar components - or any other extra information they do not support (including - standard fields they are not interested in). The #CalComponent - object provides a wrapper over - icalcomponent structures from &libical; - so that no information in them will be lost even if the - application is not designed to handle it. Also, #CalComponent - provides a higher-level API to many of the &libical; operations so - as to make it less painful to deal with iCalendar components. - - - - A #CalComponent object starts out empty. It must be initialized - from an existing icalcomponent structure - by using the cal_component_set_icalcomponent() function, or from a - completely new data by specifying the desired component type to - the cal_component_set_new_vtype() function. - - - - #CalComponent will create an internal map of the properties in the - icalcomponent structure and then allow - random access to them via the #CalComponent API functions; - normally the &libical; API would have to be used by creating many - iterators and other unpleasant constructs. #CalComponent keeps - handles to the properties it scanned from the - icalcomponent and will let the parent - application modify them at any time without having to do any - iteration. - - - - Eventually a #CalComponent may be turned into the RFC 2445 string - representation of an iCalendar component by using the - cal_component_get_as_string() function. Applications can then - transfer this interoperable - - - “Interoperable.” Heavens, I love that word. - - - string to other programs that deal with iCalendar. - - - - - - - - - - Casts a #GtkObject to a #CalComponent. - - -@obj: A GTK+ object. - - - - - Calendar component types as defined by RFC 2445. These values can - be used to create a new calendar component by passing them to the - cal_component_set_new_vtype() function. They are also the return - value of the cal_component_get_vtype() function. The only time - the @CAL_COMPONENT_NO_TYPE value is used is when querying the - vtype of an uninitialized #CalComponent. - - -@CAL_COMPONENT_NO_TYPE: Returned from cal_component_get_vtype() to - indicate an uninitialized #CalComponent object. - -@CAL_COMPONENT_EVENT: Indicates a VEVENT component. -@CAL_COMPONENT_TODO: Indicates a VTODO component. -@CAL_COMPONENT_JOURNAL: Indicates a VJOURNAL component. -@CAL_COMPONENT_FREEBUSY: Indicates a VFREEBUSY component. -@CAL_COMPONENT_TIMEZONE: Indicates a VTIMEZOME component. - - - - These values are used as identifiers for #ETable columns. These - are used by the calendar GUI code in Evolution. - - -@CAL_COMPONENT_FIELD_CATEGORIES: Component's list of categories. -@CAL_COMPONENT_FIELD_CLASSIFICATION: Component's classification. -@CAL_COMPONENT_FIELD_COMPLETED: Component's completion date. -@CAL_COMPONENT_FIELD_DTEND: Component's ending date. -@CAL_COMPONENT_FIELD_DTSTART: Component's starting date. -@CAL_COMPONENT_FIELD_DUE: Component's due date. -@CAL_COMPONENT_FIELD_GEO: Component's geographical position. -@CAL_COMPONENT_FIELD_PERCENT: Component's percent completed value. -@CAL_COMPONENT_FIELD_PRIORITY: Component's priority. -@CAL_COMPONENT_FIELD_SUMMARY: Component's summary. -@CAL_COMPONENT_FIELD_TRANSPARENCY: Component's transparency value. -@CAL_COMPONENT_FIELD_URL: Component's URL. -@CAL_COMPONENT_FIELD_HAS_ALARMS: Whether the component has any alarms. -@CAL_COMPONENT_FIELD_ICON: Which icon to use for the component. -@CAL_COMPONENT_FIELD_COMPLETE: Whether the component has been completed. -@CAL_COMPONENT_FIELD_RECURRING: Whether the component has any recurrences. -@CAL_COMPONENT_FIELD_OVERDUE: Whether the component is overdue. -@CAL_COMPONENT_FIELD_COLOR: Which color to use for the component. -@CAL_COMPONENT_FIELD_NUM_FIELDS: Total number of enumerated fields. - - - - Values for the access classification property of a calendar - component. - - -@CAL_COMPONENT_CLASS_NONE: Indicates that no access classification has - been set for the corresponding component. - -@CAL_COMPONENT_CLASS_PUBLIC: Public access. -@CAL_COMPONENT_CLASS_PRIVATE: Private access. -@CAL_COMPONENT_CLASS_CONFIDENTIAL: Confidential access. - -@CAL_COMPONENT_CLASS_UNKNOWN: Unknown access classification value, - used when &libical; returns something #CalComponent does not know - about. - - - - This structure defines a date and time value. - - - - - - Defines how a period of time is specified. - - -@CAL_COMPONENT_PERIOD_DATETIME: Indicates that the period is specified - by starting and ending date/time values. - -@CAL_COMPONENT_PERIOD_DURATION: Indicates that the period is specified - as a starding date/time and a duration value. - - - - This structure defines a period of time. - - - - - - This structure defines the value of a text property that may have - an alternate representation parameter. - - - - - - - - -@CAL_COMPONENT_TRANSP_NONE: -@CAL_COMPONENT_TRANSP_TRANSPARENT: -@CAL_COMPONENT_TRANSP_OPAQUE: -@CAL_COMPONENT_TRANSP_UNKNOWN: - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@type: - - - - - - - -@comp: -@icalcomp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: - - - - - - - -@comp: -@uid: - - - - - - - -@comp: -@uid: - - - - - - - -@comp: -@categ_list: - - - - - - - -@comp: -@categ_list: - - - - - - - -@comp: -@classif: - - - - - - - -@comp: -@classif: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@text_list: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@dt: - - - - - - - -@comp: -@exdate_list: - - - - - - - -@comp: -@exdate_list: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@geo: - - - - - - - -@comp: -@geo: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@t: - - - - - - - -@comp: -@percent: - - - - - - - -@comp: -@percent: - - - - - - - -@comp: -@priority: - - - - - - - -@comp: -@priority: - - - - - - - -@comp: -@period_list: - - - - - - - -@comp: -@period_list: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@recur_list: - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@sequence: - - - - - - - -@comp: -@sequence: - - - - - - - -@comp: -@summary: - - - - - - - -@comp: -@summary: - - - - - - - -@comp: -@transp: - - - - - - - -@comp: -@transp: - - - - - - - -@comp: -@url: - - - - - - - -@comp: -@url: - - - - - - - -@comp: -@pilot_id: - - - - - - - -@comp: -@pilot_id: - - - - - - - -@comp: -@pilot_status: - - - - - - - -@comp: -@pilot_status: - - - - - - - -@categ_list: - - - - - - - -@dt: - - - - - - - -@exdate_list: - - - - - - - -@geo: - - - - - - - -@t: - - - - - - - -@percent: - - - - - - - -@priority: - - - - - - - -@period_list: - - - - - - - -@recur_list: - - - - - - - -@sequence: - - - - - - - -@text_list: - - - - - - - -@CAL_COMPONENT_ALARM_NONE: -@CAL_COMPONENT_ALARM_AUDIO: -@CAL_COMPONENT_ALARM_DISPLAY: -@CAL_COMPONENT_ALARM_EMAIL: -@CAL_COMPONENT_ALARM_PROCEDURE: -@CAL_COMPONENT_ALARM_UNKNOWN: - - - - - - -@CAL_COMPONENT_ALARM_TRIGGER_RELATIVE: -@CAL_COMPONENT_ALARM_TRIGGER_ABSOLUTE: - - - - - - -@CAL_COMPONENT_ALARM_TRIGGER_RELATED_START: -@CAL_COMPONENT_ALARM_TRIGGER_RELATED_END: - - - - - - - - - - - - -@comp: -@Returns: - - - - - - - -@comp: -@Returns: - - - - - - - -@alarm: - - - - - - - -@alarm: -@action: - - - - - - - -@alarm: -@action: - - - - - - - -@alarm: -@trigger: - - - - - - - -@alarm: -@trigger: - - - - - - - -@trigger: - - - diff --git a/help/devel/calendar/cal-util/tmpl/cal-recur.sgml b/help/devel/calendar/cal-util/tmpl/cal-recur.sgml deleted file mode 100644 index 703f8b2b85..0000000000 --- a/help/devel/calendar/cal-util/tmpl/cal-recur.sgml +++ /dev/null @@ -1,88 +0,0 @@ - -cal-recur - - - - - - - - - - - - - - - - - - - -@CAL_RECUR_YEARLY: -@CAL_RECUR_MONTHLY: -@CAL_RECUR_WEEKLY: -@CAL_RECUR_DAILY: -@CAL_RECUR_HOURLY: -@CAL_RECUR_MINUTELY: -@CAL_RECUR_SECONDLY: - - - - - - - - - - - - -@year: -@month: -@day: -@hour: -@minute: -@second: - - - - - - -@comp: -@instance_start: -@instace_end: -@data: -@Returns: - - - - - - - -@comp: -@start: -@end: -@cb: -@cb_data: - - - - - - - -@ir: -@Returns: - - - - - - - -@r: - - diff --git a/help/devel/calendar/cal-util/tmpl/cal-util.sgml b/help/devel/calendar/cal-util/tmpl/cal-util.sgml deleted file mode 100644 index 8d4516c2ec..0000000000 --- a/help/devel/calendar/cal-util/tmpl/cal-util.sgml +++ /dev/null @@ -1,62 +0,0 @@ - -cal-util - - - - - - - - - - - - - - - - - - - - - - - - - -@list: - - - - - - - - - - - - - -@list: - - - - - - - -@CALOBJ_TYPE_EVENT: -@CALOBJ_TYPE_TODO: -@CALOBJ_TYPE_JOURNAL: -@CALOBJ_TYPE_ANY: - - - - - - -@list: - - diff --git a/help/devel/calendar/cal-util/tmpl/evolution-cal-util-unused.sgml b/help/devel/calendar/cal-util/tmpl/evolution-cal-util-unused.sgml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/help/devel/calendar/cal-util/tmpl/timeutil.sgml b/help/devel/calendar/cal-util/tmpl/timeutil.sgml deleted file mode 100644 index 3b62fbba3f..0000000000 --- a/help/devel/calendar/cal-util/tmpl/timeutil.sgml +++ /dev/null @@ -1,260 +0,0 @@ - -timeutil - - - - - - - - - - - - - - - - - - - -@itt: -@Returns: - - - - - - - -@str: -@Returns: - - - - - - - -@start: -@duration: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@str: -@Returns: - - - - - - - -@secs: -@Returns: - - - - - - - -@time: -@minutes: -@Returns: - - - - - - - -@time: -@days: -@Returns: - - - - - - - -@time: -@weeks: -@Returns: - - - - - - - -@time: -@months: -@Returns: - - - - - - - -@time: -@years: -@Returns: - - - - - - - -@hour: -@use_am_pm: -@Returns: - - - - - - - -@year: -@month: -@Returns: - - - - - - - -@year: -@month: -@day: -@Returns: - - - - - - - -@t: -@hour: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@t: -@Returns: - - - - - - - -@str: -@Returns: - - - - - - - -@t: - - diff --git a/help/devel/calendar/evolution-calendar.sgml b/help/devel/calendar/evolution-calendar.sgml deleted file mode 100644 index f3936d9bbc..0000000000 --- a/help/devel/calendar/evolution-calendar.sgml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - Federico - Mena Quintero - -
- federico@helixcode.com -
-
-
-
-
- - Developing Applications for the Evolution Calendar - - - - This part of the Evolution Developer's Guide describes how to - write applications for the Evolution Calendar by using its - public interfaces. The Evolution Calendar exports its - functionality through a number of interfaces, including CORBA, - GTK+ wrappers for Bonobo objects, and other utility libraries. - - - - You should read this part of the Evolution Developer's guide - if you intend to write client applications that use the - functionality of the Evolution Calendar. - - - - This part does not describe the internal interfaces of the - Evolution Calendar; for that you should read the Evolution - Internals Guide. You should only need to read that guide if - you are interested in the way the calendar works internally or - if you want to make changes directly to the Evolution Calendar - code. - - - - &calendar-architecture; -
- - diff --git a/help/devel/calendar/public-reference.sgml b/help/devel/calendar/public-reference.sgml deleted file mode 100644 index f8aa6e848d..0000000000 --- a/help/devel/calendar/public-reference.sgml +++ /dev/null @@ -1,24 +0,0 @@ - - Calendar Public API Reference - - - - This part presents the class and function reference for the - public APIs of the different components of the Evolution - Calendar. - - - - &CalClient; - &CalComponent; - &cal-util; - &cal-recur; - &timeutil; - - - diff --git a/help/devel/calendar/reference.sgml b/help/devel/calendar/reference.sgml deleted file mode 100644 index f8aa6e848d..0000000000 --- a/help/devel/calendar/reference.sgml +++ /dev/null @@ -1,24 +0,0 @@ - - Calendar Public API Reference - - - - This part presents the class and function reference for the - public APIs of the different components of the Evolution - Calendar. - - - - &CalClient; - &CalComponent; - &cal-util; - &cal-recur; - &timeutil; - - - diff --git a/help/devel/evolution-devel-guide.sgml b/help/devel/evolution-devel-guide.sgml deleted file mode 100644 index ca80ec533a..0000000000 --- a/help/devel/evolution-devel-guide.sgml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - -PCS"> -libical"> -]> - - - - Evolution Developer's Guide - - - - Helix Code, Inc. - - - - - 2000 - Helix Code, Inc. - - - - - - &evolution-calendar; - - - - - Evolution Public API Reference - - - - This part presents the class and function reference for the - different libraries and interfaces that Evolution provides. - Classes are described together with their methods; individual - functions are grouped by functional group. - - - - &calendar-reference; - - diff --git a/help/white-papers/calendar/calendar.sgml b/help/white-papers/calendar/calendar.sgml deleted file mode 100644 index 2cb3132e2b..0000000000 --- a/help/white-papers/calendar/calendar.sgml +++ /dev/null @@ -1,209 +0,0 @@ -Evolution"> -CUA"> -PCS"> -Bonobo"> -CORBA"> -GTK+"> -]> - -
- - - &Evolution; Calendaring Framework - - - - Federico - Mena Quintero - -
- federico@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - - - - The &Evolution; groupware suite provides a framework for - developing calendaring applications, as well as a graphical - calendar client and a personal calendar server. This white - paper describes the architecture of the &Evolution; - calendaring framework. - - -
- - - - - Introduction - - - Calendaring is an important part of a groupware suite. A - calendaring framework will allow a user to keep a personal - calendar and have several applications use it. Such - applications could be a graphical calendar client that the user - employs to schedule appointments and keep track of his time, a - Palm Pilot synchronization client, or - a simple alarm or reminder utility. A comprehensive calendaring - framework will also allow multiple users to schedule - appointments between each other; for example, a project director - may want to schedule a weekly meeting with the rest of the - project members, or a person who owns a large house may want to - schedule a big party with his friends. The attendees will then - want to reply with messages such as, “I will - attend”, or “I will attend only if the proposed time - is changed”. - - - - The &Evolution; groupware suite provides a framework for - developing calendaring applications, as well as a graphical - calendar client or calendar user agent (&CUA;) and a personal - calendar server (&PCS;). - - - - The following sections explain the basic calendaring framework, - the functions of the calendar user agent and the personal - calendar server, and the relationship between the two. - - - - - - - Personal Calendar Server - - - The personal calendar server (&PCS;) provides centralized - management and storage of a user's personal calendar. Multiple - clients can connect to the &PCS; simultaneously to query and - modify the user's calendar in a synchronized fashion. The main - features of the &PCS; are as follows: - - - - Storage - - - The &PCS; is responsible for loading and saving calendars. - Centralizing the loading and saving functionality allows - multiple clients to use the same calendar at the same time - without having to worry about each other. - - - - - Basic Queries - - - The &PCS; provides functions to do basic queries on a - calendar, for example, a client can ask the server for a list - of all the appointments in the calendar, or for all the data - for a specific appointment. - - - - - Recurrence and Alarm Queries - - - Clients can ask the &PCS; for a list of the appointments that - occur within a specified time range; for example a graphical - client that has a per-week view could ask the &PCS; for all - the appointments that occur in a particular week. This - includes multiple occurrences of a single recurring event; for - example, the object for “a 1-hour meeting that occurs on - every Tuesday and Thursday” is represented inside the - &PCS; as a single event with a recurrence rule. Similarly, - clients can ask the &PCS; for a list of events that have - alarms that trigger within a specified time range. - - - - - Notification of Changes - - - This is the most important function of the &PCS;, as it allows - multiple calendar clients to maintain a unified view of the - calendar between the server and themselves. When a client - asks the &PCS; to modify or remove an event, the &PCS; - notifies all the clients that are connected to it about the - change. The policy is that “the server is always - right”; clients can act as dumb views onto the - calendar's data and they will be notified by the &PCS; when - something changes. - - - - - - - - Calendar User Agent - - - A calendar user agent (&CUA;) is a program that lets a user - manipulate a calendar. &Evolution; provides an attractive, - graphical calendar client that communicates with the &Evolution; - personal calendar server. - - - - The &Evolution; calendar client just provides a view onto the - data that is stored and managed by the personal calendar server. - The calendar client does not perform direct manipulations on a - calendar's data; instead it offloads those requests to the - calendar server, which takes care of making the appropriate - modifications in the calendar and then notifies all the clients - about the changes. - - - - - - - Calendar Client Library - - - Communication between the personal calendar server and calendar - clients is defined by a set of &Bonobo; &CORBA; interfaces. - Clients can be written by implementing the client-side - Listener interface, which defines the - notification callbacks that the PCS uses to inform clients about - changes to the calendar. - - - - As a convenience for >K; programmers, &Evolution; also - includes a library which provides a - CalClient class which can be used for - communication with the personal calendar server. Objects of - this class automatically contact the PCS when they are created. - CalClient provides functions to request - changes in the calendar, and it also emits signals when it gets - notification about changes from the PCS. This makes it easy and - convenient to write calendar clients for &Evolution; using - >K;. - - - - The implementation of the CalClient class - simply wraps the &Evolution; &CORBA; interfaces for calendaring - with a familiar-looking >K; object. Calls to the - Listener interface get translated to - signal emissions from the CalClient, thus - shielding programmers from the details of the &CORBA; - interfaces. - - -
diff --git a/help/white-papers/mail/camel.sgml b/help/white-papers/mail/camel.sgml deleted file mode 100644 index a339909f54..0000000000 --- a/help/white-papers/mail/camel.sgml +++ /dev/null @@ -1,339 +0,0 @@ -Evolution"> - -]> - -
- - - The &Camel; Messaging Library - - - - Dan - Winship - -
- danw@helixcode.com -
-
-
- - - Bertrand - Guiheneuf - -
- bertrand@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - -
- - - Introduction - - - &Camel; is a generic messaging library. It is being used as the - back end for the mail component of &Evolution;. The name - "&Camel;" is an acronym; it refers to the fact that the - library is capable of going several days without food or water. - It means : Camel's Acronym Makes Everyone Laugh. - - - - &Camel;'s initial design is heavily based on Sun's - JavaMail API. It uses the Gtk+ object - system, and many of its classes are direct analags of JavaMail - classes. Its design has also been influenced by the features of - IMAP, and the limitations of the standard UNIX mbox mail store, - which set some of the boundaries on its requirements and - extensibility. - - - - &Camel; sees all message repositories as stores containing - folders. These folders in turn contain the messages the client - actually accesses. The use of such a unified interface allows - the client applications to be very extensible. &Camel; includes - an external provider mechanism which allows applications to - dynamically load and use protocols which were not available when - the application was initially written. - - - - The abstract store/folder mechanism is a powerful and versatile - way of accessing messages. No particular asumptions are made on - the client side, thus allowing new ways of managing the - messages. For example, the messages stored in the folders don't - necessarily have to share some common physical location. The - folder can be a purely virtual folder, containing only - references to the actual messages. This is used by the "vFolder" - provider, which allows you select messages meeting particular - criteria and deal with them as a group. - - - - In addition to these possibilities, &Camel; has full MIME - support. &Camel; MIME messages are lightweight objects - representing the MIME skeleton of the actual message. The data - contained in the subparts are never stored in memory except when - they are actually needed. The application, when accessing the - various MIME objects contained in the message (text parts, - attachments, embedded binary objects ...) asks &Camel; for a - stream that it can read data from. This scheme is particularly - useful with the IMAP provider. IMAP has strong MIME support - built-in, which allows &Camel; to download only the parts of - messages that it actually needs: attachments need not be - downloaded until they are viewed, and unnecessary - "multipart/alternative" parts will never be read off the server. - - - - - Overview - - - - - To begin using &Camel;, an application first creates a - CamelSession object. This object is used - to store application defaults, and to coordinate communication - between providers and the application. - - - - A CamelProvider is a dynamically-loadable - module that provides functionality associated with a specific - service. Examples of providers are IMAP and SMTP. Providers - include subclasses of the various other &Camel; classes for - accessing and manipulating messages. - - - - CamelService is an abstract class for - describing a connection to a local or remote service. It - currently has two subclasses: CamelStore, - for services that store messages (such as IMAP servers and mbox - files), and CamelTransport, for services - that deliver messages (such as SMTP, or a local MTA). A provider - could also be both a store and a transport, as in the case of - NNTP. - - - - A CamelStore contains some number of - CamelFolder objects, which in turn - contain messages. A CamelFolder provides - a CamelFolderSummary object, which - includes details about the subject, date, and sender of each - message in the folder. The folder also includes the messages - themselves, as subclasses of CamelMedium. - - - - Email messages are represented by the - CamelMimeMessage class, a subclass of - CamelMedium. This class includes - operations for accessing RFC822 and MIME headers, accessing - subparts of MIME messages, encoding and decoding Base64 and - Quoted-Printable, etc. - - - - CamelTransport includes methods for - delivering messages. While the abstract - CamelTransport::send method takes a - CamelMedium, its subclasses may only be - able to deliver messages of specific - CamelMedium subclasses. For instance, - CamelSendmailTransport requires a - CamelMimeMessage, because it needs a - message that includes a "To:" header. A hypothetical - CamelNNTPTransport would need a - CamelNewsMessage, which would have a - "Newsgroups:" header. - - - - The content of messages are referred to using - CamelStream and its subclasses. In the - case of an mbox-based store, the - CamelStream would abstract the operation - of reading the correct section of the mbox file. For IMAP, - reading off the CamelStream might result - in commands being issued to the remote IMAP server and data - being read off a socket. - - - - The final major class in &Camel; is - CamelException, which is used to - propagate information about errors. Many methods take a - CamelException as an argument, which the - caller can then check if an error occurs. It includes both a - numeric error code which can be interpreted by the program, and - a text error message that can be displayed to the user. - - - - - Major Subcomponents - - - The Message Store - - - A CamelStore inherits the ability to - connect and authenticate to a service from its parent class, - CamelService. It then adds the ability - to retrieve folders. A store must contain at least one folder, - which can be retrieved with - CamelStore::get_default_folder. There are - also methods to retrieve the "top-level" folder (for - hieararchical stores), and to retrieve an arbitrary folder by - name. - - - - All CamelFolders must implement certain - core operations, most notably generating a summary and - retrieving and deleting messages. A - CamelFolder must assign a permanently - unique identifier to each message it contains. Messages can - then be retrieved via - CamelFolder::get_message_by_uid. Alternately, - within a single mail-reading session, messages can be referred - to by their linear position within the store using - CamelFolder::get_message_by_number. - - - - Folders must also implement the - get_parent_folder and - list_subfolders methods. For stores that - don't allow multiple folders, they would return NULL and an - empty list, respectively. Stores that do allow multiple - folders will also define methods for creating and deleting - folders, and for moving messages between them (assuming the - folders are writable). - - - - Folders that support searching can define the - search_by_expression method. For mbox - folders, this is implemented by indexing the messages with the - ibex library and using that to search them later. For IMAP - folders, this uses the IMAP SEARCH command. Other folder types - might not be able to implement this functionality, in which - case users would not be able to do full-content searches on - them. - - - - - Messages - - - As mentioned before, messages are represented by subclasses of - CamelMedium. - CamelMedium itself is a subclass of - CamelDataWrapper, a generic class for - connecting a typed data source to a data sink. - CamelMedium adds the concept of message - headers versus message body. - (CamelDataWrapper has one other - important subclass, CamelMultipart, - which is used to provide separate access to the multiple - independent parts of a multipart MIME type.) - CamelMedium's subclasses provide more - specialized handling of various headers: - CamelMimePart adds special handling for - the &ldquot;Content-*&rdquot; headers in MIME messages, and - its subclass CamelMimeMessage adds - handling for the RFC822 headers. - - - - - - Consider a message with two parts: a text part (in both plain - text and HTML), and an attached image: - - - - From: Dan Winship <danw@helixcode.com> - To: Matt Loper <matt@helixcode.com> - Subject: the Camel white paper - MIME-Version: 1.0 - Content-Type: multipart/mixed; - boundary="jhTYrnsRrdhDFGa" - - This is a multi-part message in MIME format. - --jhTYrnsRrdhDFGa - Content-Type: multipart/alternative; - boundary="sFSenbAFDSgDfg" - - --sFSenbAFDSgDfg - Content-Type: text/plain - - Hey, Matt - - Check out this graphic... - - -- Dan - - --sFSenbAFDSgDfg - Content-Type: text/html - - Hey, Matt<br> - <br> - Check out this graphic...<br> - <br> - -- Dan<br> - <br> - --sFSenbAFDSgDfg-- - - --jhTYrnsRrdhDFGa - Content-Type: image/png - Content-Transfer-Encoding: base64 - - F4JLw0ORrkRa8AwAMQJLAaI3UDIGsco9RAaB92... - --jhTYrnsRrdhDFGa-- - - - - In &Camel;, this would be represented as follows: - - - - - - - Streams - - - Streams are a generic data transport layer. Two basic stream - classes are CamelStreamFs, for - reading and writing files, and - CamelStreamMem, for reading from and - writing to objects that are already in memory. - - - - Streams can also be chained together. So a CamelMimePart - containing base64-encoded data can filter its output through - a CamelStreamB64. Other parts of the application that want - to read its data will never need to even realize that the - original data was encoded. - - - -
diff --git a/help/white-papers/mail/ibex.sgml b/help/white-papers/mail/ibex.sgml deleted file mode 100644 index dcb8f5ca4b..0000000000 --- a/help/white-papers/mail/ibex.sgml +++ /dev/null @@ -1,158 +0,0 @@ -Evolution"> - - -]> - -
- - - Ibex: an Indexing System - - - - Dan - Winship - -
- danw@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - -
- - - Introduction - - - &Ibex; is a library for text indexing. It is being used by - &Camel; to allow it to quickly search locally-stored messages, - either because the user is looking for a specific piece of text, - or because the application is contructing a vFolder or filtering - incoming mail. - - - - - Design Goals and Requirements for Ibex - - - The design of &Ibex; is based on a number of requirements. - - - - - First, obviously, it must be fast. In particular, searching - the index must be appreciably faster than searching through - the messages themselves, and constructing and maintaining - the index must not take a noticeable amount of time. - - - - - - The indexes must not take up too much space. Many users have - limited filesystem quotas on the systems where they read - their mail, and even users who read mail on private machines - have to worry about running out of space on their disks. The - indexes should be able to do their job without taking up so - much space that the user decides he would be better off - without them. - - - - Another aspect of this problem is that the system as a whole - must be clever about what it does and does not index: - accidentally indexing a "text" mail message containing - uuencoded, BinHexed, or PGP-encrypted data will drastically - affect the size of the index file. Either the caller or the - indexer itself has to avoid trying to index these sorts of - things. - - - - - - The indexing system must allow data to be added to the index - incrementally, so that new messages can be added to the - index (and deleted messages can be removed from it) without - having to re-scan all existing messages. - - - - - - It must allow the calling application to explain the - structure of the data however it wants to, rather than - requiring that the unit of indexing be individual files. - This way, &Camel; can index a single mbox-format file and - treat it as multiple messages. - - - - - - It must support non-ASCII text, given that many people send - and receive non-English email, and even people who only - speak English may receive email from people whose names - cannot be written in the US-ASCII character set. - - - - - - While there are a number of existing indexing systems, none of - them met all (or even most) of our requirements. - - - - - The Implementation - - - &Ibex; is still young, and many of the details of the current - implementation are not yet finalized. - - - - With the current index file format, 13 megabytes of Info files - can be indexed into a 371 kilobyte index file—a bit under - 3% of the original size. This is reasonable, but making it - smaller would be nice. (The file format includes some simple - compression, but gzip can compress an - index file to about half its size, so we can clearly do better.) - - - - The implementation has been profiled and optimized for speed to - some degree. But, it has so far only been run on a 500MHz - Pentium III system with very fast disks, so we have no solid - benchmarks. - - - - Further optimization (of both the file format and the in-memory - data structures) awaits seeing how the library is most easily - used by &Evolution;: if the indexes are likely to be kept in - memory for long periods of time, the in-memory data structures - need to be kept small, but the reading and writing operations - can be slow. On the other hand, if the indexes will only be - opened when they are needed, reading and writing must be fast, - and memory usage is less critical. - - - - Of course, to be useful for other applications that have - indexing needs, the library should provide several options, so - that each application can use the library in the way that is - most suited for its needs. - - -
diff --git a/help/white-papers/widgets/e-table.sgml b/help/white-papers/widgets/e-table.sgml deleted file mode 100644 index 5ff4faf2ae..0000000000 --- a/help/white-papers/widgets/e-table.sgml +++ /dev/null @@ -1,279 +0,0 @@ -Evolution"> -ETable"> -ETableModel"> -ETableSimple"> -ETableHeader"> -ETableSpecification"> -ETableCol"> -]> - -
- - - The ETable Widget - - - - Chris - Lahey - -
- clahey@helixcode.com -
-
-
- - Miguel - de Icaza - -
- miguel@helixcode.com -
-
-
-
- - - 2000 - Helix Code, Inc. - - -
- - - Introduction - - - &ETable; is a table widget on steroids. It is intended to provide - all the table functionality needed throughout &Evolution;, and - hopefully be general purpose enough to be used in other projects. - - - - &ETable; provides a lot of interactive control over the data in the - table. Without any work from the programmer, &ETable; provides - rearrangeable columns and editable data. When finished, &ETable; will - also provide, again with no programmer intervention, easy interactive - sorting and grouping. - - - - &ETable; gives you a great deal of functionality, flexibility, and - power. Most of this power is internal to the widget, but some of - the flexibility requires a bit of work by the programmer. - However, once you learn it, &ETable; is not very hard at all to - use. - - - - &ETable;'s power comes from the fact that it is fully - model/view/controller based. Various models are involved into - the process of rendering the information, and various views are - provided. The programmer has a wide range of options: from the - most finely hand-tuned table to a generic all-encompasing widget - that takes over most of tasks. It is up to the programmer: he - can use the simple to use &ETable; widget that takes care of - everything in a generic way, or he can use the various - components to roll his own tabular display. - - - - &ETable; ships with a standard set of information renderers: - strings, bitmaps, toggle-buttons, check-boxes, and multi-line - strings. But the programmer can write and implement his own - renderer for his information. This means that by default - &ETable; provides the basic display facilities that programmers - required, but they offer the programmer a complete freedom to - incorporate new cell renderers. - - - - - - ETableModel - - - The data back end for the &ETable; is an &ETableModel;. The - &ETableModel is an abstract interface that acts as the - information repository for the various &ETable components. - - - - To use &ETable; you have to create a subclass of the abstract - &ETableModel; class. However, to save you the work of defining - a new GtkClass every time you use - &ETable, there is a predefined subclass of &ETableModel; called - &ETableSimple; which simply takes a list of function callbacks - to perform the various operations. - - - - - - Columns - - - There are two different meanings to the word "column". The first - is the model column (defined by the &ETableCol: object). A model - column describes how it maps to the column in the &ETableModel; - as well as containing information about its properties (name, - resizability, resize dimensions, and a renderer for this - specific columns). - - - - &ETable; distinguishes between a model column index, and a view - column index. The former reflects the column in which the data - is stored in the &ETableModel; The later represents the actual - location at which the column is being displayed in the screen. - - - - Each view column index corresponds to a specific model column, - though a model column may have any number of view columns - associated with it (including zero). For example the same - column might be rendered twice, or the data from one column - could be used to display different bits of information - - - - The view column does not necessarily depend on only one model - column. In some cases, the view column renderer can be given a - reference to another model column to get extra information about - its display. For example, a mail program could display deleted - messages with a line through them by creating a model column - with no corresponding view column that told whether or not the - message is deleted, and then having the text column - strikethrough the display if the invisible column had a value - corresponding to "deleted". - - - - The view column also specifies a few other pieces of - information. One piece of information is the renderer. &ETable; - provides a number of renderers to choose from, or you can write - your own. Currently, there are renderers for text, image sets, - and checkboxes. - - - - The view column also includes information about the header. - There are two types of headers: text, and pixbuf. The first - allows you to specify a string which is rendered in the header. - The second allows you to specify an image to copy into the - header. - - - - - Header - - - The &ETableHeader; represents the header information for the - table. The &ETableHeader; is used in two different ways. The - first is the in the full_header - element of an &ETable;. This is the list of possible columns in - the view. You add each of your columns to this &ETableHeader; - and then pass it into the &ETable;. - - - - The second use is completely internal. &ETable; uses another - &ETableHeader; to store the actual displayed columns. Many of - the &ETableHeader; functions are for this purpose. The only - functions that users of the library should need to use are - e_table_header_new and - e_table_header_add_col. - - - - - Layout Specification - - - &ETable; uses an &ETableSpecification; to layout the columns of - the widget. The &ETableSpecification; is specified as XML data - passed into the &ETable; as a string. - - - - The most powerful part of the &ETableSpecification; is that when - finished, &ETable; will allow you to get a copy of an - &ETableSpecification; that describes the current view of the - tree. This allows the developer to save the current view so that - next time the user opens this table, they find it in exactly the - state that they left it. - - - - The XML specification allows for a number of things. First, it - allows you to pick a set of default columns to be shown. Thus, - even if you had hundreds of pieces of data, you could choose to - only display a few that fit on the screen by default. - - - - The second major thing that the &ETableSpecification; allows you - to specify is the column grouping and sorting. &ETable; has a - powerful mechanism for allowing the user to choose columns to - group by, thus allowing multiple columns of sorting, as well as - visual grouping of similar elements and interactive selection of - what data to display. - - - - The grouping in &ETableSpecification; is specified as a - hierarchy of columns to group by. Each level of the hierarchy - lets you sort by a particular column, either ascending or - descending. All levels except the last cause the canvas to group - by the given column. - - - - An example &ETableSpecification; follows. - - - - <ETableSpecification> - <columns-shown frozen_columns="2"> - <column> 0 </column> - <column> 1 </column> - <column> 2 </column> - <column> 3 </column> - <column> 4 </column> - </columns-shown> - <grouping> - <group column="3" ascending="1"> - <group column="4" ascending="0"> - <leaf column="2" ascending="1"/> - </group> - </group> - </grouping> - </ETableSpecification> - - - - This example has 5 columns which are initially in order. It has - 2 levels of grouping. The first is grouped by the 4th column - (all indexes are 0 based) and sorts those groups in ascending - order. Inside those groups, the data is grouped by the fifth - column and sorted in descending order of the fifth column. - Finally, the data in those groups is sorted by the third column - in ascending order. Due to the "frozen_columns" attribute on the - columns-shown element, the user will not be - able to rearrange the first two columns. They will always be the - first two. - - - - - Conclusion - - - All in all, &ETable; is a very powerful widget. Once you learn - to use it, you have access to a vast amount of power requiring a - comparatively small amount of work. - - -
diff --git a/libibex/.cvsignore b/libibex/.cvsignore deleted file mode 100644 index 9a14585748..0000000000 --- a/libibex/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -.deps -Makefile -Makefile.in -.libs -.deps -*.lo -*.la -lookup -mkindex diff --git a/libibex/COPYING.LIB b/libibex/COPYING.LIB deleted file mode 100644 index eb685a5ec9..0000000000 --- a/libibex/COPYING.LIB +++ /dev/null @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/libibex/ChangeLog b/libibex/ChangeLog deleted file mode 100644 index a74f697308..0000000000 --- a/libibex/ChangeLog +++ /dev/null @@ -1,99 +0,0 @@ -2000-08-09 Christopher James Lahey - - * file.c, find.c: Fixed some warnings. - -2000-05-11 NotZed - - * index.c (ibex_unindex): Make sure we mark the ibex as dirty. - -2000-05-07 NotZed - - * file.c (ibex_save): New function, only write out the ibex if it - has changed. - -2000-05-07 - - * file.c (ibex_open): Also close the fd after we're done. - - * find.c (ibex_contains_name): New function to find out if a file - is indexed. - -2000-05-02 Matt Loper - - * Makefile.am: set G_LOG_DOMAIN. - -2000-04-12 NotZed - - * find.c (ibex_dump_all): Debug function to dump the whole index - to stdout. - - * words.c (get_ibex_file): Use g_strdup(), not strdup(). - -2000-04-11 NotZed - - * file.c (write_word): Always write out all words we have (even if - its 0 ... the file expects it). No longer check for removed files. - (store_word): Check for removed files here, and only add to the - ordered tree if we have references left to this word. - (ibex_write): First insert into the tree, to determine the - wordcount to be saved in the output file, and then write that. - (ibex_open): Remove some debug. - - * words.c (ibex_index_buffer): Always set 'unread', if it is a - valid pointer (dont rely on caller to initialise it). - -2000-03-26 NotZed - - * lookup.c (main): Fixed call to ibex_open. - - * mkindex.c (main): Fixed call to ibex_open. - - * file.c (ibex_open): Changed to accept flags and mode equivalent - to open(2). - -2000-02-25 Dan Winship - - * *.c: add gtk-doc-style comments - -2000-02-21 Matt Loper - - * .cvsignore: Added mkindex. - -2000-02-21 NotZed - - * Makefile.am: change noinst_LIBRARIES to noinst_LTLIBRARIES, and - supply -static to LDFLAGS. Duh, and changed LDADD back to - libibex.la. - -2000-02-20 Matt Loper - - * Makefile.am: changed mkindex_LDADD to libibex.a instead of - libibex.la. - -2000-02-19 Matt Loper - - * .cvsignore: added lookup. - -2000-02-18 Miguel de Icaza - - * Makefile.am (lookup_LDADD): For now. make a libibex.a library so - we can link it with the camel provider. I hate libtool - -2000-02-16 Dan Winship - - * Makefile.am: automakify - -2000-02-16 NotZed - - * find.[ch] (ibex_find_name): Finds if a word is indexed under a - given name. - -2000-02-14 NotZed - - * Makefile: Hack together a build using libtool. This should all - be auto*'d at some point I guess. - -2000-02-13 NotZed - - * Added ChangeLog file. - diff --git a/libibex/Makefile.am b/libibex/Makefile.am deleted file mode 100644 index c9e8165987..0000000000 --- a/libibex/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -## Process this file with automake to produce Makefile.in - -noinst_LTLIBRARIES = libibex.la - -libibex_la_SOURCES = file.c index.c find.c words.c ibex.h -libibex_la_LDFLAGS = -static - -noinst_HEADERS = ibex_internal.h - -INCLUDES = -I$(srcdir) $(GLIB_CFLAGS) $(UNICODE_CFLAGS) \ - -DG_LOG_DOMAIN=\"libibex\" - - -noinst_PROGRAMS = mkindex lookup - -mkindex_SOURCES = mkindex.c -mkindex_LDADD = libibex.la $(GLIB_LIBS) $(UNICODE_LIBS) - -lookup_SOURCES = lookup.c -lookup_LDADD = libibex.la $(GLIB_LIBS) $(UNICODE_LIBS) - diff --git a/libibex/TODO b/libibex/TODO deleted file mode 100644 index a087c8d1f3..0000000000 --- a/libibex/TODO +++ /dev/null @@ -1,61 +0,0 @@ -Stability ---------- -* ibex_open should never crash, and should never return NULL without -errno being set. Should check for errors when reading. - - -Performance ------------ -* Profiling, keep thinking about data structures, etc. - -* Check memory usage - -* See if writing the "inverse image" of long ref streams helps -compression without hurting performance now. (ie, if a word appears in -more than half of the files, write out the list of files it _doesn't_ -appear in). (I tried this before, and it wasn't working well, but the -file format and data structures have changed a lot.) - -* We could save a noticeable chunk of time if normalize_word computed -the hash of the word and then we could pass that into -g_hash_table_insert somehow. - -* Make a copy of the buffer to be indexed (or provide interface for -caller to say ibex can munge the provided data) and then use that -rather than constantly copying things. ? - - -Functionality -------------- -* ibex file locking - -* specify file mode in ibex_open - -* ibex_find* need to normalize the search words... should this be done -by the caller or by ibex_find? - -* Needs to be some way to do a secondary search after getting results -back from ibex_find* (ie, for "foo near bar"). This either has to be -done by ibex, or requires us to export the normalize interface. - -* Does there need to be an ibex_find_any, or is that easy enough for the -caller to do? - -* utf8_trans needs to cover at least two more code pages. This is -tricky because it's not clear whether some of the letters there should -be translated to ASCII or left as UTF8. This requires some -investigation. - -* ibex_index_* need to ignore HTML tags. - NAME = [A-Za-z][A-Za-z0-9.-]* - - - - ugh. ok, simplifying, we get: - <[^!](([^"'>]*("[^"]*"|'[^']*'))*> or - - - which is still not simple. sigh. - -* ibex_index_* need to recognize and ignore "non-text". Particularly -BinHex and uuencoding. diff --git a/libibex/file.c b/libibex/file.c deleted file mode 100644 index 70b7ed96cb..0000000000 --- a/libibex/file.c +++ /dev/null @@ -1,481 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* file.c: index file read/write ops */ - -#include -#include -#include -#include -#include -#include - -#include "ibex_internal.h" - -static unsigned long read_number (FILE *f); -static void write_number (FILE *f, unsigned long n); -static char *get_compressed_word (FILE *f, char **lastword); - -static gint free_file (gpointer key, gpointer value, gpointer data); -static void free_word (gpointer key, gpointer value, gpointer data); - -/* The file format is: - * - * version string (currently "ibex1") - * file count - * list of compressed filenames, separated by \0 - * word count - * list of compressed words, each followed by \0, a count, and that - * many references. - * - * All numbers are stored 7-bit big-endian, with the high bit telling - * whether or not the number continues to the next byte. - * - * compressed text consists of a byte telling how many characters the - * line has in common with the line before it, followed by the rest of - * the string. Obviously this only really works if the lists are sorted. - */ - -/** - * ibex_open: open (or possibly create) an ibex index - * @file: the name of the file - * @flags: open flags, see open(2). - * @mode: If O_CREAT is passed in flags, then the file mode - * to create the new file with. It will be anded with the current - * umask. - * - * Open and/or create the named ibex file and return a handle to it. - * - * Return value: an ibex handle, or NULL if an error occurred. - **/ -ibex * -ibex_open (char *file, int flags, int mode) -{ - ibex *ib; - FILE *f; - char vbuf[sizeof (IBEX_VERSION) - 1]; - char *word, *lastword; - unsigned long nfiles, nwords, nrefs, ref; - ibex_file **ibfs = NULL; - int i; - GPtrArray *refs; - int fd; - char *modestr; - - fd = open(file, flags, mode); - if (fd == -1) { - return NULL; - } - - /* yuck, this is because we use FILE * interface - internally */ - switch (flags & O_ACCMODE) { - case O_RDONLY: - modestr = "r"; - break; - case O_RDWR: - if (flags & O_APPEND) - modestr = "a+"; - else - modestr = "w+"; - break; - case O_WRONLY: - if (flags & O_APPEND) - modestr = "a"; - else - modestr = "w"; - break; - default: - if (flags & O_APPEND) - modestr = "a+"; - else - modestr = "r+"; - break; - } - - f = fdopen(fd, modestr); - if (f == NULL) { - if (errno == 0) - errno = ENOMEM; - close(fd); - return NULL; - } - - ib = g_malloc (sizeof (ibex)); - ib->dirty = FALSE; - ib->path = g_strdup (file); - ib->files = g_tree_new ((GCompareFunc) strcmp); - ib->words = g_hash_table_new (g_str_hash, g_str_equal); - ib->oldfiles = g_ptr_array_new (); - - if (!f) { - close(fd); - return ib; - } - - /* Check version. If its empty, then we have just created it */ - if (fread (vbuf, 1, sizeof (vbuf), f) != sizeof (vbuf)) { - if (feof (f)) { - fclose(f); - close(fd); - return ib; - } - } - if (strncmp (vbuf, IBEX_VERSION, sizeof (vbuf) != 0)) { - errno = EINVAL; - goto errout; - } - - /* Read list of files. */ - nfiles = read_number (f); - ibfs = g_malloc (nfiles * sizeof (ibex_file *)); - lastword = NULL; - for (i = 0; i < nfiles; i++) { - ibfs[i] = g_malloc (sizeof (ibex_file)); - ibfs[i]->name = get_compressed_word (f, &lastword); - if (!ibfs[i]->name) { - goto errout; - } - ibfs[i]->index = 0; - g_tree_insert (ib->files, ibfs[i]->name, ibfs[i]); - } - - /* Read list of words. */ - nwords = read_number (f); - lastword = NULL; - for (i = 0; i < nwords; i++) { - word = get_compressed_word (f, &lastword); - if (!word) { - goto errout; - } - - nrefs = read_number (f); - refs = g_ptr_array_new (); - g_ptr_array_set_size (refs, nrefs); - while (nrefs--) { - ref = read_number (f); - if (ref >= nfiles) { - goto errout; - } - refs->pdata[nrefs] = ibfs[ref]; - } - - g_hash_table_insert (ib->words, word, refs); - } - - g_free (ibfs); - fclose (f); - close(fd); - return ib; - -errout: - - fclose (f); - close(fd); - g_tree_traverse (ib->files, free_file, G_IN_ORDER, NULL); - g_tree_destroy (ib->files); - g_hash_table_foreach (ib->words, free_word, NULL); - g_hash_table_destroy (ib->words); - g_ptr_array_free (ib->oldfiles, TRUE); - if (ibfs) - g_free (ibfs); - g_free (ib->path); - g_free (ib); - - return NULL; -} - -struct ibex_write_data { - unsigned long index; - FILE *f; - char *lastname; -}; - -/* This is an internal function to find the longest common initial - * prefix between the last-written word and the current word. - */ -static int -get_prefix (struct ibex_write_data *iwd, char *name) -{ - int i = 0; - if (iwd->lastname) { - while (!strncmp (iwd->lastname, name, i + 1)) - i++; - } - iwd->lastname = name; - return i; -} - -static gint -write_file (gpointer key, gpointer value, gpointer data) -{ - char *file = key; - ibex_file *ibf = value; - struct ibex_write_data *iwd = data; - int prefix; - - ibf->index = iwd->index++; - prefix = get_prefix (iwd, file); - fprintf (iwd->f, "%c%s", prefix, file + prefix); - fputc (0, iwd->f); - return FALSE; -} - -/* scans for words which still exist in the index (after - index removals), and adds them to the ordered tree for - writing out in order */ -static void -store_word (gpointer key, gpointer value, gpointer data) -{ - GTree *wtree = data; - GPtrArray *refs = value; - int i; - ibex_file *ibf; - - for (i = 0; i < refs->len; i++) { - ibf = g_ptr_array_index (refs, i); - if (ibf->index == -1) { - g_ptr_array_remove_index_fast (refs, i); - i--; - } - } - - if (refs->len > 0) { - g_tree_insert (wtree, key, value); - } -} - -/* writes a word out, in order */ -static gint -write_word (gpointer key, gpointer value, gpointer data) -{ - char *word = key; - GPtrArray *refs = value; - struct ibex_write_data *iwd = data; - int i, prefix; - ibex_file *ibf; - - prefix = get_prefix (iwd, word); - fprintf (iwd->f, "%c%s", prefix, word + prefix); - fputc (0, iwd->f); - - write_number (iwd->f, refs->len); - - for (i = 0; i < refs->len; i++) { - ibf = g_ptr_array_index (refs, i); - write_number (iwd->f, ibf->index); - } - return FALSE; -} - -/** - * ibex_write: Write an ibex out to disk. - * @ib: the ibex - * - * This writes an ibex to disk. - * - * Return value: 0 for success, -1 for failure (in which case errno - * is set). - **/ -int -ibex_write (ibex *ib) -{ - struct ibex_write_data iwd; - GTree *wtree; - char *tmpfile; - - tmpfile = g_strdup_printf ("%s~", ib->path); - iwd.f = fopen (tmpfile, "w"); - if (!iwd.f) { - if (errno == 0) - errno = ENOMEM; - g_free (tmpfile); - return -1; - } - - fputs (IBEX_VERSION, iwd.f); - if (ferror (iwd.f)) - goto lose; - - iwd.index = 0; - iwd.lastname = NULL; - write_number (iwd.f, g_tree_nnodes (ib->files)); - if (ferror (iwd.f)) - goto lose; - g_tree_traverse (ib->files, write_file, G_IN_ORDER, &iwd); - if (ferror (iwd.f)) - goto lose; - - iwd.lastname = NULL; - wtree = g_tree_new ((GCompareFunc) strcmp); - g_hash_table_foreach (ib->words, store_word, wtree); - write_number (iwd.f, g_tree_nnodes(wtree)); - if (ferror (iwd.f)) - goto lose; - g_tree_traverse (wtree, write_word, G_IN_ORDER, &iwd); - g_tree_destroy (wtree); - if (ferror (iwd.f)) - goto lose; - - if (fclose (iwd.f) == 0 && rename (tmpfile, ib->path) == 0) { - g_free (tmpfile); - ib->dirty = FALSE; - return 0; - } - -lose: - unlink (tmpfile); - g_free (tmpfile); - return -1; -} - -/** - * ibex_save: - * @ib: - * - * Only write out an ibex if it is dirty. - * - * Return value: Same as ibex_write. - **/ -int -ibex_save (ibex *ib) -{ - if (ib->dirty) - return ibex_write(ib); - return 0; -} - -/** - * ibex_close: Write out the ibex file (if it has changed) and free - * the data associated with it. - * @ib: the ibex - * - * If this ibex file has been modified since it was opened, this will - * call ibex_write() to write it out to disk. It will then free all data - * associated with the ibex. After calling ibex_close(), @ib will no - * longer be a valid ibex. - * - * Return value: 0 on success, -1 on an ibex_write() failure (in which - * case @ib will not be destroyed). - **/ -int -ibex_close (ibex *ib) -{ - ibex_file *ibf; - - if (ib->dirty && ibex_write (ib) == -1) - return -1; - - g_tree_traverse (ib->files, free_file, G_IN_ORDER, NULL); - g_tree_destroy (ib->files); - g_hash_table_foreach (ib->words, free_word, NULL); - g_hash_table_destroy (ib->words); - - while (ib->oldfiles->len) { - ibf = g_ptr_array_remove_index (ib->oldfiles, 0); - g_free (ibf->name); - g_free (ibf); - } - g_ptr_array_free (ib->oldfiles, TRUE); - g_free (ib->path); - g_free (ib); - - return 0; -} - -static gint -free_file (gpointer key, gpointer value, gpointer data) -{ - ibex_file *ibf = value; - - g_free (ibf->name); - g_free (ibf); - return FALSE; -} - -static void -free_word (gpointer key, gpointer value, gpointer data) -{ - g_free (key); - g_ptr_array_free (value, TRUE); -} - -static char * -get_compressed_word (FILE *f, char **lastword) -{ - char *buf, *p; - int c, size; - - c = getc (f); - if (c == EOF) - return NULL; - - size = c + 10; - buf = g_malloc (size); - if (*lastword) - strncpy (buf, *lastword, c); - p = buf + c; - do { - c = getc (f); - if (c == EOF) - return NULL; - if (p == buf + size) { - buf = g_realloc (buf, size + 10); - p = buf + size; - size += 10; - } - *p++ = c; - } while (c != 0); - - *lastword = buf; - return buf; -} - -static void -write_number (FILE *f, unsigned long number) -{ - int i, flag = 0; - char buf[4]; - - i = 4; - do { - buf[--i] = (number & 0x7F) | flag; - number = number >> 7; - flag = 0x80; - } while (number != 0); - - fwrite (buf + i, 1, 4 - i, f); -} - -static unsigned long -read_number (FILE *f) -{ - int byte; - unsigned long num; - - num = 0; - do { - byte = getc (f); - num = num << 7 | (byte & 0x7F); - } while (byte & 0x80); - - return num; -} - diff --git a/libibex/find.c b/libibex/find.c deleted file mode 100644 index 6b9815f0c0..0000000000 --- a/libibex/find.c +++ /dev/null @@ -1,198 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* find.c: index file searching ops */ - -#include - -#include "ibex_internal.h" - -/** - * ibex_find: search an ibex for a word - * @ib: an ibex - * @word: the word - * - * This routine searches an ibex for a word and returns a GPtrArray - * containing the names of the files in the ibex that contain the word. - * If no matches are found, it will return an empty array (not NULL). - * The caller must free the array, but MUST NOT free or alter its - * elements. - * - * Return value: the array of filenames containing @word - **/ -GPtrArray * -ibex_find (ibex *ib, char *word) -{ - GPtrArray *refs, *ret; - ibex_file *ibf; - int i; - - ret = g_ptr_array_new (); - refs = g_hash_table_lookup (ib->words, word); - if (refs) { - for (i = 0; i < refs->len; i++) { - ibf = g_ptr_array_index (refs, i); - g_ptr_array_add (ret, ibf->name); - } - } - return ret; -} - -/** - * ibex_contains_name: - * @ib: - * @name: - * - * Returns #TRUE if the ibex @ib has any index entry for - * the key @name. - * - * Return value: - **/ -gboolean -ibex_contains_name(ibex *ib, char *name) -{ - return g_tree_lookup(ib->files, name) != NULL; -} - -/** - * ibex_find_name: Check if a word occurs in a given file - * @ib: an ibex - * @name: a filename - * @word: a word - * - * This checks if the given word occurs in the given file. - * - * Return value: TRUE or FALSE - **/ -gboolean -ibex_find_name (ibex *ib, char *name, char *word) -{ - GPtrArray *refs; - ibex_file *ibf; - int i; - - refs = g_hash_table_lookup (ib->words, word); - if (refs) { - for (i = 0; i < refs->len; i++) { - ibf = g_ptr_array_index (refs, i); - if (!strcmp (ibf->name, name)) - return TRUE; - } - } - return FALSE; -} - -static gint -build_array (gpointer key, gpointer value, gpointer data) -{ - char *name = key; - unsigned int count = GPOINTER_TO_UINT (value); - GPtrArray *ret = data; - - if (count == 1) - g_ptr_array_add (ret, name); - return FALSE; -} - -/** - * ibex_find_all: Find files containing multiple words - * @ib: an ibex - * @words: a GPtrArray of words - * - * This works like ibex_find(), but returns an array of filenames - * which contain all of the words in @words. - * - * Return value: an array of matches - **/ -GPtrArray * -ibex_find_all (ibex *ib, GPtrArray *words) -{ - GTree *work; - GPtrArray *wrefs, *ret; - int i, j, count; - char *word; - ibex_file *ibf; - - if (words->len == 0) - return g_ptr_array_new (); - else if (words->len == 1) - return ibex_find (ib, g_ptr_array_index (words, 0)); - - work = g_tree_new ((GCompareFunc) strcmp); - for (i = 0; i < words->len; i++) { - word = g_ptr_array_index (words, i); - wrefs = g_hash_table_lookup (ib->words, word); - if (!wrefs) { - /* One of the words isn't even in the index. */ - g_tree_destroy (work); - return g_ptr_array_new (); - } - - if (i == 0) { - /* Copy the references into a tree, using the - * filenames as keys and the size of words as - * the value. - */ - for (j = 0; j < wrefs->len; j++) { - ibf = g_ptr_array_index (wrefs, j); - g_tree_insert (work, ibf->name, - GUINT_TO_POINTER (words->len)); - } - } else { - /* Increment the counts in the working tree - * for the references for this word. - */ - for (j = 0; j < wrefs->len; j++) { - ibf = g_ptr_array_index (wrefs, j); - count = GPOINTER_TO_UINT (g_tree_lookup (work, ibf->name)); - if (count) { - g_tree_insert (work, ibf->name, - GUINT_TO_POINTER (count - 1)); - } - } - } - } - - /* Build an array with the refs that contain all the words. */ - ret = g_ptr_array_new (); - g_tree_traverse (work, build_array, G_IN_ORDER, ret); - g_tree_destroy (work); - return ret; -} - -static void -ibex_dump_foo(char *key, GPtrArray *refs, void *data) -{ - int i; - - g_print("%s: ", key); - for (i=0;ilen;i++) { - ibex_file *ibf = g_ptr_array_index (refs, i); - g_print("%c%s", ibf->index==-1?'-':' ', ibf->name); - } - g_print("\n"); -} - -/* debug function to dump the tree, in key order */ -void -ibex_dump_all (ibex *ib) -{ - g_hash_table_foreach(ib->words, (GHFunc) ibex_dump_foo, 0); -} diff --git a/libibex/ibex.h b/libibex/ibex.h deleted file mode 100644 index 03635e275d..0000000000 --- a/libibex/ibex.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef IBEX_H -#define IBEX_H - -#include -#include -#include -#include - -struct ibex; -typedef struct ibex ibex; - -/* All functions that can fail set errno and return NULL or -1 on - * failure. - */ - -/* Open the named ibex index file. If CREATE is true, create the file - * if it doesn't already exist. - */ -ibex *ibex_open (char *file, int flags, int mode); - -/* Write the ibex to disk. */ -int ibex_write (ibex *ib); - -/* only save if ibex has changed. */ -int ibex_save (ibex *ib); - -/* Write the ibex to disk if it has changed, and free all memory - * associated with it. - */ -int ibex_close (ibex *ib); - - - -/* Index the named file. (If the FILENAME is already in the index, - * remove the old copy. - */ -int ibex_index_file (ibex *ib, char *filename); - -/* Index LEN bytes off FD, using NAME as the filename in the index. - * (If NAME already exists in the index, this adds more data to it.) - */ -int ibex_index_fd (ibex *ib, char *name, int fd, size_t len); - -/* Like ibex_index_fd, but with a buffer rather than a file descriptor. - * The buffer does not need to be '\0'-terminated. If UNREAD is not - * NULL, then the indexer won't assume that the buffer ends on a word - * boundary, and will return (in UNREAD) the number of bytes from the - * end of the buffer that it didn't use, if any. - */ -int ibex_index_buffer (ibex *ib, char *name, char *buffer, - size_t len, size_t *unread); - -/* Remove entries for a given file from the index. (Most of the removal - * isn't actually done until the file is written out to disk, so this - * is very fast.) - */ -void ibex_unindex (ibex *ib, char *name); - -/* Rename a file in the index. (This is also fast.) */ -void ibex_rename (ibex *ib, char *oldfilename, char *newfilename); - - - -/* Find a word in the index. Returns an array of strings: the caller - * should free the array, but should not free or modify the strings. - */ -GPtrArray *ibex_find (ibex *ib, char *word); - -/* Find if a word is contained in a specific name reference. - */ -gboolean ibex_find_name (ibex *ib, char *name, char *word); - -/* has a file been indexed? - */ -gboolean ibex_contains_name(ibex *ib, char *name); - -/* Return all the files containing all of the words in the given - * array. Returned data is like with ibex_find. - */ -GPtrArray *ibex_find_all (ibex *ib, GPtrArray *words); - -/* Debug function, dumps the whole index tree, showing removed files as well */ -void ibex_dump_all (ibex *ib); - -#endif /* ! IBEX_H */ - diff --git a/libibex/ibex_internal.h b/libibex/ibex_internal.h deleted file mode 100644 index 1647147a3a..0000000000 --- a/libibex/ibex_internal.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include - -#include "ibex.h" - -#define IBEX_VERSION "ibex1" - -struct ibex { - char *path; - GTree *files; - GHashTable *words; - GPtrArray *oldfiles; - gboolean dirty; -}; - -struct ibex_file { - char *name; - long index; -}; -typedef struct ibex_file ibex_file; diff --git a/libibex/index.c b/libibex/index.c deleted file mode 100644 index 1afedbd251..0000000000 --- a/libibex/index.c +++ /dev/null @@ -1,154 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* index.c: high-level indexing ops */ - -#include -#include -#include -#include -#include - -#include "ibex_internal.h" - -/** - * ibex_index_file: Index a file by name - * @ib: an ibex - * @filename: name of the file to index - * - * This indexes the given file into @ib. If @filename is already in - * the ibex, the existing index entries for it are discarded and the - * file is indexed anew. - * - * Return value: 0 on success, -1 on failure. - **/ -int -ibex_index_file (ibex *ib, char *filename) -{ - int fd; - int status; - struct stat st; - - fd = open (filename, O_RDONLY); - if (fd < 0) - return -1; - - if (fstat (fd, &st) == -1) { - close (fd); - return -1; - } - if (!S_ISREG (st.st_mode)) { - close (fd); - errno = EINVAL; - return -1; - } - - ibex_unindex (ib, filename); - status = ibex_index_fd (ib, filename, fd, st.st_size); - close (fd); - return status; -} - -/** - * ibex_index_fd: Index a file given a file descriptor - * @ib: an ibex - * @name: the name of the file being indexed - * @fd: a file descriptor, open for reading - * @len: the number of bytes to read from the file - * - * This indexes a file, or a part of a file, given an open file - * descriptor and a size. There is no requirement that @name - * actually correspond to @fd in any particular way. - * - * If the function returns successfully, the file descriptor offset of - * @fd will be exactly @len bytes beyond where it was when the - * function was called. The indexer assumes that this point is a word - * boundary. - * - * The behavior of this function is not defined if it is not - * possible to read @len bytes off @fd. - * - * Return value: 0 on success, -1 on failure. - **/ -int -ibex_index_fd (ibex *ib, char *name, int fd, size_t len) -{ - char *buf; - int off = 0, nread, status; - - buf = g_malloc (len); - do { - nread = read (fd, buf + off, len - off); - if (nread == -1) { - g_free (buf); - return -1; - } - off += nread; - } while (off != len); - - status = ibex_index_buffer (ib, name, buf, len, NULL); - g_free (buf); - - return status; -} - -/** - * ibex_unindex: Remove a file from the ibex - * @ib: an ibex - * @name: name of the file to remove - * - * This removes all references to @name from @ib. No memory is freed - * right away, but further searches on @ib will never return @name. - **/ -void -ibex_unindex (ibex *ib, char *name) -{ - ibex_file *ibf; - - ibf = g_tree_lookup (ib->files, name); - if (ibf) { - ibf->index = -1; - g_tree_remove (ib->files, name); - g_ptr_array_add (ib->oldfiles, ibf); - ib->dirty = TRUE; - } -} - -/** - * ibex_rename: Rename a file in the ibex - * @ib: an ibex - * @oldname: the old name of the file - * @newname: the new name of the file - * - * This renames a file in the ibex. - **/ -void -ibex_rename (ibex *ib, char *oldname, char *newname) -{ - ibex_file *ibf; - - ibf = g_tree_lookup (ib->files, oldname); - if (ibf) { - g_tree_remove (ib->files, oldname); - g_free (ibf->name); - ibf->name = g_strdup (newname); - g_tree_insert (ib->files, ibf->name, ibf); - } -} diff --git a/libibex/lookup.c b/libibex/lookup.c deleted file mode 100644 index 2d01dbf850..0000000000 --- a/libibex/lookup.c +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* lookup.c: a simple client, part 2 */ - -#include -#include -#include -#include - -#include "ibex.h" - -extern int optind; -extern char *optarg; - -static void -usage (void) -{ - fprintf (stderr, "Usage: lookup [-f indexfile] word ...\n"); - exit (1); -} - -int -main (int argc, char **argv) -{ - ibex *ib; - GPtrArray *ans, *words; - int opt, i; - char *file = "INDEX"; - - while ((opt = getopt (argc, argv, "f:")) != -1) { - switch (opt) { - case 'f': - file = optarg; - break; - - default: - usage (); - break; - } - } - argc -= optind; - argv += optind; - - if (argc == 0) - usage (); - - ib = ibex_open (file, O_RDWR|O_CREAT, 0600); - if (!ib) { - printf ("Couldn't open %s: %s\n", file, strerror (errno)); - exit (1); - } - - words = g_ptr_array_new (); - while (argc--) - g_ptr_array_add (words, argv[argc]); - - ans = ibex_find_all (ib, words); - if (ans) { - for (i = 0; i < ans->len; i++) - printf ("%s\n", (char *)g_ptr_array_index (ans, i)); - exit (0); - } else { - printf ("Nope.\n"); - exit (1); - } -} diff --git a/libibex/mkindex.c b/libibex/mkindex.c deleted file mode 100644 index 151dcecb2d..0000000000 --- a/libibex/mkindex.c +++ /dev/null @@ -1,84 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* mkindex.c: a simple client, part 1 */ - -#include -#include -#include -#include - -#include "ibex.h" - -extern int optind; -extern char *optarg; - -static void -usage (void) -{ - fprintf (stderr, "Usage: mkindex [-f indexfile] file ...\n"); - exit (1); -} - -int -main (int argc, char **argv) -{ - ibex *ib; - int opt; - char *file = "INDEX"; - - while ((opt = getopt (argc, argv, "f:")) != -1) { - switch (opt) { - case 'f': - file = optarg; - break; - - default: - usage (); - break; - } - } - argc -= optind; - argv += optind; - - if (argc == 0) - usage (); - - ib = ibex_open (file, O_CREAT|O_RDWR, 0600); - if (!ib) { - fprintf (stderr, "Couldn't open index file %s: %s\n", - file, strerror (errno)); - exit (1); - } - - while (argc--) { - if (ibex_index_file (ib, argv[argc]) == -1) { - fprintf (stderr, "Couldn't index %s: %s\n", - argv[argc], strerror (errno)); - exit (1); - } - } - - if (ibex_close (ib) != 0) { - fprintf (stderr, "Failed to write index file %s: %s\n", - file, strerror (errno)); - exit (1); - } - exit (0); -} diff --git a/libibex/words.c b/libibex/words.c deleted file mode 100644 index 7642b0a305..0000000000 --- a/libibex/words.c +++ /dev/null @@ -1,269 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public License - * as published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* words.c: low-level indexing ops */ - -#include -#include -#include - -#include - -#include "ibex_internal.h" - -static signed char utf8_trans[] = { - 'A', 'A', 'A', 'A', 'A', 'A', -1, 'C', 'E', 'E', 'E', 'E', 'I', 'I', - 'I', 'I', -2, 'N', 'O', 'O', 'O', 'O', 'O', '*', 'O', 'U', 'U', 'U', - 'U', 'Y', -3, -4, 'a', 'a', 'a', 'a', 'a', 'a', -5, 'c', 'e', 'e', - 'e', 'e', 'i', 'i', 'i', 'i', -6, 'n', 'o', 'o', 'o', 'o', 'o', '/', - 'o', 'u', 'u', 'u', 'u', 'y', -7, 'y', 'A', 'a', 'A', 'a', 'A', 'a', - 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', - 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', - 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', - 'I', 'i', -8, -9, 'J', 'j', 'K', 'k', 'k', 'L', 'l', 'L', 'l', 'L', - 'l', 'L', 'l', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', -10, -11, - 'O', 'o', 'O', 'o', 'O', 'o', -12, -13, 'R', 'r', 'R', 'r', 'R', 'r', - 'S', 'r', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', - 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', - 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's' -}; - -static char *utf8_long_trans[] = { - "AE", "TH", "TH", "ss", "ae", "th", "th", "IJ", "ij", - "NG", "ng", "OE", "oe" -}; - -/* This is a bit weird. It takes pointers to the start and end (actually - * just past the end) of a UTF-8-encoded word, and a buffer at least 1 - * byte longer than the length of the word. It copies the word into the - * buffer in all lowercase without accents, and splits up ligatures. - * (Since any ligature would be a multi-byte character in UTF-8, splitting - * them into two US-ASCII characters won't overrun the buffer.) - * - * It is not safe to call this routine with bad UTF-8. - */ -static void -normalize_word (char *start, char *end, char *buf) -{ - unsigned char *s, *d; - unicode_char_t uc; - - s = (unsigned char *)start; - d = (unsigned char *)buf; - while (s < (unsigned char *)end) { - if (*s < 0x80) { - /* US-ASCII character: copy unless it's - * an apostrophe. - */ - if (*s != '\'') - *d++ = tolower (*s); - s++; - } else { - char *next = unicode_get_utf8 (s, &uc); - if (uc >= 0xc0 && uc < 0xc0 + sizeof (utf8_trans)) { - signed char ch = utf8_trans[uc - 0xc0]; - if (ch > 0) - *d++ = tolower (ch); - else { - *d++ = tolower (utf8_long_trans[-ch - 1][0]); - *d++ = tolower (utf8_long_trans[-ch - 1][1]); - } - s = next; - } else { - while (s < (unsigned char *)next) - *d++ = *s++; - } - } - } - *d = '\0'; -} - -enum { IBEX_ALPHA, IBEX_NONALPHA, IBEX_INVALID, IBEX_INCOMPLETE }; - -/* This incorporates parts of libunicode, because there's no way to - * force libunicode to not read past a certain point. - */ -static int -utf8_category (char *sp, char **snp, char *send) -{ - unsigned char *p = (unsigned char *)sp, **np = (unsigned char **)snp; - unsigned char *end = (unsigned char *)send; - - if (isascii (*p)) { - *np = p + 1; - if (isalpha (*p) || *p == '\'') - return IBEX_ALPHA; - return IBEX_NONALPHA; - } else { - unicode_char_t uc; - int more; - - if ((*p & 0xe0) == 0xc0) { - more = 1; - uc = *p & 0x1f; - } else if ((*p & 0xf0) == 0xe0) { - more = 2; - uc = *p & 0x0f; - } else if ((*p & 0xf8) == 0xf0) { - more = 3; - uc = *p & 0x07; - } else if ((*p & 0xfc) == 0xf8) { - more = 4; - uc = *p & 0x03; - } else if ((*p & 0xfe) == 0xfc) { - more = 5; - uc = *p & 0x01; - } else - return IBEX_INVALID; - - if (p + more > end) - return IBEX_INCOMPLETE; - - while (more--) { - if ((*++p & 0xc0) != 0x80) - return IBEX_INVALID; - uc <<= 6; - uc |= *p & 0x3f; - } - - *np = p + 1; - if (unicode_isalpha (uc)) - return IBEX_ALPHA; - else - return IBEX_NONALPHA; - } -} - -static ibex_file * -get_ibex_file (ibex *ib, char *name) -{ - ibex_file *ibf; - - ibf = g_tree_lookup (ib->files, name); - if (!ibf) { - ibf = g_malloc (sizeof (ibex_file)); - ibf->name = g_strdup (name); - ibf->index = 0; - g_tree_insert (ib->files, ibf->name, ibf); - ib->dirty = TRUE; - } - return ibf; -} - -static void -ref_word (ibex *ib, ibex_file *ibf, char *word) -{ - GPtrArray *refs; - - refs = g_hash_table_lookup (ib->words, word); - if (!refs) { - refs = g_ptr_array_new (); - g_hash_table_insert (ib->words, g_strdup (word), refs); - g_ptr_array_add (refs, ibf); - ib->dirty = TRUE; - } else if (g_ptr_array_index (refs, refs->len - 1) != ibf) { - g_ptr_array_add (refs, ibf); - ib->dirty = TRUE; - } -} - -/** - * ibex_index_buffer: the lowest-level ibex indexing interface - * @ib: an ibex - * @name: the name of the file being indexed - * @buffer: a buffer containing data from the file - * @len: the length of @buffer - * @unread: an output argument containing the number of unread bytes - * - * This routine indexes up to @len bytes from @buffer into @ib. - * If @unread is NULL, the indexer assumes that the buffer ends on a - * word boundary, and will index all the way to the end of the - * buffer. If @unread is not NULL, and the buffer ends with an - * alphabetic character, the indexer will assume that the buffer has - * been cut off in the middle of a word, and return the number of - * un-indexed bytes at the end of the buffer in *@unread. The caller - * should then read in more data through whatever means it has - * and pass in the unread bytes from the original buffer, followed - * by the new data, on its next call. - * - * Return value: 0 on success, -1 on failure. - **/ -int -ibex_index_buffer (ibex *ib, char *name, char *buffer, - size_t len, size_t *unread) -{ - char *p, *q, *nq, *end, *word; - ibex_file *ibf = get_ibex_file (ib, name); - int wordsiz, cat; - - if (unread) - *unread = 0; - - end = buffer + len; - wordsiz = 20; - word = g_malloc (wordsiz); - - p = buffer; - while (p < end) { - while (p < end) { - cat = utf8_category (p, &q, end); - if (cat != IBEX_NONALPHA) - break; - p = q; - } - if (p == end) { - g_free (word); - return 0; - } else if (cat == IBEX_INVALID) { - errno = EINVAL; - g_free (word); - return -1; - } else if (cat == IBEX_INCOMPLETE) - q = end; - - while (q < end) { - cat = utf8_category (q, &nq, end); - if (cat != IBEX_ALPHA) - break; - q = nq; - } - if (cat == IBEX_INVALID || - (cat == IBEX_INCOMPLETE && !unread)) { - errno = EINVAL; - g_free (word); - return -1; - } else if (cat == IBEX_INCOMPLETE || (q == end && unread)) { - *unread = end - p; - g_free (word); - return 0; - } - - if (wordsiz < q - p + 1) { - wordsiz = q - p + 1; - word = g_realloc (word, wordsiz); - } - normalize_word (p, q, word); - ref_word (ib, ibf, word); - p = q; - } - - g_free (word); - return 0; -} diff --git a/libical/.cvsignore b/libical/.cvsignore deleted file mode 100644 index 41f3513f40..0000000000 --- a/libical/.cvsignore +++ /dev/null @@ -1,19 +0,0 @@ -*.la -*.lo -.libs -Makefile -Makefile.in -aclocal.m4 -config.cache -config.guess -config.h -config.h.in -config.log -config.status -config.sub -configure -libtool -ltconfig -ltmain.sh -stamp-h -stamp-h.in diff --git a/libical/AUTHORS b/libical/AUTHORS deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/libical/CHANGES b/libical/CHANGES deleted file mode 100644 index 953514a9e4..0000000000 --- a/libical/CHANGES +++ /dev/null @@ -1,222 +0,0 @@ - -Version 0.15 ------------- - -Split the storage classess ( icalstore, icalcluster, icalcalendar ) -into a seperate library, libicalss - -Implemented restriction checking in file icalrestrictions.c. The -checking is not complete, but can handle the bulk of the restrictions -described in RFC 2446. - -Created a new value type, METHOD. Changed METHOD property to use the -new value. The METHOD value uses an enumeration. - - -Version 0.14b -------------- - -Implemented parsing of RECUR values, although it does not handle BYDAY -specs with numbers. - -Fixed error in icalparser_next_line that mangled lines longer than the -temp buffer (1024 chars.) The temp buffer is now 80 chars, and it can -handle (apparently) arbitrary length lines - -Fixed severe brokenness in a value, but I forgot which one. - -Cleaned cruft out of the distribution, so the tarfile is smaller. - - -Version 0.14a 14 Jan 00 ------------------------ - -Fixed bug in ROLE parameter -- missing '-' in the text of allowed values - -Fixed bug in X-parameters - -Version 0.14 11 Jan 00 ----------------------- - -Fixed wrong value type for TRIGGER property - -Added Calendar object. Calendar is an aggregate of two stores and two -clusters, and can store all of the inforamation associated with a -calendar. - -icalcomponent_add_property and icalcomponent_add_component will -complain if you try to add a component or property that is already -part of an other component. The *_free routines wil complain if you try -to free a linked component or property. - -More improvements to error handling. - -Parser is much more robust. - -Minor memory enhancements. - -Regression test runs without memory leaks. - -Version 0.13d 21Dec99 ---------------------- - -Seperated perl interface and library - -Added autoconf support - -Scripts that generate derived properties, values and parameters now -change source and header files inline. - -Changed icalstore to cluster all components with DTSTART in a month -into a single file. This should reduce number of file accesses by a -factor of 60. - -Ran code through Purify and fixed memory leaks. - - -Version 0.13 16Nov99 ---------------------- - -Yet more bug fixes! Yeah! - -Added better error handling. The Parser inserts X-LIC-*ERROR -properties to warn of parsing errors. - -The imip source/sink programs in /src/imip is demonstrably functional. - -Version 0.12b 17Oct99 ---------------------- - -More bug fixes, particularily in parse from string routines - -ICal::Store is mostly functional - -This is version is a checkpoint, not a release. - -Version 0.12a 10Oct99 ---------------------- - -Expanded perl interface: - Added 1/2 of Store module - Fixed bugs - Implemeted get_{first,next}_property - -Extended C interface - Made get_{first,next}_property work properly - Fixed bugs - - -This is version is a checkpoint, not a release. - -Version 0.12 27Aug99 --------------------- - -Added a rudimentatry perl interface - -This is version is a checkpoint, not a release. - - -Version 0.11 11Aug99 --------------------- - -Eliminated most use of flex/bison -- all parsing, except for the -values, is done in C. - -Cleaned up memory leaks. Purify claims that I got them all. - -Moved all derived component/prop/param/value code ( in .inc / .h -files) into main files ( icalcomponent.{c,h}, icalproperty.{c,h}, etc/ -) - -Implemented *_clone routines. - -Fixed a lot of bugs. - -Implemented more value types. Still unimplemeneted are BINARY and RECUR - -Included MacOS/Code Warior files from Graham Davison - - -Version 0.10 8Jul99 -------------------- - -Eliminated shift/reduce and reduce/reduce conflicts in the parser. -This version is almost feature complete -- it has the basic structure -for all of the library's functionality, and it will only require -implementing procedure shells and fixing bugs. I think that all of the -hard work is done... - -Version 0.09a,b 3,7 Jul99 -------------------------- - -Various improvements to the parser, added some functionality. The parser code -is mostly complete, and should be fully functional, except for a horde of -bugs. Also added support for X-Properties. - -Version 0.09 25Jun99 --------------------- - -Added a parser in files src/comp/icalitip.{y,l} The lexer is mostly -functional, but the parser is not. - - -Version 0.08 2Jun99 --------------------- - -All files now have MPL licensing - -Implement enough of the code to perform some rudimentary testing - - -Version 0.07 14May99 --------------------- - -Remove all interfaces that construct object from a string - -Moved most code back into comp directory - -Implemented C files for most headers -- usecases.c now links. - -Many improvements to generation scripts. - - - -Version 0.06 25Apr99 --------------------- - -Expanded distribution to include: - Directory structure that can accomodate future expansion - Several levels of Makefiles - This CHANGES file - -Added headers for irip and parse modules - -Added several files with design information - -Added scripts that I had used to generate much of the ical header code. - -Split C headers from CC headers - -Added data for iTIP and iCAL component restrictions in restrictions.csv - -Version 0.05 11Apr99 ----------------------- - -Changes to ical headers - - Added derived Property classes. - - Improved the interface to the derived property and parameter classes - - Added derived component classes. - - Created usecases.c and ccusecases.cc to demonstrate use - - C++ interface compile - - -Version 0.04 5Apr99 -------------------- - -Version 0.02 30Mar99 --------------------- \ No newline at end of file diff --git a/libical/COPYING b/libical/COPYING deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/libical/ChangeLog b/libical/ChangeLog deleted file mode 100644 index baf8b5a41c..0000000000 --- a/libical/ChangeLog +++ /dev/null @@ -1,27 +0,0 @@ -2000-06-08 Ettore Perazzoli - - * src/test/Makefile.am (INCLUDES): Likewise. - - * src/libicalss/Makefile.am (INCLUDES): Use $(srcdir) to allow - builddir != srcdir. - -2000-03-17 Eric Busboom - - * icalstore.c Vastly improved icalstore_test. - -2000-03-16 Eric Busboom - - * icalcluster.c Added compile flag (ICAL_SAFESAVES) to switch how - icalcluster saves files during commits. When the flag is define, - it will write the data to a temorar file and rename the file to - the target file. - - * storage.c Added seterate test suite for sotage components - - * icalparser.c Created parser object, implemented line-oriented - parsering, and made message oriented parsing work in terms f line - oriented parsing. - - * icalparser.c Fixed icalparser_get_line to remove \r in input. - - diff --git a/libical/INSTALL b/libical/INSTALL deleted file mode 100644 index 88e2a5e7d6..0000000000 --- a/libical/INSTALL +++ /dev/null @@ -1,24 +0,0 @@ -Building the library --------------------- - -This distribution is developed on Red Hat Linux 6.0 and usually -compiles on SunOS 5.6 and FreeBSD 2.27. I have reports of success of -previous version on MacOS ( with CodeWarrior ) but I don't know about -any other systems. - -The library is configured with automake. From the root directory, run - - ./configure - -To build all of the Makefiles for your system. If you will be installing the library, you may want to use the --prefix flag to set the directory where the library and header files will be installed. - - ./configure --prefix=/proj/local/ - -If configure runs fine, run "make" to build the library and -"make install" to install it. - -The current version of libical focuses on creating and -manipulating iCal objects. With it, you can parse text representations -of iCal components, add and remove sub-components, properties, -parameters and values, and print the components back out as strings. - diff --git a/libical/MacOS/errno.h b/libical/MacOS/errno.h deleted file mode 100644 index 4be3479b50..0000000000 --- a/libical/MacOS/errno.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 1982, 1986, 1989 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)errno.h 7.13 (Berkeley) 2/19/91 - */ - -#ifdef macintosh -#include -#else -#ifndef KERNEL -extern int errno; /* global error number */ -#endif -#endif - - -#define EPERM 1 /* Operation not permitted */ -/* MSL defines ENOMEM, EACCES, ENOENT, ENOSYS. We give in. */ -#ifndef ENOENT -#define ENOENT 2 /* No such file or directory */ -#endif -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* Input/output error */ -#define ENXIO 6 /* Device not configured */ -#define E2BIG 7 /* Argument list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file descriptor */ -#define ECHILD 10 /* No child processes */ -#define EDEADLK 11 /* Resource deadlock avoided */ - /* 11 was EAGAIN */ -#ifndef ENOMEM -#define ENOMEM 12 /* Cannot allocate memory */ -#define EACCES 13 /* Permission denied */ -#endif -#define EFAULT 14 /* Bad address */ -#ifndef _POSIX_SOURCE -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device busy */ -#endif -#define EEXIST 17 /* File exists */ -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* Operation not supported by device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* Too many open files in system */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Inappropriate ioctl for device */ -#ifndef _POSIX_SOURCE -#define ETXTBSY 26 /* Text file busy */ -#endif -#define EFBIG 27 /* File too large */ -#define ENOSPC 28 /* No space left on device */ -#define ESPIPE 29 /* Illegal seek */ -#define EROFS 30 /* Read-only file system */ -#define EMLINK 31 /* Too many links */ -#define EPIPE 32 /* Broken pipe */ - -#ifndef __MWERKS__ -/* math software */ -#define EDOM 33 /* Numerical argument out of domain */ -#define ERANGE 34 /* Result too large */ -#endif - -/* non-blocking and interrupt i/o */ -#if defined(macintosh) -#ifndef EAGAIN -#define EAGAIN 11 -#endif -#else -#define EAGAIN 35 /* Resource temporarily unavailable */ -#endif -#define EWOULDBLOCK EAGAIN /* Operation would block */ -#ifndef _POSIX_SOURCE -/* Did I tell that MSL also occupies errnos 33-40? We give in. */ -#if ENOMEM==37 -#define EINPROGRESS 136 /* Operation now in progress */ -#define EALREADY 137 /* Operation already in progress */ - -/* ipc/network software -- argument errors */ -#define ENOTSOCK 138 /* Socket operation on non-socket */ -#define EDESTADDRREQ 139 /* Destination address required */ -#define EMSGSIZE 140 /* Message too long */ -#else -#define EINPROGRESS 36 /* Operation now in progress */ -#define EALREADY 37 /* Operation already in progress */ - -/* ipc/network software -- argument errors */ -#define ENOTSOCK 38 /* Socket operation on non-socket */ -#define EDESTADDRREQ 39 /* Destination address required */ -#define EMSGSIZE 40 /* Message too long */ -#endif -#define EPROTOTYPE 41 /* Protocol wrong type for socket */ -#define ENOPROTOOPT 42 /* Protocol not available */ -#define EPROTONOSUPPORT 43 /* Protocol not supported */ -#define ESOCKTNOSUPPORT 44 /* Socket type not supported */ -#define EOPNOTSUPP 45 /* Operation not supported on socket */ -#define EPFNOSUPPORT 46 /* Protocol family not supported */ -#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */ -#define EADDRINUSE 48 /* Address already in use */ -#define EADDRNOTAVAIL 49 /* Can't assign requested address */ - -/* ipc/network software -- operational errors */ -#define ENETDOWN 50 /* Network is down */ -#define ENETUNREACH 51 /* Network is unreachable */ -#define ENETRESET 52 /* Network dropped connection on reset */ -#define ECONNABORTED 53 /* Software caused connection abort */ -#define ECONNRESET 54 /* Connection reset by peer */ -#define ENOBUFS 55 /* No buffer space available */ -#define EISCONN 56 /* Socket is already connected */ -#define ENOTCONN 57 /* Socket is not connected */ -#define ESHUTDOWN 58 /* Can't send after socket shutdown */ -#define ETOOMANYREFS 59 /* Too many references: can't splice */ -#define ETIMEDOUT 60 /* Connection timed out */ -#define ECONNREFUSED 61 /* Connection refused */ - -#define ELOOP 62 /* Too many levels of symbolic links */ -#endif /* _POSIX_SOURCE */ -#define ENAMETOOLONG 63 /* File name too long */ - -/* should be rearranged */ -#ifndef _POSIX_SOURCE -#define EHOSTDOWN 64 /* Host is down */ -#define EHOSTUNREACH 65 /* No route to host */ -#endif /* _POSIX_SOURCE */ -#define ENOTEMPTY 66 /* Directory not empty */ - -/* quotas & mush */ -#ifndef _POSIX_SOURCE -#define EPROCLIM 67 /* Too many processes */ -#define EUSERS 68 /* Too many users */ -#define EDQUOT 69 /* Disc quota exceeded */ - -/* Network File System */ -#define ESTALE 70 /* Stale NFS file handle */ -#define EREMOTE 71 /* Too many levels of remote in path */ -#define EBADRPC 72 /* RPC struct is bad */ -#define ERPCMISMATCH 73 /* RPC version wrong */ -#define EPROGUNAVAIL 74 /* RPC prog. not avail */ -#define EPROGMISMATCH 75 /* Program version wrong */ -#define EPROCUNAVAIL 76 /* Bad procedure for program */ -#endif /* _POSIX_SOURCE */ - -#define ENOLCK 77 /* No locks available */ - -#ifndef ENOSYS -#define ENOSYS 78 /* Function not implemented */ -#endif - -#define EFTYPE 79 /* Inappropriate file type or format */ - -#ifdef KERNEL -/* pseudo-errors returned inside kernel to modify return to process */ -#define ERESTART -1 /* restart syscall */ -#define EJUSTRETURN -2 /* don't modify regs, just return */ -#endif diff --git a/libical/MacOS/libical.mcp b/libical/MacOS/libical.mcp deleted file mode 100644 index 1c0ec4a35b..0000000000 Binary files a/libical/MacOS/libical.mcp and /dev/null differ diff --git a/libical/MacOS/libical.mcp.exp b/libical/MacOS/libical.mcp.exp deleted file mode 100644 index 07c84e0efc..0000000000 --- a/libical/MacOS/libical.mcp.exp +++ /dev/null @@ -1 +0,0 @@ -icalvalue_get_utcoffset icalvalue_set_utcoffset icalvalue_new_utcoffset icalvalue_get_uri icalvalue_set_uri icalvalue_new_uri icalvalue_get_trigger icalvalue_set_trigger icalvalue_new_trigger icalvalue_get_time icalvalue_set_time icalvalue_new_time icalvalue_get_text icalvalue_set_text icalvalue_new_text icalvalue_get_recur icalvalue_set_recur icalvalue_new_recur icalvalue_get_period icalvalue_set_period icalvalue_new_period icalvalue_get_integer icalvalue_set_integer icalvalue_new_integer icalvalue_get_geo icalvalue_set_geo icalvalue_new_geo icalvalue_get_float icalvalue_set_float icalvalue_new_float icalvalue_get_duration icalvalue_set_duration icalvalue_new_duration icalvalue_get_datetimeperiod icalvalue_set_datetimeperiod icalvalue_new_datetimeperiod icalvalue_get_datetimedate icalvalue_set_datetimedate icalvalue_new_datetimedate icalvalue_get_datetime icalvalue_set_datetime icalvalue_new_datetime icalvalue_get_date icalvalue_set_date icalvalue_new_date icalvalue_get_caladdress icalvalue_set_caladdress icalvalue_new_caladdress icalvalue_get_boolean icalvalue_set_boolean icalvalue_new_boolean icalvalue_get_binary icalvalue_set_binary icalvalue_new_binary icalvalue_get_attach icalvalue_set_attach icalvalue_new_attach icalvalue_isa_value icalvalue_isa icalvalue_as_ical_string icalvalue_trigger_as_ical_string icalvalue_period_as_ical_string icalvalue_datetimeperiod_as_ical_string icalvalue_recur_as_ical_string icalvalue_geo_as_ical_string icalvalue_float_as_ical_string icalvalue_datetimedate_as_ical_string icalvalue_datetime_as_ical_string icalvalue_date_as_ical_string icalvalue_time_as_ical_string icalvalue_duration_as_ical_string icalvalue_attach_as_ical_string icalvalue_string_as_ical_string icalvalue_int_as_ical_string icalvalue_binary_as_ical_string icalvalue_is_valid icalvalue_free icalvalue_new icalvalue_new_impl icalproperty_get_action icalproperty_set_action icalproperty_vanew_action icalproperty_new_action icalproperty_get_due icalproperty_set_due icalproperty_vanew_due icalproperty_new_due icalproperty_get_dtstamp icalproperty_set_dtstamp icalproperty_vanew_dtstamp icalproperty_new_dtstamp icalproperty_get_completed icalproperty_set_completed icalproperty_vanew_completed icalproperty_new_completed icalproperty_get_geo icalproperty_set_geo icalproperty_vanew_geo icalproperty_new_geo icalproperty_get_created icalproperty_set_created icalproperty_vanew_created icalproperty_new_created icalproperty_get_calscale icalproperty_set_calscale icalproperty_vanew_calscale icalproperty_new_calscale icalproperty_get_percentcomplete icalproperty_set_percentcomplete icalproperty_vanew_percentcomplete icalproperty_new_percentcomplete icalproperty_get_exrule icalproperty_set_exrule icalproperty_vanew_exrule icalproperty_new_exrule icalproperty_get_attach icalproperty_set_attach icalproperty_vanew_attach icalproperty_new_attach icalproperty_get_url icalproperty_set_url icalproperty_vanew_url icalproperty_new_url icalproperty_get_rdate icalproperty_set_rdate icalproperty_vanew_rdate icalproperty_new_rdate icalproperty_get_tzname icalproperty_set_tzname icalproperty_vanew_tzname icalproperty_new_tzname icalproperty_get_dtend icalproperty_set_dtend icalproperty_vanew_dtend icalproperty_new_dtend icalproperty_get_summary icalproperty_set_summary icalproperty_vanew_summary icalproperty_new_summary icalproperty_get_recurrenceid icalproperty_set_recurrenceid icalproperty_vanew_recurrenceid icalproperty_new_recurrenceid icalproperty_get_dtstart icalproperty_set_dtstart icalproperty_vanew_dtstart icalproperty_new_dtstart icalproperty_get_freebusy icalproperty_set_freebusy icalproperty_vanew_freebusy icalproperty_new_freebusy icalproperty_get_priority icalproperty_set_priority icalproperty_vanew_priority icalproperty_new_priority icalproperty_get_repeat icalproperty_set_repeat icalproperty_vanew_repeat icalproperty_new_repeat icalproperty_get_tzurl icalproperty_set_tzurl icalproperty_vanew_tzurl icalproperty_new_tzurl icalproperty_get_resources icalproperty_set_resources icalproperty_vanew_resources icalproperty_new_resources icalproperty_get_tzid icalproperty_set_tzid icalproperty_vanew_tzid icalproperty_new_tzid icalproperty_get_exdate icalproperty_set_exdate icalproperty_vanew_exdate icalproperty_new_exdate icalproperty_get_requeststatus icalproperty_set_requeststatus icalproperty_vanew_requeststatus icalproperty_new_requeststatus icalproperty_get_location icalproperty_set_location icalproperty_vanew_location icalproperty_new_location icalproperty_get_sequence icalproperty_set_sequence icalproperty_vanew_sequence icalproperty_new_sequence icalproperty_get_transp icalproperty_set_transp icalproperty_vanew_transp icalproperty_new_transp icalproperty_get_tzoffsetto icalproperty_set_tzoffsetto icalproperty_vanew_tzoffsetto icalproperty_new_tzoffsetto icalproperty_get_x_name icalproperty_get_x icalproperty_set_x_name icalproperty_set_x icalproperty_vanew_x icalproperty_new_x icalproperty_get_class icalproperty_set_class icalproperty_vanew_class icalproperty_new_class icalproperty_get_trigger icalproperty_set_trigger icalproperty_vanew_trigger icalproperty_new_trigger icalproperty_get_comment icalproperty_set_comment icalproperty_vanew_comment icalproperty_new_comment icalproperty_get_organizer icalproperty_set_organizer icalproperty_vanew_organizer icalproperty_new_organizer icalproperty_get_relatedto icalproperty_set_relatedto icalproperty_vanew_relatedto icalproperty_new_relatedto icalproperty_get_contact icalproperty_set_contact icalproperty_vanew_contact icalproperty_new_contact icalproperty_get_attendee icalproperty_set_attendee icalproperty_vanew_attendee icalproperty_new_attendee icalproperty_get_rrule icalproperty_set_rrule icalproperty_vanew_rrule icalproperty_new_rrule icalproperty_get_tzoffsetfrom icalproperty_set_tzoffsetfrom icalproperty_vanew_tzoffsetfrom icalproperty_new_tzoffsetfrom icalproperty_get_version icalproperty_set_version icalproperty_vanew_version icalproperty_new_version icalproperty_get_categories icalproperty_set_categories icalproperty_vanew_categories icalproperty_new_categories icalproperty_get_description icalproperty_set_description icalproperty_vanew_description icalproperty_new_description icalproperty_get_status icalproperty_set_status icalproperty_vanew_status icalproperty_new_status icalproperty_get_prodid icalproperty_set_prodid icalproperty_vanew_prodid icalproperty_new_prodid icalproperty_get_uid icalproperty_set_uid icalproperty_vanew_uid icalproperty_new_uid icalproperty_get_lastmodified icalproperty_set_lastmodified icalproperty_vanew_lastmodified icalproperty_new_lastmodified icalproperty_get_method icalproperty_set_method icalproperty_vanew_method icalproperty_new_method icalproperty_get_value icalproperty_set_value icalproperty_get_next_parameter icalproperty_get_first_parameter icalproperty_count_parameters icalproperty_remove_parameter icalproperty_add_parameter icalproperty_isa_property icalproperty_isa icalproperty_as_ical_string icalproperty_free icalproperty_new icalproperty_new_impl icalproperty_add_parameters icalparameter_set_x icalparameter_get_x icalparameter_new_x icalparameter_set_value icalparameter_get_value icalparameter_new_value icalparameter_set_tzid icalparameter_get_tzid icalparameter_new_tzid icalparameter_set_sentby icalparameter_get_sentby icalparameter_new_sentby icalparameter_set_rsvp icalparameter_get_rsvp icalparameter_new_rsvp icalparameter_set_role icalparameter_get_role icalparameter_new_role icalparameter_set_reltype icalparameter_get_reltype icalparameter_new_reltype icalparameter_set_related icalparameter_get_related icalparameter_new_related icalparameter_set_range icalparameter_get_range icalparameter_new_range icalparameter_set_partstat icalparameter_get_partstat icalparameter_new_partstat icalparameter_set_member icalparameter_get_member icalparameter_new_member icalparameter_set_language icalparameter_get_language icalparameter_new_language icalparameter_set_fmttype icalparameter_get_fmttype icalparameter_new_fmttype icalparameter_set_fbtype icalparameter_get_fbtype icalparameter_new_fbtype icalparameter_set_encoding icalparameter_get_encoding icalparameter_new_encoding icalparameter_set_dir icalparameter_get_dir icalparameter_new_dir icalparameter_set_delegatedto icalparameter_get_delegatedto icalparameter_new_delegatedto icalparameter_set_delegatedfrom icalparameter_get_delegatedfrom icalparameter_new_delegatedfrom icalparameter_set_cutype icalparameter_get_cutype icalparameter_new_cutype icalparameter_set_cn icalparameter_get_cn icalparameter_new_cn icalparameter_set_altrep icalparameter_get_altrep icalparameter_new_altrep icalparameter_get_xname icalparameterset_xname icalparameter_isa_parameter icalparameter_isa icalparameter_is_valid icalparameter_as_ical_string icalparameter_free icalparameter_new icalparameter_new_impl icalenum_string_to_component_kind icalenum_component_kind_to_string icalenum_value_kind_by_prop icalenum_string_to_parameter_kind icalenum_parameter_kind_to_string icalenum_string_to_property_kind icalenum_property_kind_to_string icalcomponent_get_component icalcomponent_get_next_component icalcomponent_get_first_component icalcomponent_count_components icalcomponent_remove_component icalcomponent_add_component icalcomponent_get_properties icalcomponent_get_next_property icalcomponent_get_first_property icalcomponent_count_properties icalcomponent_remove_property icalcomponent_add_property icalcomponent_isa_component icalcomponent_isa icalcomponent_is_valid icalcomponent_as_ical_string icalcomponent_free icalcomponent_vanew icalcomponent_new icalcomponent_new_impl icalcomponent_add_children #pvl_list_count #pvl_elem_count #pvl_apply #pvl_data #pvl_tail #pvl_head #pvl_prior #pvl_next #pvl_count #pvl_clear #pvl_find_next #pvl_find #pvl_remove #pvl_insert_before #pvl_insert_after #pvl_insert_ordered #pvl_pop #pvl_push #pvl_shift #pvl_unshift #pvl_new_element #pvl_newlist #strdup icalrestriction_records icalrestriction_is_parameter_allowed icalrestriction_get_component_restriction icalrestriction_get_property_restriction icalerrno icalerror_set_errno icalerror_clear_errno buffer_ring initialized buffer_pos icalmemory_append_string icalmemory_free_buffer icalmemory_resize_buffer icalmemory_new_buffer icalmemory_free_tmp_buffer icalmemory_resize_tmp_buffer icalmemory_new_tmp_buffer #__msipl_rd__3std # std::__msipl_rd #__dt__Q23std18__random_generatorFv # std::__random_generator::~__random_generator() #seed__Q23std18__random_generatorFUl # std::__random_generator::seed(unsigned long) #setfill__3stdFi # std::setfill(int) #setbase__3stdFi # std::setbase(int) #setiosflags__3stdFl # std::setiosflags(long) #resetiosflags__3stdFl # std::resetiosflags(long) #ffill__3stdFRQ23std35basic_ios>w # std::ffill(std::basic_ios>&,wchar_t) #ffill__3stdFRQ23std35basic_ios>i # std::ffill(std::basic_ios>&,int) #setw__3stdFi # std::setw(int) #setprecision__3stdFi # std::setprecision(int) #__vt__Q23std39basic_istream> # std::basic_istream>::__vt #__vt__Q23std35basic_ios> # std::basic_ios>::__vt #__vt__Q23std39basic_ostream> # std::basic_ostream>::__vt #__vt__Q23std39basic_filebuf> # std::basic_filebuf>::__vt #__vt__Q23std41basic_streambuf> # std::basic_streambuf>::__vt #__vt__Q23std8bad_cast # std::bad_cast::__vt #__vt__Q23std9exception # std::exception::__vt #cerr__3std # std::cerr #clog__3std # std::clog #cout__3std # std::cout #cin__3std # std::cin #index__Q23std8ios_base # std::ios_base::index #heap_size__Q23std14base_allocator # std::base_allocator::heap_size #end_free__Q23std14base_allocator # std::base_allocator::end_free #start_free__Q23std14base_allocator # std::base_allocator::start_free #free_list__Q23std14base_allocator # std::base_allocator::free_list #init_cnt__Q33std8ios_base4Init # std::ios_base::Init::init_cnt #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #what__Q23std9exceptionCFv # std::exception::what() const #what__Q23std8bad_castCFv # std::bad_cast::what() const #__dt__Q23std9exceptionFv # std::exception::~exception() #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #__dt__Q23std8bad_castFv # std::bad_cast::~bad_cast() #init__Q23std35basic_ios>FPQ23std41basic_streambuf> # std::basic_ios>::init(std::basic_streambuf>*) #always_noconv__Q23std23_Generic_codecvtCFv # std::_Generic_codecvt::always_noconv() const #out__Q23std23_Generic_codecvtCFRiPCcPCcRPCcPcPcRPc # std::_Generic_codecvt::out(int&,const char*,const char*,const char*&,char*,char*,char*&) const #__ct__Q23std39basic_ostream>FPQ23std41basic_streambuf> # std::basic_ostream>::basic_ostream(std::basic_streambuf>*) #__ct__Q23std39basic_istream>FPQ23std41basic_streambuf> # std::basic_istream>::basic_istream(std::basic_streambuf>*) #__dt__Q33std39basic_ostream>6sentryFv # std::basic_ostream>::sentry::~sentry() #flush__Q23std39basic_ostream>Fv # std::basic_ostream>::flush() #close__Q23std39basic_filebuf>Fv # std::basic_filebuf>::close() #overflow__Q23std41basic_streambuf>Fi # std::basic_streambuf>::overflow(int) #xsputn__Q23std41basic_streambuf>FPCci # std::basic_streambuf>::xsputn(const char*,int) #pbackfail__Q23std41basic_streambuf>Fi # std::basic_streambuf>::pbackfail(int) #uflow__Q23std41basic_streambuf>Fv # std::basic_streambuf>::uflow() #underflow__Q23std41basic_streambuf>Fv # std::basic_streambuf>::underflow() #xsgetn__Q23std41basic_streambuf>FPci # std::basic_streambuf>::xsgetn(char*,int) #showmanyc__Q23std41basic_streambuf>Fv # std::basic_streambuf>::showmanyc() #sync__Q23std41basic_streambuf>Fv # std::basic_streambuf>::sync() #seekpos__Q23std41basic_streambuf>FQ23std7fposs # std::basic_streambuf>::seekpos(std::fpos,short) #seekoff__Q23std41basic_streambuf>FlQ33std8ios_base7seekdirs # std::basic_streambuf>::seekoff(long,std::ios_base::seekdir,short) #setbuf__Q23std41basic_streambuf>FPci # std::basic_streambuf>::setbuf(char*,int) #imbue__Q23std41basic_streambuf>FRCQ23std6locale # std::basic_streambuf>::imbue(const std::locale&) #xsputn__Q23std39basic_filebuf>FPCci # std::basic_filebuf>::xsputn(const char*,int) #xsgetn__Q23std39basic_filebuf>FPci # std::basic_filebuf>::xsgetn(char*,int) #showmanyc__Q23std39basic_filebuf>Fv # std::basic_filebuf>::showmanyc() #imbue__Q23std39basic_filebuf>FRCQ23std6locale # std::basic_filebuf>::imbue(const std::locale&) #uflow__Q23std39basic_filebuf>Fv # std::basic_filebuf>::uflow() #sync__Q23std39basic_filebuf>Fv # std::basic_filebuf>::sync() #setbuf__Q23std39basic_filebuf>FPci # std::basic_filebuf>::setbuf(char*,int) #seekpos__Q23std39basic_filebuf>FQ23std7fposs # std::basic_filebuf>::seekpos(std::fpos,short) #seekoff__Q23std39basic_filebuf>FlQ33std8ios_base7seekdirs # std::basic_filebuf>::seekoff(long,std::ios_base::seekdir,short) #underflow__Q23std39basic_filebuf>Fv # std::basic_filebuf>::underflow() #pbackfail__Q23std39basic_filebuf>Fi # std::basic_filebuf>::pbackfail(int) #overflow__Q23std39basic_filebuf>Fi # std::basic_filebuf>::overflow(int) #@8@68@__dt__Q23std39basic_ostream>Fv #__dt__Q23std35basic_ios>Fv # std::basic_ios>::~basic_ios() #@12@68@__dt__Q23std39basic_istream>Fv #__dt__Q23std39basic_istream>Fv # std::basic_istream>::~basic_istream() #__dt__Q23std39basic_ostream>Fv # std::basic_ostream>::~basic_ostream() #__dt__Q33std8ios_base4InitFv # std::ios_base::Init::~Init() #__dt__Q23std41basic_streambuf>Fv # std::basic_streambuf>::~basic_streambuf() #__ct__Q33std8ios_base4InitFv # std::ios_base::Init::Init() #__dt__Q23std39basic_filebuf>Fv # std::basic_filebuf>::~basic_filebuf() #__mask_map__3std # std::__mask_map #__vt__Q23std15moneypunct # std::moneypunct::__vt #__vt__Q23std15moneypunct # std::moneypunct::__vt #__vt__Q23std15moneypunct # std::moneypunct::__vt #__vt__Q23std15moneypunct # std::moneypunct::__vt #__vt__Q23std12timepunct # std::timepunct::__vt #__vt__Q23std12timepunct # std::timepunct::__vt #__vt__Q23std11numpunct # std::numpunct::__vt #__vt__Q23std11numpunct # std::numpunct::__vt #__vt__Q23std14codecvt # std::codecvt::__vt #__vt__Q23std14codecvt # std::codecvt::__vt #__vt__Q23std15ctype_byname # std::ctype_byname::__vt #__vt__Q23std8ctype # std::ctype::__vt #__vt__Q23std8ctype # std::ctype::__vt #__vt__Q33std6locale5facet # std::locale::facet::__vt #__vt__Q23std13runtime_error # std::runtime_error::__vt #__vt__Q23std12out_of_range # std::out_of_range::__vt #__vt__Q23std12length_error # std::length_error::__vt #__vt__Q23std11logic_error # std::logic_error::__vt #__vt__Q23std9bad_alloc # std::bad_alloc::__vt #__vt__Q23std23_Generic_codecvt # std::_Generic_codecvt::__vt #__vt__Q23std23_Generic_codecvt # std::_Generic_codecvt::__vt #__vt__Q23std64num_get>> # std::num_get>>::__vt #__vt__Q23std64num_get>> # std::num_get>>::__vt #__vt__Q23std64num_put>> # std::num_put>>::__vt #__vt__Q23std64num_put>> # std::num_put>>::__vt #__vt__Q23std20_Generic_numpunct # std::_Generic_numpunct::__vt #__vt__Q23std20_Generic_numpunct # std::_Generic_numpunct::__vt #__vt__Q23std10collate # std::collate::__vt #__vt__Q23std10collate # std::collate::__vt #__vt__Q23std21_Generic_timepunct # std::_Generic_timepunct::__vt #__vt__Q23std21_Generic_timepunct # std::_Generic_timepunct::__vt #__vt__Q23std65time_get>> # std::time_get>>::__vt #__vt__Q23std65time_get>> # std::time_get>>::__vt #__vt__Q23std65time_put>> # std::time_put>>::__vt #__vt__Q23std65time_put>> # std::time_put>>::__vt #__vt__Q23std66money_get>> # std::money_get>>::__vt #__vt__Q23std66money_get>> # std::money_get>>::__vt #__vt__Q23std66money_put>> # std::money_put>>::__vt #__vt__Q23std66money_put>> # std::money_put>>::__vt #__vt__Q23std24_Generic_moneypunct # std::_Generic_moneypunct::__vt #__vt__Q23std24_Generic_moneypunct # std::_Generic_moneypunct::__vt #__vt__Q23std24_Generic_moneypunct # std::_Generic_moneypunct::__vt #__vt__Q23std24_Generic_moneypunct # std::_Generic_moneypunct::__vt #id__Q23std64num_get>> # std::num_get>>::id #__init__id__Q23std64num_get>> #id__Q23std64num_get>> # std::num_get>>::id #__init__id__Q23std64num_get>> #id__Q23std64num_put>> # std::num_put>>::id #__init__id__Q23std64num_put>> #id__Q23std64num_put>> # std::num_put>>::id #__init__id__Q23std64num_put>> #id__Q23std10collate # std::collate::id #__init__id__Q23std10collate #id__Q23std10collate # std::collate::id #__init__id__Q23std10collate #id__Q23std65time_get>> # std::time_get>>::id #__init__id__Q23std65time_get>> #id__Q23std65time_get>> # std::time_get>>::id #__init__id__Q23std65time_get>> #id__Q23std65time_put>> # std::time_put>>::id #__init__id__Q23std65time_put>> #id__Q23std65time_put>> # std::time_put>>::id #__init__id__Q23std65time_put>> #id__Q23std66money_get>> # std::money_get>>::id #__init__id__Q23std66money_get>> #id__Q23std66money_get>> # std::money_get>>::id #__init__id__Q23std66money_get>> #id__Q23std66money_put>> # std::money_put>>::id #__init__id__Q23std66money_put>> #id__Q23std66money_put>> # std::money_put>>::id #__init__id__Q23std66money_put>> #id__Q23std15moneypunct # std::moneypunct::id #__init__id__Q23std15moneypunct #id__Q23std15moneypunct # std::moneypunct::id #__init__id__Q23std15moneypunct #id__Q23std15moneypunct # std::moneypunct::id #__init__id__Q23std15moneypunct #id__Q23std15moneypunct # std::moneypunct::id #__init__id__Q23std15moneypunct #id__Q23std12timepunct # std::timepunct::id #__init__id__Q23std12timepunct #id__Q23std12timepunct # std::timepunct::id #__init__id__Q23std12timepunct #id__Q23std11numpunct # std::numpunct::id #__init__id__Q23std11numpunct #id__Q23std11numpunct # std::numpunct::id #__init__id__Q23std11numpunct #id__Q23std14codecvt # std::codecvt::id #__init__id__Q23std14codecvt #id__Q23std14codecvt # std::codecvt::id #__init__id__Q23std14codecvt #id__Q23std8ctype # std::ctype::id #__init__id__Q23std8ctype #id__Q23std8ctype # std::ctype::id #__init__id__Q23std8ctype #global_s__Q23std6locale # std::locale::global_s #id_count_s__Q33std6locale2id # std::locale::id::id_count_s #insert__Q23std32vector>FPPvUlRCPv # std::vector>::insert(void**,unsigned long,void*const&) #erase__Q23std32vector>FPPvPPv # std::vector>::erase(void**,void**) #do_assign__Q23std32vector>FPCPvPCPvQ23std20forward_iterator_tag # std::vector>::do_assign(void*const*,void*const*,std::forward_iterator_tag) #resize__Q23std32vector>FUlPv # std::vector>::resize(unsigned long,void*) #compare__Q23std59basic_string,Q23std12allocator>CFUlUlPCcUl # std::basic_string, std::allocator>::compare(unsigned long,unsigned long,const char*,unsigned long) const #max_size__Q23std13allocatorCFv # std::allocator::max_size() const #max_size__Q23std12allocatorCFv # std::allocator::max_size() const #max_size__Q23std12allocatorCFv # std::allocator::max_size() const #init__Q23std59basic_string,Q23std12allocator>FPCcPCcRCQ23std12allocatorQ23std26random_access_iterator_tag # std::basic_string, std::allocator>::init(const char*,const char*,const std::allocator&,std::random_access_iterator_tag) #append__Q23std59basic_string,Q23std12allocator>FRCQ23std59basic_string,Q23std12allocator>UlUl # std::basic_string, std::allocator>::append(const std::basic_string, std::allocator>&,unsigned long,unsigned long) #init__Q23std59basic_string,Q23std12allocator>FPCwPCwRCQ23std12allocatorQ23std26random_access_iterator_tag # std::basic_string, std::allocator>::init(const wchar_t*,const wchar_t*,const std::allocator&,std::random_access_iterator_tag) #__dt__Q23std66money_put>>Fv # std::money_put>>::~money_put() #__dt__Q23std66money_put>>Fv # std::money_put>>::~money_put() #__dt__Q23std66money_get>>Fv # std::money_get>>::~money_get() #__dt__Q23std66money_get>>Fv # std::money_get>>::~money_get() #__dt__Q23std65time_put>>Fv # std::time_put>>::~time_put() #__dt__Q23std65time_put>>Fv # std::time_put>>::~time_put() #__dt__Q23std65time_get>>Fv # std::time_get>>::~time_get() #__dt__Q23std65time_get>>Fv # std::time_get>>::~time_get() #__dt__Q23std10collateFv # std::collate::~collate() #__dt__Q23std10collateFv # std::collate::~collate() #__dt__Q23std64num_put>>Fv # std::num_put>>::~num_put() #__dt__Q23std64num_put>>Fv # std::num_put>>::~num_put() #__dt__Q23std64num_get>>Fv # std::num_get>>::~num_get() #__dt__Q23std64num_get>>Fv # std::num_get>>::~num_get() #what__Q23std9bad_allocCFv # std::bad_alloc::what() const #what__Q23std11logic_errorCFv # std::logic_error::what() const #replace>>>__Q33std6locale3impFRCQ23std65time_put>> # std::locale::imp::replace>>>(const std::time_put>>&) #replace>>>__Q33std6locale3impFRCQ23std65time_get>> # std::locale::imp::replace>>>(const std::time_get>>&) #replace>__Q33std6locale3impFRCQ23std12timepunct # std::locale::imp::replace>(const std::timepunct&) #replace>>>__Q33std6locale3impFRCQ23std65time_put>> # std::locale::imp::replace>>>(const std::time_put>>&) #replace>>>__Q33std6locale3impFRCQ23std65time_get>> # std::locale::imp::replace>>>(const std::time_get>>&) #replace>__Q33std6locale3impFRCQ23std12timepunct # std::locale::imp::replace>(const std::timepunct&) #replace>>>__Q33std6locale3impFRCQ23std64num_put>> # std::locale::imp::replace>>>(const std::num_put>>&) #replace>>>__Q33std6locale3impFRCQ23std64num_get>> # std::locale::imp::replace>>>(const std::num_get>>&) #replace>__Q33std6locale3impFRCQ23std11numpunct # std::locale::imp::replace>(const std::numpunct&) #replace>>>__Q33std6locale3impFRCQ23std64num_put>> # std::locale::imp::replace>>>(const std::num_put>>&) #replace>>>__Q33std6locale3impFRCQ23std64num_get>> # std::locale::imp::replace>>>(const std::num_get>>&) #replace>__Q33std6locale3impFRCQ23std11numpunct # std::locale::imp::replace>(const std::numpunct&) #replace>>>__Q33std6locale3impFRCQ23std66money_put>> # std::locale::imp::replace>>>(const std::money_put>>&) #replace>>>__Q33std6locale3impFRCQ23std66money_get>> # std::locale::imp::replace>>>(const std::money_get>>&) #replace>__Q33std6locale3impFRCQ23std15moneypunct # std::locale::imp::replace>(const std::moneypunct&) #replace>__Q33std6locale3impFRCQ23std15moneypunct # std::locale::imp::replace>(const std::moneypunct&) #replace>>>__Q33std6locale3impFRCQ23std66money_put>> # std::locale::imp::replace>>>(const std::money_put>>&) #replace>>>__Q33std6locale3impFRCQ23std66money_get>> # std::locale::imp::replace>>>(const std::money_get>>&) #replace>__Q33std6locale3impFRCQ23std15moneypunct # std::locale::imp::replace>(const std::moneypunct&) #replace>__Q33std6locale3impFRCQ23std15moneypunct # std::locale::imp::replace>(const std::moneypunct&) #replace>__Q33std6locale3impFRCQ23std14codecvt # std::locale::imp::replace>(const std::codecvt&) #replace>__Q33std6locale3impFRCQ23std8ctype # std::locale::imp::replace>(const std::ctype&) #replace>__Q33std6locale3impFRCQ23std14codecvt # std::locale::imp::replace>(const std::codecvt&) #replace>__Q33std6locale3impFRCQ23std8ctype # std::locale::imp::replace>(const std::ctype&) #replace>__Q33std6locale3impFRCQ23std10collate # std::locale::imp::replace>(const std::collate&) #replace>__Q33std6locale3impFRCQ23std10collate # std::locale::imp::replace>(const std::collate&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>>>__3stdFRCQ23std6locale # std::use_facet>>>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #use_facet>__3stdFRCQ23std6locale # std::use_facet>(const std::locale&) #__ct__Q23std32vector>FRCQ23std32vector> # std::vector>::vector(const std::vector>&) #__as__Q23std32vector>FRCQ23std32vector> # std::vector>::operator =(const std::vector>&) #init__Q23std32vector>FUlRCPv # std::vector>::init(unsigned long,void*const&) #__ne,Q23std12allocator>__3stdFRCQ23std59basic_string,Q23std12allocator>PCc # std::operator !=, std::allocator>(const std::basic_string, std::allocator>&,const char*) #__pl,Q23std12allocator>__3stdFRCQ23std59basic_string,Q23std12allocator>RCQ23std59basic_string,Q23std12allocator> # std::operator +, std::allocator>(const std::basic_string, std::allocator>&,const std::basic_string, std::allocator>&) #__ct__Q33std59basic_string,Q23std12allocator>9CharArrayFRCQ23std12allocatorUl # std::basic_string, std::allocator>::CharArray::CharArray(const std::allocator&,unsigned long) #__dt__Q23std40_EmptyMemberOpt,Ul>Fv # std::_EmptyMemberOpt, unsigned long>::~_EmptyMemberOpt() #__ct__Q33std59basic_string,Q23std12allocator>9CharArrayFRCQ33std59basic_string,Q23std12allocator>9CharArray # std::basic_string, std::allocator>::CharArray::CharArray(const std::basic_string, std::allocator>::CharArray&) #get_allocator__Q23std59basic_string,Q23std12allocator>CFv # std::basic_string, std::allocator>::get_allocator() const #__ct__Q23std59basic_string,Q23std12allocator>FRCQ23std59basic_string,Q23std12allocator>UlUl # std::basic_string, std::allocator>::basic_string(const std::basic_string, std::allocator>&,unsigned long,unsigned long) #__ct__Q23std59basic_string,Q23std12allocator>FPCwRCQ23std12allocator # std::basic_string, std::allocator>::basic_string(const wchar_t*,const std::allocator&) #init__Q23std59basic_string,Q23std12allocator>FUlwRCQ23std12allocator # std::basic_string, std::allocator>::init(unsigned long,wchar_t,const std::allocator&) #change_size__Q23std59basic_string,Q23std12allocator>FUlb # std::basic_string, std::allocator>::change_size(unsigned long,bool) #__ct__Q33std59basic_string,Q23std12allocator>9CharArrayFRCQ23std12allocatorUl # std::basic_string, std::allocator>::CharArray::CharArray(const std::allocator&,unsigned long) #get_allocator__Q23std59basic_string,Q23std12allocator>CFv # std::basic_string, std::allocator>::get_allocator() const #__ct__Q23std59basic_string,Q23std12allocator>FRCQ23std59basic_string,Q23std12allocator>UlUl # std::basic_string, std::allocator>::basic_string(const std::basic_string, std::allocator>&,unsigned long,unsigned long) #__ct__Q23std59basic_string,Q23std12allocator>FPCcRCQ23std12allocator # std::basic_string, std::allocator>::basic_string(const char*,const std::allocator&) #__dt__Q23std40_EmptyMemberOpt,Ul>Fv # std::_EmptyMemberOpt, unsigned long>::~_EmptyMemberOpt() #__ct__Q33std59basic_string,Q23std12allocator>9CharArrayFRCQ33std59basic_string,Q23std12allocator>9CharArray # std::basic_string, std::allocator>::CharArray::CharArray(const std::basic_string, std::allocator>::CharArray&) #assign__Q23std59basic_string,Q23std12allocator>FRCQ23std59basic_string,Q23std12allocator>UlUl # std::basic_string, std::allocator>::assign(const std::basic_string, std::allocator>&,unsigned long,unsigned long) #replace__Q23std59basic_string,Q23std12allocator>FUlUlUlc # std::basic_string, std::allocator>::replace(unsigned long,unsigned long,unsigned long,char) #__dt__Q23std12out_of_rangeFv # std::out_of_range::~out_of_range() #init__Q23std59basic_string,Q23std12allocator>FUlcRCQ23std12allocator # std::basic_string, std::allocator>::init(unsigned long,char,const std::allocator&) #__dt__Q23std11logic_errorFv # std::logic_error::~logic_error() #change_size__Q23std59basic_string,Q23std12allocator>FUlb # std::basic_string, std::allocator>::change_size(unsigned long,bool) #__dt__Q23std12length_errorFv # std::length_error::~length_error() #__ct__62_RefCountedPtr>FPQ33std6locale3imp # _RefCountedPtr>::_RefCountedPtr(std::locale::imp*) #__as__62_RefCountedPtr>FRC62_RefCountedPtr> # _RefCountedPtr>::operator =(const _RefCountedPtr>&) #__dt__28_RefCountedPtr>Fv # _RefCountedPtr>::~_RefCountedPtr() #__ct__62_RefCountedPtr>FRC62_RefCountedPtr> # _RefCountedPtr>::_RefCountedPtr(const _RefCountedPtr>&) #assign__Q23std59basic_string,Q23std12allocator>FPCcUl # std::basic_string, std::allocator>::assign(const char*,unsigned long) #__vc__Q23std59basic_string,Q23std12allocator>FUl # std::basic_string, std::allocator>::operator [](unsigned long) #resize__Q23std59basic_string,Q23std12allocator>FUlc # std::basic_string, std::allocator>::resize(unsigned long,char) #end__Q23std59basic_string,Q23std12allocator>Fv # std::basic_string, std::allocator>::end() #begin__Q23std59basic_string,Q23std12allocator>Fv # std::basic_string, std::allocator>::begin() #__ct__Q23std59basic_string,Q23std12allocator>FRCQ23std12allocator # std::basic_string, std::allocator>::basic_string(const std::allocator&) #__vc__Q23std59basic_string,Q23std12allocator>FUl # std::basic_string, std::allocator>::operator [](unsigned long) #resize__Q23std59basic_string,Q23std12allocator>FUlw # std::basic_string, std::allocator>::resize(unsigned long,wchar_t) #__ct__Q23std59basic_string,Q23std12allocator>FRCQ23std12allocator # std::basic_string, std::allocator>::basic_string(const std::allocator&) #__dt__Q23std9bad_allocFv # std::bad_alloc::~bad_alloc() #__dt__Q23std23_Generic_codecvtFv # std::_Generic_codecvt::~_Generic_codecvt() #__ct__Q23std23_Generic_codecvtFUl # std::_Generic_codecvt::_Generic_codecvt(unsigned long) #__dt__Q23std23_Generic_codecvtFv # std::_Generic_codecvt::~_Generic_codecvt() #__ct__Q23std23_Generic_codecvtFUl # std::_Generic_codecvt::_Generic_codecvt(unsigned long) #__ct__Q23std64num_get>>FUl # std::num_get>>::num_get(unsigned long) #__ct__Q23std64num_get>>FUl # std::num_get>>::num_get(unsigned long) #__ct__Q23std64num_put>>FUl # std::num_put>>::num_put(unsigned long) #__ct__Q23std64num_put>>FUl # std::num_put>>::num_put(unsigned long) #__dt__Q23std20_Generic_numpunctFv # std::_Generic_numpunct::~_Generic_numpunct() #__ct__Q23std20_Generic_numpunctFUl # std::_Generic_numpunct::_Generic_numpunct(unsigned long) #__dt__Q23std20_Generic_numpunctFv # std::_Generic_numpunct::~_Generic_numpunct() #__ct__Q23std20_Generic_numpunctFUl # std::_Generic_numpunct::_Generic_numpunct(unsigned long) #__ct__Q23std10collateFUl # std::collate::collate(unsigned long) #__ct__Q23std10collateFUl # std::collate::collate(unsigned long) #__dt__Q23std21_Generic_timepunctFv # std::_Generic_timepunct::~_Generic_timepunct() #__ct__Q23std21_Generic_timepunctFUl # std::_Generic_timepunct::_Generic_timepunct(unsigned long) #__dt__Q23std21_Generic_timepunctFv # std::_Generic_timepunct::~_Generic_timepunct() #__ct__Q23std21_Generic_timepunctFUl # std::_Generic_timepunct::_Generic_timepunct(unsigned long) #__ct__Q23std65time_get>>FUl # std::time_get>>::time_get(unsigned long) #__ct__Q23std65time_get>>FUl # std::time_get>>::time_get(unsigned long) #__ct__Q23std65time_put>>FUl # std::time_put>>::time_put(unsigned long) #__ct__Q23std65time_put>>FUl # std::time_put>>::time_put(unsigned long) #__ct__Q23std66money_get>>FUl # std::money_get>>::money_get(unsigned long) #__ct__Q23std66money_get>>FUl # std::money_get>>::money_get(unsigned long) #__ct__Q23std66money_put>>FUl # std::money_put>>::money_put(unsigned long) #__ct__Q23std66money_put>>FUl # std::money_put>>::money_put(unsigned long) #__dt__Q23std24_Generic_moneypunctFv # std::_Generic_moneypunct::~_Generic_moneypunct() #__ct__Q23std24_Generic_moneypunctFUl # std::_Generic_moneypunct::_Generic_moneypunct(unsigned long) #__dt__Q23std24_Generic_moneypunctFv # std::_Generic_moneypunct::~_Generic_moneypunct() #__ct__Q23std24_Generic_moneypunctFUl # std::_Generic_moneypunct::_Generic_moneypunct(unsigned long) #__dt__Q23std24_Generic_moneypunctFv # std::_Generic_moneypunct::~_Generic_moneypunct() #__ct__Q23std24_Generic_moneypunctFUl # std::_Generic_moneypunct::_Generic_moneypunct(unsigned long) #__dt__Q23std24_Generic_moneypunctFv # std::_Generic_moneypunct::~_Generic_moneypunct() #__ct__Q23std24_Generic_moneypunctFUl # std::_Generic_moneypunct::_Generic_moneypunct(unsigned long) #__ct__Q23std13allocatorFRCQ23std31allocator # std::allocator::!(const std::allocator&) #__ct__Q23std88allocator,Q23std12allocator>9CharArray>FRCQ23std12allocator # std::allocator, std::allocator>::CharArray>::!(const std::allocator&) #__ct__Q23std88allocator,Q23std12allocator>9CharArray>FRCQ23std12allocator # std::allocator, std::allocator>::CharArray>::!(const std::allocator&) #what__Q23std13runtime_errorCFv # std::runtime_error::what() const #__dt__Q23std8ctypeFv # std::ctype::~ctype() #__dt__Q23std15ctype_bynameFv # std::ctype_byname::~ctype_byname() #__dt__Q23std14codecvtFv # std::codecvt::~codecvt() #__dt__Q23std14codecvtFv # std::codecvt::~codecvt() #do_falsename__Q23std11numpunctCFv # std::numpunct::do_falsename() const #do_truename__Q23std11numpunctCFv # std::numpunct::do_truename() const #do_grouping__Q23std11numpunctCFv # std::numpunct::do_grouping() const #do_thousands_sep__Q23std11numpunctCFv # std::numpunct::do_thousands_sep() const #do_decimal_point__Q23std11numpunctCFv # std::numpunct::do_decimal_point() const #__dt__Q23std11numpunctFv # std::numpunct::~numpunct() #do_falsename__Q23std11numpunctCFv # std::numpunct::do_falsename() const #do_truename__Q23std11numpunctCFv # std::numpunct::do_truename() const #do_grouping__Q23std11numpunctCFv # std::numpunct::do_grouping() const #do_thousands_sep__Q23std11numpunctCFv # std::numpunct::do_thousands_sep() const #do_decimal_point__Q23std11numpunctCFv # std::numpunct::do_decimal_point() const #__dt__Q23std11numpunctFv # std::numpunct::~numpunct() #__dt__Q23std12timepunctFv # std::timepunct::~timepunct() #__dt__Q23std12timepunctFv # std::timepunct::~timepunct() #do_neg_format__Q23std15moneypunctCFv # std::moneypunct::do_neg_format() const #do_pos_format__Q23std15moneypunctCFv # std::moneypunct::do_pos_format() const #do_frac_digits__Q23std15moneypunctCFv # std::moneypunct::do_frac_digits() const #do_negative_sign__Q23std15moneypunctCFv # std::moneypunct::do_negative_sign() const #do_positive_sign__Q23std15moneypunctCFv # std::moneypunct::do_positive_sign() const #do_curr_symbol__Q23std15moneypunctCFv # std::moneypunct::do_curr_symbol() const #do_grouping__Q23std15moneypunctCFv # std::moneypunct::do_grouping() const #do_thousands_sep__Q23std15moneypunctCFv # std::moneypunct::do_thousands_sep() const #do_decimal_point__Q23std15moneypunctCFv # std::moneypunct::do_decimal_point() const #__dt__Q23std15moneypunctFv # std::moneypunct::~moneypunct() #do_neg_format__Q23std15moneypunctCFv # std::moneypunct::do_neg_format() const #do_pos_format__Q23std15moneypunctCFv # std::moneypunct::do_pos_format() const #do_frac_digits__Q23std15moneypunctCFv # std::moneypunct::do_frac_digits() const #do_negative_sign__Q23std15moneypunctCFv # std::moneypunct::do_negative_sign() const #do_positive_sign__Q23std15moneypunctCFv # std::moneypunct::do_positive_sign() const #do_curr_symbol__Q23std15moneypunctCFv # std::moneypunct::do_curr_symbol() const #do_grouping__Q23std15moneypunctCFv # std::moneypunct::do_grouping() const #do_thousands_sep__Q23std15moneypunctCFv # std::moneypunct::do_thousands_sep() const #do_decimal_point__Q23std15moneypunctCFv # std::moneypunct::do_decimal_point() const #__dt__Q23std15moneypunctFv # std::moneypunct::~moneypunct() #__dt__Q23std88allocator,Q23std12allocator>9CharArray>Fv # std::allocator, std::allocator>::CharArray>::~allocator() #__dt__Q23std192_EmptyMemberOpt,Q23std12allocator>9CharArray>,PQ33std59basic_string,Q23std12allocator>9CharArray>Fv # std::_EmptyMemberOpt, std::allocator>::CharArray>, std::basic_string, std::allocator>::CharArray*>::~_EmptyMemberOpt() #__ct__Q23std59basic_string,Q23std12allocator>FUlwRCQ23std12allocator # std::basic_string, std::allocator>::basic_string(unsigned long,wchar_t,const std::allocator&) #do_neg_format__Q23std15moneypunctCFv # std::moneypunct::do_neg_format() const #do_pos_format__Q23std15moneypunctCFv # std::moneypunct::do_pos_format() const #do_frac_digits__Q23std15moneypunctCFv # std::moneypunct::do_frac_digits() const #do_negative_sign__Q23std15moneypunctCFv # std::moneypunct::do_negative_sign() const #do_positive_sign__Q23std15moneypunctCFv # std::moneypunct::do_positive_sign() const #do_curr_symbol__Q23std15moneypunctCFv # std::moneypunct::do_curr_symbol() const #do_grouping__Q23std15moneypunctCFv # std::moneypunct::do_grouping() const #do_thousands_sep__Q23std15moneypunctCFv # std::moneypunct::do_thousands_sep() const #do_decimal_point__Q23std15moneypunctCFv # std::moneypunct::do_decimal_point() const #__dt__Q23std15moneypunctFv # std::moneypunct::~moneypunct() #__dt__Q23std88allocator,Q23std12allocator>9CharArray>Fv # std::allocator, std::allocator>::CharArray>::~allocator() #__dt__Q23std192_EmptyMemberOpt,Q23std12allocator>9CharArray>,PQ33std59basic_string,Q23std12allocator>9CharArray>Fv # std::_EmptyMemberOpt, std::allocator>::CharArray>, std::basic_string, std::allocator>::CharArray*>::~_EmptyMemberOpt() #__ct__Q23std59basic_string,Q23std12allocator>FUlcRCQ23std12allocator # std::basic_string, std::allocator>::basic_string(unsigned long,char,const std::allocator&) #do_neg_format__Q23std15moneypunctCFv # std::moneypunct::do_neg_format() const #do_pos_format__Q23std15moneypunctCFv # std::moneypunct::do_pos_format() const #do_frac_digits__Q23std15moneypunctCFv # std::moneypunct::do_frac_digits() const #do_negative_sign__Q23std15moneypunctCFv # std::moneypunct::do_negative_sign() const #do_positive_sign__Q23std15moneypunctCFv # std::moneypunct::do_positive_sign() const #do_curr_symbol__Q23std15moneypunctCFv # std::moneypunct::do_curr_symbol() const #do_grouping__Q23std15moneypunctCFv # std::moneypunct::do_grouping() const #do_thousands_sep__Q23std15moneypunctCFv # std::moneypunct::do_thousands_sep() const #do_decimal_point__Q23std15moneypunctCFv # std::moneypunct::do_decimal_point() const #__dt__Q23std15moneypunctFv # std::moneypunct::~moneypunct() #__two_exp__3stdFs # std::__two_exp(short) #__amu__Q23std4_BCDFQ23std4_BCD # std::_BCD::operator *=(std::_BCD) #__apl__Q23std4_BCDFQ23std4_BCD # std::_BCD::operator +=(std::_BCD) #__ct__Q23std4_BCDFPCci # std::_BCD::_BCD(const char*,int) #to_string__Q23std4_BCDCFiRi # std::_BCD::to_string(int,int&) const #__ct__Q23std4_BCDFri # std::_BCD::_BCD(long double,int) #__dt__Q23std4_BCDFv # std::_BCD::~_BCD() #__ct__Q23std15moneypunctFUl # std::moneypunct::moneypunct(unsigned long) #__ct__Q23std15moneypunctFUl # std::moneypunct::moneypunct(unsigned long) #__ct__Q23std15moneypunctFUl # std::moneypunct::moneypunct(unsigned long) #__ct__Q23std15moneypunctFUl # std::moneypunct::moneypunct(unsigned long) #do_am_pm__Q23std12timepunctCFi # std::timepunct::do_am_pm(int) const #do_month_name__Q23std12timepunctCFUl # std::timepunct::do_month_name(unsigned long) const #do_weekday_name__Q23std12timepunctCFUl # std::timepunct::do_weekday_name(unsigned long) const #__ct__Q23std12timepunctFUl # std::timepunct::timepunct(unsigned long) #do_am_pm__Q23std12timepunctCFi # std::timepunct::do_am_pm(int) const #do_month_name__Q23std12timepunctCFUl # std::timepunct::do_month_name(unsigned long) const #do_weekday_name__Q23std12timepunctCFUl # std::timepunct::do_weekday_name(unsigned long) const #__ct__Q23std12timepunctFUl # std::timepunct::timepunct(unsigned long) #__ct__Q23std11numpunctFUl # std::numpunct::numpunct(unsigned long) #__ct__Q23std11numpunctFUl # std::numpunct::numpunct(unsigned long) #do_in__Q23std14codecvtCFRiPCcPCcRPCcPwPwRPw # std::codecvt::do_in(int&,const char*,const char*,const char*&,wchar_t*,wchar_t*,wchar_t*&) const #do_out__Q23std14codecvtCFRiPCwPCwRPCwPcPcRPc # std::codecvt::do_out(int&,const wchar_t*,const wchar_t*,const wchar_t*&,char*,char*,char*&) const #__ct__Q23std14codecvtFUl # std::codecvt::codecvt(unsigned long) #do_nothing__Q23std14codecvtCFPCcPCcRPCcPcPcRPc # std::codecvt::do_nothing(const char*,const char*,const char*&,char*,char*,char*&) const #__ct__Q23std14codecvtFUl # std::codecvt::codecvt(unsigned long) #__ct__Q23std15ctype_bynameFPCcUl # std::ctype_byname::ctype_byname(const char*,unsigned long) #do_tolower__Q23std8ctypeCFPcPCc # std::ctype::do_tolower(char*,const char*) const #do_toupper__Q23std8ctypeCFPcPCc # std::ctype::do_toupper(char*,const char*) const #scan_not__Q23std8ctypeCFQ33std10ctype_base4maskPCcPCc # std::ctype::scan_not(std::ctype_base::mask,const char*,const char*) const #scan_is__Q23std8ctypeCFQ33std10ctype_base4maskPCcPCc # std::ctype::scan_is(std::ctype_base::mask,const char*,const char*) const #is__Q23std8ctypeCFPCcPCcPQ33std10ctype_base4mask # std::ctype::is(const char*,const char*,std::ctype_base::mask*) const #__dt__Q23std8ctypeFv # std::ctype::~ctype() #__ct__Q23std8ctypeFPCQ33std10ctype_base4maskbUl # std::ctype::ctype(const std::ctype_base::mask*,bool,unsigned long) #__dt__Q23std59basic_string,Q23std12allocator>Fv # std::basic_string, std::allocator>::~basic_string() #__dt__Q23std12allocatorFv # std::allocator::~allocator() #widen__Q23std8ctypeCFRCQ23std59basic_string,Q23std12allocator> # std::ctype::widen(const std::basic_string, std::allocator>&) const #classify__Q23std8ctypeCFw # std::ctype::classify(wchar_t) const #do_narrow__Q23std8ctypeCFPCwPCwcPc # std::ctype::do_narrow(const wchar_t*,const wchar_t*,char,char*) const #do_widen__Q23std8ctypeCFPCcPCcPw # std::ctype::do_widen(const char*,const char*,wchar_t*) const #do_tolower__Q23std8ctypeCFPwPCw # std::ctype::do_tolower(wchar_t*,const wchar_t*) const #do_toupper__Q23std8ctypeCFPwPCw # std::ctype::do_toupper(wchar_t*,const wchar_t*) const #do_scan_not__Q23std8ctypeCFQ33std10ctype_base4maskPCwPCw # std::ctype::do_scan_not(std::ctype_base::mask,const wchar_t*,const wchar_t*) const #do_scan_is__Q23std8ctypeCFQ33std10ctype_base4maskPCwPCw # std::ctype::do_scan_is(std::ctype_base::mask,const wchar_t*,const wchar_t*) const #do_is__Q23std8ctypeCFPCwPCwPQ33std10ctype_base4mask # std::ctype::do_is(const wchar_t*,const wchar_t*,std::ctype_base::mask*) const #__as__Q33std6locale3impFRCQ33std6locale3imp # std::locale::imp::operator =(const std::locale::imp&) #__dt__Q33std6locale3impFv # std::locale::imp::~imp() #__ct__Q33std6locale3impFRCQ33std6locale3imp # std::locale::imp::imp(const std::locale::imp&) #__dt__Q23std32vector>Fv # std::vector>::~vector() #__dt__Q23std68vector>Fv # std::vector>::~vector() #__dt__Q23std31allocatorFv # std::allocator::~allocator() #__dt__Q23std13allocatorFv # std::allocator::~allocator() #__dt__Q23std41_EmptyMemberOpt,Ul>Fv # std::_EmptyMemberOpt, unsigned long>::~_EmptyMemberOpt() #__ct__Q33std6locale3impFUl # std::locale::imp::imp(unsigned long) #__dt__Q33std6locale5facetFv # std::locale::facet::~facet() #make_classic__Q23std6localeFv # std::locale::make_classic() #__ct__Q23std6localeFRC62_RefCountedPtr> # std::locale::locale(const _RefCountedPtr>&) #classic__Q23std6localeFv # std::locale::classic() #global__Q23std6localeFRCQ23std6locale # std::locale::global(const std::locale&) #name__Q23std6localeCFv # std::locale::name() const #__as__Q23std6localeFRCQ23std6locale # std::locale::operator =(const std::locale&) #__ct__Q23std6localeFRCQ23std6localeRCQ23std6localei # std::locale::locale(const std::locale&,const std::locale&,int) #__dt__Q23std6localeFv # std::locale::~locale() #__ct__Q23std6localeFRCQ23std6localePCci # std::locale::locale(const std::locale&,const char*,int) #__dt__Q23std10_MSLstringFv # std::_MSLstring::~_MSLstring() #__dt__Q23std12allocatorFv # std::allocator::~allocator() #__dt__Q23std59basic_string,Q23std12allocator>Fv # std::basic_string, std::allocator>::~basic_string() #__ct__Q23std6localeFPCc # std::locale::locale(const char*) #__dt__Q23std13runtime_errorFv # std::runtime_error::~runtime_error() #__ct__Q23std6localeFRCQ23std6locale # std::locale::locale(const std::locale&) #__dt__62_RefCountedPtr>Fv # _RefCountedPtr>::~_RefCountedPtr() #__ct__Q23std6localeFv # std::locale::locale() #__ct__28_RefCountedPtr>FPc # _RefCountedPtr>::_RefCountedPtr(char*) #__as__28_RefCountedPtr>FRC28_RefCountedPtr> # _RefCountedPtr>::operator =(const _RefCountedPtr>&) #__ct__Q23std10_MSLstringFRCQ23std59basic_string,Q23std12allocator> # std::_MSLstring::_MSLstring(const std::basic_string, std::allocator>&) #__vt__Q33std8ios_base7failure # std::ios_base::failure::__vt #__vt__Q23std8ios_base # std::ios_base::__vt #what__Q33std8ios_base7failureCFv # std::ios_base::failure::what() const #throwfailure__Q23std8ios_baseFv # std::ios_base::throwfailure() #__dt__Q33std8ios_base7failureFv # std::ios_base::failure::~failure() #__dt__Q23std8ios_baseFv # std::ios_base::~ios_base() #__ct__Q23std8ios_baseFv # std::ios_base::ios_base() #register_callback__Q23std8ios_baseFPFQ33std8ios_base5eventRQ23std8ios_basei_vi # std::ios_base::register_callback(void (*)(std::ios_base::event, std::ios_base&, int),int) #__ct__Q23std50pairFv # std::pair::pair() #pword__Q23std8ios_baseFi # std::ios_base::pword(int) #iword__Q23std8ios_baseFi # std::ios_base::iword(int) #getloc__Q23std8ios_baseCFv # std::ios_base::getloc() const #imbue__Q23std8ios_baseFRCQ23std6locale # std::ios_base::imbue(const std::locale&) #__vt__Q23std12strstreambuf # std::strstreambuf::__vt #init__Q23std12strstreambufFPciPc # std::strstreambuf::init(char*,int,char*) #setbuf__Q23std12strstreambufFPci # std::strstreambuf::setbuf(char*,int) #seekpos__Q23std12strstreambufFQ23std7fposs # std::strstreambuf::seekpos(std::fpos,short) #seekoff__Q23std12strstreambufFlQ33std8ios_base7seekdirs # std::strstreambuf::seekoff(long,std::ios_base::seekdir,short) #underflow__Q23std12strstreambufFv # std::strstreambuf::underflow() #pbackfail__Q23std12strstreambufFi # std::strstreambuf::pbackfail(int) #overflow__Q23std12strstreambufFi # std::strstreambuf::overflow(int) #freeze__Q23std12strstreambufFb # std::strstreambuf::freeze(bool) #__dt__Q23std12strstreambufFv # std::strstreambuf::~strstreambuf() #__console_exit #__stdio_exit #__aborting #__exit #exit #__atexit #atexit #abort #__malloc_pool #free #realloc #calloc #malloc #__files #__num_to_file #__file_to_num #__flush_line_buffered_output_files #__flush_all #__close_all #__init_file #__find_unopened_file #__llmod #__lmod #__mod #__lldiv #__ldiv #__div #__llmul #__lmul #__mul #__lladd #__ladd #__add #lldiv #ldiv #div #llabs #labs #abs #__assertion_failed #bsearch #setbuf #setvbuf #__flush_buffer #__load_buffer #__prep_buffer #__convert_to_newlines #__convert_from_newlines #puts #fputs #putchar #putc #fputc #__put_char #__ungotten #ungetc #gets #fgets #getchar #getc #fgetc #__get_char #__ctype_map #__lower_map #__upper_map #toupper #tolower #isxdigit #isupper #isspace #ispunct #isprint #islower #isgraph #isdigit #iscntrl #isalpha #isalnum #fwrite #fread #errno #__temp_file_mode #__set_idle_proc #__get_file_modes #__handle_reopen #__handle_open #freopen #fopen #fflush #fclose #tmpfile #tmpnam #rename #remove #rewind #fsetpos #fseek #_fseek #fgetpos #ftell #_ftell #__float_nan #__float_huge #__double_min #__double_max #__double_epsilon #__double_tiny #__double_huge #__double_nan #__extended_min #__extended_max #__extended_epsilon #__extended_tiny #__extended_huge #__extended_nan #__lconv #localeconv #setlocale #wcstombs #mbstowcs #wctomb #mbtowc #mblen #memcmp #__memrchr #memchr #memset #memmove #memcpy #__fill_mem #__copy_longs_rev_unaligned #__copy_longs_unaligned #__copy_longs_rev_aligned #__copy_longs_aligned #__move_mem #__copy_mem #__stdio_atexit #perror #ferror #feof #clearerr #__pool_free_all #__pool_free #__pool_realloc #__pool_alloc_clear #__pool_alloc #__pool_preassign #__pool_preallocate #__init_pool_obj #sprintf #snprintf #vsprintf #vsnprintf #printf #vprintf #fprintf #vfprintf #qsort #srand #rand #sscanf #__vsscanf #scanf #fscanf #__vfscanf #raise #signal #__strerror #strerror #strstr #strtok #strcspn #strspn #strpbrk #strrchr #strxfrm #strcoll #strchr #strncmp #strcmp #strncat #strcat #strncpy #strcpy #strlen #__close_string #__write_string #__read_string #__open_string_file #atof #strtod #__strtold #strtoumax #strtoimax #atol #atoi #strtoll #strtol #strtoull #strtoul #__strtoull #__strtoul #system #getenv #__month_to_days #strftime #localtime #gmtime #ctime #asctime #time #mktime #difftime #clock #__leap_year #ccommand #clrscr #__close_console #__write_console #__read_console #__end_critical_region #__begin_critical_region #__kill_critical_regions #__init_critical_regions #fcntl #creat #open #__rename_file #__delete_file #__temp_file_name #__close_file #__position_file #__write_file #__read_file #__open_temp_file #__open_file #__path2fss #__sys_free #__sys_alloc #mkdir #fstat #stat #__to_gm_time #__get_time #__get_clock #write #unlink #ttyname #sleep #rmdir #read #lseek #isatty #getlogin #getcwd #exec #cuserid #close #chdir #_ftype #_fcreator #tell #fdopen #fileno #__gettype #__getcreator #__ctopstring #__system7present #__myraise #utimes #utime #uname #fwide #fgetws #fputws #ungetwc #fgetwc #getwchar #getwc #fputwc #putwchar #putwc #watof #wcstod #__wcstold #wcstoumax #wcstoimax #watol #watoi #wcstoll #wcstol #wcstoull #wcstoul #__wcstoull #__wcstoul #wctrans #towctrans #__wctype_map #__wlower_map #__wupper_map #iswctype #wctype #wctob #towupper #towlower #iswxdigit #iswupper #iswspace #iswpunct #iswprint #iswlower #iswgraph #iswdigit #iswcntrl #iswalpha #iswalnum #wmemcmp #wmemchr #wmemset #wmemmove #wmemcpy #swprintf #vwprintf #vswprintf #wprintf #fwprintf #vfwprintf #swscanf #__vswscanf #vwscanf #wscanf #fwscanf #__vfwscanf #wcsstr #wcstok #wcscspn #wcsspn #wcspbrk #wcsrchr #wcsxfrm #wcscoll #wcschr #wcsncmp #wcscmp #wcsncat #wcscat #wcsncpy #wcscpy #wcslen #wcsftime #wctime #wasctime #ValidateMallocHeap #GetNextMallocHeapRegistration #GetFirstMallocHeapRegistration #UnregisterMallocHeap #RegisterMallocHeap #__fminl #__fmaxl #__fdiml #__nextafterl #__remquol #__copysignl #__remainderl #__fmodl #__modfl #__truncl #llroundl #lroundl #__roundl #llrintl #lrintl #__rintl #__nearbyintl #__floorl #__ceill #__lgammal #__gammal #__erfcl #__erfl #__hypotl #__sqrtl #__powl #__fabsl #scalblnl #scalbnl #__logbl #__log2l #__log1pl #__expm1l #__exp2l #__log10l #__logl #__ldexpl #__frexpl #__expl #__atanhl #__asinhl #__acoshl #__tanhl #__sinhl #__coshl #__tanl #__sinl #__cosl #__atan2l #__atanl #__asinl #__acosl #fminf #fmaxf #fdimf #remquof #copysignf #remainderf #fmodf #truncf #llroundf #lroundf #roundf #llrintf #lrintf #rintf #nearbyintf #floorf #ceilf #lgammaf #gammaf #erfcf #erff #hypotf #sqrtf #powf #fabsf #scalblnf #scalbnf #logbf #log2f #log1pf #expm1f #exp2f #log10f #logf #ldexpf #frexpf #expf #atanhf #asinhf #acoshf #tanhf #sinhf #coshf #tanf #sinf #cosf #atan2f #atanf #asinf #acosf #nextafter #llround #lround #llrint #lrint #scalbln #scalbn #__dc_arr #__del_arr #__new_arr #__init_arr #__copy #__som_check_ev #__som_check_new #__vt__Q23std13bad_exception # std::bad_exception::__vt #what__Q23std13bad_exceptionCFv # std::bad_exception::what() const #__end__catch #__throw #__ct__Q23std9exceptionFv # std::exception::exception() #__unexpected #__dt__Q23std13bad_exceptionFv # std::bad_exception::~bad_exception() #__unregister_fragment #__register_fragment #__global_destructor_chain #__destroy_global_chain #__register_global_object #__destroy_new_array2 #__destroy_new_array #__destroy_arr #__construct_array #__dt__26__partial_array_destructorFv # __partial_array_destructor::~__partial_array_destructor() #__construct_new_array #__throw_catch_compare #unexpected__3stdFv # std::unexpected() #set_unexpected__3stdFPFv_v # std::set_unexpected(void (*)(void)) #terminate__3stdFv # std::terminate() #set_terminate__3stdFPFv_v # std::set_terminate(void (*)(void)) #__vt__Q23std10bad_typeid # std::bad_typeid::__vt #what__Q23std10bad_typeidCFv # std::bad_typeid::what() const #__dynamic_cast #__get_typeid #__dt__Q23std10bad_typeidFv # std::bad_typeid::~bad_typeid() #nothrow__3std # std::nothrow #__dla__FPv # operator delete[](void*) #__nwa__FUlRCQ23std9nothrow_t # operator new[](unsigned long,const std::nothrow_t&) #__nwa__FUl # operator new[](unsigned long) #__dl__FPv # operator delete(void*) #__nw__FUlRCQ23std9nothrow_t # operator new(unsigned long,const std::nothrow_t&) #__nw__FUl # operator new(unsigned long) #_prealloc_newpool__3stdFUl # std::_prealloc_newpool(unsigned long) #_set_newnonptrmax__3stdFUl # std::_set_newnonptrmax(unsigned long) #_set_newpoolsize__3stdFUl # std::_set_newpoolsize(unsigned long) #__throws_bad_alloc__3std # std::__throws_bad_alloc #__new_handler__3std # std::__new_handler #__del_hdl #__new_hdl #set_new_handler__3stdFPFv_v # std::set_new_handler(void (*)(void)) #__throw_bad_alloc__3stdFv # std::__throw_bad_alloc() #qd #__terminate #__initialize #__start #__ptmf_null \ No newline at end of file diff --git a/libical/MacOS/libical_prefix.h b/libical/MacOS/libical_prefix.h deleted file mode 100644 index 0810563119..0000000000 --- a/libical/MacOS/libical_prefix.h +++ /dev/null @@ -1,5 +0,0 @@ -/* libical_prefix.h */ - -#include -#define _TIME_T -#include "errno.h" \ No newline at end of file diff --git a/libical/MacOS/restrictions.make b/libical/MacOS/restrictions.make deleted file mode 100644 index dd146f5ed3..0000000000 --- a/libical/MacOS/restrictions.make +++ /dev/null @@ -1 +0,0 @@ -#pseudo target all Ä {libical_c_src}parameterrestrictions.inc {libical_c_src}restrictionrecords.inc # Generate source file {libical_c_src}parameterrestrictions.inc Ä ¶ {libical_scripts}mkparameterrestrictions.pl ¶ {libical_data}params-in-prop.txt ¶ {libical_project}restrictions.make perl {libical_scripts}mkparameterrestrictions.pl {libical_data}params-in-prop.txt ¶ > {libical_c_src}parameterrestrictions.inc # Set file creator to CodeWarrior setfile {libical_c_src}parameterrestrictions.inc -c CWIE # Generate source file {libical_c_src}restrictionrecords.inc Ä ¶ {libical_scripts}mkrestrictionrecords.pl ¶ {libical_data}restrictions.csv ¶ {libical_project}restrictions.make perl {libical_scripts}mkrestrictionrecords.pl {libical_data}restrictions.csv ¶ > {libical_c_src}restrictionrecords.inc # Set file creator to CodeWarrior setfile {libical_c_src}restrictionrecords.inc -c CWIE \ No newline at end of file diff --git a/libical/MacOS/restrictions.script b/libical/MacOS/restrictions.script deleted file mode 100644 index ab719b87d5..0000000000 --- a/libical/MacOS/restrictions.script +++ /dev/null @@ -1 +0,0 @@ -directory {libical_project} # Generate source files make all -f restrictions.make > make.out make.out \ No newline at end of file diff --git a/libical/MacOS/strdup.c b/libical/MacOS/strdup.c deleted file mode 100644 index ae60fee3df..0000000000 --- a/libical/MacOS/strdup.c +++ /dev/null @@ -1,17 +0,0 @@ - -#include "strdup.h" -#include -#include - - -char *strdup(const char *s ) -{ - char *p; - - if ( (p = (char *) malloc( strlen( s ) + 1 )) == NULL ) - return( NULL ); - - strcpy( p, s ); - - return( p ); -} diff --git a/libical/MacOS/strdup.h b/libical/MacOS/strdup.h deleted file mode 100644 index 1bb73aa535..0000000000 --- a/libical/MacOS/strdup.h +++ /dev/null @@ -1,3 +0,0 @@ -/* strdup.h */ - -char * strdup(const char *str); diff --git a/libical/Makefile.am b/libical/Makefile.am deleted file mode 100644 index 66b37da052..0000000000 --- a/libical/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ - - -EXTRA_DIST = \ - ChangeLog \ - README \ - TEST \ - TODO - -SUBDIRS = design-data doc scripts test-data src - - diff --git a/libical/NEWS b/libical/NEWS deleted file mode 100644 index 71f18ff45b..0000000000 --- a/libical/NEWS +++ /dev/null @@ -1,269 +0,0 @@ -Version 0.17 15 May 00 (cvs tag libical-0-17 ) ---------------------------------------------- - -Fixed two bugs that added extraneous '/' to test values - -Fixed type in internal string for the COUNTER method - -Eliminated a mempry leak in icalparser.c - - -Version 0.16a 29 April 00 ----------------------------------------------- - -Fixed bug in icalvalue_new_from_string that caused METHOD value to -choke on non standard input. - -Fixed a memory leak in icalparser_add_line -- failed to free 'line' - - -Version 0.16 5 April 00 ( cvs tag libical-0-16) ----------------------------------------------- - -Now using automake. - -Substantial changes to the parser. New interfaces let you parser -multiple components from a single stream by feading the parser object -one line at a time. - -Added a STRING value type. this type is like TEXT, but does not -backslash magic characters. It is used in PRODID and REQUEST-STATUS, -where the '/' and ';' are literal. - -Added several convience functions for REQUEST-STATUS to icalenums.c - -Addedd a routine to icalcomponent to convert X-LIC errors to -REQUEST-STATUS return values. - -Version 0.15a 5 Mar 00 (cvs tag libical-0-15a) ---------------------- - -Experimented with CVS - -Fixed icalvalue_set_text to convert escaped characters into the proper -values. - -Other minor code tweaks. - - -Version 0.15 7 Feb 00 ---------------------- - -Split the storage classess ( icalstore, icalcluster, icalcalendar ) -into a seperate library, libicalss - -Implemented restriction checking in file icalrestrictions.c. The -checking is not complete, but can handle the bulk of the restrictions -described in RFC 2446. - -Created a new value type, METHOD. Changed METHOD property to use the -new value. The METHOD value uses an enumeration. - - -Version 0.14b -------------- - -Implemented parsing of RECUR values, although it does not handle BYDAY -specs with numbers. - -Fixed error in icalparser_next_line that mangled lines longer than the -temp buffer (1024 chars.) The temp buffer is now 80 chars, and it can -handle (apparently) arbitrary length lines - -Fixed severe brokenness in a value, but I forgot which one. - -Cleaned cruft out of the distribution, so the tarfile is smaller. - - -Version 0.14a 14 Jan 00 ------------------------ - -Fixed bug in ROLE parameter -- missing '-' in the text of allowed values - -Fixed bug in X-parameters - -Version 0.14 11 Jan 00 ----------------------- - -Fixed wrong value type for TRIGGER property - -Added Calendar object. Calendar is an aggregate of two stores and two -clusters, and can store all of the inforamation associated with a -calendar. - -icalcomponent_add_property and icalcomponent_add_component will -complain if you try to add a component or property that is already -part of an other component. The *_free routines wil complain if you try -to free a linked component or property. - -More improvements to error handling. - -Parser is much more robust. - -Minor memory enhancements. - -Regression test runs without memory leaks. - -Version 0.13d 21Dec99 ---------------------- - -Seperated perl interface and library - -Added autoconf support - -Scripts that generate derived properties, values and parameters now -change source and header files inline. - -Changed icalstore to cluster all components with DTSTART in a month -into a single file. This should reduce number of file accesses by a -factor of 60. - -Ran code through Purify and fixed memory leaks. - - -Version 0.13 16Nov99 ---------------------- - -Yet more bug fixes! Yeah! - -Added better error handling. The Parser inserts X-LIC-*ERROR -properties to warn of parsing errors. - -The imip source/sink programs in /src/imip is demonstrably functional. - -Version 0.12b 17Oct99 ---------------------- - -More bug fixes, particularily in parse from string routines - -ICal::Store is mostly functional - -This is version is a checkpoint, not a release. - -Version 0.12a 10Oct99 ---------------------- - -Expanded perl interface: - Added 1/2 of Store module - Fixed bugs - Implemeted get_{first,next}_property - -Extended C interface - Made get_{first,next}_property work properly - Fixed bugs - - -This is version is a checkpoint, not a release. - -Version 0.12 27Aug99 --------------------- - -Added a rudimentatry perl interface - -This is version is a checkpoint, not a release. - - -Version 0.11 11Aug99 --------------------- - -Eliminated most use of flex/bison -- all parsing, except for the -values, is done in C. - -Cleaned up memory leaks. Purify claims that I got them all. - -Moved all derived component/prop/param/value code ( in .inc / .h -files) into main files ( icalcomponent.{c,h}, icalproperty.{c,h}, etc/ -) - -Implemented *_clone routines. - -Fixed a lot of bugs. - -Implemented more value types. Still unimplemeneted are BINARY and RECUR - -Included MacOS/Code Warior files from Graham Davison - - -Version 0.10 8Jul99 -------------------- - -Eliminated shift/reduce and reduce/reduce conflicts in the parser. -This version is almost feature complete -- it has the basic structure -for all of the library's functionality, and it will only require -implementing procedure shells and fixing bugs. I think that all of the -hard work is done... - -Version 0.09a,b 3,7 Jul99 -------------------------- - -Various improvements to the parser, added some functionality. The parser code -is mostly complete, and should be fully functional, except for a horde of -bugs. Also added support for X-Properties. - -Version 0.09 25Jun99 --------------------- - -Added a parser in files src/comp/icalitip.{y,l} The lexer is mostly -functional, but the parser is not. - - -Version 0.08 2Jun99 --------------------- - -All files now have MPL licensing - -Implement enough of the code to perform some rudimentary testing - - -Version 0.07 14May99 --------------------- - -Remove all interfaces that construct object from a string - -Moved most code back into comp directory - -Implemented C files for most headers -- usecases.c now links. - -Many improvements to generation scripts. - - - -Version 0.06 25Apr99 --------------------- - -Expanded distribution to include: - Directory structure that can accomodate future expansion - Several levels of Makefiles - This CHANGES file - -Added headers for irip and parse modules - -Added several files with design information - -Added scripts that I had used to generate much of the ical header code. - -Split C headers from CC headers - -Added data for iTIP and iCAL component restrictions in restrictions.csv - -Version 0.05 11Apr99 ----------------------- - -Changes to ical headers - - Added derived Property classes. - - Improved the interface to the derived property and parameter classes - - Added derived component classes. - - Created usecases.c and ccusecases.cc to demonstrate use - - C++ interface compile - - -Version 0.04 5Apr99 -------------------- - -Version 0.02 30Mar99 --------------------- diff --git a/libical/README b/libical/README deleted file mode 100644 index e0f7641e1e..0000000000 --- a/libical/README +++ /dev/null @@ -1,96 +0,0 @@ - -LIBICAL -- An implementation of basic iCAL protocols - -The code and datafiles in this distribution are licensed under the -Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html -for a copy of the license. Alternately, you may use libical under the -terms of the GNU Library General Public License. See -http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. - -This dual license ensures that the library can be incorporated into -both proprietary code and GPL'd programs, and will benefit from -improvements made by programmers in both realms. I will only accept -changes into my version of the library if they are similarly -dual-licensed. - -The code in this distribution implements the iCal protocols as -described in RFC2445 and RFC2446. The code is in very early stages of -development. - -This code is under active development. If you would like to contribute -to the project, you can contact me, Eric Busboom, at -eric@softwarestudio.org. The project has a webpage at - - http://softwarestudio.org/libical/index.html - -and a mailing list that you can join by sending the following mail: - - ------------ - To: minimalist@softwarestudio.org - Subject: subscribe libical - ------------ - - -Building the library --------------------- - -This distribution is developed on Red Hat Linux 6.0 and usually -compiles on SunOS 5.6 and FreeBSD 2.27. I have reports of success of -previous version on MacOS ( with CodeWarrior ) but I don't know about -any other systems. - -The library is configured with automake. From the root directory, run - - ./configure - -To build all of the Makefiles for your system. If you will be installing the library, you may want to use the --prefix flag to set the directory where the library and header files will be installed. - - ./configure --prefix=/proj/local/ - -If configure runs fine, run "make" to build the library and -"make install" to install it. - -The current version of libical focuses on creating and -manipulating iCal objects. With it, you can parse text representations -of iCal components, add and remove sub-components, properties, -parameters and values, and print the components back out as strings. - - -Notes for Libical Developers -------------------- - -If you don't want to use gcc as the compiler, and you got the sources -from CVS, you should set the CC variable to the path to the compiler -and run "automake --include-deps" to keep automake from using -gcc-specific automatic dependancy tracking. - - > CC=/pkg/SUNWspro/bin/cc; export CC - > automake --include-deps - > ./configure --prefix=/proj/local/ - > make - -You will not need to re-run automake unless you got the sources from CVS. - - -Perl Library ------------- - -There is a perl language binding of this library, LIBICAL. -It is available from http://www.softwarestudio.org/libical - -Parser ------- - -The parser is a test program that will convert a text representation -of an iCal object to the internal representation and print it back out -as text. It is primarily a test tool, but it is also a good -demonstration of how the library works. - -To use it, cat one of the test components into the parser -executable. For example, from the root of the distribution: - - src/test/icalparser < test-data/1.1 - - -Eric Busboom -eric@softwarestudio.org diff --git a/libical/TEST b/libical/TEST deleted file mode 100644 index 90c3473b31..0000000000 --- a/libical/TEST +++ /dev/null @@ -1,4 +0,0 @@ - -Parser Tests ------------- -Use iCAL keywords as first words of unquoted strings \ No newline at end of file diff --git a/libical/THANKS b/libical/THANKS deleted file mode 100644 index 6a51d866fa..0000000000 --- a/libical/THANKS +++ /dev/null @@ -1,10 +0,0 @@ -Thanks to: - - -Graham Davison for MacOS support and -miscelaneous code bits - -Seth Alves for the first cut at the Makefile.am -files and various utility functions. - -Russ Steinthal for several utility functions and comments. \ No newline at end of file diff --git a/libical/TODO b/libical/TODO deleted file mode 100644 index b27e505b35..0000000000 --- a/libical/TODO +++ /dev/null @@ -1,32 +0,0 @@ - -TODOs for libical-0.16 ---------------------- - -libical treats properties with multiple values incorrecty -- it always -seperates multiple values into multiple properties. This is not -acceptable for CATEGORIES and RESOURCES. - -Some TEXT valued properties, like METHOD, have a limited set of valid -values. The code should check that the values of these properites are -valid. ( Although METHOD now uses enums, and is not really TEXT valued ) - -Finish implementing values - ATTACH/BINARY - content_type - language - -Check for buffer overflow on external input. - -Error Handling - - Dates and times: the parser will accept many illegal date time - values - -RECUR values ignore integers in BYDAY clauses, ie 'FREQ=MONTHLY;BYDAY=-1SU' - -Restrictions code does not catch lack of DTEND or DURATION - -For some value types, if there illegal characters in the value ( like -4.56 in an integer value), the parser will output the characters to -stdout. - diff --git a/libical/acconfig.h b/libical/acconfig.h deleted file mode 100644 index e9383f73a4..0000000000 --- a/libical/acconfig.h +++ /dev/null @@ -1,7 +0,0 @@ -/* Define to make icalerror_* calls abort instead of internally - signalling an error */ -#undef ICAL_ERRORS_ARE_FATAL - -/* Define to make icalcluster_commit() save to a temp file and mv to - the original file instead of writing to the orig file directly */ -#undef ICAL_SAFESAVES diff --git a/libical/autogen.sh b/libical/autogen.sh deleted file mode 100755 index e15e4e33a8..0000000000 --- a/libical/autogen.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -ORIGDIR=`pwd` -cd $srcdir -PROJECT=libical -TEST_TYPE=-d -FILE=src - -DIE=0 - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have autoconf installed to compile $PROJECT." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -(automake --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have automake installed to compile $PROJECT." - echo "Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.2d.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -test $TEST_TYPE $FILE || { - echo "You must run this script in the top-level $PROJECT directory" - exit 1 -} - -if test -z "$*"; then - echo "I am going to run ./configure with no arguments - if you wish " - echo "to pass any to it, please specify them on the $0 command line." -fi - -case $CC in -*xlc | *xlc\ * | *lcc | *lcc\ *) am_opt=--include-deps;; -esac - -if test -z "$ACLOCAL_FLAGS"; then - - acdir=`aclocal --print-ac-dir` - m4list="glib.m4" - - for file in $m4list - do - if [ ! -f "$acdir/$file" ]; then - echo "WARNING: aclocal's directory is $acdir, but..." - echo " no file $acdir/$file" - echo " You may see fatal macro warnings below." - echo " If these files are installed in /some/dir, set the ACLOCAL_FLAGS " - echo " environment variable to \"-I /some/dir\", or install" - echo " $acdir/$file." - echo "" - fi - done -fi - -aclocal $ACLOCAL_FLAGS - -# optionally feature autoheader -(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader - -automake -a $am_opt -autoconf -cd $ORIGDIR - -$srcdir/configure "$@" - -echo -echo "Now type 'make' to compile $PROJECT." diff --git a/libical/configure.in b/libical/configure.in deleted file mode 100644 index c722c0fee1..0000000000 --- a/libical/configure.in +++ /dev/null @@ -1,52 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(src/libical/ical.h) -AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(libical,0.17) - -dnl Checks for programs. -AC_PROG_YACC -AC_PROG_CC -AM_PROG_LEX -AC_PROG_LN_S -AC_PROG_RANLIB -AC_PROG_INSTALL - -dnl Initialize libtool -AM_PROG_LIBTOOL - - -AC_SUBST(AR) -AC_CHECK_PROGS(AR, ar aal, ar) - -AC_DEFINE(ICAL_ERRORS_ARE_FATAL,1) -AC_DEFINE(ICAL_SAFESAVES,1) - -dnl Checks for libraries. -dnl Replace `main' with a function in -lical: -dnl AC_CHECK_LIB(ical, main) - -dnl Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS(time.h sys/types.h assert.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_SIZE_T -AC_STRUCT_TM - -dnl Checks for library functions. -AC_CHECK_FUNCS(strdup) - -AC_OUTPUT([ -Makefile -config.h -design-data/Makefile -doc/Makefile -scripts/Makefile -src/Makefile -src/libical/Makefile -src/libical/icalversion.h -src/libicalss/Makefile -src/test/Makefile -test-data/Makefile -] ) diff --git a/libical/configure.scan b/libical/configure.scan deleted file mode 100644 index c07a9f6bf8..0000000000 --- a/libical/configure.scan +++ /dev/null @@ -1,30 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(src/comp-cc/usecases.cc) - -dnl Checks for programs. -AC_PROG_YACC -AC_PROG_CC -AC_PROG_LEX -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_RANLIB - -dnl Checks for libraries. -dnl Replace `main' with a function in -lical: -AC_CHECK_LIB(ical, main) - -dnl Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_CHECK_HEADERS(fcntl.h limits.h malloc.h unistd.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_TYPE_OFF_T -AC_TYPE_SIZE_T -AC_STRUCT_TM - -dnl Checks for library functions. -AC_CHECK_FUNCS(mkdir strdup uname) - -AC_OUTPUT(src/libicalss/Makefile src/test/Makefile src/libical/Makefile src/Makefile src/pvl/Makefile src/comp-cc/Makefile Makefile) diff --git a/libical/design-data/.cvsignore b/libical/design-data/.cvsignore deleted file mode 100644 index 3dda72986f..0000000000 --- a/libical/design-data/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile.in -Makefile diff --git a/libical/design-data/Makefile.am b/libical/design-data/Makefile.am deleted file mode 100644 index 0548974160..0000000000 --- a/libical/design-data/Makefile.am +++ /dev/null @@ -1,10 +0,0 @@ -EXTRA_DIST =\ - components.txt \ - param-c-types.txt \ - params-in-prop.txt \ - prop-to-value.txt \ - property-tokens.txt \ - restrictions.csv \ - status.txt \ - value-c-types.txt \ - value-mem-semantics.txt \ diff --git a/libical/design-data/components.txt b/libical/design-data/components.txt deleted file mode 100644 index 15417eaf2f..0000000000 --- a/libical/design-data/components.txt +++ /dev/null @@ -1,21 +0,0 @@ -VCALENDAR -VEVENT -VTODO -VJOURNAL -VFREEBUSY -VTIMEZONE -XSTANDARDTIME -XDAYLIGHTSAVINGSTIME -VALARM -XAUDIOALARM -XDISPLAYALARM -XEMAILALARM -XPROCEDUREALARM -X -VSCHEDULE -VQUERY -VCAR -VCOMMAND -XLICINVALID -ANY - diff --git a/libical/design-data/param-c-types.txt b/libical/design-data/param-c-types.txt deleted file mode 100644 index d2f28e688a..0000000000 --- a/libical/design-data/param-c-types.txt +++ /dev/null @@ -1,23 +0,0 @@ -ALTREP char* -CN char* -CUTYPE icalparameter_cutype -DELEGATED-FROM char* -DELEGATED-TO char* -DIR char* -ENCODING icalparameter_encoding -FBTYPE icalparameter_fbtype -FMTTYPE char* -LANGUAGE char* -MEMBER char* -PARTSTAT icalparameter_partstat -RANGE icalparameter_range -RELATED icalparameter_related -RELTYPE icalparameter_reltype -ROLE icalparameter_role -RSVP int -SENT-BY char* -TZID char* -VALUE icalparameter_value -X char* -X-LIC-ERRORTYPE icalparameter_xlicerrortype -X-LIC-COMPARETYPE icalparameter_xliccomparetype diff --git a/libical/design-data/params-in-prop.txt b/libical/design-data/params-in-prop.txt deleted file mode 100644 index 4d4e133fc3..0000000000 --- a/libical/design-data/params-in-prop.txt +++ /dev/null @@ -1,55 +0,0 @@ -ACTION VALUE X -ATTACH FMTTYPE ENCODING VALUE X -ATTENDEE CN CUTYPE DELEGATED-FROM DELEGATED-TO DIR LANGUAGE MEMBER PARTSTAT ROLE RSVP SENT-BY X -CALSCALE X -CATEGORIES LANGUAGE X -CLASS X -COMMENT ALTREP LANGUAGE X -COMPLETED X -CONTACT ALTREP LANGUAGE X -CREATED X -DESCRIPTION ALTREP LANGUAGE X -DTEND VALUE TZID X -DTSTAMP X -DTSTART VALUE TZID X -DUE VALUE TZID X -DURATION X -EXDATE VALUE TZID X -EXRULE X -FREEBUSY FBTYPE X -GEO X -LAST-MODIFIED X -LOCATION ALTREP LANGUAGE X -METHOD X -ORGANIZER CN DIR LANGUAGE SENT-BY X -PERCENT-COMPLETE X -PRIORITY X -PRODID X -RDATE VALUE TZID X -RECURRENCE-ID VALUE RANGE TZID X -RELATED-TO RELTYPE X -REPEAT X -REQUEST-STATUS LANGUAGE X -RESOURCES ALTREP LANGUAGE X -RRULE X -SEQUENCE X -STATUS X -SUMMARY ALTREP LANGUAGE X -TRANSP X -TRIGGER VALUE RELATED X -TZID X -TZNAME LANGUAGE X -TZOFFSETFROM X -TZOFFSETTO X -TZURL X -UID X -URL X -VERSION X -XPROP LANGUAGE X -X-LIC-ERROR XLICEERRORTYPE X -SCOPE X -MAXRESULTS X -MAXRESULTSSIZE X -QUERY X -QUERYNAME X -TARGET X \ No newline at end of file diff --git a/libical/design-data/prop-to-value.txt b/libical/design-data/prop-to-value.txt deleted file mode 100644 index a06bdc31f1..0000000000 --- a/libical/design-data/prop-to-value.txt +++ /dev/null @@ -1,50 +0,0 @@ -CALSCALE TEXT -METHOD METHOD # Non-std. RFC2445 specifies TEXT -PRODID TEXT -VERSION TEXT -CATEGORIES TEXT -CLASS TEXT -COMMENT TEXT -DESCRIPTION TEXT -LOCATION TEXT -PERCENT-COMPLETE INTEGER -PRIORITY INTEGER -RESOURCES TEXT -STATUS TEXT -SUMMARY TEXT -COMPLETED DATE-TIME -FREEBUSY PERIOD -TRANSP TEXT -TZNAME TEXT -TZOFFSETFROM UTC-OFFSET -TZOFFSETTO UTC-OFFSET -TZURL URI -TZID TEXT -ATTENDEE CAL-ADDRESS -CONTACT TEXT -ORGANIZER CAL-ADDRESS -RELATED-TO TEXT -URL URI -UID TEXT -EXRULE RECUR -RRULE RECUR -ACTION TEXT -REPEAT INTEGER -CREATED DATE-TIME -DTSTAMP DATE-TIME -LAST-MODIFIED DATE-TIME -SEQUENCE INTEGER -X-LIC-ERROR TEXT -X-LIC-CLUSTERCOUNT INTEGER -REQUEST-STATUS STRING -ATTACH ATTACH # Non-std: URI or BINARY -GEO GEO # Non-std: Two FLOATS -DTEND DATE-TIME-DATE # Non-std: DATE-TIME or DATE -DUE DATE-TIME-DATE # Non-std: DATE-TIME or DATE -DTSTART DATE-TIME-DATE # Non-std: DATE-TIME or DATE -RECURRENCE-ID DATE-TIME-DATE # Non-std: DATE-TIME or DATE -EXDATE DATE-TIME-DATE # Non-std: DATE-TIME or DATE -RDATE DATE-TIME-PERIOD # Non-std: DATE-TIME or DATE or PERIOD -TRIGGER TRIGGER # Non-std: DURATION or DATE-TIME -DURATION DURATION -QUERY QUERY diff --git a/libical/design-data/property-tokens.txt b/libical/design-data/property-tokens.txt deleted file mode 100644 index f8a95861c4..0000000000 --- a/libical/design-data/property-tokens.txt +++ /dev/null @@ -1,65 +0,0 @@ -8BIT -ACCEPTED -ADD -AUDIO -BASE64 -BINARY -BOOLEAN -BUSY -BUSY-TENTATIVE -BUSY-UNAVAILABLE -CAL-ADDRESS -CANCEL -CANCELLED -CHAIR -CHILD -COMPLETED -CONFIDENTIAL -CONFIRMED -COUNTER -DATE -DATE-TIME -DECLINECOUNTER -DECLINED -DELEGATED -DISPLAY -DRAFT -DURATION -EMAIL -END -FINAL -FLOAT -FREE -GREGORIAN -GROUP -INDIVIDUAL -IN-PROCESS -INTEGER -NEEDS-ACTION -NON-PARTICIPANT -OPAQUE -OPT-PARTICIPANT -PARENT -PERIOD -PRIVATE -PROCEDURE -PUBLIC -PUBLISH -RECUR -REFRESH -REPLY -REQ-PARTICIPANT -REQUEST -RESOURCE -ROOM -SIBLING -START -TENTATIVE -TEXT -THISANDFUTURE -THISANDPRIOR -TIME -TRANSPAENT -UNKNOWN -UTCOFFSET -XNAME diff --git a/libical/design-data/restrictions.csv b/libical/design-data/restrictions.csv deleted file mode 100644 index bf71d96327..0000000000 --- a/libical/design-data/restrictions.csv +++ /dev/null @@ -1,1348 +0,0 @@ -# Method, Target component, Property, Sub-component, Restriction -PUBLISH,VEVENT,NONE,NONE,ONEPLUS -PUBLISH,VEVENT,DTSTAMP,NONE,ONE -PUBLISH,VEVENT,DTSTART,NONE,ONE -PUBLISH,VEVENT,ORGANIZER,NONE,ONE -PUBLISH,VEVENT,SUMMARY,NONE,ONE -PUBLISH,VEVENT,UID,NONE,ONE -PUBLISH,VEVENT,RECURRENCEID,NONE,ZEROORONE -PUBLISH,VEVENT,SEQUENCE,NONE,ZEROORONE -PUBLISH,VEVENT,ATTACH,NONE,ZEROPLUS -PUBLISH,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard -PUBLISH,VEVENT,CLASS,NONE,ZEROORONE -PUBLISH,VEVENT,COMMENT,NONE,ZEROORONE -PUBLISH,VEVENT,CONTACT,NONE,ZEROPLUS -PUBLISH,VEVENT,CREATED,NONE,ZEROORONE -PUBLISH,VEVENT,DESCRIPTION,NONE,ZEROORONE -PUBLISH,VEVENT,DTEND,NONE,ZEROORONE -PUBLISH,VEVENT,DURATION,NONE,ZEROORONE -PUBLISH,VEVENT,EXDATE,NONE,ZEROPLUS -PUBLISH,VEVENT,EXRULE,NONE,ZEROPLUS -PUBLISH,VEVENT,GEO,NONE,ZEROORONE -PUBLISH,VEVENT,LASTMODIFIED,NONE,ZEROORONE -PUBLISH,VEVENT,LOCATION,NONE,ZEROORONE -PUBLISH,VEVENT,PRIORITY,NONE,ZEROORONE -PUBLISH,VEVENT,RDATE,NONE,ZEROPLUS -PUBLISH,VEVENT,RELATEDTO,NONE,ZEROPLUS -PUBLISH,VEVENT,RESOURCES,NONE,ZEROORONE -PUBLISH,VEVENT,RRULE,NONE,ZEROPLUS -PUBLISH,VEVENT,STATUS,NONE,ZEROORONE -PUBLISH,VEVENT,TRANSP,NONE,ZEROORONE -PUBLISH,VEVENT,URL,NONE,ZEROORONE -PUBLISH,VEVENT,X,NONE,ZEROPLUS -PUBLISH,VEVENT,ATTENDEE,NONE,ZERO -PUBLISH,VEVENT,REQUESTSTATUS,NONE,ZERO -PUBLISH,VEVENT,NONE,VALARM,ZEROPLUS -PUBLISH,VEVENT,NONE,VFREEBUSY,ZERO -PUBLISH,VEVENT,NONE,VJOURNAL,ZERO -PUBLISH,VEVENT,NONE,VTODO,ZERO -PUBLISH,VEVENT,NONE,VTIMEZONE,ZEROPLUS -PUBLISH,VEVENT,NONE,X,ZEROPLUS -REQUEST,VEVENT,NONE,NONE,ONEPLUS -REQUEST,VEVENT,ATTENDEE,NONE,ONEPLUS -REQUEST,VEVENT,DTSTAMP,NONE,ONE -REQUEST,VEVENT,DTSTART,NONE,ONE -REQUEST,VEVENT,ORGANIZER,NONE,ONE -REQUEST,VEVENT,SEQUENCE,NONE,ZEROORONE -REQUEST,VEVENT,SUMMARY,NONE,ONE -REQUEST,VEVENT,UID,NONE,ONE -REQUEST,VEVENT,ATTACH,NONE,ZEROPLUS -REQUEST,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard -REQUEST,VEVENT,CLASS,NONE,ZEROORONE -REQUEST,VEVENT,COMMENT,NONE,ZEROORONE -REQUEST,VEVENT,CONTACT,NONE,ZEROPLUS -REQUEST,VEVENT,CREATED,NONE,ZEROORONE -REQUEST,VEVENT,DESCRIPTION,NONE,ZEROORONE -REQUEST,VEVENT,DTEND,NONE,ONEEXCLUSIVE,icalrestriction_check_exclusive -REQUEST,VEVENT,DURATION,NONE,ONEEXCLUSIVE,icalrestriction_check_exclusive -REQUEST,VEVENT,EXDATE,NONE,ZEROPLUS -REQUEST,VEVENT,EXRULE,NONE,ZEROPLUS -REQUEST,VEVENT,GEO,NONE,ZEROORONE -REQUEST,VEVENT,LASTMODIFIED,NONE,ZEROORONE -REQUEST,VEVENT,LOCATION,NONE,ZEROORONE -REQUEST,VEVENT,PRIORITY,NONE,ZEROORONE -REQUEST,VEVENT,RDATE,NONE,ZEROPLUS -REQUEST,VEVENT,RECURRENCEID,NONE,ZEROORONE -REQUEST,VEVENT,RELATEDTO,NONE,ZEROPLUS -REQUEST,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS -REQUEST,VEVENT,RESOURCES,NONE,ZEROORONE -REQUEST,VEVENT,RRULE,NONE,ZEROPLUS -REQUEST,VEVENT,STATUS,NONE,ZEROORONE -REQUEST,VEVENT,TRANSP,NONE,ZEROORONE -REQUEST,VEVENT,URL,NONE,ZEROORONE -REQUEST,VEVENT,X,NONE,ZEROPLUS -REQUEST,VEVENT,NONE,VALARM,ZEROPLUS -REQUEST,VEVENT,NONE,VTIMEZONE,ZEROPLUS -REQUEST,VEVENT,NONE,X,ZEROPLUS -REQUEST,VEVENT,NONE,VFREEBUSY,ZERO -REQUEST,VEVENT,NONE,VJOURNAL,ZERO -REQUEST,VEVENT,NONE,VTODO,ZERO -REPLY,VEVENT,NONE,NONE,ONEPLUS -REPLY,VEVENT,ATTENDEE,NONE,ONE -REPLY,VEVENT,DTSTAMP,NONE,ONE -REPLY,VEVENT,ORGANIZER,NONE,ONE -REPLY,VEVENT,RECURRENCEID,NONE,ZEROORONE -REPLY,VEVENT,UID,NONE,ONE -REPLY,VEVENT,SEQUENCE,NONE,ZEROORONE -REPLY,VEVENT,ATTACH,NONE,ZEROPLUS -REPLY,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard -REPLY,VEVENT,CLASS,NONE,ZEROORONE -REPLY,VEVENT,COMMENT,NONE,ZEROORONE -REPLY,VEVENT,CONTACT,NONE,ZEROPLUS -REPLY,VEVENT,CREATED,NONE,ZEROORONE -REPLY,VEVENT,DESCRIPTION,NONE,ZEROORONE -REPLY,VEVENT,DTEND,NONE,ONEEXCLUSIVE,icalrestriction_check_exclusive -REPLY,VEVENT,DTSTART,NONE,ZEROORONE -REPLY,VEVENT,DURATION,NONE,ONEEXCLUSIVE,icalrestriction_check_exclusive -REPLY,VEVENT,EXDATE,NONE,ZEROPLUS -REPLY,VEVENT,EXRULE,NONE,ZEROPLUS -REPLY,VEVENT,GEO,NONE,ZEROORONE -REPLY,VEVENT,LASTMODIFIED,NONE,ZEROORONE -REPLY,VEVENT,LOCATION,NONE,ZEROORONE -REPLY,VEVENT,PRIORITY,NONE,ZEROORONE -REPLY,VEVENT,RDATE,NONE,ZEROPLUS -REPLY,VEVENT,RELATEDTO,NONE,ZEROPLUS -REPLY,VEVENT,RESOURCES,NONE,ZEROORONE -REPLY,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS -REPLY,VEVENT,RRULE,NONE,ZEROPLUS -REPLY,VEVENT,STATUS,NONE,ZEROORONE -REPLY,VEVENT,SUMMARY,NONE,ZEROORONE -REPLY,VEVENT,TRANSP,NONE,ZEROORONE -REPLY,VEVENT,URL,NONE,ZEROORONE -REPLY,VEVENT,X,NONE,ZEROPLUS -REPLY,VEVENT,NONE,VTIMEZONE,ZEROORONE -REPLY,VEVENT,NONE,X,ZEROPLUS -REPLY,VEVENT,NONE,VALARM,ZERO -REPLY,VEVENT,NONE,VFREEBUSY,ZERO -REPLY,VEVENT,NONE,VJOURNAL,ZERO -REPLY,VEVENT,NONE,VTODO,ZERO -ADD,VEVENT,NONE,NONE,ONE -ADD,VEVENT,DTSTAMP,NONE,ONE -ADD,VEVENT,DTSTART,NONE,ONE -ADD,VEVENT,ORGANIZER,NONE,ONE -ADD,VEVENT,SEQUENCE,NONE,ONE -ADD,VEVENT,SUMMARY,NONE,ONE -ADD,VEVENT,UID,NONE,ONE -ADD,VEVENT,ATTACH,NONE,ZEROPLUS -ADD,VEVENT,ATTENDEE,NONE,ZEROPLUS -ADD,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard -ADD,VEVENT,CLASS,NONE,ZEROORONE -ADD,VEVENT,COMMENT,NONE,ZEROORONE -ADD,VEVENT,CONTACT,NONE,ZEROPLUS -ADD,VEVENT,CREATED,NONE,ZEROORONE -ADD,VEVENT,DESCRIPTION,NONE,ZEROORONE -ADD,VEVENT,DTEND,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -ADD,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -ADD,VEVENT,EXDATE,NONE,ZEROPLUS -ADD,VEVENT,EXRULE,NONE,ZEROPLUS -ADD,VEVENT,GEO,NONE,ZEROORONE -ADD,VEVENT,LASTMODIFIED,NONE,ZEROORONE -ADD,VEVENT,LOCATION,NONE,ZEROORONE -ADD,VEVENT,PRIORITY,NONE,ZEROORONE -ADD,VEVENT,RDATE,NONE,ZEROPLUS -ADD,VEVENT,RELATEDTO,NONE,ZEROPLUS -ADD,VEVENT,RESOURCES,NONE,ZEROORONE -ADD,VEVENT,RRULE,NONE,ZEROPLUS -ADD,VEVENT,STATUS,NONE,ZEROORONE -ADD,VEVENT,TRANSP,NONE,ZEROORONE -ADD,VEVENT,URL,NONE,ZEROORONE -ADD,VEVENT,X,NONE,ZEROPLUS -ADD,VEVENT,RECURRENCEID,NONE,ZERO -ADD,VEVENT,REQUESTSTATUS,NONE,ZERO -ADD,VEVENT,NONE,VALARM,ZEROPLUS -ADD,VEVENT,NONE,VTIMEZONE,ZEROPLUS -ADD,VEVENT,NONE,X,ZEROPLUS -ADD,VEVENT,NONE,VFREEBUSY,ZERO -ADD,VEVENT,NONE,VTODO,ZERO -ADD,VEVENT,NONE,VJOURNAL,ZERO -CANCEL,VEVENT,NONE,NONE,ONEPLUS -CANCEL,VEVENT,ATTENDEE,NONE,ZEROPLUS -CANCEL,VEVENT,DTSTAMP,NONE,ONE -CANCEL,VEVENT,ORGANIZER,NONE,ONE -CANCEL,VEVENT,SEQUENCE,NONE,ONE -CANCEL,VEVENT,UID,NONE,ONE -CANCEL,VEVENT,COMMENT,NONE,ZEROORONE -CANCEL,VEVENT,ATTACH,NONE,ZEROPLUS -CANCEL,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard -CANCEL,VEVENT,CLASS,NONE,ZEROORONE -CANCEL,VEVENT,CONTACT,NONE,ZEROPLUS -CANCEL,VEVENT,CREATED,NONE,ZEROORONE -CANCEL,VEVENT,DESCRIPTION,NONE,ZEROORONE -CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -CANCEL,VEVENT,DTSTART,NONE,ZEROORONE -CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -CANCEL,VEVENT,EXDATE,NONE,ZEROPLUS -CANCEL,VEVENT,EXRULE,NONE,ZEROPLUS -CANCEL,VEVENT,GEO,NONE,ZEROORONE -CANCEL,VEVENT,LASTMODIFIED,NONE,ZEROORONE -CANCEL,VEVENT,LOCATION,NONE,ZEROORONE -CANCEL,VEVENT,PRIORITY,NONE,ZEROORONE -CANCEL,VEVENT,RDATE,NONE,ZEROPLUS -CANCEL,VEVENT,RECURRENCEID,NONE,ZEROORONE -CANCEL,VEVENT,RELATEDTO,NONE,ZEROPLUS -CANCEL,VEVENT,RESOURCES,NONE,ZEROORONE -CANCEL,VEVENT,RRULE,NONE,ZEROPLUS -CANCEL,VEVENT,STATUS,NONE,ZEROORONE -CANCEL,VEVENT,SUMMARY,NONE,ZEROORONE -CANCEL,VEVENT,TRANSP,NONE,ZEROORONE -CANCEL,VEVENT,URL,NONE,ZEROORONE -CANCEL,VEVENT,X,NONE,ZEROPLUS -CANCEL,VEVENT,REQUESTSTATUS,NONE,ZERO -CANCEL,VEVENT,NONE,VTIMEZONE,ZEROPLUS -CANCEL,VEVENT,NONE,X,ZEROPLUS -CANCEL,VEVENT,NONE,VTODO,ZERO -CANCEL,VEVENT,NONE,VJOURNAL,ZERO -CANCEL,VEVENT,NONE,VFREEBUSY,ZERO -CANCEL,VEVENT,NONE,VALARM,ZERO -REFRESH,VEVENT,NONE,NONE,ONE -REFRESH,VEVENT,ATTENDEE,NONE,ONE -REFRESH,VEVENT,DTSTAMP,NONE,ONE -REFRESH,VEVENT,ORGANIZER,NONE,ONE -REFRESH,VEVENT,UID,NONE,ONE -REFRESH,VEVENT,COMMENT,NONE,ZEROORONE -REFRESH,VEVENT,RECURRENCEID,NONE,ZEROORONE -REFRESH,VEVENT,X,NONE,ZEROPLUS -REFRESH,VEVENT,ATTACH,NONE,ZERO -REFRESH,VEVENT,CATEGORIES,NONE,ZERO -REFRESH,VEVENT,CLASS,NONE,ZERO -REFRESH,VEVENT,CONTACT,NONE,ZERO -REFRESH,VEVENT,CREATED,NONE,ZERO -REFRESH,VEVENT,DESCRIPTION,NONE,ZERO -REFRESH,VEVENT,DTEND,NONE,ZERO -REFRESH,VEVENT,DTSTART,NONE,ZERO -REFRESH,VEVENT,DURATION,NONE,ZERO -REFRESH,VEVENT,EXDATE,NONE,ZERO -REFRESH,VEVENT,EXRULE,NONE,ZERO -REFRESH,VEVENT,GEO,NONE,ZERO -REFRESH,VEVENT,LASTMODIFIED,NONE,ZERO -REFRESH,VEVENT,LOCATION,NONE,ZERO -REFRESH,VEVENT,PRIORITY,NONE,ZERO -REFRESH,VEVENT,RDATE,NONE,ZERO -REFRESH,VEVENT,RELATEDTO,NONE,ZERO -REFRESH,VEVENT,REQUESTSTATUS,NONE,ZERO -REFRESH,VEVENT,RESOURCES,NONE,ZERO -REFRESH,VEVENT,RRULE,NONE,ZERO -REFRESH,VEVENT,SEQUENCE,NONE,ZERO -REFRESH,VEVENT,STATUS,NONE,ZERO -REFRESH,VEVENT,SUMMARY,NONE,ZERO -REFRESH,VEVENT,TRANSP,NONE,ZERO -REFRESH,VEVENT,URL,NONE,ZERO -REFRESH,VEVENT,NONE,X,ZEROPLUS -REFRESH,VEVENT,NONE,VTODO,ZERO -REFRESH,VEVENT,NONE,VJOURNAL,ZERO -REFRESH,VEVENT,NONE,VFREEBUSY,ZERO -REFRESH,VEVENT,NONE,VTIMEZONE,ZERO -REFRESH,VEVENT,NONE,VALARM,ZERO -COUNTER,VEVENT,NONE,NONE,ONE -COUNTER,VEVENT,DTSTAMP,NONE,ONE -COUNTER,VEVENT,DTSTART,NONE,ONE -COUNTER,VEVENT,ORGANIZER,NONE,ONE -COUNTER,VEVENT,SEQUENCE,NONE,ONE -COUNTER,VEVENT,SUMMARY,NONE,ONE -COUNTER,VEVENT,UID,NONE,ONE -COUNTER,VEVENT,ATTACH,NONE,ZEROPLUS -COUNTER,VEVENT,ATTENDEE,NONE,ZEROPLUS -COUNTER,VEVENT,CATEGORIES,NONE,ZEROPLUS #Non-standard -COUNTER,VEVENT,CLASS,NONE,ZEROORONE -COUNTER,VEVENT,COMMENT,NONE,ZEROORONE -COUNTER,VEVENT,CONTACT,NONE,ZEROPLUS -COUNTER,VEVENT,CREATED,NONE,ZEROORONE -COUNTER,VEVENT,DESCRIPTION,NONE,ZEROORONE -COUNTER,VEVENT,DTEND,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -COUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -COUNTER,VEVENT,EXDATE,NONE,ZEROPLUS -COUNTER,VEVENT,EXRULE,NONE,ZEROPLUS -COUNTER,VEVENT,GEO,NONE,ZEROORONE -COUNTER,VEVENT,LASTMODIFIED,NONE,ZEROORONE -COUNTER,VEVENT,LOCATION,NONE,ZEROORONE -COUNTER,VEVENT,PRIORITY,NONE,ZEROORONE -COUNTER,VEVENT,RDATE,NONE,ZEROPLUS -COUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE -COUNTER,VEVENT,RELATEDTO,NONE,ZEROPLUS -COUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS -COUNTER,VEVENT,RESOURCES,NONE,ZEROORONE -COUNTER,VEVENT,RRULE,NONE,ZEROPLUS -COUNTER,VEVENT,STATUS,NONE,ZEROORONE -COUNTER,VEVENT,TRANSP,NONE,ZEROORONE -COUNTER,VEVENT,URL,NONE,ZEROORONE -COUNTER,VEVENT,X,NONE,ZEROPLUS -COUNTER,VEVENT,NONE,VALARM,ZEROPLUS -COUNTER,VEVENT,NONE,VTIMEZONE,ZEROPLUS -COUNTER,VEVENT,NONE,X,ZEROPLUS -COUNTER,VEVENT,NONE,VTODO,ZERO -COUNTER,VEVENT,NONE,VJOURNAL,ZERO -COUNTER,VEVENT,NONE,VFREEBUSY,ZERO -DECLINECOUNTER,VEVENT,NONE,NONE,ONE -DECLINECOUNTER,VEVENT,DTSTAMP,NONE,ONE -DECLINECOUNTER,VEVENT,ORGANIZER,NONE,ONE -DECLINECOUNTER,VEVENT,UID,NONE,ONE -DECLINECOUNTER,VEVENT,COMMENT,NONE,ZEROORONE -DECLINECOUNTER,VEVENT,RECURRENCEID,NONE,ZEROORONE -DECLINECOUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS -DECLINECOUNTER,VEVENT,SEQUENCE,NONE,ZERO -DECLINECOUNTER,VEVENT,X,NONE,ZEROPLUS -DECLINECOUNTER,VEVENT,ATTACH,NONE,ZERO -DECLINECOUNTER,VEVENT,ATTENDEE,NONE,ZERO -DECLINECOUNTER,VEVENT,CATEGORIES,NONE,ZERO -DECLINECOUNTER,VEVENT,CLASS,NONE,ZERO -DECLINECOUNTER,VEVENT,CONTACT,NONE,ZERO -DECLINECOUNTER,VEVENT,CREATED,NONE,ZERO -DECLINECOUNTER,VEVENT,DESCRIPTION,NONE,ZERO -DECLINECOUNTER,VEVENT,DTEND,NONE,ZERO -DECLINECOUNTER,VEVENT,DTSTART,NONE,ZERO -DECLINECOUNTER,VEVENT,DURATION,NONE,ZERO -DECLINECOUNTER,VEVENT,EXDATE,NONE,ZERO -DECLINECOUNTER,VEVENT,EXRULE,NONE,ZERO -DECLINECOUNTER,VEVENT,GEO,NONE,ZERO -DECLINECOUNTER,VEVENT,LASTMODIFIED,NONE,ZERO -DECLINECOUNTER,VEVENT,LOCATION,NONE,ZERO -DECLINECOUNTER,VEVENT,PRIORITY,NONE,ZERO -DECLINECOUNTER,VEVENT,RDATE,NONE,ZERO -DECLINECOUNTER,VEVENT,RELATEDTO,NONE,ZERO -DECLINECOUNTER,VEVENT,RESOURCES,NONE,ZERO -DECLINECOUNTER,VEVENT,RRULE,NONE,ZERO -DECLINECOUNTER,VEVENT,STATUS,NONE,ZERO -DECLINECOUNTER,VEVENT,SUMMARY,NONE,ZERO -DECLINECOUNTER,VEVENT,TRANSP,NONE,ZERO -DECLINECOUNTER,VEVENT,URL,NONE,ZERO -DECLINECOUNTER,VEVENT,NONE,X,ZEROPLUS -DECLINECOUNTER,VEVENT,NONE,VTODO,ZERO -DECLINECOUNTER,VEVENT,NONE,VJOURNAL,ZERO -DECLINECOUNTER,VEVENT,NONE,VFREEBUSY,ZERO -DECLINECOUNTER,VEVENT,NONE,VTIMEZONE,ZERO -DECLINECOUNTER,VEVENT,NONE,VALARM,ZERO -PUBLISH,VFREEBUSY,NONE,NONE,ONEPLUS -PUBLISH,VFREEBUSY,DTSTAMP,NONE,ONE -PUBLISH,VFREEBUSY,DTSTART,NONE,ONE -PUBLISH,VFREEBUSY,DTEND,NONE,ONE -PUBLISH,VFREEBUSY,FREEBUSY,NONE,ONEPLUS -PUBLISH,VFREEBUSY,ORGANIZER,NONE,ONE -PUBLISH,VFREEBUSY,COMMENT,NONE,ZEROORONE -PUBLISH,VFREEBUSY,CONTACT,NONE,ZEROPLUS -PUBLISH,VFREEBUSY,X,NONE,ZEROPLUS -PUBLISH,VFREEBUSY,URL,NONE,ZEROORONE -PUBLISH,VFREEBUSY,ATTENDEE,NONE,ZERO -PUBLISH,VFREEBUSY,DURATION,NONE,ZERO -PUBLISH,VFREEBUSY,REQUESTSTATUS,NONE,ZERO -PUBLISH,VFREEBUSY,UID,NONE,ZERO -PUBLISH,VFREEBUSY,NONE,X,ZEROPLUS -PUBLISH,VFREEBUSY,NONE,VEVENT,ZERO -PUBLISH,VFREEBUSY,NONE,VTODO,ZERO -PUBLISH,VFREEBUSY,NONE,VJOURNAL,ZERO -PUBLISH,VFREEBUSY,NONE,VTIMEZONE,ZERO -PUBLISH,VFREEBUSY,NONE,VALARM,ZERO -REQUEST,VFREEBUSY,NONE,NONE,ONE -REQUEST,VFREEBUSY,ATTENDEE,NONE,ONEPLUS -REQUEST,VFREEBUSY,DTEND,NONE,ONE -REQUEST,VFREEBUSY,DTSTAMP,NONE,ONE -REQUEST,VFREEBUSY,DTSTART,NONE,ONE -REQUEST,VFREEBUSY,ORGANIZER,NONE,ONE -REQUEST,VFREEBUSY,UID,NONE,ONE -REQUEST,VFREEBUSY,COMMENT,NONE,ZEROORONE -REQUEST,VFREEBUSY,CONTACT,NONE,ZEROPLUS -REQUEST,VFREEBUSY,X,NONE,ZEROPLUS -REQUEST,VFREEBUSY,FREEBUSY,NONE,ZERO -REQUEST,VFREEBUSY,DURATION,NONE,ZERO -REQUEST,VFREEBUSY,REQUESTSTATUS,NONE,ZERO -REQUEST,VFREEBUSY,URL,NONE,ZERO -REQUEST,VFREEBUSY,NONE,X,ZEROPLUS -REQUEST,VFREEBUSY,NONE,VALARM,ZERO -REQUEST,VFREEBUSY,NONE,VEVENT,ZERO -REQUEST,VFREEBUSY,NONE,VTODO,ZERO -REQUEST,VFREEBUSY,NONE,VJOURNAL,ZERO -REQUEST,VFREEBUSY,NONE,VTIMEZONE,ZERO -REPLY,VFREEBUSY,NONE,NONE,ONE -REPLY,VFREEBUSY,ATTENDEE,NONE,ONE -REPLY,VFREEBUSY,DTSTAMP,NONE,ONE -REPLY,VFREEBUSY,DTEND,NONE,ONE -REPLY,VFREEBUSY,DTSTART,NONE,ONE -REPLY,VFREEBUSY,FREEBUSY,NONE,ONEPLUS -REPLY,VFREEBUSY,ORGANIZER,NONE,ONE -REPLY,VFREEBUSY,UID,NONE,ONE -REPLY,VFREEBUSY,COMMENT,NONE,ZEROORONE -REPLY,VFREEBUSY,CONTACT,NONE,ZEROPLUS -REPLY,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS -REPLY,VFREEBUSY,URL,NONE,ZEROORONE -REPLY,VFREEBUSY,X,NONE,ZEROPLUS -REPLY,VFREEBUSY,DURATION,NONE,ZERO -REPLY,VFREEBUSY,SEQUENCE,NONE,ZERO -REPLY,VFREEBUSY,NONE,X,ZEROPLUS -REPLY,VFREEBUSY,NONE,VALARM,ZERO -REPLY,VFREEBUSY,NONE,VEVENT,ZERO -REPLY,VFREEBUSY,NONE,VTODO,ZERO -REPLY,VFREEBUSY,NONE,VJOURNAL,ZERO -REPLY,VFREEBUSY,NONE,VTIMEZONE,ZERO -PUBLISH,VTODO,NONE,NONE,ONEPLUS -PUBLISH,VTODO,DTSTAMP,NONE,ONE -PUBLISH,VTODO,DTSTART,NONE,ONE -PUBLISH,VTODO,ORGANIZER,NONE,ONE -PUBLISH,VTODO,PRIORITY,NONE,ONE -PUBLISH,VTODO,SEQUENCE,NONE,ZEROORONE -PUBLISH,VTODO,SUMMARY,NONE,ONE -PUBLISH,VTODO,UID,NONE,ONE -PUBLISH,VTODO,ATTACH,NONE,ZEROPLUS -PUBLISH,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard -PUBLISH,VTODO,CLASS,NONE,ZEROORONE -PUBLISH,VTODO,COMMENT,NONE,ZEROORONE -PUBLISH,VTODO,CONTACT,NONE,ZEROPLUS -PUBLISH,VTODO,CREATED,NONE,ZEROORONE -PUBLISH,VTODO,DESCRIPTION,NONE,ZEROORONE -PUBLISH,VTODO,DUE,NONE,ZEROORONE -PUBLISH,VTODO,DURATION,NONE,ZEROORONE -PUBLISH,VTODO,EXDATE,NONE,ZEROPLUS -PUBLISH,VTODO,EXRULE,NONE,ZEROPLUS -PUBLISH,VTODO,GEO,NONE,ZEROORONE -PUBLISH,VTODO,LASTMODIFIED,NONE,ZEROORONE -PUBLISH,VTODO,LOCATION,NONE,ZEROORONE -PUBLISH,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -PUBLISH,VTODO,RDATE,NONE,ZEROPLUS -PUBLISH,VTODO,RECURRENCEID,NONE,ZEROORONE -PUBLISH,VTODO,RELATEDTO,NONE,ZEROPLUS -PUBLISH,VTODO,RESOURCES,NONE,ZEROORONE -PUBLISH,VTODO,RRULE,NONE,ZEROPLUS -PUBLISH,VTODO,STATUS,NONE,ZEROORONE -PUBLISH,VTODO,URL,NONE,ZEROORONE -PUBLISH,VTODO,X,NONE,ZEROPLUS -PUBLISH,VTODO,ATTENDEE,NONE,ZERO -PUBLISH,VTODO,REQUESTSTATUS,NONE,ZERO -PUBLISH,VTODO,NONE,VTIMEZONE,ZEROPLUS -PUBLISH,VTODO,NONE,VALARM,ZEROPLUS -PUBLISH,VTODO,NONE,X,ZEROPLUS -PUBLISH,VTODO,NONE,VFREEBUSY,ZERO -PUBLISH,VTODO,NONE,VEVENT,ZERO -PUBLISH,VTODO,NONE,VJOURNAL,ZERO -REQUEST,VTODO,NONE,NONE,ONEPLUS -REQUEST,VTODO,ATTENDEE,NONE,ONEPLUS -REQUEST,VTODO,DTSTAMP,NONE,ONE -REQUEST,VTODO,DTSTART,NONE,ONE -REQUEST,VTODO,ORGANIZER,NONE,ONE -REQUEST,VTODO,PRIORITY,NONE,ONE -REQUEST,VTODO,SEQUENCE,NONE,ZEROORONE -REQUEST,VTODO,SUMMARY,NONE,ONE -REQUEST,VTODO,UID,NONE,ONE -REQUEST,VTODO,ATTACH,NONE,ZEROPLUS -REQUEST,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard -REQUEST,VTODO,CLASS,NONE,ZEROORONE -REQUEST,VTODO,COMMENT,NONE,ZEROORONE -REQUEST,VTODO,CONTACT,NONE,ZEROPLUS -REQUEST,VTODO,CREATED,NONE,ZEROORONE -REQUEST,VTODO,DESCRIPTION,NONE,ZEROORONE -REQUEST,VTODO,DUE,NONE,ZEROORONE -REQUEST,VTODO,DURATION,NONE,ZEROORONE -REQUEST,VTODO,EXDATE,NONE,ZEROPLUS -REQUEST,VTODO,EXRULE,NONE,ZEROPLUS -REQUEST,VTODO,GEO,NONE,ZEROORONE -REQUEST,VTODO,LASTMODIFIED,NONE,ZEROORONE -REQUEST,VTODO,LOCATION,NONE,ZEROORONE -REQUEST,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -REQUEST,VTODO,RDATE,NONE,ZEROPLUS -REQUEST,VTODO,RECURRENCEID,NONE,ZEROORONE -REQUEST,VTODO,RELATEDTO,NONE,ZEROPLUS -REQUEST,VTODO,RESOURCES,NONE,ZEROORONE -REQUEST,VTODO,RRULE,NONE,ZEROPLUS -REQUEST,VTODO,STATUS,NONE,ZEROORONE -REQUEST,VTODO,URL,NONE,ZEROORONE -REQUEST,VTODO,X,NONE,ZEROPLUS -REQUEST,VTODO,REQUESTSTATUS,NONE,ZERO -REQUEST,VTODO,NONE,VALARM,ZEROPLUS -REQUEST,VTODO,NONE,VTIMEZONE,ZEROPLUS -REQUEST,VTODO,NONE,X,ZEROPLUS -REQUEST,VTODO,NONE,VEVENT,ZERO -REQUEST,VTODO,NONE,VFREEBUSY,ZERO -REQUEST,VTODO,NONE,VJOURNAL,ZERO -REPLY,VTODO,NONE,NONE,ONEPLUS -REPLY,VTODO,ATTENDEE,NONE,ONEPLUS -REPLY,VTODO,DTSTAMP,NONE,ONE -REPLY,VTODO,ORGANIZER,NONE,ONE -REPLY,VTODO,REQUESTSTATUS,NONE,ONEPLUS -REPLY,VTODO,UID,NONE,ONE -REPLY,VTODO,ATTACH,NONE,ZEROPLUS -REPLY,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard -REPLY,VTODO,CLASS,NONE,ZEROORONE -REPLY,VTODO,COMMENT,NONE,ZEROORONE -REPLY,VTODO,CONTACT,NONE,ZEROPLUS -REPLY,VTODO,CREATED,NONE,ZEROORONE -REPLY,VTODO,DESCRIPTION,NONE,ZEROORONE -REPLY,VTODO,DTSTART,NONE,ZEROORONE -REPLY,VTODO,DUE,NONE,ZEROORONE -REPLY,VTODO,DURATION,NONE,ZEROORONE -REPLY,VTODO,EXDATE,NONE,ZEROPLUS -REPLY,VTODO,EXRULE,NONE,ZEROPLUS -REPLY,VTODO,GEO,NONE,ZEROORONE -REPLY,VTODO,LASTMODIFIED,NONE,ZEROORONE -REPLY,VTODO,LOCATION,NONE,ZEROORONE -REPLY,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -REPLY,VTODO,PRIORITY,NONE,ZEROORONE -REPLY,VTODO,RDATE,NONE,ZEROPLUS -REPLY,VTODO,RELATEDTO,NONE,ZEROPLUS -REPLY,VTODO,RESOURCES,NONE,ZEROORONE -REPLY,VTODO,RRULE,NONE,ZEROPLUS -REPLY,VTODO,RECURRENCEID,NONE,ZEROORONE -REPLY,VTODO,SEQUENCE,NONE,ZEROORONE -REPLY,VTODO,STATUS,NONE,ZEROORONE -REPLY,VTODO,SUMMARY,NONE,ZEROORONE -REPLY,VTODO,URL,NONE,ZEROORONE -REPLY,VTODO,X,NONE,ZEROPLUS -REPLY,VTODO,NONE,VTIMEZONE,ZEROORONE -REPLY,VTODO,NONE,X,ZEROPLUS -REPLY,VTODO,NONE,VALARM,ZERO -REPLY,VTODO,NONE,VEVENT,ZERO -REPLY,VTODO,NONE,VFREEBUSY,ZERO -ADD,VTODO,NONE,NONE,ONE -ADD,VTODO,DTSTAMP,NONE,ONE -ADD,VTODO,ORGANIZER,NONE,ONE -ADD,VTODO,PRIORITY,NONE,ONE -ADD,VTODO,SEQUENCE,NONE,ONE -ADD,VTODO,SUMMARY,NONE,ONE -ADD,VTODO,UID,NONE,ONE -ADD,VTODO,ATTACH,NONE,ZEROPLUS -ADD,VTODO,ATTENDEE,NONE,ZEROPLUS -ADD,VTODO,CATEGORIES,NONE,ZEROPLUS -ADD,VTODO,CLASS,NONE,ZEROORONE -ADD,VTODO,COMMENT,NONE,ZEROORONE -ADD,VTODO,CONTACT,NONE,ZEROPLUS -ADD,VTODO,CREATED,NONE,ZEROORONE -ADD,VTODO,DESCRIPTION,NONE,ZEROORONE -ADD,VTODO,DTSTART,NONE,ZEROORONE -ADD,VTODO,DUE,NONE,ZEROORONE -ADD,VTODO,DURATION,NONE,ZEROORONE -ADD,VTODO,EXDATE,NONE,ZEROPLUS -ADD,VTODO,EXRULE,NONE,ZEROPLUS -ADD,VTODO,GEO,NONE,ZEROORONE -ADD,VTODO,LASTMODIFIED,NONE,ZEROORONE -ADD,VTODO,LOCATION,NONE,ZEROORONE -ADD,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -ADD,VTODO,RDATE,NONE,ZEROPLUS -ADD,VTODO,RELATEDTO,NONE,ZEROPLUS -ADD,VTODO,RESOURCES,NONE,ZEROORONE -ADD,VTODO,RRULE,NONE,ZEROPLUS -ADD,VTODO,STATUS,NONE,ZEROORONE -ADD,VTODO,URL,NONE,ZEROORONE -ADD,VTODO,X,NONE,ZEROPLUS -ADD,VTODO,RECURRENCEID,NONE,ZERO -ADD,VTODO,REQUESTSTATUS,NONE,ZERO -ADD,VTODO,NONE,VALARM,ZEROPLUS -ADD,VTODO,NONE,VTIMEZONE,ZEROPLUS -ADD,VTODO,NONE,X,ZEROPLUS -ADD,VTODO,NONE,VEVENT,ZERO -ADD,VTODO,NONE,VJOURNAL,ZERO -ADD,VTODO,NONE,VFREEBUSY,ZERO -CANCEL,VTODO,NONE,NONE,ONE -CANCEL,VTODO,ATTENDEE,NONE,ZEROPLUS -CANCEL,VTODO,UID,NONE,ONE -CANCEL,VTODO,DTSTAMP,NONE,ONE -CANCEL,VTODO,ORGANIZER,NONE,ONE -CANCEL,VTODO,SEQUENCE,NONE,ONE -CANCEL,VTODO,ATTACH,NONE,ZEROPLUS -CANCEL,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-Standard -CANCEL,VTODO,CLASS,NONE,ZEROORONE -CANCEL,VTODO,COMMENT,NONE,ZEROORONE -CANCEL,VTODO,CONTACT,NONE,ZEROPLUS -CANCEL,VTODO,CREATED,NONE,ZEROORONE -CANCEL,VTODO,DESCRIPTION,NONE,ZEROORONE -CANCEL,VTODO,DTSTART,NONE,ZEROORONE -CANCEL,VTODO,DUE,NONE,ZEROORONE -CANCEL,VTODO,DURATION,NONE,ZEROORONE -CANCEL,VTODO,EXDATE,NONE,ZEROPLUS -CANCEL,VTODO,EXRULE,NONE,ZEROPLUS -CANCEL,VTODO,GEO,NONE,ZEROORONE -CANCEL,VTODO,LASTMODIFIED,NONE,ZEROORONE -CANCEL,VTODO,LOCATION,NONE,ZEROORONE -CANCEL,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -CANCEL,VTODO,RDATE,NONE,ZEROPLUS -CANCEL,VTODO,RECURRENCEID,NONE,ZEROORONE -CANCEL,VTODO,RELATEDTO,NONE,ZEROPLUS -CANCEL,VTODO,RESOURCES,NONE,ZEROORONE -CANCEL,VTODO,RRULE,NONE,ZEROPLUS -CANCEL,VTODO,PRIORITY,NONE,ZEROORONE -CANCEL,VTODO,STATUS,NONE,ZEROORONE -CANCEL,VTODO,URL,NONE,ZEROORONE -CANCEL,VTODO,X,NONE,ZEROPLUS -CANCEL,VTODO,REQUESTSTATUS,NONE,ZERO -CANCEL,VTODO,NONE,VTIMEZONE,ZEROORONE -CANCEL,VTODO,NONE,X,ZEROPLUS -CANCEL,VTODO,NONE,VALARM,ZERO -CANCEL,VTODO,NONE,VEVENT,ZERO -CANCEL,VTODO,NONE,VFREEBUSY,ZERO -REFRESH,VTODO,NONE,NONE,ONE -REFRESH,VTODO,ATTENDEE,NONE,ONE -REFRESH,VTODO,DTSTAMP,NONE,ONE -REFRESH,VTODO,UID,NONE,ONE -REFRESH,VTODO,RECURRENCEID,NONE,ZEROORONE -REFRESH,VTODO,X,NONE,ZEROPLUS -REFRESH,VTODO,ATTACH,NONE,ZERO -REFRESH,VTODO,CATEGORIES,NONE,ZERO -REFRESH,VTODO,CLASS,NONE,ZERO -REFRESH,VTODO,COMMENT,NONE,ZERO -REFRESH,VTODO,CONTACT,NONE,ZERO -REFRESH,VTODO,CREATED,NONE,ZERO -REFRESH,VTODO,DESCRIPTION,NONE,ZERO -REFRESH,VTODO,DTSTART,NONE,ZERO -REFRESH,VTODO,DUE,NONE,ZERO -REFRESH,VTODO,DURATION,NONE,ZERO -REFRESH,VTODO,EXDATE,NONE,ZERO -REFRESH,VTODO,EXRULE,NONE,ZERO -REFRESH,VTODO,GEO,NONE,ZERO -REFRESH,VTODO,LASTMODIFIED,NONE,ZERO -REFRESH,VTODO,LOCATION,NONE,ZERO -REFRESH,VTODO,ORGANIZER,NONE,ZERO -REFRESH,VTODO,PERCENTCOMPLETE,NONE,ZERO -REFRESH,VTODO,PRIORITY,NONE,ZERO -REFRESH,VTODO,RDATE,NONE,ZERO -REFRESH,VTODO,RELATEDTO,NONE,ZERO -REFRESH,VTODO,REQUESTSTATUS,NONE,ZERO -REFRESH,VTODO,RESOURCES,NONE,ZERO -REFRESH,VTODO,RRULE,NONE,ZERO -REFRESH,VTODO,SEQUENCE,NONE,ZERO -REFRESH,VTODO,STATUS,NONE,ZERO -REFRESH,VTODO,URL,NONE,ZERO -REFRESH,VTODO,NONE,X,ZEROPLUS -REFRESH,VTODO,NONE,VALARM,ZERO -REFRESH,VTODO,NONE,VEVENT,ZERO -REFRESH,VTODO,NONE,VFREEBUSY,ZERO -REFRESH,VTODO,NONE,VTIMEZONE,ZERO -COUNTER,VTODO,NONE,NONE,ONE -COUNTER,VTODO,ATTENDEE,NONE,ONEPLUS -COUNTER,VTODO,DTSTAMP,NONE,ONE -COUNTER,VTODO,ORGANIZER,NONE,ONE -COUNTER,VTODO,PRIORITY,NONE,ONE -COUNTER,VTODO,SUMMARY,NONE,ONE -COUNTER,VTODO,UID,NONE,ONE -COUNTER,VTODO,ATTACH,NONE,ZEROPLUS -COUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard -COUNTER,VTODO,CLASS,NONE,ZEROORONE -COUNTER,VTODO,COMMENT,NONE,ZEROORONE -COUNTER,VTODO,CONTACT,NONE,ZEROPLUS -COUNTER,VTODO,CREATED,NONE,ZEROORONE -COUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE -COUNTER,VTODO,DTSTART,NONE,ZEROORONE -COUNTER,VTODO,DUE,NONE,ZEROORONE -COUNTER,VTODO,DURATION,NONE,ZEROORONE -COUNTER,VTODO,EXDATE,NONE,ZEROPLUS -COUNTER,VTODO,EXRULE,NONE,ZEROPLUS -COUNTER,VTODO,GEO,NONE,ZEROORONE -COUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE -COUNTER,VTODO,LOCATION,NONE,ZEROORONE -COUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -COUNTER,VTODO,RDATE,NONE,ZEROPLUS -COUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE -COUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS -COUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS -COUNTER,VTODO,RESOURCES,NONE,ZEROORONE -COUNTER,VTODO,RRULE,NONE,ZEROORONE -COUNTER,VTODO,SEQUENCE,NONE,ZEROORONE -COUNTER,VTODO,STATUS,NONE,ZEROORONE -COUNTER,VTODO,URL,NONE,ZEROORONE -COUNTER,VTODO,X,NONE,ZEROPLUS -COUNTER,VTODO,NONE,VALARM,ZEROPLUS -COUNTER,VTODO,NONE,VTIMEZONE,ZEROORONE -COUNTER,VTODO,NONE,X,ZEROPLUS -COUNTER,VTODO,NONE,VEVENT,ZERO -COUNTER,VTODO,NONE,VFREEBUSY,ZERO -DECLINECOUNTER,VTODO,NONE,NONE,ONE -DECLINECOUNTER,VTODO,ATTENDEE,NONE,ONEPLUS -DECLINECOUNTER,VTODO,DTSTAMP,NONE,ONE -DECLINECOUNTER,VTODO,ORGANIZER,NONE,ONE -DECLINECOUNTER,VTODO,SEQUENCE,NONE,ONE -DECLINECOUNTER,VTODO,UID,NONE,ONE -DECLINECOUNTER,VTODO,ATTACH,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,CATEGORIES,NONE,ZEROPLUS #Non-standard -DECLINECOUNTER,VTODO,CLASS,NONE,ZEROORONE -DECLINECOUNTER,VTODO,COMMENT,NONE,ZEROORONE -DECLINECOUNTER,VTODO,CONTACT,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,CREATED,NONE,ZEROORONE -DECLINECOUNTER,VTODO,DESCRIPTION,NONE,ZEROORONE -DECLINECOUNTER,VTODO,DTSTART,NONE,ZEROORONE -DECLINECOUNTER,VTODO,DUE,NONE,ZEROORONE -DECLINECOUNTER,VTODO,DURATION,NONE,ZEROORONE -DECLINECOUNTER,VTODO,EXDATE,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,EXRULE,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,GEO,NONE,ZEROORONE -DECLINECOUNTER,VTODO,LASTMODIFIED,NONE,ZEROORONE -DECLINECOUNTER,VTODO,LOCATION,NONE,ZEROORONE -DECLINECOUNTER,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -DECLINECOUNTER,VTODO,PRIORITY,NONE,ZEROORONE -DECLINECOUNTER,VTODO,RDATE,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,RECURRENCEID,NONE,ZEROORONE -DECLINECOUNTER,VTODO,RELATEDTO,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,RESOURCES,NONE,ZEROORONE -DECLINECOUNTER,VTODO,RRULE,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,STATUS,NONE,ZEROORONE -DECLINECOUNTER,VTODO,URL,NONE,ZEROORONE -DECLINECOUNTER,VTODO,X,NONE,ZEROPLUS -DECLINECOUNTER,VTODO,NONE,VTIMEZONE,ZEROPLUS -DECLINECOUNTER,VTODO,NONE,X,ZEROPLUS -DECLINECOUNTER,VTODO,NONE,VALARM,ZERO -DECLINECOUNTER,VTODO,NONE,VEVENT,ZERO -DECLINECOUNTER,VTODO,NONE,VFREEBUSY,ZERO -PUBLISH,VJOURNAL,NONE,NONE,ONEPLUS -PUBLISH,VJOURNAL,DESCRIPTION,NONE,ONE -PUBLISH,VJOURNAL,DTSTAMP,NONE,ONE -PUBLISH,VJOURNAL,DTSTART,NONE,ONE -PUBLISH,VJOURNAL,ORGANIZER,NONE,ONE -PUBLISH,VJOURNAL,UID,NONE,ONE -PUBLISH,VJOURNAL,ATTACH,NONE,ZEROPLUS -PUBLISH,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard -PUBLISH,VJOURNAL,CLASS,NONE,ZEROORONE -PUBLISH,VJOURNAL,COMMENT,NONE,ZEROORONE -PUBLISH,VJOURNAL,CONTACT,NONE,ZEROPLUS -PUBLISH,VJOURNAL,CREATED,NONE,ZEROORONE -PUBLISH,VJOURNAL,EXDATE,NONE,ZEROPLUS -PUBLISH,VJOURNAL,EXRULE,NONE,ZEROPLUS -PUBLISH,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE -PUBLISH,VJOURNAL,RDATE,NONE,ZEROPLUS -PUBLISH,VJOURNAL,RECURRENCEID,NONE,ZEROORONE -PUBLISH,VJOURNAL,RELATEDTO,NONE,ZEROPLUS -PUBLISH,VJOURNAL,RRULE,NONE,ZEROPLUS -PUBLISH,VJOURNAL,SEQUENCE,NONE,ZEROORONE -PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE -PUBLISH,VJOURNAL,SUMMARY,NONE,ZEROORONE -PUBLISH,VJOURNAL,URL,NONE,ZEROORONE -PUBLISH,VJOURNAL,X,NONE,ZEROPLUS -PUBLISH,VJOURNAL,ATTENDEE,NONE,ZERO -PUBLISH,VJOURNAL,NONE,VALARM,ZEROPLUS -PUBLISH,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS -PUBLISH,VJOURNAL,NONE,X,ZEROPLUS -PUBLISH,VJOURNAL,NONE,VEVENT,ZERO -PUBLISH,VJOURNAL,NONE,VFREEBUSY,ZERO -PUBLISH,VJOURNAL,NONE,VTODO,ZERO -ADD,VJOURNAL,NONE,NONE,ONE -ADD,VJOURNAL,DESCRIPTION,NONE,ONE -ADD,VJOURNAL,DTSTAMP,NONE,ONE -ADD,VJOURNAL,DTSTART,NONE,ONE -ADD,VJOURNAL,ORGANIZER,NONE,ONE -ADD,VJOURNAL,SEQUENCE,NONE,ONE -ADD,VJOURNAL,UID,NONE,ONE -ADD,VJOURNAL,ATTACH,NONE,ZEROPLUS -ADD,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard -ADD,VJOURNAL,CLASS,NONE,ZEROORONE -ADD,VJOURNAL,COMMENT,NONE,ZEROORONE -ADD,VJOURNAL,CONTACT,NONE,ZEROPLUS -ADD,VJOURNAL,CREATED,NONE,ZEROORONE -ADD,VJOURNAL,EXDATE,NONE,ZEROPLUS -ADD,VJOURNAL,EXRULE,NONE,ZEROPLUS -ADD,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE -ADD,VJOURNAL,RDATE,NONE,ZEROPLUS -ADD,VJOURNAL,RELATEDTO,NONE,ZEROPLUS -ADD,VJOURNAL,RRULE,NONE,ZEROPLUS -ADD,VJOURNAL,STATUS,NONE,ZEROORONE -ADD,VJOURNAL,SUMMARY,NONE,ZEROORONE -ADD,VJOURNAL,URL,NONE,ZEROORONE -ADD,VJOURNAL,X,NONE,ZEROPLUS -ADD,VJOURNAL,ATTENDEE,NONE,ZERO -ADD,VJOURNAL,RECURRENCEID,NONE,ZERO -ADD,VJOURNAL,NONE,VALARM,ZEROPLUS -ADD,VJOURNAL,NONE,VTIMEZONE,ZEROORONE -ADD,VJOURNAL,NONE,X,ZEROPLUS -ADD,VJOURNAL,NONE,VEVENT,ZERO -ADD,VJOURNAL,NONE,VFREEBUSY,ZERO -ADD,VJOURNAL,NONE,VTODO,ZERO -CANCEL,VJOURNAL,NONE,NONE,ONEPLUS -CANCEL,VJOURNAL,DTSTAMP,NONE,ONE -CANCEL,VJOURNAL,ORGANIZER,NONE,ONE -CANCEL,VJOURNAL,SEQUENCE,NONE,ONE -CANCEL,VJOURNAL,UID,NONE,ONE -CANCEL,VJOURNAL,ATTACH,NONE,ZEROPLUS -CANCEL,VJOURNAL,ATTENDEE,NONE,ZEROPLUS -CANCEL,VJOURNAL,CATEGORIES,NONE,ZEROPLUS #Non-standard -CANCEL,VJOURNAL,CLASS,NONE,ZEROORONE -CANCEL,VJOURNAL,COMMENT,NONE,ZEROORONE -CANCEL,VJOURNAL,CONTACT,NONE,ZEROPLUS -CANCEL,VJOURNAL,CREATED,NONE,ZEROORONE -CANCEL,VJOURNAL,DESCRIPTION,NONE,ZEROORONE -CANCEL,VJOURNAL,DTSTART,NONE,ZEROORONE -CANCEL,VJOURNAL,EXDATE,NONE,ZEROPLUS -CANCEL,VJOURNAL,EXRULE,NONE,ZEROPLUS -CANCEL,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE -CANCEL,VJOURNAL,RDATE,NONE,ZEROPLUS -CANCEL,VJOURNAL,RECURRENCEID,NONE,ZEROORONE -CANCEL,VJOURNAL,RELATEDTO,NONE,ZEROPLUS -CANCEL,VJOURNAL,RRULE,NONE,ZEROPLUS -CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE -CANCEL,VJOURNAL,SUMMARY,NONE,ZEROORONE -CANCEL,VJOURNAL,URL,NONE,ZEROORONE -CANCEL,VJOURNAL,X,NONE,ZEROPLUS -CANCEL,VJOURNAL,REQUESTSTATUS,NONE,ZERO -CANCEL,VJOURNAL,NONE,VTIMEZONE,ZEROPLUS -CANCEL,VJOURNAL,NONE,X,ZEROPLUS -CANCEL,VJOURNAL,NONE,VALARM,ZERO -CANCEL,VJOURNAL,NONE,VEVENT,ZERO -CANCEL,VJOURNAL,NONE,VFREEBUSY,ZERO -CANCEL,VJOURNAL,NONE,VTODO,ZERO -NONE,VCALENDAR,ACTION,NONE,ZERO -NONE,VCALENDAR,ATTACH,NONE,ZERO -NONE,VCALENDAR,ATTENDEE,NONE,ZERO -NONE,VCALENDAR,CALSCALE,NONE,ZEROORONE -NONE,VCALENDAR,CATEGORIES,NONE,ZERO -NONE,VCALENDAR,CLASS,NONE,ZERO -NONE,VCALENDAR,COMMENT,NONE,ZERO -NONE,VCALENDAR,COMPLETED,NONE,ZERO -NONE,VCALENDAR,CONTACT,NONE,ZERO -NONE,VCALENDAR,CREATED,NONE,ZERO -NONE,VCALENDAR,DESCRIPTION,NONE,ZERO -NONE,VCALENDAR,DTEND,NONE,ZERO -NONE,VCALENDAR,DTSTAMP,NONE,ZERO -NONE,VCALENDAR,DTSTART,NONE,ZERO -NONE,VCALENDAR,DUE,NONE,ZERO -NONE,VCALENDAR,DURATION,NONE,ZERO -NONE,VCALENDAR,EXDATE,NONE,ZERO -NONE,VCALENDAR,EXRULE,NONE,ZERO -NONE,VCALENDAR,FREEBUSY,NONE,ZERO -NONE,VCALENDAR,GEO,NONE,ZERO -NONE,VCALENDAR,LASTMODIFIED,NONE,ZERO -NONE,VCALENDAR,LOCATION,NONE,ZERO -NONE,VCALENDAR,METHOD,NONE,ZEROORONE -NONE,VCALENDAR,ORGANIZER,NONE,ZERO -NONE,VCALENDAR,PERCENTCOMPLETE,NONE,ZERO -NONE,VCALENDAR,PRIORITY,NONE,ZERO -NONE,VCALENDAR,PRODID,NONE,ONE -NONE,VCALENDAR,RDATE,NONE,ZERO -NONE,VCALENDAR,RECURRENCEID,NONE,ZERO -NONE,VCALENDAR,RELATEDTO,NONE,ZERO -NONE,VCALENDAR,REPEAT,NONE,ZERO -NONE,VCALENDAR,REQUESTSTATUS,NONE,ZERO -NONE,VCALENDAR,RESOURCES,NONE,ZERO -NONE,VCALENDAR,RRULE,NONE,ZERO -NONE,VCALENDAR,SEQUENCE,NONE,ZERO -NONE,VCALENDAR,STATUS,NONE,ZERO -NONE,VCALENDAR,SUMMARY,NONE,ZERO -NONE,VCALENDAR,TRANSP,NONE,ZERO -NONE,VCALENDAR,TRIGGER,NONE,ZERO -NONE,VCALENDAR,TZID,NONE,ZERO -NONE,VCALENDAR,TZNAME,NONE,ZERO -NONE,VCALENDAR,TZOFFSETFROM,NONE,ZERO -NONE,VCALENDAR,TZOFFSETTO,NONE,ZERO -NONE,VCALENDAR,TZURL,NONE,ZERO -NONE,VCALENDAR,UID,NONE,ZERO -NONE,VCALENDAR,URL,NONE,ZERO -NONE,VCALENDAR,VERSION,NONE,ONE -NONE,VCALENDAR,X,NONE,ZEROPLUS -NONE,VEVENT,ACTION,NONE,ZERO -NONE,VEVENT,ATTACH,NONE,ZEROPLUS -NONE,VEVENT,ATTENDEE,NONE,ZEROPLUS -NONE,VEVENT,CALSCALE,NONE,ZERO -NONE,VEVENT,CATEGORIES,NONE,ZEROPLUS -NONE,VEVENT,CLASS,NONE,ZEROORONE -NONE,VEVENT,COMMENT,NONE,ZEROPLUS -NONE,VEVENT,COMPLETED,NONE,ZERO -NONE,VEVENT,CONTACT,NONE,ZEROPLUS -NONE,VEVENT,CREATED,NONE,ZEROORONE -NONE,VEVENT,DESCRIPTION,NONE,ZEROORONE -NONE,VEVENT,DTEND,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -NONE,VEVENT,DTSTAMP,NONE,ZEROORONE -NONE,VEVENT,DTSTART,NONE,ZEROORONE -NONE,VEVENT,DUE,NONE,ZERO -NONE,VEVENT,DURATION,NONE,ONEEXCLUSIVE, icalrestriction_check_exclusive -NONE,VEVENT,EXDATE,NONE,ZEROPLUS -NONE,VEVENT,EXRULE,NONE,ZEROPLUS -NONE,VEVENT,FREEBUSY,NONE,ZERO -NONE,VEVENT,GEO,NONE,ZEROORONE -NONE,VEVENT,LASTMODIFIED,NONE,ZEROORONE -NONE,VEVENT,LOCATION,NONE,ZEROORONE -NONE,VEVENT,METHOD,NONE,ZERO -NONE,VEVENT,ORGANIZER,NONE,ZEROORONE -NONE,VEVENT,PERCENTCOMPLETE,NONE,ZERO -NONE,VEVENT,PRIORITY,NONE,ZEROORONE -NONE,VEVENT,PRODID,NONE,ZERO -NONE,VEVENT,RDATE,NONE,ZEROPLUS -NONE,VEVENT,RECURRENCEID,NONE,ZEROORONE -NONE,VEVENT,RELATEDTO,NONE,ZEROPLUS -NONE,VEVENT,REPEAT,NONE,ZERO -NONE,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS -NONE,VEVENT,RESOURCES,NONE,ZEROPLUS -NONE,VEVENT,RRULE,NONE,ZEROPLUS -NONE,VEVENT,SEQUENCE,NONE,ZEROORONE -NONE,VEVENT,STATUS,NONE,ZEROORONE -NONE,VEVENT,SUMMARY,NONE,ZEROORONE -NONE,VEVENT,TRANSP,NONE,ZEROORONE -NONE,VEVENT,TRIGGER,NONE,ZERO -NONE,VEVENT,TZID,NONE,ZERO -NONE,VEVENT,TZNAME,NONE,ZERO -NONE,VEVENT,TZOFFSETFROM,NONE,ZERO -NONE,VEVENT,TZOFFSETTO,NONE,ZERO -NONE,VEVENT,TZURL,NONE,ZERO -NONE,VEVENT,UID,NONE,ZEROORONE -NONE,VEVENT,URL,NONE,ZEROORONE -NONE,VEVENT,VERSION,NONE,ZERO -NONE,VEVENT,X,NONE,ZEROPLUS -NONE,VTODO,ACTION,NONE,ZERO -NONE,VTODO,ATTACH,NONE,ZEROPLUS -NONE,VTODO,ATTENDEE,NONE,ZEROPLUS -NONE,VTODO,CALSCALE,NONE,ZERO -NONE,VTODO,CATEGORIES,NONE,ZEROPLUS -NONE,VTODO,CLASS,NONE,ZEROORONE -NONE,VTODO,COMMENT,NONE,ZEROPLUS -NONE,VTODO,COMPLETED,NONE,ZEROORONE -NONE,VTODO,CONTACT,NONE,ZEROPLUS -NONE,VTODO,CREATED,NONE,ZEROORONE -NONE,VTODO,DESCRIPTION,NONE,ZEROORONE -NONE,VTODO,DTEND,NONE,ZERO -NONE,VTODO,DTSTAMP,NONE,ZEROORONE -NONE,VTODO,DTSTART,NONE,ZEROORONE -NONE,VTODO,DUE,NONE,ONEEXCLUSIVE -NONE,VTODO,DURATION,NONE,ONEEXCLUSIVE -NONE,VTODO,EXDATE,NONE,ZEROPLUS -NONE,VTODO,EXRULE,NONE,ZEROPLUS -NONE,VTODO,FREEBUSY,NONE,ZERO -NONE,VTODO,GEO,NONE,ZEROORONE -NONE,VTODO,LASTMODIFIED,NONE,ZEROORONE -NONE,VTODO,LOCATION,NONE,ZEROORONE -NONE,VTODO,METHOD,NONE,ZERO -NONE,VTODO,ORGANIZER,NONE,ZEROORONE -NONE,VTODO,PERCENTCOMPLETE,NONE,ZEROORONE -NONE,VTODO,PRIORITY,NONE,ZEROORONE -NONE,VTODO,PRODID,NONE,ZERO -NONE,VTODO,RDATE,NONE,ZEROPLUS -NONE,VTODO,RECURRENCEID,NONE,ZEROORONE -NONE,VTODO,RELATEDTO,NONE,ZEROPLUS -NONE,VTODO,REPEAT,NONE,ZERO -NONE,VTODO,REQUESTSTATUS,NONE,ZEROPLUS -NONE,VTODO,RESOURCES,NONE,ZEROPLUS -NONE,VTODO,RRULE,NONE,ZEROPLUS -NONE,VTODO,SEQUENCE,NONE,ZEROORONE -NONE,VTODO,STATUS,NONE,ZEROORONE -NONE,VTODO,SUMMARY,NONE,ZEROORONE -NONE,VTODO,TRANSP,NONE,ZERO -NONE,VTODO,TRIGGER,NONE,ZERO -NONE,VTODO,TZID,NONE,ZERO -NONE,VTODO,TZNAME,NONE,ZERO -NONE,VTODO,TZOFFSETFROM,NONE,ZERO -NONE,VTODO,TZOFFSETTO,NONE,ZERO -NONE,VTODO,TZURL,NONE,ZERO -NONE,VTODO,UID,NONE,ZEROORONE -NONE,VTODO,URL,NONE,ZEROORONE -NONE,VTODO,VERSION,NONE,ZERO -NONE,VTODO,X,NONE,ZEROPLUS -NONE,VJOURNAL,ACTION,NONE,ZERO -NONE,VJOURNAL,ATTACH,NONE,ZEROPLUS -NONE,VJOURNAL,ATTENDEE,NONE,ZEROPLUS -NONE,VJOURNAL,CALSCALE,NONE,ZERO -NONE,VJOURNAL,CATEGORIES,NONE,ZEROPLUS -NONE,VJOURNAL,CLASS,NONE,ZEROORONE -NONE,VJOURNAL,COMMENT,NONE,ZEROPLUS -NONE,VJOURNAL,COMPLETED,NONE,ZERO -NONE,VJOURNAL,CONTACT,NONE,ZEROPLUS -NONE,VJOURNAL,CREATED,NONE,ZEROORONE -NONE,VJOURNAL,DESCRIPTION,NONE,ZEROORONE -NONE,VJOURNAL,DTEND,NONE,ZERO -NONE,VJOURNAL,DTSTAMP,NONE,ZEROORONE -NONE,VJOURNAL,DTSTART,NONE,ZEROORONE -NONE,VJOURNAL,DUE,NONE,ONEEXCLUSIVE -NONE,VJOURNAL,DURATION,NONE,ONEEXCLUSIVE -NONE,VJOURNAL,EXDATE,NONE,ZEROPLUS -NONE,VJOURNAL,EXRULE,NONE,ZEROPLUS -NONE,VJOURNAL,FREEBUSY,NONE,ZERO -NONE,VJOURNAL,GEO,NONE,ZERO -NONE,VJOURNAL,LASTMODIFIED,NONE,ZEROORONE -NONE,VJOURNAL,LOCATION,NONE,ZERO -NONE,VJOURNAL,METHOD,NONE,ZERO -NONE,VJOURNAL,ORGANIZER,NONE,ZEROORONE -NONE,VJOURNAL,PERCENTCOMPLETE,NONE,ZERO -NONE,VJOURNAL,PRIORITY,NONE,ZERO -NONE,VJOURNAL,PRODID,NONE,ZERO -NONE,VJOURNAL,RDATE,NONE,ZEROPLUS -NONE,VJOURNAL,RECURRENCEID,NONE,ZEROORONE -NONE,VJOURNAL,RELATEDTO,NONE,ZEROPLUS -NONE,VJOURNAL,REPEAT,NONE,ZERO -NONE,VJOURNAL,REQUESTSTATUS,NONE,ZEROPLUS -NONE,VJOURNAL,RESOURCES,NONE,ZERO -NONE,VJOURNAL,RRULE,NONE,ZEROPLUS -NONE,VJOURNAL,SEQUENCE,NONE,ZEROORONE -NONE,VJOURNAL,STATUS,NONE,ZEROORONE -NONE,VJOURNAL,SUMMARY,NONE,ZEROORONE -NONE,VJOURNAL,TRANSP,NONE,ZERO -NONE,VJOURNAL,TRIGGER,NONE,ZERO -NONE,VJOURNAL,TZID,NONE,ZERO -NONE,VJOURNAL,TZNAME,NONE,ZERO -NONE,VJOURNAL,TZOFFSETFROM,NONE,ZERO -NONE,VJOURNAL,TZOFFSETTO,NONE,ZERO -NONE,VJOURNAL,TZURL,NONE,ZERO -NONE,VJOURNAL,UID,NONE,ZEROORONE -NONE,VJOURNAL,URL,NONE,ZEROORONE -NONE,VJOURNAL,VERSION,NONE,ZERO -NONE,VJOURNAL,X,NONE,ZEROPLUS -NONE,VFREEBUSY,ACTION,NONE,ZERO -NONE,VFREEBUSY,ATTACH,NONE,ZERO -NONE,VFREEBUSY,ATTENDEE,NONE,ZEROPLUS -NONE,VFREEBUSY,CALSCALE,NONE,ZERO -NONE,VFREEBUSY,CATEGORIES,NONE,ZERO -NONE,VFREEBUSY,CLASS,NONE,ZERO -NONE,VFREEBUSY,COMMENT,NONE,ZEROPLUS -NONE,VFREEBUSY,COMPLETED,NONE,ZERO -NONE,VFREEBUSY,CONTACT,NONE,ZEROORONE -NONE,VFREEBUSY,CREATED,NONE,ZERO -NONE,VFREEBUSY,DESCRIPTION,NONE,ZERO -NONE,VFREEBUSY,DTEND,NONE,ZEROORONE -NONE,VFREEBUSY,DTSTAMP,NONE,ZERO -NONE,VFREEBUSY,DTSTART,NONE,ZEROORONE -NONE,VFREEBUSY,DUE,NONE,ZERO -NONE,VFREEBUSY,DURATION,NONE,ZEROORONE -NONE,VFREEBUSY,EXDATE,NONE,ZERO -NONE,VFREEBUSY,EXRULE,NONE,ZERO -NONE,VFREEBUSY,FREEBUSY,NONE,ZEROPLUS -NONE,VFREEBUSY,GEO,NONE,ZERO -NONE,VFREEBUSY,LASTMODIFIED,NONE,ZERO -NONE,VFREEBUSY,LOCATION,NONE,ZERO -NONE,VFREEBUSY,METHOD,NONE,ZERO -NONE,VFREEBUSY,ORGANIZER,NONE,ZEROORONE -NONE,VFREEBUSY,PERCENTCOMPLETE,NONE,ZERO -NONE,VFREEBUSY,PRIORITY,NONE,ZERO -NONE,VFREEBUSY,PRODID,NONE,ZERO -NONE,VFREEBUSY,RDATE,NONE,ZERO -NONE,VFREEBUSY,RECURRENCEID,NONE,ZERO -NONE,VFREEBUSY,RELATEDTO,NONE,ZERO -NONE,VFREEBUSY,REPEAT,NONE,ZERO -NONE,VFREEBUSY,REQUESTSTATUS,NONE,ZEROPLUS -NONE,VFREEBUSY,RESOURCES,NONE,ZERO -NONE,VFREEBUSY,RRULE,NONE,ZERO -NONE,VFREEBUSY,SEQUENCE,NONE,ZERO -NONE,VFREEBUSY,STATUS,NONE,ZERO -NONE,VFREEBUSY,SUMMARY,NONE,ZERO -NONE,VFREEBUSY,TRANSP,NONE,ZERO -NONE,VFREEBUSY,TRIGGER,NONE,ZERO -NONE,VFREEBUSY,TZID,NONE,ZERO -NONE,VFREEBUSY,TZNAME,NONE,ZERO -NONE,VFREEBUSY,TZOFFSETFROM,NONE,ZERO -NONE,VFREEBUSY,TZOFFSETTO,NONE,ZERO -NONE,VFREEBUSY,TZURL,NONE,ZERO -NONE,VFREEBUSY,UID,NONE,ZEROORONE -NONE,VFREEBUSY,URL,NONE,ZEROORONE -NONE,VFREEBUSY,VERSION,NONE,ZERO -NONE,VFREEBUSY,X,NONE,ZEROPLUS -NONE,VTIMEZONE,ACTION,NONE,ZERO -NONE,VTIMEZONE,ATTACH,NONE,ZERO -NONE,VTIMEZONE,ATTENDEE,NONE,ZERO -NONE,VTIMEZONE,CALSCALE,NONE,ZERO -NONE,VTIMEZONE,CATEGORIES,NONE,ZERO -NONE,VTIMEZONE,CLASS,NONE,ZERO -NONE,VTIMEZONE,COMMENT,NONE,ZERO -NONE,VTIMEZONE,COMPLETED,NONE,ZERO -NONE,VTIMEZONE,CONTACT,NONE,ZERO -NONE,VTIMEZONE,CREATED,NONE,ZERO -NONE,VTIMEZONE,DESCRIPTION,NONE,ZERO -NONE,VTIMEZONE,DTEND,NONE,ZERO -NONE,VTIMEZONE,DTSTAMP,NONE,ZERO -NONE,VTIMEZONE,DTSTART,NONE,ZERO -NONE,VTIMEZONE,DUE,NONE,ZERO -NONE,VTIMEZONE,DURATION,NONE,ZERO -NONE,VTIMEZONE,EXDATE,NONE,ZERO -NONE,VTIMEZONE,EXRULE,NONE,ZERO -NONE,VTIMEZONE,FREEBUSY,NONE,ZERO -NONE,VTIMEZONE,GEO,NONE,ZERO -NONE,VTIMEZONE,LASTMODIFIED,NONE,ZEROORONE -NONE,VTIMEZONE,LOCATION,NONE,ZERO -NONE,VTIMEZONE,METHOD,NONE,ZERO -NONE,VTIMEZONE,ORGANIZER,NONE,ZERO -NONE,VTIMEZONE,PERCENTCOMPLETE,NONE,ZERO -NONE,VTIMEZONE,PRIORITY,NONE,ZERO -NONE,VTIMEZONE,PRODID,NONE,ZERO -NONE,VTIMEZONE,RDATE,NONE,ZERO -NONE,VTIMEZONE,RECURRENCEID,NONE,ZERO -NONE,VTIMEZONE,RELATEDTO,NONE,ZERO -NONE,VTIMEZONE,REPEAT,NONE,ZERO -NONE,VTIMEZONE,REQUESTSTATUS,NONE,ZERO -NONE,VTIMEZONE,RESOURCES,NONE,ZERO -NONE,VTIMEZONE,RRULE,NONE,ZERO -NONE,VTIMEZONE,SEQUENCE,NONE,ZERO -NONE,VTIMEZONE,STATUS,NONE,ZERO -NONE,VTIMEZONE,SUMMARY,NONE,ZERO -NONE,VTIMEZONE,TRANSP,NONE,ZERO -NONE,VTIMEZONE,TRIGGER,NONE,ZERO -NONE,VTIMEZONE,TZID,NONE,ONE -NONE,VTIMEZONE,TZNAME,NONE,ZERO -NONE,VTIMEZONE,TZOFFSETFROM,NONE,ZERO -NONE,VTIMEZONE,TZOFFSETTO,NONE,ZERO -NONE,VTIMEZONE,TZURL,NONE,ZEROPLUS -NONE,VTIMEZONE,UID,NONE,ZERO -NONE,VTIMEZONE,URL,NONE,ZERO -NONE,VTIMEZONE,VERSION,NONE,ZERO -NONE,VTIMEZONE,X,NONE,ZEROORONE -NONE,XSTANDARD,ACTION,NONE,ZERO -NONE,XSTANDARD,ATTACH,NONE,ZERO -NONE,XSTANDARD,ATTENDEE,NONE,ZERO -NONE,XSTANDARD,CALSCALE,NONE,ZERO -NONE,XSTANDARD,CATEGORIES,NONE,ZERO -NONE,XSTANDARD,CLASS,NONE,ZERO -NONE,XSTANDARD,COMMENT,NONE,ZEROPLUS -NONE,XSTANDARD,COMPLETED,NONE,ZERO -NONE,XSTANDARD,CONTACT,NONE,ZERO -NONE,XSTANDARD,CREATED,NONE,ZERO -NONE,XSTANDARD,DESCRIPTION,NONE,ZERO -NONE,XSTANDARD,DTEND,NONE,ZERO -NONE,XSTANDARD,DTSTAMP,NONE,ZERO -NONE,XSTANDARD,DTSTART,NONE,ONE -NONE,XSTANDARD,DUE,NONE,ZERO -NONE,XSTANDARD,DURATION,NONE,ZERO -NONE,XSTANDARD,EXDATE,NONE,ZERO -NONE,XSTANDARD,EXRULE,NONE,ZERO -NONE,XSTANDARD,FREEBUSY,NONE,ZERO -NONE,XSTANDARD,GEO,NONE,ZERO -NONE,XSTANDARD,LASTMODIFIED,NONE,ZERO -NONE,XSTANDARD,LOCATION,NONE,ZERO -NONE,XSTANDARD,METHOD,NONE,ZERO -NONE,XSTANDARD,ORGANIZER,NONE,ZERO -NONE,XSTANDARD,PERCENTCOMPLETE,NONE,ZERO -NONE,XSTANDARD,PRIORITY,NONE,ZERO -NONE,XSTANDARD,PRODID,NONE,ZERO -NONE,XSTANDARD,RDATE,NONE,ZEROPLUS -NONE,XSTANDARD,RECURRENCEID,NONE,ZERO -NONE,XSTANDARD,RELATEDTO,NONE,ZERO -NONE,XSTANDARD,REPEAT,NONE,ZERO -NONE,XSTANDARD,REQUESTSTATUS,NONE,ZERO -NONE,XSTANDARD,RESOURCES,NONE,ZERO -NONE,XSTANDARD,RRULE,NONE,ZEROPLUS -NONE,XSTANDARD,SEQUENCE,NONE,ZERO -NONE,XSTANDARD,STATUS,NONE,ZERO -NONE,XSTANDARD,SUMMARY,NONE,ZERO -NONE,XSTANDARD,TRANSP,NONE,ZERO -NONE,XSTANDARD,TRIGGER,NONE,ZERO -NONE,XSTANDARD,TZID,NONE,ZERO -NONE,XSTANDARD,TZNAME,NONE,ZEROPLUS -NONE,XSTANDARD,TZOFFSETFROM,NONE,ONE -NONE,XSTANDARD,TZOFFSETTO,NONE,ONE -NONE,XSTANDARD,TZURL,NONE,ZERO -NONE,XSTANDARD,UID,NONE,ZERO -NONE,XSTANDARD,URL,NONE,ZERO -NONE,XSTANDARD,VERSION,NONE,ZERO -NONE,XSTANDARD,X,NONE,ZEROPLUS -NONE,XDAYLIGHT,ACTION,NONE,ZERO -NONE,XDAYLIGHT,ATTACH,NONE,ZERO -NONE,XDAYLIGHT,ATTENDEE,NONE,ZERO -NONE,XDAYLIGHT,CALSCALE,NONE,ZERO -NONE,XDAYLIGHT,CATEGORIES,NONE,ZERO -NONE,XDAYLIGHT,CLASS,NONE,ZERO -NONE,XDAYLIGHT,COMMENT,NONE,ZEROPLUS -NONE,XDAYLIGHT,COMPLETED,NONE,ZERO -NONE,XDAYLIGHT,CONTACT,NONE,ZERO -NONE,XDAYLIGHT,CREATED,NONE,ZERO -NONE,XDAYLIGHT,DESCRIPTION,NONE,ZERO -NONE,XDAYLIGHT,DTEND,NONE,ZERO -NONE,XDAYLIGHT,DTSTAMP,NONE,ZERO -NONE,XDAYLIGHT,DTSTART,NONE,ONE -NONE,XDAYLIGHT,DUE,NONE,ZERO -NONE,XDAYLIGHT,DURATION,NONE,ZERO -NONE,XDAYLIGHT,EXDATE,NONE,ZERO -NONE,XDAYLIGHT,EXRULE,NONE,ZERO -NONE,XDAYLIGHT,FREEBUSY,NONE,ZERO -NONE,XDAYLIGHT,GEO,NONE,ZERO -NONE,XDAYLIGHT,LASTMODIFIED,NONE,ZERO -NONE,XDAYLIGHT,LOCATION,NONE,ZERO -NONE,XDAYLIGHT,METHOD,NONE,ZERO -NONE,XDAYLIGHT,ORGANIZER,NONE,ZERO -NONE,XDAYLIGHT,PERCENTCOMPLETE,NONE,ZERO -NONE,XDAYLIGHT,PRIORITY,NONE,ZERO -NONE,XDAYLIGHT,PRODID,NONE,ZERO -NONE,XDAYLIGHT,RDATE,NONE,ZEROPLUS -NONE,XDAYLIGHT,RECURRENCEID,NONE,ZERO -NONE,XDAYLIGHT,RELATEDTO,NONE,ZERO -NONE,XDAYLIGHT,REPEAT,NONE,ZERO -NONE,XDAYLIGHT,REQUESTSTATUS,NONE,ZERO -NONE,XDAYLIGHT,RESOURCES,NONE,ZERO -NONE,XDAYLIGHT,RRULE,NONE,ZEROPLUS -NONE,XDAYLIGHT,SEQUENCE,NONE,ZERO -NONE,XDAYLIGHT,STATUS,NONE,ZERO -NONE,XDAYLIGHT,SUMMARY,NONE,ZERO -NONE,XDAYLIGHT,TRANSP,NONE,ZERO -NONE,XDAYLIGHT,TRIGGER,NONE,ZERO -NONE,XDAYLIGHT,TZID,NONE,ZERO -NONE,XDAYLIGHT,TZNAME,NONE,ZEROPLUS -NONE,XDAYLIGHT,TZOFFSETFROM,NONE,ONE -NONE,XDAYLIGHT,TZOFFSETTO,NONE,ONE -NONE,XDAYLIGHT,TZURL,NONE,ZERO -NONE,XDAYLIGHT,UID,NONE,ZERO -NONE,XDAYLIGHT,URL,NONE,ZERO -NONE,XDAYLIGHT,VERSION,NONE,ZERO -NONE,XDAYLIGHT,X,NONE,ZEROPLUS -NONE,XAUDIOALARM,ACTION,NONE,ONE -NONE,XAUDIOALARM,ATTACH,NONE,ZEROORONE -NONE,XAUDIOALARM,ATTENDEE,NONE,ZERO -NONE,XAUDIOALARM,CALSCALE,NONE,ZERO -NONE,XAUDIOALARM,CATEGORIES,NONE,ZERO -NONE,XAUDIOALARM,CLASS,NONE,ZERO -NONE,XAUDIOALARM,COMMENT,NONE,ZERO -NONE,XAUDIOALARM,COMPLETED,NONE,ZERO -NONE,XAUDIOALARM,CONTACT,NONE,ZERO -NONE,XAUDIOALARM,CREATED,NONE,ZERO -NONE,XAUDIOALARM,DESCRIPTION,NONE,ZERO -NONE,XAUDIOALARM,DTEND,NONE,ZERO -NONE,XAUDIOALARM,DTSTAMP,NONE,ZERO -NONE,XAUDIOALARM,DTSTART,NONE,ZERO -NONE,XAUDIOALARM,DUE,NONE,ZERO -NONE,XAUDIOALARM,DURATION,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XAUDIOALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XAUDIOALARM,EXDATE,NONE,ZERO -NONE,XAUDIOALARM,EXRULE,NONE,ZERO -NONE,XAUDIOALARM,FREEBUSY,NONE,ZERO -NONE,XAUDIOALARM,GEO,NONE,ZERO -NONE,XAUDIOALARM,LASTMODIFIED,NONE,ZERO -NONE,XAUDIOALARM,LOCATION,NONE,ZERO -NONE,XAUDIOALARM,METHOD,NONE,ZERO -NONE,XAUDIOALARM,ORGANIZER,NONE,ZERO -NONE,XAUDIOALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XAUDIOALARM,PRIORITY,NONE,ZERO -NONE,XAUDIOALARM,PRODID,NONE,ZERO -NONE,XAUDIOALARM,RDATE,NONE,ZERO -NONE,XAUDIOALARM,RECURRENCEID,NONE,ZERO -NONE,XAUDIOALARM,RELATEDTO,NONE,ZERO -NONE,XAUDIOALARM,REQUESTSTATUS,NONE,ZERO -NONE,XAUDIOALARM,RESOURCES,NONE,ZERO -NONE,XAUDIOALARM,RRULE,NONE,ZERO -NONE,XAUDIOALARM,SEQUENCE,NONE,ZERO -NONE,XAUDIOALARM,STATUS,NONE,ZERO -NONE,XAUDIOALARM,SUMMARY,NONE,ZERO -NONE,XAUDIOALARM,TRANSP,NONE,ZERO -NONE,XAUDIOALARM,TRIGGER,NONE,ONE -NONE,XAUDIOALARM,TZID,NONE,ZERO -NONE,XAUDIOALARM,TZNAME,NONE,ZERO -NONE,XAUDIOALARM,TZOFFSETFROM,NONE,ZERO -NONE,XAUDIOALARM,TZOFFSETTO,NONE,ZERO -NONE,XAUDIOALARM,TZURL,NONE,ZERO -NONE,XAUDIOALARM,UID,NONE,ZERO -NONE,XAUDIOALARM,URL,NONE,ZERO -NONE,XAUDIOALARM,VERSION,NONE,ZERO -NONE,XAUDIOALARM,X,NONE,ZEROPLUS -NONE,XDISPLAYALARM,ACTION,NONE,ONE -NONE,XDISPLAYALARM,ATTACH,NONE,ZERO -NONE,XDISPLAYALARM,ATTENDEE,NONE,ZERO -NONE,XDISPLAYALARM,CALSCALE,NONE,ZERO -NONE,XDISPLAYALARM,CATEGORIES,NONE,ZERO -NONE,XDISPLAYALARM,CLASS,NONE,ZERO -NONE,XDISPLAYALARM,COMMENT,NONE,ZERO -NONE,XDISPLAYALARM,COMPLETED,NONE,ZERO -NONE,XDISPLAYALARM,CONTACT,NONE,ZERO -NONE,XDISPLAYALARM,CREATED,NONE,ZERO -NONE,XDISPLAYALARM,DESCRIPTION,NONE,ONE -NONE,XDISPLAYALARM,DTEND,NONE,ZERO -NONE,XDISPLAYALARM,DTSTAMP,NONE,ZERO -NONE,XDISPLAYALARM,DTSTART,NONE,ZERO -NONE,XDISPLAYALARM,DUE,NONE,ZERO -NONE,XDISPLAYALARM,DURATION,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XDISPLAYALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XDISPLAYALARM,EXDATE,NONE,ZERO -NONE,XDISPLAYALARM,EXRULE,NONE,ZERO -NONE,XDISPLAYALARM,FREEBUSY,NONE,ZERO -NONE,XDISPLAYALARM,GEO,NONE,ZERO -NONE,XDISPLAYALARM,LASTMODIFIED,NONE,ZERO -NONE,XDISPLAYALARM,LOCATION,NONE,ZERO -NONE,XDISPLAYALARM,METHOD,NONE,ZERO -NONE,XDISPLAYALARM,ORGANIZER,NONE,ZERO -NONE,XDISPLAYALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XDISPLAYALARM,PRIORITY,NONE,ZERO -NONE,XDISPLAYALARM,PRODID,NONE,ZERO -NONE,XDISPLAYALARM,RDATE,NONE,ZERO -NONE,XDISPLAYALARM,RECURRENCEID,NONE,ZERO -NONE,XDISPLAYALARM,RELATEDTO,NONE,ZERO -NONE,XDISPLAYALARM,REQUESTSTATUS,NONE,ZERO -NONE,XDISPLAYALARM,RESOURCES,NONE,ZERO -NONE,XDISPLAYALARM,RRULE,NONE,ZERO -NONE,XDISPLAYALARM,SEQUENCE,NONE,ZERO -NONE,XDISPLAYALARM,STATUS,NONE,ZERO -NONE,XDISPLAYALARM,SUMMARY,NONE,ZERO -NONE,XDISPLAYALARM,TRANSP,NONE,ZERO -NONE,XDISPLAYALARM,TRIGGER,NONE,ONE -NONE,XDISPLAYALARM,TZID,NONE,ZERO -NONE,XDISPLAYALARM,TZNAME,NONE,ZERO -NONE,XDISPLAYALARM,TZOFFSETFROM,NONE,ZERO -NONE,XDISPLAYALARM,TZOFFSETTO,NONE,ZERO -NONE,XDISPLAYALARM,TZURL,NONE,ZERO -NONE,XDISPLAYALARM,UID,NONE,ZERO -NONE,XDISPLAYALARM,URL,NONE,ZERO -NONE,XDISPLAYALARM,VERSION,NONE,ZERO -NONE,XDISPLAYALARM,X,NONE,ZEROPLUS -NONE,XEMAILALARM,ACTION,NONE,ONE -NONE,XEMAILALARM,ATTACH,NONE,ZEROPLUS -NONE,XEMAILALARM,ATTENDEE,NONE,ONEPLUS -NONE,XEMAILALARM,CALSCALE,NONE,ZERO -NONE,XEMAILALARM,CATEGORIES,NONE,ZERO -NONE,XEMAILALARM,CLASS,NONE,ZERO -NONE,XEMAILALARM,COMMENT,NONE,ZERO -NONE,XEMAILALARM,COMPLETED,NONE,ZERO -NONE,XEMAILALARM,CONTACT,NONE,ZERO -NONE,XEMAILALARM,CREATED,NONE,ZERO -NONE,XEMAILALARM,DESCRIPTION,NONE,ONE -NONE,XEMAILALARM,DTEND,NONE,ZERO -NONE,XEMAILALARM,DTSTAMP,NONE,ZERO -NONE,XEMAILALARM,DTSTART,NONE,ZERO -NONE,XEMAILALARM,DUE,NONE,ZERO -NONE,XEMAILALARM,DURATION,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XEMAILALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XEMAILALARM,EXDATE,NONE,ZERO -NONE,XEMAILALARM,EXRULE,NONE,ZERO -NONE,XEMAILALARM,FREEBUSY,NONE,ZERO -NONE,XEMAILALARM,GEO,NONE,ZERO -NONE,XEMAILALARM,LASTMODIFIED,NONE,ZERO -NONE,XEMAILALARM,LOCATION,NONE,ZERO -NONE,XEMAILALARM,METHOD,NONE,ZERO -NONE,XEMAILALARM,ORGANIZER,NONE,ZERO -NONE,XEMAILALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XEMAILALARM,PRIORITY,NONE,ZERO -NONE,XEMAILALARM,PRODID,NONE,ZERO -NONE,XEMAILALARM,RDATE,NONE,ZERO -NONE,XEMAILALARM,RECURRENCEID,NONE,ZERO -NONE,XEMAILALARM,RELATEDTO,NONE,ZERO -NONE,XEMAILALARM,REQUESTSTATUS,NONE,ZERO -NONE,XEMAILALARM,RESOURCES,NONE,ZERO -NONE,XEMAILALARM,RRULE,NONE,ZERO -NONE,XEMAILALARM,SEQUENCE,NONE,ZERO -NONE,XEMAILALARM,STATUS,NONE,ZERO -NONE,XEMAILALARM,SUMMARY,NONE,ONE -NONE,XEMAILALARM,TRANSP,NONE,ZERO -NONE,XEMAILALARM,TRIGGER,NONE,ONE -NONE,XEMAILALARM,TZID,NONE,ZERO -NONE,XEMAILALARM,TZNAME,NONE,ZERO -NONE,XEMAILALARM,TZOFFSETFROM,NONE,ZERO -NONE,XEMAILALARM,TZOFFSETTO,NONE,ZERO -NONE,XEMAILALARM,TZURL,NONE,ZERO -NONE,XEMAILALARM,UID,NONE,ZERO -NONE,XEMAILALARM,URL,NONE,ZERO -NONE,XEMAILALARM,VERSION,NONE,ZERO -NONE,XEMAILALARM,X,NONE,ZEROPLUS -NONE,XPROCEDUREALARM,ACTION,NONE,ONE -NONE,XPROCEDUREALARM,ATTACH,NONE,ZEROORONE -NONE,XPROCEDUREALARM,ATTENDEE,NONE,ZERO -NONE,XPROCEDUREALARM,CALSCALE,NONE,ZERO -NONE,XPROCEDUREALARM,CATEGORIES,NONE,ZERO -NONE,XPROCEDUREALARM,CLASS,NONE,ZERO -NONE,XPROCEDUREALARM,COMMENT,NONE,ZERO -NONE,XPROCEDUREALARM,COMPLETED,NONE,ZERO -NONE,XPROCEDUREALARM,CONTACT,NONE,ZERO -NONE,XPROCEDUREALARM,CREATED,NONE,ZERO -NONE,XPROCEDUREALARM,DESCRIPTION,NONE,ZEROORONE -NONE,XPROCEDUREALARM,DTEND,NONE,ZERO -NONE,XPROCEDUREALARM,DTSTAMP,NONE,ZERO -NONE,XPROCEDUREALARM,DTSTART,NONE,ZERO -NONE,XPROCEDUREALARM,DUE,NONE,ZERO -NONE,XPROCEDUREALARM,DURATION,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XPROCEDUREALARM,REPEAT,NONE,ONEMUTUAL,icalrestriction_check_mutual -NONE,XPROCEDUREALARM,EXDATE,NONE,ZERO -NONE,XPROCEDUREALARM,EXRULE,NONE,ZERO -NONE,XPROCEDUREALARM,FREEBUSY,NONE,ZERO -NONE,XPROCEDUREALARM,GEO,NONE,ZERO -NONE,XPROCEDUREALARM,LASTMODIFIED,NONE,ZERO -NONE,XPROCEDUREALARM,LOCATION,NONE,ZERO -NONE,XPROCEDUREALARM,METHOD,NONE,ZERO -NONE,XPROCEDUREALARM,ORGANIZER,NONE,ZERO -NONE,XPROCEDUREALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XPROCEDUREALARM,PRIORITY,NONE,ZERO -NONE,XPROCEDUREALARM,PRODID,NONE,ZERO -NONE,XPROCEDUREALARM,RDATE,NONE,ZERO -NONE,XPROCEDUREALARM,RECURRENCEID,NONE,ZERO -NONE,XPROCEDUREALARM,RELATEDTO,NONE,ZERO -NONE,XPROCEDUREALARM,REQUESTSTATUS,NONE,ZERO -NONE,XPROCEDUREALARM,RESOURCES,NONE,ZERO -NONE,XPROCEDUREALARM,RRULE,NONE,ZERO -NONE,XPROCEDUREALARM,SEQUENCE,NONE,ZERO -NONE,XPROCEDUREALARM,STATUS,NONE,ZERO -NONE,XPROCEDUREALARM,SUMMARY,NONE,ZERO -NONE,XPROCEDUREALARM,TRANSP,NONE,ZERO -NONE,XPROCEDUREALARM,TRIGGER,NONE,ONE -NONE,XPROCEDUREALARM,TZID,NONE,ZERO -NONE,XPROCEDUREALARM,TZNAME,NONE,ZERO -NONE,XPROCEDUREALARM,TZOFFSETFROM,NONE,ZERO -NONE,XPROCEDUREALARM,TZOFFSETTO,NONE,ZERO -NONE,XPROCEDUREALARM,TZURL,NONE,ZERO -NONE,XPROCEDUREALARM,UID,NONE,ZERO -NONE,XPROCEDUREALARM,URL,NONE,ZERO -NONE,XPROCEDUREALARM,VERSION,NONE,ZERO -NONE,XPROCEDUREALARM,X,NONE,ZEROPLUS diff --git a/libical/design-data/status-new.txt b/libical/design-data/status-new.txt deleted file mode 100644 index 9e7bbf83a7..0000000000 --- a/libical/design-data/status-new.txt +++ /dev/null @@ -1,56 +0,0 @@ -2.0 STATOK Operation was successfully performed. -2.0.1 STARTSENDATA Start ICAL input; end with . -2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with . -2.0.2 REPLYPENDING A timeout has occurred. The server is still working on the reply. Use CONTINUE to continue waiting for the reply or ABORT to terminate the command. -2.0.3 ABORTED The command currently underway was successsfully aborted. -2.0.4 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. -2.0.5 TRUSTEDWILLQUEUE The request or reply will be queued and delivered to the target calendar when its iRIP server contacts this server and issues the SWITCH command. -2.0.6 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. -2.0.7 QUEUED The message has been queued for delivery. -2.0.8 QUEUEEMPTY There are no more queued messages. -2.1 FALLBACK Success. Fallback taken on one or more property values. -2.2 NOCOMMANDINPROGRESS An ABORT or CONTINUE was received when no command was in progress -2.2 IGPROP Success. Invalid property ignored. -2.3 IGPARAM Success. invalid property parameter ignored. -2.4 IGXPROP Success. Unknown non-standard property ignored. -2.5 IGXPARAM Success. Unknown non standard property value ignored. -2.6 IGCOMP Success. Invalid calendar component ignored. -2.7 FORWARD Success. Request forwarded to Calendar User. -2.8 ONEEVENT Success. Repeating event ignored. Scheduled as a single component. -2.9 TRUNC Success. Truncated end date time to date boundary. -2.10 ONETODO Success. Repeating VTODO ignored. Scheduled as a single VTODO. -2.11 TRUNCRRULE Success. Unbounded RRULE clipped at some finite number of instances -3.0 INVPROPNAME Invalid property name. -3.1 INVPROPVAL Invalid property value. -3.2 INVPARAM Invalid property parameter. -3.3 INVPARAMVAL Invalid property parameter value. -3.4 INVCOMP Invalid calendar component sequence. -3.5 INVTIME Invalid date or time. -3.6 INVRULE Invalid rule. -3.7 INVCU Invalid Calendar User. -3.8 NOAUTH No authority. -3.9 BADVERSION Unsupported version. -3.10 TOOBIG Request entity too large. -3.11 MISSREQCOMP Required component or property missing. -3.12 UNKCOMP Unknown component or property found. -3.13 BADCOMP Unsupported component or property found -3.14 NOCAP Unsupported capability. -4.0 BUSY Event conflict. Date/time is busy. -5.0 MAYBE Request MAY supported. -5.1 UNAVAIL Service unavailable. -5.2 NOSERVICE Invalid calendar service. -5.3 NOSCHED No scheduling support for user. -6.1 AUTHENTICATEFAILURE Unsupported authentication mechanism, credentials rejected -6.2 AUTHENTICATIONABORTED Sender aborted authentication, authentication exchange cancelled -8.0 GENERALFAILURE A failure has occurred in the Receiver that prevents the operation from succeeding. -8.1 SERVERTOOBUSY The iRIP Receiver is too busy. -8.2 ICALOBJECTTOOBIG Object has exceeded the server's size limit. -8.3 DATETOOLARGE A DATETIME value was too far in the future to be represented on this Calendar. -8.4 DATETOOSMALL A DATETIME value was too far in the past to be represented on this Calendar. -9.0 INVALIDIRIPCOMMAND An unrecongnized command was received. -9.1 UNEXPECTEDCOMMAND The command is not allowed for the server's current state. -10.1 REFERRAL Accompanied by an alternate address. -10.2 SERVERSHUTDOWN The server is shutting down. -10.3 SERVERSTOPPING FLOOD 2 -10.4 EXCEEDEDQUOTAS The operation would cause a resource to exceed the allocated quota -10.5 QUEUEDTOOLONG The ITIP message has been queued too long. Delivery has been aborted. diff --git a/libical/design-data/status.foo b/libical/design-data/status.foo deleted file mode 100644 index a2591bd26a..0000000000 --- a/libical/design-data/status.foo +++ /dev/null @@ -1,104 +0,0 @@ -2.0 STATOK Operation was successfully performed. - -2.0.1 START-SENDATA Start ICAL input; end with - . - -2.0.11 OK-DATAFOLLOWS The request was processed - successfully. Reply data follows on - the next line and terminates with - . - -2.0.2 REPLY-PENDING A timeout has occurred. The server is - still working on the reply. Use - CONTINUE to continue waiting for the - reply or ABORT to terminate the - command. - -2.0.3 ABORTED In response to the client issuing an - ABORT command, this reply code - indicates that any command currently - underway was successsfully aborted. - -2.0.4 WILL-ATTEMPT The specified Calendar is not here - but an attempt will be made to deliver - the request or reply to the Calendar - anyway. There is a trust relationship - between this iRIP server and the - iRIP server for the target calendar. - -2.0.5 TRUSTED-WILL-QUEUE The specified Calendar cannot be - contacted directly and a trust - relationship exists between this - server and the server on which the - Calendar exists. The request or reply - will be queued and delivered to the - target calendar when its iRIP server - contacts this server and issues the - SWITCH command. - -2.0.6 WILL-ATTEMPT The specified Calendar is not here - but an attempt will be made to deliver - the request or reply to the Calendar - anyway. There is not a trust - relationship between the iRIP server - and the iRIP server for the target - calendar. - -2.0.7 QUEUED The message has been queued for - delivery. - -2.0.8 QUEUE-EMPTY There are no more queued messages. - -2.2 NO COMMAND IN PROGRESS An ABORT or CONTINUE was received when - no command was in progress - -6.1 AUTHENTICATE FAILURE Unsupported authentication mechanism, - credentials rejected - -6.2 AUTHENTICATION ABORTED Sender aborted authentication, - authentication exchange cancelled - -8.0 GENERAL FAILURE A failure has occurred in the Receiver - that prevents the operation from - succeeding. - -8.1 SERVER TOO BUSY Sent when a session cannot be - established because the iRIP - Receiver is too busy. - -8.2 ICAL OBJECT TOO BIG Used to signal that an ICAL object has - exceeded the server's size limit. - -8.3 DATE TOO LARGE A DATETIME value was too far in the - future to be represented on this - Calendar. - -8.4 DATE TOO SMALL A DATETIME value was too far in the - past to be represented on this - Calendar. - -9.0 INVALID iRIP COMMAND An unrecongnized command was received. - -9.1 UNEXPECTED COMMAND A command was issued in a manner - inconsistent with the state diagram. - For example, issuing the SENDATA - command without having specified any - RECIPIENTs will cause this error. -10.1 REFERRAL Accompanied by an alternate address. - The RECIPIENT specified should be - contacted at the given alternate - address. The referral address MUST - follow the reply code. - -10.2 SERVER SHUT DOWN The server is shutting down. - -10.3 SERVER STOPPING FLOOD 2 - - -10.4 EXCEEDED QUOTAS The operation has not be performed - because it would cause the resources - (memory, disk, CPU, etc) to exceed the - allocated quota - -10.5 QUEUED TOO LONG The ITIP message has been queued too - long. Delivery has been aborted. \ No newline at end of file diff --git a/libical/design-data/status.txt b/libical/design-data/status.txt deleted file mode 100644 index 9e7bbf83a7..0000000000 --- a/libical/design-data/status.txt +++ /dev/null @@ -1,56 +0,0 @@ -2.0 STATOK Operation was successfully performed. -2.0.1 STARTSENDATA Start ICAL input; end with . -2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with . -2.0.2 REPLYPENDING A timeout has occurred. The server is still working on the reply. Use CONTINUE to continue waiting for the reply or ABORT to terminate the command. -2.0.3 ABORTED The command currently underway was successsfully aborted. -2.0.4 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. -2.0.5 TRUSTEDWILLQUEUE The request or reply will be queued and delivered to the target calendar when its iRIP server contacts this server and issues the SWITCH command. -2.0.6 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. -2.0.7 QUEUED The message has been queued for delivery. -2.0.8 QUEUEEMPTY There are no more queued messages. -2.1 FALLBACK Success. Fallback taken on one or more property values. -2.2 NOCOMMANDINPROGRESS An ABORT or CONTINUE was received when no command was in progress -2.2 IGPROP Success. Invalid property ignored. -2.3 IGPARAM Success. invalid property parameter ignored. -2.4 IGXPROP Success. Unknown non-standard property ignored. -2.5 IGXPARAM Success. Unknown non standard property value ignored. -2.6 IGCOMP Success. Invalid calendar component ignored. -2.7 FORWARD Success. Request forwarded to Calendar User. -2.8 ONEEVENT Success. Repeating event ignored. Scheduled as a single component. -2.9 TRUNC Success. Truncated end date time to date boundary. -2.10 ONETODO Success. Repeating VTODO ignored. Scheduled as a single VTODO. -2.11 TRUNCRRULE Success. Unbounded RRULE clipped at some finite number of instances -3.0 INVPROPNAME Invalid property name. -3.1 INVPROPVAL Invalid property value. -3.2 INVPARAM Invalid property parameter. -3.3 INVPARAMVAL Invalid property parameter value. -3.4 INVCOMP Invalid calendar component sequence. -3.5 INVTIME Invalid date or time. -3.6 INVRULE Invalid rule. -3.7 INVCU Invalid Calendar User. -3.8 NOAUTH No authority. -3.9 BADVERSION Unsupported version. -3.10 TOOBIG Request entity too large. -3.11 MISSREQCOMP Required component or property missing. -3.12 UNKCOMP Unknown component or property found. -3.13 BADCOMP Unsupported component or property found -3.14 NOCAP Unsupported capability. -4.0 BUSY Event conflict. Date/time is busy. -5.0 MAYBE Request MAY supported. -5.1 UNAVAIL Service unavailable. -5.2 NOSERVICE Invalid calendar service. -5.3 NOSCHED No scheduling support for user. -6.1 AUTHENTICATEFAILURE Unsupported authentication mechanism, credentials rejected -6.2 AUTHENTICATIONABORTED Sender aborted authentication, authentication exchange cancelled -8.0 GENERALFAILURE A failure has occurred in the Receiver that prevents the operation from succeeding. -8.1 SERVERTOOBUSY The iRIP Receiver is too busy. -8.2 ICALOBJECTTOOBIG Object has exceeded the server's size limit. -8.3 DATETOOLARGE A DATETIME value was too far in the future to be represented on this Calendar. -8.4 DATETOOSMALL A DATETIME value was too far in the past to be represented on this Calendar. -9.0 INVALIDIRIPCOMMAND An unrecongnized command was received. -9.1 UNEXPECTEDCOMMAND The command is not allowed for the server's current state. -10.1 REFERRAL Accompanied by an alternate address. -10.2 SERVERSHUTDOWN The server is shutting down. -10.3 SERVERSTOPPING FLOOD 2 -10.4 EXCEEDEDQUOTAS The operation would cause a resource to exceed the allocated quota -10.5 QUEUEDTOOLONG The ITIP message has been queued too long. Delivery has been aborted. diff --git a/libical/design-data/value-c-types.txt b/libical/design-data/value-c-types.txt deleted file mode 100644 index c7dd26034f..0000000000 --- a/libical/design-data/value-c-types.txt +++ /dev/null @@ -1,22 +0,0 @@ -ATTACH struct icalattachtype # Non-std -BINARY char* -BOOLEAN int -CAL-ADDRESS char* -DATE struct icaltimetype -DATE-TIME struct icaltimetype -DATE-TIME-DATE struct icaltimetype # Non-std -DATE-TIME-PERIOD struct icalperiodtype # Non-std -DURATION struct icaldurationtype -FLOAT float -GEO struct icalgeotype # Non-std -INTEGER int -METHOD icalproperty_method # Non-std -PERIOD struct icalperiodtype -RECUR struct icalrecurrencetype -STRING char* # Non-std -TEXT char* -TIME struct icaltimetype -TRIGGER union icaltriggertype # Non-std -URI char* -UTC-OFFSET int -QUERY char* diff --git a/libical/design-data/value-mem-semantics.txt b/libical/design-data/value-mem-semantics.txt deleted file mode 100644 index 5948e244f6..0000000000 --- a/libical/design-data/value-mem-semantics.txt +++ /dev/null @@ -1,19 +0,0 @@ -ATTACH struct icalattachtype -BINARY char* -BOOLEAN int -CAL-ADDRESS char* -DATE time_t -DATE-TIME time_t -DATE-TIME-DATE time_t -DATE-TIME-PERIOD struct icalperiodtype -DURATION struct icaldurationtype -FLOAT float -GEO struct icalgeotype -INTEGER int -PERIOD struct icalperiodtype -RECUR struct icalrecurrencetype -TEXT char* -TIME time_t -TRIGGER struct icaltriggertimetype -URI char* -UTC-OFFSET int diff --git a/libical/doc/.cvsignore b/libical/doc/.cvsignore deleted file mode 100644 index 3dda72986f..0000000000 --- a/libical/doc/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile.in -Makefile diff --git a/libical/doc/Makefile.am b/libical/doc/Makefile.am deleted file mode 100644 index 0df4f3f42d..0000000000 --- a/libical/doc/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = UsingLibical.lyx UsingLibical.ps diff --git a/libical/doc/UsingLibical.lyx b/libical/doc/UsingLibical.lyx deleted file mode 100644 index 1742e3af00..0000000000 --- a/libical/doc/UsingLibical.lyx +++ /dev/null @@ -1,2256 +0,0 @@ -#This file was created by Sat Feb 19 10:33:21 2000 -#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team -\lyxformat 2.15 -\textclass linuxdoc -\language default -\inputencoding default -\fontscheme default -\graphics default -\paperfontsize default -\spacing single -\papersize Default -\paperpackage a4 -\use_geometry 0 -\use_amsmath 0 -\paperorientation portrait -\secnumdepth 3 -\tocdepth 3 -\paragraph_separation indent -\defskip medskip -\quotes_language english -\quotes_times 2 -\papercolumns 1 -\papersides 1 -\paperpagestyle default - -\layout Title - -Using Libical -\layout Author - -Eric Busboom (eric@softwarestudio.org) -\layout Date - -January 2000 -\layout Section - -Introduction -\layout Standard - -Libical is an Open Source implementation of the iCalendar protocols and - protocol data units. - The iCalendar specification describes how calendar clients can communicate - with calendar servers for users can store their calendar data and arrange - meetings with other users. - -\layout Standard - -Libical implements the following specifications and protocols -\layout Standard -\added_space_top 0.3cm \added_space_bottom 0.3cm \LyXTable -multicol5 -5 2 0 0 -1 -1 -1 -1 -1 0 0 0 -1 0 0 0 -1 0 0 0 -1 0 0 0 -1 1 0 0 -8 1 0 "" "" -8 1 1 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" -0 8 1 0 0 0 0 "" "" - -iCal Core -\newline -2445 -\newline -iTIP -\newline -2446 -\newline -iMIP -\newline -2447 -\newline -iRIP -\newline -draft -\newline -CAP -\newline -draft -\layout Standard - -(The current version, 0.15, does not implement iRip or CAP. - ) -\layout Standard - -This documentation assumes that you are familiar with the iCalendar standards - RFC2445 and RFC2446. - these specifications are online on the CALSCH webpage at: -\layout Verbatim - -http://www.imc.org/ietf-calendar/ -\layout Subsection - -The libical project -\layout Standard - -This code is under active development. - If you would like to contribute to the project, you can contact me, Eric - Busboom, at eric@softwarestudio.org. - The project has a webpage at -\layout Verbatim - -http://softwarestudio.org/libical/index.html -\layout Standard - -and a mailing list that you can join by sending the following mail: -\layout Verbatim - -To: minimalist@softwarestudio.org -\layout Verbatim - -Subject: subscribe libical -\layout Subsection - -License -\layout Standard - -The code and datafiles in this distribution are licensed under the Mozilla - Public License. - See http://www.mozilla.org/NPL/MPL-1.0.html for a copy of the license. - Alternately, you may use libical under the terms of the GNU Library General - Public License. - See http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. -\layout Standard - -This dual license ensures that the library can be incorporated into both - proprietary code and GPL'd programs, and will benefit from improvements - made by programmers in both realms. - I will only accept changes into my version of the library if they are similarly - dual-licensed. -\layout Subsection - -Purpose & Goals -\layout Subsection - -Document version -\layout Verbatim - -$Id: UsingLibical.lyx,v 1.5 2000/06/06 22:48:07 alves Exp $ -\layout Section - -Building the Library -\layout Standard - -Libical uses autoconf to generate makefiles, although it uses none of the - autoconf flags to influence the compilation. - It should built with no adjustments on Linux, FreeBSD and Solaris. - -\layout Section - -Structure -\layout Standard - -The iCal calendar model is based on four types of objects: components, propertie -s, values and parameters. - -\layout Standard - -Properties are the fundamental unit of information in iCal, and they work - a bit like a hash entry, with a constant key and a variable value. - Properties may also have modifiers, called parameters. - In the iCal content line -\layout Verbatim - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com -\layout Standard - -The property name is -\begin_inset Quotes eld -\end_inset - -ORGANIZER, -\begin_inset Quotes erd -\end_inset - - the value of the property is -\begin_inset Quotes eld -\end_inset - -mrbig@host.com -\begin_inset Quotes erd -\end_inset - - and the -\begin_inset Quotes eld -\end_inset - -ROLE -\begin_inset Quotes erd -\end_inset - - parameter specifies that Mr Big is the chair of the meetings associated - with this property. - -\layout Standard - -Components are groups of properties that represent the core objects of a - calendar system, such as events or timezones. - -\layout Standard - -The central goal of libical is to parse iTIP data into an internal representatio -n of Components, Properties, Parameters an Values, and to allow the user - to manipulate the data in various ways -\layout Standard -\added_space_bottom 0.3cm -\begin_float fig -\layout Standard - - -\begin_inset Figure size 180 147 -file icaluml.eps -flags 13 - -\end_inset - - -\end_float -When a component is send across a network, if it is un-encrypted, it will - look something like: -\layout Code - -BEGIN:VEVENT -\layout Code - -DTSTAMP:19980309T231000Z -\layout Code - -UID:guid-1.host1.com -\layout Code - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com -\layout Code - -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: -\layout Code - - -\protected_separator - MAILTO:employee-A@host.com -\layout Code - -DESCRIPTION:Project XYZ Review Meeting -\layout Code - -CATEGORIES:MEETING -\layout Code - -CLASS:PUBLIC -\layout Code - -CREATED:19980309T130000Z -\layout Code - -SUMMARY:XYZ Project Review -\layout Code - -DTSTART;TZID=US-Eastern:19980312T083000 -\layout Code - -DTEND;TZID=US-Eastern:19980312T093000 -\layout Code - -LOCATION:1CP Conference Room 4350 -\layout Code - -END:VEVENT -\layout Subsection - -Core iCal classes -\layout Subsubsection - -Components -\layout Subsubsection - -Properties -\layout Subsubsection - -Values -\layout Subsubsection - -Parameters -\layout Subsection - -Other elements of libical -\layout Standard - -In addition to the core iCal classes, libical has many other types, structures, - classes that aid in creating and using iCal components. - -\layout Subsubsection - -Enumerations -\layout Subsubsection - -Types -\layout Subsubsection - -The Parser -\layout Subsubsection - -Restrictions -\layout Subsubsection - -Error objects -\layout Subsubsection - -Memory Management -\layout Subsubsection - -Storage classes -\layout Section - -Differences From RFCs -\layout Standard - -Libical has been designed to follow the standards as closely as possible, - so that the key objects in the standards are also keey objects in the library. - However, there are a few areas where the specifications are (arguably) - irregular, and following them exactly would result in an unfriendly interface. - These deviations make libical easier to use by maintaining a self-similar - interface. - -\layout Subsection - -Pseudo Components -\layout Standard - -Libical defines components for groups of properties that look and act like - components, but are not defined as components in the specification. - XDAYLIGHT and XSTANDARD are notable examples. - These pseudo components group properties within the VTIMEZONE components. - For instanace, the timezone properties associated with daylight savings - time starts with -\begin_inset Quotes eld -\end_inset - -BEGIN:DAYLIGHT -\begin_inset Quotes erd -\end_inset - - and ends with -\begin_inset Quotes eld -\end_inset - -END:DAYLIGHT, just like other components, but is not defined as a component - in RFC2445. - ( See RFC2445, page 61 ) In Libical,this grouping is represented by the - XDAYLIGHT component. - Standard iCAL components all start with the letter -\begin_inset Quotes eld -\end_inset - -V, -\begin_inset Quotes erd -\end_inset - - while pseudo components start with -\begin_inset Quotes erd -\end_inset - -X. -\begin_inset Quotes erd -\end_inset - - -\layout Standard - -There are also pseudo components that are conceptually derived classess - of VALARM. - RFC2446 defines what properties may be included in each component, and - for VALARM, the set of properties it may have depends on the value of the - ACTION property. - -\layout Standard - -For instance, if a VALARM component has an ACTION property with the value - of -\begin_inset Quotes eld -\end_inset - -AUDIO, -\begin_inset Quotes erd -\end_inset - - the component must also have an -\begin_inset Quotes eld -\end_inset - -ATTACH -\begin_inset Quotes erd -\end_inset - - property. - However, if the ACTION value is -\begin_inset Quotes eld -\end_inset - -DISPLAY, -\begin_inset Quotes erd -\end_inset - - the component must have a DESCRIPTION property. - -\layout Standard - -To handle these various, complex restrictions, libical has pseudo components - for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and XPROCEDUREA -LARM. - -\layout Subsection - -Combined Values -\layout Standard - -Many values can take more than one type. - TRIGGER, for instance, can have a value type of with DURATION or of DATE-TIME. - These multiple types make it difficult to create routines to return the - value associated with a property. - -\layout Standard - -It is natural to have interfaces that would return the value of a property, - but it is cumbersone for a single routine to return multiple types. - So, in libical, properties that can have multiple types are given a single - type that is the union of their RFC2445 types. - For instance, in libical, the value of the TRIGGER property resolves to - -\noun on -struct icaltriggertype -\noun default -. - This type is a union of a DURATION and a DATE-TIME. - -\layout Subsection - -Multi-Valued Properties -\layout Standard - -Some properties, such as CATEGORIES have only one value type, but each CATEGORIE -S property can have multiple value instances. - This also results in a cumbersome interface -- CATEGORIES accessors would - have to return a list while all other accessors returned a single value. - In libical, all properties have a single value, and multi-valued properties - are broken down into multiple single valued properties during parsing. - That is, an input line like, -\layout Verbatim - -CATEGORIES: work, home -\layout Standard - -becomes in libical's internal representation -\layout Verbatim - -CATEGORIES: work -\layout Verbatim - -CATEGORIES: home -\layout Standard - -Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY ) to - exist as both a multi-values property and as multiple single value properties, - while others ( like CATEGORIES ) can only exist as single multi-valued - properties. - This makes the internal representation for CATEGORIES illegal. - However when you convert a component to a string, the library will collect - all of the CATEGORIES properties into one. - -\layout Section - -Implementation Limitations -\layout Section - -Using libical -\layout Subsection - -Creating Components -\layout Standard - -There are three ways to create components in Libical: creating individual - objects and assembling them, building entire objects in massive vaargs - calls, and parsing a text file containing iCalendar data. - -\layout Subsubsection - -Constructor Interfaces -\layout Standard - -Using constructor interfaces, you create each of the objects seperately - and them assemble them in to components: -\layout Code - -icalcomponent *event; -\layout Code - -icalproperty *prop; -\layout Code - -icalparameter *param; -\layout Code - -struct icaltimetype atime; -\layout Code - -event = icalcomponent_new(ICAL_VEVENT_COMPONENT); -\layout Code - -prop = icalproperty_new_dtstamp(atime) ; -\layout Code - -icalcomponent_add_property(event, prop); -\layout Code - -prop = icalproperty_new_uid(strdup("guid-1.host1.com")) ); -\layout Code - -icalcomponent_add_property(event,prop); -\layout Code - -prop=icalproperty_new_organizer(strdup("mrbig@host.com")); -\layout Code - -param = icalparameter_new_role(ICAL_ROLE_CHAIR) -\layout Code - -icalproperty_add_parameter(prop, param); -\layout Code - -icalcomponent_add_property(event,prop); -\layout Standard - -While we are on this example, you should notice that libical uses a semi-object- -oriented style of interface. - Most things you work with are objects, that are instantiated with a constructor - that has -\begin_inset Quotes eld -\end_inset - -new -\begin_inset Quotes erd -\end_inset - - in the name. - Also note that, other than the object reference, most structure data is - passed in to libical routines by value. - Strings, of course, are passed in by reference, but libical will take ownership - of the memory, so you had beter strdup() the data unless you want a core - dump when the memory is freed for the second time. - Libical has some complex bu very regular memory handling rules. - These are detailed in section -\begin_inset LatexCommand \ref{sec:memory} - -\end_inset - -. -\layout Standard - -If any of the constructors fail, they will return 0. - If you try to insert 0 into a property or component, or use a zero-valued - object reference, libical will either silently ignore the error or will - abort with an error message. - This behavior is controlled by a compile time flag (ICAL_ERRORS_ARE_FATAL), - and will abort by default. - -\layout Subsubsection - -vaargs Constructors -\layout Standard - -There is another way to create complex components, which is arguable more - elegant, if you are not horrified by vaargs. - The vaargs constructor interface all you to create intricate components - in a single block of text. - -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - calendar = -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent_vanew( -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - ICAL_VCALENDAR_COMPONENT, -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalproperty_new_version(strdup("2.0")), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalproperty_new_prodid(strdup("-//RDU Software//NONSGML HandCal//EN")), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalcomponent_vanew( -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -ICAL_VEVENT_COMPONENT, -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_new_dtstamp(atime), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_new_uid(strdup("guid-1.host1.com")), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_vanew_organizer( -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - strdup("mrbig@host.com"), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalparameter_new_role(ICAL_ROLE_CHAIR), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - 0 -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_vanew_attendee( -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - strdup("employee-A@host.com"), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalparameter_new_rsvp(1), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - icalparameter_new_cutype(ICAL_CUTYPE_GROUP), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - 0 -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - ), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_new_location(strdup("1CP Conference Room 4350")), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -0 -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -), -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - 0 -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - ); -\layout Standard - -This form is similar to the regular constructor, except that they have -\begin_inset Quotes eld -\end_inset - -vanew -\begin_inset Quotes erd -\end_inset - - instead of -\begin_inset Quotes eld -\end_inset - -new -\begin_inset Quotes erd -\end_inset - - in the name. - The arguments are similar too, except that the component contstructor can - have a list of properties, and the property constructor can have a list - or parameters. - Be sure to terminate every list with a '0', or your code will crash, if - you are lucky. - -\layout Subsubsection - -Parsing Text Files -\layout Standard - -The final way to create components will probably be the most common; you - can create components from RFC2445 compliant text. - If you have the string in memory, use -\layout Verbatim - -icalcomponent* icalparser_parse_string(char* str); -\layout Standard - -This may seem wasteful if you want to pull a large component off of the - network; you may prefer to parse the component line by line. - This is possible too, with -\layout Verbatim - -icalcomponent* icalparser_parse(char*(*line_gen_func)(char *s, size_t size, - void *d)); -\layout Standard - -This routine takes a pointer to a function that copies 'size' characters - to 's'. - The routine returns 's', similar to fgets(). - See string_line_generator in icalparser.c for an example. - -\layout Subsection - -Accessing Components -\layout Standard - -Given a reference to a component, you probably will want to access the propertie -s, parameters and values inside. - -\layout Subsubsection - -Finding Components -\layout Standard - -To find a sub-component of a component, use: -\layout Verbatim - -icalproperty* icalcomponent_get_first_component( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent* component, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent_kind kind); -\layout Standard - -This routine will return a reference to the first component of the type - 'kind.' The key kind values, listed in icalenums.h are: -\layout Code - -ICAL_ANY_COMPONENT -\layout Code - -ICAL_VEVENT_COMPONENT -\layout Code - -ICAL_VTODO_COMPONENT -\layout Code - -ICAL_VJOURNAL_COMPONENT -\layout Code - -ICAL_VCALENDAR_COMPONENT -\layout Code - -ICAL_VFREEBUSY_COMPONENT -\layout Code - -ICAL_VALARM_COMPONENT -\layout Standard - -These are only the most common components; there are many more listed in - icalenums.h. -\layout Standard - -As you might guess, if there is more than one subcomponent of the type you - have chosen, this routine will return only the first. - to get at the others, you need to iterate through the component. - -\layout Subsubsection - -Interating Through Components -\layout Standard - -Iteration requires a second routine to get the next subcomponent after the - first: -\layout Verbatim - -icalcomponent* icalcomponent_get_next_component(icalcomponent* component, - -\layout Verbatim - -icalcomponent_kind kind); -\layout Standard - -With the 'first' and 'next' routines, you can create a for loop to iterate - through all of a components subcomponents -\layout Code - - -\protected_separator - for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -c != 0; -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) -\layout Code - -{ -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - do_something(c); -\layout Code - -} -\layout Standard - -This code bit wil iterate through all of the subcomponents in 'comp' but - you can select a specific type of component by changing ICAL_ANY_COMPONENT - to another component type. -\layout Subsubsection - -Removing Components -\layout Standard - -Libical component have internal iterators, so you can only have one iteration - over a component at a time. - Removing an element from a list while iterating through the list can cause - problems, since you will probably be removing the element that the internal - iterator points to. - This will result in the iteration loop terminating immediately after removing - the element. - To avoid the problem, you will need to step the iterator ahead of the element - you are going to remove, like this: -\layout Code - -for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); - -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -c != 0; -\layout Code - - -\protected_separator - -\protected_separator - -\protected_separator - -\protected_separator -c = next -\layout Code - -{ -\protected_separator - -\protected_separator - -\layout Code - - -\protected_separator -next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); -\layout Code - - -\protected_separator - -\protected_separator - icalcomponent_remove_component(parent_comp,c); -\layout Code - -} -\layout Subsubsection - -Working with properties and parameters -\layout Standard - -Finding, iterating and removing properties works the same as it does for - components, using the property-specific or parameter-specific interfaces: - -\layout Verbatim - -icalproperty* icalcomponent_get_first_property( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent* component, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_kind kind); -\layout Verbatim - -icalproperty* icalcomponent_get_next_property( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent* component, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty_kind kind); -\layout Verbatim - -void icalcomponent_add_property( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent* component, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty* property); -\layout Verbatim - -void icalcomponent_remove_property( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalcomponent* component, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty* property); -\layout Verbatim - -icalparameter* icalproperty_get_first_parameter( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty* prop, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalparameter_kind kind); -\layout Verbatim - -icalparameter* icalproperty_get_next_parameter( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty* prop, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalparameter_kind kind); -\layout Verbatim - -void icalproperty_add_parameter( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty* prop, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalparameter* parameter); -\layout Verbatim - -void icalproperty_remove_parameter( -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalproperty* prop, -\layout Verbatim - - -\protected_separator - -\protected_separator - -\protected_separator -icalparameter_kind kind); -\layout Subsubsection - -Getting Values -\layout Subsubsection - -Setting Values -\layout Subsubsection - -Getting Parameters -\layout Subsubsection - -Setting Parameters -\layout Subsubsection - -Removing Parameters -\layout Subsubsection - -Checking Component Validity -\layout Subsection - -Storing Objects -\layout Standard - -The libical distribution inclues a seperate library, libicalss, that allows - you to store iCal component data to disk in a variety of ways. - This library is documented seperately. - -\layout Subsection - - -\begin_inset LatexCommand \label{sec:memory} - -\end_inset - -Memory Management -\layout Standard - -Libical relies heavily on dynamic allocation for both the core objects and - for the strings used to hold values. - Some of this memory the library caller owns and must free, and some of - the memory is managed by the library. - Here is a summary of the memory rules. - -\layout Description - -1) If the function name has "new" in it, the caller gets control of the - memory. - ( such as icalcomponent_new(), or icalproperty_new_clone() ) -\layout Description - -2) If you got the memory from a routine with new in it, you must call the - corresponding *_free routine to free the memory. - ( Use icalcomponent_free() to free objects created with icalcomponent_new()) - -\layout Description - -3) If the function name has "add" in it, the caller is transfering control - of the memory to the routine. - ( icalproperty_add_parameter() ) -\layout Description - -4) If the function name has "remove" in it, the caller passes in a pointer - to an object and after the call returns, the caller owns the object. - So, before you call icalcomponent_remove_property(comp,foo), you do not - own "foo" and after the call returns, you do. - -\layout Description - -5) If the routine returns a string, libical owns the memory and will put - it on a ring buffer to reclaim later. - You'd better strdup() it if you want to keep it, and you don't have to - delete it. - -\layout Subsection - -Error Handling -\layout Standard - -icalerror_errno. - Return values. - #defines. - icalerror_stop_here. - X-LIC-ERROR -\layout Subsubsection - -Return values -\layout Subsubsection - -icalerrno -\layout Subsubsection - -Component errors -\layout Subsubsection - -icalerror_stop_here -\layout Subsubsection - -X-LIC-ERROR -\layout Subsection - -Naming Standard -\layout Standard - -Structures that you access with the -\begin_inset Quotes eld -\end_inset - -struct -\begin_inset Quotes erd -\end_inset - - keyword, such as -\begin_inset Quotes eld -\end_inset - -struct icaltimetype -\begin_inset Quotes erd -\end_inset - - are things that you are allowed to see inside and poke at. - -\layout Standard - -Structures that you access though a typedef, such as -\begin_inset Quotes eld -\end_inset - -icalcomponent -\begin_inset Quotes erd -\end_inset - - are things where all of the data is hidden. - -\layout Standard - -Component names that start with -\begin_inset Quotes eld -\end_inset - -V -\begin_inset Quotes erd -\end_inset - - are part of RFC 2445 or another iCal standard. - Component names that start with -\begin_inset Quotes eld -\end_inset - -X -\begin_inset Quotes erd -\end_inset - - are also part of the spec, but they are not actually components in the - spec. - However, they look and act like components, so they are components in libical. - Names that start with -\begin_inset Quotes eld -\end_inset - -XLIC -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -X-LIC -\begin_inset Quotes erd -\end_inset - - are not part of any iCal spec. - They are used internally by libical. - -\layout Standard - -Enums that identify a component, property, value or parameter end with -\begin_inset Quotes eld -\end_inset - -_COMPONENT, -\begin_inset Quotes erd -\end_inset - - -\begin_inset Quotes eld -\end_inset - -_PROPERTY, -\begin_inset Quotes erd -\end_inset - - -\begin_inset Quotes eld -\end_inset - -_VALUE, -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -_PARAMETER -\begin_inset Quotes erd -\end_inset - -s -\layout Standard - -Enums that identify a parameter value have the name of the parameter as - the second word. - For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. -\layout Standard - -The enums for the parts of a recurarance rule and request statuses are irregular. - -\layout Section - -Useful Recipies -\layout Standard - -Iteration -\layout Standard - -Copying components. - Remember that you must clone or remove an object before putting in on another - list. - -\layout Standard - -Finding compliance errors -\layout Section - -Performance -\layout Standard - -Checking restrictions is computationally expensive -\layout Section - -Hacks and Bugs -\the_end diff --git a/libical/doc/UsingLibical.ps b/libical/doc/UsingLibical.ps deleted file mode 100644 index 0417ded6a5..0000000000 --- a/libical/doc/UsingLibical.ps +++ /dev/null @@ -1,1308 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.85 Copyright 1999 Radical Eye Software -%%Title: UsingLibical.dvi -%%Pages: 6 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -t letter -o -%+ /usr/local/home/eric/proj/FreeAssociation/libical/doc/UsingLibical.ps -%+ UsingLibical.dvi -%DVIPSParameters: dpi=600, compressed -%DVIPSSource: TeX output 2000.02.18:1517 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 600 600 (UsingLibical.dvi) -@start -%DVIPSBitmapFont: Fa ecbx1000 10 47 -/Fa 47 122 df<913A03FF8007FE027F9039F07FFF800103B500FDB512E0010F903A00FF -FE0FF0D93FF8ECF81F90267FE0019038F03FF849485A4816E014804816C00200ED1FF081 -F007C06F91C7FCA8B912E0A4000390C701C0C7FCB3ABB5D8FC3FEBFF80A43D3A7EB938> -27 D<12E07E127C7E7E7F6C7E6C7E12037F6C7E7F12007F137E137FA2EB3F80A214C013 -1F14E0A2130F14F0A4EB07F8A514FCB114F8A5EB0FF0A414E0131FA214C0133F1480A2EB -7F00A2137E13FE5B12015B485A5B1207485A485A90C7FC123E5A12F05A16537BBD25>41 -D46 -D<49B4FC011F13F0017F13FC9038FF83FE4848C67E4848EB7F804848EB3FC04848EB1FE0 -A2001F15F0A24848EB0FF8A3007F15FCA400FF15FEB3007F15FCA5003F15F86D131FA200 -1F15F0A26C6CEB3FE0000715C06C6CEB7F806C6CEBFF003900FF83FE6DB45A011F13F001 -0190C7FC27377CB530>48 D<141E143E14FE1307137FB5FCA3138FEA000FB3B3A5007FB6 -1280A4213679B530>IIII<001C15C0D81F80 -130701F8137F90B61280A216005D5D15F05D15804AC7FC14F090C9FCA7EB03FE90381FFF -E0017F13F89038FE07FC9038F003FFD9C0011380496C13C090C7FC000E15E0C8127F16F0 -A216F8A3121FEA3FC0487E12FF7FA316F05B15FFD87F8014E0007EC713C0003E5B003F49 -13806C6C481300390FF01FFE6CB512F8000114E06C6C1380D90FF8C7FC25377BB530>I< -EC0FF8ECFFFE0103EBFF8090390FF80FC090393FE003E090397F8001F09038FF000F48EC -1FF84848133F485A120F5B121FA2003FEC1FF0ED0FE0484890C7FCA31408EC7FF039FFF1 -FFFC01F313FFD9F78013809039FF007FC049EB3FE04914F0ED1FF85B16FCA34914FEA412 -7FA5123F16FCA26C7E16F8000F143F6D14F0000715E06C6CEB7FC03A01FF81FF806C90B5 -1200013F13FC010F13F00101138027377CB530>I<123C123EEA3FE090B71280A4170048 -5D5E5E5E5EA2007CC7EA0FC000784A5A4BC7FC00F8147E485C5D14014A5AC7485A4A5AA2 -4A5A143F4AC8FCA214FEA213015C1303A21307A2130F5CA2131FA5133FA96D5A6D5A6D5A -29397BB730>I<49B47E010F13F0013F13FC9038FE01FF3A01F8007F804848EB3FC04848 -EB1FE0150F484814F01507121FA27F7F7F6D130F01FF14E014C09138E01FC06CEBF83F91 -38FE7F806C9038FFFE005D6C14F06C14FC6C14FF6D14806D14C090B612E0D803FD14F026 -07F07F13F848487E261FC00F13FC383F8003007F010013FE90C7127F151F00FE14071503 -1501A21500A216FC7E6C14016D14F86C6C13036DEB07F06C6CEB0FE0D80FFEEB7FC00003 -B61200C614FC013F13F00103138027377CB530>II67 DI70 -DI73 D76 D80 -D82 DI<003FB91280A4D9F800EBF003D87FC09238007FC049 -161F007EC7150FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AE010FB7FC -A43B387DB742>III97 -D<13FFB5FCA412077EAF4AB47E020F13F0023F13FC9138FE03FFDAF00013804AEB7FC002 -80EB3FE091C713F0EE1FF8A217FC160FA217FEAA17FCA3EE1FF8A217F06E133F6EEB7FE0 -6E14C0903AFDF001FF80903AF8FC07FE009039F03FFFF8D9E00F13E0D9C00390C7FC2F3A -7EB935>I<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C048485AEA0FF812 -1F13F0123F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01E06C7E15036C6C -EB07C06C6C14806C6C131FC69038C07E006DB45A010F13F00101138023257DA42A>II<903803FF8001 -1F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001FEC1FE05B003FEC0F -F0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E1678121F6C6C14F86D14F0 -00071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E025257DA42C>II<161FD907FE -EBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C138F003F15CF4990 -387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC3907FE07FE48B512F8 -6D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016E06C15F86C816C81 -5A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C6C6C495AD81FF0EB -07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530>I<13FFB5FCA41207 -7EAFED7FC0913803FFF8020F13FE91381F03FFDA3C01138014784A7E4A14C05CA25CA291 -C7FCB3A3B5D8FC3F13FFA4303A7DB935>II<13FFB5FCA412077EAF92 -380FFFE0A4923803FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07E04A5A141FEC7F -E04A7E8181A2ECCFFEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E82150F82B5D8F83F13 -F8A42D3A7EB932>107 D<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FED97F -E0EB0FFC00FF902601FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA3C00 -903887801F000749DACF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3A3B5 -D8FC1FB50083B512F0A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91381F -03FFDA3C011380000713780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FFA430 -257DA435>I<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48486D -7E48486D7EA2003F81491303007F81A300FF1680A9007F1600A3003F5D6D1307001F5DA2 -6C6C495A6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA430> -I<9039FF01FF80B5000F13F0023F13FC9138FE07FFDAF00113800003496C13C00280EB7F -E091C713F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E06EEB -FFC0DAF00313809139FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FCA42F -357EA435>I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C5A5C -A29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>114 -D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E -7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE -140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F81400 -38E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7 -FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425> -I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90 -387FFFFC011F13F00103138030257DA435>II120 DI E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb ecbx1200 12 47 -/Fb 47 122 df<157F913803FFC0020F7F4A7F91383FE1F891387F80789138FF007C4914 -3C495A163E4948131EA3130FA3163E163C167C16786E13F84B5A4B5A15075E6D6C485A4B -C70003B512E0153E15FC6D5B5D4B91390007C0004B5E6D6D150F4FC7FC6D6D151E49173E -496D5D491778496D15F890261FBFFE4A5AD93F3F5E9026FE1FFF1403D801FC6E495A0003 -6D5E48486C6D130F000F6F49C8FC001F6D6D133E48486C6D133C187C007F6D6D5B6F6C48 -5A00FF6E6C485A6FEB87C06F13CFEFFF806F91C9FC6D6D5B6F49EC01E06F7F6C6CEC3FFF -706D13036C6C4A6DEB07C06C6C91B500F0130FDA800702FCEB1F806C9026E03FF89039FF -80FF00000390B5D8F03FEBFFFE6CDBC00F5C6C6CDA00035C011F01F8D9007F13E0010301 -80020790C7FC4B477BC557>38 D45 DI49 DII<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7 -140715C7EC0F87EC1F07143E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E -5BA25B485A485A485A120F5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280 -A531417DC038>I<0007150301E0143F01FFEB07FF91B6FC5E5E5E5E5E16804BC7FC5D15 -E092C8FC01C0C9FCAAEC3FF001C1B5FC01C714C001DF14F09039FFE03FFC9138000FFE01 -FC6D7E01F06D13804915C0497F6C4815E0C8FC6F13F0A317F8A4EA0F80EA3FE0487E12FF -7FA317F05B5D6C4815E05B007EC74813C0123E003F4A1380D81FC0491300D80FF0495AD8 -07FEEBFFFC6CB612F0C65D013F1480010F01FCC7FC010113C02D427BC038>I<4AB47E02 -1F13F0027F13FC49B6FC01079038807F8090390FFC001FD93FF014C04948137F4948EBFF -E048495A5A1400485A120FA248486D13C0EE7F80EE1E00003F92C7FCA25B127FA2EC07FC -91381FFF8000FF017F13E091B512F89039F9F01FFC9039FBC007FE9039FF8003FF17804A -6C13C05B6F13E0A24915F0A317F85BA4127FA5123FA217F07F121FA2000F4A13E0A26C6C -15C06D4913806C018014006C6D485A6C9038E01FFC6DB55A011F5C010714C0010191C7FC -9038003FF02D427BC038>I<121E121F13FC90B712FEA45A17FC17F817F017E017C0A248 -1680007EC8EA3F00007C157E5E00785D15014B5A00F84A5A484A5A5E151FC848C7FC157E -5DA24A5A14035D14074A5AA2141F5D143FA2147F5D14FFA25BA35B92C8FCA35BA55BAA6D -5A6D5A6D5A2F447AC238>III65 -D67 -DII71 -DI76 DII<923807FFC092B512FE0207ECFFC0021F15F091267FFE0013FC90 -2601FFF0EB1FFF01070180010313C04990C76C7FD91FFC6E6C7E49486F7E49486F7E01FF -8348496F7E48496F1380A248496F13C0A24890C96C13E0A24819F04982003F19F8A3007F -19FC49177FA400FF19FEAD007F19FC6D17FFA3003F19F8A26D5E6C19F0A26E5D6C19E0A2 -6C6D4B13C06C19806E5D6C6D4B13006C6D4B5A6D6C4B5A6D6C4B5A6D6C4A5B6D01C00107 -5B6D01F0011F5B010101FE90B5C7FC6D90B65A023F15F8020715C002004AC8FC030713C0 -47467AC454>II82 DI<003FBA12E0A59026FE000FEB8003D87FE09338003FF049171F90C71607 -A2007E1803007C1801A300781800A400F819F8481978A5C81700B3B3A20107B8FCA54543 -7CC24E>I86 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007F -F84848EB1FFC6D6D7E486C6D7EA26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6 -FC1307013F13F19038FFFC01000313E0481380381FFE00485A5B127F5B12FF5BA35DA26D -5B6C6C5B4B13F0D83FFE013EEBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D9 -0FFCC9FC322F7DAD36>97 DIII -I103 DI<137C48B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7 -FCAAEB7FC0EA7FFFA512037EB3AFB6FCA518467CC520>II108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F001B5 -12E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026FF3E -007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B60003B5 -12FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F03FFC -91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512FEA5 -372D7CAC3E>II<90397FC0 -0FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C496D -13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E06E15 -C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FCED1F -F092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED8FFC -91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3A5B6 -12E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003383FC000 -49133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14C015 -F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA26C141F15 -0FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F13E0 -26E007FEC7FC232F7CAD2C>IIII121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc ectt1000 10 59 -/Fc 59 126 df<121FEA3F80EA7FC0EAFFE0B0EA7FC0AEEA1F00C7FCA7121FEA3F80EA7F -C0EAFFE0A5EA7FC0EA3F80EA1F000B3470B32C>33 D<003C131E007F137F481480A66C14 -00A6007E7FA6003E133EA3003C131E001C131C191977B32C>I<143814FC13011303EB07 -F8EB0FF0EB1FC0EB3F80EB7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A -127EA312FE5AAC7E127EA3127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F -80EB1FC0EB0FF0EB07F8EB03FC130113001438164272B92C>40 D<127012FC7E7E6C7E6C -7EEA0FE06C7E6C7E6C7E6C7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301 -A314FC1300AC130114F8A3130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE48 -5A485A485A485AEA3FC0485A48C7FC5A5A1270164279B92C>I44 D<007FB512F0B612F8A36C14F01D0579942C>I<121FEA3F80EA -7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B708A2C>I<1507ED0F80A2151F16005D153E15 -7E157CA215FC5D14015D14035D14075D140F5D141F92C7FC5C143EA2147E147C14FC5C13 -015C13035C13075C130F5C131F91C8FC5B133EA2137E137C13FC5B12015B12035B12075B -120F5B121F90C9FCA25A123E127E127C12FC5AA2127021417BB92C>II<1307497EA2131FA2133F137F13FF5A1207127FB5FC13 -DF139FEA7C1F1200B3AE007FB512E0B612F0A36C14E01C3477B32C>I<121FEA3F80EA7F -C0EAFFE0A5EA7FC0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA -1F000B2470A32C>58 DI<007FB612F0B712F8A36C15F0CAFCA8007F -B612F0B712F8A36C15F025127DA12C>61 D64 -D<14FE497EA4497FA214EFA2130781A214C7A2010F7FA314C390381F83F0A590383F01F8 -A490387E00FCA549137E90B512FEA34880A29038F8003FA34848EB1F80A4000715C04913 -0FD87FFEEBFFFC6D5AB514FE6C15FC497E27347EB32C>I<02FF13700107EBE0F84913F9 -013F13FD4913FFEBFF813901FE007F4848131FD807F0130F1507485A491303485A150148 -C7FCA25A007EEC00F01600A212FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C1303 -6D14F06C6C130716E0D803FC131F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13 -F00100138025357DB32C>67 D<007FB612F0B712F8A37E3903F00001A7ED00F01600A4EC -01E04A7EA490B5FCA5EBF003A46E5A91C8FCA5163C167EA8007FB612FEB7FCA36C15FC27 -337EB22C>69 D<903901FC038090390FFF87C04913EF017F13FF90B6FC4813073803FC01 -497E4848137F4848133F49131F121F5B003F140F90C7FCA2127EED078092C7FCA212FE5A -A8913803FFF84A13FCA27E007E6D13F89138000FC0A36C141FA27F121F6D133F120F6D13 -7F6C7E6C6C13FF6D5A3801FF076C90B5FC6D13EF011F13CF6DEB0780D901FCC7FC26357D -B32C>71 DI<007FB512F8B612FCA36C14 -F839000FC000B3B3A5007FB512F8B612FCA36C14F81E3379B22C>I<387FFFE0B57EA36C -5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C15F025337DB22C>76 -DIII<007FB512C0B612F88115FF6C15802603F00013C0153FED0FE0ED07 -F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B61280160015FC5D15C001 -F0C8FCB0387FFF80B57EA36C5B25337EB22C>I<387FFFFCB67E15E015F86C803907E007 -FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01FE140790B55A5D15E0818190 -38E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1FBFB5ECFF00815E6C486D5AC8 -EA01F029347EB22C>82 D<90381FF80790B5EA0F804814CF000714FF5A381FF01F383FC0 -03497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC127F7FEA3FE0EA1FFC -EBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07FF02001380153FED1F -C0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0EB7F009038FE01FF90 -B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<007FB612FCB712FEA43AFC -007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA227337EB22C>I86 D89 D<003FB612C04815E0A400 -7EC7EA1FC0ED3F80A2ED7F00157E15FE4A5A003C5CC712034A5AA24A5A4A5AA24A5A4AC7 -FCA214FE495AA2495A495AA2495A495AA2495A49C8FCA213FE485AA24848EB03C049EB07 -E01207485A5B121F485AA248C7FCB7FCA46C15C023337CB22C>I<007FB6FCB71280A46C -150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15E048809038C01FF81407EC01FC -381F80000006C77EC8127EA3ECFFFE131F90B5FC1203120F48EB807E383FF800EA7FC090 -C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C15FE6C14BF0001EBFE1F3A003F -F007FC27247CA32C>97 DI<903803FFE0011F13F8017F13FE48B5FC48804848C6FC -EA0FF0485A49137E4848131890C9FC5A127EA25AA8127EA2127F6C140F6DEB1F806C7E6D -133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13E0010390C7FC21247AA32C>I< -EC0FFE4A7EA380EC003FAAEB07F8EB3FFE90B512BF4814FF5A3807FC0F380FF00348487E -497E48487F90C7FC007E80A212FE5AA87E007E5CA2007F5C6C7E5C6C6C5A380FF0073807 -FC1F6CB612FC6CECBFFE6C143FEB3FFC90390FF01FFC27337DB22C>IIIII<1307EB1FC0A2497EA36D5AA20107C7FC90C8FCA7387FFFC080B5FC7E -A2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C>I<140EEC3F80A2EC7FC0A3EC -3F80A2EC0E0091C7FCA748B512804814C0A37EC7120FB3B3A2141F003C1480007E133FB4 -14005CEB01FEEBFFFC6C5B5C001F5B000790C7FC1A467CB32C>II<387FFFE0B57EA37E -EA0003B3B3A5007FB61280B712C0A36C158022337BB22C>I<3A7F83F007E09039CFFC1F -F83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEBF83F496C487E01F013E001E0 -13C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13F8D87FFC4913F0023F137F2D -2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F6CB6FC00019038F03F80ECC0 -1F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A36C01E0140029247FA32C>I< -EB07FCEB1FFF017F13C048B512F048803907FC07FC390FF001FE48486C7E0180133F003F -158090C7121F007EEC0FC0A348EC07E0A76C140F007E15C0A2007F141F6C15806D133F6C -6CEB7F006D5B6C6C485A3907FC07FC6CB55A6C5C6C6C13C0011F90C7FCEB07FC23247CA3 -2C>I<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000019038F07FC09138801FE091 -380007F049EB03F85BED01FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07 -F0150F9138801FE09138E07FC091B51280160001FB5B01F813F8EC3FC091C8FCAD387FFF -E0B57EA36C5B27367FA32C>I114 D<90387FF8700003B512F8120F5A5A387FC00F387E00034813015AA3 -6CEB00F0007F140013F0383FFFC06C13FE6CEBFF80000314E0C66C13F8010113FCEB0007 -EC00FE0078147F00FC143F151F7EA26C143F6D133E6D13FE9038F007FC90B5FC15F815E0 -00F8148039701FFC0020247AA32C>I<131E133FA9007FB6FCB71280A36C1500D8003FC8 -FCB1ED03C0ED07E0A5EC800F011FEB1FC0ECE07F6DB51280160001035B6D13F89038003F -E0232E7EAD2C>I<3A7FF003FF80486C487FA3007F7F0001EB000FB3A3151FA2153F6D13 -7F3900FE03FF90B7FC6D15807F6D13CF902603FE07130029247FA32C>I<3A7FFF01FFFC -B514FE148314016C15FC3A03E0000F80A26D131F00011500A26D5B0000143EA26D137E01 -7C137CA2017E13FC013E5BA2EB3F01011F5BA21483010F5BA214C701075BA214EF01035B -A214FF6D90C7FCA26D5A147C27247EA32C>II<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5B -EB1F83EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803 -EF80903807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7F -FF01FFFC1483B514FE6C15FC140127247EA32C>I<3A7FFF01FFFCB5008113FE14831481 -6C010113FC3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA201 -3F13FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC -80A2143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C -90C8FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0ED -7F80EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A49 -5A495A49C8FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247DA3 -2C>I<15FF02071380141F147F91B512004913C04AC7FCEB03F85CB31307EB1FE013FF00 -7F5BB55A49C8FC6D7E6C7FC67F131FEB07F01303B380EB01FEECFFC06D13FF6E1380141F -14070200130021417BB92C>I125 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd ecbx1440 14.4 41 -/Fd 41 122 df27 -D<151E153E15FE1403140F147FEB07FF0003B5FCB6FCA3EBF87FEAFC00C7FCB3B3B3A600 -7FB712FCA52E4E76CD42>49 DI<913807FFC002 -7F13FC0103B67E010F15E090261FF80313F890267FC0007F01FEC7EA3FFE48488148486E -138013FE486C6C6D13C0804817E080A66C5B18C06C5B6C90C75AD80038168090C8FC4C13 -00A24C5A5F4C5A4B5B4B13C0030F5BDB7FFEC7FC91387FFFF816C016FCEEFF80DA000313 -E09238007FF8EE3FFE707E70138018C07013E018F07013F8A218FC82A218FEA3EA03C0EA -0FF0EA3FFC487EA2B5FCA218FCA25E18F8A26C4816F0495C4916E0D83FE04A13C06C485C -D80FF04A1380D807FE91387FFE003B03FFE003FFFC6C90B65A6C6C15E0010F92C7FC0101 -14FCD9001F1380374F7BCD42>I<17FC1601A216031607160FA2161F163F167FA216FF5D -5DA25D5D5D167F153E157E15FC15F8EC01F01403EC07E015C0EC0F80141FEC3F00143E5C -14FC495A5C495A1307495A5C49C7FC5B137E137C5B1201485A5B485A120F485A90C8FC12 -3E127E5ABA1280A5C901FCC7FCAF021FB71280A5394F7CCE42>I<486C150601F0153E01 -FEEC01FED9FFF0133F91B65A5F5F5F5F5F94C7FC16FC5E16E093C8FC15FC01F0138091CA -FCAC913807FF80023F13F891B512FE01F36E7E9026FFFC0113E09139E0007FF891C76C7E -496E7E01F86E7E5B7013804916C0C9FC18E08218F0A418F8A31203EA0FE0EA3FF8487EA2 -12FF7FA218F0A25B5E6C4816E05B01C016C06CC85A18806C6C4A13007FD80FF04A5A6C6C -ECFFFCD803FE4913F02701FFE00F5B6C6CB612806D92C7FC010F14F8010114C09026003F -FCC8FC354F7ACD42>II<121F7F7FEBFF8091B8FCA45A18FE18FC18 -F818F0A218E018C018804817000180C8123E007EC9127E5F007C4B5A4C5A5F16074C5A48 -4B5A4CC7FC167E167CC912FC4B5A4B5AA24B5A150F4B5AA24B5AA24BC8FC5DA25C5D1403 -A214075D140FA3141FA2143FA34A5AA414FFA65BAB6D5B6E5A6E5A6E5A385279D042>I< -913803FFC0023F13FC49B67E010715E090260FFC0013F8D93FE0EB1FFCD97F80EB07FE49 -C76C7E496E1380484880000317C049157F120718E0173F120FA27FA27F7F6E147F02E015 -C08002FC14FF6C01FF15806F481300EDE0036C9138F807FE6F485A6C9138FF1FF06CEDFF -E017806D4AC7FC7F010F6E7E6D81010115F06D81010315FE010F81D93FF71580D97FC115 -C02701FF807F14E048EB001F48486D14F04848010314F848481300496E13FC003F151F49 -1407007F6F13FE491400177F00FF163F49151F170F1707A21703A218FCA27F127F6DED07 -F8A26C6CED0FF07F6C6CED1FE06C6CED3FC06C6CEDFF806C01C0010313006C01FCEB3FFE -6C6CB612F8011F15E001071580010002FCC7FC020F13C0374F7BCD42>I<913807FF8002 -7F13F849B512FE01076E7E90261FFE0113E0903A7FF8003FF049486D7E48496D7E48496D -7E484980486F138091C7FC486F13C05A18E0485A18F0A27013F812FFA318FCA618FEA35E -127FA4003F5DA26C7E5E7E6C6D5B161E6C7F6C6D5B6C6C6C13F890393FFC03F06DB55A01 -074A13FC01001400EC1FF891C8FCA218F85EA301FC16F0487E2607FF8015E05E486D15C0 -A24C1380A24C13005F4A131F6C4B5A49C7485A494A5A6C48495B6D01075B2701FF803F90 -C7FC6C90B512FC013F5C6D14C0010791C8FC9038007FF0374F7BCD42>I66 D<932603FFF01407047F01FF140F0307B6 -00E0131F033F03F8133F92B700FE137F02039126C003FF13FF020F01F8C7EA3FC1023F01 -C0EC0FE391B5C80003B5FC4901FC814949814901E082011F498249498292CA7E49488349 -48835A4A83485B4885A24849187FA2485B1B3FA2485B1B1FA25AA21B0091CDFCA2B5FCAE -7EA280A36C1A1FA36C7FA21B3F6C7F1B3E6C7F1B7E6C6D187C6C1AFC6E18F86C19016D6C -EF03F06D7E6FEE07E06D6DEE0FC001076DEE1F806D01F8EE3F006D6D16FE6D01FF4B5A02 -3F01C0EC07F8020F01FCEC3FF00203903AFFC001FFC0020091B6C7FC033F15FC030715F0 -DB007F1480040301F0C8FC505479D25F>II70 -D72 DI76 -D80 -D82 DI85 D97 -DI<913803 -FFE0023F13FE91B67E010315E0010F9038003FF8D93FFCEB07FC4948497E4948131F4849 -497E485B485BA24890C7FC5A5B003F6F5A705A705A007F92C8FC5BA312FFAD127F7FA312 -3F7F6CEE0F80A26C6D141F18006C6D5C6C6D143E6C6D147E6C6D5C6D6C495A6DB4EB07F0 -010F9038C01FE06D90B5128001014AC7FCD9003F13F80203138031387CB63A>I<943803 -FF80040FB5FCA5EE003F170FB3A4913803FF80023F13F849B512FE0107ECFF8F011F9038 -C03FEF90273FFE0007B5FCD97FF8130149487F484980484980484980488291C8FC5A5B12 -3FA2127F5BA312FFAD127FA37F123FA3121F7F6C5E6C6D5C5F6C6D91B5FC6C6D5B6C6D49 -14E0D97FFCD90FEFEBFF80D91FFFEB7F8F010790B5120F010114FC6D6C13E00207010049 -C7FC41547CD249>I<913807FF80027F13F849B512FE01076E7E011F010313E0903A3FFC -007FF0D97FF06D7E49486D7E4849130F48496D7E48824890C77E1880485A82003F17C0A3 -485A18E082A212FFA290B8FCA401FCCAFCA6127FA37F123FA2EF03E06C7E17076C17C06C -6D140F18806C6D141F6C6DEC3F006C6D147ED97FFC495AD91FFFEB07F86D9038E03FF001 -0390B512C001005D023F01FCC7FC020113E033387CB63C>IIII<133FEBFFC0487F487FA2487FA66C5BA26C5B -6C5B013FC7FC90C8FCAEEB1FF8B5FCA512017EB3B3A6B612F0A51C547CD324>I107 DIII<913801FFC0023F13FE -91B67E010315E0010F018013F8903A3FFC001FFED97FF0EB07FF49486D7F48496D7F4849 -6D7F91C8127F4883488349153F001F83A2003F8349151FA2007F83A400FF1880AC007F18 -00A3003F5F6D153FA2001F5FA26C6C4B5AA26C6D4A5A6C5F6C6D495B6C6D495B6D6C4990 -C7FCD93FFCEB1FFE6DB46CB45A010790B512F0010115C0D9003F49C8FC020313E039387C -B642>II< -90393FF001FCB590380FFF804B13E0037F13F09238FE1FF89138F1F83F00019138F07FFC -6CEBF3E015C0ECF780A2ECFF00EE3FF84AEB1FF0EE0FE093C7FC5CA45CB3ABB612FEA52E -367DB535>114 D<903903FFC00E011FEBFC1E90B6127E000315FE3907FE003FD80FF013 -0F4848130348481301491300127F90C8127EA248153EA27FA27F01F091C7FC13FCEBFF80 -6C13FEECFFF06C14FE6F7E6C15E06C816C15FC6C81C681133F010F15801301D9000F14C0 -EC003F030713E0150100F880167F6C153FA2161F7EA217C07E6D143F17807F6DEC7F0001 -F85C6DEB03FE9039FF801FFC486CB512F0D8F81F14C0D8F00791C7FC39E0007FF02B387C -B634>I<147CA614FCA41301A31303A21307A2130F131F133F137F13FF1203000F90B512 -FEB7FCA426007FFCC8FCB3A9EE0F80ABEE1F006D7EA2011F143E806D6D5A6DEBC1F86DEB -FFF001005C023F1380DA03FEC7FC294D7ECB33>II121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe ecss2074 20.74 10 -/Fe 10 116 df76 -D85 -D<91380FFF8049B512F0010F14FC017F14FF48B712C0000782001F824882DAE0007F49C7 -EA3FFE01F8140FD81FC06E7E90C86C1380121E00186F13C0001081CAFCEF7FE0A318F017 -3FAD93B5FC157F0207B6FC143F49B7FC1307011F153F017FEBF80090B512804801F8C7FC -4813C04890C8FCEA0FFC485A485A5B485A5BA248C9FCA5177FA26D15FFA26C6C5C6D5C6D -140F6C6C5C01FF91B5FC6CEBE00791B612BF6CEDFE3F16FC6C15F06C15C06CECFE006C6C -13F0D91FFCC9FC344C77CA4C>97 DII103 D105 -D108 D110 -D<91380FFFC091B512FE0107ECFFC0011F15F8017F15FE90B812804817C05A489038F000 -3F4890C70003138049EC007FD81FF8151F491507003F16014992C7FCA2485AA77FA26C7E -7F7F6CB4FC6C13C014F86CEBFF806C14FC6CECFFE06C15FC6D14FF6D15C0010F81010315 -F8010081020F80DA007F7F03071480DB003F13C0160F040313E01600EF7FF0173FA2EF1F -F8A2170FA7EF1FF0A20070163F127C007FEE7FE001C015FF01F0020313C0B5020F138002 -F0137F91B712006C5E001F5E000716F0C65E011F1580010302FCC7FCD9000F13C0354C7C -CA3D>115 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff ecrm0700 7 1 -/Ff 1 66 df<140EA2141FA34A7EA3EC6FC0A2ECEFE014C7A290380183F0A390380301F8 -A201067F1400A249137EA2011C137F01187FA24980013FB5FCA2903960000FC0A201E080 -491307A248486D7EA200038115011207D81FC0497ED8FFF890383FFFE0A22B2A7EA931> -65 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg ecrm1000 10 78 -/Fg 78 123 df21 D27 DIII<007C137C00FE13FEEAFF01A3EAFE00A7007E13FC -007C137CA8003C137800381338A700181330171E77BA2A>34 D<030C497EA2031C130303 -1891C7FCA303385B03301306A30370130E0360130CA303E0131C4B1318A3020114384B13 -30A30203147092C71260A34A14E0007FB91280BA12C0C7270C000180C7FCA2021C130302 -1891C8FCA402385B02301306A50270130E0260130CA2BA12C06C1880280001C00038C8FC -4A1330A30103147091C71260A34914E001065CA3010E1301010C5CA3011C1303011891C9 -FCA301385B01301306A30170130E0160130CA23A4A7BB945>II<121C -127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A -1979B917>39 D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA21207 -5B120F90C7FCA25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203 -A26C7EA26C7E1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>I<12C07E12 -707E7E7E120F6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7FA21480A3EB -07C0A6EB03E0B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A25BA2485A48 -5AA2485A48C7FC120E5A5A5A5A5A13527CBD20>II<121C127FEAFF80A213C0A3127F121C1200A4 -12011380A2120313005A1206120E5A5A5A12600A19798817>44 DI<121C127FEAFF80A5EA7F00121C0909798817>I<1506A2150E150CA2151C1518153815 -30A215701560A215E015C0A214011580A2140315005C1406A2140E140CA2141C1418A214 -381430A21470146014E05CA213015CA2130391C7FCA25B1306A2130E130C131C1318A213 -381330A213701360A213E05BA212015B120390C8FCA25A1206A2120E120CA2121C1218A2 -1238123012701260A212E05AA21F537BBD2A>IIIII<1538A2157815F8A2140114031407A2140F141F141B14331473146314C3 -13011483EB030313071306130C131C131813301370136013C01201EA038013005A120E12 -0C5A123812305A12E0B712F8A3C73803F800AA4A7E0103B512F8A325387EB72A>I<0006 -140CD80780133C9038F003F890B5FC5D5D158092C7FC14FC38067FE090C9FCAAEB07F8EB -1FFE9038780F809038E007E03907C003F0496C7E130000066D7E81C8FC8181A21680A412 -1C127F5A7FA390C713005D12FC00605C12704A5A6C5C6C1303001E495A6C6C485A3907E0 -3F800001B5C7FC38007FFCEB1FE021397CB62A>I -I<12301238123E003FB612E0A316C05A168016000070C712060060140E5D5D00E0143048 -14705D5DC712014A5A4AC7FC1406140E5CA25C1478147014F05C1301A213035C1307A213 -0FA3131F5CA2133FA5137FA96DC8FC131E233A7BB72A>II<121C127FEAFF80A5EA7F00121CC7FCB2121C127FEAFF80A5EA7F00121C092479A317> -58 D64 D<1538A3157CA315FEA34A7EA34A6C7EA202077FEC063FA2020E7F -EC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A202C07F1501A2D901807F81 -A249C77F167FA20106810107B6FCA24981010CC7121FA2496E7EA3496E7EA3496E7EA213 -E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7DBB3E>II<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03FC000F0FD90FF0EB -039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F4848150FA248481507 -A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A3123F7F001F16031800 -6C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE05C6D6CEB03C0D903 -FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D7BBA3C>IIIIIII<013FB512E0A39039001FFC -00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B0070131F6C5C6C495A6C49C7 -FC380781FC3801FFF038007F80233B7DB82B>I -76 DIIIIIII<003FB812E0A3D9C003EB001F273E0001FE130348EE01F00078160000 -701770A300601730A400E01738481718A4C71600B3B0913807FF80011FB612E0A335397D -B83C>III<007FB590383FFFFCA3C6 -01F801071380D97FE0D903FCC7FC013FEC01F06D6C5C5F6D6C5C6D6C13034CC8FC6D6C13 -06160E6D6C5B6DEB8018163891387FC0306E6C5A16E06E6C5A91380FF18015FB6EB4C9FC -5D14036E7EA26E7F6F7EA24B7E15DF9138019FF09138038FF8150F91380607FC91380E03 -FE140C4A6C7EEC38000230804A6D7E14E04A6D7E49486D7E130391C76C7E01066E7E130E -010C6E7E011C1401013C8101FE822607FF80010713E0B500E0013FEBFF80A339397EB83E ->88 DI<003FB7FCA39039FC0001FE01 -C0130349495A003EC7FC003C4A5A5E0038141F00784A5A12704B5A5E006014FF4A90C7FC -A24A5A5DC712074A5AA24A5A5D143F4A5AA24A5A92C8FC5B495AA2495A5C130F4948EB01 -80A2495A5C137F495A16034890C7FC5B1203485AEE0700485A495C001F5D48485C5E4848 -495A49130FB8FCA329397BB833>I<007FB81280B912C0A26C17803204797041>95 -D97 DIIII<147E903803FF8090380FC1E0EB1F8790 -383F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387FFFF8 -A31C3B7FBA19>IIII< -EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A2123C12 -7E00FF13F01303A214E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>III<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F01E0 -7E903BF1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0FC0A2 -495CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00FF000 -FFEB3FFCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3486C -497EB500C1B51280A329257EA42E>II<3903F01FE000FFEB7FF89038 -F1E07E9039F3801F803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC150016 -FEA3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F0090 -38F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>II<3807E01F00 -FFEB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300 -A45BB3A2487EB512F0A31C257EA421>II<1318A51338A31378A313F8120112031207001FB5FCB6FC -A2D801F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347FB220 ->IIIIII<003FB512FCA2EB8003D83E0013F8003CEB07F00038EB0FE012300070EB -1FC0EC3F800060137F150014FE495AA2C6485A495AA2495A495A495AA290387F000613FE -A2485A485A0007140E5B4848130C4848131CA24848133C48C7127C48EB03FC90B5FCA21F -247EA325>I E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 0 162 a Fg(11)17 b(11)h(T)249 180 y(E)295 162 -y(X)h(L)398 145 y Ff(A)435 162 y Fg(T)481 180 y(E)527 -162 y(X)0 353 y Fe(Using)54 b(Libical)p 0 467 3900 24 -v 0 580 a Fg(Eric)28 b(Busb)r(o)r(om)f(\(eric@soft)n(w)n -(arestudio.org\))1921 b(Jan)n(uary)25 b(2000)0 1217 y -Fd(1)131 b(In)l(tro)t(duction)0 1456 y Fg(Libical)23 -b(is)f(an)h(Op)r(en)g(Source)f(implemen)n(tation)h(of)g(the)g -(iCalendar)f(proto)r(cols)f(and)i(proto)r(col)e(data)i(units.)35 -b(The)23 b(iCalendar)0 1570 y(sp)r(eci\034cation)k(describ)r(es)g(ho)n -(w)f(calendar)g(clien)n(ts)i(can)f(comm)n(unicate)f(with)i(calendar)e -(serv)n(ers)f(for)i(users)g(can)g(store)f(their)0 1683 -y(calendar)g(data)h(and)h(arrange)d(meetings)i(with)h(other)f(users.)0 -1840 y(Libical)g(implemen)n(ts)h(the)g(follo)n(wing)e(sp)r -(eci\034cations)h(and)h(proto)r(cols)0 1996 y(iCal)f(Core)g(2445)e -(iTIP)k(2446)c(iMIP)j(2447)e(iRIP)i(draft)g(CAP)g(draft)0 -2153 y(\(The)g(curren)n(t)f(v)n(ersion,)f(0.15,)g(do)r(es)h(not)h -(implemen)n(t)g(iRip)g(or)e(CAP)-7 b(.)29 b(\))0 2309 -y(This)j(do)r(cumen)n(tation)g(assumes)g(that)g(y)n(ou)g(are)f -(familiar)h(with)h(the)f(iCalendar)f(standards)g(RF)n(C2445)g(and)h(RF) -n(C2446.)0 2423 y(these)c(sp)r(eci\034cations)e(are)h(online)g(on)h -(the)g(CALSCH)g(w)n(ebpage)e(at:)p 0 2475 3900 4 v 0 -2617 a Fc(http://www.imc.o)o(rg)o(/ie)o(tf)o(-c)o(ale)o(nd)o(ar)o(/)p -0 2776 V 0 2996 a Fb(1.1)112 b(The)38 b(libical)c(pro)6 -b(ject)0 3207 y Fg(This)29 b(co)r(de)g(is)g(under)g(activ)n(e)f(dev)n -(elopmen)n(t.)40 b(If)30 b(y)n(ou)e(w)n(ould)h(lik)n(e)f(to)h(con)n -(tribute)g(to)g(the)g(pro)5 b(ject,)29 b(y)n(ou)f(can)h(con)n(tact)f -(me,)0 3320 y(Eric)g(Busb)r(o)r(om,)f(at)g(eric@soft)n(w)n -(arestudio.org.)33 b(The)27 b(pro)5 b(ject)27 b(has)g(a)g(w)n(ebpage)g -(at)332 3518 y(h)n(ttp://soft)n(w)n(arestudio.org/libical/index.h)n -(tml)0 3716 y(and)g(a)h(mailing)f(list)g(that)h(y)n(ou)f(can)g(join)h -(b)n(y)f(sending)g(the)h(follo)n(wing)f(mail:)p 0 3769 -V 0 3904 a Fc(To:)42 b(minimalist@softwa)o(re)o(st)o(udi)o(o.)o(or)o(g) -0 4017 y(Subject:)e(subscribe)g(libical)p 0 4176 V 0 -4396 a Fb(1.2)112 b(License)0 4607 y Fg(The)60 b(co)r(de)f(and)h -(data\034les)f(in)h(this)g(distribution)g(are)e(licensed)i(under)g(the) -g(Mozilla)f(Public)h(License.)133 b(See)0 4720 y(h)n -(ttp://www.mozilla.org/NPL/MPL-1.0.h)n(tml)37 b(for)j(a)h(cop)n(y)f(of) -g(the)i(license.)76 b(Alternately)-7 b(,)44 b(y)n(ou)c(ma)n(y)g(use)g -(libical)0 4834 y(under)32 b(the)g(terms)g(of)g(the)g(GNU)h(Library)d -(General)h(Public)i(License.)50 b(See)32 b(h)n(ttp://www.fsf.org/cop)n -(yleft/lesser.h)n(tml)0 4947 y(for)27 b(a)g(cop)n(y)g(of)g(the)h(LGPL.) -0 5104 y(This)j(dual)g(license)f(ensures)h(that)g(the)g(library)f(can)g -(b)r(e)i(incorp)r(orated)d(in)n(to)i(b)r(oth)g(proprietary)e(co)r(de)i -(and)f(GPL'd)i(pro-)0 5217 y(grams,)23 b(and)h(will)h(b)r(ene\034t)g -(from)f(impro)n(v)n(emen)n(ts)e(made)i(b)n(y)g(programmers)e(in)i(b)r -(oth)h(realms.)34 b(I)25 b(will)f(only)g(accept)g(c)n(hanges)0 -5331 y(in)n(to)j(m)n(y)h(v)n(ersion)e(of)h(the)h(library)e(if)i(they)g -(are)f(similarly)f(dual-licensed.)0 5615 y Fb(1.3)112 -b(Purp)s(ose)38 b(&)f(Goals)0 5844 y(1.4)112 b(Do)s(cumen)m(t)37 -b(v)m(ersion)0 6054 y Fg($Id:)g(UsingLibical.lyx,v)26 -b(1.4)h(2000/02/18)22 b(23:06:04)j(eric)i(Exp)h(eric)f($)0 -6386 y Fd(2)131 b(Building)46 b(the)e(Library)0 6624 -y Fg(Libical)37 b(uses)g(auto)r(conf)h(to)f(generate)f(mak)n(e\034les,) -k(although)c(it)i(uses)g(none)f(of)h(the)g(auto)r(conf)f(\035ags)f(to)i -(in\035uence)g(the)0 6738 y(compilation.)e(It)28 b(should)f(built)i -(with)f(no)f(adjustmen)n(ts)h(on)f(Lin)n(ux,)g(F)-7 b(reeBSD)28 -b(and)f(Solaris.)0 7069 y Fd(3)131 b(Structure)0 7308 -y Fg(The)28 b(iCal)f(calendar)f(mo)r(del)i(is)f(based)g(on)h(four)f(t)n -(yp)r(es)g(of)h(ob)5 b(jects:)36 b(comp)r(onen)n(ts,)27 -b(prop)r(erties,)g(v)-5 b(alues)27 b(and)g(parameters.)0 -7464 y(Prop)r(erties)32 b(are)f(the)i(fundamen)n(tal)f(unit)i(of)e -(information)g(in)g(iCal,)i(and)e(they)g(w)n(ork)f(a)h(bit)h(lik)n(e)f -(a)g(hash)g(en)n(try)-7 b(,)34 b(with)e(a)0 7578 y(constan)n(t)21 -b(k)n(ey)h(and)g(a)f(v)-5 b(ariable)21 b(v)-5 b(alue.)35 -b(Prop)r(erties)21 b(ma)n(y)h(also)f(ha)n(v)n(e)g(mo)r(di\034ers,)h -(called)g(parameters.)33 b(In)22 b(the)h(iCal)f(con)n(ten)n(t)0 -7691 y(line)p 0 7728 V 0 7863 a Fc(ORGANIZER;ROLE=C)o(HA)o(IR:)o(MA)o -(IL)o(TO:)o(mr)o(bi)o(g@h)o(os)o(t.)o(com)p eop -%%Page: 2 2 -2 1 bop 0 -167 3900 5 v 0 -200 a Fa(4.)73 b(Di\033erences)31 -b(F)-8 b(rom)31 b(RF)m(Cs)2732 b Fg(2)p 0 162 3900 4 -v 0 312 a(The)34 b(prop)r(ert)n(y)f(name)h(is)g("OR)n(GANIZER,")g(the)g -(v)-5 b(alue)34 b(of)h(the)f(prop)r(ert)n(y)f(is)h("mrbig@host.com")e -(and)i(the)g("R)n(OLE")0 425 y(parameter)26 b(sp)r(eci\034es)h(that)h -(Mr)g(Big)f(is)g(the)h(c)n(hair)e(of)i(the)g(meetings)f(asso)r(ciated)f -(with)i(this)g(prop)r(ert)n(y)-7 b(.)0 582 y(Comp)r(onen)n(ts)26 -b(are)f(groups)g(of)h(prop)r(erties)f(that)i(represen)n(t)e(the)i(core) -e(ob)5 b(jects)26 b(of)g(a)g(calendar)f(system,)h(suc)n(h)g(as)g(ev)n -(en)n(ts)f(or)0 695 y(timezones.)0 852 y(The)k(cen)n(tral)f(goal)g(of)h -(libical)g(is)g(to)g(parse)f(iTIP)i(data)e(in)n(to)h(an)g(in)n(ternal)f -(represen)n(tation)g(of)h(Comp)r(onen)n(ts,)g(Prop)r(erties,)0 -965 y(P)n(arameters)d(an)h(V)-7 b(alues,)27 b(and)h(to)f(allo)n(w)g -(the)h(user)f(to)g(manipulate)g(the)h(data)g(in)f(v)-5 -b(arious)27 b(w)n(a)n(ys)0 1257 y Fb(3.1)112 b(Comp)s(onen)m(ts)0 -1486 y(3.2)g(Prop)s(erties)0 1715 y(3.3)g(V)-9 b(alues)0 -1944 y(3.4)112 b(P)m(arameters)0 2173 y(3.5)g(En)m(umerations)0 -2402 y(3.6)g(T)m(yp)s(es)0 2631 y(3.7)g(The)38 b(P)m(arser)0 -2860 y(3.8)112 b(Restrictions)0 3089 y(3.9)g(Memory)37 -b(Managemen)m(t)0 3356 y Fd(4)131 b(Di\033erences)44 -b(F)-11 b(rom)43 b(RF)l(Cs)0 3594 y Fg(Libical)c(has)f(b)r(een)h -(designed)g(to)f(follo)n(w)h(the)g(standards)e(as)i(closely)f(as)g(p)r -(ossible,)j(so)e(that)g(the)g(k)n(ey)f(ob)5 b(jects)39 -b(in)g(the)0 3708 y(standards)30 b(are)g(also)g(k)n(eey)g(ob)5 -b(jects)31 b(in)h(the)f(library)-7 b(.)47 b(Ho)n(w)n(ev)n(er,)30 -b(there)h(are)f(a)h(few)g(areas)e(where)i(the)h(sp)r(eci\034cations)e -(are)0 3821 y(\(arguably\))g(irregular,)h(and)g(follo)n(wing)g(them)h -(exactly)f(w)n(ould)g(result)h(in)g(an)f(unfriendly)h(in)n(terface.)49 -b(These)31 b(deviations)0 3935 y(mak)n(e)c(libical)g(easier)f(to)i(use) -f(b)n(y)h(main)n(taining)e(a)h(self-similar)g(in)n(terface.)0 -4227 y Fb(4.1)112 b(Pseudo)38 b(Comp)s(onen)m(ts)0 4437 -y Fg(Libical)g(de\034nes)g(comp)r(onen)n(ts)g(for)g(groups)f(of)i(prop) -r(erties)e(that)i(lo)r(ok)e(and)i(act)f(lik)n(e)g(comp)r(onen)n(ts,)i -(but)f(are)f(not)g(de-)0 4550 y(\034ned)c(as)f(comp)r(onen)n(ts)g(in)h -(the)g(sp)r(eci\034cation.)54 b(XD)n(A)-7 b(YLIGHT)35 -b(and)e(XST)-7 b(AND)n(ARD)36 b(are)c(notable)h(examples.)54 -b(These)0 4664 y(pseudo)23 b(comp)r(onen)n(ts)g(group)g(prop)r(erties)g -(within)h(the)g(VTIMEZONE)h(comp)r(onen)n(ts.)35 b(XD)n(A)-7 -b(YLIGHT)25 b(starts)d(with)j("BE-)0 4777 y(GIN:D)n(A)-7 -b(YLIGHT")35 b(and)f(ends)g(with)g("END:D)n(A)-7 b(YLIGHT,)36 -b(just)e(lik)n(e)g(other)f(comp)r(onen)n(ts,)i(but)g(is)f(not)g -(de\034ned)g(as)f(a)0 4891 y(comp)r(onen)n(t)27 b(in)h(RF)n(C2445.)35 -b(\()28 b(See)f(RF)n(C2445,)f(page)h(61)f(\))i(In)g(Libical,)f(it)h(is) -g(a)f(comp)r(onen)n(t.)0 5047 y(There)35 b(are)g(also)g(pseudo)h(comp)r -(onen)n(ts)f(that)i(are)e(conceptually)g(deriv)n(ed)g(classess)f(of)i -(V)-9 b(ALARM.)37 b(RF)n(C2446)d(de\034nes)0 5161 y(what)d(prop)r -(erties)f(ma)n(y)g(b)r(e)h(included)g(in)g(eac)n(h)f(comp)r(onen)n(t,)i -(and)e(for)h(V)-9 b(ALARM,)31 b(the)g(set)g(of)g(prop)r(erties)f(it)h -(ma)n(y)f(ha)n(v)n(e)0 5275 y(dep)r(ends)e(on)f(the)h(v)-5 -b(alue)28 b(of)f(the)h(A)n(CTION)f(prop)r(ert)n(y)-7 -b(.)0 5431 y(F)g(or)19 b(instance,)j(if)e(a)g(V)-9 b(ALARM)20 -b(comp)r(onen)n(t)g(has)f(an)h(A)n(CTION)g(prop)r(ert)n(y)e(with)j(the) -f(v)-5 b(alue)20 b(of)g("A)n(UDIO,")f(the)h(comp)r(onen)n(t)0 -5545 y(m)n(ust)h(also)g(ha)n(v)n(e)f(an)h("A)-7 b(TT)g(A)n(CH")21 -b(prop)r(ert)n(y)-7 b(.)34 b(Ho)n(w)n(ev)n(er,)20 b(if)i(the)g(A)n -(CTION)f(v)-5 b(alue)21 b(is)g("DISPLA)-7 b(Y,")22 b(the)g(comp)r(onen) -n(t)f(m)n(ust)0 5658 y(ha)n(v)n(e)26 b(a)i(DESCRIPTION)g(prop)r(ert)n -(y)-7 b(.)p eop -%%Page: 3 3 -3 2 bop 0 -167 3900 5 v 0 -200 a Fa(5.)73 b(Implemen)m(tation)29 -b(Limitations)2539 b Fg(3)0 162 y(T)-7 b(o)28 b(handle)g(these)g(v)-5 -b(arious,)27 b(complex)h(restrictions,)f(libical)h(has)g(pseudo)g(comp) -r(onen)n(ts)f(for)h(eac)n(h)f(t)n(yp)r(e)i(of)f(alarm:)37 -b(XA)n(U-)0 275 y(DIO)n(ALARM,)28 b(XDISPLA)-7 b(Y)g(ALARM,)30 -b(XEMAILALARM)f(and)f(XPR)n(OCEDUREALARM.)0 567 y Fb(4.2)112 -b(Com)m(bined)37 b(V)-9 b(alues)0 777 y Fg(Man)n(y)34 -b(v)-5 b(alues)34 b(can)g(tak)n(e)g(more)g(than)g(one)h(t)n(yp)r(e.)58 -b(TRIGGER,)35 b(for)f(instance,)i(can)e(ha)n(v)n(e)g(a)g(v)-5 -b(alue)34 b(t)n(yp)r(e)h(of)g(with)g(DU-)0 890 y(RA)-7 -b(TION)32 b(or)f(of)h(D)n(A)-7 b(TE-TIME.)33 b(These)f(m)n(ultiple)g(t) -n(yp)r(es)g(mak)n(e)f(it)i(di\036cult)g(to)e(create)g(routines)h(to)f -(return)h(the)g(v)-5 b(alue)0 1004 y(asso)r(ciated)26 -b(with)i(a)f(prop)r(ert)n(y)-7 b(.)0 1161 y(It)30 b(is)g(natural)g(to)f -(ha)n(v)n(e)g(in)n(terfaces)g(that)i(w)n(ould)e(return)h(the)g(v)-5 -b(alue)30 b(of)g(a)g(prop)r(ert)n(y)-7 b(,)29 b(but)i(it)f(is)g(cum)n -(b)r(ersone)f(for)h(a)g(single)0 1274 y(routine)i(to)g(return)g(m)n -(ultiple)h(t)n(yp)r(es.)51 b(So,)33 b(in)g(libical,)g(prop)r(erties)e -(that)i(can)f(ha)n(v)n(e)f(m)n(ultiple)i(t)n(yp)r(es)f(are)f(giv)n(en)h -(a)g(single)0 1388 y(t)n(yp)r(e)26 b(that)g(is)g(the)g(union)g(of)g -(their)g(RF)n(C2445)e(t)n(yp)r(es.)36 b(F)-7 b(or)26 -b(instance,)g(in)g(libical,)g(the)g(v)-5 b(alue)26 b(of)g(the)g -(TRIGGER)h(prop)r(ert)n(y)0 1501 y(resolv)n(es)e(to)j(struct)f -(icaltriggert)n(yp)r(e.)35 b(This)28 b(t)n(yp)r(e)f(is)h(a)f(union)h -(of)f(a)g(DURA)-7 b(TION)29 b(and)e(a)g(D)n(A)-7 b(TE-TIME.)0 -1793 y Fb(4.3)112 b(Multi-V)-9 b(alued)36 b(Prop)s(erties)0 -2003 y Fg(Some)31 b(prop)r(erties,)h(suc)n(h)f(as)g(CA)-7 -b(TEGORIES)33 b(ha)n(v)n(e)d(only)h(one)g(v)-5 b(alue)32 -b(t)n(yp)r(e,)h(but)f(eac)n(h)e(CA)-7 b(TEGORIES)33 b(prop)r(ert)n(y)d -(can)0 2116 y(ha)n(v)n(e)24 b(m)n(ultiple)h(v)-5 b(alue)25 -b(instances.)35 b(This)25 b(also)f(results)g(in)h(a)g(cum)n(b)r(ersome) -f(in)n(terface)g(\025)g(CA)-7 b(TEGORIES)26 b(accessors)d(w)n(ould)0 -2230 y(ha)n(v)n(e)k(to)i(return)f(a)g(list)g(while)h(all)f(other)g -(accessors)e(returned)i(a)g(single)g(v)-5 b(alue.)39 -b(In)29 b(libical,)g(all)f(prop)r(erties)f(ha)n(v)n(e)h(a)g(single)0 -2344 y(v)-5 b(alue,)35 b(and)e(m)n(ulti-v)-5 b(alued)33 -b(prop)r(erties)f(are)h(brok)n(en)f(do)n(wn)g(in)n(to)h(m)n(ultiple)h -(single)f(v)-5 b(alued)33 b(prop)r(erties)g(during)f(parsing.)0 -2457 y(That)c(is,)f(an)g(input)i(line)e(lik)n(e,)p 0 -2526 3900 4 v 0 2703 a Fc(CATEGORIES:)39 b(work,)i(home)p -0 2903 V 0 3053 a Fg(b)r(ecomes)27 b(in)h(libical's)f(in)n(ternal)g -(represen)n(tation)p 0 3122 V 0 3299 a Fc(CATEGORIES:)39 -b(work)0 3412 y(CATEGORIES:)g(home)p 0 3612 V 0 3767 -a Fg(Oddly)-7 b(,)34 b(RF)n(C2445)d(allo)n(ws)g(some)h(m)n(ulti-v)-5 -b(alued)33 b(prop)r(erties)f(\()h(lik)n(e)g(FREEBUSY)h(\))f(to)g(exist) -g(as)f(b)r(oth)h(a)f(m)n(ulti-v)-5 b(alues)0 3881 y(prop)r(ert)n(y)24 -b(and)h(as)f(m)n(ultiple)h(single)g(v)-5 b(alue)24 b(prop)r(erties,)h -(while)g(others)f(\()i(lik)n(e)e(CA)-7 b(TEGORIES)26 -b(\))f(can)g(only)g(exist)f(as)h(single)0 3994 y(m)n(ulti-v)-5 -b(alued)32 b(prop)r(erties.)48 b(This)31 b(mak)n(es)g(the)h(in)n -(ternal)f(represen)n(tation)e(for)i(CA)-7 b(TEGORIES)33 -b(illegal.)48 b(Ho)n(w)n(ev)n(er)30 b(when)0 4108 y(y)n(ou)d(con)n(v)n -(ert)f(a)h(comp)r(onen)n(t)g(to)h(a)f(string,)g(the)h(library)e(will)i -(collect)f(all)g(of)h(the)g(CA)-7 b(TEGORIES)28 b(prop)r(erties)f(in)n -(to)g(one.)0 4446 y Fd(5)131 b(Implemen)l(tation)44 b(Limitations)0 -4742 y(6)131 b(Using)44 b(libical)0 4999 y Fb(6.1)112 -b(Creating)37 b(Comp)s(onen)m(ts)0 5209 y Fg(There)e(are)g(three)h(w)n -(a)n(ys)e(to)i(create)e(comp)r(onen)n(ts)i(in)g(Libical:)53 -b(creating)34 b(individual)i(ob)5 b(jects)35 b(and)h(assem)n(bling)e -(them,)0 5323 y(building)28 b(en)n(tire)f(ob)5 b(jects)27 -b(in)h(massiv)n(e)e(v)-5 b(aargs)26 b(calls,)h(and)g(parsing)f(a)h -(text)h(\034le)g(con)n(taining)e(iCalendar)h(data.)p -eop -%%Page: 4 4 -4 3 bop 0 -167 3900 5 v 0 -200 a Fa(6.)73 b(Using)32 -b(libical)3190 b Fg(4)0 162 y Fa(6.1.1)94 b(Constructor)32 -b(In)m(terfaces)0 372 y Fg(Using)d(constructor)f(in)n(terfaces,)h(y)n -(ou)f(create)h(eac)n(h)f(of)i(the)f(ob)5 b(jects)29 b(sep)r(erately)g -(and)g(them)h(assem)n(ble)e(them)i(in)g(to)f(com-)0 485 -y(p)r(onen)n(ts:)p 0 555 3900 4 v 0 738 a Fc(event)41 -b(=)j(icalcomponent_n)o(ew)o(\(IC)o(AL)o(_V)o(EVE)o(NT)o(_C)o(OMP)o(ON) -o(EN)o(T\);)0 852 y(icalcomponent_ad)o(d_)o(pro)o(pe)o(rt)o(y\(e)o(ve)o -(nt)o(,)38 b(icalproperty_ne)o(w_)o(dts)o(ta)o(mp)o(\(at)o(im)o(e\))f -(\);)0 965 y(icalcomponent_ad)o(d_)o(pro)o(pe)o(rt)o(y\(e)o(ve)o(nt)o -(,ic)o(al)o(pr)o(ope)o(rt)o(y_)o(new)o(_u)o(id\()o(st)o(rd)o(up\()o("g) -o(ui)o(d-1)o(.h)o(os)o(t1.)o(co)o(m")o(\)\))g(\);)0 1079 -y(property=icalpro)o(pe)o(rty)o(_n)o(ew)o(_or)o(ga)o(ni)o(zer)o(\(s)o -(tr)o(dup)o(\(")o(mr)o(big)o(@h)o(ost)o(.c)o(om)o("\)\))o(;)0 -1192 y(icalproperty_add)o(_p)o(ara)o(me)o(te)o(r\(p)o(ro)o(pe)o(rty)o -(,i)o(ca)o(lpa)o(ra)o(me)o(ter)o(_n)o(ew_)o(ro)o(le)o(\(IC)o(AL)o(_R)o -(OLE)o(_C)o(HA)o(IR\))g(\);)0 1306 y(icalcomponent_ad)o(d_)o(pro)o(pe)o -(rt)o(y\(e)o(ve)o(nt)o(,pr)o(op)o(er)o(ty\))o(;)p 0 1506 -V 0 1722 a Fa(6.1.2)94 b(v)-5 b(aargs)32 b(Constructors)0 -1932 y(6.1.3)94 b(P)m(arsing)32 b(T)-8 b(ext)32 b(Files)0 -2161 y Fb(6.2)112 b(A)m(ccessing)37 b(Comp)s(onen)m(ts)0 -2371 y Fa(6.2.1)94 b(Finding)30 b(Comp)s(onen)m(ts)0 -2582 y(6.2.2)94 b(Remo)m(ving)29 b(Comp)s(onen)m(ts)0 -2792 y Fg(Remo)n(ving)23 b(an)h(elemen)n(t)h(from)f(a)g(list)g(while)h -(iterating)e(through)h(the)h(list)f(can)g(cause)g(problems,)g(since)g -(y)n(ou)g(will)g(probably)0 2905 y(b)r(e)e(remo)n(ving)e(the)i(elemen)n -(t)g(that)g(the)g(in)n(ternal)f(iterator)f(p)r(oin)n(ts)i(to.)34 -b(This)22 b(will)g(result)f(in)h(the)g(iteration)f(lo)r(op)h -(terminating)0 3019 y(immediately)29 b(after)f(remo)n(ving)g(the)h -(elemen)n(t.)41 b(T)-7 b(o)28 b(a)n(v)n(oid)g(the)h(problem,)f(y)n(ou)h -(will)g(need)g(to)f(step)h(the)h(iterator)d(ahead)h(of)0 -3132 y(the)g(elemen)n(t)g(y)n(ou)e(are)h(going)f(to)i(remo)n(v)n(e,)e -(lik)n(e)h(this:)p 0 3202 V 0 3385 a Fc(for\(c)41 b(=)j -(icalcomponent_g)o(et)o(_fi)o(rs)o(t_)o(com)o(po)o(ne)o(nt\()o(pa)o(re) -o(nt_)o(co)o(mp,)o(IC)o(AL)o(_AN)o(Y_)o(CO)o(MPO)o(NE)o(NT)o(\);)305 -3499 y(c)f(!=)g(0;)305 3612 y(c)g(=)g(next)0 3726 y({)174 -3839 y(next)f(=)h(icalcomponent_get)o(_n)o(ex)o(t_c)o(om)o(po)o(nen)o -(t\()o(pa)o(ren)o(t_)o(com)o(p,)o(IC)o(AL_)o(AN)o(Y_)o(COM)o(PO)o(NE)o -(NT\))o(;)174 3953 y(icalcomponent_rem)o(ov)o(e_)o(com)o(po)o(ne)o -(nt\()o(pa)o(re)o(nt_)o(co)o(mp)o(,c\))o(;)0 4067 y(})p -0 4267 V eop -%%Page: 5 5 -5 4 bop 0 -167 3900 5 v 0 -200 a Fa(6.)73 b(Using)32 -b(libical)3190 b Fg(5)0 162 y Fa(6.2.3)94 b(Finding)30 -b(Prop)s(erties)0 372 y(6.2.4)94 b(Remo)m(ving)29 b(Prop)s(erties)0 -582 y(6.2.5)94 b(Getting)31 b(V)-8 b(alues)0 792 y(6.2.6)94 -b(Setting)31 b(V)-8 b(alues)0 1002 y(6.2.7)94 b(Getting)31 -b(P)m(arameters)0 1212 y(6.2.8)94 b(Setting)31 b(P)m(arameters)0 -1422 y(6.2.9)94 b(Remo)m(ving)29 b(P)m(arameters)0 1632 -y(6.2.10)93 b(Chec)m(king)32 b(Comp)s(onen)m(t)e(V)-8 -b(alidit)m(y)0 1861 y Fb(6.3)112 b(Storing)37 b(Ob)6 -b(jects)0 2071 y Fg(The)27 b(libical)g(distribution)h(inclues)f(a)g -(sep)r(erate)f(library)-7 b(,)26 b(libicalss,)h(that)g(allo)n(ws)f(y)n -(ou)g(to)i(store)e(iCal)h(comp)r(onen)n(t)g(data)f(to)0 -2185 y(disk)h(in)h(a)f(v)-5 b(ariet)n(y)27 b(of)h(w)n(a)n(ys.)35 -b(This)27 b(library)g(is)g(do)r(cumen)n(ted)h(sep)r(erately)-7 -b(.)0 2476 y Fb(6.4)112 b(Memory)37 b(Managemen)m(t)0 -2686 y Fg(Libical)25 b(relies)f(hea)n(vily)g(on)h(dynamic)g(allo)r -(cation)f(for)h(b)r(oth)h(the)f(core)f(ob)5 b(jects)25 -b(and)g(for)f(the)i(strings)e(used)h(to)g(hold)g(v)-5 -b(alues.)0 2800 y(Some)34 b(of)f(this)h(memory)f(the)h(library)f -(caller)g(o)n(wns)g(and)g(m)n(ust)h(free,)h(and)f(some)f(of)h(the)g -(memory)f(is)h(managed)e(b)n(y)i(the)0 2914 y(library)-7 -b(.)36 b(Here)27 b(is)g(a)g(summary)g(of)h(the)g(memory)e(rules.)0 -3153 y Fa(1\))208 3300 y Fg(If)k(the)g(function)g(name)g(has)f -Fc(")p Fg(new)p Fc(")g Fg(in)h(it,)h(the)f(caller)f(gets)g(con)n(trol)g -(of)h(the)g(memory)-7 b(.)42 b(\()31 b(suc)n(h)e(as)g(icalcomp)r(onen-) -208 3413 y(t_new\(\),)f(or)e(icalprop)r(ert)n(y_new_clone\(\))f(\))0 -3593 y Fa(2\))208 3740 y Fg(If)j(y)n(ou)g(got)g(the)h(memory)f(from)g -(a)g(routine)g(with)h(new)f(in)h(it,)g(y)n(ou)f(m)n(ust)h(call)f(the)h -(corresp)r(onding)d(*_free)i(routine)208 3854 y(to)f(free)g(the)h -(memory)-7 b(.)36 b(\()28 b(Use)g(icalcomp)r(onen)n(t_free\(\))e(to)i -(free)f(ob)5 b(jects)27 b(created)g(with)h(icalcomp)r(onen)n -(t_new\(\)\))0 4034 y Fa(3\))208 4181 y Fg(If)h(the)g(function)g(name)f -(has)g Fc(")p Fg(add)p Fc(")g Fg(in)h(it,)g(the)g(caller)e(is)i -(transfering)e(con)n(trol)g(of)i(the)g(memory)f(to)g(the)h(routine.)40 -b(\()208 4294 y(icalprop)r(ert)n(y_add_parameter\(\))23 -b(\))0 4474 y Fa(4\))208 4621 y Fg(If)29 b(the)h(function)g(name)f(has) -g Fc(")p Fg(remo)n(v)n(e)p Fc(")e Fg(in)j(it,)g(the)g(caller)f(passes)f -(in)i(a)f(p)r(oin)n(ter)g(to)g(an)g(ob)5 b(ject)29 b(and)h(after)f(the) -g(call)208 4735 y(returns,)j(the)h(caller)e(o)n(wns)g(the)h(ob)5 -b(ject.)50 b(So,)33 b(b)r(efore)f(y)n(ou)f(call)h(icalcomp)r(onen)n -(t_remo)n(v)n(e_prop)r(ert)n(y\(comp,fo)r(o\),)208 4848 -y(y)n(ou)26 b(do)i(not)f(o)n(wn)g Fc(")p Fg(fo)r(o)p -Fc(")g Fg(and)g(after)g(the)h(call)f(returns,)g(y)n(ou)g(do.)0 -5028 y Fa(5\))208 5175 y Fg(If)d(the)g(routine)f(returns)g(a)g(string,) -h(libical)g(o)n(wns)f(the)h(memory)f(and)g(will)h(put)g(it)h(on)e(a)g -(ring)g(bu\033er)h(to)g(reclaim)f(later.)208 5288 y(Y)-7 -b(ou'd)27 b(b)r(etter)h(strdup\(\))g(it)g(if)g(y)n(ou)f(w)n(an)n(t)g -(to)h(k)n(eep)f(it,)h(and)f(y)n(ou)g(don't)h(ha)n(v)n(e)e(to)h(delete)h -(it.)0 5580 y Fb(6.5)112 b(Error)36 b(Handling)0 5790 -y Fg(icalerror_errno.)c(Return)c(v)-5 b(alues.)37 b(#de\034nes.)g -(icalerror_stop_here)p eop -%%Page: 6 6 -6 5 bop 0 -167 3900 5 v 0 -200 a Fa(7.)73 b(Useful)32 -b(Recipies)3067 b Fg(6)0 162 y Fa(6.5.1)94 b(Return)31 -b(v)-5 b(alues)0 372 y(6.5.2)94 b(icalerrno)0 582 y(6.5.3)g(Comp)s -(onen)m(t)29 b(errors)0 811 y Fb(6.6)112 b(Naming)36 -b(Standard)0 1021 y Fg(Structures)26 b(that)i(y)n(ou)e(access)f(with)j -(the)f("struct")f(k)n(eyw)n(ord,)f(suc)n(h)h(as)h("struct)f(icaltimet)n -(yp)r(e")g(are)g(things)h(that)g(y)n(ou)f(are)0 1134 -y(allo)n(w)n(ed)g(to)i(see)f(inside)g(and)h(p)r(ok)n(e)f(at.)0 -1291 y(Structures)33 b(that)h(y)n(ou)e(access)g(though)i(a)f(t)n(yp)r -(edef,)i(suc)n(h)e(as)g("icalcomp)r(onen)n(t")e(are)i(things)g(where)g -(all)g(of)h(the)f(data)g(is)0 1405 y(hidden.)0 1561 y(Comp)r(onen)n(t) -28 b(names)g(that)h(start)f(with)h("V")f(are)f(part)h(of)h(RF)n(C)f -(2445)f(or)g(another)h(iCal)g(standard.)38 b(Comp)r(onen)n(t)29 -b(names)0 1675 y(that)h(start)f(with)i("X")e(are)g(also)g(part)g(of)h -(the)g(sp)r(ec,)g(but)h(they)f(are)f(not)h(actually)f(comp)r(onen)n(ts) -g(in)h(the)g(sp)r(ec.)44 b(Ho)n(w)n(ev)n(er,)0 1788 y(they)34 -b(lo)r(ok)f(and)g(act)h(lik)n(e)f(comp)r(onen)n(ts,)h(so)f(they)h(are)f -(comp)r(onen)n(ts)g(in)h(libical.)55 b(Names)33 b(that)h(start)f(with)h -("XLIC")f(or)0 1902 y("X-LIC")26 b(are)h(not)h(part)f(of)g(an)n(y)g -(iCal)g(sp)r(ec.)37 b(They)27 b(are)g(used)h(in)n(ternally)e(b)n(y)i -(libical.)0 2058 y(En)n(ums)d(that)f(iden)n(tify)h(a)f(comp)r(onen)n -(t,)h(prop)r(ert)n(y)-7 b(,)24 b(v)-5 b(alue)24 b(or)g(parameter)e(end) -j(with)g("_COMPONENT,")e("_PR)n(OPER-)0 2172 y(TY,")k("_V)-9 -b(ALUE,")28 b(or)e("_P)-7 b(AAMETER"s)0 2328 y(En)n(ums)31 -b(that)f(iden)n(tify)h(a)f(parameter)f(v)-5 b(alue)30 -b(ha)n(v)n(e)f(the)i(name)f(of)h(the)f(parameter)f(as)h(the)h(second)e -(w)n(ord.)45 b(F)-7 b(or)29 b(instance:)0 2442 y(ICAL_R)n(OLE_REQP)-7 -b(AR)g(TICIP)g(ANT)29 b(or)d(ICAL_P)-7 b(AR)g(TST)g(A)g(T_A)n(CCEPTED.) -0 2598 y(The)28 b(en)n(ums)f(for)g(the)h(parts)f(of)g(a)g(recurarance)e -(rule)j(and)f(request)g(statuses)g(are)f(irregular.)0 -2937 y Fd(7)131 b(Useful)44 b(Recipies)0 3175 y Fg(Iteration)0 -3332 y(Cop)n(ying)26 b(comp)r(onen)n(ts.)37 b(Remem)n(b)r(er)27 -b(that)h(y)n(ou)f(m)n(ust)g(clone)g(or)g(remo)n(v)n(e)f(an)h(ob)5 -b(ject)28 b(b)r(efore)f(putting)h(in)g(on)f(anothr)g(list.)0 -3488 y(Finding)h(compliance)f(errors)0 3827 y Fd(8)131 -b(P)l(erformance)0 4065 y Fg(Chec)n(king)27 b(restrictions)f(is)h -(computationally)g(exp)r(ensiv)n(e)0 4404 y Fd(9)131 -b(Hac)l(ks)45 b(and)e(Bugs)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/libical/doc/UsingLibical.sgml b/libical/doc/UsingLibical.sgml deleted file mode 100644 index d967bd860c..0000000000 --- a/libical/doc/UsingLibical.sgml +++ /dev/null @@ -1,318 +0,0 @@ - - - -
- -Using Libical - - -Eric Busboom (eric@softwarestudio.org) - - -January 2000 - - -Introduction -

-Libical is an Open Source implementation of the iCalendar protocols and - protocol data units. The iCalendar specification describes how calendar clients - can communicate with calendar servers for users can store their calendar data - and arrange meetings with other users. -

-

-Libical implements the following specifications and protocols -

-

-iCal Core -2445 -iTIP -2446 -iMIP -2447 -iRIP -draft -CAP -draft -

-

-(The current version, 0.14, does not implement iRip or CAP. ) -

-

-This code is under active development. If you would like to contribute - to the project, you can contact me, Eric Busboom, at eric@softwarestudio.org. - The project has a webpage at -

-

- -http://softwarestudio.org/libical/index.html - -

-and a mailing list that you can join by sending the following mail: -

-

- ------------- -To: minimalist@softwarestudio.org -Subject: subscribe libical ------------- - -

-$Id: UsingLibical.lyx,v 1.3 2000/01/06 06:20:06 eric Exp eric $ -

- -License -

-The code and datafiles in this distribution are licensed under the Mozilla - Public License. See http://www.mozilla.org/NPL/MPL-1.0.html for a copy of the - license. Alternately, you may use libical under the terms of the GNU Library - General Public License. See http://www.fsf.org/copyleft/lesser.html for a copy - of the LGPL. -

-

-This dual license ensures that the library can be incorporated into both - proprietary code and GPL'd programs, and will benefit from improvements made - by programmers in both realms. I will only accept changes into my version of - the library if they are similarly dual-licensed. -

- -Purpose & Goals - -Building the Library - -Structure -

-The iCal calendar model is based on four types of objects: components, - properties, values and parameters. -

-

-Components are the fundamental grouping of calendar information -

-

-Properties are the fundamental unit of information. Each property is composed - of a type, a value and collection of parameters. -

- -Components -

-Components are named clusters of properties -

- -Properties - -Values - -Parameters - -Storage - -Cluster - -Store - -Calendar - -Other bits -

-Restrictions -

-

-Types -

- -Differences From RFCs -

-Although libical has been design to follow the standards as closely as - possible, there are a few areas where the specifications are irregular, and - following them exactly would result in an unfriendly interface. -

- -Pseudo Components -

-Libical defines pseudo components for groups of properties that look and - act like components, but are not defined as components in the specification. - XDAYLIGHT and XSTANDARD are notable examples. These pseudo components group - properties within the VTIMEZONE components. XDAYLIGHT starts with "BEGIN:DAYLIGHT" - and ends with "END:DAYLIGHT, just like other components, but is not defined - as a component in RFC2445. ( See RFC2445, page 61 ) In Libical, it is a component. - -

-

-There are also pseudo componentsthat are conceptually derived classess - of VALARM. RFC2446 defines what properties may be included in each component, - and for VALARM, the set of properties it may have depends on the value of the - ACTION property. -

-

-For instance, if a VALARM component has an ACTION property with the value - of "AUDIO," the component must also have an "ATTACH" property. However, if the - ACTION value is "DISPLAY," the component must have a DESCRIPTION property. -

-

-To handle these various, complex restrictions, libical has pseudo components - for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and XPROCEDUREALARM. - -

- -Combined Values -

-Many values can take more than one type. TRIGGER, for instance, can have - a value type of with DURATION or of DATE-TIME. It is natural to have interfaces - that would return the value of a property, but it is cumbersone for a single - routine to return multiple types. So, in libical, properties that can have - multiple types are given a single type that is the union of their RFC2445 types. - In libical, the value of the TRIGGER property resolves to -

-

-struct icaltriggertype -

-

-This type is a union of a DURATION and a DATE-TIME. -

- -Multi-Valued Properties -

-Some properties, such as CATEGORIES, have a single value type, but may - have multiple values in a single instance. This also results in a cumbersome - interface -- CATEGORIES accessors would have to return a list which all other - accessors returned a single value. In libical, all properties have a single - value, and multi-valued properties are broken down into multiple single valued - properties during parsing. The is, -

-

- -CATEGORIES: work, home - -

-becomes in libical's internal representation -

-

- -CATEGORIES: work -CATEGORIES: home - -

-Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY ) to - exist as both a multi-values property and as multiple single value properties, - while others ( like CATEGORIES ) can only exist as single multi-valued properties. - This makes the internal representation for CATEGORIES illegal. However when - you convert a component to a string, the library will collect all of the CATEGORIES - properties into one. -

- -Implementation Limitations - -Using libical - -Creating Components - -Constructor interfaces - -vaargs Constructors - -Parsing Text Files - -Accessing Components - -Finding Components - -Removing Components -

-Removing an element from a list while iterating through the list can cause - problems, since you will probably be removing the element that the internal - iterator points to. This will result in the iteration loop terminating immediately - after removing the element. To avoid the problem, you will need to step the - iterator ahead of the element you are going to remove, like this: -

-

- -for(c = icalcomponent_get_first_component(s); - c != 0; - c = next) -{ - next = icalcomponent_get_next_component(s); - icalcomponent_remove_component(s,c); -} - -

-Finding Properties - -Removing Properties - -Getting Values - -Setting Values - -Getting Parameters - -Setting Parameters - -Removing Parameters - -Storing Objects -

-When you store a component to the database with icalstore_add_component, - you give the library takes the memory, so the caller does not own the component - anymore. If you want to keep ownership, use clone to make a copy. ( See "Memory - Management" and "Naming Starndard for more about routines with "add" in the name. - ) -

- -Memory Management -

-Here are the memory rules for the C library: -

-

- - -1)If the function name has "new" in it, the caller gets - control of the memory. ( such as icalcomponent_new(), or icalproperty_new_clone() - ) - -2)If you got the memory from a routine with new in it, you must - call the corresponding *_free routine to free the memory. ( Use icalcomponent_free() - to free objects created with icalcomponent_new()) - -3)If the function name has "add" in it, the caller is - transfering control of the memory to the routine. ( icalproperty_add_parameter() - ) - -4)If the function name has "remove" in it, the caller - passes in a pointer to an object and after the call returns, the caller owns - the object. So, before you call icalcomponent_remove_property(comp,foo), you - do not own "foo" and after the call returns, you do. - -5)If the routine returns a string, libical owns the memory and will - put it on a ring buffer to reclaim later. You'd better strdup it if you want - to keep it, and you don't have to delete it. - -

-Error Handling - -Return values - -icalerrno - -Component errors - -Naming Standard -

-Structures that you access with the "struct" keyword, such as "struct icaltimetype" - are things that you are allowed to see inside and poke at. -

-

-Structures that you access though a typedef, such as "icalcomponent" are - things where all of the data is hidden. -

-

-Component names that start with "V" are part of RFC 2445 or another iCal - standard. Component names that start with "X" are also part of the spec, but - they are not actually components in the spec. However, they look and act like - components, so they are components in libical. Names that start with "XLIC" or - "X-LIC" are not part of any iCal spec. They are used internally by libical. -

- -Hacks and Bugs - - -
diff --git a/libical/doc/UsingLibical.txt b/libical/doc/UsingLibical.txt deleted file mode 100644 index f80ea31121..0000000000 --- a/libical/doc/UsingLibical.txt +++ /dev/null @@ -1,302 +0,0 @@ - - -Using Libical - -Eric Busboom (eric@softwarestudio.org) - -January 2000 - -1 Introduction - -Libical is an Open Source implementation of the iCalendar protocols -and protocol data units. The iCalendar specification describes how -calendar clients can communicate with calendar servers for users can -store their calendar data and arrange meetings with other users. - -Libical implements the following specifications and protocols - -+----------+-------+ -|iCal Core | 2445 | -+----------+-------+ -+----------+-------+ -| iTIP | 2446 | -+----------+-------+ -+----------+-------+ -| iMIP | 2447 | -+----------+-------+ -+----------+-------+ -| iRIP | draft | -+----------+-------+ -+----------+-------+ -| CAP | draft | -+----------+-------+ - - -(The current version, 0.14, does not implement iRip or CAP. ) - -This documentation assumes that you are familiar with the iCalendar -standards RFC2445 and RFC2446. - -1.1 The libical project - -This code is under active development. If you would like to contribute -to the project, you can contact me, Eric Busboom, at eric@softwarestudio.org. -The project has a webpage at - -http://softwarestudio.org/libical/index.html - -and a mailing list that you can join by sending the following mail: - ------------- - -To: minimalist@softwarestudio.org - -Subject: subscribe libical - ------------- - -1.2 License - -The code and datafiles in this distribution are licensed under the -Mozilla Public License. See http://www.mozilla.org/NPL/MPL-1.0.html -for a copy of the license. Alternately, you may use libical under -the terms of the GNU Library General Public License. See http://www.fsf.org/copyleft/lesser.html -for a copy of the LGPL. - -This dual license ensures that the library can be incorporated into -both proprietary code and GPL'd programs, and will benefit from improvements -made by programmers in both realms. I will only accept changes into -my version of the library if they are similarly dual-licensed. - -1.3 Purpose & Goals - -1.4 Document version - -$Id$ - -2 Building the Library - -3 Structure - -The iCal calendar model is based on four types of objects: components, -properties, values and parameters. - -Properties are the fundamental unit of information in iCal, and they -work a bit like a hash entry, with a constant key and a variable value. -Properties may also have modifiers, called parameters. In the iCal -content line - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com - -The property name is ``ORGANIZER,'' the value of the property is ``mrbig@host.com'' -and the ``ROLE'' parameter specifies that Mr Big is the chair of the -meetings associated with this property. - -Components are groups of properties that represent the core objects -of a calendar system, such as events or timezones. - -The central goal of libical is to parse iTIP data into an internal -representation of Components, Properties, Parameters an Values, and -to allow the user to manipulate the data in various ways - -3.1 Components - -3.2 Properties - -3.3 Values - -3.4 Parameters - -3.5 Enumerations - -3.6 Types - -3.7 The Parser - -3.8 Restrictions - -3.9 Memory Management - -4 Differences From RFCs - -Libical has been designed to follow the standards as closely as possible, -so that the key objects in the standards are also keey objects in -the library. However, there are a few areas where the specifications -are (arguably) irregular, and following them exactly would result -in an unfriendly interface. These deviations make libical easier to -use by maintaining a self-similar interface. - -4.1 Pseudo Components - -Libical defines components for groups of properties that look and act -like components, but are not defined as components in the specification. -XDAYLIGHT and XSTANDARD are notable examples. These pseudo components -group properties within the VTIMEZONE components. XDAYLIGHT starts -with ``BEGIN:DAYLIGHT'' and ends with ``END:DAYLIGHT, just like other -components, but is not defined as a component in RFC2445. ( See RFC2445, -page 61 ) In Libical, it is a component. - -There are also pseudo components that are conceptually derived classess -of VALARM. RFC2446 defines what properties may be included in each -component, and for VALARM, the set of properties it may have depends -on the value of the ACTION property. - -For instance, if a VALARM component has an ACTION property with the -value of ``AUDIO,'' the component must also have an ``ATTACH'' property. -However, if the ACTION value is ``DISPLAY,'' the component must have -a DESCRIPTION property. - -To handle these various, complex restrictions, libical has pseudo components -for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and -XPROCEDUREALARM. - -4.2 Combined Values - -Many values can take more than one type. TRIGGER, for instance, can -have a value type of with DURATION or of DATE-TIME. These multiple -types make it difficult to create routines to return the value associated -with a property. - -It is natural to have interfaces that would return the value of a property, -but it is cumbersone for a single routine to return multiple types. -So, in libical, properties that can have multiple types are given -a single type that is the union of their RFC2445 types. For instance, -in libical, the value of the TRIGGER property resolves to struct icaltriggertype. -This type is a union of a DURATION and a DATE-TIME. - -4.3 Multi-Valued Properties - -Some properties, such as CATEGORIES have only one value type, but each -CATEGORIES property can have multiple value instances. This also results -in a cumbersome interface -- CATEGORIES accessors would have to return -a list while all other accessors returned a single value. In libical, -all properties have a single value, and multi-valued properties are -broken down into multiple single valued properties during parsing. -That is, an input line like, - -CATEGORIES: work, home - -becomes in libical's internal representation - -CATEGORIES: work - -CATEGORIES: home - -Oddly, RFC2445 allows some multi-valued properties ( like FREEBUSY -) to exist as both a multi-values property and as multiple single -value properties, while others ( like CATEGORIES ) can only exist -as single multi-valued properties. This makes the internal representation -for CATEGORIES illegal. However when you convert a component to a -string, the library will collect all of the CATEGORIES properties -into one. - -5 Implementation Limitations - -6 Using libical - -6.1 Creating Components - -6.1.1 Constructor Interfaces - -6.1.2 vaargs Constructors - -6.1.3 Parsing Text Files - -6.2 Accessing Components - -6.2.1 Finding Components - -6.2.2 Removing Components - -Removing an element from a list while iterating through the list can -cause problems, since you will probably be removing the element that -the internal iterator points to. This will result in the iteration -loop terminating immediately after removing the element. To avoid -the problem, you will need to step the iterator ahead of the element -you are going to remove, like this: - -for(c = icalcomponent_get_first_component(s); - - c != 0; - - c = next) - -{ - - next = icalcomponent_get_next_component(s); - - icalcomponent_remove_component(s,c); - -} - -6.2.3 Finding Properties - -6.2.4 Removing Properties - -6.2.5 Getting Values - -6.2.6 Setting Values - -6.2.7 Getting Parameters - -6.2.8 Setting Parameters - -6.2.9 Removing Parameters - -6.2.10 Checking Component Validity - -6.3 Storing Objects - -The libical distribution inclues a seperate library, libicalss, that -allows you to store iCal component data to disk in a variety of ways. -This library is documented seperately. - -6.4 Memory Management - -Here are the memory rules for the library: - -1) If the function name has "new" in it, the caller gets control - of the memory. ( such as icalcomponent_new(), or icalproperty_new_clone() - ) - -2) If you got the memory from a routine with new in it, you must - call the corresponding *_free routine to free the memory. ( Use - icalcomponent_free() to free objects created with icalcomponent_new()) - -3) If the function name has "add" in it, the caller is transfering - control of the memory to the routine. ( icalproperty_add_parameter() ) - -4) If the function name has "remove" in it, the caller passes in - a pointer to an object and after the call returns, the caller owns - the object. So, before you call icalcomponent_remove_property(comp,foo), - you do not own "foo" and after the call returns, you do. - -5) If the routine returns a string, libical owns the memory and will - put it on a ring buffer to reclaim later. You'd better strdup it - if you want to keep it, and you don't have to delete it. - -6.5 Error Handling - -6.5.1 Return values - -6.5.2 icalerrno - -6.5.3 Component errors - -6.6 Naming Standard - -Structures that you access with the ``struct'' keyword, such as ``struct -icaltimetype'' are things that you are allowed to see inside and poke -at. - -Structures that you access though a typedef, such as ``icalcomponent'' -are things where all of the data is hidden. - -Component names that start with ``V'' are part of RFC 2445 or another -iCal standard. Component names that start with ``X'' are also part -of the spec, but they are not actually components in the spec. However, -they look and act like components, so they are components in libical. -Names that start with ``XLIC'' or ``X-LIC'' are not part of any iCal -spec. They are used internally by libical. - -7 Hacks and Bugs diff --git a/libical/install-sh b/libical/install-sh deleted file mode 100755 index 0ff4b6a08e..0000000000 --- a/libical/install-sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -# -# install - install a program, script, or datafile -# This comes from X11R5; it is not part of GNU. -# -# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" - -instcmd="$mvprog" -chmodcmd="" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -fi - -if [ x"$dst" = x ] -then - echo "install: no destination specified" - exit 1 -fi - - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - -if [ -d $dst ] -then - dst="$dst"/`basename $src` -fi - -# Make a temp file name in the proper directory. - -dstdir=`dirname $dst` -dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - -$doit $instcmd $src $dsttmp - -# and set any options; do chmod last to preserve setuid bits - -if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi -if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi -if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi -if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi - -# Now rename the file to the real destination. - -$doit $rmcmd $dst -$doit $mvcmd $dsttmp $dst - - -exit 0 diff --git a/libical/missing b/libical/missing deleted file mode 100755 index 7789652e87..0000000000 --- a/libical/missing +++ /dev/null @@ -1,190 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. -# Copyright (C) 1996, 1997 Free Software Foundation, Inc. -# Franc,ois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -case "$1" in - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - yacc create \`y.tab.[ch]', if possible, from existing .[ch]" - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing - GNU libit 0.0" - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - - aclocal) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acinclude.m4' or \`configure.in'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`configure.in'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acconfig.h' or \`configure.in'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi - touch $file - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and you do not seem to have it handy on your - system. You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequirements for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 diff --git a/libical/mkinstalldirs b/libical/mkinstalldirs deleted file mode 100644 index e61d682697..0000000000 --- a/libical/mkinstalldirs +++ /dev/null @@ -1,40 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Public domain - -# $Id: mkinstalldirs,v 1.4 2000/06/06 22:48:06 alves Exp $ - -errstatus=0 - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" 1>&2 - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# mkinstalldirs ends here \ No newline at end of file diff --git a/libical/scripts/.cvsignore b/libical/scripts/.cvsignore deleted file mode 100644 index b840c21800..0000000000 --- a/libical/scripts/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile.in -Makefile \ No newline at end of file diff --git a/libical/scripts/Makefile.am b/libical/scripts/Makefile.am deleted file mode 100644 index fd1b053cb6..0000000000 --- a/libical/scripts/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -EXTRA_DIST = \ -mkderivedcomponents.pl \ -mkderivedparameters.pl \ -mkderivedproperties.pl \ -mkderivedvalues.pl \ -mkparameterrestrictions.pl \ -mkrestrictionrecords.pl \ -mkrestrictiontable.pl diff --git a/libical/scripts/mkderivedcomponents.pl b/libical/scripts/mkderivedcomponents.pl deleted file mode 100755 index ac4e472250..0000000000 --- a/libical/scripts/mkderivedcomponents.pl +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/local/bin/perl - -use Getopt::Std; -getopts('chspi:'); - - -# ARG 0 is components.txt -open(PV,"$ARGV[0]") || die "Can't open components file $ARGV[0]:$!"; - -my @components; - -while (){ - - s/#.*//; - - chop; - - push(@components,$_); - -} - -close PV; - -# Write the file inline by copying everything before a demarcation -# line, and putting the generated data after the demarcation - -if ($opt_i) { - - open(IN,$opt_i) || die "Can't open input file \"$opt_i\""; - - while(){ - - if (/Do not edit/){ - last; - } - - print; - - } - - if($opt_i){ - print "# Everything below this line is machine generated. Do not edit. \n"; - } else { - print "/* Everything below this line is machine generated. Do not edit. */\n"; - } - -} - -if ($opt_c or $opt_h and !$opt_i){ - -print < /* for va_arg functions */ - -EOM - -} - -if ($opt_p and !$opt_i){ - -print <1,RANGE=>1,RSVP=>1,XLICERRORTYPE=>1,XLICCOMPARETYPE=>1); - -# Usually, open param-c-types.txt -open(F,"$ARGV[0]") || die "Can't open C parameter types file $ARGV[0]:$!"; - -# Write the file inline by copying everything before a demarcation -# line, and putting the generated data after the demarcation - -if ($opt_i) { - - open(IN,$opt_i) || die "Can't open input file $opt_i"; - - while(){ - - if (/Do not edit/){ - last; - } - - print; - - } - - if($opt_p){ - print "# Everything below this line is machine generated. Do not edit. \n"; - } else { - print "/* Everything below this line is machine generated. Do not edit. */\n"; - } - -} - - - -if (($opt_c or $opt_h) and !$opt_i) { - -print <){ - - chop; - my ($param,$type) = split(/\s{2,}/,$_); - - my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$param)); - - my $lc = lc($ucf); - my $uc = uc($lc); - - my $lctype = lc($type); - - - my $charorenum; - my $set_code; - my $pointer_check; - my $new_pointer_check; - my $new_pointer_check_v; - my $xrange; - - if ($type=~/char/){ - $new_pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; - $new_pointer_check_v = "icalerror_check_arg_rv( (v!=0),\"v\");"; - } - - - if ($type=~/char/ ) { - - $charorenum = " icalerror_check_arg_rz( (param!=0), \"param\");\n return ((struct icalparameter_impl*)param)->string;"; - - $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");"; - - $set_code = "((struct icalparameter_impl*)param)->string = strdup(v);" - - } else { - - $xrange =" if ( ((struct icalparameter_impl*)param)->string != 0){\n return ICAL_${uc}_XNAME;\n }\n" if !exists $no_xname{$uc}; - - $charorenum=<data.v_${lc}; -EOM - - $pointer_check = "icalerror_check_arg( (v!=0),\"v\");"; - - $set_code = "((struct icalparameter_impl*)param)->data.v_${lc} = v;"; - - $print_code = "switch (impl->data.v_${lc}) {\ncase ICAL_${uc}_: {\n}\ncase ICAL_${uc}_XNAME: /* Fall Through */\n}\n"; - - } - - - - if ($opt_c) { - - print <[0] = \$p; - - return \$self; -} - -sub get -{ - my \$self = shift; - my \$impl = \$self->_impl(); - - return Net::ICal::icalparameter_as_ical_string(\$impl); - -} - -sub set -{ - # This is hard to implement, so I've punted for now. - die "Set is not implemented"; -} - -EOM - -} - -} - -if ($opt_h){ - -print <){ - - chop; - my @v = split(/\s+/,$_); - - my $prop = shift @v; - my $value = shift @v; - my $comment = join(" ",@v); - - $propmap{$prop} = $value; -} - -close PV; - -# ARG 1 is value-c-types.txt -open(F,"$ARGV[1]") || die "Can't open C parameter types file $ARGV[1 ]:$!"; - -while (){ - - chop; - my @v = split(/\t+/,$_); - - my $value = shift @v; - my $type = shift @v; - my $comment = join(" ",@v); - - $valuemap{$value} = $type; - -} - -close F; - -# Write the file inline by copying everything before a demarcation -# line, and putting the generated data after the demarcation - -if ($opt_i) { - - open(IN,$opt_i) || die "Can't open input file $opt_i"; - - while(){ - - if (/Do not edit/){ - last; - } - - print; - - } - - if($opt_p){ - print "# Everything below this line is machine generated. Do not edit. \n"; - } else { - print "/* Everything below this line is machine generated. Do not edit. */\n"; - } - -} - - -if ( ($opt_h or $opt_s) and !$opt_i ){ - -print <_add_elements(\\\@_); - - return bless \$self, \$package; -} - -sub set_value -{ - my \$self = shift; - my \$v = shift; - - my \$impl = \$self->_impl(); - - - if ( ref \$v && Net::ICal::icalvalue_isa_value(\$v->_impl())){ - Net::ICal::icalproperty_set_value(\$impl,\$v->_impl); - } else { - my \$value = Net::ICal::icalvalue_new_from_string(\$Net::ICal::ICAL_${ucvalue}_VALUE,\$v); - die if !\$impl; - Net::ICal::icalproperty_set_value(\$impl,\$value) unless !\$value; - } - -} - -sub get_value -{ - my \$self = shift; - my \$impl = \$self->_impl(); - - if (defined \$impl){ - my \$value = Net::ICal::icalproperty_get_value(\$impl); - return "" if !\$value; - return Net::ICal::icalvalue_as_ical_string(\$value); - } else { - return ""; - } -} - -EOM - -} elsif ($opt_m) { # Generate a map - -print "\'${uc}\' => \'Net::ICal::Property::${ucf},\'\n"; - -} - -} # This brace terminates the main loop - - - -# Add things to the end of the output. - -if ($opt_p) -{ - print "1;\n"; -} - -if ($opt_h){ - -print < generate c code file -# h-> generate header file -# s -> generate switch statement - -# Open with value-c-types.txt - - -open(F,"$ARGV[0]") || die "Can't open values data file $ARGV[0]:$!"; - - -# Write the file inline by copying everything before a demarcation -# line, and putting the generated data after the demarcation - -if ($opt_i) { - - open(IN,$opt_i) || die "Can't open input file $opt_i"; - - while(){ - - if (/Do not edit/){ - last; - } - - print; - - } - - if($opt_p){ - print "# Everything below this line is machine generated. Do not edit. \n"; - } else { - print "/* Everything below this line is machine generated. Do not edit. */\n"; - } - -} - - -if (($opt_c || $opt_h) and !$opt_i) { -print < 'int', - CALADDRESS=>'string', - DATE=>'time', - DATETIME=>'time', - DATETIMEDATE=>'time', - DATETIMEPERIOD=>'period', - DURATION=>'duration', - INTEGER=>'int', - TEXT=>'string', - URI=>'string', - UTCOFFSET=>'int', - QUERY=>'string', - BINARY=>'string' - ); - -while() -{ - - chop; - my @v = split(/\t+/,$_); - - my $value = shift @v; - my $type = shift @v; - my $comment = join(" ",@v); - - my $ucf = join("",map {ucfirst(lc($_));} split(/-/,$value)); - - my $lc = lc($ucf); - my $uc = uc($lc); - - my $pointer_check = "icalerror_check_arg_rz( (v!=0),\"v\");\n" if $type =~ /\*/; - my $pointer_check_rv = "icalerror_check_arg_rv( (v!=0),\"v\");\n" if $type =~ /\*/; - - my $assign; - - if ($type =~ /char/){ - $assign = "strdup(v);\n\n if (impl->data.v_string == 0){\n errno = ENOMEM;\n }\n"; - } else { - $assign = "v;"; - } - - my $union_data; - - if (exists $union_map{$uc} ){ - $union_data=$union_map{$uc}; - } else { - $union_data = $lc; - } - - if ($opt_c) { -print <data.v_${union_data} = $assign -} - -$type -icalvalue_get_${lc}(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_${uc}_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_${union_data}; -} - -EOM - -} elsif($opt_h) { - - print <data.v_${union_data} - - str = strdup(temp); - - return str; -} - -EOM - -} -} elsif ($opt_p) { # Generate perl code - -print <[0] = \$p; - - return \$self; -} - -sub set -{ - my \$self = shift; - my \$v = shift; - - my \$impl = \$self->_impl(); - - if (\$v) { - my \$new_value = Net::ICal::icalvalue_new_from_string(\$Net::ICal::ICAL_${uc}_VALUE,\$v); - if (\$new_value){ - Net::ICal::icalvalue_free(\$self->[0]); - \$self->[0] = \$new_value; - } - - } - -} - -sub get -{ - my \$self = shift; - my \$impl = \$self->[0]; - - if (defined \$impl){ - - return Net::ICal::icalvalue_as_ical_string(\$impl); - - } -} - -EOM -} - - - -} - -if ($opt_p) -{ - print "1;\n"; -} - - -if ($opt_h){ - -print < - - -# usually open params-in-prop.txt -open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; - -print <) -{ - chop; - - # split line by whitespace - my @v = split(/\s+/,$_); - # property is first item on line - my $prop = shift @v; - my $prop_name = $prop; - if (substr($prop,0,1) eq "X") { $prop = "X"; } - $prop = join("",split(/-/,$prop)); - -print < - -# usually open restrictions.csv -open(F,"$ARGV[0]") || die "Can't open restriction file $ARGV[0]:$!"; - -print <) -{ - chop; - - # split line at commas - my ($method,$component,$property,$subcomponent,$restriction)=split(/\,/,$_); - - # - #put in code to generate comments here! - # - if ($method ne $last_method) - { - $need_header = 1; - $last_method = $method; - } - if ($component ne $last_component) - { - $need_header = 1; - $last_component = $component; - } - - if ($need_header) - { - print "\n\t/* METHOD: ${method}, COMPONENT: ${component} */\n"; - $need_header = 0; - } - - foreach $item ($component,$property,$subcomponent,$restriction) - { - # handle special cases. - if ($item eq "NONE") - { $item = "NO"; } - else { if (substr($item,0,1) eq "X") - { $item = "X"; }} - - # strip out dashes - $item = join("",split(/-/,$item)); - } - # strip leading V from component names - $component =~ s/^(V?)(\w+?)((SAVINGS)?)((TIME)?)$/$2/; - $subcomponent =~ s/^V(\w+)/$1/; - - print "\t\{ICAL_METHOD_${method},ICAL_${component}_COMPONENT,"; - print "ICAL_${property}_PROPERTY,ICAL_${subcomponent}_COMPONENT,"; - print "ICAL_RESTRICTION_${restriction}\},\n"; - -} - -print <){ - - if (/Do not edit/){ - last; - } - - print; - - } - - print "/* Everything below this line is machine generated. Do not edit. */\n"; - - - close IN; -} - -# First build the property restriction table -print "icalrestriction_property_record icalrestriction_property_records[] = {\n"; - -while() -{ - - chop; - - s/\#.*$//; - - my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_); - - next if !$method; - - if(!$sub) { - $sub = "0"; - } - - if($prop ne "NONE"){ - print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${prop}_PROPERTY,ICAL_RESTRICTION_${restr},$sub\},\n"); - } - -} - - -# Print the terminating line -print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE}\n"; - -print "};\n"; - -print "icalrestriction_component_record icalrestriction_component_records[] = {\n"; - - -# Go back through the entire file and build the component restriction table -close(F); -open(F,"$ARGV[0]") || die "Can't open restriction data file $ARGV[0]:$!"; - -while() -{ - - chop; - - s/\#.*$//; - - my($method,$targetcomp,$prop,$subcomp,$restr,$sub) = split(/,/,$_); - - next if !$method; - - if(!$sub) { - $sub = "0"; - } - - - if($subcomp ne "NONE"){ - print(" \{ICAL_METHOD_${method},ICAL_${targetcomp}_COMPONENT,ICAL_${subcomp}_COMPONENT,ICAL_RESTRICTION_${restr},$sub\},\n"); - } - -} - -# print the terminating line -print " {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE}\n"; -print "};\n"; diff --git a/libical/src/.cvsignore b/libical/src/.cvsignore deleted file mode 100644 index c038ed7864..0000000000 --- a/libical/src/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in \ No newline at end of file diff --git a/libical/src/Makefile.am b/libical/src/Makefile.am deleted file mode 100644 index 37dc5e39cb..0000000000 --- a/libical/src/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -SUBDIRS = libical libicalss test diff --git a/libical/src/libical/.cvsignore b/libical/src/libical/.cvsignore deleted file mode 100644 index 708af857d7..0000000000 --- a/libical/src/libical/.cvsignore +++ /dev/null @@ -1,14 +0,0 @@ -Makefile -Makefile.in -icalitipy.c -icalitipy.h -icalitipl.c -icallexer.c -icalyacc.c -icalyacc.h -y.output -*.lo -*.la -.libs -.deps -icalversion.h diff --git a/libical/src/libical/.gdb_history b/libical/src/libical/.gdb_history deleted file mode 100644 index 55362e9165..0000000000 --- a/libical/src/libical/.gdb_history +++ /dev/null @@ -1,457 +0,0 @@ -run -ptype E -graph display E -quit -run -print E -graph display E -up -print p -graph display p -ptype p -info line 'p' -graph display p -print parameter_iterator -break icalproperty.c:182 -run -next -print p -graph display p -quit -run -up -graph display p -print parameter_iterator -graph display p -print *(p) -quit -show directories -run -run -y -list usecases.c -list test_parameters -info line 'main' -info line 'test_parameters' -info line 'icalproperty_vanew_comment' -ptype icalproperty_add_parameters -info line 'icalproperty_add_parameters' -run -up -info line 'icalproperty_vanew_comment' -info line 'icalproperty_add_parameters' -break icalproperty.c:51 -run -step -next -nexti -info line 'icalproperty_vanew_comment' -info line 'icalproperty_add_parameters' -break icalproperty.c:53 -run -next -graph display vp -break icalparameter_isa_parameter -cont -run -step -next -quit -run -break icalcomponent_get_first_property -break icalcomponent_get_next_property -break icalcomponent_new -run -next -step -next -step -next -graph display impl -up -down -next -graph display *(impl) -next -cont -next -graph display c -next -graph display *(prop) -next -step -quit -run -up -graph display p -down -print E -up -print *(prop) -graph display *(prop) -down -up -print prop -print param -down -up -print p -up -break usecases.c:522 -run -step -next -up -run -step -next -step -next -quit -run -up -quit -info line 'test_memory' -break b1 -break usecases.c:558 -run -graph display *(f) -graph display *(p) -next -run -next -step -next -print pos -print *(pos) -graph display string -graph display *(pos) -next -set variable *pos = 0x8053520 -next -step -next -print buf_size -print *(buf_size) -print *(string) -ptype string -next -run -print f -graph display f -graph display p -next -step -next -run -next -graph display bufsize -next -quit -graph display test_memory -info line 'test_memory' -break usecases.c:560 -run -graph display f -next -graph display p -print p -f -print strlen(S1) -next -print p - f -print strlen(S1) + strlen(S2) -next -break usecases.c:572 -run -cont -step -graph display *(pos) -next -step -quit -info line 'test_memory' -break usecases.c:560 -set args -run -next -graph display f -graph display p -next -graph display bufsize -run -next -set args -run -quit -info line 'test_memory' -break usecases.c:560 -graph display f -graph display p -run -graph display f -graph display p -graph display bufsize -next -down -up -quit -run -where -frame 2 -break icalmemory.c:79 -run -next -run -graph display buffer_ring -run -ont(box, font) = font(box, font); -_fontfix(box) = fontfix(box); -ont(box, font) = font(box, font); -#pragma override font -font(box, font) = _fontfix(_font(box, string(font))); -ont(box, font) = font(box, font); -ist -list -print buffer_ring[buffer_pos] -break icalmemory.c:77 -run -cont -quit -run -up -break icalmemory.c:77 -break icalmemory.c:78 -run -graph display buffer_ring -next -cont -quit -run -up -break icalmemory.c:77 -run -break icalmemory.c:78 -cont -graph display buffer_ring[buffer_pos] -quit -break usecases.c:560 -run -step -break icalmemory.c:129 -disable 2 -next -info line 'icalmemory_resize_buffer' -break icalmemory.c:79 -cont -run -cont -next -run -cont -graph display buffer_ring[buffer_pos] -graph display buffer_ring -break icalmemory.c:78 -run -graph display buffer_pos -cont -run -cont -quit -info line 'test_memory' -info line 'icalmemory_append_string' -break icalmemory.c:78 -break icalmemory.c:79 -run -graph display buffer_ring -graph display buffer_ring[buffer_pos] -graph display buffer_pos -cont -next -free( buffer_ring[2] -free( buffer_ring[2] ) -call free(buffer_ring[2] ) -call free(buffer_ring[1] ) -free(buffer_ring[1]) -run -cont -set variable buffer_pos = 2 -next -run -cont -run -cont -run -cont -next -quit -info line 'test_memory' -info line 'icalmemory_append_string' -break icalmemory.c:78 -break icalmemory.c:79 -run -graph display buffer_ring -graph display buffer_pos -graph display buffer_ring[buffer_pos] -cont -run -cont -set variable buffer_pos = 2 -next -cont -next -cont -run -next -run -quit -info line 'test_memory' -info line 'icalmemory_append_string' -break icalmemory.c:76 -break icalmemory.c:77 -run -graph display buffer_ring -graph display buffer_pos -graph display buffer_ring[buffer_pos] -cont -next -cont -next -cont -run -cont -next -cont -run -cont -next -graph display rtrn -next -run -next -cont -next -run -step -run -next -quit -run -up -print pos -graph display string -run -up -break usecases.c:572 -run -print bufsize -step -next -step -quit -run -up -graph display buf_size -graph display *(buf_size) -break icalmemory.c:136 -run -next -run -graph display *(new_buf) -quit -run -up -down -break icalmemory.c:136 -run -graph display *(new_buf) -quit -run -up -break icalmemory.c:136 -run -print *(new_buf) -next -print *buf_size -print *bu -print *buf -next -print new_buf -quit -run -up -break icalmemory.c:136 -run -print *(new_buf) -graph display *(new_buf) -graph display new_pos -graph display *(buf) -next -graph display new_buf -run -next -run -graph display *(pos) -next -quit -info line 'test_memory' -info line 'icalmemory_append_string' -break icalmemory.c:136 -run -graph display *(buf_size) -next -quit -info line 'test_memory' -break usecases.c:570 -run -step -next -delete 1 -until usecases.c:572 -step -next -graph display *(buf_size) -next -graph display *(pos) -graph display *(buf) -graph display *(new_buf) -graph display new_buf -next -graph display string -print *pos - *buf -run -break icalmemory.c:136 -run -next -set variable *pos = 0x8054993 -next -run -next -set variable *pos = 0x8054980 -set variable *pos = 0x8054700 -next -run -next -down -up -down -quit -run < ../../test-data/1.1 -up -break icalproperty.c:165 -run -next -run -info line 'icalvalue_as_ical_string' -break icalvalue.c:424 -cont -next -print value -next -run -up -cont -up -print *(prop) -graph display *(icalproperty_impl*)prop -quit - diff --git a/libical/src/libical/.gdbinit b/libical/src/libical/.gdbinit deleted file mode 100644 index 19de9b8209..0000000000 --- a/libical/src/libical/.gdbinit +++ /dev/null @@ -1,3 +0,0 @@ -directory /home/eric/proj/FreeAssociation/libical/src/pvl/ -path /home/eric/proj/FreeAssociation/libical/src/pvl/ - diff --git a/libical/src/libical/Makefile.am b/libical/src/libical/Makefile.am deleted file mode 100644 index d9af51bccd..0000000000 --- a/libical/src/libical/Makefile.am +++ /dev/null @@ -1,96 +0,0 @@ - -#AUTOMAKE_OPTIONS = no-dependencies - -#noinst_LTLIBRARIES = libical.la -lib_LIBRARIES = libical.a - -YFLAGS =-d -v -t - -libical_a_SOURCES = \ - ical.h \ - icalcomponent.c \ - icalcomponent.h \ - icalenums.c \ - icalenums.h \ - icalerror.c \ - icalerror.h \ - icalyacc.y \ - icallexer.l \ - icalmemory.c \ - icalmemory.h \ - icalparameter.c \ - icalparameter.h \ - icalparser.c \ - icalparser.h \ - icalproperty.c \ - icalproperty.h \ - icalrestriction.c \ - icalrestriction.h \ - icaltypes.c \ - icaltypes.h \ - icalvalue.c \ - icalvalue.h \ - icalvcal.h \ - pvl.c \ - pvl.h - -include_HEADERS=\ - ical.h \ - icalcomponent.h \ - icalenums.h \ - icalerror.h \ - icalmemory.h \ - icalparameter.h \ - icalparser.h \ - icalproperty.h \ - icalrestriction.h \ - icaltypes.h \ - icalvalue.h \ - icalvcal.h \ - icalversion.h \ - pvl.h - - -# -# static convenience library for use in conduits -# - -noinst_LTLIBRARIES = libical-static.la -libical_static_la_SOURCES = $(libical_a_SOURCES) -libical_static_la_LDFLAGS = --all-static - -EXTRA_DIST = icallexer.c icalyacc.c icalyacc.h - -CONFIG_CLEAN_FILES = y.output *~ - -DESIGNDATA = ../../design-data -ICALSCRIPTS = ../../scripts -derived: icalproperty icalparameter icalvalue icalrestriction - -icalproperty: - $(ICALSCRIPTS)/mkderivedproperties.pl -i icalproperty.h -h $(DESIGNDATA)/prop-to-value.txt ${DESIGNDATA}/value-c-types.txt > icalproperty.newh - mv icalproperty.newh icalproperty.h - - $(ICALSCRIPTS)/mkderivedproperties.pl -i icalproperty.c -c $(DESIGNDATA)/prop-to-value.txt ${DESIGNDATA}/value-c-types.txt > icalproperty.newc - mv icalproperty.newc icalproperty.c - - -icalparameter: - $(ICALSCRIPTS)/mkderivedparameters.pl -i icalparameter.h -h $(DESIGNDATA)/param-c-types.txt > icalparameter.newh - mv icalparameter.newh icalparameter.h - - $(ICALSCRIPTS)/mkderivedparameters.pl -i icalparameter.c -c $(DESIGNDATA)/param-c-types.txt > icalparameter.newc - mv icalparameter.newc icalparameter.c - -icalvalue: - $(ICALSCRIPTS)/mkderivedvalues.pl -i icalvalue.h -h $(DESIGNDATA)/value-c-types.txt > icalvalue.newh - mv icalvalue.newh icalvalue.h - - $(ICALSCRIPTS)/mkderivedvalues.pl -i icalvalue.c -c $(DESIGNDATA)/value-c-types.txt > icalvalue.newc - mv icalvalue.newc icalvalue.c - -icalrestriction: - $(ICALSCRIPTS)/mkrestrictiontable.pl -i icalrestriction.c $(DESIGNDATA)/restrictions.csv > icalrestriction.newc - mv icalrestriction.newc icalrestriction.c - - diff --git a/libical/src/libical/base64.c b/libical/src/libical/base64.c deleted file mode 100644 index 5925f977ac..0000000000 --- a/libical/src/libical/base64.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - - Encode or decode file as MIME base64 (RFC 1341) - - by John Walker - http://www.fourmilab.ch/ - - This program is in the public domain. - -*/ - -#define REVDATE "11th August 1997" - -#include -#include -#include -#include - -#define TRUE 1 -#define FALSE 0 - -#define LINELEN 72 /* Encoded line length (max 76) */ - -typedef unsigned char byte; /* Byte type */ - -static FILE *fi = stdin; /* Input file */ -static FILE *fo = stdout; /* Output file */ -static byte iobuf[256]; /* I/O buffer */ -static int iolen = 0; /* Bytes left in I/O buffer */ -static int iocp = 256; /* Character removal pointer */ -static int ateof = FALSE; /* EOF encountered */ -static byte dtable[256]; /* Encode / decode table */ -static int linelength = 0; /* Length of encoded output line */ -static char eol[] = "\r\n"; /* End of line sequence */ -static int errcheck = TRUE; /* Check decode input for errors ? */ - -/* INBUF -- Fill input buffer with data */ - -static int inbuf(void) -{ - int l; - - if (ateof) { - return FALSE; - } - l = fread(iobuf, 1, 256, fi); /* Read input buffer */ - if (l <= 0) { - if (ferror(fi)) { - exit(1); - } - ateof = TRUE; - return FALSE; - } - iolen = l; - iocp = 0; - return TRUE; -} - -/* INCHAR -- Return next character from input */ - -static int inchar(void) -{ - if (iocp >= iolen) { - if (!inbuf()) { - return EOF; - } - } - - return iobuf[iocp++]; -} - -/* OCHAR -- Output an encoded character, inserting line breaks - where required. */ - -static void ochar(int c) -{ - if (linelength >= LINELEN) { - if (fputs(eol, fo) == EOF) { - exit(1); - } - linelength = 0; - } - if (putc(((byte) c), fo) == EOF) { - exit(1); - } - linelength++; -} - -/* ENCODE -- Encode binary file into base64. */ - -static void encode(void) -{ - int i, hiteof = FALSE; - - /* Fill dtable with character encodings. */ - - for (i = 0; i < 26; i++) { - dtable[i] = 'A' + i; - dtable[26 + i] = 'a' + i; - } - for (i = 0; i < 10; i++) { - dtable[52 + i] = '0' + i; - } - dtable[62] = '+'; - dtable[63] = '/'; - - while (!hiteof) { - byte igroup[3], ogroup[4]; - int c, n; - - igroup[0] = igroup[1] = igroup[2] = 0; - for (n = 0; n < 3; n++) { - c = inchar(); - if (c == EOF) { - hiteof = TRUE; - break; - } - igroup[n] = (byte) c; - } - if (n > 0) { - ogroup[0] = dtable[igroup[0] >> 2]; - ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)]; - ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)]; - ogroup[3] = dtable[igroup[2] & 0x3F]; - - /* Replace characters in output stream with "=" pad - characters if fewer than three characters were - read from the end of the input stream. */ - - if (n < 3) { - ogroup[3] = '='; - if (n < 2) { - ogroup[2] = '='; - } - } - for (i = 0; i < 4; i++) { - ochar(ogroup[i]); - } - } - } - if (fputs(eol, fo) == EOF) { - exit(1); - } -} - -/* INSIG -- Return next significant input */ - -static int insig(void) -{ - int c; - - /*CONSTANTCONDITION*/ - while (TRUE) { - c = inchar(); - if (c == EOF || (c > ' ')) { - return c; - } - } - /*NOTREACHED*/ -} - -/* DECODE -- Decode base64. */ - -static void decode(void) -{ - int i; - - for (i = 0; i < 255; i++) { - dtable[i] = 0x80; - } - for (i = 'A'; i <= 'Z'; i++) { - dtable[i] = 0 + (i - 'A'); - } - for (i = 'a'; i <= 'z'; i++) { - dtable[i] = 26 + (i - 'a'); - } - for (i = '0'; i <= '9'; i++) { - dtable[i] = 52 + (i - '0'); - } - dtable['+'] = 62; - dtable['/'] = 63; - dtable['='] = 0; - - /*CONSTANTCONDITION*/ - while (TRUE) { - byte a[4], b[4], o[3]; - - for (i = 0; i < 4; i++) { - int c = insig(); - - if (c == EOF) { - if (errcheck && (i > 0)) { - fprintf(stderr, "Input file incomplete.\n"); - exit(1); - } - return; - } - if (dtable[c] & 0x80) { - if (errcheck) { - fprintf(stderr, "Illegal character '%c' in input file.\n", c); - exit(1); - } - /* Ignoring errors: discard invalid character. */ - i--; - continue; - } - a[i] = (byte) c; - b[i] = (byte) dtable[c]; - } - o[0] = (b[0] << 2) | (b[1] >> 4); - o[1] = (b[1] << 4) | (b[2] >> 2); - o[2] = (b[2] << 6) | b[3]; - i = a[2] == '=' ? 1 : (a[3] == '=' ? 2 : 3); - if (fwrite(o, i, 1, fo) == EOF) { - exit(1); - } - if (i < 3) { - return; - } - } -} - -/* USAGE -- Print how-to-call information. */ - -static void usage(char *pname) -{ - fprintf(stderr, "%s -- Encode/decode file as base64. Call:\n", pname); - fprintf(stderr, - " %s [-e[ncode] / -d[ecode]] [-n] [infile] [outfile]\n", pname); - fprintf(stderr, "\n"); - fprintf(stderr, "Options:\n"); - fprintf(stderr, " -D Decode base64 encoded file\n"); - fprintf(stderr, " -E Encode file into base64\n"); - fprintf(stderr, " -N Ignore errors when decoding\n"); - fprintf(stderr, " -U Print this message\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "by John Walker\n"); - fprintf(stderr, " WWW: http://www.fourmilab.ch/\n"); -} - -/* Main program */ - -int main(int argc, char *argv[]) -{ - int i, f = 0, decoding = FALSE; - char *cp, opt; - - for (i = 1; i < argc; i++) { - cp = argv[i]; - if (*cp == '-') { - opt = *(++cp); - if (islower(opt)) { - opt = toupper(opt); - } - switch (opt) { - - case 'D': /* -D Decode */ - decoding = TRUE; - break; - - case 'E': /* -E Encode */ - decoding = FALSE; - break; - - case 'N': /* -N Suppress error checking */ - errcheck = FALSE; - break; - - case 'U': /* -U Print how-to-call information */ - case '?': - usage(argv[0]); - return 0; - } - } else { - switch (f) { - - /** Warning! On systems which distinguish text mode and - binary I/O (MS-DOS, Macintosh, etc.) the modes in these - open statements will have to be made conditional based - upon whether an encode or decode is being done, which - will have to be specified earlier. But it's worse: if - input or output is from standard input or output, the - mode will have to be changed on the fly, which is - generally system and compiler dependent. 'Twasn't me - who couldn't conform to Unix CR/LF convention, so - don't ask me to write the code to work around - Apple and Microsoft's incompatible standards. **/ - - case 0: - if (strcmp(cp, "-") != 0) { - if ((fi = fopen(cp, "r")) == NULL) { - fprintf(stderr, "Cannot open input file %s\n", cp); - return 2; - } - } - f++; - break; - - case 1: - if (strcmp(cp, "-") != 0) { - if ((fo = fopen(cp, "w")) == NULL) { - fprintf(stderr, "Cannot open output file %s\n", cp); - return 2; - } - } - f++; - break; - - default: - fprintf(stderr, "Too many file names specified.\n"); - usage(argv[0]); - return 2; - } - } - } - - if (decoding) { - decode(); - } else { - encode(); - } - return 0; -} diff --git a/libical/src/libical/filelock.c b/libical/src/libical/filelock.c deleted file mode 100644 index 0376bc2bec..0000000000 --- a/libical/src/libical/filelock.c +++ /dev/null @@ -1,143 +0,0 @@ - -/* - I Stole this from: - http://www.cis.temple.edu/~ingargio/old/cis307s96/readings/rwlockexample.html - - CIS 307: An example using Read/Write File Locks - [fcntl.h], [fcntl.c], [fcntlmain.c] - -In Stevens "Advanced Programming in the Unix Environment" we see ways to use -the Unix service fcntl to lock portions of a file for reading and writing in -the manner stated in the Reader and Writer problem [any number of readers at -a time, but writers must operate alone]. Here we have three files that adapt -and use the code from Stevens: - -*fcntl.h: Specification of the locking functions. -*fcntl.c: Implementation of the locking functions. -*fcntlmain.c: Driver that does a simple test of the locking functions. - -WARNING: A file lock request which is blocked can be interrupted by a -signal. In this case the lock operation returns EINTR. Thus we may think we -got a lock when we really don't. A solution is to block signals when -locking. Another solution is to test the value returned by the lock -operation and relock if the value is EINTR. Another solution, which we adopt -here, is to do nothing about it. - -/* fcntl.c -- Defines mutexes in terms of read/write locks on files. - * (code is mostly from Stevens: Advanced Programming in the - * Unix environment. See from page 367 on. - * filerwlock, filerwlockCreate, filerwlockDelete, - * filerwreadlock, filerwlongreadlock, filerwlongunlock, - * filerwlockUnlock - */ - -#include -#include -#include -#include - -int lock_reg(int, int, int, off_t, int, off_t); - -#define read_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len) - -#define readw_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len) - -#define write_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len) - -#define writew_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len) - -#define un_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len) - -pid_t lock_test(int, int , off_t , int , off_t ); - -#define is_readlock(fd, offset, whence, len) \ - lock_test(fd, F_RDLCK, offset, whence, len) - -#define is_writelock(fd, offset, whence, len) \ - lock_test(fd, F_WRLCK, offset, whence, len) - -int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) -{ - struct flock lock; - lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */ - lock.l_start = offset; /* byte offset relative to l_whence */ - lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ - lock.l_len = len; /* #bytes (0 means to EOF) */ - return (fcntl(fd, cmd, &lock)); -} - -pid_t lock_test(int fd, int type, off_t offset, int whence, off_t len) -{ - struct flock lock; - lock.l_type = type; /* F_RDLCK or F_WRLCK */ - lock.l_start = offset; /* byte offset relative to l_whence */ - lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ - lock.l_len = len; /* #bytes (0 means to EOF) */ - if (fcntl(fd,F_GETLK,&lock) < 0){ - perror("fcntl"); exit(1);} - if (lock.l_type == F_UNLCK) - return (0); /* false, region is not locked by another process */ - return (lock.l_pid); /* true, return pid of lock owner */ -} - -typedef struct { - int fd; - int n;} filerwlock; - -/* Create N read/write locks and returns the id of this cluster of locks. */ -filerwlock * filerwlockCreate(char *filename, int n) { - filerwlock *fl = (filerwlock *)malloc(sizeof(filerwlock)); - if (((fl->fd) = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IWUSR)) < 0) { - perror("open"); - exit(1);} - fl->n = n; - return fl; - } - -/* Delete the cluster of read/write locks associated with fl. */ -int filerwlockDelete(filerwlock *fl) { - if (close(fl->fd) < 0) { - perror("close"); - exit(1);} - return free(fl); - } - -/* Given the read/write lock cluster fl, lock its ith element */ -int filerwreadlock(filerwlock *fl, int i) { - if ((i < 0) | (i >= fl->n)) { - printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); - exit(0);} - readw_lock(fl->fd, i, SEEK_SET, 1); - } - -int filerwwritelock(filerwlock *fl, int i) { - if ((i < 0) | (i >= fl->n)) { - printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); - exit(0);} - writew_lock(fl->fd, i, SEEK_SET, 1); - } - -/* Given the lock cluster fl, unlock its ith element */ -int filerwunlock(filerwlock *fl, int i){ - - if ((i < 0) | (i >= fl->n)) { - printf("filerwlockUnlock needs i in range 0 .. %d\n", (fl->n)-1); - exit(0);} - un_lock(fl->fd, i, SEEK_SET, 1); - } - -/* Given the lock cluster fl, it read locks all its elements */ -int filerwlongreadlock(filerwlock *fl) { - readw_lock(fl->fd, 0, SEEK_SET, fl->n); -} - -/* Given the lock cluster fl, it unlocks all its elements */ -int filerwlongunlock(filerwlock *fl) { - un_lock(fl->fd, 0, SEEK_SET, fl->n); -} - diff --git a/libical/src/libical/filelock.h b/libical/src/libical/filelock.h deleted file mode 100644 index dbe0715cc6..0000000000 --- a/libical/src/libical/filelock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - I Stole this from: - http://www.cis.temple.edu/~ingargio/old/cis307s96/readings/rwlockexample.html - - CIS 307: An example using Read/Write File Locks - [fcntl.h], [fcntl.c], [fcntlmain.c] - -In Stevens "Advanced Programming in the Unix Environment" we see ways to use -the Unix service fcntl to lock portions of a file for reading and writing in -the manner stated in the Reader and Writer problem [any number of readers at -a time, but writers must operate alone]. Here we have three files that adapt -and use the code from Stevens: - -*fcntl.h: Specification of the locking functions. -*fcntl.c: Implementation of the locking functions. -*fcntlmain.c: Driver that does a simple test of the locking functions. - -WARNING: A file lock request which is blocked can be interrupted by a -signal. In this case the lock operation returns EINTR. Thus we may think we -got a lock when we really don't. A solution is to block signals when -locking. Another solution is to test the value returned by the lock -operation and relock if the value is EINTR. Another solution, which we adopt -here, is to do nothing about it. - -fcntl.h - -*/ - -/* fcntl.h -- Defines mutexes in terms of read/write locks on files. - * filerwlock, filerwlockCreate, filerwlockDelete, - * filerwreadlock, filerwlockUnlock - */ - -typedef struct { - int fd; - int n; -} filerwlock; - -/* Create N read/write locks and returns the id of this cluster of locks. */ -filerwlock * filerwlockCreate(char *filename, int n); - -/* Delete the cluster of read/write locks associated with fl. */ -int filerwlockDelete(filerwlock *fl); - -/* Given the read/write lock cluster fl, lock its ith element */ -int filerwreadlock(filerwlock *fl, int i); - -int filerwwritelock(filerwlock *fl, int i); - -/* Given the lock cluster fl, unlock its ith element */ -int filerwunlock(filerwlock *fl, int i); - -/* Given the lock cluster fl, it read locks all its elements */ -int filerwlongreadlock(filerwlock *fl); - -/* Given the lock cluster fl, it unlocks all its elements */ -int filerwlongunlock(filerwlock *fl); diff --git a/libical/src/libical/ical.h b/libical/src/libical/ical.h deleted file mode 100644 index d0f33cd1a1..0000000000 --- a/libical/src/libical/ical.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: ical.h - CREATOR: eric 20 March 1999 - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is ical.h - -======================================================================*/ - -#ifndef ICAL_H -#define ICAL_H - -#include "icalversion.h" -#include "icalenums.h" -#include "icalvalue.h" -#include "icalparameter.h" -#include "icalproperty.h" -#include "icalcomponent.h" -#include "icaltypes.h" -#include "icalparser.h" -#include "icalmemory.h" -#include "icalerror.h" -#include "icalrestriction.h" - -#endif /* !ICAL_H */ - - - diff --git a/libical/src/libical/icalcomponent.c b/libical/src/libical/icalcomponent.c deleted file mode 100644 index bd2b13189c..0000000000 --- a/libical/src/libical/icalcomponent.c +++ /dev/null @@ -1,782 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalcomponent.c - CREATOR: eric 28 April 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalcomponent.c - -======================================================================*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "ical.h" -#include "pvl.h" /* "Pointer-to-void list" */ -#include /* for malloc */ -#include /* for va_list, etc */ -#include -#include "icalerror.h" -#include -#include /* for fprintf */ -#include "icalmemory.h" -#include "icalenums.h" - -#define MAX_TMP 1024 - - -/* icalproperty functions that only components get to use */ -void icalproperty_set_parent(icalproperty* property, - icalcomponent* component); - -icalcomponent* icalproperty_get_parent(icalproperty* property); - - - -struct icalcomponent_impl -{ - char id[5]; - icalcomponent_kind kind; - char* x_name; - pvl_list properties; - pvl_elem property_iterator; - pvl_list components; - pvl_elem component_iterator; - icalcomponent* parent; -}; - -void icalcomponent_add_children(struct icalcomponent_impl *impl,va_list args) -{ - void* vp; - - while((vp = va_arg(args, void*)) != 0) { - - assert (icalcomponent_isa_component(vp) != 0 || - icalproperty_isa_property(vp) != 0 ) ; - - if (icalcomponent_isa_component(vp) != 0 ){ - - icalcomponent_add_component((icalcomponent*)impl, - (icalcomponent*)vp); - - } else if (icalproperty_isa_property(vp) != 0 ){ - - icalcomponent_add_property((icalcomponent*)impl, - (icalproperty*)vp); - } - } -} - -icalcomponent* -icalcomponent_new_impl (icalcomponent_kind kind) -{ - struct icalcomponent_impl* comp; - - if ( ( comp = (struct icalcomponent_impl*) - malloc(sizeof(struct icalcomponent_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - strcpy(comp->id,"comp"); - - comp->kind = kind; - comp->properties = pvl_newlist(); - comp->property_iterator = 0; - comp->components = pvl_newlist(); - comp->component_iterator = 0; - comp->x_name = 0; - comp->parent = 0; - - return comp; -} - -icalcomponent* -icalcomponent_new (icalcomponent_kind kind) -{ - return (icalcomponent*)icalcomponent_new_impl(kind); -} - -icalcomponent* -icalcomponent_vanew (icalcomponent_kind kind, ...) -{ - va_list args; - - struct icalcomponent_impl *impl = icalcomponent_new_impl(kind); - - if (impl == 0){ - return 0; - } - - va_start(args,kind); - icalcomponent_add_children(impl, args); - va_end(args); - - return (icalcomponent*) impl; -} - -icalcomponent* icalcomponent_new_from_string(char* str) -{ - icalcomponent_kind kind; - - icalerror_check_arg_rz( (str!=0), "str"); - - kind = icalenum_string_to_component_kind(str); - - if (kind == ICAL_NO_COMPONENT){ - return 0; - } - - return icalcomponent_new(kind); -} - -icalcomponent* icalcomponent_new_clone(icalcomponent* component) -{ - struct icalcomponent_impl *old = (struct icalcomponent_impl*)component; - struct icalcomponent_impl *new; - icalproperty *p; - icalcomponent *c; - - icalerror_check_arg_rv( (component!=0), "component"); - - new = icalcomponent_new_impl(old->kind); - - if (new == 0){ - return 0; - } - - - for(p = icalcomponent_get_first_property(old,ICAL_ANY_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(old,ICAL_ANY_PROPERTY)){ - - icalcomponent_add_property(new,icalproperty_new_clone(p)); - } - - - for(c = icalcomponent_get_first_component(old,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(old,ICAL_ANY_COMPONENT)){ - - icalcomponent_add_component(new,icalcomponent_new_clone(c)); - } - - return new; - -} - - -void -icalcomponent_free (icalcomponent* component) -{ - icalproperty* prop; - icalcomponent* comp; - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - - icalerror_check_arg_rv( (component!=0), "component"); - -#ifdef ICAL_FREE_ON_LIST_IS_ERROR - icalerror_assert( (c->parent ==0),"Tried to free a component that is still attached to a parent component"); -#else - if(c->parent != 0){ - return; - } -#endif - - if(component != 0 ){ - - while( (prop=pvl_pop(c->properties)) != 0){ - assert(prop != 0); - icalproperty_set_parent(prop,0); - icalproperty_free(prop); - } - - pvl_free(c->properties); - - while( (comp=pvl_data(pvl_head(c->components))) != 0){ - assert(comp!=0); - icalcomponent_remove_component(component,comp); - icalcomponent_free(comp); - } - - pvl_free(c->components); - - if (c->x_name != 0) { - free(c->x_name); - } - - c->kind = ICAL_NO_COMPONENT; - c->properties = 0; - c->property_iterator = 0; - c->components = 0; - c->component_iterator = 0; - c->x_name = 0; - c->id[0] = 'X'; - - free(c); - } -} - -char* -icalcomponent_as_ical_string (icalcomponent* component) -{ - char* buf, *out_buf; - char* tmp_buf; - size_t buf_size = 1024; - char* buf_ptr = 0; - -#ifdef ICAL_UNIX_NEWLINE - char newline[] = "\n"; -#else - char newline[] = "\r\n"; -#endif - - icalcomponent *c; - icalproperty *p; - icalcomponent_kind kind = icalcomponent_isa(component); - - char* kind_string; - - buf = icalmemory_new_buffer(buf_size); - buf_ptr = buf; - - icalerror_check_arg_rz( (component!=0), "component"); - icalerror_check_arg_rz( (kind!=ICAL_NO_COMPONENT), "component kind is ICAL_NO_COMPONENT"); - - kind_string = icalenum_component_kind_to_string(kind); - - icalerror_check_arg_rz( (kind_string!=0),"Unknown kind of component"); - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:"); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); - - - for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY)){ - - tmp_buf = icalproperty_as_ical_string(p); - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); - } - - - for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ - - tmp_buf = icalcomponent_as_ical_string(c); - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); - - } - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:"); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, - icalenum_component_kind_to_string(kind)); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); - - out_buf = icalmemory_tmp_copy(buf); - free(buf); - - return out_buf; -} - - -int -icalcomponent_is_valid (icalcomponent* component) -{ - struct icalcomponent_impl *impl = (struct icalcomponent_impl *)component; - - - if ( (strcmp(impl->id,"comp") == 0) && - impl->kind != ICAL_NO_COMPONENT){ - return 1; - } else { - return 0; - } - -} - - -icalcomponent_kind -icalcomponent_isa (icalcomponent* component) -{ - struct icalcomponent_impl *impl = (struct icalcomponent_impl *)component; - icalerror_check_arg_rz( (component!=0), "component"); - - if(component != 0) - { - return impl->kind; - } - - return ICAL_NO_COMPONENT; -} - - -int -icalcomponent_isa_component (void* component) -{ - struct icalcomponent_impl *impl = (struct icalcomponent_impl *)component; - - icalerror_check_arg_rz( (component!=0), "component"); - - if (strcmp(impl->id,"comp") == 0) { - return 1; - } else { - return 0; - } - -} - -int icalcomponent_property_sorter(void *a, void *b) -{ - icalproperty_kind kinda, kindb; - char *ksa, *ksb; - - kinda = icalproperty_isa((icalproperty*)a); - kindb = icalproperty_isa((icalproperty*)b); - - ksa = icalenum_property_kind_to_string(kinda); - ksb = icalenum_property_kind_to_string(kindb); - - return strcmp(ksa,ksb); -} - - -void -icalcomponent_add_property (icalcomponent* component, icalproperty* property) -{ - struct icalcomponent_impl *impl; - - icalerror_check_arg_rv( (component!=0), "component"); - icalerror_check_arg_rv( (property!=0), "property"); - - impl = (struct icalcomponent_impl*)component; - - icalerror_assert( (!icalproperty_get_parent(property)),"The property has already been added to a component. Remove the property with icalcomponent_remove_property before calling icalcomponent_add_property"); - - icalproperty_set_parent(property,component); - -#ifdef ICAL_INSERT_ORDERED - pvl_insert_ordered(impl->properties, - icalcomponent_property_sorter,property); -#else - pvl_push(impl->properties,property); -#endif - -} - - -void -icalcomponent_remove_property (icalcomponent* component, icalproperty* property) -{ - struct icalcomponent_impl *impl; - pvl_elem itr, next_itr; - struct icalproperty_impl *pimpl; - - icalerror_check_arg_rv( (component!=0), "component"); - icalerror_check_arg_rv( (property!=0), "property"); - - impl = (struct icalcomponent_impl*)component; - - pimpl = (struct icalproperty_impl*)property; - - icalerror_assert( (icalproperty_get_parent(property)),"The property is not a member of a component"); - - - for( itr = pvl_head(impl->properties); - itr != 0; - itr = next_itr) - { - next_itr = pvl_next(itr); - - if( pvl_data(itr) == (void*)property ){ - - if (impl->property_iterator == itr){ - impl->property_iterator = pvl_next(itr); - } - - pvl_remove( impl->properties, itr); - icalproperty_set_parent(property,0); - } - } -} - -int -icalcomponent_count_properties (icalcomponent* component, icalproperty_kind kind) -{ - int count=0; - icalproperty *p; - icalerror_check_arg_rz( (component!=0), "component"); - - for(p = icalcomponent_get_first_property(component,kind); - p != 0; - p = icalcomponent_get_next_property(component,kind)){ - - count++; - } - - - return count; - -} - -icalproperty* icalcomponent_get_current_property (icalcomponent* component) -{ - - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - icalerror_check_arg_rz( (component!=0),"component"); - - if ((c->property_iterator==0)){ - return 0; - } - - return (icalproperty*) pvl_data(c->property_iterator); - -} - -icalproperty* -icalcomponent_get_first_property (icalcomponent* component, icalproperty_kind kind) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - icalerror_check_arg_rz( (component!=0),"component"); - - for( c->property_iterator = pvl_head(c->properties); - c->property_iterator != 0; - c->property_iterator = pvl_next(c->property_iterator)) { - - icalproperty *p = (icalproperty*) pvl_data(c->property_iterator); - - if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) { - - return p; - } - } - return 0; -} - -icalproperty* -icalcomponent_get_next_property (icalcomponent* component, icalproperty_kind kind) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - icalerror_check_arg_rz( (component!=0),"component"); - - if (c->property_iterator == 0){ - return 0; - } - - for( c->property_iterator = pvl_next(c->property_iterator); - c->property_iterator != 0; - c->property_iterator = pvl_next(c->property_iterator)) { - - icalproperty *p = (icalproperty*) pvl_data(c->property_iterator); - - if (icalproperty_isa(p) == kind || kind == ICAL_ANY_PROPERTY) { - - return p; - } - } - - return 0; -} - - -icalproperty** -icalcomponent_get_properties (icalcomponent* component, icalproperty_kind kind); - - -void -icalcomponent_add_component (icalcomponent* parent, icalcomponent* child) -{ - struct icalcomponent_impl *impl, *cimpl; - - icalerror_check_arg_rv( (parent!=0), "parent"); - icalerror_check_arg_rv( (child!=0), "child"); - - impl = (struct icalcomponent_impl*)parent; - cimpl = (struct icalcomponent_impl*)child; - - icalerror_assert( (cimpl->parent ==0),"The child component has already been added to a parent component. Remove the component with icalcomponent_remove_componenet before calling icalcomponent_add_component"); - - cimpl->parent = parent; - - pvl_push(impl->components,child); -} - - -void -icalcomponent_remove_component (icalcomponent* parent, icalcomponent* child) -{ - struct icalcomponent_impl *impl,*cimpl; - pvl_elem itr, next_itr; - - icalerror_check_arg_rv( (parent!=0), "parent"); - icalerror_check_arg_rv( (child!=0), "child"); - - impl = (struct icalcomponent_impl*)parent; - cimpl = (struct icalcomponent_impl*)child; - - for( itr = pvl_head(impl->components); - itr != 0; - itr = next_itr) - { - next_itr = pvl_next(itr); - - if( pvl_data(itr) == (void*)child ){ - - if (impl->component_iterator == itr){ - /* impl->component_iterator = pvl_next(itr);*/ - } - pvl_remove( impl->components, itr); - cimpl->parent = 0; - } - } -} - - -int -icalcomponent_count_components (icalcomponent* component, icalcomponent_kind kind) -{ - int count=0; - icalcomponent *c; - icalerror_check_arg_rz( (component!=0), "component"); - - for(c = icalcomponent_get_first_component(component,kind); - c != 0; - c = icalcomponent_get_next_component(component,kind)){ - - count++; - } - - - return count; -} - -icalcomponent* -icalcomponent_get_current_component(icalcomponent* component) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - - icalerror_check_arg_rz( (component!=0),"component"); - - if (c->component_iterator == 0){ - return 0; - } - - return (icalcomponent*) pvl_data(c->component_iterator); -} - -icalcomponent* -icalcomponent_get_first_component (icalcomponent* component, - icalcomponent_kind kind) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - - icalerror_check_arg_rz( (component!=0),"component"); - - for( c->component_iterator = pvl_head(c->components); - c->component_iterator != 0; - c->component_iterator = pvl_next(c->component_iterator)) { - - icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator); - - if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) { - - return p; - } - } - - return 0; -} - - -icalcomponent* -icalcomponent_get_next_component (icalcomponent* component, icalcomponent_kind kind) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - - icalerror_check_arg_rz( (component!=0),"component"); - - if (c->component_iterator == 0){ - return 0; - } - - for( c->component_iterator = pvl_next(c->component_iterator); - c->component_iterator != 0; - c->component_iterator = pvl_next(c->component_iterator)) { - - icalcomponent *p = (icalcomponent*) pvl_data(c->component_iterator); - - if (icalcomponent_isa(p) == kind || kind == ICAL_ANY_COMPONENT) { - - return p; - } - } - - return 0; -} - - -icalproperty** -icalcomponent_get_component (icalcomponent* component, icalproperty_kind kind); - - -int icalcomponent_count_errors(icalcomponent* component) -{ - int errors = 0; - icalproperty *p; - icalcomponent *c; - - for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY)){ - - if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) - { - errors++; - } - } - - for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ - - errors += icalcomponent_count_errors(c); - - } - - return errors; -} - - -void icalcomponent_strip_errors(icalcomponent* component) -{ - icalproperty *p, *next_p; - icalcomponent *c; - - for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); - p != 0; - p = next_p){ - - next_p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY); - - if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) - { - icalcomponent_remove_property(component,p); - } - } - - for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ - - icalcomponent_strip_errors(c); - } -} - - -void icalcomponent_convert_errors(icalcomponent* component) -{ - icalproperty *p, *next_p; - icalcomponent *c; - - for(p = icalcomponent_get_first_property(component,ICAL_ANY_PROPERTY); - p != 0; - p = next_p){ - - next_p = icalcomponent_get_next_property(component,ICAL_ANY_PROPERTY); - - if(icalproperty_isa(p) == ICAL_XLICERROR_PROPERTY) - { - struct icalreqstattype rst; - char tmp[MAX_TMP]; - icalparameter *param = icalproperty_get_first_parameter - (p,ICAL_XLICERRORTYPE_PARAMETER); - - rst.code = ICAL_UNKNOWN_STATUS; - rst.desc = 0; - - switch(icalparameter_get_xlicerrortype(param)){ - - case ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR: { - rst.code = ICAL_3_2_INVPARAM_STATUS; - break; - } - case ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR: { - rst.code = ICAL_3_3_INVPARAMVAL_STATUS; - break; - } - case ICAL_XLICERRORTYPE_PROPERTYPARSEERROR: { - rst.code = ICAL_3_0_INVPROPNAME_STATUS; - break; - } - case ICAL_XLICERRORTYPE_VALUEPARSEERROR: { - rst.code = ICAL_3_1_INVPROPVAL_STATUS; - break; - } - case ICAL_XLICERRORTYPE_COMPONENTPARSEERROR: { - rst.code = ICAL_3_4_INVCOMP_STATUS; - break; - } - - default: { - } - } - if (rst.code != ICAL_UNKNOWN_STATUS){ - - rst.debug = icalproperty_get_xlicerror(p); - icalcomponent_add_property(component, - icalproperty_new_requeststatus( - icalreqstattype_as_string(rst) - ) - ); - - icalcomponent_remove_property(component,p); - } - } - } - - for(c = icalcomponent_get_first_component(component,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(component,ICAL_ANY_COMPONENT)){ - - icalcomponent_convert_errors(c); - } -} - - -icalcomponent* icalcomponent_get_parent(icalcomponent* component) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - - return c->parent; -} - -void icalcomponent_set_parent(icalcomponent* component, icalcomponent* parent) -{ - struct icalcomponent_impl *c = (struct icalcomponent_impl*)component; - - c->parent = parent; -} - - diff --git a/libical/src/libical/icalcomponent.h b/libical/src/libical/icalcomponent.h deleted file mode 100644 index 8d9f22ca76..0000000000 --- a/libical/src/libical/icalcomponent.h +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalcomponent.h - CREATOR: eric 20 March 1999 - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalcomponent.h - -======================================================================*/ - -#ifndef ICALCOMPONENT_H -#define ICALCOMPONENT_H - -#include "icalproperty.h" -#include "icalvalue.h" -#include "icalenums.h" /* defines icalcomponent_kind */ - -typedef void icalcomponent; - -icalcomponent* icalcomponent_new(icalcomponent_kind kind); -icalcomponent* icalcomponent_new_clone(icalcomponent* component); -icalcomponent* icalcomponent_new_from_string(char* str); -icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...); -void icalcomponent_free(icalcomponent* component); - -char* icalcomponent_as_ical_string(icalcomponent* component); - -int icalcomponent_is_valid(icalcomponent* component); - -icalcomponent_kind icalcomponent_isa(icalcomponent* component); - -int icalcomponent_isa_component (void* component); - -/* - * Working with properties - */ - -void icalcomponent_add_property(icalcomponent* component, - icalproperty* property); - -void icalcomponent_remove_property(icalcomponent* component, - icalproperty* property); - -int icalcomponent_count_properties(icalcomponent* component, - icalproperty_kind kind); - -/* Iterate through the properties */ -icalproperty* icalcomponent_get_current_property(icalcomponent* component); - -icalproperty* icalcomponent_get_first_property(icalcomponent* component, - icalproperty_kind kind); -icalproperty* icalcomponent_get_next_property(icalcomponent* component, - icalproperty_kind kind); - -/* Return a null-terminated array of icalproperties*/ - -icalproperty** icalcomponent_get_properties(icalcomponent* component, - icalproperty_kind kind); - - -/* - * Working with components - */ - - -void icalcomponent_add_component(icalcomponent* parent, - icalcomponent* child); - -void icalcomponent_remove_component(icalcomponent* parent, - icalcomponent* child); - -int icalcomponent_count_components(icalcomponent* component, - icalcomponent_kind kind); - -/* Iterate through components */ -icalcomponent* icalcomponent_get_current_component (icalcomponent* component); - -icalcomponent* icalcomponent_get_first_component(icalcomponent* component, - icalcomponent_kind kind); -icalcomponent* icalcomponent_get_next_component(icalcomponent* component, - icalcomponent_kind kind); - -/* Return a null-terminated array of icalproperties*/ -icalproperty** icalcomponent_get_component(icalcomponent* component, - icalproperty_kind kind); - -/* Working with embedded error properties */ - -int icalcomponent_count_errors(icalcomponent* component); - -/* Remove all X-LIC-ERROR properties*/ -void icalcomponent_strip_errors(icalcomponent* component); - -/* Convert some X-LIC-ERROR properties into RETURN-STATUS properties*/ -void icalcomponent_convert_errors(icalcomponent* component); - -/* Internal operations. You don't see these... */ -icalcomponent* icalcomponent_get_parent(icalcomponent* component); -void icalcomponent_set_parent(icalcomponent* component, - icalcomponent* parent); - -#endif /* !ICALCOMPONENT_H */ - - - diff --git a/libical/src/libical/icalenums.c b/libical/src/libical/icalenums.c deleted file mode 100644 index 7f0aae6a0e..0000000000 --- a/libical/src/libical/icalenums.c +++ /dev/null @@ -1,615 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalenum.c - CREATOR: eric 29 April 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalenum.c - - ======================================================================*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "icalenums.h" - -struct icalproperty_kind_map { - icalproperty_kind kind; - char name[20]; -}; - -static struct icalproperty_kind_map property_map[] = -{ - { ICAL_ACTION_PROPERTY, "ACTION"}, - { ICAL_ATTACH_PROPERTY, "ATTACH"}, - { ICAL_ATTENDEE_PROPERTY, "ATTENDEE"}, - { ICAL_CALSCALE_PROPERTY, "CALSCALE"}, - { ICAL_CATEGORIES_PROPERTY, "CATEGORIES"}, - { ICAL_CLASS_PROPERTY, "CLASS"}, - { ICAL_COMMENT_PROPERTY, "COMMENT"}, - { ICAL_COMPLETED_PROPERTY, "COMPLETED"}, - { ICAL_CONTACT_PROPERTY, "CONTACT"}, - { ICAL_CREATED_PROPERTY, "CREATED"}, - { ICAL_DESCRIPTION_PROPERTY, "DESCRIPTION"}, - { ICAL_DTEND_PROPERTY, "DTEND"}, - { ICAL_DTSTAMP_PROPERTY, "DTSTAMP"}, - { ICAL_DTSTART_PROPERTY, "DTSTART"}, - { ICAL_DUE_PROPERTY, "DUE"}, - { ICAL_DURATION_PROPERTY, "DURATION"}, - { ICAL_EXDATE_PROPERTY, "EXDATE"}, - { ICAL_EXRULE_PROPERTY, "EXRULE"}, - { ICAL_FREEBUSY_PROPERTY, "FREEBUSY"}, - { ICAL_GEO_PROPERTY, "GEO"}, - { ICAL_LASTMODIFIED_PROPERTY, "LAST-MODIFIED"}, - { ICAL_LOCATION_PROPERTY, "LOCATION"}, - { ICAL_METHOD_PROPERTY, "METHOD"}, - { ICAL_ORGANIZER_PROPERTY, "ORGANIZER"}, - { ICAL_PERCENTCOMPLETE_PROPERTY, "PERCENT-COMPLETE"}, - { ICAL_PRIORITY_PROPERTY, "PRIORITY"}, - { ICAL_PRODID_PROPERTY, "PRODID"}, - { ICAL_RDATE_PROPERTY, "RDATE"}, - { ICAL_RECURRENCEID_PROPERTY, "RECURRENCE-ID"}, - { ICAL_RELATEDTO_PROPERTY, "RELATED-TO"}, - { ICAL_REPEAT_PROPERTY, "REPEAT"}, - { ICAL_REQUESTSTATUS_PROPERTY, "REQUEST-STATUS"}, - { ICAL_RESOURCES_PROPERTY, "RESOURCES"}, - { ICAL_RRULE_PROPERTY, "RRULE"}, - { ICAL_SEQUENCE_PROPERTY, "SEQUENCE"}, - { ICAL_STATUS_PROPERTY, "STATUS"}, - { ICAL_SUMMARY_PROPERTY, "SUMMARY"}, - { ICAL_TRANSP_PROPERTY, "TRANSP"}, - { ICAL_TRIGGER_PROPERTY, "TRIGGER"}, - { ICAL_TZID_PROPERTY, "TZID"}, - { ICAL_TZNAME_PROPERTY, "TZNAME"}, - { ICAL_TZOFFSETFROM_PROPERTY, "TZOFFSETFROM"}, - { ICAL_TZOFFSETTO_PROPERTY, "TZOFFSETTO"}, - { ICAL_TZURL_PROPERTY, "TZURL"}, - { ICAL_UID_PROPERTY, "UID"}, - { ICAL_URL_PROPERTY, "URL"}, - { ICAL_VERSION_PROPERTY, "VERSION"}, - { ICAL_X_PROPERTY,"X_PROPERTY"}, - - /* CAP Object Properties */ - - { ICAL_SCOPE_PROPERTY, "SCOPE"}, - { ICAL_MAXRESULTS_PROPERTY, "MAXRESULTS"}, - { ICAL_MAXRESULTSSIZE_PROPERTY, "MAXRESULTSSIZE"}, - { ICAL_QUERY_PROPERTY, "QUERY" }, - { ICAL_QUERYNAME_PROPERTY, "QUERYNAME" }, - { ICAL_TARGET_PROPERTY, "TARGET"}, - - /* libical private properties */ - { ICAL_XLICERROR_PROPERTY,"X-LIC-ERROR"}, - { ICAL_XLICCLUSTERCOUNT_PROPERTY,"X-LIC-CLUSTERCOUNT"}, - - /* End of the list */ - { ICAL_NO_PROPERTY, ""} -}; - - -char* icalenum_property_kind_to_string(icalproperty_kind kind) -{ - int i; - - for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { - if (property_map[i].kind == kind) { - return property_map[i].name; - } - } - - return 0; - -} - -icalproperty_kind icalenum_string_to_property_kind(char* string) -{ - int i; - - if (string ==0 ) { - return ICAL_NO_PROPERTY; - } - - for (i=0; property_map[i].kind != ICAL_NO_PROPERTY; i++) { - if (strcmp(property_map[i].name, string) == 0) { - return property_map[i].kind; - } - } - - return ICAL_NO_PROPERTY; -} - - - - -struct icalparameter_kind_map { - icalparameter_kind kind; - char name[20]; -}; - -static struct icalparameter_kind_map parameter_map[] = -{ - { ICAL_ALTREP_PARAMETER, "ALTREP"}, - { ICAL_CN_PARAMETER, "CN"}, - { ICAL_CUTYPE_PARAMETER, "CUTYPE"}, - { ICAL_DELEGATEDFROM_PARAMETER, "DELEGATED-FROM"}, - { ICAL_DELEGATEDTO_PARAMETER, "DELEGATED-TO"}, - { ICAL_DIR_PARAMETER, "DIR"}, - { ICAL_ENCODING_PARAMETER, "ENCODING"}, - { ICAL_FBTYPE_PARAMETER, "FBTYPE"}, - { ICAL_FMTTYPE_PARAMETER, "FMTTYPE"}, - { ICAL_LANGUAGE_PARAMETER, "LANGUAGE"}, - { ICAL_MEMBER_PARAMETER, "MEMBER"}, - { ICAL_PARTSTAT_PARAMETER, "PARTSTAT"}, - { ICAL_RANGE_PARAMETER, "RANGE"}, - { ICAL_RELATED_PARAMETER, "RELATED"}, - { ICAL_RELTYPE_PARAMETER, "RELTYPE"}, - { ICAL_ROLE_PARAMETER, "ROLE"}, - { ICAL_RSVP_PARAMETER, "RSVP"}, - { ICAL_SENTBY_PARAMETER, "SENT-BY"}, - { ICAL_TZID_PARAMETER, "TZID"}, - { ICAL_VALUE_PARAMETER, "VALUE"}, - - /* CAP parameters */ - - /* libical private parameters */ - { ICAL_XLICERRORTYPE_PARAMETER, "X-LIC-ERRORTYPE"}, - { ICAL_XLICCOMPARETYPE_PARAMETER, "X-LIC-COMPARETYPE"}, - - /* End of list */ - { ICAL_NO_PARAMETER, ""} -}; - -char* icalenum_parameter_kind_to_string(icalparameter_kind kind) -{ - int i; - - for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { - if (parameter_map[i].kind == kind) { - return parameter_map[i].name; - } - } - - return 0; - -} - -icalparameter_kind icalenum_string_to_parameter_kind(char* string) -{ - int i; - - if (string ==0 ) { - return ICAL_NO_PARAMETER; - } - - for (i=0; parameter_map[i].kind != ICAL_NO_PARAMETER; i++) { - if (strcmp(parameter_map[i].name, string) == 0) { - return parameter_map[i].kind; - } - } - - return ICAL_NO_PARAMETER; -} - -struct icalvalue_kind_map { - icalvalue_kind kind; - char name[20]; -}; - -static struct icalvalue_kind_map value_map[] = -{ - { ICAL_BINARY_VALUE, "BINARY"}, - { ICAL_BOOLEAN_VALUE, "BOOLEAN"}, - { ICAL_CALADDRESS_VALUE, "CAL-ADDRESS"}, - { ICAL_DATE_VALUE, "DATE"}, - { ICAL_DATETIME_VALUE, "DATE-TIME"}, - { ICAL_DURATION_VALUE, "DURATION"}, - { ICAL_FLOAT_VALUE, "FLOAT"}, - { ICAL_INTEGER_VALUE, "INTEGER"}, - { ICAL_PERIOD_VALUE, "PERIOD"}, - { ICAL_RECUR_VALUE, "RECUR"}, - { ICAL_TEXT_VALUE, "TEXT"}, - { ICAL_TIME_VALUE, "TIME"}, - { ICAL_URI_VALUE, "URI"}, - { ICAL_UTCOFFSET_VALUE, "UTC-OFFSET"}, - { ICAL_METHOD_VALUE, "METHOD"}, /* Not an RFC2445 type */ - { ICAL_GEO_VALUE, "FLOAT"}, /* Not an RFC2445 type */ - { ICAL_ATTACH_VALUE, "XATTACH"}, /* Not an RFC2445 type */ - { ICAL_DATETIMEDATE_VALUE, "XDATETIMEDATE"}, /* Not an RFC2445 type */ - { ICAL_DATETIMEPERIOD_VALUE, "XDATETIMEPERIOD"}, /* Not an RFC2445 type */ - { ICAL_QUERY_VALUE, "QUERY"}, - { ICAL_NO_VALUE, ""}, -}; - -char* icalenum_value_kind_to_string(icalvalue_kind kind) -{ - int i; - - for (i=0; value_map[i].kind != ICAL_NO_VALUE; i++) { - if (value_map[i].kind == kind) { - return value_map[i].name; - } - } - - return 0; - -} - -icalvalue_kind icalenum_value_kind_by_prop(icalproperty_kind kind) -{ - - return ICAL_NO_VALUE; -} - - -struct icalcomponent_kind_map { - icalcomponent_kind kind; - char name[20]; -}; - - - -static struct icalcomponent_kind_map component_map[] = -{ - { ICAL_VEVENT_COMPONENT, "VEVENT" }, - { ICAL_VTODO_COMPONENT, "VTODO" }, - { ICAL_VJOURNAL_COMPONENT, "VJOURNAL" }, - { ICAL_VCALENDAR_COMPONENT, "VCALENDAR" }, - { ICAL_VFREEBUSY_COMPONENT, "VFREEBUSY" }, - { ICAL_VTIMEZONE_COMPONENT, "VTIMEZONE" }, - { ICAL_VALARM_COMPONENT, "VALARM" }, - { ICAL_XSTANDARD_COMPONENT, "STANDARD" }, /*These are part of RFC2445 */ - { ICAL_XDAYLIGHT_COMPONENT, "DAYLIGHT" }, /*but are not really components*/ - { ICAL_X_COMPONENT, "X" }, - { ICAL_VSCHEDULE_COMPONENT, "SCHEDULE" }, - - /* CAP components */ - { ICAL_VQUERY_COMPONENT, "VQUERY" }, - { ICAL_VCAR_COMPONENT, "VCAR" }, - { ICAL_VCOMMAND_COMPONENT, "VCOMMAND" }, - - /* libical private components */ - { ICAL_XLICINVALID_COMPONENT, "X-LIC-UNKNOWN" }, - { ICAL_ANY_COMPONENT, "ANY" }, - { ICAL_XROOT_COMPONENT, "XROOT" }, - - /* End of list */ - { ICAL_NO_COMPONENT, "" }, -}; - -char* icalenum_component_kind_to_string(icalcomponent_kind kind) -{ - int i; - - for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { - if (component_map[i].kind == kind) { - return component_map[i].name; - } - } - - return 0; - -} - -icalcomponent_kind icalenum_string_to_component_kind(char* string) -{ - int i; - - if (string ==0 ) { - return ICAL_NO_COMPONENT; - } - - for (i=0; component_map[i].kind != ICAL_NO_COMPONENT; i++) { - if (strcmp(component_map[i].name, string) == 0) { - return component_map[i].kind; - } - } - - return ICAL_NO_COMPONENT; -} - -struct icalproperty_kind_value_map { - icalproperty_kind prop; - icalvalue_kind value; -}; - -static struct icalproperty_kind_value_map propval_map[] = -{ - { ICAL_CALSCALE_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_METHOD_PROPERTY, ICAL_METHOD_VALUE }, - { ICAL_PRODID_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_VERSION_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_CATEGORIES_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_CLASS_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_COMMENT_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_DESCRIPTION_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_LOCATION_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_PERCENTCOMPLETE_PROPERTY, ICAL_INTEGER_VALUE }, - { ICAL_PRIORITY_PROPERTY, ICAL_INTEGER_VALUE }, - { ICAL_RESOURCES_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_STATUS_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_SUMMARY_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_COMPLETED_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_FREEBUSY_PROPERTY, ICAL_PERIOD_VALUE }, - { ICAL_TRANSP_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_TZNAME_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_TZOFFSETFROM_PROPERTY, ICAL_UTCOFFSET_VALUE }, - { ICAL_TZOFFSETTO_PROPERTY, ICAL_UTCOFFSET_VALUE }, - { ICAL_TZURL_PROPERTY, ICAL_URI_VALUE }, - { ICAL_TZID_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_ATTENDEE_PROPERTY, ICAL_CALADDRESS_VALUE }, - { ICAL_CONTACT_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_ORGANIZER_PROPERTY, ICAL_CALADDRESS_VALUE }, - { ICAL_RELATEDTO_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_URL_PROPERTY, ICAL_URI_VALUE }, - { ICAL_UID_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_EXRULE_PROPERTY, ICAL_RECUR_VALUE }, - { ICAL_RRULE_PROPERTY, ICAL_RECUR_VALUE }, - { ICAL_ACTION_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_REPEAT_PROPERTY, ICAL_INTEGER_VALUE }, - { ICAL_CREATED_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_DTSTAMP_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_LASTMODIFIED_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_SEQUENCE_PROPERTY, ICAL_INTEGER_VALUE }, - { ICAL_X_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_REQUESTSTATUS_PROPERTY, ICAL_STRING_VALUE }, - { ICAL_ATTACH_PROPERTY, ICAL_URI_VALUE }, - { ICAL_GEO_PROPERTY, ICAL_GEO_VALUE }, - { ICAL_DTEND_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_DUE_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_DTSTART_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_RECURRENCEID_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_EXDATE_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_RDATE_PROPERTY, ICAL_DATETIME_VALUE }, - { ICAL_TRIGGER_PROPERTY, ICAL_DURATION_VALUE }, - { ICAL_DURATION_PROPERTY, ICAL_DURATION_VALUE }, - - /* CAP properties */ - { ICAL_SCOPE_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_MAXRESULTS_PROPERTY, ICAL_INTEGER_VALUE}, - { ICAL_MAXRESULTSSIZE_PROPERTY, ICAL_INTEGER_VALUE}, - { ICAL_QUERY_PROPERTY, ICAL_QUERY_VALUE }, - { ICAL_QUERYNAME_PROPERTY, ICAL_TEXT_VALUE }, - { ICAL_TARGET_PROPERTY, ICAL_CALADDRESS_VALUE }, - - - /* libical private properties */ - { ICAL_XLICERROR_PROPERTY,ICAL_TEXT_VALUE}, - { ICAL_XLICCLUSTERCOUNT_PROPERTY,ICAL_INTEGER_VALUE}, - - - /* End of list */ - { ICAL_NO_PROPERTY, ICAL_NO_PROPERTY} -}; - - -icalvalue_kind icalenum_property_kind_to_value_kind(icalproperty_kind kind) -{ - int i; - - for (i=0; propval_map[i].value != ICAL_NO_VALUE; i++) { - if ( propval_map[i].prop == kind ) { - return propval_map[i].value; - } - } - - return ICAL_NO_VALUE; -} - -struct {icalrecurrencetype_weekday wd; char * str; } -wd_map[] = { - {ICAL_SUNDAY_WEEKDAY,"SU"}, - {ICAL_MONDAY_WEEKDAY,"MO"}, - {ICAL_TUESDAY_WEEKDAY,"TU"}, - {ICAL_WEDNESDAY_WEEKDAY,"WE"}, - {ICAL_THURSDAY_WEEKDAY,"TH"}, - {ICAL_FRIDAY_WEEKDAY,"FR"}, - {ICAL_SATURDAY_WEEKDAY,"SA"}, - {ICAL_NO_WEEKDAY,0} -}; - -char* icalenum_weekday_to_string(icalrecurrencetype_weekday kind) -{ - int i; - - for (i=0; wd_map[i].wd != ICAL_NO_WEEKDAY; i++) { - if ( wd_map[i].wd == kind) { - return wd_map[i].str; - } - } - - return 0; -} - - -struct { - icalrecurrencetype_frequency kind; - char* str; -} freq_map[] = { - {ICAL_SECONDLY_RECURRENCE,"SECONDLY"}, - {ICAL_MINUTELY_RECURRENCE,"MINUTELY"}, - {ICAL_HOURLY_RECURRENCE,"HOURLY"}, - {ICAL_DAILY_RECURRENCE,"DAILY"}, - {ICAL_WEEKLY_RECURRENCE,"WEEKLY"}, - {ICAL_MONTHLY_RECURRENCE,"MONTHLY"}, - {ICAL_YEARLY_RECURRENCE,"YEARLY"}, - {ICAL_NO_RECURRENCE,0} -}; - -char* icalenum_recurrence_to_string(icalrecurrencetype_frequency kind) -{ - int i; - - for (i=0; freq_map[i].kind != ICAL_NO_RECURRENCE ; i++) { - if ( freq_map[i].kind == kind ) { - return freq_map[i].str; - } - } - return 0; -} - - -struct { - icalrecurrencetype_frequency kind; - int major; - int minor; - char* str; -} status_map[] = { - {ICAL_2_0_SUCCESS_STATUS, 2,0,"Success."}, - {ICAL_2_1_FALLBACK_STATUS, 2,1,"Success but fallback taken on one or more property values."}, - {ICAL_2_2_IGPROP_STATUS, 2,2,"Success, invalid property ignored."}, - {ICAL_2_3_IGPARAM_STATUS, 2,3,"Success, invalid property parameter ignored."}, - {ICAL_2_4_IGXPROP_STATUS, 2,4,"Success, unknown non-standard property ignored."}, - {ICAL_2_5_IGXPARAM_STATUS, 2,5,"Success, unknown non standard property value ignored."}, - {ICAL_2_6_IGCOMP_STATUS, 2,6,"Success, invalid calendar component ignored."}, - {ICAL_2_7_FORWARD_STATUS, 2,7,"Success, request forwarded to Calendar User."}, - {ICAL_2_8_ONEEVENT_STATUS, 2,8,"Success, repeating event ignored. Scheduled as a single component."}, - {ICAL_2_9_TRUNC_STATUS, 2,9,"Success, truncated end date time to date boundary."}, - {ICAL_2_10_ONETODO_STATUS, 2,10,"Success, repeating VTODO ignored. Scheduled as a single VTODO."}, - {ICAL_2_11_TRUNCRRULE_STATUS, 2,11,"Success, unbounded RRULE clipped at some finite number of instances "}, - {ICAL_3_0_INVPROPNAME_STATUS, 3,0,"Invalid property name."}, - {ICAL_3_1_INVPROPVAL_STATUS, 3,1,"Invalid property value."}, - {ICAL_3_2_INVPARAM_STATUS, 3,2,"Invalid property parameter."}, - {ICAL_3_3_INVPARAMVAL_STATUS, 3,3,"Invalid property parameter value."}, - {ICAL_3_4_INVCOMP_STATUS, 3,4,"Invalid calendar component."}, - {ICAL_3_5_INVTIME_STATUS, 3,5,"Invalid date or time."}, - {ICAL_3_6_INVRULE_STATUS, 3,6,"Invalid rule."}, - {ICAL_3_7_INVCU_STATUS, 3,7,"Invalid Calendar User."}, - {ICAL_3_8_NOAUTH_STATUS, 3,8,"No authority."}, - {ICAL_3_9_BADVERSION_STATUS, 3,9,"Unsupported version."}, - {ICAL_3_10_TOOBIG_STATUS, 3,10,"Request entity too large."}, - {ICAL_3_11_MISSREQCOMP_STATUS, 3,11,"Required component or property missing."}, - {ICAL_3_12_UNKCOMP_STATUS, 3,12,"Unknown component or property found."}, - {ICAL_3_13_BADCOMP_STATUS, 3,13,"Unsupported component or property found"}, - {ICAL_3_14_NOCAP_STATUS, 3,14,"Unsupported capability."}, - {ICAL_4_0_BUSY_STATUS, 4,0,"Event conflict. Date/time is busy."}, - {ICAL_5_0_MAYBE_STATUS, 5,0,"Request MAY supported."}, - {ICAL_5_1_UNAVAIL_STATUS, 5,1,"Service unavailable."}, - {ICAL_5_2_NOSERVICE_STATUS, 5,2,"Invalid calendar service."}, - {ICAL_5_3_NOSCHED_STATUS, 5,3,"No scheduling support for user."}, - {ICAL_UNKNOWN_STATUS, 0,0,"Error: Unknown request status"} -}; - - -char* icalenum_reqstat_desc(icalrequeststatus stat) -{ - - int i; - - for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { - if ( status_map[i].kind == stat) { - return status_map[i].str; - } - } - - return 0; -} - - -short icalenum_reqstat_major(icalrequeststatus stat) -{ - int i; - - for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { - if ( status_map[i].kind == stat) { - return status_map[i].major; - } - } - return -1; -} - -short icalenum_reqstat_minor(icalrequeststatus stat) -{ - int i; - - for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { - if ( status_map[i].kind == stat) { - return status_map[i].minor; - } - } - return -1; -} - - -icalrequeststatus icalenum_num_to_reqstat(short major, short minor) -{ - int i; - - for (i=0; status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { - if ( status_map[i].major == major && status_map[i].minor == minor) { - return status_map[i].kind; - } - } - return 0; -} - - - -struct {icalproperty_method method; char* str;} method_map[] = { - {ICAL_METHOD_PUBLISH,"PUBLISH"}, - {ICAL_METHOD_REQUEST,"REQUEST"}, - {ICAL_METHOD_REPLY,"REPLY"}, - {ICAL_METHOD_ADD,"ADD"}, - {ICAL_METHOD_CANCEL,"CANCEL"}, - {ICAL_METHOD_REFRESH,"REFRESH"}, - {ICAL_METHOD_COUNTER,"COUNTER"}, - {ICAL_METHOD_DECLINECOUNTER,"DECLINECOUNTER"}, - /* CAP Methods */ - {ICAL_METHOD_CREATE,"CREATE"}, - {ICAL_METHOD_READ,"READ"}, - {ICAL_METHOD_RESPONSE,"RESPONSE"}, - {ICAL_METHOD_MOVE,"MOVE"}, - {ICAL_METHOD_MODIFY,"MODIFY"}, - {ICAL_METHOD_GENERATEUID,"GENERATEUID"}, - {ICAL_METHOD_DELETE,"DELETE"}, - {ICAL_METHOD_NONE,"NONE"} -}; - - -char* icalenum_method_to_string(icalproperty_method method) -{ - int i; - - for (i=0; method_map[i].method != ICAL_METHOD_NONE; i++) { - if ( method_map[i].method == method) { - return method_map[i].str; - } - } - - return method_map[i].str; /* should be ICAL_METHOD_NONE */ -} - -icalproperty_method icalenum_string_to_method(char* str) -{ - int i; - - while(*str == ' '){ - str++; - } - - - for (i=0; method_map[i].method != ICAL_METHOD_NONE; i++) { - if ( strcmp(method_map[i].str, str) == 0) { - return method_map[i].method; - } - } - - return ICAL_METHOD_NONE; -} diff --git a/libical/src/libical/icalenums.h b/libical/src/libical/icalenums.h deleted file mode 100644 index ff7cee486e..0000000000 --- a/libical/src/libical/icalenums.h +++ /dev/null @@ -1,466 +0,0 @@ -/* -*- Mode: C -*-*/ -/*====================================================================== - FILE: icalenums.h - - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalenums.h - - Contributions from: - Graham Davison (g.m.davison@computer.org) - -======================================================================*/ - -#ifndef ICALENUMS_H -#define ICALENUMS_H - - - -/*********************************************************************** - * Component enumerations -**********************************************************************/ - -typedef enum icalcomponent_kind { - ICAL_NO_COMPONENT, - ICAL_ANY_COMPONENT, /* Used to select all components*/ - ICAL_XROOT_COMPONENT, - ICAL_XATTACH_COMPONENT, /* MIME attached data, returned by parser. */ - ICAL_VEVENT_COMPONENT, - ICAL_VTODO_COMPONENT, - ICAL_VJOURNAL_COMPONENT, - ICAL_VCALENDAR_COMPONENT, - ICAL_VFREEBUSY_COMPONENT, - ICAL_VALARM_COMPONENT, - ICAL_XAUDIOALARM_COMPONENT, - ICAL_XDISPLAYALARM_COMPONENT, - ICAL_XEMAILALARM_COMPONENT, - ICAL_XPROCEDUREALARM_COMPONENT, - ICAL_VTIMEZONE_COMPONENT, - ICAL_XSTANDARD_COMPONENT, - ICAL_XDAYLIGHT_COMPONENT, - ICAL_X_COMPONENT, - ICAL_VSCHEDULE_COMPONENT, - ICAL_VQUERY_COMPONENT, - ICAL_VCAR_COMPONENT, - ICAL_VCOMMAND_COMPONENT, - ICAL_XLICINVALID_COMPONENT -} icalcomponent_kind; - -/*********************************************************************** - * Property Enumerations -**********************************************************************/ - -typedef enum icalproperty_kind { - ICAL_ANY_PROPERTY = 0, /* This must be the first enum, for iteration */ - ICAL_CALSCALE_PROPERTY, - ICAL_METHOD_PROPERTY, - ICAL_PRODID_PROPERTY, - ICAL_VERSION_PROPERTY, - ICAL_ATTACH_PROPERTY, - ICAL_CATEGORIES_PROPERTY, - ICAL_CLASS_PROPERTY, - ICAL_COMMENT_PROPERTY, - ICAL_DESCRIPTION_PROPERTY, - ICAL_GEO_PROPERTY, - ICAL_LOCATION_PROPERTY, - ICAL_PERCENTCOMPLETE_PROPERTY, - ICAL_PRIORITY_PROPERTY, - ICAL_RESOURCES_PROPERTY, - ICAL_STATUS_PROPERTY, - ICAL_SUMMARY_PROPERTY, - ICAL_COMPLETED_PROPERTY, - ICAL_DTEND_PROPERTY, - ICAL_DUE_PROPERTY, - ICAL_DTSTART_PROPERTY, - ICAL_DURATION_PROPERTY, - ICAL_FREEBUSY_PROPERTY, - ICAL_TRANSP_PROPERTY, - ICAL_TZID_PROPERTY, - ICAL_TZNAME_PROPERTY, - ICAL_TZOFFSETFROM_PROPERTY, - ICAL_TZOFFSETTO_PROPERTY, - ICAL_TZURL_PROPERTY, - ICAL_ATTENDEE_PROPERTY, - ICAL_CONTACT_PROPERTY, - ICAL_ORGANIZER_PROPERTY, - ICAL_RECURRENCEID_PROPERTY, - ICAL_RELATEDTO_PROPERTY, - ICAL_URL_PROPERTY, - ICAL_UID_PROPERTY, - ICAL_EXDATE_PROPERTY, - ICAL_EXRULE_PROPERTY, - ICAL_RDATE_PROPERTY, - ICAL_RRULE_PROPERTY, - ICAL_ACTION_PROPERTY, - ICAL_REPEAT_PROPERTY, - ICAL_TRIGGER_PROPERTY, - ICAL_CREATED_PROPERTY, - ICAL_DTSTAMP_PROPERTY, - ICAL_LASTMODIFIED_PROPERTY, - ICAL_SEQUENCE_PROPERTY, - ICAL_REQUESTSTATUS_PROPERTY, - ICAL_X_PROPERTY, - - /* CAP Properties */ - ICAL_SCOPE_PROPERTY, - ICAL_MAXRESULTS_PROPERTY, - ICAL_MAXRESULTSSIZE_PROPERTY, - ICAL_QUERY_PROPERTY, - ICAL_QUERYNAME_PROPERTY, - ICAL_TARGET_PROPERTY, - - /* libical private properties */ - ICAL_XLICERROR_PROPERTY, - ICAL_XLICCLUSTERCOUNT_PROPERTY, - - ICAL_NO_PROPERTY /* This must be the last enum, for iteration */ - -} icalproperty_kind; - -/*********************************************************************** - * Enumerations for the values of properties - ***********************************************************************/ - -typedef enum icalproperty_method { - ICAL_METHOD_PUBLISH, - ICAL_METHOD_REQUEST, - ICAL_METHOD_REPLY, - ICAL_METHOD_ADD, - ICAL_METHOD_CANCEL, - ICAL_METHOD_REFRESH, - ICAL_METHOD_COUNTER, - ICAL_METHOD_DECLINECOUNTER, - /* CAP Methods */ - ICAL_METHOD_CREATE, - ICAL_METHOD_READ, - ICAL_METHOD_RESPONSE, - ICAL_METHOD_MOVE, - ICAL_METHOD_MODIFY, - ICAL_METHOD_GENERATEUID, - ICAL_METHOD_DELETE, - ICAL_METHOD_NONE -} icalproperty_method ; - -typedef enum icalproperty_transp { - ICAL_TRANSP_OPAQUE, - ICAL_TRANS_TRANSPARENT -} icalproperty_trans; - -typedef enum icalproperty_calscale { - ICAL_CALSCALE_GREGORIAN -} icalproperty_calscale ; - - -typedef enum icalproperty_class { - ICAL_CLASS_PUBLIC, - ICAL_CLASS_PRIVATE, - ICAL_CLASS_CONFIDENTIAL, - ICAL_CLASS_XNAME -} icalproperty_class; - - -typedef enum icalproperty_status { - ICAL_STATUS_TENTATIVE, - ICAL_STATUS_CONFIRMED, - ICAL_STATUS_CANCELLED, /* CANCELED? SIC */ - ICAL_STATUS_NEEDSACTION, - ICAL_STATUS_COMPLETED, - ICAL_STATUS_INPROCESS, - ICAL_STATUS_DRAFT, - ICAL_STATUS_FINAL -} icalproperty_status; - -typedef enum icalproperty_action { - ICAL_ACTION_AUDIO, - ICAL_ACTION_DISPLAY, - ICAL_ACTION_EMAIL, - ICAL_ACTION_PROCEDURE, - ICAL_ACTION_XNAME -} icalproperty_action; - -/*********************************************************************** - * Value enumerations -**********************************************************************/ - -typedef enum icalvalue_kind { - ICAL_NO_VALUE, - ICAL_ATTACH_VALUE, /* Non-Standard*/ - ICAL_BINARY_VALUE, - ICAL_BOOLEAN_VALUE, - ICAL_CALADDRESS_VALUE, - ICAL_DATE_VALUE, - ICAL_DATETIME_VALUE, - ICAL_DATETIMEDATE_VALUE, /* Non-Standard */ - ICAL_DATETIMEPERIOD_VALUE, /* Non-Standard */ - ICAL_DURATION_VALUE, - ICAL_FLOAT_VALUE, - ICAL_GEO_VALUE, /* Non-Standard */ - ICAL_INTEGER_VALUE, - ICAL_METHOD_VALUE, /* Non-Standard */ - ICAL_PERIOD_VALUE, - ICAL_RECUR_VALUE, - ICAL_STRING_VALUE, /* Non-Standard */ - ICAL_TEXT_VALUE, - ICAL_TIME_VALUE, - ICAL_TRIGGER_VALUE, /* Non-Standard */ - ICAL_URI_VALUE, - ICAL_UTCOFFSET_VALUE, - ICAL_QUERY_VALUE, - ICAL_XNAME_VALUE -} icalvalue_kind; - - -/*********************************************************************** - * Parameter Enumerations - **********************************************************************/ - - -typedef enum icalparameter_kind { - ICAL_NO_PARAMETER, - ICAL_ANY_PARAMETER, - ICAL_ALTREP_PARAMETER, /* DQUOTE uri DQUOTE */ - ICAL_CN_PARAMETER, /* text */ - ICAL_CUTYPE_PARAMETER, /*INDIVIDUAL, GROUP, RESOURCE,ROOM,UNKNOWN, x-name*/ - ICAL_DELEGATEDFROM_PARAMETER, /* *("," DQUOTE cal-address DQUOTE) */ - ICAL_DELEGATEDTO_PARAMETER, /* *("," DQUOTE cal-address DQUOTE) */ - ICAL_DIR_PARAMETER, /* DQUOTE uri DQUOTE */ - ICAL_ENCODING_PARAMETER, /* *BIT, BASE64, x-name */ - ICAL_FMTTYPE_PARAMETER, /* registered MINE content type */ - ICAL_FBTYPE_PARAMETER, /* FREE, BUSY, BUSY-UNAVAILABLE, BUSY-TENTATIVE,x-name */ - ICAL_LANGUAGE_PARAMETER, /* text from RFC 1766 */ - ICAL_MEMBER_PARAMETER, /* DQUOTE cal-address DQUOTE */ - ICAL_PARTSTAT_PARAMETER, /* NEEDS-ACTION, ACCEPTED, DECLINED, TENTATIVE, DELEGATED, x-name */ - ICAL_RANGE_PARAMETER, /* THISANDPRIOR, THISANDFUTURE */ - ICAL_RELATED_PARAMETER, /* START, END */ - ICAL_RELTYPE_PARAMETER, /* PARENT, CHILD, SIBLING,x-name */ - ICAL_ROLE_PARAMETER, /* CHAIR, REQ_PARTICIPANT, OPT_PARTICIPANT, NON_PARTICIPANT, x-name */ - ICAL_RSVP_PARAMETER, /* TRUE. FALSE */ - ICAL_SENTBY_PARAMETER, /* DQUOTE uri DQUOTE */ - ICAL_TZID_PARAMETER, /* [tzidprefix] paramtext CRLF */ - ICAL_VALUE_PARAMETER, /* BINARY, BOOLEAN, CAL_ADDRESS, DATE, DATE-TIME, DURATION, FLOAT, INTEGER, PERIOD, RECUR, TEXT, TIME, UTC_OFFSET, x-name */ - ICAL_XLICERRORTYPE_PARAMETER, /*ICAL_XLICERROR_PARSE_ERROR,ICAL_XLICERROR_INVALID_ITIP*/ - ICAL_XLICCOMPARETYPE_PARAMETER, /**/ - ICAL_X_PARAMETER /* text */ -} icalparameter_kind; - -typedef enum icalparameter_cutype { - ICAL_CUTYPE_INDIVIDUAL, - ICAL_CUTYPE_GROUP, - ICAL_CUTYPE_RESOURCE, - ICAL_CUTYPE_ROOM, - ICAL_CUTYPE_UNKNOWN, - ICAL_CUTYPE_XNAME -} icalparameter_cutype; - - -typedef enum icalparameter_encoding { - ICAL_ENCODING_8BIT, - ICAL_ENCODING_BASE64, - ICAL_ENCODING_XNAME -} icalparameter_encoding; - -typedef enum icalparameter_fbtype { - ICAL_FBTYPE_FREE, - ICAL_FBTYPE_BUSY, - ICAL_FBTYPE_BUSYUNAVAILABLE, - ICAL_FBTYPE_BUSYTENTATIVE, - ICAL_FBTYPE_XNAME -} icalparameter_fbtype; - -typedef enum icalparameter_partstat { - ICAL_PARTSTAT_NEEDSACTION, - ICAL_PARTSTAT_ACCEPTED, - ICAL_PARTSTAT_DECLINED, - ICAL_PARTSTAT_TENTATIVE, - ICAL_PARTSTAT_DELEGATED, - ICAL_PARTSTAT_COMPLETED, - ICAL_PARTSTAT_INPROCESS, - ICAL_PARTSTAT_XNAME -} icalparameter_partstat; - -typedef enum icalparameter_range { - ICAL_RANGE_THISANDPRIOR, - ICAL_RANGE_THISANDFUTURE -} icalparameter_range; - -typedef enum icalparameter_related { - ICAL_RELATED_START, - ICAL_RELATED_END -} icalparameter_related; - -typedef enum icalparameter_reltype { - ICAL_RELTYPE_PARENT, - ICAL_RELTYPE_CHILD, - ICAL_RELTYPE_SIBLING, - ICAL_RELTYPE_XNAME -} icalparameter_reltype; - -typedef enum icalparameter_role { - ICAL_ROLE_CHAIR, - ICAL_ROLE_REQPARTICIPANT, - ICAL_ROLE_OPTPARTICIPANT, - ICAL_ROLE_NONPARTICIPANT, - ICAL_ROLE_XNAME -} icalparameter_role; - -typedef enum icalparameter_xlicerrortype { - ICAL_XLICERRORTYPE_COMPONENTPARSEERROR, - ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR, - ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR, - ICAL_XLICERRORTYPE_PROPERTYPARSEERROR, - ICAL_XLICERRORTYPE_VALUEPARSEERROR, - ICAL_XLICERRORTYPE_INVALIDITIP -} icalparameter_xlicerrortype; - -typedef enum icalparameter_xliccomparetype { - ICAL_XLICCOMPARETYPE_EQUAL=0, - ICAL_XLICCOMPARETYPE_LESS=-1, - ICAL_XLICCOMPARETYPE_LESSEQUAL=2, - ICAL_XLICCOMPARETYPE_GREATER=1, - ICAL_XLICCOMPARETYPE_GREATEREQUAL=3, - ICAL_XLICCOMPARETYPE_NOTEQUAL=4, - ICAL_XLICCOMPARETYPE_REGEX=5 -} icalparameter_xliccomparetype; - -typedef enum icalparameter_value { - ICAL_VALUE_XNAME = ICAL_XNAME_VALUE, - ICAL_VALUE_BINARY = ICAL_BINARY_VALUE, - ICAL_VALUE_BOOLEAN = ICAL_BOOLEAN_VALUE, - ICAL_VALUE_CALADDRESS = ICAL_CALADDRESS_VALUE, - ICAL_VALUE_DATE = ICAL_DATE_VALUE, - ICAL_VALUE_DATETIME = ICAL_DATETIME_VALUE, - ICAL_VALUE_DURATION = ICAL_DURATION_VALUE, - ICAL_VALUE_FLOAT = ICAL_FLOAT_VALUE, - ICAL_VALUE_INTEGER = ICAL_INTEGER_VALUE, - ICAL_VALUE_PERIOD = ICAL_PERIOD_VALUE, - ICAL_VALUE_RECUR = ICAL_RECUR_VALUE, - ICAL_VALUE_TEXT = ICAL_TEXT_VALUE, - ICAL_VALUE_TIME = ICAL_TIME_VALUE, - ICAL_VALUE_UTCOFFSET = ICAL_UTCOFFSET_VALUE, - ICAL_VALUE_URI = ICAL_URI_VALUE, - ICAL_VALUE_ERROR = ICAL_NO_VALUE -} icalparameter_value; - -/*********************************************************************** - * Recurrances -**********************************************************************/ - - -typedef enum icalrecurrencetype_frequency -{ - ICAL_NO_RECURRENCE, - ICAL_SECONDLY_RECURRENCE, - ICAL_MINUTELY_RECURRENCE, - ICAL_HOURLY_RECURRENCE, - ICAL_DAILY_RECURRENCE, - ICAL_WEEKLY_RECURRENCE, - ICAL_MONTHLY_RECURRENCE, - ICAL_YEARLY_RECURRENCE -} icalrecurrencetype_frequency; - -typedef enum icalrecurrencetype_weekday -{ - ICAL_NO_WEEKDAY, - ICAL_SUNDAY_WEEKDAY, - ICAL_MONDAY_WEEKDAY, - ICAL_TUESDAY_WEEKDAY, - ICAL_WEDNESDAY_WEEKDAY, - ICAL_THURSDAY_WEEKDAY, - ICAL_FRIDAY_WEEKDAY, - ICAL_SATURDAY_WEEKDAY -} icalrecurrencetype_weekday; - -enum { - ICAL_RECURRENCE_ARRAY_MAX = 0x7f7f, - ICAL_RECURRENCE_ARRAY_MAX_BYTE = 0x7f -}; - - -char* icalenum_recurrence_to_string(icalrecurrencetype_frequency kind); -char* icalenum_weekday_to_string(icalrecurrencetype_weekday kind); - -/*********************************************************************** - * Request Status codes - **********************************************************************/ - -typedef enum icalrequeststatus { - ICAL_UNKNOWN_STATUS, - ICAL_2_0_SUCCESS_STATUS, - ICAL_2_1_FALLBACK_STATUS, - ICAL_2_2_IGPROP_STATUS, - ICAL_2_3_IGPARAM_STATUS, - ICAL_2_4_IGXPROP_STATUS, - ICAL_2_5_IGXPARAM_STATUS, - ICAL_2_6_IGCOMP_STATUS, - ICAL_2_7_FORWARD_STATUS, - ICAL_2_8_ONEEVENT_STATUS, - ICAL_2_9_TRUNC_STATUS, - ICAL_2_10_ONETODO_STATUS, - ICAL_2_11_TRUNCRRULE_STATUS, - ICAL_3_0_INVPROPNAME_STATUS, - ICAL_3_1_INVPROPVAL_STATUS, - ICAL_3_2_INVPARAM_STATUS, - ICAL_3_3_INVPARAMVAL_STATUS, - ICAL_3_4_INVCOMP_STATUS, - ICAL_3_5_INVTIME_STATUS, - ICAL_3_6_INVRULE_STATUS, - ICAL_3_7_INVCU_STATUS, - ICAL_3_8_NOAUTH_STATUS, - ICAL_3_9_BADVERSION_STATUS, - ICAL_3_10_TOOBIG_STATUS, - ICAL_3_11_MISSREQCOMP_STATUS, - ICAL_3_12_UNKCOMP_STATUS, - ICAL_3_13_BADCOMP_STATUS, - ICAL_3_14_NOCAP_STATUS, - ICAL_4_0_BUSY_STATUS, - ICAL_5_0_MAYBE_STATUS, - ICAL_5_1_UNAVAIL_STATUS, - ICAL_5_2_NOSERVICE_STATUS, - ICAL_5_3_NOSCHED_STATUS -} icalrequeststatus; - - -char* icalenum_reqstat_desc(icalrequeststatus stat); -short icalenum_reqstat_major(icalrequeststatus stat); -short icalenum_reqstat_minor(icalrequeststatus stat); -icalrequeststatus icalenum_num_to_reqstat(short major, short minor); - -/*********************************************************************** - * Conversion functions -**********************************************************************/ - -char* icalenum_property_kind_to_string(icalproperty_kind kind); -icalproperty_kind icalenum_string_to_property_kind(char* string); - -char* icalenum_value_kind_to_string(icalvalue_kind kind); -icalvalue_kind icalenum_value_kind_by_prop(icalproperty_kind kind); - -char* icalenum_parameter_kind_to_string(icalparameter_kind kind); -icalparameter_kind icalenum_string_to_parameter_kind(char* string); - -char* icalenum_component_kind_to_string(icalcomponent_kind kind); -icalcomponent_kind icalenum_string_to_component_kind(char* string); - -icalvalue_kind icalenum_property_kind_to_value_kind(icalproperty_kind kind); - -char* icalenum_method_to_string(icalproperty_method); -icalproperty_method icalenum_string_to_method(char* string); - -#endif /* !ICALENUMS_H */ - - - diff --git a/libical/src/libical/icalerror.c b/libical/src/libical/icalerror.c deleted file mode 100644 index fb9e152b16..0000000000 --- a/libical/src/libical/icalerror.c +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalerror.c - CREATOR: eric 16 May 1999 - - $Id$ - $Locker$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalerror.c - - ======================================================================*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "icalerror.h" - -icalerrorenum icalerrno; - -int foo; -void icalerror_stop_here(void) -{ - foo++; /* Keep optimizers from removing routine */ -} - -void icalerror_crash_here(void) -{ - int *p=0; - *p = 1; - - assert( *p); -} - - -void icalerror_clear_errno() { - - icalerrno = ICAL_NO_ERROR; -} - -void icalerror_set_errno(icalerrorenum e) { - - icalerror_stop_here(); - icalerrno = e; -} - - -struct icalerror_string_map { - icalerrorenum error; - char name[160]; -}; - -static struct icalerror_string_map string_map[] = -{ - {ICAL_BADARG_ERROR,"Bad argumnet to function"}, - {ICAL_NEWFAILED_ERROR,"Failed to create a new object via a *_new() routine"}, - {ICAL_MALFORMEDDATA_ERROR,"An input string was not correctly formed"}, - {ICAL_PARSE_ERROR,"Failed to parse a part of an iCal componet"}, - {ICAL_INTERNAL_ERROR,"Random internal error. This indicates an error in the library code, not an error in use"}, - {ICAL_FILE_ERROR,"An operation on a file failed. Check errno for more detail."}, - {ICAL_ALLOCATION_ERROR,"Failed to allocate memory"}, - {ICAL_USAGE_ERROR,"The caller failed to properly sequence called to an object's interface"}, - {ICAL_NO_ERROR,"No error"}, - {ICAL_UNKNOWN_ERROR,"Unknown error type -- icalerror_strerror() was probably given bad input"} -}; - - -char* icalerror_strerror(icalerrorenum e) { - - int i; - - for (i=0; string_map[i].error != ICAL_UNKNOWN_ERROR; i++) { - if (string_map[i].error == e) { - return string_map[i].name; - } - } - - return string_map[i].name; /* Return string for ICAL_UNKNOWN_ERROR*/ - -} - - - diff --git a/libical/src/libical/icalerror.h b/libical/src/libical/icalerror.h deleted file mode 100644 index 124699c21b..0000000000 --- a/libical/src/libical/icalerror.h +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalerror.h - CREATOR: eric 09 May 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalerror.h - -======================================================================*/ - - -#ifndef ICALERROR_H -#define ICALERROR_H - -#include -#include /* For icalerror_warn() */ - -/* This routine is called before any error is triggered. It is called - by icalerror_set_errno, so it does not appear in all of the macros - below */ -void icalerror_stop_here(void); - -void icalerror_crash_here(void); - -#ifdef ICAL_ERRORS_ARE_FATAL -#undef NDEBUG -#endif - -#define icalerror_check_value_type(value,type); -#define icalerror_check_property_type(value,type); -#define icalerror_check_parameter_type(value,type); -#define icalerror_check_component_type(value,type); - -/* Assert with a message */ -#ifdef ICAL_ERRORS_ARE_FATAL - -#ifdef __GNUC__ -#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);icalerror_stop_here(); abort();} -#else /*__GNUC__*/ -#define icalerror_assert(test,message) if(!(test)){fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);icalerror_stop_here(); abort();} -#endif /*__GNUC__*/ -#else -#define icalerror_assert(test,message) -#endif - - -/* Check & abort if check fails */ -#ifdef ICAL_ERRORS_ARE_FATAL -#define icalerror_check_arg(test,arg) icalerror_stop_here();assert(test) -#else -#define icalerror_check_arg(test,arg) -#endif -/* Check & return void if check failes*/ - -#ifdef ICAL_ERRORS_ARE_FATAL -#define icalerror_check_arg_rv(test,arg) icalerror_stop_here();assert(test); -#else -#define icalerror_check_arg_rv(test,arg) if(!(test)) { icalerror_set_errno(ICAL_BADARG_ERROR); return; } -#endif - -/* Check & return 0 if check failes*/ -#ifdef ICAL_ERRORS_ARE_FATAL -#define icalerror_check_arg_rz(test,arg) icalerror_stop_here();assert(test); -#else -#define icalerror_check_arg_rz(test,arg) if(!(test)) {icalerror_set_errno(ICAL_BADARG_ERROR); return 0;} -#endif - - -/* Check & return an error if check failes*/ -#ifdef ICAL_ERRORS_ARE_FATAL -#define icalerror_check_arg_re(test,arg,error) icalerror_stop_here();assert(test); -#else -#define icalerror_check_arg_re(test,arg,error) if(!(test)) {icalerror_stop_here(); return error;} -#endif - - -/* Warning messages */ - -#ifdef ICAL_ERRORS_ARE_FATAL - -#ifdef __GNUC__ -#define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message); abort();} -#else /* __GNU_C__ */ -#define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message); abort();} -#endif /* __GNU_C__ */ - -#else /*ICAL_ERRORS_ARE_FATAL */ - -#ifdef __GNUC__ -#define icalerror_warn(message) {fprintf(stderr,"%s(), %s:%d: %s\n",__FUNCTION__,__FILE__,__LINE__,message);} -#else /* __GNU_C__ */ -#define icalerror_warn(message) {fprintf(stderr,"%s:%d: %s\n",__FILE__,__LINE__,message);} -#endif /* __GNU_C__ */ - -#endif /*ICAL_ERRORS_ARE_FATAL*/ - -typedef enum icalerrorenum { - - ICAL_BADARG_ERROR, - ICAL_NEWFAILED_ERROR, - ICAL_MALFORMEDDATA_ERROR, - ICAL_PARSE_ERROR, - ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */ - ICAL_FILE_ERROR, - ICAL_ALLOCATION_ERROR, - ICAL_USAGE_ERROR, - ICAL_NO_ERROR, - ICAL_MULTIPLEINCLUSION_ERROR, - ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/ - -} icalerrorenum; - -extern icalerrorenum icalerrno; - - -void icalerror_clear_errno(); -void icalerror_set_errno(icalerrorenum); - -char* icalerror_strerror(icalerrorenum e); - - -#endif /* !ICALERROR_H */ - - - diff --git a/libical/src/libical/icalirip.h b/libical/src/libical/icalirip.h deleted file mode 100644 index eefbca35c5..0000000000 --- a/libical/src/libical/icalirip.h +++ /dev/null @@ -1,108 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalirip.h - CREATOR: eric 20 April 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalirip.h - -======================================================================*/ - - -#ifndef ICALIRIP_H -#define ICALIRIP_H - -#include "ical.h" - -typedef void* icalirip; - -/********************** Server (Reciever) Interfaces *************************/ - -icalirip* icalirip_new(); -void* icalirip_free(); - -/* Protocol functions */ -char* icalirip_process_request(icalirip* irip, char* string); - -/* iRIP server stubs */ -typedef struct icalirip_response { - char code[6]; - char caluid[1024]; - void* result; -} icalirip_response; - -icalirip_response icalirip_timedout_stub(icalirip* irip); -icalirip_response icalirip_authenticate_stub(icalirip* irip, char* mechanism, char* data); -icalirip_response icalirip_sendata_stub(icalirip* irip, unsigned int time); -icalirip_response icalirip_dequeue_stub(icalirip* irip, char* caluid,unsigned int time); -icalirip_response icalirip_recipient_stub(icalirip* irip, char* address, unsigned int time); -icalirip_response icalirip_switch_stub(icalirip* irip); -icalirip_response icalirip_disconnect_stub(icalirip* irip); -icalirip_response icalirip_unknown_stub(icalirip* irip, char* command); - -/* icalirip_set_stubs makes the module use function pointers to -instead of the above stubs. The set_stubs procedure will requires the -user to link another library with defined the above stubs and -re-directs the call to the appropriate pointer to function. */ - -typedef struct icalirip_stubs { - - void(*authenticate_stub)(icalirip* irip, char* mechanism, char* data); - void (*sendata_stub)(icalirip* irip, unsigned int time); - void (*dequeue_stub)(icalirip* irip, char* caluid, unsigned int time); - void (*recipient_stub)(icalirip* irip, char* address, unsigned int time); - void (*switch_stub)(icalirip* irip); - void (*disconnect_stub)(); - void (*unknown_stub)(icalirip* irip, char* command, char** data); - -} icalirip_stubs; - -void icalirip_set_stubs(icalirip* irip, icalirip_stubs* stubs); - -/********************** Client (Sender) Interfaces **************************/ - -/* Client API */ -icalirip_response icalirip_abort(icalirip* irip); -icalirip_response icalirip_authenticate(icalirip* irip, char* mechanism, char* data); -icalirip_response icalirip_capability(icalirip* irip); -icalirip_response icalirip_continue(icalirip* irip, unsigned int time); -icalirip_response icalirip_sendata(icalirip* irip, icalcomponent* comp, unsigned int time); -icalirip_response icalirip_recipient(icalirip* irip, char* address, unsigned int time); -icalirip_response icalirip_dequeue(icalirip* irip, char* address, unsigned int time); -icalirip_response icalirip_switch(icalirip* irip); -icalirip_response icalirip_disconnect(); -icalirip_response icalirip_unknown(icalirip* irip, char* command); - -/* client stubs */ -void icalirip_send_request(icalirip* irip,char* request); -char* icalirip_get_response(icalirip* irip); - -/********************** Configuration Interfaces **************************/ - -/* Configure capabilities */ -void icalirip_add_auth_mechanism(icalirip* irip, char* auth); -void icalirip_set_max_object_size(icalirip* irip, unsigned int size); -void icalirip_set_max_date(icalirip* irip, time_t time); -void icalirip_set_min_date(icalirip* irip, time_t time); - - -#endif /* !ICALIRIP_H */ - - - diff --git a/libical/src/libical/icalitip.output b/libical/src/libical/icalitip.output deleted file mode 100644 index 1218f89c74..0000000000 --- a/libical/src/libical/icalitip.output +++ /dev/null @@ -1,1698 +0,0 @@ - - -Terminals which are not used: - - FLOATNUMBER - STRING - EOL - CHARACTER - COLON - TIMESEPERATOR - BIT8 - ACCEPTED - ADD - AUDIO - BASE64 - BINARY - BOOLEAN - BUSY - BUSYTENTATIVE - BUSYUNAVAILABLE - CALADDRESS - CANCEL - CANCELLED - CHAIR - CHILD - COMPLETED - CONFIDENTIAL - CONFIRMED - COUNTER - DATE - DATETIME - DECLINECOUNTER - DECLINED - DELEGATED - DISPLAY - DRAFT - DURATION - EMAIL - END - FINAL - FLOAT - FREE - GREGORIAN - GROUP - INDIVIDUAL - INPROCESS - INTEGER - NEEDSACTION - NONPARTICIPANT - OPAQUE - OPTPARTICIPANT - PARENT - PERIOD - PRIVATE - PROCEDURE - PUBLIC - PUBLISH - RECUR - REFRESH - REPLY - REQPARTICIPANT - REQUEST - RESOURCE - ROOM - SIBLING - START - TENTATIVE - TEXT - THISANDFUTURE - THISANDPRIOR - TIME - TRANSPAENT - UNKNOWN - UTCOFFSET - XNAME - ALTREP - CN - CUTYPE - DAYLIGHT - DIR - ENCODING - EVENT - FBTYPE - FMTTYPE - LANGUAGE - MEMBER - PARTSTAT - RANGE - RELATED - RELTYPE - ROLE - RSVP - SENTBY - STANDARD - URI - - - -Grammar -rule 1 value -> binary_value -rule 2 value -> boolean_value -rule 3 value -> date_value -rule 4 value -> datetime_value -rule 5 value -> duration_value -rule 6 value -> period_value -rule 7 value -> recur_value -rule 8 value -> utcoffset_value -rule 9 value -> error -rule 10 binary_value -> "unimplemented2" -rule 11 boolean_value -> TRUE -rule 12 boolean_value -> FALSE -rule 13 date_value -> DIGITS -rule 14 utc_char -> /* empty */ -rule 15 utc_char -> UTC_CHAR -rule 16 utc_char_b -> /* empty */ -rule 17 utc_char_b -> UTC_CHAR -rule 18 datetime_value -> DIGITS TIME_CHAR DIGITS utc_char -rule 19 dur_date -> dur_day -rule 20 dur_date -> dur_day dur_time -rule 21 dur_week -> DIGITS 'W' -rule 22 dur_time -> TIME_CHAR dur_hour -rule 23 dur_time -> TIME_CHAR dur_minute -rule 24 dur_time -> TIME_CHAR dur_second -rule 25 dur_hour -> DIGITS 'H' -rule 26 dur_hour -> DIGITS 'H' dur_minute -rule 27 dur_minute -> DIGITS 'M' -rule 28 dur_minute -> DIGITS 'M' dur_second -rule 29 dur_second -> DIGITS 'S' -rule 30 dur_day -> DIGITS 'D' -rule 31 dur_prefix -> /* empty */ -rule 32 dur_prefix -> '+' -rule 33 dur_prefix -> '-' -rule 34 duration_value -> dur_prefix 'P' dur_date -rule 35 duration_value -> dur_prefix 'P' dur_time -rule 36 duration_value -> dur_prefix 'P' dur_week -rule 37 period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b -rule 38 period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' duration_value -rule 39 recur_start -> FREQ EQUALS SECONDLY -rule 40 recur_start -> FREQ EQUALS MINUTELY -rule 41 recur_start -> FREQ EQUALS HOURLY -rule 42 recur_start -> FREQ EQUALS DAILY -rule 43 recur_start -> FREQ EQUALS WEEKLY -rule 44 recur_start -> FREQ EQUALS MONTHLY -rule 45 recur_start -> FREQ EQUALS YEARLY -rule 46 weekday -> SU -rule 47 weekday -> MO -rule 48 weekday -> TU -rule 49 weekday -> WE -rule 50 weekday -> TH -rule 51 weekday -> FR -rule 52 weekday -> SA -rule 53 weekday_list -> weekday -rule 54 weekday_list -> DIGITS weekday -rule 55 weekday_list -> weekday_list COMMA weekday -rule 56 recur_list -> DIGITS -rule 57 recur_list -> recur_list COMMA DIGITS -rule 58 recur_skip -> INTERVAL EQUALS DIGITS -rule 59 recur_skip -> WKST EQUALS SU -rule 60 recur_skip -> WKST EQUALS MO -rule 61 recur_skip -> WKST EQUALS TU -rule 62 recur_skip -> WKST EQUALS WE -rule 63 recur_skip -> WKST EQUALS TH -rule 64 recur_skip -> WKST EQUALS FR -rule 65 recur_skip -> WKST EQUALS SA -rule 66 recur_skip -> BYSECOND EQUALS recur_list -rule 67 recur_skip -> BYMINUTE EQUALS recur_list -rule 68 recur_skip -> BYHOUR EQUALS recur_list -rule 69 recur_skip -> BYDAY EQUALS weekday_list -rule 70 recur_skip -> BYMONTH EQUALS recur_list -rule 71 recur_skip -> BYMONTHDAY EQUALS recur_list -rule 72 recur_skip -> BYYEARDAY EQUALS recur_list -rule 73 recur_skip -> BYWEEKNO EQUALS recur_list -rule 74 recur_skip -> BYSETPOS EQUALS recur_list -rule 75 recur_skip -> UNTIL EQUALS datetime_value -rule 76 recur_skip -> UNTIL EQUALS date_value -rule 77 recur_skip -> COUNT EQUALS DIGITS -rule 78 recur_skip_list -> /* empty */ -rule 79 recur_skip_list -> recur_skip_list SEMICOLON recur_skip -rule 80 recur_value -> recur_start recur_skip_list -rule 81 plusminus -> '+' -rule 82 plusminus -> '-' -rule 83 utcoffset_value -> plusminus INTNUMBER INTNUMBER -rule 84 utcoffset_value -> plusminus INTNUMBER INTNUMBER INTNUMBER - -Terminals, with rules where they appear - -$ (-1) -'+' (43) 32 81 -'-' (45) 33 82 -'/' (47) 37 38 -'D' (68) 30 -'H' (72) 25 26 -'M' (77) 27 28 -'P' (80) 34 35 36 -'S' (83) 29 -'W' (87) 21 -error (256) 9 -DIGITS (257) 13 18 21 25 26 27 28 29 30 37 38 54 56 57 58 77 -INTNUMBER (258) 83 84 -FLOATNUMBER (259) -STRING (260) -EOL (261) -EQUALS (262) 39 40 41 42 43 44 45 58 59 60 61 62 63 64 65 66 67 68 - 69 70 71 72 73 74 75 76 77 -CHARACTER (263) -COLON (264) -COMMA (265) 55 57 -SEMICOLON (266) 79 -TIMESEPERATOR (267) -TRUE (268) 11 -FALSE (269) 12 -FREQ (270) 39 40 41 42 43 44 45 -BYDAY (271) 69 -BYHOUR (272) 68 -BYMINUTE (273) 67 -BYMONTH (274) 70 -BYMONTHDAY (275) 71 -BYSECOND (276) 66 -BYSETPOS (277) 74 -BYWEEKNO (278) 73 -BYYEARDAY (279) 72 -DAILY (280) 42 -MINUTELY (281) 40 -MONTHLY (282) 44 -SECONDLY (283) 39 -WEEKLY (284) 43 -HOURLY (285) 41 -YEARLY (286) 45 -INTERVAL (287) 58 -COUNT (288) 77 -UNTIL (289) 75 76 -WKST (290) 59 60 61 62 63 64 65 -MO (291) 47 60 -SA (292) 52 65 -SU (293) 46 59 -TU (294) 48 61 -WE (295) 49 62 -TH (296) 50 63 -FR (297) 51 64 -BIT8 (298) -ACCEPTED (299) -ADD (300) -AUDIO (301) -BASE64 (302) -BINARY (303) -BOOLEAN (304) -BUSY (305) -BUSYTENTATIVE (306) -BUSYUNAVAILABLE (307) -CALADDRESS (308) -CANCEL (309) -CANCELLED (310) -CHAIR (311) -CHILD (312) -COMPLETED (313) -CONFIDENTIAL (314) -CONFIRMED (315) -COUNTER (316) -DATE (317) -DATETIME (318) -DECLINECOUNTER (319) -DECLINED (320) -DELEGATED (321) -DISPLAY (322) -DRAFT (323) -DURATION (324) -EMAIL (325) -END (326) -FINAL (327) -FLOAT (328) -FREE (329) -GREGORIAN (330) -GROUP (331) -INDIVIDUAL (332) -INPROCESS (333) -INTEGER (334) -NEEDSACTION (335) -NONPARTICIPANT (336) -OPAQUE (337) -OPTPARTICIPANT (338) -PARENT (339) -PERIOD (340) -PRIVATE (341) -PROCEDURE (342) -PUBLIC (343) -PUBLISH (344) -RECUR (345) -REFRESH (346) -REPLY (347) -REQPARTICIPANT (348) -REQUEST (349) -RESOURCE (350) -ROOM (351) -SIBLING (352) -START (353) -TENTATIVE (354) -TEXT (355) -THISANDFUTURE (356) -THISANDPRIOR (357) -TIME (358) -TRANSPAENT (359) -UNKNOWN (360) -UTCOFFSET (361) -XNAME (362) -ALTREP (363) -CN (364) -CUTYPE (365) -DAYLIGHT (366) -DIR (367) -ENCODING (368) -EVENT (369) -FBTYPE (370) -FMTTYPE (371) -LANGUAGE (372) -MEMBER (373) -PARTSTAT (374) -RANGE (375) -RELATED (376) -RELTYPE (377) -ROLE (378) -RSVP (379) -SENTBY (380) -STANDARD (381) -URI (382) -TIME_CHAR (383) 18 22 23 24 37 38 -UTC_CHAR (384) 15 17 -"unimplemented2" (385) 10 - -Nonterminals, with rules where they appear - -value (141) - on left: 1 2 3 4 5 6 7 8 9 -binary_value (142) - on left: 10, on right: 1 -boolean_value (143) - on left: 11 12, on right: 2 -date_value (144) - on left: 13, on right: 3 76 -utc_char (145) - on left: 14 15, on right: 18 37 38 -utc_char_b (146) - on left: 16 17, on right: 37 -datetime_value (147) - on left: 18, on right: 4 75 -dur_date (148) - on left: 19 20, on right: 34 -dur_week (149) - on left: 21, on right: 36 -dur_time (150) - on left: 22 23 24, on right: 20 35 -dur_hour (151) - on left: 25 26, on right: 22 -dur_minute (152) - on left: 27 28, on right: 23 26 -dur_second (153) - on left: 29, on right: 24 28 -dur_day (154) - on left: 30, on right: 19 20 -dur_prefix (155) - on left: 31 32 33, on right: 34 35 36 -duration_value (156) - on left: 34 35 36, on right: 5 38 -period_value (157) - on left: 37 38, on right: 6 -recur_start (158) - on left: 39 40 41 42 43 44 45, on right: 80 -weekday (159) - on left: 46 47 48 49 50 51 52, on right: 53 54 55 -weekday_list (160) - on left: 53 54 55, on right: 55 69 -recur_list (161) - on left: 56 57, on right: 57 66 67 68 70 71 72 73 74 -recur_skip (162) - on left: 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 - 76 77, on right: 79 -recur_skip_list (163) - on left: 78 79, on right: 79 80 -recur_value (164) - on left: 80, on right: 7 -plusminus (165) - on left: 81 82, on right: 83 84 -utcoffset_value (166) - on left: 83 84, on right: 8 - - -state 0 - - error shift, and go to state 1 - DIGITS shift, and go to state 2 - TRUE shift, and go to state 3 - FALSE shift, and go to state 4 - FREQ shift, and go to state 5 - "unimplemented2" shift, and go to state 6 - '+' shift, and go to state 7 - '-' shift, and go to state 8 - - 'P' reduce using rule 31 (dur_prefix) - - value go to state 133 - binary_value go to state 9 - boolean_value go to state 10 - date_value go to state 11 - datetime_value go to state 12 - dur_prefix go to state 13 - duration_value go to state 14 - period_value go to state 15 - recur_start go to state 16 - recur_value go to state 17 - plusminus go to state 18 - utcoffset_value go to state 19 - - - -state 1 - - value -> error . (rule 9) - - $default reduce using rule 9 (value) - - - -state 2 - - date_value -> DIGITS . (rule 13) - datetime_value -> DIGITS . TIME_CHAR DIGITS utc_char (rule 18) - period_value -> DIGITS . TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) - period_value -> DIGITS . TIME_CHAR DIGITS utc_char '/' duration_value (rule 38) - - TIME_CHAR shift, and go to state 20 - - $default reduce using rule 13 (date_value) - - - -state 3 - - boolean_value -> TRUE . (rule 11) - - $default reduce using rule 11 (boolean_value) - - - -state 4 - - boolean_value -> FALSE . (rule 12) - - $default reduce using rule 12 (boolean_value) - - - -state 5 - - recur_start -> FREQ . EQUALS SECONDLY (rule 39) - recur_start -> FREQ . EQUALS MINUTELY (rule 40) - recur_start -> FREQ . EQUALS HOURLY (rule 41) - recur_start -> FREQ . EQUALS DAILY (rule 42) - recur_start -> FREQ . EQUALS WEEKLY (rule 43) - recur_start -> FREQ . EQUALS MONTHLY (rule 44) - recur_start -> FREQ . EQUALS YEARLY (rule 45) - - EQUALS shift, and go to state 21 - - - -state 6 - - binary_value -> "unimplemented2" . (rule 10) - - $default reduce using rule 10 (binary_value) - - - -state 7 - - dur_prefix -> '+' . (rule 32) - plusminus -> '+' . (rule 81) - - INTNUMBER reduce using rule 81 (plusminus) - $default reduce using rule 32 (dur_prefix) - - - -state 8 - - dur_prefix -> '-' . (rule 33) - plusminus -> '-' . (rule 82) - - INTNUMBER reduce using rule 82 (plusminus) - $default reduce using rule 33 (dur_prefix) - - - -state 9 - - value -> binary_value . (rule 1) - - $default reduce using rule 1 (value) - - - -state 10 - - value -> boolean_value . (rule 2) - - $default reduce using rule 2 (value) - - - -state 11 - - value -> date_value . (rule 3) - - $default reduce using rule 3 (value) - - - -state 12 - - value -> datetime_value . (rule 4) - - $default reduce using rule 4 (value) - - - -state 13 - - duration_value -> dur_prefix . 'P' dur_date (rule 34) - duration_value -> dur_prefix . 'P' dur_time (rule 35) - duration_value -> dur_prefix . 'P' dur_week (rule 36) - - 'P' shift, and go to state 22 - - - -state 14 - - value -> duration_value . (rule 5) - - $default reduce using rule 5 (value) - - - -state 15 - - value -> period_value . (rule 6) - - $default reduce using rule 6 (value) - - - -state 16 - - recur_value -> recur_start . recur_skip_list (rule 80) - - $default reduce using rule 78 (recur_skip_list) - - recur_skip_list go to state 23 - - - -state 17 - - value -> recur_value . (rule 7) - - $default reduce using rule 7 (value) - - - -state 18 - - utcoffset_value -> plusminus . INTNUMBER INTNUMBER (rule 83) - utcoffset_value -> plusminus . INTNUMBER INTNUMBER INTNUMBER (rule 84) - - INTNUMBER shift, and go to state 24 - - - -state 19 - - value -> utcoffset_value . (rule 8) - - $default reduce using rule 8 (value) - - - -state 20 - - datetime_value -> DIGITS TIME_CHAR . DIGITS utc_char (rule 18) - period_value -> DIGITS TIME_CHAR . DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) - period_value -> DIGITS TIME_CHAR . DIGITS utc_char '/' duration_value (rule 38) - - DIGITS shift, and go to state 25 - - - -state 21 - - recur_start -> FREQ EQUALS . SECONDLY (rule 39) - recur_start -> FREQ EQUALS . MINUTELY (rule 40) - recur_start -> FREQ EQUALS . HOURLY (rule 41) - recur_start -> FREQ EQUALS . DAILY (rule 42) - recur_start -> FREQ EQUALS . WEEKLY (rule 43) - recur_start -> FREQ EQUALS . MONTHLY (rule 44) - recur_start -> FREQ EQUALS . YEARLY (rule 45) - - DAILY shift, and go to state 26 - MINUTELY shift, and go to state 27 - MONTHLY shift, and go to state 28 - SECONDLY shift, and go to state 29 - WEEKLY shift, and go to state 30 - HOURLY shift, and go to state 31 - YEARLY shift, and go to state 32 - - - -state 22 - - duration_value -> dur_prefix 'P' . dur_date (rule 34) - duration_value -> dur_prefix 'P' . dur_time (rule 35) - duration_value -> dur_prefix 'P' . dur_week (rule 36) - - DIGITS shift, and go to state 33 - TIME_CHAR shift, and go to state 34 - - dur_date go to state 35 - dur_week go to state 36 - dur_time go to state 37 - dur_day go to state 38 - - - -state 23 - - recur_skip_list -> recur_skip_list . SEMICOLON recur_skip (rule 79) - recur_value -> recur_start recur_skip_list . (rule 80) - - SEMICOLON shift, and go to state 39 - - $default reduce using rule 80 (recur_value) - - - -state 24 - - utcoffset_value -> plusminus INTNUMBER . INTNUMBER (rule 83) - utcoffset_value -> plusminus INTNUMBER . INTNUMBER INTNUMBER (rule 84) - - INTNUMBER shift, and go to state 40 - - - -state 25 - - datetime_value -> DIGITS TIME_CHAR DIGITS . utc_char (rule 18) - period_value -> DIGITS TIME_CHAR DIGITS . utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) - period_value -> DIGITS TIME_CHAR DIGITS . utc_char '/' duration_value (rule 38) - - UTC_CHAR shift, and go to state 41 - - $default reduce using rule 14 (utc_char) - - utc_char go to state 42 - - - -state 26 - - recur_start -> FREQ EQUALS DAILY . (rule 42) - - $default reduce using rule 42 (recur_start) - - - -state 27 - - recur_start -> FREQ EQUALS MINUTELY . (rule 40) - - $default reduce using rule 40 (recur_start) - - - -state 28 - - recur_start -> FREQ EQUALS MONTHLY . (rule 44) - - $default reduce using rule 44 (recur_start) - - - -state 29 - - recur_start -> FREQ EQUALS SECONDLY . (rule 39) - - $default reduce using rule 39 (recur_start) - - - -state 30 - - recur_start -> FREQ EQUALS WEEKLY . (rule 43) - - $default reduce using rule 43 (recur_start) - - - -state 31 - - recur_start -> FREQ EQUALS HOURLY . (rule 41) - - $default reduce using rule 41 (recur_start) - - - -state 32 - - recur_start -> FREQ EQUALS YEARLY . (rule 45) - - $default reduce using rule 45 (recur_start) - - - -state 33 - - dur_week -> DIGITS . 'W' (rule 21) - dur_day -> DIGITS . 'D' (rule 30) - - 'W' shift, and go to state 43 - 'D' shift, and go to state 44 - - - -state 34 - - dur_time -> TIME_CHAR . dur_hour (rule 22) - dur_time -> TIME_CHAR . dur_minute (rule 23) - dur_time -> TIME_CHAR . dur_second (rule 24) - - DIGITS shift, and go to state 45 - - dur_hour go to state 46 - dur_minute go to state 47 - dur_second go to state 48 - - - -state 35 - - duration_value -> dur_prefix 'P' dur_date . (rule 34) - - $default reduce using rule 34 (duration_value) - - - -state 36 - - duration_value -> dur_prefix 'P' dur_week . (rule 36) - - $default reduce using rule 36 (duration_value) - - - -state 37 - - duration_value -> dur_prefix 'P' dur_time . (rule 35) - - $default reduce using rule 35 (duration_value) - - - -state 38 - - dur_date -> dur_day . (rule 19) - dur_date -> dur_day . dur_time (rule 20) - - TIME_CHAR shift, and go to state 34 - - $default reduce using rule 19 (dur_date) - - dur_time go to state 49 - - - -state 39 - - recur_skip_list -> recur_skip_list SEMICOLON . recur_skip (rule 79) - - BYDAY shift, and go to state 50 - BYHOUR shift, and go to state 51 - BYMINUTE shift, and go to state 52 - BYMONTH shift, and go to state 53 - BYMONTHDAY shift, and go to state 54 - BYSECOND shift, and go to state 55 - BYSETPOS shift, and go to state 56 - BYWEEKNO shift, and go to state 57 - BYYEARDAY shift, and go to state 58 - INTERVAL shift, and go to state 59 - COUNT shift, and go to state 60 - UNTIL shift, and go to state 61 - WKST shift, and go to state 62 - - recur_skip go to state 63 - - - -state 40 - - utcoffset_value -> plusminus INTNUMBER INTNUMBER . (rule 83) - utcoffset_value -> plusminus INTNUMBER INTNUMBER . INTNUMBER (rule 84) - - INTNUMBER shift, and go to state 64 - - $default reduce using rule 83 (utcoffset_value) - - - -state 41 - - utc_char -> UTC_CHAR . (rule 15) - - $default reduce using rule 15 (utc_char) - - - -state 42 - - datetime_value -> DIGITS TIME_CHAR DIGITS utc_char . (rule 18) - period_value -> DIGITS TIME_CHAR DIGITS utc_char . '/' DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) - period_value -> DIGITS TIME_CHAR DIGITS utc_char . '/' duration_value (rule 38) - - '/' shift, and go to state 65 - - $default reduce using rule 18 (datetime_value) - - - -state 43 - - dur_week -> DIGITS 'W' . (rule 21) - - $default reduce using rule 21 (dur_week) - - - -state 44 - - dur_day -> DIGITS 'D' . (rule 30) - - $default reduce using rule 30 (dur_day) - - - -state 45 - - dur_hour -> DIGITS . 'H' (rule 25) - dur_hour -> DIGITS . 'H' dur_minute (rule 26) - dur_minute -> DIGITS . 'M' (rule 27) - dur_minute -> DIGITS . 'M' dur_second (rule 28) - dur_second -> DIGITS . 'S' (rule 29) - - 'H' shift, and go to state 66 - 'M' shift, and go to state 67 - 'S' shift, and go to state 68 - - - -state 46 - - dur_time -> TIME_CHAR dur_hour . (rule 22) - - $default reduce using rule 22 (dur_time) - - - -state 47 - - dur_time -> TIME_CHAR dur_minute . (rule 23) - - $default reduce using rule 23 (dur_time) - - - -state 48 - - dur_time -> TIME_CHAR dur_second . (rule 24) - - $default reduce using rule 24 (dur_time) - - - -state 49 - - dur_date -> dur_day dur_time . (rule 20) - - $default reduce using rule 20 (dur_date) - - - -state 50 - - recur_skip -> BYDAY . EQUALS weekday_list (rule 69) - - EQUALS shift, and go to state 69 - - - -state 51 - - recur_skip -> BYHOUR . EQUALS recur_list (rule 68) - - EQUALS shift, and go to state 70 - - - -state 52 - - recur_skip -> BYMINUTE . EQUALS recur_list (rule 67) - - EQUALS shift, and go to state 71 - - - -state 53 - - recur_skip -> BYMONTH . EQUALS recur_list (rule 70) - - EQUALS shift, and go to state 72 - - - -state 54 - - recur_skip -> BYMONTHDAY . EQUALS recur_list (rule 71) - - EQUALS shift, and go to state 73 - - - -state 55 - - recur_skip -> BYSECOND . EQUALS recur_list (rule 66) - - EQUALS shift, and go to state 74 - - - -state 56 - - recur_skip -> BYSETPOS . EQUALS recur_list (rule 74) - - EQUALS shift, and go to state 75 - - - -state 57 - - recur_skip -> BYWEEKNO . EQUALS recur_list (rule 73) - - EQUALS shift, and go to state 76 - - - -state 58 - - recur_skip -> BYYEARDAY . EQUALS recur_list (rule 72) - - EQUALS shift, and go to state 77 - - - -state 59 - - recur_skip -> INTERVAL . EQUALS DIGITS (rule 58) - - EQUALS shift, and go to state 78 - - - -state 60 - - recur_skip -> COUNT . EQUALS DIGITS (rule 77) - - EQUALS shift, and go to state 79 - - - -state 61 - - recur_skip -> UNTIL . EQUALS datetime_value (rule 75) - recur_skip -> UNTIL . EQUALS date_value (rule 76) - - EQUALS shift, and go to state 80 - - - -state 62 - - recur_skip -> WKST . EQUALS SU (rule 59) - recur_skip -> WKST . EQUALS MO (rule 60) - recur_skip -> WKST . EQUALS TU (rule 61) - recur_skip -> WKST . EQUALS WE (rule 62) - recur_skip -> WKST . EQUALS TH (rule 63) - recur_skip -> WKST . EQUALS FR (rule 64) - recur_skip -> WKST . EQUALS SA (rule 65) - - EQUALS shift, and go to state 81 - - - -state 63 - - recur_skip_list -> recur_skip_list SEMICOLON recur_skip . (rule 79) - - $default reduce using rule 79 (recur_skip_list) - - - -state 64 - - utcoffset_value -> plusminus INTNUMBER INTNUMBER INTNUMBER . (rule 84) - - $default reduce using rule 84 (utcoffset_value) - - - -state 65 - - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' . DIGITS TIME_CHAR DIGITS utc_char_b (rule 37) - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' . duration_value (rule 38) - - DIGITS shift, and go to state 82 - '+' shift, and go to state 83 - '-' shift, and go to state 84 - - $default reduce using rule 31 (dur_prefix) - - dur_prefix go to state 13 - duration_value go to state 85 - - - -state 66 - - dur_hour -> DIGITS 'H' . (rule 25) - dur_hour -> DIGITS 'H' . dur_minute (rule 26) - - DIGITS shift, and go to state 86 - - $default reduce using rule 25 (dur_hour) - - dur_minute go to state 87 - - - -state 67 - - dur_minute -> DIGITS 'M' . (rule 27) - dur_minute -> DIGITS 'M' . dur_second (rule 28) - - DIGITS shift, and go to state 88 - - $default reduce using rule 27 (dur_minute) - - dur_second go to state 89 - - - -state 68 - - dur_second -> DIGITS 'S' . (rule 29) - - $default reduce using rule 29 (dur_second) - - - -state 69 - - recur_skip -> BYDAY EQUALS . weekday_list (rule 69) - - DIGITS shift, and go to state 90 - MO shift, and go to state 91 - SA shift, and go to state 92 - SU shift, and go to state 93 - TU shift, and go to state 94 - WE shift, and go to state 95 - TH shift, and go to state 96 - FR shift, and go to state 97 - - weekday go to state 98 - weekday_list go to state 99 - - - -state 70 - - recur_skip -> BYHOUR EQUALS . recur_list (rule 68) - - DIGITS shift, and go to state 100 - - recur_list go to state 101 - - - -state 71 - - recur_skip -> BYMINUTE EQUALS . recur_list (rule 67) - - DIGITS shift, and go to state 100 - - recur_list go to state 102 - - - -state 72 - - recur_skip -> BYMONTH EQUALS . recur_list (rule 70) - - DIGITS shift, and go to state 100 - - recur_list go to state 103 - - - -state 73 - - recur_skip -> BYMONTHDAY EQUALS . recur_list (rule 71) - - DIGITS shift, and go to state 100 - - recur_list go to state 104 - - - -state 74 - - recur_skip -> BYSECOND EQUALS . recur_list (rule 66) - - DIGITS shift, and go to state 100 - - recur_list go to state 105 - - - -state 75 - - recur_skip -> BYSETPOS EQUALS . recur_list (rule 74) - - DIGITS shift, and go to state 100 - - recur_list go to state 106 - - - -state 76 - - recur_skip -> BYWEEKNO EQUALS . recur_list (rule 73) - - DIGITS shift, and go to state 100 - - recur_list go to state 107 - - - -state 77 - - recur_skip -> BYYEARDAY EQUALS . recur_list (rule 72) - - DIGITS shift, and go to state 100 - - recur_list go to state 108 - - - -state 78 - - recur_skip -> INTERVAL EQUALS . DIGITS (rule 58) - - DIGITS shift, and go to state 109 - - - -state 79 - - recur_skip -> COUNT EQUALS . DIGITS (rule 77) - - DIGITS shift, and go to state 110 - - - -state 80 - - recur_skip -> UNTIL EQUALS . datetime_value (rule 75) - recur_skip -> UNTIL EQUALS . date_value (rule 76) - - DIGITS shift, and go to state 111 - - date_value go to state 112 - datetime_value go to state 113 - - - -state 81 - - recur_skip -> WKST EQUALS . SU (rule 59) - recur_skip -> WKST EQUALS . MO (rule 60) - recur_skip -> WKST EQUALS . TU (rule 61) - recur_skip -> WKST EQUALS . WE (rule 62) - recur_skip -> WKST EQUALS . TH (rule 63) - recur_skip -> WKST EQUALS . FR (rule 64) - recur_skip -> WKST EQUALS . SA (rule 65) - - MO shift, and go to state 114 - SA shift, and go to state 115 - SU shift, and go to state 116 - TU shift, and go to state 117 - WE shift, and go to state 118 - TH shift, and go to state 119 - FR shift, and go to state 120 - - - -state 82 - - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS . TIME_CHAR DIGITS utc_char_b (rule 37) - - TIME_CHAR shift, and go to state 121 - - - -state 83 - - dur_prefix -> '+' . (rule 32) - - $default reduce using rule 32 (dur_prefix) - - - -state 84 - - dur_prefix -> '-' . (rule 33) - - $default reduce using rule 33 (dur_prefix) - - - -state 85 - - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' duration_value . (rule 38) - - $default reduce using rule 38 (period_value) - - - -state 86 - - dur_minute -> DIGITS . 'M' (rule 27) - dur_minute -> DIGITS . 'M' dur_second (rule 28) - - 'M' shift, and go to state 67 - - - -state 87 - - dur_hour -> DIGITS 'H' dur_minute . (rule 26) - - $default reduce using rule 26 (dur_hour) - - - -state 88 - - dur_second -> DIGITS . 'S' (rule 29) - - 'S' shift, and go to state 68 - - - -state 89 - - dur_minute -> DIGITS 'M' dur_second . (rule 28) - - $default reduce using rule 28 (dur_minute) - - - -state 90 - - weekday_list -> DIGITS . weekday (rule 54) - - MO shift, and go to state 91 - SA shift, and go to state 92 - SU shift, and go to state 93 - TU shift, and go to state 94 - WE shift, and go to state 95 - TH shift, and go to state 96 - FR shift, and go to state 97 - - weekday go to state 122 - - - -state 91 - - weekday -> MO . (rule 47) - - $default reduce using rule 47 (weekday) - - - -state 92 - - weekday -> SA . (rule 52) - - $default reduce using rule 52 (weekday) - - - -state 93 - - weekday -> SU . (rule 46) - - $default reduce using rule 46 (weekday) - - - -state 94 - - weekday -> TU . (rule 48) - - $default reduce using rule 48 (weekday) - - - -state 95 - - weekday -> WE . (rule 49) - - $default reduce using rule 49 (weekday) - - - -state 96 - - weekday -> TH . (rule 50) - - $default reduce using rule 50 (weekday) - - - -state 97 - - weekday -> FR . (rule 51) - - $default reduce using rule 51 (weekday) - - - -state 98 - - weekday_list -> weekday . (rule 53) - - $default reduce using rule 53 (weekday_list) - - - -state 99 - - weekday_list -> weekday_list . COMMA weekday (rule 55) - recur_skip -> BYDAY EQUALS weekday_list . (rule 69) - - COMMA shift, and go to state 123 - - $default reduce using rule 69 (recur_skip) - - - -state 100 - - recur_list -> DIGITS . (rule 56) - - $default reduce using rule 56 (recur_list) - - - -state 101 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYHOUR EQUALS recur_list . (rule 68) - - COMMA shift, and go to state 124 - - $default reduce using rule 68 (recur_skip) - - - -state 102 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYMINUTE EQUALS recur_list . (rule 67) - - COMMA shift, and go to state 124 - - $default reduce using rule 67 (recur_skip) - - - -state 103 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYMONTH EQUALS recur_list . (rule 70) - - COMMA shift, and go to state 124 - - $default reduce using rule 70 (recur_skip) - - - -state 104 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYMONTHDAY EQUALS recur_list . (rule 71) - - COMMA shift, and go to state 124 - - $default reduce using rule 71 (recur_skip) - - - -state 105 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYSECOND EQUALS recur_list . (rule 66) - - COMMA shift, and go to state 124 - - $default reduce using rule 66 (recur_skip) - - - -state 106 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYSETPOS EQUALS recur_list . (rule 74) - - COMMA shift, and go to state 124 - - $default reduce using rule 74 (recur_skip) - - - -state 107 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYWEEKNO EQUALS recur_list . (rule 73) - - COMMA shift, and go to state 124 - - $default reduce using rule 73 (recur_skip) - - - -state 108 - - recur_list -> recur_list . COMMA DIGITS (rule 57) - recur_skip -> BYYEARDAY EQUALS recur_list . (rule 72) - - COMMA shift, and go to state 124 - - $default reduce using rule 72 (recur_skip) - - - -state 109 - - recur_skip -> INTERVAL EQUALS DIGITS . (rule 58) - - $default reduce using rule 58 (recur_skip) - - - -state 110 - - recur_skip -> COUNT EQUALS DIGITS . (rule 77) - - $default reduce using rule 77 (recur_skip) - - - -state 111 - - date_value -> DIGITS . (rule 13) - datetime_value -> DIGITS . TIME_CHAR DIGITS utc_char (rule 18) - - TIME_CHAR shift, and go to state 125 - - $default reduce using rule 13 (date_value) - - - -state 112 - - recur_skip -> UNTIL EQUALS date_value . (rule 76) - - $default reduce using rule 76 (recur_skip) - - - -state 113 - - recur_skip -> UNTIL EQUALS datetime_value . (rule 75) - - $default reduce using rule 75 (recur_skip) - - - -state 114 - - recur_skip -> WKST EQUALS MO . (rule 60) - - $default reduce using rule 60 (recur_skip) - - - -state 115 - - recur_skip -> WKST EQUALS SA . (rule 65) - - $default reduce using rule 65 (recur_skip) - - - -state 116 - - recur_skip -> WKST EQUALS SU . (rule 59) - - $default reduce using rule 59 (recur_skip) - - - -state 117 - - recur_skip -> WKST EQUALS TU . (rule 61) - - $default reduce using rule 61 (recur_skip) - - - -state 118 - - recur_skip -> WKST EQUALS WE . (rule 62) - - $default reduce using rule 62 (recur_skip) - - - -state 119 - - recur_skip -> WKST EQUALS TH . (rule 63) - - $default reduce using rule 63 (recur_skip) - - - -state 120 - - recur_skip -> WKST EQUALS FR . (rule 64) - - $default reduce using rule 64 (recur_skip) - - - -state 121 - - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR . DIGITS utc_char_b (rule 37) - - DIGITS shift, and go to state 126 - - - -state 122 - - weekday_list -> DIGITS weekday . (rule 54) - - $default reduce using rule 54 (weekday_list) - - - -state 123 - - weekday_list -> weekday_list COMMA . weekday (rule 55) - - MO shift, and go to state 91 - SA shift, and go to state 92 - SU shift, and go to state 93 - TU shift, and go to state 94 - WE shift, and go to state 95 - TH shift, and go to state 96 - FR shift, and go to state 97 - - weekday go to state 127 - - - -state 124 - - recur_list -> recur_list COMMA . DIGITS (rule 57) - - DIGITS shift, and go to state 128 - - - -state 125 - - datetime_value -> DIGITS TIME_CHAR . DIGITS utc_char (rule 18) - - DIGITS shift, and go to state 129 - - - -state 126 - - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS . utc_char_b (rule 37) - - UTC_CHAR shift, and go to state 130 - - $default reduce using rule 16 (utc_char_b) - - utc_char_b go to state 131 - - - -state 127 - - weekday_list -> weekday_list COMMA weekday . (rule 55) - - $default reduce using rule 55 (weekday_list) - - - -state 128 - - recur_list -> recur_list COMMA DIGITS . (rule 57) - - $default reduce using rule 57 (recur_list) - - - -state 129 - - datetime_value -> DIGITS TIME_CHAR DIGITS . utc_char (rule 18) - - UTC_CHAR shift, and go to state 41 - - $default reduce using rule 14 (utc_char) - - utc_char go to state 132 - - - -state 130 - - utc_char_b -> UTC_CHAR . (rule 17) - - $default reduce using rule 17 (utc_char_b) - - - -state 131 - - period_value -> DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b . (rule 37) - - $default reduce using rule 37 (period_value) - - - -state 132 - - datetime_value -> DIGITS TIME_CHAR DIGITS utc_char . (rule 18) - - $default reduce using rule 18 (datetime_value) - - - -state 133 - - $ go to state 134 - - - -state 134 - - $ go to state 135 - - - -state 135 - - $default accept diff --git a/libical/src/libical/icalitip.tab.c b/libical/src/libical/icalitip.tab.c deleted file mode 100644 index 82536647e3..0000000000 --- a/libical/src/libical/icalitip.tab.c +++ /dev/null @@ -1,1663 +0,0 @@ - -/* A Bison parser, made from icalitip.y - by GNU Bison version 1.28 */ - -#define YYBISON 1 /* Identify Bison output. */ - -#define yyparse icalparser_yyparse -#define yylex icalparser_yylex -#define yyerror icalparser_yyerror -#define yylval icalparser_yylval -#define yychar icalparser_yychar -#define yydebug icalparser_yydebug -#define yynerrs icalparser_yynerrs -#define DIGITS 257 -#define INTNUMBER 258 -#define FLOATNUMBER 259 -#define STRING 260 -#define EOL 261 -#define EQUALS 262 -#define CHARACTER 263 -#define COLON 264 -#define COMMA 265 -#define SEMICOLON 266 -#define TIMESEPERATOR 267 -#define TRUE 268 -#define FALSE 269 -#define FREQ 270 -#define BYDAY 271 -#define BYHOUR 272 -#define BYMINUTE 273 -#define BYMONTH 274 -#define BYMONTHDAY 275 -#define BYSECOND 276 -#define BYSETPOS 277 -#define BYWEEKNO 278 -#define BYYEARDAY 279 -#define DAILY 280 -#define MINUTELY 281 -#define MONTHLY 282 -#define SECONDLY 283 -#define WEEKLY 284 -#define HOURLY 285 -#define YEARLY 286 -#define INTERVAL 287 -#define COUNT 288 -#define UNTIL 289 -#define WKST 290 -#define MO 291 -#define SA 292 -#define SU 293 -#define TU 294 -#define WE 295 -#define TH 296 -#define FR 297 -#define BIT8 298 -#define ACCEPTED 299 -#define ADD 300 -#define AUDIO 301 -#define BASE64 302 -#define BINARY 303 -#define BOOLEAN 304 -#define BUSY 305 -#define BUSYTENTATIVE 306 -#define BUSYUNAVAILABLE 307 -#define CALADDRESS 308 -#define CANCEL 309 -#define CANCELLED 310 -#define CHAIR 311 -#define CHILD 312 -#define COMPLETED 313 -#define CONFIDENTIAL 314 -#define CONFIRMED 315 -#define COUNTER 316 -#define DATE 317 -#define DATETIME 318 -#define DECLINECOUNTER 319 -#define DECLINED 320 -#define DELEGATED 321 -#define DISPLAY 322 -#define DRAFT 323 -#define DURATION 324 -#define EMAIL 325 -#define END 326 -#define FINAL 327 -#define FLOAT 328 -#define FREE 329 -#define GREGORIAN 330 -#define GROUP 331 -#define INDIVIDUAL 332 -#define INPROCESS 333 -#define INTEGER 334 -#define NEEDSACTION 335 -#define NONPARTICIPANT 336 -#define OPAQUE 337 -#define OPTPARTICIPANT 338 -#define PARENT 339 -#define PERIOD 340 -#define PRIVATE 341 -#define PROCEDURE 342 -#define PUBLIC 343 -#define PUBLISH 344 -#define RECUR 345 -#define REFRESH 346 -#define REPLY 347 -#define REQPARTICIPANT 348 -#define REQUEST 349 -#define RESOURCE 350 -#define ROOM 351 -#define SIBLING 352 -#define START 353 -#define TENTATIVE 354 -#define TEXT 355 -#define THISANDFUTURE 356 -#define THISANDPRIOR 357 -#define TIME 358 -#define TRANSPAENT 359 -#define UNKNOWN 360 -#define UTCOFFSET 361 -#define XNAME 362 -#define ALTREP 363 -#define CN 364 -#define CUTYPE 365 -#define DAYLIGHT 366 -#define DIR 367 -#define ENCODING 368 -#define EVENT 369 -#define FBTYPE 370 -#define FMTTYPE 371 -#define LANGUAGE 372 -#define MEMBER 373 -#define PARTSTAT 374 -#define RANGE 375 -#define RELATED 376 -#define RELTYPE 377 -#define ROLE 378 -#define RSVP 379 -#define SENTBY 380 -#define STANDARD 381 -#define URI 382 -#define TIME_CHAR 383 -#define UTC_CHAR 384 - -#line 1 "icalitip.y" - -/* -*- Mode: C -*- - ====================================================================== - FILE: icalitip.y - CREATOR: eric 10 June 1999 - - DESCRIPTION: - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalitip.y - - - - ================================b======================================*/ - -#include -#include /* for strdup() */ -#include /* for SHRT_MAX*/ -#include "icalparser.h" -#include "ical.h" -#include "pvl.h" - -#define YYERROR_VERBOSE -#define YYDEBUG 1 - -icalvalue *icalparser_yy_value; /* Current Value */ - -/* Globals for UTCOFFSET values */ -int utc; -int utc_b; -int utcsign; - -/* Globals for DURATION values */ -struct icaldurationtype duration; - -/* Globals for RECUR values */ -struct icalrecurrencetype recur; -short skiplist[367]; -short skippos; - -void copy_list(short* array, size_t size); -void clear_recur(); -void add_prop(icalproperty_kind); -void icalparser_fill_date(struct tm* t, char* dstr); -void icalparser_fill_time(struct tm* t, char* tstr); -void set_value_type(icalvalue_kind kind); -void yyerror(char *s); /* Don't know why I need this.... */ -int yylex(void); /* Or this. */ -void set_parser_value_state(); -struct icaltimetype fill_datetime(char* d, char* t); - - - -/* Set the state of the lexer so it will interpret values ( iCAL - VALUEs, that is, ) correctly. */ - - -#line 75 "icalitip.y" -typedef union { - float v_float; - int v_int; - char* v_string; - -} YYSTYPE; -#include - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif -#endif - - - -#define YYFINAL 135 -#define YYFLAG -32768 -#define YYNTBASE 141 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 167) - -static const short yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 137, 2, 138, 2, 140, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 136, 2, 2, - 2, 133, 2, 2, 2, 2, 134, 2, 2, 139, - 2, 2, 135, 2, 2, 2, 132, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131 -}; - -#if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, - 20, 22, 24, 26, 27, 29, 30, 32, 37, 39, - 42, 45, 48, 51, 54, 57, 61, 64, 68, 71, - 74, 75, 77, 79, 83, 87, 91, 101, 108, 112, - 116, 120, 124, 128, 132, 136, 138, 140, 142, 144, - 146, 148, 150, 152, 155, 159, 161, 165, 169, 173, - 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, - 217, 221, 225, 229, 233, 237, 241, 245, 246, 250, - 253, 255, 257, 261 -}; - -static const short yyrhs[] = { 142, - 0, 143, 0, 144, 0, 147, 0, 156, 0, 157, - 0, 164, 0, 166, 0, 1, 0, 131, 0, 14, - 0, 15, 0, 3, 0, 0, 130, 0, 0, 130, - 0, 3, 129, 3, 145, 0, 154, 0, 154, 150, - 0, 3, 132, 0, 129, 151, 0, 129, 152, 0, - 129, 153, 0, 3, 133, 0, 3, 133, 152, 0, - 3, 134, 0, 3, 134, 153, 0, 3, 135, 0, - 3, 136, 0, 0, 137, 0, 138, 0, 155, 139, - 148, 0, 155, 139, 150, 0, 155, 139, 149, 0, - 3, 129, 3, 145, 140, 3, 129, 3, 146, 0, - 3, 129, 3, 145, 140, 156, 0, 16, 8, 29, - 0, 16, 8, 27, 0, 16, 8, 31, 0, 16, - 8, 26, 0, 16, 8, 30, 0, 16, 8, 28, - 0, 16, 8, 32, 0, 39, 0, 37, 0, 40, - 0, 41, 0, 42, 0, 43, 0, 38, 0, 159, - 0, 3, 159, 0, 160, 11, 159, 0, 3, 0, - 161, 11, 3, 0, 33, 8, 3, 0, 36, 8, - 39, 0, 36, 8, 37, 0, 36, 8, 40, 0, - 36, 8, 41, 0, 36, 8, 42, 0, 36, 8, - 43, 0, 36, 8, 38, 0, 22, 8, 161, 0, - 19, 8, 161, 0, 18, 8, 161, 0, 17, 8, - 160, 0, 20, 8, 161, 0, 21, 8, 161, 0, - 25, 8, 161, 0, 24, 8, 161, 0, 23, 8, - 161, 0, 35, 8, 147, 0, 35, 8, 144, 0, - 34, 8, 3, 0, 0, 163, 12, 162, 0, 158, - 163, 0, 137, 0, 138, 0, 165, 4, 4, 0, - 165, 4, 4, 4, 0 -}; - -#endif - -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 112, 114, 115, 116, 117, 118, 119, 120, 121, 127, - 129, 132, 135, 150, 152, 155, 157, 159, 175, 176, - 178, 183, 186, 189, 193, 197, 202, 206, 211, 216, - 221, 224, 227, 231, 236, 241, 250, 271, 303, 305, - 306, 307, 308, 309, 310, 314, 316, 317, 318, 319, - 320, 321, 325, 327, 328, 331, 333, 336, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 357, 360, 364, 366, 368, - 376, 377, 379, 385 -}; -#endif - - -#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) - -static const char * const yytname[] = { "$","error","$undefined.","DIGITS", -"INTNUMBER","FLOATNUMBER","STRING","EOL","EQUALS","CHARACTER","COLON","COMMA", -"SEMICOLON","TIMESEPERATOR","TRUE","FALSE","FREQ","BYDAY","BYHOUR","BYMINUTE", -"BYMONTH","BYMONTHDAY","BYSECOND","BYSETPOS","BYWEEKNO","BYYEARDAY","DAILY", -"MINUTELY","MONTHLY","SECONDLY","WEEKLY","HOURLY","YEARLY","INTERVAL","COUNT", -"UNTIL","WKST","MO","SA","SU","TU","WE","TH","FR","BIT8","ACCEPTED","ADD","AUDIO", -"BASE64","BINARY","BOOLEAN","BUSY","BUSYTENTATIVE","BUSYUNAVAILABLE","CALADDRESS", -"CANCEL","CANCELLED","CHAIR","CHILD","COMPLETED","CONFIDENTIAL","CONFIRMED", -"COUNTER","DATE","DATETIME","DECLINECOUNTER","DECLINED","DELEGATED","DISPLAY", -"DRAFT","DURATION","EMAIL","END","FINAL","FLOAT","FREE","GREGORIAN","GROUP", -"INDIVIDUAL","INPROCESS","INTEGER","NEEDSACTION","NONPARTICIPANT","OPAQUE","OPTPARTICIPANT", -"PARENT","PERIOD","PRIVATE","PROCEDURE","PUBLIC","PUBLISH","RECUR","REFRESH", -"REPLY","REQPARTICIPANT","REQUEST","RESOURCE","ROOM","SIBLING","START","TENTATIVE", -"TEXT","THISANDFUTURE","THISANDPRIOR","TIME","TRANSPAENT","UNKNOWN","UTCOFFSET", -"XNAME","ALTREP","CN","CUTYPE","DAYLIGHT","DIR","ENCODING","EVENT","FBTYPE", -"FMTTYPE","LANGUAGE","MEMBER","PARTSTAT","RANGE","RELATED","RELTYPE","ROLE", -"RSVP","SENTBY","STANDARD","URI","TIME_CHAR","UTC_CHAR","\"unimplemented2\"", -"'W'","'H'","'M'","'S'","'D'","'+'","'-'","'P'","'/'","value","binary_value", -"boolean_value","date_value","utc_char","utc_char_b","datetime_value","dur_date", -"dur_week","dur_time","dur_hour","dur_minute","dur_second","dur_day","dur_prefix", -"duration_value","period_value","recur_start","weekday","weekday_list","recur_list", -"recur_skip","recur_skip_list","recur_value","plusminus","utcoffset_value", NULL -}; -#endif - -static const short yyr1[] = { 0, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, - 143, 143, 144, 145, 145, 146, 146, 147, 148, 148, - 149, 150, 150, 150, 151, 151, 152, 152, 153, 154, - 155, 155, 155, 156, 156, 156, 157, 157, 158, 158, - 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, - 159, 159, 160, 160, 160, 161, 161, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 163, 163, 164, - 165, 165, 166, 166 -}; - -static const short yyr2[] = { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 0, 1, 4, 1, 2, - 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, - 0, 1, 1, 3, 3, 3, 9, 6, 3, 3, - 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, - 1, 1, 3, 4 -}; - -static const short yydefact[] = { 0, - 9, 13, 11, 12, 0, 10, 32, 33, 1, 2, - 3, 4, 0, 5, 6, 78, 7, 0, 8, 0, - 0, 0, 80, 0, 14, 42, 40, 44, 39, 43, - 41, 45, 0, 0, 34, 36, 35, 19, 0, 83, - 15, 18, 21, 30, 0, 22, 23, 24, 20, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 79, 84, 31, 25, 27, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 33, 38, 0, 26, 0, 28, 0, - 47, 52, 46, 48, 49, 50, 51, 53, 69, 56, - 68, 67, 70, 71, 66, 74, 73, 72, 58, 77, - 13, 76, 75, 60, 65, 59, 61, 62, 63, 64, - 0, 54, 0, 0, 0, 16, 55, 57, 14, 17, - 37, 18, 0, 0, 0 -}; - -static const short yydefgoto[] = { 133, - 9, 10, 11, 42, 131, 12, 35, 36, 37, 46, - 47, 48, 38, 13, 14, 15, 16, 98, 99, 101, - 63, 23, 17, 18, 19 -}; - -static const short yypact[] = { -1, --32768, -123,-32768,-32768, 1,-32768, 3, 6,-32768,-32768, --32768,-32768, -127,-32768,-32768,-32768,-32768, 64,-32768, 66, - -10, -2, 58, 67, -58,-32768,-32768,-32768,-32768,-32768, --32768,-32768, -128, 70,-32768,-32768,-32768, -55, 28, 71, --32768, -64,-32768,-32768, -68,-32768,-32768,-32768,-32768, 69, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83,-32768,-32768, 2, 89, 90,-32768, 0, 91, - 91, 91, 91, 91, 91, 91, 91, 92, 93, 94, - -14, -51,-32768,-32768,-32768, -36,-32768, -56,-32768, -7, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 88,-32768, - 95, 95, 95, 95, 95, 95, 95, 95,-32768,-32768, - -29,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 98,-32768, -7, 99, 100, -26,-32768,-32768, -58,-32768, --32768,-32768, 105, 107,-32768 -}; - -static const short yypgoto[] = {-32768, --32768,-32768, 29, -21,-32768, 30,-32768,-32768, 84,-32768, - 45, 46,-32768,-32768, 47,-32768,-32768, -79,-32768, -17, --32768,-32768,-32768,-32768,-32768 -}; - - -#define YYLAST 140 - - -static const short yytable[] = { 1, - 33, 2, 90, 43, 82, 20, -81, 44, 21, -82, - 122, 22, 3, 4, 5, 26, 27, 28, 29, 30, - 31, 32, 114, 115, 116, 117, 118, 119, 120, 91, - 92, 93, 94, 95, 96, 97, 91, 92, 93, 94, - 95, 96, 97, 127, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 102, 103, 104, 105, 106, 107, 108, - 59, 60, 61, 62, 66, 67, 68, 24, 25, 39, - 40, 41, 45, 34, 64, 65, 69, 121, 68, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 86, 88, 100, 109, 110, 111, 67, 123, 125, - 126, 128, 129, 130, 134, 124, 135, 132, 112, 113, - 87, 85, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 34, 0, 0, 6, - 0, 0, 0, 0, 0, 7, 8, -31, 83, 84 -}; - -static const short yycheck[] = { 1, - 3, 3, 3, 132, 3, 129, 4, 136, 8, 4, - 90, 139, 14, 15, 16, 26, 27, 28, 29, 30, - 31, 32, 37, 38, 39, 40, 41, 42, 43, 37, - 38, 39, 40, 41, 42, 43, 37, 38, 39, 40, - 41, 42, 43, 123, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 71, 72, 73, 74, 75, 76, 77, - 33, 34, 35, 36, 133, 134, 135, 4, 3, 12, - 4, 130, 3, 129, 4, 140, 8, 129, 135, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 3, 3, 3, 3, 3, 3, 134, 11, 129, - 3, 3, 3, 130, 0, 11, 0, 129, 80, 80, - 66, 65, 67, -1, -1, -1, -1, -1, -1, -1, - -1, 38, -1, -1, -1, -1, 129, -1, -1, 131, - -1, -1, -1, -1, -1, 137, 138, 139, 137, 138 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/lib/bison.simple" -/* This file comes from bison-1.28. */ - -/* Skeleton output parser for bison, - Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -#ifndef YYSTACK_USE_ALLOCA -#ifdef alloca -#define YYSTACK_USE_ALLOCA -#else /* alloca not defined */ -#ifdef __GNUC__ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) -#define YYSTACK_USE_ALLOCA -#include -#else /* not sparc */ -/* We think this test detects Watcom and Microsoft C. */ -/* This used to test MSDOS, but that is a bad idea - since that symbol is in the user namespace. */ -#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) -#if 0 /* No need for malloc.h, which pollutes the namespace; - instead, just don't use alloca. */ -#include -#endif -#else /* not MSDOS, or __TURBOC__ */ -#if defined(_AIX) -/* I don't know what this was needed for, but it pollutes the namespace. - So I turned it off. rms, 2 May 1997. */ -/* #include */ - #pragma alloca -#define YYSTACK_USE_ALLOCA -#else /* not MSDOS, or __TURBOC__, or _AIX */ -#if 0 -#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, - and on HPUX 10. Eventually we can turn this on. */ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#endif /* __hpux */ -#endif -#endif /* not _AIX */ -#endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc */ -#endif /* not GNU C */ -#endif /* alloca not defined */ -#endif /* YYSTACK_USE_ALLOCA not defined */ - -#ifdef YYSTACK_USE_ALLOCA -#define YYSTACK_ALLOC alloca -#else -#define YYSTACK_ALLOC malloc -#endif - -/* Note: there must be only one dollar sign in this file. - It is replaced by the list of actions, each action - as one case of the switch. */ - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. - This remains here temporarily to ease the - transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(token, value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { yychar = (token), yylval = (value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -#ifndef YYPURE -#define YYLEX yylex() -#endif - -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) -#endif -#else /* not YYLSP_NEEDED */ -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval) -#endif -#endif /* not YYLSP_NEEDED */ -#endif - -/* If nonreentrant, generate the variables here */ - -#ifndef YYPURE - -int yychar; /* the lookahead symbol */ -YYSTYPE yylval; /* the semantic value of the */ - /* lookahead symbol */ - -#ifdef YYLSP_NEEDED -YYLTYPE yylloc; /* location data for the lookahead */ - /* symbol */ -#endif - -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ - -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ -#endif - -/* YYINITDEPTH indicates the initial size of the parser's stacks */ - -#ifndef YYINITDEPTH -#define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH is the maximum size the stacks can grow to - (effective only if the built-in stack extension method is used). */ - -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -#define YYMAXDEPTH 10000 -#endif - -/* Define __yy_memcpy. Note that the size argument - should be passed with type unsigned int, because that is what the non-GCC - definitions require. With GCC, __builtin_memcpy takes an arg - of type size_t, but it can handle unsigned int. */ - -#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ -#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) -#else /* not GNU C or C++ */ -#ifndef __cplusplus - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (to, from, count) - char *to; - char *from; - unsigned int count; -{ - register char *f = from; - register char *t = to; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#else /* __cplusplus */ - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (char *to, char *from, unsigned int count) -{ - register char *t = to; - register char *f = from; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#endif -#endif - -#line 217 "/usr/lib/bison.simple" - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -#ifdef __cplusplus -#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -#define YYPARSE_PARAM_DECL -#else /* not __cplusplus */ -#define YYPARSE_PARAM_ARG YYPARSE_PARAM -#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -#endif /* not __cplusplus */ -#else /* not YYPARSE_PARAM */ -#define YYPARSE_PARAM_ARG -#define YYPARSE_PARAM_DECL -#endif /* not YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -#ifdef YYPARSE_PARAM -int yyparse (void *); -#else -int yyparse (void); -#endif -#endif - -int -yyparse(YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - register int yystate; - register int yyn; - register short *yyssp; - register YYSTYPE *yyvsp; - int yyerrstatus; /* number of tokens to shift before error messages enabled */ - int yychar1 = 0; /* lookahead token as an internal (translated) token number */ - - short yyssa[YYINITDEPTH]; /* the state stack */ - YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ - - short *yyss = yyssa; /* refer to the stacks thru separate pointers */ - YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ - -#ifdef YYLSP_NEEDED - YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - -#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -#define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; - -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; -#endif -#endif - - YYSTYPE yyval; /* the variable used to return */ - /* semantic values from the action */ - /* routines */ - - int yylen; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss - 1; - yyvsp = yyvs; -#ifdef YYLSP_NEEDED - yylsp = yyls; -#endif - -/* Push a new state, which is found in yystate . */ -/* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. */ -yynewstate: - - *++yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Give user a chance to reallocate the stack */ - /* Use copies of these so that the &'s don't force the real ones into memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; -#ifdef YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; -#endif - - /* Get the current used size of the three stacks, in elements. */ - int size = yyssp - yyss + 1; - -#ifdef yyoverflow - /* Each stack pointer address is followed by the size of - the data in use in that stack, in bytes. */ -#ifdef YYLSP_NEEDED - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yyls1, size * sizeof (*yylsp), - &yystacksize); -#else - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yystacksize); -#endif - - yyss = yyss1; yyvs = yyvs1; -#ifdef YYLSP_NEEDED - yyls = yyls1; -#endif -#else /* no yyoverflow */ - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - { - yyerror("parser stack overflow"); - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 2; - } - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; -#ifndef YYSTACK_USE_ALLOCA - yyfree_stacks = 1; -#endif - yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss, (char *)yyss1, - size * (unsigned int) sizeof (*yyssp)); - yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs, (char *)yyvs1, - size * (unsigned int) sizeof (*yyvsp)); -#ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls, (char *)yyls1, - size * (unsigned int) sizeof (*yylsp)); -#endif -#endif /* no yyoverflow */ - - yyssp = yyss + size - 1; - yyvsp = yyvs + size - 1; -#ifdef YYLSP_NEEDED - yylsp = yyls + size - 1; -#endif - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Stack size increased to %d\n", yystacksize); -#endif - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Entering state %d\n", yystate); -#endif - - goto yybackup; - yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Reading a token: "); -#endif - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Now at end of input.\n"); -#endif - } - else - { - yychar1 = YYTRANSLATE(yychar); - -#if YYDEBUG != 0 - if (yydebug) - { - fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise meaning - of a token, for further debugging info. */ -#ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -#endif - fprintf (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; - - yystate = yyn; - goto yynewstate; - -/* Do the default action for the current state. */ -yydefault: - - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - -/* Do a reduction. yyn is the number of a rule to reduce with. */ -yyreduce: - yylen = yyr2[yyn]; - if (yylen > 0) - yyval = yyvsp[1-yylen]; /* implement default value of the action */ - -#if YYDEBUG != 0 - if (yydebug) - { - int i; - - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) - fprintf (stderr, "%s ", yytname[yyrhs[i]]); - fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - - switch (yyn) { - -case 9: -#line 121 "icalitip.y" -{ - icalparser_yy_value = 0; - icalparser_clear_flex_input(); - yyclearin; - ; - break;} -case 11: -#line 131 "icalitip.y" -{ icalparser_yy_value = icalvalue_new_boolean(1); ; - break;} -case 12: -#line 133 "icalitip.y" -{ icalparser_yy_value = icalvalue_new_boolean(0); ; - break;} -case 13: -#line 136 "icalitip.y" -{ - struct icaltimetype stm; - - stm = fill_datetime(yyvsp[0].v_string,0); - - stm.hour = -1; - stm.minute = -1; - stm.second = -1; - stm.is_utc = 0; - stm.is_date = 1; - - icalparser_yy_value = icalvalue_new_date(stm); - ; - break;} -case 14: -#line 151 "icalitip.y" -{utc = 0;; - break;} -case 15: -#line 152 "icalitip.y" -{utc = 1;; - break;} -case 16: -#line 156 "icalitip.y" -{utc_b = 0;; - break;} -case 17: -#line 157 "icalitip.y" -{utc_b = 1;; - break;} -case 18: -#line 161 "icalitip.y" -{ - struct icaltimetype stm; - stm = fill_datetime(yyvsp[-3].v_string, yyvsp[-1].v_string); - stm.is_utc = utc; - stm.is_date = 0; - - icalparser_yy_value = - icalvalue_new_datetime(stm); - ; - break;} -case 21: -#line 179 "icalitip.y" -{ - duration.weeks = atoi(yyvsp[-1].v_string); - ; - break;} -case 22: -#line 184 "icalitip.y" -{ - ; - break;} -case 23: -#line 187 "icalitip.y" -{ - ; - break;} -case 24: -#line 190 "icalitip.y" -{ - ; - break;} -case 25: -#line 194 "icalitip.y" -{ - duration.hours = atoi(yyvsp[-1].v_string); - ; - break;} -case 26: -#line 198 "icalitip.y" -{ - duration.hours = atoi(yyvsp[-2].v_string); - ; - break;} -case 27: -#line 203 "icalitip.y" -{ - duration.minutes = atoi(yyvsp[-1].v_string); - ; - break;} -case 28: -#line 207 "icalitip.y" -{ - duration.minutes = atoi(yyvsp[-2].v_string); - ; - break;} -case 29: -#line 212 "icalitip.y" -{ - duration.seconds = atoi(yyvsp[-1].v_string); - ; - break;} -case 30: -#line 217 "icalitip.y" -{ - duration.days = atoi(yyvsp[-1].v_string); - ; - break;} -case 31: -#line 222 "icalitip.y" -{ - ; - break;} -case 32: -#line 225 "icalitip.y" -{ - ; - break;} -case 33: -#line 228 "icalitip.y" -{ - ; - break;} -case 34: -#line 232 "icalitip.y" -{ - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - ; - break;} -case 35: -#line 237 "icalitip.y" -{ - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - ; - break;} -case 36: -#line 242 "icalitip.y" -{ - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - ; - break;} -case 37: -#line 251 "icalitip.y" -{ - struct icalperiodtype p; - - p.start = fill_datetime(yyvsp[-8].v_string,yyvsp[-6].v_string); - p.start.is_utc = utc; - p.start.is_date = 0; - - - p.end = fill_datetime(yyvsp[-3].v_string,yyvsp[-1].v_string); - p.end.is_utc = utc_b; - p.end.is_date = 0; - - p.duration.days = -1; - p.duration.weeks = -1; - p.duration.hours = -1; - p.duration.minutes = -1; - p.duration.seconds = -1; - - icalparser_yy_value = icalvalue_new_period(p); - ; - break;} -case 38: -#line 272 "icalitip.y" -{ - struct icalperiodtype p; - - p.start = fill_datetime(yyvsp[-5].v_string,yyvsp[-3].v_string); - p.start.is_utc = utc; - p.start.is_date = 0; - - p.end.year = -1; - p.end.month = -1; - p.end.day = -1; - p.end.hour = -1; - p.end.minute = -1; - p.end.second = -1; - - /* The duration_value rule setes the global 'duration' - variable, but it also creates a new value in - icalparser_yy_value. So, free that, then copy - 'duration' into the icalperiodtype struct. */ - - p.duration = icalvalue_get_duration(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); - icalparser_yy_value = 0; - - icalparser_yy_value = icalvalue_new_period(p); - - ; - break;} -case 39: -#line 304 "icalitip.y" -{clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;; - break;} -case 40: -#line 305 "icalitip.y" -{clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;; - break;} -case 41: -#line 306 "icalitip.y" -{clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;; - break;} -case 42: -#line 307 "icalitip.y" -{clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;; - break;} -case 43: -#line 308 "icalitip.y" -{clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;; - break;} -case 44: -#line 309 "icalitip.y" -{clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;; - break;} -case 45: -#line 310 "icalitip.y" -{clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;; - break;} -case 46: -#line 315 "icalitip.y" -{ skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;; - break;} -case 47: -#line 316 "icalitip.y" -{ skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 48: -#line 317 "icalitip.y" -{ skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 49: -#line 318 "icalitip.y" -{ skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 50: -#line 319 "icalitip.y" -{ skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 51: -#line 320 "icalitip.y" -{ skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 52: -#line 321 "icalitip.y" -{ skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 54: -#line 327 "icalitip.y" -{ ; - break;} -case 56: -#line 332 "icalitip.y" -{ skiplist[skippos] = atoi(yyvsp[0].v_string); skippos++;; - break;} -case 57: -#line 333 "icalitip.y" -{ skiplist[skippos] = atoi(yyvsp[0].v_string); if (skippos<367) skippos++;; - break;} -case 58: -#line 337 "icalitip.y" -{recur.interval = atoi(yyvsp[0].v_string);; - break;} -case 59: -#line 338 "icalitip.y" -{recur.week_start = ICAL_SUNDAY_WEEKDAY;; - break;} -case 60: -#line 339 "icalitip.y" -{recur.week_start = ICAL_MONDAY_WEEKDAY;; - break;} -case 61: -#line 340 "icalitip.y" -{recur.week_start = ICAL_TUESDAY_WEEKDAY;; - break;} -case 62: -#line 341 "icalitip.y" -{recur.week_start = ICAL_WEDNESDAY_WEEKDAY;; - break;} -case 63: -#line 342 "icalitip.y" -{recur.week_start = ICAL_THURSDAY_WEEKDAY;; - break;} -case 64: -#line 343 "icalitip.y" -{recur.week_start = ICAL_FRIDAY_WEEKDAY;; - break;} -case 65: -#line 344 "icalitip.y" -{recur.week_start = ICAL_SATURDAY_WEEKDAY;; - break;} -case 66: -#line 345 "icalitip.y" -{copy_list(recur.by_second,60);; - break;} -case 67: -#line 346 "icalitip.y" -{copy_list(recur.by_minute,60);; - break;} -case 68: -#line 347 "icalitip.y" -{copy_list(recur.by_hour,24);; - break;} -case 69: -#line 348 "icalitip.y" -{copy_list(recur.by_day,7);; - break;} -case 70: -#line 349 "icalitip.y" -{copy_list(recur.by_month,12);; - break;} -case 71: -#line 350 "icalitip.y" -{copy_list(recur.by_month_day,31);; - break;} -case 72: -#line 351 "icalitip.y" -{copy_list(recur.by_year_day,366);; - break;} -case 73: -#line 352 "icalitip.y" -{copy_list(recur.by_week_no,53);; - break;} -case 74: -#line 353 "icalitip.y" -{copy_list(recur.by_set_pos,366);; - break;} -case 75: -#line 355 "icalitip.y" -{ recur.until = icalvalue_get_datetime(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;; - break;} -case 76: -#line 358 "icalitip.y" -{ recur.until = icalvalue_get_date(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;; - break;} -case 77: -#line 361 "icalitip.y" -{ recur.count = atoi(yyvsp[0].v_string); ; - break;} -case 80: -#line 370 "icalitip.y" -{ icalparser_yy_value = icalvalue_new_recur(recur); ; - break;} -case 81: -#line 376 "icalitip.y" -{ utcsign = 1; ; - break;} -case 82: -#line 377 "icalitip.y" -{ utcsign = -1; ; - break;} -case 83: -#line 381 "icalitip.y" -{ - icalparser_yy_value = icalvalue_new_utcoffset( utcsign * (yyvsp[-1].v_int*3600) + (yyvsp[0].v_int*60) ); - ; - break;} -case 84: -#line 386 "icalitip.y" -{ - icalparser_yy_value = icalvalue_new_utcoffset(utcsign * (yyvsp[-2].v_int*3600) + (yyvsp[-1].v_int*60) +(yyvsp[0].v_int)); - ; - break;} -} - /* the action file gets copied in in place of this dollarsign */ -#line 543 "/usr/lib/bison.simple" - - yyvsp -= yylen; - yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; - -#ifdef YYLSP_NEEDED - yylsp++; - if (yylen == 0) - { - yylsp->first_line = yylloc.first_line; - yylsp->first_column = yylloc.first_column; - yylsp->last_line = (yylsp-1)->last_line; - yylsp->last_column = (yylsp-1)->last_column; - yylsp->text = 0; - } - else - { - yylsp->last_line = (yylsp+yylen-1)->last_line; - yylsp->last_column = (yylsp+yylen-1)->last_column; - } -#endif - - /* Now "shift" the result of the reduction. - Determine what state that goes to, - based on the state we popped back to - and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - -yyerrlab: /* here on detecting error */ - - if (! yyerrstatus) - /* If not already recovering from an error, report this error. */ - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - int size = 0; - char *msg; - int x, count; - - count = 0; - /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - size += strlen(yytname[x]) + 15, count++; - msg = (char *) malloc(size + 15); - if (msg != 0) - { - strcpy(msg, "parse error"); - - if (count < 5) - { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; - } - } - yyerror(msg); - free(msg); - } - else - yyerror ("parse error; also virtual memory exceeded"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror("parse error"); - } - - goto yyerrlab1; -yyerrlab1: /* here on error raised explicitly by an action */ - - if (yyerrstatus == 3) - { - /* if just tried and failed to reuse lookahead token after an error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif - - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - -yyerrdefault: /* current state does not do anything special for the error token. */ - -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ - if (yyn) goto yydefault; -#endif - -yyerrpop: /* pop the current state because it cannot handle the error token */ - - if (yyssp == yyss) YYABORT; - yyvsp--; - yystate = *--yyssp; -#ifdef YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - -yyerrhandle: - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting error token, "); -#endif - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; - - yyacceptlab: - /* YYACCEPT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 0; - - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 1; -} -#line 392 "icalitip.y" - - - -void clear_recur() -{ - memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; - - icalrecurrencetype_clear(&recur); -} - -void copy_list(short* array, size_t size) -{ - memcpy(array, skiplist, size*sizeof(short)); - memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; -} - -struct icaltimetype fill_datetime(char* datestr, char* timestr) -{ - struct icaltimetype stm; - - memset(&stm,0,sizeof(stm)); - - if (datestr != 0){ - sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), - &(stm.day)); - } - - if (timestr != 0){ - sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), - &(stm.second)); - } - - return stm; - -} - -void yyerror(char* s) -{ - /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ -} - diff --git a/libical/src/libical/icalitip.tab.h b/libical/src/libical/icalitip.tab.h deleted file mode 100644 index 197bd1c292..0000000000 --- a/libical/src/libical/icalitip.tab.h +++ /dev/null @@ -1,137 +0,0 @@ -typedef union { - float v_float; - int v_int; - char* v_string; - -} YYSTYPE; -#define DIGITS 257 -#define INTNUMBER 258 -#define FLOATNUMBER 259 -#define STRING 260 -#define EOL 261 -#define EQUALS 262 -#define CHARACTER 263 -#define COLON 264 -#define COMMA 265 -#define SEMICOLON 266 -#define TIMESEPERATOR 267 -#define TRUE 268 -#define FALSE 269 -#define FREQ 270 -#define BYDAY 271 -#define BYHOUR 272 -#define BYMINUTE 273 -#define BYMONTH 274 -#define BYMONTHDAY 275 -#define BYSECOND 276 -#define BYSETPOS 277 -#define BYWEEKNO 278 -#define BYYEARDAY 279 -#define DAILY 280 -#define MINUTELY 281 -#define MONTHLY 282 -#define SECONDLY 283 -#define WEEKLY 284 -#define HOURLY 285 -#define YEARLY 286 -#define INTERVAL 287 -#define COUNT 288 -#define UNTIL 289 -#define WKST 290 -#define MO 291 -#define SA 292 -#define SU 293 -#define TU 294 -#define WE 295 -#define TH 296 -#define FR 297 -#define BIT8 298 -#define ACCEPTED 299 -#define ADD 300 -#define AUDIO 301 -#define BASE64 302 -#define BINARY 303 -#define BOOLEAN 304 -#define BUSY 305 -#define BUSYTENTATIVE 306 -#define BUSYUNAVAILABLE 307 -#define CALADDRESS 308 -#define CANCEL 309 -#define CANCELLED 310 -#define CHAIR 311 -#define CHILD 312 -#define COMPLETED 313 -#define CONFIDENTIAL 314 -#define CONFIRMED 315 -#define COUNTER 316 -#define DATE 317 -#define DATETIME 318 -#define DECLINECOUNTER 319 -#define DECLINED 320 -#define DELEGATED 321 -#define DISPLAY 322 -#define DRAFT 323 -#define DURATION 324 -#define EMAIL 325 -#define END 326 -#define FINAL 327 -#define FLOAT 328 -#define FREE 329 -#define GREGORIAN 330 -#define GROUP 331 -#define INDIVIDUAL 332 -#define INPROCESS 333 -#define INTEGER 334 -#define NEEDSACTION 335 -#define NONPARTICIPANT 336 -#define OPAQUE 337 -#define OPTPARTICIPANT 338 -#define PARENT 339 -#define PERIOD 340 -#define PRIVATE 341 -#define PROCEDURE 342 -#define PUBLIC 343 -#define PUBLISH 344 -#define RECUR 345 -#define REFRESH 346 -#define REPLY 347 -#define REQPARTICIPANT 348 -#define REQUEST 349 -#define RESOURCE 350 -#define ROOM 351 -#define SIBLING 352 -#define START 353 -#define TENTATIVE 354 -#define TEXT 355 -#define THISANDFUTURE 356 -#define THISANDPRIOR 357 -#define TIME 358 -#define TRANSPAENT 359 -#define UNKNOWN 360 -#define UTCOFFSET 361 -#define XNAME 362 -#define ALTREP 363 -#define CN 364 -#define CUTYPE 365 -#define DAYLIGHT 366 -#define DIR 367 -#define ENCODING 368 -#define EVENT 369 -#define FBTYPE 370 -#define FMTTYPE 371 -#define LANGUAGE 372 -#define MEMBER 373 -#define PARTSTAT 374 -#define RANGE 375 -#define RELATED 376 -#define RELTYPE 377 -#define ROLE 378 -#define RSVP 379 -#define SENTBY 380 -#define STANDARD 381 -#define URI 382 -#define TIME_CHAR 383 -#define UTC_CHAR 384 - - -extern YYSTYPE icalparser_yylval; diff --git a/libical/src/libical/icalitipl.l b/libical/src/libical/icalitipl.l deleted file mode 100644 index 9abe9538c9..0000000000 --- a/libical/src/libical/icalitipl.l +++ /dev/null @@ -1,283 +0,0 @@ -%{ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalitip.y - CREATOR: eric 10 June 1999 - - DESCRIPTION: - - $Id: icalitipl.l,v 1.3 2000/05/15 06:18:17 ericb Exp $ - $Locker: $ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalitip.y - - - - ======================================================================*/ -#include "icalitipy.h" -#include "icalparser.h" -#include "icalenums.h" -#include "icalmemory.h" -#include "assert.h" - -#include /* For strdup() */ - -#define ICAL_MAX_STR_CONST 1024 - -#undef YY_INPUT -#define YY_INPUT(b,r,ms) ( r= icalparser_flex_input(b,ms)) -#undef yywrap - -#undef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) icalparser_yyerror(msg) - -icalvalue_kind value_kind=ICAL_NO_VALUE; -void set_parser_value_state(); -extern enum icalparser_state_enum icalparser_state; -extern int yydebug; - -void icalparser_yyerror(char *s); - -void init_str_buf(); - -int last_state; - -char *str_buf; -char *str_buf_p; -size_t buf_sz; /* = ICAL_MAX_STR_CONST;*/ - - -%} - -crlf \x0D\x0A -nl \n -lbreak \x0D\x0A\x20 -ulbreak \x0A\x20 -space [ ] -qsafechar [^\x00-\x1F\"] -safechar [^\x00-\x1F\"\:\;\,] -tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E] -valuechar [^\x00-\x08\x10-\x1F] -xname X-[a-zA-Z0-9\-]+ -xname2 [a-zA-Z0-9\-\ ] -paramtext {safechar}+ -value {valuechar}+ -quotedstring \"{qsafechar}+\" -digit [0-9] - -%array /* Make yytext an array. Slow, but handy. HACK */ - -%option caseless - - -%s quoted_string -%s binary_value boolean_value uri_value time_value duration_value number_value period_value recur_value text_value utcoffset_value -%s enum_param_value string_param_value stringlist_param_value keyword line_start component seperator parameter end_of_value paramtext - - - -%% - -%{ -%} - - -{ -.* { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); - return STRING;} -{crlf}|\n { return EOL;} - -} - -{ -. { return CHARACTER; } -{crlf}|\n { return EOL;} - -} - -{ -.* { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); - return STRING;} -{crlf}|\n { return EOL;} - -} - - -{ -{digit}* { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); - return DIGITS; } -T { return TIME_CHAR; } -Z { return UTC_CHAR; } -{crlf}|\n { return EOL;} -} - -{ -{digit}+ { icalparser_yylval.v_string =icalmemory_tmp_copy(yytext); - return DIGITS; } -T { return TIME_CHAR; } -[\+\-PTWHMSD] { return yytext[0]; } -{crlf}|\n { return EOL;} - -} - -{ -[\+\-\.0-9]+ { icalparser_yylval.v_int=atoi(yytext); return INTNUMBER; } -{crlf}|\n { return EOL;} -} - -{ -{digit}+ { icalparser_yylval.v_string =icalmemory_tmp_copy(yytext) ; - return DIGITS; } -T { return TIME_CHAR; } -Z { return UTC_CHAR; } -[\/\+\-PWHMSD] { return yytext[0]; } -{crlf}|\n { return EOL;} - -} - -{ -INTERVAL { return INTERVAL; } -COUNT { return COUNT; } -UNTIL { return UNTIL; } -FREQ { return FREQ; } -BYDAY { return BYDAY; } -BYHOUR { return BYHOUR; } -BYMINUTE { return BYMINUTE; } -BYMONTH { return BYMONTH; } -BYMONTHDAY { return BYMONTHDAY; } -BYSECOND { return BYSECOND; } -BYSETPOS { return BYSETPOS; } -BYWEEKNO { return BYWEEKNO; } -BYYEARDAY { return BYYEARDAY; } -DAILY { return DAILY; } -SECONDLY { return SECONDLY; } -MINUTELY { return MINUTELY; } -HOURLY { return HOURLY; } -MONTHLY { return MONTHLY; } -WEEKLY { return WEEKLY; } -YEARLY { return YEARLY; } -WKST { return WKST; } -MO { return MO; } -SA { return SA; } -SU { return SU; } -TU { return TU; } -WE { return WE; } -TH { return TH; } -FR { return FR; } -= { return EQUALS; } -, { return COMMA; } -; { return SEMICOLON; } -[\-\+0-9]+ { icalparser_yylval.v_string= icalmemory_tmp_copy(yytext); - return DIGITS; } -T { return TIME_CHAR; } -Z { return UTC_CHAR; } -{crlf}|\n { return EOL;} -} - -{ -{crlf}|\n { return EOL;} -\-|\+ { return yytext[0]; } -{digit}{digit} { icalparser_yylval.v_int=atoi(yytext); return INTNUMBER; } - -} - -{ -. { return CHARACTER; } -{crlf}|\n { return EOL;} - -} - -{ -, { BEGIN(last_state); return COMMA; } -} - - -%% - -int yywrap() -{ - return 1; -} - - -void set_parser_value_state(icalvalue_kind kind) -{ - - switch (kind){ - - case ICAL_ATTACH_VALUE: - case ICAL_BINARY_VALUE: - {BEGIN(binary_value);break;} - - case ICAL_BOOLEAN_VALUE: - case ICAL_INTEGER_VALUE: - case ICAL_FLOAT_VALUE: - {BEGIN(number_value);break;} - - case ICAL_UTCOFFSET_VALUE: - {BEGIN(utcoffset_value);break;} - - case ICAL_TEXT_VALUE: - {BEGIN(text_value); - init_str_buf(); - break;} - - case ICAL_CALADDRESS_VALUE: - case ICAL_URI_VALUE: - {BEGIN(uri_value);break;} - - case ICAL_DATE_VALUE: - case ICAL_DATETIME_VALUE: - case ICAL_DATETIMEDATE_VALUE: - case ICAL_DATETIMEPERIOD_VALUE: - case ICAL_TIME_VALUE: - {BEGIN(time_value);break;} - - case ICAL_DURATION_VALUE: - {BEGIN(duration_value);break;} - - case ICAL_PERIOD_VALUE: - {BEGIN(period_value);break;} - - case ICAL_GEO_VALUE: - case ICAL_QUERY_VALUE: - {BEGIN(text_value);break;} - - case ICAL_RECUR_VALUE: - {BEGIN(recur_value);break;} - - case ICAL_NO_VALUE: - { - /* The value is probably actually a component name */ - {BEGIN(component); break;} - } - default: - { - assert(1==0); - } - } -} - -void init_str_buf() -{ - str_buf = icalmemory_tmp_buffer(ICAL_MAX_STR_CONST); - str_buf_p = str_buf; - buf_sz = ICAL_MAX_STR_CONST; - - -} - diff --git a/libical/src/libical/icalitipy.y b/libical/src/libical/icalitipy.y deleted file mode 100644 index 07573d62cd..0000000000 --- a/libical/src/libical/icalitipy.y +++ /dev/null @@ -1,434 +0,0 @@ -%{ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalitip.y - CREATOR: eric 10 June 1999 - - DESCRIPTION: - - $Id: icalitipy.y,v 1.3 2000/05/15 06:18:17 ericb Exp $ - $Locker: $ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalitip.y - - - - ================================b======================================*/ - -#include -#include /* for strdup() */ -#include /* for SHRT_MAX*/ -#include "icalparser.h" -#include "ical.h" -#include "pvl.h" - -#define YYERROR_VERBOSE -#define YYDEBUG 1 - -icalvalue *icalparser_yy_value; /* Current Value */ - -/* Globals for UTCOFFSET values */ -int utc; -int utc_b; -int utcsign; - -/* Globals for DURATION values */ -struct icaldurationtype duration; - -/* Globals for RECUR values */ -struct icalrecurrencetype recur; -short skiplist[367]; -short skippos; - -void copy_list(short* array, size_t size); -void clear_recur(); -void add_prop(icalproperty_kind); -void icalparser_fill_date(struct tm* t, char* dstr); -void icalparser_fill_time(struct tm* t, char* tstr); -void set_value_type(icalvalue_kind kind); -void yyerror(char *s); /* Don't know why I need this.... */ -int yylex(void); /* Or this. */ -void set_parser_value_state(); -struct icaltimetype fill_datetime(char* d, char* t); - - - -/* Set the state of the lexer so it will interpret values ( iCAL - VALUEs, that is, ) correctly. */ - -%} - -%union { - float v_float; - int v_int; - char* v_string; - -} - -%token DIGITS -%token INTNUMBER -%token FLOATNUMBER -%token STRING -%token EOL EQUALS CHARACTER COLON COMMA SEMICOLON TIMESEPERATOR - -%token TRUE FALSE - -%token FREQ BYDAY BYHOUR BYMINUTE BYMONTH BYMONTHDAY BYSECOND BYSETPOS BYWEEKNO -%token BYYEARDAY DAILY MINUTELY MONTHLY SECONDLY WEEKLY HOURLY YEARLY -%token INTERVAL COUNT UNTIL WKST MO SA SU TU WE TH FR - -%token BIT8 ACCEPTED ADD AUDIO BASE64 BINARY BOOLEAN BUSY BUSYTENTATIVE -%token BUSYUNAVAILABLE CALADDRESS CANCEL CANCELLED CHAIR CHILD COMPLETED -%token CONFIDENTIAL CONFIRMED COUNTER DATE DATETIME DECLINECOUNTER DECLINED -%token DELEGATED DISPLAY DRAFT DURATION EMAIL END FINAL FLOAT FREE GREGORIAN -%token GROUP INDIVIDUAL INPROCESS INTEGER NEEDSACTION NONPARTICIPANT -%token OPAQUE OPTPARTICIPANT PARENT PERIOD PRIVATE PROCEDURE PUBLIC PUBLISH -%token RECUR REFRESH REPLY REQPARTICIPANT REQUEST RESOURCE ROOM SIBLING -%token START TENTATIVE TEXT THISANDFUTURE THISANDPRIOR TIME TRANSPAENT -%token UNKNOWN UTCOFFSET XNAME - -%token ALTREP CN CUTYPE DAYLIGHT DIR ENCODING EVENT FBTYPE FMTTYPE LANGUAGE -%token MEMBER PARTSTAT RANGE RELATED RELTYPE ROLE RSVP SENTBY STANDARD URI - -%token TIME_CHAR UTC_CHAR - - -%% - -value: - binary_value - | boolean_value - | date_value - | datetime_value - | duration_value - | period_value - | recur_value - | utcoffset_value - | error { - icalparser_yy_value = 0; - icalparser_clear_flex_input(); - yyclearin; - } - -binary_value: "unimplemented2" - -boolean_value: - TRUE - { icalparser_yy_value = icalvalue_new_boolean(1); } - | FALSE - { icalparser_yy_value = icalvalue_new_boolean(0); } - -date_value: DIGITS - { - struct icaltimetype stm; - - stm = fill_datetime($1,0); - - stm.hour = -1; - stm.minute = -1; - stm.second = -1; - stm.is_utc = 0; - stm.is_date = 1; - - icalparser_yy_value = icalvalue_new_date(stm); - } - -utc_char: - /*empty*/ {utc = 0;} - | UTC_CHAR {utc = 1;} - -/* This is used in the period_value, where there may be two utc characters per rule. */ -utc_char_b: - /*empty*/ {utc_b = 0;} - | UTC_CHAR {utc_b = 1;} - -datetime_value: - DIGITS TIME_CHAR DIGITS utc_char - { - struct icaltimetype stm; - stm = fill_datetime($1, $3); - stm.is_utc = utc; - stm.is_date = 0; - - icalparser_yy_value = - icalvalue_new_datetime(stm); - } - - -/* Duration */ - - -dur_date: dur_day - | dur_day dur_time - -dur_week: DIGITS 'W' - { - duration.weeks = atoi($1); - } - -dur_time: TIME_CHAR dur_hour - { - } - | TIME_CHAR dur_minute - { - } - | TIME_CHAR dur_second - { - } - -dur_hour: DIGITS 'H' - { - duration.hours = atoi($1); - } - | DIGITS 'H' dur_minute - { - duration.hours = atoi($1); - } - -dur_minute: DIGITS 'M' - { - duration.minutes = atoi($1); - } - | DIGITS 'M' dur_second - { - duration.minutes = atoi($1); - } - -dur_second: DIGITS 'S' - { - duration.seconds = atoi($1); - } - -dur_day: DIGITS 'D' - { - duration.days = atoi($1); - } - -dur_prefix: /* empty */ - { - } - | '+' - { - } - | '-' - { - } - -duration_value: dur_prefix 'P' dur_date - { - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - } - | dur_prefix 'P' dur_time - { - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - } - | dur_prefix 'P' dur_week - { - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - } - - -/* Period */ - -period_value: DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b - { - struct icalperiodtype p; - - p.start = fill_datetime($1,$3); - p.start.is_utc = utc; - p.start.is_date = 0; - - - p.end = fill_datetime($6,$8); - p.end.is_utc = utc_b; - p.end.is_date = 0; - - p.duration.days = -1; - p.duration.weeks = -1; - p.duration.hours = -1; - p.duration.minutes = -1; - p.duration.seconds = -1; - - icalparser_yy_value = icalvalue_new_period(p); - } - | DIGITS TIME_CHAR DIGITS utc_char '/' duration_value - { - struct icalperiodtype p; - - p.start = fill_datetime($1,$3); - p.start.is_utc = utc; - p.start.is_date = 0; - - p.end.year = -1; - p.end.month = -1; - p.end.day = -1; - p.end.hour = -1; - p.end.minute = -1; - p.end.second = -1; - - /* The duration_value rule setes the global 'duration' - variable, but it also creates a new value in - icalparser_yy_value. So, free that, then copy - 'duration' into the icalperiodtype struct. */ - - p.duration = icalvalue_get_duration(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); - icalparser_yy_value = 0; - - icalparser_yy_value = icalvalue_new_period(p); - - } - - - -/* Recur */ - -recur_start: - FREQ EQUALS SECONDLY {clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;} - | FREQ EQUALS MINUTELY {clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;} - | FREQ EQUALS HOURLY {clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;} - | FREQ EQUALS DAILY {clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;} - | FREQ EQUALS WEEKLY {clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;} - | FREQ EQUALS MONTHLY {clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;} - | FREQ EQUALS YEARLY {clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;} - ; - - -weekday: - SU { skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;} - | MO { skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;} - | TU { skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;} - | WE { skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;} - | TH { skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;} - | FR { skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;} - | SA { skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;} - ; - - -weekday_list: - weekday - | DIGITS weekday { } /* HACK Incorectly handles int in BYDAY */ - | weekday_list COMMA weekday - - -recur_list: - DIGITS { skiplist[skippos] = atoi($1); skippos++;} - | recur_list COMMA DIGITS { skiplist[skippos] = atoi($3); if (skippos<367) skippos++;} - ; - -recur_skip: - INTERVAL EQUALS DIGITS {recur.interval = atoi($3);} - | WKST EQUALS SU {recur.week_start = ICAL_SUNDAY_WEEKDAY;} - | WKST EQUALS MO {recur.week_start = ICAL_MONDAY_WEEKDAY;} - | WKST EQUALS TU {recur.week_start = ICAL_TUESDAY_WEEKDAY;} - | WKST EQUALS WE {recur.week_start = ICAL_WEDNESDAY_WEEKDAY;} - | WKST EQUALS TH {recur.week_start = ICAL_THURSDAY_WEEKDAY;} - | WKST EQUALS FR {recur.week_start = ICAL_FRIDAY_WEEKDAY;} - | WKST EQUALS SA {recur.week_start = ICAL_SATURDAY_WEEKDAY;} - | BYSECOND EQUALS recur_list{copy_list(recur.by_second,60);} - | BYMINUTE EQUALS recur_list{copy_list(recur.by_minute,60);} - | BYHOUR EQUALS recur_list{copy_list(recur.by_hour,24);} - | BYDAY EQUALS weekday_list{copy_list(recur.by_day,7);} - | BYMONTH EQUALS recur_list{copy_list(recur.by_month,12);} - | BYMONTHDAY EQUALS recur_list{copy_list(recur.by_month_day,31);} - | BYYEARDAY EQUALS recur_list{copy_list(recur.by_year_day,366);} - | BYWEEKNO EQUALS recur_list{copy_list(recur.by_week_no,53);} - | BYSETPOS EQUALS recur_list{copy_list(recur.by_set_pos,366);} - | UNTIL EQUALS datetime_value - { recur.until = icalvalue_get_datetime(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} - | UNTIL EQUALS date_value - { recur.until = icalvalue_get_date(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} - | COUNT EQUALS DIGITS - { recur.count = atoi($3); } - ; - -recur_skip_list: - /* empty */ - | recur_skip_list SEMICOLON recur_skip - -recur_value: - recur_start recur_skip_list - { icalparser_yy_value = icalvalue_new_recur(recur); } - - - -/* UTC Offset */ - -plusminus: '+' { utcsign = 1; } - | '-' { utcsign = -1; } - -utcoffset_value: - plusminus INTNUMBER INTNUMBER - { - icalparser_yy_value = icalvalue_new_utcoffset( utcsign * ($2*3600) + ($3*60) ); - } - - | plusminus INTNUMBER INTNUMBER INTNUMBER - { - icalparser_yy_value = icalvalue_new_utcoffset(utcsign * ($2*3600) + ($3*60) +($4)); - } - - - -%% - - -void clear_recur() -{ - memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; - - icalrecurrencetype_clear(&recur); -} - -void copy_list(short* array, size_t size) -{ - memcpy(array, skiplist, size*sizeof(short)); - memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; -} - -struct icaltimetype fill_datetime(char* datestr, char* timestr) -{ - struct icaltimetype stm; - - memset(&stm,0,sizeof(stm)); - - if (datestr != 0){ - sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), - &(stm.day)); - } - - if (timestr != 0){ - sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), - &(stm.second)); - } - - return stm; - -} - -void yyerror(char* s) -{ - /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ -} - diff --git a/libical/src/libical/icallexer.l b/libical/src/libical/icallexer.l deleted file mode 100644 index 8a6db2f93b..0000000000 --- a/libical/src/libical/icallexer.l +++ /dev/null @@ -1,286 +0,0 @@ -%{ -/* -*- Mode: C -*- - ====================================================================== - FILE: icallexer.l - CREATOR: eric 10 June 1999 - - DESCRIPTION: - - $Id: icallexer.l,v 1.4 2000/06/06 22:48:09 alves Exp $ - $Locker: $ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalitip.y - - - - ======================================================================*/ -#include "icalyacc.h" -#include "icalparser.h" -#include "icalenums.h" -#include "icalmemory.h" -#include "assert.h" - -#include /* For strdup() */ - -int icalparser_flex_input(char* buf, int max_size); -void icalparser_clear_flex_input(); - - -#define ICAL_MAX_STR_CONST 1024 - -#undef YY_INPUT -#define YY_INPUT(b,r,ms) ( r= icalparser_flex_input(b,ms)) -#undef yywrap - -#undef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yyerror(msg) - -icalvalue_kind value_kind=ICAL_NO_VALUE; -void set_parser_value_state(); -extern int yydebug; - -void yyerror(char *s); - -void init_str_buf(); - -int last_state; - -char *str_buf; -char *str_buf_p; -size_t buf_sz; /* = ICAL_MAX_STR_CONST;*/ - - -%} - -crlf \x0D?\x0A -space [ ] -qsafechar [^\x00-\x1F\"] -safechar [^\x00-\x1F\"\:\;\,] -tsafechar [\x20-\x21\x23-\x2B\x2D-\x39\x3C-\x5B\x5D-\x7E] -valuechar [^\x00-\x08\x10-\x1F] -xname X-[a-zA-Z0-9\-]+ -xname2 [a-zA-Z0-9\-\ ] -paramtext {safechar}+ -value {valuechar}+ -quotedstring \"{qsafechar}+\" -digit [0-9] - -%array /* Make yytext an array. Slow, but handy. HACK */ - -%option caseless - -%s quoted_string -%s binary_value boolean_value uri_value time_value duration_value number_value period_value recur_value text_value utcoffset_value -%s enum_param_value string_param_value stringlist_param_value keyword line_start component seperator parameter end_of_value paramtext - - - -%% - -%{ -%} - - -{ -.* { yylval.v_string= icalmemory_tmp_copy(yytext); - return STRING;} -{crlf} { return EOL;} - -} - -{ -. { return CHARACTER; } -{crlf} { return EOL;} - -} - -{ -.* { yylval.v_string= icalmemory_tmp_copy(yytext); - return STRING;} -{crlf} { return EOL;} - -} - - -{ -{digit}* { yylval.v_string= icalmemory_tmp_copy(yytext); - return DIGITS; } -T { return TIME_CHAR; } -Z { return UTC_CHAR; } -{crlf} { return EOL;} -. { return CHARACTER; } - -} - -{ -{digit}+ { yylval.v_string =icalmemory_tmp_copy(yytext); - return DIGITS; } -T { return TIME_CHAR; } -[\+\-PTWHMSD] { return yytext[0]; } -{crlf} { return EOL;} - -} - -{ -[\+\-\.0-9]+ { yylval.v_int=atoi(yytext); return INTNUMBER; } -{crlf} { return EOL;} -. { return CHARACTER; } - -} - -{ -{digit}+ { yylval.v_string =icalmemory_tmp_copy(yytext) ; - return DIGITS; } -T { return TIME_CHAR; } -Z { return UTC_CHAR; } -[\/\+\-PWHMSD] { return yytext[0]; } -{crlf} { return EOL;} - -} - -{ -INTERVAL { return INTERVAL; } -COUNT { return COUNT; } -UNTIL { return UNTIL; } -FREQ { return FREQ; } -BYDAY { return BYDAY; } -BYHOUR { return BYHOUR; } -BYMINUTE { return BYMINUTE; } -BYMONTH { return BYMONTH; } -BYMONTHDAY { return BYMONTHDAY; } -BYSECOND { return BYSECOND; } -BYSETPOS { return BYSETPOS; } -BYWEEKNO { return BYWEEKNO; } -BYYEARDAY { return BYYEARDAY; } -DAILY { return DAILY; } -SECONDLY { return SECONDLY; } -MINUTELY { return MINUTELY; } -HOURLY { return HOURLY; } -MONTHLY { return MONTHLY; } -WEEKLY { return WEEKLY; } -YEARLY { return YEARLY; } -WKST { return WKST; } -MO { return MO; } -SA { return SA; } -SU { return SU; } -TU { return TU; } -WE { return WE; } -TH { return TH; } -FR { return FR; } -= { return EQUALS; } -, { return COMMA; } -; { return SEMICOLON; } -[\-\+0-9]+ { yylval.v_string= icalmemory_tmp_copy(yytext); - return DIGITS; } -T { return TIME_CHAR; } -Z { return UTC_CHAR; } -{crlf} { return EOL;} -} - -{ -{crlf} { return EOL;} -\-|\+ { return yytext[0]; } -{digit}{digit} { yylval.v_int=atoi(yytext); return INTNUMBER; } - -} - -{ -. { return CHARACTER; } -{crlf} { return EOL;} - -} - -{ -, { BEGIN(last_state); return COMMA; } -} - - -%% - -int yywrap() -{ - return 1; -} - - -void set_parser_value_state(icalvalue_kind kind) -{ - - switch (kind){ - - case ICAL_ATTACH_VALUE: - case ICAL_BINARY_VALUE: - {BEGIN(binary_value);break;} - - case ICAL_BOOLEAN_VALUE: - case ICAL_INTEGER_VALUE: - case ICAL_FLOAT_VALUE: - {BEGIN(number_value);break;} - - case ICAL_UTCOFFSET_VALUE: - {BEGIN(utcoffset_value);break;} - - case ICAL_TEXT_VALUE: - {BEGIN(text_value); - init_str_buf(); - break;} - - case ICAL_CALADDRESS_VALUE: - case ICAL_URI_VALUE: - {BEGIN(uri_value);break;} - - case ICAL_DATE_VALUE: - case ICAL_DATETIME_VALUE: - case ICAL_DATETIMEDATE_VALUE: - case ICAL_DATETIMEPERIOD_VALUE: - case ICAL_TIME_VALUE: - {BEGIN(time_value);break;} - - case ICAL_DURATION_VALUE: - {BEGIN(duration_value);break;} - - case ICAL_PERIOD_VALUE: - {BEGIN(period_value);break;} - - case ICAL_GEO_VALUE: - case ICAL_QUERY_VALUE: - {BEGIN(text_value);break;} - - case ICAL_RECUR_VALUE: - {BEGIN(recur_value);break;} - - case ICAL_NO_VALUE: - { - /* The value is probably actually a component name */ - {BEGIN(component); break;} - } - default: - { - assert(1==0); - } - } -} - -void init_str_buf() -{ - str_buf = icalmemory_tmp_buffer(ICAL_MAX_STR_CONST); - str_buf_p = str_buf; - buf_sz = ICAL_MAX_STR_CONST; - - -} - diff --git a/libical/src/libical/icalmemory.c b/libical/src/libical/icalmemory.c deleted file mode 100644 index 35544b14ee..0000000000 --- a/libical/src/libical/icalmemory.c +++ /dev/null @@ -1,244 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalmemory.c - CREATOR: eric 30 June 1999 - - $Id$ - $Locker$ - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is icalmemory.h - The Initial Developer of the Original Code is Eric Busboom - - (C) COPYRIGHT 1999 The Software Studio. - http://www.softwarestudio.org - - ======================================================================*/ - -/* libical often passes strings back to the caller. To make these - * interfaces simple, I did not want the caller to have to pass in a - * memory buffer, but having libical pass out newly allocated memory - * makes it difficult to de-allocate the memory. - * - * The ring buffer in this scheme makes it possible for libical to pass - * out references to memory which the caller does not own, and be able - * to de-allocate the memory later. The ring allows libical to have - * several buffers active simultaneously, which is handy when creating - * string representations of components. */ - -#define ICALMEMORY_C - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "icalmemory.h" -#include "icalerror.h" - -#include /* for printf (debugging) */ -#include /* for malloc, realloc */ -#include /* for memset() */ - -#define BUFFER_RING_SIZE 25 -#define MIN_BUFFER_SIZE 200 - -void* buffer_ring[BUFFER_RING_SIZE+1]; -int buffer_pos = 0; -int initialized = 0; - -/* Create a new temporary buffer on the ring. Libical owns these and wil deallocate them. */ -void* -icalmemory_tmp_buffer (size_t size) -{ - void *rtrn; - /* I don't think I need this -- I think static arrays are - initialized to 0 as a standard part of C, but I am not sure. */ - - if (initialized == 0){ - int i; - for(i=0; i BUFFER_RING_SIZE){ - buffer_pos = 0; - } - - return rtrn; -} - -void icalmemory_free_ring() -{ - - int i; - for(i=0; i= (size_t) *buf_size) { - - - *buf_size = (*buf_size) * 2 + final_length; - - new_buf = realloc(*buf,*buf_size); - - new_pos = (void*)((size_t)new_buf + data_length); - - *pos = new_pos; - *buf = new_buf; - } - - strcpy(*pos, string); - - *pos += string_length; -} - - -void -icalmemory_append_char(char** buf, char** pos, size_t* buf_size, - char ch) -{ - char *new_buf; - char *new_pos; - - size_t data_length, final_length; - -#ifndef ICAL_NO_INTERNAL_DEBUG - icalerror_check_arg_rv( (buf!=0),"buf"); - icalerror_check_arg_rv( (*buf!=0),"*buf"); - icalerror_check_arg_rv( (pos!=0),"pos"); - icalerror_check_arg_rv( (*pos!=0),"*pos"); - icalerror_check_arg_rv( (buf_size!=0),"buf_size"); - icalerror_check_arg_rv( (*buf_size!=0),"*buf_size"); -#endif - - data_length = (size_t)*pos - (size_t)*buf; - - final_length = data_length + 2; - - if ( final_length > (size_t) *buf_size ) { - - - *buf_size = (*buf_size) * 2 + final_length +1; - - new_buf = realloc(*buf,*buf_size); - - new_pos = (void*)((size_t)new_buf + data_length); - - *pos = new_pos; - *buf = new_buf; - } - - **pos = ch; - *pos += 1; - -} diff --git a/libical/src/libical/icalmemory.h b/libical/src/libical/icalmemory.h deleted file mode 100644 index 26d22b7316..0000000000 --- a/libical/src/libical/icalmemory.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalmemory.h - CREATOR: eric 30 June 1999 - - - $Id$ - $Locker$ - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is icalmemory.h - The Initial Developer of the Original Code is Eric Busboom - - (C) COPYRIGHT 1999 The Software Studio. - http://www.softwarestudio.org - -======================================================================*/ - -#ifndef ICALMEMORY_H -#define ICALMEMORY_H - -#include /* for size_t */ - -/* Tmp buffers are managed by ical. References can be returned to the caller, although the caller will not own the memory. */ - -void* icalmemory_tmp_buffer(size_t size); -char* icalmemory_tmp_copy(char* str); - -/* Add an externally allocated buffer to the ring. */ -void icalmemory_add_tmp_buffer(void*); - - -/* Free all memory used in the ring */ -void icalmemory_free_ring(); - -/* Non-tmp buffers must be freed. These are mostly wrappers around - * malloc, etc, but are used so the caller can change the memory - * allocators in a future version of the library */ - -void* icalmemory_new_buffer(size_t size); -void* icalmemory_resize_buffer(void* buf, size_t size); -void icalmemory_free_buffer(void* buf); - -/* icalmemory_append_string will copy the string 'string' to the - buffer 'buf' starting at position 'pos', reallocing 'buf' if it is - too small. 'buf_size' is the size of 'buf' and will be changed if - 'buf' is reallocated. 'pos' will point to the last byte of the new - string in 'buf', usually a '\0' */ - -/* THESE ROUTINES CAN NOT BE USED ON TMP BUFFERS. Only use them on - normally allocated memory, or on buffers created from - icalmemory_new_buffer, never with buffers created by - icalmemory_tmp_buffer. If icalmemory_append_string has to resize a - buffer on the ring, the ring will loose track of it an you will - have memory problems. */ - -void icalmemory_append_string(char** buf, char** pos, size_t* buf_size, - char* string); - -/* icalmemory_append_char is similar, but is appends a character instead of a string */ -void icalmemory_append_char(char** buf, char** pos, size_t* buf_size, - char ch); - -#endif /* !ICALMEMORY_H */ - - - diff --git a/libical/src/libical/icalparameter.c b/libical/src/libical/icalparameter.c deleted file mode 100644 index cf37eb07b2..0000000000 --- a/libical/src/libical/icalparameter.c +++ /dev/null @@ -1,1913 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalderivedparameters.{c,h} - CREATOR: eric 09 May 1999 - - $Id$ - $Locker$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalderivedparameters.{c,h} - - Contributions from: - Graham Davison (g.m.davison@computer.org) - - ======================================================================*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "ical.h" -#include "icalerror.h" -#include /* for malloc() */ -#include -#include /* for memset() */ -#include "icalmemory.h" - -struct icalparameter_impl -{ - icalparameter_kind kind; - char id[5]; - int size; - char* string; - char* x_name; - icalproperty* parent; - - union data { - int v_int; - int v_rsvp; - icalparameter_cutype v_cutype; - icalparameter_encoding v_encoding; - icalparameter_fbtype v_fbtype; - icalparameter_partstat v_partstat; - icalparameter_range v_range; - icalparameter_related v_related; - icalparameter_reltype v_reltype; - icalparameter_role v_role; - icalparameter_value v_value; - icalparameter_xlicerrortype v_xlicerrortype; - icalparameter_xliccomparetype v_xliccomparetype; - } data; -}; - -struct icalparameter_impl* icalparameter_new_impl(icalparameter_kind kind) -{ - struct icalparameter_impl* v; - - if ( ( v = (struct icalparameter_impl*) - malloc(sizeof(struct icalparameter_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - strcpy(v->id,"para"); - - v->kind = kind; - v->size = 0; - v->string = 0; - v->x_name = 0; - v->parent = 0; - memset(&(v->data),0,sizeof(v->data)); - - return v; -} - -icalparameter* -icalparameter_new (icalparameter_kind kind) -{ - struct icalparameter_impl* v = icalparameter_new_impl(kind); - - return (icalparameter*) v; - -} - -icalparameter* -icalparameter_new_clone(icalparameter* param) -{ - struct icalparameter_impl *old; - struct icalparameter_impl *new; - - old = (struct icalparameter_impl *)param; - new = icalparameter_new_impl(old->kind); - - icalerror_check_arg_rz((param!=0),"param"); - - if (new == 0){ - return 0; - } - - memcpy(new,old,sizeof(struct icalparameter_impl)); - - if (old->string != 0){ - new->string = strdup(old->string); - if (new->string == 0){ - icalparameter_free(new); - return 0; - } - } - - if (old->x_name != 0){ - new->x_name = strdup(old->x_name); - if (new->x_name == 0){ - icalparameter_free(new); - return 0; - } - } - - return new; -} - - -icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* val) -{ - - icalparameter* param=0; - - icalerror_check_arg_rz((val!=0),"val"); - - switch (kind) { - case ICAL_ALTREP_PARAMETER: - { - param = icalparameter_new_altrep(val); - - break; - } - case ICAL_CN_PARAMETER: - { - param = icalparameter_new_cn(val); - - break; - } - case ICAL_CUTYPE_PARAMETER: - { - if(strcmp(val,"INDIVIDUAL") == 0){ - param = icalparameter_new_cutype(ICAL_CUTYPE_INDIVIDUAL); - } - else if(strcmp(val,"GROUP") == 0){ - param = icalparameter_new_cutype(ICAL_CUTYPE_GROUP); - } - else if(strcmp(val,"RESOURCE") == 0){ - param = icalparameter_new_cutype(ICAL_CUTYPE_RESOURCE); - } - else if(strcmp(val,"ROOM") == 0){ - param = icalparameter_new_cutype(ICAL_CUTYPE_ROOM); - } - else if(strcmp(val,"UNKNOWN") == 0){ - param = icalparameter_new_cutype(ICAL_CUTYPE_UNKNOWN); - } - else { - param = icalparameter_new_cutype(ICAL_CUTYPE_XNAME); - icalparameter_set_xvalue(param,val); - } - break; - } - - case ICAL_DELEGATEDFROM_PARAMETER: - { - param = icalparameter_new_delegatedfrom(val); - - break; - } - case ICAL_DELEGATEDTO_PARAMETER: - { - param = icalparameter_new_delegatedto(val); - - break; - } - case ICAL_DIR_PARAMETER: - { - param = icalparameter_new_dir(val); - - break; - } - case ICAL_ENCODING_PARAMETER: - { - if(strcmp(val,"BIT8") == 0){ - param = icalparameter_new_encoding(ICAL_ENCODING_8BIT); - } - else if(strcmp(val,"BASE64") == 0){ - param = icalparameter_new_encoding(ICAL_ENCODING_BASE64); - } - else { - param = icalparameter_new_encoding(ICAL_ENCODING_XNAME); - icalparameter_set_xvalue(param,val); - } - break; - } - case ICAL_FBTYPE_PARAMETER: - { - if(strcmp(val,"FREE") == 0){ - param = icalparameter_new_fbtype(ICAL_FBTYPE_FREE); - } - else if(strcmp(val,"BUSY") == 0){ - param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSY); - } - else if(strcmp(val,"BUSYUNAVAILABLE") == 0){ - param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSYUNAVAILABLE); - } - else if(strcmp(val,"BUSYTENTATIVE") == 0){ - param = icalparameter_new_fbtype(ICAL_FBTYPE_BUSYTENTATIVE); - } - else { - param = icalparameter_new_fbtype(ICAL_FBTYPE_XNAME); - icalparameter_set_xvalue(param,val); - } - break; - } - case ICAL_FMTTYPE_PARAMETER: - { - param = icalparameter_new_fmttype(val); - break; - } - case ICAL_LANGUAGE_PARAMETER: - { - param = icalparameter_new_language(val); - - break; - } - case ICAL_MEMBER_PARAMETER: - { - param = icalparameter_new_member(val); - - break; - } - case ICAL_PARTSTAT_PARAMETER: - { - if(strcmp(val,"NEEDSACTION") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_NEEDSACTION); - } - else if(strcmp(val,"ACCEPTED") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_ACCEPTED); - } - else if(strcmp(val,"DECLINED") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_DECLINED); - } - else if(strcmp(val,"TENTATIVE") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE); - } - else if(strcmp(val,"DELEGATED") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_DELEGATED); - } - else if(strcmp(val,"COMPLETED") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_COMPLETED); - } - else if(strcmp(val,"INPROCESS") == 0){ - param = icalparameter_new_partstat(ICAL_PARTSTAT_INPROCESS); - } - else { - param = icalparameter_new_partstat(ICAL_PARTSTAT_XNAME); - icalparameter_set_xvalue(param,val); - } - break; - } - case ICAL_RANGE_PARAMETER: - { - if(strcmp(val,"THISANDFUTURE") == 0){ - param = icalparameter_new_range(ICAL_RANGE_THISANDFUTURE); - } - else if(strcmp(val,"THISANDPRIOR") == 0){ - param = icalparameter_new_range(ICAL_RANGE_THISANDPRIOR); - } - - break; - } - case ICAL_RELATED_PARAMETER: - { - if(strcmp(val,"START") == 0){ - param = icalparameter_new_related(ICAL_RELATED_START); - } - else if(strcmp(val,"END") == 0){ - param = icalparameter_new_related(ICAL_RELATED_END); - } - - break; - } - case ICAL_RELTYPE_PARAMETER: - { - if(strcmp(val,"PARENT") == 0){ - param = icalparameter_new_reltype(ICAL_RELTYPE_PARENT); - } - else if(strcmp(val,"CHILD") == 0){ - param = icalparameter_new_reltype(ICAL_RELTYPE_CHILD); - } - else if(strcmp(val,"SIBLING") == 0){ - param = icalparameter_new_reltype(ICAL_RELTYPE_SIBLING); - } - else { - param = icalparameter_new_reltype(ICAL_RELTYPE_XNAME); - icalparameter_set_xvalue(param,val); - } - break; - } - case ICAL_ROLE_PARAMETER: - { - if(strcmp(val,"CHAIR") == 0){ - param = icalparameter_new_role(ICAL_ROLE_CHAIR); - } - else if(strcmp(val,"REQ-PARTICIPANT") == 0){ - param = icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT); - } - else if(strcmp(val,"OPT-PARTICIPANT") == 0){ - param = icalparameter_new_role(ICAL_ROLE_OPTPARTICIPANT); - } - else if(strcmp(val,"NON-PARTICIPANT") == 0){ - param = icalparameter_new_role(ICAL_ROLE_NONPARTICIPANT); - } - else { - param = icalparameter_new_role(ICAL_ROLE_XNAME); - icalparameter_set_xvalue(param,val); - } - break; - } - case ICAL_RSVP_PARAMETER: - { - if(strcmp(val,"TRUE") == 0){ - param = icalparameter_new_rsvp(1); - } - else if(strcmp(val,"FALSE") == 0){ - param = icalparameter_new_rsvp(0); - } - - break; - } - case ICAL_SENTBY_PARAMETER: - { - param = icalparameter_new_sentby(val); - - break; - } - case ICAL_TZID_PARAMETER: - { - param = icalparameter_new_tzid(val); - - break; - } - case ICAL_VALUE_PARAMETER: - { - if(strcmp(val,"BINARY") == 0){ - param = icalparameter_new_value(ICAL_VALUE_BINARY); - } - else if(strcmp(val,"BOOLEAN") == 0){ - param = icalparameter_new_value(ICAL_VALUE_BOOLEAN); - } - else if(strcmp(val,"CAL-ADDRESS") == 0){ - param = icalparameter_new_value(ICAL_VALUE_CALADDRESS); - } - else if(strcmp(val,"DATE") == 0){ - param = icalparameter_new_value(ICAL_VALUE_DATE); - } - else if(strcmp(val,"DATE-TIME") == 0){ - param = icalparameter_new_value(ICAL_VALUE_DATETIME); - } - else if(strcmp(val,"DURATION") == 0){ - param = icalparameter_new_value(ICAL_VALUE_DURATION); - } - else if(strcmp(val,"FLOAT") == 0){ - param = icalparameter_new_value(ICAL_VALUE_FLOAT); - } - else if(strcmp(val,"INTEGER") == 0){ - param = icalparameter_new_value(ICAL_VALUE_INTEGER); - } - else if(strcmp(val,"PERIOD") == 0){ - param = icalparameter_new_value(ICAL_VALUE_PERIOD); - } - else if(strcmp(val,"RECUR") == 0){ - param = icalparameter_new_value(ICAL_VALUE_RECUR); - } - else if(strcmp(val,"TEXT") == 0){ - param = icalparameter_new_value(ICAL_VALUE_TEXT); - } - else if(strcmp(val,"TIME") == 0){ - param = icalparameter_new_value(ICAL_VALUE_TIME); - } - else if(strcmp(val,"URI") == 0){ - param = icalparameter_new_value(ICAL_VALUE_URI); - } - else if(strcmp(val,"UTC-OFFSET") == 0){ - param = icalparameter_new_value(ICAL_VALUE_UTCOFFSET); - } - else { - param = 0; - } - break; - } - case ICAL_XLICERRORTYPE_PARAMETER: - { - - if(strcmp(val,"COMPONENT_PARSE_ERROR") == 0){ - param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); - } - else if(strcmp(val,"PROPERTY_PARSE_ERROR") == 0){ - param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_PROPERTYPARSEERROR); - } - else if(strcmp(val,"PARAMETER_NAME_PARSE_ERROR") == 0){ - param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); - } - else if(strcmp(val,"PARAMETER_VALUE_PARSE_ERROR") == 0){ - param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); - } - else if(strcmp(val,"VALUE_PARSE_ERROR") == 0){ - param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_VALUEPARSEERROR); - } - else if(strcmp(val,"INVALID_ITIP") == 0){ - param = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); - } - break; - } - - case ICAL_XLICCOMPARETYPE_PARAMETER: - { - - if(strcmp(val,"EQUAL") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_EQUAL); - } - else if(strcmp(val,"NOTEQUAL") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_NOTEQUAL); - } - else if(strcmp(val,"LESS") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_LESS); - } - else if(strcmp(val,"GREATER") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_GREATER); - } - else if(strcmp(val,"LESSEQUAL") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_LESSEQUAL); - } - else if(strcmp(val,"GREATEREQUAL") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_GREATEREQUAL); - } - else if(strcmp(val,"REGEX") == 0){ - param = icalparameter_new_xliccomparetype(ICAL_XLICCOMPARETYPE_REGEX); - } else { - param = 0; - } - break; - } - - - case ICAL_X_PARAMETER: - { - param = icalparameter_new(ICAL_FBTYPE_PARAMETER); - icalparameter_set_xvalue(param,val); - break; - } - - case ICAL_NO_PARAMETER: - default: - { - return 0; - } - - - } - - return param; -} - -void -icalparameter_free (icalparameter* parameter) -{ - struct icalparameter_impl * impl; - - impl = (struct icalparameter_impl*)parameter; - -/* HACK. This always triggers, even when parameter is non-zero - icalerror_check_arg_rv((parameter==0),"parameter");*/ - - -#ifdef ICAL_FREE_ON_LIST_IS_ERROR - icalerror_assert( (impl->parent ==0),"Tried to free a parameter that is still attached to a component. "); - -#else - if(impl->parent !=0){ - return; - } -#endif - - - if (impl->string != 0){ - free (impl->string); - } - - if (impl->x_name != 0){ - free (impl->x_name); - } - - memset(impl,0,sizeof(impl)); - - impl->parent = 0; - impl->id[0] = 'X'; - free(impl); -} - - -char no_parameter[]="Error: No Parameter"; -char* -icalparameter_as_ical_string (icalparameter* parameter) -{ - struct icalparameter_impl* impl; - size_t buf_size = 1024; - char* buf; - char* buf_ptr; - char *out_buf; - char *kind_string; - - char tend[1024]; /* HACK . Should be using memory buffer ring */ - - icalerror_check_arg_rz( (parameter!=0), "parameter"); - - /* Create new buffer that we can append names, parameters and a - value to, and reallocate as needed. Later, this buffer will be - copied to a icalmemory_tmp_buffer, which is managed internally - by libical, so it can be given to the caller without fear of - the caller forgetting to free it */ - - buf = icalmemory_new_buffer(buf_size); - buf_ptr = buf; - impl = (struct icalparameter_impl*)parameter; - - kind_string = icalenum_parameter_kind_to_string(impl->kind); - - if (impl->kind == ICAL_NO_PARAMETER || - impl->kind == ICAL_ANY_PARAMETER || - kind_string == 0) - { - icalerror_set_errno(ICAL_BADARG_ERROR); - return 0; - } - - /* Put the parameter name into the string */ - icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, "="); - - switch (impl->kind) { - case ICAL_CUTYPE_PARAMETER: - { - switch (impl->data.v_cutype) { - case ICAL_CUTYPE_INDIVIDUAL: { - strcpy(tend,"INDIVIDUAL");break; - } - case ICAL_CUTYPE_GROUP:{ - strcpy(tend,"GROUP");break; - } - case ICAL_CUTYPE_RESOURCE: { - strcpy(tend,"RESOURCE");break; - } - case ICAL_CUTYPE_ROOM:{ - strcpy(tend,"ROOM");break; - } - case ICAL_CUTYPE_UNKNOWN:{ - strcpy(tend,"UNKNOWN");break; - } - case ICAL_CUTYPE_XNAME:{ - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - - } - case ICAL_ENCODING_PARAMETER: - { - switch (impl->data.v_encoding) { - case ICAL_ENCODING_8BIT: { - strcpy(tend,"8BIT");break; - } - case ICAL_ENCODING_BASE64:{ - strcpy(tend,"BASE64");break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - - case ICAL_FBTYPE_PARAMETER: - { - switch (impl->data.v_fbtype) { - case ICAL_FBTYPE_FREE:{ - strcpy(tend,"FREE");break; - } - case ICAL_FBTYPE_BUSY: { - strcpy(tend,"BUSY");break; - } - case ICAL_FBTYPE_BUSYUNAVAILABLE:{ - strcpy(tend,"BUSYUNAVAILABLE");break; - } - case ICAL_FBTYPE_BUSYTENTATIVE:{ - strcpy(tend,"BUSYTENTATIVE");break; - } - case ICAL_FBTYPE_XNAME:{ - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - - } - case ICAL_PARTSTAT_PARAMETER: - { - switch (impl->data.v_partstat) { - case ICAL_PARTSTAT_NEEDSACTION: { - strcpy(tend,"NEEDSACTION");break; - } - case ICAL_PARTSTAT_ACCEPTED: { - strcpy(tend,"ACCEPTED");break; - } - case ICAL_PARTSTAT_DECLINED:{ - strcpy(tend,"DECLINED");break; - } - case ICAL_PARTSTAT_TENTATIVE:{ - strcpy(tend,"TENTATIVE");break; - } - case ICAL_PARTSTAT_DELEGATED:{ - strcpy(tend,"DELEGATED");break; - } - case ICAL_PARTSTAT_COMPLETED:{ - strcpy(tend,"COMPLETED");break; - } - case ICAL_PARTSTAT_INPROCESS:{ - strcpy(tend,"INPROCESS");break; - } - case ICAL_PARTSTAT_XNAME:{ - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - - } - case ICAL_RANGE_PARAMETER: - { - switch (impl->data.v_range) { - case ICAL_RANGE_THISANDPRIOR: { - strcpy(tend,"THISANDPRIOR");break; - } - case ICAL_RANGE_THISANDFUTURE: { - strcpy(tend,"THISANDFUTURE");break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - case ICAL_RELATED_PARAMETER: - { - switch (impl->data.v_related) { - case ICAL_RELATED_START: { - strcpy(tend,"START");break; - } - case ICAL_RELATED_END: { - strcpy(tend,"END");break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - case ICAL_RELTYPE_PARAMETER: - { - switch (impl->data.v_reltype) { - case ICAL_RELTYPE_PARENT: { - strcpy(tend,"PARENT");break; - } - case ICAL_RELTYPE_CHILD:{ - strcpy(tend,"CHILD");break; - } - case ICAL_RELTYPE_SIBLING:{ - strcpy(tend,"SIBLING");break; - } - case ICAL_RELTYPE_XNAME:{ - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - case ICAL_ROLE_PARAMETER: - { - switch (impl->data.v_role) { - case ICAL_ROLE_CHAIR: { - strcpy(tend,"CHAIR");break; - } - case ICAL_ROLE_REQPARTICIPANT: { - strcpy(tend,"REQ-PARTICIPANT");break; - } - case ICAL_ROLE_OPTPARTICIPANT: { - strcpy(tend,"OPT-PARTICIPANT");break; - } - case ICAL_ROLE_NONPARTICIPANT: { - strcpy(tend,"NON-PARTICIPANT");break; - } - case ICAL_ROLE_XNAME:{ - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - case ICAL_RSVP_PARAMETER: - { - switch (impl->data.v_rsvp) { - case 1: { - strcpy(tend,"TRUE");break; - } - case 0: { - strcpy(tend,"FALSE");break; - } - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - case ICAL_VALUE_PARAMETER: - { - switch (impl->data.v_value) { - case ICAL_VALUE_BINARY: { - strcpy(tend,"BINARY");break; - } - case ICAL_VALUE_BOOLEAN: { - strcpy(tend,"BOOLEAN");break; - } - case ICAL_VALUE_CALADDRESS: { - strcpy(tend,"CAL-ADDRESS");break; - } - case ICAL_VALUE_DATE: { - strcpy(tend,"DATE");break; - } - case ICAL_VALUE_DATETIME: { - strcpy(tend,"DATE-TIME");break; - } - case ICAL_VALUE_DURATION: { - strcpy(tend,"DURATION");break; - } - case ICAL_VALUE_FLOAT: { - strcpy(tend,"FLOAT");break; - } - case ICAL_VALUE_INTEGER: { - strcpy(tend,"INTEGER");break; - } - case ICAL_VALUE_PERIOD: { - strcpy(tend,"PERIOD");break; - } - case ICAL_VALUE_RECUR: { - strcpy(tend,"RECUR");break; - } - case ICAL_VALUE_TEXT: { - strcpy(tend,"TEXT");break; - } - case ICAL_VALUE_TIME: { - strcpy(tend,"TIME");break; - } - case ICAL_VALUE_URI: { - strcpy(tend,"URI");break; - } - case ICAL_VALUE_UTCOFFSET: { - strcpy(tend,"UTC-OFFSET");break; - } - case ICAL_VALUE_XNAME: { - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - } - default:{ - strcpy(tend,"ERROR"); - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - } - break; - } - - - case ICAL_XLICERRORTYPE_PARAMETER: - { - switch (impl->data.v_xlicerrortype) { - case ICAL_XLICERRORTYPE_COMPONENTPARSEERROR: - { - strcpy(tend,"COMPONENT_PARSE_ERROR");break; - } - case ICAL_XLICERRORTYPE_PROPERTYPARSEERROR: - { - strcpy(tend,"PROPERTY_PARSE_ERROR");break; - } - case ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR: - { - strcpy(tend,"PARAMETER_NAME_PARSE_ERROR");break; - } - case ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR: - { - strcpy(tend,"PARAMETER_VALUE_PARSE_ERROR");break; - } - case ICAL_XLICERRORTYPE_VALUEPARSEERROR: - { - strcpy(tend,"VALUE_PARSE_ERROR");break; - } - case ICAL_XLICERRORTYPE_INVALIDITIP: - { - strcpy(tend,"INVALID_ITIP");break; - } - } - break; - } - - case ICAL_XLICCOMPARETYPE_PARAMETER: - { - switch (impl->data.v_xliccomparetype) { - case ICAL_XLICCOMPARETYPE_EQUAL: - { - strcpy(tend,"EQUAL");break; - } - case ICAL_XLICCOMPARETYPE_NOTEQUAL: - { - strcpy(tend,"NOTEQUAL");break; - } - case ICAL_XLICCOMPARETYPE_LESS: - { - strcpy(tend,"LESS");break; - } - case ICAL_XLICCOMPARETYPE_GREATER: - { - strcpy(tend,"GREATER");break; - } - case ICAL_XLICCOMPARETYPE_LESSEQUAL: - { - strcpy(tend,"LESSEQUAL");break; - } - case ICAL_XLICCOMPARETYPE_GREATEREQUAL: - { - strcpy(tend,"GREATEREQUAL");break; - } - case ICAL_XLICCOMPARETYPE_REGEX: - { - strcpy(tend,"REGEX");break; - } - break; - } - - default:{ - icalerror_set_errno(ICAL_BADARG_ERROR);break; - } - break; - } - - - case ICAL_SENTBY_PARAMETER: - case ICAL_TZID_PARAMETER: - case ICAL_X_PARAMETER: - case ICAL_FMTTYPE_PARAMETER: - case ICAL_LANGUAGE_PARAMETER: - case ICAL_MEMBER_PARAMETER: - case ICAL_DELEGATEDFROM_PARAMETER: - case ICAL_DELEGATEDTO_PARAMETER: - case ICAL_DIR_PARAMETER: - case ICAL_ALTREP_PARAMETER: - case ICAL_CN_PARAMETER: - { - if (impl->string == 0){ return no_parameter;} - strcpy(tend,impl->string);break; - break; - } - - case ICAL_NO_PARAMETER: - case ICAL_ANY_PARAMETER: - { - /* These are actually handled before the case/switch - clause */ - } - - } - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, tend); - - /* Now, copy the buffer to a tmp_buffer, which is safe to give to - the caller without worring about de-allocating it. */ - - - out_buf = icalmemory_tmp_buffer(strlen(buf)); - strcpy(out_buf, buf); - - icalmemory_free_buffer(buf); - - return out_buf; - -} - - -int -icalparameter_is_valid (icalparameter* parameter); - - -icalparameter_kind -icalparameter_isa (icalparameter* parameter) -{ - if(parameter == 0){ - return ICAL_NO_PARAMETER; - } - - return ((struct icalparameter_impl *)parameter)->kind; -} - - -int -icalparameter_isa_parameter (void* parameter) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl *)parameter; - - if (parameter == 0){ - return 0; - } - - if (strcmp(impl->id,"para") == 0) { - return 1; - } else { - return 0; - } -} - - -void -icalparameter_set_xname (icalparameter* param, char* v) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl*)param; - icalerror_check_arg_rv( (param!=0),"param"); - icalerror_check_arg_rv( (v!=0),"v"); - - if (impl->x_name != 0){ - free(impl->x_name); - } - - impl->x_name = strdup(v); - - if (impl->x_name == 0){ - errno = ENOMEM; - } - -} - -char* -icalparameter_get_xname (icalparameter* param) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl*)param; - icalerror_check_arg_rz( (param!=0),"param"); - - return impl->x_name; -} - -void -icalparameter_set_xvalue (icalparameter* param, char* v) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl*)param; - - icalerror_check_arg_rv( (param!=0),"param"); - icalerror_check_arg_rv( (v!=0),"v"); - - if (impl->string != 0){ - free(impl->string); - } - - impl->string = strdup(v); - - if (impl->string == 0){ - errno = ENOMEM; - } - -} - -char* -icalparameter_get_xvalue (icalparameter* param) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl*)param; - - icalerror_check_arg_rz( (param!=0),"param"); - - return impl->string; - -} - -void icalparameter_set_parent(icalparameter* param, - icalproperty* property) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl*)param; - - icalerror_check_arg_rv( (param!=0),"param"); - - impl->parent = property; -} - -icalproperty* icalparameter_get_parent(icalparameter* param) -{ - struct icalparameter_impl *impl = (struct icalparameter_impl*)param; - - icalerror_check_arg_rv( (param!=0),"param"); - - return impl->parent; -} - - -/* Everything below this line is machine generated. Do not edit. */ -/* ALTREP */ -icalparameter* icalparameter_new_altrep(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_ALTREP_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_altrep((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_altrep(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_altrep(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* CN */ -icalparameter* icalparameter_new_cn(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_CN_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_cn((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_cn(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_cn(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* CUTYPE */ -icalparameter* icalparameter_new_cutype(icalparameter_cutype v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_CUTYPE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_cutype((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_cutype icalparameter_get_cutype(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_CUTYPE_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_cutype; - -} - -void icalparameter_set_cutype(icalparameter* param, icalparameter_cutype v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_cutype = v; -} - -/* DELEGATED-FROM */ -icalparameter* icalparameter_new_delegatedfrom(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_DELEGATEDFROM_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_delegatedfrom((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_delegatedfrom(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_delegatedfrom(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* DELEGATED-TO */ -icalparameter* icalparameter_new_delegatedto(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_DELEGATEDTO_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_delegatedto((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_delegatedto(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_delegatedto(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* DIR */ -icalparameter* icalparameter_new_dir(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_DIR_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_dir((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_dir(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_dir(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* ENCODING */ -icalparameter* icalparameter_new_encoding(icalparameter_encoding v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_ENCODING_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_encoding((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_encoding icalparameter_get_encoding(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_ENCODING_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_encoding; - -} - -void icalparameter_set_encoding(icalparameter* param, icalparameter_encoding v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_encoding = v; -} - -/* FBTYPE */ -icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_FBTYPE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_fbtype((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_fbtype icalparameter_get_fbtype(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_FBTYPE_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_fbtype; - -} - -void icalparameter_set_fbtype(icalparameter* param, icalparameter_fbtype v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_fbtype = v; -} - -/* FMTTYPE */ -icalparameter* icalparameter_new_fmttype(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_FMTTYPE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_fmttype((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_fmttype(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_fmttype(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* LANGUAGE */ -icalparameter* icalparameter_new_language(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_LANGUAGE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_language((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_language(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_language(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* MEMBER */ -icalparameter* icalparameter_new_member(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_MEMBER_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_member((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_member(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_member(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* PARTSTAT */ -icalparameter* icalparameter_new_partstat(icalparameter_partstat v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_PARTSTAT_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_partstat((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_partstat icalparameter_get_partstat(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_PARTSTAT_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_partstat; - -} - -void icalparameter_set_partstat(icalparameter* param, icalparameter_partstat v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_partstat = v; -} - -/* RANGE */ -icalparameter* icalparameter_new_range(icalparameter_range v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_RANGE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_range((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_range icalparameter_get_range(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - - return ((struct icalparameter_impl*)param)->data.v_range; - -} - -void icalparameter_set_range(icalparameter* param, icalparameter_range v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_range = v; -} - -/* RELATED */ -icalparameter* icalparameter_new_related(icalparameter_related v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_RELATED_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_related((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_related icalparameter_get_related(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - - return ((struct icalparameter_impl*)param)->data.v_related; - -} - -void icalparameter_set_related(icalparameter* param, icalparameter_related v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_related = v; -} - -/* RELTYPE */ -icalparameter* icalparameter_new_reltype(icalparameter_reltype v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_RELTYPE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_reltype((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_reltype icalparameter_get_reltype(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_RELTYPE_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_reltype; - -} - -void icalparameter_set_reltype(icalparameter* param, icalparameter_reltype v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_reltype = v; -} - -/* ROLE */ -icalparameter* icalparameter_new_role(icalparameter_role v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_ROLE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_role((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_role icalparameter_get_role(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_ROLE_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_role; - -} - -void icalparameter_set_role(icalparameter* param, icalparameter_role v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_role = v; -} - -/* RSVP */ -icalparameter* icalparameter_new_rsvp(int v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_RSVP_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_rsvp((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -int icalparameter_get_rsvp(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - - return ((struct icalparameter_impl*)param)->data.v_rsvp; - -} - -void icalparameter_set_rsvp(icalparameter* param, int v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_rsvp = v; -} - -/* SENT-BY */ -icalparameter* icalparameter_new_sentby(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_SENTBY_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_sentby((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_sentby(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_sentby(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* TZID */ -icalparameter* icalparameter_new_tzid(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_TZID_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_tzid((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_tzid(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_tzid(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* VALUE */ -icalparameter* icalparameter_new_value(icalparameter_value v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_VALUE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_value((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_value icalparameter_get_value(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - if ( ((struct icalparameter_impl*)param)->string != 0){ - return ICAL_VALUE_XNAME; - } - - return ((struct icalparameter_impl*)param)->data.v_value; - -} - -void icalparameter_set_value(icalparameter* param, icalparameter_value v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_value = v; -} - -/* X */ -icalparameter* icalparameter_new_x(char* v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - icalerror_check_arg_rz( (v!=0),"v"); - impl = icalparameter_new_impl(ICAL_X_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_x((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -char* icalparameter_get_x(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg_rz( (param!=0), "param"); - return ((struct icalparameter_impl*)param)->string; -} - -void icalparameter_set_x(icalparameter* param, char* v) -{ - icalerror_check_arg_rv( (v!=0),"v"); - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->string = strdup(v); -} - -/* X-LIC-ERRORTYPE */ -icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_XLICERRORTYPE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_xlicerrortype((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_xlicerrortype icalparameter_get_xlicerrortype(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - - return ((struct icalparameter_impl*)param)->data.v_xlicerrortype; - -} - -void icalparameter_set_xlicerrortype(icalparameter* param, icalparameter_xlicerrortype v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_xlicerrortype = v; -} - -/* X-LIC-COMPARETYPE */ -icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v) -{ - struct icalparameter_impl *impl; - icalerror_clear_errno(); - - impl = icalparameter_new_impl(ICAL_XLICCOMPARETYPE_PARAMETER); - if (impl == 0) { - return 0; - } - - icalparameter_set_xliccomparetype((icalparameter*) impl,v); - if (icalerrno != ICAL_NO_ERROR) { - icalparameter_free((icalparameter*) impl); - return 0; - } - - return (icalparameter*) impl; -} - -icalparameter_xliccomparetype icalparameter_get_xliccomparetype(icalparameter* param) -{ - icalerror_clear_errno(); - icalerror_check_arg( (param!=0), "param"); - - return ((struct icalparameter_impl*)param)->data.v_xliccomparetype; - -} - -void icalparameter_set_xliccomparetype(icalparameter* param, icalparameter_xliccomparetype v) -{ - - icalerror_check_arg_rv( (param!=0), "param"); - icalerror_clear_errno(); - - ((struct icalparameter_impl*)param)->data.v_xliccomparetype = v; -} - diff --git a/libical/src/libical/icalparameter.h b/libical/src/libical/icalparameter.h deleted file mode 100644 index 174cae6f3f..0000000000 --- a/libical/src/libical/icalparameter.h +++ /dev/null @@ -1,174 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalparam.h - CREATOR: eric 20 March 1999 - - - $Id$ - $Locker$ - - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalparam.h - - ======================================================================*/ - -#ifndef ICALPARAM_H -#define ICALPARAM_H - -#include "icalenums.h" /* defined icalparameter_kind and other enums */ - -typedef void icalparameter; - -icalparameter* icalparameter_new(icalparameter_kind kind); -icalparameter* icalparameter_new_clone(icalparameter* p); -icalparameter* icalparameter_new_from_string(icalparameter_kind kind, char* value); - -void icalparameter_free(icalparameter* parameter); - -char* icalparameter_as_ical_string(icalparameter* parameter); - -int icalparameter_is_valid(icalparameter* parameter); - -icalparameter_kind icalparameter_isa(icalparameter* parameter); - -int icalparameter_isa_parameter(void* param); - -/* Acess the name of an X parameer */ -void icalparameter_set_xname (icalparameter* param, char* v); -char* icalparameter_get_xname(icalparameter* param); -void icalparameter_set_xvalue (icalparameter* param, char* v); -char* icalparameter_get_xvalue(icalparameter* param); - - -/* Everything below this line is machine generated. Do not edit. */ -/* ALTREP */ -icalparameter* icalparameter_new_altrep(char* v); -char* icalparameter_get_altrep(icalparameter* value); -void icalparameter_set_altrep(icalparameter* value, char* v); - -/* CN */ -icalparameter* icalparameter_new_cn(char* v); -char* icalparameter_get_cn(icalparameter* value); -void icalparameter_set_cn(icalparameter* value, char* v); - -/* CUTYPE */ -icalparameter* icalparameter_new_cutype(icalparameter_cutype v); -icalparameter_cutype icalparameter_get_cutype(icalparameter* value); -void icalparameter_set_cutype(icalparameter* value, icalparameter_cutype v); - -/* DELEGATED-FROM */ -icalparameter* icalparameter_new_delegatedfrom(char* v); -char* icalparameter_get_delegatedfrom(icalparameter* value); -void icalparameter_set_delegatedfrom(icalparameter* value, char* v); - -/* DELEGATED-TO */ -icalparameter* icalparameter_new_delegatedto(char* v); -char* icalparameter_get_delegatedto(icalparameter* value); -void icalparameter_set_delegatedto(icalparameter* value, char* v); - -/* DIR */ -icalparameter* icalparameter_new_dir(char* v); -char* icalparameter_get_dir(icalparameter* value); -void icalparameter_set_dir(icalparameter* value, char* v); - -/* ENCODING */ -icalparameter* icalparameter_new_encoding(icalparameter_encoding v); -icalparameter_encoding icalparameter_get_encoding(icalparameter* value); -void icalparameter_set_encoding(icalparameter* value, icalparameter_encoding v); - -/* FBTYPE */ -icalparameter* icalparameter_new_fbtype(icalparameter_fbtype v); -icalparameter_fbtype icalparameter_get_fbtype(icalparameter* value); -void icalparameter_set_fbtype(icalparameter* value, icalparameter_fbtype v); - -/* FMTTYPE */ -icalparameter* icalparameter_new_fmttype(char* v); -char* icalparameter_get_fmttype(icalparameter* value); -void icalparameter_set_fmttype(icalparameter* value, char* v); - -/* LANGUAGE */ -icalparameter* icalparameter_new_language(char* v); -char* icalparameter_get_language(icalparameter* value); -void icalparameter_set_language(icalparameter* value, char* v); - -/* MEMBER */ -icalparameter* icalparameter_new_member(char* v); -char* icalparameter_get_member(icalparameter* value); -void icalparameter_set_member(icalparameter* value, char* v); - -/* PARTSTAT */ -icalparameter* icalparameter_new_partstat(icalparameter_partstat v); -icalparameter_partstat icalparameter_get_partstat(icalparameter* value); -void icalparameter_set_partstat(icalparameter* value, icalparameter_partstat v); - -/* RANGE */ -icalparameter* icalparameter_new_range(icalparameter_range v); -icalparameter_range icalparameter_get_range(icalparameter* value); -void icalparameter_set_range(icalparameter* value, icalparameter_range v); - -/* RELATED */ -icalparameter* icalparameter_new_related(icalparameter_related v); -icalparameter_related icalparameter_get_related(icalparameter* value); -void icalparameter_set_related(icalparameter* value, icalparameter_related v); - -/* RELTYPE */ -icalparameter* icalparameter_new_reltype(icalparameter_reltype v); -icalparameter_reltype icalparameter_get_reltype(icalparameter* value); -void icalparameter_set_reltype(icalparameter* value, icalparameter_reltype v); - -/* ROLE */ -icalparameter* icalparameter_new_role(icalparameter_role v); -icalparameter_role icalparameter_get_role(icalparameter* value); -void icalparameter_set_role(icalparameter* value, icalparameter_role v); - -/* RSVP */ -icalparameter* icalparameter_new_rsvp(int v); -int icalparameter_get_rsvp(icalparameter* value); -void icalparameter_set_rsvp(icalparameter* value, int v); - -/* SENT-BY */ -icalparameter* icalparameter_new_sentby(char* v); -char* icalparameter_get_sentby(icalparameter* value); -void icalparameter_set_sentby(icalparameter* value, char* v); - -/* TZID */ -icalparameter* icalparameter_new_tzid(char* v); -char* icalparameter_get_tzid(icalparameter* value); -void icalparameter_set_tzid(icalparameter* value, char* v); - -/* VALUE */ -icalparameter* icalparameter_new_value(icalparameter_value v); -icalparameter_value icalparameter_get_value(icalparameter* value); -void icalparameter_set_value(icalparameter* value, icalparameter_value v); - -/* X */ -icalparameter* icalparameter_new_x(char* v); -char* icalparameter_get_x(icalparameter* value); -void icalparameter_set_x(icalparameter* value, char* v); - -/* X-LIC-ERRORTYPE */ -icalparameter* icalparameter_new_xlicerrortype(icalparameter_xlicerrortype v); -icalparameter_xlicerrortype icalparameter_get_xlicerrortype(icalparameter* value); -void icalparameter_set_xlicerrortype(icalparameter* value, icalparameter_xlicerrortype v); - -/* X-LIC-COMPARETYPE */ -icalparameter* icalparameter_new_xliccomparetype(icalparameter_xliccomparetype v); -icalparameter_xliccomparetype icalparameter_get_xliccomparetype(icalparameter* value); -void icalparameter_set_xliccomparetype(icalparameter* value, icalparameter_xliccomparetype v); - -#endif ICALPARAMETER_H diff --git a/libical/src/libical/icalparser.c b/libical/src/libical/icalparser.c deleted file mode 100644 index 3be754036a..0000000000 --- a/libical/src/libical/icalparser.c +++ /dev/null @@ -1,990 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalparser.c - CREATOR: eric 04 August 1999 - - $Id$ - $Locker$ - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Initial Developer of the Original Code is Eric Busboom - - (C) COPYRIGHT 1999 The Software Studio. - http://www.softwarestudio.org - - ======================================================================*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "ical.h" -#include "pvl.h" -#include "icalparser.h" -#include "icalmemory.h" -#include /* For strncpy & size_t */ -#include /* For FILE and fgets and sprintf */ -#include /* for free */ - - -extern icalvalue* icalparser_yy_value; -void set_parser_value_state(icalvalue_kind kind); -int ical_yy_parse(void); - -char* icalparser_get_next_char(char c, char *str); -char* icalparser_get_next_parameter(char* line,char** end); -char* icalparser_get_next_value(char* line, char **end, icalvalue_kind kind); -char* icalparser_get_prop_name(char* line, char** end); -char* icalparser_get_param_name(char* line, char **end); - -#define TMP_BUF_SIZE 80 - -struct icalparser_impl -{ - int buffer_full; - size_t tmp_buf_size; - char temp[TMP_BUF_SIZE]; - icalcomponent *root_component; - icalcomponent *tail; - int version; - int level; - int lineno; - icalparser_state state; - pvl_list components; - - void *line_gen_data; - -}; - - -icalparser* icalparser_new() -{ - struct icalparser_impl* impl = 0; - - if ( ( impl = (struct icalparser_impl*) - malloc(sizeof(struct icalparser_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - impl->root_component = 0; - impl->components = pvl_newlist(); - impl->level = 0; - impl->state = ICALPARSER_SUCCESS; - - impl->tmp_buf_size = TMP_BUF_SIZE; - impl->buffer_full = 0; - impl->lineno = 0; - - memset(impl->temp,0, TMP_BUF_SIZE); - - return (icalparser*)impl; -} - -void icalparser_free(icalparser* parser) -{ - struct icalparser_impl* impl = (struct icalparser_impl*)parser; - icalcomponent *c; - - if (impl->root_component != 0){ - icalcomponent_free(impl->root_component); - } - - while( (c=pvl_pop(impl->components)) != 0){ - icalcomponent_free(c); - } - - pvl_free(impl->components); -} - -void icalparser_set_gen_data(icalparser* parser, void* data) -{ - struct icalparser_impl* impl = (struct icalparser_impl*)parser; - - impl->line_gen_data = data; -} - - -icalvalue* icalvalue_new_from_string_with_error(icalvalue_kind kind, - char* str, - icalproperty **error); - - - -char* icalparser_get_next_char(char c, char *str) -{ - int quote_mode = 0; - char* p; - - - for(p=str; *p!=0; p++){ - - if ( quote_mode == 0 && *p=='"' && *(p-1) != '\\' ){ - quote_mode =1; - continue; - } - - if ( quote_mode == 1 && *p=='"' && *(p-1) != '\\' ){ - quote_mode =0; - continue; - } - - if (quote_mode == 0 && *p== c && *(p-1) != '\\' ){ - return p; - } - - } - - return 0; -} - -/* make a new tmp buffer out of a substring */ -char* make_segment(char* start, char* end) -{ - char *buf; - size_t size = (size_t)end - (size_t)start; - - buf = icalmemory_tmp_buffer(size+1); - - - strncpy(buf,start,size); - *(buf+size) = 0; - - return buf; - -} - -char* input_buffer; -char* input_buffer_p; -#define min(a,b) ((a) < (b) ? (a) : (b)) - -int icalparser_flex_input(char* buf, int max_size) -{ - int n = min(max_size,strlen(input_buffer_p)); - - if (n > 0){ - memcpy(buf, input_buffer_p, n); - input_buffer_p += n; - return n; - } else { - return 0; - } -} - -void icalparser_clear_flex_input() -{ - input_buffer_p = input_buffer+strlen(input_buffer); -} - -/* Cal the flex parser to parse a complex value */ - -icalvalue* icalparser_parse_value(icalvalue_kind kind, - char* str, icalproperty** error) -{ - int r; - input_buffer_p = input_buffer = str; - - set_parser_value_state(kind); - icalparser_yy_value = 0; - - r = ical_yy_parse(); - - /* Error. Parse failed */ - if( icalparser_yy_value == 0 || r != 0){ - - if(icalparser_yy_value !=0){ - icalvalue_free(icalparser_yy_value); - icalparser_yy_value = 0; - } - - return 0; - } - - if (error != 0){ - *error = 0; - } - - return icalparser_yy_value; -} - -char* icalparser_get_prop_name(char* line, char** end) -{ - char* p; - char* v; - char *str; - - p = icalparser_get_next_char(';',line); - v = icalparser_get_next_char(':',line); - if (p== 0 && v == 0) { - return 0; - } - - /* There is no ';' or, it is after the ';' that marks the beginning of - the value */ - if (v!=0 && ( p == 0 || p > v)){ - str = make_segment(line,v); - *end = v+1; - } else { - str = make_segment(line,p); - *end = p+1; - } - - return str; -} - -char* icalparser_get_param_name(char* line, char **end) -{ - - char* next; - char *str; - - next = icalparser_get_next_char('=',line); - - if (next == 0) { - return 0; - } - - str = make_segment(line,next); - *end = next+1; - return str; - -} - -char* icalparser_get_next_paramvalue(char* line, char **end) -{ - - char* next; - char *str; - - next = icalparser_get_next_char(',',line); - - if (next == 0){ - next = (char*)(size_t)line+(size_t)strlen(line);\ - } - - if (next == line){ - return 0; - } else { - str = make_segment(line,next); - *end = next+1; - return str; - } - -} - -/* A property may have multiple values, if the values are seperated by - commas in the content line. This routine will look for the next - comma after line and will set the next place to start searching in - end. */ - -char* icalparser_get_next_value(char* line, char **end, icalvalue_kind kind) -{ - - char* next; - char *p; - char *str; - size_t length = strlen(line); - - p = line; - while(1){ - - next = icalparser_get_next_char(',',p); - - /* Unforunately, RFC2445 says that for the RECUR value, COMMA - can both seperate digits in a list, and it can seperate - multiple recurrence specifications. This is not a friendly - part of the spec. This weirdness tries to - distinguish the two uses. it is probably a HACK*/ - - if( kind == ICAL_RECUR_VALUE ) { - if ( next != 0 && - (*end+length) > next+5 && - strncmp(next,"FREQ",4) == 0 - ) { - /* The COMMA was followed by 'FREQ', is it a real seperator*/ - /* Fall through */ - printf("%s\n",next); - } else if (next != 0){ - /* Not real, get the next COMMA */ - p = next+1; - next = 0; - continue; - } - } - - /* If the comma is preceeded by a '\', then it is a literal and - not a value seperator*/ - - if ( (next!=0 && *(next-1) == '\\') || - (next!=0 && *(next-3) == '\\') - ) - /*second clause for '/' is on prev line. HACK may be out of bounds */ - { - p = next+1; - } else { - break; - } - - } - - if (next == 0){ - next = (char*)(size_t)line+length; - *end = next; - } else { - *end = next+1; - } - - if (next == line){ - return 0; - } - - - str = make_segment(line,next); - return str; - -} - -char* icalparser_get_next_parameter(char* line,char** end) -{ - char *next; - char *v; - char *str; - - v = icalparser_get_next_char(':',line); - next = icalparser_get_next_char(';', line); - - /* There is no ';' or, it is after the ':' that marks the beginning of - the value */ - - if (next == 0 || next > v) { - next = icalparser_get_next_char(':', line); - } - - if (next != 0) { - str = make_segment(line,next); - *end = next+1; - return str; - } else { - *end = line; - return 0; - } -} - -/* Get a single property line, from the property name through the - final new line, and include any continuation lines */ - -char* icalparser_get_line(icalparser *parser, - char* (*line_gen_func)(char *s, size_t size, void *d)) -{ - char *line; - char *line_p; - struct icalparser_impl* impl = (struct icalparser_impl*)parser; - size_t buf_size = impl->tmp_buf_size; - - - line_p = line = icalmemory_new_buffer(buf_size); - line[0] = '\0'; - - while(1) { - - /* The buffer is not clear, so transfer the data in it to the - output. This may be left over from a previous call */ - if (impl->temp[0] != '\0' ) { - - /* If the last position in the temp buffer is occupied, - mark the buffer as full. The means we will do another - read later, because the line is not finished */ - if (impl->temp[impl->tmp_buf_size-1] == 0){ - impl->buffer_full = 1; - } else { - impl->buffer_full = 0; - } - - /* Copy the temp to the output and clear the temp buffer. */ - icalmemory_append_string(&line,&line_p,&buf_size,impl->temp); - impl->temp[0] = '\0' ; - } - - impl->temp[impl->tmp_buf_size-1] = 1; /* Mark end of buffer */ - - if ((*line_gen_func)(impl->temp,impl->tmp_buf_size,impl->line_gen_data) - ==0){/* Get more data */ - - /* If the first position is clear, it means we didn't get - any more data from the last call to line_ge_func*/ - if (impl->temp[0] == '\0'){ - - if(line[0] != '\0'){ - /* There is data in the output, so fall trhough and process it*/ - break; - } else { - /* No data in output; return and signal that there - is no more input*/ - free(line); - return 0; - } - } - } - - - /* If the output line ends in a '\n' and the temp buffer - begins with a ' ', then the buffer holds a continuation - line, so keep reading. */ - - if ( line_p > line+1 && *(line_p-1) == '\n' && impl->temp[0] == ' ') { - - /* back up the pointer to erase the continuation characters */ - line_p--; - - if ( *(line_p-1) == '\r'){ - line_p--; - } - - /* shift the temp buffer down to eliminate the leading space*/ - memmove(&(impl->temp[0]),&(impl->temp[1]),impl->tmp_buf_size); - - impl->temp[impl->tmp_buf_size-1] = impl->temp[impl->tmp_buf_size-2]; - - } else if ( impl->buffer_full == 1 ) { - - /* The buffer was filled on the last read, so read again */ - - } else { - - /* Looks like the end of this content line, so break */ - break; - } - - - } - - /* Erase the final newline and/or carriage return*/ - if ( line_p > line+1 && *(line_p-1) == '\n') { - *(line_p-1) = '\0'; - if ( *(line_p-2) == '\r'){ - *(line_p-2) = '\0'; - } - - } else { - *(line_p) = '\0'; - } - - return line; - -} - -void insert_error(icalcomponent* comp, char* text, - char* message, icalparameter_xlicerrortype type) -{ - char temp[1024]; - - if (text == 0){ - snprintf(temp,1024,"%s:",message); - } else { - snprintf(temp,1024,"%s: \'%s\'",message,text); - } - - icalcomponent_add_property - (comp, - icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype(type), - 0)); -} - -icalcomponent* icalparser_parse(icalparser *parser, - char* (*line_gen_func)(char *s, size_t size, - void* d)) -{ - - char* line; - icalcomponent *c=0; - icalcomponent *root_component=0; - - icalerror_check_arg_rz((parser !=0),"parser"); - - do{ - line = icalparser_get_line(parser, line_gen_func); - - if ((c = icalparser_add_line(parser,line)) != 0){ - if (root_component == 0){ - /* Just one component */ - icalparser_claim(parser); - root_component = c; - } else if(icalcomponent_isa(root_component) - != ICAL_XROOT_COMPONENT) { - /*Got a second component, so move the two components under - an XROOT container */ - icalcomponent *tempc; - tempc = icalcomponent_new(ICAL_XROOT_COMPONENT); - icalcomponent_add_component(tempc, root_component); - icalparser_claim(parser); - icalcomponent_add_component(tempc, c); - root_component = tempc; - } else { - /* Already have an XROOT container, so add the component - to it*/ - icalcomponent_add_component(root_component, c); - icalparser_claim(parser); - } - } - } while ( line != 0); - - return root_component; - -} - -icalcomponent* icalparser_add_line(icalparser* parser, - char* line) -{ - char *p; - char *str; - char *end; - int vcount = 0; - icalproperty *prop; - icalvalue *value; - icalvalue_kind value_kind = ICAL_NO_VALUE; - - - struct icalparser_impl *impl = (struct icalparser_impl*)parser; - icalerror_check_arg_rz((parser != 0),"parser"); - - - if (line == 0) - { - impl->state = ICALPARSER_ERROR; - return 0; - } - - /* Begin by getting the property name at the start of the line. The - property name may end up being "BEGIN" or "END" in which case it - is not really a property, but the market for the start or end of - a component */ - - end = 0; - str = icalparser_get_prop_name(line, &end); - - if (str == 0){ - /* Could not get a property name */ - icalcomponent *tail = pvl_data(pvl_tail(impl->components)); - - if (tail){ - insert_error(tail,line, - "Got a data line, but could not find a property name or component begin tag", - ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); - } - tail = 0; - impl->state = ICALPARSER_ERROR; - return 0; - } - - /********************************************************************** - * Handle begin and end of components - **********************************************************************/ - - - /* If the property name is BEGIN or END, we are actually - starting or ending a new component */ - - if(strcmp(str,"BEGIN") == 0){ - icalcomponent *c; - - impl->level++; - str = icalparser_get_next_value(end,&end, value_kind); - - c = icalcomponent_new_from_string(str); - - if (c == 0){ - c = icalcomponent_new(ICAL_XLICINVALID_COMPONENT); - insert_error(c,str,"Parse error in component name", - ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); - } - - pvl_push(impl->components,c); - - impl->state = ICALPARSER_BEGIN_COMP; - return 0; - - } else if (strcmp(str,"END") == 0 ) { - icalcomponent* tail; - - impl->level--; - str = icalparser_get_next_value(end,&end, value_kind); - - impl->root_component = pvl_pop(impl->components); - - tail = pvl_data(pvl_tail(impl->components)); - - if(tail != 0){ - icalcomponent_add_component(tail,impl->root_component); - } - - tail = 0; - - /* Return the component if we are back to the 0th level */ - if (impl->level == 0){ - impl->state = ICALPARSER_SUCCESS; - return impl->root_component; - } else { - impl->state = ICALPARSER_END_COMP; - return 0; - } - } - - - /* There is no point in continuing if we have not seen a - component yet */ - - if(pvl_data(pvl_tail(impl->components)) == 0){ - impl->state = ICALPARSER_ERROR; - return 0; - } - - - /********************************************************************** - * Handle property names - **********************************************************************/ - /* At this point, the property name really is a property name, - (Not a component name) so make a new property and add it to - the component */ - - prop = icalproperty_new_from_string(str); - - if (prop != 0){ - icalcomponent *tail = pvl_data(pvl_tail(impl->components)); - - icalcomponent_add_property(tail, prop); - - /* Set the value kind for the default for this type of - property. This may be re-set by a VALUE parameter */ - value_kind = - icalenum_property_kind_to_value_kind( - icalproperty_isa(prop)); - - } else { - icalcomponent* tail = pvl_data(pvl_tail(impl->components)); - - insert_error(tail,str,"Parse error in property name", - ICAL_XLICERRORTYPE_PROPERTYPARSEERROR); - - tail = 0; - impl->state = ICALPARSER_ERROR; - return 0; - } - - /********************************************************************** - * Handle parameter values - **********************************************************************/ - - /* Now, add any parameters to the last property */ - - p = 0; - while(1) { - - if (*(end-1) == ':'){ - /* if the last seperator was a ":" and the value is a - URL, icalparser_get_next_parameter will find the - ':' in the URL, so better break now. */ - break; - } - - str = icalparser_get_next_parameter(end,&end); - - if (str != 0){ - char* name; - char* pvalue; - - icalparameter *param = 0; - icalparameter_kind kind; - icalcomponent *tail = pvl_data(pvl_tail(impl->components)); - - name = icalparser_get_param_name(str,&pvalue); - - if (name == 0){ - /* 'tail' defined above */ - insert_error(tail, str, "Can't parse parameter name", - ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); - tail = 0; - break; - } - - kind = icalenum_string_to_parameter_kind(name); - - if (kind != ICAL_NO_PARAMETER){ - param = icalparameter_new_from_string(kind,pvalue); - } else { - /* Error. Failed to parse the parameter*/ - /* 'tail' defined above */ - insert_error(tail, str, "Can't parse parameter name", - ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); - tail = 0; - impl->state = ICALPARSER_ERROR; - return 0; - } - - if (param == 0){ - /* 'tail' defined above */ - insert_error(tail,str,"Can't parse parameter value", - ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); - - tail = 0; - impl->state = ICALPARSER_ERROR; - continue; - } - - /* If it is a VALUE parameter, set the kind of value*/ - if (icalparameter_isa(param)==ICAL_VALUE_PARAMETER){ - - value_kind = (icalvalue_kind) - icalparameter_get_value(param); - - if (value_kind == ICAL_NO_VALUE){ - - /* Ooops, could not parse the value of the - parameter ( it was not one of the defined - values ), so reset the value_kind */ - - insert_error( - tail, str, - "Got a VALUE parameter with an unknown type", - ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); - icalparameter_free(param); - - value_kind = - icalenum_property_kind_to_value_kind( - icalproperty_isa(prop)); - - icalparameter_free(param); - tail = 0; - impl->state = ICALPARSER_ERROR; - return 0; - } - } - - /* Everything is OK, so add the parameter */ - icalproperty_add_parameter(prop,param); - tail = 0; - - } else { /* if ( str != 0) */ - /* If we did not get a param string, go on to looking - for a value */ - break; - } /* if ( str != 0) */ - - } /* while(1) */ - - /********************************************************************** - * Handle values - **********************************************************************/ - - /* Look for values. If there are ',' characters in the values, - then there are multiple values, so clone the current - parameter and add one part of the value to each clone */ - - vcount=0; - while(1) { - str = icalparser_get_next_value(end,&end, value_kind); - - if (str != 0){ - - if (vcount > 0){ - /* Actually, only clone after the second value */ - icalproperty* clone = icalproperty_new_clone(prop); - icalcomponent* tail = pvl_data(pvl_tail(impl->components)); - - icalcomponent_add_property(tail, clone); - prop = clone; - tail = 0; - } - - value = icalvalue_new_from_string(value_kind, str); - - /* Don't add properties without value */ - if (value == 0){ - char temp[200]; /* HACK */ - - icalproperty_kind prop_kind = icalproperty_isa(prop); - icalcomponent* tail = pvl_data(pvl_tail(impl->components)); - - sprintf(temp,"Can't parse as %s value in %s property. Removing entire property", - icalenum_value_kind_to_string(value_kind), - icalenum_property_kind_to_string(prop_kind)); - - insert_error(tail, str, temp, - ICAL_XLICERRORTYPE_VALUEPARSEERROR); - - /* Remove the troublesome property */ - icalcomponent_remove_property(tail,prop); - icalproperty_free(prop); - prop = 0; - tail = 0; - impl->state = ICALPARSER_ERROR; - return 0; - - } else { - vcount++; - icalproperty_set_value(prop, value); - } - - - } else { - if (vcount == 0){ - char temp[200]; /* HACK */ - - icalproperty_kind prop_kind = icalproperty_isa(prop); - icalcomponent *tail = pvl_data(pvl_tail(impl->components)); - - sprintf(temp,"No value for %s property. Removing entire property", - icalenum_property_kind_to_string(prop_kind)); - - insert_error(tail, str, temp, - ICAL_XLICERRORTYPE_VALUEPARSEERROR); - - /* Remove the troublesome property */ - icalcomponent_remove_property(tail,prop); - icalproperty_free(prop); - prop = 0; - tail = 0; - impl->state = ICALPARSER_ERROR; - return 0; - } else { - - break; - } - } - } - - /**************************************************************** - * End of component parsing. - *****************************************************************/ - - if (pvl_data(pvl_tail(impl->components)) == 0 && - impl->level == 0){ - impl->state = ICALPARSER_SUCCESS; - return impl->root_component; - } else { - impl->state = ICALPARSER_IN_PROGRESS; - return 0; - } - -} - -icalparser_state icalparser_get_state(icalparser* parser) -{ - struct icalparser_impl* impl = (struct icalparser_impl*) parser; - return impl->state; - -} - -icalcomponent* icalparser_claim(icalparser* parser) -{ - struct icalparser_impl* impl = (struct icalparser_impl*) parser; - icalcomponent *c = impl->root_component; - - impl->root_component = 0; - - return c; - -} - - -icalcomponent* icalparser_clean(icalparser* parser) -{ - struct icalparser_impl* impl = (struct icalparser_impl*) parser; - icalcomponent *tail = pvl_data(pvl_tail(impl->components)); - - icalerror_check_arg_rz((parser != 0 ),"parser"); - - /* We won't get a clean exit if some components did not have an - "END" tag. Clear off any component that may be left in the list */ - - - while((tail=pvl_data(pvl_tail(impl->components))) != 0){ - - insert_error(tail," ", - "Missing END tag for this component. Closing component at end of input.", - ICAL_XLICERRORTYPE_COMPONENTPARSEERROR); - - - impl->root_component = pvl_pop(impl->components); - tail=pvl_data(pvl_tail(impl->components)); - - if(tail != 0){ - icalcomponent_add_component(tail,impl->root_component); - } - } - - return impl->root_component; - -} - -struct slg_data { - char* pos; - char* str; -}; - -char* string_line_generator(char *out, size_t buf_size, void *d) -{ - char *n; - size_t size; - struct slg_data* data = (struct slg_data*)d; - - if(data->pos==0){ - data->pos=data->str; - } - - /* If the pointer is at the end of the string, we are done */ - if (*(data->pos)==0){ - return 0; - } - - n = strchr(data->pos,'\n'); - - if (n == 0){ - size = strlen(data->pos); - } else { - n++; /* include newline in output */ - size = (n-data->pos); - } - - if (size > buf_size-1){ - size = buf_size-1; - } - - - strncpy(out,data->pos,size); - - *(out+size) = '\0'; - - data->pos += size; - - return out; -} - -icalcomponent* icalparser_parse_string(char* str) -{ - icalcomponent *c; - struct slg_data d; - icalparser *p; - - d.pos = 0; - d.str = str; - - p = icalparser_new(); - icalparser_set_gen_data(p,&d); - c = icalparser_parse(p,string_line_generator); - icalparser_free(p); - - return c; - -} diff --git a/libical/src/libical/icalparser.h b/libical/src/libical/icalparser.h deleted file mode 100644 index 25c07eca9f..0000000000 --- a/libical/src/libical/icalparser.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalparser.h - CREATOR: eric 20 April 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalparser.h - -======================================================================*/ - - -#ifndef ICALPARSER_H -#define ICALPARSER_H - -#include "ical.h" -#include /* For FILE* */ - -typedef void* icalparser; -typedef enum icalparser_state { - ICALPARSER_ERROR, - ICALPARSER_SUCCESS, - ICALPARSER_BEGIN_COMP, - ICALPARSER_END_COMP, - ICALPARSER_IN_PROGRESS -} icalparser_state; - - -/*********************************************************************** - * Message oriented parsing. icalparser_parse takes a string that - * holds the text ( in RFC 2445 format ) and returns a pointer to an - * icalcomponent. The caller owns the memory. line_gen_func is a - * pointer to a function that returns one content line per invocation - **********************************************************************/ - -icalcomponent* icalparser_parse(icalparser *parser, - char* (*line_gen_func)(char *s, size_t size, void *d)); - -/* A simple, and incorrect interface - can only return one component*/ -icalcomponent* icalparser_parse_string(char* str); - - -/*********************************************************************** - * Line-oriented parsing. - * - * Create a new parser via icalparse_new_parser, then add ines one at - * a time with icalparse_add_line(). icalparser_add_line() will return - * non-zero when it has finished with a component. - ***********************************************************************/ - -icalparser* icalparser_new(); -void icalparser_set_gen_data(icalparser* parser, void* data); -icalcomponent* icalparser_add_line(icalparser* parser, char* str ); -icalcomponent* icalparser_claim(icalparser* parser); -icalcomponent* icalparser_clean(icalparser* parser); -icalparser_state icalparser_get_state(icalparser* parser); -void icalparser_free(icalparser* parser); - -/*********************************************************************** - * Parser support functions - ***********************************************************************/ - -/* Use the flex/bison parser to turn a string into a value type */ -icalvalue* icalparser_parse_value(icalvalue_kind kind, char* str, icalcomponent** errors); - -/* Given a line generator function, return a single iCal content line.*/ -char* icalparser_get_line(icalparser* parser, char* (*line_gen_func)(char *s, size_t size, void *d)); - - -/* a line_gen_function that returns lines from a string. To use it, - set string_line_generator_str to point to the input string, and set - string_line_generator_pos to 0. These globals make the routine not - thead-safe. */ - -extern char* string_line_generator_str; -extern char* string_line_generator_pos; -char* string_line_generator(char *out, size_t buf_size, void *d); - -#endif /* !ICALPARSE_H */ diff --git a/libical/src/libical/icalproperty.c b/libical/src/libical/icalproperty.c deleted file mode 100644 index c3fe7c9073..0000000000 --- a/libical/src/libical/icalproperty.c +++ /dev/null @@ -1,3095 +0,0 @@ -/* -*- Mode: C -*- */ - -/*====================================================================== - FILE: icalproperty.c - CREATOR: eric 28 April 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalproperty.c - -======================================================================*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include /* For strdup, rindex */ -#include -#include -#include -#include /* for printf */ -#include /* for va_list, va_start, etc. */ - -#include "ical.h" -#include "pvl.h" -#include "icalenums.h" -#include "icalerror.h" -#include "icalmemory.h" - -#define TMP_BUF_SIZE 1024 - -/* Private routines for icalproperty */ -void icalvalue_set_parent(icalvalue* value, - icalproperty* property); -icalproperty* icalvalue_get_parent(icalvalue* value); - -void icalparameter_set_parent(icalparameter* param, - icalproperty* property); -icalproperty* icalparameter_get_parent(icalparameter* value); - - -void icalproperty_set_x_name(icalproperty* prop, char* name); - -struct icalproperty_impl -{ - char id[5]; - icalproperty_kind kind; - char* x_name; - pvl_list parameters; - pvl_elem parameter_iterator; - icalvalue* value; - icalcomponent *parent; -}; - -void icalproperty_add_parameters(struct icalproperty_impl *impl,va_list args) -{ - - void* vp; - - while((vp = va_arg(args, void*)) != 0) { - - if (icalvalue_isa_value(vp) != 0 ){ - } else if (icalparameter_isa_parameter(vp) != 0 ){ - - icalproperty_add_parameter((icalproperty*)impl, - (icalparameter*)vp); - } else { - abort(); - } - - } - - -} - -struct icalproperty_impl* -icalproperty_new_impl (icalproperty_kind kind) -{ - struct icalproperty_impl* prop; - - if ( ( prop = (struct icalproperty_impl*) - malloc(sizeof(struct icalproperty_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - strcpy(prop->id,"prop"); - - prop->kind = kind; - prop->parameters = pvl_newlist(); - prop->parameter_iterator = 0; - prop->value = 0; - prop->x_name = 0; - prop->parent = 0; - - return prop; -} - - -icalproperty* -icalproperty_new (icalproperty_kind kind) -{ - icalproperty *prop = (icalproperty*)icalproperty_new_impl(kind); - - return prop; -} - - -icalproperty* -icalproperty_new_clone(icalproperty* prop) -{ - struct icalproperty_impl *old = (struct icalproperty_impl*)prop; - struct icalproperty_impl *new = icalproperty_new_impl(old->kind); - pvl_elem p; - - icalerror_check_arg_rz((prop!=0),"Prop"); - icalerror_check_arg_rz((old!=0),"old"); - icalerror_check_arg_rz((new!=0),"new"); - - if (old->value !=0) { - new->value = icalvalue_new_clone(old->value); - } - - if (old->x_name != 0) { - - new->x_name = strdup(old->x_name); - - if (new->x_name == 0) { - icalproperty_free(new); - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - } - - for(p=pvl_head(old->parameters);p != 0; p = pvl_next(p)){ - icalparameter *param = icalparameter_new_clone(pvl_data(p)); - - if (param == 0){ - icalproperty_free(new); - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - pvl_push(new->parameters,param); - - } - - return new; - -} - -/* This one works a little differently from the other *_from_string - routines; the string input is the name of the property, not the - data associated with the property, as it is in - icalvalue_from_string. All of the parsing associated with - properties is driven by routines in icalparse.c */ - -icalproperty* icalproperty_new_from_string(char* str) -{ - icalproperty_kind kind; - - icalerror_check_arg_rz( (str!=0),"str"); - - kind = icalenum_string_to_property_kind(str); - - if (kind == ICAL_NO_PROPERTY){ - - if( str[0] == 'X' && str[1] == '-'){ - icalproperty *p = icalproperty_new(ICAL_X_PROPERTY); - icalproperty_set_x_name(p,str); - return p; - } else { - icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - return 0; - } - - } else { - return icalproperty_new(kind); - } -} - -void -icalproperty_free (icalproperty* prop) -{ - struct icalproperty_impl *p; - - icalparameter* param; - - icalerror_check_arg_rv((prop!=0),"prop"); - - p = (struct icalproperty_impl*)prop; - -#ifdef ICAL_FREE_ON_LIST_IS_ERROR - icalerror_assert( (p->parent ==0),"Tried to free a property that is still attached to a component. "); - -#else - if(p->parent !=0){ - return; - } -#endif - - if (p->value != 0){ - icalvalue_set_parent(p->value,0); - icalvalue_free(p->value); - } - - while( (param = pvl_pop(p->parameters)) != 0){ - icalparameter_free(param); - } - - pvl_free(p->parameters); - - if (p->x_name != 0) { - free(p->x_name); - } - - p->kind = ICAL_NO_PROPERTY; - p->parameters = 0; - p->parameter_iterator = 0; - p->value = 0; - p->x_name = 0; - p->id[0] = 'X'; - - free(p); - -} - - -char* -icalproperty_as_ical_string (icalproperty* prop) -{ - icalparameter *param; - - /* Create new buffer that we can append names, parameters and a - value to, and reallocate as needed. Later, this buffer will be - copied to a icalmemory_tmp_buffer, which is managed internally - by libical, so it can be given to the caller without fear of - the caller forgetting to free it */ - - char* property_name = 0; - size_t buf_size = 1024; - char* buf = icalmemory_new_buffer(buf_size); - char* buf_ptr = buf; - icalvalue* value; - char *out_buf; - -#ifdef ICAL_UNIX_NEWLINE - char newline[] = "\n"; -#else - char newline[] = "\r\n"; -#endif - - struct icalproperty_impl *impl = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rz( (prop!=0),"prop"); - - /* Append property name */ - - if (impl->kind == ICAL_X_PROPERTY && impl->x_name != 0){ - property_name = impl->x_name; - } else { - property_name = icalenum_property_kind_to_string(impl->kind); - } - - if (property_name == 0 ) { - icalerror_warn("Got a property of an unknown kind."); - icalmemory_free_buffer(buf); - return 0; - - } - - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, property_name); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); - - /* Append parameters */ - for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); - param != 0; - param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { - - char* kind_string = icalparameter_as_ical_string(param); - - if (kind_string == 0 ) { - char temp[TMP_BUF_SIZE]; - snprintf(temp, TMP_BUF_SIZE,"Got a parameter of unknown kind in %s property",property_name); - icalerror_warn(temp); - continue; - } - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, " ;"); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); - icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); - - } - - /* Append value */ - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, " :"); - - value = icalproperty_get_value(prop); - - if (value != 0){ - icalmemory_append_string(&buf, &buf_ptr, &buf_size, - icalvalue_as_ical_string(icalproperty_get_value(prop))); - } else { - icalmemory_append_string(&buf, &buf_ptr, &buf_size,"ERROR: No Value"); - - } - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); - - /* Now, copy the buffer to a tmp_buffer, which is safe to give to - the caller without worring about de-allocating it. */ - - - out_buf = icalmemory_tmp_buffer(strlen(buf)+1); - strcpy(out_buf, buf); - - icalmemory_free_buffer(buf); - - return out_buf; -} - - - -icalproperty_kind -icalproperty_isa (icalproperty* property) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)property; - - if(property != 0){ - return p->kind; - } - - return ICAL_NO_PROPERTY; -} - -int -icalproperty_isa_property (void* property) -{ - struct icalproperty_impl *impl = (struct icalproperty_impl*)property; - - icalerror_check_arg_rz( (property!=0), "property"); - - if (strcmp(impl->id,"prop") == 0) { - return 1; - } else { - return 0; - } -} - - -void -icalproperty_add_parameter (icalproperty* prop,icalparameter* parameter) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rv( (prop!=0),"prop"); - icalerror_check_arg_rv( (parameter!=0),"parameter"); - - pvl_push(p->parameters, parameter); - -} - - -void -icalproperty_remove_parameter (icalproperty* prop, icalparameter_kind kind) -{ - icalerror_check_arg_rv((prop!=0),"prop"); - - assert(0); /* This routine is not implemented */ -} - - -int -icalproperty_count_parameters (icalproperty* prop) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)prop; - - if(prop != 0){ - return pvl_count(p->parameters); - } - - icalerror_set_errno(ICAL_USAGE_ERROR); - return -1; -} - - -icalparameter* -icalproperty_get_first_parameter (icalproperty* prop, icalparameter_kind kind) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rz( (prop!=0),"prop"); - - p->parameter_iterator = pvl_head(p->parameters); - - if (p->parameter_iterator == 0) { - return 0; - } - - return (icalparameter*) pvl_data(p->parameter_iterator); -} - - -icalparameter* -icalproperty_get_next_parameter (icalproperty* prop, icalparameter_kind kind) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)prop; - icalerror_check_arg_rz( (prop!=0),"prop"); - - if (p->parameter_iterator == 0 ) { - return 0; - } - - p->parameter_iterator = pvl_next(p->parameter_iterator); - - if (p->parameter_iterator == 0 ) { - return 0; - } - - return (icalparameter*) pvl_data(p->parameter_iterator); -} - -void -icalproperty_set_value (icalproperty* prop, icalvalue* value) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rv((prop !=0),"prop"); - icalerror_check_arg_rv((value !=0),"value"); - - if (p->value != 0){ - icalvalue_set_parent(p->value,0); - icalvalue_free(p->value); - p->value = 0; - } - - p->value = value; - - icalvalue_set_parent(value,prop); -} - - -icalvalue* -icalproperty_get_value (icalproperty* prop) -{ - struct icalproperty_impl *p = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rz( (prop!=0),"prop"); - - return p->value; -} - - -void icalproperty_set_x_name(icalproperty* prop, char* name) -{ - struct icalproperty_impl *impl = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rv( (name!=0),"name"); - icalerror_check_arg_rv( (prop!=0),"prop"); - - if (impl->x_name != 0) { - free(impl->x_name); - } - - impl->x_name = strdup(name); - - if(impl->x_name == 0){ - icalerror_set_errno(ICAL_ALLOCATION_ERROR); - } - -} - -char* icalproperty_get_x_name(icalproperty* prop){ - - struct icalproperty_impl *impl = (struct icalproperty_impl*)prop; - - icalerror_check_arg_rz( (prop!=0),"prop"); - - return impl->x_name; -} - - -void icalproperty_set_parent(icalproperty* property, - icalcomponent* component) -{ - struct icalproperty_impl *impl = (struct icalproperty_impl*)property; - - icalerror_check_arg_rv( (property!=0),"property"); - - impl->parent = component; -} - -icalcomponent* icalproperty_get_parent(icalproperty* property) -{ - struct icalproperty_impl *impl = (struct icalproperty_impl*)property; - - icalerror_check_arg_rv( (property!=0),"property"); - - return impl->parent; -} - - -/* Everything below this line is machine generated. Do not edit. */ - -/* METHOD */ - -icalproperty* icalproperty_new_method(icalproperty_method v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_METHOD_PROPERTY); - - - icalproperty_set_method((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_method(icalproperty_method v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_METHOD_PROPERTY); - - - icalproperty_set_method((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_method(icalproperty* prop, icalproperty_method v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_method(v); - - icalproperty_set_value(prop,value); - -} - -icalproperty_method icalproperty_get_method(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_method(value); -} - -/* LAST-MODIFIED */ - -icalproperty* icalproperty_new_lastmodified(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LASTMODIFIED_PROPERTY); - - - icalproperty_set_lastmodified((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LASTMODIFIED_PROPERTY); - - - icalproperty_set_lastmodified((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetime(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_lastmodified(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetime(value); -} - -/* UID */ - -icalproperty* icalproperty_new_uid(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_UID_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_uid((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_uid(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_UID_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_uid((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_uid(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_uid(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* PRODID */ - -icalproperty* icalproperty_new_prodid(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRODID_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_prodid((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_prodid(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRODID_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_prodid((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_prodid(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_prodid(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* STATUS */ - -icalproperty* icalproperty_new_status(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_STATUS_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_status((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_status(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_STATUS_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_status((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_status(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_status(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* DESCRIPTION */ - -icalproperty* icalproperty_new_description(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DESCRIPTION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_description((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_description(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DESCRIPTION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_description((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_description(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_description(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* DURATION */ - -icalproperty* icalproperty_new_duration(struct icaldurationtype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DURATION_PROPERTY); - - - icalproperty_set_duration((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DURATION_PROPERTY); - - - icalproperty_set_duration((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_duration(v); - - icalproperty_set_value(prop,value); - -} - -struct icaldurationtype icalproperty_get_duration(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_duration(value); -} - -/* CATEGORIES */ - -icalproperty* icalproperty_new_categories(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CATEGORIES_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_categories((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_categories(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CATEGORIES_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_categories((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_categories(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_categories(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* VERSION */ - -icalproperty* icalproperty_new_version(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_VERSION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_version((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_version(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_VERSION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_version((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_version(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_version(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* TZOFFSETFROM */ - -icalproperty* icalproperty_new_tzoffsetfrom(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETFROM_PROPERTY); - - - icalproperty_set_tzoffsetfrom((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETFROM_PROPERTY); - - - icalproperty_set_tzoffsetfrom((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_utcoffset(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_tzoffsetfrom(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_utcoffset(value); -} - -/* RRULE */ - -icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RRULE_PROPERTY); - - - icalproperty_set_rrule((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RRULE_PROPERTY); - - - icalproperty_set_rrule((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_recur(v); - - icalproperty_set_value(prop,value); - -} - -struct icalrecurrencetype icalproperty_get_rrule(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_recur(value); -} - -/* ATTENDEE */ - -icalproperty* icalproperty_new_attendee(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTENDEE_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_attendee((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_attendee(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTENDEE_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_attendee((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_attendee(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_caladdress(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_attendee(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_caladdress(value); -} - -/* CONTACT */ - -icalproperty* icalproperty_new_contact(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CONTACT_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_contact((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_contact(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CONTACT_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_contact((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_contact(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_contact(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* RELATED-TO */ - -icalproperty* icalproperty_new_relatedto(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELATEDTO_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_relatedto((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_relatedto(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RELATEDTO_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_relatedto((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_relatedto(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_relatedto(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* ORGANIZER */ - -icalproperty* icalproperty_new_organizer(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ORGANIZER_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_organizer((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_organizer(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ORGANIZER_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_organizer((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_organizer(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_caladdress(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_organizer(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_caladdress(value); -} - -/* COMMENT */ - -icalproperty* icalproperty_new_comment(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMMENT_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_comment((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_comment(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMMENT_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_comment((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_comment(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_comment(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* TRIGGER */ - -icalproperty* icalproperty_new_trigger(union icaltriggertype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRIGGER_PROPERTY); - - - icalproperty_set_trigger((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_trigger(union icaltriggertype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRIGGER_PROPERTY); - - - icalproperty_set_trigger((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_trigger(icalproperty* prop, union icaltriggertype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_trigger(v); - - icalproperty_set_value(prop,value); - -} - -union icaltriggertype icalproperty_get_trigger(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_trigger(value); -} - -/* X-LIC-ERROR */ - -icalproperty* icalproperty_new_xlicerror(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICERROR_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_xlicerror((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_xlicerror(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICERROR_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_xlicerror((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_xlicerror(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_xlicerror(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* CLASS */ - -icalproperty* icalproperty_new_class(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CLASS_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_class((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_class(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CLASS_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_class((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_class(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_class(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* TZOFFSETTO */ - -icalproperty* icalproperty_new_tzoffsetto(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETTO_PROPERTY); - - - icalproperty_set_tzoffsetto((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_tzoffsetto(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZOFFSETTO_PROPERTY); - - - icalproperty_set_tzoffsetto((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_tzoffsetto(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_utcoffset(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_tzoffsetto(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_utcoffset(value); -} - -/* TRANSP */ - -icalproperty* icalproperty_new_transp(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRANSP_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_transp((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_transp(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TRANSP_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_transp((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_transp(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_transp(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* SEQUENCE */ - -icalproperty* icalproperty_new_sequence(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SEQUENCE_PROPERTY); - - - icalproperty_set_sequence((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_sequence(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SEQUENCE_PROPERTY); - - - icalproperty_set_sequence((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_sequence(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_integer(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_sequence(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_integer(value); -} - -/* LOCATION */ - -icalproperty* icalproperty_new_location(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LOCATION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_location((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_location(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_LOCATION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_location((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_location(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_location(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* REQUEST-STATUS */ - -icalproperty* icalproperty_new_requeststatus(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REQUESTSTATUS_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_requeststatus((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_requeststatus(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REQUESTSTATUS_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_requeststatus((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_requeststatus(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_string(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_requeststatus(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_string(value); -} - -/* EXDATE */ - -icalproperty* icalproperty_new_exdate(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXDATE_PROPERTY); - - - icalproperty_set_exdate((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXDATE_PROPERTY); - - - icalproperty_set_exdate((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetimedate(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_exdate(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetimedate(value); -} - -/* TZID */ - -icalproperty* icalproperty_new_tzid(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZID_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_tzid((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_tzid(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZID_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_tzid((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_tzid(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_tzid(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* RESOURCES */ - -icalproperty* icalproperty_new_resources(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RESOURCES_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_resources((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_resources(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RESOURCES_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_resources((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_resources(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_resources(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* TZURL */ - -icalproperty* icalproperty_new_tzurl(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZURL_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_tzurl((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_tzurl(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZURL_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_tzurl((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_tzurl(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_uri(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_tzurl(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_uri(value); -} - -/* REPEAT */ - -icalproperty* icalproperty_new_repeat(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REPEAT_PROPERTY); - - - icalproperty_set_repeat((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_repeat(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_REPEAT_PROPERTY); - - - icalproperty_set_repeat((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_repeat(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_integer(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_repeat(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_integer(value); -} - -/* PRIORITY */ - -icalproperty* icalproperty_new_priority(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRIORITY_PROPERTY); - - - icalproperty_set_priority((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_priority(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PRIORITY_PROPERTY); - - - icalproperty_set_priority((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_priority(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_integer(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_priority(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_integer(value); -} - -/* FREEBUSY */ - -icalproperty* icalproperty_new_freebusy(struct icalperiodtype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_FREEBUSY_PROPERTY); - - - icalproperty_set_freebusy((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_FREEBUSY_PROPERTY); - - - icalproperty_set_freebusy((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_period(v); - - icalproperty_set_value(prop,value); - -} - -struct icalperiodtype icalproperty_get_freebusy(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_period(value); -} - -/* DTSTART */ - -icalproperty* icalproperty_new_dtstart(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTART_PROPERTY); - - - icalproperty_set_dtstart((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTART_PROPERTY); - - - icalproperty_set_dtstart((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetimedate(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_dtstart(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetimedate(value); -} - -/* RECURRENCE-ID */ - -icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RECURRENCEID_PROPERTY); - - - icalproperty_set_recurrenceid((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RECURRENCEID_PROPERTY); - - - icalproperty_set_recurrenceid((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetimedate(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_recurrenceid(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetimedate(value); -} - -/* SUMMARY */ - -icalproperty* icalproperty_new_summary(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SUMMARY_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_summary((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_summary(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_SUMMARY_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_summary((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_summary(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_summary(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* DTEND */ - -icalproperty* icalproperty_new_dtend(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTEND_PROPERTY); - - - icalproperty_set_dtend((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTEND_PROPERTY); - - - icalproperty_set_dtend((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetimedate(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_dtend(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetimedate(value); -} - -/* TZNAME */ - -icalproperty* icalproperty_new_tzname(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZNAME_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_tzname((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_tzname(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_TZNAME_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_tzname((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_tzname(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_tzname(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* RDATE */ - -icalproperty* icalproperty_new_rdate(struct icalperiodtype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RDATE_PROPERTY); - - - icalproperty_set_rdate((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_rdate(struct icalperiodtype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_RDATE_PROPERTY); - - - icalproperty_set_rdate((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_rdate(icalproperty* prop, struct icalperiodtype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetimeperiod(v); - - icalproperty_set_value(prop,value); - -} - -struct icalperiodtype icalproperty_get_rdate(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetimeperiod(value); -} - -/* URL */ - -icalproperty* icalproperty_new_url(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_URL_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_url((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_url(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_URL_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_url((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_url(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_uri(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_url(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_uri(value); -} - -/* ATTACH */ - -icalproperty* icalproperty_new_attach(struct icalattachtype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTACH_PROPERTY); - - - icalproperty_set_attach((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_attach(struct icalattachtype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ATTACH_PROPERTY); - - - icalproperty_set_attach((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_attach(icalproperty* prop, struct icalattachtype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_attach(v); - - icalproperty_set_value(prop,value); - -} - -struct icalattachtype icalproperty_get_attach(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_attach(value); -} - -/* X-LIC-CLUSTERCOUNT */ - -icalproperty* icalproperty_new_xlicclustercount(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLUSTERCOUNT_PROPERTY); - - - icalproperty_set_xlicclustercount((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_xlicclustercount(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_XLICCLUSTERCOUNT_PROPERTY); - - - icalproperty_set_xlicclustercount((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_xlicclustercount(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_integer(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_xlicclustercount(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_integer(value); -} - -/* EXRULE */ - -icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXRULE_PROPERTY); - - - icalproperty_set_exrule((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_EXRULE_PROPERTY); - - - icalproperty_set_exrule((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_recur(v); - - icalproperty_set_value(prop,value); - -} - -struct icalrecurrencetype icalproperty_get_exrule(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_recur(value); -} - -/* QUERY */ - -icalproperty* icalproperty_new_query(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERY_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_query((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_query(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_QUERY_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_query((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_query(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_query(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_query(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_query(value); -} - -/* PERCENT-COMPLETE */ - -icalproperty* icalproperty_new_percentcomplete(int v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PERCENTCOMPLETE_PROPERTY); - - - icalproperty_set_percentcomplete((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_percentcomplete(int v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_PERCENTCOMPLETE_PROPERTY); - - - icalproperty_set_percentcomplete((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_percentcomplete(icalproperty* prop, int v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_integer(v); - - icalproperty_set_value(prop,value); - -} - -int icalproperty_get_percentcomplete(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_integer(value); -} - -/* CALSCALE */ - -icalproperty* icalproperty_new_calscale(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALSCALE_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_calscale((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_calscale(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CALSCALE_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_calscale((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_calscale(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_calscale(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} - -/* CREATED */ - -icalproperty* icalproperty_new_created(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CREATED_PROPERTY); - - - icalproperty_set_created((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_CREATED_PROPERTY); - - - icalproperty_set_created((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_created(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetime(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_created(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetime(value); -} - -/* GEO */ - -icalproperty* icalproperty_new_geo(struct icalgeotype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_GEO_PROPERTY); - - - icalproperty_set_geo((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_GEO_PROPERTY); - - - icalproperty_set_geo((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_geo(v); - - icalproperty_set_value(prop,value); - -} - -struct icalgeotype icalproperty_get_geo(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_geo(value); -} - -/* COMPLETED */ - -icalproperty* icalproperty_new_completed(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMPLETED_PROPERTY); - - - icalproperty_set_completed((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_COMPLETED_PROPERTY); - - - icalproperty_set_completed((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetime(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_completed(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetime(value); -} - -/* DTSTAMP */ - -icalproperty* icalproperty_new_dtstamp(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTAMP_PROPERTY); - - - icalproperty_set_dtstamp((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DTSTAMP_PROPERTY); - - - icalproperty_set_dtstamp((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetime(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_dtstamp(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetime(value); -} - -/* DUE */ - -icalproperty* icalproperty_new_due(struct icaltimetype v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DUE_PROPERTY); - - - icalproperty_set_due((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_DUE_PROPERTY); - - - icalproperty_set_due((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_due(icalproperty* prop, struct icaltimetype v) -{ - icalvalue *value; - - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_datetimedate(v); - - icalproperty_set_value(prop,value); - -} - -struct icaltimetype icalproperty_get_due(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_datetimedate(value); -} - -/* ACTION */ - -icalproperty* icalproperty_new_action(char* v) -{ - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ACTION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_action((icalproperty*)impl,v); - - return (icalproperty*)impl; -} - -icalproperty* icalproperty_vanew_action(char* v, ...) -{ - va_list args; - struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_ACTION_PROPERTY); - icalerror_check_arg_rz( (v!=0),"v"); - - - icalproperty_set_action((icalproperty*)impl,v); - - va_start(args,v); - icalproperty_add_parameters(impl, args); - va_end(args); - - return (icalproperty*)impl; -} - -void icalproperty_set_action(icalproperty* prop, char* v) -{ - icalvalue *value; - - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_arg_rv( (prop!=0),"prop"); - - value = icalvalue_new_text(v); - - icalproperty_set_value(prop,value); - -} - -char* icalproperty_get_action(icalproperty* prop) -{ - icalvalue *value; - icalerror_check_arg( (prop!=0),"prop"); - - value = icalproperty_get_value(prop); - - return icalvalue_get_text(value); -} diff --git a/libical/src/libical/icalproperty.h b/libical/src/libical/icalproperty.h deleted file mode 100644 index 2cd28fe179..0000000000 --- a/libical/src/libical/icalproperty.h +++ /dev/null @@ -1,368 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalderivedproperties.{c,h} - CREATOR: eric 09 May 1999 - - $Id$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - - ======================================================================*/ - - -#ifndef ICALPROPERTY_H -#define ICALPROPERTY_H - -#include - -typedef void icalproperty; - -icalproperty* icalproperty_new(icalproperty_kind kind); - -icalproperty* icalproperty_new_clone(icalproperty * prop); - -icalproperty* icalproperty_new_from_string(char* str); - -char* icalproperty_as_ical_string(icalproperty* prop); - -void icalproperty_free(icalproperty* prop); - -icalproperty_kind icalproperty_isa(icalproperty* property); -int icalproperty_isa_property(void* property); - -void icalproperty_add_parameter(icalproperty* prop,icalparameter* parameter); - -void icalproperty_remove_parameter(icalproperty* prop, - icalparameter_kind kind); - -int icalproperty_count_parameters(icalproperty* prop); - -/* Iterate through the parameters */ -icalparameter* icalproperty_get_first_parameter(icalproperty* prop, - icalparameter_kind kind); -icalparameter* icalproperty_get_next_parameter(icalproperty* prop, - icalparameter_kind kind); -/* Access the value of the property */ -void icalproperty_set_value(icalproperty* prop, icalvalue* value); -icalvalue* icalproperty_get_value(icalproperty* prop); - -/* Deal with X properties */ - -void icalproperty_set_x_name(icalproperty* prop, char* name); -char* icalproperty_get_x_name(icalproperty* prop); - - -/* Everything below this line is machine generated. Do not edit. */ - -/* METHOD */ -icalproperty* icalproperty_new_method(icalproperty_method v); -icalproperty* icalproperty_vanew_method(icalproperty_method v, ...); -void icalproperty_set_method(icalproperty* prop, icalproperty_method v); -icalproperty_method icalproperty_get_method(icalproperty* prop); - -/* LAST-MODIFIED */ -icalproperty* icalproperty_new_lastmodified(struct icaltimetype v); -icalproperty* icalproperty_vanew_lastmodified(struct icaltimetype v, ...); -void icalproperty_set_lastmodified(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_lastmodified(icalproperty* prop); - -/* UID */ -icalproperty* icalproperty_new_uid(char* v); -icalproperty* icalproperty_vanew_uid(char* v, ...); -void icalproperty_set_uid(icalproperty* prop, char* v); -char* icalproperty_get_uid(icalproperty* prop); - -/* PRODID */ -icalproperty* icalproperty_new_prodid(char* v); -icalproperty* icalproperty_vanew_prodid(char* v, ...); -void icalproperty_set_prodid(icalproperty* prop, char* v); -char* icalproperty_get_prodid(icalproperty* prop); - -/* STATUS */ -icalproperty* icalproperty_new_status(char* v); -icalproperty* icalproperty_vanew_status(char* v, ...); -void icalproperty_set_status(icalproperty* prop, char* v); -char* icalproperty_get_status(icalproperty* prop); - -/* DESCRIPTION */ -icalproperty* icalproperty_new_description(char* v); -icalproperty* icalproperty_vanew_description(char* v, ...); -void icalproperty_set_description(icalproperty* prop, char* v); -char* icalproperty_get_description(icalproperty* prop); - -/* DURATION */ -icalproperty* icalproperty_new_duration(struct icaldurationtype v); -icalproperty* icalproperty_vanew_duration(struct icaldurationtype v, ...); -void icalproperty_set_duration(icalproperty* prop, struct icaldurationtype v); -struct icaldurationtype icalproperty_get_duration(icalproperty* prop); - -/* CATEGORIES */ -icalproperty* icalproperty_new_categories(char* v); -icalproperty* icalproperty_vanew_categories(char* v, ...); -void icalproperty_set_categories(icalproperty* prop, char* v); -char* icalproperty_get_categories(icalproperty* prop); - -/* VERSION */ -icalproperty* icalproperty_new_version(char* v); -icalproperty* icalproperty_vanew_version(char* v, ...); -void icalproperty_set_version(icalproperty* prop, char* v); -char* icalproperty_get_version(icalproperty* prop); - -/* TZOFFSETFROM */ -icalproperty* icalproperty_new_tzoffsetfrom(int v); -icalproperty* icalproperty_vanew_tzoffsetfrom(int v, ...); -void icalproperty_set_tzoffsetfrom(icalproperty* prop, int v); -int icalproperty_get_tzoffsetfrom(icalproperty* prop); - -/* RRULE */ -icalproperty* icalproperty_new_rrule(struct icalrecurrencetype v); -icalproperty* icalproperty_vanew_rrule(struct icalrecurrencetype v, ...); -void icalproperty_set_rrule(icalproperty* prop, struct icalrecurrencetype v); -struct icalrecurrencetype icalproperty_get_rrule(icalproperty* prop); - -/* ATTENDEE */ -icalproperty* icalproperty_new_attendee(char* v); -icalproperty* icalproperty_vanew_attendee(char* v, ...); -void icalproperty_set_attendee(icalproperty* prop, char* v); -char* icalproperty_get_attendee(icalproperty* prop); - -/* CONTACT */ -icalproperty* icalproperty_new_contact(char* v); -icalproperty* icalproperty_vanew_contact(char* v, ...); -void icalproperty_set_contact(icalproperty* prop, char* v); -char* icalproperty_get_contact(icalproperty* prop); - -/* RELATED-TO */ -icalproperty* icalproperty_new_relatedto(char* v); -icalproperty* icalproperty_vanew_relatedto(char* v, ...); -void icalproperty_set_relatedto(icalproperty* prop, char* v); -char* icalproperty_get_relatedto(icalproperty* prop); - -/* ORGANIZER */ -icalproperty* icalproperty_new_organizer(char* v); -icalproperty* icalproperty_vanew_organizer(char* v, ...); -void icalproperty_set_organizer(icalproperty* prop, char* v); -char* icalproperty_get_organizer(icalproperty* prop); - -/* COMMENT */ -icalproperty* icalproperty_new_comment(char* v); -icalproperty* icalproperty_vanew_comment(char* v, ...); -void icalproperty_set_comment(icalproperty* prop, char* v); -char* icalproperty_get_comment(icalproperty* prop); - -/* TRIGGER */ -icalproperty* icalproperty_new_trigger(union icaltriggertype v); -icalproperty* icalproperty_vanew_trigger(union icaltriggertype v, ...); -void icalproperty_set_trigger(icalproperty* prop, union icaltriggertype v); -union icaltriggertype icalproperty_get_trigger(icalproperty* prop); - -/* X-LIC-ERROR */ -icalproperty* icalproperty_new_xlicerror(char* v); -icalproperty* icalproperty_vanew_xlicerror(char* v, ...); -void icalproperty_set_xlicerror(icalproperty* prop, char* v); -char* icalproperty_get_xlicerror(icalproperty* prop); - -/* CLASS */ -icalproperty* icalproperty_new_class(char* v); -icalproperty* icalproperty_vanew_class(char* v, ...); -void icalproperty_set_class(icalproperty* prop, char* v); -char* icalproperty_get_class(icalproperty* prop); - -/* TZOFFSETTO */ -icalproperty* icalproperty_new_tzoffsetto(int v); -icalproperty* icalproperty_vanew_tzoffsetto(int v, ...); -void icalproperty_set_tzoffsetto(icalproperty* prop, int v); -int icalproperty_get_tzoffsetto(icalproperty* prop); - -/* TRANSP */ -icalproperty* icalproperty_new_transp(char* v); -icalproperty* icalproperty_vanew_transp(char* v, ...); -void icalproperty_set_transp(icalproperty* prop, char* v); -char* icalproperty_get_transp(icalproperty* prop); - -/* SEQUENCE */ -icalproperty* icalproperty_new_sequence(int v); -icalproperty* icalproperty_vanew_sequence(int v, ...); -void icalproperty_set_sequence(icalproperty* prop, int v); -int icalproperty_get_sequence(icalproperty* prop); - -/* LOCATION */ -icalproperty* icalproperty_new_location(char* v); -icalproperty* icalproperty_vanew_location(char* v, ...); -void icalproperty_set_location(icalproperty* prop, char* v); -char* icalproperty_get_location(icalproperty* prop); - -/* REQUEST-STATUS */ -icalproperty* icalproperty_new_requeststatus(char* v); -icalproperty* icalproperty_vanew_requeststatus(char* v, ...); -void icalproperty_set_requeststatus(icalproperty* prop, char* v); -char* icalproperty_get_requeststatus(icalproperty* prop); - -/* EXDATE */ -icalproperty* icalproperty_new_exdate(struct icaltimetype v); -icalproperty* icalproperty_vanew_exdate(struct icaltimetype v, ...); -void icalproperty_set_exdate(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_exdate(icalproperty* prop); - -/* TZID */ -icalproperty* icalproperty_new_tzid(char* v); -icalproperty* icalproperty_vanew_tzid(char* v, ...); -void icalproperty_set_tzid(icalproperty* prop, char* v); -char* icalproperty_get_tzid(icalproperty* prop); - -/* RESOURCES */ -icalproperty* icalproperty_new_resources(char* v); -icalproperty* icalproperty_vanew_resources(char* v, ...); -void icalproperty_set_resources(icalproperty* prop, char* v); -char* icalproperty_get_resources(icalproperty* prop); - -/* TZURL */ -icalproperty* icalproperty_new_tzurl(char* v); -icalproperty* icalproperty_vanew_tzurl(char* v, ...); -void icalproperty_set_tzurl(icalproperty* prop, char* v); -char* icalproperty_get_tzurl(icalproperty* prop); - -/* REPEAT */ -icalproperty* icalproperty_new_repeat(int v); -icalproperty* icalproperty_vanew_repeat(int v, ...); -void icalproperty_set_repeat(icalproperty* prop, int v); -int icalproperty_get_repeat(icalproperty* prop); - -/* PRIORITY */ -icalproperty* icalproperty_new_priority(int v); -icalproperty* icalproperty_vanew_priority(int v, ...); -void icalproperty_set_priority(icalproperty* prop, int v); -int icalproperty_get_priority(icalproperty* prop); - -/* FREEBUSY */ -icalproperty* icalproperty_new_freebusy(struct icalperiodtype v); -icalproperty* icalproperty_vanew_freebusy(struct icalperiodtype v, ...); -void icalproperty_set_freebusy(icalproperty* prop, struct icalperiodtype v); -struct icalperiodtype icalproperty_get_freebusy(icalproperty* prop); - -/* DTSTART */ -icalproperty* icalproperty_new_dtstart(struct icaltimetype v); -icalproperty* icalproperty_vanew_dtstart(struct icaltimetype v, ...); -void icalproperty_set_dtstart(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_dtstart(icalproperty* prop); - -/* RECURRENCE-ID */ -icalproperty* icalproperty_new_recurrenceid(struct icaltimetype v); -icalproperty* icalproperty_vanew_recurrenceid(struct icaltimetype v, ...); -void icalproperty_set_recurrenceid(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_recurrenceid(icalproperty* prop); - -/* SUMMARY */ -icalproperty* icalproperty_new_summary(char* v); -icalproperty* icalproperty_vanew_summary(char* v, ...); -void icalproperty_set_summary(icalproperty* prop, char* v); -char* icalproperty_get_summary(icalproperty* prop); - -/* DTEND */ -icalproperty* icalproperty_new_dtend(struct icaltimetype v); -icalproperty* icalproperty_vanew_dtend(struct icaltimetype v, ...); -void icalproperty_set_dtend(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_dtend(icalproperty* prop); - -/* TZNAME */ -icalproperty* icalproperty_new_tzname(char* v); -icalproperty* icalproperty_vanew_tzname(char* v, ...); -void icalproperty_set_tzname(icalproperty* prop, char* v); -char* icalproperty_get_tzname(icalproperty* prop); - -/* RDATE */ -icalproperty* icalproperty_new_rdate(struct icalperiodtype v); -icalproperty* icalproperty_vanew_rdate(struct icalperiodtype v, ...); -void icalproperty_set_rdate(icalproperty* prop, struct icalperiodtype v); -struct icalperiodtype icalproperty_get_rdate(icalproperty* prop); - -/* URL */ -icalproperty* icalproperty_new_url(char* v); -icalproperty* icalproperty_vanew_url(char* v, ...); -void icalproperty_set_url(icalproperty* prop, char* v); -char* icalproperty_get_url(icalproperty* prop); - -/* ATTACH */ -icalproperty* icalproperty_new_attach(struct icalattachtype v); -icalproperty* icalproperty_vanew_attach(struct icalattachtype v, ...); -void icalproperty_set_attach(icalproperty* prop, struct icalattachtype v); -struct icalattachtype icalproperty_get_attach(icalproperty* prop); - -/* X-LIC-CLUSTERCOUNT */ -icalproperty* icalproperty_new_xlicclustercount(int v); -icalproperty* icalproperty_vanew_xlicclustercount(int v, ...); -void icalproperty_set_xlicclustercount(icalproperty* prop, int v); -int icalproperty_get_xlicclustercount(icalproperty* prop); - -/* EXRULE */ -icalproperty* icalproperty_new_exrule(struct icalrecurrencetype v); -icalproperty* icalproperty_vanew_exrule(struct icalrecurrencetype v, ...); -void icalproperty_set_exrule(icalproperty* prop, struct icalrecurrencetype v); -struct icalrecurrencetype icalproperty_get_exrule(icalproperty* prop); - -/* QUERY */ -icalproperty* icalproperty_new_query(char* v); -icalproperty* icalproperty_vanew_query(char* v, ...); -void icalproperty_set_query(icalproperty* prop, char* v); -char* icalproperty_get_query(icalproperty* prop); - -/* PERCENT-COMPLETE */ -icalproperty* icalproperty_new_percentcomplete(int v); -icalproperty* icalproperty_vanew_percentcomplete(int v, ...); -void icalproperty_set_percentcomplete(icalproperty* prop, int v); -int icalproperty_get_percentcomplete(icalproperty* prop); - -/* CALSCALE */ -icalproperty* icalproperty_new_calscale(char* v); -icalproperty* icalproperty_vanew_calscale(char* v, ...); -void icalproperty_set_calscale(icalproperty* prop, char* v); -char* icalproperty_get_calscale(icalproperty* prop); - -/* CREATED */ -icalproperty* icalproperty_new_created(struct icaltimetype v); -icalproperty* icalproperty_vanew_created(struct icaltimetype v, ...); -void icalproperty_set_created(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_created(icalproperty* prop); - -/* GEO */ -icalproperty* icalproperty_new_geo(struct icalgeotype v); -icalproperty* icalproperty_vanew_geo(struct icalgeotype v, ...); -void icalproperty_set_geo(icalproperty* prop, struct icalgeotype v); -struct icalgeotype icalproperty_get_geo(icalproperty* prop); - -/* COMPLETED */ -icalproperty* icalproperty_new_completed(struct icaltimetype v); -icalproperty* icalproperty_vanew_completed(struct icaltimetype v, ...); -void icalproperty_set_completed(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_completed(icalproperty* prop); - -/* DTSTAMP */ -icalproperty* icalproperty_new_dtstamp(struct icaltimetype v); -icalproperty* icalproperty_vanew_dtstamp(struct icaltimetype v, ...); -void icalproperty_set_dtstamp(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_dtstamp(icalproperty* prop); - -/* DUE */ -icalproperty* icalproperty_new_due(struct icaltimetype v); -icalproperty* icalproperty_vanew_due(struct icaltimetype v, ...); -void icalproperty_set_due(icalproperty* prop, struct icaltimetype v); -struct icaltimetype icalproperty_get_due(icalproperty* prop); - -/* ACTION */ -icalproperty* icalproperty_new_action(char* v); -icalproperty* icalproperty_vanew_action(char* v, ...); -void icalproperty_set_action(icalproperty* prop, char* v); -char* icalproperty_get_action(icalproperty* prop); -#endif ICALPROPERTY_H diff --git a/libical/src/libical/icalrestriction.c b/libical/src/libical/icalrestriction.c deleted file mode 100644 index 8371e87545..0000000000 --- a/libical/src/libical/icalrestriction.c +++ /dev/null @@ -1,1600 +0,0 @@ -/* -*- Mode: C -*- */ -/* ====================================================================== - File: icalrestriction.c - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - - ======================================================================*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "icalenums.h" -#include "icalrestriction.h" - -#define TMP_BUF_SIZE 1024 - -/* Define the structs for the restrictions. these data are filled out -in machine generated code below */ - -typedef int (*restriction_func)(icalcomponent* comp); - -typedef struct icalrestriction_property_record { - icalproperty_method method; - icalcomponent_kind component; - icalproperty_kind property; - icalrestriction_kind restriction; - restriction_func function; -} icalrestriction_property_record; - - -typedef struct icalrestriction_component_record { - icalproperty_method method; - icalcomponent_kind component; - icalcomponent_kind subcomponent; - icalrestriction_kind restriction; - restriction_func function; -} icalrestriction_component_record; - -icalrestriction_component_record icalrestriction_component_records[]; -icalrestriction_property_record icalrestriction_property_records[]; - -/* The each row gives the result of comparing a restriction against a - count. The columns in each row represent 0,1,2+. '-1' indicates - 'invalid, 'don't care' or 'needs more analysis' So, for - ICAL_RESTRICTION_ONE, if there is 1 of a property with that - restriction, it passes, but if there are 0 or 2+, it fails. */ - -char compare_map[ICAL_RESTRICTION_UNKNOWN+1][3] = { - { 1, 1, 1},/*ICAL_RESTRICTION_NONE*/ - { 1, 0, 0},/*ICAL_RESTRICTION_ZERO*/ - { 0, 1, 0},/*ICAL_RESTRICTION_ONE*/ - { 1, 1, 1},/*ICAL_RESTRICTION_ZEROPLUS*/ - { 0, 1, 1},/*ICAL_RESTRICTION_ONEPLUS*/ - { 1, 1, 0},/*ICAL_RESTRICTION_ZEROORONE*/ - { 1, 1, 0},/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ - { 1, 1, 0},/*ICAL_RESTRICTION_ONEMUTUAL*/ - { 1, 1, 1} /*ICAL_RESTRICTION_UNKNOWN*/ -}; - -char restr_string_map[ICAL_RESTRICTION_UNKNOWN+1][60] = { - "unknown number",/*ICAL_RESTRICTION_NONE*/ - "0",/*ICAL_RESTRICTION_ZERO*/ - "1",/*ICAL_RESTRICTION_ONE*/ - "zero or more",/*ICAL_RESTRICTION_ZEROPLUS*/ - "one or more" ,/*ICAL_RESTRICTION_ONEPLUS*/ - "zero or one",/*ICAL_RESTRICTION_ZEROORONE*/ - "zero or one, exclusive with another property",/*ICAL_RESTRICTION_ONEEXCLUSIVE*/ - "zero or one, mutual with another property",/*ICAL_RESTRICTION_ONEMUTUAL*/ - "unknown number" /*ICAL_RESTRICTION_UNKNOWN*/ -}; - - -int -icalrestriction_compare(icalrestriction_kind restr, int count){ - - if ( restr < ICAL_RESTRICTION_NONE || restr > ICAL_RESTRICTION_UNKNOWN - || count < 0){ - return -1; - } - - if (count > 2) { - count = 2; - } - - return compare_map[restr][count]; - -} - -int icalrestriction_check_mutual(icalcomponent *comp){ - /* HACK. This function does nothing */ - return 1; -} - -int icalrestriction_check_exclusive(icalcomponent *comp){ - /* HACK. This function does nothing */ - return 1; -} - -int icalrestriction_check_component(icalproperty_method method, - icalcomponent* comp) -{ - icalproperty_kind kind; - icalcomponent_kind comp_kind; - icalrestriction_kind restr; - int count; - int compare; - int valid = 1; - - comp_kind = icalcomponent_isa(comp); - - /* Check all of the properties in this component */ - - for(kind = ICAL_ANY_PROPERTY+1; kind != ICAL_NO_PROPERTY; kind++){ - count = icalcomponent_count_properties(comp, kind); - - restr = icalrestriction_get_property_restriction(method, - comp_kind, - kind); - - - if(restr == ICAL_RESTRICTION_ONEEXCLUSIVE ) { - /* HACK. Treat this as a 0/1 restriction */ - restr = ICAL_RESTRICTION_ZEROORONE; - compare = icalrestriction_compare(restr,count); - } else if (restr == ICAL_RESTRICTION_ONEMUTUAL ) { - /* HACK. Treat this as a 0/1 restriction */ - restr = ICAL_RESTRICTION_ZEROORONE; - compare = icalrestriction_compare(restr,count); - } else { - compare = icalrestriction_compare(restr,count); - } - - assert(compare != -1); - - - if (compare == 0){ - char temp[TMP_BUF_SIZE]; - - snprintf(temp, TMP_BUF_SIZE,"Failed iTIP restrictions for property %s. Expected %s instances of the property and got %d", - icalenum_property_kind_to_string(kind), - restr_string_map[restr], count); - - icalcomponent_add_property - (comp, - icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP), - 0)); - } - - - valid = valid && compare; - } - - - - return valid; - - -} - -int icalrestriction_check(icalcomponent* outer_comp) -{ - icalcomponent_kind comp_kind; - icalproperty_method method; - icalcomponent* inner_comp; - icalproperty *method_prop; - int valid; - - icalerror_check_arg_rz( (outer_comp!=0), "outer comp"); - - - /* Get the Method value from the outer component */ - - comp_kind = icalcomponent_isa(outer_comp); - - if (comp_kind != ICAL_VCALENDAR_COMPONENT){ - icalerror_set_errno(ICAL_BADARG_ERROR); - return 0; - } - - method_prop = icalcomponent_get_first_property(outer_comp, - ICAL_METHOD_PROPERTY); - - if (method_prop == 0){ - method = ICAL_METHOD_NONE; - } else { - method = icalproperty_get_method(method_prop); - } - - - /* Check the VCALENDAR wrapper */ - valid = icalrestriction_check_component(ICAL_METHOD_NONE,outer_comp); - - - /* Now check the inner components */ - - for(inner_comp= icalcomponent_get_first_component(outer_comp, - ICAL_ANY_COMPONENT); - inner_comp != 0; - inner_comp= icalcomponent_get_next_component(outer_comp, - ICAL_ANY_COMPONENT)){ - - valid = valid && icalrestriction_check_component(method,inner_comp); - - } - - - return valid; - -} - -icalrestriction_kind -icalrestriction_get_property_restriction(icalproperty_method method, - icalcomponent_kind component, - icalproperty_kind property) -{ - int i; - - for(i = 0; - icalrestriction_property_records[i].restriction != ICAL_RESTRICTION_NONE; - i++){ - - if (method == icalrestriction_property_records[i].method && - component == icalrestriction_property_records[i].component && - property == icalrestriction_property_records[i].property ){ - return icalrestriction_property_records[i].restriction; - } - } - - return ICAL_RESTRICTION_UNKNOWN; -} - -icalrestriction_kind -icalrestriction_get_component_restriction(icalproperty_method method, - icalcomponent_kind component, - icalcomponent_kind subcomponent) -{ - - int i; - - for(i = 0; - icalrestriction_component_records[i].restriction != ICAL_RESTRICTION_NONE; - i++){ - - if (method == icalrestriction_component_records[i].method && - component == icalrestriction_component_records[i].component && - subcomponent == icalrestriction_component_records[i].subcomponent ){ - return icalrestriction_component_records[i].restriction; - } - } - - return ICAL_RESTRICTION_UNKNOWN; -} - -/* Everything below this line is machine generated. Do not edit. */ -icalrestriction_property_record icalrestriction_property_records[] = { - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,icalrestriction_check_exclusive}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS ,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_VCALENDAR_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE, icalrestriction_check_exclusive}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VEVENT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTODO_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEEXCLUSIVE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VJOURNAL_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VFREEBUSY_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_VTIMEZONE_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XSTANDARD_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDAYLIGHT_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XAUDIOALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XDISPLAYALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ONEPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XEMAILALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ACTION_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTACH_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ATTENDEE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CALSCALE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CATEGORIES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CLASS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMMENT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_COMPLETED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CONTACT_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_CREATED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DESCRIPTION_PROPERTY,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTEND_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTAMP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DTSTART_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DUE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_DURATION_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REPEAT_PROPERTY,ICAL_RESTRICTION_ONEMUTUAL,icalrestriction_check_mutual}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_EXRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_FREEBUSY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_GEO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LASTMODIFIED_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_LOCATION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_METHOD_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_ORGANIZER_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PERCENTCOMPLETE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRIORITY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_PRODID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RDATE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RECURRENCEID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RELATEDTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_REQUESTSTATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RESOURCES_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_RRULE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SEQUENCE_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_STATUS_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_SUMMARY_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRANSP_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TRIGGER_PROPERTY,ICAL_RESTRICTION_ONE,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZNAME_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETFROM_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZOFFSETTO_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_TZURL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_UID_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_URL_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_VERSION_PROPERTY,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_XPROCEDUREALARM_COMPONENT,ICAL_X_PROPERTY,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_PROPERTY,ICAL_RESTRICTION_NONE} -}; -icalrestriction_component_record icalrestriction_component_records[] = { - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VEVENT_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VFREEBUSY_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REQUEST,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REPLY,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VJOURNAL_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_REFRESH,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_COUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_DECLINECOUNTER,ICAL_VTODO_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_PUBLISH,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROORONE,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_ADD,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTIMEZONE_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_X_COMPONENT,ICAL_RESTRICTION_ZEROPLUS,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VALARM_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VEVENT_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VFREEBUSY_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_CANCEL,ICAL_VJOURNAL_COMPONENT,ICAL_VTODO_COMPONENT,ICAL_RESTRICTION_ZERO,0}, - {ICAL_METHOD_NONE,ICAL_NO_COMPONENT,ICAL_NO_COMPONENT,ICAL_RESTRICTION_NONE} -}; diff --git a/libical/src/libical/icalrestriction.h b/libical/src/libical/icalrestriction.h deleted file mode 100644 index ca4beeea7b..0000000000 --- a/libical/src/libical/icalrestriction.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalrestriction.h - CREATOR: eric 24 April 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalrestriction.h - - Contributions from: - Graham Davison (g.m.davison@computer.org) - - -======================================================================*/ - -#include "ical.h" - -#ifndef ICALRESTRICTION_H -#define ICALRESTRICTION_H - -/* These must stay in this order for icalrestriction_compare to work */ -typedef enum icalrestriction_kind { - ICAL_RESTRICTION_NONE=0, /* 0 */ - ICAL_RESTRICTION_ZERO, /* 1 */ - ICAL_RESTRICTION_ONE, /* 2 */ - ICAL_RESTRICTION_ZEROPLUS, /* 3 */ - ICAL_RESTRICTION_ONEPLUS, /* 4 */ - ICAL_RESTRICTION_ZEROORONE, /* 5 */ - ICAL_RESTRICTION_ONEEXCLUSIVE, /* 6 */ - ICAL_RESTRICTION_ONEMUTUAL, /* 7 */ - ICAL_RESTRICTION_UNKNOWN /* 8 */ -} icalrestriction_kind; - -int -icalrestriction_compare(icalrestriction_kind restr, int count); - -icalrestriction_kind -icalrestriction_get_property_restriction(icalproperty_method method, - icalcomponent_kind component, - icalproperty_kind property); - -icalrestriction_kind -icalrestriction_get_component_restriction(icalproperty_method method, - icalcomponent_kind component, - icalcomponent_kind subcomponent); - -int -icalrestriction_is_parameter_allowed(icalproperty_kind property, - icalparameter_kind parameter); - -int icalrestriction_check(icalcomponent* comp); - - -#endif /* !ICALRESTRICTION_H */ - - - diff --git a/libical/src/libical/icaltypes.c b/libical/src/libical/icaltypes.c deleted file mode 100644 index b60333887e..0000000000 --- a/libical/src/libical/icaltypes.c +++ /dev/null @@ -1,304 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icaltypes.c - CREATOR: eric 16 May 1999 - - $Id$ - $Locker$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icaltypes.c - - ======================================================================*/ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "icaltypes.h" -#include "icalerror.h" -#include "icalmemory.h" -#include /* for malloc */ -#include /* for errno */ -#include /* for strdup */ -#include -#include /* for SHRT_MAX */ - -#define TEMP_MAX 1024 - -void* -icalattachtype_get_data (struct icalattachtype* type); - -struct icalattachtype* -icalattachtype_new() -{ - struct icalattachtype* v; - - if ( ( v = (struct icalattachtype*) - malloc(sizeof(struct icalattachtype))) == 0) { - errno = ENOMEM; - return 0; - } - - v->refcount = 1; - - v->binary = 0; - v->owns_binary = 0; - - v->base64 = 0; - v->owns_base64 = 0; - - v->url = 0; - - return v; -} - - -void -icalattachtype_free(struct icalattachtype* v) -{ - icalerror_check_arg( (v!=0),"v"); - - v->refcount--; - - if (v->refcount <= 0){ - - if (v->base64 != 0 && v->owns_base64 != 0){ - free(v->base64); - } - - if (v->binary != 0 && v->owns_binary != 0){ - free(v->binary); - } - - if (v->url != 0){ - free(v->url); - } - - free(v); - } -} - -void icalattachtype_add_reference(struct icalattachtype* v) -{ - icalerror_check_arg( (v!=0),"v"); - v->refcount++; -} - -void icalattachtype_set_url(struct icalattachtype* v, char* url) -{ - icalerror_check_arg( (v!=0),"v"); - - if (v->url != 0){ - free (v->url); - } - - v->url = strdup(url); - - /* HACK This routine should do something if strdup returns NULL */ - -} - -char* icalattachtype_get_url(struct icalattachtype* v) -{ - icalerror_check_arg( (v!=0),"v"); - return v->url; -} - -void icalattachtype_set_base64(struct icalattachtype* v, char* base64, - int owns) -{ - icalerror_check_arg( (v!=0),"v"); - - v->base64 = base64; - v->owns_base64 = !(owns != 0 ); - -} - -char* icalattachtype_get_base64(struct icalattachtype* v) -{ - icalerror_check_arg( (v!=0),"v"); - return v->base64; -} - -void icalattachtype_set_binary(struct icalattachtype* v, char* binary, - int owns) -{ - icalerror_check_arg( (v!=0),"v"); - - v->binary = binary; - v->owns_binary = !(owns != 0 ); - -} - -void* icalattachtype_get_binary(struct icalattachtype* v) -{ - icalerror_check_arg( (v!=0),"v"); - return v->binary; -} - - - -time_t -icalperiodtype_duration (struct icalperiodtype period); - - -time_t -icalperiodtype_end (struct icalperiodtype period); - -struct icaltimetype -icaltimetype_from_timet(time_t v, int date) -{ - struct icaltimetype tt; - struct tm t; - time_t tm = time(&v); - -/* HACK Does not properly consider timezone */ - t = *(gmtime(&tm)); - - tt.second = t.tm_sec; - tt.minute = t.tm_min; - tt.hour = t.tm_hour; - tt.day = t.tm_mday; - tt.month = t.tm_mon + 1; - tt.year = t.tm_year+ 1900; - - tt.is_utc = 1; - tt.is_date = date; - - return tt; -} - -/* From Russel Steinthal */ -time_t icaldurationtype_as_timet(struct icaldurationtype dur) -{ - return (time_t) (dur.seconds + - (60 * dur.minutes) + - (60 * 60 * dur.hours) + - (60 * 60 * 24 * dur.days) + - (60 * 60 * 24 * 7 * dur.weeks)); -} - -/* From Seth Alves, */ -struct icaldurationtype icaldurationtype_from_timet(time_t t) -{ - struct icaldurationtype dur; - time_t used = 0; - - dur.weeks = (t - used) / (60 * 60 * 24 * 7); - used += dur.weeks * (60 * 60 * 24 * 7); - dur.days = (t - used) / (60 * 60 * 24); - used += dur.days * (60 * 60 * 24); - dur.hours = (t - used) / (60 * 60); - used += dur.hours * (60 * 60); - dur.minutes = (t - used) / (60); - used += dur.minutes * (60); - dur.seconds = (t - used); - - return dur; -} - -void icalrecurrencetype_clear(struct icalrecurrencetype *recur) -{ - memset(recur,ICAL_RECURRENCE_ARRAY_MAX_BYTE, - sizeof(struct icalrecurrencetype)); - - recur->week_start = ICAL_NO_WEEKDAY; - recur->freq = ICAL_NO_RECURRENCE; - recur->interval = 0; - recur->until.year = 0; - recur->count = 0; -} - - -struct icalreqstattype icalreqstattype_from_string(char* str) -{ - char *p1,*p2; - size_t len; - struct icalreqstattype stat; - int major, minor; - - icalerror_check_arg((str != 0),"str"); - - stat.code = ICAL_UNKNOWN_STATUS; - stat.debug = 0; - - stat.desc = 0; - - /* Get the status numbers */ - - sscanf(str, "%d.%d",&major, &minor); - - if (major <= 0 || minor < 0){ - icalerror_set_errno(ICAL_BADARG_ERROR); - return stat; - } - - stat.code = icalenum_num_to_reqstat(major, minor); - - if (stat.code == ICAL_UNKNOWN_STATUS){ - icalerror_set_errno(ICAL_BADARG_ERROR); - return stat; - } - - - p1 = strchr(str,';'); - - if (p1 == 0){ - icalerror_set_errno(ICAL_BADARG_ERROR); - return stat; - } - - /* Just ignore the second clause; it will be taken from inside the library - */ - - - - p2 = strchr(p1+1,';'); - if (p2 != 0 && *p2 != 0){ - stat.debug = p2+1; - } - - return stat; - -} - -char* icalreqstattype_as_string(struct icalreqstattype stat) -{ - char format[20]; - char *temp; - - temp = (char*)icalmemory_tmp_buffer(TEMP_MAX); - - icalerror_check_arg_rz((stat.code != ICAL_UNKNOWN_STATUS),"Status"); - - if (stat.desc == 0){ - stat.desc = icalenum_reqstat_desc(stat.code); - } - - if(stat.debug != 0){ - snprintf(temp,TEMP_MAX,"%d.%d;%s;%s", icalenum_reqstat_major(stat.code), - icalenum_reqstat_minor(stat.code), - stat.desc, stat.debug); - - } else { - snprintf(temp,TEMP_MAX,"%d.%d;%s", icalenum_reqstat_major(stat.code), - icalenum_reqstat_minor(stat.code), - stat.desc); - } - - return temp; -} diff --git a/libical/src/libical/icaltypes.h b/libical/src/libical/icaltypes.h deleted file mode 100644 index 77a67fae80..0000000000 --- a/libical/src/libical/icaltypes.h +++ /dev/null @@ -1,182 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icaltypes.h - CREATOR: eric 20 March 1999 - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icaltypes.h - -======================================================================*/ - -#ifndef ICALTYPES_H -#define ICALTYPES_H - -#include -#include "icalenums.h" /* for recurrence enums */ - -/* This type type should probably be an opaque type... */ -struct icalattachtype -{ - void* binary; - int owns_binary; - - char* base64; - int owns_base64; - - char* url; - - int refcount; - -}; - -/* converts base64 to binary, fetches url and stores as binary, or - just returns data */ - -struct icalattachtype* icalattachtype_new(); -void icalattachtype_add_reference(struct icalattachtype* v); -void icalattachtype_free(struct icalattachtype* v); - -void icalattachtype_set_url(struct icalattachtype* v, char* url); -char* icalattachtype_get_url(struct icalattachtype* v); - -void icalattachtype_set_base64(struct icalattachtype* v, char* base64, - int owns); -char* icalattachtype_get_base64(struct icalattachtype* v); - -void icalattachtype_set_binary(struct icalattachtype* v, char* binary, - int owns); -void* icalattachtype_get_binary(struct icalattachtype* v); - -struct icalgeotype -{ - float lat; - float lon; -}; - -struct icaltimetype -{ - int year; - int month; - int day; - int hour; - int minute; - int second; - - int is_utc; /* 1-> time is in UTC timezone */ - - int is_date; /* 1 -> interpret this as date. */ -}; - -struct icaltimetype icaltimetype_from_timet(time_t v, int is_date); - - -/* See RFC 2445 Section 4.3.10, RECUR Value, for an explaination of - the values and fields in struct icalrecurrencetype */ - - -struct icalrecurrencetype -{ - icalrecurrencetype_frequency freq; - - - /* until and count are mutually exclusive. */ - struct icaltimetype until; - int count; - - short interval; - - icalrecurrencetype_weekday week_start; - - /* The BY* parameters can each take a list of values. Here I - * assume that the list of values will not be larger than the - * range of the value -- that is, the client will not name a - * value more than once. - - * Each of the lists is terminated with the value SHRT_MAX - * unless the the list is full. */ - - short by_second[61]; - short by_minute[61]; - short by_hour[25]; - short by_day[8]; - short by_month_day[32]; - short by_year_day[367]; - short by_week_no[54]; - short by_month[13]; - short by_set_pos[367]; -}; - - -void icalrecurrencetype_clear(struct icalrecurrencetype *r); - -struct icaldurationtype -{ - unsigned int days; - unsigned int weeks; - unsigned int hours; - unsigned int minutes; - unsigned int seconds; -}; - -struct icaldurationtype icaldurationtype_from_timet(time_t t); -time_t icaldurationtype_as_timet(struct icaldurationtype duration); - -/* Return the next occurance of 'r' after the time specified by 'after' */ -struct icaltimetype icalrecurrencetype_next_occurance( - struct icalrecurrencetype *r, - struct icaltimetype *after); - - -struct icalperiodtype -{ - struct icaltimetype start; /* Must be absolute */ - struct icaltimetype end; /* Must be absolute */ - struct icaldurationtype duration; -}; - -time_t icalperiodtype_duration(struct icalperiodtype period); -time_t icalperiodtype_end(struct icalperiodtype period); - -union icaltriggertype -{ - struct icaltimetype time; - struct icaldurationtype duration; -}; - - -/* struct icalreqstattype. This struct contains two string pointers, -but don't try to free either of them. The "desc" string is a pointer -to a static table inside the library. Don't try to free it. The -"debug" string is a pointer into the string that the called passed -into to icalreqstattype_from_string. Don't try to free it either, and -don't use it after the original string has been freed. - -BTW, you would get that original string from -*icalproperty_get_requeststatus() or icalvalue_get_text(), when -operating on a the value of a request_status property. */ - -struct icalreqstattype { - - icalrequeststatus code; - char* desc; - char* debug; -}; - -struct icalreqstattype icalreqstattype_from_string(char* str); -char* icalreqstattype_as_string(struct icalreqstattype); - -#endif /* !ICALTYPES_H */ diff --git a/libical/src/libical/icalvalue.c b/libical/src/libical/icalvalue.c deleted file mode 100644 index 79eb8d827a..0000000000 --- a/libical/src/libical/icalvalue.c +++ /dev/null @@ -1,2104 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalvalue.c - CREATOR: eric 02 May 1999 - - $Id$ - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalvalue.c - - Contributions from: - Graham Davison (g.m.davison@computer.org) - - -======================================================================*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "ical.h" -#include "icalerror.h" -#include "icalmemory.h" -#include "icalparser.h" -#include "icalenums.h" - -#include /* for malloc */ -#include /* for sprintf */ -#include /* For memset, others */ -#include /* For offsetof() macro */ -#include -#include /* for mktime */ -#include /* for atoi and atof */ -#include /* for SHRT_MAX */ - -#if _MAC_OS_ -#include "strdup.h" -#endif - -#define TMP_BUF_SIZE 1024 - -void print_datetime_to_string(char* str, struct icaltimetype *data); -void print_date_to_string(char* str, struct icaltimetype *data); -void print_time_to_string(char* str, struct icaltimetype *data); -void print_recur_to_string(char* str, struct icaltimetype *data); - -struct icalvalue_impl { - icalvalue_kind kind; - char id[5]; - int size; - icalproperty* parent; - - union data { - struct icalattachtype v_attach; - /* void *v_binary; */ /* use v_attach */ - char *v_string; - /*char *v_text;*/ - /*char *v_caladdress;*/ - /*char *v_uri;*/ - float v_float; - int v_int; - /*int v_boolean;*/ - /*int v_integer;*/ - struct icaldurationtype v_duration; - /*int v_utcoffset;*/ - - struct icalperiodtype v_period; - /*struct icalperiodtype v_datetimeperiod;*/ - struct icalgeotype v_geo; - /*time_t v_time;*/ - struct icaltimetype v_time; - /*struct icaltimetype v_date;*/ - /*struct icaltimetype v_datetime;*/ - /*struct icaltimetype v_datetimedate;*/ - - /* struct icalrecurrencetype was once a value in this - union, but it contributes 2000 bytes to every*/ - - struct icalrecurrencetype *v_recur; - union icaltriggertype v_trigger; - icalproperty_method v_method; - - } data; -}; - -struct icalvalue_impl* icalvalue_new_impl(icalvalue_kind kind){ - - struct icalvalue_impl* v; - - if ( ( v = (struct icalvalue_impl*) - malloc(sizeof(struct icalvalue_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - strcpy(v->id,"val"); - - v->kind = kind; - v->size = 0; - v->parent = 0; - memset(&(v->data),0,sizeof(v->data)); - - return v; - -} - - - -icalvalue* -icalvalue_new (icalvalue_kind kind) -{ - return (icalvalue*)icalvalue_new_impl(kind); -} - -icalvalue* icalvalue_new_clone(icalvalue* value){ - - struct icalvalue_impl* new; - struct icalvalue_impl* old = (struct icalvalue_impl*)value; - - new = icalvalue_new_impl(old->kind); - - if (new == 0){ - return 0; - } - - - strcpy(new->id, old->id); - new->kind = old->kind; - new->size = old->size; - - switch (new->kind){ - - /* The contents of the attach value may or may not be owned by the - * library. */ - case ICAL_ATTACH_VALUE: - case ICAL_BINARY_VALUE: - { - /* HACK ugh. I don't feel like impleenting this */ - } - - case ICAL_STRING_VALUE: - case ICAL_TEXT_VALUE: - case ICAL_CALADDRESS_VALUE: - case ICAL_URI_VALUE: - { - if (old->data.v_string != 0) { - new->data.v_string=strdup(old->data.v_string); - - if ( new->data.v_string == 0 ) { - return 0; - } - - } - break; - } - case ICAL_RECUR_VALUE: - { - if(old->data.v_recur != 0){ - new->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); - - if(new->data.v_recur == 0){ - return 0; - } - - memcpy( new->data.v_recur, old->data.v_recur, - sizeof(struct icalrecurrencetype)); - } - break; - } - - default: - { - /* all of the other types are stored as values, not - pointers, so we can just copy the whole structure. */ - - new->data = old->data; - } - } - - return new; -} - -char* strdup_and_dequote(char* str) -{ - char* p; - char* out = (char*)malloc(sizeof(char) * strlen(str) +1); - char* pout; - - if (out == 0){ - return 0; - } - - pout = out; - - for (p = str; *p!=0; p++){ - - if( *p == '\\') - { - p++; - switch(*p){ - case 0: - { - break; - *pout = '\0'; - } - case 'n': - { - *pout = '\n'; - break; - } - case 'N': - { - *pout = '\n'; - break; - } - case '\\': - case ',': - case ';': - { - *pout = *p; - break; - } - default: - { - *pout = ' '; - } - } - } else { - *pout = *p; - } - - pout++; - - } - - *pout = '\0'; - - return out; -} - -icalvalue* icalvalue_new_from_string_with_error(icalvalue_kind kind,char* str,icalproperty** error) -{ - - icalvalue *value = 0; - - icalerror_check_arg_rz(str!=0,"str"); - - if (error != 0){ - *error = 0; - } - - switch (kind){ - - case ICAL_ATTACH_VALUE: - { - /* HACK */ - value = 0; - - if (error != 0){ - char temp[TMP_BUF_SIZE]; - sprintf(temp,"ATTACH Values are not implemented"); - *error = icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_VALUEPARSEERROR), - 0); - } - - icalerror_warn("Parsing ATTACH properties is unimplmeneted"); - break; - } - - case ICAL_BINARY_VALUE: - { - /* HACK */ - value = 0; - - if (error != 0){ - char temp[TMP_BUF_SIZE]; - sprintf(temp,"BINARY Values are not implemented"); - *error = icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_VALUEPARSEERROR), - 0); - } - - icalerror_warn("Parsing BINARY values is unimplmeneted"); - break; - } - - case ICAL_BOOLEAN_VALUE: - { - /* HACK */ - value = 0; - - if (error != 0){ - char temp[TMP_BUF_SIZE]; - sprintf(temp,"BOOLEAN Values are not implemented"); - *error = icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_VALUEPARSEERROR), - 0); - } - - icalerror_warn("Parsing BOOLEAN values is unimplmeneted"); - break; - } - - case ICAL_INTEGER_VALUE: - { - value = icalvalue_new_integer(atoi(str)); - break; - } - - case ICAL_FLOAT_VALUE: - { - value = icalvalue_new_float(atof(str)); - break; - } - - case ICAL_UTCOFFSET_VALUE: - { - value = icalparser_parse_value(kind,str,(icalcomponent*)0); - break; - } - - case ICAL_TEXT_VALUE: - { - char* dequoted_str = strdup_and_dequote(str); - value = icalvalue_new_text(dequoted_str); - free(dequoted_str); - break; - } - - - case ICAL_STRING_VALUE: - { - value = icalvalue_new_string(str); - break; - } - - case ICAL_CALADDRESS_VALUE: - { - value = icalvalue_new_caladdress(str); - break; - } - - case ICAL_URI_VALUE: - { - value = icalvalue_new_uri(str); - break; - } - - case ICAL_METHOD_VALUE: - { - icalproperty_method method = icalenum_string_to_method(str); - - if(method == ICAL_METHOD_NONE){ - value = 0; - } else { - value = icalvalue_new_method(method); - } - - break; - - } - case ICAL_GEO_VALUE: - { - value = 0; - /* HACK */ - - if (error != 0){ - char temp[TMP_BUF_SIZE]; - sprintf(temp,"GEO Values are not implemented"); - *error = icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_VALUEPARSEERROR), - 0); - } - - /*icalerror_warn("Parsing GEO properties is unimplmeneted");*/ - - break; - } - - case ICAL_RECUR_VALUE: - case ICAL_DATE_VALUE: - case ICAL_DATETIME_VALUE: - case ICAL_DATETIMEDATE_VALUE: - case ICAL_DATETIMEPERIOD_VALUE: - case ICAL_TIME_VALUE: - case ICAL_DURATION_VALUE: - case ICAL_PERIOD_VALUE: - case ICAL_TRIGGER_VALUE: - { - value = icalparser_parse_value(kind,str,error); - break; - } - - default: - { - - if (error != 0 ){ - char temp[TMP_BUF_SIZE]; - - snprintf(temp,TMP_BUF_SIZE,"Unknown type for \'%s\'",str); - - *error = icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_VALUEPARSEERROR), - 0); - } - - icalerror_warn("icalvalue_new_from_string got an unknown value type"); - value=0; - } - } - - - if (error != 0 && *error == 0 && value == 0){ - char temp[TMP_BUF_SIZE]; - - snprintf(temp,TMP_BUF_SIZE,"Failed to parse value: \'%s\'",str); - - *error = icalproperty_vanew_xlicerror( - temp, - icalparameter_new_xlicerrortype( - ICAL_XLICERRORTYPE_VALUEPARSEERROR), - 0); - } - - - return value; - -} - -icalvalue* icalvalue_new_from_string(icalvalue_kind kind,char* str) -{ - return icalvalue_new_from_string_with_error(kind,str,(icalproperty*)0); -} - - - -void -icalvalue_free (icalvalue* value) -{ - struct icalvalue_impl* v = (struct icalvalue_impl*)value; - - icalerror_check_arg_rv((value != 0),"value"); - -#ifdef ICAL_FREE_ON_LIST_IS_ERROR - icalerror_assert( (v->parent ==0),"This value is still attached to a property"); - -#else - if(v->parent !=0){ - return; - } -#endif - - - switch (v->kind){ - case ICAL_BINARY_VALUE: - case ICAL_ATTACH_VALUE: { - /* HACK ugh. This will be tough to implement */ - } - case ICAL_TEXT_VALUE: - case ICAL_CALADDRESS_VALUE: - case ICAL_URI_VALUE: - { - if (v->data.v_string != 0) { - free(v->data.v_string); - v->data.v_string = 0; - } - break; - } - case ICAL_RECUR_VALUE: - { - if(v->data.v_recur != 0){ - free(v->data.v_recur); - v->data.v_recur = 0; - } - break; - } - - default: - { - /* Nothing to do */ - } - } - - v->kind = ICAL_NO_VALUE; - v->size = 0; - v->parent = 0; - memset(&(v->data),0,sizeof(v->data)); - v->id[0] = 'X'; - free(v); -} - -int -icalvalue_is_valid (icalvalue* value) -{ - /*struct icalvalue_impl* v = (struct icalvalue_impl*)value;*/ - - if(value == 0){ - return 0; - } - - return 1; -} - -char* icalvalue_binary_as_ical_string(icalvalue* value) { - - char* data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_binary(value); - - str = (char*)icalmemory_tmp_buffer(60); - sprintf(str,"icalvalue_binary_as_ical_string is not implemented yet"); - - return str; -} - - -char* icalvalue_int_as_ical_string(icalvalue* value) { - - int data; - char* str = (char*)icalmemory_tmp_buffer(2); - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_integer(value); - - sprintf(str,"%d",data); - - return str; -} - -char* icalvalue_utcoffset_as_ical_string(icalvalue* value) -{ - int data,h,m,s; - char sign; - char* str = (char*)icalmemory_tmp_buffer(9); - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_utcoffset(value); - - if (abs(data) == data){ - sign = '+'; - } else { - sign = '-'; - } - - h = data/3600; - m = (data - (h*3600))/ 60; - s = (data - (h*3600) - (m*60)); - - sprintf(str,"%c%02d%02d%02d",sign,abs(h),abs(m),abs(s)); - - return str; -} - -char* icalvalue_string_as_ical_string(icalvalue* value) { - - char* data; - char* str = 0; - icalerror_check_arg_rz( (value!=0),"value"); - data = ((struct icalvalue_impl*)value)->data.v_string; - - str = (char*)icalmemory_tmp_buffer(strlen(data)+1); - - strcpy(str,data); - - return str; -} - - -char* icalvalue_recur_as_ical_string(icalvalue* value) -{ - char* str; - char *str_p; - size_t buf_sz = 200; - char temp[20]; - int i,j; - struct icalvalue_impl *impl = (struct icalvalue_impl*)value; - struct icalrecurrencetype *recur = impl->data.v_recur; - - struct { char* str;size_t offset; short limit; } recurmap[] = - { - {";BYSECOND=",offsetof(struct icalrecurrencetype,by_second),60}, - {";BYMINUTE=",offsetof(struct icalrecurrencetype,by_minute),60}, - {";BYHOUR=",offsetof(struct icalrecurrencetype,by_hour),24}, - {";BYDAY=",offsetof(struct icalrecurrencetype,by_day),7}, - {";BYMONTHDAY=",offsetof(struct icalrecurrencetype,by_month_day),31}, - {";BYYEARDAY=",offsetof(struct icalrecurrencetype,by_year_day),366}, - {";BYWEEKNO=",offsetof(struct icalrecurrencetype,by_week_no),52}, - {";BYMONTH=",offsetof(struct icalrecurrencetype,by_month),12}, - {";BYSETPOS=",offsetof(struct icalrecurrencetype,by_set_pos),366}, - {0,0,0}, - }; - - - - icalerror_check_arg_rz((value != 0),"value"); - - if(recur->freq == ICAL_NO_RECURRENCE){ - return 0; - } - - str = (char*)icalmemory_tmp_buffer(buf_sz); - str_p = str; - - icalmemory_append_string(&str,&str_p,&buf_sz,"FREQ="); - icalmemory_append_string(&str,&str_p,&buf_sz, - icalenum_recurrence_to_string(recur->freq)); - - if(recur->until.year != 0){ - - temp[0] = 0; - print_datetime_to_string(temp,&(recur->until)); - - icalmemory_append_string(&str,&str_p,&buf_sz,";UNTIL="); - icalmemory_append_string(&str,&str_p,&buf_sz, temp); - } - - if(recur->count != 0){ - sprintf(temp,"%d",recur->count); - icalmemory_append_string(&str,&str_p,&buf_sz,";COUNT="); - icalmemory_append_string(&str,&str_p,&buf_sz, temp); - } - - if(recur->interval != 0){ - sprintf(temp,"%d",recur->interval); - icalmemory_append_string(&str,&str_p,&buf_sz,";INTERVAL="); - icalmemory_append_string(&str,&str_p,&buf_sz, temp); - } - - for(j =0; recurmap[j].str != 0; j++){ - short* array = (short*)(recurmap[j].offset+ (size_t)recur); - short limit = recurmap[j].limit; - - /* Skip unused arrays */ - if( array[0] != ICAL_RECURRENCE_ARRAY_MAX ) { - - icalmemory_append_string(&str,&str_p,&buf_sz,recurmap[j].str); - - for(i=0; i< limit && array[i] != ICAL_RECURRENCE_ARRAY_MAX; - i++){ - if (j == 3) { /* BYDAY */ - icalmemory_append_string(&str,&str_p,&buf_sz, - icalenum_weekday_to_string(array[i])); - } else { - sprintf(temp,"%d",array[i]); - icalmemory_append_string(&str,&str_p,&buf_sz, temp); - } - - if( (i+1)data.v_string)+1; - - str_p = str = (char*)icalmemory_new_buffer(buf_sz); - - if (str_p == 0){ - return 0; - } - - for(p=((struct icalvalue_impl*)value)->data.v_string; *p!=0; p++){ - - switch(*p){ - case '\n': { - icalmemory_append_string(&str,&str_p,&buf_sz,"\\n"); - line_length+=3; - break; - } - - case '\t': { - icalmemory_append_string(&str,&str_p,&buf_sz,"\\t"); - line_length+=3; - break; - } - case '\r': { - icalmemory_append_string(&str,&str_p,&buf_sz,"\\r"); - line_length+=3; - break; - } - case '\b': { - icalmemory_append_string(&str,&str_p,&buf_sz,"\\b"); - line_length+=3; - break; - } - case '\f': { - icalmemory_append_string(&str,&str_p,&buf_sz,"\\f"); - line_length+=3; - break; - } - - case ';': - case ',':{ - icalmemory_append_char(&str,&str_p,&buf_sz,'\\'); - icalmemory_append_char(&str,&str_p,&buf_sz,*p); - line_length+=3; - break; - } - - case '"':{ - icalmemory_append_char(&str,&str_p,&buf_sz,'\\'); - icalmemory_append_char(&str,&str_p,&buf_sz,*p); - line_length+=3; - break; - } - - default: { - icalmemory_append_char(&str,&str_p,&buf_sz,*p); - line_length++; - } - } - - if (line_length > 65 && *p == ' '){ - icalmemory_append_string(&str,&str_p,&buf_sz,"\n "); - line_length=0; - } - - - if (line_length > 75){ - icalmemory_append_string(&str,&str_p,&buf_sz,"\n "); - line_length=0; - } - - } - - /* Assume the last character is not a '\0' and add one. We could - check *str_p != 0, but that would be an uninitialized memory - read. */ - - - icalmemory_append_char(&str,&str_p,&buf_sz,'\0'); - - rtrn = icalmemory_tmp_copy(str); - - icalmemory_free_buffer(str); - - return rtrn; -} - - -char* icalvalue_attach_as_ical_string(icalvalue* value) { - - struct icalattachtype a; - char * str; - - icalerror_check_arg_rz( (value!=0),"value"); - - a = icalvalue_get_attach(value); - - if (a.binary != 0) { - return icalvalue_binary_as_ical_string(value); - } else if (a.base64 != 0) { - str = (char*)icalmemory_tmp_buffer(strlen(a.base64)+1); - strcpy(str,a.base64); - return str; - } else if (a.url != 0){ - return icalvalue_string_as_ical_string(value); - } else { - icalerrno = ICAL_MALFORMEDDATA_ERROR; - return 0; - } -} - -void append_duration_segment(char** buf, char** buf_ptr, size_t* buf_size, - char* sep, unsigned int value) { - - char temp[TMP_BUF_SIZE]; - - sprintf(temp,"%d",value); - - icalmemory_append_string(buf, buf_ptr, buf_size, temp); - icalmemory_append_string(buf, buf_ptr, buf_size, sep); - -} - -char* icalvalue_duration_as_ical_string(icalvalue* value) { - - struct icaldurationtype data; - char *buf, *output_line; - size_t buf_size = 256; - char* buf_ptr = 0; - - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_duration(value); - - buf = (char*)icalmemory_new_buffer(buf_size); - buf_ptr = buf; - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, "P"); - - - if (data.weeks != 0 ) { - append_duration_segment(&buf, &buf_ptr, &buf_size, "W", data.weeks); - } - - if (data.days != 0 ) { - append_duration_segment(&buf, &buf_ptr, &buf_size, "D", data.days); - } - - if (data.hours != 0 || data.minutes != 0 || data.seconds != 0) { - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, "T"); - - if (data.hours != 0 ) { - append_duration_segment(&buf, &buf_ptr, &buf_size, "H", data.hours); - } - if (data.minutes != 0 ) { - append_duration_segment(&buf, &buf_ptr, &buf_size, "M", data.minutes); - } - if (data.seconds != 0 ) { - append_duration_segment(&buf, &buf_ptr, &buf_size, "S", data.seconds); - } - - } - - output_line = icalmemory_tmp_copy(buf); - icalmemory_free_buffer(buf); - - return output_line; - - -} - -void print_time_to_string(char* str, struct icaltimetype *data) -{ - char temp[20]; - - if (data->is_utc == 1){ - sprintf(temp,"%02d%02d%02dZ",data->hour,data->minute,data->second); - } else { - sprintf(temp,"%02d%02d%02d",data->hour,data->minute,data->second); - } - - strcat(str,temp); -} - - -char* icalvalue_time_as_ical_string(icalvalue* value) { - - struct icaltimetype data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_time(value); - - str = (char*)icalmemory_tmp_buffer(8); - - str[0] = 0; - print_time_to_string(str,&data); - - return str; -} - -void print_date_to_string(char* str, struct icaltimetype *data) -{ - char temp[20]; - - sprintf(temp,"%04d%02d%02d",data->year,data->month,data->day); - - strcat(str,temp); -} - -char* icalvalue_date_as_ical_string(icalvalue* value) { - - struct icaltimetype data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_date(value); - - str = (char*)icalmemory_tmp_buffer(9); - - str[0] = 0; - print_date_to_string(str,&data); - - return str; -} - -void print_datetime_to_string(char* str, struct icaltimetype *data) -{ - print_date_to_string(str,data); - strcat(str,"T"); - print_time_to_string(str,data); - -} - -char* icalvalue_datetime_as_ical_string(icalvalue* value) { - - struct icaltimetype data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_date(value); - - str = (char*)icalmemory_tmp_buffer(20); - - str[0] = 0; - - print_datetime_to_string(str,&data); - - return str; - -} - - -char* icalvalue_datetimedate_as_ical_string(icalvalue* value) { - - struct icaltimetype data; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_datetime(value); - - if (data.is_date == 1){ - return icalvalue_date_as_ical_string(value); - } else { - return icalvalue_datetime_as_ical_string(value); - } -} - - -char* icalvalue_float_as_ical_string(icalvalue* value) { - - float data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_float(value); - - str = (char*)icalmemory_tmp_buffer(15); - - sprintf(str,"%f",data); - - return str; -} - -char* icalvalue_geo_as_ical_string(icalvalue* value) { - - struct icalgeotype data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - - data = icalvalue_get_geo(value); - - str = (char*)icalmemory_tmp_buffer(25); - - sprintf(str,"%f;%f",data.lat,data.lon); - - return str; -} - -char* icalvalue_datetimeperiod_as_ical_string(icalvalue* value) { - - struct icalperiodtype data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_datetimeperiod(value); - - str = (char*)icalmemory_tmp_buffer(60); - - if( data.end.second == -1){ - /* This is a DATE-TIME value, since there is no end value */ - icalvalue *v= icalvalue_new_datetime(data.start); - - strcpy(str,icalvalue_datetime_as_ical_string(v)); - - free(v); - - } else { - icalvalue *v1 = icalvalue_new_datetime(data.start); - icalvalue *v2 = icalvalue_new_datetime(data.end); - - sprintf(str,"%s/%s", - icalvalue_datetime_as_ical_string(v1), - icalvalue_datetime_as_ical_string(v2) - ); - - free(v1); - free(v2); - - } - - return str; -} - -char* icalvalue_period_as_ical_string(icalvalue* value) { - - struct icalperiodtype data; - char* str; - icalvalue *s,*e; - - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_period(value); - - str = (char*)icalmemory_tmp_buffer(60); - - s = icalvalue_new_datetime(data.start); - - if (data.end.second != -1){ - /* use the end date */ - e = icalvalue_new_datetime(data.end); - - sprintf(str,"%s/%s", - icalvalue_datetime_as_ical_string(s), - icalvalue_datetime_as_ical_string(e) - ); - - - } else { - /* use the duration */ - e = icalvalue_new_duration(data.duration); - - sprintf(str,"%s/%s", - icalvalue_datetime_as_ical_string(s), - icalvalue_duration_as_ical_string(e) - ); - - } - - icalvalue_free(e); - icalvalue_free(s); - return str; -} - -char* icalvalue_trigger_as_ical_string(icalvalue* value) { - - union icaltriggertype data; - char* str; - icalerror_check_arg_rz( (value!=0),"value"); - data = icalvalue_get_trigger(value); - - str = (char*)icalmemory_tmp_buffer(60); - sprintf(str,"icalvalue_trigger_as_ical_string is not implemented yet"); - - return str; -} - -char* -icalvalue_as_ical_string (icalvalue* value) -{ - struct icalvalue_impl* v = (struct icalvalue_impl*)value; - - v=v; - - if(value == 0){ - return 0; - } - - switch (v->kind){ - - case ICAL_ATTACH_VALUE: - return icalvalue_attach_as_ical_string(value); - - case ICAL_BINARY_VALUE: - return icalvalue_binary_as_ical_string(value); - - case ICAL_BOOLEAN_VALUE: - case ICAL_INTEGER_VALUE: - return icalvalue_int_as_ical_string(value); - - case ICAL_UTCOFFSET_VALUE: - return icalvalue_utcoffset_as_ical_string(value); - - case ICAL_TEXT_VALUE: - return icalvalue_text_as_ical_string(value); - - case ICAL_STRING_VALUE: - case ICAL_URI_VALUE: - case ICAL_CALADDRESS_VALUE: - return icalvalue_string_as_ical_string(value); - - case ICAL_DATE_VALUE: - return icalvalue_date_as_ical_string(value); - case ICAL_DATETIME_VALUE: - return icalvalue_datetime_as_ical_string(value); - case ICAL_DATETIMEDATE_VALUE: - return icalvalue_datetimedate_as_ical_string(value); - case ICAL_DURATION_VALUE: - return icalvalue_duration_as_ical_string(value); - case ICAL_TIME_VALUE: - return icalvalue_time_as_ical_string(value); - - case ICAL_PERIOD_VALUE: - return icalvalue_period_as_ical_string(value); - case ICAL_DATETIMEPERIOD_VALUE: - return icalvalue_datetimeperiod_as_ical_string(value); - - case ICAL_FLOAT_VALUE: - return icalvalue_float_as_ical_string(value); - - case ICAL_GEO_VALUE: - return icalvalue_geo_as_ical_string(value); - - case ICAL_RECUR_VALUE: - return icalvalue_recur_as_ical_string(value); - - case ICAL_TRIGGER_VALUE: - return icalvalue_trigger_as_ical_string(value); - - case ICAL_METHOD_VALUE: - return icalenum_method_to_string(v->data.v_method); - - case ICAL_NO_VALUE: - default: - { - return 0; - } - } -} - - -icalvalue_kind -icalvalue_isa (icalvalue* value) -{ - struct icalvalue_impl* v = (struct icalvalue_impl*)value; - - if(value == 0){ - return ICAL_NO_VALUE; - } - - return v->kind; -} - - -int -icalvalue_isa_value (void* value) -{ - struct icalvalue_impl *impl = (struct icalvalue_impl *)value; - - icalerror_check_arg_rz( (value!=0), "value"); - - if (strcmp(impl->id,"val") == 0) { - return 1; - } else { - return 0; - } -} - - -icalparameter_xliccomparetype -icalvalue_compare(icalvalue* a, icalvalue *b) -{ - struct icalvalue_impl *impla = (struct icalvalue_impl *)a; - struct icalvalue_impl *implb = (struct icalvalue_impl *)b; - - icalerror_check_arg_rz( (a!=0), "a"); - icalerror_check_arg_rz( (b!=0), "b"); - - /* Not the same type; they can only be unequal */ - if (icalvalue_isa(a) != icalvalue_isa(b)){ - return ICAL_XLICCOMPARETYPE_NOTEQUAL; - } - - switch (icalvalue_isa(a)){ - - case ICAL_ATTACH_VALUE: - case ICAL_BINARY_VALUE: - - case ICAL_BOOLEAN_VALUE: - { - if (icalvalue_get_boolean(a) == icalvalue_get_boolean(b)){ - return ICAL_XLICCOMPARETYPE_EQUAL; - } else { - return ICAL_XLICCOMPARETYPE_NOTEQUAL; - } - } - - case ICAL_FLOAT_VALUE: - { - if (impla->data.v_float > implb->data.v_float){ - return ICAL_XLICCOMPARETYPE_GREATER; - } else if (impla->data.v_float < implb->data.v_float){ - return ICAL_XLICCOMPARETYPE_LESS; - } else { - return ICAL_XLICCOMPARETYPE_EQUAL; - } - } - - case ICAL_INTEGER_VALUE: - case ICAL_UTCOFFSET_VALUE: - { - if (impla->data.v_int > implb->data.v_int){ - return ICAL_XLICCOMPARETYPE_GREATER; - } else if (impla->data.v_int < implb->data.v_int){ - return ICAL_XLICCOMPARETYPE_LESS; - } else { - return ICAL_XLICCOMPARETYPE_EQUAL; - } - } - - case ICAL_TEXT_VALUE: - case ICAL_URI_VALUE: - case ICAL_CALADDRESS_VALUE: - case ICAL_TRIGGER_VALUE: - case ICAL_DATE_VALUE: - case ICAL_DATETIME_VALUE: - case ICAL_DATETIMEDATE_VALUE: - case ICAL_DURATION_VALUE: /* HACK. Not correct for DURATION */ - case ICAL_TIME_VALUE: - case ICAL_DATETIMEPERIOD_VALUE: - { - int r; - - r = strcmp(icalvalue_as_ical_string(a), - icalvalue_as_ical_string(b)); - - if (r > 0) { - return ICAL_XLICCOMPARETYPE_GREATER; - } else if (r < 0){ - return ICAL_XLICCOMPARETYPE_LESS; - } else { - return 0; - } - - - } - - case ICAL_METHOD_VALUE: - { - if (icalvalue_get_method(a) == icalvalue_get_method(b)){ - return ICAL_XLICCOMPARETYPE_EQUAL; - } else { - return ICAL_XLICCOMPARETYPE_NOTEQUAL; - } - - } - case ICAL_PERIOD_VALUE: - case ICAL_GEO_VALUE: - case ICAL_RECUR_VALUE: - case ICAL_NO_VALUE: - default: - { - icalerror_warn("Comparison not implemented for value type"); - return ICAL_XLICCOMPARETYPE_REGEX+1; /* HACK */ - } - } - -} - -void icalvalue_set_parent(icalvalue* value, - icalproperty* property) -{ - struct icalvalue_impl* v = (struct icalvalue_impl*)value; - - v->parent = property; - -} - -icalproperty* icalvalue_get_parent(icalvalue* value) -{ - struct icalvalue_impl* v = (struct icalvalue_impl*)value; - - - return v->parent; -} - - - -/* Recur is a special case, so it is not auto generated. Well, - actually, it is auto-generated, but you will have to manually - remove the auto-generated version after each generation. */ -icalvalue* -icalvalue_new_recur (struct icalrecurrencetype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_RECUR_VALUE); - - icalvalue_set_recur((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_RECUR_VALUE); - - impl = (struct icalvalue_impl*)value; - - if (impl->data.v_recur != 0){ - free(impl->data.v_recur); - impl->data.v_recur = 0; - } - - impl->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); - - if (impl->data.v_recur == 0){ - icalerror_set_errno(ICAL_ALLOCATION_ERROR); - return; - } else { - memcpy(impl->data.v_recur, &v, sizeof(struct icalrecurrencetype)); - } - -} - -struct icalrecurrencetype -icalvalue_get_recur(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_RECUR_VALUE); - - return *(((struct icalvalue_impl*)value)->data.v_recur); -} - - - - -/* The remaining interfaces are 'new', 'set' and 'get' for each of the value - types */ - - -/* Everything below this line is machine generated. Do not edit. */ - -icalvalue* -icalvalue_new_attach (struct icalattachtype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_ATTACH_VALUE); - - - icalvalue_set_attach((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_attach(icalvalue* value, struct icalattachtype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_ATTACH_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_attach = v; -} - -struct icalattachtype -icalvalue_get_attach(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_ATTACH_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_attach; -} - - -icalvalue* -icalvalue_new_binary (char* v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_BINARY_VALUE); - - icalerror_check_arg_rz( (v!=0),"v"); - - icalvalue_set_binary((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_binary(icalvalue* value, char* v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_value_type(value, ICAL_BINARY_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_string = strdup(v); - - if (impl->data.v_string == 0){ - errno = ENOMEM; - } - -} - -char* -icalvalue_get_binary(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_BINARY_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_string; -} - - -icalvalue* -icalvalue_new_boolean (int v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_BOOLEAN_VALUE); - - - icalvalue_set_boolean((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_boolean(icalvalue* value, int v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_BOOLEAN_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_int = v; -} - -int -icalvalue_get_boolean(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_BOOLEAN_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_int; -} - - -icalvalue* -icalvalue_new_caladdress (char* v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_CALADDRESS_VALUE); - - icalerror_check_arg_rz( (v!=0),"v"); - - icalvalue_set_caladdress((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_caladdress(icalvalue* value, char* v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_value_type(value, ICAL_CALADDRESS_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_string = strdup(v); - - if (impl->data.v_string == 0){ - errno = ENOMEM; - } - -} - -char* -icalvalue_get_caladdress(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_CALADDRESS_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_string; -} - - -icalvalue* -icalvalue_new_date (struct icaltimetype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATE_VALUE); - - - icalvalue_set_date((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_date(icalvalue* value, struct icaltimetype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_DATE_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_time = v; -} - -struct icaltimetype -icalvalue_get_date(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_DATE_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_time; -} - - -icalvalue* -icalvalue_new_datetime (struct icaltimetype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIME_VALUE); - - - icalvalue_set_datetime((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_datetime(icalvalue* value, struct icaltimetype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_DATETIME_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_time = v; -} - -struct icaltimetype -icalvalue_get_datetime(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_DATETIME_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_time; -} - - -icalvalue* -icalvalue_new_datetimedate (struct icaltimetype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEDATE_VALUE); - - - icalvalue_set_datetimedate((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_datetimedate(icalvalue* value, struct icaltimetype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_DATETIMEDATE_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_time = v; -} - -struct icaltimetype -icalvalue_get_datetimedate(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_DATETIMEDATE_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_time; -} - - -icalvalue* -icalvalue_new_datetimeperiod (struct icalperiodtype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DATETIMEPERIOD_VALUE); - - - icalvalue_set_datetimeperiod((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_datetimeperiod(icalvalue* value, struct icalperiodtype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_period = v; -} - -struct icalperiodtype -icalvalue_get_datetimeperiod(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_DATETIMEPERIOD_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_period; -} - - -icalvalue* -icalvalue_new_duration (struct icaldurationtype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_DURATION_VALUE); - - - icalvalue_set_duration((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_duration(icalvalue* value, struct icaldurationtype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_DURATION_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_duration = v; -} - -struct icaldurationtype -icalvalue_get_duration(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_DURATION_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_duration; -} - - -icalvalue* -icalvalue_new_float (float v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_FLOAT_VALUE); - - - icalvalue_set_float((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_float(icalvalue* value, float v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_FLOAT_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_float = v; -} - -float -icalvalue_get_float(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_FLOAT_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_float; -} - - -icalvalue* -icalvalue_new_geo (struct icalgeotype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_GEO_VALUE); - - - icalvalue_set_geo((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_geo(icalvalue* value, struct icalgeotype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_GEO_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_geo = v; -} - -struct icalgeotype -icalvalue_get_geo(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_GEO_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_geo; -} - - -icalvalue* -icalvalue_new_integer (int v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_INTEGER_VALUE); - - - icalvalue_set_integer((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_integer(icalvalue* value, int v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_INTEGER_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_int = v; -} - -int -icalvalue_get_integer(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_INTEGER_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_int; -} - - -icalvalue* -icalvalue_new_method (icalproperty_method v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_METHOD_VALUE); - - - icalvalue_set_method((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_method(icalvalue* value, icalproperty_method v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_METHOD_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_method = v; -} - -icalproperty_method -icalvalue_get_method(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_METHOD_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_method; -} - - -icalvalue* -icalvalue_new_period (struct icalperiodtype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_PERIOD_VALUE); - - - icalvalue_set_period((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_period(icalvalue* value, struct icalperiodtype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_PERIOD_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_period = v; -} - -struct icalperiodtype -icalvalue_get_period(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_PERIOD_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_period; -} - - -icalvalue* -icalvalue_new_string (char* v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_STRING_VALUE); - - icalerror_check_arg_rz( (v!=0),"v"); - - icalvalue_set_string((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_string(icalvalue* value, char* v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_value_type(value, ICAL_STRING_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_string = strdup(v); - - if (impl->data.v_string == 0){ - errno = ENOMEM; - } - -} - -char* -icalvalue_get_string(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_STRING_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_string; -} - -icalvalue* -icalvalue_new_text (char* v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TEXT_VALUE); - - icalerror_check_arg_rz( (v!=0),"v"); - - icalvalue_set_text((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_text(icalvalue* value, char* v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_value_type(value, ICAL_TEXT_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_string = strdup(v); - - if (impl->data.v_string == 0){ - errno = ENOMEM; - } - -} - -char* -icalvalue_get_text(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_TEXT_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_string; -} - - -icalvalue* -icalvalue_new_time (struct icaltimetype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TIME_VALUE); - - - icalvalue_set_time((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_time(icalvalue* value, struct icaltimetype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_TIME_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_time = v; -} - -struct icaltimetype -icalvalue_get_time(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_TIME_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_time; -} - - -icalvalue* -icalvalue_new_trigger (union icaltriggertype v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_TRIGGER_VALUE); - - - icalvalue_set_trigger((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_trigger(icalvalue* value, union icaltriggertype v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_TRIGGER_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_trigger = v; -} - -union icaltriggertype -icalvalue_get_trigger(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_TRIGGER_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_trigger; -} - - -icalvalue* -icalvalue_new_uri (char* v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_URI_VALUE); - - icalerror_check_arg_rz( (v!=0),"v"); - - icalvalue_set_uri((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_uri(icalvalue* value, char* v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_value_type(value, ICAL_URI_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_string = strdup(v); - - if (impl->data.v_string == 0){ - errno = ENOMEM; - } - -} - -char* -icalvalue_get_uri(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_URI_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_string; -} - - -icalvalue* -icalvalue_new_utcoffset (int v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_UTCOFFSET_VALUE); - - - icalvalue_set_utcoffset((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_utcoffset(icalvalue* value, int v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - - icalerror_check_value_type(value, ICAL_UTCOFFSET_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_int = v; -} - -int -icalvalue_get_utcoffset(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_UTCOFFSET_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_int; -} - - -icalvalue* -icalvalue_new_query (char* v) -{ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_QUERY_VALUE); - - icalerror_check_arg_rz( (v!=0),"v"); - - icalvalue_set_query((icalvalue*)impl,v); - - return (icalvalue*)impl; -} - -void -icalvalue_set_query(icalvalue* value, char* v) -{ - struct icalvalue_impl* impl; - - icalerror_check_arg_rv( (value!=0),"value"); - icalerror_check_arg_rv( (v!=0),"v"); - - icalerror_check_value_type(value, ICAL_QUERY_VALUE); - - impl = (struct icalvalue_impl*)value; - impl->data.v_string = strdup(v); - - if (impl->data.v_string == 0){ - errno = ENOMEM; - } - -} - -char* -icalvalue_get_query(icalvalue* value) -{ - icalerror_check_arg( (value!=0),"value"); - icalerror_check_value_type(value, ICAL_QUERY_VALUE); - - return ((struct icalvalue_impl*)value)->data.v_string; -} - diff --git a/libical/src/libical/icalvalue.h b/libical/src/libical/icalvalue.h deleted file mode 100644 index ec7457d6aa..0000000000 --- a/libical/src/libical/icalvalue.h +++ /dev/null @@ -1,169 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalvalue.h - CREATOR: eric 20 March 1999 - - - $Id$ - $Locker$ - - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalvalue.h - - ======================================================================*/ - -#ifndef ICALVALUE_H -#define ICALVALUE_H - -#include -#include "icalenums.h" -#include "icaltypes.h" - -typedef void icalvalue; - -icalvalue* icalvalue_new(icalvalue_kind kind); - -icalvalue* icalvalue_new_clone(icalvalue* value); - -icalvalue* icalvalue_new_from_string(icalvalue_kind kind, char* str); - -void icalvalue_free(icalvalue* value); - -int icalvalue_is_valid(icalvalue* value); - -char* icalvalue_as_ical_string(icalvalue* value); - -icalvalue_kind icalvalue_isa(icalvalue* value); - -int icalvalue_isa_value(void*); - -icalparameter_xliccomparetype -icalvalue_compare(icalvalue* a, icalvalue *b); - -/* Everything below this line is machine generated. Do not edit. */ -/* ATTACH # Non-std */ -icalvalue* icalvalue_new_attach(struct icalattachtype v); -struct icalattachtype icalvalue_get_attach(icalvalue* value); -void icalvalue_set_attach(icalvalue* value, struct icalattachtype v); - -/* BINARY */ -icalvalue* icalvalue_new_binary(char* v); -char* icalvalue_get_binary(icalvalue* value); -void icalvalue_set_binary(icalvalue* value, char* v); - -/* BOOLEAN */ -icalvalue* icalvalue_new_boolean(int v); -int icalvalue_get_boolean(icalvalue* value); -void icalvalue_set_boolean(icalvalue* value, int v); - -/* CAL-ADDRESS */ -icalvalue* icalvalue_new_caladdress(char* v); -char* icalvalue_get_caladdress(icalvalue* value); -void icalvalue_set_caladdress(icalvalue* value, char* v); - -/* DATE */ -icalvalue* icalvalue_new_date(struct icaltimetype v); -struct icaltimetype icalvalue_get_date(icalvalue* value); -void icalvalue_set_date(icalvalue* value, struct icaltimetype v); - -/* DATE-TIME */ -icalvalue* icalvalue_new_datetime(struct icaltimetype v); -struct icaltimetype icalvalue_get_datetime(icalvalue* value); -void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); - -/* DATE-TIME-DATE # Non-std */ -icalvalue* icalvalue_new_datetimedate(struct icaltimetype v); -struct icaltimetype icalvalue_get_datetimedate(icalvalue* value); -void icalvalue_set_datetimedate(icalvalue* value, struct icaltimetype v); - -/* DATE-TIME-PERIOD # Non-std */ -icalvalue* icalvalue_new_datetimeperiod(struct icalperiodtype v); -struct icalperiodtype icalvalue_get_datetimeperiod(icalvalue* value); -void icalvalue_set_datetimeperiod(icalvalue* value, struct icalperiodtype v); - -/* DURATION */ -icalvalue* icalvalue_new_duration(struct icaldurationtype v); -struct icaldurationtype icalvalue_get_duration(icalvalue* value); -void icalvalue_set_duration(icalvalue* value, struct icaldurationtype v); - -/* FLOAT */ -icalvalue* icalvalue_new_float(float v); -float icalvalue_get_float(icalvalue* value); -void icalvalue_set_float(icalvalue* value, float v); - -/* GEO # Non-std */ -icalvalue* icalvalue_new_geo(struct icalgeotype v); -struct icalgeotype icalvalue_get_geo(icalvalue* value); -void icalvalue_set_geo(icalvalue* value, struct icalgeotype v); - -/* INTEGER */ -icalvalue* icalvalue_new_integer(int v); -int icalvalue_get_integer(icalvalue* value); -void icalvalue_set_integer(icalvalue* value, int v); - -/* METHOD # Non-std */ -icalvalue* icalvalue_new_method(icalproperty_method v); -icalproperty_method icalvalue_get_method(icalvalue* value); -void icalvalue_set_method(icalvalue* value, icalproperty_method v); - -/* PERIOD */ -icalvalue* icalvalue_new_period(struct icalperiodtype v); -struct icalperiodtype icalvalue_get_period(icalvalue* value); -void icalvalue_set_period(icalvalue* value, struct icalperiodtype v); - -/* RECUR */ -icalvalue* icalvalue_new_recur(struct icalrecurrencetype v); -struct icalrecurrencetype icalvalue_get_recur(icalvalue* value); -void icalvalue_set_recur(icalvalue* value, struct icalrecurrencetype v); - -/* STRING # Non-std */ -icalvalue* icalvalue_new_string(char* v); -char* icalvalue_get_string(icalvalue* value); -void icalvalue_set_string(icalvalue* value, char* v); - -/* TEXT */ -icalvalue* icalvalue_new_text(char* v); -char* icalvalue_get_text(icalvalue* value); -void icalvalue_set_text(icalvalue* value, char* v); - -/* TIME */ -icalvalue* icalvalue_new_time(struct icaltimetype v); -struct icaltimetype icalvalue_get_time(icalvalue* value); -void icalvalue_set_time(icalvalue* value, struct icaltimetype v); - -/* TRIGGER # Non-std */ -icalvalue* icalvalue_new_trigger(union icaltriggertype v); -union icaltriggertype icalvalue_get_trigger(icalvalue* value); -void icalvalue_set_trigger(icalvalue* value, union icaltriggertype v); - -/* URI */ -icalvalue* icalvalue_new_uri(char* v); -char* icalvalue_get_uri(icalvalue* value); -void icalvalue_set_uri(icalvalue* value, char* v); - -/* UTC-OFFSET */ -icalvalue* icalvalue_new_utcoffset(int v); -int icalvalue_get_utcoffset(icalvalue* value); -void icalvalue_set_utcoffset(icalvalue* value, int v); - -/* QUERY */ -icalvalue* icalvalue_new_query(char* v); -char* icalvalue_get_query(icalvalue* value); -void icalvalue_set_query(icalvalue* value, char* v); - -#endif ICALVALUE_H diff --git a/libical/src/libical/icalvcal.h b/libical/src/libical/icalvcal.h deleted file mode 100644 index 3a1098e6c2..0000000000 --- a/libical/src/libical/icalvcal.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalvcal.h - CREATOR: eric 13 January 2000 - - - $Id$ - $Locker$ - - (C) COPYRIGHT 2000 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - -======================================================================*/ - -#ifndef ICALVCAL_H -#define ICALVCAL_H - -VCalObject* icalvcal_new_vcal_from_ical(icalcomponent* component); -icalcomponent* icalvcal_new_ical_from_vcal(VCalObject* vcal); - - -#endif /* !ICALVCAL_H */ - - - diff --git a/libical/src/libical/icalversion.h.in b/libical/src/libical/icalversion.h.in deleted file mode 100644 index aaeeed6666..0000000000 --- a/libical/src/libical/icalversion.h.in +++ /dev/null @@ -1,3 +0,0 @@ - -#define ICAL_PACKAGE "@PACKAGE@" -#define ICAL_VERSION "@VERSION@" diff --git a/libical/src/libical/icalyacc.c b/libical/src/libical/icalyacc.c deleted file mode 100644 index 46de31370d..0000000000 --- a/libical/src/libical/icalyacc.c +++ /dev/null @@ -1,1706 +0,0 @@ - -/* A Bison parser, made from icalyacc.y - by GNU Bison version 1.28 */ - -#define YYBISON 1 /* Identify Bison output. */ - -#define DIGITS 257 -#define INTNUMBER 258 -#define FLOATNUMBER 259 -#define STRING 260 -#define EOL 261 -#define EQUALS 262 -#define CHARACTER 263 -#define COLON 264 -#define COMMA 265 -#define SEMICOLON 266 -#define TIMESEPERATOR 267 -#define TRUE 268 -#define FALSE 269 -#define FREQ 270 -#define BYDAY 271 -#define BYHOUR 272 -#define BYMINUTE 273 -#define BYMONTH 274 -#define BYMONTHDAY 275 -#define BYSECOND 276 -#define BYSETPOS 277 -#define BYWEEKNO 278 -#define BYYEARDAY 279 -#define DAILY 280 -#define MINUTELY 281 -#define MONTHLY 282 -#define SECONDLY 283 -#define WEEKLY 284 -#define HOURLY 285 -#define YEARLY 286 -#define INTERVAL 287 -#define COUNT 288 -#define UNTIL 289 -#define WKST 290 -#define MO 291 -#define SA 292 -#define SU 293 -#define TU 294 -#define WE 295 -#define TH 296 -#define FR 297 -#define BIT8 298 -#define ACCEPTED 299 -#define ADD 300 -#define AUDIO 301 -#define BASE64 302 -#define BINARY 303 -#define BOOLEAN 304 -#define BUSY 305 -#define BUSYTENTATIVE 306 -#define BUSYUNAVAILABLE 307 -#define CALADDRESS 308 -#define CANCEL 309 -#define CANCELLED 310 -#define CHAIR 311 -#define CHILD 312 -#define COMPLETED 313 -#define CONFIDENTIAL 314 -#define CONFIRMED 315 -#define COUNTER 316 -#define DATE 317 -#define DATETIME 318 -#define DECLINECOUNTER 319 -#define DECLINED 320 -#define DELEGATED 321 -#define DISPLAY 322 -#define DRAFT 323 -#define DURATION 324 -#define EMAIL 325 -#define END 326 -#define FINAL 327 -#define FLOAT 328 -#define FREE 329 -#define GREGORIAN 330 -#define GROUP 331 -#define INDIVIDUAL 332 -#define INPROCESS 333 -#define INTEGER 334 -#define NEEDSACTION 335 -#define NONPARTICIPANT 336 -#define OPAQUE 337 -#define OPTPARTICIPANT 338 -#define PARENT 339 -#define PERIOD 340 -#define PRIVATE 341 -#define PROCEDURE 342 -#define PUBLIC 343 -#define PUBLISH 344 -#define RECUR 345 -#define REFRESH 346 -#define REPLY 347 -#define REQPARTICIPANT 348 -#define REQUEST 349 -#define RESOURCE 350 -#define ROOM 351 -#define SIBLING 352 -#define START 353 -#define TENTATIVE 354 -#define TEXT 355 -#define THISANDFUTURE 356 -#define THISANDPRIOR 357 -#define TIME 358 -#define TRANSPAENT 359 -#define UNKNOWN 360 -#define UTCOFFSET 361 -#define XNAME 362 -#define ALTREP 363 -#define CN 364 -#define CUTYPE 365 -#define DAYLIGHT 366 -#define DIR 367 -#define ENCODING 368 -#define EVENT 369 -#define FBTYPE 370 -#define FMTTYPE 371 -#define LANGUAGE 372 -#define MEMBER 373 -#define PARTSTAT 374 -#define RANGE 375 -#define RELATED 376 -#define RELTYPE 377 -#define ROLE 378 -#define RSVP 379 -#define SENTBY 380 -#define STANDARD 381 -#define URI 382 -#define TIME_CHAR 383 -#define UTC_CHAR 384 - -#line 1 "icalyacc.y" - -/* -*- Mode: C -*- - ====================================================================== - FILE: icalitip.y - CREATOR: eric 10 June 1999 - - DESCRIPTION: - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalitip.y - - - - ================================b======================================*/ - -#include -#include /* for strdup() */ -#include /* for SHRT_MAX*/ -#include "icalparser.h" -#include "ical.h" -#include "pvl.h" -#define YYERROR_VERBOSE -#define YYDEBUG 1 - - -icalvalue *icalparser_yy_value; /* Current Value */ - -/* Globals for UTCOFFSET values */ -int utc; -int utc_b; -int utcsign; - -/* Globals for DURATION values */ -struct icaldurationtype duration; - -/* Globals for RECUR values */ -struct icalrecurrencetype recur; -short skiplist[367]; -short skippos; - -void copy_list(short* array, size_t size); -void clear_recur(); -void add_prop(icalproperty_kind); -void icalparser_fill_date(struct tm* t, char* dstr); -void icalparser_fill_time(struct tm* t, char* tstr); -void set_value_type(icalvalue_kind kind); -void set_parser_value_state(); -struct icaltimetype fill_datetime(char* d, char* t); -void ical_yy_error(char *s); /* Don't know why I need this.... */ -/*int yylex(void); /* Or this. */ - - - -/* Set the state of the lexer so it will interpret values ( iCAL - VALUEs, that is, ) correctly. */ - - -#line 75 "icalyacc.y" -typedef union { - float v_float; - int v_int; - char* v_string; - - /* Renaming hack */ -#define yymaxdepth ical_yy_maxdepth -#define yyparse ical_yy_parse -#define yylex ical_yy_lex -#define yyerror ical_yy_error -#define yylval ical_yy_lval -#define yychar ical_yy_char -#define yydebug ical_yy_debug -#define yypact ical_yy_pact -#define yyr1 ical_yy_r1 -#define yyr2 ical_yy_r2 -#define yydef ical_yy_def -#define yychk ical_yy_chk -#define yypgo ical_yy_pgo -#define yyact ical_yy_act -#define yyexca ical_yy_exca -#define yyerrflag ical_yy_errflag -#define yynerrs ical_yy_nerrs -#define yyps ical_yy_ps -#define yypv ical_yy_pv -#define yys ical_yy_s -#define yy_yys ical_yy_yys -#define yystate ical_yy_state -#define yytmp ical_yy_tmp -#define yyv ical_yy_v -#define yy_yyv ical_yy_yyv -#define yyval ical_yy_val -#define yylloc ical_yy_lloc -#define yyreds ical_yy_reds -#define yytoks ical_yy_toks -#define yylhs ical_yy_yylhs -#define yylen ical_yy_yylen -#define yydefred ical_yy_yydefred -#define yydgoto ical_yy_yydgoto -#define yydefred ical_yy_yydefred -#define yydgoto ical_yy_yydgoto -#define yysindex ical_yy_yysindex -#define yyrindex ical_yy_yyrindex -#define yygindex ical_yy_yygindex -#define yytable ical_yy_yytable -#define yycheck ical_yy_yycheck -#define yyname ical_yy_yyname -#define yyrule ical_yy_yyrule - - - -} YYSTYPE; -#ifndef YYDEBUG -#define YYDEBUG 1 -#endif - -#include - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif -#endif - - - -#define YYFINAL 135 -#define YYFLAG -32768 -#define YYNTBASE 141 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 167) - -static const short yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 137, 2, 138, 2, 140, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 136, 2, 2, - 2, 133, 2, 2, 2, 2, 134, 2, 2, 139, - 2, 2, 135, 2, 2, 2, 132, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131 -}; - -#if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, - 20, 22, 24, 26, 27, 29, 30, 32, 37, 39, - 42, 45, 48, 51, 54, 57, 61, 64, 68, 71, - 74, 75, 77, 79, 83, 87, 91, 101, 108, 112, - 116, 120, 124, 128, 132, 136, 138, 140, 142, 144, - 146, 148, 150, 152, 155, 159, 161, 165, 169, 173, - 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, - 217, 221, 225, 229, 233, 237, 241, 245, 246, 250, - 253, 255, 257, 261 -}; - -static const short yyrhs[] = { 142, - 0, 143, 0, 144, 0, 147, 0, 156, 0, 157, - 0, 164, 0, 166, 0, 1, 0, 131, 0, 14, - 0, 15, 0, 3, 0, 0, 130, 0, 0, 130, - 0, 3, 129, 3, 145, 0, 154, 0, 154, 150, - 0, 3, 132, 0, 129, 151, 0, 129, 152, 0, - 129, 153, 0, 3, 133, 0, 3, 133, 152, 0, - 3, 134, 0, 3, 134, 153, 0, 3, 135, 0, - 3, 136, 0, 0, 137, 0, 138, 0, 155, 139, - 148, 0, 155, 139, 150, 0, 155, 139, 149, 0, - 3, 129, 3, 145, 140, 3, 129, 3, 146, 0, - 3, 129, 3, 145, 140, 156, 0, 16, 8, 29, - 0, 16, 8, 27, 0, 16, 8, 31, 0, 16, - 8, 26, 0, 16, 8, 30, 0, 16, 8, 28, - 0, 16, 8, 32, 0, 39, 0, 37, 0, 40, - 0, 41, 0, 42, 0, 43, 0, 38, 0, 159, - 0, 3, 159, 0, 160, 11, 159, 0, 3, 0, - 161, 11, 3, 0, 33, 8, 3, 0, 36, 8, - 39, 0, 36, 8, 37, 0, 36, 8, 40, 0, - 36, 8, 41, 0, 36, 8, 42, 0, 36, 8, - 43, 0, 36, 8, 38, 0, 22, 8, 161, 0, - 19, 8, 161, 0, 18, 8, 161, 0, 17, 8, - 160, 0, 20, 8, 161, 0, 21, 8, 161, 0, - 25, 8, 161, 0, 24, 8, 161, 0, 23, 8, - 161, 0, 35, 8, 147, 0, 35, 8, 144, 0, - 34, 8, 3, 0, 0, 163, 12, 162, 0, 158, - 163, 0, 137, 0, 138, 0, 165, 4, 4, 0, - 165, 4, 4, 4, 0 -}; - -#endif - -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 158, 160, 161, 162, 163, 164, 165, 166, 167, 173, - 175, 178, 181, 196, 198, 201, 203, 205, 221, 222, - 224, 229, 232, 235, 239, 243, 248, 252, 257, 262, - 267, 270, 273, 277, 282, 287, 296, 317, 349, 351, - 352, 353, 354, 355, 356, 360, 362, 363, 364, 365, - 366, 367, 371, 373, 374, 377, 379, 382, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 403, 406, 410, 412, 414, - 422, 423, 425, 431 -}; -#endif - - -#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) - -static const char * const yytname[] = { "$","error","$undefined.","DIGITS", -"INTNUMBER","FLOATNUMBER","STRING","EOL","EQUALS","CHARACTER","COLON","COMMA", -"SEMICOLON","TIMESEPERATOR","TRUE","FALSE","FREQ","BYDAY","BYHOUR","BYMINUTE", -"BYMONTH","BYMONTHDAY","BYSECOND","BYSETPOS","BYWEEKNO","BYYEARDAY","DAILY", -"MINUTELY","MONTHLY","SECONDLY","WEEKLY","HOURLY","YEARLY","INTERVAL","COUNT", -"UNTIL","WKST","MO","SA","SU","TU","WE","TH","FR","BIT8","ACCEPTED","ADD","AUDIO", -"BASE64","BINARY","BOOLEAN","BUSY","BUSYTENTATIVE","BUSYUNAVAILABLE","CALADDRESS", -"CANCEL","CANCELLED","CHAIR","CHILD","COMPLETED","CONFIDENTIAL","CONFIRMED", -"COUNTER","DATE","DATETIME","DECLINECOUNTER","DECLINED","DELEGATED","DISPLAY", -"DRAFT","DURATION","EMAIL","END","FINAL","FLOAT","FREE","GREGORIAN","GROUP", -"INDIVIDUAL","INPROCESS","INTEGER","NEEDSACTION","NONPARTICIPANT","OPAQUE","OPTPARTICIPANT", -"PARENT","PERIOD","PRIVATE","PROCEDURE","PUBLIC","PUBLISH","RECUR","REFRESH", -"REPLY","REQPARTICIPANT","REQUEST","RESOURCE","ROOM","SIBLING","START","TENTATIVE", -"TEXT","THISANDFUTURE","THISANDPRIOR","TIME","TRANSPAENT","UNKNOWN","UTCOFFSET", -"XNAME","ALTREP","CN","CUTYPE","DAYLIGHT","DIR","ENCODING","EVENT","FBTYPE", -"FMTTYPE","LANGUAGE","MEMBER","PARTSTAT","RANGE","RELATED","RELTYPE","ROLE", -"RSVP","SENTBY","STANDARD","URI","TIME_CHAR","UTC_CHAR","\"unimplemented2\"", -"'W'","'H'","'M'","'S'","'D'","'+'","'-'","'P'","'/'","value","binary_value", -"boolean_value","date_value","utc_char","utc_char_b","datetime_value","dur_date", -"dur_week","dur_time","dur_hour","dur_minute","dur_second","dur_day","dur_prefix", -"duration_value","period_value","recur_start","weekday","weekday_list","recur_list", -"recur_skip","recur_skip_list","recur_value","plusminus","utcoffset_value", NULL -}; -#endif - -static const short yyr1[] = { 0, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, - 143, 143, 144, 145, 145, 146, 146, 147, 148, 148, - 149, 150, 150, 150, 151, 151, 152, 152, 153, 154, - 155, 155, 155, 156, 156, 156, 157, 157, 158, 158, - 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, - 159, 159, 160, 160, 160, 161, 161, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 163, 163, 164, - 165, 165, 166, 166 -}; - -static const short yyr2[] = { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 0, 1, 4, 1, 2, - 2, 2, 2, 2, 2, 3, 2, 3, 2, 2, - 0, 1, 1, 3, 3, 3, 9, 6, 3, 3, - 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 3, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, - 1, 1, 3, 4 -}; - -static const short yydefact[] = { 0, - 9, 13, 11, 12, 0, 10, 32, 33, 1, 2, - 3, 4, 0, 5, 6, 78, 7, 0, 8, 0, - 0, 0, 80, 0, 14, 42, 40, 44, 39, 43, - 41, 45, 0, 0, 34, 36, 35, 19, 0, 83, - 15, 18, 21, 30, 0, 22, 23, 24, 20, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 79, 84, 31, 25, 27, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 32, 33, 38, 0, 26, 0, 28, 0, - 47, 52, 46, 48, 49, 50, 51, 53, 69, 56, - 68, 67, 70, 71, 66, 74, 73, 72, 58, 77, - 13, 76, 75, 60, 65, 59, 61, 62, 63, 64, - 0, 54, 0, 0, 0, 16, 55, 57, 14, 17, - 37, 18, 0, 0, 0 -}; - -static const short yydefgoto[] = { 133, - 9, 10, 11, 42, 131, 12, 35, 36, 37, 46, - 47, 48, 38, 13, 14, 15, 16, 98, 99, 101, - 63, 23, 17, 18, 19 -}; - -static const short yypact[] = { -1, --32768, -123,-32768,-32768, 1,-32768, 3, 6,-32768,-32768, --32768,-32768, -127,-32768,-32768,-32768,-32768, 64,-32768, 66, - -10, -2, 58, 67, -58,-32768,-32768,-32768,-32768,-32768, --32768,-32768, -128, 70,-32768,-32768,-32768, -55, 28, 71, --32768, -64,-32768,-32768, -68,-32768,-32768,-32768,-32768, 69, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83,-32768,-32768, 2, 89, 90,-32768, 0, 91, - 91, 91, 91, 91, 91, 91, 91, 92, 93, 94, - -14, -51,-32768,-32768,-32768, -36,-32768, -56,-32768, -7, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 88,-32768, - 95, 95, 95, 95, 95, 95, 95, 95,-32768,-32768, - -29,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, - 98,-32768, -7, 99, 100, -26,-32768,-32768, -58,-32768, --32768,-32768, 105, 107,-32768 -}; - -static const short yypgoto[] = {-32768, --32768,-32768, 29, -21,-32768, 30,-32768,-32768, 84,-32768, - 45, 46,-32768,-32768, 47,-32768,-32768, -79,-32768, -17, --32768,-32768,-32768,-32768,-32768 -}; - - -#define YYLAST 140 - - -static const short yytable[] = { 1, - 33, 2, 90, 43, 82, 20, -81, 44, 21, -82, - 122, 22, 3, 4, 5, 26, 27, 28, 29, 30, - 31, 32, 114, 115, 116, 117, 118, 119, 120, 91, - 92, 93, 94, 95, 96, 97, 91, 92, 93, 94, - 95, 96, 97, 127, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 102, 103, 104, 105, 106, 107, 108, - 59, 60, 61, 62, 66, 67, 68, 24, 25, 39, - 40, 41, 45, 34, 64, 65, 69, 121, 68, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 86, 88, 100, 109, 110, 111, 67, 123, 125, - 126, 128, 129, 130, 134, 124, 135, 132, 112, 113, - 87, 85, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 34, 0, 0, 6, - 0, 0, 0, 0, 0, 7, 8, -31, 83, 84 -}; - -static const short yycheck[] = { 1, - 3, 3, 3, 132, 3, 129, 4, 136, 8, 4, - 90, 139, 14, 15, 16, 26, 27, 28, 29, 30, - 31, 32, 37, 38, 39, 40, 41, 42, 43, 37, - 38, 39, 40, 41, 42, 43, 37, 38, 39, 40, - 41, 42, 43, 123, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 71, 72, 73, 74, 75, 76, 77, - 33, 34, 35, 36, 133, 134, 135, 4, 3, 12, - 4, 130, 3, 129, 4, 140, 8, 129, 135, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 3, 3, 3, 3, 3, 3, 134, 11, 129, - 3, 3, 3, 130, 0, 11, 0, 129, 80, 80, - 66, 65, 67, -1, -1, -1, -1, -1, -1, -1, - -1, 38, -1, -1, -1, -1, 129, -1, -1, 131, - -1, -1, -1, -1, -1, 137, 138, 139, 137, 138 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/lib/bison.simple" -/* This file comes from bison-1.28. */ - -/* Skeleton output parser for bison, - Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -#ifndef YYSTACK_USE_ALLOCA -#ifdef alloca -#define YYSTACK_USE_ALLOCA -#else /* alloca not defined */ -#ifdef __GNUC__ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) -#define YYSTACK_USE_ALLOCA -#include -#else /* not sparc */ -/* We think this test detects Watcom and Microsoft C. */ -/* This used to test MSDOS, but that is a bad idea - since that symbol is in the user namespace. */ -#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) -#if 0 /* No need for malloc.h, which pollutes the namespace; - instead, just don't use alloca. */ -#include -#endif -#else /* not MSDOS, or __TURBOC__ */ -#if defined(_AIX) -/* I don't know what this was needed for, but it pollutes the namespace. - So I turned it off. rms, 2 May 1997. */ -/* #include */ - #pragma alloca -#define YYSTACK_USE_ALLOCA -#else /* not MSDOS, or __TURBOC__, or _AIX */ -#if 0 -#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, - and on HPUX 10. Eventually we can turn this on. */ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#endif /* __hpux */ -#endif -#endif /* not _AIX */ -#endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc */ -#endif /* not GNU C */ -#endif /* alloca not defined */ -#endif /* YYSTACK_USE_ALLOCA not defined */ - -#ifdef YYSTACK_USE_ALLOCA -#define YYSTACK_ALLOC alloca -#else -#define YYSTACK_ALLOC malloc -#endif - -/* Note: there must be only one dollar sign in this file. - It is replaced by the list of actions, each action - as one case of the switch. */ - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. - This remains here temporarily to ease the - transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(token, value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { yychar = (token), yylval = (value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -#ifndef YYPURE -#define YYLEX yylex() -#endif - -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) -#endif -#else /* not YYLSP_NEEDED */ -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval) -#endif -#endif /* not YYLSP_NEEDED */ -#endif - -/* If nonreentrant, generate the variables here */ - -#ifndef YYPURE - -int yychar; /* the lookahead symbol */ -YYSTYPE yylval; /* the semantic value of the */ - /* lookahead symbol */ - -#ifdef YYLSP_NEEDED -YYLTYPE yylloc; /* location data for the lookahead */ - /* symbol */ -#endif - -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ - -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ -#endif - -/* YYINITDEPTH indicates the initial size of the parser's stacks */ - -#ifndef YYINITDEPTH -#define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH is the maximum size the stacks can grow to - (effective only if the built-in stack extension method is used). */ - -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -#define YYMAXDEPTH 10000 -#endif - -/* Define __yy_memcpy. Note that the size argument - should be passed with type unsigned int, because that is what the non-GCC - definitions require. With GCC, __builtin_memcpy takes an arg - of type size_t, but it can handle unsigned int. */ - -#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ -#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) -#else /* not GNU C or C++ */ -#ifndef __cplusplus - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (to, from, count) - char *to; - char *from; - unsigned int count; -{ - register char *f = from; - register char *t = to; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#else /* __cplusplus */ - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (char *to, char *from, unsigned int count) -{ - register char *t = to; - register char *f = from; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#endif -#endif - -#line 217 "/usr/lib/bison.simple" - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -#ifdef __cplusplus -#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -#define YYPARSE_PARAM_DECL -#else /* not __cplusplus */ -#define YYPARSE_PARAM_ARG YYPARSE_PARAM -#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -#endif /* not __cplusplus */ -#else /* not YYPARSE_PARAM */ -#define YYPARSE_PARAM_ARG -#define YYPARSE_PARAM_DECL -#endif /* not YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -#ifdef YYPARSE_PARAM -int yyparse (void *); -#else -int yyparse (void); -#endif -#endif - -int -yyparse(YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - register int yystate; - register int yyn; - register short *yyssp; - register YYSTYPE *yyvsp; - int yyerrstatus; /* number of tokens to shift before error messages enabled */ - int yychar1 = 0; /* lookahead token as an internal (translated) token number */ - - short yyssa[YYINITDEPTH]; /* the state stack */ - YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ - - short *yyss = yyssa; /* refer to the stacks thru separate pointers */ - YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ - -#ifdef YYLSP_NEEDED - YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - -#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -#define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; - -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; -#endif -#endif - - YYSTYPE yyval; /* the variable used to return */ - /* semantic values from the action */ - /* routines */ - - int yylen; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss - 1; - yyvsp = yyvs; -#ifdef YYLSP_NEEDED - yylsp = yyls; -#endif - -/* Push a new state, which is found in yystate . */ -/* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. */ -yynewstate: - - *++yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Give user a chance to reallocate the stack */ - /* Use copies of these so that the &'s don't force the real ones into memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; -#ifdef YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; -#endif - - /* Get the current used size of the three stacks, in elements. */ - int size = yyssp - yyss + 1; - -#ifdef yyoverflow - /* Each stack pointer address is followed by the size of - the data in use in that stack, in bytes. */ -#ifdef YYLSP_NEEDED - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yyls1, size * sizeof (*yylsp), - &yystacksize); -#else - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yystacksize); -#endif - - yyss = yyss1; yyvs = yyvs1; -#ifdef YYLSP_NEEDED - yyls = yyls1; -#endif -#else /* no yyoverflow */ - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - { - yyerror("parser stack overflow"); - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 2; - } - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; -#ifndef YYSTACK_USE_ALLOCA - yyfree_stacks = 1; -#endif - yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss, (char *)yyss1, - size * (unsigned int) sizeof (*yyssp)); - yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs, (char *)yyvs1, - size * (unsigned int) sizeof (*yyvsp)); -#ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls, (char *)yyls1, - size * (unsigned int) sizeof (*yylsp)); -#endif -#endif /* no yyoverflow */ - - yyssp = yyss + size - 1; - yyvsp = yyvs + size - 1; -#ifdef YYLSP_NEEDED - yylsp = yyls + size - 1; -#endif - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Stack size increased to %d\n", yystacksize); -#endif - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Entering state %d\n", yystate); -#endif - - goto yybackup; - yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Reading a token: "); -#endif - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Now at end of input.\n"); -#endif - } - else - { - yychar1 = YYTRANSLATE(yychar); - -#if YYDEBUG != 0 - if (yydebug) - { - fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise meaning - of a token, for further debugging info. */ -#ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -#endif - fprintf (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; - - yystate = yyn; - goto yynewstate; - -/* Do the default action for the current state. */ -yydefault: - - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - -/* Do a reduction. yyn is the number of a rule to reduce with. */ -yyreduce: - yylen = yyr2[yyn]; - if (yylen > 0) - yyval = yyvsp[1-yylen]; /* implement default value of the action */ - -#if YYDEBUG != 0 - if (yydebug) - { - int i; - - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) - fprintf (stderr, "%s ", yytname[yyrhs[i]]); - fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - - switch (yyn) { - -case 9: -#line 167 "icalyacc.y" -{ - icalparser_yy_value = 0; - icalparser_clear_flex_input(); - yyclearin; - ; - break;} -case 11: -#line 177 "icalyacc.y" -{ icalparser_yy_value = icalvalue_new_boolean(1); ; - break;} -case 12: -#line 179 "icalyacc.y" -{ icalparser_yy_value = icalvalue_new_boolean(0); ; - break;} -case 13: -#line 182 "icalyacc.y" -{ - struct icaltimetype stm; - - stm = fill_datetime(yyvsp[0].v_string,0); - - stm.hour = -1; - stm.minute = -1; - stm.second = -1; - stm.is_utc = 0; - stm.is_date = 1; - - icalparser_yy_value = icalvalue_new_date(stm); - ; - break;} -case 14: -#line 197 "icalyacc.y" -{utc = 0;; - break;} -case 15: -#line 198 "icalyacc.y" -{utc = 1;; - break;} -case 16: -#line 202 "icalyacc.y" -{utc_b = 0;; - break;} -case 17: -#line 203 "icalyacc.y" -{utc_b = 1;; - break;} -case 18: -#line 207 "icalyacc.y" -{ - struct icaltimetype stm; - stm = fill_datetime(yyvsp[-3].v_string, yyvsp[-1].v_string); - stm.is_utc = utc; - stm.is_date = 0; - - icalparser_yy_value = - icalvalue_new_datetime(stm); - ; - break;} -case 21: -#line 225 "icalyacc.y" -{ - duration.weeks = atoi(yyvsp[-1].v_string); - ; - break;} -case 22: -#line 230 "icalyacc.y" -{ - ; - break;} -case 23: -#line 233 "icalyacc.y" -{ - ; - break;} -case 24: -#line 236 "icalyacc.y" -{ - ; - break;} -case 25: -#line 240 "icalyacc.y" -{ - duration.hours = atoi(yyvsp[-1].v_string); - ; - break;} -case 26: -#line 244 "icalyacc.y" -{ - duration.hours = atoi(yyvsp[-2].v_string); - ; - break;} -case 27: -#line 249 "icalyacc.y" -{ - duration.minutes = atoi(yyvsp[-1].v_string); - ; - break;} -case 28: -#line 253 "icalyacc.y" -{ - duration.minutes = atoi(yyvsp[-2].v_string); - ; - break;} -case 29: -#line 258 "icalyacc.y" -{ - duration.seconds = atoi(yyvsp[-1].v_string); - ; - break;} -case 30: -#line 263 "icalyacc.y" -{ - duration.days = atoi(yyvsp[-1].v_string); - ; - break;} -case 31: -#line 268 "icalyacc.y" -{ - ; - break;} -case 32: -#line 271 "icalyacc.y" -{ - ; - break;} -case 33: -#line 274 "icalyacc.y" -{ - ; - break;} -case 34: -#line 278 "icalyacc.y" -{ - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - ; - break;} -case 35: -#line 283 "icalyacc.y" -{ - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - ; - break;} -case 36: -#line 288 "icalyacc.y" -{ - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - ; - break;} -case 37: -#line 297 "icalyacc.y" -{ - struct icalperiodtype p; - - p.start = fill_datetime(yyvsp[-8].v_string,yyvsp[-6].v_string); - p.start.is_utc = utc; - p.start.is_date = 0; - - - p.end = fill_datetime(yyvsp[-3].v_string,yyvsp[-1].v_string); - p.end.is_utc = utc_b; - p.end.is_date = 0; - - p.duration.days = -1; - p.duration.weeks = -1; - p.duration.hours = -1; - p.duration.minutes = -1; - p.duration.seconds = -1; - - icalparser_yy_value = icalvalue_new_period(p); - ; - break;} -case 38: -#line 318 "icalyacc.y" -{ - struct icalperiodtype p; - - p.start = fill_datetime(yyvsp[-5].v_string,yyvsp[-3].v_string); - p.start.is_utc = utc; - p.start.is_date = 0; - - p.end.year = -1; - p.end.month = -1; - p.end.day = -1; - p.end.hour = -1; - p.end.minute = -1; - p.end.second = -1; - - /* The duration_value rule setes the global 'duration' - variable, but it also creates a new value in - icalparser_yy_value. So, free that, then copy - 'duration' into the icalperiodtype struct. */ - - p.duration = icalvalue_get_duration(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); - icalparser_yy_value = 0; - - icalparser_yy_value = icalvalue_new_period(p); - - ; - break;} -case 39: -#line 350 "icalyacc.y" -{clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;; - break;} -case 40: -#line 351 "icalyacc.y" -{clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;; - break;} -case 41: -#line 352 "icalyacc.y" -{clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;; - break;} -case 42: -#line 353 "icalyacc.y" -{clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;; - break;} -case 43: -#line 354 "icalyacc.y" -{clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;; - break;} -case 44: -#line 355 "icalyacc.y" -{clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;; - break;} -case 45: -#line 356 "icalyacc.y" -{clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;; - break;} -case 46: -#line 361 "icalyacc.y" -{ skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;; - break;} -case 47: -#line 362 "icalyacc.y" -{ skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 48: -#line 363 "icalyacc.y" -{ skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 49: -#line 364 "icalyacc.y" -{ skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 50: -#line 365 "icalyacc.y" -{ skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 51: -#line 366 "icalyacc.y" -{ skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 52: -#line 367 "icalyacc.y" -{ skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;; - break;} -case 54: -#line 373 "icalyacc.y" -{ ; - break;} -case 56: -#line 378 "icalyacc.y" -{ skiplist[skippos] = atoi(yyvsp[0].v_string); skippos++;; - break;} -case 57: -#line 379 "icalyacc.y" -{ skiplist[skippos] = atoi(yyvsp[0].v_string); if (skippos<367) skippos++;; - break;} -case 58: -#line 383 "icalyacc.y" -{recur.interval = atoi(yyvsp[0].v_string);; - break;} -case 59: -#line 384 "icalyacc.y" -{recur.week_start = ICAL_SUNDAY_WEEKDAY;; - break;} -case 60: -#line 385 "icalyacc.y" -{recur.week_start = ICAL_MONDAY_WEEKDAY;; - break;} -case 61: -#line 386 "icalyacc.y" -{recur.week_start = ICAL_TUESDAY_WEEKDAY;; - break;} -case 62: -#line 387 "icalyacc.y" -{recur.week_start = ICAL_WEDNESDAY_WEEKDAY;; - break;} -case 63: -#line 388 "icalyacc.y" -{recur.week_start = ICAL_THURSDAY_WEEKDAY;; - break;} -case 64: -#line 389 "icalyacc.y" -{recur.week_start = ICAL_FRIDAY_WEEKDAY;; - break;} -case 65: -#line 390 "icalyacc.y" -{recur.week_start = ICAL_SATURDAY_WEEKDAY;; - break;} -case 66: -#line 391 "icalyacc.y" -{copy_list(recur.by_second,60);; - break;} -case 67: -#line 392 "icalyacc.y" -{copy_list(recur.by_minute,60);; - break;} -case 68: -#line 393 "icalyacc.y" -{copy_list(recur.by_hour,24);; - break;} -case 69: -#line 394 "icalyacc.y" -{copy_list(recur.by_day,7);; - break;} -case 70: -#line 395 "icalyacc.y" -{copy_list(recur.by_month,12);; - break;} -case 71: -#line 396 "icalyacc.y" -{copy_list(recur.by_month_day,31);; - break;} -case 72: -#line 397 "icalyacc.y" -{copy_list(recur.by_year_day,366);; - break;} -case 73: -#line 398 "icalyacc.y" -{copy_list(recur.by_week_no,53);; - break;} -case 74: -#line 399 "icalyacc.y" -{copy_list(recur.by_set_pos,366);; - break;} -case 75: -#line 401 "icalyacc.y" -{ recur.until = icalvalue_get_datetime(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;; - break;} -case 76: -#line 404 "icalyacc.y" -{ recur.until = icalvalue_get_date(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;; - break;} -case 77: -#line 407 "icalyacc.y" -{ recur.count = atoi(yyvsp[0].v_string); ; - break;} -case 80: -#line 416 "icalyacc.y" -{ icalparser_yy_value = icalvalue_new_recur(recur); ; - break;} -case 81: -#line 422 "icalyacc.y" -{ utcsign = 1; ; - break;} -case 82: -#line 423 "icalyacc.y" -{ utcsign = -1; ; - break;} -case 83: -#line 427 "icalyacc.y" -{ - icalparser_yy_value = icalvalue_new_utcoffset( utcsign * (yyvsp[-1].v_int*3600) + (yyvsp[0].v_int*60) ); - ; - break;} -case 84: -#line 432 "icalyacc.y" -{ - icalparser_yy_value = icalvalue_new_utcoffset(utcsign * (yyvsp[-2].v_int*3600) + (yyvsp[-1].v_int*60) +(yyvsp[0].v_int)); - ; - break;} -} - /* the action file gets copied in in place of this dollarsign */ -#line 543 "/usr/lib/bison.simple" - - yyvsp -= yylen; - yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; - -#ifdef YYLSP_NEEDED - yylsp++; - if (yylen == 0) - { - yylsp->first_line = yylloc.first_line; - yylsp->first_column = yylloc.first_column; - yylsp->last_line = (yylsp-1)->last_line; - yylsp->last_column = (yylsp-1)->last_column; - yylsp->text = 0; - } - else - { - yylsp->last_line = (yylsp+yylen-1)->last_line; - yylsp->last_column = (yylsp+yylen-1)->last_column; - } -#endif - - /* Now "shift" the result of the reduction. - Determine what state that goes to, - based on the state we popped back to - and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - -yyerrlab: /* here on detecting error */ - - if (! yyerrstatus) - /* If not already recovering from an error, report this error. */ - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - int size = 0; - char *msg; - int x, count; - - count = 0; - /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - size += strlen(yytname[x]) + 15, count++; - msg = (char *) malloc(size + 15); - if (msg != 0) - { - strcpy(msg, "parse error"); - - if (count < 5) - { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; - } - } - yyerror(msg); - free(msg); - } - else - yyerror ("parse error; also virtual memory exceeded"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror("parse error"); - } - - goto yyerrlab1; -yyerrlab1: /* here on error raised explicitly by an action */ - - if (yyerrstatus == 3) - { - /* if just tried and failed to reuse lookahead token after an error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif - - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - -yyerrdefault: /* current state does not do anything special for the error token. */ - -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ - if (yyn) goto yydefault; -#endif - -yyerrpop: /* pop the current state because it cannot handle the error token */ - - if (yyssp == yyss) YYABORT; - yyvsp--; - yystate = *--yyssp; -#ifdef YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - -yyerrhandle: - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting error token, "); -#endif - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; - - yyacceptlab: - /* YYACCEPT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 0; - - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 1; -} -#line 438 "icalyacc.y" - - - -void clear_recur() -{ - memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; - - icalrecurrencetype_clear(&recur); -} - -void copy_list(short* array, size_t size) -{ - memcpy(array, skiplist, size*sizeof(short)); - memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; -} - -struct icaltimetype fill_datetime(char* datestr, char* timestr) -{ - struct icaltimetype stm; - - memset(&stm,0,sizeof(stm)); - - if (datestr != 0){ - sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), - &(stm.day)); - } - - if (timestr != 0){ - sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), - &(stm.second)); - } - - return stm; - -} - -void yyerror(char* s) -{ - /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ -} - diff --git a/libical/src/libical/icalyacc.y b/libical/src/libical/icalyacc.y deleted file mode 100644 index 1fe2a737e9..0000000000 --- a/libical/src/libical/icalyacc.y +++ /dev/null @@ -1,480 +0,0 @@ -%{ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalitip.y - CREATOR: eric 10 June 1999 - - DESCRIPTION: - - $Id: icalyacc.y,v 1.4 2000/06/06 22:48:09 alves Exp $ - $Locker: $ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalitip.y - - - - ================================b======================================*/ - -#include -#include /* for strdup() */ -#include /* for SHRT_MAX*/ -#include "icalparser.h" -#include "ical.h" -#include "pvl.h" -#define YYERROR_VERBOSE -#define YYDEBUG 1 - - -icalvalue *icalparser_yy_value; /* Current Value */ - -/* Globals for UTCOFFSET values */ -int utc; -int utc_b; -int utcsign; - -/* Globals for DURATION values */ -struct icaldurationtype duration; - -/* Globals for RECUR values */ -struct icalrecurrencetype recur; -short skiplist[367]; -short skippos; - -void copy_list(short* array, size_t size); -void clear_recur(); -void add_prop(icalproperty_kind); -void icalparser_fill_date(struct tm* t, char* dstr); -void icalparser_fill_time(struct tm* t, char* tstr); -void set_value_type(icalvalue_kind kind); -void set_parser_value_state(); -struct icaltimetype fill_datetime(char* d, char* t); -void ical_yy_error(char *s); /* Don't know why I need this.... */ -/*int yylex(void); /* Or this. */ - - - -/* Set the state of the lexer so it will interpret values ( iCAL - VALUEs, that is, ) correctly. */ - -%} - -%union { - float v_float; - int v_int; - char* v_string; - - /* Renaming hack */ -#define yymaxdepth ical_yy_maxdepth -#define yyparse ical_yy_parse -#define yylex ical_yy_lex -#define yyerror ical_yy_error -#define yylval ical_yy_lval -#define yychar ical_yy_char -#define yydebug ical_yy_debug -#define yypact ical_yy_pact -#define yyr1 ical_yy_r1 -#define yyr2 ical_yy_r2 -#define yydef ical_yy_def -#define yychk ical_yy_chk -#define yypgo ical_yy_pgo -#define yyact ical_yy_act -#define yyexca ical_yy_exca -#define yyerrflag ical_yy_errflag -#define yynerrs ical_yy_nerrs -#define yyps ical_yy_ps -#define yypv ical_yy_pv -#define yys ical_yy_s -#define yy_yys ical_yy_yys -#define yystate ical_yy_state -#define yytmp ical_yy_tmp -#define yyv ical_yy_v -#define yy_yyv ical_yy_yyv -#define yyval ical_yy_val -#define yylloc ical_yy_lloc -#define yyreds ical_yy_reds -#define yytoks ical_yy_toks -#define yylhs ical_yy_yylhs -#define yylen ical_yy_yylen -#define yydefred ical_yy_yydefred -#define yydgoto ical_yy_yydgoto -#define yydefred ical_yy_yydefred -#define yydgoto ical_yy_yydgoto -#define yysindex ical_yy_yysindex -#define yyrindex ical_yy_yyrindex -#define yygindex ical_yy_yygindex -#define yytable ical_yy_yytable -#define yycheck ical_yy_yycheck -#define yyname ical_yy_yyname -#define yyrule ical_yy_yyrule - - - -} - -%token DIGITS -%token INTNUMBER -%token FLOATNUMBER -%token STRING -%token EOL EQUALS CHARACTER COLON COMMA SEMICOLON TIMESEPERATOR - -%token TRUE FALSE - -%token FREQ BYDAY BYHOUR BYMINUTE BYMONTH BYMONTHDAY BYSECOND BYSETPOS BYWEEKNO -%token BYYEARDAY DAILY MINUTELY MONTHLY SECONDLY WEEKLY HOURLY YEARLY -%token INTERVAL COUNT UNTIL WKST MO SA SU TU WE TH FR - -%token BIT8 ACCEPTED ADD AUDIO BASE64 BINARY BOOLEAN BUSY BUSYTENTATIVE -%token BUSYUNAVAILABLE CALADDRESS CANCEL CANCELLED CHAIR CHILD COMPLETED -%token CONFIDENTIAL CONFIRMED COUNTER DATE DATETIME DECLINECOUNTER DECLINED -%token DELEGATED DISPLAY DRAFT DURATION EMAIL END FINAL FLOAT FREE GREGORIAN -%token GROUP INDIVIDUAL INPROCESS INTEGER NEEDSACTION NONPARTICIPANT -%token OPAQUE OPTPARTICIPANT PARENT PERIOD PRIVATE PROCEDURE PUBLIC PUBLISH -%token RECUR REFRESH REPLY REQPARTICIPANT REQUEST RESOURCE ROOM SIBLING -%token START TENTATIVE TEXT THISANDFUTURE THISANDPRIOR TIME TRANSPAENT -%token UNKNOWN UTCOFFSET XNAME - -%token ALTREP CN CUTYPE DAYLIGHT DIR ENCODING EVENT FBTYPE FMTTYPE LANGUAGE -%token MEMBER PARTSTAT RANGE RELATED RELTYPE ROLE RSVP SENTBY STANDARD URI - -%token TIME_CHAR UTC_CHAR - - -%% - -value: - binary_value - | boolean_value - | date_value - | datetime_value - | duration_value - | period_value - | recur_value - | utcoffset_value - | error { - icalparser_yy_value = 0; - icalparser_clear_flex_input(); - yyclearin; - } - -binary_value: "unimplemented2" - -boolean_value: - TRUE - { icalparser_yy_value = icalvalue_new_boolean(1); } - | FALSE - { icalparser_yy_value = icalvalue_new_boolean(0); } - -date_value: DIGITS - { - struct icaltimetype stm; - - stm = fill_datetime($1,0); - - stm.hour = -1; - stm.minute = -1; - stm.second = -1; - stm.is_utc = 0; - stm.is_date = 1; - - icalparser_yy_value = icalvalue_new_date(stm); - } - -utc_char: - /*empty*/ {utc = 0;} - | UTC_CHAR {utc = 1;} - -/* This is used in the period_value, where there may be two utc characters per rule. */ -utc_char_b: - /*empty*/ {utc_b = 0;} - | UTC_CHAR {utc_b = 1;} - -datetime_value: - DIGITS TIME_CHAR DIGITS utc_char - { - struct icaltimetype stm; - stm = fill_datetime($1, $3); - stm.is_utc = utc; - stm.is_date = 0; - - icalparser_yy_value = - icalvalue_new_datetime(stm); - } - - -/* Duration */ - - -dur_date: dur_day - | dur_day dur_time - -dur_week: DIGITS 'W' - { - duration.weeks = atoi($1); - } - -dur_time: TIME_CHAR dur_hour - { - } - | TIME_CHAR dur_minute - { - } - | TIME_CHAR dur_second - { - } - -dur_hour: DIGITS 'H' - { - duration.hours = atoi($1); - } - | DIGITS 'H' dur_minute - { - duration.hours = atoi($1); - } - -dur_minute: DIGITS 'M' - { - duration.minutes = atoi($1); - } - | DIGITS 'M' dur_second - { - duration.minutes = atoi($1); - } - -dur_second: DIGITS 'S' - { - duration.seconds = atoi($1); - } - -dur_day: DIGITS 'D' - { - duration.days = atoi($1); - } - -dur_prefix: /* empty */ - { - } - | '+' - { - } - | '-' - { - } - -duration_value: dur_prefix 'P' dur_date - { - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - } - | dur_prefix 'P' dur_time - { - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - } - | dur_prefix 'P' dur_week - { - icalparser_yy_value = icalvalue_new_duration(duration); - memset(&duration,0, sizeof(duration)); - } - - -/* Period */ - -period_value: DIGITS TIME_CHAR DIGITS utc_char '/' DIGITS TIME_CHAR DIGITS utc_char_b - { - struct icalperiodtype p; - - p.start = fill_datetime($1,$3); - p.start.is_utc = utc; - p.start.is_date = 0; - - - p.end = fill_datetime($6,$8); - p.end.is_utc = utc_b; - p.end.is_date = 0; - - p.duration.days = -1; - p.duration.weeks = -1; - p.duration.hours = -1; - p.duration.minutes = -1; - p.duration.seconds = -1; - - icalparser_yy_value = icalvalue_new_period(p); - } - | DIGITS TIME_CHAR DIGITS utc_char '/' duration_value - { - struct icalperiodtype p; - - p.start = fill_datetime($1,$3); - p.start.is_utc = utc; - p.start.is_date = 0; - - p.end.year = -1; - p.end.month = -1; - p.end.day = -1; - p.end.hour = -1; - p.end.minute = -1; - p.end.second = -1; - - /* The duration_value rule setes the global 'duration' - variable, but it also creates a new value in - icalparser_yy_value. So, free that, then copy - 'duration' into the icalperiodtype struct. */ - - p.duration = icalvalue_get_duration(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); - icalparser_yy_value = 0; - - icalparser_yy_value = icalvalue_new_period(p); - - } - - - -/* Recur */ - -recur_start: - FREQ EQUALS SECONDLY {clear_recur();recur.freq = ICAL_SECONDLY_RECURRENCE;} - | FREQ EQUALS MINUTELY {clear_recur();recur.freq = ICAL_MINUTELY_RECURRENCE;} - | FREQ EQUALS HOURLY {clear_recur();recur.freq = ICAL_HOURLY_RECURRENCE;} - | FREQ EQUALS DAILY {clear_recur();recur.freq = ICAL_DAILY_RECURRENCE;} - | FREQ EQUALS WEEKLY {clear_recur();recur.freq = ICAL_WEEKLY_RECURRENCE;} - | FREQ EQUALS MONTHLY {clear_recur();recur.freq = ICAL_MONTHLY_RECURRENCE;} - | FREQ EQUALS YEARLY {clear_recur();recur.freq = ICAL_YEARLY_RECURRENCE;} - ; - - -weekday: - SU { skiplist[skippos]=ICAL_SUNDAY_WEEKDAY; if( skippos<8) skippos++;} - | MO { skiplist[skippos]=ICAL_MONDAY_WEEKDAY;if( skippos<8) skippos++;} - | TU { skiplist[skippos]=ICAL_TUESDAY_WEEKDAY;if( skippos<8) skippos++;} - | WE { skiplist[skippos]=ICAL_WEDNESDAY_WEEKDAY;if( skippos<8) skippos++;} - | TH { skiplist[skippos]=ICAL_THURSDAY_WEEKDAY;if( skippos<8) skippos++;} - | FR { skiplist[skippos]=ICAL_FRIDAY_WEEKDAY;if( skippos<8) skippos++;} - | SA { skiplist[skippos]=ICAL_SATURDAY_WEEKDAY;if( skippos<8) skippos++;} - ; - - -weekday_list: - weekday - | DIGITS weekday { } /* HACK Incorectly handles int in BYDAY */ - | weekday_list COMMA weekday - - -recur_list: - DIGITS { skiplist[skippos] = atoi($1); skippos++;} - | recur_list COMMA DIGITS { skiplist[skippos] = atoi($3); if (skippos<367) skippos++;} - ; - -recur_skip: - INTERVAL EQUALS DIGITS {recur.interval = atoi($3);} - | WKST EQUALS SU {recur.week_start = ICAL_SUNDAY_WEEKDAY;} - | WKST EQUALS MO {recur.week_start = ICAL_MONDAY_WEEKDAY;} - | WKST EQUALS TU {recur.week_start = ICAL_TUESDAY_WEEKDAY;} - | WKST EQUALS WE {recur.week_start = ICAL_WEDNESDAY_WEEKDAY;} - | WKST EQUALS TH {recur.week_start = ICAL_THURSDAY_WEEKDAY;} - | WKST EQUALS FR {recur.week_start = ICAL_FRIDAY_WEEKDAY;} - | WKST EQUALS SA {recur.week_start = ICAL_SATURDAY_WEEKDAY;} - | BYSECOND EQUALS recur_list{copy_list(recur.by_second,60);} - | BYMINUTE EQUALS recur_list{copy_list(recur.by_minute,60);} - | BYHOUR EQUALS recur_list{copy_list(recur.by_hour,24);} - | BYDAY EQUALS weekday_list{copy_list(recur.by_day,7);} - | BYMONTH EQUALS recur_list{copy_list(recur.by_month,12);} - | BYMONTHDAY EQUALS recur_list{copy_list(recur.by_month_day,31);} - | BYYEARDAY EQUALS recur_list{copy_list(recur.by_year_day,366);} - | BYWEEKNO EQUALS recur_list{copy_list(recur.by_week_no,53);} - | BYSETPOS EQUALS recur_list{copy_list(recur.by_set_pos,366);} - | UNTIL EQUALS datetime_value - { recur.until = icalvalue_get_datetime(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} - | UNTIL EQUALS date_value - { recur.until = icalvalue_get_date(icalparser_yy_value); - icalvalue_free(icalparser_yy_value); icalparser_yy_value=0;} - | COUNT EQUALS DIGITS - { recur.count = atoi($3); } - ; - -recur_skip_list: - /* empty */ - | recur_skip_list SEMICOLON recur_skip - -recur_value: - recur_start recur_skip_list - { icalparser_yy_value = icalvalue_new_recur(recur); } - - - -/* UTC Offset */ - -plusminus: '+' { utcsign = 1; } - | '-' { utcsign = -1; } - -utcoffset_value: - plusminus INTNUMBER INTNUMBER - { - icalparser_yy_value = icalvalue_new_utcoffset( utcsign * ($2*3600) + ($3*60) ); - } - - | plusminus INTNUMBER INTNUMBER INTNUMBER - { - icalparser_yy_value = icalvalue_new_utcoffset(utcsign * ($2*3600) + ($3*60) +($4)); - } - - - -%% - - -void clear_recur() -{ - memset(&skiplist, ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; - - icalrecurrencetype_clear(&recur); -} - -void copy_list(short* array, size_t size) -{ - memcpy(array, skiplist, size*sizeof(short)); - memset(&skiplist,ICAL_RECURRENCE_ARRAY_MAX_BYTE, sizeof(skiplist)); - skippos = 0; -} - -struct icaltimetype fill_datetime(char* datestr, char* timestr) -{ - struct icaltimetype stm; - - memset(&stm,0,sizeof(stm)); - - if (datestr != 0){ - sscanf(datestr,"%4d%2d%2d",&(stm.year), &(stm.month), - &(stm.day)); - } - - if (timestr != 0){ - sscanf(timestr,"%2d%2d%2d", &(stm.hour), &(stm.minute), - &(stm.second)); - } - - return stm; - -} - -void yyerror(char* s) -{ - /*fprintf(stderr,"Parse error \'%s\'\n", s);*/ -} - diff --git a/libical/src/libical/locking.c b/libical/src/libical/locking.c deleted file mode 100644 index 0376bc2bec..0000000000 --- a/libical/src/libical/locking.c +++ /dev/null @@ -1,143 +0,0 @@ - -/* - I Stole this from: - http://www.cis.temple.edu/~ingargio/old/cis307s96/readings/rwlockexample.html - - CIS 307: An example using Read/Write File Locks - [fcntl.h], [fcntl.c], [fcntlmain.c] - -In Stevens "Advanced Programming in the Unix Environment" we see ways to use -the Unix service fcntl to lock portions of a file for reading and writing in -the manner stated in the Reader and Writer problem [any number of readers at -a time, but writers must operate alone]. Here we have three files that adapt -and use the code from Stevens: - -*fcntl.h: Specification of the locking functions. -*fcntl.c: Implementation of the locking functions. -*fcntlmain.c: Driver that does a simple test of the locking functions. - -WARNING: A file lock request which is blocked can be interrupted by a -signal. In this case the lock operation returns EINTR. Thus we may think we -got a lock when we really don't. A solution is to block signals when -locking. Another solution is to test the value returned by the lock -operation and relock if the value is EINTR. Another solution, which we adopt -here, is to do nothing about it. - -/* fcntl.c -- Defines mutexes in terms of read/write locks on files. - * (code is mostly from Stevens: Advanced Programming in the - * Unix environment. See from page 367 on. - * filerwlock, filerwlockCreate, filerwlockDelete, - * filerwreadlock, filerwlongreadlock, filerwlongunlock, - * filerwlockUnlock - */ - -#include -#include -#include -#include - -int lock_reg(int, int, int, off_t, int, off_t); - -#define read_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len) - -#define readw_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len) - -#define write_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len) - -#define writew_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len) - -#define un_lock(fd, offset, whence, len) \ - lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len) - -pid_t lock_test(int, int , off_t , int , off_t ); - -#define is_readlock(fd, offset, whence, len) \ - lock_test(fd, F_RDLCK, offset, whence, len) - -#define is_writelock(fd, offset, whence, len) \ - lock_test(fd, F_WRLCK, offset, whence, len) - -int lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len) -{ - struct flock lock; - lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */ - lock.l_start = offset; /* byte offset relative to l_whence */ - lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ - lock.l_len = len; /* #bytes (0 means to EOF) */ - return (fcntl(fd, cmd, &lock)); -} - -pid_t lock_test(int fd, int type, off_t offset, int whence, off_t len) -{ - struct flock lock; - lock.l_type = type; /* F_RDLCK or F_WRLCK */ - lock.l_start = offset; /* byte offset relative to l_whence */ - lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */ - lock.l_len = len; /* #bytes (0 means to EOF) */ - if (fcntl(fd,F_GETLK,&lock) < 0){ - perror("fcntl"); exit(1);} - if (lock.l_type == F_UNLCK) - return (0); /* false, region is not locked by another process */ - return (lock.l_pid); /* true, return pid of lock owner */ -} - -typedef struct { - int fd; - int n;} filerwlock; - -/* Create N read/write locks and returns the id of this cluster of locks. */ -filerwlock * filerwlockCreate(char *filename, int n) { - filerwlock *fl = (filerwlock *)malloc(sizeof(filerwlock)); - if (((fl->fd) = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IWUSR)) < 0) { - perror("open"); - exit(1);} - fl->n = n; - return fl; - } - -/* Delete the cluster of read/write locks associated with fl. */ -int filerwlockDelete(filerwlock *fl) { - if (close(fl->fd) < 0) { - perror("close"); - exit(1);} - return free(fl); - } - -/* Given the read/write lock cluster fl, lock its ith element */ -int filerwreadlock(filerwlock *fl, int i) { - if ((i < 0) | (i >= fl->n)) { - printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); - exit(0);} - readw_lock(fl->fd, i, SEEK_SET, 1); - } - -int filerwwritelock(filerwlock *fl, int i) { - if ((i < 0) | (i >= fl->n)) { - printf("filerwlockLock needs i in range 0 .. %d\n", (fl->n)-1); - exit(0);} - writew_lock(fl->fd, i, SEEK_SET, 1); - } - -/* Given the lock cluster fl, unlock its ith element */ -int filerwunlock(filerwlock *fl, int i){ - - if ((i < 0) | (i >= fl->n)) { - printf("filerwlockUnlock needs i in range 0 .. %d\n", (fl->n)-1); - exit(0);} - un_lock(fl->fd, i, SEEK_SET, 1); - } - -/* Given the lock cluster fl, it read locks all its elements */ -int filerwlongreadlock(filerwlock *fl) { - readw_lock(fl->fd, 0, SEEK_SET, fl->n); -} - -/* Given the lock cluster fl, it unlocks all its elements */ -int filerwlongunlock(filerwlock *fl) { - un_lock(fl->fd, 0, SEEK_SET, fl->n); -} - diff --git a/libical/src/libical/pvl.c b/libical/src/libical/pvl.c deleted file mode 100644 index d5225a541e..0000000000 --- a/libical/src/libical/pvl.c +++ /dev/null @@ -1,768 +0,0 @@ -/*====================================================================== - FILE: pvl.c - CREATOR: eric November, 1995 - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. -======================================================================*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "pvl.h" -#include -#include -#include - - - -/* - struct pvl_list_t - - The list structure. This is the hanlde for the entire list - - This type is also private. Use pvl_list instead - - */ - -typedef struct pvl_list_t -{ - int MAGIC; /* Magic Identifier */ - struct pvl_elem_t *head; /* Head of list */ - struct pvl_elem_t *tail; /* Tail of list */ - int count; /* Number of items in the list */ - struct pvl_elem_t *p; /* Pointer used for iterators */ -} pvl_list_t; - - - - -/* This global is incremented for each call to pvl_new_element(); it gives each - * list a unique identifer */ - -int pvl_elem_count = 0; -int pvl_list_count = 0; - - -/*---------------------------------------------------------------------- - Function: pvl_list pvl_newlist() - - Purpose: - - Creates a new list, clears the pointers and assigns a magic number - - Returns: - - Pointer to the new list - 0 if there is no available memory. - *----------------------------------------------------------------------*/ - -pvl_list -pvl_newlist() -{ - struct pvl_list_t *L; - - if ( ( L = (struct pvl_list_t*)malloc(sizeof(struct pvl_list_t))) == 0) - { - errno = ENOMEM; - return 0; - } - - L->MAGIC = pvl_list_count; - pvl_list_count++; - L->head = 0; - L->tail = 0; - L->count = 0; - L->p = 0; - - return L; -} - -void -pvl_free(pvl_list l) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - - pvl_clear(l); - - free(L); -} - -/*---------------------------------------------------------------------- - Function: pvl_new_element(void *d, struct pvl_elem_t *next,struct pvl_elem_t *prior) - - Purpose: - Creates a new list element, assigns a magic number, and assigns - the next and previous pointers. - - Passing in the next and previous points may seem odd, but it allos the user - to set them while keeping the internal data hidden. In nearly all cases, - the user is the pvl library itself. - - Parameters: - - d The data item to be stored in the list - next Pointer value to assign to the member "next" - prior Pointer value to assign to the member "prior" - - Returns: - - A pointer to the new element. - 0 if there is no memory available. - - *----------------------------------------------------------------------*/ - -pvl_elem -pvl_new_element(void *d, pvl_elem next,pvl_elem prior) -{ - struct pvl_elem_t *E; - - if ( ( E = (struct pvl_elem_t*)malloc(sizeof(struct pvl_elem_t))) == 0) - { - errno = ENOMEM; - return 0; - } - - E->MAGIC = pvl_elem_count++; - E->d = d; - E->next = next; - E->prior = prior; - - return (pvl_elem)E; -} - -/*---------------------------------------------------------------------- - Function: pvl_unshift(pvl_list l,void *d) - - Purpose: - - Add a new element to the from of the list - - Parameters: - - l The list to add the item to - d Pointer to the item to add - - Returns: - *----------------------------------------------------------------------*/ - -void -pvl_unshift(pvl_list l,void *d) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - struct pvl_elem_t *E = pvl_new_element(d,L->head,0); - - if (E->next != 0) - { - /* Link the head node to it */ - E->next->prior = E; - } - - /* move the head */ - L->head = E; - - /* maybe move the tail */ - - if (L->tail == 0) - { - L->tail = E; - } - - L->count++; -} - -/*---------------------------------------------------------------------- - Function: pvl_shift(pvl_list l) - - Purpose: - - Remove an element from the front of the list - - Parameters: - - l The list to operate on - - Returns: - *----------------------------------------------------------------------*/ - -void* -pvl_shift(pvl_list l) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - - if (L->head == 0) - { - return 0; - } - - return pvl_remove(l,(void*)L->head); - -} - -/*---------------------------------------------------------------------- - Function: void pvl_push(pvl_list l,void *d) - - Purpose: - - Add a new item to the tail of the list - - Paramters: - - l The list to operate on - d Pointer to the item to add - - Returns: - *----------------------------------------------------------------------*/ - -void -pvl_push(pvl_list l,void *d) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - struct pvl_elem_t *E = pvl_new_element(d,0,L->tail); - - /* These are done in pvl_new_element - E->next = 0; - E->prior = L->tail; - */ - - if (L->tail != 0) - { - L->tail->next = E; - } - - if (L->head == 0) - { - L->head = E; - } - - L->tail = E; - - L->count++; - -} - -/*---------------------------------------------------------------------- - Function: void* pvl_pop(pvl_list l) - - Purpose: - - Remove an element from the tail of the list - - Paramters: - - l The list to operate on - - Returns: - *----------------------------------------------------------------------*/ - -void* -pvl_pop(pvl_list l) -{ - - struct pvl_list_t *L = (struct pvl_list_t *)l; - - if ( L->tail == 0) - { - return 0; - } - - return pvl_remove(l,(void*) L->tail);; - -} - - -/*---------------------------------------------------------------------- - Function: void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d) - - Purpose: - - Add a new item to a list that is ordered by a comparison function. - This routine assumes that the list is properly ordered. - - l The list to operate on - f Pointer to a comparison function - d Pointer to data to pass to the comparison function - - Returns: - - void - - *----------------------------------------------------------------------*/ - -void -pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - - struct pvl_elem_t *P; - - L->count++; - - /* Empty list, add to head */ - - if(L->head == 0) - { - pvl_unshift(l,d); - return; - } - - /* smaller than head, add to head */ - - if ( ((*f)(d,L->head->d)) < 0) - { - pvl_unshift(l,d); - return; - } - - /* larger than tail, add to tail */ - if ( (*f)(d,L->tail->d) > 0) - { - pvl_push(l,d); - return; - } - - - /* Search for the first element that is smaller, and add before it */ - - for (P=L->head; P != 0; P = P->next) - { - if ( (*f)(P->d,d) > 0) - { - pvl_insert_before(l,P,d); - return; - } - } - - /* badness, choke */ - - assert(0); - -} - -/*---------------------------------------------------------------------- - Function: void pvl_insert_after(pvl_list l,pvl_elem p,void *d) - - Purpose: - - Add a new item after the referenced element. - - Parameters: - - l The list to operate on - p The list element to add the item after - d Pointer to the item to add. - - Returns: - - void - - *----------------------------------------------------------------------*/ - -void -pvl_insert_after(pvl_list l,pvl_elem p,void *d) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - struct pvl_elem_t *P = (struct pvl_elem_t *)p; - struct pvl_elem_t *E = 0; - - L->count++; - - if (P == 0) - { - pvl_unshift(l,d); - return; - } - - if ( P == L->tail) - { - E = pvl_new_element(d,0,P); - L->tail = E; - E->prior->next = E; - } - else - { - E = pvl_new_element(d,P->next,P); - E->next->prior = E; - E->prior->next = E; - } -} - -/*---------------------------------------------------------------------- - Function: void pvl_insert_before(pvl_list l,pvl_elem p,void *d) - - Purpose: - - Add an item after a referenced item - - Parameters: - - l The list to operate on - p The list element to add the item before - d Pointer to the data to be added. - - Returns: - *----------------------------------------------------------------------*/ - -void -pvl_insert_before(pvl_list l,pvl_elem p,void *d) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - struct pvl_elem_t *P = (struct pvl_elem_t *)p; - struct pvl_elem_t *E = 0; - - L->count++; - - if (P == 0) - { - pvl_unshift(l,d); - return; - } - - if ( P == L->head) - { - E = pvl_new_element(d,P,0); - E->next->prior = E; - L->head = E; - } - else - { - E = pvl_new_element(d,P,P->prior); - E->prior->next = E; - E->next->prior = E; - } -} - -/*---------------------------------------------------------------------- - Function: void pvl_remove(pvl_list l,pvl_elem e) - - Purpose: - - Remove the referenced item from the list - - This routine will free the element, but not the data item that the - element contains. - - Parameters: - - l The list to operate on - e The element to remove. - - Returns: - *----------------------------------------------------------------------*/ - -void* -pvl_remove(pvl_list l,pvl_elem e) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - struct pvl_elem_t *E = (struct pvl_elem_t *)e; - void* data; - - if (E == L->head) - { - if (E->next != 0) - { - E->next->prior = 0; - L->head = E->next; - } else { - /* E Also points to tail -> only one element in list */ - L->tail = 0; - L->head = 0; - } - } - else if (E == L->tail) - { - if (E->prior != 0) - { - E->prior->next = 0; - L->tail = E->prior; - } else { - /* E points to the head, so it was the last element */ - /* This case should be taken care of in the previous clause */ - L->head = 0; - L->tail = 0; - } - } - else - { - E->prior->next = E->next; - E->next->prior = E->prior; - } - - - L->count--; - - data = E->d; - - free(E); - - return data; - -} - -/*---------------------------------------------------------------------- - Function: pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v) - - Purpose: - - Return a pointer to data that satisfies a function - - This routine will interate through the entire list and call the - find function for each item. It will break and return a pointer to the - data that causes the find function to return 1. - - Parameters: - - l The list to operate on - f Pointer to the find function - v Pointer to constant data to pass into the function - - Returns: - - Pointer to the element that the find function found. - - *----------------------------------------------------------------------*/ - -pvl_elem -pvl_find(pvl_list l,pvl_findf f,void* v) -{ - pvl_elem e; - - for (e=pvl_head(l); e!= 0; e = pvl_next(e)) - { - if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1) - { - /* Save this elem for a call to find_next */ - ((struct pvl_list_t *)l)->p = e; - return e; - } - } - - return 0; - -} -/*---------------------------------------------------------------------- - Function: void* pvl_find_next(pvl_list l,pvl_findf f,void* v) - - Purpose: - - Like pvl_find(), but continues the search where the last find() or - find_next() left off - - Parameters: - - l The list to operate on - f Pointer to the find function - v Pointer to constant data to pass into the function - - Returns: - - Pointer to the element that the find function found. - - *----------------------------------------------------------------------*/ - -pvl_elem -pvl_find_next(pvl_list l,pvl_findf f,void* v) -{ - - pvl_elem e; - - for (e=pvl_head(l); e!= 0; e = pvl_next(e)) - { - if ( (*f)(((struct pvl_elem_t *)e)->d,v) == 1) - { - /* Save this elem for a call to find_next */ - ((struct pvl_list_t *)l)->p = e; - return e; - } - } - - return 0; - -} - -/*---------------------------------------------------------------------- - Function: void pvl_clear(pvl_list l) - - Purpose: - - Remove the all the elements in the list. The does not free the data items - the elements hold. - - - Returns: - *----------------------------------------------------------------------*/ - -void -pvl_clear(pvl_list l) -{ - pvl_elem e = pvl_head(l); - pvl_elem next; - - if (e == 0) { - return; - } - - while(e != 0) - { - next = pvl_next(e); - pvl_remove(l,e); - e = next; - } -} - -/*---------------------------------------------------------------------- - Function: int pvl_count(pvl_list l) - - Purpose: - - Returns the number of items in the list. - - Returns: - *----------------------------------------------------------------------*/ - -int -pvl_count(pvl_list l) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - - return L->count; -} - - -/*---------------------------------------------------------------------- - Function: pvl_elem pvl_next(pvl_elem e) - - Purpose: - Returns a pointer to the given element - - Returns: - *----------------------------------------------------------------------*/ - -pvl_elem -pvl_next(pvl_elem e) -{ - struct pvl_elem_t *E = (struct pvl_elem_t *)e; - - if (E == 0){ - return 0; - } - - return (pvl_elem)E->next; -} - -/*---------------------------------------------------------------------- - Function: pvl_elem pvl_prior(pvl_elem e) - - Purpose: - - Returns a pointer to the element previous to the element given. - - Returns: - *----------------------------------------------------------------------*/ - -pvl_elem -pvl_prior(pvl_elem e) -{ - struct pvl_elem_t *E = (struct pvl_elem_t *)e; - - return (pvl_elem)E->prior; -} - -/*---------------------------------------------------------------------- - Function: pvl_elem pvl_head(pvl_list l ) - - Purpose: - - Returns a pointer to the first item in the list. - - Returns: - *----------------------------------------------------------------------*/ -pvl_elem -pvl_head(pvl_list l ) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - - return (pvl_elem)L->head; -} - -/*---------------------------------------------------------------------- - Function: pvl_elem pvl_tail(pvl_list l) - - Purpose: - - Returns a pointer to the last item in the list. - - Returns: - *----------------------------------------------------------------------*/ -pvl_elem -pvl_tail(pvl_list l) -{ - struct pvl_list_t *L = (struct pvl_list_t *)l; - return (pvl_elem)L->tail; -} - -/*---------------------------------------------------------------------- - Function: - - - Purpose: - - - Returns: - *----------------------------------------------------------------------*/ - -#ifndef PVL_USE_MACROS -void* -pvl_data(pvl_elem e) -{ - struct pvl_elem_t *E = (struct pvl_elem_t *)e; - - if ( e == 0){ - return 0; - } - - return E->d; -} -#endif - -/*---------------------------------------------------------------------- - Function: void pvl_apply(pvl_list l,pvl_applyf f, void *v) - - Purpose: - - Call a function for every item in the list. - - Paramters: - - l The list to operate on - f Pointer to the function to call - v Data to pass to the function on every iteration - - Returns: - - void - *----------------------------------------------------------------------*/ - -void -pvl_apply(pvl_list l,pvl_applyf f, void *v) -{ - pvl_elem e; - - for (e=pvl_head(l); e!= 0; e = pvl_next(e)) - { - (*f)(((struct pvl_elem_t *)e)->d,v); - } - -} diff --git a/libical/src/libical/pvl.h b/libical/src/libical/pvl.h deleted file mode 100644 index 8113f7495a..0000000000 --- a/libical/src/libical/pvl.h +++ /dev/null @@ -1,104 +0,0 @@ -/*====================================================================== - FILE: pvl.h - CREATOR: eric November, 1995 - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - -======================================================================*/ - -/* - struct pvl_elem_t - - This type is private. Always use pvl_elem instead - - */ - -#ifndef __PVL_H__ -#define __PVL_H__ - -typedef void* pvl_list; -typedef void* pvl_elem; - -typedef struct pvl_elem_t -{ - int MAGIC; /* Magic Identifier */ - void *d; /* Pointer to data user is storing */ - struct pvl_elem_t *next; /* Next element */ - struct pvl_elem_t *prior; /* prior element */ -} pvl_elem_t; - - - -/* This global is incremented for each call to pvl_new_element(); it gives each - * list a unique identifer */ - -extern int pvl_elem_count; -extern int pvl_list_count; - -/* Create new lists or elements */ -pvl_elem pvl_new_element(void* d, pvl_elem next,pvl_elem prior); -pvl_list pvl_newlist(); -void pvl_free(pvl_list); - -/* Add, remove, or get the head of the list */ -void pvl_unshift(pvl_list l,void *d); -void* pvl_shift(pvl_list l); -pvl_elem pvl_head(pvl_list); - -/* Add, remove or get the tail of the list */ -void pvl_push(pvl_list l,void *d); -void* pvl_pop(pvl_list l); -pvl_elem pvl_tail(pvl_list); - -/* Insert elements in random places */ -typedef int (*pvl_comparef)(void* a, void* b); /* a, b are of the data type*/ -void pvl_insert_ordered(pvl_list l,pvl_comparef f,void *d); -void pvl_insert_after(pvl_list l,pvl_elem e,void *d); -void pvl_insert_before(pvl_list l,pvl_elem e,void *d); - -/* Remove an element, or clear the entire list */ -void* pvl_remove(pvl_list,pvl_elem); /* Remove element, return data */ -void pvl_clear(pvl_list); /* Remove all elements, de-allocate all data */ - -int pvl_count(pvl_list); - -/* Navagate the list */ -pvl_elem pvl_next(pvl_elem e); -pvl_elem pvl_prior(pvl_elem e); - -/* get the data in the list */ -#ifndef PVL_USE_MACROS -void* pvl_data(pvl_elem); -#else -#define pvl_data(x) x==0 ? 0 : ((struct pvl_elem_t *)x)->d; -#endif - - -/* Find an element for which a function returns true */ -typedef int (*pvl_findf)(void* a, void* b); /*a is list elem, b is other data*/ -pvl_elem pvl_find(pvl_list l,pvl_findf f,void* v); -pvl_elem pvl_find_next(pvl_list l,pvl_findf f,void* v); - -/* Pass each element in the list to a function */ -typedef void (*pvl_applyf)(void* a, void* b); /*a is list elem, b is other data*/ -void pvl_apply(pvl_list l,pvl_applyf f, void *v); - - -#endif /* __PVL_H__ */ - - - - - diff --git a/libical/src/libical/testlocks.c b/libical/src/libical/testlocks.c deleted file mode 100644 index d3e9e55cec..0000000000 --- a/libical/src/libical/testlocks.c +++ /dev/null @@ -1,70 +0,0 @@ -/* This is just a driver to test the filerwlock objects defined in fcntl.c */ -/* MAXCHILD processes are forked. They take turns in using LOCKSSIZE locks.*/ -/* I compiled the program as follows */ -/* cc fcntlmain.c fcntl.c -o fcntlmain */ -/* and then run the image fcntlmain. */ -/* Notice that after the program has run I find the file "mylock" in my */ -/* directory. Not very desirable. Perhaps there is a way to avoid that? */ - -#include -#include -#include "fcntl.h" - -#define LOCKFILE "mylock" -#define LOCKSSIZE 5 -#define MAXCHILD 4 - -void child (int self); - -pid_t cldrn[4]; -filerwlock *fl; - -int -main(void){ - int i; - - fl = filerwlockCreate(LOCKFILE, LOCKSSIZE); - - for (i=0;i < MAXCHILD; i++) { - if ((cldrn[i]=fork()) < 0) { - perror("fork"); - exit(1);} - if (cldrn[i]==0) - child(i); - } - for (i=0; i < MAXCHILD; i++) - wait(); - - filerwlockDelete(fl); - exit(0); -} - -void child (int self) { - int i, j; - char s[256]; - for (j=0; j<8; j++) { - - if (self == 0) { - filerwwritelock(fl,1); - } else if (self == (MAXCHILD-1)) { - filerwlongreadlock(fl); - } else { - filerwreadlock(fl,1); - } - - printf("Child %d starts to sleep on lock %d\n", self, 1); - - sleep(3); - - printf("Child %d ends sleep on lock %d\n", self, 1); - - if (self == (MAXCHILD-1)) { - filerwlongunlock(fl); - } else { - filerwunlock(fl,1); - } - - sleep(1); - } - exit(0); -} diff --git a/libical/src/libicalss/.cvsignore b/libical/src/libicalss/.cvsignore deleted file mode 100644 index 732c1577b6..0000000000 --- a/libical/src/libicalss/.cvsignore +++ /dev/null @@ -1,6 +0,0 @@ -Makefile -.deps -Makefile.in -*.lo -*.la -.libs \ No newline at end of file diff --git a/libical/src/libicalss/Makefile.am b/libical/src/libicalss/Makefile.am deleted file mode 100644 index 01a7fa4d9c..0000000000 --- a/libical/src/libicalss/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ - - -#noinst_LTLIBRARIES = libicalss.la -lib_LIBRARIES = libicalss.a - -libicalss_a_SOURCES =\ - icalcalendar.c \ - icalcalendar.h \ - icalcluster.c \ - icalcluster.h \ - icalstore.c \ - icalstore.h - -include_HEADERS =\ - icalcalendar.h \ - icalcluster.h \ - icalstore.h - - -INCLUDES = \ - -I ../libical/ \ - -I $(srcdir)/../libical/ \ - -I .. \ - -I$(srcdir)/.. - diff --git a/libical/src/libicalss/icalcalendar.c b/libical/src/libicalss/icalcalendar.c deleted file mode 100644 index 0f2231b1d7..0000000000 --- a/libical/src/libicalss/icalcalendar.c +++ /dev/null @@ -1,268 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalcalendar.c - CREATOR: eric 23 December 1999 - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - - ======================================================================*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "icalcalendar.h" -#include "icalcluster.h" -#include -#include /* For mkdir, stat */ -#include /* For mkdir */ -#include /* For mkdir */ -#include /* For mkdir, stat */ -#include /* for malloc */ -#include /* for strcat */ -#include - -#define BOOKED_DIR "booked" -#define INCOMING_FILE "incoming.ics" -#define PROP_FILE "properties.ics" -#define FBLIST_FILE "freebusy.ics" - -struct icalcalendar_impl -{ - char* dir; - icalcomponent* freebusy; - icalcomponent* properties; - icalstore* booked; - icalstore* incoming; -}; - -struct icalcalendar_impl* icalcalendar_new_impl() -{ - struct icalcalendar_impl* impl; - - if ( ( impl = (struct icalcalendar_impl*) - malloc(sizeof(struct icalcalendar_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - return impl; -} - - -icalerrorenum icalcalendar_create(struct icalcalendar_impl* impl) -{ - char path[PATH_MAX]; - struct stat sbuf; - int r; - - icalerror_check_arg_re((impl != 0),"impl",ICAL_BADARG_ERROR); - - path[0] = '\0'; - strcpy(path,impl->dir); - strcat(path,"/"); - strcat(path,BOOKED_DIR); - - r = stat(path,&sbuf); - - if( r != 0 && errno == ENOENT){ - - if(mkdir(path,0777)!=0){ - icalerror_set_errno(ICAL_FILE_ERROR); - return ICAL_FILE_ERROR; - } - } - - return ICAL_NO_ERROR; -} - -icalcalendar* icalcalendar_new(char* dir) -{ - struct icalcalendar_impl* impl; - - icalerror_check_arg_rz((dir != 0),"dir"); - - impl = icalcalendar_new_impl(); - - if (impl == 0){ - return 0; - } - - impl->dir = (char*)strdup(dir); - impl->freebusy = 0; - impl->properties = 0; - impl->booked = 0; - impl->incoming = 0; - - if (icalcalendar_create(impl) != ICAL_NO_ERROR){ - free(impl); - return 0; - } - - return impl; -} - -void icalcalendar_free(icalcalendar* calendar) -{ - - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - - if (impl->dir !=0){ - free(impl->dir); - } - - if (impl->freebusy !=0){ - icalcluster_free(impl->freebusy); - } - - if (impl->properties !=0){ - icalcluster_free(impl->properties); - } - - if (impl->booked !=0){ - icalstore_free(impl->booked); - } - - if (impl->incoming !=0){ - icalstore_free(impl->incoming); - } - - impl->dir = 0; - impl->freebusy = 0; - impl->properties = 0; - impl->booked = 0; - impl->incoming = 0; - - - free(impl); -} - - -int icalcalendar_lock(icalcalendar* calendar) -{ - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - return 0; -} - -int icalcalendar_unlock(icalcalendar* calendar) -{ - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - return 0; -} - -int icalcalendar_islocked(icalcalendar* calendar) -{ - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - return 0; -} - -int icalcalendar_ownlock(icalcalendar* calendar) -{ - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - return 0; -} - -icalstore* icalcalendar_get_booked(icalcalendar* calendar) -{ - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - char dir[PATH_MAX]; - - icalerror_check_arg_rz((impl != 0),"impl"); - - dir[0] = '\0'; - strcpy(dir,impl->dir); - strcat(dir,"/"); - strcat(dir,BOOKED_DIR); - - if (impl->booked == 0){ - icalerror_clear_errno(); - impl->booked = icalstore_new(dir); - assert(icalerrno == ICAL_NO_ERROR); - } - - return impl->booked; - -} - -icalcluster* icalcalendar_get_incoming(icalcalendar* calendar) -{ - char path[PATH_MAX]; - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - - path[0] = '\0'; - strcpy(path,impl->dir); - strcat(path,"/"); - strcat(path,INCOMING_FILE); - - if (impl->properties == 0){ - impl->properties = icalcluster_new(path); - } - - return impl->properties; -} - -icalcluster* icalcalendar_get_properties(icalcalendar* calendar) -{ - char path[PATH_MAX]; - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - - path[0] = '\0'; - strcpy(path,impl->dir); - strcat(path,"/"); - strcat(path,PROP_FILE); - - if (impl->properties == 0){ - impl->properties = icalcluster_new(path); - } - - return impl->properties; -} - -icalcluster* icalcalendar_get_freebusy(icalcalendar* calendar) -{ - char path[PATH_MAX]; - struct icalcalendar_impl *impl = (struct icalcalendar_impl*)calendar; - icalerror_check_arg_rz((impl != 0),"impl"); - - path[0] = '\0'; - strcpy(path,impl->dir); - strcat(path,"/"); - strcat(path,FBLIST_FILE); - - - if (impl->freebusy == 0){ - impl->freebusy = icalcluster_new(path); - } - - return impl->freebusy; -} - - - - diff --git a/libical/src/libicalss/icalcalendar.h b/libical/src/libicalss/icalcalendar.h deleted file mode 100644 index 90e7b33c22..0000000000 --- a/libical/src/libicalss/icalcalendar.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalcalendar.h - CREATOR: eric 23 December 1999 - - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - -======================================================================*/ - -#ifndef ICALCALENDAR_H -#define ICALCALENDAR_H - -#include "ical.h" -#include "icalstore.h" -#include "icalcluster.h" - -/* icalcalendar - * Routines for storing calendar data in a file system. The calendar - * has two icalstores, one for incoming components and one for booked - * components. It also has interfaces to access the free/busy list - * and a list of calendar properties */ - -typedef void icalcalendar; - -icalcalendar* icalcalendar_new(char* dir); - -void icalcalendar_free(icalcalendar* calendar); - -int icalcalendar_lock(icalcalendar* calendar); - -int icalcalendar_unlock(icalcalendar* calendar); - -int icalcalendar_islocked(icalcalendar* calendar); - -int icalcalendar_ownlock(icalcalendar* calendar); - -icalstore* icalcalendar_get_booked(icalcalendar* calendar); - -icalcluster* icalcalendar_get_incoming(icalcalendar* calendar); - -icalcluster* icalcalendar_get_properties(icalcalendar* calendar); - -icalcluster* icalcalendar_get_freebusy(icalcalendar* calendar); - - -#endif /* !ICALCALENDAR_H */ - - - diff --git a/libical/src/libicalss/icalcluster.c b/libical/src/libicalss/icalcluster.c deleted file mode 100644 index 36bdccc743..0000000000 --- a/libical/src/libicalss/icalcluster.c +++ /dev/null @@ -1,423 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalcluster.c - CREATOR: eric 23 December 1999 - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - - ======================================================================*/ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "icalcluster.h" -#include -#include /* For PATH_MAX */ -#include /* for stat */ -#include /* for stat, getpid */ -#include -#include -#include /* for fcntl */ -#include /* for fcntl */ - -icalerrorenum icalcluster_create_cluster(char *path); - -struct icalcluster_impl { - char *path; - icalcomponent* cluster; - int changed; - FILE* stream; -}; - -icalcluster* icalcluster_new_impl() -{ - struct icalcluster_impl* comp; - - if ( ( comp = (struct icalcluster_impl*) - malloc(sizeof(struct icalcluster_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - errno = ENOMEM; - return 0; - } - - return comp; -} - -char* read_from_file(char *s, size_t size, void *d) -{ - char *c = fgets(s,size, (FILE*)d); - return c; -} - -icalcluster* icalcluster_new(char* path) -{ - struct icalcluster_impl *impl = icalcluster_new_impl(); - struct stat sbuf; - int createclusterfile = 0; - icalerrorenum error = ICAL_NO_ERROR; - icalparser *parser; - struct icaltimetype tt; - off_t cluster_file_size; - - memset(&tt,0,sizeof(struct icaltimetype)); - - icalerror_clear_errno(); - icalerror_check_arg_rz( (path!=0), "path"); - - if (impl == 0){ - return 0; - } - - /*impl->path = strdup(path); icalcluster_load does this */ - impl->changed = 0; - - impl->cluster = 0; - - impl->path = 0; - impl->stream = 0; - - /* Check if the path already exists and if it is a regular file*/ - if (stat(path,&sbuf) != 0){ - - /* A file by the given name does not exist, or there was - another error */ - cluster_file_size = 0; - if (errno == ENOENT) { - /* It was because the file does not exist */ - createclusterfile = 1; - } else { - /* It was because of another error */ - icalerror_set_errno(ICAL_FILE_ERROR); - return 0; - } - } else { - /* A file by the given name exists, but is it a regular file */ - - if (!S_ISREG(sbuf.st_mode)){ - /* Nope, not a directory */ - icalerror_set_errno(ICAL_FILE_ERROR); - return 0; - } else { - /* Lets assume that it is a file of the right type */ - cluster_file_size = sbuf.st_size; - createclusterfile = 0; - } - } - - /* if cluster does not already exist, create it */ - - if (createclusterfile == 1) { - error = icalcluster_create_cluster(path); - - if (error != ICAL_NO_ERROR){ - icalerror_set_errno(error); - return 0; - } - } - - impl->path = (char*)strdup(path); - - errno = 0; - impl->stream = fopen(impl->path,"r"); - - if (impl->stream ==0 || errno != 0){ - impl->cluster = 0; - icalerror_set_errno(ICAL_FILE_ERROR); /* Redundant, actually */ - return 0; - } - - icalcluster_lock(impl); - - if(cluster_file_size > 0){ - parser = icalparser_new(); - icalparser_set_gen_data(parser,impl->stream); - impl->cluster = icalparser_parse(parser,read_from_file); - icalparser_free(parser); - - if (icalcomponent_isa(impl->cluster) != ICAL_XROOT_COMPONENT){ - /* The parser got a single component, so it did not put it in - an XROOT. */ - icalcomponent *cl = impl->cluster; - impl->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); - icalcomponent_add_component(impl->cluster,cl); - } - - } else { - - impl->cluster = icalcomponent_new(ICAL_XROOT_COMPONENT); - } - - if (impl->cluster == 0){ - icalerror_set_errno(ICAL_PARSE_ERROR); - return 0; - } - - if (error != ICAL_NO_ERROR){ - return 0; - } - - return impl; -} - -void icalcluster_free(icalcluster* cluster) -{ - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rv((cluster!=0),"cluster"); - - if (impl->cluster != 0){ - icalcluster_commit(cluster); - icalcomponent_free(impl->cluster); - impl->cluster=0; - } - - if(impl->path != 0){ - free(impl->path); - impl->path = 0; - } - - if(impl->stream != 0){ - icalcluster_unlock(impl); - fclose(impl->stream); - impl->stream = 0; - } - - free(impl); -} - -char* icalcluster_path(icalcluster* cluster) -{ - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - icalerror_check_arg_rz((cluster!=0),"cluster"); - - return impl->path; -} - - -int icalcluster_lock(icalcluster *cluster) -{ - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - struct flock lock; - int fd; - - icalerror_check_arg_rz((impl->stream!=0),"impl->stream"); - - fd = fileno(impl->stream); - - lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ - lock.l_start = 0; /* byte offset relative to l_whence */ - lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ - lock.l_len = 0; /* #bytes (0 means to EOF) */ - - return (fcntl(fd, F_SETLKW, &lock)); -} - -int icalcluster_unlock(icalcluster *cluster) -{ - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - int fd; - struct flock lock; - icalerror_check_arg_rz((impl->stream!=0),"impl->stream"); - - fd = fileno(impl->stream); - - lock.l_type = F_WRLCK; /* F_RDLCK, F_WRLCK, F_UNLCK */ - lock.l_start = 0; /* byte offset relative to l_whence */ - lock.l_whence = SEEK_SET; /* SEEK_SET, SEEK_CUR, SEEK_END */ - lock.l_len = 0; /* #bytes (0 means to EOF) */ - - return (fcntl(fd, F_UNLCK, &lock)); - -} - -icalerrorenum icalcluster_create_cluster(char *path) -{ - - FILE* f; - int r; - icalcomponent *c; - - icalerror_clear_errno(); - - f = fopen(path,"w"); - - if (f == 0){ - icalerror_set_errno(ICAL_FILE_ERROR); - return ICAL_FILE_ERROR; - } - - - /* This used to write data to the file... */ - - - fclose(f); - - return ICAL_NO_ERROR; -} - -icalerrorenum icalcluster_commit(icalcluster* cluster) -{ - FILE *f; - char tmp[PATH_MAX]; /* HACK Buffer overflow potential */ - char *str; - icalparser *parser; - icalcomponent *c; - - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR); - - if (impl->changed == 0 ){ - return ICAL_NO_ERROR; - } - -#ifdef ICAL_SAFESAVES - snprintf(tmp,PATH_MAX,"%s-tmp",impl->path); -#else - strcpy(tmp,impl->path); -#endif - - if ( (f = fopen(tmp,"w")) < 0 ){ - icalerror_set_errno(ICAL_FILE_ERROR); - return ICAL_FILE_ERROR; - } - - for(c = icalcomponent_get_first_component(impl->cluster,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(impl->cluster,ICAL_ANY_COMPONENT)){ - - str = icalcomponent_as_ical_string(c); - - if ( fwrite(str,sizeof(char),strlen(str),f) < strlen(str)){ - fclose(f); - return ICAL_FILE_ERROR; - } - } - - fclose(f); - impl->changed = 0; - -#ifdef ICAL_SAFESAVES - rename(tmp,impl->path); /* HACK, should check for error here */ -#endif - - return ICAL_NO_ERROR; - -} - -void icalcluster_mark(icalcluster* cluster){ - - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rv((impl!=0),"cluster"); - - impl->changed = 1; - -} - -icalcomponent* icalcluster_get_component(icalcluster* cluster){ - struct icalcluster_impl *impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_re((impl!=0),"cluster",ICAL_BADARG_ERROR); - - return impl->cluster; -} - - -/* manipulate the components in the cluster */ - -icalerrorenum icalcluster_add_component(icalcluster *cluster, - icalcomponent* child) -{ - struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rv((cluster!=0),"cluster"); - icalerror_check_arg_rv((child!=0),"child"); - - icalcomponent_add_component(impl->cluster,child); - - icalcluster_mark(cluster); - - return ICAL_NO_ERROR; - -} - -icalerrorenum icalcluster_remove_component(icalcluster *cluster, - icalcomponent* child) -{ - struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rv((cluster!=0),"cluster"); - icalerror_check_arg_rv((child!=0),"child"); - - icalcomponent_remove_component(impl->cluster,child); - - icalcluster_mark(cluster); - - return ICAL_NO_ERROR; -} - -int icalcluster_count_components(icalcluster *cluster, - icalcomponent_kind kind) -{ - struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; - - if(cluster == 0){ - icalerror_set_errno(ICAL_BADARG_ERROR); - return -1; - } - - return icalcomponent_count_components(impl->cluster,kind); -} - -/* Iterate through components */ -icalcomponent* icalcluster_get_current_component (icalcluster* cluster) -{ - struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rz((cluster!=0),"cluster"); - - return icalcomponent_get_current_component(impl->cluster); -} - -icalcomponent* icalcluster_get_first_component(icalcluster* cluster, - icalcomponent_kind kind) -{ - struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rz((cluster!=0),"cluster"); - - return icalcomponent_get_first_component(impl->cluster,kind); -} - -icalcomponent* icalcluster_get_next_component(icalcluster* cluster, - icalcomponent_kind kind) -{ - struct icalcluster_impl* impl = (struct icalcluster_impl*)cluster; - - icalerror_check_arg_rz((cluster!=0),"cluster"); - - return icalcomponent_get_next_component(impl->cluster,kind); -} - diff --git a/libical/src/libicalss/icalcluster.h b/libical/src/libicalss/icalcluster.h deleted file mode 100644 index 39fe542027..0000000000 --- a/libical/src/libicalss/icalcluster.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalcluster.h - CREATOR: eric 23 December 1999 - - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - -======================================================================*/ - -#ifndef ICALCLUSTER_H -#define ICALCLUSTER_H - -#include "ical.h" - -typedef void icalcluster; - - -icalcluster* icalcluster_new(char* path); -void icalcluster_free(icalcluster* cluster); - -char* icalcluster_path(icalcluster* cluster); - -/* Return a reference to the internal component. */ -icalcomponent* icalcluster_get_component(icalcluster* cluster); - -/* Mark the cluster as changed, so it will be written to disk when it - is freed*/ -void icalcluster_mark(icalcluster* cluster); - -/* Write the cluster data back to disk */ -icalerrorenum icalcluster_commit(icalcluster* cluster); - -/* manipulate the components in the cluster */ -icalerrorenum icalcluster_add_component(icalcomponent* parent, - icalcomponent* child); - -icalerrorenum icalcluster_remove_component(icalcomponent* parent, - icalcomponent* child); - -int icalcluster_count_components(icalcomponent* component, - icalcomponent_kind kind); - -/* Iterate through components */ -icalcomponent* icalcluster_get_current_component (icalcomponent* component); - -icalcomponent* icalcluster_get_first_component(icalcomponent* component, - icalcomponent_kind kind); -icalcomponent* icalcluster_get_next_component(icalcomponent* component, - icalcomponent_kind kind); - -#endif /* !ICALCLUSTER_H */ - - - diff --git a/libical/src/libicalss/icalcomponent.h b/libical/src/libicalss/icalcomponent.h deleted file mode 100644 index 9e0e9f5a9f..0000000000 --- a/libical/src/libicalss/icalcomponent.h +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalcomponent.h - CREATOR: eric 20 March 1999 - - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icalcomponent.h - -======================================================================*/ - -#ifndef ICALCOMPONENT_H -#define ICALCOMPONENT_H - -#include "icalproperty.h" -#include "icalvalue.h" -#include "icalenums.h" /* defines icalcomponent_kind */ - -typedef void icalcomponent; - -icalcomponent* icalcomponent_new(icalcomponent_kind kind); -icalcomponent* icalcomponent_new_clone(icalcomponent* component); -icalcomponent* icalcomponent_new_from_string(char* str); -icalcomponent* icalcomponent_vanew(icalcomponent_kind kind, ...); -void icalcomponent_free(icalcomponent* component); - -char* icalcomponent_as_ical_string(icalcomponent* component); - -int icalcomponent_is_valid(icalcomponent* component); - -icalcomponent_kind icalcomponent_isa(icalcomponent* component); - -int icalcomponent_isa_component (void* component); - -/* - * Working with properties - */ - -void icalcomponent_add_property(icalcomponent* component, - icalproperty* property); - -void icalcomponent_remove_property(icalcomponent* component, - icalproperty* property); - -int icalcomponent_count_properties(icalcomponent* component, - icalproperty_kind kind); - -/* Iterate through the properties */ -icalproperty* icalcomponent_get_current_property(icalcomponent* component); - -icalproperty* icalcomponent_get_first_property(icalcomponent* component, - icalproperty_kind kind); -icalproperty* icalcomponent_get_next_property(icalcomponent* component, - icalproperty_kind kind); - -/* Return a null-terminated array of icalproperties*/ - -icalproperty** icalcomponent_get_properties(icalcomponent* component, - icalproperty_kind kind); - - -/* - * Working with components - */ - - -void icalcomponent_add_component(icalcomponent* parent, - icalcomponent* child); - -void icalcomponent_remove_component(icalcomponent* parent, - icalcomponent* child); - -int icalcomponent_count_components(icalcomponent* component, - icalcomponent_kind kind); - -/* Iterate through components */ -icalcomponent* icalcomponent_get_current_component (icalcomponent* component); - -icalcomponent* icalcomponent_get_first_component(icalcomponent* component, - icalcomponent_kind kind); -icalcomponent* icalcomponent_get_next_component(icalcomponent* component, - icalcomponent_kind kind); - -/* Return a null-terminated array of icalproperties*/ -icalproperty** icalcomponent_get_component(icalcomponent* component, - icalproperty_kind kind); - -/* Working with embedded error properties */ - -int icalcomponent_count_errors(icalcomponent* component); -void icalcomponent_strip_errors(icalcomponent* component); - - -/* Internal operations. You don't see these... */ -icalcomponent* icalcomponent_get_parent(icalcomponent* component); -void icalcomponent_set_parent(icalcomponent* component, - icalcomponent* parent); - -#endif /* !ICALCOMPONENT_H */ - - - diff --git a/libical/src/libicalss/icalstore.c b/libical/src/libicalss/icalstore.c deleted file mode 100644 index 382464e476..0000000000 --- a/libical/src/libicalss/icalstore.c +++ /dev/null @@ -1,858 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icalstore.c - CREATOR: eric 28 November 1999 - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - - ======================================================================*/ - - -/* - - icalstore manages a database of ical components and offers - interfaces for reading, writting and searching for components. - - icalstore groups components in to clusters based on their DTSTART - time -- all components that start in the same month are grouped - together in a single file. All files in a sotre are kept in a single - directory. ( If a component does not have DTSTART, the store uses - DTSTAMP or CREATE ) - - The primary interfaces are icalstore_first and icalstore_next. These - routine iterate through all of the components in the store, subject - to the current gauge. A gauge is an icalcomponent that is tested - against other componets for a match. If a gauge has been set with - icalstore_select, icalstore_first and icalstore_next will only - return componentes that match the gauge. - - The Store generated UIDs for all objects that are stored if they do - not already have a UID. The UID is the name of the cluster (month & - year as MMYYYY) plus a unique serial number. The serial number is - stored as a property of the cluster. - -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include "ical.h" -#include "icalstore.h" -#include "pvl.h" -#include "icalerror.h" -#include "icalparser.h" -#include "icalcluster.h" - -#include -#include /* for opendir() */ -#include -#include /* for opendir() */ -#include /* for stat */ -#include /* for stat, getpid */ -#include /* for clock() */ -#include /* for rand(), srand() */ -#include /* for uname */ -#include /* for strdup */ - - -struct icalstore_impl -{ - char* dir; - icalcomponent* gauge; - icalcluster* cluster; - int first_component; - pvl_list directory; - pvl_elem directory_iterator; -}; - -struct icalstore_impl* icalstore_new_impl() -{ - struct icalstore_impl* comp; - - if ( ( comp = (struct icalstore_impl*) - malloc(sizeof(struct icalstore_impl))) == 0) { - icalerror_set_errno(ICAL_NEWFAILED_ERROR); - return 0; - } - - return comp; -} - -void icalstore_lock(char* dir) -{ -} - - -void icalstore_unlock(char* dir) -{ -} - -/* Load the contents of the store directory into the store's internal directory list*/ -icalerrorenum icalstore_read_directory(struct icalstore_impl* impl) -{ - struct dirent *de; - DIR* dp; - char *str; - - dp = opendir(impl->dir); - - if ( dp == 0) { - icalerror_set_errno(ICAL_FILE_ERROR); - return ICAL_FILE_ERROR; - } - - /* clear contents of directory list */ - while((str = pvl_pop(impl->directory))){ - free(str); - } - - /* load all of the cluster names in the directory list */ - for(de = readdir(dp); - de != 0; - de = readdir(dp)){ - - /* Remove known directory names '.' and '..'*/ - if (strcmp(de->d_name,".") == 0 || - strcmp(de->d_name,"..") == 0 ){ - continue; - } - - pvl_push(impl->directory, (void*)strdup(de->d_name)); - } - - closedir(dp); - - return ICAL_NO_ERROR; -} - -icalstore* icalstore_new(char* dir) -{ - struct icalstore_impl *impl = icalstore_new_impl(); - struct stat sbuf; - - if (impl == 0){ - return 0; - } - - icalerror_check_arg_rz( (dir!=0), "dir"); - - if (stat(dir,&sbuf) != 0){ - icalerror_set_errno(ICAL_FILE_ERROR); - return 0; - } - - /* dir is not the name of a direectory*/ - if (!S_ISDIR(sbuf.st_mode)){ - icalerror_set_errno(ICAL_USAGE_ERROR); - return 0; - } - - icalstore_lock(dir); - - impl = icalstore_new_impl(); - - if (impl ==0){ - icalerror_set_errno(ICAL_ALLOCATION_ERROR); - return 0; - } - - impl->directory = pvl_newlist(); - impl->directory_iterator = 0; - impl->dir = (char*)strdup(dir); - impl->gauge = 0; - impl->first_component = 0; - impl->cluster = 0; - - icalstore_read_directory(impl); - - return (icalstore*) impl; -} - -void icalstore_free(icalstore* s) -{ - struct icalstore_impl *impl = (struct icalstore_impl*)s; - char* str; - - icalstore_unlock(impl->dir); - - if(impl->dir !=0){ - free(impl->dir); - } - - if(impl->gauge !=0){ - icalcomponent_free(impl->gauge); - } - - if(impl->cluster !=0){ - icalcluster_free(impl->cluster); - } - - while(impl->directory !=0 && (str=pvl_pop(impl->directory)) != 0){ - free(str); - } - - if(impl->directory != 0){ - pvl_free(impl->directory); - } - - impl->directory = 0; - impl->directory_iterator = 0; - impl->dir = 0; - impl->gauge = 0; - impl->first_component = 0; - - free(impl); - -} - -/* icalstore_next_uid_number updates a serial number in the Store - directory in a file called SEQUENCE */ - -int icalstore_next_uid_number(icalstore* store) -{ - struct icalstore_impl *impl = (struct icalstore_impl*)store; - char sequence = 0; - char temp[128]; - char filename[PATH_MAX]; - char *r; - FILE *f; - struct stat sbuf; - - icalerror_check_arg_rz( (store!=0), "store"); - - sprintf(filename,"%s/%s",impl->dir,"SEQUENCE"); - - /* Create the file if it does not exist.*/ - if (stat(filename,&sbuf) == -1 || !S_ISREG(sbuf.st_mode)){ - - f = fopen(filename,"w"); - if (f != 0){ - fprintf(f,"0"); - fclose(f); - } else { - icalerror_warn("Can't create SEQUENCE file in icalstore_next_uid_number"); - return 0; - } - - } - - if ( (f = fopen(filename,"r+")) != 0){ - - rewind(f); - r = fgets(temp,128,f); - - if (r == 0){ - sequence = 1; - } else { - sequence = atoi(temp)+1; - } - - rewind(f); - - fprintf(f,"%d",sequence); - - fclose(f); - - return sequence; - - } else { - icalerror_warn("Can't create SEQUENCE file in icalstore_next_uid_number"); - return 0; - } - -} - -icalerrorenum icalstore_next_cluster(icalstore* store) -{ - struct icalstore_impl *impl = (struct icalstore_impl*)store; - char path[PATH_MAX]; - - if (impl->directory_iterator == 0){ - icalerror_set_errno(ICAL_INTERNAL_ERROR); - return ICAL_INTERNAL_ERROR; - } - impl->directory_iterator = pvl_next(impl->directory_iterator); - - if (impl->directory_iterator == 0){ - /* There are no more clusters */ - impl->cluster = 0; - return ICAL_NO_ERROR; - } - - sprintf(path,"%s/%s",impl->dir,(char*)pvl_data(impl->directory_iterator)); - - icalcluster_free(impl->cluster); - - impl->cluster = icalcluster_new(path); - - return icalerrno; -} - -void icalstore_add_uid(icalstore* store, icalstore* comp) -{ - char uidstring[PATH_MAX]; - icalproperty *uid; - struct utsname unamebuf; - - icalerror_check_arg_rv( (store!=0), "store"); - icalerror_check_arg_rv( (comp!=0), "comp"); - - uid = icalcomponent_get_first_property(comp,ICAL_UID_PROPERTY); - - if (uid == 0) { - - uname(&unamebuf); - - sprintf(uidstring,"%d-%s",(int)getpid(),unamebuf.nodename); - - uid = icalproperty_new_uid(uidstring); - icalcomponent_add_property(comp,uid); - } else { - - strcpy(uidstring,icalproperty_get_uid(uid)); - } -} - - -/* This assumes that the top level component is a VCALENDAR, and there - is an inner component of type VEVENT, VTODO or VJOURNAL. The inner - component must have a DTSTART property */ - -icalerrorenum icalstore_add_component(icalstore* store, icalstore* comp) -{ - struct icalstore_impl *impl; - char clustername[PATH_MAX]; - icalproperty *dt, *count; - icalvalue *v; - struct icaltimetype tm; - icalerrorenum error = ICAL_NO_ERROR; - icalcomponent *inner; - - impl = (struct icalstore_impl*)store; - icalerror_check_arg_rz( (store!=0), "store"); - icalerror_check_arg_rz( (comp!=0), "comp"); - - errno = 0; - - icalstore_add_uid(store,comp); - - /* Determine which cluster this object belongs in. This is a HACK */ - - for(inner = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); - inner != 0; - inner = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ - - dt = icalcomponent_get_first_property(inner,ICAL_DTSTART_PROPERTY); - - if (dt != 0){ - break; - } - } - - if (dt == 0){ - icalerror_warn("The component does not have a DTSTART property, so it cannot be added to the store"); - icalerror_set_errno(ICAL_BADARG_ERROR); - return ICAL_BADARG_ERROR; - } - - v = icalproperty_get_value(dt); - - tm = icalvalue_get_datetime(v); - - snprintf(clustername,PATH_MAX,"%s/%04d%02d",impl->dir,tm.year,tm.month); - - /* Load the cluster and insert the object */ - - if(impl->cluster != 0 && - strcmp(clustername,icalcluster_path(impl->cluster)) != 0 ){ - icalcluster_free(impl->cluster); - impl->cluster = 0; - } - - if (impl->cluster == 0){ - impl->cluster = icalcluster_new(clustername); - - if (impl->cluster == 0){ - error = icalerrno; - } - } - - if (error != ICAL_NO_ERROR){ - icalerror_set_errno(error); - return error; - } - - /* Add the component to the cluster */ - - icalcluster_add_component(impl->cluster,comp); - - - /* Increment the clusters count value */ - count = icalcomponent_get_first_property( - icalcluster_get_component(impl->cluster), - ICAL_XLICCLUSTERCOUNT_PROPERTY); - - if (count == 0){ - icalerror_set_errno(ICAL_INTERNAL_ERROR); - return ICAL_INTERNAL_ERROR; - } - - icalproperty_set_xlicclustercount(count, - icalproperty_get_xlicclustercount(count)+1); - - - icalcluster_mark(impl->cluster); - - return ICAL_NO_ERROR; -} - -/* Remove a component in the current cluster */ -icalerrorenum icalstore_remove_component(icalstore* store, icalstore* comp) -{ - struct icalstore_impl *impl = (struct icalstore_impl*)store; - icalproperty *count; - - icalerror_check_arg_re((store!=0),"store",ICAL_BADARG_ERROR); - icalerror_check_arg_re((comp!=0),"comp",ICAL_BADARG_ERROR); - icalerror_check_arg_re((impl->cluster!=0),"Cluster pointer",ICAL_USAGE_ERROR); - -/* HACK The following code should be used to ensure that the component - the caller is trying to remove is actually in the cluster, but it - resets the internal iterators, which immediately ends any loops over - the cluster the caller may have in progress - - for(c = icalcluster_get_first_component( - impl->cluster, - ICAL_ANY_COMPONENT); - c != 0; - c = icalcluster_get_next_component( - impl->cluster, - ICAL_ANY_COMPONENT)){ - - if (c == comp){ - found = 1; - } - - } - - if (found != 1){ - icalerror_warn("icalstore_remove_component: component is not part of current cluster"); - icalerror_set_errno(ICAL_USAGE_ERROR); - return ICAL_USAGE_ERROR; - } - -*/ - - icalcluster_remove_component(impl->cluster, - comp); - - icalcluster_mark(impl->cluster); - - /* Decrement the clusters count value */ - count = icalcomponent_get_first_property( - icalcluster_get_component(impl->cluster), - ICAL_XLICCLUSTERCOUNT_PROPERTY); - - if (count == 0){ - icalerror_set_errno(ICAL_INTERNAL_ERROR); - return ICAL_INTERNAL_ERROR; - } - - icalproperty_set_xlicclustercount(count, - icalproperty_get_xlicclustercount(count)-1); - - return ICAL_NO_ERROR; -} - -/* Convert a VQUERY component into a gauge */ -icalcomponent* icalstore_make_gauge(icalcomponent* query); - -/* icalstore_test compares a component against a gauge, and returns - true if the component passes the test - - The gauge is a VCALENDAR component that specifies how to test the - target components. The guage holds a collection of VEVENT, VTODO or - VJOURNAL sub-components. Each of the sub-components has a - collection of properties that are compared to corresponding - properties in the target component, according to the - X-LIC-COMPARETYPE parameters to the gauge's properties. - - When a gauge has several sub-components, the results of testing the - target against each of them is ORed together - the target - component will pass if it matches any of the sub-components in the - gauge. However, the results of matching the proeprties in a - sub-component are ANDed -- the target must match every property in - a gauge sub-component to match the sub-component. - - Here is an example: - - BEGIN:XROOT - BEGIN:VCOMPONENT - BEGIN:VEVENT - DTSTART;X-LIC-COMPARETYPE=LESS:19981025T020000 - ORGANIZER;X-LIC-COMPARETYPE=EQUAL:mrbig@host.com - END:VEVENT - BEGIN:VEVENT - LOCATION;X-LIC-COMPARETYPE=EQUAL:McNary's Pub - END:VEVENT - END:VCALENDAR - END:XROOT - - This gauge has two sub-components; one which will match a VEVENT - based on start time, and organizer, and another that matches based - on LOCATION. A target component will pass the test if it matched - either of the sub-components. - - */ - - -int icalstore_test_recurse(icalcomponent* comp, icalcomponent* gauge) -{ - int pass = 1,localpass = 0; - icalproperty *p; - icalcomponent *child,*subgauge; - icalcomponent_kind gaugekind, compkind; - - icalerror_check_arg_rz( (comp!=0), "comp"); - icalerror_check_arg_rz( (gauge!=0), "gauge"); - - gaugekind = icalcomponent_isa(gauge); - compkind = icalcomponent_isa(comp); - - if( ! (gaugekind == compkind || gaugekind == ICAL_ANY_COMPONENT) ){ - return 0; - } - - /* Test properties. For each property in the gauge, search through - the component for a similar property. If one is found, compare - the two properties value with the comparison specified in the - gauge with the X-LIC-COMPARETYPE parameter */ - - for(p = icalcomponent_get_first_property(gauge,ICAL_ANY_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(gauge,ICAL_ANY_PROPERTY)){ - - icalproperty* targetprop; - icalparameter* compareparam; - icalparameter_xliccomparetype compare; - int rel; /* The relationship between the gauge and target values.*/ - - /* Extract the comparison type from the gauge. If there is no - comparison type, assume that it is "EQUAL" */ - - compareparam = icalproperty_get_first_parameter( - p, - ICAL_XLICCOMPARETYPE_PARAMETER); - - if (compareparam!=0){ - compare = icalparameter_get_xliccomparetype(compareparam); - } else { - compare = ICAL_XLICCOMPARETYPE_EQUAL; - } - - /* Find a property in the component that has the same type - as the gauge property. HACK -- multiples of a single - property type in the gauge will match only the first - instance in the component */ - - targetprop = icalcomponent_get_first_property(comp, - icalproperty_isa(p)); - - if(targetprop != 0){ - - /* Compare the values of the gauge property and the target - property */ - - rel = icalvalue_compare(icalproperty_get_value(p), - icalproperty_get_value(targetprop)); - - /* Now see if the comparison is equavalent to the comparison - specified in the gauge */ - - if (rel == compare){ - localpass++; - } else if (compare == ICAL_XLICCOMPARETYPE_LESSEQUAL && - ( rel == ICAL_XLICCOMPARETYPE_LESS || - rel == ICAL_XLICCOMPARETYPE_EQUAL)) { - localpass++; - } else if (compare == ICAL_XLICCOMPARETYPE_GREATEREQUAL && - ( rel == ICAL_XLICCOMPARETYPE_GREATER || - rel == ICAL_XLICCOMPARETYPE_EQUAL)) { - localpass++; - } else if (compare == ICAL_XLICCOMPARETYPE_NOTEQUAL && - ( rel == ICAL_XLICCOMPARETYPE_GREATER || - rel == ICAL_XLICCOMPARETYPE_LESS)) { - localpass++; - } else { - localpass = 0; - } - - pass = pass && (localpass>0); - } - } - - /* Test subcomponents. Look for a child component that has a - counterpart in the gauge. If one is found, recursively call - icalstore_test */ - - for(subgauge = icalcomponent_get_first_component(gauge,ICAL_ANY_COMPONENT); - subgauge != 0; - subgauge = icalcomponent_get_next_component(gauge,ICAL_ANY_COMPONENT)){ - - gaugekind = icalcomponent_isa(subgauge); - - if (gaugekind == ICAL_ANY_COMPONENT){ - child = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); - } else { - child = icalcomponent_get_first_component(comp,gaugekind); - } - - if(child !=0){ - localpass = icalstore_test_recurse(child,subgauge); - pass = pass && localpass; - } else { - pass = 0; - } - } - - return pass; -} - -/* guagecontainer is an XROOT component that holds several gauges. The - results of comparing against these gauges are ORed together in this - routine */ -int icalstore_test(icalcomponent* comp, icalcomponent* gaugecontainer) -{ - int pass = 0; - icalcomponent *gauge; - - icalerror_check_arg_rz( (comp!=0), "comp"); - icalerror_check_arg_rz( (gauge!=0), "gauge"); - - for(gauge = icalcomponent_get_first_component(gaugecontainer,ICAL_ANY_COMPONENT); - gauge != 0; - gauge = icalcomponent_get_next_component(gaugecontainer,ICAL_ANY_COMPONENT)){ - - pass += icalstore_test_recurse(comp, gauge); - } - - return pass>0; - -} - -icalcomponent* icalstore_query(icalstore* store, icalstore* query); - - -icalcomponent* icalstore_fetch(icalstore* store, char* uid) -{ - icalcomponent *gauge; - icalcomponent *old_gauge; - icalcomponent *c; - struct icalstore_impl *impl = (struct icalstore_impl*)store; - - icalerror_check_arg_rz( (store!=0), "store"); - icalerror_check_arg_rz( (uid!=0), "uid"); - - gauge = - icalcomponent_vanew( - ICAL_VCALENDAR_COMPONENT, - icalcomponent_vanew( - ICAL_VEVENT_COMPONENT, - icalproperty_vanew_uid( - uid, - icalparameter_new_xliccomparetype( - ICAL_XLICCOMPARETYPE_EQUAL), - 0), - 0), - 0); - - old_gauge = impl->gauge; - impl->gauge = gauge; - - c= icalstore_get_first_component(store); - - impl->gauge = old_gauge; - - icalcomponent_free(gauge); - - return c; -} - - -int icalstore_has_uid(icalstore* store, char* uid) -{ - icalcomponent *c; - - icalerror_check_arg_rz( (store!=0), "store"); - icalerror_check_arg_rz( (uid!=0), "uid"); - - /* HACK. This is a temporary implementation. _has_uid should use a - database, and _fetch should use _has_uid, not the other way - around */ - c = icalstore_fetch(store,uid); - - return c!=0; - -} - - -icalerrorenum icalstore_select(icalstore* store, icalcomponent* gauge) -{ - struct icalstore_impl *impl = (struct icalstore_impl*)store; - - icalerror_check_arg_re( (store!=0), "store",ICAL_BADARG_ERROR); - icalerror_check_arg_re( (gauge!=0), "gauge",ICAL_BADARG_ERROR); - - if (!icalcomponent_is_valid(gauge)){ - return ICAL_BADARG_ERROR; - } - - impl->gauge = gauge; - - return ICAL_NO_ERROR; -} - - - -icalcomponent* icalstore_get_first_component(icalstore* store) -{ - struct icalstore_impl *impl = (struct icalstore_impl*)store; - icalerrorenum error; - char path[PATH_MAX]; - - error = icalstore_read_directory(impl); - - if (error != ICAL_NO_ERROR){ - icalerror_set_errno(error); - return 0; - } - - impl->directory_iterator = pvl_head(impl->directory); - - if (impl->directory_iterator == 0){ - icalerror_set_errno(error); - return 0; - } - - sprintf(path,"%s/%s",impl->dir,(char*)pvl_data(impl->directory_iterator)); - - /* If the next cluster we need is different than the current cluster, - delete the current one and get a new one */ - - if(impl->cluster != 0 && strcmp(path,icalcluster_path(impl->cluster)) != 0 ){ - icalcluster_free(impl->cluster); - impl->cluster = 0; - } - - if (impl->cluster == 0){ - impl->cluster = icalcluster_new(path); - - if (impl->cluster == 0){ - error = icalerrno; - } - } - - if (error != ICAL_NO_ERROR){ - icalerror_set_errno(error); - return 0; - } - - impl->first_component = 1; - - return icalstore_get_next_component(store); -} - -icalcomponent* icalstore_get_next_component(icalstore* store) -{ - struct icalstore_impl *impl; - icalcomponent *c; - icalerrorenum error; - - icalerror_check_arg_rz( (store!=0), "store"); - - impl = (struct icalstore_impl*)store; - - if(impl->cluster == 0){ - - icalerror_warn("icalstore_get_next_component called with a NULL cluster (Caller must call icalstore_get_first_component first"); - icalerror_set_errno(ICAL_USAGE_ERROR); - return 0; - - } - - /* Set the component iterator for the following for loop */ - if (impl->first_component == 1){ - icalcluster_get_first_component( - impl->cluster, - ICAL_ANY_COMPONENT); - impl->first_component = 0; - } else { - icalcluster_get_next_component( - impl->cluster, - ICAL_ANY_COMPONENT); - } - - - while(1){ - /* Iterate through all of the objects in the cluster*/ - for( c = icalcluster_get_current_component( - impl->cluster); - c != 0; - c = icalcluster_get_next_component( - impl->cluster, - ICAL_ANY_COMPONENT)){ - - /* If there is a gauge defined and the component does not - pass the gauge, skip the rest of the loop */ - if (impl->gauge != 0 && icalstore_test(c,impl->gauge) == 0){ - continue; - } - - /* Either there is no gauge, or the component passed the - gauge, so return it*/ - - return c; - } - - /* Fell through the loop, so the component we want is not - in this cluster. Load a new cluster and try again.*/ - - error = icalstore_next_cluster(store); - - if(impl->cluster == 0 || error != ICAL_NO_ERROR){ - /* No more clusters */ - return 0; - } else { - c = icalcluster_get_first_component( - impl->cluster, - ICAL_ANY_COMPONENT); - } - } -} - - - - - - - diff --git a/libical/src/libicalss/icalstore.h b/libical/src/libicalss/icalstore.h deleted file mode 100644 index 13e0a182b5..0000000000 --- a/libical/src/libicalss/icalstore.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- Mode: C -*- */ -/*====================================================================== - FILE: icalstore.h - CREATOR: eric 28 November 1999 - - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - -======================================================================*/ - -#ifndef ICALSTORE_H -#define ICALSTORE_H - -#include "ical.h" -#include "icalerror.h" -typedef void icalstore; - -/* icalstore Routines for storing, fetching, and searching for ical - * objects in a database */ - -icalstore* icalstore_new(char* dir); - -void icalstore_free(icalstore* store); - -/* Add a new component to the store */ -icalerrorenum icalstore_add_component(icalstore* store, icalstore* comp); - -/* Remove a component from the store */ -icalerrorenum icalstore_remove_component(icalstore* store, icalstore* comp); - -/* Restrict the component returned by icalstore_first, _next to those - that pass the gauge */ -icalerrorenum icalstore_select(icalstore* store, icalcomponent* gauge); - -/* Return true if a component passes the gauge */ -int icalstore_test(icalcomponent* comp, icalcomponent* gauge); - -/* Clear the restrictions set by icalstore_select */ -void icalstore_clear(icalstore* store); - -/* Get a single component by uid */ -icalcomponent* icalstore_fetch(icalstore* store, char* uid); - -/* Return true of the store has an object with the given UID */ -int icalstore_has_uid(icalstore* store, char* uid); - -/* Return the first component in the store, or first that passes the gauge.*/ -icalcomponent* icalstore_get_first_component(icalstore* store); - -/* Return the next component in the store, or next that passes the gauge.*/ -icalcomponent* icalstore_get_next_component(icalstore* store); - - -int icalstore_next_uid_number(icalstore* store); - - -#endif /* !ICALSTORE_H */ - - - diff --git a/libical/src/pvl/Makefile b/libical/src/pvl/Makefile deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/libical/src/test/.cvsignore b/libical/src/test/.cvsignore deleted file mode 100644 index 75f6fc03a2..0000000000 --- a/libical/src/test/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -Makefile -usecases -copycluster -regression -icalparser -findobj -.deps -.libs -parser -storage -Makefile.in -stow \ No newline at end of file diff --git a/libical/src/test/Makefile.am b/libical/src/test/Makefile.am deleted file mode 100644 index 81ffff8c39..0000000000 --- a/libical/src/test/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ - -noinst_PROGRAMS = usecases copycluster regression parser findobj storage stow - -LDADD = ../libical/libical.a ../libicalss/libicalss.a -INCLUDES = \ - -I . \ - -I $(srcdir) \ - -I../libical \ - -I $(srcdir)/../libical \ - -I../libicalss \ - -I $(srcdir)/../libicalss - -findobj_SOURCES = findobj.c -usecases_SOURCES = usecases.c -copycluster_SOURCES = copycluster.c -regression_SOURCES = regression.c -parser_SOURCES = icaltestparser.c -storage_SOURCES = storage.c -stow_SOURCES = stow.c \ No newline at end of file diff --git a/libical/src/test/Makefile.in b/libical/src/test/Makefile.in deleted file mode 100644 index 8a7cf257c3..0000000000 --- a/libical/src/test/Makefile.in +++ /dev/null @@ -1,385 +0,0 @@ -# Makefile.in generated automatically by automake 1.4 from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = ../.. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -host_alias = @host_alias@ -host_triplet = @host@ -AR = @AR@ -AS = @AS@ -CC = @CC@ -DLLTOOL = @DLLTOOL@ -LEX = @LEX@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -MAKEINFO = @MAKEINFO@ -OBJDUMP = @OBJDUMP@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -VERSION = @VERSION@ -YACC = @YACC@ - -noinst_PROGRAMS = usecases copycluster regression parser findobj storage stow - -LDADD = ../libical/libical.a ../libicalss/libicalss.a -INCLUDES = -I . -I $(srcdir) -I../libical -I $(srcdir)/../libical -I../libicalss -I $(srcdir)/../libicalss - - -findobj_SOURCES = findobj.c -usecases_SOURCES = usecases.c -copycluster_SOURCES = copycluster.c -regression_SOURCES = regression.c -parser_SOURCES = icaltestparser.c -storage_SOURCES = storage.c -stow_SOURCES = stow.c -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../../config.h -CONFIG_CLEAN_FILES = -PROGRAMS = $(noinst_PROGRAMS) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I../.. -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -usecases_OBJECTS = usecases.o -usecases_LDADD = $(LDADD) -usecases_DEPENDENCIES = ../libical/libical.a ../libicalss/libicalss.a -usecases_LDFLAGS = -copycluster_OBJECTS = copycluster.o -copycluster_LDADD = $(LDADD) -copycluster_DEPENDENCIES = ../libical/libical.a \ -../libicalss/libicalss.a -copycluster_LDFLAGS = -regression_OBJECTS = regression.o -regression_LDADD = $(LDADD) -regression_DEPENDENCIES = ../libical/libical.a ../libicalss/libicalss.a -regression_LDFLAGS = -parser_OBJECTS = icaltestparser.o -parser_LDADD = $(LDADD) -parser_DEPENDENCIES = ../libical/libical.a ../libicalss/libicalss.a -parser_LDFLAGS = -findobj_OBJECTS = findobj.o -findobj_LDADD = $(LDADD) -findobj_DEPENDENCIES = ../libical/libical.a ../libicalss/libicalss.a -findobj_LDFLAGS = -storage_OBJECTS = storage.o -storage_LDADD = $(LDADD) -storage_DEPENDENCIES = ../libical/libical.a ../libicalss/libicalss.a -storage_LDFLAGS = -stow_OBJECTS = stow.o -stow_LDADD = $(LDADD) -stow_DEPENDENCIES = ../libical/libical.a ../libicalss/libicalss.a -stow_LDFLAGS = -CFLAGS = @CFLAGS@ -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -DIST_COMMON = Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) - -TAR = gtar -GZIP_ENV = --best -DEP_FILES = .deps/copycluster.P .deps/findobj.P .deps/icaltestparser.P \ -.deps/regression.P .deps/storage.P .deps/stow.P .deps/usecases.P -SOURCES = $(usecases_SOURCES) $(copycluster_SOURCES) $(regression_SOURCES) $(parser_SOURCES) $(findobj_SOURCES) $(storage_SOURCES) $(stow_SOURCES) -OBJECTS = $(usecases_OBJECTS) $(copycluster_OBJECTS) $(regression_OBJECTS) $(parser_OBJECTS) $(findobj_OBJECTS) $(storage_OBJECTS) $(stow_OBJECTS) - -all: all-redirect -.SUFFIXES: -.SUFFIXES: .S .c .lo .o .s -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu src/test/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -mostlyclean-noinstPROGRAMS: - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) - -distclean-noinstPROGRAMS: - -maintainer-clean-noinstPROGRAMS: - -.s.o: - $(COMPILE) -c $< - -.S.o: - $(COMPILE) -c $< - -mostlyclean-compile: - -rm -f *.o core *.core - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -.s.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -.S.lo: - $(LIBTOOL) --mode=compile $(COMPILE) -c $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -usecases: $(usecases_OBJECTS) $(usecases_DEPENDENCIES) - @rm -f usecases - $(LINK) $(usecases_LDFLAGS) $(usecases_OBJECTS) $(usecases_LDADD) $(LIBS) - -copycluster: $(copycluster_OBJECTS) $(copycluster_DEPENDENCIES) - @rm -f copycluster - $(LINK) $(copycluster_LDFLAGS) $(copycluster_OBJECTS) $(copycluster_LDADD) $(LIBS) - -regression: $(regression_OBJECTS) $(regression_DEPENDENCIES) - @rm -f regression - $(LINK) $(regression_LDFLAGS) $(regression_OBJECTS) $(regression_LDADD) $(LIBS) - -parser: $(parser_OBJECTS) $(parser_DEPENDENCIES) - @rm -f parser - $(LINK) $(parser_LDFLAGS) $(parser_OBJECTS) $(parser_LDADD) $(LIBS) - -findobj: $(findobj_OBJECTS) $(findobj_DEPENDENCIES) - @rm -f findobj - $(LINK) $(findobj_LDFLAGS) $(findobj_OBJECTS) $(findobj_LDADD) $(LIBS) - -storage: $(storage_OBJECTS) $(storage_DEPENDENCIES) - @rm -f storage - $(LINK) $(storage_LDFLAGS) $(storage_OBJECTS) $(storage_LDADD) $(LIBS) - -stow: $(stow_OBJECTS) $(stow_DEPENDENCIES) - @rm -f stow - $(LINK) $(stow_LDFLAGS) $(stow_OBJECTS) $(stow_LDADD) $(LIBS) - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - here=`pwd` && cd $(srcdir) \ - && mkid -f$$here/ID $$unique $(LISP) - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS)'; \ - unique=`for i in $$list; do echo $$i; done | \ - awk ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ - || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -subdir = src/test - -distdir: $(DISTFILES) - here=`cd $(top_builddir) && pwd`; \ - top_distdir=`cd $(top_distdir) && pwd`; \ - distdir=`cd $(distdir) && pwd`; \ - cd $(top_srcdir) \ - && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/test/Makefile - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pr $$d/$$file $(distdir)/$$file; \ - else \ - test -f $(distdir)/$$file \ - || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - -DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) - --include $(DEP_FILES) - -mostlyclean-depend: - -clean-depend: - -distclean-depend: - -rm -rf .deps - -maintainer-clean-depend: - -%.o: %.c - @echo '$(COMPILE) -c $<'; \ - $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-cp .deps/$(*F).pp .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm .deps/$(*F).pp - -%.lo: %.c - @echo '$(LTCOMPILE) -c $<'; \ - $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< - @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ - < .deps/$(*F).pp > .deps/$(*F).P; \ - tr ' ' '\012' < .deps/$(*F).pp \ - | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ - >> .deps/$(*F).P; \ - rm -f .deps/$(*F).pp -info-am: -info: info-am -dvi-am: -dvi: dvi-am -check-am: all-am -check: check-am -installcheck-am: -installcheck: installcheck-am -install-exec-am: -install-exec: install-exec-am - -install-data-am: -install-data: install-data-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-am -uninstall-am: -uninstall: uninstall-am -all-am: Makefile $(PROGRAMS) -all-redirect: all-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install -installdirs: - - -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -maintainer-clean-generic: -mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \ - mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ - mostlyclean-generic - -mostlyclean: mostlyclean-am - -clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \ - clean-depend clean-generic mostlyclean-am - -clean: clean-am - -distclean-am: distclean-noinstPROGRAMS distclean-compile \ - distclean-libtool distclean-tags distclean-depend \ - distclean-generic clean-am - -rm -f libtool - -distclean: distclean-am - -maintainer-clean-am: maintainer-clean-noinstPROGRAMS \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-tags maintainer-clean-depend \ - maintainer-clean-generic distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-am - -.PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \ -clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \ -mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile mostlyclean-libtool distclean-libtool \ -clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir \ -mostlyclean-depend distclean-depend clean-depend \ -maintainer-clean-depend info-am info dvi-am dvi check check-am \ -installcheck-am installcheck install-exec-am install-exec \ -install-data-am install-data install-am install uninstall-am uninstall \ -all-redirect all-am all installdirs mostlyclean-generic \ -distclean-generic clean-generic maintainer-clean-generic clean \ -mostlyclean distclean maintainer-clean - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/libical/src/test/alice/booked/199706 b/libical/src/test/alice/booked/199706 deleted file mode 100644 index 8ad5c7d8b1..0000000000 --- a/libical/src/test/alice/booked/199706 +++ /dev/null @@ -1,317 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :13 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -COMMENT - :DUKES forfeit the game -SEQUENCE - :2 -UID - :0981234-1234234-23@example.com -DTSTAMP - :19970613T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ATTENDEE - ;PARTSTAT=ACCEPTED - :Mailto:B@example.com -ORGANIZER - :MAILTO:A@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970612T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -COMMENT - :Sorry -COMMENT - : I cannot change this meeting time -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -DTSTAMP - :19970614T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970611T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=ACCEPTED - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970614T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -ATTENDEE - ;PARTSTAT=DECLINED - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -COMMENT - :Sorry -COMMENT - : I will be out of town at that time. -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970614T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :A@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'Mailto' -ATTENDEE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -COMMENT - :Mr. B cannot attend. It's raining. Lets cancel. -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :1 -STATUS - :CANCELLED -DTSTAMP - :19970613T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :mailto:B@example.com -COMMENT - :You're off the hook for this meeting -UID - :calsrv.example.com-873970198738777@example.com -DTSTAMP - :19970613T193000Z -SEQUENCE - :1 -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :guid-1@host1.com -SEQUENCE - :0 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=MONTHLY\;BYMONTHDAY=1\;UNTIL=19980901T210000Z' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970601T210000Z -DTEND - :19970601T220000Z -LOCATION - :Conference Call -DTSTAMP - :19970526T083000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :guid-1@host1.com -SEQUENCE - :0 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=MONTHLY\;BYMONTHDAY=1' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970601T210000Z -DTEND - :19970601T220000Z -DTSTAMP - :19970602T094000Z -LOCATION - :Conference Call -STATUS - :CONFIRMED -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR - :Parse error in property name: 'FOO' -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -REQUEST-STATUS - :2.8\;Repeating event ignored. Scheduled as a single event\;RRULE -REQUEST-STATUS - :3.0\;Invalid Property Name\;FOO -UID - :guid-1@host1.com -SEQUENCE - :0 -DTSTAMP - :19970603T094000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -UID - : guid-1-12345@host1.com -DTSTAMP - :19970603T094000 -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -UID - :acme-12345@host1.com -DTSTAMP - :19970603T094000 -LAST-MODIFIED - :20000209T060028Z -END:VEVENT -END:VCALENDAR diff --git a/libical/src/test/alice/booked/199707 b/libical/src/test/alice/booked/199707 deleted file mode 100644 index c52d27aa91..0000000000 --- a/libical/src/test/alice/booked/199707 +++ /dev/null @@ -1,701 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :19 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -DTSTART - :19970701T200000Z -DTSTAMP - :19970611T190000Z -SUMMARY - :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID - :0981234-1234234-23@example.com -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -DTSTAMP - :19970612T190000Z -DTSTART - :19970701T210000Z -DTEND - :19970701T230000Z -SEQUENCE - :1 -UID - :0981234-1234234-23@example.com -SUMMARY - :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -ATTACH - :http://www.dukes.com/ -CATEGORIES - :SPORTS EVENT -CATEGORIES - :ENTERTAINMENT -CLASS - :PRIVATE -DESCRIPTION - :MIDWAY STADIUM\nBig time game. MUST see.\nExpected duration:2 hours\n -DTEND - ;TZID=America-Chicago - :19970701T180000 -DTSTART - ;TZID=America-Chicago - :19970702T160000 -DTSTAMP - :19970614T190000Z -STATUS - :CONFIRMED -LOCATION - :http://www.midwaystadium.com/ -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter value: 'VALUE=America-Chicago' -PRIORITY - :2 -RESOURCES - :SCOREBOARD -SEQUENCE - :3 -SUMMARY - :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID - :0981234-1234234-23@example.com -RELATED-TO - :0981234-1234234-14@example.com -LAST-MODIFIED - :20000209T060027Z -BEGIN:VALARM -TRIGGER - :PT2H -ACTION - :DISPLAY -DESCRIPTION - :You should be leaving for the game now. -END:VALARM -BEGIN:VALARM -TRIGGER - :PT30M -ACTION - :AUDIO -END:VALARM -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -DTSTAMP - :19970614T190000Z -UID - :0981234-1234234-23@example.com -DTSTART - ;VALUE=DATE - :19970714 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=YEARLY\;INTERVAL=1' -SUMMARY - : Bastille Day -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - ;CN=BIG A - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - ;CN=B - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - ;CN=C - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - ;CN=Hal - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=FALSE - :conf_Big@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=ROOM' -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - :Mailto:E@example.com -DTSTAMP - :19970611T190000Z -DTSTART - :19970701T200000Z -DTEND - :19970701T200000Z -SUMMARY - :Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - ;CN=Hal - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - ;CUTYPE=ROOM - :Mailto:Conf@example.com -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - :Mailto:E@example.com -DTSTART - :19970701T180000Z -DTEND - :19970701T190000Z -SUMMARY - :Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :1 -DTSTAMP - :19970613T190000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTART - :19970701T190000Z -DTEND - :19970701T200000Z -SUMMARY - :Discuss the Merits of the election results -LOCATION - :Green Conference Room -UID - :calsrv.example.com-873970198738777a@example.com -SEQUENCE - :0 -DTSTAMP - :19970611T190000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTART - :19970701T160000Z -DTEND - :19970701T190000Z -DTSTAMP - :19970612T190000Z -SUMMARY - :Discuss the Merits of the election results -LOCATION - :Green Conference Room -COMMENT - :This time works much better and I think the big conference room is - too big -UID - :calsrv.example.com-873970198738777a@example.com -SEQUENCE - :0 -DTSTAMP - :19970611T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTAMP - :19970613T190000Z -DTSTART - :19970701T160000Z -DTEND - :19970701T190000Z -SUMMARY - :Discuss the Merits of the election results - changed to meet B's schedule -LOCATION - :Green Conference Room -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :1 -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -DTSTART - :19970701T180000Z -DTEND - :19970701T200000Z -SUMMARY - :Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -STATUS - :CONFIRMED -DTSTAMP - :19970611T190000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=DECLINED - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -SUMMARY - :Phone Conference -DTSTART - :19970701T180000Z -DTEND - :19970701T200000Z -DTSTAMP - :19970614T200000Z -COMMENT - :DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOURINVITATION -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :CR_Big@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=ROOM' -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - :Mailto:E@example.com -DTSTAMP - :19970611T190000Z -DTSTART - :19970701T200000Z -DTEND - :19970701T203000Z -SUMMARY - :Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :2 -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:B@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'STATUS=ACCEPTED' -ATTENDEE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTAMP - :19970611T190000Z -DTSTART - :19970701T200000Z -DTEND - :19970701T203000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=WEEKLY' -SUMMARY - :Phone Conference -UID - :123456@example.com -SEQUENCE - :1 -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :A@example.COM -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :B@example.fr -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :c@example.jp -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTAMP - :19970613T190030Z -DTSTART - ;TZID=America-SanJose - :19970701T140000 -DTEND - ;TZID=America-SanJose - :19970701T150000 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=WEEKLY\;INTERVAL=20\;WKST=SU\;BYDAY=TU' -RDATE - ;TZID=America-SanJose - :19970910T140000 -EXDATE - ;TZID=America-SanJose - :19970909T140000 -EXDATE - ;TZID=America-SanJose - :19971028T140000 -SUMMARY - :Weekly Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :guid-1@host1com -RECURRENCE-ID - :19970701T210000Z -SEQUENCE - :1 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970703T210000Z -DTEND - :19970703T220000Z -LOCATION - :Conference Call -DTSTAMP - :19970626T093000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :guid-1@host1.com -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -RECURRENCE-ID - :19970801T210000Z -SEQUENCE - :2 -STATUS - :CANCELLED -DTSTAMP - :19970721T093000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :guid-1@host1.com -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -DTSTAMP - :19970721T103000Z -STATUS - :CANCELLED -SEQUENCE - :3 -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :4 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970715T210000Z -DTEND - :19970715T220000Z -LOCATION - :Conference Call -DTSTAMP - :19970629T093000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :guid-1@host1.com -RECURRENCE-ID - :19970715T210000Z -SEQUENCE - :4 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;RSVP=TRUE - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970715T220000Z -DTEND - :19970715T230000Z -LOCATION - :Conference Call -COMMENT - :May we bump this by an hour? I have a conflict -DTSTAMP - :19970629T094000Z -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -END:VCALENDAR diff --git a/libical/src/test/alice/booked/199708 b/libical/src/test/alice/booked/199708 deleted file mode 100644 index 2db95cabcf..0000000000 --- a/libical/src/test/alice/booked/199708 +++ /dev/null @@ -1,45 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :1 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VEVENT -UID - :acme-12345@host1.com -SEQUENCE - :3 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=WEEKLY' -RDATE - ;VALUE=PERIOD - :19970819T210000Z/19970081T220000Z -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -DESCRIPTION - :IETF-C&S Conference Call -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970801T210000Z -DTEND - :19970801T220000Z -RECURRENCE-ID - :19970809T210000Z -DTSTAMP - :19970726T083000 -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060028Z -END:VEVENT -END:VCALENDAR diff --git a/libical/src/test/alice/booked/199709 b/libical/src/test/alice/booked/199709 deleted file mode 100644 index 30a4471bde..0000000000 --- a/libical/src/test/alice/booked/199709 +++ /dev/null @@ -1,58 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :1 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VEVENT -UID - :guid-1@host1.com -RECURRENCE-ID - :19970901T210000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'THISANDFUTURE' -SEQUENCE - :3 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Discussion -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970901T210000Z -DTEND - :19970901T220000Z -LOCATION - :Building 32 -LOCATION - : Microsoft -LOCATION - : Seattle -LOCATION - : WA -DTSTAMP - :19970526T083000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -END:VCALENDAR diff --git a/libical/src/test/alice/booked/199803 b/libical/src/test/alice/booked/199803 deleted file mode 100644 index 4b673d7ccc..0000000000 --- a/libical/src/test/alice/booked/199803 +++ /dev/null @@ -1,241 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :7 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :0 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'WKST=SU\;BYDAY=TU\;FREQ=WEEKLY' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980303T210000Z -DTEND - :19980303T220000Z -LOCATION - :The White Room -DTSTAMP - :19980301T093000Z -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :7 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'WKST=SU\;BYDAY=TH\;FREQ=WEEKLY' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980303T210000Z -DTEND - :19980303T220000Z -DTSTAMP - :19980303T193000Z -LOCATION - :The Usual conference room -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :7 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'WKST=SU\;BYDAY=TU' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980303T210000Z -DTEND - :19980303T220000Z -DTSTAMP - :19980303T193000Z -LOCATION - :The White Room -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :0 -RDATE - :19980304T180000Z -RDATE - :19980311T180000Z -RDATE - :19980318T180000Z -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980304T180000Z -DTEND - :19980304T200000Z -DTSTAMP - :19980303T193000Z -LOCATION - :Conference Room A -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :1 -RECURRENCE-ID - :19980311T180000Z -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980311T160000Z -DTEND - :19980311T180000Z -DTSTAMP - :19980306T193000Z -LOCATION - :The Small conference room -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :2 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980315T180000Z -DTEND - :19980315T200000Z -DTSTAMP - :19980307T193000Z -LOCATION - :Conference Room A -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :2 -RDATE - :19980304T180000Z -RDATE - :19980311T160000Z -RDATE - :19980315T180000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR - :Got a data line\, but could not find a property name or component - begin tag: 'Error! Bookmark not defined.' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980304T180000Z -DTEND - :19980304T200000Z -DTSTAMP - :19980303T193000Z -LOCATION - :Conference Room A -STATUS - :CONFIRMED -LAST-MODIFIED - :20000209T060027Z -END:VEVENT -END:VCALENDAR diff --git a/libical/src/test/alice/incoming.ics b/libical/src/test/alice/incoming.ics deleted file mode 100644 index c25b6b11c3..0000000000 --- a/libical/src/test/alice/incoming.ics +++ /dev/null @@ -1,2164 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :0 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VCALENDAR -METHOD - :PUBLISH -PRODID - :-//ACME/DesktopCalendar//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -DTSTART - :19970701T200000Z -DTSTAMP - :19970611T190000Z -SUMMARY - :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID - :0981234-1234234-23@example.com -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :PUBLISH -VERSION - :2.0 -PRODID - :-//ACME/DesktopCalendar//EN -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -DTSTAMP - :19970612T190000Z -DTSTART - :19970701T210000Z -DTEND - :19970701T230000Z -SEQUENCE - :1 -UID - :0981234-1234234-23@example.com -SUMMARY - :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :CANCEL -VERSION - :2.0 -PRODID - :-//ACME/DesktopCalendar//EN -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -COMMENT - :DUKES forfeit the game -SEQUENCE - :2 -UID - :0981234-1234234-23@example.com -DTSTAMP - :19970613T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :PUBLISH -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR - :Parse error in property name: 'SCALE' -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTIMEZONE -TZID - :America-Chicago -TZURL - :http://zones.stds_r_us.net/tz/America-Chicago -BEGIN:STANDARD -DTSTART - :19671029T020000 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=YEARLY\;BYDAY=-1SU\;BYMONTH=10' -TZOFFSETFROM - :-050000 -TZOFFSETTO - :-060000 -TZNAME - :CST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART - :19870405T020000 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=YEARLY\;BYDAY=1SU\;BYMONTH=4' -TZOFFSETFROM - :-060000 -TZOFFSETTO - :-050000 -TZNAME - :CDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -ATTACH - :http://www.dukes.com/ -CATEGORIES - :SPORTS EVENT -CATEGORIES - :ENTERTAINMENT -CLASS - :PRIVATE -DESCRIPTION - :MIDWAY STADIUM\nBig time game. MUST see.\nExpected duration:2 hours\n -DTEND - ;TZID=America-Chicago - :19970701T180000 -DTSTART - ;TZID=America-Chicago - :19970702T160000 -DTSTAMP - :19970614T190000Z -STATUS - :CONFIRMED -LOCATION - :http://www.midwaystadium.com/ -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter value: 'VALUE=America-Chicago' -PRIORITY - :2 -RESOURCES - :SCOREBOARD -SEQUENCE - :3 -SUMMARY - :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID - :0981234-1234234-23@example.com -RELATED-TO - :0981234-1234234-14@example.com -BEGIN:VALARM -TRIGGER - :PT2H -ACTION - :DISPLAY -DESCRIPTION - :You should be leaving for the game now. -END:VALARM -BEGIN:VALARM -TRIGGER - :PT30M -ACTION - :AUDIO -END:VALARM -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :PUBLISH -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :mailto:a@example.com -DTSTAMP - :19970614T190000Z -UID - :0981234-1234234-23@example.com -DTSTART - ;VALUE=DATE - :19970714 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=YEARLY\;INTERVAL=1' -SUMMARY - : Bastille Day -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - ;CN=BIG A - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - ;CN=B - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - ;CN=C - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - ;CN=Hal - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=FALSE - :conf_Big@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=ROOM' -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - :Mailto:E@example.com -DTSTAMP - :19970611T190000Z -DTSTART - :19970701T200000Z -DTEND - :19970701T200000Z -SUMMARY - :Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ATTENDEE - ;PARTSTAT=ACCEPTED - :Mailto:B@example.com -ORGANIZER - :MAILTO:A@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970612T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - ;CN=Hal - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - ;CUTYPE=ROOM - :Mailto:Conf@example.com -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - :Mailto:E@example.com -DTSTART - :19970701T180000Z -DTEND - :19970701T190000Z -SUMMARY - :Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :1 -DTSTAMP - :19970613T190000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTART - :19970701T190000Z -DTEND - :19970701T200000Z -SUMMARY - :Discuss the Merits of the election results -LOCATION - :Green Conference Room -UID - :calsrv.example.com-873970198738777a@example.com -SEQUENCE - :0 -DTSTAMP - :19970611T190000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :COUNTER -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTART - :19970701T160000Z -DTEND - :19970701T190000Z -DTSTAMP - :19970612T190000Z -SUMMARY - :Discuss the Merits of the election results -LOCATION - :Green Conference Room -COMMENT - :This time works much better and I think the big conference room is - too big -UID - :calsrv.example.com-873970198738777a@example.com -SEQUENCE - :0 -DTSTAMP - :19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTAMP - :19970613T190000Z -DTSTART - :19970701T160000Z -DTEND - :19970701T190000Z -SUMMARY - :Discuss the Merits of the election results - changed to meet B's schedule -LOCATION - :Green Conference Room -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :1 -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :DECLINECOUNTER -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -COMMENT - :Sorry -COMMENT - : I cannot change this meeting time -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -DTSTAMP - :19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -DTSTART - :19970701T180000Z -DTEND - :19970701T200000Z -SUMMARY - :Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -STATUS - :CONFIRMED -DTSTAMP - :19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=ACCEPTED - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=DELEGATED - ;DELEGATED-TO="Mailto:E@example.com" - :Mailto:C@example.com -ATTENDEE - ;PARTSTAT=DECLINED - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -COMMENT - :Sorry -COMMENT - : I will be out of town at that time. -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -REQUEST-STATUS - :2.0\;Success -DTSTAMP - :19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :MAILTO:A@Example.com -ATTENDEE - ;PARTSTAT=DECLINED - ;DELEGATED-FROM="Mailto:C@example.com" - :Mailto:E@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -SUMMARY - :Phone Conference -DTSTART - :19970701T180000Z -DTEND - :19970701T200000Z -DTSTAMP - :19970614T200000Z -COMMENT - :DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOURINVITATION -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :CANCEL -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :A@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'Mailto' -ATTENDEE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -COMMENT - :Mr. B cannot attend. It's raining. Lets cancel. -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :1 -STATUS - :CANCELLED -DTSTAMP - :19970613T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :CANCEL -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :mailto:B@example.com -COMMENT - :You're off the hook for this meeting -UID - :calsrv.example.com-873970198738777@example.com -DTSTAMP - :19970613T193000Z -SEQUENCE - :1 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :CR_Big@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=ROOM' -ATTENDEE - ;ROLE=NON-PARTICIPANT - ;RSVP=FALSE - :Mailto:E@example.com -DTSTAMP - :19970611T190000Z -DTSTART - :19970701T200000Z -DTEND - :19970701T203000Z -SUMMARY - :Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :2 -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:B@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'STATUS=ACCEPTED' -ATTENDEE - :Mailto:C@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTAMP - :19970611T190000Z -DTSTART - :19970701T200000Z -DTEND - :19970701T203000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=WEEKLY' -SUMMARY - :Phone Conference -UID - :123456@example.com -SEQUENCE - :1 -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -VERSION - :2.0 -METHOD - :PUBLISH -X-LIC-SENDER - :eric@busboom.org -BEGIN:VFREEBUSY -DTSTAMP - :19980101T124100Z -ORGANIZER - :MAILTO:A@Example.com -DTSTART - :19980101T124200Z -DTEND - :19980107T124200Z -FREEBUSY - :19980101T180000Z/19980101T190000Z -FREEBUSY - :19980103T020000Z/19980103T050000Z -FREEBUSY - :19980107T020000Z/19980107T050000Z -FREEBUSY - :19980113T000000Z/19980113T010000Z -FREEBUSY - :19980115T190000Z/19980115T200000Z -FREEBUSY - :19980115T220000Z/19980115T230000Z -FREEBUSY - :19980116T013000Z/19980116T043000Z -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VFREEBUSY -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -DTSTAMP - :19970613T190000Z -DTSTART - :19970701T080000Z -DTEND - :19970701T200000 -UID - :calsrv.example.com-873970198738777@example.com -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VFREEBUSY -ORGANIZER - :MAILTO:A@example.com -ATTENDEE - :Mailto:B@example.com -DTSTART - :19970701T080000Z -DTEND - :19970701T200000Z -UID - :calsrv.example.com-873970198738777@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as PERIOD value in FREEBUSY property. Removing entire - property: '19970701T090000Z/PT1H' -DTSTAMP - :19970613T190030Z -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTIMEZONE -TZID - :America-SanJose -TZURL - :http://zones.stds_r_us.net/tz/America-SanJose -BEGIN:STANDARD -DTSTART - :19671029T020000 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=YEARLY\;BYDAY=-1SU\;BYMONTH=10' -TZOFFSETFROM - :-070000 -TZOFFSETTO - :-080000 -TZNAME - :PST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART - :19870405T020000 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=YEARLY\;BYDAY=1SU\;BYMONTH=4' -TZOFFSETFROM - :-080000 -TZOFFSETTO - :-070000 -TZNAME - :PDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :A@example.COM -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :B@example.fr -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :c@example.jp -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTAMP - :19970613T190030Z -DTSTART - ;TZID=America-SanJose - :19970701T140000 -DTEND - ;TZID=America-SanJose - :19970701T150000 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=WEEKLY\;INTERVAL=20\;WKST=SU\;BYDAY=TU' -RDATE - ;TZID=America-SanJose - :19970910T140000 -EXDATE - ;TZID=America-SanJose - :19970909T140000 -EXDATE - ;TZID=America-SanJose - :19971028T140000 -SUMMARY - :Weekly Phone Conference -UID - :calsrv.example.com-873970198738777@example.com -SEQUENCE - :0 -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1.com -SEQUENCE - :0 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=MONTHLY\;BYMONTHDAY=1\;UNTIL=19980901T210000Z' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970601T210000Z -DTEND - :19970601T220000Z -LOCATION - :Conference Call -DTSTAMP - :19970526T083000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1com -RECURRENCE-ID - :19970701T210000Z -SEQUENCE - :1 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970703T210000Z -DTEND - :19970703T220000Z -LOCATION - :Conference Call -DTSTAMP - :19970626T093000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :CANCEL -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1.com -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -RECURRENCE-ID - :19970801T210000Z -SEQUENCE - :2 -STATUS - :CANCELLED -DTSTAMP - :19970721T093000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :CANCEL -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1.com -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -DTSTAMP - :19970721T103000Z -STATUS - :CANCELLED -SEQUENCE - :3 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1.com -RECURRENCE-ID - :19970901T210000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'THISANDFUTURE' -SEQUENCE - :3 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Discussion -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970901T210000Z -DTEND - :19970901T220000Z -LOCATION - :Building 32 -LOCATION - : Microsoft -LOCATION - : Seattle -LOCATION - : WA -DTSTAMP - :19970526T083000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :ADD -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :4 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970715T210000Z -DTEND - :19970715T220000Z -LOCATION - :Conference Call -DTSTAMP - :19970629T093000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :0 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'WKST=SU\;BYDAY=TU\;FREQ=WEEKLY' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980303T210000Z -DTEND - :19980303T220000Z -LOCATION - :The White Room -DTSTAMP - :19980301T093000Z -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :ADD -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :7 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'WKST=SU\;BYDAY=TH\;FREQ=WEEKLY' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980303T210000Z -DTEND - :19980303T220000Z -DTSTAMP - :19980303T193000Z -LOCATION - :The Usual conference room -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :7 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'WKST=SU\;BYDAY=TU' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980303T210000Z -DTEND - :19980303T220000Z -DTSTAMP - :19980303T193000Z -LOCATION - :The White Room -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :0 -RDATE - :19980304T180000Z -RDATE - :19980311T180000Z -RDATE - :19980318T180000Z -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980304T180000Z -DTEND - :19980304T200000Z -DTSTAMP - :19980303T193000Z -LOCATION - :Conference Room A -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :1 -RECURRENCE-ID - :19980311T180000Z -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980311T160000Z -DTEND - :19980311T180000Z -DTSTAMP - :19980306T193000Z -LOCATION - :The Small conference room -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :ADD -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :2 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980315T180000Z -DTEND - :19980315T200000Z -DTSTAMP - :19980307T193000Z -LOCATION - :Conference Room A -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :123456789@host1.com -SEQUENCE - :2 -RDATE - :19980304T180000Z -RDATE - :19980311T160000Z -RDATE - :19980315T180000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR - :Got a data line\, but could not find a property name or component - begin tag: 'Error! Bookmark not defined.' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -SUMMARY - :Review Accounts -DTSTART - :19980304T180000Z -DTEND - :19980304T200000Z -DTSTAMP - :19980303T193000Z -LOCATION - :Conference Room A -STATUS - :CONFIRMED -END:VEVENT -BEGIN:VEVENT -X-LIC-ERROR - ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR - :Got a data line\, but could not find a property name or component - begin tag: 'Error! Bookmark not defined.' -SEQUENCE - :2 -RECURRENCE-ID - :19980311T160000Z -X-LIC-ERROR - ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR - :Got a data line\, but could not find a property name or component - begin tag: 'Error! Bookmark not defined.' -ATTENDEE - :ROLE=CHAIR;Error! Bookmark not defined. -ATTENDEE - :Error! Bookmark not defined. -SUMMARY - :Review Accounts -DTSTART - :19980311T160000Z -DTEND - :19980304T180000Z -DTSTAMP - :19980306T193000Z -LOCATION - :The Small conference room -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :COUNTER -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1.com -RECURRENCE-ID - :19970715T210000Z -SEQUENCE - :4 -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;RSVP=TRUE - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970715T220000Z -DTEND - :19970715T230000Z -LOCATION - :Conference Call -COMMENT - :May we bump this by an hour? I have a conflict -DTSTAMP - :19970629T094000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :guid-1@host1.com -SEQUENCE - :0 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=MONTHLY\;BYMONTHDAY=1' -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DESCRIPTION - :IETF-C&S Conference Call -CLASS - :PUBLIC -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970601T210000Z -DTEND - :19970601T220000Z -DTSTAMP - :19970602T094000Z -LOCATION - :Conference Call -STATUS - :CONFIRMED -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR - :Parse error in property name: 'FOO' -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//RDU Software//NONSGML HandCal//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -REQUEST-STATUS - :2.8\;Repeating event ignored. Scheduled as a single event\;RRULE -REQUEST-STATUS - :3.0\;Invalid Property Name\;FOO -UID - :guid-1@host1.com -SEQUENCE - :0 -DTSTAMP - :19970603T094000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:C@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -DTSTART - :19970701T170000Z -DUE - :19970722T170000Z -PRIORITY - :1 -SUMMARY - :Create the requirements document -UID - :calsrv.example.com-873970198738777-00@example.com -SEQUENCE - :0 -DTSTAMP - :19970717T200000Z -STATUS - :Needs Action -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;PARTSTAT=ACCEPTED - :Mailto:B@example.com -UID - :calsrv.example.com-873970198738777-00@example.com -COMMENT - :I'll send you my input by e-mail -SEQUENCE - :0 -DTSTAMP - :19970717T203000Z -REQUEST-STATUS - :2.0\;Success -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -UID - :calsrv.example.com-873970198738777-00@example.com -SUMMARY - :Create the requirements document -PRIORITY - :1 -SEQUENCE - :0 -STATUS - :IN-PROCESS -DTSTART - :19970701T170000Z -DTSTAMP - :19970717T230000Z -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :MAILTO:A@example.com -ATTENDEE - ;PARTSTAT=IN-PROCESS - :Mailto:B@example.com -PERCENT-COMPLETE - :75 -UID - :calsrv.example.com-873970198738777-00@example.com -DTSTAMP - :19970717T233000Z -SEQUENCE - :0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :MAILTO:A@example.com -ATTENDEE - ;PARTSTAT=COMPLETED - :Mailto:D@example.com -UID - :calsrv.example.com-873970198738777-00@example.com -DTSTAMP - :19970717T233000Z -SEQUENCE - :0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - ;PARTSTAT=ACCEPTED - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;PARTSTAT=IN-PROCESS - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -DTSTART - :19970701T170000Z -DUE - :19970722T170000Z -PRIORITY - :1 -SUMMARY - :Create the requirements document -UID - :calsrv.example.com-873970198738777-00@example.com -SEQUENCE - :1 -DTSTAMP - :19970718T100000Z -STATUS - :IN-PROGRESS -PERCENT-COMPLETE - :40 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REQUEST -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - :Mailto:A@example.com -ATTENDEE - ;RSVP=TRUE - :Mailto:B@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -ATTENDEE - ;RSVP=TRUE - :Mailto:D@example.com -X-LIC-ERROR - ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR - :Can't parse parameter name: 'TYPE=INDIVIDUAL' -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=MONTHLY\;COUNT=10\;BYDAY=1FR' -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as DATE-TIME value in DTSTART property. Removing entire - property: '19980101T100000-0700' -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as DATE-TIME value in DUE property. Removing entire property: - '19980103T100000-0700' -SUMMARY - :Send Status Reports to Area Managers -UID - :calsrv.example.com-873970198738777-00@example.com -SEQUENCE - :0 -DTSTAMP - :19970717T200000Z -STATUS - :NEEDS ACTION -PRIORITY - :1 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//ACME/DesktopCalendar//EN -METHOD - :REPLY -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VTODO -ATTENDEE - ;PARTSTAT=IN-PROCESS - :Mailto:B@example.com -PERCENT-COMPLETE - :75 -UID - :calsrv.example.com-873970198738777-00@example.com -DTSTAMP - :19970717T233000Z -RECURRENCE-ID - :19980101T170000Z -SEQUENCE - :1 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :PUBLISH -PRODID - :-//ACME/DesktopCalendar//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VJOURNAL -DTSTART - :19971002T200000Z -ORGANIZER - :MAILTO:A@Example.com -SUMMARY - :Phone conference minutes -DESCRIPTION - :The editors meeting was held on October 1 -DESCRIPTION - : 1997. Details are in the attached document. -UID - :0981234-1234234-2410@example.com -RELATED-TO - :0981234-1234234-2402-35@example.com -ATTACH - :ftp://ftp.example.com/pub/ed/minutes100197.txt -END:VJOURNAL -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//RDU Software//NONSGML HandCal//EN -METHOD - :REFRESH -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -ATTENDEE - :Mailto:C@example.com -ATTENDEE - :Mailto:D@example.com -UID - : guid-1-12345@host1.com -DTSTAMP - :19970603T094000 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD - :REQUEST -PRODID - :-//RDU Software//NONSGML HandCal//EN -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -UID - :acme-12345@host1.com -SEQUENCE - :3 -X-LIC-ERROR - ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR - :Can't parse as RECUR value in RRULE property. Removing entire property: - 'FREQ=WEEKLY' -RDATE - ;VALUE=PERIOD - :19970819T210000Z/19970081T220000Z -ORGANIZER - :Mailto:A@example.com -ATTENDEE - ;ROLE=CHAIR - ;PARTSTAT=ACCEPTED - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -DESCRIPTION - :IETF-C&S Conference Call -SUMMARY - :IETF Calendaring Working Group Meeting -DTSTART - :19970801T210000Z -DTEND - :19970801T220000Z -RECURRENCE-ID - :19970809T210000Z -DTSTAMP - :19970726T083000 -STATUS - :CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID - :-//RDU Software//NONSGML HandCal//EN -METHOD - :REFRESH -VERSION - :2.0 -X-LIC-SENDER - :eric@busboom.org -BEGIN:VEVENT -ORGANIZER - :Mailto:A@example.com -ATTENDEE - :Mailto:B@example.com -UID - :acme-12345@host1.com -DTSTAMP - :19970603T094000 -END:VEVENT -END:VCALENDAR -END:VCALENDAR diff --git a/libical/src/test/copycluster.c b/libical/src/test/copycluster.c deleted file mode 100644 index b059130c13..0000000000 --- a/libical/src/test/copycluster.c +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: copycluster.c - CREATOR: eric 15 January 2000 - - $Id$ - $Locker$ - - (C) COPYRIGHT 2000 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - - ======================================================================*/ - -#include /* for printf */ -#include "ical.h" -#include "icalcluster.h" -#include -#include /* For strerror */ -#include "icalrestriction.h" - -/* This program copies a file that holds iCal components to an other file. */ - - -void usage(char* arg0) { - printf("usage: %s cluster-file1 cluster-file2\n",arg0); -} - -int main(int c, char *argv[]){ - - icalcluster *clusterin, *clusterout; - icalcomponent *itr; - int count=0; - int tostdout = 0; - - if(c < 2 || c > 3){ - usage(argv[0]); - exit(1); - } - - if (c == 2){ - tostdout = 1; - } - - clusterin = icalcluster_new(argv[1]); - - if (clusterin == 0){ - printf("Could not open input cluster \"%s\"",argv[1]); - - exit(1); - } - - if (!tostdout){ - clusterout = icalcluster_new(argv[2]); - if (clusterout == 0){ - printf("Could not open output cluster \"%s\"\n",argv[2]); - exit(1); - } - } - - - for (itr = icalcluster_get_first_component(clusterin, - ICAL_ANY_COMPONENT); - itr != 0; - itr = icalcluster_get_next_component(clusterin, - ICAL_ANY_COMPONENT)){ - - icalrestriction_check(itr); - - if (itr != 0){ - - if(tostdout){ - - printf("--------------\n%s\n",icalcomponent_as_ical_string(itr)); - } else { - - icalcluster_add_component(clusterout, - icalcomponent_new_clone(itr)); - } - - count++; - - } else { - printf("Got NULL component"); - } - } - - - printf("Transfered %d components\n",count); - - icalcluster_free(clusterin); - - if (!tostdout){ - icalcluster_mark(clusterout); - icalcluster_free(clusterout); - } - - return 0; -} - diff --git a/libical/src/test/findobj.c b/libical/src/test/findobj.c deleted file mode 100644 index e7ec59169a..0000000000 --- a/libical/src/test/findobj.c +++ /dev/null @@ -1,71 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: findobj.c - CREATOR: eric 11 February 2000 - - $Id$ - $Locker$ - - (C) COPYRIGHT 2000 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom - - - ======================================================================*/ - -#include /* for printf */ -#include "ical.h" -#include "icalcalendar.h" -#include -#include /* For strerror */ -#include "icalrestriction.h" - -/* This program finds an object stored in a calendar */ - -void usage(char* arg0) { - printf("usage: %s calendar-dir uid\n",arg0); -} - -int main(int c, char *argv[]){ - - icalcalendar *cal; - icalstore *booked; - icalcomponent *itr; - - if(c < 2 || c > 3){ - usage(argv[0]); - exit(1); - } - - cal = icalcalendar_new(argv[1]); - - if(cal == 0){ - fprintf(stderr,"%s: error in opening calendar \"%s\": %s. errno is \"%s\"\n", - argv[0],argv[1],icalerror_strerror(icalerrno), - strerror(errno)); - } - - booked = icalcalendar_get_booked(cal); - - itr = icalstore_fetch(booked,argv[2]); - - - if(itr != 0){ - printf("%s",icalcomponent_as_ical_string(itr)); - } - - return 0; -} - diff --git a/libical/src/test/icaltestparser.c b/libical/src/test/icaltestparser.c deleted file mode 100644 index 98dbcff94f..0000000000 --- a/libical/src/test/icaltestparser.c +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: icaltestparser.c - CREATOR: eric 20 June 1999 - - $Id$ - $Locker$ - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is icaltestparser.c - - - (C) COPYRIGHT 1999 The Software Studio. - http://www.softwarestudio.org - - ======================================================================*/ - -#include -#include -#include -#include -#include "ical.h" - -#include - -char str[] = "BEGIN:VCALENDAR\ -PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ -VERSION:2.0\ -BEGIN:VTIMEZONE\ -TZID:US-Eastern\ -BEGIN:STANDARD\ -DTSTART:19990404T020000\ -RDATE:19990u404xT020000\ -TZOFFSETFROM:-0500\ -TZOFFSETTO:-0400\ -END:STANDARD\ -BEGIN:DAYLIGHT\ -DTSTART:19990404T020000\ -RDATE:19990404T020000\ -TZOFFSETFROM:-0500\ -TZOFFSETTO:-0400\ -TZNAME:EDT\ -Dkjhgri:derhvnv;\ -BEGIN:dfkjh\ -END:dfdfkjh\ -END:DAYLIGHT\ -END:VTIMEZONE\ -BEGIN:VEVENT\ -GEO:Bongo\ -DTSTAMP:19980309T231000Z\ -UID:guid-1.host1.com\ -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\ -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP\ - :MAILTO:employee-A@host.com\ -DESCRIPTION:Project XYZ Review Meeting\ -CATEGORIES:MEETING\ -CLASS:PUBLIC\ -CREATED:19980309T130000Z\ -SUMMARY:XYZ Project Review\ -DTSTART;TZID=US-Eastern:19980312T083000\ -DTEND;TZID=US-Eastern:19980312T093000\ -LOCATION:1CP Conference Room 4350\ -END:VEVENT\ -END:VCALENDAR\ -"; - -extern int yydebug; - -/* Have the parser fetch data from stdin */ - -char* read_stream(char *s, size_t size, void *d) -{ - char *c = fgets(s,size, (FILE*)d); - - return c; - -} - - - -int main(int argc, char* argv[]) -{ - - int lineno = 0; - char* line; - FILE* stream; - icalcomponent *c; - icalparser *parser = icalparser_new(); - - stream = fopen(argv[1],"r"); - - assert(stream != 0); - - icalparser_set_gen_data(parser,stream); - - do{ - - line = icalparser_get_line(parser,read_stream); - - c = icalparser_add_line(parser,line); - - - if (c != 0){ - /*icalcomponent_convert_errors(c);*/ - printf("%s",icalcomponent_as_ical_string(c)); - icalparser_claim(parser); - printf("\n---------------\n"); - icalcomponent_free(c); - } - - } while ( line != 0); - - -} diff --git a/libical/src/test/regression.c b/libical/src/test/regression.c deleted file mode 100644 index 7b1606d432..0000000000 --- a/libical/src/test/regression.c +++ /dev/null @@ -1,1334 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: usecases.c - CREATOR: eric 03 April 1999 - - DESCRIPTION: - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is usecases.c - - - ======================================================================*/ - -#include "ical.h" -#include -#include /* for strdup */ -#include /* for malloc */ -#include /* for printf */ -#include /* for time() */ -#include "icalmemory.h" -#include "icalstore.h" -#include "icalcluster.h" -#include "icalerror.h" -#include "icalrestriction.h" -#include "icalcalendar.h" - -/* This example creates and minipulates the ical object that appears - * in rfc 2445, page 137 */ - -char str[] = "BEGIN:VCALENDAR\ -PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ -VERSION:2.0\ -BEGIN:VTIMEZONE\ -TZID:US-Eastern\ -BEGIN:STANDARD\ -DTSTART:19981025T020000\ -RDATE:19981025T020000\ -TZOFFSETFROM:-0400\ -TZOFFSETTO:-0500\ -TZNAME:EST\ -END:STANDARD\ -BEGIN:DAYLIGHT\ -DTSTART:19990404T020000\ -RDATE:19990404T020000\ -TZOFFSETFROM:-0500\ -TZOFFSETTO:-0400\ -TZNAME:EDT\ -END:DAYLIGHT\ -END:VTIMEZONE\ -BEGIN:VEVENT\ -DTSTAMP:19980309T231000Z\ -UID:guid-1.host1.com\ -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\ -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\ -DESCRIPTION:Project XYZ Review Meeting\ -CATEGORIES:MEETING\ -CLASS:PUBLIC\ -CREATED:19980309T130000Z\ -SUMMARY:XYZ Project Review\ -DTSTART;TZID=US-Eastern:19980312T083000\ -DTEND;TZID=US-Eastern:19980312T093000\ -LOCATION:1CP Conference Room 4350\ -END:VEVENT\ -BEGIN:BOOGA\ -DTSTAMP:19980309T231000Z\ -X-LIC-FOO:Booga\ -DTSTOMP:19980309T231000Z\ -UID:guid-1.host1.com\ -END:BOOGA\ -END:VCALENDAR"; - - -icalcomponent* create_simple_component() -{ - - icalcomponent* calendar; - struct icalperiodtype rtime; - - rtime.start = icaltimetype_from_timet( time(0),0); - rtime.end = icaltimetype_from_timet( time(0),0); - - rtime.end.hour++; - - - - /* Create calendar and add properties */ - calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); - - - icalcomponent_add_property( - calendar, - icalproperty_new_version("2.0") - ); - - printf("%s\n",icalcomponent_as_ical_string(calendar)); - - return calendar; - -} - -/* Create a new component */ -icalcomponent* create_new_component() -{ - - icalcomponent* calendar; - icalcomponent* timezone; - icalcomponent* tzc; - icalcomponent* event; - struct icaltimetype atime = icaltimetype_from_timet( time(0),0); - struct icalperiodtype rtime; - icalproperty* property; - - rtime.start = icaltimetype_from_timet( time(0),0); - rtime.end = icaltimetype_from_timet( time(0),0); - - rtime.end.hour++; - - - - /* Create calendar and add properties */ - calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); - - - icalcomponent_add_property( - calendar, - icalproperty_new_version("2.0") - ); - - icalcomponent_add_property( - calendar, - icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN") - ); - - /* Create a timezone object and add it to the calendar */ - - timezone = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); - - icalcomponent_add_property( - timezone, - icalproperty_new_tzid("US_Eastern") - ); - - /* Add a sub-component of the timezone */ - tzc = icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); - - icalcomponent_add_property( - tzc, - icalproperty_new_dtstart(atime) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_rdate(rtime) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_tzoffsetfrom(-4.0) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_tzoffsetto(-5.0) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_tzname("EST") - ); - - icalcomponent_add_component(timezone,tzc); - - icalcomponent_add_component(calendar,timezone); - - /* Add a second subcomponent */ - tzc = icalcomponent_new(ICAL_XSTANDARD_COMPONENT); - - icalcomponent_add_property( - tzc, - icalproperty_new_dtstart(atime) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_rdate(rtime) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_tzoffsetfrom(-4.0) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_tzoffsetto(-5.0) - ); - - icalcomponent_add_property( - tzc, - icalproperty_new_tzname("EST") - ); - - icalcomponent_add_component(timezone,tzc); - - /* Add an event */ - - event = icalcomponent_new(ICAL_VEVENT_COMPONENT); - - icalcomponent_add_property( - event, - icalproperty_new_dtstamp(atime) - ); - - icalcomponent_add_property( - event, - icalproperty_new_uid("guid-1.host1.com") - ); - - /* add a property that has parameters */ - property = icalproperty_new_organizer("mrbig@host.com"); - - icalproperty_add_parameter( - property, - icalparameter_new_role(ICAL_ROLE_CHAIR) - ); - - icalcomponent_add_property(event,property); - - /* add another property that has parameters */ - property = icalproperty_new_attendee("employee-A@host.com"); - - icalproperty_add_parameter( - property, - icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) - ); - - icalproperty_add_parameter( - property, - icalparameter_new_rsvp(1) - ); - - icalproperty_add_parameter( - property, - icalparameter_new_cutype(ICAL_CUTYPE_GROUP) - ); - - icalcomponent_add_property(event,property); - - - /* more properties */ - - icalcomponent_add_property( - event, - icalproperty_new_description("Project XYZ Review Meeting") - ); - - icalcomponent_add_property( - event, - icalproperty_new_categories("MEETING") - ); - - icalcomponent_add_property( - event, - icalproperty_new_class("PUBLIC") - ); - - icalcomponent_add_property( - event, - icalproperty_new_created(atime) - ); - - icalcomponent_add_property( - event, - icalproperty_new_summary("XYZ Project Review") - ); - - - property = icalproperty_new_dtstart(atime); - - icalproperty_add_parameter( - property, - icalparameter_new_tzid("US-Eastern") - ); - - icalcomponent_add_property(event,property); - - - property = icalproperty_new_dtend(atime); - - icalproperty_add_parameter( - property, - icalparameter_new_tzid("US-Eastern") - ); - - icalcomponent_add_property(event,property); - - icalcomponent_add_property( - event, - icalproperty_new_location("1CP Conference Room 4350") - ); - - icalcomponent_add_component(calendar,event); - - printf("%s\n",icalcomponent_as_ical_string(calendar)); - - icalcomponent_free(calendar); - - return 0; -} - - -/* Create a new component, using the va_args list */ - -icalcomponent* create_new_component_with_va_args() -{ - - icalcomponent* calendar; - struct icaltimetype atime = icaltimetype_from_timet( time(0),0); - struct icalperiodtype rtime; - - rtime.start = icaltimetype_from_timet( time(0),0); - rtime.end = icaltimetype_from_timet( time(0),0); - - rtime.end.hour++; - - calendar = - icalcomponent_vanew( - ICAL_VCALENDAR_COMPONENT, - icalproperty_new_version("2.0"), - icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), - icalcomponent_vanew( - ICAL_VTIMEZONE_COMPONENT, - icalproperty_new_tzid("US_Eastern"), - icalcomponent_vanew( - ICAL_XDAYLIGHT_COMPONENT, - icalproperty_new_dtstart(atime), - icalproperty_new_rdate(rtime), - icalproperty_new_tzoffsetfrom(-4.0), - icalproperty_new_tzoffsetto(-5.0), - icalproperty_new_tzname("EST"), - 0 - ), - icalcomponent_vanew( - ICAL_XSTANDARD_COMPONENT, - icalproperty_new_dtstart(atime), - icalproperty_new_rdate(rtime), - icalproperty_new_tzoffsetfrom(-5.0), - icalproperty_new_tzoffsetto(-4.0), - icalproperty_new_tzname("EST"), - 0 - ), - 0 - ), - icalcomponent_vanew( - ICAL_VEVENT_COMPONENT, - icalproperty_new_dtstamp(atime), - icalproperty_new_uid("guid-1.host1.com"), - icalproperty_vanew_organizer( - "mrbig@host.com", - icalparameter_new_role(ICAL_ROLE_CHAIR), - 0 - ), - icalproperty_vanew_attendee( - "employee-A@host.com", - icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), - icalparameter_new_rsvp(1), - icalparameter_new_cutype(ICAL_CUTYPE_GROUP), - 0 - ), - icalproperty_new_description("Project XYZ Review Meeting"), - icalproperty_new_categories("MEETING"), - icalproperty_new_class("PUBLIC"), - icalproperty_new_created(atime), - icalproperty_new_summary("XYZ Project Review"), - icalproperty_vanew_dtstart( - atime, - icalparameter_new_tzid("US-Eastern"), - 0 - ), - icalproperty_vanew_dtend( - atime, - icalparameter_new_tzid("US-Eastern"), - 0 - ), - icalproperty_new_location("1CP Conference Room 4350"), - 0 - ), - 0 - ); - - printf("%s\n",icalcomponent_as_ical_string(calendar)); - - - icalcomponent_free(calendar); - - return 0; -} - - -/* Return a list of all attendees who are required. */ - -char** get_required_attendees(icalproperty* event) -{ - icalproperty* p; - icalparameter* parameter; - - char **attendees; - int max = 10; - int c = 0; - - attendees = malloc(max * (sizeof (char *))); - - assert(event != 0); - assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); - - for( - p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) - ) { - - parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER); - - if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) - { - attendees[c++] = strdup(icalproperty_get_attendee(p)); - - if (c >= max) { - max *= 2; - attendees = realloc(attendees, max * (sizeof (char *))); - } - - } - } - - return attendees; -} - -/* If an attendee has a PARTSTAT of NEEDSACTION or has no PARTSTAT - parameter, change it to TENTATIVE. */ - -void update_attendees(icalproperty* event) -{ - icalproperty* p; - icalparameter* parameter; - - - assert(event != 0); - assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); - - for( - p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) - ) { - - parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); - - if (parameter == 0) { - - icalproperty_add_parameter( - p, - icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) - ); - - } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { - - icalproperty_remove_parameter(p,ICAL_PARTSTAT_PARAMETER); - - icalparameter_free(parameter); - - icalproperty_add_parameter( - p, - icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) - ); - } - - } -} - - -void test_values() -{ - icalvalue *v; - icalvalue *copy; - - v = icalvalue_new_caladdress("cap://value/1"); - printf("caladdress 1: %s\n",icalvalue_get_caladdress(v)); - icalvalue_set_caladdress(v,"cap://value/2"); - printf("caladdress 2: %s\n",icalvalue_get_caladdress(v)); - printf("String: %s\n",icalvalue_as_ical_string(v)); - - copy = icalvalue_new_clone(v); - printf("Clone: %s\n",icalvalue_as_ical_string(v)); - icalvalue_free(v); - icalvalue_free(copy); - - - v = icalvalue_new_boolean(1); - printf("caladdress 1: %d\n",icalvalue_get_boolean(v)); - icalvalue_set_boolean(v,2); - printf("caladdress 2: %d\n",icalvalue_get_boolean(v)); - printf("String: %s\n",icalvalue_as_ical_string(v)); - - copy = icalvalue_new_clone(v); - printf("Clone: %s\n",icalvalue_as_ical_string(v)); - icalvalue_free(v); - icalvalue_free(copy); - - - v = icalvalue_new_date(icaltimetype_from_timet( time(0),0)); - printf("date 1: %s\n",icalvalue_as_ical_string(v)); - icalvalue_set_date(v,icaltimetype_from_timet( time(0)+3600,0)); - printf("date 2: %s\n",icalvalue_as_ical_string(v)); - - copy = icalvalue_new_clone(v); - printf("Clone: %s\n",icalvalue_as_ical_string(v)); - icalvalue_free(v); - icalvalue_free(copy); - - - v = icalvalue_new(-1); - - printf("Invalid type: %p\n",v); - - if (v!=0) icalvalue_free(v); - - - /* v = icalvalue_new_caladdress(0); - - printf("Bad string: %p\n",v); - - if (v!=0) icalvalue_free(v); */ - -} - -void test_properties() -{ - icalproperty *prop; - icalparameter *param; - - icalproperty *clone; - - prop = icalproperty_vanew_comment( - "Another Comment", - icalparameter_new_cn("A Common Name 1"), - icalparameter_new_cn("A Common Name 2"), - icalparameter_new_cn("A Common Name 3"), - icalparameter_new_cn("A Common Name 4"), - 0); - - for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PARAMETER); - param != 0; - param = icalproperty_get_next_parameter(prop,ICAL_ANY_PARAMETER)) { - - printf("Prop parameter: %s\n",icalparameter_get_cn(param)); - } - - printf("Prop value: %s\n",icalproperty_get_comment(prop)); - - - printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop)); - - clone = icalproperty_new_clone(prop); - - printf("Clone:\n %s\n",icalproperty_as_ical_string(prop)); - - icalproperty_free(clone); - icalproperty_free(prop); - - prop = icalproperty_new(-1); - - printf("Invalid type: %p\n",prop); - - if (prop!=0) icalproperty_free(prop); - - /* - prop = icalproperty_new_method(0); - - printf("Bad string: %p\n",prop); - - - if (prop!=0) icalproperty_free(prop); - */ -} - -void test_parameters() -{ - icalparameter *p; - - p = icalparameter_new_cn("A Common Name"); - - printf("Common Name: %s\n",icalparameter_get_cn(p)); - - printf("As String: %s\n",icalparameter_as_ical_string(p)); - - icalparameter_free(p); -} - - -void test_components() -{ - - icalcomponent* c; - icalcomponent* child; - - c = icalcomponent_vanew( - ICAL_VCALENDAR_COMPONENT, - icalproperty_new_version("2.0"), - icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), - icalproperty_vanew_comment( - "A Comment", - icalparameter_new_cn("A Common Name 1"), - 0), - icalcomponent_vanew( - ICAL_VEVENT_COMPONENT, - icalproperty_new_version("2.0"), - icalproperty_new_description("This is an event"), - icalproperty_vanew_comment( - "Another Comment", - icalparameter_new_cn("A Common Name 1"), - icalparameter_new_cn("A Common Name 2"), - icalparameter_new_cn("A Common Name 3"), - icalparameter_new_cn("A Common Name 4"), - 0), - icalproperty_vanew_xlicerror( - "This is only a test", - icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR), - 0), - - 0 - ), - 0 - ); - - printf("Original Component:\n%s\n\n",icalcomponent_as_ical_string(c)); - - child = icalcomponent_get_first_component(c,ICAL_VEVENT_COMPONENT); - - printf("Child Component:\n%s\n\n",icalcomponent_as_ical_string(child)); - - icalcomponent_free(c); - -} - -void test_memory() -{ - size_t bufsize = 256; - char *p; - - char S1[] = "1) When in the Course of human events, "; - char S2[] = "2) it becomes necessary for one people to dissolve the political bands which have connected them with another, "; - char S3[] = "3) and to assume among the powers of the earth, "; - char S4[] = "4) the separate and equal station to which the Laws of Nature and of Nature's God entitle them, "; - char S5[] = "5) a decent respect to the opinions of mankind requires that they "; - char S6[] = "6) should declare the causes which impel them to the separation. "; - char S7[] = "7) We hold these truths to be self-evident, "; - char S8[] = "8) that all men are created equal, "; - -/* char S9[] = "9) that they are endowed by their Creator with certain unalienable Rights, "; - char S10[] = "10) that among these are Life, Liberty, and the pursuit of Happiness. "; - char S11[] = "11) That to secure these rights, Governments are instituted among Men, "; - char S12[] = "12) deriving their just powers from the consent of the governed. "; -*/ - - - char *f, *b1, *b2, *b3, *b4, *b5, *b6, *b7, *b8; - - #define BUFSIZE 1024 - - - f = icalmemory_new_buffer(bufsize); - p = f; - b1 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b1, S1); - icalmemory_append_string(&f, &p, &bufsize, b1); - - b2 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b2, S2); - icalmemory_append_string(&f, &p, &bufsize, b2); - - b3 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b3, S3); - icalmemory_append_string(&f, &p, &bufsize, b3); - - b4 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b4, S4); - icalmemory_append_string(&f, &p, &bufsize, b4); - - b5 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b5, S5); - icalmemory_append_string(&f, &p, &bufsize, b5); - - b6 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b6, S6); - icalmemory_append_string(&f, &p, &bufsize, b6); - - b7 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b7, S7); - icalmemory_append_string(&f, &p, &bufsize, b7); - - b8 = icalmemory_tmp_buffer(BUFSIZE); - strcpy(b8, S8); - icalmemory_append_string(&f, &p, &bufsize, b8); - - - printf("1: %p %s \n",b1,b1); - printf("2: %p %s\n",b2,b2); - printf("3: %p %s\n",b3,b3); - printf("4: %p %s\n",b4,b4); - printf("5: %p %s\n",b5,b5); - printf("6: %p %s\n",b6,b6); - printf("7: %p %s\n",b7,b7); - printf("8: %p %s\n",b8,b8); - - - printf("Final: %s\n", f); - - printf("Final buffer size: %d\n",bufsize); - - free(f); - - bufsize = 4; - f = icalmemory_new_buffer(bufsize); - p = f; - - icalmemory_append_char(&f, &p, &bufsize, 'a'); - icalmemory_append_char(&f, &p, &bufsize, 'b'); - icalmemory_append_char(&f, &p, &bufsize, 'c'); - icalmemory_append_char(&f, &p, &bufsize, 'd'); - icalmemory_append_char(&f, &p, &bufsize, 'e'); - icalmemory_append_char(&f, &p, &bufsize, 'f'); - icalmemory_append_char(&f, &p, &bufsize, 'g'); - icalmemory_append_char(&f, &p, &bufsize, 'h'); - icalmemory_append_char(&f, &p, &bufsize, 'i'); - icalmemory_append_char(&f, &p, &bufsize, 'j'); - icalmemory_append_char(&f, &p, &bufsize, 'a'); - icalmemory_append_char(&f, &p, &bufsize, 'b'); - icalmemory_append_char(&f, &p, &bufsize, 'c'); - icalmemory_append_char(&f, &p, &bufsize, 'd'); - icalmemory_append_char(&f, &p, &bufsize, 'e'); - icalmemory_append_char(&f, &p, &bufsize, 'f'); - icalmemory_append_char(&f, &p, &bufsize, 'g'); - icalmemory_append_char(&f, &p, &bufsize, 'h'); - icalmemory_append_char(&f, &p, &bufsize, 'i'); - icalmemory_append_char(&f, &p, &bufsize, 'j'); - - printf("Char-by-Char buffer: %s\n", f); - -} - - -int test_store() -{ - - icalcomponent *c, *gauge; - icalerrorenum error; - icalcomponent *next, *itr; - icalcluster* cluster; - struct icalperiodtype rtime; - icalstore *s = icalstore_new("store"); - int i; - - rtime.start = icaltimetype_from_timet( time(0),0); - - cluster = icalcluster_new("clusterin.vcd"); - - if (cluster == 0){ - printf("Failed to create cluster: %s\n",icalerror_strerror(icalerrno)); - return 0; - } - -#define NUMCOMP 4 - - /* Duplicate every component in the cluster NUMCOMP times */ - - icalerror_clear_errno(); - - for (i = 1; i 5 */ - - assert(icalrestriction_get_property_restriction( - ICAL_METHOD_PUBLISH, - ICAL_VEVENT_COMPONENT, - ICAL_ATTACH_PROPERTY)==3); /* ZEROPLUS -> 3 */ - - assert(icalrestriction_get_property_restriction( - ICAL_METHOD_DECLINECOUNTER, - ICAL_VEVENT_COMPONENT, - ICAL_SEQUENCE_PROPERTY)==1); /* ZERO -> 1 */ - - /* Component restrictions */ - assert(icalrestriction_get_component_restriction( - ICAL_METHOD_PUBLISH, - ICAL_VJOURNAL_COMPONENT, - ICAL_X_COMPONENT) == 3); /* ZEROPLUS */ - - assert(icalrestriction_get_component_restriction( - ICAL_METHOD_CANCEL, - ICAL_VJOURNAL_COMPONENT, - ICAL_VEVENT_COMPONENT) == 1); /* ZERO */ - - comp = - icalcomponent_vanew( - ICAL_VCALENDAR_COMPONENT, - icalproperty_new_version("2.0"), - icalproperty_new_prodid("-//RDU Software//NONSGML HandCal//EN"), - icalproperty_new_method(ICAL_METHOD_REQUEST), - icalcomponent_vanew( - ICAL_VTIMEZONE_COMPONENT, - icalproperty_new_tzid("US_Eastern"), - icalcomponent_vanew( - ICAL_XDAYLIGHT_COMPONENT, - icalproperty_new_dtstart(atime), - icalproperty_new_rdate(rtime), - icalproperty_new_tzoffsetfrom(-4.0), - icalproperty_new_tzoffsetto(-5.0), - icalproperty_new_tzname("EST"), - 0 - ), - icalcomponent_vanew( - ICAL_XSTANDARD_COMPONENT, - icalproperty_new_dtstart(atime), - icalproperty_new_rdate(rtime), - icalproperty_new_tzoffsetfrom(-5.0), - icalproperty_new_tzoffsetto(-4.0), - icalproperty_new_tzname("EST"), - 0 - ), - 0 - ), - icalcomponent_vanew( - ICAL_VEVENT_COMPONENT, - icalproperty_new_dtstamp(atime), - icalproperty_new_uid("guid-1.host1.com"), - icalproperty_vanew_organizer( - "mrbig@host.com", - icalparameter_new_role(ICAL_ROLE_CHAIR), - 0 - ), - icalproperty_vanew_attendee( - "employee-A@host.com", - icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), - icalparameter_new_rsvp(1), - icalparameter_new_cutype(ICAL_CUTYPE_GROUP), - 0 - ), - icalproperty_new_description("Project XYZ Review Meeting"), - icalproperty_new_categories("MEETING"), - icalproperty_new_class("PUBLIC"), - icalproperty_new_created(atime), - icalproperty_new_summary("XYZ Project Review"), -/* icalproperty_vanew_dtstart( - atime, - icalparameter_new_tzid("US-Eastern"), - 0 - ),*/ - icalproperty_vanew_dtend( - atime, - icalparameter_new_tzid("US-Eastern"), - 0 - ), - icalproperty_new_location("1CP Conference Room 4350"), - 0 - ), - 0 - ); - - valid = icalrestriction_check(comp); - - printf("#### %d ####\n%s\n",valid, icalcomponent_as_ical_string(comp)); - -} - -void test_calendar() -{ - icalcomponent *comp; - icalcluster *c; - icalstore *s; - icalcalendar* calendar = icalcalendar_new("calendar"); - icalerrorenum error; - struct icaltimetype atime = icaltimetype_from_timet( time(0),0); - - comp = icalcomponent_vanew( - ICAL_VEVENT_COMPONENT, - icalproperty_new_version("2.0"), - icalproperty_new_description("This is an event"), - icalproperty_new_dtstart(atime), - icalproperty_vanew_comment( - "Another Comment", - icalparameter_new_cn("A Common Name 1"), - icalparameter_new_cn("A Common Name 2"), - icalparameter_new_cn("A Common Name 3"), - icalparameter_new_cn("A Common Name 4"), - 0), - icalproperty_vanew_xlicerror( - "This is only a test", - icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_COMPONENTPARSEERROR), - 0), - - 0); - - - s = icalcalendar_get_booked(calendar); - - error = icalstore_add_component(s,comp); - - assert(error == ICAL_NO_ERROR); - - c = icalcalendar_get_properties(calendar); - - error = icalcluster_add_component(c,icalcomponent_new_clone(comp)); - - assert(error == ICAL_NO_ERROR); - - icalcalendar_free(calendar); - -} - -void test_recur() -{ - icalvalue *v; - - v = icalvalue_new_from_string(ICAL_RECUR_VALUE, - "FREQ=DAILY;COUNT=5;BYDAY=MO,TU,WE,TH,FR"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - v = icalvalue_new_from_string(ICAL_RECUR_VALUE, - "FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - v = icalvalue_new_from_string(ICAL_RECUR_VALUE, - "FREQ=YEARLY;UNTIL=123456T123456;INTERVAL=2;BYMONTH=1;BYDAY=SU;BYHOUR=8,9;BYMINUTE=30"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - v = icalvalue_new_from_string(ICAL_RECUR_VALUE, - "FREQ=MONTHLY;BYDAY=-1MO,TU,WE,TH,FR"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - v = icalvalue_new_from_string(ICAL_RECUR_VALUE, - "FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU"); - - printf("%s\n",icalvalue_as_ical_string(v)); - -} - -void test_duration() -{ - - icalvalue *v; - - v = icalvalue_new_from_string(ICAL_DURATION_VALUE, - "PT8H30M"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - icalvalue_free(v); - v = icalvalue_new_from_string(ICAL_PERIOD_VALUE, - "19971015T050000Z/PT8H30M"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - icalvalue_free(v); - v = icalvalue_new_from_string(ICAL_PERIOD_VALUE, - "19971015T050000Z/19971015T060000Z"); - - printf("%s\n",icalvalue_as_ical_string(v)); - icalvalue_free(v); - - -} - - -void test_strings(){ - - icalvalue *v; - - v = icalvalue_new_text("foo;bar;bats"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - icalvalue_free(v); - - v = icalvalue_new_text("foo\\;b\nar\\;ba\tts"); - - printf("%s\n",icalvalue_as_ical_string(v)); - - icalvalue_free(v); - - -} - -void test_requeststat() -{ - icalrequeststatus s; - struct icalreqstattype st, st2; - char temp[1024]; - - s = icalenum_num_to_reqstat(2,1); - - assert(s == ICAL_2_1_FALLBACK_STATUS); - - assert(icalenum_reqstat_major(s) == 2); - assert(icalenum_reqstat_minor(s) == 1); - - printf("2.1: %s\n",icalenum_reqstat_desc(s)); - - st.code = s; - st.debug = "booga"; - st.desc = 0; - - printf("%s\n",icalreqstattype_as_string(st)); - - st.desc = " A non-standard description"; - - printf("%s\n",icalreqstattype_as_string(st)); - - - st.desc = 0; - - sprintf(temp,"%s\n",icalreqstattype_as_string(st)); - - - st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga"); - - printf("%d -- %d -- %s -- %s\n",icalenum_reqstat_major(st2.code), - icalenum_reqstat_minor(st2.code), - icalenum_reqstat_desc(st2.code), - st2.debug); - - st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;booga"); - printf("%s\n",icalreqstattype_as_string(st2)); - - st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values.;"); - printf("%s\n",icalreqstattype_as_string(st2)); - - st2 = icalreqstattype_from_string("2.1;Success but fallback taken on one or more property values."); - printf("%s\n",icalreqstattype_as_string(st2)); - - st2 = icalreqstattype_from_string("2.1;"); - printf("%s\n",icalreqstattype_as_string(st2)); - - st2 = icalreqstattype_from_string("2.1"); - printf("%s\n",icalreqstattype_as_string(st2)); - - st2 = icalreqstattype_from_string("16.4"); - assert(st2.code == ICAL_UNKNOWN_STATUS); - - st2 = icalreqstattype_from_string("1."); - assert(st2.code == ICAL_UNKNOWN_STATUS); - -} - - -int main(int argc, char *argv[]) -{ - - - printf("\n------------Test Restriction---------------\n"); - test_restriction(); - - exit(0); - - printf("\n------------Test request status-------\n"); - test_requeststat(); - - - printf("\n------------Test strings---------------\n"); - test_strings(); - - printf("\n------------Test recur---------------\n"); - test_recur(); - - printf("\n------------Test duration---------------\n"); - test_duration(); - - printf("\n------------Test Compare---------------\n"); - test_compare(); - - printf("\n------------Test Memory---------------\n"); - test_memory(); - - printf("\n------------Test Values---------------\n"); - test_values(); - - printf("\n------------Test Parameters-----------\n"); - test_parameters(); - - printf("\n------------Test Properties-----------\n"); - test_properties(); - - printf("\n------------Test Components ----------\n"); - test_components(); - - printf("\n------------Create Components --------\n"); - create_new_component(); - - printf("\n----- Create Components with vaargs ---\n"); - create_new_component_with_va_args(); - - - - - return 0; -} - - - diff --git a/libical/src/test/storage.c b/libical/src/test/storage.c deleted file mode 100644 index f6d0dd69e5..0000000000 --- a/libical/src/test/storage.c +++ /dev/null @@ -1,460 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: usecases.c - CREATOR: eric 03 April 1999 - - DESCRIPTION: - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is usecases.c - - - ======================================================================*/ - -#include "ical.h" -#include -#include /* for strdup */ -#include /* for malloc */ -#include /* for printf */ -#include /* for time() */ -#include "icalmemory.h" -#include "icalstore.h" -#include "icalcluster.h" -#include "icalerror.h" -#include "icalrestriction.h" -#include "icalcalendar.h" - -/* This example creates and minipulates the ical object that appears - * in rfc 2445, page 137 */ - -char str[] = "BEGIN:VCALENDAR\n\ -PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ -VERSION:2.0\n\ -BEGIN:VTIMEZONE\n\ -TZID:US-Eastern\n\ -BEGIN:STANDARD\n\ -DTSTART:19981025T020000\n\ -RDATE:19981025T020000\n\ -TZOFFSETFROM:-0400\n\ -TZOFFSETTO:-0500\n\ -TZNAME:EST\n\ -END:STANDARD\n\ -BEGIN:DAYLIGHT\n\ -DTSTART:19990404T020000\n\ -RDATE:19990404T020000\n\ -TZOFFSETFROM:-0500\n\ -TZOFFSETTO:-0400\n\ -TZNAME:EDT\n\ -END:DAYLIGHT\n\ -END:VTIMEZONE\n\ -BEGIN:VEVENT\n\ -DTSTAMP:19980309T231000Z\n\ -UID:guid-1.host1.com\n\ -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ -DESCRIPTION:Project XYZ Review Meeting\n\ -CATEGORIES:MEETING\n\ -CLASS:PUBLIC\n\ -CREATED:19980309T130000Z\n\ -SUMMARY:XYZ Project Review\n\ -DTSTART;TZID=US-Eastern:19980312T083000\n\ -DTEND;TZID=US-Eastern:19980312T093000\n\ -LOCATION:1CP Conference Room 4350\n\ -END:VEVENT\n\ -BEGIN:BOOGA\n\ -DTSTAMP:19980309T231000Z\n\ -X-LIC-FOO:Booga\n\ -DTSTOMP:19980309T231000Z\n\ -UID:guid-1.host1.com\n\ -END:BOOGA\n\ -END:VCALENDAR"; - -char str2[] = "BEGIN:VCALENDAR\n\ -PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\n\ -VERSION:2.0\n\ -BEGIN:VEVENT\n\ -DTSTAMP:19980309T231000Z\n\ -UID:guid-1.host1.com\n\ -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\n\ -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\n\ -DESCRIPTION:Project XYZ Review Meeting\n\ -CATEGORIES:MEETING\n\ -CLASS:PUBLIC\n\ -CREATED:19980309T130000Z\n\ -SUMMARY:XYZ Project Review\n\ -DTSTART;TZID=US-Eastern:19980312T083000\n\ -DTEND;TZID=US-Eastern:19980312T093000\n\ -LOCATION:1CP Conference Room 4350\n\ -END:VEVENT\n\ -END:VCALENDAR\n\ -"; - - -void test_cluster() -{ - icalcluster *cin, *cout; - int month = 0; - int count=0; - struct icaltimetype start, end; - icalcomponent *c,*clone, *itr; - - start = icaltimetype_from_timet( time(0),0); - end = start; - end.hour++; - - cout = icalcluster_new("clusterout.ics"); - assert(cout != 0); - - c = icalparser_parse_string(str2); - assert(c != 0); - - for(month = 1; month < 2; month++){ - icalcomponent *event; - icalproperty *dtstart, *dtend; - - cout = icalcluster_new("clusterout.ics"); - assert(cout != 0); - - start.month = month; - end.month = month; - - clone = icalcomponent_new_clone(c); - assert(clone !=0); - event = icalcomponent_get_first_component(clone,ICAL_VEVENT_COMPONENT); - assert(event != 0); - - dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); - assert(dtstart!=0); - icalproperty_set_dtstart(dtstart,start); - - dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); - assert(dtend!=0); - icalproperty_set_dtend(dtend,end); - - icalcluster_add_component(cout,clone); - icalcluster_commit(cout); - - icalcluster_free(cout); - - } - - - /* Print them out */ - - - cout = icalcluster_new("clusterout.ics"); - assert(cout != 0); - - for (itr = icalcluster_get_first_component(cout, - ICAL_ANY_COMPONENT); - itr != 0; - itr = icalcluster_get_next_component(cout, - ICAL_ANY_COMPONENT)){ - - icalcomponent *event; - icalproperty *dtstart, *dtend; - - count++; - - event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); - - dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); - dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); - - printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), - icalproperty_as_ical_string(dtend)); - - } - - /* Remove all of them */ - - icalcluster_free(cout); - - cout = icalcluster_new("clusterout.ics"); - assert(cout != 0); - - for (itr = icalcluster_get_first_component(cout, - ICAL_ANY_COMPONENT); - itr != 0; - itr = icalcluster_get_next_component(cout, - ICAL_ANY_COMPONENT)){ - - - icalcluster_remove_component(cout, itr); - } - - icalcluster_free(cout); - - - /* Print them out again */ - - cout = icalcluster_new("clusterout.ics"); - assert(cout != 0); - count =0; - - for (itr = icalcluster_get_first_component(cout, - ICAL_ANY_COMPONENT); - itr != 0; - itr = icalcluster_get_next_component(cout, - ICAL_ANY_COMPONENT)){ - - icalcomponent *event; - icalproperty *dtstart, *dtend; - - count++; - - event = icalcomponent_get_first_component(itr,ICAL_VEVENT_COMPONENT); - - dtstart = icalcomponent_get_first_property(event,ICAL_DTSTART_PROPERTY); - dtend = icalcomponent_get_first_property(event,ICAL_DTEND_PROPERTY); - - printf("%d %s %s\n",count, icalproperty_as_ical_string(dtstart), - icalproperty_as_ical_string(dtend)); - - } - - icalcluster_free(cout); - - -} - - - -int test_store() -{ - - icalcomponent *c, *gauge; - icalerrorenum error; - icalcomponent *next, *itr; - icalcluster* cluster; - struct icalperiodtype rtime; - icalstore *s = icalstore_new("store"); - int i; - - assert(s != 0); - - rtime.start = icaltimetype_from_timet( time(0),0); - - cluster = icalcluster_new("clusterout.ics"); - - assert(cluster != 0); - -#define NUMCOMP 4 - - /* Duplicate every component in the cluster NUMCOMP times */ - - icalerror_clear_errno(); - - for (i = 1; i -#include -#include -#include -#include /* for PATH_MAX */ -#include -#include -#include /* for uname */ -#include /* for stat */ -#include /* for stat, getpid */ - -#include "ical.h" -#include "icalcalendar.h" - - -char* program_name; -#define TMPSIZE 2048 - -enum options { - STORE_IN_DIR, - STORE_IN_DB, - INPUT_IS_EMAIL, - INPUT_IS_ICAL, - INPUT_FROM_STDIN, - INPUT_FROM_FILE -}; - -struct options_struct -{ - enum options storage; - enum options input_type; - char* input_file; - char* input_text; - char* calid; - char* caldir; -}; - - - -char* lowercase(char* str) -{ - char* p = 0; - char* new = strdup(str); - - if(str ==0){ - return 0; - } - - for(p = new; *p!=0; p++){ - *p = tolower(*p); - } - - return new; -} - -char* get_local_attendee(struct options_struct *opt) -{ - char attendee[PATH_MAX]; - char* user = getenv("USER"); - - struct utsname uts; - - uname(&uts); - - /* HACK nodename may not be a fully qualified domain name */ - snprintf(attendee,PATH_MAX,"%s@%s",user,uts.nodename); - - return lowercase(attendee); -} - -void usage(char *message) -{ -} - -icalcomponent* get_first_real_component(icalcomponent *comp) -{ - icalcomponent *c; - - for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); - c != 0; - c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)){ - if (icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT || - icalcomponent_isa(c) == ICAL_VTODO_COMPONENT || - icalcomponent_isa(c) == ICAL_VJOURNAL_COMPONENT ) - { - return c; - } - } - - return 0; -} - - - -char* make_mime(char* to, char* from, char* subject, - char* text_message, char* method, char* ical_message) -{ - size_t size = strlen(to)+strlen(from)+strlen(subject)+ - strlen(text_message)+ strlen(ical_message)+TMPSIZE; - - char mime_part_1[TMPSIZE]; - char mime_part_2[TMPSIZE]; - char content_id[TMPSIZE]; - char boundary[TMPSIZE]; - struct utsname uts; - char* m; - - - if ((m = malloc(sizeof(char)*size)) == 0){ - fprintf(stderr,"%s: Can't allocate memory: %s\n",program_name,strerror(errno)); - exit(1); - } - - uname(&uts); - - srand(time(0)<storage = STORE_IN_DIR; - opt->input_type = INPUT_FROM_STDIN; - opt->input_file = 0; - opt->input_text = 0; - opt->calid = 0; - opt->caldir = 0; -} - -char* check_options(struct options_struct *opt) -{ - return 0; -} - -void store_component(icalcomponent *comp, icalcalendar* cal, - struct options_struct *opt) -{ - - icalcluster *incoming = 0; - icalerrorenum error; - - incoming = icalcalendar_get_incoming(cal); - - if (incoming == 0){ - fprintf(stderr,"%s: Failed to get incoming component directory: %s\n", - program_name, icalerror_strerror(icalerrno)); - exit(1); - } - - error = icalcluster_add_component(incoming,comp); - - if (error != ICAL_NO_ERROR){ - fprintf(stderr,"%s: Failed to write incoming component: %s\n", - program_name, icalerror_strerror(icalerrno)); - exit(1); - } - - error = icalcluster_commit(incoming); - - if (error != ICAL_NO_ERROR){ - fprintf(stderr,"%s: Failed to commit incoming cluster: %s\n", - program_name, icalerror_strerror(icalerrno)); - exit(1); - } - - return; -} - -enum file_type -{ - ERROR, - NO_FILE, - DIRECTORY, - REGULAR, - OTHER -}; - -enum file_type test_file(char *path) -{ - struct stat sbuf; - enum file_type type; - - errno = 0; - - /* Check if the path already exists and if it is a directory*/ - if (stat(path,&sbuf) != 0){ - - /* A file by the given name does not exist, or there was - another error */ - if(errno == ENOENT) - { - type = NO_FILE; - } else { - type = ERROR; - } - - } else { - /* A file by the given name exists, but is it a directory? */ - - if (S_ISDIR(sbuf.st_mode)){ - type = DIRECTORY; - } else if(S_ISREG(sbuf.st_mode)){ - type = REGULAR; - } else { - type = OTHER; - } - } - - return type; -} - -icalcalendar* get_calendar(icalcomponent* comp, struct options_struct *opt) -{ - - struct stat sbuf; - char calpath[PATH_MAX]; - char facspath[PATH_MAX]; - char* home = getenv("HOME"); - char* user = getenv("USER"); - enum file_type type; - icalcalendar* cal; - - snprintf(facspath,PATH_MAX,"%s/.facs",home); - - type = test_file(facspath); - - errno = 0; - if (type == NO_FILE){ - - if(mkdir(facspath,0775) != 0){ - fprintf(stderr,"%s: Failed to create calendar store directory %s: %s\n", - program_name,facspath, strerror(errno)); - exit(1); - } else { - printf("%s: Creating calendar store directory %s\n",program_name,facspath); - } - - } else if(type==REGULAR || type == ERROR){ - fprintf(stderr,"%s: Cannot create calendar store directory %s\n", - program_name,facspath); - exit(1); - } - - - - snprintf(calpath,PATH_MAX,"%s/%s",facspath,user); - - type = test_file(calpath); - - errno = 0; - - if (type == NO_FILE){ - - if(mkdir(calpath,0775) != 0){ - fprintf(stderr,"%s: Failed to create calendar directory %s: %s\n", - program_name,calpath, strerror(errno)); - } else { - printf("%s: Creating calendar store directory %s\n",program_name,facspath); - } - } else if(type==REGULAR || type == ERROR){ - fprintf(stderr,"%s: Cannot create calendar directory %s\n", - program_name,calpath); - exit(1); - } - - cal = icalcalendar_new(calpath); - - if(cal == 0){ - fprintf(stderr,"%s: Failed to open calendar at %s: %s", - program_name,calpath,icalerror_strerror(icalerrno)); - exit(1); - } - - return cal; - -} - -char* read_stream(char *s, size_t size, void *d) -{ - char *c = fgets(s,size, (FILE*)d); - - return c; -} - -icalcomponent* read_component(struct options_struct *opt) -{ - FILE *stream; - icalcomponent *comp; - icalparser* parser = icalparser_new(); - char* line; - - if(opt->input_type == INPUT_FROM_FILE){ - stream = fopen(opt->input_file,"r"); - - if (stream == 0){ - perror("Can't open input file"); - exit(1); - } - - } else { - stream = stdin; - } - - assert(stream != 0); - icalparser_set_gen_data(parser,stream); - - do { - line = icalparser_get_line(parser,read_stream); - - comp = icalparser_add_line(parser,line); - - if (comp != 0){ - icalparser_claim(parser); - return comp; - } - - } while ( line != 0); - - if(opt->input_type == INPUT_FROM_FILE){ - fclose(stream); - } - - return comp; - } - -int main(int argc, char* argv[] ) -{ - char* options_error_str; - char* component_error_str; - icalcalendar* cal; - icalcomponent* comp, *reply; - struct options_struct opt; - - program_name = argv[0]; - - get_options(argc, argv, &opt); - - if ( (options_error_str = check_options(&opt)) != 0 ){ - usage(options_error_str); - exit(1); - } - - comp = read_component(&opt); - - if ( (component_error_str = check_component(comp,&opt)) != 0){ - return_failure(comp, component_error_str, &opt); - exit(1); - } - - cal = get_calendar(comp,&opt); - - store_component(comp,cal, &opt); - - icalcomponent_free(comp); - icalcalendar_free(cal); - - exit(0); -} - diff --git a/libical/src/test/test-component.icd b/libical/src/test/test-component.icd deleted file mode 100644 index 3fe2995a83..0000000000 --- a/libical/src/test/test-component.icd +++ /dev/null @@ -1,23 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :0 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single - event;RRULE -REQUEST-STATUS:3.0;Invalid Property Name;FOO -UID:guid-1@host1.com -SEQUENCE:0 -DTSTAMP:19970603T094000Z -END:VEVENT -END:VCALENDAR -END:VCALENDAR diff --git a/libical/src/test/usecases.c b/libical/src/test/usecases.c deleted file mode 100644 index 6c27454ae3..0000000000 --- a/libical/src/test/usecases.c +++ /dev/null @@ -1,553 +0,0 @@ -/* -*- Mode: C -*- - ====================================================================== - FILE: usecases.c - CREATOR: eric 03 April 1999 - - DESCRIPTION: - - $Id$ - $Locker$ - - (C) COPYRIGHT 1999 Eric Busboom - http://www.softwarestudio.org - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - - The original author is Eric Busboom - The original code is usecases.c - - - ======================================================================*/ - -#include "ical.h" -#include -#include /* for strdup */ -#include /* for malloc */ -#include /* for printf */ -#include /* for time() */ -#include "icalmemory.h" - -/* - - Here is the example iCal object that the examples routines in this - file will use: - - BEGIN:VCALENDAR - PRODID:-//RDU Software//NONSGML HandCal//EN - VERSION:2.0 - BEGIN:VTIMEZONE - BEGIN:VEVENT - DTSTAMP:19980309T231000Z - UID:guid-1.host1.com - ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com - ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: - MAILTO:employee-A@host.com - DESCRIPTION:Project XYZ Review Meeting - CREATED:19980309T130000Z - SUMMARY:XYZ Project Review - DTSTART;TZID=US-Eastern:19980312T083000 - DTEND;TZID=US-Eastern:19980312T093000 - END:VEVENT - END:VCALENDAR - -*/ - -char str[] = "BEGIN:VCALENDAR\ -PRODID:\"-//RDU Software//NONSGML HandCal//EN\"\ -VERSION:2.0\ -BEGIN:VEVENT\ -DTSTAMP:19980309T231000Z\ -UID:guid-1.host1.com\ -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com\ -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com\ -DESCRIPTION:Project XYZ Review Meeting\ -CATEGORIES:MEETING\ -CREATED:19980309T130000Z\ -SUMMARY:XYZ Project Review\ -DTSTART;TZID=US-Eastern:19980312T083000\ -DTEND;TZID=US-Eastern:19980312T093000\ -END:VEVENT\ -END:VCALENDAR"; - -/* Creating iCal Components - - There are two ways to create new component in libical. You can - build the component from primitive parts, or you can create it - from a string. - - There are two variations of the API for building the component from - primitive parts. In the first variation, you add each parameter and - value to a property, and then add each property to a - component. This results in a long series of function calls. This - style is show in create_new_component() - - The second variation uses vargs lists to nest many primitive part - constructors, resulting in a compact, neatly formated way to create - components. This style is shown in create_new_component_with_va_args() - - - -*/ - -icalcomponent* create_new_component() -{ - - /* variable definitions */ - icalcomponent* calendar; - icalcomponent* event; - struct icaltimetype atime = icaltimetype_from_timet( time(0),0); - struct icalperiodtype rtime; - icalproperty* property; - - /* Define a time type that will use as data later. */ - rtime.start = icaltimetype_from_timet( time(0),0); - rtime.end = icaltimetype_from_timet( time(0),0); - rtime.end.hour++; - - /* Create calendar and add properties */ - - calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); - - /* Nearly every libical function call has the same general - form. The first part of the name defines the 'class' for the - function, and the first argument will be a pointer to a struct - of that class. So, icalcomponent_ functions will all take - icalcomponent* as their first argument. */ - - /* The next call creates a new proeprty and immediately adds it to the - 'calendar' component. */ - - icalcomponent_add_property( - calendar, - icalproperty_new_version(strdup("2.0")) - ); - - /* Note the use of strdup() in the previous and next call. All - properties constructors for properties with value types of - TEXT will take control of the string you pass into them. Since - the string '2.0' is a static string, we need to duplicate it in - new memory before giving it to the property */ - - /* Here is the short version of the memory rules: - - If the routine name has "new" in it: - Caller owns the returned memory. - If you pass in a string, the routine takes the memory. - - If the routine name has "add" in it: - The routine takes control of the component, property, - parameter or value memory. - - If the routine returns a string ( "get" and "as_ical_string" ) - The library owns the returned memory. - - There are more rules, so refer to the documentation for more - details. - - */ - - icalcomponent_add_property( - calendar, - icalproperty_new_prodid(strdup("-//RDU Software//NONSGML HandCal//EN")) - ); - - /* Add an event */ - - event = icalcomponent_new(ICAL_VEVENT_COMPONENT); - - icalcomponent_add_property( - event, - icalproperty_new_dtstamp(atime) - ); - - /* In the previous call, atime is a struct, and it is passed in by value. - This is how all compound types of values are handled. */ - - icalcomponent_add_property( - event, - icalproperty_new_uid(strdup("guid-1.host1.com")) - ); - - /* add a property that has parameters */ - property = icalproperty_new_organizer(strdup("mailto:mrbig@host.com")); - - icalproperty_add_parameter( - property, - icalparameter_new_role(ICAL_ROLE_CHAIR) - ); - - icalcomponent_add_property(event,property); - - /* In this style of component creation, you need to use an extra - call to add parameters to properties, but the form of this - operation is the same as adding a property to a component */ - - /* add another property that has parameters */ - property = icalproperty_new_attendee(strdup("mailto:employee-A@host.com")); - - icalproperty_add_parameter( - property, - icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT) - ); - - icalproperty_add_parameter( - property, - icalparameter_new_rsvp(1) - ); - - icalproperty_add_parameter( - property, - icalparameter_new_cutype(ICAL_CUTYPE_GROUP) - ); - - icalcomponent_add_property(event,property); - - - /* more properties */ - - icalcomponent_add_property( - event, - icalproperty_new_description(strdup("Project XYZ Review Meeting")) - ); - - icalcomponent_add_property( - event, - icalproperty_new_categories(strdup("MEETING")) - ); - - icalcomponent_add_property( - event, - icalproperty_new_class(strdup("PUBLIC")) - ); - - icalcomponent_add_property( - event, - icalproperty_new_created(atime) - ); - - icalcomponent_add_property( - event, - icalproperty_new_summary(strdup("XYZ Project Review")) - ); - - property = icalproperty_new_dtstart(atime); - - icalproperty_add_parameter( - property, - icalparameter_new_tzid(strdup("US-Eastern")) - ); - - icalcomponent_add_property(event,property); - - - property = icalproperty_new_dtend(atime); - - icalproperty_add_parameter( - property, - icalparameter_new_tzid(strdup("US-Eastern")) - ); - - icalcomponent_add_property(event,property); - - icalcomponent_add_property( - event, - icalproperty_new_location(strdup("1CP Conference Room 4350")) - ); - - icalcomponent_add_component(calendar,event); - - return calendar; -} - - -/* Now, create the same component as in the previous routine, but use -the constructor style. */ - -icalcomponent* create_new_component_with_va_args() -{ - - /* This is a similar set up to the last routine */ - icalcomponent* calendar; - struct icaltimetype atime = icaltimetype_from_timet( time(0),0); - struct icalperiodtype rtime; - - rtime.start = icaltimetype_from_timet( time(0),0); - rtime.end = icaltimetype_from_timet( time(0),0); - rtime.end.hour++; - - /* Some of these routines are the same as those in the previous - routine, but we've also added several 'vanew' routines. These - 'vanew' routines take a list of properties, parameters or - values and add each of them to the parent property or - component. */ - - calendar = - icalcomponent_vanew( - ICAL_VCALENDAR_COMPONENT, - icalproperty_new_version(strdup("2.0")), - icalproperty_new_prodid(strdup("-//RDU Software//NONSGML HandCal//EN")), - icalcomponent_vanew( - ICAL_VEVENT_COMPONENT, - icalproperty_new_dtstamp(atime), - icalproperty_new_uid(strdup("guid-1.host1.com")), - icalproperty_vanew_organizer( - strdup("mailto:mrbig@host.com"), - icalparameter_new_role(ICAL_ROLE_CHAIR), - 0 - ), - icalproperty_vanew_attendee( - strdup("mailto:employee-A@host.com"), - icalparameter_new_role(ICAL_ROLE_REQPARTICIPANT), - icalparameter_new_rsvp(1), - icalparameter_new_cutype(ICAL_CUTYPE_GROUP), - 0 - ), - icalproperty_new_description(strdup("Project XYZ Review Meeting")), - icalproperty_new_categories(strdup("MEETING")), - icalproperty_new_class(strdup("PUBLIC")), - icalproperty_new_created(atime), - icalproperty_new_summary(strdup("XYZ Project Review")), - icalproperty_vanew_dtstart( - atime, - icalparameter_new_tzid(strdup("US-Eastern")), - 0 - ), - icalproperty_vanew_dtend( - atime, - icalparameter_new_tzid(strdup("US-Eastern")), - 0 - ), - icalproperty_new_location(strdup("1CP Conference Room 4350")), - 0 - ), - 0 - ); - - - /* Note that properties with no parameters can use the regular - 'new' constructor, while those with parameters use the 'vanew' - constructor. And, be sure that the last argument in the 'vanew' - call is a zero. Without, your program will probably crash. */ - - return calendar; -} - - -/* Now, lets try to get a particular parameter out of a - component. This routine will return a list of strings of all - attendees who are required. Note that this routine assumes that the - component that we pass in is a VEVENT; the top level component we - created in the above two routines is a VCALENDAR */ - -char *attendees[10]; -#define MAX_ATTENDEES 10; - -char** get_required_attendees(icalcomponent* event) -{ - icalproperty* p; - icalparameter* parameter; - int c=0; - - assert(event != 0); - assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); - - /* This loop iterates over all of the ATTENDEE properties in the - event */ - - /* Yes, the iteration routines save their state in the event - struct, so the are not thread safe unless you lock the whole - event. */ - - for( - p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) - ) { - - /* Get the first ROLE parameter in the property. There should - only be one, so we wont bother to iterate over them. */ - - parameter = icalproperty_get_first_parameter(p,ICAL_ROLE_PARAMETER); - - /* If the parameter indicates the participant is required, get - the attendees name and stick a copy of it into the output - array */ - - if ( icalparameter_get_role(parameter) == ICAL_ROLE_REQPARTICIPANT) - { - attendees[c++] = strdup(icalproperty_get_attendee(p)); - } - } - - return attendees; -} - -/* Here is a similar example. If an attendee has a PARTSTAT of - NEEDSACTION or has no PARTSTAT parameter, change it to - TENTATIVE. */ - -void update_attendees(icalcomponent* event) -{ - icalproperty* p; - icalparameter* parameter; - - assert(event != 0); - assert(icalcomponent_isa(event) == ICAL_VEVENT_COMPONENT); - - for( - p = icalcomponent_get_first_property(event,ICAL_ATTENDEE_PROPERTY); - p != 0; - p = icalcomponent_get_next_property(event,ICAL_ATTENDEE_PROPERTY) - ) { - - parameter = icalproperty_get_first_parameter(p,ICAL_PARTSTAT_PARAMETER); - - if (parameter == 0) { - - /* There was no PARTSTAT parameter, so add one. */ - icalproperty_add_parameter( - p, - icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) - ); - - } else if (icalparameter_get_partstat(parameter) == ICAL_PARTSTAT_NEEDSACTION) { - /* Remove the NEEDSACTION parameter and replace it with - TENTATIVE */ - - icalproperty_remove_parameter(p,ICAL_PARTSTAT_PARAMETER); - - /* Don't forget to free it */ - icalparameter_free(parameter); - - /* Add a new one */ - icalproperty_add_parameter( - p, - icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) - ); - } - - } -} - -/* Here are some examples of manipulating properties */ - -void test_properties() -{ - icalproperty *prop; - icalparameter *param; - icalvalue *value; - - icalproperty *clone; - - /* Create a new property */ - prop = icalproperty_vanew_comment( - strdup("Another Comment"), - icalparameter_new_cn("A Common Name 1"), - icalparameter_new_cn("A Common Name 2"), - icalparameter_new_cn("A Common Name 3"), - icalparameter_new_cn("A Common Name 4"), - 0); - - /* Iterate through all of the parameters in the property */ - for(param = icalproperty_get_first_parameter(prop,ICAL_ANY_PROPERTY); - param != 0; - param = icalproperty_get_next_parameter(prop,ICAL_ANY_PROPERTY)) { - - printf("Prop parameter: %s\n",icalparameter_get_cn(param)); - } - - /* Get a string representation of the property's value */ - printf("Prop value: %s\n",icalproperty_get_comment(prop)); - - /* Spit out the property in its RFC 2445 representation */ - printf("As iCAL string:\n %s\n",icalproperty_as_ical_string(prop)); - - /* Make a copy of the property. Caller owns the memory */ - clone = icalproperty_new_clone(prop); - - /* Get a reference to the value within the clone property */ - value = icalproperty_get_value(clone); - - printf("Value: %s",icalvalue_as_ical_string(value)); - - /* Free the original and the clone */ - icalproperty_free(clone); - icalproperty_free(prop); - -} - - - -/* Here are some ways to work with values. */ -void test_values() -{ - icalvalue *v; - icalvalue *copy; - - v = icalvalue_new_caladdress(strdup("cap://value/1")); - printf("caladdress 1: %s\n",icalvalue_get_caladdress(v)); - - icalvalue_set_caladdress(v,strdup("cap://value/2")); - printf("caladdress 2: %s\n",icalvalue_get_caladdress(v)); - printf("String: %s\n",icalvalue_as_ical_string(v)); - - copy = icalvalue_new_clone(v); - printf("Clone: %s\n",icalvalue_as_ical_string(v)); - icalvalue_free(v); - icalvalue_free(copy); - - -} - -void test_parameters() -{ - icalparameter *p; - - p = icalparameter_new_cn("A Common Name"); - - printf("Common Name: %s\n",icalparameter_get_cn(p)); - - printf("As String: %s\n",icalparameter_as_ical_string(p)); -} - - -int main(int argc, char *argv[]) -{ - icalcomponent *c1; - icalcomponent *c2; - icalcomponent *vevent; - char **attendees; - - c1 = create_new_component(); - c2 = create_new_component_with_va_args(); - - /* Extract the VEVENT component from the component */ - - vevent = icalcomponent_get_first_component(c1,ICAL_VEVENT_COMPONENT); - - attendees = get_required_attendees(vevent); - - printf("Attendees: %s\n",attendees[0]); - - /* Now print out the component as a string. Remember that the - library retains control of the memory returned by - icalcomponent_as_ical_string. Do not sotre references to it or - try to free it. It is stored on an internal ring buffer,and the - library will eventuall reclaim it. */ - - printf("%s\n",icalcomponent_as_ical_string(c1)); - - return 0; - -} - - - diff --git a/libical/test-data/.cvsignore b/libical/test-data/.cvsignore deleted file mode 100644 index b840c21800..0000000000 --- a/libical/test-data/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile.in -Makefile \ No newline at end of file diff --git a/libical/test-data/0 b/libical/test-data/0 deleted file mode 100644 index 3d7fb999cb..0000000000 --- a/libical/test-data/0 +++ /dev/null @@ -1,9 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN -BEGIN:VEVENT -DTSTART:19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -END:VEVENT -END:VCALENDAR diff --git a/libical/test-data/1 b/libical/test-data/1 deleted file mode 100644 index 6a368d9997..0000000000 --- a/libical/test-data/1 +++ /dev/null @@ -1,39 +0,0 @@ -BEGIN:VCALENDAR -PRODID:"-//RDU Software//NONSGML HandCal//EN" -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:US-Eastern -BEGIN:STANDARD -DTSTART:19981025T020000 -RDATE:19981025T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19990404T020000 -RDATE:19990404T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -DTSTAMP:19980309T231000Z -UID:guid-1.host1.com -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:mailto:Employee-B@HOST.com -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MailTo:Eric@Agony.Qualcomm.com -DESCRIPTION:Project XYZ Review Meeting -CATEGORIES:MEETING -CLASS:PUBLIC -CREATED:19980309T130000Z -SUMMARY:XYZ Project Review -DTSTAR;TZID=US-Eastern:19980312T083000 -DTEND;TZID=US-Eastern:19980312T093000 -LOCATION:1CP Conference -Room 4350 -END:VEVENT -END:VCALENDAR - diff --git a/libical/test-data/1.1 b/libical/test-data/1.1 deleted file mode 100644 index a7c92c33bd..0000000000 --- a/libical/test-data/1.1 +++ /dev/null @@ -1,13 +0,0 @@ -BEGIN:VCALENDAR -DURATION:P15DT5H0M20S -DURATION:P7W -URL;CN=John Smith:http://example.com/urivalue.html -X-SKI-TITLE;RSVP=TRUE: This is an extension property -SUMMARY:"No Property" -SUMMARY;RSVP=TRUE;RSVP=FALSE:Calendaring Interoperability Planning Meeting -SUMMARY;ALTREP=This is an xname:altrep -SUMMARY;CUTYPE=DESCRIPTION is a keyword:Xname parameter -DTEND:19990605 -DTSTART:19990605T103012 -CATEGORIES;RSVP=TRUE;RSVP=FALSE:one,two -END:VCALENDAR diff --git a/libical/test-data/2 b/libical/test-data/2 deleted file mode 100644 index 50ba609ab3..0000000000 --- a/libical/test-data/2 +++ /dev/null @@ -1,22 +0,0 @@ -BEGIN:VCALENDAR -METHOD:xyz -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML - My Product//EN -BEGIN:VEVENT -DTSTAMP:19970324T1200Z -SEQUENCE:0 -UID:uid3@host1.com -ORGANIZER:MAILTO:jdoe@host1.com -ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com -DTSTART:19970324T123000Z -DTEND:19970324T210000Z -CATEGORIES:MEETING,PROJECT -CLASS:PUBLIC -SUMMARY:Calendaring Interoperability Planning Meeting -DESCRIPTION:Discuss how we can test c&s interoperability\n - using iCalendar and other IETF standards. -LOCATION:LDB Lobby -ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/conf/bkgrnd.ps -END:VEVENT -END:VCALENDAR diff --git a/libical/test-data/2445.ics b/libical/test-data/2445.ics deleted file mode 100644 index f225f26331..0000000000 --- a/libical/test-data/2445.ics +++ /dev/null @@ -1,321 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN -BEGIN:VEVENT -DTSTART:19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -END:VEVENT -END:VCALENDAR - -BEGIN:VEVENT -UID:19970901T130000Z-123401@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970903T163000Z -DTEND:19970903T190000Z -SUMMARY:Annual Employee Review -CLASS:PRIVATE -CATEGORIES:BUSINESS,HUMAN RESOURCES -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123402@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970401T163000Z -DTEND:19970402T010000Z -SUMMARY:Laurel is in sensitivity awareness class. -CLASS:PUBLIC -CATEGORIES:BUSINESS,HUMAN RESOURCES -TRANSP:TRANSPARENT -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123403@host.com -DTSTAMP:19970901T1300Z -DTSTART:19971102 -SUMMARY:Our Blissful Anniversary -CLASS:CONFIDENTIAL -CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION -RRULE:FREQ=YEARLY -END:VEVENT - -BEGIN:VTODO -UID:19970901T130000Z-123404@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970415T133000Z -DUE:19970416T045959Z -SUMMARY:1996 Income Tax Preparation -CLASS:CONFIDENTIAL -CATEGORIES:FAMILY,FINANCE -PRIORITY:1 -STATUS:NEEDS-ACTION -END:VTODO -BEGIN:VJOURNAL -UID:19970901T130000Z-123405@host.com -DTSTAMP:19970901T1300Z -DTSTART;VALUE=DATE:19970317 -SUMMARY:Staff meeting minutes -DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa - and Bob. Aurora project plans were reviewed. There is currently - no budget reserves for this project. Lisa will escalate to - management. Next meeting on Tuesday.\n - 2. Telephone Conference: ABC Corp. sales representative called - to discuss new printer. Promised to get us a demo by Friday.\n - 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. - Is looking into a loaner car. 654-2323 (tel). -END:VJOURNAL -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jane_doe@host1.com -ATTENDEE:MAILTO:john_public@host2.com -DTSTART:19971015T050000Z -DTEND:19971016T050000Z -DTSTAMP:19970901T083000Z -END:VFREEBUSY -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jane_doe@host1.com -ATTENDEE:MAILTO:john_public@host2.com -DTSTAMP:19970901T100000Z -FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, - 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M -URL:http://host2.com/pub/busy/jpublic-01.ifb -COMMENT:This iCalendar file contains busy time information for - the next three months. -END:VFREEBUSY -BEGIN:VFREEBUSY -ORGANIZER:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711Z -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000Z/19980318T040000Z -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19971026T020000 -RDATE:19971026T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19971026T020000 -RDATE:19970406T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -TZURL:http://zones.stds_r_us.net/tz/US-Eastern -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:US--Fictitious-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:US--Fictitious-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -BEGIN:DAYLIGHT -DTSTART:19990424T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VALARM -TRIGGER;VALUE=DATE-TIME:19970317T133000Z -REPEAT:4 -DURATION:PT15M -ACTION:AUDIO -ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud -END:VALARM -BEGIN:VALARM -TRIGGER:-PT30M -REPEAT:2 -DURATION:PT15M -ACTION:DISPLAY -DESCRIPTION:Breakfast meeting with executive\n - team at 8:30 AM EST. -END:VALARM -BEGIN:VALARM -TRIGGER:-P2D -ACTION:EMAIL -ATTENDEE:MAILTO:john_doe@host.com -SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** -DESCRIPTION:A draft agenda needs to be sent out to the attendees - to the weekly managers meeting (MGR-LIST). Attached is a - pointer the document template for the agenda file. -ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen - da.doc -END:VALARM -BEGIN:VALARM -TRIGGER;VALUE=DATE-TIME:19980101T050000Z -REPEAT:23 -DURATION:PT1H -ACTION:PROCEDURE -ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- - procs/felizano.exe -END:VALARM -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:US-Eastern -BEGIN:STANDARD -DTSTART:19981025T020000 -RDATE:19981025T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19990404T020000 -RDATE:19990404T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -DTSTAMP:19980309T231000Z -UID:guid-1.host1.com -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: - MAILTO:employee-A@host.com -DESCRIPTION:Project XYZ Review Meeting -CATEGORIES:MEETING -CLASS:PUBLIC -CREATED:19980309T130000Z -SUMMARY:XYZ Project Review -DTSTART;TZID=US-Eastern:19980312T083000 -DTEND;TZID=US-Eastern:19980312T093000 -LOCATION:1CP Conference Room 4350 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:PUBLISH -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VEVENT -DTSTAMP:19970324T1200Z -SEQUENCE:0 -UID:uid3@host1.com -ORGANIZER:MAILTO:jdoe@host1.com -DTSTART:19970324T123000Z -DTEND:19970324T210000Z -CATEGORIES:MEETING,PROJECT -CLASS:PUBLIC -SUMMARY:Calendaring Interoperability Planning Meeting -DESCRIPTION:Discuss how we can test c&s interoperability\n - using iCalendar and other IETF standards. -LOCATION:LDB Lobby -ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ - conf/bkgrnd.ps -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VTODO -DTSTAMP:19980130T134500Z -SEQUENCE:2 -UID:uid4@host1.com -ORGANIZER:MAILTO:unclesam@us.gov -ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com -DUE:19980415T235959 -STATUS:NEEDS-ACTION -SUMMARY:Submit Income Taxes -BEGIN:VALARM -ACTION:AUDIO -TRIGGER:19980403T120000 -ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- - files/ssbanner.aud -REPEAT:4 -DURATION:PT1H -END:VALARM -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VJOURNAL -DTSTAMP:19970324T120000Z -UID:uid5@host1.com -ORGANIZER:MAILTO:jsmith@host.com -STATUS:DRAFT -CLASS:PUBLIC -CATEGORIES:Project Report, XYZ, Weekly Meeting -DESCRIPTION:Project xyz Review Meeting Minutes\n - Agenda\n1. Review of project version 1.0 requirements.\n2. - Definition - of project processes.\n3. Review of project schedule.\n - Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was - decided that the requirements need to be signed off by - product marketing.\n-Project processes were accepted.\n - -Project schedule needs to account for scheduled holidays - and employee vacation time. Check with HR for specific - dates.\n-New schedule will be distributed by Friday.\n- - Next weeks meeting is cancelled. No meeting until 3/23. -END:VJOURNAL -END:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//RDU Software//NONSGML HandCal//EN -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711Z -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000Z/19980318T040000Z -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY -END:VCALENDAR diff --git a/libical/test-data/2445.vcd b/libical/test-data/2445.vcd deleted file mode 100644 index 1168324d88..0000000000 --- a/libical/test-data/2445.vcd +++ /dev/null @@ -1,329 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :0 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN -BEGIN:VEVENT -DTSTART:19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -END:VEVENT -END:VCALENDAR - -BEGIN:VEVENT -UID:19970901T130000Z-123401@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970903T163000Z -DTEND:19970903T190000Z -SUMMARY:Annual Employee Review -CLASS:PRIVATE -CATEGORIES:BUSINESS,HUMAN RESOURCES -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123402@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970401T163000Z -DTEND:19970402T010000Z -SUMMARY:Laurel is in sensitivity awareness class. -CLASS:PUBLIC -CATEGORIES:BUSINESS,HUMAN RESOURCES -TRANSP:TRANSPARENT -END:VEVENT - -BEGIN:VEVENT -UID:19970901T130000Z-123403@host.com -DTSTAMP:19970901T1300Z -DTSTART:19971102 -SUMMARY:Our Blissful Anniversary -CLASS:CONFIDENTIAL -CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION -RRULE:FREQ=YEARLY -END:VEVENT - -BEGIN:VTODO -UID:19970901T130000Z-123404@host.com -DTSTAMP:19970901T1300Z -DTSTART:19970415T133000Z -DUE:19970416T045959Z -SUMMARY:1996 Income Tax Preparation -CLASS:CONFIDENTIAL -CATEGORIES:FAMILY,FINANCE -PRIORITY:1 -STATUS:NEEDS-ACTION -END:VTODO -BEGIN:VJOURNAL -UID:19970901T130000Z-123405@host.com -DTSTAMP:19970901T1300Z -DTSTART;VALUE=DATE:19970317 -SUMMARY:Staff meeting minutes -DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa - and Bob. Aurora project plans were reviewed. There is currently - no budget reserves for this project. Lisa will escalate to - management. Next meeting on Tuesday.\n - 2. Telephone Conference: ABC Corp. sales representative called - to discuss new printer. Promised to get us a demo by Friday.\n - 3. Henry Miller (Handsoff Insurance): Car was totaled by tree. - Is looking into a loaner car. 654-2323 (tel). -END:VJOURNAL -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jane_doe@host1.com -ATTENDEE:MAILTO:john_public@host2.com -DTSTART:19971015T050000Z -DTEND:19971016T050000Z -DTSTAMP:19970901T083000Z -END:VFREEBUSY -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jane_doe@host1.com -ATTENDEE:MAILTO:john_public@host2.com -DTSTAMP:19970901T100000Z -FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M, - 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M -URL:http://host2.com/pub/busy/jpublic-01.ifb -COMMENT:This iCalendar file contains busy time information for - the next three months. -END:VFREEBUSY -BEGIN:VFREEBUSY -ORGANIZER:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711Z -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000Z/19980318T040000Z -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19971026T020000 -RDATE:19971026T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19971026T020000 -RDATE:19970406T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:US-Eastern -LAST-MODIFIED:19870101T000000Z -TZURL:http://zones.stds_r_us.net/tz/US-Eastern -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:US--Fictitious-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:US--Fictitious-Eastern -LAST-MODIFIED:19870101T000000Z -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -BEGIN:DAYLIGHT -DTSTART:19990424T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VALARM -TRIGGER;VALUE=DATE-TIME:19970317T133000Z -REPEAT:4 -DURATION:PT15M -ACTION:AUDIO -ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud -END:VALARM -BEGIN:VALARM -TRIGGER:-PT30M -REPEAT:2 -DURATION:PT15M -ACTION:DISPLAY -DESCRIPTION:Breakfast meeting with executive\n - team at 8:30 AM EST. -END:VALARM -BEGIN:VALARM -TRIGGER:-P2D -ACTION:EMAIL -ATTENDEE:MAILTO:john_doe@host.com -SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING *** -DESCRIPTION:A draft agenda needs to be sent out to the attendees - to the weekly managers meeting (MGR-LIST). Attached is a - pointer the document template for the agenda file. -ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen - da.doc -END:VALARM -BEGIN:VALARM -TRIGGER;VALUE=DATE-TIME:19980101T050000Z -REPEAT:23 -DURATION:PT1H -ACTION:PROCEDURE -ATTACH;FMTTYPE=application/binary:ftp://host.com/novo- - procs/felizano.exe -END:VALARM -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:US-Eastern -BEGIN:STANDARD -DTSTART:19981025T020000 -RDATE:19981025T020000 -TZOFFSETFROM:-0400 -TZOFFSETTO:-0500 -TZNAME:EST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19990404T020000 -RDATE:19990404T020000 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0400 -TZNAME:EDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -DTSTAMP:19980309T231000Z -UID:guid-1.host1.com -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: - MAILTO:employee-A@host.com -DESCRIPTION:Project XYZ Review Meeting -CATEGORIES:MEETING -CLASS:PUBLIC -CREATED:19980309T130000Z -SUMMARY:XYZ Project Review -DTSTART;TZID=US-Eastern:19980312T083000 -DTEND;TZID=US-Eastern:19980312T093000 -LOCATION:1CP Conference Room 4350 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:xyz -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VEVENT -DTSTAMP:19970324T1200Z -SEQUENCE:0 -UID:uid3@host1.com -ORGANIZER:MAILTO:jdoe@host1.com -ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com -DTSTART:19970324T123000Z -DTEND:19970324T210000Z -CATEGORIES:MEETING,PROJECT -CLASS:PUBLIC -SUMMARY:Calendaring Interoperability Planning Meeting -DESCRIPTION:Discuss how we can test c&s interoperability\n - using iCalendar and other IETF standards. -LOCATION:LDB Lobby -ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/ - conf/bkgrnd.ps -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VTODO -DTSTAMP:19980130T134500Z -SEQUENCE:2 -UID:uid4@host1.com -ORGANIZER:MAILTO:unclesam@us.gov -ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com -DUE:19980415T235959 -STATUS:NEEDS-ACTION -SUMMARY:Submit Income Taxes -BEGIN:VALARM -ACTION:AUDIO -TRIGGER;VALUE=DATE-TIME:19980403T120000Z -ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio- - files/ssbanner.aud -REPEAT:4 -DURATION:PT1H -END:VALARM -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VJOURNAL -DTSTAMP:19970324T120000Z -UID:uid5@host1.com -ORGANIZER:MAILTO:jsmith@host.com -STATUS:DRAFT -CLASS:PUBLIC -CATEGORIES:Project Report, XYZ, Weekly Meeting -DESCRIPTION:Project xyz Review Meeting Minutes\n - Agenda\n1. Review of project version 1.0 requirements.\n2. - Definition of project processes.\n3. Review of project schedule.\n - Participants: John Smith, Jane Doe, Jim Dandy\n-It was - decided that the requirements need to be signed off by - product marketing.\n-Project processes were accepted.\n - -Project schedule needs to account for scheduled holidays - and employee vacation time. Check with HR for specific - dates.\n-New schedule will be distributed by Friday.\n- - Next weeks meeting is cancelled. No meeting until 3/23. -END:VJOURNAL -END:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//RDU Software//NONSGML HandCal//EN -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711Z -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000Z/19980318T040000Z -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY -END:VCALENDAR -END:VCALENDAR \ No newline at end of file diff --git a/libical/test-data/2446.ics b/libical/test-data/2446.ics deleted file mode 100644 index 0f816efeba..0000000000 --- a/libical/test-data/2446.ics +++ /dev/null @@ -1,998 +0,0 @@ - -BEGIN:VCALENDAR -METHOD:PUBLISH -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTART:19970701T200000Z -DTSTAMP:19970611T190000Z -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID:0981234-1234234-23@example.com -END:VEVENT -END:VCALENDAR - -BEGIN:VCALENDAR -METHOD:PUBLISH -VERSION:2.0 -PRODID:-//ACME/DesktopCalendar//EN -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTAMP:19970612T190000Z -DTSTART:19970701T210000Z -DTEND:19970701T230000Z -SEQUENCE:1 -UID:0981234-1234234-23@example.com -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:CANCEL -VERSION:2.0 -PRODID:-//ACME/DesktopCalendar//EN -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -COMMENT:DUKES forfeit the game -SEQUENCE:2 -UID:0981234-1234234-23@example.com -DTSTAMP:19970613T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:PUBLISH -CALSCALE:GREGORIAN -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:America-Chicago -TZURL:http://zones.stds_r_us.net/tz/America-Chicago -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0600 -TZNAME:CST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0600 -TZOFFSETTO:-0500 -TZNAME:CDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -ATTACH:http://www.dukes.com/ -CATEGORIES:SPORTS EVENT,ENTERTAINMENT -CLASS:PRIVATE -DESCRIPTION:MIDWAY STADIUM\n - Big time game. MUST see.\n - Expected duration:2 hours\n -DTEND;TZID=America-Chicago:19970701T180000 -DTSTART;TZID=America-Chicago:19970702T160000 -DTSTAMP:19970614T190000Z -STATUS:CONFIRMED -LOCATION;VALUE=URI:http://www.midwaystadium.com/ -PRIORITY:2 -RESOURCES:SCOREBOARD -SEQUENCE:3 -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID:0981234-1234234-23@example.com -RELATED-TO:0981234-1234234-14@example.com -BEGIN:VALARM -TRIGGER:-PT2H -ACTION:DISPLAY -DESCRIPTION:You should be leaving for the game now. -END:VALARM -BEGIN:VALARM -TRIGGER:-PT30M -ACTION:AUDIO -END:VALARM -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:PUBLISH -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTAMP:19970614T190000Z -UID:0981234-1234234-23@example.com -DTSTART;VALUE=DATE:19970714 -RRULE:FREQ=YEARLY;INTERVAL=1 -SUMMARY: Bastille Day -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com -ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big@example.com -ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com -DTSTAMP:19970611T190000Z -DTSTART:19970701T200000Z -DTEND:19970701T2000000Z -SUMMARY:Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com -ORGANIZER:MAILTO:A@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970612T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com -ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE; - CUTYPE=ROOM:Mailto:Conf@example.com -ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com -DTSTART:19970701T180000Z -DTEND:19970701T190000Z -SUMMARY:Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:1 -DTSTAMP:19970613T190000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -DTSTART:19970701T190000Z -DTEND:19970701T200000Z -SUMMARY:Discuss the Merits of the election results -LOCATION:Green Conference Room -UID:calsrv.example.com-873970198738777a@example.com -SEQUENCE:0 -DTSTAMP:19970611T190000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:COUNTER -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -DTSTART:19970701T160000Z -DTEND:19970701T190000Z -DTSTAMP:19970612T190000Z -SUMMARY:Discuss the Merits of the election results -LOCATION:Green Conference Room -COMMENT:This time works much better and I think the big conference - room is too big -UID:calsrv.example.com-873970198738777a@example.com -SEQUENCE:0 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -DTSTAMP:19970613T190000Z -DTSTART:19970701T160000Z -DTEND:19970701T190000Z -SUMMARY:Discuss the Merits of the election results - changed to - meet B's schedule -LOCATION:Green Conference Room -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:1 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:DECLINECOUNTER -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -COMMENT:Sorry\, I cannot change this meeting time -UID:calsrv.example.com-873970198738777@example.com -DTSTAMP:19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- - TO="Mailto:E@example.com":Mailto:C@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- - TO="Mailto:E@example.com":Mailto:C@example.com -ATTENDEE;RSVP=TRUE; - DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com -DTSTART:19970701T180000Z -DTEND:19970701T200000Z -SUMMARY:Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -STATUS:CONFIRMED -DTSTAMP:19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED- - FROM="Mailto:C@example.com":Mailto:E@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=DELEGATED; - DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com -COMMENT:Sorry\, I will be out of town at that time. -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=DECLINED; - DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -SUMMARY:Phone Conference -DTSTART:19970701T180000Z -DTEND:19970701T200000Z -DTSTAMP:19970614T200000Z -COMMENT:DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOUR - INVITATION -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:CANCEL -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:A@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -COMMENT:Mr. B cannot attend. It's raining. Lets cancel. -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:1 -STATUS:CANCELLED -DTSTAMP:19970613T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:CANCEL -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:mailto:B@example.com -COMMENT:You're off the hook for this meeting -UID:calsrv.example.com-873970198738777@example.com -DTSTAMP:19970613T193000Z -SEQUENCE:1 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -ATTENDEE;CUTYPE=ROOM:CR_Big@example.com -ATTENDEE;ROLE=NON-PARTICIPANT; - RSVP=FALSE:Mailto:E@example.com -DTSTAMP:19970611T190000Z -DTSTART:19970701T200000Z -DTEND:19970701T203000Z -SUMMARY:Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:2 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:B@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:B@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -DTSTAMP:19970611T190000Z -DTSTART:19970701T200000Z -DTEND:19970701T203000Z -RRULE:FREQ=WEEKLY -SUMMARY:Phone Conference -UID:123456@example.com -SEQUENCE:1 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -METHOD:PUBLISH -BEGIN:VFREEBUSY -DTSTAMP:19980101T124100Z -ORGANIZER:MAILTO:A@Example.com -DTSTART:19980101T124200Z -DTEND:19980107T124200Z -FREEBUSY:19980101T180000Z/19980101T190000Z -FREEBUSY:19980103T020000Z/19980103T050000Z -FREEBUSY:19980107T020000Z/19980107T050000Z -FREEBUSY:19980113T000000Z/19980113T010000Z -FREEBUSY:19980115T190000Z/19980115T200000Z -FREEBUSY:19980115T220000Z/19980115T230000Z -FREEBUSY:19980116T013000Z/19980116T043000Z -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VFREEBUSY -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -DTSTAMP:19970613T190000Z -DTSTART:19970701T080000Z -DTEND:19970701T200000 -UID:calsrv.example.com-873970198738777@example.com -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:A@example.com -ATTENDEE:Mailto:B@example.com -DTSTART:19970701T080000Z -DTEND:19970701T200000Z -UID:calsrv.example.com-873970198738777@example.com -FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M -DTSTAMP:19970613T190030Z -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:America-SanJose -TZURL:http://zones.stds_r_us.net/tz/America-SanJose -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0700 -TZOFFSETTO:-0800 -TZNAME:PST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0800 -TZOFFSETTO:-0700 -TZNAME:PDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:A@example.COM -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:B@example.fr -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp -DTSTAMP:19970613T190030Z -DTSTART;TZID=America-SanJose:19970701T140000 -DTEND;TZID=America-SanJose:19970701T150000 -RRULE:FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU -RDATE;TZID=America-SanJose:19970910T140000 -EXDATE;TZID=America-SanJose:19970909T140000 -EXDATE;TZID=America-SanJose:19971028T140000 -SUMMARY:Weekly Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -SEQUENCE:0 -RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970601T210000Z -DTEND:19970601T220000Z -LOCATION:Conference Call -DTSTAMP:19970526T083000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1com -RECURRENCE-ID:19970701T210000Z -SEQUENCE:1 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970703T210000Z -DTEND:19970703T220000Z -LOCATION:Conference Call -DTSTAMP:19970626T093000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:CANCEL -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -RECURRENCE-ID:19970801T210000Z -SEQUENCE:2 -STATUS:CANCELLED -DTSTAMP:19970721T093000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:CANCEL -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -DTSTAMP:19970721T103000Z -STATUS:CANCELLED -SEQUENCE:3 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -RECURRENCE-ID;RANGE=THISANDFUTURE:19970901T210000Z -SEQUENCE:3 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Discussion -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970901T210000Z -DTEND:19970901T220000Z -LOCATION:Building 32\, Microsoft\, Seattle\, WA -DTSTAMP:19970526T083000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:ADD -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:4 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970715T210000Z -DTEND:19970715T220000Z -LOCATION:Conference Call -DTSTAMP:19970629T093000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:0 -RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980303T210000Z -DTEND:19980303T220000Z -LOCATION:The White Room -DTSTAMP:19980301T093000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:ADD -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:7 -RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TH -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980303T210000Z -DTEND:19980303T220000Z -DTSTAMP:19980303T193000Z -LOCATION:The Usual conference room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:7 -RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU,TH -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980303T210000Z -DTEND:19980303T220000Z -DTSTAMP:19980303T193000Z -LOCATION:The White Room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:0 -RDATE:19980304T180000Z -RDATE:19980311T180000Z -RDATE:19980318T180000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980304T180000Z -DTEND:19980304T200000Z -DTSTAMP:19980303T193000Z -LOCATION:Conference Room A -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:1 -RECURRENCE-ID:19980311T180000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980311T160000Z -DTEND:19980311T180000Z -DTSTAMP:19980306T193000Z -LOCATION:The Small conference room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:ADD -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:2 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980315T180000Z -DTEND:19980315T200000Z -DTSTAMP:19980307T193000Z -LOCATION:Conference Room A -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:2 -RDATE:19980304T180000Z -RDATE:19980311T160000Z -RDATE:19980315T180000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980304T180000Z -DTEND:19980304T200000Z -DTSTAMP:19980303T193000Z -LOCATION:Conference Room A -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SEQUENCE:2 -RECURRENCE-ID:19980311T160000Z -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980311T160000Z -DTEND:19980304T180000Z -DTSTAMP:19980306T193000Z -ORGANIZER:Mailto:A@example.com -LOCATION:The Small conference room -UID:guid-1@host1.com -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:COUNTER -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -RECURRENCE-ID:19970715T210000Z -SEQUENCE:4 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970715T220000Z -DTEND:19970715T230000Z -LOCATION:Conference Call -COMMENT:May we bump this by an hour? I have a conflict -DTSTAMP:19970629T094000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -SEQUENCE:0 -RRULE:FREQ=MONTHLY;BYMONTHDAY=1 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970601T210000Z -DTEND:19970601T220000Z -DTSTAMP:19970602T094000Z -LOCATION:Conference Call -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single - event;RRULE -REQUEST-STATUS:3.0;Invalid Property Name;FOO -UID:guid-1@host1.com -SEQUENCE:0 -DTSTAMP:19970603T094000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DTSTART:19970701T170000Z -DUE:19970722T170000Z -PRIORITY:1 -SUMMARY:Create the requirements document -UID:calsrv.example.com-873970198738777-00@example.com -SEQUENCE:0 -DTSTAMP:19970717T200000Z -STATUS:Needs Action -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com -UID:calsrv.example.com-873970198738777-00@example.com -COMMENT:I'll send you my input by e-mail -SEQUENCE:0 -DTSTAMP:19970717T203000Z -REQUEST-STATUS:2.0;Success -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -UID:calsrv.example.com-873970198738777-00@example.com -SUMMARY:Create the requirements document -PRIORITY:1 -SEQUENCE:0 -STATUS:IN-PROCESS -DTSTART:19970701T170000Z -DTSTAMP:19970717T230000Z -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:MAILTO:A@example.com -ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com -PERCENT-COMPLETE:75 -REQUEST-STATUS:2.0 -UID:calsrv.example.com-873970198738777-00@example.com -DTSTAMP:19970717T233000Z -SEQUENCE:0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:MAILTO:A@example.com -ATTENDEE;PARTSTAT=COMPLETED:Mailto:D@example.com -UID:calsrv.example.com-873970198738777-00@example.com -REQUEST-STATUS:2.0 -DTSTAMP:19970717T233000Z -SEQUENCE:0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;PARTSTAT=IN-PROCESS;CUTYPE=INDIVIDUAL:Mailto:D@example.com -DTSTART:19970701T170000Z -DUE:19970722T170000Z -PRIORITY:1 -SUMMARY:Create the requirements document -UID:calsrv.example.com-873970198738777-00@example.com -SEQUENCE:1 -DTSTAMP:19970718T100000Z -STATUS:IN-PROGRESS -PERCENT-COMPLETE:40 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR -DTSTART:19980101T100000 -DUE:19980103T100000 -SUMMARY:Send Status Reports to Area Managers -UID:calsrv.example.com-873970198738777-00@example.com -SEQUENCE:0 -DTSTAMP:19970717T200000Z -STATUS:NEEDS-ACTION -PRIORITY:1 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com -PERCENT-COMPLETE:75 -UID:calsrv.example.com-873970198738777-00@example.com -DTSTAMP:19970717T233000Z -RECURRENCE-ID:19980101T170000Z -SEQUENCE:1 -ORGANIZER:MAILTO:A@Example.com -REQUEST-STATUS:2.0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:PUBLISH -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -BEGIN:VJOURNAL -DTSTART:19971002T200000Z -DTSTAMP:19971002T200000Z -ORGANIZER:MAILTO:A@Example.com -SUMMARY:Phone conference minutes -DESCRIPTION:The editors meeting was held on October 1\, 1997. - Details are in the attached document. -UID:0981234-1234234-2410@example.com -RELATED-TO:0981234-1234234-2402-35@example.com -ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt -END:VJOURNAL -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REFRESH -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -UID: guid-1-12345@host1.com -DTSTAMP:19970603T094000 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:acme-12345@host1.com -SEQUENCE:3 -RRULE:FREQ=WEEKLY -RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -DESCRIPTION:IETF-C&S Conference Call -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970801T210000Z -DTEND:19970801T220000Z -RECURRENCE-ID:19970809T210000Z -DTSTAMP:19970726T083000 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REFRESH -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -UID:acme-12345@host1.com -DTSTAMP:19970603T094000 -END:VEVENT -END:VCALENDAR diff --git a/libical/test-data/2446.vcd b/libical/test-data/2446.vcd deleted file mode 100644 index 679f6c7920..0000000000 --- a/libical/test-data/2446.vcd +++ /dev/null @@ -1,1007 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :0 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VCALENDAR -METHOD:PUBLISH -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTART:19970701T200000Z -DTSTAMP:19970611T190000Z -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID:0981234-1234234-23@example.com -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:PUBLISH -VERSION:2.0 -PRODID:-//ACME/DesktopCalendar//EN -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTAMP:19970612T190000Z -DTSTART:19970701T210000Z -DTEND:19970701T230000Z -SEQUENCE:1 -UID:0981234-1234234-23@example.com -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:CANCEL -VERSION:2.0 -PRODID:-//ACME/DesktopCalendar//EN -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -COMMENT:DUKES forfeit the game -SEQUENCE:2 -UID:0981234-1234234-23@example.com -DTSTAMP:19970613T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:PUBLISH -SCALE:GREGORIAN -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:America-Chicago -TZURL:http://zones.stds_r_us.net/tz/America-Chicago -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0500 -TZOFFSETTO:-0600 -TZNAME:CST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0600 -TZOFFSETTO:-0500 -TZNAME:CDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -ATTACH:http://www.dukes.com/ -CATEGORIES:SPORTS EVENT,ENTERTAINMENT -CLASS:PRIVATE -DESCRIPTION:MIDWAY STADIUM\n - Big time game. MUST see.\n - Expected duration:2 hours\n -DTEND;TZID=America-Chicago:19970701T180000 -DTSTART;TZID=America-Chicago:19970702T160000 -DTSTAMP:19970614T190000Z -STATUS:CONFIRMED -LOCATION;VALUE=URI:http://www.midwaystadium.com/ -PRIORITY:2 -RESOURCES:SCOREBOARD -SEQUENCE:3 -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID:0981234-1234234-23@example.com -RELATED-TO:0981234-1234234-14@example.com -BEGIN:VALARM -TRIGGER:-PT2H -ACTION:DISPLAY -DESCRIPTION:You should be leaving for the game now. -END:VALARM -BEGIN:VALARM -TRIGGER:-PT30M -ACTION:AUDIO -END:VALARM -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:PUBLISH -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTAMP:19970614T190000Z -UID:0981234-1234234-23@example.com -DTSTART;VALUE=DATE:19970714 -RRULE:FREQ=YEARLY;INTERVAL=1 -SUMMARY: Bastille Day -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com -ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big@example.com -ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com -DTSTAMP:19970611T190000Z -DTSTART:19970701T200000Z -DTEND:19970701T2000000Z -SUMMARY:Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com -ORGANIZER:MAILTO:A@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970612T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com -ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE; - CUTYPE=ROOM:Mailto:Conf@example.com -ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com -DTSTART:19970701T180000Z -DTEND:19970701T190000Z -SUMMARY:Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:1 -DTSTAMP:19970613T190000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -DTSTART:19970701T190000Z -DTEND:19970701T200000Z -SUMMARY:Discuss the Merits of the election results -LOCATION:Green Conference Room -UID:calsrv.example.com-873970198738777a@example.com -SEQUENCE:0 -DTSTAMP:19970611T190000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:COUNTER -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -DTSTART:19970701T160000Z -DTEND:19970701T190000Z -DTSTAMP:19970612T190000Z -SUMMARY:Discuss the Merits of the election results -LOCATION:Green Conference Room -COMMENT:This time works much better and I think the big conference - room is too big -UID:calsrv.example.com-873970198738777a@example.com -SEQUENCE:0 -DTSTAMP:19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -DTSTAMP:19970613T190000Z -DTSTART:19970701T160000Z -DTEND:19970701T190000Z -SUMMARY:Discuss the Merits of the election results - changed to - meet B's schedule -LOCATION:Green Conference Room -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:1 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:DECLINECOUNTER -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -COMMENT:Sorry, I cannot change this meeting time -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -DTSTAMP:19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- - TO="Mailto:E@example.com":Mailto:C@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;PARTSTAT=DELEGATED;DELEGATED- - TO="Mailto:E@example.com":Mailto:C@example.com -ATTENDEE;RSVP=TRUE; - DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com -DTSTART:19970701T180000Z -DTEND:19970701T200000Z -SUMMARY:Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -STATUS:CONFIRMED -DTSTAMP:19970611T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED- - FROM="Mailto:C@example.com":Mailto:E@example.com -ATTENDEE;PARTSTAT=DELEGATED; - DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=DELEGATED; - DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com -ATTENDEE;PARTSTAT=DECLINED; - DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com -COMMENT:Sorry, I will be out of town at that time. -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -REQUEST-STATUS:2.0;Success -DTSTAMP:19970614T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:MAILTO:A@Example.com -ATTENDEE;PARTSTAT=DECLINED; - DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -SUMMARY:Phone Conference -DTSTART:19970701T180000Z -DTEND:19970701T200000Z -DTSTAMP:19970614T200000Z -COMMENT:DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOUR - INVITATION -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:CANCEL -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:A@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -COMMENT:Mr. B cannot attend. It's raining. Lets cancel. -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:1 -STATUS:CANCELLED -DTSTAMP:19970613T190000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:CANCEL -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:mailto:B@example.com -COMMENT:You're off the hook for this meeting -UID:calsrv.example.com-873970198738777@example.com -DTSTAMP:19970613T193000Z -SEQUENCE:1 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -ATTENDEE;CUTYPE=ROOM:CR_Big@example.com -ATTENDEE;ROLE=NON-PARTICIPANT; - RSVP=FALSE:Mailto:E@example.com -DTSTAMP:19970611T190000Z -DTSTART:19970701T200000Z -DTEND:19970701T203000Z -SUMMARY:Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:2 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:B@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:B@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com -ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -DTSTAMP:19970611T190000Z -DTSTART:19970701T200000Z -DTEND:19970701T203000Z -RRULE:FREQ=WEEKLY -SUMMARY:Phone Conference -UID:123456@example.com -SEQUENCE:1 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -METHOD:PUBLISH -BEGIN:VFREEBUSY -DTSTAMP:19980101T124100Z -ORGANIZER:MAILTO:A@Example.com -DTSTART:19980101T124200Z -DTEND:19980107T124200Z -FREEBUSY:19980101T180000Z/19980101T190000Z -FREEBUSY:19980103T020000Z/19980103T050000Z -FREEBUSY:19980107T020000Z/19980107T050000Z -FREEBUSY:19980113T000000Z/19980113T010000Z -FREEBUSY:19980115T190000Z/19980115T200000Z -FREEBUSY:19980115T220000Z/19980115T230000Z -FREEBUSY:19980116T013000Z/19980116T043000Z -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VFREEBUSY -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -DTSTAMP:19970613T190000Z -DTSTART:19970701T080000Z -DTEND:19970701T200000 -UID:calsrv.example.com-873970198738777@example.com -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:A@example.com -ATTENDEE:Mailto:B@example.com -DTSTART:19970701T080000Z -DTEND:19970701T200000Z -UID:calsrv.example.com-873970198738777@example.com -FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M -DTSTAMP:19970613T190030Z -END:VFREEBUSY -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTIMEZONE -TZID:America-SanJose -TZURL:http://zones.stds_r_us.net/tz/America-SanJose -BEGIN:STANDARD -DTSTART:19671029T020000 -RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10 -TZOFFSETFROM:-0700 -TZOFFSETTO:-0800 -TZNAME:PST -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19870405T020000 -RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4 -TZOFFSETFROM:-0800 -TZOFFSETTO:-0700 -TZNAME:PDT -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:A@example.COM -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:B@example.fr -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp -DTSTAMP:19970613T190030Z -DTSTART;TZID=America-SanJose:19970701T140000 -DTEND;TZID=America-SanJose:19970701T150000 -RRULE:FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU -RDATE;TZID=America-SanJose:19970910T140000 -EXDATE;TZID=America-SanJose:19970909T140000 -EXDATE;TZID=America-SanJose:19971028T140000 -SUMMARY:Weekly Phone Conference -UID:calsrv.example.com-873970198738777@example.com -SEQUENCE:0 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -SEQUENCE:0 -RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970601T210000Z -DTEND:19970601T220000Z -LOCATION:Conference Call -DTSTAMP:19970526T083000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1com -RECURRENCE-ID:19970701T210000Z -SEQUENCE:1 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970703T210000Z -DTEND:19970703T220000Z -LOCATION:Conference Call -DTSTAMP:19970626T093000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:CANCEL -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -RECURRENCE-ID:19970801T210000Z -SEQUENCE:2 -STATUS:CANCELLED -DTSTAMP:19970721T093000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:CANCEL -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -DTSTAMP:19970721T103000Z -STATUS:CANCELLED -SEQUENCE:3 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -RECURRENCE-ID;RANGE=THISANDFUTURE:19970901T210000Z -SEQUENCE:3 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Discussion -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970901T210000Z -DTEND:19970901T220000Z -LOCATION:Building 32, Microsoft, Seattle, WA -DTSTAMP:19970526T083000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:ADD -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:4 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970715T210000Z -DTEND:19970715T220000Z -LOCATION:Conference Call -DTSTAMP:19970629T093000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:0 -RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980303T210000Z -DTEND:19980303T220000Z -LOCATION:The White Room -DTSTAMP:19980301T093000Z -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:ADD -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:7 -RRULE:WKST=SU;BYDAY=TH;FREQ=WEEKLY -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980303T210000Z -DTEND:19980303T220000Z -DTSTAMP:19980303T193000Z -LOCATION:The Usual conference room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:7 -RRULE:WKST=SU;BYDAY=TU,TH;FREQ=WEEKLY -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980303T210000Z -DTEND:19980303T220000Z -DTSTAMP:19980303T193000Z -LOCATION:The White Room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:0 -RDATE:19980304T180000Z -RDATE:19980311T180000Z -RDATE:19980318T180000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980304T180000Z -DTEND:19980304T200000Z -DTSTAMP:19980303T193000Z -LOCATION:Conference Room A -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:1 -RECURRENCE-ID:19980311T180000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980311T160000Z -DTEND:19980311T180000Z -DTSTAMP:19980306T193000Z -LOCATION:The Small conference room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:ADD -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:2 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980315T180000Z -DTEND:19980315T200000Z -DTSTAMP:19980307T193000Z -LOCATION:Conference Room A -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:123456789@host1.com -SEQUENCE:2 -RDATE:19980304T180000Z -RDATE:19980311T160000Z -RDATE:19980315T180000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980304T180000Z -DTEND:19980304T200000Z -DTSTAMP:19980303T193000Z -LOCATION:Conference Room A -STATUS:CONFIRMED -END:VEVENT -BEGIN:VEVENT -SEQUENCE:2 -RECURRENCE-ID:19980311T160000Z -ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -SUMMARY:Review Accounts -DTSTART:19980311T160000Z -DTEND:19980304T180000Z -DTSTAMP:19980306T193000Z -LOCATION:The Small conference room -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:COUNTER -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -RECURRENCE-ID:19970715T210000Z -SEQUENCE:4 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970715T220000Z -DTEND:19970715T230000Z -LOCATION:Conference Call -COMMENT:May we bump this by an hour? I have a conflict -DTSTAMP:19970629T094000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:guid-1@host1.com -SEQUENCE:0 -RRULE:FREQ=MONTHLY;BYMONTHDAY=1 -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DESCRIPTION:IETF-C&S Conference Call -CLASS:PUBLIC -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970601T210000Z -DTEND:19970601T220000Z -DTSTAMP:19970602T094000Z -LOCATION:Conference Call -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single - event;RRULE -REQUEST-STATUS:3.0;Invalid Property Name;FOO -UID:guid-1@host1.com -SEQUENCE:0 -DTSTAMP:19970603T094000Z -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE:Mailto:B@example.com -ATTENDEE;RSVP=TRUE:Mailto:C@example.com -ATTENDEE;RSVP=TRUE:Mailto:D@example.com -DTSTART:19970701T170000Z -DUE:19970722T170000Z -PRIORITY:1 -SUMMARY:Create the requirements document -UID:calsrv.example.com-873970198738777-00@example.com -SEQUENCE:0 -DTSTAMP:19970717T200000Z -STATUS:Needs Action -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com -UID:calsrv.example.com-873970198738777-00@example.com -COMMENT:I'll send you my input by e-mail -SEQUENCE:0 -DTSTAMP:19970717T203000Z -REQUEST-STATUS:2.0;Success -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -UID:calsrv.example.com-873970198738777-00@example.com -SUMMARY:Create the requirements document -PRIORITY:1 -SEQUENCE:0 -STATUS:IN-PROCESS -DTSTART:19970701T170000Z -DTSTAMP:19970717T230000Z -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:MAILTO:A@example.com -ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com -PERCENT-COMPLETE:75 -UID:calsrv.example.com-873970198738777-00@example.com -DTSTAMP:19970717T233000Z -SEQUENCE:0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:MAILTO:A@example.com -ATTENDEE;PARTSTAT=COMPLETED:Mailto:D@example.com -UID:calsrv.example.com-873970198738777-00@example.com -DTSTAMP:19970717T233000Z -SEQUENCE:0 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;PARTSTAT=IN-PROCESS;CUTYPE=INDIVIDUAL:Mailto:D@example.com -DTSTART:19970701T170000Z -DUE:19970722T170000Z -PRIORITY:1 -SUMMARY:Create the requirements document -UID:calsrv.example.com-873970198738777-00@example.com -SEQUENCE:1 -DTSTAMP:19970718T100000Z -STATUS:IN-PROGRESS -PERCENT-COMPLETE:40 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REQUEST -VERSION:2.0 -BEGIN:VTODO -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR:Mailto:A@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com -ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com -RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR -DTSTART:19980101T100000 -DUE:19980103T100000 -SUMMARY:Send Status Reports to Area Managers -UID:calsrv.example.com-873970198738777-00@example.com -SEQUENCE:0 -DTSTAMP:19970717T200000Z -STATUS:NEEDS ACTION -PRIORITY:1 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//ACME/DesktopCalendar//EN -METHOD:REPLY -VERSION:2.0 -BEGIN:VTODO -ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com -PERCENT-COMPLETE:75 -UID:calsrv.example.com-873970198738777-00@example.com -DTSTAMP:19970717T233000Z -RECURRENCE-ID:19980101T170000Z -SEQUENCE:1 -END:VTODO -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:PUBLISH -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -BEGIN:VJOURNAL -DTSTART:19971002T200000Z -ORGANIZER:MAILTO:A@Example.com -SUMMARY:Phone conference minutes -DESCRIPTION:The editors meeting was held on October 1, 1997. - Details are in the attached document. -UID:0981234-1234234-2410@example.com -RELATED-TO:0981234-1234234-2402-35@example.com -ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt -END:VJOURNAL -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REFRESH -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -ATTENDEE:Mailto:C@example.com -ATTENDEE:Mailto:D@example.com -UID: guid-1-12345@host1.com -DTSTAMP:19970603T094000 -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -METHOD:REQUEST -PRODID:-//RDU Software//NONSGML HandCal//EN -VERSION:2.0 -BEGIN:VEVENT -UID:acme-12345@host1.com -SEQUENCE:3 -RRULE:FREQ=WEEKLY -RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z -ORGANIZER:Mailto:A@example.com -ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -DESCRIPTION:IETF-C&S Conference Call -SUMMARY:IETF Calendaring Working Group Meeting -DTSTART:19970801T210000Z -DTEND:19970801T220000Z -RECURRENCE-ID:19970809T210000Z -DTSTAMP:19970726T083000 -STATUS:CONFIRMED -END:VEVENT -END:VCALENDAR -BEGIN:VCALENDAR -PRODID:-//RDU Software//NONSGML HandCal//EN -METHOD:REFRESH -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:Mailto:A@example.com -ATTENDEE:Mailto:B@example.com -UID:acme-12345@host1.com -DTSTAMP:19970603T094000 -END:VEVENT -END:VCALENDAR -END:VCALENDAR \ No newline at end of file diff --git a/libical/test-data/3 b/libical/test-data/3 deleted file mode 100644 index 008373ebfa..0000000000 --- a/libical/test-data/3 +++ /dev/null @@ -1,21 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VTODO -DTSTAMP:19980130T134500Z -SEQUENCE:2 -UID:uid4@host1.com -ORGANIZER:MAILTO:unclesam@us.gov -ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com -DUE:19980415T235959 -STATUS:NEEDS-ACTION -SUMMARY:Submit Income Taxes -BEGIN:VALARM -ACTION:AUDIO -TRIGGER;VALUE=DATE-TIME:19980403T120000 -ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud -REPEAT:4 -DURATION:PT1H -END:VALARM -END:VTODO -END:VCALENDAR diff --git a/libical/test-data/4 b/libical/test-data/4 deleted file mode 100644 index 59c3d6917b..0000000000 --- a/libical/test-data/4 +++ /dev/null @@ -1,23 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ABC Corporation//NONSGML My Product//EN -BEGIN:VJOURNAL -DTSTAMP:19970324T120000Z -UID:uid5@host1.com -ORGANIZER:MAILTO:jsmith@host.com -STATUS:DRAFT -CLASS:PUBLIC -CATEGORIES:Project Report, XYZ: Weekly Meeting -DESCRIPTION:Project xyz Review Meeting Minutes\n - Agenda\n1. Review of project version 1.0 requirements.\n2. - Definition - of project processes.\n3. Review of project schedule.\n - Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was - decided that the requirements need to be signed off by - product marketing.\n-Project processes were accepted.\n - -Project schedule needs to account for scheduled holidays - and employee vacation time. Check with HR for specific - dates.\n-New schedule will be distributed by Friday.\n- - Next weeks meeting is cancelled. No meeting until 3/23. -END:VJOURNAL -END:VCALENDAR diff --git a/libical/test-data/5 b/libical/test-data/5 deleted file mode 100644 index ba1fd09f7f..0000000000 --- a/libical/test-data/5 +++ /dev/null @@ -1,16 +0,0 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//RDU Software//NONSGML HandCal//EN -BEGIN:VFREEBUSY -ORGANIZER:MAILTO:jsmith@host.com -DTSTART:19980313T141711Z -DTEND:19980410T141711 -FREEBUSY:19980314T233000Z/19980315T003000Z -FREEBUSY:19980316T153000Z/19980316T163000Z -FREEBUSY:19980318T030000/19980318T040000,19980318T030000/19980318T040000 -URL:http://www.host.com/calendar/busytime/jsmith.ifb -END:VFREEBUSY -END:VCALENDAR - - - diff --git a/libical/test-data/6 b/libical/test-data/6 deleted file mode 100644 index 753bd2b66c..0000000000 --- a/libical/test-data/6 +++ /dev/null @@ -1,12 +0,0 @@ -BEGIN:VCALENDAR -METHOD:PUBLISH -PRODID:-//ACME/DesktopCalendar//EN -VERSION:2.0 -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTART:19970701T200000Z -DTSTAMP:19970611T190000Z -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -UID:0981234-1234234-23@example.com -END:VEVENT -END:VCALENDAR diff --git a/libical/test-data/7 b/libical/test-data/7 deleted file mode 100644 index 0a255fc514..0000000000 --- a/libical/test-data/7 +++ /dev/null @@ -1,14 +0,0 @@ -BEGIN:VCALENDAR -METHOD:PUBLISH -VERSION:2.0 -PRODID:-//ACME/DesktopCalendar//EN -BEGIN:VEVENT -ORGANIZER:mailto:a@example.com -DTSTAMP:19970612T190000Z -DTSTART:19970701T210000Z -DTEND:19970701T230000Z -SEQUENCE:1 -UID:0981234-1234234-23@example.com -SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES -END:VEVENT -END:VCALENDAR diff --git a/libical/test-data/Makefile.am b/libical/test-data/Makefile.am deleted file mode 100644 index bf2079606c..0000000000 --- a/libical/test-data/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ -EXTRA_DIST = \ -0 \ -1 \ -1.1 \ -2 \ -2445.ics \ -2446.ics \ -3 \ -4 \ -5 \ -6 \ -7 \ -smallcluster.ics \ No newline at end of file diff --git a/libical/test-data/smallcluster.ics b/libical/test-data/smallcluster.ics deleted file mode 100644 index 2902136bab..0000000000 --- a/libical/test-data/smallcluster.ics +++ /dev/null @@ -1,13 +0,0 @@ -BEGIN:VCALENDAR -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN -BEGIN:VEVENT -DTSTART - :19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -RRULE:FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2,-3,4,-5,6,-7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54;BYSECOND=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26 -END:VEVENT -END:VCALENDAR -END:VCALENDAR diff --git a/libical/test-data/smallcluster.vcd b/libical/test-data/smallcluster.vcd deleted file mode 100644 index c4e2dbae50..0000000000 --- a/libical/test-data/smallcluster.vcd +++ /dev/null @@ -1,18 +0,0 @@ -BEGIN:VCALENDAR -X-LIC-CLUSTERCOUNT - :0 -DTSTART - :00000000T000000 -DTEND - :00000000T000000 -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//hacksw/handcal//NONSGML v1.0//EN -BEGIN:VEVENT -DTSTART:19970714T170000Z -DTEND:19970715T035959Z -SUMMARY:Bastille Day Party -RRULE:FREQ=YEARLY;UNTIL=123456T123456;BYSETPOS=-1,2,-3,4,-5,6,-7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54;BYSECOND=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,4,25,26 -END:VEVENT -END:VCALENDAR -END:VCALENDAR diff --git a/libversit/.cvsignore b/libversit/.cvsignore deleted file mode 100644 index 36a99050c8..0000000000 --- a/libversit/.cvsignore +++ /dev/null @@ -1,9 +0,0 @@ -.deps -Makefile -Makefile.in -.libs -vcc.c -vcc.lo -vobject.lo -vcaltmp.lo -libversit.la \ No newline at end of file diff --git a/libversit/Makefile.am b/libversit/Makefile.am deleted file mode 100644 index 5d42636c1c..0000000000 --- a/libversit/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ - -noinst_LTLIBRARIES = libversit.la - -libversit_la_SOURCES = \ - vcc.y \ - vcc.h \ - vobject.c \ - vobject.h \ - port.h \ - vcaltmp.c \ - vcaltmp.h - -EXTRA_DIST = README.TXT vcaltest.c vctest.c - -YFLAGS=-pversit_ diff --git a/libversit/README.TXT b/libversit/README.TXT deleted file mode 100644 index c8ce8b0979..0000000000 --- a/libversit/README.TXT +++ /dev/null @@ -1,951 +0,0 @@ -NOTE: If you used the earlier APIs released by Versit -then you will want to look at the document "migrate.doc" -included with this package. It contains a discussion of -the differences between the old API and this one. - ----------------------------------------------------------------- - -The vCard/vCalendar C interface is implemented in the set -of files as follows: - -vcc.y, yacc source, and vcc.c, the yacc output you will use -implements the core parser - -vobject.c implements an API that insulates the caller from -the parser and changes in the vCard/vCalendar BNF - -port.h defines compilation environment dependent stuff - -vcc.h and vobject.h are header files for their .c counterparts - -vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions -which you may find useful. - -test.c is a standalone test driver that exercises some of -the features of the APIs provided. Invoke test.exe on a -VCARD/VCALENDAR input text file and you will see the pretty -print output of the internal representation (this pretty print -output should give you a good idea of how the internal -representation looks like -- there is one such output in the -following too). Also, a file with the .out suffix is generated -to show that the internal representation can be written back -in the original text format. - ------------------------------------------------------------------ - - - VObject for VCard/VCalendar - -Table of Contents -================= -1. VObject -2. Internal Representations of VCard/VCalendar -3. Iterating Through VObject's Properties or Values -4. Pretty Printing a VObject Tree -5. Building A VObject Representation of A VCard/VCalendar -6. Converting A VObject Representation Into Its Textual Representation -7. Miscellaneous Notes On VObject APIs usages -8. Brief descriptions of each APIs -9. Additional Programming Notes. - -This document is mainly about the VObject and its APIs. The main -use of a VObject is to represent a VCard or a VCalendar inside -a program. However, its use is not limited to aforemention as it -can represent an arbitrary information that makes up of a tree or -forest of properties/values. - -1. VObject - ======= -A VObject can have a name (id) and a list of associated properties and -a value. Each property is itself a VObject. - -2. Internal Representations of VCard/VCalendar - =========================================== -A list of VCard or a VCalendar is represented by a list of VObjects. -The name (id) of the VObjects in the list is either VCCardProp or -VCCalProp. Each of these VObjects can have a list of properties. -Since a property is represented as a VObject, each of these properties -can have a name, a list of properties, and a value. - -For example, the input file "vobject.vcf": - -BEGIN:VCARD -N:Alden;Roland -FN:Roland H. Alden -ORG:AT&T;Versit Project Office -TITLE:Consultant -EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com -EMAIL;INTERNET:ralden@sfgate.com -EMAIL;MCIMail:242-2200 -LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -Suite 2208=0A= -One Pine Street=0A= -San Francisco, CA 94111 -LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -Suite 2208=0A= -One Pine Street=0A= -San Francisco, CA 94111=0A= -U.S.A. -TEL;WORK;PREF;MSG:+1 415 296 9106 -TEL;WORK;FAX:+1 415 296 9016 -TEL;MSG;CELL:+1 415 608 5981 -ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. -SOUND:ROW-LAND H ALL-DIN -LOGO;GIF;BASE64: - R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC - QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO - 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv - /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw - cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu - ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW - ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf - MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM - 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E - +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW - gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm - LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s - JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6 - mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA - 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj - GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim - DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo - 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f - hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR - BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL - thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7 - asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5 - fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04 - UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe - eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C - z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI - ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4 - wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY - gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA - i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4 - I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7 - -BEGIN:VCALENDAR -DCREATED:19960523T100522 -PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN -VERSION:0.3 -BEGIN:VEVENT -START:19960523T120000 -END:19960523T130000 -SUBTYPE:PHONE CALL -SUMMARY:VERSIT PDI PR Teleconference/Interview -DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland -END:VEVENT -BEGIN:VEVENT -START:19960523T113000 -END:19960523T115500 -SUBTYPE:LUNCH -SUMMARY:Eat in the cafeteria today -END:VEVENT -END:VCALENDAR - -END:VCARD - - -will conceptually be be represented as - vcard - VCNameProp - VCFamilyNameProp=Alden - VCGivenNameProp=Roland - VCFullNameProp=Roland H.Alden - .... - -note that - EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com -will be represented as: - VCEmailAddress=sf!rincon!ralden@alden.attmail.com - VCWork - VCPreferred - VCInternet -where the lower level properties are properties of the property -VCEmailAddress. - -Groupings are flattened out in the VObject representation such -that: - a.b:blah - a.c:blahblah -are represented as: - b=blah - VCGrouping=a - c=blahblah - VCGrouping=a -i.e. one can read the above as: - the property "b" has value "blah" and property "VCGrouping" - with the value "a". - the property "c" has value "blahblah" and property "VCGrouping" - with the value "a". -likewise, multi-level groupings are flatten similarly. e.g. - a.b.c:blah - a.b.e:blahblah ---> - c=blah - VCGrouping=b - VCGrouping=a - e=blahblah - VCGrouping=b - VCGrouping=a -which read: - the property "c" has value "blah" and property "VCGrouping" - with the value "b" which has property "VCGrouping" - with value "a". - the property "e" has value "blahblah" and property "VCGrouping" - with the value "b" which has property "VCGrouping" - with value "a". - -3. Iterating Through VObject's Properties or Values - ================================================ -The following is a skeletal form of iterating through -all properties of a vobject, o: - - // assume the object of interest, o, is of type VObject - VObjectIterator i; - initPropIterator(&i,o); - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - // ... do something with "each" property - } - -Use the API vObjectName() to access a VObject's name. -Use the API vObjectValueType() to determine if a VObject has - a value. For VCard/VCalendar application, you - should not need this function as practically - all values are either of type VCVT_USTRINGZ or - VCVT_RAW (i.e set by setVObjectUStringZValue and - setVObjectAnyValue APIs respectively), and the - value returned by calls to vObjectUStringZValue - and vObjectAnyValue are 0 if a VObject has no - value. (There is a minor exception where VObject with - VCDataSizeProp has value that is set by - setVObjectLongValue). -Use the APIs vObject???Value() to access a VObject's value. - where ??? is the expected type. -Use the APIs setvObject???Value() to set or modify a VObject's value. - where ??? is the expected type. -Use the API isAPropertyOf() to query if a name match the name of - a property of a VObject. Since isAPropertyOf() return - the matching property, we can use that to retrieve - a property and subsequently the value of the property. - -4. Pretty Printing a VObject Tree - ============================== -VObject tree can be pretty printed with the printVObject() function. -The output of pretty printing a VObject representation of the input -test file "vobject.vcf" is shown below. Note that the indentation -indicates the tree hirerarchy where the immediate children nodes -of a parent node is all at the same indentation level and the -immediate children nodes are the immediate properties of the -associated parent nodes. In the following, {N,FN,ORG,TITLE,...} -are immediate properties of VCARD. {F and G} are properties of N -with value {"Alden" and "Roland"} respectively; FN has no property -but has the value "Roland H. Alden"; EMAIL has value and -the properties WORK, PREF, and INTERNET. - - -VCARD - N - F="Alden" - G="Roland" - FN="Roland H. Alden" - ORG - ORGNAME="AT&T" - OUN="Versit Project Office" - TITLE="Consultant" - EMAIL="sf!rincon!ralden@alden.attmail.com" - WORK - PREF - INTERNET - EMAIL="ralden@sfgate.com" - INTERNET - EMAIL="242-2200" - MCIMail - LABEL="Roland H. Alden - Suite 2208 - One Pine Street - San Francisco, CA 94111" - DOM - POSTAL - PARCEL - HOME - WORK - QP - LABEL="Roland H. Alden - Suite 2208 - One Pine Street - San Francisco, CA 94111 - U.S.A." - POSTAL - PARCEL - HOME - WORK - QP - TEL="+1 415 296 9106" - WORK - PREF - MSG - TEL="+1 415 296 9016" - WORK - FAX - TEL="+1 415 608 5981" - MSG - CELL - ADR - EXT ADD="Suite 2208" - STREET="One Pine Street" - L="San Francisco" - R="CA" - PC="94111" - C="U.S.A." - SOUND="ROW-LAND H ALL-DIN" - LOGO=[raw data] - GIF - BASE64 - DataSize=1482 -VCALENDAR - DCREATED="19960523T100522" - PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN" - VERSION="0.3" - VEVENT - START="19960523T120000" - END="19960523T130000" - SUBTYPE="PHONE CALL" - SUMMARY="VERSIT PDI PR Teleconference/Interview" - DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland" - VEVENT - START="19960523T113000" - END="19960523T115500" - SUBTYPE="LUNCH" - SUMMARY="Eat in the cafeteria today" - -5. Building A VObject Representation of A VCard/VCalendar - ====================================================== -The parser in vcc.y converts an input file with one or more -VCard/VCalendar that is in their textual representation -into their corresponding VObject representation. - -VObject representation of a VCard/VCalendar can also be built -directly with calls to the VObject building APIs. e.g. - - VObject *prop; - VObject *vcard = newVObject(VCCardProp); - prop = addProp(vcard,VCNameProp); - addPropValue(prop,VCFamilyNameProp,"Alden"); - addPropValue(prop,VCGivenNameProp,"Roland"); - addPropValue(vcard,VCFullNameProp,"Roland H. Alden"); - .... - -6. Converting A VObject Representation Into Its Textual Representation - =================================================================== -The VObject representation can be converted back to its textual -representation via the call to writeVObject() or writeMemVObject() -API. e.g. - a. to write to a file: - // assume vcard is of type VObject - FILE *fp = fopen("alden.vcf","w"); - writeVObject(fp,vcard); - a. to write to memory, and let the API allocate the required memory. - char* clipboard = writeVObject(0,0,vcard); - ... do something to clipboard - free(clipboard); - b. to write to a user allocated buffer: - char clipboard[16384]; - int len = 16384; - char *buf = writeVObject(clipboard,&len,vcard); - ... buf will be equal to clipboard if the write - is successful otherwise 0. - -In the case of writing to memory, the memory buffer can be either -allocated by the API or the user. If the user allocate the -memory for the buffer, then the length of the buffer needs to be -communicated to the API via a variable. The variable passed as -the length argument will be overwritten with the actual size -of the text output. A 0 return value from writeMemVObject() -indicates an error which could be caused by overflowing the -size of the buffer or lack of heap memory. - -7. Miscellaneous Notes On VObject APIs usages - ========================================== -a. vcc.h -- contains basic interfaces to the parser: - VObject* Parse_MIME(const char *input, unsigned long len); - VObject* Parse_MIME_FromFile(FILE *file); - -- both of this return a null-terminated list of - VObject that is either a VCARD or VCALENDAR. - To iterate through this list, do - VObject *t, *v; - v = Parse_Mime_FromFile(fp); - while (v) { - // ... do something to v. - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - note that call to cleanVObject will release - resource used to represent the VObject. - -b. vobject.h -- contains basic interfaces to the VObject APIs. - see the header for more details. - The structure of VObject is purposely (hiddened) not exposed - to the user. Every access has to be done via - the APIs. This way, if we need to change the - structure or implementation, the client need not - recompile as long as the interfaces remain the - same. - -c. values of a property is determined by the property definition - itself. The vobject APIs does not attempt to enforce - any of such definition. It is the consumer responsibility - to know what value is expected from a property. e.g - most properties have unicode string value, so to access - the value of these type of properties, you will use - the vObjectUStringZValue() to read the value and - setVObjectUStringZValue() to set or modify the value. - Refer to the VCard and VCalendar specifications for - the definition of each property. - -d. properties name (id) are case incensitive. - -8. Brief descriptions of each APIs - =============================== - * the predefined properties' names (id) are listed under vobject.h - each is of the form VC*Prop. e.g. - #define VC7bitProp "7BIT" - #define VCAAlarmProp "AALARM" - .... - - * consumer of a VObject can only define pointers to VObject. - - * a variable of type VObjectIterator, say "i", can be used to iterate - through a VObject's properties, say "o". The APIs related to - VObjectIterator are: - void initPropIterator(VObjectIterator *i, VObject *o); - -- e.g. usage - initPropIterator(&i,o); - int moreIteration(VObjectIterator *i); - -- e.g. usage - while (moreIteration(&i)) { ... } - VObject* nextVObject(VObjectIterator *i); - -- e.g. usage - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - } - - * VObject can be chained together to form a list. e.g. of such - use is in the parser where the return value of the parser is - a link list of VObject. A link list of VObject can be - built by: - void addList(VObject **o, VObject *p); - and iterated by - VObject* nextVObjectInList(VObject *o); - -- next VObjectInList return 0 if the list - is exhausted. - - * the following APIs are mainly used to construct a VObject tree: - VObject* newVObject(const char *id); - -- used extensively internally by VObject APIs but when - used externally, its use is mainly limited to the - construction of top level object (e.g. an object - with VCCardProp or VCCalendarProp id). - - void deleteVObject(VObject *p); - -- to deallocate single VObject, for most user, use - cleanVObject(VObject *o) instead for freeing all - resources associated with the VObject. - - char* dupStr(const char *s, unsigned int size); - -- duplicate a string s. If size is 0, the string is - assume to be a null-terminated. - - void deleteStr(const char *p); - -- used to deallocate a string allocated by dupStr(); - - void setVObjectName(VObject *o, const char* id); - -- set the id of VObject o. This function is not - normally used by the user. The setting of id - is normally done as part of other APIs (e.g. - addProp()). - - void setVObjectStringZValue(VObject *o, const char *s); - -- set a string value of a VObject. - - void setVObjectUStringZValue(VObject *o, const wchar_t *s); - -- set a Unicode string value of a VObject. - - void setVObjectIntegerValue(VObject *o, unsigned int i); - -- set an integer value of a VObject. - - void setVObjectLongValue(VObject *o, unsigned long l); - -- set an long integer value of a VObject. - - void setVObjectAnyValue(VObject *o, void *t); - -- set any value of a VObject. The value type is - unspecified. - - VObject* setValueWithSize(VObject *prop, void *val, unsigned int size); - -- set a raw data (stream of bytes) value of a VObject - whose size is size. The internal VObject representation - is - this object = val - VCDataSizeProp=size - i.e. the value val will be attached to the VObject prop - and a property of VCDataSize whose value is size - is also added to the object. - - void setVObjectVObjectValue(VObject *o, VObject *p); - -- set a VObject as the value of another VObject. - - const char* vObjectName(VObject *o); - -- retrieve the VObject's Name (i.e. id). - - const char* vObjectStringZValue(VObject *o); - -- retrieve the VObject's value interpreted as - null-terminated string. - - const wchar_t* vObjectUStringZValue(VObject *o); - -- retrieve the VObject's value interpreted as - null-terminated unicode string. - - unsigned int vObjectIntegerValue(VObject *o); - -- retrieve the VObject's value interpreted as - integer. - - unsigned long vObjectLongValue(VObject *o); - -- retrieve the VObject's value interpreted as - long integer. - - void* vObjectAnyValue(VObject *o); - -- retrieve the VObject's value interpreted as - any value. - - VObject* vObjectVObjectValue(VObject *o); - -- retrieve the VObject's value interpreted as - a VObject. - - VObject* addVObjectProp(VObject *o, VObject *p); - -- add a VObject p as a property of VObject o. - (not normally used externally for building a - VObject). - - VObject* addProp(VObject *o, const char *id); - -- add a property whose name is id to VObject o. - - VObject* addPropValue(VObject *o, const char *id, const char *v); - -- add a property whose name is id and whose value - is a null-terminated string to VObject o. - - VObject* addPropSizedValue(VObject *o, const char *id, - const char *v, unsigned int size); - -- add a property whose name is id and whose value - is a stream of bytes of size size, to VObject o. - - VObject* addGroup(VObject *o, const char *g); - -- add a group g to VObject o. - e.g. if g is a.b.c, you will have - o - c - VCGroupingProp=b - VCGroupingProp=a - and the object c is returned. - - VObject* isAPropertyOf(VObject *o, const char *id); - -- query if a property by the name id is in o and - return the VObject that represent that property. - - void printVObject(VObject *o); - -- pretty print VObject o to stdout (for debugging use). - - void writeVObject(FILE *fp, VObject *o); - -- convert VObject o to its textual representation and - write it to file. - - char* writeMemVObject(char *s, int *len, VObject *o); - -- convert VObject o to its textual representation and - write it to memory. If s is 0, then memory required - to hold the textual representation will be allocated - by this API. If a variable len is passed, len will - be overwriten with the byte size of the textual - representation. If s is non-zero, then s has to - be a user allocated buffer whose size has be passed - in len as a variable. Memory allocated by the API - has to be freed with call to free. The return value - of this API is either the user supplied buffer, - the memory allocated by the API, or 0 (in case of - failure). - - void cleanStrTbl(); - -- this function has to be called when all - VObject has been destroyed. - - void cleanVObject(VObject *o); - -- release all resources used by VObject o. - - wchar_t* fakeUnicode(const char *ps, int *bytes); - -- convert char* to wchar_t*. - - extern int uStrLen(const wchar_t *u); - -- length of unicode u. - - char *fakeCString(const wchar_t *u); - -- convert wchar_t to CString (blindly assumes that - this could be done). - -9. Additional Programming Notes - ============================ -In the following notes, please refers to the listing -of Example.vcf and its VObject Representation -(shown at the end of this section). - -* Handling the Return Value of the VCard/VCalendar Parser - The example input text file contains two root VObjects - (a VCalendar and a VCard). The output of the VCard/VCalendar - parser is a null-terminated list of VObjects. For this - particular input file, the list will have two VObjects. - The following shows a template for iterating through the - output of the Parser: - - VObject *t, *v; - v = Parse_Mime_fromFileName("example.vcf"); - while (v) { - // currently, v will either be a VCard or a VCalendar - // do whatever your application need to do to - // v here ... - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - -* Iterating Through a VCard/VCalendar VObject - From the VObject APIs point of view, a VCard VObject - is the same as a VCalendar VObject. However, the application - needs to know what are in a VCard or a VCalendar. - For example, A VCalendar VObject can have VCDCreatedProp, - a VCGEOLocationProp, etc, and one or more VCEventProp and - or VCTodoProp. The VCEventProp and VCTodoProp can have - many properties of their own, which in turn could have - more properties (e.g. VCDAlarmProp can be a VCEventProp - VObject's property, and VCRunTimeProp can be a - VCDAlarmProp VObject's property. Because a VObject tree - can be arbitrarily complex, in general, to process all - properties and values of a VObject tree, a recursive walk - is desirable. An example recursive VObject tree walk - can be found in the vobject.c source lines for printVObject* - and writeVObject* APIs. Depending on what the application need - to do with a VCard or a VCalendar, a recursive walk - of the VObject tree may or may not be desirable. An example - template of a non-recursive walk is shown below: - - void processVCardVCalendar(char *inputFile) - { - VObject *t, *v; - v = Parse_Mime_fromFileName(inputFile); - while (v) { - char *n = vObjectName(v); - if (strcmp(n,VCCardProp) == 0) { - do_VCard(v); - } - else if (strcmp(n,VCCalendarProp) == 0) { - do_VCalendar(v); - } - else { - // don't know how to handle anything else! - } - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - } - - void do_VCard(VObject *vcard) - { - VObjectIterator t; - initPropIterator(&t,vcard); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - // The primarly purpose of this example is to - // show how to iterate through a VCard VObject, - // it is not meant to be efficient at all. - char *n = vObjectName(eachProp); - if (strcmp(n,VCNameProp)==0) { - do_name(eachProp); - } - else if (strcmp(n,VCEmailProp)==0) { - do_email(eachProp); - } - else if (strcmp(n,VCLabelProp)==0) { - do_label(eachProp); - } - else if .... - } - } - - void do_VCalendar(VObject *vcal) - { - VObjectIterator t; - initPropIterator(&t,vcard); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - // The primarly purpose of this example is to - // show how to iterate through a VCalendar VObject, - // it is not meant to be efficient at all. - char *n = vObjectName(eachProp); - if (strcmp(n,VCDCreatedProp)==0) { - do_DCreated(eachProp); - } - else if (strcmp(n,VCVersionProp)==0) { - do_Version(eachProp); - } - else if (strcmp(n,VCTodoProp)==0) { - do_Todo(eachProp); - } - else if (strcmp(n,VCEventProp)==0) { - do_Event(eachProp); - } - else if .... - } - } - - void do_Todo(VObject *vtodo) { ... } - - void do_Event(VObject *vevent) { ... } - - ... - -* Property's Values and Properties - The VObject APIs do not attempt to check for the - correctness of the values of a property. Nor do they - will prevent the user from attaching a non-VCard/VCalendar - standard property to a VCard/VCalendar property. Take - the example of line [11] of the example, "O.K" is not - a valid value of VCStatusProp. It is up to the application - to accept or reject the value of a property. - -* Output of printVObject - PrintVObject pretty prints a VObject tree in human - readable form. See the listing at the end of the file - for an example output of printVObject on the example - input file "Example.vcf". - - Note that binary data are not shown in the output of - printVObject. Instead, a note is made ([raw data]) to - indicate that there exists such a binary data. - -* Note on Binary Data - When the value of a property is a binary data, it is only - useful to know the size of the binary data. - - In the case of the VCard/VCalendar parser, it chooses - to represent the size information as a separate property - called VCDataSizeProp whose value is the size of the binary - data. The APIs sequence to construct the VObject subtree - of line [44] of Example.vcf is - - // VObject *vcard; - VObject *p1 = addProp(vcard,VCLogoProp); - (void) addProp(p1,VCGIFProp); - (void) addProp(p1,VCBASE64Prop); - VObject *p2 = addProp(p1,VCDataSizeProp); - (void) setVObjectLongValue(p2,1482); - setVObjectAnyValue(vcard,...pointer to binary data); - - Note the presence of VCBase64Prop will cause the - writeVObject API to output the binary data as BASE64 text. - For VCard/VCalendar application, having the VCBase64Prop - property is pratically always neccessary for property with - binary data as its value. - -* Note on Quoted-Printable String - String value with embedded newline are written out as - quoted-prinatable string. It is therefore important - to mark a property with a string value that has - one or more embedded newlines, with the VCQutedPrintableProp - property. e.g. - - // VObject *root; - char *msg="To be\nor\nnot to be"; - VObject *p = addPropValue(root,VCDescriptionProp,msg); - // the following is how you mark a property with - // a property. In this case, the marker is - // VCQuotedPrintableProp - addProp(p,VCQuotedPrintableProp); - -* Note on Unicode - Although, the current parser takes ASCII text file only, - string values are all stored as Unicode in the VObject tree. - For now, when using the VObject APIs to construct a - VObject tree, one should always convert ASCII string value - to a Unicode string value: - - // VObject *root; - VObject *p = addProp(root,VCSomeProp); - setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue)); - - An API is provided to simplify the above process: - - addPropValue(root,VCSomeProp,someASCIIStringZValue); - - Note that someASCIISTringZValue is automatically converted to - Unicode by addPropValue API, where as, the former code - sequence do an explicit call to fakeUnicode. - - To read back the value, one should use the vObjectUStringZValue - API not vObjectStringZValue API. The value returned by the - vObjectUStringZValue API is a Unicode string. If the application - do not know how to handle Unicode string, it can use the - fakeCString API to convert it back to ASCII string (as long - as the conversion is meaningful). - - Note that fakeCString return a heap allocated memory. It is - important to call deleteStr on fakeCString return value if - it is not longer required (or there will be memory leak). - - NOTE: Unfortunately, at the point when this document is written, - there is still no consensus on how Unicode is to be handled - in the textual representation of VCard/VCalendar. So, there - is no version of writeVObject and the parser to output and - input Unicode textual representation of VCard/VCalendar. - - -Example.vcf ------------ -line -number Input Text (example.vcf) ------- ---------- -1 BEGIN:VCALENDAR -2 DCREATED:19961102T100522 -3 GEO:0,0 -4 VERSION:1.0 -5 BEGIN:VEVENT -6 DTSTART:19961103T000000 -7 DTEND:20000101T000000 -8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A= -9 or =0A= -10 not to be -11 STATUS:O.K. -12 X-ACTION:No action required -13 DALARM:19961103T114500;5;3;Enjoy -14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom. -15 END:VEVENT -16 -17 BEGIN:VTODO -18 DUE:19960614T0173000 -19 DESCRIPTION:Relex. -20 END:VTODO -21 -22 END:VCALENDAR -23 -24 BEGIN:VCARD -25 N:Alden;Roland -26 FN:Roland H. Alden -27 ORG:AT&T;Versit Project Office -28 TITLE:Consultant -29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com -30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -31 Suite 2208=0A= -32 One Pine Street=0A= -33 San Francisco, CA 94111 -34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -35 Suite 2208=0A= -36 One Pine Street=0A= -37 San Francisco, CA 94111=0A= -38 U.S.A. -39 TEL;WORK;PREF;MSG:+1 415 296 9106 -40 TEL;WORK;FAX:+1 415 296 9016 -41 TEL;MSG;CELL:+1 415 608 5981 -42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. -43 SOUND:ROW-LAND H ALL-DIN -44 LOGO;GIF;BASE64: -45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC - ... 30 lines of BASE64 data not shown here. -76 END:VCARD - - -VObject Representation of Example.vcf: -------------------------------------- -line -in -text -file VObject Tree as Printed by printVObject API ----- ------------------------------------------- -1 VCALENDAR -2 DCREATED="19961102T100522" -3 GEO="0,0" -4 VERSION="1.0" -5 VEVENT -6 DTSTART="19961103T000000" -7 DTEND="20000101T000000" -8 DESCRIPTION="To be -9 or -10 not to be" -8 QUOTED-PRINTABLE -11 STATUS="O.K." -12 X-ACTION="No action required" -13 DALARM -13 RUNTIME="19961103T114500" -13 SNOOZETIME="5" -13 REPEATCOUNT="3" -13 DISPLAYSTRING="Enjoy" -14 MALARM -14 RUNTIME="19970101T120000" -14 EMAIL="johny@nowhere.com" -14 NOTE="Call Mom" -17 VTODO -18 DUE="19960614T0173000" -19 DESCRIPTION="Relex." -24 VCARD -25 N -25 F="Alden" -25 G="Roland" -26 FN="Roland H. Alden" -27 ORG -27 ORGNAME="AT&T" -27 OUN="Versit Project Office" -28 TITLE="Consultant" -29 EMAIL="ralden@alden.com" -29 WORK -29 PREF -29 INTERNET -30 LABEL="Roland H. Alden -31 Suite 2208 -32 One Pine Street -33 San Francisco, CA 94111" -30 DOM -30 POSTAL -30 PARCEL -30 HOME -30 WORK -30 QUOTED-PRINTABLE -34 LABEL="Roland H. Alden -35 Suite 2208 -36 One Pine Street -37 San Francisco, CA 94111 -38 U.S.A." -34 POSTAL -34 PARCEL -34 HOME -34 WORK -34 QUOTED-PRINTABLE -39 TEL="+1 415 296 9106" -39 WORK -39 PREF -39 MSG -40 TEL="+1 415 296 9016" -40 WORK -40 FAX -41 TEL="+1 415 608 5981" -41 MSG -41 CELL -42 ADR -42 EXT ADD="Suite 2208" -42 STREET="One Pine Street" -42 L="San Francisco" -42 R="CA" -42 PC="94111" -42 C="U.S.A." -43 SOUND="ROW-LAND H ALL-DIN" -44 LOGO=[raw data] -44 GIF -44 BASE64 -44 DATASIZE=1482 - diff --git a/libversit/port.h b/libversit/port.h deleted file mode 100644 index 1768beebd8..0000000000 --- a/libversit/port.h +++ /dev/null @@ -1,88 +0,0 @@ -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -#ifndef __PORT_H__ -#define __PORT_H__ 1 - - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -extern "C" { -#endif - -/* some of these #defines are commented out because */ -/* Visual C++ sets them on the compiler command line instead */ - -/* #define _DEBUG */ -/* #define WIN32 */ -/* #define WIN16 */ -/* #define _WINDOWS */ -/* #define __MWERKS__ */ -/* #define INCLUDEMFC */ - -#define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard" -#define vCalendarClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCalendar" - -/* The above strings vCardClipboardFormat and vCalendarClipboardFormat -are globally unique IDs which can be used to generate clipboard format -ID's as per the requirements of a specific platform. For example, in -Windows they are used as the parameter in a call to RegisterClipboardFormat. -For example: - - CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat); - -*/ - -#define vCardMimeType "text/x-vCard" -#define vCalendarMimeType "text/x-vCalendar" - -#define DLLEXPORT(t) t - -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -#define stricmp strcasecmp - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -} -#endif - -#endif /* __PORT_H__ */ diff --git a/libversit/vcaltest.c b/libversit/vcaltest.c deleted file mode 100644 index 5528aab1d1..0000000000 --- a/libversit/vcaltest.c +++ /dev/null @@ -1,118 +0,0 @@ -#include -#include -#include "vcaltmp.h" - -#if 0 -This testcase would generate a file call "frankcal.vcf" with -the following content: - -BEGIN:VCALENDAR -DCREATED:19960523T100522 -GEO:37.24,-17.87 -PRODID:-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN -VERSION:0.3 -BEGIN:VEVENT -DTSTART:19960523T120000 -DTEND:19960523T130000 -DESCRIPTION;QUOTED-PRINTABLE:VERSIT PDI PR Teleconference/Interview =0A= -With Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar=0A= -activities with European Press representatives. -SUMMARY:VERSIT PDI PR Teleconference/Interview -SUBTYPE:PHONE CALL -STATUS:CONFIRMED -TRANSP:19960523T100522-4000F100582713-009251 -UID:http://www.ibm.com/raleigh/fdawson/~c:\or2\orgfiles\versit.or2 -DALARM:19960523T114500;5;3;Your Telecon Starts At Noon!!!; -MALARM:19960522T120000;;;fdawson@raleigh.ibm.com;Remember 05/23 Noon Telecon!!!; -PALARM:19960523T115500;;;c:\or2\organize.exe c:\or2\orgfiles\versit.or2; -X-LDC-OR2-OLE:c:\temp\agenda.doc -END:VEVENT - -BEGIN:VTODO -DUE:19960614T0173000 -DESCRIPTION:Review VCalendar helper API. -END:VTODO - -END:VCALENDAR - -#endif - -FILE *cfp; - -void testVcalAPIs() { - FILE *fp; - VObject *vcal, *vevent; -#if _CONSOLE - cfp = stdout; -#else - cfp = fopen("vcaltest.out","w"); -#endif - if (cfp == 0) return; - vcal = vcsCreateVCal( - "19960523T100522", - "37.24,-17.87", - "-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN", - 0, - "0.3" - ); - - vevent = vcsAddEvent( - vcal, - "19960523T120000", - "19960523T130000", - "VERSIT PDI PR Teleconference/Interview \nWith Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar\nactivities with European Press representatives.", - "VERSIT PDI PR Teleconference/Interview", - "PHONE CALL", - 0, - "CONFIRMED", - "19960523T100522-4000F100582713-009251", - "http://www.ibm.com/raleigh/fdawson/~c:\\or2\\orgfiles\\versit.or2", - 0 - ); - - vcsAddDAlarm(vevent, "19960523T114500", "5", "3", - "Your Telecon Starts At Noon!!!"); - vcsAddMAlarm(vevent, "19960522T120000", 0, 0, "fdawson@raleigh.ibm.com", - "Remember 05/23 Noon Telecon!!!"); - vcsAddPAlarm(vevent, "19960523T115500", 0 ,0, - "c:\\or2\\organize.exe c:\\or2\\orgfiles\\versit.or2"); - - addPropValue(vevent, "X-LDC-OR2-OLE", "c:\\temp\\agenda.doc"); - - vcsAddTodo( - vcal, - 0, - "19960614T0173000", - 0, - "Review VCalendar helper API.", - 0, - 0, - 0, - 0, - 0, - 0 - ); - - /* now do something to the resulting VObject */ - /* pretty print on stdout for fun */ - printVObject(cfp,vcal); - /* open the output text file */ - -#define OUTFILE "frankcal.vcf" - - fp = fopen(OUTFILE, "w"); - if (fp) { - /* write it in text form */ - writeVObject(fp,vcal); - fclose(fp); - } - else { - fprintf(cfp,"open output file '%s' failed\n", OUTFILE); - } - if (cfp != stdout) fclose(cfp); - } - -void main() { - testVcalAPIs(); - } - diff --git a/libversit/vcaltmp.c b/libversit/vcaltmp.c deleted file mode 100644 index ccb21a649a..0000000000 --- a/libversit/vcaltmp.c +++ /dev/null @@ -1,337 +0,0 @@ -/* -This module provides some helper APIs for creating -a VCalendar object. - -Note on APIs: - 1. The APIs does not attempt to verify if the arguments - passed are correct. - 2. Where the argument to an API is not applicable, pass - the value 0. - 3. See the test program at the bottom of this file as an - example of usage. - 4. This code calls APIs in vobject.c. - -*/ - -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - - -#include -#include -#include "vcaltmp.h" - - -DLLEXPORT(VObject*) vcsCreateVCal( - char *date_created, - char *location, - char *product_id, - char *time_zone, - char *version - ) - { - VObject *vcal = newVObject(VCCalProp); -#define Z(p,v) if (v) addPropValue(vcal,p,v); - Z(VCDCreatedProp, date_created); - Z(VCLocationProp, location) - Z(VCProdIdProp, product_id) - Z(VCTimeZoneProp, time_zone) - Z(VCVersionProp, version) -#undef Z - return vcal; - } - - -DLLEXPORT(VObject*) vcsAddEvent( - VObject *vcal, - char *start_date_time, - char *end_date_time, - char *description, - char *summary, - char *categories, - char *classification, - char *status, - char *transparency, - char *uid, - char *url - ) - { - VObject *vevent = addProp(vcal,VCEventProp); -#define Z(p,v) if (v) addPropValue(vevent,p,v); - Z(VCDTstartProp,start_date_time); - Z(VCDTendProp,end_date_time); - if (description) { - VObject *p = addPropValue(vevent,VCDescriptionProp,description); - if (strchr(description,'\n')) - addProp(p,VCQuotedPrintableProp); - } - Z(VCSummaryProp,summary); - Z(VCCategoriesProp,categories); - Z(VCClassProp,classification); - Z(VCStatusProp,status); - Z(VCTranspProp,transparency); - Z(VCUniqueStringProp,uid); - Z(VCURLProp,url); -#undef Z - return vevent; - } - - -DLLEXPORT(VObject*) vcsAddTodo( - VObject *vcal, - char *start_date_time, - char *due_date_time, - char *date_time_complete, - char *description, - char *summary, - char *priority, - char *classification, - char *status, - char *uid, - char *url - ) - { - VObject *vtodo = addProp(vcal,VCTodoProp); -#define Z(p,v) if (v) addPropValue(vtodo,p,v); - Z(VCDTstartProp,start_date_time); - Z(VCDueProp,due_date_time); - Z(VCCompletedProp,date_time_complete); - if (description) { - VObject *p = addPropValue(vtodo,VCDescriptionProp,description); - if (strchr(description,'\n')) - addProp(p,VCQuotedPrintableProp); - } - Z(VCSummaryProp,summary); - Z(VCPriorityProp,priority); - Z(VCClassProp,classification); - Z(VCStatusProp,status); - Z(VCUniqueStringProp,uid); - Z(VCURLProp,url); -#undef Z - return vtodo; - } - - -DLLEXPORT(VObject*) vcsAddAAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *audio_content - ) - { - VObject *aalarm= addProp(vevent,VCAAlarmProp); -#define Z(p,v) if (v) addPropValue(aalarm,p,v); - Z(VCRunTimeProp,run_time); - Z(VCSnoozeTimeProp,snooze_time); - Z(VCRepeatCountProp,repeat_count); - Z(VCAudioContentProp,audio_content); -#undef Z - return aalarm; - } - - -DLLEXPORT(VObject*) vcsAddMAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *email_address, - char *note - ) - { - VObject *malarm= addProp(vevent,VCMAlarmProp); -#define Z(p,v) if (v) addPropValue(malarm,p,v); - Z(VCRunTimeProp,run_time); - Z(VCSnoozeTimeProp,snooze_time); - Z(VCRepeatCountProp,repeat_count); - Z(VCEmailAddressProp,email_address); - Z(VCNoteProp,note); -#undef Z - return malarm; - } - - -DLLEXPORT(VObject*) vcsAddDAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *display_string - ) - { - VObject *dalarm= addProp(vevent,VCDAlarmProp); -#define Z(p,v) if (v) addPropValue(dalarm,p,v); - Z(VCRunTimeProp,run_time); - Z(VCSnoozeTimeProp,snooze_time); - Z(VCRepeatCountProp,repeat_count); - Z(VCDisplayStringProp,display_string); -#undef Z - return dalarm; - } - - -DLLEXPORT(VObject*) vcsAddPAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *procedure_name - ) - { - VObject *palarm= addProp(vevent,VCPAlarmProp); -#define Z(p,v) if (v) addPropValue(palarm,p,v); - Z(VCRunTimeProp,run_time); - Z(VCSnoozeTimeProp,snooze_time); - Z(VCRepeatCountProp,repeat_count); - Z(VCProcedureNameProp,procedure_name); -#undef Z - return palarm; - } - - -#ifdef _TEST - -#if 0 -This testcase would generate a file call "frankcal.vcf" with -the following content: - -BEGIN:VCALENDAR -DCREATED:19960523T100522 -GEO:37.24,-17.87 -PRODID:-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN -VERSION:0.3 -BEGIN:VEVENT -DTSTART:19960523T120000 -DTEND:19960523T130000 -DESCRIPTION;QUOTED-PRINTABLE:VERSIT PDI PR Teleconference/Interview =0A= -With Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar=0A= -activities with European Press representatives. -SUMMARY:VERSIT PDI PR Teleconference/Interview -CATEGORIES:PHONE CALL -STATUS:CONFIRMED -TRANSP:19960523T100522-4000F100582713-009251 -UID:http://www.ibm.com/raleigh/fdawson/~c:\or2\orgfiles\versit.or2 -DALARM:19960523T114500;5;3;Your Telecon Starts At Noon!!!; -MALARM:19960522T120000;;;fdawson@raleigh.ibm.com;Remember 05/23 Noon Telecon!!!; -PALARM:19960523T115500;;;c:\or2\organize.exe c:\or2\orgfiles\versit.or2; -X-LDC-OR2-OLE:c:\temp\agenda.doc -END:VEVENT - -BEGIN:VTODO -DUE:19960614T0173000 -DESCRIPTION:Review VCalendar helper API. -END:VTODO - -END:VCALENDAR - -#endif - -void testVcalAPIs() { - FILE *fp; - VObject *vcal = vcsCreateVCal( - "19960523T100522", - "37.24,-17.87", - "-//Frank Dawson/Hand Crafted In North Carolina//NONSGML Made By Hand//EN", - 0, - "0.3" - ); - - VObject *vevent = vcsAddEvent( - vcal, - "19960523T120000", - "19960523T130000", - "VERSIT PDI PR Teleconference/Interview \nWith Tom Streeter and Frank Dawson - Discuss VERSIT PDI project and vCard and vCalendar\nactivities with European Press representatives.", - "VERSIT PDI PR Teleconference/Interview", - "PHONE CALL", - 0, - "CONFIRMED", - "19960523T100522-4000F100582713-009251", - "http://www.ibm.com/raleigh/fdawson/~c:\\or2\\orgfiles\\versit.or2", - 0 - ); - - vcsAddDAlarm(vevent, "19960523T114500", "5", "3", - "Your Telecon Starts At Noon!!!"); - vcsAddMAlarm(vevent, "19960522T120000", 0, 0, "fdawson@raleigh.ibm.com", - "Remember 05/23 Noon Telecon!!!"); - vcsAddPAlarm(vevent, "19960523T115500", 0 ,0, - "c:\\or2\\organize.exe c:\\or2\\orgfiles\\versit.or2"); - - addPropValue(vevent, "X-LDC-OR2-OLE", "c:\\temp\\agenda.doc"); - - vcsAddTodo( - vcal, - 0, - "19960614T0173000", - 0, - "Review VCalendar helper API.", - 0, - 0, - 0, - 0, - 0, - 0 - ); - - /* now do something to the resulting VObject */ - /* pretty print on stdout for fun */ - printVObject(vcal); - /* open the output text file */ - -#define OUTFILE "frankcal.vcf" - - fp = fopen(OUTFILE, "w"); - if (fp) { - /* write it in text form */ - writeVObject(fp,vcal); - fclose(fp); - } - else { - printf("open output file '%s' failed\n", OUTFILE); - } - } - -void main() { - testVcalAPIs(); - } - -#endif - - -/* end of source file vcaltmp.c */ diff --git a/libversit/vcaltmp.h b/libversit/vcaltmp.h deleted file mode 100644 index 4c4afde963..0000000000 --- a/libversit/vcaltmp.h +++ /dev/null @@ -1,128 +0,0 @@ -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -#include "vcc.h" - -#ifndef __VCALTMP_H__ -#define __VCALTMP_H__ - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -extern "C" { -#endif - -extern DLLEXPORT(VObject*) vcsCreateVCal( - char *date_created, - char *location, - char *product_id, - char *time_zone, - char *version - ); - -extern DLLEXPORT(VObject*) vcsAddEvent( - VObject *vcal, - char *start_date_time, - char *end_date_time, - char *description, - char *summary, - char *categories, - char *classification, - char *status, - char *transparency, - char *uid, - char *url - ); - - -extern DLLEXPORT(VObject*) vcsAddTodo( - VObject *vcal, - char *start_date_time, - char *due_date_time, - char *date_time_complete, - char *description, - char *summary, - char *priority, - char *classification, - char *status, - char *uid, - char *url - ); - - -extern DLLEXPORT(VObject*) vcsAddAAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *audio_content - ); - - -extern DLLEXPORT(VObject*) vcsAddMAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *email_address, - char *note - ); - - -extern DLLEXPORT(VObject*) vcsAddDAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *display_string - ); - - -extern DLLEXPORT(VObject*) vcsAddPAlarm( - VObject *vevent, - char *run_time, - char *snooze_time, - char *repeat_count, - char *procedure_name - ); - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -} -#endif - -#endif /* __VCALTMP_H__ */ - - diff --git a/libversit/vcc.h b/libversit/vcc.h deleted file mode 100644 index 0e52034710..0000000000 --- a/libversit/vcc.h +++ /dev/null @@ -1,80 +0,0 @@ -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -#ifndef __VCC_H__ -#define __VCC_H__ 1 - -#include "vobject.h" - - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -extern "C" { -#endif - -typedef void (*MimeErrorHandler)(char *); - -extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler); - -extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len); -extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname); - - -/* NOTE regarding Parse_MIME_FromFile -The function above, Parse_MIME_FromFile, comes in two flavors, -neither of which is exported from the DLL. Each version takes -a CFile or FILE* as a parameter, neither of which can be -passed across a DLL interface (at least that is my experience). -If you are linking this code into your build directly then -you may find them a more convenient API that the other flavors -that take a file name. If you use them with the DLL LIB you -will get a link error. -*/ - - -#if INCLUDEMFC -extern VObject* Parse_MIME_FromFile(CFile *file); -#else -extern VObject* Parse_MIME_FromFile(FILE *file); -#endif - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -} -#endif - -#endif /* __VCC_H__ */ - diff --git a/libversit/vcc.y b/libversit/vcc.y deleted file mode 100644 index f8eb9e6556..0000000000 --- a/libversit/vcc.y +++ /dev/null @@ -1,1257 +0,0 @@ -%{ - -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -/* - * src: vcc.c - * doc: Parser for vCard and vCalendar. Note that this code is - * generated by a yacc parser generator. Generally it should not - * be edited by hand. The real source is vcc.y. The #line directives - * can be commented out here to make it easier to trace through - * in a debugger. However, if a bug is found it should - * be fixed in vcc.y and this file regenerated. - */ - - -/* debugging utilities */ -#if __DEBUG -#define DBG_(x) printf x -#else -#define DBG_(x) -#endif - -/**** External Functions ****/ - -/* assign local name to parser variables and functions so that - we can use more than one yacc based parser. -*/ - -#define yyparse mime_parse -#define yylex mime_lex -#define yyerror mime_error -#define yychar mime_char -/* #define p_yyval p_mime_val */ -#undef yyval -#define yyval mime_yyval -/* #define p_yylval p_mime_lval */ -#undef yylval -#define yylval mime_yylval -#define yydebug mime_debug -#define yynerrs mime_nerrs -#define yyerrflag mime_errflag -#define yyss mime_ss -#define yyssp mime_ssp -#define yyvs mime_vs -#define yyvsp mime_vsp -#define yylhs mime_lhs -#define yylen mime_len -#define yydefred mime_defred -#define yydgoto mime_dgoto -#define yysindex mime_sindex -#define yyrindex mime_rindex -#define yygindex mime_gindex -#define yytable mime_table -#define yycheck mime_check -#define yyname mime_name -#define yyrule mime_rule -#define YYPREFIX "mime_" - - -#ifndef _NO_LINE_FOLDING -#define _SUPPORT_LINE_FOLDING 1 -#endif - -/* undef below if compile with MFC */ -/* #define INCLUDEMFC 1 */ - -#if defined(WIN32) || defined(_WIN32) -#ifdef INCLUDEMFC -#include -#endif -#endif - -#include -#ifndef __MWERKS__ -#include -#endif -#include -#include -#include -#include "vcc.h" - -/**** Types, Constants ****/ - -#define YYDEBUG 1 /* 1 to compile in some debugging code */ -#define MAXTOKEN 256 /* maximum token (line) length */ -#define YYSTACKSIZE 50 /* ~unref ? */ -#define MAXLEVEL 10 /* max # of nested objects parseable */ - /* (includes outermost) */ - - -/**** Global Variables ****/ -int mime_lineNum, mime_numErrors; /* yyerror() can use these */ -static VObject* vObjList; -static VObject *curProp; -static VObject *curObj; -static VObject* ObjStack[MAXLEVEL]; -static int ObjStackTop; - - -/* A helpful utility for the rest of the app. */ -#if __CPLUSPLUS__ -extern "C" { -#endif - - extern void Parse_Debug(const char *s); - extern void yyerror(char *s); - -#if __CPLUSPLUS__ - }; -#endif - -int yyparse(); - -enum LexMode { - L_NORMAL, - L_VCARD, - L_VCAL, - L_VEVENT, - L_VTODO, - L_VALUES, - L_BASE64, - L_QUOTED_PRINTABLE - }; - -/**** Private Forward Declarations ****/ -static int pushVObject(const char *prop); -static VObject* popVObject(); -static char* lexDataFromBase64(); -static void lexPopMode(int top); -static int lexWithinMode(enum LexMode mode); -static void lexPushMode(enum LexMode mode); -static void enterProps(const char *s); -static void enterAttr(const char *s1, const char *s2); -static void enterValues(const char *value); -static void mime_error_(char *s); - static void appendValue(const char *value); - -%} - -/***************************************************************************/ -/*** The grammar ****/ -/***************************************************************************/ - -%union { - char *str; - VObject *vobj; - } - -%token - EQ COLON DOT SEMICOLON SPACE HTAB LINESEP NEWLINE - BEGIN_VCARD END_VCARD BEGIN_VCAL END_VCAL - BEGIN_VEVENT END_VEVENT BEGIN_VTODO END_VTODO - ID - -/* - * NEWLINE is the token that would occur outside a vCard, - * while LINESEP is the token that would occur inside a vCard. - */ - -%token - STRING ID - -%type name value - -%type vcard vcal vobject - -%start mime - -%% - - -mime: vobjects - ; - -vobjects: vobject - { addList(&vObjList, $1); curObj = 0; } - vobjects - | vobject - { addList(&vObjList, $1); curObj = 0; } - ; - -vobject: vcard - | vcal - ; - -vcard: - BEGIN_VCARD - { - lexPushMode(L_VCARD); - if (!pushVObject(VCCardProp)) YYERROR; - } - items END_VCARD - { - lexPopMode(0); - $$ = popVObject(); - } - | BEGIN_VCARD - { - lexPushMode(L_VCARD); - if (!pushVObject(VCCardProp)) YYERROR; - } - END_VCARD - { - lexPopMode(0); - $$ = popVObject(); - } - ; - -items: item items - | item - ; - -item: prop COLON - { - lexPushMode(L_VALUES); - } - values LINESEP - { - if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE)) - lexPopMode(0); - lexPopMode(0); - } - | error - ; - -prop: name - { - enterProps($1); - } - attr_params - | name - { - enterProps($1); - } - ; - -attr_params: attr_param attr_params - | attr_param - ; - -attr_param: SEMICOLON attr - ; - -attr: name - { - enterAttr($1,0); - } - | name EQ name - { - enterAttr($1,$3); - - } - ; - -name: ID - ; - -values: value SEMICOLON { appendValue($1); } values - | value - { appendValue($1); } - ; - -value: STRING - | { $$ = 0; } - ; - -vcal: - BEGIN_VCAL - { if (!pushVObject(VCCalProp)) YYERROR; } - calitems - END_VCAL - { $$ = popVObject(); } - | BEGIN_VCAL - { if (!pushVObject(VCCalProp)) YYERROR; } - END_VCAL - { $$ = popVObject(); } - ; - -calitems: calitem calitems - | calitem - ; - -calitem: - eventitem - | todoitem - | items - ; - -eventitem: - BEGIN_VEVENT - { - lexPushMode(L_VEVENT); - if (!pushVObject(VCEventProp)) YYERROR; - } - items - END_VEVENT - { - lexPopMode(0); - popVObject(); - } - | BEGIN_VEVENT - { - lexPushMode(L_VEVENT); - if (!pushVObject(VCEventProp)) YYERROR; - } - END_VEVENT - { - lexPopMode(0); - popVObject(); - } - ; - -todoitem: - BEGIN_VTODO - { - lexPushMode(L_VTODO); - if (!pushVObject(VCTodoProp)) YYERROR; - } - items - END_VTODO - { - lexPopMode(0); - popVObject(); - } - | BEGIN_VTODO - { - lexPushMode(L_VTODO); - if (!pushVObject(VCTodoProp)) YYERROR; - } - END_VTODO - { - lexPopMode(0); - popVObject(); - } - ; - -%% -/*/////////////////////////////////////////////////////////////////////////*/ -static int pushVObject(const char *prop) - { - VObject *newObj; - if (ObjStackTop == MAXLEVEL) - return FALSE; - - ObjStack[++ObjStackTop] = curObj; - - if (curObj) { - newObj = addProp(curObj,prop); - curObj = newObj; - } - else - curObj = newVObject(prop); - - return TRUE; - } - - -/*/////////////////////////////////////////////////////////////////////////*/ -/* This pops the recently built vCard off the stack and returns it. */ -static VObject* popVObject() - { - VObject *oldObj; - if (ObjStackTop < 0) { - yyerror("pop on empty Object Stack\n"); - return 0; - } - oldObj = curObj; - curObj = ObjStack[ObjStackTop--]; - - return oldObj; - } - -static void appendValue(const char *value) -{ - char *p1, *p2; - wchar_t *p3; - int i; - - if (fieldedProp && *fieldedProp) { - if (value) { - addPropValue(curProp, *fieldedProp, value); - } - /* else this field is empty, advance to next field */ - fieldedProp++; - } else { - if (value) { - if (vObjectUStringZValue(curProp)) { - p1 = fakeCString(vObjectUStringZValue(curProp)); - p2 = malloc(sizeof(char *) * (strlen(p1)+strlen(value)+1)); - strcpy(p2, p1); - deleteStr(p1); - - i = strlen(p2); - p2[i] = ';'; - p2[i+1] = '\0'; - p2 = strcat(p2, value); - p3 = (wchar_t *) vObjectUStringZValue(curProp); - free(p3); - setVObjectUStringZValue_(curProp,fakeUnicode(p2,0)); - deleteStr(p2); - } else { - setVObjectUStringZValue_(curProp,fakeUnicode(value,0)); - } - } - } - deleteStr(value); -} - -static void enterValues(const char *value) - { - if (fieldedProp && *fieldedProp) { - if (value) { - addPropValue(curProp,*fieldedProp,value); - } - /* else this field is empty, advance to next field */ - fieldedProp++; - } - else { - if (value) { - setVObjectUStringZValue_(curProp,fakeUnicode(value,0)); - } - } - deleteStr(value); - } - -static void enterProps(const char *s) - { - curProp = addGroup(curObj,s); - deleteStr(s); - } - -static void enterAttr(const char *s1, const char *s2) - { - const char *p1, *p2; - p1 = lookupProp_(s1); - if (s2) { - VObject *a; - p2 = lookupProp_(s2); - a = addProp(curProp,p1); - setVObjectStringZValue(a,p2); - } - else - addProp(curProp,p1); - if (stricmp(p1,VCBase64Prop) == 0 || (s2 && stricmp(p2,VCBase64Prop)==0)) - lexPushMode(L_BASE64); - else if (stricmp(p1,VCQuotedPrintableProp) == 0 - || (s2 && stricmp(p2,VCQuotedPrintableProp)==0)) - lexPushMode(L_QUOTED_PRINTABLE); - deleteStr(s1); deleteStr(s2); - } - - -#define MAX_LEX_LOOKAHEAD_0 32 -#define MAX_LEX_LOOKAHEAD 64 -#define MAX_LEX_MODE_STACK_SIZE 10 -#define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop]) - -struct LexBuf { - /* input */ -#ifdef INCLUDEMFC - CFile *inputFile; -#else - FILE *inputFile; -#endif - char *inputString; - unsigned long curPos; - unsigned long inputLen; - /* lookahead buffer */ - /* -- lookahead buffer is short instead of char so that EOF - / can be represented correctly. - */ - unsigned long len; - short buf[MAX_LEX_LOOKAHEAD]; - unsigned long getPtr; - /* context stack */ - unsigned long lexModeStackTop; - enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE]; - /* token buffer */ - unsigned long maxToken; - char *strs; - unsigned long strsLen; - } lexBuf; - -static void lexPushMode(enum LexMode mode) - { - if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1)) - yyerror("lexical context stack overflow"); - else { - lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode; - } - } - -static void lexPopMode(int top) - { - /* special case of pop for ease of error recovery -- this - version will never underflow */ - if (top) - lexBuf.lexModeStackTop = 0; - else - if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--; - } - -static int lexWithinMode(enum LexMode mode) { - unsigned long i; - for (i=0;iRead(&result, 1) == 1 ? result : EOF; -#else - return fgetc(lexBuf.inputFile); -#endif - } - } - -static int lexGeta() - { - ++lexBuf.len; - return (lexBuf.buf[lexBuf.getPtr] = lexGetc_()); - } - -static int lexGeta_(int i) - { - ++lexBuf.len; - return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_()); - } - -static void lexSkipLookahead() { - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { - /* don't skip EOF. */ - lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; - lexBuf.len--; - } - } - -static int lexLookahead() { - int c = (lexBuf.len)? - lexBuf.buf[lexBuf.getPtr]: - lexGeta(); - /* do the \r\n -> \n or \r -> \n translation here */ - if (c == '\r') { - int a = (lexBuf.len>1)? - lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]: - lexGeta_(1); - if (a == '\n') { - lexSkipLookahead(); - } - lexBuf.buf[lexBuf.getPtr] = c = '\n'; - } - else if (c == '\n') { - int a = (lexBuf.len>1)? - lexBuf.buf[lexBuf.getPtr+1]: - lexGeta_(1); - if (a == '\r') { - lexSkipLookahead(); - } - lexBuf.buf[lexBuf.getPtr] = '\n'; - } - return c; - } - -static int lexGetc() { - int c = lexLookahead(); - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { - /* EOF will remain in lookahead buffer */ - lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; - lexBuf.len--; - } - return c; - } - -static void lexSkipLookaheadWord() { - if (lexBuf.strsLen <= lexBuf.len) { - lexBuf.len -= lexBuf.strsLen; - lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD; - } - } - -static void lexClearToken() - { - lexBuf.strsLen = 0; - } - -static void lexAppendc(int c) - { - lexBuf.strs[lexBuf.strsLen] = c; - /* append up to zero termination */ - if (c == 0) return; - lexBuf.strsLen++; - if (lexBuf.strsLen >= lexBuf.maxToken) { - /* double the token string size */ - lexBuf.maxToken <<= 1; - lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken); - } - } - -static char* lexStr() { - return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1); - } - -static void lexSkipWhite() { - int c = lexLookahead(); - while (c == ' ' || c == '\t') { - lexSkipLookahead(); - c = lexLookahead(); - } - } - -static char* lexGetWord() { - int c; - lexSkipWhite(); - lexClearToken(); - c = lexLookahead(); - while (c != EOF && !strchr("\t\n ;:=",c)) { - lexAppendc(c); - lexSkipLookahead(); - c = lexLookahead(); - } - lexAppendc(0); - return lexStr(); - } - -static void lexPushLookahead(char *s, int len) { - int putptr; - if (len == 0) len = strlen(s); - putptr = (int)lexBuf.getPtr - len; - /* this function assumes that length of word to push back - / is not greater than MAX_LEX_LOOKAHEAD. - */ - if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; - lexBuf.getPtr = putptr; - while (*s) { - lexBuf.buf[putptr] = *s++; - putptr = (putptr + 1) % MAX_LEX_LOOKAHEAD; - } - lexBuf.len += len; - } - -static void lexPushLookaheadc(int c) { - int putptr; - /* can't putback EOF, because it never leaves lookahead buffer */ - if (c == EOF) return; - putptr = (int)lexBuf.getPtr - 1; - if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; - lexBuf.getPtr = putptr; - lexBuf.buf[putptr] = c; - lexBuf.len += 1; - } - -static char* lexLookaheadWord() { - /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0 - / and thing bigger than that will stop the lookahead and return 0; - / leading white spaces are not recoverable. - */ - int c; - int len = 0; - int curgetptr = 0; - lexSkipWhite(); - lexClearToken(); - curgetptr = (int)lexBuf.getPtr; /* remember! */ - while (len < (MAX_LEX_LOOKAHEAD_0)) { - c = lexGetc(); - len++; - if (c == EOF || strchr("\t\n ;:=", c)) { - lexAppendc(0); - /* restore lookahead buf. */ - lexBuf.len += len; - lexBuf.getPtr = curgetptr; - return lexStr(); - } - else - lexAppendc(c); - } - lexBuf.len += len; /* char that has been moved to lookahead buffer */ - lexBuf.getPtr = curgetptr; - return 0; - } - -#ifdef _SUPPORT_LINE_FOLDING -static void handleMoreRFC822LineBreak(int c) { - /* suport RFC 822 line break in cases like - * ADR: foo; - * morefoo; - * more foo; - */ - if (c == ';') { - int a; - lexSkipLookahead(); - /* skip white spaces */ - a = lexLookahead(); - while (a == ' ' || a == '\t') { - lexSkipLookahead(); - a = lexLookahead(); - } - if (a == '\n') { - lexSkipLookahead(); - a = lexLookahead(); - if (a == ' ' || a == '\t') { - /* continuation, throw away all the \n and spaces read so - * far - */ - lexSkipWhite(); - lexPushLookaheadc(';'); - } - else { - lexPushLookaheadc('\n'); - lexPushLookaheadc(';'); - } - } - else { - lexPushLookaheadc(';'); - } - } - } - -static char* lexGet1Value() { - int size = 0; - int c; - lexSkipWhite(); - c = lexLookahead(); - lexClearToken(); - while (c != EOF && c != ';') { - if (c == '\n') { - int a; - lexSkipLookahead(); - a = lexLookahead(); - if (a == ' ' || a == '\t') { - lexAppendc(' '); - lexSkipLookahead(); - } - else { - lexPushLookaheadc('\n'); - break; - } - } - else { - lexAppendc(c); - lexSkipLookahead(); - } - c = lexLookahead(); - } - lexAppendc(0); - handleMoreRFC822LineBreak(c); - return c==EOF?0:lexStr(); - } -#endif - -static char* lexGetStrUntil(char *termset) { - int size = 0; - int c = lexLookahead(); - lexClearToken(); - while (c != EOF && !strchr(termset,c)) { - lexAppendc(c); - lexSkipLookahead(); - c = lexLookahead(); - } - lexAppendc(0); - return c==EOF?0:lexStr(); - } - -static int match_begin_name(int end) { - char *n = lexLookaheadWord(); - int token = ID; - if (n) { - if (!stricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD; - else if (!stricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL; - else if (!stricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT; - else if (!stricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO; - deleteStr(n); - return token; - } - return 0; - } - - -#ifdef INCLUDEMFC -void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile) -#else -void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) -#endif - { - /* initialize lex mode stack */ - lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL; - - /* iniatialize lex buffer. */ - lexBuf.inputString = (char*) inputstring; - lexBuf.inputLen = inputlen; - lexBuf.curPos = 0; - lexBuf.inputFile = inputfile; - - lexBuf.len = 0; - lexBuf.getPtr = 0; - - lexBuf.maxToken = MAXTOKEN; - lexBuf.strs = (char*)malloc(MAXTOKEN); - lexBuf.strsLen = 0; - - } - -static void finiLex() { - free(lexBuf.strs); - } - - -/*/////////////////////////////////////////////////////////////////////////*/ -/* This parses and converts the base64 format for binary encoding into - * a decoded buffer (allocated with new). See RFC 1521. - */ -static char * lexGetDataFromBase64() - { - unsigned long bytesLen = 0, bytesMax = 0; - int quadIx = 0, pad = 0; - unsigned long trip = 0; - unsigned char b; - int c; - unsigned char *bytes = NULL; - unsigned char *oldBytes = NULL; - - DBG_(("db: lexGetDataFromBase64\n")); - while (1) { - c = lexGetc(); - if (c == '\n') { - ++mime_lineNum; - if (lexLookahead() == '\n') { - /* a '\n' character by itself means end of data */ - break; - } - else continue; /* ignore '\n' */ - } - else { - if ((c >= 'A') && (c <= 'Z')) - b = (unsigned char)(c - 'A'); - else if ((c >= 'a') && (c <= 'z')) - b = (unsigned char)(c - 'a') + 26; - else if ((c >= '0') && (c <= '9')) - b = (unsigned char)(c - '0') + 52; - else if (c == '+') - b = 62; - else if (c == '/') - b = 63; - else if (c == '=') { - b = 0; - pad++; - } else if ((c == ' ') || (c == '\t')) { - continue; - } else { /* error condition */ - if (bytes) free(bytes); - else if (oldBytes) free(oldBytes); - /* error recovery: skip until 2 adjacent newlines. */ - DBG_(("db: invalid character 0x%x '%c'\n", c,c)); - if (c != EOF) { - c = lexGetc(); - while (c != EOF) { - if (c == '\n' && lexLookahead() == '\n') { - ++mime_lineNum; - break; - } - c = lexGetc(); - } - } - return NULL; - } - trip = (trip << 6) | b; - if (++quadIx == 4) { - unsigned char outBytes[3]; - int numOut; - int i; - for (i = 0; i < 3; i++) { - outBytes[2-i] = (unsigned char)(trip & 0xFF); - trip >>= 8; - } - numOut = 3 - pad; - if (bytesLen + numOut > bytesMax) { - if (!bytes) { - bytesMax = 1024; - bytes = (unsigned char*)malloc((size_t)bytesMax); - } - else { - bytesMax <<= 2; - oldBytes = bytes; - bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax); - } - if (bytes == 0) { - mime_error("out of memory while processing BASE64 data\n"); - } - } - if (bytes) { - memcpy(bytes + bytesLen, outBytes, numOut); - bytesLen += numOut; - } - trip = 0; - quadIx = 0; - } - } - } /* while */ - DBG_(("db: bytesLen = %d\n", bytesLen)); - /* kludge: all this won't be necessary if we have tree form - representation */ - if (bytes) { - setValueWithSize(curProp,bytes,(unsigned int)bytesLen); - free(bytes); - } - else if (oldBytes) { - setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen); - free(oldBytes); - } - return 0; - } - -static int match_begin_end_name(int end) { - int token; - lexSkipWhite(); - if (lexLookahead() != ':') return ID; - lexSkipLookahead(); - lexSkipWhite(); - token = match_begin_name(end); - if (token == ID) { - lexPushLookaheadc(':'); - DBG_(("db: ID '%s'\n", yylval.str)); - return ID; - } - else if (token != 0) { - lexSkipLookaheadWord(); - deleteStr(yylval.str); - DBG_(("db: begin/end %d\n", token)); - return token; - } - return 0; - } - -static char* lexGetQuotedPrintable() - { - char cur; - unsigned long len = 0; - - lexClearToken(); - do { - cur = lexGetc(); - switch (cur) { - case '=': { - int c = 0; - int next[2]; - int i; - for (i = 0; i < 2; i++) { - next[i] = lexGetc(); - if (next[i] >= '0' && next[i] <= '9') - c = c * 16 + next[i] - '0'; - else if (next[i] >= 'A' && next[i] <= 'F') - c = c * 16 + next[i] - 'A' + 10; - else - break; - } - if (i == 0) { - /* single '=' follow by LINESEP is continuation sign? */ - if (next[0] == '\n') { - ++mime_lineNum; - } - else { - lexPushLookaheadc('='); - goto EndString; - } - } - else if (i == 1) { - lexPushLookaheadc(next[1]); - lexPushLookaheadc(next[0]); - lexAppendc('='); - } else { - lexAppendc(c); - } - break; - } /* '=' */ - case '\n': { - lexPushLookaheadc('\n'); - goto EndString; - } - case (char)EOF: - break; - default: - lexAppendc(cur); - break; - } /* switch */ - } while (cur != (char)EOF); - -EndString: - lexAppendc(0); - return lexStr(); - } /* LexQuotedPrintable */ - -static int yylex() { - int token = 0; - - int lexmode = LEXMODE(); - if (lexmode == L_VALUES) { - int c = lexGetc(); - if (c == ';') { - DBG_(("db: SEMICOLON\n")); - lexPushLookaheadc(c); -#ifdef _SUPPORT_LINE_FOLDING - handleMoreRFC822LineBreak(c); -#endif - lexSkipLookahead(); - return SEMICOLON; - } - else if (strchr("\n",c)) { - ++mime_lineNum; - /* consume all line separator(s) adjacent to each other */ - c = lexLookahead(); - while (strchr("\n",c)) { - lexSkipLookahead(); - c = lexLookahead(); - ++mime_lineNum; - } - DBG_(("db: LINESEP\n")); - return LINESEP; - } - else { - char *p = 0; - lexPushLookaheadc(c); - if (lexWithinMode(L_BASE64)) { - /* get each char and convert to bin on the fly... */ - p = lexGetDataFromBase64(); - yylval.str = p; - return STRING; - } - else if (lexWithinMode(L_QUOTED_PRINTABLE)) { - p = lexGetQuotedPrintable(); - } - else { -#ifdef _SUPPORT_LINE_FOLDING - p = lexGet1Value(); -#else - p = lexGetStrUntil(";\n"); -#endif - } - if (p) { - DBG_(("db: STRING: '%s'\n", p)); - yylval.str = p; - return STRING; - } - else return 0; - } - } - else { - /* normal mode */ - while (1) { - int c = lexGetc(); - switch(c) { - case ':': { - /* consume all line separator(s) adjacent to each other */ - /* ignoring linesep immediately after colon. */ -/* c = lexLookahead(); - while (strchr("\n",c)) { - lexSkipLookahead(); - c = lexLookahead(); - ++mime_lineNum; - }*/ - DBG_(("db: COLON\n")); - return COLON; - } - case ';': - DBG_(("db: SEMICOLON\n")); - return SEMICOLON; - case '=': - DBG_(("db: EQ\n")); - return EQ; - /* ignore whitespace in this mode */ - case '\t': - case ' ': continue; - case '\n': { - ++mime_lineNum; - continue; - } - case EOF: return 0; - break; - default: { - lexPushLookaheadc(c); - if (isalpha(c)) { - char *t = lexGetWord(); - yylval.str = t; - if (!stricmp(t, "begin")) { - return match_begin_end_name(0); - } - else if (!stricmp(t,"end")) { - return match_begin_end_name(1); - } - else { - DBG_(("db: ID '%s'\n", t)); - return ID; - } - } - else { - /* unknow token */ - return 0; - } - break; - } - } - } - } - return 0; - } - - -/***************************************************************************/ -/*** Public Functions ****/ -/***************************************************************************/ - -static VObject* Parse_MIMEHelper() - { - ObjStackTop = -1; - mime_numErrors = 0; - mime_lineNum = 1; - vObjList = 0; - curObj = 0; - - if (yyparse() != 0) { - finiLex(); - return 0; - } - - finiLex(); - return vObjList; - } - -/*/////////////////////////////////////////////////////////////////////////*/ -DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len) - { - initLex(input, len, 0); - return Parse_MIMEHelper(); - } - - -#if INCLUDEMFC - -DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file) - { - unsigned long startPos; - VObject *result; - - initLex(0,-1,file); - startPos = file->GetPosition(); - if (!(result = Parse_MIMEHelper())) - file->Seek(startPos, CFile::begin); - return result; - } - -#else - -VObject* Parse_MIME_FromFile(FILE *file) - { - VObject *result; - long startPos; - - initLex(0,(unsigned long)-1,file); - startPos = ftell(file); - if (!(result = Parse_MIMEHelper())) { - fseek(file,startPos,SEEK_SET); - } - return result; - } - -DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname) - { - FILE *fp = fopen(fname,"r"); - if (fp) { - VObject* o = Parse_MIME_FromFile(fp); - fclose(fp); - return o; - } - else { - char msg[256]; - snprintf(msg, sizeof(msg), "can't open file '%s' for reading\n", fname); - mime_error_(msg); - return 0; - } - } - -#endif - -/*/////////////////////////////////////////////////////////////////////////*/ -static void YYDebug(const char *s) -{ -/* Parse_Debug(s); */ -} - - -static MimeErrorHandler mimeErrorHandler; - -DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me) - { - mimeErrorHandler = me; - } - -static void mime_error(char *s) - { - char msg[256]; - if (mimeErrorHandler) { - sprintf(msg,"%s at line %d", s, mime_lineNum); - mimeErrorHandler(msg); - } - } - -static void mime_error_(char *s) - { - if (mimeErrorHandler) { - mimeErrorHandler(s); - } - } - - diff --git a/libversit/vctest.c b/libversit/vctest.c deleted file mode 100644 index 7975d1e200..0000000000 --- a/libversit/vctest.c +++ /dev/null @@ -1,95 +0,0 @@ - -#include -#include -#include "vcc.h" - -FILE *cfp; - -void myMimeErrorHandler(char *s) -{ - printf("%s\n", s); -} - -void main(int argc, char **argv) -{ - int testmem = 0; - - char * foo[2] = {"foo","alden.vcf"}; - -argc = 2; -argv = foo; - -#ifdef _CONSOLE - cfp = stdout; - registerMimeErrorHandler(myMimeErrorHandler); -#else - cfp = fopen("vctest.out", "w"); - if (!cfp) return; -#endif - ++argv; - while (--argc) { - FILE *fp; - if (strcmp(*argv,"-testmem") == 0) { - testmem = 1; - argv++; - continue; - } - fprintf(cfp,"processing %s\n",*argv); - fp = fopen(*argv,"r"); - if (!fp) { - fprintf(cfp,"error opening file\n"); - } - else { - VObject *v, *t; - FILE *ofp; - char buf[256]; - char *p; - strcpy(buf,*argv); - p = strchr(buf,'.'); - if (p) *p = 0; - strcat(buf,".out"); - fprintf(cfp,"reading text input from '%s'...\n", *argv); - /*v = Parse_MIME_FromFile(fp); */ - v = Parse_MIME_FromFileName(*argv); - writeVObjectToFile(buf,v); - cleanVObject(v); - - /* - fprintf(cfp,"pretty print internal format of '%s'...\n", *argv); - ofp = fopen(buf,"w"); - while (v) { - printVObject(cfp,v); - if (testmem) { - char *s, *p; - fprintf(cfp,"test writing to mem...\n"); - p = s = writeMemVObject(0,0,v); - if (s) { - while (*s) { - fputc(*s,ofp); - s++; - } - free(p); - } - } - else { - writeVObject(ofp,v); - } - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - - fclose(ofp); - fclose(fp); - */ - } - - cleanStrTbl(); - argv++; - - } - - if (cfp != stdout) fclose(cfp); - -} - diff --git a/libversit/vobject.c b/libversit/vobject.c deleted file mode 100644 index d685b04278..0000000000 --- a/libversit/vobject.c +++ /dev/null @@ -1,1452 +0,0 @@ -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -/* - * src: vobject.c - * doc: vobject and APIs to construct vobject, APIs pretty print - * vobject, and convert a vobject into its textual representation. - */ - -#ifndef MWERKS -#include -#endif - -#include "vobject.h" -#include -#include -#include - - -#define NAME_OF(o) o->id -#define VALUE_TYPE(o) o->valType -#define STRINGZ_VALUE_OF(o) o->val.strs -#define USTRINGZ_VALUE_OF(o) o->val.ustrs -#define INTEGER_VALUE_OF(o) o->val.i -#define LONG_VALUE_OF(o) o->val.l -#define ANY_VALUE_OF(o) o->val.any -#define VOBJECT_VALUE_OF(o) o->val.vobj - -typedef union ValueItem { - const char *strs; - const wchar_t *ustrs; - unsigned int i; - unsigned long l; - void *any; - VObject *vobj; - } ValueItem; - -struct VObject { - VObject *next; - const char *id; - VObject *prop; - unsigned short valType; - ValueItem val; - }; - -typedef struct StrItem StrItem; - -struct StrItem { - StrItem *next; - const char *s; - unsigned int refCnt; - }; - -const char** fieldedProp; - - - -/*---------------------------------------------------------------------- - The following functions involve with memory allocation: - newVObject - deleteVObject - dupStr - deleteStr - newStrItem - deleteStrItem - ----------------------------------------------------------------------*/ - -DLLEXPORT(VObject*) newVObject_(const char *id) -{ - VObject *p = (VObject*)malloc(sizeof(VObject)); - p->next = 0; - p->id = id; - p->prop = 0; - VALUE_TYPE(p) = 0; - ANY_VALUE_OF(p) = 0; - return p; -} - -DLLEXPORT(VObject*) newVObject(const char *id) -{ - return newVObject_(lookupStr(id)); -} - -DLLEXPORT(void) deleteVObject(VObject *p) -{ - unUseStr(p->id); - free(p); -} - -DLLEXPORT(char*) dupStr(const char *s, unsigned int size) -{ - char *t; - if (size == 0) { - size = strlen(s); - } - t = (char*)malloc(size+1); - if (t) { - memcpy(t,s,size); - t[size] = 0; - return t; - } - else { - return (char*)0; - } -} - -DLLEXPORT(void) deleteStr(const char *p) -{ - if (p) free((void*)p); -} - - -static StrItem* newStrItem(const char *s, StrItem *next) -{ - StrItem *p = (StrItem*)malloc(sizeof(StrItem)); - p->next = next; - p->s = s; - p->refCnt = 1; - return p; -} - -static void deleteStrItem(StrItem *p) -{ - free((void*)p); -} - - -/*---------------------------------------------------------------------- - The following function provide accesses to VObject's value. - ----------------------------------------------------------------------*/ - -DLLEXPORT(const char*) vObjectName(VObject *o) -{ - return NAME_OF(o); -} - -DLLEXPORT(void) setVObjectName(VObject *o, const char* id) -{ - NAME_OF(o) = id; -} - -DLLEXPORT(const char*) vObjectStringZValue(VObject *o) -{ - return STRINGZ_VALUE_OF(o); -} - -DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s) -{ - STRINGZ_VALUE_OF(o) = dupStr(s,0); - VALUE_TYPE(o) = VCVT_STRINGZ; -} - -DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s) -{ - STRINGZ_VALUE_OF(o) = s; - VALUE_TYPE(o) = VCVT_STRINGZ; -} - -DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o) -{ - return USTRINGZ_VALUE_OF(o); -} - -DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s) -{ - USTRINGZ_VALUE_OF(o) = (wchar_t*) dupStr((char*)s,(uStrLen(s)+1)*2); - VALUE_TYPE(o) = VCVT_USTRINGZ; -} - -DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s) -{ - USTRINGZ_VALUE_OF(o) = s; - VALUE_TYPE(o) = VCVT_USTRINGZ; -} - -DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o) -{ - return INTEGER_VALUE_OF(o); -} - -DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i) -{ - INTEGER_VALUE_OF(o) = i; - VALUE_TYPE(o) = VCVT_UINT; -} - -DLLEXPORT(unsigned long) vObjectLongValue(VObject *o) -{ - return LONG_VALUE_OF(o); -} - -DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l) -{ - LONG_VALUE_OF(o) = l; - VALUE_TYPE(o) = VCVT_ULONG; -} - -DLLEXPORT(void*) vObjectAnyValue(VObject *o) -{ - return ANY_VALUE_OF(o); -} - -DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t) -{ - ANY_VALUE_OF(o) = t; - VALUE_TYPE(o) = VCVT_RAW; -} - -DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o) -{ - return VOBJECT_VALUE_OF(o); -} - -DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p) -{ - VOBJECT_VALUE_OF(o) = p; - VALUE_TYPE(o) = VCVT_VOBJECT; -} - -DLLEXPORT(int) vObjectValueType(VObject *o) -{ - return VALUE_TYPE(o); -} - - -/*---------------------------------------------------------------------- - The following functions can be used to build VObject. - ----------------------------------------------------------------------*/ - -DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p) -{ - /* circular link list pointed to tail */ - /* - o {next,id,prop,val} - V - pn {next,id,prop,val} - V - ... - p1 {next,id,prop,val} - V - pn - --> - o {next,id,prop,val} - V - pn {next,id,prop,val} - V - p {next,id,prop,val} - ... - p1 {next,id,prop,val} - V - pn - */ - - VObject *tail = o->prop; - if (tail) { - p->next = tail->next; - o->prop = tail->next = p; - } - else { - o->prop = p->next = p; - } - return p; -} - -DLLEXPORT(VObject*) addProp(VObject *o, const char *id) -{ - return addVObjectProp(o,newVObject(id)); -} - -DLLEXPORT(VObject*) addProp_(VObject *o, const char *id) -{ - return addVObjectProp(o,newVObject_(id)); -} - -DLLEXPORT(void) addList(VObject **o, VObject *p) -{ - p->next = 0; - if (*o == 0) { - *o = p; - } - else { - VObject *t = *o; - while (t->next) { - t = t->next; - } - t->next = p; - } -} - -DLLEXPORT(VObject*) nextVObjectInList(VObject *o) -{ - return o->next; -} - -DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size) -{ - VObject *sizeProp; - setVObjectAnyValue(prop, val); - sizeProp = addProp(prop,VCDataSizeProp); - setVObjectLongValue(sizeProp, size); - return prop; -} - -DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size) -{ - void *p = dupStr((const char *)val,size); - return setValueWithSize_(prop,p,p?size:0); -} - -DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o) -{ - i->start = o->prop; - i->next = 0; -} - -DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o) -{ - i->start = o->next; - i->next = 0; -} - -DLLEXPORT(int) moreIteration(VObjectIterator *i) -{ - return (i->start && (i->next==0 || i->next!=i->start)); -} - -DLLEXPORT(VObject*) nextVObject(VObjectIterator *i) -{ - if (i->start && i->next != i->start) { - if (i->next == 0) { - i->next = i->start->next; - return i->next; - } - else { - i->next = i->next->next; - return i->next; - } - } - else return (VObject*)0; -} - -DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id) -{ - VObjectIterator i; - initPropIterator(&i,o); - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - if (!stricmp(id,each->id)) - return each; - } - return (VObject*)0; -} - -DLLEXPORT(VObject*) addGroup(VObject *o, const char *g) -{ - /* - a.b.c - --> - prop(c) - prop(VCGrouping=b) - prop(VCGrouping=a) - */ - char *dot = strrchr(g,'.'); - if (dot) { - VObject *p, *t; - char *gs, *n = dot+1; - gs = dupStr(g,0); /* so we can write to it. */ - /* used to be - * t = p = addProp_(o,lookupProp_(n)); - */ - t = p = addProp_(o,lookupProp(n)); - dot = strrchr(gs,'.'); - *dot = 0; - do { - dot = strrchr(gs,'.'); - if (dot) { - n = dot+1; - *dot=0; - } - else - n = gs; - /* property(VCGroupingProp=n); - * and the value may have VCGrouping property - */ - t = addProp(t,VCGroupingProp); - setVObjectStringZValue(t,lookupProp_(n)); - } while (n != gs); - deleteStr(gs); - return p; - } - else - return addProp_(o,lookupProp(g)); -} - -DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v) -{ - VObject *prop; - prop = addProp(o,p); - setVObjectUStringZValue_(prop, fakeUnicode(v,0)); - return prop; -} - -DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, - unsigned int size) -{ - VObject *prop; - prop = addProp(o,p); - setValueWithSize_(prop, (void*)v, size); - return prop; -} - -DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, - unsigned int size) -{ - return addPropSizedValue_(o,p,dupStr(v,size),size); -} - - - -/*---------------------------------------------------------------------- - The following pretty print a VObject - ----------------------------------------------------------------------*/ - -static void printVObject_(FILE *fp, VObject *o, int level); - -static void indent(FILE *fp, int level) -{ - int i; - for (i=0;i */ - appendcOFile_(fp,0xd); - appendcOFile_(fp,0xa); - } - else - appendcOFile_(fp,c); -} - -static void appendsOFile(OFile *fp, const char *s) -{ - int i, slen; - slen = strlen(s); - for (i=0; ifp = ofp; - fp->s = 0; - fp->len = 0; - fp->limit = 0; - fp->alloc = 0; - fp->fail = 0; -} - -static void initMemOFile(OFile *fp, char *s, int len) -{ - fp->fp = 0; - fp->s = s; - fp->len = 0; - fp->limit = s?len:0; - fp->alloc = s?0:1; - fp->fail = 0; -} - - -static int writeBase64(OFile *fp, unsigned char *s, long len) -{ - long cur = 0; - int i, numQuads = 0; - unsigned long trip; - unsigned char b; - char quad[5]; -#define MAXQUADS 16 - - quad[4] = 0; - - while (cur < len) { - /* collect the triplet of bytes into 'trip' */ - trip = 0; - for (i = 0; i < 3; i++) { - b = (cur < len) ? *(s + cur) : 0; - cur++; - trip = trip << 8 | b; - } - /* fill in 'quad' with the appropriate four characters */ - for (i = 3; i >= 0; i--) { - b = (unsigned char)(trip & 0x3F); - trip = trip >> 6; - if ((3 - i) < (cur - len)) - quad[i] = '='; /* pad char */ - else if (b < 26) quad[i] = (char)b + 'A'; - else if (b < 52) quad[i] = (char)(b - 26) + 'a'; - else if (b < 62) quad[i] = (char)(b - 52) + '0'; - else if (b == 62) quad[i] = '+'; - else quad[i] = '/'; - } - /* now output 'quad' with appropriate whitespace and line ending */ - appendsOFile(fp, (numQuads == 0 ? " " : "")); - appendsOFile(fp, quad); - appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : ""))); - numQuads = (numQuads + 1) % MAXQUADS; - } - appendcOFile(fp,'\n'); - - return 1; -} - -static void writeString(OFile *fp, const char *s) -{ - appendsOFile(fp,s); -} - -static void writeQPString(OFile *fp, const char *s) -{ - char buf[4]; - int count=0; - const char *p = s; - - while (*p) { - /* break up lines biggger than 75 chars */ - if(count >=74){ - count=0; - appendsOFile(fp,"=\n"); - } - - /* escape any non ASCII characters and '=' as per rfc1521 */ - if (*p<= 0x1f || *p >=0x7f || *p == '=' ) { - sprintf(buf,"=%02X",(unsigned char)*p); - appendsOFile(fp,buf); - count+=3; - } else { - appendcOFile(fp,*p); - count++; - } - p++; - } -} - - - -static void writeVObject_(OFile *fp, VObject *o); - -static void writeValue(OFile *fp, VObject *o, unsigned long size,int quote) -{ - if (o == 0) return; - switch (VALUE_TYPE(o)) { - case VCVT_USTRINGZ: { - char *s = fakeCString(USTRINGZ_VALUE_OF(o)); - if(quote) writeQPString(fp, s); - else writeString(fp,s); - deleteStr(s); - break; - } - case VCVT_STRINGZ: { - if(quote) writeQPString(fp, STRINGZ_VALUE_OF(o)); - else writeString(fp,STRINGZ_VALUE_OF(o)); - break; - } - case VCVT_UINT: { - char buf[16]; - sprintf(buf,"%u", INTEGER_VALUE_OF(o)); - appendsOFile(fp,buf); - break; - } - case VCVT_ULONG: { - char buf[16]; - sprintf(buf,"%lu", LONG_VALUE_OF(o)); - appendsOFile(fp,buf); - break; - } - case VCVT_RAW: { - appendcOFile(fp,'\n'); - writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size); - break; - } - case VCVT_VOBJECT: - appendcOFile(fp,'\n'); - writeVObject_(fp,VOBJECT_VALUE_OF(o)); - break; - } -} - -static void writeAttrValue(OFile *fp, VObject *o) -{ - if (NAME_OF(o)) { - struct PreDefProp *pi; - pi = lookupPropInfo(NAME_OF(o)); - if (pi && ((pi->flags & PD_INTERNAL) != 0)) return; - appendcOFile(fp,';'); - appendsOFile(fp,NAME_OF(o)); - } - else - appendcOFile(fp,';'); - if (VALUE_TYPE(o)) { - appendcOFile(fp,'='); - writeValue(fp,o,0,0); - } -} - -static void writeGroup(OFile *fp, VObject *o) -{ - char buf1[256]; - char buf2[256]; - strcpy(buf1,NAME_OF(o)); - while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) { - strcpy(buf2,STRINGZ_VALUE_OF(o)); - strcat(buf2,"."); - strcat(buf2,buf1); - strcpy(buf1,buf2); - } - appendsOFile(fp,buf1); -} - -static int inList(const char **list, const char *s) -{ - if (list == 0) return 0; - while (*list) { - if (stricmp(*list,s) == 0) return 1; - list++; - } - return 0; -} - -static void writeProp(OFile *fp, VObject *o) -{ - int isQuoted=0; - if (NAME_OF(o)) { - struct PreDefProp *pi; - VObjectIterator t; - const char **fields_ = 0; - pi = lookupPropInfo(NAME_OF(o)); - if (pi && ((pi->flags & PD_BEGIN) != 0)) { - writeVObject_(fp,o); - return; - } - if (isAPropertyOf(o,VCGroupingProp)) - writeGroup(fp,o); - else - appendsOFile(fp,NAME_OF(o)); - if (pi) fields_ = pi->fields; - initPropIterator(&t,o); - while (moreIteration(&t)) { - const char *s; - VObject *eachProp = nextVObject(&t); - s = NAME_OF(eachProp); - if (stricmp(VCGroupingProp,s) && !inList(fields_,s)) - writeAttrValue(fp,eachProp); - if (stricmp(VCQPProp,s)==0 || stricmp(VCQuotedPrintableProp,s)==0) - isQuoted=1; - } - if (fields_) { - int i = 0, n = 0; - const char** fields = fields_; - /* output prop as fields */ - appendcOFile(fp,':'); - while (*fields) { - VObject *t = isAPropertyOf(o,*fields); - i++; - if (t) n = i; - fields++; - } - fields = fields_; - for (i=0;iflags & PD_BEGIN) != 0)) { - VObjectIterator t; - const char *begin = NAME_OF(o); - appendsOFile(fp,"BEGIN:"); - appendsOFile(fp,begin); - appendcOFile(fp,'\n'); - initPropIterator(&t,o); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - writeProp(fp, eachProp); - } - appendsOFile(fp,"END:"); - appendsOFile(fp,begin); - appendsOFile(fp,"\n\n"); - } - } -} - -void writeVObject(FILE *fp, VObject *o) -{ - OFile ofp; - initOFile(&ofp,fp); - writeVObject_(&ofp,o); -} - -DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o) -{ - FILE *fp = fopen(fname,"w"); - if (fp) { - writeVObject(fp,o); - fclose(fp); - } -} - -DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list) -{ - FILE *fp = fopen(fname,"w"); - if (fp) { - while (list) { - writeVObject(fp,list); - list = nextVObjectInList(list); - } - fclose(fp); - } -} - -DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o) -{ - OFile ofp; - initMemOFile(&ofp,s,len?*len:0); - writeVObject_(&ofp,o); - if (len) *len = ofp.len; - appendcOFile(&ofp,0); - return ofp.s; -} - -DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list) -{ - OFile ofp; - initMemOFile(&ofp,s,len?*len:0); - while (list) { - writeVObject_(&ofp,list); - list = nextVObjectInList(list); - } - if (len) *len = ofp.len; - appendcOFile(&ofp,0); - return ofp.s; -} - -/*---------------------------------------------------------------------- - APIs to do fake Unicode stuff. - ----------------------------------------------------------------------*/ -DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, int *bytes) -{ - wchar_t *r, *pw; - int len = strlen(ps)+1; - - pw = r = (wchar_t*)malloc(sizeof(wchar_t)*len); - if (bytes) - *bytes = len * sizeof(wchar_t); - - while (*ps) { - if (*ps == '\n') - *pw = (wchar_t)0x2028; - else if (*ps == '\r') - *pw = (wchar_t)0x2029; - else - *pw = (wchar_t)(unsigned char)*ps; - ps++; pw++; - } - *pw = (wchar_t)0; - - return r; -} - -DLLEXPORT(int) uStrLen(const wchar_t *u) -{ - int i = 0; - while (*u != (wchar_t)0) { u++; i++; } - return i; -} - -DLLEXPORT(char*) fakeCString(const wchar_t *u) -{ - char *s, *t; - int len = uStrLen(u) + 1; - t = s = (char*)malloc(len); - while (*u) { - if (*u == (wchar_t)0x2028) - *t = '\n'; - else if (*u == (wchar_t)0x2029) - *t = '\r'; - else - *t = (char)*u; - u++; t++; - } - *t = 0; - return s; -} - -/* end of source file vobject.c */ diff --git a/libversit/vobject.h b/libversit/vobject.h deleted file mode 100644 index bc31dc8297..0000000000 --- a/libversit/vobject.h +++ /dev/null @@ -1,366 +0,0 @@ -/*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. - -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. - -The software is provided with RESTRICTED RIGHTS. Use, duplication, or -disclosure by the government are subject to restrictions set forth in -DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. - -***************************************************************************/ - -/* - -The vCard/vCalendar C interface is implemented in the set -of files as follows: - -vcc.y, yacc source, and vcc.c, the yacc output you will use -implements the core parser - -vobject.c implements an API that insulates the caller from -the parser and changes in the vCard/vCalendar BNF - -port.h defines compilation environment dependent stuff - -vcc.h and vobject.h are header files for their .c counterparts - -vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions -which you may find useful. - -test.c is a standalone test driver that exercises some of -the features of the APIs provided. Invoke test.exe on a -VCARD/VCALENDAR input text file and you will see the pretty -print output of the internal representation (this pretty print -output should give you a good idea of how the internal -representation looks like -- there is one such output in the -following too). Also, a file with the .out suffix is generated -to show that the internal representation can be written back -in the original text format. - -For more information on this API see the readme.txt file -which accompanied this distribution. - - Also visit: - - http://www.versit.com - http://www.ralden.com - -*/ - - -#ifndef __VOBJECT_H__ -#define __VOBJECT_H__ 1 - - -#include "port.h" -#include -#include - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -extern "C" { -#endif - - -#define VC7bitProp "7BIT" -#define VC8bitProp "8BIT" -#define VCAAlarmProp "AALARM" -#define VCAdditionalNamesProp "ADDN" -#define VCAdrProp "ADR" -#define VCAgentProp "AGENT" -#define VCAIFFProp "AIFF" -#define VCAOLProp "AOL" -#define VCAppleLinkProp "APPLELINK" -#define VCAttachProp "ATTACH" -#define VCAttendeeProp "ATTENDEE" -#define VCATTMailProp "ATTMAIL" -#define VCAudioContentProp "AUDIOCONTENT" -#define VCAVIProp "AVI" -#define VCBase64Prop "BASE64" -#define VCBBSProp "BBS" -#define VCBirthDateProp "BDAY" -#define VCBMPProp "BMP" -#define VCBodyProp "BODY" -#define VCBusinessRoleProp "ROLE" -#define VCCalProp "VCALENDAR" -#define VCCaptionProp "CAP" -#define VCCardProp "VCARD" -#define VCCarProp "CAR" -#define VCCategoriesProp "CATEGORIES" -#define VCCellularProp "CELL" -#define VCCGMProp "CGM" -#define VCCharSetProp "CS" -#define VCCIDProp "CID" -#define VCCISProp "CIS" -#define VCCityProp "L" -#define VCClassProp "CLASS" -#define VCCommentProp "NOTE" -#define VCCompletedProp "COMPLETED" -#define VCContentIDProp "CONTENT-ID" -#define VCCountryNameProp "C" -#define VCDAlarmProp "DALARM" -#define VCDataSizeProp "DATASIZE" -#define VCDayLightProp "DAYLIGHT" -#define VCDCreatedProp "DCREATED" -#define VCDeliveryLabelProp "LABEL" -#define VCDescriptionProp "DESCRIPTION" -#define VCDIBProp "DIB" -#define VCDisplayStringProp "DISPLAYSTRING" -#define VCDomesticProp "DOM" -#define VCDTendProp "DTEND" -#define VCDTstartProp "DTSTART" -#define VCDueProp "DUE" -#define VCEmailAddressProp "EMAIL" -#define VCEncodingProp "ENCODING" -#define VCEndProp "END" -#define VCEventProp "VEVENT" -#define VCEWorldProp "EWORLD" -#define VCExNumProp "EXNUM" -#define VCExpDateProp "EXDATE" -#define VCExpectProp "EXPECT" -#define VCExtAddressProp "EXT ADD" -#define VCFamilyNameProp "F" -#define VCFaxProp "FAX" -#define VCFullNameProp "FN" -#define VCGeoProp "GEO" -#define VCGeoLocationProp "GEO" -#define VCGIFProp "GIF" -#define VCGivenNameProp "G" -#define VCGroupingProp "Grouping" -#define VCHomeProp "HOME" -#define VCIBMMailProp "IBMMail" -#define VCInlineProp "INLINE" -#define VCInternationalProp "INTL" -#define VCInternetProp "INTERNET" -#define VCISDNProp "ISDN" -#define VCJPEGProp "JPEG" -#define VCLanguageProp "LANG" -#define VCLastModifiedProp "LAST-MODIFIED" -#define VCLastRevisedProp "REV" -#define VCLocationProp "LOCATION" -#define VCLogoProp "LOGO" -#define VCMailerProp "MAILER" -#define VCMAlarmProp "MALARM" -#define VCMCIMailProp "MCIMAIL" -#define VCMessageProp "MSG" -#define VCMETProp "MET" -#define VCModemProp "MODEM" -#define VCMPEG2Prop "MPEG2" -#define VCMPEGProp "MPEG" -#define VCMSNProp "MSN" -#define VCNamePrefixesProp "NPRE" -#define VCNameProp "N" -#define VCNameSuffixesProp "NSUF" -#define VCNoteProp "NOTE" -#define VCOrgNameProp "ORGNAME" -#define VCOrgProp "ORG" -#define VCOrgUnit2Prop "OUN2" -#define VCOrgUnit3Prop "OUN3" -#define VCOrgUnit4Prop "OUN4" -#define VCOrgUnitProp "OUN" -#define VCPagerProp "PAGER" -#define VCPAlarmProp "PALARM" -#define VCParcelProp "PARCEL" -#define VCPartProp "PART" -#define VCPCMProp "PCM" -#define VCPDFProp "PDF" -#define VCPGPProp "PGP" -#define VCPhotoProp "PHOTO" -#define VCPICTProp "PICT" -#define VCPMBProp "PMB" -#define VCPostalBoxProp "BOX" -#define VCPostalCodeProp "PC" -#define VCPostalProp "POSTAL" -#define VCPowerShareProp "POWERSHARE" -#define VCPreferredProp "PREF" -#define VCPriorityProp "PRIORITY" -#define VCProcedureNameProp "PROCEDURENAME" -#define VCProdIdProp "PRODID" -#define VCProdigyProp "PRODIGY" -#define VCPronunciationProp "SOUND" -#define VCPSProp "PS" -#define VCPublicKeyProp "KEY" -#define VCQPProp "QP" -#define VCQuickTimeProp "QTIME" -#define VCQuotedPrintableProp "QUOTED-PRINTABLE" -#define VCRDateProp "RDATE" -#define VCRegionProp "R" -#define VCRelatedToProp "RELATED-TO" -#define VCRepeatCountProp "REPEATCOUNT" -#define VCResourcesProp "RESOURCES" -#define VCRNumProp "RNUM" -#define VCRoleProp "ROLE" -#define VCRRuleProp "RRULE" -#define VCRSVPProp "RSVP" -#define VCRunTimeProp "RUNTIME" -#define VCSequenceProp "SEQUENCE" -#define VCSnoozeTimeProp "SNOOZETIME" -#define VCStartProp "START" -#define VCStatusProp "STATUS" -#define VCStreetAddressProp "STREET" -#define VCSubTypeProp "SUBTYPE" -#define VCSummaryProp "SUMMARY" -#define VCTelephoneProp "TEL" -#define VCTIFFProp "TIFF" -#define VCTimeZoneProp "TZ" -#define VCTitleProp "TITLE" -#define VCTLXProp "TLX" -#define VCTodoProp "VTODO" -#define VCTranspProp "TRANSP" -#define VCUniqueStringProp "UID" -#define VCURLProp "URL" -#define VCURLValueProp "URLVAL" -#define VCValueProp "VALUE" -#define VCVersionProp "VERSION" -#define VCVideoProp "VIDEO" -#define VCVoiceProp "VOICE" -#define VCWAVEProp "WAVE" -#define VCWMFProp "WMF" -#define VCWorkProp "WORK" -#define VCX400Prop "X400" -#define VCX509Prop "X509" -#define VCXRuleProp "XRULE" - -/* Extensions */ - -#define XPilotIdProp "X-PILOTID" -#define XPilotStatusProp "X-PILOTSTAT" - -typedef struct VObject VObject; - -typedef struct VObjectIterator { - VObject* start; - VObject* next; - } VObjectIterator; - -extern DLLEXPORT(VObject*) newVObject(const char *id); -extern DLLEXPORT(void) deleteVObject(VObject *p); -extern DLLEXPORT(char*) dupStr(const char *s, unsigned int size); -extern DLLEXPORT(void) deleteStr(const char *p); -extern DLLEXPORT(void) unUseStr(const char *s); - -extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id); -extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s); -extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s); -extern DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s); -extern DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s); -extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i); -extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l); -extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t); -extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size); -extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size); - -extern DLLEXPORT(const char*) vObjectName(VObject *o); -extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o); -extern DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o); -extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o); -extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o); -extern DLLEXPORT(void*) vObjectAnyValue(VObject *o); -extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o); -extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p); - -extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p); -extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id); -extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id); -extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v); -extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size); -extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size); -extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g); -extern DLLEXPORT(void) addList(VObject **o, VObject *p); - -extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id); - -extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o); -extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o); -extern DLLEXPORT(int) moreIteration(VObjectIterator *i); -extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i); - -extern DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o); -extern DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list); - -extern DLLEXPORT(const char*) lookupStr(const char *s); -extern DLLEXPORT(void) cleanStrTbl(); - -extern DLLEXPORT(void) cleanVObject(VObject *o); -extern DLLEXPORT(void) cleanVObjects(VObject *list); - -extern DLLEXPORT(const char*) lookupProp(const char* str); -extern DLLEXPORT(const char*) lookupProp_(const char* str); - -extern DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, int *bytes); -extern DLLEXPORT(int) uStrLen(const wchar_t *u); -extern DLLEXPORT(char*) fakeCString(const wchar_t *u); - -extern DLLEXPORT(void) printVObjectToFile(char *fname,VObject *o); -extern DLLEXPORT(void) printVObjectsToFile(char *fname,VObject *list); -extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o); -extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list); - -extern DLLEXPORT(int) vObjectValueType(VObject *o); - -/* return type of vObjectValueType: */ -#define VCVT_NOVALUE 0 - /* if the VObject has no value associated with it. */ -#define VCVT_STRINGZ 1 - /* if the VObject has value set by setVObjectStringZValue. */ -#define VCVT_USTRINGZ 2 - /* if the VObject has value set by setVObjectUStringZValue. */ -#define VCVT_UINT 3 - /* if the VObject has value set by setVObjectIntegerValue. */ -#define VCVT_ULONG 4 - /* if the VObject has value set by setVObjectLongValue. */ -#define VCVT_RAW 5 - /* if the VObject has value set by setVObjectAnyValue. */ -#define VCVT_VOBJECT 6 - /* if the VObject has value set by setVObjectVObjectValue. */ - -extern const char** fieldedProp; - -/* NOTE regarding printVObject and writeVObject - -The functions below are not exported from the DLL because they -take a FILE* as a parameter, which cannot be passed across a DLL -interface (at least that is my experience). Instead you can use -their companion functions which take file names or pointers -to memory. However, if you are linking this code into -your build directly then you may find them a more convenient API -and you can go ahead and use them. If you try to use them with -the DLL LIB you will get a link error. -*/ -extern void printVObject(FILE *fp,VObject *o); -extern void writeVObject(FILE *fp, VObject *o); - - -#if defined(__CPLUSPLUS__) || defined(__cplusplus) -} -#endif - -#endif /* __VOBJECT_H__ */ - - diff --git a/mail/.cvsignore b/mail/.cvsignore deleted file mode 100644 index 63d45eccce..0000000000 --- a/mail/.cvsignore +++ /dev/null @@ -1,14 +0,0 @@ -.deps -.libs -.pure -Makefile -Makefile.in -Mail-stubs.c -Mail-skels.c -Mail-common.c -Mail.h -evolution-mail -evolution-mail.pure -test-mail -test-sources -test-thread \ No newline at end of file diff --git a/mail/ChangeLog b/mail/ChangeLog deleted file mode 100644 index e05e83f780..0000000000 --- a/mail/ChangeLog +++ /dev/null @@ -1,3693 +0,0 @@ -2000-08-20 Jeremy Wise - * folder-browser.c: (fb_resize_cb) Added function to monitor resize - of the e_paned in the main view. - -2000-08-17 Peter Williams - - * folder-browser-factory.c (control_activate): Fix menu item names. - (register_ondemand): Put the ondemand hooks into the new folder menu. - -2000-08-17 Ettore Perazzoli - - * mail-vfolder.c (vfolder_gui_add_rule): Use stock OK/Cancel - buttons and add i18n support. - - * folder-browser-factory.c (control_activate): Changed menu item - label from "Mark all messages seen" to "Mark All Messages as - Read". Changed capitalization of some other menu items. - (control_activate): Put the message- and folder- related menu - items in new "Message" and "Folder" subtrees which are created in - the `' item created by the shell. - (control_deactivate): Updated accordingly. - (control_activate): Put the filter and vfolder editors, the mail - configuration and the "forget password" command into the - "settings" menu. - (control_deactivate): Updated accordingly. - - * mail-config-gui.c (transport_page_new): Add translation mark. - (service_page_new): Show the menu items before appending them. - (service_page_item_new): Use `GTK_FILL' for the "Detect supported - types..." button. - - * local-config.glade: Change the apply button into an ok button. - -2000-08-17 Peter Williams - - Implement filtering on demand. - - * folder-browser-factory.c (register_ondemand): New function. Callback - to put the filter-on-demand filters into the bonobo UIH; - (create_ondemand_hooks): New function. Read in our on-demand filters - and hook them into the UI. - (remove_ondemand_hooks): New function. Remove the hooks when done with - them. - (control_activate): Call create_ondemand_hooks() - (control_deactivate): Call remove_ondemand_hooks(); - - * mail-callbacks.c (run_filter_ondemand): New function. Callback - for running a filter on demand. - (filter_edit): Pass NULLs as the new arguments to rule_context_load. - - * mail.h: Prototype run_filter_ondemand(); - - * folder-browser.c (oc_destroy): New function. Iterator to destroy - an fb_ondemand_closure. - (folder_browser_destroy): Free the data associated with the ondemand - menu items. - (my_folder_browser_init): Clear the filter_ variables. - - * folder-browser.h: Two new members of FolderBrowser: filter_menu_paths, - a list of fb_ondemand_closures so that the menu items can be freed and - removed; and filter_context, a permanently loaded FilterContext for - running the ondemand filters. Prototype the new fb_ondemand_closure - structure. - - * mail-autofilter.c (filter_gui_add_from_message): Pass NULLs as the - new parameters to rule_context_load (we don't need to hook up ondemand - menu items...) - - * mail-tools.c (mail_tool_filter_get_folder_func): Rename from - get_folder_func() and make public so mail-callbacks.c:run_filter_ondemand() - can use it too. - (mail_tool_filter_contents_into): Use the new name of get_folder_func. - Pass NULLs as the extra arguments to rule_context_load. Pass the - extra source type to filter_driver_run (only use INCOMING). - - * mail-tools.h: Publicly prototype mail_tool_filter_get_folder_func() - - * mail-vfolder.c (vfolder_create_storage): Pass NULLs as the extra - arguments to rule_context_load. - - * message-list.c (message_list_init): Free our strdup'd uids when - the table model gets destroyed. - (nuke_uids): New function. Walk the tree nodes to free the uids. - (nuke_uids_cb): New callback for nuke_uids(); - - -2000-08-16 Richard Hult - - * mail-ops.c (cleanup_display_message): Use a configurable timeout. - - * mail-config.c (mail_config_set_mark_as_seen_timeout): New function - for the settable mark-as-seen timeout. - (mail_config_mark_as_seen_timeout): Likewise. - (mail_config_write): Write the timeout setting. - (config_read): Read timeout setting. - - * mail-config-gui.c (mail_config): Add option for the settable - mark-as-seen timeout. - (mail_config_apply_clicked): Likewise. - (timeout_changed): New function for the timeout setting. - -2000-08-16 Peter Williams - - * message-thread.c (walk_containers): More (default disabled) - mem debugging here. Fix the big leaks. - - * mail-format.c (get_url_for_icon): Copy the url_path so that - it can't get freed under us. - - * mail-threads.c (mail_operation_queue): Fix a leak. - - * mail-ops.c (mail_do_display_message): Fix another leak. - - * message-list.c (message_list_destroy): Remove the seen_id timeout - if necessary. - - * mail-local.c (mail_tool_local_uri_to_folder): Fix a leak. - - * session.c (auth_callback): Fix a leak. Almost seems as if - I've been using Purify... - - -2000-08-15 Peter Williams - - * message-thread.c (alloc_container): Add support for debugging - container allocations -- currently disabled. Make sure that - the g_strfreev works. - - * message-list.c (main_message_changed): Address bug #496 -- - possible race when forwading a message_changed event. - - * mail-threads.c (dispatch): Close the dispatch thread's half of - pipes when about to exit. - (mail_operations_terminate): Close the main thread's half of the - pipes when about to exit. - (all): Add i18n support. - - * mail-tools.c (all): Add i18n support. - - * mail-ops.c (transfer_messages): Generalize move_messages into - transfer_messages so that we can copy too. - (all): Add i18n supprt where appropriate. - - * mail-ops.h: Prototype the new mail_do_transfer_messages. - - * folder-browser-factory.c: Add a UI hook for copy_msg. - - * mail-callbacks.c (transfer_msg): Generalize move so that it supports - copy as well, and add a callback 'copy_msg'. - - * message-list.c (on_right_click): Add a right-click hook for Copy Message. - - * session.c (mail_request_dialog): Don't deadlock when in main thread. - -2000-08-14 Peter Williams - - * mail-threads.c (show_error): Fix the error dialogs. - (read_msg): Re-enable them. - - * mail-ops.c (do_scan_subfolders): Silence a compile warning. - -2000-08-13 Jeffrey Stedfast - - * mail-crypto.c (mail_crypto_openpgp_encrypt): Added support for - encrypting via PGP 5.0 - -2000-08-13 Ettore Perazzoli - - * mail-ops.c (cleanup_create_folder): Release the listener object - with `CORBA_Object_release()', not `CORBA_free()'. - -2000-08-13 Ettore Perazzoli - - * main.c (main): Set the signal handlers for `SIGSEGV' and - `SIGBUS' to the default ones. - -2000-08-13 Jeffrey Stedfast - - * mail-config.c (mail_config_write): Set config->configured to - TRUE - -2000-08-13 Ettore Perazzoli - - * mail-config-gui.c (mail_config_druid): Don't - `GDK_THREADS_ENTER()'/`GDK_THREADS_LEAVE()'. - -2000-08-13 Ettore Perazzoli - - * mail-threads.c (update_active_views): Just iterate through all - the controls, not just the active ones. - - * folder-browser-factory.c: Don't keep track of active controls. - Rather, keep track of all of them. - (folder_browser_factory_get_active_control_list): Removed. - (folder_browser_factory_get_control_list): New. - -2000-08-13 Dan Winship - - * Makefile.am (evolution_mail_SOURCES): add mail-local.h - -2000-08-13 Ettore Perazzoli - - * mail-threads.c (read_msg): For now, don't do anything about - errors. - -2000-08-13 Dan Winship - - * mail-format.c (add_url): Fix some freed-memory references - - * mail-threads.c (get_password): Don't free the prompt. It - doesn't belong to you. - -2000-08-13 Ettore Perazzoli - - * mail-ops.c (mail_do_create_folder): Duplicate the listener - object. - (cleanup_create_folder): Free the listener. - -2000-08-13 Jeffrey Stedfast - - * mail-threads.c (get_password): Don't wrap the gnome_dialog_run - in GDK_THREADS_ENTER/LEAVE - -2000-08-13 Ettore Perazzoli - - * folder-browser-factory.c (control_destroy_cb): Remove the - control from the active control list, if it's there. - - * mail.h (folder_browser_factory_new_control): Removed prototype. - (folder_browser_factory_init): Removed prototype. - - * folder-browser-factory.h: New. - - * folder-browser-factory.c: New static variable `active_controls', - list of the currently active controls. - (control_activate): Add the control to it. - (control_deactivate): Remove the control from it. - (folder_browser_factory_get_active_control_list): New. - - * mail-threads.c (mail_operations_get_status): New function. - - * folder-browser.c (folder_browser_gui_init): Add i18n support for - the labels. - - [The following is actually from a patch by Peter Williams - .] - - * Removed types `PERCENTAGE', `HIDE_PBAR', `SHOW_PBAR'. New - struct `block_info_s'. Removed all the code to create and destroy - the progress window. - -2000-08-13 Jeffrey Stedfast - - * component-factory.c (create_news_storage): Updated to reflect - changes to mail_do_scan_subfolders - (create_imap_storage): Same. - - * mail-ops.c (mail_do_scan_subfolders): No longer takes an - add_INBOX argument - -2000-08-13 Dan Winship - - * mail-ops.c (do_scan_subfolders): Lose a reference to the store - on purpose. To be fixed later. - -2000-08-12 Dan Winship - - * component-factory.c (create_imap_storage): Take the source as a - command-line argument rather than fetching it from mail-config. - (owner_set_cb): Call create_imap_storage on each configured IMAP - store. - - * mail-format.c (decode_pgp): Redo this so that the lock icon - remains active after a failed decryption so you can click on it - and try again. - (try_inline_pgp, handle_multipart_encrypted): Put a border around - the decrypted data. - - * message-list.c (cleanup_regenerate_messagelist): Don't clear the - tree here. If two "folder_changed"s arrive in close succession, - then one possible ordering of events is - cleanup_regenerate_messagelist, cleanup_regenerate_messagelist, - cleanup_thread_messages, cleanup_thread_messages. Which would - result in the message list being filled in twice without being - cleared in between. So don't clear it until the rebuilding - function itself is called. - (clear_tree): New function to empty out the ETreeModel in the - message list. - (build_tree): Change to simpler interface. Call clear_tree. - (build_subtree): Does most of the work of the old build_tree - (build_flat): Remove unused arg. Call clear_tree. - - * message-thread.c (cleanup_thread_messages): Update for - build_tree interface change. - - * mail-ops.c (do_send_mail): Don't leak the transport. - - * mail-tools.c (mail_tool_get_folder_from_urlname): Don't ref the - store returned from camel_session_get_store. It's already reffed. - (mail_tool_get_root_of_store): Ditto. - (mail_tool_send_via_transport): Remove some commented-out code and - fix it to not leave the transport connected if sending fails. - - * mail-callbacks.c (delete_msg): Toggling a flag is an - "instantaneous" operation, so if we're only doing one, just do it - and return, rather than queueing it for the other thread. This - makes the "Delete" key work correctly (move to the next message) - again. - - * mail-identify.c: Remove workaround for gnome-vfs 0.2 bug. - - * mail-format.c (lookup_handler): Remove workaround for function - introduced between gnome-vfs 0.2 and 0.3, since we depend on 0.3 - now. - -2000-08-12 Michael Meeks - - * main.c (main): kill using_oaf assertion. - -2000-08-11 Peter Williams - - * Makefile.am: Make it so that test-mail links - -2000-08-11 JP Rosevear - - * folder-browser-factory.c (control_activate): Move menu items - that affect a single message together, ditto with ones that - affect multiple messages, put a separator in. - -2000-08-11 Christopher James Lahey - - * mail-format.c, mail-tools.h, message-list.c: Fixed a warning. - -2000-08-11 Dan Winship - - * mail-display.c, mail-format.c: Redo this again. Get rid of - struct mail_format_data and move most of that info into - MailDisplay itself, and pass the MailDisplay around. Add a GData** - to MailDisplay, and put the urls hash table into that. Also add - the ability to redisplay the currently-displayed message (with the - same GData**), and add a "show_pgp" datum to it that controls - whether or not to decrypt PGP messages, and redo the PGP stuff - (again) to take that into account. Now you don't get the annoying - PGP password dialog box without any warning. - -2000-08-11 Peter Williams - - * mail-config-gui.c (service_acceptable): Make verify-service - an asynchronous operation. - - * Makefile.am (noinst_PROGRAMS): Don't build test-thread - while mail-threads.c is in flux. - - * mail-threads.c (mail_operation_queue): Make the error - and query dialogs modal. - - * mail-local.c (update_progress): Don't use the - temporarily-disabled mail_op_set_percentage(). - -2000-08-11 Chris Toshok - - * mail-config.c (mail_config_get_default_news): use config->news - instead of config->sources. - -2000-08-11 Dan Winship - - * mail-format.c (destroy_part): Update this for CamelObject - (try_inline_pgp): Deal with decrypting here rather than trying to - pawn the data off to handle_multipart_encrypted, since it most - likely won't be correct (won't have the proper MIME headers inside - the encrypted part). - (handle_multipart_encrypted): Add code from Nathan Thompson-Amato - to re-MIME-parse the decrypted data after decrypting. - - * mail-crypto.c (mail_crypto_openpgp_{de,en}crypt): Get the - password here rather than having it passed in. Remove some dead - code. - - * session.c (mail_request_dialog): Allow this to work in either a - sync or an async context. - -2000-08-11 Peter Williams - - * mail-tools.c (mail_tool_fetch_mail_into_searchable): Don't - do the imap check here... it's a silly place. - - * mail-ops.c (do_fetch_mail): Do the imap check here. - -2000-08-11 JP Rosevear - - * mail-config-gui.c (service_page_new): Work around - gtk option menu bug. - (service_page_item_auth_fill): ditto - -2000-08-11 Peter Williams - - * mail-threads.c (read_msg): Fix the new FORWARD_EVENT handler - (didn't free msg, didn't write newline in the debug) - - * mail-local.c (local_reconfigure_folder): Make the dialog - modal. - - * mail-callbacks.c (select_first_unread): Fix some warnings. - - * mail-threads.c (mail_op_forward_event): New function that - writes a FORWARD_EVENT signal to the compipe, to allow Camel - events to be handled in the main thread. - (read_msg): Handle a FORWARD_EVENT. - - * mail-callbacks.c (select_first_unread): Forward the - event into the main thread to prevent the GTK calls in the - dispatcher thread. - (main_select_first_unread): New name of old select_first_unread. - - * message-list.c (folder_changed): Same as above. - (main_folder_changed): Same as above. - (message_changed): Same as above. - (main_message_changed): Same as above. - - * mail-format.c (free_byte_array): Note about using - mail_op_forward_event. (cmm_destroyed): Same. - -2000-08-11 Dan Winship - - * message-list.c (message_list_select): If the caller passes "-1" - for the model row, translate that to view row 0. - - * message-list.c (idle_select_row): - * mail-callbacks.c (select_first_unread): Use new - message_list_select kludge^H^H^H^H^H^Hfeature - -2000-08-11 JP Rosevear - - * mail-config-gui.c (source_dialog): Allow the window - to be growable - - * mail-config.c: use void in empty declarations - -2000-08-11 Peter Williams - - * mail-config.c (mail_config_get_news): Change () to (void) - if a function takes no arguments. - - * mail-config.h: Prototype mail_config_get_{sources,news}x - -2000-08-11 JP Rosevear - - * mail-config-gui.c (identity_dialog): iddialog, not sdialog - (news_edit_clicked): Kill leftover c-p crud - -2000-08-11 JP Rosevear - - * mail-config-gui.c (news_edit_clicked): Check nrow, not srow. - -2000-08-11 JP Rosevear - - * mail-config-gui.c (service_acceptable): Use camel_object_unref - instead of gtk_object_unref - (mail_druid_finish): Use new config accessors - (mail_config_druid): No need to call config functions - (news_add_clicked): Increments maxnrow, not maxsrow - (mail_config_apply_clicked): Use new config accessors - (mail_config): ditto - - * component-factory.c (create_imap_storage): Use new - config accessors - (create_news_storage): ditto - - * mail-config.glade: Set news clist name correctly - - * mail-config.c (config_read): Rename from mail_config_read and - made private - no one should need to do a read manually. - (mail_config_set_send_html): New accessor - (mail_config_add_identity): ditto - (mail_config_get_sources): ditto - (mail_config_add_source): ditto - (mail_config_get_default_news): ditto - (mail_config_get_news): ditto - (mail_config_add_news): ditto - - * mail-config.h: Prototype new accessors. Config struct is now - in mail-config.c and hidden from the world. - -2000-08-11 Dan Winship - - * mail-ops.c (describe_fetch_mail): Use camel_service_get_name - rather than showing the URL to the user. - -2000-08-11 Peter Williams - - * mail-ops.c (do_refile_messages): Freeze the folders while moving. - (do_flag_messages): Same. - - * mail-threads.c (get_password_clicked): Fix the case when the - user /doesn't/ use escape to cancel the dialog :-/ - (show_error_clicked): Same. - -2000-08-11 Dan Winship - - * mail-tools.c (mail_tool_get_folder_name): Add a function to - return a useful name for a folder (not just "mbox" or "mh" for - any local folder.) - - * mail-ops.c: Use mail_tool_get_folder_name rather than - folder->full_name when printing folder names. - -2000-08-11 Not Zed - - * mail-tools.c (mail_tool_get_local_inbox_url): Properly handle - different local file formats. The folder isn't always mbox. - (mail_tool_do_movemail): Movemail always uses an mbox format - however. - (mail_tool_get_local_movemail_url): What is the mbox url, it is - always the same type, mbox. - (mail_tool_fetch_mail_into_searchable): Same here. - - * mail-local.c (mail_local_map_uri): Map a local uri to the real uri. - -2000-08-10 Christopher James Lahey - - * folder-browser-factory.c, message-list.c, message-thread.c, - session.c: Fixed some warnings. - -2000-08-10 Dan Winship - - * session.c (session_init): Don't call e_setup_base_dir. It was - wrong and it doesn't exist any more. - - * component-factory.c (owner_set_cb): Update for changed - prototype, and record the evolution_homedir. Move call to - mail_config_init here from session.c so it happens after - evolution_dir is initialized. - - * mail.h: define "extern char *evolution_dir;" (formerly in - e-util/e-setup.h) - - * component-factory.c, mail-callbacks.c, mail-config-gui.c, - mail-config.c, mail-display.c, mail-format.c, mail-ops.c, - mail-tools.c, session.c: Remove "e-util/e-setup.h" include. - -2000-08-10 Peter Williams - - * test-thread.c (queue_ops): Use mail_operations_terminate() to - close the other thread nicely. - - * mail-threads.c (get_password_deleted): Handle the "close" event - as a cancel. - (show_error): Same. - -2000-08-10 Dan Winship - - * mail-tools.c (mail_tool_get_folder_from_urlname): Add a - "gboolean create" argument to pass to camel_store_get_folder. - - * mail-ops.c (do_create_folder, do_setup_draftbox): - * mail-local.c (mail_tool_local_uri_to_folder): - * mail-vfolder.c (vfolder_uri_to_folder): Add create flag to - mail_tool_get_folder_from_urlname calls. - -2000-08-10 Jeffrey Stedfast - - * mail-callbacks.c (composer_send_cb): Fix compile warning by - casting the object to a CamelObject - -2000-08-10 Peter Williams - - * mail-tools.c (mail_tool_filter_contents_into): Delete the source - folder if told to and if it's empty - (mail_tool_get_local_movemail_path): New function. - -2000-08-10 Dan Winship - - * mail-callbacks.c (reply_to_all): Fix a bug in the async changes. - (This was identical to reply_to_sender.) - -2000-08-10 Not Zed - - * mail-local.c (do_local_reconfigure_folder): Update for - append_message api change. - - * message-list.c (message_list_regenerate): Change for search api - change. - (ml_tree_value_at): Add a colour column, based on the colour - assigned in the summary. - (message_list_init_renderers): Init colour column. - -2000-08-09 Peter Williams - - * mail-display.c (part_for_url): Remove a gtk_object_get_data - -2000-08-09 Cody Russell - - * folder-browser-factory.c, mail-view.c: Make the toolbars - honor the user's gnomecc settings for detachable toolbars. - -2000-08-09 Jeffrey Stedfast - - * mail-ops.c (composer_send_cb): Get the from address set in the - composer, if that fails ONLY THEN get the default from mail config - - * mail-config.c (mail_config_get_identities): New convenience - function for getting a list of the configured identities - -2000-08-09 Dan Winship - - * mail-display.c (on_object_requested): Support controls as well - as embeddables. - -2000-08-09 Jeffrey Stedfast - - * mail-view.c (mail_view_create): Changed to only take a - FolderBrowser argument - - * mail-ops.c (real_view_msg): Create a new FolderBrowser for each - message being opened in a new window. Also set the - message_list->cursor_uid and mail_display->current_message to the - appropriate values. - (real_view_msg): Updated to reflect changes in the mail_view_create - - * message-list.c (on_right_click): Nicify a little, add in a menu - separator between VFolder and Filter stuff. - - * mail-ops.c (real_view_msg): Set the UID of the message that is - being displayed - -2000-08-09 Ettore Perazzoli - - * folder-browser-factory.c (control_activate): Use - `GNOME_STOCK_MENU_*' things instead of `GNOME_STOCK_PIXMAP_*' - things, that are too big and look bad. - -2000-08-09 Peter Williams - - * mail-view.c (mail_view_create): Save the top window so that on_close - can find it [with set_data]. - (on_close): Recover the top window. - - * mail-threads.c (read_msg): Destroy the window instead of hiding it. - -2000-08-09 Not Zed - - * mail-autofilter.c (filter_gui_add_from_message): Helper function - to add with confirm. - (rule_match_recipients): Dont set real name if its empty for the - filter name. - (rule_match_subject): was cutting ] off mailing list names. - - * message-list.c (on_right_click): Added menu to install - vfolders/filters from message. - -2000-08-09 Not Zed - - * mail-autofilter.c: New file to hold auto filter/vfolder stuff. - -2000-08-09 Christopher James Lahey - - * mail-display.c, mail-format.c, mail-ops.c: Fixed some warnings. - - * message-list.c: Fix the call to e_popup_menu_run to match the - new signature. - -2000-08-09 Ettore Perazzoli - - * folder-browser-factory.c (control_activate): Create a "print - message" menu item. - -2000-08-09 Jeffrey Stedfast - - * message-list.c (message_list_init): Attached a double_click - signal handler - (on_double_click): Our lovely new double_click callback. Will - display the current selected message in a new window - -2000-08-08 Jeremy Wise - * mail-config.[ch], folder-browser.c: Added configuration work to - save the size of the vpaned widget. It will be functional when the - e_paned widget emits a "resized" signal - -2000-08-08 Jeffrey Stedfast - - * mail-config.h: Added void as an argument to functions not - needing any parameters to avoid compile warnings. - -2000-08-08 Jeremy Wise - * mail-config.[ch], main.c, folder-browser-factory.c: State of the - threaded list toggle is now saved via gnome_config - -2000-08-08 Dan Winship - - * mail-config-gui.c (service_page_item_new): Attach a signal - handler to call the "changed" function when the user clicks the - "keep on server" checkbox. - -2000-08-08 Jeffrey Stedfast - - * mail-ops.c (view_msg): New convenience function with params of a - normal Gtk callback function. We also now create a new - FolderBrowser object so that the message-view window isn't tied to - the display in the main window - (view_message): Now calls view_msg (this function is a bonobo - callback and can't be used with gtk widgets) - (edit_msg): Same idea as view_msg() - (edit_message): Again, same as view_message() - - * message-list.c (on_right_click): Callback for creating an - e-popup-menu - (message_list_init): Added a right_click event to trigger a pop-up - menu to be displayed - -2000-08-08 Dan Winship - - * mail-config-gui.c: Add "Don't delete messages from server" - button to remote SOURCEs that aren't STORAGEs (ie, POP). - (provider_list): Only list SOURCEs. (ie, not mh) - - * mail-config.c: Save/load "keep_on_server" flag. - - * mail-ops.c (fetch_remote_mail): New function, split out of - real_fetch_mail. Deals with copying mail from a remote server into - a temporary mbox, possibly using a CamelUIDCache to leave the - messages on the server. - - * mail-crypto.c, mail-format.c, message-thread.c: Fix some - compiler warnings. - - * mail-format.c (mail_generate_reply): Fix up format of addresses. - (write_headers): Use CamelAddress functions to simplify this. - -2000-08-08 Jeffrey Stedfast - - * mail-view.c: Lets get rid of the last separator in the toolbar - until we add n/p - -2000-08-08 Ettore Perazzoli - - * mail-threads.c (queue_window_delete_event_cb): Callback for - "delete_event", just doing nothing. - (create_queue_window): Connect it to the "delete_event" signal of - the progress dialog. - -2000-08-08 Peter Williams - - * mail-threads.c (remove_next_pending): Sanity check for - job queue, which seems to have some issues. - (read_msg): Make sure that the next operation isn't started - before the last one is cleaned up. - - * mail-callbacks.c (fetch_mail): Fix erroneous free. - - * mail-config-gui.c (mail_config_druid): Wrap the gtk_main call. - - * mail-ops.c (do_flag_messages): Allow specification of whether - to set the flags unconditionally or toggle their current state. - - * message-list.c (ml_tree_set_value_at): Toggle the seen status; - don't set it unconditionally. - - * mail-callbacks.c (delete_msg): Toggle the deletion status; - don't set it unconditionally. - - * mail-tools.c (mail_tool_do_movemail): Fix for undeclared tmpfd. - - * mail-local.c (local_reconfigure_folder): Big rewrite; make into - an asynchronous operation. Use some mail tools to make life easy. - -2000-08-08 Dan Winship - - * main.c (main): Move mail_config_init after session_init, since - it depends on evolution_dir being set. - -2000-08-08 JP Rosevear - - * mail-ops.c (check_configured): Use config accessors - (fetch_mail): ditto - (composer_send_cb): ditto - (create_msg_composer): ditto - - * mail-config-gui.h: Update API - - * mail-config.h: Update API - - * mail-config.c: Add accessor functions - (mail_config_is_configured): accessor function - (mail_config_get_default_identity): ditto - (mail_config_get_default_source): ditto - (mail_config_get_transport): ditto - (mail_config_send_html): ditto - (identity_copy): Make public - (identity_destroy): ditto - (identity_destroy_each): ditto - (service_copy): ditto - (service_destroy): ditto - (service_destroy_each): ditto - (mail_config_init): Rename from init_config and make public - (mail_config_clear): Rename from clear_config and make public - (mail_config_read): Rename from read_config and make public - (mail_config_write): Reanme from write_config and make public - - * main.c (main): Call mail_config_init. - - * mail.h: Include mail-config-gui.h - - * mail-config-gui.c: Move config gui stuff here. - (source_dialog): Kill memory leak from debug leftovers. - Make sure returned source is NULL by default - -2000-08-07 Not Zed - - * mail-local.c (local_reconfigure_folder): Redone to show a - dialogue first, and show progress of whats happening as its done. - - * Makefile.am (glade_DATA): Added local-config.glade, for mailbox - reconfig dialogue. - -2000-08-04 Not Zed - - * folder-browser.c (mail_uri_to_folder): Use local_uri_to_folder() - for local uri's (file://). - - * mail-local.c (local_uri_to_folder): Handle looking up folder - storage type before opening the store/folder. - (local_reconfigure_folder): Function to reconfigure the format of - a local mailbox into another storage format. - - * Makefile.am (evolution_mail_SOURCES): Added mail-local.c and - missing mail-vfolder.h. - -2000-08-07 Jeffrey Stedfast - - * Makefile.am: Added mail-view.c - - * folder-browser-factory.c (control_activate): Adda menu item for - viewing the message - - * mail-view.c: New file containing methods for viewing messages in - separate windows - - * mail-ops.c (view_message): New callback for viewing messages in - a new window. - -2000-08-07 Jeffrey Stedfast - - * component-factory.c (real_create_generic_storage): New function - to replace real_create_imap_storage and real_create_news_storage - (create_imap_storage): Updated. - (create_news_storage): Updated. - -2000-08-07 Peter Williams - - * mail-ops.c (cleanup_edit_messages): New operation: edit_messages - For continuing draft messages. - (attach_messages): Fix accidental 0 datasize. - (do_setup_draftbox): New operation: setup_draftbox. Soooo hacky. - - * mail-callbacks.c: Move fejj's edit message to the async home. - - * component-factory.c (owner_set_cb): Use mail_do_setup_draftbox. - - -2000-08-07 Jeffrey Stedfast - - * mail-display.c: - * component-factory.c: s/strncasecmp/g_strncasecmp - - * mail-format.c (write_headers): Get rid of kludge around subject - beginning with spaces. - (mail_generate_reply): Get rid of kludge around subject beginning - with spaces and also use g_strncasecmp instead of strncasecmp for - portability - - * mail-ops.c (forward_msg): Get rid of kludges around subject - beginning with spaces. - -2000-08-07 Dan Winship - - * message-list.c (message_list_select): Clarify that the input row - is a model row, and swap it to a view row when finding the - next/previous row. - (idle_select_row): Select view row 0, not model row 0. - - * mail-ops.c (select_first_unread): Start from view row 0, not - model row 0. - -2000-08-07 Jeffrey Stedfast - - * mail-format.c (mail_get_message_body): Renamed from reply_body() - so other functions can use it - (mail_generate_reply): Updated to reflect function name changes - - * mail-ops.c (real_edit_msg): Attach a callback to the send signal - -2000-08-07 Jeffrey Stedfast - - * folder-browser-factory.c (control_activate): New menu item under - Actions to allow editing of messages. - - * mail-ops.c (edit_message): New function for editing messages. - - * component-factory.c (owner_set_cb): Create a global reference to - the Drafts mbox folder for the Composer to use - -2000-08-06 JP Rosevear - - * mail-config.c (ndialog_page_undone): Desensitize ok button - (sdialog_page_undone): ditto - (iddialog_page_undone): ditto - (news_page_new): Typo - news, not mail - (transport_page_new): Typo - transport, not source - (identity_dialog): Set undone callback - (source_dialog): ditto - (news_dialog): ditto - (mail_druid_identity_undone): Desensitize next button and - mark done flag as false - (mail_druid_source_undone): ditto - (mail_druid_transport_undone): ditto - (mail_druid_identity_done): Mark done flag as true - (mail_druid_source_done): ditto - (mail_druid_transport_done): ditto - (mail_druid_prepare): Use done flag to set next button - sensitivity, fixes #467 - -2000-08-06 Jeffrey Stedfast - - * mail-crypto.c (mail_crypto_openpgp_encrypt): Added support for - encrypting with GnuPG. Support for PGP5 and PGP2 are still in - progress. - -2000-08-05 Dan Winship - - * folder-browser-factory.c (control_activate): Remove bonobo 0.15 - vs 0.15-and-a-half ifdef, since we require post-0.16 now. - -2000-08-04 Dan Winship - - * mail-threads.c (mail_operation_wait_for_finish): Don't use - "while (gtk_events_pending ()) gtk_main_iteration ();" inside - another tight loop, because it makes the thread spin rather than - blocking and waiting like it should. - -2000-08-04 Peter Williams - - * message-thread.c (do_thread_messages): Uninitialized variable - fix. - - * mail-threads.c (read_msg): Small leak fix. - - * component-factory.c (owner_unset_cb): Use mail_operations_ - terminate() instead of wait_for_finish(). - - * mail-threads.c (mail_operation_queue): Centralize the clur - handling functions; fix a race condition where the dispatcher - would overwrite the closure before the main thread could - free the old one. - (mail_operations_terminate): New function, wait for ops to - finished and kill the other thread. - (dispatch): changes to die when terminate is called (abort - on NULL spec). - - * mail-ops.c (cleanup_display_message): Fix improper handling - of displaying a NULL message (which means clear the message - display). - -2000-08-04 Ettore Perazzoli - - * message-list.c (message_list_regenerate): Free the GPtrArray - correctly instead of using `g_strfreev()'. - -2000-08-04 Michael Meeks - - * folder-browser-factory.c (control_activate): release the ui_handler - after set_container. - -2000-08-03 Michael Meeks - - * mail-config.c (identity_page_new): only whack the sig in if the - file exists. - - * component-factory.c (factory_fn): count running instances, - attach destroy signal (factory_destroy): add. - - * main.c (main): pass orb around. - -2000-08-03 Jeffrey Stedfast - - * mail-ops.c (composer_send_cb): Yay, no more compiler warnings - - * mail-config.c: set config = NULL - (provider_list) Eek! Initialize news to NULL! Also, use - g_slist_prepend() for "performance" gains ;-) - (init_config): Set the config member data to NULL just to be on - the safe side - (clear_config): Don't bother freeing slist data if the slist is - NULL - -2000-08-03 Peter Williams - - * mail-ops.c (op_forward_messages): Use the new dynamic - operation naming. - - * message-thread.c (describe_thread_messages): Ditto. - - * message-list.c (describe_regenerate_messagelist): Ditto. - - * mail-threads.c (get_password_clicked): Dynamic generation - of descriptive text for mail operations. "Opening a folder" -> - "Opening INBOX". Supported only so far, will be implemented - quickly. - g_strdup() the old_message when changing the queue_window_label's - text. - - * main.c (main): One more gconf reference to take out... - - * mail-ops.c (composer_send_cb): Check for an identity before - sending. - -2000-08-03 JP Rosevear - - * mail-config.glade: Increase window size slightly, rename - "Transport" to "Mail Transport" - - * mail-config.c (init_config): Remove gconf references - (clear_config): ditto - (read_config): ditto - (write_config): ditto - (mail_config): Null provider lists before filling them - (mail_config_druid): ditto - (identity_page_new): Increase spacing of vbox - (service_page_new): ditto - - * Makefile.am: Remove gconf references. - -2000-08-02 Dan Winship - - * mail-config.c (service_page_item_new): Make the "test settings" - button FILL rather than SHRINK so it doesn't end up oddly-placed. - - * mail-config-druid.glade: Make the icon background dark blue - like the surrounding area. - -2000-08-02 Peter Williams - - * component-factory.c (owner_unset_cb): Wait for async operations - to finish before exiting. - -2000-08-02 Christopher James Lahey - - * mail-ops.c, message-list.c: Emit "model_pre_change" where - appropriate. - -2000-08-02 Peter Williams - - * mail-config.h: #ifdef _MAIL_CONFIG_H protect the header. - -2000-08-01 Peter Williams - - * mail-threads.c: Implement Solaris threads. Attempt - to join to the thread upon exit -- hopefully prevents - all those nasty zombie processes from popping up :-( - -2000-08-01 Dan Winship - - * mail-crypto.c: New code to spawn off GPG/PGP to do stuff. - Currently only deals with decryption. From Nathan Thompson-Amato - , with bunches of changes from me. - - * session.c (mail_request_dialog): Expose the password dialog to - the rest of the app (for use by the GPG/PGP code). - - * mail-format.c (handle_text_plain): Handle special inline data - types. (Currently uuencoding, BinHex, and PGP encryption.) This is - not the best way to deal with it, but it works for now. - (try_inline_pgp): Convert an inline PGP-encrypted message into a - multipart/encrypted part. - (try_inline_binhex): Convert an inline BinHex attachment into an - application/mac-binhex40 part (which we currently don't deal - with...) - (try_uudecoding): Convert a uuencoded attachment to an - application/octet-stream part. - (handle_multipart_encrypted): Deal with RFC2015 MIME-encoded PGP - encrypted messages. (From ndt.) - - * mail-display.c (mail_text_write, mail_error_write): New utility - functions. - - * Makefile.am (evolution_mail_SOURCES): add mail-crypto.c - -2000-07-31 Christopher James Lahey - - * component-factory.c, folder-browser.c: Fixed some warnings. - - * message-list.c: Made the icon column non sortable. - -2000-07-31 Dan Winship - - * mail-config.c (service_page_set_url): Fix a NULL-pointer strcmp - noticed by peterw. - -2000-07-31 Not Zed - - * mail-vfolder.h: Header for vfolder functions. - - * folder-browser.c (mail_uri_to_folder): Use new scheme to open - vfolders. - (search_save): New button/function to save a search as a vfolder. - - * mail-vfolder.c (vfolder_edit): Made asynchronous. - (vfolder_uri_to_folder): New function for loading vfolders and - setting up their source folders. - (vfolder_refresh): Change shell vfolder uri's to indirect - references rather than the real vfolder uri. - (vfolder_gui_add_rule): Add a rule with user confirmation. - (vfolder_create_part): Get a new part by name, for creating rules - in code. - - * message-thread.c (thread_messages): Check for uid lookup - failure, which indicates an error in the folder or calling code. - -2000-07-29 Not Zed - - * component-factory.c (create_view): Remove hack to pass the - storage around. - - * folder-browser-factory.c (control_activate): Changed to call - renamed vfolder editor. - - * mail-ops.c (vfolder_edit_vfolders): renamed from vfolder_edit, - call new edit function. - (vfolder_editor_clicked): Removed. - (filter_druid_clicked): - (filter_edit): Updated for api change. - (real_fetch_mail): Fixed up for api change and fucked up indent. - (filter_get_folder): callback for filter driver. - - * mail-vfolder.c: New file to manage virtual folders. - -2000-07-29 JP Rosevear - - * mail-format.c (mail_generate_reply): Use new mail config stuff - - * component-factory.c (create_imap_storage): Use new mail config - stuff - (create_news_storage): ditto - - * evolution-mail.schemas: Gconf schema for evolution mail - - * mail-config-druid.glade: Gladification of config druid - - * mail-config.h: New header with config structs. - - * mail-config.c: Rewrite of GUI configuration tools to use - new config structs. Stores multiple identities and sources now. - Still only uses the first one found. - (mail_config_fetch): Returns MailConfig struct to caller - for configuration queries. - (mail_config): Renamed function to show mail config dialog. - (mail_config_druid): Renamed function to show mail config druid. - - * mail-ops.c (create_msg_composer): Use - e_msg_composer_new_with_sig_file and new config stuff - (check_configured): Use new config stuff - (fetch_mail): ditto - (composer_send_cb): ditto - -2000-07-28 Cody Russell - * mail-ops.c, mail.h: Added mark_all_seen(), to mark every - message in the list with CAMEL_MESSAGE_SEEN. - - * folder-browser-factory.c: Added "Actions/Mark all seen". - -2000-07-27 Jeffrey Stedfast - - * mail-config.c: Lets fix Dan's kludge the Right Way (tm) - (set_service_url): Only strip off the leading "/" from the - url->path if url->host is NULL - (get_service_url): Only prepend a leading "/" to the path if the - host is NULL - -2000-07-27 Dan Winship - - * mail-config.c (get_service_url): toss in a kludge to deal with - the IMAP vs mbox path problem for now. - -2000-07-26 Christopher James Lahey - - * message-list.c, message-list.h: Removed counting of selected - messages. - -2000-07-26 Dan Winship - - * mail-ops.c (real_fetch_mail): Don't create the tmp_mbox before - calling movemail, because the external movemail requires it to not - exist. Contrariwise, delete it in the cleanup code if it's empty. - Update for camel_movemail interface change. Do the "No new - messages" dialog in the mbox case as well as the remote mail - issue. - -2000-07-26 Jeffrey Stedfast - - * mail-ops.c: s/struct refile_data/struct move_data - (real_move_msg): Renamed from real_refile_msg() - (move_msg): Renamed from refile_msg() - - * folder-browser-factory.c: Changed Refile to Move. - -2000-07-26 Dan Winship - - * mail-format.c (lookup_handler): Update for OAF and for external - apps as well as components. - (handle_via_external): Handler to set up for data that can be - displayed by an external application. - - * mail-display.c (on_link_clicked, etc): Refactor the save_data() - code and add launch_external() as a handler for - x-evolution-external URLs. - (embeddable_destroy_cb): Remove this, since it seems like it's all - wrong. - (on_object_requested): Update for OAF, and fix some bugs. - -2000-07-25 Jeffrey Stedfast - - * mail-config.c (get_service_url): Always prepend a leading "/" to - the url->path. - (set_service_url): Added more error checking and also strip the - leading '/' from the url->path - (create_identity_page): Set the signature file to the one specified in - the identity record, else set the default path to ~/.sugnature - -2000-07-25 Michael Meeks - - * mail-config.c (create_identity_page): set default signature to - ~/.signature - -2000-07-25 Peter Williams - - * mail-ops.c (reply): Check for the case of fb->mail_display-> - current_message = NULL, which shouldn't happen, but has happened - to me. - -2000-07-25 Dan Winship - - * message-thread.c (group_root_set): Don't group together messages - with the same non-Re: subject and no References/In-Reply-To. More - often than not, they're unrelated. (eg, "[No subject]".) - (thread_messages): Handle messages with no Message-Id. "This - shouldn't happen", but it does sometimes, and it's not much code - to make it just work. - -2000-07-25 Ettore Perazzoli - - * mail-config.c (create_service_page): Call - `gtk_option_menu_set_menu()' as the last thing, as `GtkOptionMenu' - is fscking broken. Also, `gtk_widget_show()' the individual menu - items. - -2000-07-24 Dan Winship - - * message-list.c (mark_msg_seen, ml_tree_set_value_at, - message_list_regenerate): Update for CamelFolder API changes. - (Certain functions no longer take a CamelException.) - - * mail-ops.c (real_fetch_mail, real_send_mail, real_delete_msg): - ditto - - * component-factory.c (real_create_imap_storage, - real_create_news_storage): ditto - -2000-07-24 Dan Winship - - * component-factory.c, folder-browser-factory.c, test-mail.c: - Remove GOAD support. - - * main.c: Remove GOAD support. - (main): More "guess the build mistake" fun, this time for the - failure to initialize Bonobo case. - -2000-07-24 Peter Williams - - * mail-tools.c (mail_tool_set_uid_flags): Change - function to faithfully pass parameters to - camel_folder_set_message_flags; this function is - somewhat useless now. Other files synced with - API change. - - * mail-ops.c (op_display_message): Change "display - a message" into "retrieve a messsage" in the - description of mail_op_display_message. - - * mail-threads.c (display_timeout): New function. - Only display the progress dialog if the operation - takes more than a second to perform. - (hide_queue_window): New function. Hide the queue - window as an idle function... I'm thinking maybe - the problem with hiding it was due to us not - being in a GTK event sequence? Perhaps it's only - the timeout, which was not being cancelled, which - is now. - - * message-list.c (get_message_uid): New function, - copy of get_message_info, except gets only the - UID, as that's all that most functions want, and - we avoid a Camel call. - -2000-07-23 Ettore Perazzoli - - * mail-ops.c (create_message_composer): New. - (compose_msg): Use it. - (send_to_url): Likewise. - (forward_msg): Likewise. - - * folder-browser-factory.c (control_activate): Use `_()' instead - of `N_()'. - -2000-07-21 Peter Williams - - * message-thread.c (setup_thread_messages): New - operation: thread_messages, simple wrapper around - thread_messages () and thread_messages_free(); - - * message-list.c (cleanup_regenerate_messagelist): - Use new thread_messages operation instead of just - calling ... thread_messages :-) - - * folder-browser.c (folder_browser_destroy): Use new - sync_folder operation instead of calling camel_folder_sync - directly. - - * component-factory.c (create_folder): Changed to use - new create_folder operation. - - * mail-ops.c (mail_do_create_folder): New operation: create - folder. New operation: sync folder. - - * mail-format.c (cmm_destroyed): Remove the url hashtable from - the larger hashtable when it gets destroyed. - - * mail-callbacks.c (fetch_mail): Pass a hook function and data - down the chain to pick up the folder_changed and change the view. - - * mail-ops.c: Rename from mail-ops-new.c now that it's a little more - solid. - (fetch_mail): Add new options to hook and unhook an event while the - filter driver runs. A hack, but all of the operations are to some - extent. - (cleanup_fetch_mail): Unref the destination folder if not NULL. - * mail-tools.c (mail_tool_filter_contents_into): Intermediate the - event hook/unhook hack here. - -2000-07-20 Peter Williams - - * mail-ops-new.c (setup_send_mail): Fix silly forgetting-to-ref - problem on some sends (when not replying). Note the early exit - path with a big comment. - - * message-list.c (message_list_set_folder): Don't call - folder_changed, call mail_do_regenerate_messagelist, as - the GDK_THREADS_ENTER in the former can deadlock us! - - * folder-browser.c (folder_browser_set_uri): Ah, screw it. - Make 'load folder' asynchronous and pretend that it always - succeeds. - - * mail-ops-new.c (mail_do_load_folder): New operation, loads - a folder into a FolderBrowser. - - * mail-threads.c (read_msg): Check if the exception is - a user cancel; don't complain if it is. - (mail_operation_queue): Same. - (dispatch_func): Same. - -2000-07-20 Peter Williams - - * mail-ops-new.c (cleanup_send_mail): Fix evil mistaken - unref. - - * test-thread.c: Fit the new mail_operation_spec prototype. - - * mail-callbacks.c (composer_send_cb): Hide the composer upon - start of send operation. - - * folder-browser.c: #include "mail-ops-new.h" - - * mail-threads.h: Change text fields of mail_operation_spec to - provide two forms of the name. - - * mail-threads.c: Use appropriate new string fields. - (dispatch_func): Hide the progressbar by default. - - * message-list.c (op_regenerate_messagelist): Fix the datasize from - 0 -> sizeof (regenerate_messagelist_data_t). Add the new gerund and - infinitive strings. - (do_regenerate_messagelist): Include some code that fell between the - cracks. - - * mail-ops-new.c (op_scan_subfolders): Same datasize fix for - scan_subfolders. - (op_forward_message): Same. - (all): Add new gerund and inifinitive strings for mail_operation_spec. - (cleanup_send_mail): Destroy the composer on success; re-show it on - error. I'm so clever! - -2000-07-20 Ettore Perazzoli - - * component-factory.c (factory_fn): Updated for the new - `evolution_shell_component_new()' arg. - -2000-07-19 Jeffrey Stedfast - - * message-thread.c (thread_messages): What if message info is NULL? - -2000-07-17 Peter Williams - - * component-factory.c (real_create_{imap,news}_storage): Instead of - directly calling evolution_storage_new_folder, queue up a list of - folders to register so that we don't do our CORBA in The Other Thread. - (create_{imap,news}_storage): Changes ancillary to the above. - (add_new_mailbox): New function to queue up a folder - (cleanup_create_info): New function to dequeue the folders and free mem. - - * test-thread.c: s,ENABLE_BROKEN_THREADS,USE_BROKEN_THREADS -- oops - - * mail-format.c: (mail_lookup_url_table): New function to get the url - table associated with a CamelMimeMessage because we can no longer - gtk_object_get_data on it. - - * mail-display.c: replace 'gtk_object_get_data( message, "urls" )' - with 'mail_lookup_url_table( message )' - -2000-07-16 Jeffrey Stedfast - - * folder-browser.c, component-factory.c: Initial code to support - IMAP folders that don't use "/" as a directory separator. - -2000-07-15 Ettore Perazzoli - - * mail-ops.c (set_x_mailer_header): New helper function to set the - `X-Mailer:' header to to `Evolution [Developer - Preview]". - (real_send_mail): Call it. - -2000-07-14 Peter Williams - - * message-list.c (message_list_set_folder): Ported to CamelObject: - GTK_OBJECT->CAMEL_OBJECT; gtk_signal_connect->camel_object_hook_event; - GDK_THREADS_ENTER/LEAVE around "changed" event hooks. - - * folder-browser.c (folder_browser_destroy): likewise. - (mail_uri_to_folder): likewise. - (folder_browser_load_folder): likewise. - -2000-07-14 Ettore Perazzoli - - * Makefile.am (evolution_mail_LDADD): Add `GCONF_LIBS'. - -2000-07-14 Dan Winship - - * mail-format.c (write_headers): put a

at the end of the - header table. (I think there used to be whitespace after it, but - then some gtkhtml change got rid of it...) - (handle_text_plain): Don't do this

. Instead, CONVERT_NL and
-	CONVERT_SPACES and wrap it in . Now if the sender didn't
-	include any newlines, it will be wrapped to the width of the
-	window instead of extending off into infinity.
-
-2000-07-13  Dan Winship  
-
-	* message-list.c (message_list_destroy): Only unref the folder if
-	it's been set.
-
-	* folder-browser.c (folder_browser_destroy): Only sync the folder
-	if it's been set.
-
-2000-07-13  Jonathan Blandford  
-
-	* mail-config.c (create_transport):
-	s/CAMEL_SERVICE_NEED_HOST/CAMEL_SERVICE_URL_NEED_HOST.
-
-2000-07-13  Dan Winship  
-
-	* mail-config.c (add_row): Add a "gboolean required" argument, and
-	set its value on the entry.
-	(create_source, create_transport): Create rows for URL elements if
-	the URL ALLOWs them. Mark them required if it NEEDs them.
-	(service_note_doneness): Only require the required fields to be
-	filled in.
-
-	Now the IMAP config page allows the user to enter a path, but
-	doesn't require it.
-	
-2000-07-13  Jeffrey Stedfast  
-
-	* mail-ops.c (real_fetch_mail): Back to the old way to avoid
-	g_warnings, yay. Also fix append to send a flags argument (0)
-
-2000-07-12  Chris Toshok  
-
-	* mail-config.c (providers_config_new): fix some cut & paste bung.
-
-2000-07-12  Chris Toshok  
-	
-	* mail-format.c (setup_function_table): add "message/news" to the
-	mime_function_table using the same handler as message/rfc822.
-
-2000-07-12  Chris Toshok  
-
-	* mail-config.glade*: add news server tab to dialog.
-
-	* mail-config.c (on_NewsServerConfigDialogButton_clicked): new function.
-	(on_clistNewsServers_select_row): new function.
-	(on_cmdNewsServersAdd_clicked): new function.
-	(on_cmdNewsServersEdit_clicked): new function.
-	(on_cmdNewsServersDelete_clicked): new function.
-	(providers_config_new): mirror the source tab's code to fill in
-	the news server tab.
-	(write_config): save out the news server.
-	(create_news_server_config_dialog): new function.
-	(create_news_server_page): new function.
-
-2000-07-12  Peter Williams  
-
-	* mail-display.c (save_data): Change from evolution_dir to
-	g_get_home_dir() for default location of save file.
-
-2000-07-11  Dan Winship  
-
-	* Update for CamelFolder API changes
-
-2000-07-11  Jeffrey Stedfast  
-
-	* mail-ops.c (real_fetch_mail): Changed to use 
-	camel_folder_move_message_to () rather than get_message () and then
-	append_message (). This also makes it so we don't have to worry about
-	fetching message flags to pass to the new append_message () method.
-
-	* folder-browser.c (folder_browser_load_folder): Disable
-	Search capability menu/entry if folder doesn't support it.
-
-	* message-list.c (message_list_regenerate): Don't perform
-	a search if the folder doesn't support it.
-
-2000-07-11  Dan Winship  
-
-	* mail-ops.c (real_send_mail): Set the post_send_data flag rather
-	than toggling it. (Maybe we'll need more control over it later,
-	but for now, the only flag we set is "replied", and we want
-	that set, not toggled.)
-
-2000-07-10  Dan Winship  
-
-	* folder-browser-factory.c (control_activate): Work with both
-	current and 0.15 bonobo
-
-	* kill more debugging messages
-
-	* mail-ops.c (real_fetch_mail): Don't multiply free dest_url.
-
-	* message-list.c (message_list_select): Update
-	message_list_select_next to do either next or previous.
-
-	* folder-browser.c (etable_key): Make 'n' and 'p' do next and
-	previous unread message.
-
-	* mail-ops.c (select_first_unread): Update.
-	(real_fetch_mail): clean up a bit.
-
-2000-07-10  Ettore Perazzoli  
-
-	* mail-ops.c (forward_msg): Initialize `fwd_subj' to NULL if
-	`from' is NULL.
-
-2000-07-10  Jeffrey Stedfast  
-
-	* mail-ops.c (real_fetch_mail): Fixed broken POP fetching
-
-2000-07-10  Ettore Perazzoli  
-
-	* component-factory.c: Removed variable `browsers'.
-	(create_view): Don't update it.
-	(owner_unset_cb): Don't sync the folders here anymore, because at
-	this point the folder browser is dead already so we cannot get a
-	valid list of folders from it anymore.
-
-	* folder-browser.c (folder_browser_destroy): Sync the associated
-	mailbox first.
-
-2000-07-10  Christopher James Lahey  
-
-	* message-list.c, message-list.h: Switched from ETable to
-	ETableScrolled.
-
-2000-07-10  Jeffrey Stedfast  
-
-	* mail-ops.c (real_fetch_mail): Fixed movemail so that it too would
-	deliver to Inbox.
-
-2000-07-09  Dan Winship  
-
-	* message-list.c (get_message_info): Don't g_warn if the user
-	selects a fake tree parent.
-	(message_list_select_next): Ignore fake rows
-	(build_tree): Store the "root_subject" for fake rows
-	(ml_tree_value_at): Display the correct subject for fake rows.
-	(on_cursor_change_cmd): Update for the other changes and set
-	cursor_uid to NULL when the cursor is on a fake row.
-
-	* mail-ops.c (reply): Don't try to reply when no (real) message is
-	selected.
-	(forward_msg): Ditto.
-
-2000-07-09  Christopher James Lahey  
-
-	* message-list.c: Remove setting of dnd_code since that's handled
-	internally to ETable.
-
-2000-07-08  Dan Winship  
-
-	* folder-browser.c (etable_key): Fix up the pageup/pagedown
-	increment a bit.
-
-	* folder-browser-factory.c (control_activate): Add a "Threaded
-	Message List" item to the "View" menu.
-
-	* message-list.c (message_list_toggle_threads): Handler for that.
-	(build_flat): New function to build a "flat" message list using
-	the tree model.
-	(message_list_regenerate): Build tree or flat message list
-	depending on the global setting.
-
-	* message-thread.c (get_root_subject): fix a "Re:" parsing bug
-
-2000-07-08  Jeffrey Stedfast  
-
-	* mail-ops.c (real_fetch_mail): Always dump incoming messages to
-	Inbox (assuming not filtered to another location).
-
-2000-07-08  Ettore Perazzoli  
-
-	* folder-browser-factory.c (control_activate): Move the
-	"Expunge" item to the "Action" menu.
-	(control_deactivate): Accordingly.
-
-2000-07-08  Dan Winship  
-
-	* mail-ops.c (forward_msg): Deal with having multiple selected
-	messages.
-
-	* mail-format.c (mail_generate_forward): Removed. (Integrated into
-	forward_msg)
-
-2000-07-08  Jeffrey Stedfast  
-
-	* message-list.c (build_tree): Small fix to stop uid data from
-	being set on a message-list tree node when it didn't correspond
-	to an actual message.
-
-2000-07-08  Dan Winship  
-
-	* message-list.c (get_message_info): Fix Jeff's FIXME: This does
-	get called with out-of-range data sometimes, so we do need the
-	check. Use e_table_model_row_count to get the actual right answer.
-
-2000-07-07  Jeffrey Stedfast  
-
-	* message-list.c (get_message_info): This wasn't quite right, it
-	will now work but still isn't perfect. See FIXME comment.
-
-2000-07-07  Dan Winship  
-
-	* message-thread.c (remove_node): Add another argument "clast"
-	pointing to the container before the current one in the list,
-	which it can update if that turns out to be the one that it
-	removed.
-	(group_root_set): Update for remove_node change, and remove both
-	nodes in the "subjects are common" case. Fixes a bug that would
-	cause the message list to be truncated if this rule was invoked.
-
-	(sort_node): sort the tree by the original order of the messages
-	in the folder rather than by date.
-
-2000-07-07  Dan Winship  
-
-	* message-list.c: Lots of changes. Store uids as node data on the
-	tree nodes and use those rather than rows where possible. (The
-	concept of "row" is just getting too complicated.) Get rid of the
-	summary_table, because given a uid we can call
-	camel_folder_get_message_info, which makes more sense than keeping
-	a separate uid->row hash table ourselves.
-
-	(get_message_info): update
-	(get_message_row): removed
-	(ml_col_cound, ml_row_count, ml_value_at, ml_set_value_at,
-	ml_cell_is_editable, ml_duplicate_value, ml_free_value,
-	ml_initialize_value, ml_value_is_empty, ml_value_to_string):
-	Removed. We always use the tree model now.
-	(message_list_init): Remove the non-tree code.
-	(build_tree): store uids in the tree rather than row numbers,
-	and build the message_list->uid_rowmap to map from uids to rows
-	when needed.
-	(message_list_regenerate): Renamed from _set_search, since it's
-	used to redraw in non-search cases too.
-	(message_changed): Use the uid_rowmap to get a model row number.
-
-	* message-thread.c (thread_messages): Change the interface on this
-	to work with the new MessageList.
-
-	* folder-browser.c (search_set, folder_browser_clear_search): 
-	s/message_list_set_search/message_list_regenerate/
-
-2000-07-07  Christopher James Lahey  
-
-	* message-list.c (get_message_info): Handle a row number of -1
-	properly.
-
-2000-07-06  Dan Winship  
-
-	* message-list.c (get_message_info): Map tree model row numbers to
-	summary row numbers.
-	(ml_tree_value_at, ml_tree_set_value_at,
-	ml_tree_is_cell_editable): So don't do that here.
-
-2000-07-06  JP Rosevear  
-
-	* mail-config.glade*: Glade files for the configuration dialog.
-	
-	* mail-config.c (providers_config_new): Build the dialog with
-	glade.
-
-2000-07-06  Dan Winship  
-
-	* folder-browser-factory.c, folder-browser.c, mail-ops.c,
-	message-list.c: fix warnings.
-
-	* main.c (main): gtkhtmllib_init is no more. Call gconf_init
-	directly instead.
-
-	* message-list.c (message_list_select_next): New function to
-	select the first message on or after the given row that meets
-	certain flag criteria.
-
-	* mail-ops.c (real_fetch_mail): call message_list_select_next to
-	select first unread message in current folder if it changes.
-	(real_delete_msg): Remove the code to move the etable cursor. It
-	only makes sense really if you deleted the message with the
-	keyboard, so do it from etable_key.
-
-	* folder-browser.c (etable_key): call message_list_select_next to
-	select next non-deleted message after Delete.
-
-	* mail-identify.c: Add a workaround for a small gnome-vfs 0.2 bug
-	so we don't need to require CVS gnome-vfs.
-
-2000-07-06  Not Zed  
-
-	* message-thread.c (sort_thread): sort messages based on date for
-	the initial sort order.
-	(thread_messages_free): Implement.
-
-	* message-list.c (message_list_init_header): Setup the subject
-	renderer to a tree in tree mode.
-	(on_cursor_change_cmd): For a tree model, map the view row to the
-	data row.
-	(build_tree): Builds the tree data structure of all messages.
-	(message_list_set_search): For a tree model, build the tree here.
-	(ml_tree_icon_at): Icon callback, returns nothing.
-	(ml_tree_value_at):
-	(ml_tree_set_value_at): 
-	(ml_tree_is_cell_editable): Maps tree node to data row, and calls
-	the equivalent table callback
-	(message_list_init_renderers): Setup the tree renderer if needed.
-	(message_list_init): set the root node invisible afterall.
-	(message_list_set_search): Clear the old tree before putting in a
-	new one.
-
-	* message-list.h: Add a tree renderer to render list, and
-	tree_view indicator.
-
-	* message-thread.[ch]: Code for message threading. 
-
-2000-07-05  Dan Winship  
-
-	* mail-identify.c (mail_identify_mime_part): Oops. My gnome-vfs
-	was out-of-date. Update for changed function name.
-
-2000-07-05  Dan Winship  
-
-	* mail-identify.c (mail_identify_mime_part): Use the gnomevfs
-	sniff buffer interface to try to identify the MIME type when
-	everything else fails.
-
-	* mail-display.c (on_object_requested):
-	* mail-format.c (lookup_handler, handle_undisplayable,
-	handle_audio): s/gnome_mime/gnome_vfs_mime/
-
-	* Makefile.am: Add gnomevfs stuff
-
-2000-07-03  Ettore Perazzoli  
-
-	* component-factory.c (create_folder): Get rid of a compiler
-	warning by making sure `folder' is always initialized to some
-	value for any code path.
-
-2000-07-03  Dan Winship  
-
-	* message-list.c (select_msg): call mail_display_set_message with
-	NULL if the message we tried to select doesn't exist (probably
-	meaning we tried to selecte the first message and the folder is
-	empty.)
-
-	* mail-display.c (mail_display_set_message): deal with NULL as an
-	input (meaning "undisplay previous message and display nothing").
-
-2000-07-02  Dan Winship  
-
-	* mail-ops.c (real_fetch_mail): Remove hack to redisplay the
-	inbox, since folder_changed signals will now be emitted
-	appropriately.
-
-	* component-factory.c (create_vfolder_storage): Fix
-	filter_driver_new invocation.
-
-	* Makefile.am (bin_PROGRAMS): test-mail and test-thread should be
-	noinst.
-
-	* mail-ops.c (real_fetch_mail): 
-	(vfolder_editor_clicked): 
-	* component-factory.c (create_vfolder_storage):
-	Pass mail_uri_to_folder and rules to filter_driver_new.
-
-2000-07-02  Ettore Perazzoli  
-
-	* folder-browser.c (mail_uri_to_folder): Fix double freeing of the
-	local exception `ex'.
-
-2000-07-01  Ettore Perazzoli  
-
-	* mail-ops.c (refile_msg): Only allow type "mail" in the folder
-	selection dialog.
-
-2000-07-01  Dan Winship  
-
-	* pixmaps.h, pixmaps/*.xpm: Removed. These aren't being used any
-	more. (The real pixmaps are in ../art.)
-
-2000-07-01  Jeffrey Stedfast  
-
-	* message-list.c (get_message_info):
-	(select_msg): Updated to reflect camel-folder changes.
-
-	* mail-ops.c (real_fetch_mail): Modified to reflect camel-folder
-	changes.
-
-2000-06-30  Dan Winship  
-
-	* mail-ops.c (print_msg): Use gnome-print to do a print preview.
-
-	* folder-browser-factory.c: Hook up "Print" button.
-
-	* message-list.c (message_list_foreach): New function, a wrapper
-	around e_table_selected_row_foreach, which calls the callback
-	function with UIDs rather than row numbers.
-
-	* folder-browser-factory.c: Remove never-used "Find" button from
-	the toolbar and replace it with "Refile". (We need a better icon
-	for this...). Hook up "Refile" to "refile_msg".
-
-	* mail-ops.c (refile_msg): Call the shell's user_select_folder
-	routine, and then use message_list_foreach and real_refile_msg to
-	do the work.
-	(delete_msg): Update to use message_list_foreach.
-
-	* folder-browser.c (mail_uri_to_folder): new function, extracted
-	from folder_browser_load_folder, to turn a URI into a folder.
-	(folder_browser_load_folder): Use it.
-
-2000-06-30  Peter Williams  
-
-	* component-factory.c (create_news_storage, create_imap_storage):
-	Fixed to use new EvolutionShellClient proxy thingamajiggie.
-
-2000-06-30  Dan Winship  
-
-	* message-list.c (on_row_selection): use the ETable row_selection
-	signal to track how many rows are selected. Eventually we will use
-	this info to disable toolbar buttons when you have too few/too
-	many messages selected, but the current toolbar widget doesn't
-	allow that.
-
-	* message-list.h, message-list.c, mail-ops.c: Change selected_row
-	and selected_uid fields of MessageList to cursor_row and
-	cursor_uid to be more correct according to the new ETable
-	interfaces.
-
-2000-06-30  Ettore Perazzoli  
-
-	* component-factory.c: Eeek.  Fix typo: add missing star in the
-	declaration of `global_shell_client'.
-
-2000-06-29  Ettore Perazzoli  
-
-	* component-factory.c: Replace `global_shell_interface' with
-	`global_shell_client'.
-
-2000-06-29  Jeffrey Stedfast  
-
-	* mail-ops.c (delete_msg): Clean up compile warnings
-	(real_fetch_mail): Fetching from IMAP should do nothing
-
-2000-06-29  Christopher James Lahey  
-
-	* mail-ops.c: Handle multiple deletes (change by Peter Williams.)
-
-2000-06-29  Jeffrey Stedfast  
-
-	* folder-browser-factory.c: Changed "Send" to "Compose" to
-	avoid user confusion. Compose is a little more intuitive.
-	Also changed the pixmap to MAIL_NEW instead of MAIL_SND
-
-	* mail-ops.c (compose_msg): Renamed to avoid confusion
-
-2000-06-29  Dan Winship  
-
-	* component-factory.c (create_imap_storage, create_news_storage):
-	remove some code incorrectly copied and pasted from
-	create_vfolder_storage which caused vfolder creation to stop
-	working.
-
-2000-06-29  Christopher James Lahey  
-
-	* message-list.c, mail-ops.c: Changed the name of
-	e_table_select_row to e_table_set_cursor_row.
-
-2000-06-29  Peter Williams  
-
-	* message-list.c (message_list_init): Set the dnd_code of the
-	ETableHeader to something so that Solaris sprintf doesn't die
-	on a NULL string.
-
-	* mail-config.c (providers_config_new): Check for a null "transport"
-	string (not all OS' handle NULL strings well *cough* Solaris)
-
-2000-06-28  Dan Winship  
-
-	* mail-format.c (mail_generate_forward): add default subjects
-
-	* component-factory.c (create_folder): Refuse to create folders
-	not of type "mail", and correctly create an empty "mbox" folder
-	for new folders in /local.
-
-	* main.c (init_corba): Call od_assert_using_oaf() or
-	od_assert_using_goad() as appropriate to make sure people didn't
-	somehow trick the build system.
-
-2000-06-28  Jeffrey Stedfast  
-
-	* message-list.c: Added prototype for filter_date to make
-	it build cleanly
-
-2000-06-27  Christopher James Lahey  
-
-	* message-list.c: Made dates display grouping information
-	properly.
-
-2000-06-27  Peter Williams  
-
-	* message-list.c (mark_msg_seen): Need to return a value
-	on error.
-
-	* main.c (main): Don't start threads or enter threads if
-	there's no threading! Sigh.
-
-	* test-thread.c: Don't compile if no threads.
-
-	* session.c: Work without broken threads.
-
-	* message-list.c (filter_date): Solve the ctime_r problem the
-	correct way, with the magic of autoconf.
-
-2000-06-27  Christopher James Lahey  
-
-	* message-list.c: Work around mismatched ctime_r functions.  This
-	will be fixed.
-
-2000-06-27  Peter Williams  
-
-	* mail-threads.c: Don't compile this if we don't have
-	threads enabled. This should maybe be on the Makefile.am
-	level.
-
-2000-06-27  Michael Zucchi  
-
-	* component-factory.c (owner_set_cb): Put in a gross hack to
-	export the shell reference elsewhere.
-
-2000-06-26  Christopher James Lahey  
-
-	* message-list.c: Added a value_to_string handler.
-
-2000-06-26  Peter Williams  
-
-	* component-factory.c, mail-ops.c: #ifdef the threads stuff so
-	that if USE_BROKEN_THREADS is not defined we just call the functions
-	in the main thread.
-
-	* mail-threads.h: Don't declare funcs if USE_BROKEN_THREADS not
-	defined.
-
-	* mail-threads.c: Put the query and message boxes on top so that
-	you can see them.
-
-2000-06-26  Jeffrey Stedfast  
-
-	* mail-config.c (error_dialog): va_start() returns void, don't
-	assign it's retval to a variable.
-
-2000-06-26  Ettore Perazzoli  
-
-	* main.c (main): Call `GDK_THREADS_ENTER()' and
-	`GDK_THREADS_LEAVE()' around the main loop as in the examples from
-	the GTK+ FAQ.
-
-	* mail-threads.c (DEBUG): New macro for debugging.
-	(read_msg): Use it.
-
-2000-06-25  Peter Williams  
-
-	* Makefile.am: Clean up the various _LIBS and _CFLAGS
-	to work with simpler THREADS_LIBS and THREADS_CFLAGS scheme.
-
-2000-06-23  Jeffrey Stedfast  
-
-	* folder-browser.c (folder_browser_load_folder): Improved the
-	code to separate the imap namespace from the folder name.
-
-2000-06-23  Peter Williams  
-
-	* component-factory.c: Include e-util/e-setup.h for the
-	prototype of evolution_dir; prototype create_news_storage.
-	(real_create_imap_storage, real_create_news_storage): New
-	functions moving the camel stuff into the async callback.
-	(create_imap_storage, create_news_storage): Chopped in
-	half to move camel stuff as above.
-
-	* mail-ops.c: Include "mail-threads.h" for threading protos.
-	(real_fetch_mail, real_send_mail, real_expunge_folder): 
-	New functions moving the camel stuff into the async callback.
-	(async_mail_exception_dialog): A version of mail_exception_dialog
-	to be called from the async handlers (just calls mail_op_error())
-	(fetch_mail, expunge_folder, composer_send_cb): Cut in half to
-	move camel stuff as above.
-	(cleanup_send_mail): Clean up after the async real_send_mail
-	with the gtk_object_destroys et al.
-
-	* mail-threads.c: Instead of hiding the progress bar, make it
-	zip back and forth constantly.
-	(progress_timeout): New func. Timeout called to make the pbar
-	shimmy.
-	(timeout_toggle): New func. Turn on and off the shimmy effect.
-	(check_cond): New func. Make sure that the GCond for modal
-	operation is initialized before mail_op_{error,get_password}.
-	(show_error_clicked, read_msg, get_password_clicked): Move
-	over to timeout_toggle.
-	(mail_op_error,mail_op_get_password): Add check_cond() call.
-
-	* main.c: (main) Call g_thread_init.
-
-	* session.c: Change auth_callback stuff over to assume that it's
-	being called async. Note: no real good way to tell if this is
-	the case or not.
-	(request_callback): ifdef'ed out
-	(evolution_auth_callback): Use mail_op_get_password.
-	
-2000-06-22  Jeffrey Stedfast  
-
-	* folder-browser.c (folder_browser_load_folder): Now should
-	correctly get the selected folder from the given URL.
-
-2000-06-22  Chris Toshok  
-
-	* folder-browser.c (folder_browser_load_folder): add handling for
-	loading "news:" folders.
-
-	* component-factory.c (create_news_storage): add a root for news
-	source.
-	(owner_set_cb): call create_news_storage.
-
-2000-06-22  Jeffrey Stedfast  
-
-	* folder-browser.c (folder_browser_load_folder): Updated to
-	prepend url-> path if it exists for that imap store.
-
-	* component-factory.c (create_imap_storage): Modified to not
-	prepend a hard-coded namespace.
-
-2000-06-22  Chris Toshok  
-
-	* mail-ops.c (fetch_mail_cleanup): new function, passed as arg to
-	mail_operation_try.
-	(fetch_mail): add cleanup func arg.
-
-2000-06-22  Christopher James Lahey  
-
-	* message-list.c: Changed ml_value_at to return "" instead of NULL
-	in some cases.
-
-2000-06-22  Peter Williams  
-	* Makefile.am: Add GNOME_EXTRA_LIBS so that we get libgthread
-	in our LIBS for evolution-mail.
-	
-	* mail-threads.c: Make the dialog boxes for error and
-	question non-modal. They're modal relative to the dispatch
-	thread, but before they would also eg lock up the toolbar
-	buttons (while the menus, managed by another process, were
-	active -- a weird effect).
-	
-2000-06-22  Peter Williams  
-
-	* mail-threads.[ch]: Extra argument to mail_operation_try:
-	'cleanup', a function to be called in the main thread after
-	the dispatcher thread exits. gtk_object_destroy's et al may
-	attempt to unmap windows so we can't do them in the dispatcher
-	thread :-(
-
-	* test-thread.c: Updated with demo of new argument working.
-
-2000-06-22  Peter Williams  
-
-	* test-thread.c (op_5): New tests for the get_password
-	hook.
-
-	* mail-threads.[ch]: New hook, mail_op_get_password, for
-	getting a user response from an async operation. The operation
-	blocks while waiting for the response. A big whole mutex 
-	condition threading blocking dealie to make sure that it 
-	works.
-
-	Also the error hook creates a dialog again, which also needs
-	to block its caller while we wait for the user to press ok.
-
-2000-06-22  Peter Williams  
-
-	* mail-threads.c (various functions): Prettify the UI
-	so that the progress bar doesn't become all huge 'n stuff.
-	(mail_operation_try): Now save the operation's description,
-	so that we can display it later as the default message.
-	(read_msg): When the operation starts set the label to its
-	UI-friendly name.
-	(dispatch_func): Free the saved prettyname.
-
-2000-06-21  Christopher James Lahey  
-
-	* message-list.c: Removed an erroneous comment.
-
-2000-06-21  Dan Winship  
-
-	* mail-config.c (create_transport_page): Make this not crash if
-	you don't have a transport configured.
-	
-	* message-list.c: Update received date to work like sent date.
-
-2000-06-21  Peter Williams  
-
-	* mail-thread.{c,h}: New files -- a simple API for executing
-	the major mail ops (fetch_mail etc) asynchronously, allowing
-	the operations to send messages and update a progress bar.
-
-	* test-thread.{c,h}: Tests the mail-thread API.
-
-	* Makefile.am: add mail-thread.[ch] to evolution_mail_SOURCES
-	and declare the test_thread noinst_PROGRAM.
-
-2000-06-21  Peter Williams  
-
-	* mail-format.c (mail_generate_reply): Include "e-setup.h" to
-	get the prototype for evolution_dir.
-
-2000-06-20  Jeffrey Stedfast  
-
-	* component-factory.c (create_imap_storage): Oops. Should
-	have checked for a NULL sources.
-
-2000-06-20  Dan Winship  
-
-	* message-list.c (mark_msg_seen): Quick hack to prevent a NULL
-	pointer dereference. Things need to be cleaned up a bit more here
-	though.
-
-	* mail-sources.c: Oops. This should have been removed a long time
-	ago.
-
-2000-06-20  Jeffrey Stedfast  
-
-	* folder-browser.c (folder_browser_load_folder): Working on getting 
-	this to work :)
-
-	* component-factory.c (create_imap_storage): Should now correctly
-	construct the folder path allowing the selection of a folder.
-
-2000-06-20  Ettore Perazzoli  
-
-	* mail-format.c (mail_generate_reply): Declare `evolution_dir'.
-	Ugly, ugly, ugly, but I am not sure where it should go instead.
-
-2000-06-19  Ettore Perazzoli  
-
-	* mail-ops.c (ask_confirm_for_empty_subject): New function to ask
-	confirmation for an empty subject line.
-	(composer_send_cb): Use it if the subject is empty and only send
-	the message if the user confirms.
-
-2000-06-20  Jeffrey Stedfast  
-
-	* component-factory.c (create_imap_storage): Now creates the IMAP
-	storage (listing subfolders and such)
-
-2000-06-19  Dan Winship  
-
-	* mail-format.c (find_preferred_alternative): add an option to
-	prefer text/plain.
-	(reply_body): add an option to prefer text/plain
-	(mail_generate_reply): Check the mail sending preferences, and
-	generate a text/plain reply if the user prefers to send plain text
-	(and we have a text/plain part to generate a reply from).
-
-2000-06-19  Jeffrey Stedfast  
-
-	* mail-config.c (providers_config_new): Should now correctly display
-	the Transport page (made it set the optionmenu correctly, before it
-	would only set SMTP).
-	(create_transport_page): Updated to set the page info to sendmail/smtp
-	based on the url.
-	(create_service_page): Had to add some code to set data on some objects
-	so I could grab the objects I needed to modify in the above function.
-
-2000-06-18  Jeffrey Stedfast  
-
-	* folder-browser.c (folder_browser_load_folder): started to add
-	code to load an IMAP folder.
-	
-	* component-factory.c: Started to add a create_imap_storage 
-	method so that we can eventually have our IMAP store displayed 
-	in the tree view.
-	(create_vfolder_storage): Renamed from
-	create_test_storage().
-	(owner_set_cb): Updated.
-
-2000-06-17  Dan Winship  
-
-	* message-list.c (message_list_set_folder): Prevent double-freeing
-	action on summary_table and uid_rowmap.
-
-2000-06-16  Dan Winship  
-
-	* message-list.c (ml_set_value_at): Implement clicking on the
-	envelope icon to set read/unread. Based on a patch by clahey.
-	(select_msg): keep the timeout id for the "seen" flagging in the
-	message_list structure, so ml_set_value_at can clear it so it
-	doesn't re-mark a message seen after you click it unseen.
-
-2000-06-16  Dan Winship  
-
-	* message-list.c (get_message_row): new function to do a uid to
-	row mapping.
-	(mark_msg_seen, select_msg, message_changed,
-	message_list_set_folder): Update for Camel flag changes.
-	(on_cursor_change_cmd): Rename "row_to_select" to "selected_row",
-	and keep a "selected_uid" as well.
-
-	* mail-ops.c (composer_send_cb): Update for Camel flag changes,
-	and fix some memory-handling bugs. (Free the post_send_data when
-	the composer is destroyed, not when the user clicks "send", which
-	could happen never, or more than once.)
-	(delete_msg): Update for Camel flag changes, and fix the "holding
-	down the delete key skips some messages" bug.
-
-2000-06-15  Dan Winship  
-
-	* mail-ops.c (fetch_mail): 
-	* component-factory.c (owner_unset_cb): 
-	* message-list.c (message_list_set_folder): Update for CamelFolder
-	changes.
-
-	* folder-browser.c (folder_browser_clear_search): New function to
-	revert back to non-searching mode.
-
-	* mail-ops.c (fetch_mail): Use folder_browser_clear_search.
-
-	* mail-display.c (on_url_requested): if the document requests an
-	unknown URL, it's not an error; just ignore the URL.
-
-	* mail-ops.c (fetch_mail): If there's no new mail, tell the user.
-
-2000-06-14  Radek Doulik  
-
-	* main.c (main): call gtkhtmllib_init here
-
-2000-06-13  Jeffrey Stedfast  
-
-	* mail-config.c (on_SourceConfigDialogButton_clicked): Make sure source
-	is always pointing to something, so a blank is not written to the config file
-	on close.
-
-2000-06-13  Ettore Perazzoli  
-
-	* Makefile.am (SHELL_OBJS): Removed.
-	(evolution_mail_LDADD): Use `libeshell.a'.  Also use
-	`top_builddir' consistently.
-
-2000-06-12  Jeffrey Stedfast  
-
-	* mail-config.c: Got rid of sources_max_row and identities_max_row
-	as they are not really needed (just use clist->rows)
-	(on_cmdSourcesEdit_clicked): Modified to make 'source'
-	point to the data being edited.
-	(on_cmdSourcesAdd_clicked): Adds a new clist item and selects it so the
-	editor knows where to stick the data when it's done.
-
-2000-06-12  Federico Mena Quintero  
-
-	* message-list.c: Removed the ETableModel thaw handler.
-
-2000-06-12  Dan Winship  
-
-	* folder-browser.c (folder_browser_set_uri): Return the result of
-	folder_browser_load_folder.
-	(get_prop, set_prop, folder_browser_properties_init): Remove. No
-	longer needed.
-
-	* folder-browser-factory.c (folder_browser_factory_new_control):
-	Add a "uri" argument, return NULL if setting it fails.
-	(folder_browser_factory_new_control): Remove property bag stuff.
-	(folder_browser_factory_init, folder_browser_factory): Remove
-	this, since we're using the component factory now.
-
-	* component-factory.c (create_view): Update for
-	folder_browser_factory_new_control change and return NOTFOUND as
-	appropriate.
-
-	* main.c (main): Don't call folder_browser_factory_init.
-
-	* mail-format.c (mail_generate_reply): Fix the subject generation
-	so we don't get "Re:  Re:". This is working around something that
-	may later be declared a misfeature in Camel.
-
-2000-06-10  Ettore Perazzoli  
-
-	* component-factory.c (create_folder): New stub implementation for
-	the folder creation function in the EvolutionShellComponent we
-	expose [it simply returns success all the time].
-	(factory_fn): Pass this function to `evolution_shell_component_new'.
-
-2000-06-09  Dan Winship  
-
-	* folder-browser.c (folder_browser_new): Add a serial number to
-	FolderBrowser.
-
-	* folder-browser-factory.c (control_activate, control_deactivate):
-	Include fb serial number in the name of the Bonobo toolbar to
-	prevent problems with disappearing toolbars. This is a kludge and
-	should go away.
-
-
-	* mail-ops.c (expunge_folder): display error from
-	camel_folder_expunge if there is one.
-
-	* message-list.c (select_row): install an idle function to
-	select the row rather than doing it directly. Ugh. What a
-	kludge, but at least it works now.
-
-	* session.c (evolution_auth_callback): Update for
-	CamelAuthCallback changes. (Uncache passwords when asked to.)
-
-	* mail-ops.c (fetch_mail): close and expunge the source folder
-	after copying it to a local folder.
-
-2000-06-09  Ettore Perazzoli  
-
-	* component-factory.c (create_view): Updated to match the changes
-	to the definition of `EvolutionShellComponentCreateFn'.  If @type
-	is not "mail", return an "unsupported type" error.
-	(factory_fn): Pass NULL for the `remove_folder' and
-	`create_folder' functions.
-
-2000-06-09  Dan Winship  
-
-	* mail-format.c: Redo things a bit so that whitespace-only
-	text parts aren't displayed. (In particular, so that
-	whitespace-only subparts of multipart/mixed aren't displayed as
-	separate (empty) parts.)
-
-2000-06-06  Dan Winship  
-
-	* mail-ops.c (fetch_mail): 
-	* folder-browser.c (folder_browser_load_folder): Update for folder
-	creation/existence changes.
-
-	* message-list.c (message_list_set_folder): Remove the code to
-	create the folder if it doesn't exist, since we don't want to do
-	that.
-
-2000-06-05  Dan Winship  
-
-	* mail-ops.c (composer_send_cb): Leave the composer window around
-	if the message doesn't get sent.
-
-2000-06-05  Matt Loper  
-
-	* folder-browser.c (etable_key): Allow "GDK_KP_Delete", a keypad
-	delete key, to delete a message.
-
-2000-06-05  Dan Winship  
-
-	* session.c (evolution_auth_callback): Remember passwords between
-	calls.
-	(forget_passwords): Callback for "Forget Passwords" menu item.
-
-	* folder-browser-factory.c (control_activate): 
-	(control_deactivate): Add "Forget Passwords" menu item.
-
-	* mail.h, mail-ops.c: fix some function prototypes
-
-	* folder-browser.c (etable_key): Add "Delete" = delete message.
-
-	* mail-format.c (mail_generate_forward): Update for new composer
-	attachment interface.
-
-2000-06-02  Jeffrey Stedfast  
-
-	* mail-config.c (providers_config_new): Added a new notebook
-	page that allowed for mail format (text/plain or 
-	multipart/alternative)
-
-2000-06-02  Dan Winship  
-
-	* message-list.c (filter_date): If the date in the summary is 0,
-	output "?".
-
-	* component-factory.c (create_view): keep a GList of folder
-	browsers created
-	(owner_unset_cb): Go through the list and close each folder before
-	exiting so they sync their summary state, etc to disk.
-
-	* mail-ops.c (fetch_mail): Use camel_service_connect, not
-	connect_with_url, since we already passed the URL into
-	camel_session_get_store.
-
-2000-06-02  Christopher James Lahey  
-
-	* message-list.c: Use camel_folder_free_summary instead of
-	g_ptr_array_free.  Unref the folder when we're done with it.
-
-2000-06-02  Christopher James Lahey  
-
-	* session.c: Revert removal of e_setup_base_dir.
-
-2000-06-02  Dan Winship  
-
-	* folder-browser.c (my_folder_browser_init): Connect to ETable's
-	key_press signal.
-	(etable_key): scroll mail on space/backspace.
-
-2000-06-02  Christopher James Lahey  
-
-	* message-list.c: Made sent column as wide as from column.
-
-2000-06-02  Jeffrey Stedfast  
-
-	* mail-config.c (on_cmdSourcesAdd_clicked): Changed identity_row
-	to source_row as this is a Sources clist we are dealing with and
-	not an identity clist
-	(on_cmdSourcesEdit_clicked): same
-	(on_cmdSourcesDelete_clicked): again, same
-	(on_cmdSourcesEdit_clicked): Source editor now fills in data from
-	the clist
-
-2000-06-01  Dan Winship  
-
-	* message-list.c: Add a date column.	
-	(COL_SENT_WIDTH_MIN): Make this wider.
-	(ml_value_at): return the sent date (as a time_t) for COL_SENT.
-	(Fix COL_TO too while I'm here.) 
-	(ml_duplicate_value, ml_free_value, ml_initialize_value,
-	ml_value_is_empty): COL_SENT is numeric now.
-	(message_list_init_renderers): Create a date renderer (using
-	text_filter to translate the time_t into a string).
-	(message_list_init_header): Use render_date for COL_SENT.
-
-2000-06-01  Christopher James Lahey  
-
-	* session.c: Don't call e_setup_base_dir.
-
-2000-06-01  Dan Winship  
-
-	* mail-format.c (mail_generate_forward): Fix forwarding to work
-	for people other than me. :) [Although apparently it doesn't
-	really.]
-
-	* mail-ops.c (delete_msg): Add a quick hack to move the selection
-	down a row when you delete a message.
-
-	* mail-format.c (handle_message_rfc822): use 
rather - than
to frame the embedded - message. If
 text in the subtable won't fit in the 95% width,
-	GtkHTML will write past the border of the table (and
-	
causes creeping updates so it's not - usable for now). - -2000-06-01 Christopher James Lahey - - * message-list.c (message_list_init): Turn off the grid in our - ETable. - -2000-06-01 Dan Winship - - * mail-format.c (write_headers): Oops. This needs to take a - message argument because we might be writing headers for an - embedded message/rfc822 subpart rather than the root document. - -2000-06-01 Jeffrey Stedfast - - * mail-config.c: Config dialogs are completed. - (service_acceptable): Fixed a segfault caused by duplicate - camel_exception_free() - (providers_config_new): Identity and Source clists are now filled in - when the dialog is created as well as the Transport page - - * folder-browser-factory.c: Renamed Tool/ menu items - Vfolder was changed to Virtual Folder and - Configure Camel Providers was changed to Mail Configuration - -2000-06-01 Ettore Perazzoli - - * Makefile.am (evolution_mail_LDADD): Link with - `libemiscwidgets.a'. - - * mail-display.c (mail_display_new): Use an EScrollFrame instead - of a GtkScrolledWindow. - (mail_display_set_message): Likewise. - - * mail-display.h: Replace the GtkScrolledWindow with an - EScrollFrame. - -2000-06-01 Dan Winship - - * component-factory.c (owner_unset_cb): Quit when the shell exits. - This is a kludge, but a pretty necessary one until the refcounting - bugs that keep the component from exiting properly are fixed. - -2000-05-31 Jeffrey Stedfast - - * mail-config.c: Partially implemented the source - configuration, seems to segfault due to a destroyed - gnome dialog being destroyed again in the method - on_SourceConfigDialogButton_clicked() - -2000-05-31 Dan Winship - - * mail-format.c (free_url, handle_text_enriched, - get_url_for_icon): Fix up memory management of x-evolution-data - URLs so the URLs and/or their data don't get freed while there are - still references to them. - - * message-list.c (message_list_init_header): redo the (unused) - online status column to no longer refer to pixmaps that no longer - exist. - -2000-06-01 Ettore Perazzoli - - * folder-browser-factory.c (control_activate): Put the toolbar - into a frame to make it look like standard GNOME toolbars. Also, - set `GNOME_DOCK_ITEM_BEH_NEVER_VERTICAL' so that it does not do - evil things when its moved to the left or the right of the window. - -2000-05-31 Jeffrey Stedfast - - * mail-config.c: Configuration dialog now allows - adding/editing/deleting of Identities (which leaves - adding/editing/deleting of sources left to implement). - The data is also saved when the dialog is exited via - the OK button. - -2000-05-31 Dan Winship - - * mail-format.c (mail_format_mime_message): Initialize the "urls" - hash table stored on the message and store cid and other URLs - there rather than as object data on the message. - (get_cid): rewrite this a bunch - (handle_text_enriched): move the code from write_iframe_string() - into here, since it's the only place that actually needs it. - (handle_text_html): simplify this a lot. We can use a cid: URL - here rather than x-evolution-data. - (get_url_for_icon): New routine to return URLs for icons, and - cache the results, so we don't have to keep re-reading the icon - files (and so we can't be spoofed into reading non-icon files). - (handle_mystery, handle_audio): use get_url_for_icon. - - * mail-display.c (save_data): move the CamelMimePart filename - extracting code from get_cid to here. - (on_link_clicked, on_object_requested): Update for cid: changes. - (on_url_requested): Kill off the kludgy, exploitable x-gnome-icon - URL schema, update cid and x-evolution-data to match - mail-format.c. - - It should now be easier to implement RFC 2557 (Content-Location, - etc), but that RFC still pretty much sucks. - -2000-05-30 Dan Winship - - * mail-format.c: Redo this back to the old way: a single GtkHTML - with various things inline in it. (Gets rid of flicker, simplifies - some scrolling, selecting, and printing issues.) - (handle_text_enriched, handle_text_html): Use ", xed); - add_url (xed, ba, md); - camel_object_hook_event (CAMEL_OBJECT (md->current_message), - "finalize", free_byte_array, ba); - - return TRUE; -} - -static gboolean -handle_text_html (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - mail_html_write (md->html, md->stream, "\n\n"); - mail_html_write (md->html, md->stream, - "", get_cid (part, md)); - return TRUE; -} - -static gboolean -handle_image (CamelMimePart *part, const char *mime_type, MailDisplay *md) -{ - mail_html_write (md->html, md->stream, "", - get_cid (part, md)); - return TRUE; -} - -static gboolean -handle_multipart_mixed (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *mp; - int i, nparts; - gboolean output = FALSE; - - g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE); - mp = CAMEL_MULTIPART (wrapper); - - nparts = camel_multipart_get_number (mp); - for (i = 0; i < nparts; i++) { - if (i != 0 && output) - mail_html_write (md->html, md->stream, "
\n"); - - part = camel_multipart_get_part (mp, i); - - output = call_handler_function (part, md); - } - - return TRUE; -} - -static gboolean -is_rfc2015 (CamelMimePart *part) -{ - int nparts; - char *text; - CamelDataWrapper *wrapper; - CamelMultipart *mp; - GMimeContentField *type; - - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - mp = CAMEL_MULTIPART (wrapper); - nparts = camel_multipart_get_number (mp); - if (nparts != 2) - return FALSE; - - /* Check for application/pgp-encrypted in the first part. */ - part = camel_multipart_get_part (mp, 0); - type = camel_mime_part_get_content_type (part); - if (!gmime_content_field_is_type (type, "application", "pgp-encrypted")) - return FALSE; - - /* Check version. */ - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - text = get_data_wrapper_text (wrapper); - if (!text || !strstr(text, "Version: 1")) { - g_free(text); - return FALSE; - } - g_free(text); - - /* Check for application/octet-stream in the second part. */ - part = camel_multipart_get_part(mp, 1); - type = camel_mime_part_get_content_type (part); - if (!gmime_content_field_is_type (type, "application", "octet-stream")) - return FALSE; - - return TRUE; -} - -static gboolean -handle_multipart_encrypted (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *mp; - char *ciphertext, *plaintext; - - g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE); - mp = CAMEL_MULTIPART (wrapper); - - /* Currently we only handle RFC2015-style PGP encryption. */ - if (!is_rfc2015 (part)) - return handle_multipart_mixed (part, mime_type, md); - - part = camel_multipart_get_part (mp, 1); - wrapper = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - ciphertext = get_data_wrapper_text (wrapper); - if (!ciphertext) - return FALSE; - - plaintext = decode_pgp (ciphertext, md); - if (plaintext) { - CamelStream *memstream; - - memstream = camel_stream_mem_new_with_buffer (plaintext, - strlen (plaintext)); - part = camel_mime_part_new (); - camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (part), - memstream); - camel_object_unref (CAMEL_OBJECT (memstream)); - - mail_html_write (md->html, md->stream, - "
"); - call_handler_function (part, md); - mail_html_write (md->html, md->stream, "
"); - camel_object_hook_event (CAMEL_OBJECT (md->current_message), - "finalize", destroy_part, part); - g_free (plaintext); - } - - return TRUE; -} - -/* As seen in RFC 2387! */ -static gboolean -handle_multipart_related (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *mp; - CamelMimePart *body_part, *display_part = NULL; - GMimeContentField *content_type; - const char *start; - int i, nparts; - - g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE); - mp = CAMEL_MULTIPART (wrapper); - nparts = camel_multipart_get_number (mp); - - content_type = camel_mime_part_get_content_type (part); - start = gmime_content_field_get_parameter (content_type, "start"); - if (start) { - int len; - - /* The "start" parameter includes <>s, which Content-Id - * does not. - */ - len = strlen (start) - 2; - - for (i = 0; i < nparts; i++) { - const char *cid; - - body_part = camel_multipart_get_part (mp, i); - cid = camel_mime_part_get_content_id (body_part); - - if (!strncmp (cid, start + 1, len) && - strlen (cid) == len) { - display_part = body_part; - break; - } - } - - if (!display_part) { - /* Oops. Hrmph. */ - return handle_multipart_mixed (part, mime_type, md); - } - } else { - /* No start parameter, so it defaults to the first part. */ - display_part = camel_multipart_get_part (mp, 0); - } - - /* Record the Content-IDs of any non-displayed parts. */ - for (i = 0; i < nparts; i++) { - body_part = camel_multipart_get_part (mp, i); - if (body_part == display_part) - continue; - - get_cid (body_part, md); - } - - /* Now, display the displayed part. */ - return call_handler_function (display_part, md); -} - -/* RFC 2046 says "display the last part that you are able to display". */ -static CamelMimePart * -find_preferred_alternative (CamelMultipart *multipart, gboolean want_plain) -{ - int i, nparts; - CamelMimePart *preferred_part = NULL; - gboolean generic; - - nparts = camel_multipart_get_number (multipart); - for (i = 0; i < nparts; i++) { - CamelMimePart *part = camel_multipart_get_part (multipart, i); - char *mime_type = gmime_content_field_get_mime_type ( - camel_mime_part_get_content_type (part)); - - g_strdown (mime_type); - if (want_plain && !strcmp (mime_type, "text/plain")) - return part; - if (lookup_handler (mime_type, &generic) && - (!preferred_part || !generic)) - preferred_part = part; - g_free (mime_type); - } - - return preferred_part; -} - -static gboolean -handle_multipart_alternative (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *multipart; - CamelMimePart *mime_part; - - g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE); - multipart = CAMEL_MULTIPART (wrapper); - - mime_part = find_preferred_alternative (multipart, FALSE); - if (mime_part) - return call_handler_function (mime_part, md); - else - return handle_unknown_type (part, mime_type, md); -} - -/* RFC 1740 */ -static gboolean -handle_multipart_appledouble (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - CamelMultipart *multipart; - - g_return_val_if_fail (CAMEL_IS_MULTIPART (wrapper), FALSE); - multipart = CAMEL_MULTIPART (wrapper); - - /* The first part is application/applefile and is not useful - * to us. The second part _may_ be displayable data. Most - * likely it's application/octet-stream though. - */ - part = camel_multipart_get_part (multipart, 1); - return call_handler_function (part, md); -} - -static void -handle_mystery (CamelMimePart *part, MailDisplay *md, - const char *url, const char *icon_name, const char *id, - const char *action) -{ - const char *info; - char *htmlinfo; - GMimeContentField *content_type; - - mail_html_write (md->html, md->stream, "
"); - - /* Draw the icon, surrounded by an if we have a URL, - * or a plain inactive border if not. - */ - if (url) { - mail_html_write (md->html, md->stream, - "", url); - } else { - mail_html_write (md->html, md->stream, - "
"); - } - mail_html_write (md->html, md->stream, "", - get_url_for_icon (icon_name, md)); - - if (url) - mail_html_write (md->html, md->stream, ""); - else - mail_html_write (md->html, md->stream, "
"); - mail_html_write (md->html, md->stream, "
%s
", id); - - /* Write a description, if we have one. */ - info = camel_mime_part_get_description (part); - if (info) { - htmlinfo = e_text_to_html (info, E_TEXT_TO_HTML_CONVERT_URLS); - mail_html_write (md->html, md->stream, "Description: %s
", - htmlinfo); - g_free (htmlinfo); - } - - /* Write the name, if we have it. */ - content_type = camel_mime_part_get_content_type (part); - info = gmime_content_field_get_parameter (content_type, "name"); - if (!info) - info = camel_mime_part_get_filename (part); - if (info) { - htmlinfo = e_text_to_html (info, 0); - mail_html_write (md->html, md->stream, "Name: %s
", - htmlinfo); - g_free (htmlinfo); - } - - /* Describe the click action, if any. */ - if (action) { - mail_html_write (md->html, md->stream, - "
Click on the icon to %s.", action); - } - - mail_html_write (md->html, md->stream, "
"); -} - -static gboolean -handle_audio (CamelMimePart *part, const char *mime_type, MailDisplay *md) -{ - char *id; - const char *desc; - - desc = gnome_vfs_mime_get_value (mime_type, "description"); - if (desc) - id = g_strdup_printf ("%s data", desc); - else { - id = g_strdup_printf ("Audio data in \"%s\" format.", - mime_type); - } - handle_mystery (part, md, get_cid (part, md), "gnome-audio2.png", - id, "play it"); - g_free (id); - - return TRUE; -} - -static gboolean -handle_message_rfc822 (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - CamelDataWrapper *wrapper = - camel_medium_get_content_object (CAMEL_MEDIUM (part)); - - g_return_val_if_fail (CAMEL_IS_MIME_MESSAGE (wrapper), FALSE); - - mail_html_write (md->html, md->stream, "
"); - mail_format_mime_message (CAMEL_MIME_MESSAGE (wrapper), md); - mail_html_write (md->html, md->stream, "
"); - - return TRUE; -} - -static gboolean -handle_message_external_body (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - GMimeContentField *type; - const char *access_type; - char *url = NULL, *desc = NULL; - - type = camel_mime_part_get_content_type (part); - access_type = gmime_content_field_get_parameter (type, "access-type"); - if (!access_type) - goto fallback; - - if (!g_strcasecmp (access_type, "ftp") || - !g_strcasecmp (access_type, "anon-ftp")) { - const char *name, *site, *dir, *mode, *ftype; - char *path; - - name = gmime_content_field_get_parameter (type, "name"); - site = gmime_content_field_get_parameter (type, "site"); - if (name == NULL || site == NULL) - goto fallback; - dir = gmime_content_field_get_parameter (type, "directory"); - mode = gmime_content_field_get_parameter (type, "mode"); - - /* Generate the path. */ - if (dir) { - const char *p = dir + strlen (dir); - - path = g_strdup_printf ("%s%s%s%s", - *dir == '/' ? "" : "/", - dir, - *p == '/' ? "" : "/", - name); - } else { - path = g_strdup_printf ("%s%s", - *name == '/' ? "" : "/", - name); - } - - if (mode && *mode == 'A') - ftype = ";type=A"; - else if (mode && *mode == 'I') - ftype = ";type=I"; - else - ftype = ""; - - url = g_strdup_printf ("ftp://%s%s%s", site, path, ftype); - g_free (path); - desc = g_strdup_printf ("Pointer to FTP site (%s)", url); - } else if (!g_strcasecmp (access_type, "local-file")) { - const char *name, *site; - - name = gmime_content_field_get_parameter (type, "name"); - if (name == NULL) - goto fallback; - site = gmime_content_field_get_parameter (type, "site"); - - url = g_strdup_printf ("file://%s%s", *name == '/' ? "" : "/", - name); - desc = g_strdup_printf ("Pointer to local file (%s)%s%s%s", - name, site ? " valid at site \"" : "", - site ? site : "", site ? "\"" : ""); - } else if (!g_strcasecmp (access_type, "URL")) { - const char *urlparam; - char *s, *d; - - /* RFC 2017 */ - - urlparam = gmime_content_field_get_parameter (type, "url"); - if (urlparam == NULL) - goto fallback; - - /* For obscure MIMEy reasons, the URL may be split into - * multiple words, and needs to be rejoined. (The URL - * must have any real whitespace %-encoded, so we just - * get rid of all of it. - */ - url = g_strdup (urlparam); - s = d = url; - - while (*s) { - if (!isspace ((unsigned char)*s)) - *d++ = *s; - s++; - } - *d = *s; - - desc = g_strdup_printf ("Pointer to remote data (%s)", url); - } - - fallback: - if (!desc) { - if (access_type) { - desc = g_strdup_printf ("Pointer to unknown external " - "data (\"%s\" type)", - access_type); - } else - desc = g_strdup ("Malformed external-body part."); - } - - handle_mystery (part, md, url, "gnome-globe.png", desc, - url ? "open it in a browser" : NULL); - - g_free (desc); - g_free (url); - return TRUE; -} - -static gboolean -handle_undisplayable (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - const char *desc; - char *id; - - desc = gnome_vfs_mime_get_value (mime_type, "description"); - if (desc) - id = g_strdup (desc); - else - id = g_strdup_printf ("Data of type \"%s\".", mime_type); - handle_mystery (part, md, get_cid (part, md), "gnome-question.png", - id, "save it to disk"); - g_free (id); - - return TRUE; -} - -static gboolean -handle_unknown_type (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - char *type; - - /* Don't give up quite yet. */ - type = mail_identify_mime_part (part); - if (type) { - mime_handler_fn handler_function; - gboolean generic, output; - - handler_function = lookup_handler (type, &generic); - if (handler_function && - handler_function != handle_unknown_type) { - output = (*handler_function) (part, type, md); - g_free (type); - return output; - } - } else - type = g_strdup (mime_type); - - /* OK. Give up. */ - handle_undisplayable (part, type, md); - g_free (type); - - return TRUE; -} - -static gboolean -handle_via_bonobo (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - mail_html_write (md->html, md->stream, - "", - get_cid (part, md), mime_type); - - /* Call handle_undisplayable to output its HTML inside the - * ... . It will only be displayed if the - * object loading fails. - */ - handle_undisplayable (part, mime_type, md); - - mail_html_write (md->html, md->stream, ""); - - return TRUE; -} - -static gboolean -handle_via_external (CamelMimePart *part, const char *mime_type, - MailDisplay *md) -{ - GnomeVFSMimeApplication *app; - const char *desc, *icon; - char *action, *url; - - app = gnome_vfs_mime_get_default_application (mime_type); - g_return_val_if_fail (app != NULL, FALSE); - - desc = gnome_vfs_mime_get_value (mime_type, "description"); - icon = gnome_vfs_mime_get_value (mime_type, "icon-filename"); - if (!icon) - icon = "gnome-unknown.png"; - action = g_strdup_printf ("open the file in %s", app->name); - url = g_strdup_printf ("x-evolution-external:%s", app->command); - handle_mystery (part, md, url, icon, desc, action); - add_url (url, part, md); - - g_free (action); - - return TRUE; -} - -char * -mail_get_message_body (CamelDataWrapper *data, gboolean want_plain, gboolean *is_html) -{ - CamelMultipart *mp; - CamelMimePart *subpart; - int i, nparts; - char *subtext, *old; - const char *boundary, *disp; - char *text = NULL; - GMimeContentField *mime_type; - - /* We only include text, message, and multipart bodies. */ - mime_type = camel_data_wrapper_get_mime_type_field (data); - - /* FIXME: This is wrong. We don't want to include large - * images. But if we don't do it this way, we don't get - * the headers... - */ - if (g_strcasecmp (mime_type->type, "message") == 0) { - *is_html = FALSE; - return get_data_wrapper_text (data); - } - - if (g_strcasecmp (mime_type->type, "text") == 0) { - *is_html = !g_strcasecmp (mime_type->subtype, "html"); - return get_data_wrapper_text (data); - } - - /* If it's not message and it's not text, and it's not - * multipart, we don't want to deal with it. - */ - if (g_strcasecmp (mime_type->type, "multipart") != 0) - return NULL; - - mp = CAMEL_MULTIPART (data); - - if (g_strcasecmp (mime_type->subtype, "alternative") == 0) { - /* Pick our favorite alternative and reply to it. */ - - subpart = find_preferred_alternative (mp, want_plain); - if (!subpart) - return NULL; - - data = camel_medium_get_content_object ( - CAMEL_MEDIUM (subpart)); - return mail_get_message_body (data, want_plain, is_html); - } - - nparts = camel_multipart_get_number (mp); - - /* Otherwise, concatenate all the parts that we can. If we find - * an HTML part in there though, return just that: We don't want - * to deal with merging HTML and non-HTML parts. - */ - boundary = camel_multipart_get_boundary (mp); - for (i = 0; i < nparts; i++) { - subpart = camel_multipart_get_part (mp, i); - - disp = camel_mime_part_get_disposition (subpart); - if (disp && g_strcasecmp (disp, "inline") != 0) - continue; - - data = camel_medium_get_content_object ( - CAMEL_MEDIUM (subpart)); - subtext = mail_get_message_body (data, want_plain, is_html); - if (!subtext) - continue; - if (*is_html) { - g_free (text); - return subtext; - } - - if (text) { - old = text; - text = g_strdup_printf ("%s\n--%s\n%s", text, - boundary, subtext); - g_free (subtext); - g_free (old); - } else - text = subtext; - } - - if (!text) - return NULL; - - return text; -} - -EMsgComposer * -mail_generate_reply (CamelMimeMessage *message, gboolean to_all) -{ - CamelDataWrapper *contents; - char *text, *subject; - EMsgComposer *composer; - gboolean want_plain, is_html; - const char *repl_to, *message_id, *references; - GList *to, *cc; - - want_plain = !mail_config_send_html (); - - contents = camel_medium_get_content_object (CAMEL_MEDIUM (message)); - text = mail_get_message_body (contents, want_plain, &is_html); - - composer = E_MSG_COMPOSER (e_msg_composer_new ()); - - /* Set the quoted reply text. */ - if (text) { - char *repl_text; - - if (is_html) { - repl_text = g_strdup_printf ("
\n%s\n" - "
\n", - text); - } else { - char *s, *d, *quoted_text; - int lines, len; - - /* Count the number of lines in the body. If - * the text ends with a \n, this will be one - * too high, but that's ok. Allocate enough - * space for the text and the "> "s. - */ - for (s = text, lines = 0; s; s = strchr (s + 1, '\n')) - lines++; - quoted_text = g_malloc (strlen (text) + lines * 2); - - s = text; - d = quoted_text; - - /* Copy text to quoted_text line by line, - * prepending "> ". - */ - while (1) { - len = strcspn (s, "\n"); - if (len == 0 && !*s) - break; - sprintf (d, "> %.*s\n", len, s); - s += len; - if (!*s++) - break; - d += len + 3; - } - - /* Now convert that to HTML. */ - repl_text = e_text_to_html (quoted_text, - E_TEXT_TO_HTML_PRE); - g_free (quoted_text); - } - e_msg_composer_set_body_text (composer, repl_text); - g_free (repl_text); - g_free (text); - } - - /* Set the recipients */ - repl_to = camel_mime_message_get_reply_to (message); - if (!repl_to) - repl_to = camel_mime_message_get_from (message); - to = g_list_append (NULL, (gpointer)repl_to); - - if (to_all) { - const CamelInternetAddress *recip; - const char *name, *addr; - char *fulladdr; - int i; - - recip = camel_mime_message_get_recipients (message, - CAMEL_RECIPIENT_TYPE_TO); - i = 0; - cc = NULL; - while (camel_internet_address_get (recip, i++, &name, &addr)) { - if (*name) { - fulladdr = g_strdup_printf ("\"%s\" <%s>", - name, addr); - } else - fulladdr = g_strdup (addr); - cc = g_list_append (cc, fulladdr); - } - - recip = camel_mime_message_get_recipients (message, - CAMEL_RECIPIENT_TYPE_CC); - i = 0; - while (camel_internet_address_get (recip, i++, &name, &addr)) { - if (*name) { - fulladdr = g_strdup_printf ("\"%s\" <%s>", - name, addr); - } else - fulladdr = g_strdup (addr); - cc = g_list_append (cc, fulladdr); - } - } else - cc = NULL; - - /* Set the subject of the new message. */ - subject = (char *)camel_mime_message_get_subject (message); - if (!subject) - subject = g_strdup (""); - else { - if (!g_strncasecmp (subject, "Re: ", 4)) - subject = g_strdup (subject); - else - subject = g_strdup_printf ("Re: %s", subject); - } - - e_msg_composer_set_headers (composer, to, cc, NULL, subject); - g_list_free (to); - g_list_free (cc); - g_free (subject); - - /* Add In-Reply-To and References. */ - message_id = camel_medium_get_header (CAMEL_MEDIUM (message), - "Message-Id"); - references = camel_medium_get_header (CAMEL_MEDIUM (message), - "References"); - if (message_id) { - e_msg_composer_add_header (composer, "In-Reply-To", - message_id); - if (references) { - char *reply_refs; - reply_refs = g_strdup_printf ("%s %s", references, - message_id); - e_msg_composer_add_header (composer, "References", - reply_refs); - g_free (reply_refs); - } - } else if (references) - e_msg_composer_add_header (composer, "References", references); - - return composer; -} diff --git a/mail/mail-identify.c b/mail/mail-identify.c deleted file mode 100644 index e8d82cb8f5..0000000000 --- a/mail/mail-identify.c +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Dan Winship - * - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - * - */ - -#include - -#include -#include - -#include -#include -#include -#include "mail.h" - -/** - * mail_identify_mime_part: - * @part: a CamelMimePart - * - * Try to identify the MIME type of the data in @part (which presumably - * doesn't have a useful Content-Type). - **/ -char * -mail_identify_mime_part (CamelMimePart *part) -{ - GMimeContentField *content_type; - const char *filename, *type; - GnomeVFSMimeSniffBuffer *sniffer; - CamelStream *memstream; - CamelDataWrapper *data; - GByteArray *ba; - - content_type = camel_mime_part_get_content_type (part); - - - /* Try identifying based on name in Content-Type or - * filename in Content-Disposition. - */ - filename = gmime_content_field_get_parameter (content_type, "name"); - if (filename) { - type = gnome_vfs_mime_type_from_name_or_default (filename, - NULL); - if (type) - return g_strdup (type); - } - - filename = camel_mime_part_get_filename (part); - if (filename) { - type = gnome_vfs_mime_type_from_name_or_default (filename, - NULL); - if (type) - return g_strdup (type); - } - - - /* Try file magic. */ - data = camel_medium_get_content_object (CAMEL_MEDIUM (part)); - ba = g_byte_array_new (); - memstream = camel_stream_mem_new_with_byte_array (ba); - camel_data_wrapper_write_to_stream (data, memstream); - if (ba->len) { - sniffer = gnome_vfs_mime_sniff_buffer_new_from_memory ( - ba->data, ba->len); - type = gnome_vfs_get_mime_type_for_buffer (sniffer); - gnome_vfs_mime_sniff_buffer_free (sniffer); - } else - type = NULL; - camel_object_unref (CAMEL_OBJECT (memstream)); - - if (type) - return g_strdup (type); - - - /* Another possibility to try is the x-mac-type / x-mac-creator - * parameter to Content-Type used by some Mac email clients. That - * would require a Mac type to mime type conversion table. - */ - - - /* We give up. */ - return NULL; -} diff --git a/mail/mail-local.c b/mail/mail-local.c deleted file mode 100644 index eb03db0dd4..0000000000 --- a/mail/mail-local.c +++ /dev/null @@ -1,504 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-local.c: Local mailbox support. */ - -/* - * Author: - * Michael Zucchi - * Peter Williams - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - - -/* - code for handling local mail boxes -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - -#include "Evolution.h" -#include "evolution-storage.h" - -#include "evolution-shell-component.h" -#include "folder-browser.h" - -#include "camel/camel.h" - -#include "filter/vfolder-context.h" -#include "filter/vfolder-rule.h" -#include "filter/vfolder-editor.h" - -#include "mail.h" -#include "mail-local.h" -#include "mail-tools.h" -#include "mail-threads.h" - -#define d(x) - -struct _local_meta { - char *path; /* path of metainfo file */ - - char *format; /* format of mailbox */ - char *name; /* name of mbox itself */ -}; - -static struct _local_meta * -load_metainfo(const char *path) -{ - xmlDocPtr doc; - xmlNodePtr node; - struct _local_meta *meta; - - meta = g_malloc0(sizeof(*meta)); - meta->path = g_strdup(path); - - printf("Loading folder metainfo from : %s\n", meta->path); - - doc = xmlParseFile(meta->path); - if (doc == NULL) { - goto dodefault; - } - node = doc->root; - if (strcmp(node->name, "folderinfo")) { - goto dodefault; - } - node = node->childs; - while (node) { - if (!strcmp(node->name, "folder")) { - meta->format = xmlGetProp(node, "type"); - meta->name = xmlGetProp(node, "name"); - } - node = node->next; - } - xmlFreeDoc(doc); - return meta; - -dodefault: - meta->format = g_strdup("mbox"); /* defaults */ - meta->name = g_strdup("mbox"); - if (doc) - xmlFreeDoc(doc); - return meta; -} - -static void -free_metainfo(struct _local_meta *meta) -{ - g_free(meta->path); - g_free(meta->format); - g_free(meta->name); - g_free(meta); -} - -static int -save_metainfo(struct _local_meta *meta) -{ - xmlDocPtr doc; - xmlNodePtr root, node; - int ret; - - printf("Saving folder metainfo to : %s\n", meta->path); - - doc = xmlNewDoc("1.0"); - root = xmlNewDocNode(doc, NULL, "folderinfo", NULL); - xmlDocSetRootElement(doc, root); - - node = xmlNewChild(root, NULL, "folder", NULL); - xmlSetProp(node, "type", meta->format); - xmlSetProp(node, "name", meta->name); - - ret = xmlSaveFile(meta->path, doc); - xmlFreeDoc(doc); - return ret; -} - -/* maps a local uri to the real type */ -char * -mail_local_map_uri(const char *uri) -{ - CamelURL *url; - char *metapath; - char *storename; - struct _local_meta *meta; - CamelException *ex; - - if (strncmp(uri, "file:", 5)) { - g_warning("Trying to map non-local uri: %s", uri); - return g_strdup(uri); - } - - ex = camel_exception_new(); - url = camel_url_new(uri, ex); - if (camel_exception_is_set(ex)) { - camel_exception_free(ex); - return g_strdup(uri); - } - camel_exception_free(ex); - - metapath = g_strdup_printf("%s/local-metadata.xml", url->path); - meta = load_metainfo(metapath); - g_free(metapath); - - /* change file: to format: */ - camel_url_set_protocol(url, meta->format); - storename = camel_url_to_string(url, TRUE); - camel_url_free(url); - - return storename; -} - -CamelFolder * -mail_tool_local_uri_to_folder(const char *uri, CamelException *ex) -{ - CamelURL *url; - char *metapath; - char *storename; - CamelFolder *folder = NULL; - struct _local_meta *meta; - - if (strncmp(uri, "file:", 5)) { - return NULL; - } - - printf("opening local folder %s\n", uri); - - /* get the actual location of the mailbox */ - url = camel_url_new(uri, ex); - if (camel_exception_is_set(ex)) { - return NULL; - } - - metapath = g_strdup_printf("%s/local-metadata.xml", url->path); - meta = load_metainfo(metapath); - g_free(metapath); - - /* change file: to format: */ - camel_url_set_protocol(url, meta->format); - storename = camel_url_to_string(url, TRUE); - - printf("store name is %s\n", storename); - - folder = mail_tool_get_folder_from_urlname (storename, meta->name, FALSE, ex); - camel_url_free(url); - g_free (storename); - free_metainfo(meta); - - return folder; -} - -/* - open new - copy old->new - close old - rename old oldsave - rename new old - open oldsave - delete oldsave - - close old - rename oldtmp - open new - open oldtmp - copy oldtmp new - close oldtmp - close oldnew - -*/ - -static void update_progress(char *fmt, float percent) -{ - if (fmt) - mail_op_set_message ("%s", fmt); - /*mail_op_set_percentage (percent);*/ -} - -/* ******************** */ - -typedef struct reconfigure_folder_input_s { - FolderBrowser *fb; - gchar *newtype; - GtkWidget *frame; - GtkWidget *apply; - GtkWidget *cancel; - GtkOptionMenu *optionlist; -} reconfigure_folder_input_t; - -static gchar *describe_reconfigure_folder (gpointer in_data, gboolean gerund); -static void setup_reconfigure_folder (gpointer in_data, gpointer op_data, CamelException *ex); -static void do_reconfigure_folder (gpointer in_data, gpointer op_data, CamelException *ex); -static void cleanup_reconfigure_folder (gpointer in_data, gpointer op_data, CamelException *ex); - -static gchar * -describe_reconfigure_folder (gpointer in_data, gboolean gerund) -{ - reconfigure_folder_input_t *input = (reconfigure_folder_input_t *) in_data; - - if (gerund) - return g_strdup_printf (_("Changing folder \"%s\" to \"%s\" format"), - input->fb->uri, - input->newtype); - else - return g_strdup_printf (_("Change folder \"%s\" to \"%s\" format"), - input->fb->uri, - input->newtype); -} - -static void -setup_reconfigure_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - reconfigure_folder_input_t *input = (reconfigure_folder_input_t *) in_data; - - if (!IS_FOLDER_BROWSER (input->fb)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "Input has a bad FolderBrowser in reconfigure_folder"); - return; - } - - if (!input->newtype) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No new folder type in reconfigure_folder"); - return; - } - - gtk_object_ref (GTK_OBJECT (input->fb)); -} - -static void -do_reconfigure_folder(gpointer in_data, gpointer op_data, CamelException *ex) -{ - reconfigure_folder_input_t *input = (reconfigure_folder_input_t *) in_data; - - CamelStore *fromstore = NULL, *tostore = NULL; - char *fromurl = NULL, *tourl = NULL; - CamelFolder *fromfolder = NULL, *tofolder = NULL; - - char *metapath; - char *tmpname; - char *uri; - CamelURL *url = NULL; - struct _local_meta *meta; - - printf("reconfiguring folder: %s to type %s\n", input->fb->uri, input->newtype); - - /* get the actual location of the mailbox */ - url = camel_url_new(input->fb->uri, ex); - if (camel_exception_is_set(ex)) { - g_warning("%s is not a workable url!", input->fb->uri); - goto cleanup; - } - - metapath = g_strdup_printf("%s/local-metadata.xml", url->path); - meta = load_metainfo(metapath); - g_free(metapath); - - /* first, 'close' the old folder */ - if (input->fb->folder != NULL) { - update_progress("Closing current folder", 0.0); - - mail_tool_camel_lock_up (); - camel_folder_sync(input->fb->folder, FALSE, ex); - mail_tool_camel_lock_down (); - camel_object_unref (CAMEL_OBJECT (input->fb->folder)); - input->fb->folder = NULL; - } - - camel_url_set_protocol(url, meta->format); - fromurl = camel_url_to_string(url, TRUE); - camel_url_set_protocol(url, input->newtype); - tourl = camel_url_to_string(url, TRUE); - - printf("opening stores %s and %s\n", fromurl, tourl); - - mail_tool_camel_lock_up (); - fromstore = camel_session_get_store(session, fromurl, ex); - mail_tool_camel_lock_down (); - - if (camel_exception_is_set(ex)) - goto cleanup; - - mail_tool_camel_lock_up (); - tostore = camel_session_get_store(session, tourl, ex); - mail_tool_camel_lock_down (); - if (camel_exception_is_set(ex)) - goto cleanup; - - /* rename the old mbox and open it again */ - tmpname = g_strdup_printf("%s_reconfig", meta->name); - printf("renaming %s to %s, and opening it\n", meta->name, tmpname); - update_progress("Renaming old folder and opening", 0.0); - - mail_tool_camel_lock_up (); - camel_store_rename_folder(fromstore, meta->name, tmpname, ex); - if (camel_exception_is_set(ex)) { - mail_tool_camel_lock_down (); - goto cleanup; - } - - fromfolder = camel_store_get_folder(fromstore, tmpname, TRUE, ex); - if (fromfolder == NULL || camel_exception_is_set(ex)) { - /* try and recover ... */ - camel_exception_clear (ex); - camel_store_rename_folder(fromstore, tmpname, meta->name, ex); - mail_tool_camel_lock_down (); - goto cleanup; - } - - /* create a new mbox */ - printf("Creating the destination mbox\n"); - update_progress("Creating new folder", 0.0); - - tofolder = camel_store_get_folder(tostore, meta->name, TRUE, ex); - if (tofolder == NULL || camel_exception_is_set(ex)) { - printf("cannot open destination folder\n"); - /* try and recover ... */ - camel_exception_clear (ex); - camel_store_rename_folder(fromstore, tmpname, meta->name, ex); - mail_tool_camel_lock_down (); - goto cleanup; - } - - update_progress("Copying messages", 0.0); - mail_tool_move_folder_contents (fromfolder, tofolder, FALSE, ex); - - printf("delete old mbox ...\n"); - camel_store_delete_folder(fromstore, tmpname, ex); - mail_tool_camel_lock_down (); - - /* switch format */ - g_free(meta->format); - meta->format = g_strdup(input->newtype); - if (save_metainfo(meta) == -1) { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, "Cannot save folder metainfo; " - "you'll probably find you can't\n" - "open this folder anymore: %s", tourl); - } - free_metainfo(meta); - - /* force a reload of the newly formatted folder */ - printf("opening new source\n"); - uri = g_strdup(input->fb->uri); - folder_browser_set_uri(input->fb, uri); - g_free(uri); - - /* and unref our copy of the new folder ... */ - cleanup: - if (tofolder) - camel_object_unref (CAMEL_OBJECT (tofolder)); - if (fromfolder) - camel_object_unref (CAMEL_OBJECT (fromfolder)); - if (fromstore) - camel_object_unref (CAMEL_OBJECT (fromstore)); - if (tostore) - camel_object_unref (CAMEL_OBJECT (tostore)); - g_free(fromurl); - g_free(tourl); - if (url) - camel_url_free (url); -} - -static void -cleanup_reconfigure_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - reconfigure_folder_input_t *input = (reconfigure_folder_input_t *) in_data; - - if (camel_exception_is_set(ex)) { - GtkWidget *win = gtk_widget_get_ancestor((GtkWidget *)input->frame, GTK_TYPE_WINDOW); - gnome_error_dialog_parented ("If you can no longer open this mailbox, then\n" - "you may need to repair it manually.", GTK_WINDOW (win)); - } - - gtk_object_unref (GTK_OBJECT (input->fb)); - g_free (input->newtype); -} - -static const mail_operation_spec op_reconfigure_folder = -{ - describe_reconfigure_folder, - 0, - setup_reconfigure_folder, - do_reconfigure_folder, - cleanup_reconfigure_folder -}; - -static void -reconfigure_clicked(GnomeDialog *d, int button, reconfigure_folder_input_t *data) -{ - if (button == 0) { - GtkMenu *menu; - int type; - char *types[] = { "mh", "mbox" }; - - menu = (GtkMenu *)gtk_option_menu_get_menu(data->optionlist); - type = g_list_index(GTK_MENU_SHELL(menu)->children, gtk_menu_get_active(menu)); - if (type < 0 || type > 1) - type = 1; - - gtk_widget_set_sensitive(data->frame, FALSE); - gtk_widget_set_sensitive(data->apply, FALSE); - gtk_widget_set_sensitive(data->cancel, FALSE); - - data->newtype = g_strdup (types[type]); - mail_operation_queue (&op_reconfigure_folder, data, TRUE); - } - - if (button != -1) - gnome_dialog_close(d); -} - -void -local_reconfigure_folder(FolderBrowser *fb) -{ - CamelStore *store; - GladeXML *gui; - GnomeDialog *gd; - reconfigure_folder_input_t *data; - - if (fb->folder == NULL) { - g_warning("Trying to reconfigure nonexistant folder"); - return; - } - - data = g_new (reconfigure_folder_input_t, 1); - - store = camel_folder_get_parent_store(fb->folder); - - gui = glade_xml_new(EVOLUTION_GLADEDIR "/local-config.glade", "dialog_format"); - gd = (GnomeDialog *)glade_xml_get_widget (gui, "dialog_format"); - - data->frame = glade_xml_get_widget (gui, "frame_format"); - data->apply = glade_xml_get_widget (gui, "apply_format"); - data->cancel = glade_xml_get_widget (gui, "cancel_format"); - data->optionlist = (GtkOptionMenu *)glade_xml_get_widget (gui, "option_format"); - data->newtype = NULL; - data->fb = fb; - - gtk_label_set_text((GtkLabel *)glade_xml_get_widget (gui, "label_format"), - ((CamelService *)store)->url->protocol); - - gtk_signal_connect((GtkObject *)gd, "clicked", reconfigure_clicked, data); - gtk_object_unref((GtkObject *)gui); - - GDK_THREADS_ENTER (); - gnome_dialog_run_and_close (GNOME_DIALOG (gd)); - GDK_THREADS_LEAVE (); -} diff --git a/mail/mail-local.h b/mail/mail-local.h deleted file mode 100644 index c5892d29d9..0000000000 --- a/mail/mail-local.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-local.h: Local mailbox support. */ - -/* - * Author: - * Michael Zucchi - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#ifndef _MAIL_LOCAL_H -#define _MAIL_LOCAL_H - -#include "camel/camel-folder.h" -#include "folder-browser.h" - -/* mail-local.c */ -CamelFolder *mail_tool_local_uri_to_folder(const char *uri, CamelException *ex); -void local_reconfigure_folder(FolderBrowser *fb); -char *mail_local_map_uri(const char *uri); - -#endif diff --git a/mail/mail-ops.c b/mail/mail-ops.c deleted file mode 100644 index f90d492dd8..0000000000 --- a/mail/mail-ops.c +++ /dev/null @@ -1,1975 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-ops.c: callbacks for the mail toolbar/menus */ - -/* - * Author : - * Dan Winship - * Peter Williams - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include -#include "mail.h" -#include "mail-threads.h" -#include "mail-tools.h" -#include "mail-ops.h" -#include "composer/e-msg-composer.h" - -/* ** FETCH MAIL ********************************************************** */ - -typedef struct fetch_mail_input_s -{ - gchar *source_url; - gboolean keep_on_server; - CamelFolder *destination; - gpointer hook_func; - gpointer hook_data; -} -fetch_mail_input_t; - -typedef struct fetch_mail_data_s { - gboolean empty; -} fetch_mail_data_t; - -static gchar *describe_fetch_mail (gpointer in_data, gboolean gerund); -static void setup_fetch_mail (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_fetch_mail (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_fetch_mail (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_fetch_mail (gpointer in_data, gboolean gerund) -{ - fetch_mail_input_t *input = (fetch_mail_input_t *) in_data; - CamelStore *source; - char *name; - - source = camel_session_get_store (session, input->source_url, NULL); - if (source) { - name = camel_service_get_name (CAMEL_SERVICE (source), FALSE); - camel_object_unref (CAMEL_OBJECT (source)); - } else - name = input->source_url; - - if (gerund) - return g_strdup_printf (_("Fetching email from %s"), name); - else - return g_strdup_printf (_("Fetch email from %s"), name); -} - -static void -setup_fetch_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - fetch_mail_input_t *input = (fetch_mail_input_t *) in_data; - fetch_mail_data_t *data = (fetch_mail_data_t *) op_data; - - if (!input->source_url) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - _("You have no remote mail source configured " - "to fetch mail from.")); - return; - } - - if (input->destination == NULL) - return; - - if (!CAMEL_IS_FOLDER (input->destination)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - _("Bad folder passed to fetch_mail")); - return; - } - - data->empty = FALSE; - camel_object_ref (CAMEL_OBJECT (input->destination)); -} - -static void -do_fetch_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - fetch_mail_input_t *input = (fetch_mail_input_t *) in_data; - fetch_mail_data_t *data = (fetch_mail_data_t *) op_data; - - CamelFolder *search_folder = NULL; - - /* If using IMAP, don't do anything... */ - - if (!strncmp (input->source_url, "imap:", 5)) { - data->empty = FALSE; - return; - } - - if (input->destination == NULL) { - input->destination = mail_tool_get_local_inbox (ex); - - if (input->destination == NULL) - return; - } - - search_folder = - mail_tool_fetch_mail_into_searchable (input->source_url, - input->keep_on_server, ex); - - if (search_folder == NULL) { - /* This happens with an IMAP source and on error - * and on "no new mail" - */ - camel_object_unref (CAMEL_OBJECT (input->destination)); - input->destination = NULL; - data->empty = TRUE; - return; - } - - mail_tool_camel_lock_up (); - if (camel_folder_get_message_count (search_folder) == 0) { - data->empty = TRUE; - } else { - mail_tool_filter_contents_into (search_folder, input->destination, - TRUE, - input->hook_func, input->hook_data, - ex); - data->empty = FALSE; - } - mail_tool_camel_lock_down (); - - camel_object_unref (CAMEL_OBJECT (search_folder)); -} - -static void -cleanup_fetch_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - fetch_mail_input_t *input = (fetch_mail_input_t *) in_data; - fetch_mail_data_t *data = (fetch_mail_data_t *) op_data; - - if (data->empty && !camel_exception_is_set (ex)) { - GtkWidget *dialog; - - dialog = gnome_ok_dialog (_("There is no new mail.")); - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - } - - g_free (input->source_url); - if (input->destination) - camel_object_unref (CAMEL_OBJECT (input->destination)); -} - -static const mail_operation_spec op_fetch_mail = { - describe_fetch_mail, - sizeof (fetch_mail_data_t), - setup_fetch_mail, - do_fetch_mail, - cleanup_fetch_mail -}; - -void -mail_do_fetch_mail (const gchar *source_url, gboolean keep_on_server, - CamelFolder *destination, - gpointer hook_func, gpointer hook_data) -{ - fetch_mail_input_t *input; - - input = g_new (fetch_mail_input_t, 1); - input->source_url = g_strdup (source_url); - input->keep_on_server = keep_on_server; - input->destination = destination; - input->hook_func = hook_func; - input->hook_data = hook_data; - - mail_operation_queue (&op_fetch_mail, input, TRUE); -} - -/* ** SEND MAIL *********************************************************** */ - -typedef struct send_mail_input_s -{ - gchar *xport_uri; - CamelMimeMessage *message; - gchar *from; - - /* If done_folder != NULL, will add done_flags to - * the flags of the message done_uid in done_folder. */ - - CamelFolder *done_folder; - char *done_uid; - guint32 done_flags; - - GtkWidget *composer; -} -send_mail_input_t; - -static gchar *describe_send_mail (gpointer in_data, gboolean gerund); -static void setup_send_mail (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_send_mail (gpointer in_data, gpointer op_data, - - CamelException *ex); -static void cleanup_send_mail (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_send_mail (gpointer in_data, gboolean gerund) -{ - send_mail_input_t *input = (send_mail_input_t *) in_data; - - if (gerund) { - if (input->message->subject && input->message->subject[0]) - return g_strdup_printf (_("Sending \"%s\""), - input->message->subject); - else - return - g_strdup - (_("Sending a message without a subject")); - } else { - if (input->message->subject && input->message->subject[0]) - return g_strdup_printf (_("Send \"%s\""), - input->message->subject); - else - return g_strdup (_("Send a message without a subject")); - } -} - -static void -setup_send_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - send_mail_input_t *input = (send_mail_input_t *) in_data; - - if (!input->xport_uri) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't really need i18n */ - "No transport URI specified for send_mail operation."); - return; - } - - if (!CAMEL_IS_MIME_MESSAGE (input->message)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No message specified for send_mail operation."); - return; - } - - if (input->from == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No from address specified for send_mail operation."); - return; - } - - /* NOTE THE EARLY EXIT!! */ - - if (input->done_folder == NULL) { - camel_object_ref (CAMEL_OBJECT (input->message)); - gtk_object_ref (GTK_OBJECT (input->composer)); - gtk_widget_hide (GTK_WIDGET (input->composer)); - return; - } - - if (!CAMEL_IS_FOLDER (input->done_folder)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "Bad done_folder specified for send_mail operation."); - return; - } - - if (input->done_uid == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No done_uid specified for send_mail operation."); - return; - } - - if (!GTK_IS_WIDGET (input->composer)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No composer specified for send_mail operation."); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->message)); - camel_object_ref (CAMEL_OBJECT (input->done_folder)); - gtk_object_ref (GTK_OBJECT (input->composer)); - gtk_widget_hide (GTK_WIDGET (input->composer)); -} - -static void -do_send_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - send_mail_input_t *input = (send_mail_input_t *) in_data; - CamelTransport *xport; - - mail_tool_camel_lock_up (); - camel_mime_message_set_from (input->message, input->from); - - camel_medium_add_header (CAMEL_MEDIUM (input->message), "X-Mailer", - "Evolution (Developer Preview)"); - camel_mime_message_set_date (input->message, - CAMEL_MESSAGE_DATE_CURRENT, 0); - - xport = camel_session_get_transport (session, input->xport_uri, ex); - mail_tool_camel_lock_down (); - if (camel_exception_is_set (ex)) - return; - - mail_tool_send_via_transport (xport, CAMEL_MEDIUM (input->message), - ex); - camel_object_unref (CAMEL_OBJECT (xport)); - - if (camel_exception_is_set (ex)) - return; - - if (input->done_folder) { - guint32 set; - - mail_tool_camel_lock_up (); - set = camel_folder_get_message_flags (input->done_folder, - input->done_uid); - camel_folder_set_message_flags (input->done_folder, - input->done_uid, - input->done_flags, ~set); - mail_tool_camel_lock_down (); - } -} - -static void -cleanup_send_mail (gpointer in_data, gpointer op_data, CamelException *ex) -{ - send_mail_input_t *input = (send_mail_input_t *) in_data; - - camel_object_unref (CAMEL_OBJECT (input->message)); - if (input->done_folder) - camel_object_unref (CAMEL_OBJECT (input->done_folder)); - - g_free (input->from); - g_free (input->xport_uri); - g_free (input->done_uid); - - if (!camel_exception_is_set (ex)) - gtk_widget_destroy (input->composer); - else - gtk_widget_show (input->composer); -} - -static const mail_operation_spec op_send_mail = { - describe_send_mail, - 0, - setup_send_mail, - do_send_mail, - cleanup_send_mail -}; - -void -mail_do_send_mail (const char *xport_uri, - CamelMimeMessage *message, - const char *from, - CamelFolder *done_folder, - const char *done_uid, - guint32 done_flags, GtkWidget *composer) -{ - send_mail_input_t *input; - - input = g_new (send_mail_input_t, 1); - input->xport_uri = g_strdup (xport_uri); - input->message = message; - input->from = g_strdup (from); - input->done_folder = done_folder; - input->done_uid = g_strdup (done_uid); - input->done_flags = done_flags; - input->composer = composer; - - mail_operation_queue (&op_send_mail, input, TRUE); -} - -/* ** EXPUNGE FOLDER ****************************************************** */ - -static gchar *describe_expunge_folder (gpointer in_data, gboolean gerund); -static void setup_expunge_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_expunge_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_expunge_folder (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_expunge_folder (gpointer in_data, gboolean gerund) -{ - CamelFolder *f = CAMEL_FOLDER (in_data); - - if (gerund) - return g_strdup_printf (_("Expunging \"%s\""), mail_tool_get_folder_name (f)); - else - return g_strdup_printf (_("Expunge \"%s\""), mail_tool_get_folder_name (f)); -} - -static void -setup_expunge_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - if (!CAMEL_IS_FOLDER (in_data)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No folder is selected to be expunged"); - return; - } - - camel_object_ref (CAMEL_OBJECT (in_data)); -} - -static void -do_expunge_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - mail_tool_camel_lock_up (); - camel_folder_expunge (CAMEL_FOLDER (in_data), ex); - mail_tool_camel_lock_down (); -} - -static void -cleanup_expunge_folder (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - camel_object_unref (CAMEL_OBJECT (in_data)); -} - -static const mail_operation_spec op_expunge_folder = { - describe_expunge_folder, - 0, - setup_expunge_folder, - do_expunge_folder, - cleanup_expunge_folder -}; - -void -mail_do_expunge_folder (CamelFolder *folder) -{ - mail_operation_queue (&op_expunge_folder, folder, FALSE); -} - -/* ** TRANSFER MESSAGES **************************************************** */ - -typedef struct transfer_messages_input_s -{ - CamelFolder *source; - GPtrArray *uids; - gboolean delete_from_source; - gchar *dest_uri; -} -transfer_messages_input_t; - -static gchar *describe_transfer_messages (gpointer in_data, gboolean gerund); -static void setup_transfer_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_transfer_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_transfer_messages (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_transfer_messages (gpointer in_data, gboolean gerund) -{ - transfer_messages_input_t *input = (transfer_messages_input_t *) in_data; - char *format; - - if (gerund) { - if (input->delete_from_source) - format = _("Moving messages from \"%s\" into \"%s\""); - else - format = _("Copying messages from \"%s\" into \"%s\""); - } else { - if (input->delete_from_source) - format = _("Move messages from \"%s\" into \"%s\""); - else - format = _("Copy messages from \"%s\" into \"%s\""); - } - - return g_strdup_printf (format, - mail_tool_get_folder_name (input->source), - input->dest_uri); -} - -static void -setup_transfer_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - transfer_messages_input_t *input = (transfer_messages_input_t *) in_data; - char *verb; - - if (input->delete_from_source) - /* don't need i18n */ - verb = "move"; - else - verb = "copy"; - - if (!CAMEL_IS_FOLDER (input->source)) { - camel_exception_setv (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No source folder to %s messages from specified.", - verb); - return; - } - - if (input->uids == NULL) { - camel_exception_setv (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No messages to %s have been specified.", - verb); - return; - } - - if (input->dest_uri == NULL) { - camel_exception_setv (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No URI to %s to has been specified.", - verb); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->source)); -} - -static void -do_transfer_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - transfer_messages_input_t *input = (transfer_messages_input_t *) in_data; - CamelFolder *dest; - gint i; - void (*func) (CamelFolder *, const char *, - CamelFolder *, - CamelException *); - - if (input->delete_from_source) - func = camel_folder_move_message_to; - else - func = camel_folder_copy_message_to; - - dest = mail_tool_uri_to_folder (input->dest_uri, ex); - if (camel_exception_is_set (ex)) - return; - - mail_tool_camel_lock_up (); - camel_folder_freeze (input->source); - camel_folder_freeze (dest); - - for (i = 0; i < input->uids->len; i++) { - (func) (input->source, - input->uids->pdata[i], dest, - ex); - g_free (input->uids->pdata[i]); - if (camel_exception_is_set (ex)) - break; - } - - camel_folder_thaw (input->source); - camel_folder_thaw (dest); - camel_object_unref (CAMEL_OBJECT (dest)); - mail_tool_camel_lock_down (); -} - -static void -cleanup_transfer_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - transfer_messages_input_t *input = (transfer_messages_input_t *) in_data; - - camel_object_unref (CAMEL_OBJECT (input->source)); - g_free (input->dest_uri); - g_ptr_array_free (input->uids, TRUE); -} - -static const mail_operation_spec op_transfer_messages = { - describe_transfer_messages, - 0, - setup_transfer_messages, - do_transfer_messages, - cleanup_transfer_messages -}; - -void -mail_do_transfer_messages (CamelFolder *source, GPtrArray *uids, - gboolean delete_from_source, - gchar *dest_uri) -{ - transfer_messages_input_t *input; - - input = g_new (transfer_messages_input_t, 1); - input->source = source; - input->uids = uids; - input->delete_from_source = delete_from_source; - input->dest_uri = g_strdup (dest_uri); - - mail_operation_queue (&op_transfer_messages, input, TRUE); -} - -/* ** FLAG MESSAGES ******************************************************* */ - -typedef struct flag_messages_input_s -{ - CamelFolder *source; - GPtrArray *uids; - gboolean invert; - guint32 mask; - guint32 set; -} -flag_messages_input_t; - -static gchar *describe_flag_messages (gpointer in_data, gboolean gerund); -static void setup_flag_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_flag_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_flag_messages (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_flag_messages (gpointer in_data, gboolean gerund) -{ - flag_messages_input_t *input = (flag_messages_input_t *) in_data; - - /* FIXME: change based on flags being applied? */ - - if (gerund) - return g_strdup_printf (_("Marking messages in folder \"%s\""), - mail_tool_get_folder_name (input->source)); - else - return g_strdup_printf (_("Mark messages in folder \"%s\""), - mail_tool_get_folder_name (input->source)); -} - -static void -setup_flag_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - flag_messages_input_t *input = (flag_messages_input_t *) in_data; - - if (!CAMEL_IS_FOLDER (input->source)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No source folder to flag messages from specified."); - return; - } - - if (input->uids == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No messages to flag have been specified."); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->source)); -} - -static void -do_flag_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - flag_messages_input_t *input = (flag_messages_input_t *) in_data; - gint i; - - mail_tool_camel_lock_up (); - camel_folder_freeze (input->source); - mail_tool_camel_lock_down (); - - for (i = 0; i < input->uids->len; i++) { - if (input->invert) { - const CamelMessageInfo *info; - - mail_tool_camel_lock_up (); - info = camel_folder_get_message_info (input->source, input->uids->pdata[i]); - camel_folder_set_message_flags (input->source, input->uids->pdata[i], - input->mask, ~info->flags); - mail_tool_camel_lock_down (); - } else { - mail_tool_set_uid_flags (input->source, input->uids->pdata[i], - input->mask, input->set); - } - - g_free (input->uids->pdata[i]); - } - - mail_tool_camel_lock_up (); - camel_folder_thaw (input->source); - mail_tool_camel_lock_down (); -} - -static void -cleanup_flag_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - flag_messages_input_t *input = (flag_messages_input_t *) in_data; - - camel_object_unref (CAMEL_OBJECT (input->source)); - g_ptr_array_free (input->uids, TRUE); -} - -static const mail_operation_spec op_flag_messages = { - describe_flag_messages, - 0, - setup_flag_messages, - do_flag_messages, - cleanup_flag_messages -}; - -void -mail_do_flag_messages (CamelFolder *source, GPtrArray *uids, - gboolean invert, - guint32 mask, guint32 set) -{ - flag_messages_input_t *input; - - input = g_new (flag_messages_input_t, 1); - input->source = source; - input->uids = uids; - input->invert = invert; - input->mask = mask; - input->set = set; - - mail_operation_queue (&op_flag_messages, input, TRUE); -} - -/* ** SCAN SUBFOLDERS ***************************************************** */ - -typedef struct scan_subfolders_input_s -{ - gchar *source_uri; - gboolean add_INBOX; - EvolutionStorage *storage; -} -scan_subfolders_input_t; - -typedef struct scan_subfolders_folderinfo_s -{ - char *path; - char *uri; -} -scan_subfolders_folderinfo_t; - -typedef struct scan_subfolders_op_s -{ - GPtrArray *new_folders; -} -scan_subfolders_op_t; - -static gchar *describe_scan_subfolders (gpointer in_data, gboolean gerund); -static void setup_scan_subfolders (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_scan_subfolders (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_scan_subfolders (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_scan_subfolders (gpointer in_data, gboolean gerund) -{ - scan_subfolders_input_t *input = (scan_subfolders_input_t *) in_data; - - if (gerund) - return g_strdup_printf (_("Scanning folders in \"%s\""), - input->source_uri); - else - return g_strdup_printf (_("Scan folders in \"%s\""), - input->source_uri); -} - -static void -setup_scan_subfolders (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - scan_subfolders_input_t *input = (scan_subfolders_input_t *) in_data; - scan_subfolders_op_t *data = (scan_subfolders_op_t *) op_data; - - if (!input->source_uri) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No source uri to scan subfolders from was provided."); - return; - } - - if (!EVOLUTION_IS_STORAGE (input->storage)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No storage to scan subfolders into was provided."); - return; - } - - gtk_object_ref (GTK_OBJECT (input->storage)); - data->new_folders = g_ptr_array_new (); -} - -static void -do_scan_subfolders (gpointer in_data, gpointer op_data, CamelException *ex) -{ - scan_subfolders_input_t *input = (scan_subfolders_input_t *) in_data; - scan_subfolders_op_t *data = (scan_subfolders_op_t *) op_data; - scan_subfolders_folderinfo_t *info; - GPtrArray *lsub; - CamelFolder *folder; - int i; - char *splice; - - if (input->source_uri[strlen (input->source_uri) - 1] == '/') - splice = ""; - else - splice = "/"; - - folder = mail_tool_get_root_of_store (input->source_uri, ex); - if (camel_exception_is_set (ex)) - return; - - mail_tool_camel_lock_up (); - - lsub = camel_folder_get_subfolder_names (folder); - - mail_tool_camel_lock_down (); - - for (i = 0; i < lsub->len; i++) { - info = g_new (scan_subfolders_folderinfo_t, 1); - info->path = g_strdup_printf ("/%s", (char *) lsub->pdata[i]); - info->uri = g_strdup_printf ("%s%s%s", input->source_uri, splice, - (char *)lsub->pdata[i]); - g_ptr_array_add (data->new_folders, info); - } - - camel_folder_free_subfolder_names (folder, lsub); - - /* FIXME: We intentionally lose a reference to the store here - * for the benefit of the IMAP provider. Undo this when the - * namespace situation is fixed. - */ - camel_object_ref (CAMEL_OBJECT (folder->parent_store)); - camel_object_unref (CAMEL_OBJECT (folder)); -} - -static void -cleanup_scan_subfolders (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - scan_subfolders_input_t *input = (scan_subfolders_input_t *) in_data; - scan_subfolders_op_t *data = (scan_subfolders_op_t *) op_data; - int i; - - for (i = 0; i < data->new_folders->len; i++) { - scan_subfolders_folderinfo_t *info; - - info = data->new_folders->pdata[i]; - evolution_storage_new_folder (input->storage, - info->path, - "mail", - info->uri, _("(No description)")); - g_free (info->path); - g_free (info->uri); - g_free (info); - } - - g_ptr_array_free (data->new_folders, TRUE); - gtk_object_unref (GTK_OBJECT (input->storage)); - g_free (input->source_uri); -} - -static const mail_operation_spec op_scan_subfolders = { - describe_scan_subfolders, - sizeof (scan_subfolders_op_t), - setup_scan_subfolders, - do_scan_subfolders, - cleanup_scan_subfolders -}; - -void -mail_do_scan_subfolders (const gchar *source_uri, EvolutionStorage *storage) -{ - scan_subfolders_input_t *input; - - input = g_new (scan_subfolders_input_t, 1); - input->source_uri = g_strdup (source_uri); - input->storage = storage; - - mail_operation_queue (&op_scan_subfolders, input, TRUE); -} - -/* ** ATTACH MESSAGE ****************************************************** */ - -typedef struct attach_message_input_s -{ - EMsgComposer *composer; - CamelFolder *folder; - gchar *uid; -} -attach_message_input_t; - -typedef struct attach_message_data_s -{ - CamelMimePart *part; -} -attach_message_data_t; - -static gchar *describe_attach_message (gpointer in_data, gboolean gerund); -static void setup_attach_message (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_attach_message (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_attach_message (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_attach_message (gpointer in_data, gboolean gerund) -{ - attach_message_input_t *input = (attach_message_input_t *) in_data; - - if (gerund) - return - g_strdup_printf - (_("Attaching messages from folder \"%s\""), - mail_tool_get_folder_name (input->folder)); - else - return g_strdup_printf (_("Attach messages from \"%s\""), - mail_tool_get_folder_name (input->folder)); -} - -static void -setup_attach_message (gpointer in_data, gpointer op_data, CamelException *ex) -{ - attach_message_input_t *input = (attach_message_input_t *) in_data; - - if (!input->uid) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No UID specified to attach."); - return; - } - - if (!CAMEL_IS_FOLDER (input->folder)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No folder to fetch the message from specified."); - return; - } - - if (!E_IS_MSG_COMPOSER (input->composer)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No message composer from specified."); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->folder)); - gtk_object_ref (GTK_OBJECT (input->composer)); -} - -static void -do_attach_message (gpointer in_data, gpointer op_data, CamelException *ex) -{ - attach_message_input_t *input = (attach_message_input_t *) in_data; - attach_message_data_t *data = (attach_message_data_t *) op_data; - - CamelMimeMessage *message; - CamelMimePart *part; - - mail_tool_camel_lock_up (); - message = camel_folder_get_message (input->folder, input->uid, ex); - if (!message) { - mail_tool_camel_lock_down (); - return; - } - - part = mail_tool_make_message_attachment (message); - camel_object_unref (CAMEL_OBJECT (message)); - mail_tool_camel_lock_down (); - if (!part) - return; - - data->part = part; -} - -static void -cleanup_attach_message (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - attach_message_input_t *input = (attach_message_input_t *) in_data; - attach_message_data_t *data = (attach_message_data_t *) op_data; - - e_msg_composer_attach (input->composer, data->part); - camel_object_unref (CAMEL_OBJECT (data->part)); - camel_object_unref (CAMEL_OBJECT (input->folder)); - gtk_object_unref (GTK_OBJECT (input->composer)); - g_free (input->uid); -} - -static const mail_operation_spec op_attach_message = { - describe_attach_message, - sizeof (attach_message_data_t), - setup_attach_message, - do_attach_message, - cleanup_attach_message -}; - -void -mail_do_attach_message (CamelFolder *folder, const char *uid, - EMsgComposer *composer) -{ - attach_message_input_t *input; - - input = g_new (attach_message_input_t, 1); - input->folder = folder; - input->uid = g_strdup (uid); - input->composer = composer; - - mail_operation_queue (&op_attach_message, input, TRUE); -} - -/* ** FORWARD MESSAGES **************************************************** */ - -typedef struct forward_messages_input_s -{ - CamelMimeMessage *basis; - CamelFolder *source; - GPtrArray *uids; - EMsgComposer *composer; -} -forward_messages_input_t; - -typedef struct forward_messages_data_s -{ - gchar *subject; - GPtrArray *parts; -} -forward_messages_data_t; - -static gchar *describe_forward_messages (gpointer in_data, gboolean gerund); -static void setup_forward_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_forward_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_forward_messages (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_forward_messages (gpointer in_data, gboolean gerund) -{ - forward_messages_input_t *input = (forward_messages_input_t *) in_data; - - if (gerund) { - if (input->basis->subject) - return g_strdup_printf (_("Forwarding messages \"%s\""), - input->basis->subject); - else - return - g_strdup_printf - (_("Forwarding a message without a subject")); - } else { - if (input->basis->subject) - return g_strdup_printf (_("Forward message \"%s\""), - input->basis->subject); - else - return - g_strdup_printf - (_("Forward a message without a subject")); - } -} - -static void -setup_forward_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - forward_messages_input_t *input = (forward_messages_input_t *) in_data; - - if (!input->uids) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No UIDs specified to attach."); - return; - } - - if (!CAMEL_IS_MIME_MESSAGE (input->basis)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No basic message to forward was specified."); - return; - } - - if (!CAMEL_IS_FOLDER (input->source)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No folder to fetch the messages from specified."); - return; - } - - if (!E_IS_MSG_COMPOSER (input->composer)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No message composer from specified."); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->basis)); - camel_object_ref (CAMEL_OBJECT (input->source)); - gtk_object_ref (GTK_OBJECT (input->composer)); -} - -static void -do_forward_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - forward_messages_input_t *input = (forward_messages_input_t *) in_data; - forward_messages_data_t *data = (forward_messages_data_t *) op_data; - - CamelMimeMessage *message; - CamelMimePart *part; - int i; - - data->parts = g_ptr_array_new (); - - mail_tool_camel_lock_up (); - for (i = 0; i < input->uids->len; i++) { - message = - camel_folder_get_message (input->source, - input->uids->pdata[i], ex); - g_free (input->uids->pdata[i]); - if (!message) { - mail_tool_camel_lock_down (); - return; - } - part = mail_tool_make_message_attachment (message); - if (!part) { - camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, - _("Failed to generate mime part from " - "message while generating forwarded message.")); - mail_tool_camel_lock_down (); - return; - } - camel_object_unref (CAMEL_OBJECT (message)); - g_ptr_array_add (data->parts, part); - } - - mail_tool_camel_lock_down (); - - data->subject = mail_tool_generate_forward_subject (input->basis); -} - -static void -cleanup_forward_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - forward_messages_input_t *input = - - (forward_messages_input_t *) in_data; - forward_messages_data_t *data = (forward_messages_data_t *) op_data; - - int i; - - for (i = 0; i < data->parts->len; i++) { - e_msg_composer_attach (input->composer, - data->parts->pdata[i]); - camel_object_unref (CAMEL_OBJECT (data->parts->pdata[i])); - } - camel_object_unref (CAMEL_OBJECT (input->source)); - - e_msg_composer_set_headers (input->composer, NULL, NULL, NULL, - data->subject); - - gtk_object_unref (GTK_OBJECT (input->composer)); - g_free (data->subject); - g_ptr_array_free (data->parts, TRUE); - g_ptr_array_free (input->uids, TRUE); - gtk_widget_show (GTK_WIDGET (input->composer)); -} - -static const mail_operation_spec op_forward_messages = { - describe_forward_messages, - sizeof (forward_messages_data_t), - setup_forward_messages, - do_forward_messages, - cleanup_forward_messages -}; - -void -mail_do_forward_message (CamelMimeMessage *basis, - CamelFolder *source, - GPtrArray *uids, EMsgComposer *composer) -{ - forward_messages_input_t *input; - - input = g_new (forward_messages_input_t, 1); - input->basis = basis; - input->source = source; - input->uids = uids; - input->composer = composer; - - mail_operation_queue (&op_forward_messages, input, TRUE); -} - -/* ** LOAD FOLDER ********************************************************* */ - -typedef struct load_folder_input_s -{ - FolderBrowser *fb; - gchar *url; -} -load_folder_input_t; - -static gchar *describe_load_folder (gpointer in_data, gboolean gerund); -static void setup_load_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_load_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_load_folder (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_load_folder (gpointer in_data, gboolean gerund) -{ - load_folder_input_t *input = (load_folder_input_t *) in_data; - - if (gerund) { - return g_strdup_printf (_("Loading \"%s\""), input->url); - } else { - return g_strdup_printf (_("Load \"%s\""), input->url); - } -} - -static void -setup_load_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - load_folder_input_t *input = (load_folder_input_t *) in_data; - - if (!IS_FOLDER_BROWSER (input->fb)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No folder browser specified to load into."); - return; - } - - if (!input->url) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No URL to load was specified."); - return; - } - - gtk_object_ref (GTK_OBJECT (input->fb)); - - if (input->fb->uri) - g_free (input->fb->uri); - - input->fb->uri = input->url; -} - -static void -do_load_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - load_folder_input_t *input = (load_folder_input_t *) in_data; - - CamelFolder *folder; - - folder = mail_tool_uri_to_folder (input->url, ex); - if (!folder) - return; - - if (input->fb->folder) { - mail_tool_camel_lock_up (); - camel_object_unref (CAMEL_OBJECT (input->fb->folder)); - mail_tool_camel_lock_down (); - } - - input->fb->folder = folder; -} - -static void -cleanup_load_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - load_folder_input_t *input = (load_folder_input_t *) in_data; - - gtk_widget_set_sensitive (GTK_WIDGET (input->fb->search_entry), - camel_folder_has_search_capability (input-> - fb-> - folder)); - gtk_widget_set_sensitive (GTK_WIDGET (input->fb->search_menu), - camel_folder_has_search_capability (input-> - fb-> - folder)); - - message_list_set_folder (input->fb->message_list, input->fb->folder); - - /*g_free (input->url); = fb->uri now */ -} - -static const mail_operation_spec op_load_folder = { - describe_load_folder, - 0, - setup_load_folder, - do_load_folder, - cleanup_load_folder -}; - -void -mail_do_load_folder (FolderBrowser *fb, const char *url) -{ - load_folder_input_t *input; - - input = g_new (load_folder_input_t, 1); - input->fb = fb; - input->url = g_strdup (url); - - mail_operation_queue (&op_load_folder, input, TRUE); -} - -/* ** CREATE FOLDER ******************************************************* */ - -typedef struct create_folder_input_s -{ - Evolution_ShellComponentListener listener; - char *uri; - char *type; -} -create_folder_input_t; - -typedef struct create_folder_data_s -{ - Evolution_ShellComponentListener_Result result; -} -create_folder_data_t; - -static gchar *describe_create_folder (gpointer in_data, gboolean gerund); -static void setup_create_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_create_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_create_folder (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_create_folder (gpointer in_data, gboolean gerund) -{ - create_folder_input_t *input = (create_folder_input_t *) in_data; - - if (gerund) { - return g_strdup_printf (_("Creating \"%s\""), input->uri); - } else { - return g_strdup_printf (_("Create \"%s\""), input->uri); - } -} - -static void -setup_create_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - create_folder_input_t *input = (create_folder_input_t *) in_data; - - if (input->listener == CORBA_OBJECT_NIL) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "Invalid listener passed to create_folder"); - return; - } - - if (input->uri == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "Invalid url passed to create_folder"); - return; - } - - if (input->type == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No type passed to create_folder"); - return; - } -} - -static void -do_create_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - create_folder_input_t *input = (create_folder_input_t *) in_data; - create_folder_data_t *data = (create_folder_data_t *) op_data; - - CamelFolder *folder; - gchar *camel_url; - - if (strcmp (input->type, "mail") != 0) - data->result = - Evolution_ShellComponentListener_UNSUPPORTED_TYPE; - else { - camel_url = g_strdup_printf ("mbox://%s", input->uri); - folder = mail_tool_get_folder_from_urlname (camel_url, - "mbox", TRUE, ex); - g_free (camel_url); - - if (!camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (folder)); - data->result = Evolution_ShellComponentListener_OK; - } else { - data->result = - Evolution_ShellComponentListener_INVALID_URI; - } - } -} - -static void -cleanup_create_folder (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - create_folder_input_t *input = (create_folder_input_t *) in_data; - create_folder_data_t *data = (create_folder_data_t *) op_data; - - CORBA_Environment ev; - - CORBA_exception_init (&ev); - Evolution_ShellComponentListener_report_result (input->listener, - data->result, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, - _("Exception while reporting result to shell " - "component listener.")); - CORBA_Object_release (input->listener, &ev); - - g_free (input->uri); - g_free (input->type); - - CORBA_exception_free (&ev); -} - -static const mail_operation_spec op_create_folder = { - describe_create_folder, - sizeof (create_folder_data_t), - setup_create_folder, - do_create_folder, - cleanup_create_folder -}; - -void -mail_do_create_folder (const Evolution_ShellComponentListener listener, - const char *uri, const char *type) -{ - CORBA_Environment ev; - create_folder_input_t *input; - - CORBA_exception_init (&ev); - - input = g_new (create_folder_input_t, 1); - input->listener = CORBA_Object_duplicate (listener, &ev); - input->uri = g_strdup (uri); - input->type = g_strdup (type); - - CORBA_exception_free (&ev); - - mail_operation_queue (&op_create_folder, input, FALSE); -} - -/* ** SYNC FOLDER ********************************************************* */ - -static gchar *describe_sync_folder (gpointer in_data, gboolean gerund); -static void setup_sync_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_sync_folder (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_sync_folder (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_sync_folder (gpointer in_data, gboolean gerund) -{ - CamelFolder *f = CAMEL_FOLDER (in_data); - - if (gerund) { - return g_strdup_printf (_("Synchronizing \"%s\""), mail_tool_get_folder_name (f)); - } else { - return g_strdup_printf (_("Synchronize \"%s\""), mail_tool_get_folder_name (f)); - } -} - -static void -setup_sync_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - if (!CAMEL_IS_FOLDER (in_data)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No folder is selected to be synced"); - return; - } - - camel_object_ref (CAMEL_OBJECT (in_data)); -} - -static void -do_sync_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - mail_tool_camel_lock_up (); - camel_folder_sync (CAMEL_FOLDER (in_data), FALSE, ex); - mail_tool_camel_lock_down (); -} - -static void -cleanup_sync_folder (gpointer in_data, gpointer op_data, CamelException *ex) -{ - camel_object_unref (CAMEL_OBJECT (in_data)); -} - -static const mail_operation_spec op_sync_folder = { - describe_sync_folder, - 0, - setup_sync_folder, - do_sync_folder, - cleanup_sync_folder -}; - -void -mail_do_sync_folder (CamelFolder *folder) -{ - mail_operation_queue (&op_sync_folder, folder, FALSE); -} - -/* ** DISPLAY MESSAGE ***************************************************** */ - -typedef struct display_message_input_s -{ - MessageList *ml; - gchar *uid; - gint (*timeout) (gpointer); -} -display_message_input_t; - -typedef struct display_message_data_s -{ - CamelMimeMessage *msg; -} -display_message_data_t; - -static gchar *describe_display_message (gpointer in_data, gboolean gerund); -static void setup_display_message (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_display_message (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_display_message (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_display_message (gpointer in_data, gboolean gerund) -{ - display_message_input_t *input = (display_message_input_t *) in_data; - - if (gerund) { - if (input->uid) - return g_strdup_printf (_("Displaying message UID \"%s\""), - input->uid); - else - return g_strdup (_("Clearing message display")); - } else { - if (input->uid) - return g_strdup_printf (_("Display message UID \"%s\""), - input->uid); - else - return g_strdup (_("Clear message display")); - } -} - -static void -setup_display_message (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - display_message_input_t *input = (display_message_input_t *) in_data; - display_message_data_t *data = (display_message_data_t *) op_data; - - if (!IS_MESSAGE_LIST (input->ml)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "Invalid message list passed to display_message"); - return; - } - - if (!input->timeout) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No timeout callback passed to display_message"); - return; - } - - data->msg = NULL; - gtk_object_ref (GTK_OBJECT (input->ml)); -} - -static void -do_display_message (gpointer in_data, gpointer op_data, CamelException *ex) -{ - display_message_input_t *input = (display_message_input_t *) in_data; - display_message_data_t *data = (display_message_data_t *) op_data; - - if (input->uid == NULL) { - data->msg = NULL; - return; - } - - data->msg = camel_folder_get_message (input->ml->folder, - input->uid, ex); -} - -static void -cleanup_display_message (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - display_message_input_t *input = (display_message_input_t *) in_data; - display_message_data_t *data = (display_message_data_t *) op_data; - - MailDisplay *md = input->ml->parent_folder_browser->mail_display; - - if (data->msg == NULL) { - mail_display_set_message (md, NULL); - } else { - gint timeout = mail_config_mark_as_seen_timeout (); - - if (input->ml->seen_id) - gtk_timeout_remove (input->ml->seen_id); - - mail_display_set_message (md, CAMEL_MEDIUM (data->msg)); - camel_object_unref (CAMEL_OBJECT (data->msg)); - - if (timeout > 0) { - input->ml->seen_id = gtk_timeout_add (timeout, - input->timeout, - input->ml); - } else { - input->ml->seen_id = 0; - input->timeout (input->ml); - } - } - - if (input->uid) - g_free (input->uid); - gtk_object_unref (GTK_OBJECT (input->ml)); -} - -static const mail_operation_spec op_display_message = { - describe_display_message, - sizeof (display_message_data_t), - setup_display_message, - do_display_message, - cleanup_display_message -}; - -void -mail_do_display_message (MessageList *ml, const char *uid, - gint (*timeout) (gpointer)) -{ - display_message_input_t *input; - - input = g_new (display_message_input_t, 1); - input->ml = ml; - input->uid = g_strdup (uid); - input->timeout = timeout; - - mail_operation_queue (&op_display_message, input, TRUE); -} - -/* ** EDIT MESSAGES ******************************************************* */ - -typedef struct edit_messages_input_s { - CamelFolder *folder; - GPtrArray *uids; - GtkSignalFunc signal; -} edit_messages_input_t; - -typedef struct edit_messages_data_s { - GPtrArray *messages; -} edit_messages_data_t; - -static gchar *describe_edit_messages (gpointer in_data, gboolean gerund); -static void setup_edit_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_edit_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_edit_messages (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_edit_messages (gpointer in_data, gboolean gerund) -{ - edit_messages_input_t *input = (edit_messages_input_t *) in_data; - - if (gerund) - return g_strdup_printf - (_("Opening messages from folder \"%s\""), - mail_tool_get_folder_name (input->folder)); - else - return g_strdup_printf (_("Open messages from \"%s\""), - mail_tool_get_folder_name (input->folder)); -} - -static void -setup_edit_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - edit_messages_input_t *input = (edit_messages_input_t *) in_data; - - if (!input->uids) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No UIDs specified to edit."); - return; - } - - if (!CAMEL_IS_FOLDER (input->folder)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No folder to fetch the messages from specified."); - return; - } - - camel_object_ref (CAMEL_OBJECT (input->folder)); -} - -static void -do_edit_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - edit_messages_input_t *input = (edit_messages_input_t *) in_data; - edit_messages_data_t *data = (edit_messages_data_t *) op_data; - - int i; - - data->messages = g_ptr_array_new (); - - for (i = 0; i < input->uids->len; i++) { - CamelMimeMessage *message; - - mail_tool_camel_lock_up (); - message = camel_folder_get_message (input->folder, input->uids->pdata[i], ex); - mail_tool_camel_lock_down (); - - if (message) - g_ptr_array_add (data->messages, message); - - g_free (input->uids->pdata[i]); - } -} - -static void -cleanup_edit_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - edit_messages_input_t *input = (edit_messages_input_t *) in_data; - edit_messages_data_t *data = (edit_messages_data_t *) op_data; - - int i; - - for (i = 0; i < data->messages->len; i++) { - GtkWidget *composer; - - composer = e_msg_composer_new_with_message (data->messages->pdata[i]); - - if (input->signal) - gtk_signal_connect (GTK_OBJECT (composer), "send", - input->signal, NULL); - - gtk_widget_show (composer); - - camel_object_unref (CAMEL_OBJECT (data->messages->pdata[i])); - } - - g_ptr_array_free (input->uids, TRUE); - g_ptr_array_free (data->messages, TRUE); - camel_object_unref (CAMEL_OBJECT (input->folder)); - -} - -static const mail_operation_spec op_edit_messages = { - describe_edit_messages, - sizeof (edit_messages_data_t), - setup_edit_messages, - do_edit_messages, - cleanup_edit_messages -}; - -void -mail_do_edit_messages (CamelFolder *folder, GPtrArray *uids, - GtkSignalFunc signal) -{ - edit_messages_input_t *input; - - input = g_new (edit_messages_input_t, 1); - input->folder = folder; - input->uids = uids; - input->signal = signal; - - mail_operation_queue (&op_edit_messages, input, TRUE); -} - -/* ** SETUP DRAFTBOX ****************************************************** */ - -static gchar *describe_setup_draftbox (gpointer in_data, gboolean gerund); -static void noop_setup_draftbox (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_setup_draftbox (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_setup_draftbox (gpointer in_data, gboolean gerund) -{ - if (gerund) - return g_strdup_printf (_("Loading Draftbox")); - else - return g_strdup_printf (_("Load Draftbox")); -} - -static void -noop_setup_draftbox (gpointer in_data, gpointer op_data, CamelException *ex) -{ -} - -static void -do_setup_draftbox (gpointer in_data, gpointer op_data, CamelException *ex) -{ - extern CamelFolder *drafts_folder; - gchar *url; - - url = g_strdup_printf ("mbox://%s/local/Drafts", evolution_dir); - drafts_folder = mail_tool_get_folder_from_urlname (url, "mbox", TRUE, ex); - g_free (url); -} - -/* - *static void - *cleanup_setup_draftbox (gpointer in_data, gpointer op_data, - * CamelException *ex) - *{ - *} - */ - -static const mail_operation_spec op_setup_draftbox = { - describe_setup_draftbox, - 0, - noop_setup_draftbox, - do_setup_draftbox, - noop_setup_draftbox -}; - -void -mail_do_setup_draftbox (void) -{ - mail_operation_queue (&op_setup_draftbox, NULL, FALSE); -} - -/* ** VIEW MESSAGES ******************************************************* */ - -typedef struct view_messages_input_s { - CamelFolder *folder; - GPtrArray *uids; - FolderBrowser *fb; -} view_messages_input_t; - -typedef struct view_messages_data_s { - GPtrArray *messages; -} view_messages_data_t; - -static gchar *describe_view_messages (gpointer in_data, gboolean gerund); -static void setup_view_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void do_view_messages (gpointer in_data, gpointer op_data, - CamelException *ex); -static void cleanup_view_messages (gpointer in_data, gpointer op_data, - CamelException *ex); - -static gchar * -describe_view_messages (gpointer in_data, gboolean gerund) -{ - view_messages_input_t *input = (view_messages_input_t *) in_data; - - if (gerund) - return g_strdup_printf - (_("Viewing messages from folder \"%s\""), - mail_tool_get_folder_name (input->folder)); - else - return g_strdup_printf (_("View messages from \"%s\""), - mail_tool_get_folder_name (input->folder)); -} - -static void -setup_view_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - view_messages_input_t *input = (view_messages_input_t *) in_data; - - if (!input->uids) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - /* doesn't need i18n */ - "No UIDs specified to view."); - return; - } - - if (!CAMEL_IS_FOLDER (input->folder)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No folder to fetch the messages from specified."); - return; - } - - if (!IS_FOLDER_BROWSER (input->fb)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No folder browser was specified."); - return; - } - - - camel_object_ref (CAMEL_OBJECT (input->folder)); - gtk_object_ref (GTK_OBJECT (input->fb)); -} - -static void -do_view_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - view_messages_input_t *input = (view_messages_input_t *) in_data; - view_messages_data_t *data = (view_messages_data_t *) op_data; - - int i; - - data->messages = g_ptr_array_new (); - - for (i = 0; i < input->uids->len; i++) { - CamelMimeMessage *message; - - mail_tool_camel_lock_up (); - message = camel_folder_get_message (input->folder, input->uids->pdata[i], ex); - mail_tool_camel_lock_down (); - - g_ptr_array_add (data->messages, message); - } -} - -static void -cleanup_view_messages (gpointer in_data, gpointer op_data, - CamelException *ex) -{ - view_messages_input_t *input = (view_messages_input_t *) in_data; - view_messages_data_t *data = (view_messages_data_t *) op_data; - - int i; - - for (i = 0; i < data->messages->len; i++) { - CamelMimeMessage *msg; - gchar *uid; - GtkWidget *view; - - if (data->messages->pdata[i] == NULL) - continue; - - msg = data->messages->pdata[i]; - uid = input->uids->pdata[i]; - - view = mail_view_create (input->folder, uid, msg); - gtk_widget_show (view); - - /*Owned by the mail_display now*/ - camel_object_unref (CAMEL_OBJECT (data->messages->pdata[i])); - g_free (uid); - } - - g_ptr_array_free (input->uids, TRUE); - g_ptr_array_free (data->messages, TRUE); - camel_object_unref (CAMEL_OBJECT (input->folder)); - gtk_object_unref (GTK_OBJECT (input->fb)); -} - -static const mail_operation_spec op_view_messages = { - describe_view_messages, - sizeof (view_messages_data_t), - setup_view_messages, - do_view_messages, - cleanup_view_messages -}; - -void -mail_do_view_messages (CamelFolder *folder, GPtrArray *uids, - FolderBrowser *fb) -{ - view_messages_input_t *input; - - input = g_new (view_messages_input_t, 1); - input->folder = folder; - input->uids = uids; - input->fb = fb; - - mail_operation_queue (&op_view_messages, input, TRUE); -} diff --git a/mail/mail-ops.h b/mail/mail-ops.h deleted file mode 100644 index 3566c40116..0000000000 --- a/mail/mail-ops.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Peter Williams - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include "mail-threads.h" -#include "evolution-storage.h" /*EvolutionStorage */ -#include "composer/e-msg-composer.h" /*EMsgComposer */ -#include "message-list.h" /*MessageList */ - -void mail_do_fetch_mail (const gchar *source_url, gboolean keep_on_server, - CamelFolder *destination, - gpointer hook_func, gpointer hook_data); -void mail_do_send_mail (const char *xport_uri, - CamelMimeMessage *message, - const char *from, - CamelFolder *done_folder, - const char *done_uid, - - guint32 done_flags, GtkWidget *composer); -void mail_do_expunge_folder (CamelFolder *folder); -void mail_do_transfer_messages (CamelFolder *source, GPtrArray *uids, - gboolean delete_from_source, - gchar *dest_uri); -void mail_do_flag_messages (CamelFolder *source, GPtrArray *uids, - gboolean invert, - guint32 mask, guint32 set); -void mail_do_scan_subfolders (const gchar *source_uri, EvolutionStorage *storage); -void mail_do_attach_message (CamelFolder *folder, const char *uid, - EMsgComposer *composer); -void mail_do_forward_message (CamelMimeMessage *basis, CamelFolder *source, - GPtrArray *uids, /*array of allocated gchar *, will all be freed */ - EMsgComposer *composer); -void mail_do_load_folder (FolderBrowser *fb, const char *url); -void mail_do_create_folder (const Evolution_ShellComponentListener listener, - const char *uri, const char *type); -void mail_do_sync_folder (CamelFolder *folder); -void mail_do_display_message (MessageList *ml, const char *uid, - gint (*timeout) (gpointer)); -void mail_do_edit_messages (CamelFolder *folder, GPtrArray *uids, - GtkSignalFunc signal); -void mail_do_setup_draftbox (void); -void mail_do_view_messages (CamelFolder *folder, GPtrArray *uids, - FolderBrowser *fb); - -/* This actually lives in message-list.c */ -void mail_do_regenerate_messagelist (MessageList *list, - const gchar *search); diff --git a/mail/mail-threads.c b/mail/mail-threads.c deleted file mode 100644 index 8fe170eea2..0000000000 --- a/mail/mail-threads.c +++ /dev/null @@ -1,1096 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Peter Williams (peterw@helixcode.com) - * - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - * - */ - -#include - -#include -#include - -#include "folder-browser-factory.h" - -#include "camel/camel-object.h" -#include "mail.h" -#include "mail-threads.h" - -#define DEBUG(p) g_print p - -/** - * A function and its userdata - **/ - -typedef struct closure_s -{ - gpointer in_data; - gboolean free_in_data; - gpointer op_data; - const mail_operation_spec *spec; - CamelException *ex; - gchar *infinitive; - gchar *gerund; -} -closure_t; - -/** - * A command issued through the compipe - **/ - -typedef struct com_msg_s -{ - enum com_msg_type_e { - STARTING, - -#if 0 - PERCENTAGE, - HIDE_PBAR, - SHOW_PBAR, -#endif - - MESSAGE, - PASSWORD, - ERROR, - FORWARD_EVENT, - FINISHED - } type; - - gfloat percentage; - gchar *message; - - closure_t *clur; - - /* Password stuff */ - gchar **reply; - gboolean secret; - gboolean *success; - - /* Event stuff */ - CamelObjectEventHookFunc event_hook; - CamelObject *event_obj; - gpointer event_event_data; - gpointer event_user_data; -} -com_msg_t; - -/** - * Stuff needed for blocking - **/ - -typedef struct block_info_s { - GMutex *mutex; - GCond *cond; - gboolean val; -} block_info_t; - -#define BLOCK_INFO_INIT { NULL, NULL, FALSE } - -/** - * @dispatch_thread_started: gboolean that tells us whether - * the dispatch thread has been launched. - **/ - -static gboolean dispatch_thread_started = FALSE; - -/** - * @queue_len : the number of operations pending - * and being executed. - * - * Because camel is not thread-safe we work - * with the restriction that more than one mailbox - * cannot be accessed at once. Thus we cannot - * concurrently check mail and move messages, etc. - **/ - -static gint queue_len = 0; - -/** - * @main_compipe: The pipe through which the dispatcher communicates - * with the main thread for GTK+ calls - * - * @chan_reader: the GIOChannel that reads our pipe - * - * @MAIN_READER: the fd in our main pipe that.... reads! - * @MAIN_WRITER: the fd in our main pipe that.... writes! - */ - -#define MAIN_READER main_compipe[0] -#define MAIN_WRITER main_compipe[1] -#define DISPATCH_READER dispatch_compipe[0] -#define DISPATCH_WRITER dispatch_compipe[1] - -static int main_compipe[2] = { -1, -1 }; -static int dispatch_compipe[2] = { -1, -1 }; - -GIOChannel *chan_reader = NULL; - -/** - * @modal_block: a condition maintained so that the - * calling thread (the dispatch thread) blocks correctly - * until the user has responded to some kind of modal - * dialog boxy thing. - */ - -static block_info_t modal_block = BLOCK_INFO_INIT; - -/** - * @finish_block: A condition so that the dispatch thread - * blocks until the main thread has finished the cleanup. - **/ - -static block_info_t finish_block = BLOCK_INFO_INIT; - -/** - * @current_message: The current message for the status bar. - * @busy_status: Whether we are currently busy doing some async operation, - * for status bar purposes. - */ - -static char *current_message = NULL; -static gboolean busy = FALSE; - -/** - * Static prototypes - **/ - -static void ui_set_busy (void); -static void ui_unset_busy (void); -static void ui_set_message (const char *message); -static void ui_unset_message (void); - -static void block_prepare (block_info_t *info); -static void block_wait (block_info_t *info); -static void block_hold (block_info_t *info); -static void block_release (block_info_t *info); - -static void *dispatch (void * data); -static void check_dispatcher (void); -static void check_compipes (void); -static gboolean read_msg (GIOChannel * source, GIOCondition condition, - gpointer userdata); - -static void show_error (com_msg_t * msg); - -static void get_password (com_msg_t * msg); -static void get_password_cb (gchar * string, gpointer data); - -static void cleanup_op (com_msg_t * msg); - -static closure_t *new_closure (const mail_operation_spec * spec, gpointer input, - gboolean free_in_data); -static void free_closure (closure_t *clur); - -/* Pthread code */ -/* FIXME: support other thread types!!!! */ - -#ifdef G_THREADS_IMPL_POSIX - -#include - -/** - * @dispatch_thread: the pthread_t (when using pthreads, of - * course) representing our dispatcher routine. Never used - * except to make pthread_create happy - **/ - -static pthread_t dispatch_thread; - -/* FIXME: do we need to set any attributes for our thread? - * If so, we need to create a pthread_attr structure and - * fill it in somewhere. But the defaults should be good - * enough. - */ - -#elif defined( G_THREADS_IMPL_SOLARIS ) - -#include - -static thread_t dispatch_thread; - -#else /* no supported thread impl */ -void -f (void) -{ - Error_No_supported_thread_implementation_recognized (); - choke on this; -} -#endif - -/** - * mail_operation_queue: - * @spec: describes the operation to be performed - * @input: input data for the operation. - * - * Runs a mail operation asynchronously. If no other operation is running, - * we start another thread and call the callback in that thread. The function - * can then use the mail_op_ functions to perform limited UI returns, while - * the main UI is completely unlocked. - * - * If an async operation is going on when this function is called again, - * it waits for the currently executing operation to finish, then - * executes the callback function in another thread. - * - * Returns TRUE on success, FALSE on some sort of queueing error. - **/ - -gboolean -mail_operation_queue (const mail_operation_spec * spec, gpointer input, - gboolean free_in_data) -{ - closure_t *clur; - - g_assert (spec); - - clur = new_closure (spec, input, free_in_data); - - if (spec->setup) - (spec->setup) (clur->in_data, clur->op_data, clur->ex); - - if (camel_exception_is_set (clur->ex)) { - if (clur->ex->id != CAMEL_EXCEPTION_USER_CANCEL) { - GtkWidget *err_dialog; - gchar *msg; - - msg = - g_strdup_printf - (_("Error while preparing to %s:\n" "%s"), - clur->infinitive, - camel_exception_get_description (clur->ex)); - err_dialog = gnome_error_dialog (msg); - g_free (msg); - gnome_dialog_set_close (GNOME_DIALOG (err_dialog), - TRUE); - GDK_THREADS_ENTER (); - gnome_dialog_run_and_close (GNOME_DIALOG (err_dialog)); - GDK_THREADS_LEAVE (); - /*gtk_widget_destroy (err_dialog); */ - /*gtk_widget_show (GTK_WIDGET (err_dialog));*/ - - g_warning ("Setup failed for `%s': %s", - clur->infinitive, - camel_exception_get_description (clur-> - ex)); - } - - free_closure (clur); - return FALSE; - } - - if (queue_len == 0) { - check_compipes (); - check_dispatcher (); - } /* else add self to queue */ - - write (DISPATCH_WRITER, clur, sizeof (closure_t)); - /* dispatch allocates a separate buffer - * to hold the closure; it's in the pipe and - * can safely be freed - */ - g_free (clur); - queue_len++; - return TRUE; -} - -#if 0 -/** - * mail_op_set_percentage: - * @percentage: the percentage that will be displayed in the progress bar - * - * Set the percentage of the progress bar for the currently executing operation. - * Threadsafe for, nay, intended to be called by, the dispatching thread. - **/ - -void -mail_op_set_percentage (gfloat percentage) -{ - com_msg_t msg; - - msg.type = PERCENTAGE; - msg.percentage = percentage; - write (MAIN_WRITER, &msg, sizeof (msg)); -} - -/** - * mail_op_hide_progressbar: - * - * Hide the progress bar in the status box - * Threadsafe for, nay, intended to be called by, the dispatching thread. - **/ - -void -mail_op_hide_progressbar (void) -{ - com_msg_t msg; - - msg.type = HIDE_PBAR; - write (MAIN_WRITER, &msg, sizeof (msg)); -} - -/** - * mail_op_show_progressbar: - * - * Show the progress bar in the status box - * Threadsafe for, nay, intended to be called by, the dispatching thread. - **/ - -void -mail_op_show_progressbar (void) -{ - com_msg_t msg; - - msg.type = SHOW_PBAR; - write (MAIN_WRITER, &msg, sizeof (msg)); -} - -#endif - -/** - * mail_op_set_message: - * @fmt: printf-style format string for the message - * @...: arguments to the format string - * - * Set the message displayed above the progress bar for the currently - * executing operation. - * Threadsafe for, nay, intended to be called by, the dispatching thread. - **/ - -void -mail_op_set_message (gchar * fmt, ...) -{ - com_msg_t msg; - va_list val; - - va_start (val, fmt); - msg.type = MESSAGE; - msg.message = g_strdup_vprintf (fmt, val); - va_end (val); - - write (MAIN_WRITER, &msg, sizeof (msg)); -} - -/** - * mail_op_get_password: - * @prompt: the question put to the user - * @secret: whether the dialog box shold print stars when the user types - * @dest: where to store the reply - * - * Asks the user for a password (or string entry in general). Waits for - * the user's response. On success, returns TRUE and @dest contains the - * response. On failure, returns FALSE and @dest contains the error - * message. - **/ - -gboolean -mail_op_get_password (gchar * prompt, gboolean secret, gchar ** dest) -{ - com_msg_t msg; - gboolean result; - - msg.type = PASSWORD; - msg.secret = secret; - msg.message = prompt; - msg.reply = dest; - msg.success = &result; - - (*dest) = NULL; - - block_prepare (&modal_block); - write (MAIN_WRITER, &msg, sizeof (msg)); - block_wait (&modal_block); - - return result; -} - -/** - * mail_op_error: - * @fmt: printf-style format string for the error - * @...: arguments to the format string - * - * Opens an error dialog for the currently executing operation. - * Threadsafe for, nay, intended to be called by, the dispatching thread. - **/ - -void -mail_op_error (gchar * fmt, ...) -{ - com_msg_t msg; - va_list val; - - va_start (val, fmt); - msg.type = ERROR; - msg.message = g_strdup_vprintf (fmt, val); - va_end (val); - - block_prepare (&modal_block); - write (MAIN_WRITER, &msg, sizeof (msg)); - block_wait (&modal_block); -} - -/** - * mail_op_forward_event: - * - * Communicate a camel event over to the main thread. - **/ - -void -mail_op_forward_event (CamelObjectEventHookFunc func, CamelObject *o, - gpointer event_data, gpointer user_data) -{ - com_msg_t msg; - - msg.type = FORWARD_EVENT; - msg.event_hook = func; - msg.event_obj = o; - msg.event_event_data = event_data; - msg.event_user_data = user_data; - write (MAIN_WRITER, &msg, sizeof (msg)); -} -/** - * mail_operation_wait_for_finish: - * - * Waits for the currently executing async operations - * to finish executing - */ - -void -mail_operation_wait_for_finish (void) -{ - while (queue_len) - gtk_main_iteration (); - /* Sigh. Otherwise we deadlock upon exit. */ - GDK_THREADS_LEAVE (); -} - -/** - * mail_operations_are_executing: - * - * Returns TRUE if operations are being executed asynchronously - * when called, FALSE if not. - **/ - -gboolean -mail_operations_are_executing (void) -{ - return (queue_len > 0); -} - -/** - * mail_operations_terminate: - * - * Let the operations finish then terminate the dispatch thread - **/ - -void -mail_operations_terminate (void) -{ - closure_t clur; - - mail_operation_wait_for_finish(); - - memset (&clur, 0, sizeof (closure_t)); - clur.spec = NULL; - - write (DISPATCH_WRITER, &clur, sizeof (closure_t)); - - close (DISPATCH_WRITER); - close (MAIN_READER); -} - -void -mail_operations_get_status (int *busy_return, - const char **message_return) -{ - *busy_return = busy; - *message_return = current_message; -} - -/* ** Static functions **************************************************** */ - -static void check_dispatcher (void) -{ - int res; - - if (dispatch_thread_started) - return; - -#if defined( G_THREADS_IMPL_POSIX ) - res = pthread_create (&dispatch_thread, NULL, - (void *) &dispatch, NULL); -#elif defined( G_THREADS_IMPL_SOLARIS ) - res = thr_create (NULL, 0, (void *) &dispatch, NULL, 0, &dispatch_thread); -#else /* no known impl */ - Error_No_thread_create_implementation (); - choke on this; -#endif - if (res != 0) { - g_warning ("Error launching dispatch thread!"); - /* FIXME: more error handling */ - } else - dispatch_thread_started = TRUE; -} - -/** - * check_compipes: - * - * Check and see if our pipe has been opened and open - * it if necessary. - **/ - -static void -check_compipes (void) -{ - if (MAIN_READER < 0) { - if (pipe (main_compipe) < 0) { - g_warning ("Call to pipe(2) failed!"); - - /* FIXME: better error handling. How do we react? */ - return; - } - - chan_reader = g_io_channel_unix_new (MAIN_READER); - g_io_add_watch (chan_reader, G_IO_IN, read_msg, NULL); - } - - if (DISPATCH_READER < 0) { - if (pipe (dispatch_compipe) < 0) { - g_warning ("Call to pipe(2) failed!"); - - /* FIXME: better error handling. How do we react? */ - return; - } - } -} - -/** - * dispatch: - * @clur: The operation to execute and its parameters - * - * Start a thread that executes the closure and exit - * it when done. - */ - -static void * -dispatch (void *unused) -{ - size_t len; - closure_t *clur; - com_msg_t msg; - - /* Let the compipes be created */ - sleep (1); - - while (1) { - clur = g_new (closure_t, 1); - len = read (DISPATCH_READER, clur, sizeof (closure_t)); - - if (len <= 0) - break; - - if (len != sizeof (closure_t)) { - g_warning ("dispatcher: Didn't read full message!"); - continue; - } - - if (clur->spec == NULL) - break; - - msg.type = STARTING; - msg.message = g_strdup (clur->gerund); - write (MAIN_WRITER, &msg, sizeof (msg)); - - (clur->spec->callback) (clur->in_data, clur->op_data, clur->ex); - - if (camel_exception_is_set (clur->ex)) { - if (clur->ex->id != CAMEL_EXCEPTION_USER_CANCEL) { - g_warning ("Callback failed for `%s': %s", - clur->infinitive, - camel_exception_get_description (clur-> - ex)); - mail_op_error (_("Error while `%s':\n%s"), - clur->gerund, - camel_exception_get_description (clur-> - ex)); - } - } - - msg.type = FINISHED; - msg.clur = clur; - - /* Wait for the cleanup to finish before starting our next op */ - block_prepare (&finish_block); - write (MAIN_WRITER, &msg, sizeof (msg)); - block_wait (&finish_block); - } - - close (DISPATCH_READER); - close (MAIN_WRITER); - -#ifdef G_THREADS_IMPL_POSIX - pthread_exit (0); -#elif defined( G_THREADS_IMPL_SOLARIS ) - thr_exit (NULL); -#else /* no known impl */ - Error_No_thread_exit_implemented (); - choke on this; -#endif - return NULL; - /*NOTREACHED*/ -} - -/** - * read_msg: - * @source: the channel that has data to read - * @condition: the reason we were called - * @userdata: unused - * - * A message has been recieved on our pipe; perform the appropriate - * action. - **/ - -static gboolean -read_msg (GIOChannel * source, GIOCondition condition, gpointer userdata) -{ - com_msg_t *msg; - guint size; - - msg = g_new0 (com_msg_t, 1); - - g_io_channel_read (source, (gchar *) msg, - sizeof (com_msg_t) / sizeof (gchar), &size); - - if (size != sizeof (com_msg_t)) { - g_warning (_("Incomplete message written on pipe!")); - msg->type = ERROR; - msg->message = - g_strdup (_ - ("Error reading commands from dispatching thread.")); - } - - /* This is very important, though I'm not quite sure why - * it is as we are in the main thread right now. - */ - - GDK_THREADS_ENTER (); - - switch (msg->type) { - case STARTING: - DEBUG (("*** Message -- STARTING %s\n", msg->message)); - ui_set_message (msg->message); - ui_set_busy (); - g_free (msg->message); - break; -#if 0 - case PERCENTAGE: - DEBUG (("*** Message -- PERCENTAGE\n")); - g_warning ("PERCENTAGE operation unsupported"); - break; - case HIDE_PBAR: - DEBUG (("*** Message -- HIDE_PBAR\n")); - g_warning ("HIDE_PBAR operation unsupported"); - break; - case SHOW_PBAR: - DEBUG (("*** Message -- SHOW_PBAR\n")); - g_warning ("HIDE_PBAR operation unsupported"); - break; -#endif - - case MESSAGE: - DEBUG (("*** Message -- MESSAGE\n")); - ui_set_message (msg->message); - g_free (msg->message); - break; - - case PASSWORD: - DEBUG (("*** Message -- PASSWORD\n")); - g_assert (msg->reply); - g_assert (msg->success); - get_password (msg); - break; - - case ERROR: - DEBUG (("*** Message -- ERROR\n")); - show_error (msg); - break; - - /* Don't fall through; dispatch_func does the FINISHED - * call for us - */ - - case FORWARD_EVENT: - DEBUG (("*** Message -- FORWARD_EVENT %p\n", msg->event_hook)); - g_assert (msg->event_hook); - (msg->event_hook) (msg->event_obj, msg->event_event_data, msg->event_user_data); - break; - - case FINISHED: - DEBUG (("*** Message -- FINISH %s\n", msg->clur->gerund)); - cleanup_op (msg); - break; - - default: - g_warning (_("Corrupted message from dispatching thread?")); - break; - } - - GDK_THREADS_LEAVE (); - g_free (msg); - return TRUE; -} - -/** - * cleanup_op: - * - * Cleanup after a finished operation - **/ - -static void -cleanup_op (com_msg_t * msg) -{ - block_hold (&finish_block); - - /* Run the cleanup */ - - if (msg->clur->spec->cleanup) - (msg->clur->spec->cleanup) (msg->clur->in_data, - msg->clur->op_data, - msg->clur->ex); - - /* Tell the dispatch thread that it can start - * the next operation */ - - block_release (&finish_block); - - /* Print an exception if the cleanup caused one */ - - if (camel_exception_is_set (msg->clur->ex) && - msg->clur->ex->id != CAMEL_EXCEPTION_USER_CANCEL) { - g_warning ("Error on cleanup of `%s': %s", - msg->clur->infinitive, - camel_exception_get_description (msg->clur->ex)); - } - - free_closure (msg->clur); - queue_len--; - - ui_unset_busy (); - ui_unset_message (); -} - -/** - * show_error: - * - * Show the error dialog and wait for user OK - **/ - -static void -show_error (com_msg_t * msg) -{ - GtkWidget *err_dialog; - - /* Create the dialog */ - - err_dialog = gnome_error_dialog (msg->message); - g_free (msg->message); - - /* Stop the other thread until the user reacts */ - - ui_unset_busy (); - block_hold (&modal_block); - - /* Show the dialog. */ - - /* Do not GDK_THREADS_ENTER; we're inside the read_msg - * handler which takes care of this for us. Oh, if - * only GDK_THREADS_ENTER were recursive... - */ - - /*GDK_THREADS_ENTER ();*/ - gnome_dialog_run_and_close (GNOME_DIALOG (err_dialog)); - /*GDK_THREADS_LEAVE ();*/ - - /* Allow the other thread to proceed */ - - block_release (&modal_block); - ui_set_busy (); -} - -/** - * get_password: - * - * Ask for a password and put the answer in *(msg->reply) - **/ - -static void -get_password (com_msg_t * msg) -{ - GtkWidget *dialog; - int button; - - /* Create the dialog */ - - dialog = gnome_request_dialog (msg->secret, msg->message, NULL, - 0, get_password_cb, msg, NULL); - - /* Stop the other thread */ - - ui_unset_busy (); - block_hold (&modal_block); - - /* Show the dialog (or report an error) */ - - if (dialog == NULL) { - *(msg->success) = FALSE; - *(msg->reply) = g_strdup (_("Could not create dialog box.")); - button = -1; - } else { - *(msg->reply) = NULL; - /*GDK_THREADS_ENTER ();*/ - button = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - /*GDK_THREADS_LEAVE ();*/ - } - - if (button == 1 || *(msg->reply) == NULL) { - *(msg->success) = FALSE; - *(msg->reply) = g_strdup (_("User cancelled query.")); - } else if (button >= 0) { - *(msg->success) = TRUE; - } - - /* Allow the other thread to proceed */ - - block_release (&modal_block); - ui_set_busy (); -} - -static void -get_password_cb (gchar * string, gpointer data) -{ - com_msg_t *msg = (com_msg_t *) data; - - if (string) - *(msg->reply) = g_strdup (string); - else - *(msg->reply) = NULL; -} - -static closure_t * -new_closure (const mail_operation_spec * spec, gpointer input, - gboolean free_in_data) -{ - closure_t *clur; - - clur = g_new0 (closure_t, 1); - clur->spec = spec; - clur->in_data = input; - clur->free_in_data = free_in_data; - clur->ex = camel_exception_new (); - - clur->op_data = g_malloc (spec->datasize); - - camel_exception_init (clur->ex); - - clur->infinitive = (spec->describe) (input, FALSE); - clur->gerund = (spec->describe) (input, TRUE); - - return clur; -} - -static void -free_closure (closure_t *clur) -{ - clur->spec = NULL; - - if (clur->free_in_data) - g_free (clur->in_data); - clur->in_data = NULL; - - g_free (clur->op_data); - clur->op_data = NULL; - - camel_exception_free (clur->ex); - clur->ex = NULL; - - g_free (clur->infinitive); - g_free (clur->gerund); - - g_free (clur); -} - -/* ******************** */ - -/** - * - * Thread A calls block_prepare - * Thread A causes thread B to do something - * Thread A calls block_wait - * Thread A continues when thread B calls block_release - * - * Thread B gets thread A's message - * Thread B calls block_hold - * Thread B does something - * Thread B calls block_release - * - **/ - -static void -block_prepare (block_info_t *info) -{ - if (info->cond == NULL) { - info->cond = g_cond_new (); - info->mutex = g_mutex_new (); - } - - g_mutex_lock (info->mutex); - info->val = FALSE; -} - -static void -block_wait (block_info_t *info) -{ - g_assert (info->cond); - - while (info->val == FALSE) - g_cond_wait (info->cond, info->mutex); - - g_mutex_unlock (info->mutex); -} -static void -block_hold (block_info_t *info) -{ - g_assert (info->cond); - - g_mutex_lock (info->mutex); - info->val = FALSE; -} - -static void -block_release (block_info_t *info) -{ - g_assert (info->cond); - - info->val = TRUE; - g_cond_signal (info->cond); - g_mutex_unlock (info->mutex); -} - -/* ******************** */ - -/* FIXME FIXME FIXME This is a totally evil hack. */ - -static Evolution_ShellView -retrieve_shell_view_interface_from_control (BonoboControl *control) -{ - Bonobo_ControlFrame control_frame; - Evolution_ShellView shell_view_interface; - CORBA_Environment ev; - - control_frame = bonobo_control_get_control_frame (control); - - if (control_frame == NULL) - return CORBA_OBJECT_NIL; - - CORBA_exception_init (&ev); - shell_view_interface = Bonobo_Unknown_query_interface (control_frame, - "IDL:Evolution/ShellView:1.0", - &ev); - CORBA_exception_free (&ev); - - if (shell_view_interface != CORBA_OBJECT_NIL) - gtk_object_set_data (GTK_OBJECT (control), - "mail_threads_shell_view_interface", - shell_view_interface); - else - g_warning ("Control frame doesn't have Evolution/ShellView."); - - return shell_view_interface; -} - -static void -update_active_views (void) -{ - GList *controls; - GList *p; - - controls = folder_browser_factory_get_control_list (); - for (p = controls; p != NULL; p = p->next) { - BonoboControl *control; - Evolution_ShellView shell_view_interface; - CORBA_Environment ev; - - control = BONOBO_CONTROL (p->data); - - shell_view_interface = gtk_object_get_data (GTK_OBJECT (control), "mail_threads_shell_view_interface"); - - if (shell_view_interface == CORBA_OBJECT_NIL) - shell_view_interface = retrieve_shell_view_interface_from_control (control); - - CORBA_exception_init (&ev); - - if (shell_view_interface != CORBA_OBJECT_NIL) { - if (current_message == NULL && ! busy) { - Evolution_ShellView_unset_message (shell_view_interface, &ev); - } else { - if (current_message == NULL) - Evolution_ShellView_set_message (shell_view_interface, - "", - busy, - &ev); - else - Evolution_ShellView_set_message (shell_view_interface, - current_message, - busy, - &ev); - } - } - - CORBA_exception_free (&ev); - } -} - -static void -ui_set_busy (void) -{ - busy = TRUE; - update_active_views (); -} - -static void -ui_unset_busy (void) -{ - busy = FALSE; - update_active_views (); -} - -static void -ui_set_message (const char *message) -{ - g_free (current_message); - current_message = g_strdup (message); - update_active_views (); -} - -static void -ui_unset_message (void) -{ - g_free (current_message); - current_message = NULL; - update_active_views (); -} diff --git a/mail/mail-threads.h b/mail/mail-threads.h deleted file mode 100644 index e27f07d789..0000000000 --- a/mail/mail-threads.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Peter Williams (peterw@helixcode.com) - * - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef _MAIL_THREADS_H_ -#define _MAIL_THREADS_H_ - -#include -#include -#include /*size_t */ - -/* Returns a g_strdup'ed string that describes what's going to happen, - * tersely but specifically. - */ -typedef gchar *(*mail_op_describe_func) (gpointer /*input_data*/, gboolean /*gerund*/); -typedef void (*mail_op_func) (gpointer, gpointer, CamelException *); - -typedef struct _mail_operation_spec -{ - mail_op_describe_func describe; - size_t datasize; - mail_op_func setup; - mail_op_func callback; - mail_op_func cleanup; -} -mail_operation_spec; - -/* Schedule to operation to happen eventually */ - -gboolean mail_operation_queue (const mail_operation_spec * spec, - gpointer input, gboolean free_in_data); - -/* User interface hooks for the other thread */ - -#if 0 -void mail_op_set_percentage (gfloat percentage); -void mail_op_hide_progressbar (void); -void mail_op_show_progressbar (void); -#endif - -void mail_op_set_message (gchar * fmt, ...) G_GNUC_PRINTF (1, 2); -void mail_op_error (gchar * fmt, ...) G_GNUC_PRINTF (1, 2); -gboolean mail_op_get_password (gchar * prompt, gboolean secret, - gchar ** dest); -void mail_op_forward_event (CamelObjectEventHookFunc func, CamelObject *o, - gpointer event_data, gpointer user_data); -/* Wait for the async operations to finish */ -void mail_operation_wait_for_finish (void); -gboolean mail_operations_are_executing (void); -void mail_operations_terminate (void); - -void mail_operations_get_status (int *busy_return, const char **message_return); -void mail_operations_update_status (void); - -#endif /* defined _MAIL_THREADS_H_ */ diff --git a/mail/mail-tools.c b/mail/mail-tools.c deleted file mode 100644 index 2d10411f91..0000000000 --- a/mail/mail-tools.c +++ /dev/null @@ -1,676 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* mail-ops.c: callbacks for the mail toolbar/menus */ - -/* - * Author : - * Dan Winship - * Peter Williams - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include -#include -#include -#include "camel/camel.h" -#include "camel/providers/vee/camel-vee-folder.h" -#include "mail-vfolder.h" -#include "filter/vfolder-rule.h" -#include "filter/vfolder-context.h" -#include "filter/filter-option.h" -#include "filter/filter-input.h" -#include "filter/filter-driver.h" -#include "mail.h" /*session*/ -#include "mail-tools.h" -#include "mail-local.h" - -/* **************************************** */ - -G_LOCK_DEFINE_STATIC (camel); -G_LOCK_DEFINE_STATIC (camel_locklevel); -static GPrivate *camel_locklevel = NULL; - -#define LOCK_VAL (GPOINTER_TO_INT (g_private_get (camel_locklevel))) -#define LOCK_SET(val) g_private_set (camel_locklevel, (GINT_TO_POINTER (val))) - -void mail_tool_camel_lock_up (void) -{ - G_LOCK (camel_locklevel); - - if (camel_locklevel == NULL) - camel_locklevel = g_private_new (GINT_TO_POINTER (0)); - - if (LOCK_VAL == 0) { - G_UNLOCK (camel_locklevel); - G_LOCK (camel); - G_LOCK (camel_locklevel); - } - - LOCK_SET (LOCK_VAL + 1); - - G_UNLOCK (camel_locklevel); -} - -void mail_tool_camel_lock_down (void) -{ - G_LOCK (camel_locklevel); - - if (camel_locklevel == NULL) { - g_warning ("mail_tool_camel_lock_down: lock down before a lock up?"); - camel_locklevel = g_private_new (GINT_TO_POINTER (0)); - return; - } - - LOCK_SET (LOCK_VAL - 1); - - if (LOCK_VAL == 0) - G_UNLOCK (camel); - - G_UNLOCK (camel_locklevel); -} - -/* **************************************** */ - -CamelFolder * -mail_tool_get_folder_from_urlname (const gchar *url, const gchar *name, - gboolean create, CamelException *ex) -{ - CamelStore *store; - CamelFolder *folder; - - mail_tool_camel_lock_up(); - - store = camel_session_get_store (session, url, ex); - if (!store) { - mail_tool_camel_lock_down(); - return NULL; - } - - camel_service_connect (CAMEL_SERVICE (store), ex); - if (camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (store)); - mail_tool_camel_lock_down(); - return NULL; - } - - folder = camel_store_get_folder (store, name, create, ex); - camel_object_unref (CAMEL_OBJECT (store)); - mail_tool_camel_lock_down(); - - return folder; -} - -const gchar * -mail_tool_get_folder_name (CamelFolder *folder) -{ - const char *name = camel_folder_get_full_name (folder); - char *path; - - /* This is a kludge. */ - - if (strcmp (name, "//mbox") && strcmp (name, "//mh")) - return name; - - /* For mbox/mh, return the parent store's final path component. */ - path = CAMEL_SERVICE (folder->parent_store)->url->path; - if (strchr (path, '/')) - return strrchr (path, '/') + 1; - else - return path; -} - -gchar * -mail_tool_get_local_inbox_url (void) -{ - char *uri, *new; - - uri = g_strdup_printf("file://%s/local/Inbox", evolution_dir); - new = mail_local_map_uri(uri); - g_free(uri); - return new; -} - -gchar * -mail_tool_get_local_movemail_url (void) -{ - return g_strdup_printf ("mbox://%s/local/Inbox", evolution_dir); -} - -gchar * -mail_tool_get_local_movemail_path (void) -{ - return g_strdup_printf ("%s/local/Inbox/movemail", evolution_dir); -} - -CamelFolder * -mail_tool_get_local_inbox (CamelException *ex) -{ - gchar *url; - CamelFolder *folder; - - url = mail_tool_get_local_inbox_url(); - folder = mail_tool_get_folder_from_urlname (url, "mbox", TRUE, ex); - g_free (url); - return folder; -} - -CamelFolder * -mail_tool_get_inbox (const gchar *url, CamelException *ex) -{ - /* FIXME: should be smarter? get_default_folder, etc */ - return mail_tool_get_folder_from_urlname (url, "inbox", FALSE, ex); -} - - -CamelFolder * -mail_tool_do_movemail (const gchar *source_url, CamelException *ex) -{ - gchar *dest_url; - gchar *dest_path; - const gchar *source; - CamelFolder *ret; - struct stat sb; -#ifndef MOVEMAIL_PATH - int tmpfd; -#endif - g_return_val_if_fail (strncmp (source_url, "mbox:", 5) == 0, NULL); - - /* Set up our destination. */ - - dest_url = mail_tool_get_local_movemail_url(); - dest_path = mail_tool_get_local_movemail_path(); - - /* Create a new movemail mailbox file of 0 size */ - -#ifndef MOVEMAIL_PATH - tmpfd = open (dest_path, O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); - - if (tmpfd == -1) { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Couldn't create temporary " - "mbox `%s': %s"), dest_path, g_strerror (errno)); - g_free (dest_path); - g_free (dest_url); - return NULL; - } - - close (tmpfd); -#endif - - /* Skip over "mbox:" plus host part (if any) of url. */ - - source = source_url + 5; - if (!strncmp (source, "//", 2)) - source = strchr (source + 2, '/'); - - - /* Movemail from source (source_url) to dest_path */ - - mail_tool_camel_lock_up(); - camel_movemail (source, dest_path, ex); - mail_tool_camel_lock_down(); - - if (stat (dest_path, &sb) < 0 || sb.st_size == 0) { - g_free (dest_path); - g_free (dest_url); - return NULL; - } - - g_free (dest_path); - - if (camel_exception_is_set (ex)) { - g_free (dest_url); - return NULL; - } - - /* Get the CamelFolder for our dest_path. */ - - ret = mail_tool_get_folder_from_urlname (dest_url, "movemail", TRUE, ex); - g_free (dest_url); - return ret; -} - -void -mail_tool_move_folder_contents (CamelFolder *source, CamelFolder *dest, gboolean use_cache, CamelException *ex) -{ - CamelUIDCache *cache; - GPtrArray *uids; - int i; - - mail_tool_camel_lock_up(); - - camel_object_ref (CAMEL_OBJECT (source)); - camel_object_ref (CAMEL_OBJECT (dest)); - - /* Get all uids of source */ - - uids = camel_folder_get_uids (source); - printf ("mail_tool_move_folder: got %d messages in source\n", uids->len); - - /* If we're using the cache, ... use it */ - - if (use_cache) { - GPtrArray *new_uids; - char *url, *p, *filename; - - url = camel_url_to_string ( - CAMEL_SERVICE (source->parent_store)->url, FALSE); - for (p = url; *p; p++) { - if (!isascii ((unsigned char)*p) || - strchr (" /'\"`&();|<>${}!", *p)) - *p = '_'; - } - filename = g_strdup_printf ("%s/config/cache-%s", - evolution_dir, url); - g_free (url); - - cache = camel_uid_cache_new (filename); - - if (cache) { - new_uids = camel_uid_cache_get_new_uids (cache, uids); - camel_folder_free_uids (source, uids); - uids = new_uids; - } else { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Could not read UID " - "cache file \"%s\". You may " - "receive duplicate " - "messages."), filename); - } - - g_free (filename); - } else - cache = NULL; - - printf ("mail_tool_move_folder: %d of those messages are new\n", uids->len); - - /* Copy the messages */ - - for (i = 0; i < uids->len; i++) { - CamelMimeMessage *msg; - const CamelMessageInfo *info; - /* Get the message */ - - msg = camel_folder_get_message (source, uids->pdata[i], ex); - if (camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (msg)); - goto cleanup; - } - - /* Append it to dest */ - - info = camel_folder_get_message_info (source, uids->pdata[i]); - camel_folder_append_message (dest, msg, info, ex); - if (camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (msg)); - goto cleanup; - } - - /* (Maybe) get rid of the message */ - - camel_object_unref (CAMEL_OBJECT (msg)); - if (!use_cache) - camel_folder_delete_message (source, uids->pdata[i]); - } - - /* All done. Sync n' free. */ - - if (cache) { - camel_uid_cache_free_uids (uids); - - if (!camel_exception_is_set (ex)) - camel_uid_cache_save (cache); - camel_uid_cache_destroy (cache); - } else - camel_folder_free_uids (source, uids); - - camel_folder_sync (source, TRUE, ex); - - cleanup: - camel_object_unref (CAMEL_OBJECT (source)); - camel_object_unref (CAMEL_OBJECT (dest)); - mail_tool_camel_lock_down(); -} - -void -mail_tool_set_uid_flags (CamelFolder *folder, const char *uid, guint32 mask, guint32 set) -{ - mail_tool_camel_lock_up(); - camel_folder_set_message_flags (folder, uid, - mask, set); - mail_tool_camel_lock_down(); -} - -gchar * -mail_tool_generate_forward_subject (CamelMimeMessage *msg) -{ - const gchar *from; - const gchar *subject; - gchar *fwd_subj; - - mail_tool_camel_lock_up(); - from = camel_mime_message_get_from (msg); - subject = camel_mime_message_get_subject (msg); - mail_tool_camel_lock_down(); - - if (from) { - if (subject && *subject) { - fwd_subj = g_strdup_printf (_("[%s] %s"), from, subject); - } else { - fwd_subj = g_strdup_printf (_("[%s] (forwarded message)"), - from); - } - } else { - if (subject && *subject) { - if (strncmp (subject, "Fwd: ", 5) == 0) - subject += 4; - fwd_subj = g_strdup_printf ("Fwd: %s", subject); - } else - fwd_subj = g_strdup (_("Fwd: (no subject)")); - } - - return fwd_subj; -} - -void -mail_tool_send_via_transport (CamelTransport *transport, CamelMedium *medium, CamelException *ex) -{ - mail_tool_camel_lock_up(); - - camel_service_connect (CAMEL_SERVICE (transport), ex); - if (camel_exception_is_set (ex)) - goto cleanup; - - camel_transport_send (transport, medium, ex); - - camel_service_disconnect (CAMEL_SERVICE (transport), - camel_exception_is_set (ex) ? NULL : ex); - cleanup: - mail_tool_camel_lock_down(); -} - -CamelMimePart * -mail_tool_make_message_attachment (CamelMimeMessage *message) -{ - CamelMimePart *part; - const char *subject; - gchar *desc; - - mail_tool_camel_lock_up(); - /*camel_object_ref (CAMEL_OBJECT (message));*/ - - subject = camel_mime_message_get_subject (message); - if (subject) - desc = g_strdup_printf (_("Forwarded message - %s"), subject); - else - desc = g_strdup (_("Forwarded message (no subject)")); - - part = camel_mime_part_new (); - camel_mime_part_set_disposition (part, "inline"); - camel_mime_part_set_description (part, desc); - camel_medium_set_content_object (CAMEL_MEDIUM (part), - CAMEL_DATA_WRAPPER (message)); - camel_mime_part_set_content_type (part, "message/rfc822"); - /*camel_object_unref (CAMEL_OBJECT (message));*/ - mail_tool_camel_lock_down(); - return part; -} - -CamelFolder * -mail_tool_fetch_mail_into_searchable (const char *source_url, gboolean keep_on_server, CamelException *ex) -{ - CamelFolder *search_folder = NULL; - CamelFolder *spool_folder = NULL; - - /* If fetching mail from an mbox store, safely copy it to a - * temporary store first. - */ - - if (!strncmp (source_url, "mbox:", 5)) - spool_folder = mail_tool_do_movemail (source_url, ex); - else - spool_folder = mail_tool_get_inbox (source_url, ex); - - /* No new mail */ - if (spool_folder == NULL) - return NULL; - - if (camel_exception_is_set (ex)) - goto cleanup; - - /* can we perform filtering on this source? */ - - if (!(spool_folder->has_summary_capability - && spool_folder->has_search_capability)) { - - /* no :-(. Copy the messages to a local tempbox - * so that the folder browser can search it. */ - gchar *url; - - url = mail_tool_get_local_movemail_url(); - search_folder = mail_tool_get_folder_from_urlname (url, "movemail", TRUE, ex); - g_free (url); - if (camel_exception_is_set (ex)) - goto cleanup; - - mail_tool_move_folder_contents (spool_folder, search_folder, keep_on_server, ex); - if (camel_exception_is_set (ex)) - goto cleanup; - - } else { - /* we can search! don't bother movemailing */ - search_folder = spool_folder; - mail_tool_camel_lock_up(); - camel_object_ref (CAMEL_OBJECT (search_folder)); - mail_tool_camel_lock_down(); - } - - cleanup: - mail_tool_camel_lock_up(); - camel_object_unref (CAMEL_OBJECT (spool_folder)); - mail_tool_camel_lock_down(); - return search_folder; -} - -CamelFolder * -mail_tool_filter_get_folder_func (FilterDriver *d, const char *uri, void *data) -{ - return mail_tool_uri_to_folder_noex (uri); -} - -void -mail_tool_filter_contents_into (CamelFolder *source, CamelFolder *dest, - gboolean delete_source, - gpointer hook_func, gpointer hook_data, - CamelException *ex) -{ - gchar *userrules; - gchar *systemrules; - FilterContext *fc; - FilterDriver *filter; - - userrules = g_strdup_printf ("%s/filters.xml", evolution_dir); - systemrules = g_strdup_printf ("%s/evolution/filtertypes.xml", EVOLUTION_DATADIR); - fc = filter_context_new(); - rule_context_load ((RuleContext *)fc, systemrules, userrules, NULL, NULL); - g_free (userrules); - g_free (systemrules); - - filter = filter_driver_new (fc, mail_tool_filter_get_folder_func, 0); - - if (hook_func) - camel_object_hook_event (CAMEL_OBJECT (dest), "folder_changed", - hook_func, hook_data); - - filter_driver_run (filter, source, dest, FILTER_SOURCE_INCOMING, - TRUE, hook_func, hook_data); - - camel_folder_sync (CAMEL_FOLDER (source), TRUE, ex); - camel_folder_sync (CAMEL_FOLDER (dest), TRUE, ex); - - if (delete_source) { - gchar *path = mail_tool_get_local_movemail_path(); - struct stat sb; - - if (stat (path, &sb) < 0) { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Couldn't stat(2) movemail folder %s"), - path); - g_free (path); - return; - } - - if (sb.st_size == 0) - unlink (path); - - g_free (path); - } -} - -CamelFolder * -mail_tool_get_root_of_store (const char *source_uri, CamelException *ex) -{ - CamelStore *store; - CamelFolder *folder; - - mail_tool_camel_lock_up(); - - store = camel_session_get_store (session, source_uri, ex); - if (!store) { - mail_tool_camel_lock_down(); - return NULL; - } - - camel_service_connect (CAMEL_SERVICE (store), ex); - if (camel_exception_is_set (ex)) { - camel_object_unref (CAMEL_OBJECT (store)); - mail_tool_camel_lock_down(); - return NULL; - } - - folder = camel_store_get_root_folder (store, ex); - camel_object_unref (CAMEL_OBJECT (store)); - mail_tool_camel_lock_down(); - - return folder; -} - -CamelFolder * -mail_tool_uri_to_folder (const char *uri, CamelException *ex) -{ - CamelStore *store = NULL; - CamelFolder *folder = NULL; - - if (!strncmp (uri, "vfolder:", 8)) { - folder = vfolder_uri_to_folder (uri, ex); - } else if (!strncmp (uri, "imap:", 5)) { - char *service, *ptr; - - service = g_strdup_printf ("%s/", uri); - for (ptr = service + 7; *ptr && *ptr != '/'; ptr++); - ptr++; - *ptr = '\0'; - - mail_tool_camel_lock_up (); - store = camel_session_get_store (session, service, ex); - g_free (service); - if (store) { - CamelURL *url = CAMEL_SERVICE (store)->url; - char *folder_uri; - - for (ptr = (char *)(uri + 7); *ptr && *ptr != '/'; ptr++); - if (*ptr == '/') { - if (url && url->path) { - ptr += strlen (url->path); - printf ("ptr = %s\n", ptr); - if (*ptr == '/') - ptr++; - } - - if (*ptr == '/') - ptr++; - /*for ( ; *ptr && *ptr == '/'; ptr++);*/ - - folder_uri = g_strdup (ptr); - folder = camel_store_get_folder (store, folder_uri, TRUE, ex); - g_free (folder_uri); - } - } - - mail_tool_camel_lock_down (); - - } else if (!strncmp (uri, "news:", 5)) { - mail_tool_camel_lock_up(); - store = camel_session_get_store (session, uri, ex); - if (store) { - const char *folder_path; - - folder_path = uri + 5; - folder = camel_store_get_folder (store, folder_path, FALSE, ex); - } - - mail_tool_camel_lock_down(); - - } else if (!strncmp (uri, "file:", 5)) { - folder = mail_tool_local_uri_to_folder (uri, ex); - } else { - camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, - _("Don't know protocol to open URI `%s'"), uri); - } - - if (camel_exception_is_set (ex)) { - if (folder) { - camel_object_unref (CAMEL_OBJECT (folder)); - folder = NULL; - } - } - - if (store) - camel_object_unref (CAMEL_OBJECT (store)); - - return folder; -} - -CamelFolder * -mail_tool_uri_to_folder_noex (const char *uri) -{ - CamelException ex; - CamelFolder *result; - - camel_exception_init (&ex); - result = mail_tool_uri_to_folder (uri, &ex); - - if (camel_exception_is_set (&ex)) { - gchar *msg; - GtkWidget *dialog; - - msg = g_strdup_printf (_("Cannot open location `%s':\n" - "%s"), - uri, - camel_exception_get_description (&ex)); - dialog = gnome_error_dialog (msg); - g_free (msg); - GDK_THREADS_ENTER (); - gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - GDK_THREADS_LEAVE (); - gtk_widget_destroy (dialog); - } - - return result; -} - diff --git a/mail/mail-tools.h b/mail/mail-tools.h deleted file mode 100644 index 3aba7dde2c..0000000000 --- a/mail/mail-tools.h +++ /dev/null @@ -1,115 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Author : - * Peter Williams - * - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#ifndef MAIL_TOOLS_H -#define MAIL_TOOLS_H - -#include -#include /*eek*/ - -/* A global recursive lock on Camel */ -void mail_tool_camel_lock_up (void); -void mail_tool_camel_lock_down (void); - -/* Get a CamelFolder from a root url and a foldername (uses the global session)*/ -CamelFolder * -mail_tool_get_folder_from_urlname (const gchar *url, const gchar *name, - gboolean create, CamelException *ex); - -/* Get a useful name for a given CamelFolder (ie, not "mbox") */ -const gchar *mail_tool_get_folder_name (CamelFolder *folder); - -/* Get the url for the local inbox */ -gchar *mail_tool_get_local_inbox_url (void); - -/* Get the filename for our movemail folder or storage */ -gchar *mail_tool_get_local_movemail_path (void); -gchar *mail_tool_get_local_movemail_url (void); - -/* Get the CamelFolder for the local inbox */ -CamelFolder *mail_tool_get_local_inbox (CamelException *ex); - -/* Get the "inbox" for a url (uses global session) */ -CamelFolder *mail_tool_get_inbox (const gchar *url, CamelException *ex); - -/* Does a camel_movemail into the local movemail folder - * and returns the movemail folder that was created. */ -CamelFolder * -mail_tool_do_movemail (const gchar *source_url, CamelException *ex); - -/* Transfers all the messages from source into dest; - * source is emptied and synced. */ -void -mail_tool_move_folder_contents (CamelFolder *source, CamelFolder *dest, gboolean use_cache, CamelException *ex); - -/* Sets the flags on a message represented by a UID in a folder. */ -void -mail_tool_set_uid_flags (CamelFolder *folder, const char *uid, guint32 mask, guint32 set); - -/* Generates the subject for a message forwarding @msg */ -gchar * -mail_tool_generate_forward_subject (CamelMimeMessage *msg); - -/* Sends the medium over transport */ -void -mail_tool_send_via_transport (CamelTransport *transport, CamelMedium *medium, CamelException *ex); - -/* Make a message into an attachment */ -CamelMimePart * -mail_tool_make_message_attachment (CamelMimeMessage *message); - -/* Fetch mail from the source URL's inbox into a searchable folder. - * (not guaranteed to be local). Returns the searchable folder. */ -CamelFolder * -mail_tool_fetch_mail_into_searchable (const char *source_url, gboolean keep_on_server, CamelException *ex); - -/* Filter source into dest using the default filters. */ -void -mail_tool_filter_contents_into (CamelFolder *source, CamelFolder *dest, - gboolean delete_source, - gpointer hook_func, gpointer hook_data, - CamelException *ex); - -/* Get the root folder of the store specified by @source_uri */ -CamelFolder * -mail_tool_get_root_of_store (const char *source_uri, CamelException *ex); - -/* Parse the ui into a real CamelFolder any way we know how. */ -CamelFolder * -mail_tool_uri_to_folder (const char *uri, CamelException *ex); - -/* Same as above taking no exceptions, popping up a GnomeErrorDialog - * if any problems occur. */ -CamelFolder * -mail_tool_uri_to_folder_noex (const char *uri); - -GHashTable * -mail_lookup_url_table (CamelMimeMessage *mime_message); - -/* Appropriate for filter_driver_run */ -CamelFolder * -mail_tool_filter_get_folder_func (FilterDriver *d, const char *uri, void *data); - - -#endif diff --git a/mail/mail-types.h b/mail/mail-types.h deleted file mode 100644 index c5b690563d..0000000000 --- a/mail/mail-types.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - * Copyright 2000 Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#ifndef MAIL_TYPES_H -#define MAIL_TYPES_H 1 - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus }*/ - - -typedef struct _FolderBrowser FolderBrowser; -typedef struct _MessageList MessageList; -typedef struct _MailDisplay MailDisplay; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* MAIL_TYPES_H */ diff --git a/mail/mail-vfolder.c b/mail/mail-vfolder.c deleted file mode 100644 index b425fe7bec..0000000000 --- a/mail/mail-vfolder.c +++ /dev/null @@ -1,317 +0,0 @@ -/* - Copyright 2000 Helix Code Inc. - - Author: Michael Zucchi - - code for managing vfolders - - NOTE: dont run this through fucking indent. -*/ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include - -#include "Evolution.h" -#include "evolution-storage.h" - -#include "evolution-shell-component.h" -#include "folder-browser.h" -#include "mail-vfolder.h" -#include "mail-tools.h" -#include "mail-autofilter.h" - -#include "camel/camel.h" - -#include "filter/vfolder-context.h" -#include "filter/vfolder-editor.h" - -#define d(x) x - -struct _vfolder_info { - char *name; - char *query; -}; - -/* list of vfolders available */ -static GList *available_vfolders = NULL; -static VfolderContext *context; -static EvolutionStorage *vfolder_storage; - -/* GROSS HACK: for passing to other parts of the program */ -EvolutionShellClient *global_shell_client = NULL; - -/* more globals ... */ -extern char *evolution_dir; -extern CamelSession *session; - -static struct _vfolder_info * -vfolder_find(const char *name) -{ - GList *l = available_vfolders; - struct _vfolder_info *info; - - while (l) { - info = l->data; - if (!strcmp(info->name, name)) - return info; - l = g_list_next(l); - } - return NULL; -} - -/* go through the list of what we have, what we want, and make - them match, deleting/reconfiguring as required */ -static void -vfolder_refresh(void) -{ - GList *l; - GList *head = NULL; /* processed list */ - struct _vfolder_info *info; - FilterRule *rule; - GString *expr = g_string_new(""); - char *uri, *path; - - rule = NULL; - while ( (rule = rule_context_next_rule((RuleContext *)context, rule)) ) { - info = vfolder_find(rule->name); - g_string_truncate(expr, 0); - filter_rule_build_code(rule, expr); - if (info) { - available_vfolders = g_list_remove(available_vfolders, info); - - /* check if the rule has changed ... otherwise, leave it */ - if (strcmp(expr->str, info->query)) { - d(printf("Must reconfigure vfolder with new rule?\n")); - g_free(info->query); - info->query = g_strdup(expr->str); - - /*uri = g_strdup_printf("vfolder:%s/vfolder/%s?%s", evolution_dir, info->name, info->query);*/ - uri = g_strdup_printf("vfolder:%s", info->name); - path = g_strdup_printf("/%s", info->name); - evolution_storage_removed_folder(vfolder_storage, path); - evolution_storage_new_folder (vfolder_storage, path, - "mail", - uri, - info->name); - g_free(uri); - g_free(path); - } - } else { - info = g_malloc(sizeof(*info)); - info->name = g_strdup(rule->name); - info->query = g_strdup(expr->str); - d(printf("Adding new vfolder: %s %s\n", rule->name, expr->str)); - - /*uri = g_strdup_printf("vfolder:%s/vfolder/%s?%s", evolution_dir, info->name, info->query);*/ - uri = g_strdup_printf("vfolder:%s", info->name); - path = g_strdup_printf("/%s", info->name); - evolution_storage_new_folder (vfolder_storage, path, - "mail", - uri, - info->name); - g_free(uri); - g_free(path); - } - head = g_list_append(head, info); - } - /* everything in available_vfolders are to be removed ... */ - l = available_vfolders; - while (l) { - info = l->data; - d(printf("removing vfolders %s %s\n", info->name, info->query)); - path = g_strdup_printf("/%s", info->name); - evolution_storage_removed_folder(vfolder_storage, path); - g_free(path); - g_free(info->name); - g_free(info->query); - l = g_list_next(l); - } - g_list_free(available_vfolders); - available_vfolders = head; - g_string_free(expr, TRUE); -} - -void -vfolder_create_storage(EvolutionShellComponent *shell_component) -{ - EvolutionShellClient *shell_client; - Evolution_Shell corba_shell; - EvolutionStorage *storage; - char *user, *system; - - shell_client = evolution_shell_component_get_owner (shell_component); - if (shell_client == NULL) { - g_warning ("We have no shell!?"); - return; - } - global_shell_client = shell_client; - - corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)); - - storage = evolution_storage_new ("VFolders"); - if (evolution_storage_register_on_shell (storage, corba_shell) != EVOLUTION_STORAGE_OK) { - g_warning ("Cannot register storage"); - return; - } - - vfolder_storage = storage; - - user = g_strdup_printf ("%s/vfolders.xml", evolution_dir); - system = g_strdup_printf("%s/evolution/vfoldertypes.xml", EVOLUTION_DATADIR); - - context = vfolder_context_new(); - printf("loading rules %s %s\n", system, user); - if (rule_context_load((RuleContext *)context, system, user, NULL, NULL) != 0) { - g_warning("cannot load vfolders: %s\n", ((RuleContext *)context)->error); - } - g_free(user); - g_free(system); - vfolder_refresh(); -} - -/* THIS IS ANALOGOUS TO mail_tool_uri_to_folder. IT IS NOT ASYNCHRONOUS */ -/* maps the shell's uri to the real vfolder uri and open the folder */ -CamelFolder * -vfolder_uri_to_folder(const char *uri, CamelException *ex) -{ - void camel_vee_folder_add_folder(CamelFolder *, CamelFolder *); - - struct _vfolder_info *info; - char *storeuri, *foldername; - VfolderRule *rule; - CamelFolder *folder = NULL, *sourcefolder; - const char *sourceuri; - int sources; - - if (strncmp (uri, "vfolder:", 8)) - return NULL; - - info = vfolder_find(uri+8); - if (info == NULL) { - g_warning("Shell trying to open unknown vFolder: %s", uri); - return NULL; - } - - d(printf("Opening vfolder: %s\n", uri)); - - rule = (VfolderRule *)rule_context_find_rule((RuleContext *)context, info->name); - - storeuri = g_strdup_printf("vfolder:%s/vfolder/%s", evolution_dir, info->name); - foldername = g_strdup_printf("mbox?%s", info->query); - - folder = mail_tool_get_folder_from_urlname (storeuri, foldername, TRUE, ex); - - sourceuri = NULL; - sources = 0; - while ( (sourceuri = vfolder_rule_next_source(rule, sourceuri)) ) { - d(printf("adding vfolder source: %s\n", sourceuri)); - sourcefolder = mail_tool_uri_to_folder (sourceuri, ex); - if (sourcefolder) { - sources++; - mail_tool_camel_lock_up (); - camel_vee_folder_add_folder(folder, sourcefolder); - mail_tool_camel_lock_down (); - } - } - /* if we didn't have any sources, just use Inbox as the default */ - if (sources == 0) { - char *defaulturi; - - defaulturi = g_strdup_printf("file://%s/local/Inbox", evolution_dir); - d(printf("No sources configured/found, using default: %s\n", defaulturi)); - sourcefolder = mail_tool_uri_to_folder (defaulturi, ex); - g_free(defaulturi); - if (sourcefolder) { - mail_tool_camel_lock_up (); - camel_vee_folder_add_folder(folder, sourcefolder); - mail_tool_camel_lock_down (); - } - } - - g_free(foldername); - g_free(storeuri); - - return folder; -} - -static void -vfolder_editor_clicked(GtkWidget *w, int button, void *data) -{ - if (button == 0) { - char *user; - - user = g_strdup_printf("%s/vfolders.xml", evolution_dir); - rule_context_save((RuleContext *)context, user); - g_free(user); - vfolder_refresh(); - } - if (button != -1) { - gnome_dialog_close((GnomeDialog *)w); - } -} - -void -vfolder_edit(void) -{ - GtkWidget *w; - - w = vfolder_editor_construct(context); - gtk_signal_connect((GtkObject *)w, "clicked", vfolder_editor_clicked, NULL); - gtk_widget_show(w); -} - -static void -new_rule_clicked(GtkWidget *w, int button, void *data) -{ - if (button == 0) { - char *user; - FilterRule *rule = gtk_object_get_data((GtkObject *)w, "rule"); - - gtk_object_ref((GtkObject *)rule); - rule_context_add_rule((RuleContext *)context, rule); - user = g_strdup_printf("%s/vfolders.xml", evolution_dir); - rule_context_save((RuleContext *)context, user); - g_free(user); - vfolder_refresh(); - } - if (button != -1) { - gnome_dialog_close((GnomeDialog *)w); - } -} - -FilterPart * -vfolder_create_part(const char *name) -{ - return rule_context_create_part((RuleContext *)context, name); -} - -/* adds a rule with a gui */ -void -vfolder_gui_add_rule(VfolderRule *rule) -{ - GtkWidget *w; - GnomeDialog *gd; - - w = filter_rule_get_widget((FilterRule *)rule, (RuleContext *)context); - gd = (GnomeDialog *)gnome_dialog_new(_("New VFolder"), - GNOME_STOCK_BUTTON_OK, - GNOME_STOCK_BUTTON_CANCEL, - NULL); - gtk_box_pack_start((GtkBox *)gd->vbox, w, FALSE, TRUE, 0); - gtk_widget_show((GtkWidget *)gd); - gtk_object_set_data_full((GtkObject *)gd, "rule", rule, (GtkDestroyNotify)gtk_object_unref); - gtk_signal_connect((GtkObject *)gd, "clicked", new_rule_clicked, NULL); - gtk_widget_show((GtkWidget *)gd); -} - -void -vfolder_gui_add_from_message(CamelMimeMessage *msg, int flags, const char *source) -{ - VfolderRule *rule; - - rule = (VfolderRule*)vfolder_rule_from_message(context, msg, flags, source); - vfolder_gui_add_rule(rule); -} - diff --git a/mail/mail-vfolder.h b/mail/mail-vfolder.h deleted file mode 100644 index 2ff19cc3ea..0000000000 --- a/mail/mail-vfolder.h +++ /dev/null @@ -1,24 +0,0 @@ - -#ifndef _MAIL_VFOLDER_H -#define _MAIL_VFOLDER_H - -#include - -#include "Evolution.h" -#include "evolution-storage.h" -#include "evolution-shell-component.h" - -#include "camel/camel-folder.h" -#include "camel/camel-mime-message.h" -#include "filter/vfolder-rule.h" -#include "filter/filter-part.h" - -void vfolder_create_storage(EvolutionShellComponent *shell_component); - -CamelFolder *vfolder_uri_to_folder(const char *uri, CamelException *ex); -void vfolder_edit(void); -FilterPart *vfolder_create_part(const char *name); -void vfolder_gui_add_rule(VfolderRule *rule); -void vfolder_gui_add_from_message(CamelMimeMessage *msg, int flags, const char *source); - -#endif diff --git a/mail/mail-view.c b/mail/mail-view.c deleted file mode 100644 index 6c336a47f8..0000000000 --- a/mail/mail-view.c +++ /dev/null @@ -1,243 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Authors: Jeffrey Stedfast - * - * Copyright 2000 Helix Code, Inc. (www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - * - */ - -#include -#include "mail.h" -#include "mail-ops.h" -#include "camel/camel.h" - -typedef struct mail_view_data_s { - CamelFolder *source; - gchar *uid; - CamelMimeMessage *msg; - MailDisplay *md; -} mail_view_data; - -static void -mail_view_data_free (gpointer mvd) -{ - mail_view_data *data = (mail_view_data *) mvd; - - if (data->uid) - g_free (data->uid); - if (data->msg) - camel_object_unref (CAMEL_OBJECT (data->msg)); - if (data->source) - camel_object_unref (CAMEL_OBJECT (data->source)); - - g_free (data); -} - -static mail_view_data * -mail_view_data_new (CamelFolder *source, const gchar *uid, CamelMimeMessage *msg) -{ - mail_view_data *data; - - data = g_new (mail_view_data, 1); - data->source = source; - camel_object_ref (CAMEL_OBJECT (data->source)); - data->msg = msg; - camel_object_ref (CAMEL_OBJECT (data->msg)); - data->uid = g_strdup (uid); - - return data; -} - -static void -on_close (GtkWidget *menuitem, gpointer user_data) -{ - GtkWidget *view_window; - - view_window = gtk_object_get_data (GTK_OBJECT (menuitem), "view-window"); - g_return_if_fail (view_window); - gtk_widget_destroy (GTK_WIDGET (view_window)); -} - -static void -view_reply_to_sender (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - mail_reply (data->source, data->msg, data->uid, FALSE); -} - -static void -view_reply_to_all (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - mail_reply (data->source, data->msg, data->uid, TRUE); -} - -static void -view_forward_msg (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - GPtrArray *uids; - EMsgComposer *composer; - - uids = g_ptr_array_new(); - g_ptr_array_add (uids, g_strdup (data->uid)); - - composer = E_MSG_COMPOSER (e_msg_composer_new ()); - gtk_signal_connect (GTK_OBJECT (composer), "send", - GTK_SIGNAL_FUNC (composer_send_cb), NULL); - - mail_do_forward_message (data->msg, data->source, uids, composer); -} - -static void -view_print_msg (GtkWidget *widget, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - mail_print_msg (data->md); -} - -static void -view_delete_msg (GtkWidget *button, gpointer user_data) -{ - mail_view_data *data = (mail_view_data *) user_data; - - GPtrArray *uids; - - uids = g_ptr_array_new(); - g_ptr_array_add (uids, g_strdup (data->uid)); - mail_do_flag_messages (data->source, uids, TRUE, - CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED); -} - -static GnomeUIInfo mail_view_toolbar [] = { - - /*GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), - save_msg, GNOME_STOCK_PIXMAP_SAVE),*/ - - GNOMEUIINFO_ITEM_STOCK (N_("Reply"), N_("Reply to the sender of this message"), - view_reply_to_sender, GNOME_STOCK_PIXMAP_MAIL_RPL), - - GNOMEUIINFO_ITEM_STOCK (N_("Reply to All"), N_("Reply to all recipients of this message"), - view_reply_to_all, GNOME_STOCK_PIXMAP_MAIL_RPL), - - GNOMEUIINFO_ITEM_STOCK (N_("Forward"), N_("Forward this message"), view_forward_msg, GNOME_STOCK_PIXMAP_MAIL_FWD), - - GNOMEUIINFO_SEPARATOR, - - GNOMEUIINFO_ITEM_STOCK (N_("Print"), N_("Print the selected message"), view_print_msg, GNOME_STOCK_PIXMAP_PRINT), - - GNOMEUIINFO_ITEM_STOCK (N_("Delete"), N_("Delete this message"), view_delete_msg, GNOME_STOCK_PIXMAP_TRASH), - - /*GNOMEUIINFO_SEPARATOR,*/ - - /*GNOMEUIINFO_ITEM_STOCK (N_("Next"), N_("Next message"), mail_view_next_msg, GNOME_STOCK_PIXMAP_NEXT), - - GNOMEUIINFO_ITEM_STOCK (N_("Previous"), N_("Previous message"), mail_view_prev_msg, GNOME_STOCK_PIXMAP_PREVIOUS),*/ - - GNOMEUIINFO_END -}; - -static GnomeUIInfo file_menu[] = { - /*GNOMEUIINFO_MENU_SAVE_ITEM (save, NULL),*/ - /*GNOMEUIINFO_MENU_SAVE_AS_ITEM (save_as, NULL),*/ - /*GNOMEUIINFO_SEPARATOR,*/ - GNOMEUIINFO_MENU_CLOSE_ITEM (on_close, NULL), - GNOMEUIINFO_END -}; - -static GnomeUIInfo view_menu[] = -{ - GNOMEUIINFO_END -}; - -static GnomeUIInfo mail_view_menubar[] = -{ - GNOMEUIINFO_MENU_FILE_TREE (file_menu), - GNOMEUIINFO_MENU_VIEW_TREE (view_menu), - GNOMEUIINFO_END -}; - -GtkWidget * -mail_view_create (CamelFolder *source, const char *uid, CamelMimeMessage *msg) -{ - GtkWidget *window; - GtkWidget *toolbar; - GtkWidget *mail_display; - GnomeDockItemBehavior behavior; - char *subject; - mail_view_data *data; - - data = mail_view_data_new (source, uid, msg); - - subject = (char *) camel_mime_message_get_subject (msg); - if (!subject) - subject = ""; - - window = gnome_app_new ("Evolution", subject); - - toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); - - gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar), - mail_view_toolbar, - NULL, data); - - behavior = GNOME_DOCK_ITEM_BEH_NORMAL; - if (!gnome_preferences_get_toolbar_detachable ()) - behavior |= GNOME_DOCK_ITEM_BEH_LOCKED; - - gnome_app_add_toolbar (GNOME_APP (window), - GTK_TOOLBAR (toolbar), - GNOME_APP_TOOLBAR_NAME, - behavior, - GNOME_DOCK_TOP, 1, 0, 0); - - gnome_app_create_menus (GNOME_APP (window), mail_view_menubar); - - gtk_object_set_data_full (GTK_OBJECT (window), "mvd", data, - mail_view_data_free); - - gtk_widget_ref (mail_view_menubar[0].widget); - gtk_object_set_data_full (GTK_OBJECT (window), "file", - mail_view_menubar[0].widget, - (GtkDestroyNotify) gtk_widget_unref); - - gtk_widget_ref (file_menu[0].widget); - gtk_object_set_data (GTK_OBJECT (file_menu[0].widget), "view-window", window); - gtk_object_set_data_full (GTK_OBJECT (window), "close", - file_menu[0].widget, - (GtkDestroyNotify) gtk_widget_unref); - - gtk_widget_ref (mail_view_menubar[1].widget); - gtk_object_set_data_full (GTK_OBJECT (window), "view", - mail_view_menubar[1].widget, - (GtkDestroyNotify) gtk_widget_unref); - - mail_display = mail_display_new (); - mail_display_set_message (MAIL_DISPLAY (mail_display), CAMEL_MEDIUM (msg)); - gtk_widget_set_usize (mail_display, 600, 600); - data->md = MAIL_DISPLAY (mail_display); - gnome_app_set_contents (GNOME_APP (window), mail_display); - - return window; -} - - - diff --git a/mail/mail.h b/mail/mail.h deleted file mode 100644 index 8a67d745fb..0000000000 --- a/mail/mail.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright 2000, Helix Code, Inc. (http://www.helixcode.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. - */ - -#include -#include "camel/camel.h" -#include "composer/e-msg-composer.h" -#include "mail-config.h" -#include "mail-config-gui.h" -#include "folder-browser.h" - -extern char *evolution_dir; - -/* mail-config */ -void mail_config_druid (void); - -/* mail-crypto */ -char *mail_crypto_openpgp_decrypt (const char *ciphertext, - CamelException *ex); - -char *mail_crypto_openpgp_encrypt (const char *plaintext, - const GPtrArray *recipients, - gboolean sign, - CamelException *ex); -/* FIXME: add encryption & signing functions */ - -/* mail-format */ -void mail_format_mime_message (CamelMimeMessage *mime_message, - MailDisplay *md); - -EMsgComposer *mail_generate_reply (CamelMimeMessage *mime_message, - gboolean to_all); - -char *mail_get_message_body (CamelDataWrapper *data, gboolean want_plain, - gboolean *is_html); - -/* mail-identify */ -char *mail_identify_mime_part (CamelMimePart *part); - -/* mail-callbacks */ -void fetch_mail (GtkWidget *widget, gpointer user_data); -void compose_msg (GtkWidget *widget, gpointer user_data); -void send_to_url (const char *url); -void forward_msg (GtkWidget *widget, gpointer user_data); -void reply_to_sender (GtkWidget *widget, gpointer user_data); -void reply_to_all (GtkWidget *widget, gpointer user_data); -void delete_msg (GtkWidget *widget, gpointer user_data); -void move_msg (GtkWidget *widget, gpointer user_data); -void copy_msg (GtkWidget *widget, gpointer user_data); -void print_msg (GtkWidget *widget, gpointer user_data); -void edit_msg (GtkWidget *widget, gpointer user_data); -void view_msg (GtkWidget *widget, gpointer user_data); - -void mark_all_seen (BonoboUIHandler *uih, void *user_data, const char *path); -void edit_message (BonoboUIHandler *uih, void *user_data, const char *path); -void view_message (BonoboUIHandler *uih, void *user_data, const char *path); -void expunge_folder (BonoboUIHandler *uih, void *user_data, const char *path); -void filter_edit (BonoboUIHandler *uih, void *user_data, const char *path); -void vfolder_edit_vfolders (BonoboUIHandler *uih, void *user_data, const char *path); -void providers_config (BonoboUIHandler *uih, void *user_data, const char *path); - -void configure_folder(BonoboUIHandler *uih, void *user_data, const char *path); - -void mail_reply (CamelFolder *folder, CamelMimeMessage *msg, const char *uid, gboolean to_all); -void composer_send_cb (EMsgComposer *composer, gpointer data); -void mail_print_msg (MailDisplay *md); - -void run_filter_ondemand (BonoboUIHandler *uih, gpointer user_data, const char *path); - -/* mail view */ -GtkWidget *mail_view_create (CamelFolder *source, const char *uid, CamelMimeMessage *msg); - -/* session */ -void session_init (void); -char *mail_request_dialog (const char *prompt, gboolean secret, - const char *key, gboolean async); -void forget_passwords (BonoboUIHandler *uih, void *user_data, - const char *path); -extern CamelSession *session; diff --git a/mail/main.c b/mail/main.c deleted file mode 100644 index a88117b2c3..0000000000 --- a/mail/main.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * main.c: The core of the mail component - * - * Author: - * Miguel de Icaza (miguel@helixcode.com) - * - * (C) 2000 Helix Code, Inc. - */ - -#include - -#include - -#include -#include -#include -#include -#include - -#ifdef GTKHTML_HAVE_GCONF -#include -#endif - -#include "e-util/e-gui-utils.h" -#include "e-util/e-cursors.h" - -#include "component-factory.h" -#include "mail.h" - -int -main (int argc, char *argv []) -{ - CORBA_ORB orb; - - /* free (malloc (10));*/ - - bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR); - textdomain (PACKAGE); - - g_thread_init( NULL ); - - gnome_init_with_popt_table ("evolution-mail-component", VERSION, - argc, argv, oaf_popt_options, 0, NULL); - orb = oaf_init (argc, argv); - - if (bonobo_init (orb, CORBA_OBJECT_NIL, - CORBA_OBJECT_NIL) == FALSE) { - g_error ("Mail component could not initialize Bonobo.\n" - "If there was a warning message about the " - "RootPOA, it probably means\nyou compiled " - "Bonobo against GOAD instead of OAF."); - } - -#ifdef GTKHTML_HAVE_GCONF - gconf_init (argc, argv, NULL); -#endif - - glade_gnome_init (); - - session_init (); - e_cursors_init (); - - component_factory_init (); - - signal (SIGSEGV, SIG_DFL); - signal (SIGBUS, SIG_DFL); - - GDK_THREADS_ENTER (); - bonobo_main (); - GDK_THREADS_LEAVE (); - - mail_config_write_on_exit (); - - return 0; -} diff --git a/mail/message-list.c b/mail/message-list.c deleted file mode 100644 index 7499cbb651..0000000000 --- a/mail/message-list.c +++ /dev/null @@ -1,1267 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * message-list.c: Displays the messages. - * Implements CORBA's Evolution::MessageList - * - * Author: - * Miguel de Icaza (miguel@helixcode.com) - * Bertrand Guiheneuf (bg@aful.org) - * - * (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "message-list.h" -#include "message-thread.h" -#include "mail-threads.h" -#include "mail-tools.h" -#include "mail-ops.h" -#include "mail-config.h" -#include "mail-vfolder.h" -#include "mail-autofilter.h" -#include "mail.h" -#include "Mail.h" -#include "widgets/e-table/e-table-header-item.h" -#include "widgets/e-table/e-table-item.h" - -#include "art/mail-new.xpm" -#include "art/mail-read.xpm" -#include "art/mail-replied.xpm" -#include "art/attachment.xpm" -#include "art/empty.xpm" -#include "art/tree-expanded.xpm" -#include "art/tree-unexpanded.xpm" - -/* - * Default sizes for the ETable display - * - */ -#define N_CHARS(x) (CHAR_WIDTH * (x)) - -#define COL_ICON_WIDTH (16) -#define COL_CHECK_BOX_WIDTH (16) -#define COL_FROM_EXPANSION (24.0) -#define COL_FROM_WIDTH_MIN (32) -#define COL_SUBJECT_EXPANSION (30.0) -#define COL_SUBJECT_WIDTH_MIN (32) -#define COL_SENT_EXPANSION (24.0) -#define COL_SENT_WIDTH_MIN (32) -#define COL_RECEIVED_EXPANSION (20.0) -#define COL_RECEIVED_WIDTH_MIN (32) -#define COL_TO_EXPANSION (24.0) -#define COL_TO_WIDTH_MIN (32) -#define COL_SIZE_EXPANSION (6.0) -#define COL_SIZE_WIDTH_MIN (32) - -#define PARENT_TYPE (bonobo_object_get_type ()) - -static BonoboObjectClass *message_list_parent_class; -static POA_Evolution_MessageList__vepv evolution_message_list_vepv; - -static void on_cursor_change_cmd (ETableScrolled *table, int row, gpointer user_data); -static void select_row (ETableScrolled *table, gpointer user_data); -static gint on_right_click (ETableScrolled *table, gint row, gint col, GdkEvent *event, MessageList *list); -static void on_double_click (ETableScrolled *table, gint row, MessageList *list); -static void select_msg (MessageList *message_list, gint row); -static char *filter_date (const void *data); -static void nuke_uids (GtkObject *o); - -static struct { - char **image_base; - GdkPixbuf *pixbuf; -} states_pixmaps [] = { - { mail_new_xpm, NULL }, - { mail_read_xpm, NULL }, - { mail_replied_xpm, NULL }, - { empty_xpm, NULL }, - { attachment_xpm, NULL }, - { tree_expanded_xpm, NULL }, - { tree_unexpanded_xpm, NULL }, - { NULL, NULL } -}; - -/* Gets the CamelMessageInfo for the message displayed at the given - * view row. - */ -static const CamelMessageInfo * -get_message_info (MessageList *message_list, int row) -{ - ETreeModel *model = (ETreeModel *)message_list->table_model; - ETreePath *node; - char *uid; - - if (row >= e_table_model_row_count (message_list->table_model)) - return NULL; - - node = e_tree_model_node_at_row (model, row); - g_return_val_if_fail (node != NULL, NULL); - uid = e_tree_model_node_get_data (model, node); - - if (strncmp (uid, "uid:", 4) != 0) - return NULL; - uid += 4; - - return camel_folder_get_message_info (message_list->folder, uid); -} - -/* Gets the uid of the message displayed at a given view row */ -static const char * -get_message_uid (MessageList *message_list, int row) -{ - ETreeModel *model = (ETreeModel *)message_list->table_model; - ETreePath *node; - const char *uid; - - if (row >= e_table_model_row_count (message_list->table_model)) - return NULL; - - node = e_tree_model_node_at_row (model, row); - g_return_val_if_fail (node != NULL, NULL); - uid = e_tree_model_node_get_data (model, node); - - if (strncmp (uid, "uid:", 4) != 0) - return NULL; - uid += 4; - - return uid; -} - -static gint -mark_msg_seen (gpointer data) -{ - MessageList *ml = data; - GPtrArray *uids; - - if (!ml->cursor_uid) - return FALSE; - - uids = g_ptr_array_new (); - g_ptr_array_add (uids, g_strdup (ml->cursor_uid)); - mail_do_flag_messages (ml->folder, uids, FALSE, - CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); - return FALSE; -} - -/** - * message_list_select: - * @message_list: a MessageList - * @base_row: the (model) row to start from - * @direction: the direction to search in - * @flags: a set of flag values - * @mask: a mask for comparing against @flags - * - * This moves the message list selection to a suitable row. @base_row - * lists the first (model) row to try, but as a special case, model - * row -1 is mapped to view row 0. @flags and @mask combine to specify - * what constitutes a suitable row. @direction is - * %MESSAGE_LIST_SELECT_NEXT if it should find the next matching - * message, or %MESSAGE_LIST_SELECT_PREVIOUS if it should find the - * previous. If no suitable row is found, the selection will be - * unchanged but the message display will be cleared. - **/ -void -message_list_select (MessageList *message_list, int base_row, - MessageListSelectDirection direction, - guint32 flags, guint32 mask) -{ - const CamelMessageInfo *info; - int vrow, mrow, last; - ETableScrolled *ets = E_TABLE_SCROLLED (message_list->etable); - - if (direction == MESSAGE_LIST_SELECT_PREVIOUS) - last = 0; - else - last = e_table_model_row_count (message_list->table_model); - - if (base_row == -1) - vrow = 0; - else - vrow = e_table_model_to_view_row (ets->table, base_row); - - /* We don't know whether to use < or > due to "direction" */ - while (vrow != last) { - mrow = e_table_view_to_model_row (ets->table, vrow); - info = get_message_info (message_list, mrow); - if (info && (info->flags & mask) == flags) { - e_table_scrolled_set_cursor_row (ets, mrow); - mail_do_display_message (message_list, info->uid, mark_msg_seen); - return; - } - vrow += direction; - } - - mail_display_set_message (message_list->parent_folder_browser->mail_display, NULL); -} - -/* select a message and display it */ -static void -select_msg (MessageList *message_list, gint row) -{ - const char *uid; - - uid = get_message_uid (message_list, row); - mail_do_display_message (message_list, uid, mark_msg_seen); -} - - -static GdkPixbuf * -ml_tree_icon_at (ETreeModel *etm, ETreePath *path, void *model_data) -{ - /* we dont really need an icon ... */ - return NULL; -} - -static void * -ml_tree_value_at (ETreeModel *etm, ETreePath *path, int col, void *model_data) -{ - MessageList *message_list = model_data; - const CamelMessageInfo *msg_info; - static char buffer [10]; - char *uid; - - /* retrieve the message information array */ - uid = e_tree_model_node_get_data (etm, path); - if (strncmp (uid, "uid:", 4) != 0) - goto fake; - uid += 4; - - msg_info = camel_folder_get_message_info (message_list->folder, uid); - g_return_val_if_fail (msg_info != NULL, NULL); - - switch (col){ - case COL_ONLINE_STATUS: - return GINT_TO_POINTER (0); - - case COL_MESSAGE_STATUS: - if (msg_info->flags & CAMEL_MESSAGE_ANSWERED) - return GINT_TO_POINTER (2); - else if (msg_info->flags & CAMEL_MESSAGE_SEEN) - return GINT_TO_POINTER (1); - else - return GINT_TO_POINTER (0); - - case COL_PRIORITY: - return GINT_TO_POINTER (1); - - case COL_ATTACHMENT: - return GINT_TO_POINTER (0); - - case COL_FROM: - if (msg_info->from) - return msg_info->from; - else - return ""; - - case COL_SUBJECT: - if (msg_info->subject) - return msg_info->subject; - else - return ""; - - case COL_SENT: - return GINT_TO_POINTER (msg_info->date_sent); - - case COL_RECEIVED: - return GINT_TO_POINTER (msg_info->date_received); - - case COL_TO: - if (msg_info->to) - return msg_info->to; - else - return ""; - - case COL_SIZE: - sprintf (buffer, "%d", msg_info->size); - return buffer; - - case COL_DELETED: - return GINT_TO_POINTER(!!(msg_info->flags & CAMEL_MESSAGE_DELETED)); - - case COL_UNREAD: - return GINT_TO_POINTER(!(msg_info->flags & CAMEL_MESSAGE_SEEN)); - - case COL_COLOUR: - return (void *) camel_tag_get((CamelTag **) &msg_info->user_tags, "colour"); - } - - g_assert_not_reached (); - - fake: - /* This is a fake tree parent */ - switch (col){ - case COL_ONLINE_STATUS: - case COL_MESSAGE_STATUS: - case COL_PRIORITY: - case COL_ATTACHMENT: - case COL_DELETED: - case COL_COLOUR: - case COL_UNREAD: - case COL_SENT: - case COL_RECEIVED: - return (void *) 0; - - case COL_SUBJECT: - return strchr (uid, ':') + 1; - - case COL_FROM: - case COL_TO: - case COL_SIZE: - return "?"; - } - g_assert_not_reached (); - - return NULL; -} - -static void -ml_tree_set_value_at (ETreeModel *etm, ETreePath *path, int col, - const void *val, void *model_data) -{ - MessageList *message_list = model_data; - const CamelMessageInfo *msg_info; - char *uid; - GPtrArray *uids; - - if (col != COL_MESSAGE_STATUS) - return; - - uid = e_tree_model_node_get_data (etm, path); - if (strncmp (uid, "uid:", 4) != 0) - return; - uid += 4; - - msg_info = camel_folder_get_message_info (message_list->folder, uid); - if (!msg_info) - return; - - uids = g_ptr_array_new (); - g_ptr_array_add (uids, g_strdup (uid)); - mail_do_flag_messages (message_list->folder, uids, TRUE, - CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN); - - if (message_list->seen_id) { - gtk_timeout_remove (message_list->seen_id); - message_list->seen_id = 0; - } -} - -static gboolean -ml_tree_is_cell_editable (ETreeModel *etm, ETreePath *path, int col, void *model_data) -{ - return col == COL_MESSAGE_STATUS; -} - -static void -message_list_init_images (void) -{ - int i; - - /* - * Only load once, and share - */ - if (states_pixmaps [0].pixbuf) - return; - - for (i = 0; states_pixmaps [i].image_base; i++){ - states_pixmaps [i].pixbuf = gdk_pixbuf_new_from_xpm_data ( - (const char **) states_pixmaps [i].image_base); - } -} - -static char * -filter_date (const void *data) -{ - time_t date = GPOINTER_TO_INT (data); - char buf[26], *p; - - if (date == 0) - return g_strdup ("?"); - -#ifdef CTIME_R_THREE_ARGS - ctime_r (&date, buf, 26); -#else - ctime_r (&date, buf); -#endif - - p = strchr (buf, '\n'); - if (p) - *p = '\0'; - - return g_strdup (buf); -} - -static void -message_list_init_renderers (MessageList *message_list) -{ - GdkPixbuf *images [3]; - - g_assert (message_list); - g_assert (message_list->table_model); - - message_list->render_text = e_cell_text_new ( - message_list->table_model, - NULL, GTK_JUSTIFY_LEFT); - - gtk_object_set(GTK_OBJECT(message_list->render_text), - "strikeout_column", COL_DELETED, - NULL); - gtk_object_set(GTK_OBJECT(message_list->render_text), - "bold_column", COL_UNREAD, - NULL); - gtk_object_set(GTK_OBJECT(message_list->render_text), - "color_column", COL_COLOUR, - NULL); - - message_list->render_date = e_cell_text_new ( - message_list->table_model, - NULL, GTK_JUSTIFY_LEFT); - - gtk_object_set(GTK_OBJECT(message_list->render_date), - "text_filter", filter_date, - NULL); - gtk_object_set(GTK_OBJECT(message_list->render_date), - "strikeout_column", COL_DELETED, - NULL); - gtk_object_set(GTK_OBJECT(message_list->render_date), - "bold_column", COL_UNREAD, - NULL); - gtk_object_set(GTK_OBJECT(message_list->render_date), - "color_column", COL_COLOUR, - NULL); - - message_list->render_online_status = e_cell_checkbox_new (); - - /* - * Message status - */ - images [0] = states_pixmaps [0].pixbuf; - images [1] = states_pixmaps [1].pixbuf; - images [2] = states_pixmaps [2].pixbuf; - - message_list->render_message_status = e_cell_toggle_new (0, 3, images); - - /* - * Attachment - */ - images [0] = states_pixmaps [3].pixbuf; - images [1] = states_pixmaps [4].pixbuf; - - message_list->render_attachment = e_cell_toggle_new (0, 2, images); - - /* - * FIXME: We need a real renderer here - */ - message_list->render_priority = e_cell_checkbox_new (); - - /* - * for tree view - */ - message_list->render_tree = - e_cell_tree_new (message_list->table_model, - states_pixmaps[5].pixbuf, - states_pixmaps[6].pixbuf, - TRUE, message_list->render_text); -} - -static void -message_list_init_header (MessageList *message_list) -{ - int i; - - /* - * FIXME: - * - * Use the font metric to compute this. - */ - - message_list->header_model = e_table_header_new (); - gtk_object_ref (GTK_OBJECT (message_list->header_model)); - gtk_object_sink (GTK_OBJECT (message_list->header_model)); - - message_list->table_cols [COL_ONLINE_STATUS] = - e_table_col_new ( - COL_ONLINE_STATUS, _("Online Status"), - 0.0, COL_CHECK_BOX_WIDTH, - message_list->render_online_status, - g_int_compare, FALSE); - - message_list->table_cols [COL_MESSAGE_STATUS] = - e_table_col_new_with_pixbuf ( - COL_MESSAGE_STATUS, states_pixmaps [0].pixbuf, - 0.0, COL_CHECK_BOX_WIDTH, - message_list->render_message_status, - g_int_compare, FALSE); - - gtk_object_set(GTK_OBJECT(message_list->table_cols[COL_MESSAGE_STATUS]), - "sortable", FALSE, - NULL); - - message_list->table_cols [COL_PRIORITY] = - e_table_col_new ( - COL_PRIORITY, _("Priority"), - 0.0, COL_CHECK_BOX_WIDTH, - message_list->render_priority, - g_int_compare, FALSE); - - message_list->table_cols [COL_ATTACHMENT] = - e_table_col_new_with_pixbuf ( - COL_ATTACHMENT, states_pixmaps [4].pixbuf, - 0.0, COL_ICON_WIDTH, - message_list->render_attachment, - g_int_compare, FALSE); - - gtk_object_set(GTK_OBJECT(message_list->table_cols[COL_ATTACHMENT]), - "sortable", FALSE, - NULL); - - message_list->table_cols [COL_FROM] = - e_table_col_new ( - COL_FROM, _("From"), - COL_FROM_EXPANSION, COL_FROM_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_SUBJECT] = - e_table_col_new ( - COL_SUBJECT, _("Subject"), - COL_SUBJECT_EXPANSION, COL_SUBJECT_WIDTH_MIN, - message_list->render_tree, - g_str_compare, TRUE); - - message_list->table_cols [COL_SENT] = - e_table_col_new ( - COL_SENT, _("Date"), - COL_SENT_EXPANSION, COL_SENT_WIDTH_MIN, - message_list->render_date, - g_int_compare, TRUE); - - message_list->table_cols [COL_RECEIVED] = - e_table_col_new ( - COL_RECEIVED, _("Received"), - COL_RECEIVED_EXPANSION, COL_RECEIVED_WIDTH_MIN, - message_list->render_date, - g_int_compare, TRUE); - - message_list->table_cols [COL_TO] = - e_table_col_new ( - COL_TO, _("To"), - COL_TO_EXPANSION, COL_TO_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - message_list->table_cols [COL_SIZE] = - e_table_col_new ( - COL_SIZE, _("Size"), - COL_SIZE_EXPANSION, COL_SIZE_WIDTH_MIN, - message_list->render_text, - g_str_compare, TRUE); - - for (i = 0; i < COL_LAST; i++) { - gtk_object_ref (GTK_OBJECT (message_list->table_cols [i])); - e_table_header_add_column (message_list->header_model, - message_list->table_cols [i], i); - } -} - -static char * -message_list_get_layout (MessageList *message_list) -{ - /* Message status, From, Subject, Sent Date */ - return g_strdup (" 1 4 5 6 "); -} - -/* - * GtkObject::init - */ -static void -message_list_init (GtkObject *object) -{ - MessageList *message_list = MESSAGE_LIST (object); - char *spec; - - message_list->table_model = (ETableModel *) - e_tree_simple_new (ml_tree_icon_at, ml_tree_value_at, - ml_tree_set_value_at, - ml_tree_is_cell_editable, - message_list); - e_tree_model_root_node_set_visible ((ETreeModel *)message_list->table_model, FALSE); - gtk_signal_connect (GTK_OBJECT (message_list->table_model), "destroy", - (GtkSignalFunc) nuke_uids, NULL); - - message_list_init_renderers (message_list); - message_list_init_header (message_list); - - /* - * The etable - */ - - spec = message_list_get_layout (message_list); - message_list->etable = e_table_scrolled_new ( - message_list->header_model, message_list->table_model, spec); - g_free (spec); - - gtk_object_set(GTK_OBJECT(message_list->etable), - "cursor_mode", E_TABLE_CURSOR_LINE, - "drawfocus", FALSE, - "drawgrid", FALSE, - NULL); - - /* - *gtk_signal_connect (GTK_OBJECT (message_list->etable), "realize", - * GTK_SIGNAL_FUNC (select_row), message_list); - */ - - gtk_signal_connect (GTK_OBJECT (message_list->etable), "cursor_change", - GTK_SIGNAL_FUNC (on_cursor_change_cmd), message_list); - - gtk_signal_connect (GTK_OBJECT (message_list->etable), "right_click", - GTK_SIGNAL_FUNC (on_right_click), message_list); - - gtk_signal_connect (GTK_OBJECT (message_list->etable), "double_click", - GTK_SIGNAL_FUNC (on_double_click), message_list); - - gtk_widget_show (message_list->etable); - - gtk_object_ref (GTK_OBJECT (message_list->table_model)); - gtk_object_sink (GTK_OBJECT (message_list->table_model)); - - /* - * We do own the Etable, not some widget container - */ - gtk_object_ref (GTK_OBJECT (message_list->etable)); - gtk_object_sink (GTK_OBJECT (message_list->etable)); -} - -static void -free_key (gpointer key, gpointer value, gpointer data) -{ - g_free (key); -} - -static void -message_list_destroy (GtkObject *object) -{ - MessageList *message_list = MESSAGE_LIST (object); - int i; - - - gtk_object_unref (GTK_OBJECT (message_list->table_model)); - gtk_object_unref (GTK_OBJECT (message_list->header_model)); - - /* - * Renderers - */ - gtk_object_unref (GTK_OBJECT (message_list->render_text)); - gtk_object_unref (GTK_OBJECT (message_list->render_online_status)); - gtk_object_unref (GTK_OBJECT (message_list->render_message_status)); - gtk_object_unref (GTK_OBJECT (message_list->render_priority)); - gtk_object_unref (GTK_OBJECT (message_list->render_attachment)); - gtk_object_unref (GTK_OBJECT (message_list->render_tree)); - - gtk_object_unref (GTK_OBJECT (message_list->etable)); - - if (message_list->uid_rowmap) { - g_hash_table_foreach (message_list->uid_rowmap, - free_key, NULL); - g_hash_table_destroy (message_list->uid_rowmap); - } - - for (i = 0; i < COL_LAST; i++) - gtk_object_unref (GTK_OBJECT (message_list->table_cols [i])); - - if (message_list->idle_id != 0) - g_source_remove(message_list->idle_id); - - if (message_list->seen_id) - gtk_timeout_remove (message_list->seen_id); - - if (message_list->folder) - camel_object_unref (CAMEL_OBJECT (message_list->folder)); - - GTK_OBJECT_CLASS (message_list_parent_class)->destroy (object); -} - -/* - * CORBA method: Evolution::MessageList::select_message - */ -static void -MessageList_select_message (PortableServer_Servant _servant, - const CORBA_long message_number, - CORBA_Environment *ev) -{ - printf ("FIXME: select message method\n"); -} - -/* - * CORBA method: Evolution::MessageList::open_message - */ -static void -MessageList_open_message (PortableServer_Servant _servant, - const CORBA_long message_number, - CORBA_Environment *ev) -{ - printf ("FIXME: open message method\n"); -} - -static POA_Evolution_MessageList__epv * -evolution_message_list_get_epv (void) -{ - POA_Evolution_MessageList__epv *epv; - - epv = g_new0 (POA_Evolution_MessageList__epv, 1); - - epv->select_message = MessageList_select_message; - epv->open_message = MessageList_open_message; - - return epv; -} - -static void -message_list_corba_class_init (void) -{ - evolution_message_list_vepv.Bonobo_Unknown_epv = bonobo_object_get_epv (); - evolution_message_list_vepv.Evolution_MessageList_epv = evolution_message_list_get_epv (); -} - -/* - * GtkObjectClass::init - */ -static void -message_list_class_init (GtkObjectClass *object_class) -{ - message_list_parent_class = gtk_type_class (PARENT_TYPE); - - object_class->destroy = message_list_destroy; - - message_list_corba_class_init (); - - message_list_init_images (); -} - -static void -message_list_construct (MessageList *message_list, Evolution_MessageList corba_message_list) -{ - bonobo_object_construct (BONOBO_OBJECT (message_list), corba_message_list); -} - -static Evolution_MessageList -create_corba_message_list (BonoboObject *object) -{ - POA_Evolution_MessageList *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_MessageList *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &evolution_message_list_vepv; - - CORBA_exception_init (&ev); - POA_Evolution_MessageList__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION){ - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (Evolution_MessageList) bonobo_object_activate_servant (object, servant); -} - -BonoboObject * -message_list_new (FolderBrowser *parent_folder_browser) -{ - Evolution_MessageList corba_object; - MessageList *message_list; - - g_assert (parent_folder_browser); - - message_list = gtk_type_new (message_list_get_type ()); - - corba_object = create_corba_message_list (BONOBO_OBJECT (message_list)); - if (corba_object == CORBA_OBJECT_NIL){ - gtk_object_destroy (GTK_OBJECT (message_list)); - return NULL; - } - - message_list->parent_folder_browser = parent_folder_browser; - - message_list->idle_id = 0; - - message_list_construct (message_list, corba_object); - - return BONOBO_OBJECT (message_list); -} - -static void -clear_tree (MessageList *ml) -{ - ETreeModel *etm = E_TREE_MODEL (ml->table_model); - - if (ml->tree_root) - e_tree_model_node_remove (etm, ml->tree_root); - ml->tree_root = - e_tree_model_node_insert (etm, NULL, 0, ml); - e_tree_model_node_set_expanded (etm, ml->tree_root, TRUE); -} - -/* only call if we have a tree model */ -/* builds the tree structure */ -static void build_subtree (MessageList *ml, ETreePath *parent, - struct _container *c, int *row); - -static void -build_tree (MessageList *ml, struct _container *c) -{ - int row = 0; - - clear_tree (ml); - build_subtree (ml, ml->tree_root, c, &row); -} - -static void -build_subtree (MessageList *ml, ETreePath *parent, - struct _container *c, int *row) -{ - ETreeModel *tree = E_TREE_MODEL (ml->table_model); - ETreePath *node; - char *id; - - while (c) { - if (c->message) { - id = g_strdup_printf ("uid:%s", c->message->uid); - g_hash_table_insert (ml->uid_rowmap, - g_strdup (c->message->uid), - GINT_TO_POINTER ((*row)++)); - } else - id = g_strdup_printf ("subject:%s", c->root_subject); - node = e_tree_model_node_insert (tree, parent, 0, id); - if (c->child) { - /* by default, open all trees */ - e_tree_model_node_set_expanded (tree, node, TRUE); - build_subtree (ml, node, c->child, row); - } - c = c->next; - } -} - -static gboolean -nuke_uids_cb (GNode *node, gpointer data) -{ - g_free (e_tree_model_node_get_data (E_TREE_MODEL (data), node)); - return FALSE; -} - -static void -nuke_uids (GtkObject *o) -{ - ETreeModel *etm = E_TREE_MODEL (o); - - g_node_traverse (etm->root, G_IN_ORDER, - G_TRAVERSE_ALL, 0, - nuke_uids_cb, etm); -} - -static void -build_flat (MessageList *ml, GPtrArray *uids) -{ - ETreeModel *tree = E_TREE_MODEL (ml->table_model); - ETreePath *node; - char *uid; - int i; - - clear_tree (ml); - for (i = 0; i < uids->len; i++) { - uid = g_strdup_printf ("uid:%s", (char *)uids->pdata[i]); - node = e_tree_model_node_insert (tree, ml->tree_root, i, uid); - g_hash_table_insert (ml->uid_rowmap, g_strdup (uids->pdata[i]), - GINT_TO_POINTER (i)); - } -} - -static void -main_folder_changed (CamelObject *o, gpointer event_data, gpointer user_data) -{ - MessageList *message_list = MESSAGE_LIST (user_data); - - mail_do_regenerate_messagelist (message_list, message_list->search); -} - -static void -folder_changed (CamelObject *o, gpointer event_data, gpointer user_data) -{ - mail_op_forward_event (main_folder_changed, o, event_data, user_data); -} - -static void -main_message_changed (CamelObject *o, gpointer uid, gpointer user_data) -{ - MessageList *message_list = MESSAGE_LIST (user_data); - int row; - - row = GPOINTER_TO_INT (g_hash_table_lookup (message_list->uid_rowmap, - uid)); - if (row != -1) - e_table_model_row_changed (message_list->table_model, row); - - g_free (uid); -} - -static void -message_changed (CamelObject *o, gpointer event_data, gpointer user_data) -{ - /* Here we copy the data because our thread may free the copy that we would reference. - * The other thread would be passed a uid parameter that pointed to freed data. - * We copy it and free it in the handler. - */ - mail_op_forward_event (main_message_changed, o, g_strdup ((gchar *)event_data), user_data); -} - -void -message_list_set_folder (MessageList *message_list, CamelFolder *camel_folder) -{ - CamelException ex; - - g_return_if_fail (message_list != NULL); - g_return_if_fail (camel_folder != NULL); - g_return_if_fail (IS_MESSAGE_LIST (message_list)); - g_return_if_fail (CAMEL_IS_FOLDER (camel_folder)); - g_return_if_fail (camel_folder_has_summary_capability (camel_folder)); - - camel_exception_init (&ex); - - if (message_list->folder) - camel_object_unref (CAMEL_OBJECT (message_list->folder)); - - message_list->folder = camel_folder; - - camel_object_hook_event(CAMEL_OBJECT (camel_folder), "folder_changed", - folder_changed, message_list); - camel_object_hook_event(CAMEL_OBJECT (camel_folder), "message_changed", - message_changed, message_list); - - camel_object_ref (CAMEL_OBJECT (camel_folder)); - - /*gtk_idle_add (regen_message_list, message_list);*/ - /*folder_changed (CAMEL_OBJECT (camel_folder), 0, message_list);*/ - mail_do_regenerate_messagelist (message_list, message_list->search); -} - -GtkWidget * -message_list_get_widget (MessageList *message_list) -{ - return message_list->etable; -} - -E_MAKE_TYPE (message_list, "MessageList", MessageList, message_list_class_init, message_list_init, PARENT_TYPE); - -static gboolean -on_cursor_change_idle (gpointer data) -{ - MessageList *message_list = data; - - select_msg (message_list, message_list->cursor_row); - - message_list->idle_id = 0; - return FALSE; -} - -static void -on_cursor_change_cmd (ETableScrolled *table, int row, gpointer user_data) -{ - MessageList *message_list; - const char *uid; - - message_list = MESSAGE_LIST (user_data); - - message_list->cursor_row = row; - uid = get_message_uid (message_list, row); - message_list->cursor_uid = uid; /*NULL ok*/ - - if (!message_list->idle_id) { - message_list->idle_id = - g_idle_add_full (G_PRIORITY_LOW, on_cursor_change_idle, - message_list, NULL); - } -} - -/* FIXME: this is all a kludge. */ -static gint -idle_select_row (gpointer user_data) -{ - MessageList *ml = MESSAGE_LIST (user_data); - - message_list_select (ml, -1, MESSAGE_LIST_SELECT_NEXT, - 0, CAMEL_MESSAGE_SEEN); - return FALSE; -} - -static void -select_row (ETableScrolled *table, gpointer user_data) -{ - MessageList *message_list = user_data; - - gtk_idle_add (idle_select_row, message_list); -} - -static void -vfolder_subject(GtkWidget *w, FolderBrowser *fb) -{ - vfolder_gui_add_from_message(fb->mail_display->current_message, AUTO_SUBJECT, - fb->uri); -} - -static void -vfolder_sender(GtkWidget *w, FolderBrowser *fb) -{ - vfolder_gui_add_from_message(fb->mail_display->current_message, AUTO_FROM, - fb->uri); -} - -static void -vfolder_recipient(GtkWidget *w, FolderBrowser *fb) -{ - vfolder_gui_add_from_message(fb->mail_display->current_message, AUTO_TO, - fb->uri); -} - -static void -filter_subject(GtkWidget *w, FolderBrowser *fb) -{ - filter_gui_add_from_message(fb->mail_display->current_message, AUTO_SUBJECT); -} - -static void -filter_sender(GtkWidget *w, FolderBrowser *fb) -{ - filter_gui_add_from_message(fb->mail_display->current_message, AUTO_FROM); -} - -static void -filter_recipient(GtkWidget *w, FolderBrowser *fb) -{ - filter_gui_add_from_message(fb->mail_display->current_message, AUTO_TO); -} - -static gint -on_right_click (ETableScrolled *table, gint row, gint col, GdkEvent *event, MessageList *list) -{ - FolderBrowser *fb = list->parent_folder_browser; - extern CamelFolder *drafts_folder; - int enable_mask = 0; - EPopupMenu menu[] = { - { "Open in New Window", NULL, GTK_SIGNAL_FUNC (view_msg), 0 }, - { "Edit Message", NULL, GTK_SIGNAL_FUNC (edit_msg), 1 }, - { "Print Message", NULL, GTK_SIGNAL_FUNC (print_msg), 0 }, - { "", NULL, GTK_SIGNAL_FUNC (NULL), 0 }, - { "Reply to Sender", NULL, GTK_SIGNAL_FUNC (reply_to_sender), 0 }, - { "Reply to All", NULL, GTK_SIGNAL_FUNC (reply_to_all), 0 }, - { "Forward Message", NULL, GTK_SIGNAL_FUNC (forward_msg), 0 }, - { "", NULL, GTK_SIGNAL_FUNC (NULL), 0 }, - { "Delete Message", NULL, GTK_SIGNAL_FUNC (delete_msg), 0 }, - { "Move Message", NULL, GTK_SIGNAL_FUNC (move_msg), 0 }, - { "Copy Message", NULL, GTK_SIGNAL_FUNC (copy_msg), 0 }, - { "", NULL, GTK_SIGNAL_FUNC (NULL), 0 }, - { "VFolder on Subject", NULL, GTK_SIGNAL_FUNC (vfolder_subject), 2 }, - { "VFolder on Sender", NULL, GTK_SIGNAL_FUNC (vfolder_sender), 2 }, - { "VFolder on Recipients", NULL, GTK_SIGNAL_FUNC (vfolder_recipient), 2 }, - { "", NULL, GTK_SIGNAL_FUNC (NULL), 0 }, - { "Filter on Subject", NULL, GTK_SIGNAL_FUNC (filter_subject), 2 }, - { "Filter on Sender", NULL, GTK_SIGNAL_FUNC (filter_sender), 2 }, - { "Filter on Recipients", NULL, GTK_SIGNAL_FUNC (filter_recipient), 2 }, - { NULL, NULL, NULL, 0 } - }; - - if (fb->folder != drafts_folder) - enable_mask |= 1; - if (fb->mail_display->current_message == NULL) - enable_mask |= 2; - - e_popup_menu_run (menu, (GdkEventButton *)event, enable_mask, 0, fb); - - return TRUE; -} - -static void -on_double_click (ETableScrolled *table, gint row, MessageList *list) -{ - FolderBrowser *fb = list->parent_folder_browser; - - view_msg (NULL, fb); -} - -struct message_list_foreach_data { - MessageList *message_list; - MessageListForeachFunc callback; - gpointer user_data; -}; - -static void -mlfe_callback (int row, gpointer user_data) -{ - struct message_list_foreach_data *mlfe_data = user_data; - const char *uid; - - uid = get_message_uid (mlfe_data->message_list, row); - if (uid) { - mlfe_data->callback (mlfe_data->message_list, - uid, - mlfe_data->user_data); - } -} - -void -message_list_foreach (MessageList *message_list, - MessageListForeachFunc callback, - gpointer user_data) -{ - struct message_list_foreach_data mlfe_data; - - mlfe_data.message_list = message_list; - mlfe_data.callback = callback; - mlfe_data.user_data = user_data; - e_table_scrolled_selected_row_foreach (E_TABLE_SCROLLED (message_list->etable), - mlfe_callback, &mlfe_data); -} - -void -message_list_toggle_threads (BonoboUIHandler *uih, void *user_data, - const char *path) -{ - MessageList *ml = user_data; - - mail_config_set_thread_list (bonobo_ui_handler_menu_get_toggle_state (uih, path)); - mail_do_regenerate_messagelist (ml, ml->search); -} - -/* ** REGENERATE MESSAGELIST ********************************************** */ - -typedef struct regenerate_messagelist_input_s { - MessageList *ml; - char *search; -} regenerate_messagelist_input_t; - -typedef struct regenerate_messagelist_data_s { - GPtrArray *uids; -} regenerate_messagelist_data_t; - -static gchar *describe_regenerate_messagelist (gpointer in_data, gboolean gerund); -static void setup_regenerate_messagelist (gpointer in_data, gpointer op_data, CamelException *ex); -static void do_regenerate_messagelist (gpointer in_data, gpointer op_data, CamelException *ex); -static void cleanup_regenerate_messagelist (gpointer in_data, gpointer op_data, CamelException *ex); - -static gchar *describe_regenerate_messagelist (gpointer in_data, gboolean gerund) -{ - if (gerund) - return g_strdup ("Rebuilding message view"); - else - return g_strdup ("Rebuild message view"); -} - -static void setup_regenerate_messagelist (gpointer in_data, gpointer op_data, CamelException *ex) -{ - regenerate_messagelist_input_t *input = (regenerate_messagelist_input_t *) in_data; - - if (!IS_MESSAGE_LIST (input->ml)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No messagelist specified to regenerate"); - return; - } - - gtk_object_ref (GTK_OBJECT (input->ml)); - e_table_model_pre_change (input->ml->table_model); -} - -static void do_regenerate_messagelist (gpointer in_data, gpointer op_data, CamelException *ex) -{ - regenerate_messagelist_input_t *input = (regenerate_messagelist_input_t *) in_data; - regenerate_messagelist_data_t *data = (regenerate_messagelist_data_t *) op_data; - - if (input->ml->search) { - g_free (input->ml->search); - input->ml->search = NULL; - } - - if (input->ml->uid_rowmap) { - g_hash_table_foreach (input->ml->uid_rowmap, - free_key, NULL); - g_hash_table_destroy (input->ml->uid_rowmap); - } - input->ml->uid_rowmap = g_hash_table_new (g_str_hash, g_str_equal); - - mail_tool_camel_lock_up(); - - if (input->search) { - data->uids = camel_folder_search_by_expression (input->ml->folder, - input->search, ex); - if (camel_exception_is_set (ex)) { - mail_tool_camel_lock_down(); - return; - } - - input->ml->search = g_strdup (input->search); - } else - data->uids = camel_folder_get_uids (input->ml->folder); - - mail_tool_camel_lock_down(); -} - -static void cleanup_regenerate_messagelist (gpointer in_data, gpointer op_data, CamelException *ex) -{ - regenerate_messagelist_input_t *input = (regenerate_messagelist_input_t *) in_data; - regenerate_messagelist_data_t *data = (regenerate_messagelist_data_t *) op_data; - - ETreeModel *etm; - - etm = E_TREE_MODEL (input->ml->table_model); - - /* FIXME: free the old tree data */ - - if (data->uids == NULL) { /*exception*/ - gtk_object_unref (GTK_OBJECT (input->ml)); - return; - } - - if (mail_config_thread_list()) { - mail_do_thread_messages (input->ml, data->uids, - (gboolean) !(input->search), - build_tree); - } else { - build_flat (input->ml, data->uids); - - if (input->search) { - camel_folder_search_free (input->ml->folder, data->uids); - } else { - camel_folder_free_uids (input->ml->folder, data->uids); - } - } - - e_table_model_changed (input->ml->table_model); - select_row (NULL, input->ml); - g_free (input->search); - gtk_object_unref (GTK_OBJECT (input->ml)); -} - -static const mail_operation_spec op_regenerate_messagelist = -{ - describe_regenerate_messagelist, - sizeof (regenerate_messagelist_data_t), - setup_regenerate_messagelist, - do_regenerate_messagelist, - cleanup_regenerate_messagelist -}; - -void mail_do_regenerate_messagelist (MessageList *list, const gchar *search) -{ - regenerate_messagelist_input_t *input; - - input = g_new (regenerate_messagelist_input_t, 1); - input->ml = list; - input->search = g_strdup (search); - - mail_operation_queue (&op_regenerate_messagelist, input, TRUE); -} diff --git a/mail/message-list.h b/mail/message-list.h deleted file mode 100644 index 4f9719f30b..0000000000 --- a/mail/message-list.h +++ /dev/null @@ -1,118 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#ifndef _MESSAGE_LIST_H_ -#define _MESSAGE_LIST_H_ - -#include -#include "mail-types.h" -#include -#include -#include -#include "e-table/e-table-scrolled.h" -#include "e-table/e-table-simple.h" -#include "e-table/e-tree-simple.h" -#include "e-table/e-cell-text.h" -#include "e-table/e-cell-toggle.h" -#include "e-table/e-cell-checkbox.h" -#include "e-table/e-cell-tree.h" -#include "folder-browser.h" - - -#define MESSAGE_LIST_TYPE (message_list_get_type ()) -#define MESSAGE_LIST(o) (GTK_CHECK_CAST ((o), MESSAGE_LIST_TYPE, MessageList)) -#define MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_CAST((k), MESSAGE_LIST_TYPE, MessageListClass)) -#define IS_MESSAGE_LIST(o) (GTK_CHECK_TYPE ((o), MESSAGE_LIST_TYPE)) -#define IS_MESSAGE_LIST_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), MESSAGE_LIST_TYPE)) - -typedef struct _Renderer Renderer; - - -enum { - COL_ONLINE_STATUS, - COL_MESSAGE_STATUS, - COL_PRIORITY, - COL_ATTACHMENT, - COL_FROM, - COL_SUBJECT, - COL_SENT, - COL_RECEIVED, - COL_TO, - COL_SIZE, - - COL_LAST, - - /* Invisible columns */ - COL_DELETED, - COL_UNREAD, - COL_COLOUR, -}; - -struct _MessageList { - BonoboObject parent; - - /* the folder browser that contains the - * this message list */ - FolderBrowser *parent_folder_browser; - - ETableModel *table_model; - ETableHeader *header_model; - ETableCol *table_cols [COL_LAST]; - - ECell *render_text; - ECell *render_date; - ECell *render_online_status; - ECell *render_message_status; - ECell *render_priority; - ECell *render_attachment; - ECell *render_tree; - - ETreePath *tree_root; /* for tree view */ - - GtkWidget *etable; - - CamelFolder *folder; - - GHashTable *uid_rowmap; - - char *search; /* search string */ - - int cursor_row; - const char *cursor_uid; - - /* row-selection and seen-marking timers */ - guint idle_id, seen_id; -}; - -typedef struct { - BonoboObjectClass parent_class; -} MessageListClass; - -typedef void (*MessageListForeachFunc) (MessageList *message_list, - const char *uid, - gpointer user_data); - -typedef enum { - MESSAGE_LIST_SELECT_NEXT = 1, - MESSAGE_LIST_SELECT_PREVIOUS = -1 -} MessageListSelectDirection; - -GtkType message_list_get_type (void); -BonoboObject *message_list_new (FolderBrowser *parent_folder_browser); -void message_list_set_folder (MessageList *message_list, - CamelFolder *camel_folder); -GtkWidget *message_list_get_widget (MessageList *message_list); - -void message_list_foreach (MessageList *message_list, - MessageListForeachFunc callback, - gpointer user_data); - -void message_list_select (MessageList *message_list, - int base_row, - MessageListSelectDirection direction, - guint32 flags, guint32 mask); - -extern gboolean threaded_view; -void message_list_toggle_threads (BonoboUIHandler *uih, - void *user_data, - const char *path); - -#endif /* _MESSAGE_LIST_H_ */ diff --git a/mail/message-thread.c b/mail/message-thread.c deleted file mode 100644 index c8ed152e71..0000000000 --- a/mail/message-thread.c +++ /dev/null @@ -1,942 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2000 Helix Code Inc. - * - * Authors: Michael Zucchi - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA - */ - -#include "camel/camel.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#include "message-thread.h" -#include "mail-tools.h" -#include "mail-threads.h" - -#define d(x) -/*#define LEAKDEBUG*/ - -/* **************************************** */ -/* mem leak debug stuff */ - -#ifdef LEAKDEBUG - -static GHashTable *allocedht = NULL; - -#define EXISTS (1 << 0) -#define WALKED (1 << 1) -#define FREED (1 << 2) -#define AL_401 (1 << 3) -#define AL_541 (1 << 4) -#define AL_546 (1 << 5) -#define AL_569 (1 << 6) -#define LINKED (1 << 7) -#define EXCUSED (1 << 8) - -#define GITP(x) GINT_TO_POINTER(x) -#define GPTI(x) GPOINTER_TO_INT(x) - -static struct _container * -alloc_container (int where) -{ - struct _container *c; - - c = g_new0 (struct _container, 1); - - if (!allocedht) - allocedht = g_hash_table_new (g_direct_hash, g_direct_equal); - - g_hash_table_insert (allocedht, c, GITP(EXISTS|where)); - return c; -} - -static void -free_container (struct _container **c) -{ - gpointer flags; - - memset ((*c), 0, sizeof (struct _container)); - if ((flags = g_hash_table_lookup (allocedht, (*c))) == NULL) - printf ("** threading mem debug: freeing unalloced entry %p?\n", (*c)); - g_hash_table_insert (allocedht, (*c), GITP(GPTI(flags)|FREED)); - g_free ((*c)); - (*c) = NULL; -} - -static void -cont_print (gpointer key, gpointer value, gpointer user) -{ - struct _container *c = (struct _container *) key; - char *line; - - if (GPTI(value) & FREED) - return; - - if (GPTI(value) & AL_401) - line = "401"; - else if (GPTI(value) & AL_541) - line = "541"; - else if (GPTI(value) & AL_546) - line = "546"; - else if (GPTI(value) & AL_569) - line = "569"; - else - line = "???"; - - printf (" %p : %s %s %s %s %s", - c, - GPTI(value) & FREED ? "freed" : "unfrd", - GPTI(value) & WALKED ? "walked" : "unwlkd", - line, - GPTI(value) & LINKED ? "linked" : "unlnkd", - GPTI(value) & EXCUSED ? "excused" : "unexcsd"); - - if ((GPTI(value) & FREED) == 0) { - gpointer oth_flags; - - printf (" : %p %p %p : \"%s\" \"%s\" %d %d", - c->next, c->parent, c->child, - c->message ? c->message->subject : "(null message)", - c->root_subject ? c->root_subject : "(null root-subject)", - c->re, c->order); - - if (c->next) { - oth_flags = g_hash_table_lookup (allocedht, c->next); - - printf ("\n next : %p : %s %s %s", - c->next, - GPTI(oth_flags) & WALKED ? "walked" : "unwlkd", - GPTI(oth_flags) & LINKED ? "linked" : "unlnkd", - GPTI(oth_flags) & EXCUSED ? "excused" : "unexcsd"); - } - - if (c->parent) { - oth_flags = g_hash_table_lookup (allocedht, c->parent); - - printf ("\n prnt : %p : %s %s %s", - c->parent, - GPTI(oth_flags) & WALKED ? "walked" : "unwlkd", - GPTI(oth_flags) & LINKED ? "linked" : "unlnkd", - GPTI(oth_flags) & EXCUSED ? "excused" : "unexcsd"); - } - - if (c->child) { - oth_flags = g_hash_table_lookup (allocedht, c->child); - - printf ("\n chld : %p : %s %s %s", - c->child, - GPTI(oth_flags) & WALKED ? "walked" : "unwlkd", - GPTI(oth_flags) & LINKED ? "linked" : "unlnkd", - GPTI(oth_flags) & EXCUSED ? "excused" : "unexcsd"); - } - - } - - printf ("\n"); - -} - -static void -make_excuses (gpointer key, gpointer value, gpointer user) -{ - struct _container *c; - gpointer chldflags; - gpointer nextflags; - - if (GPTI(value) & FREED) - return; - - c = (struct _container *) key; - - if (c->next) { - nextflags = g_hash_table_lookup (allocedht, c->next); - - if ((GPTI(nextflags) & EXCUSED) == 0) { - g_hash_table_insert (allocedht, c->next, GITP(GPTI(nextflags)|EXCUSED)); - ((gint *)user) = 1; - } - } - - if (c->child) { - chldflags = g_hash_table_lookup (allocedht, c->child); - - if ((GPTI(chldflags) & EXCUSED) == 0) { - g_hash_table_insert (allocedht, c->child, GITP(GPTI(chldflags)|EXCUSED)); - ((gint *)user) = 1; - } - } -} - -static void -print_containers (void) -{ - gint hit; - - do { - hit = 0; - g_hash_table_foreach (allocedht, make_excuses, &hit); - } while (hit); - - printf ("List of container stats:\n"); - g_hash_table_foreach (allocedht, cont_print, NULL); - printf ("End of list.\n"); -} - -static void -walk_containers (struct _container *head) -{ - gpointer flags; - - while (head) { - if (head->child) - walk_containers (head->child); - if ((flags = g_hash_table_lookup (allocedht, head)) == NULL) { - printf ("*** walk_containers : bad pointer %p\n", head); - } else { - g_hash_table_insert (allocedht, head, GITP(GPTI(flags)|WALKED)); - } - - head = head->next; - } -} - -static void -link_container (struct _container *c) -{ - gpointer flags; - - if ((flags = g_hash_table_lookup (allocedht, c)) == NULL) - printf ("** threading mem debug: linking unalloced entry %p?\n", c); - g_hash_table_insert (allocedht, c, GITP(GPTI(flags)|LINKED)); -} - -#else -#define alloc_container(w) (g_new0 (struct _container, 1)) -#define free_container(c) g_free (*(c)) -#define print_containers() -#define walk_containers(c) -#define link_container(c) -#endif - -/* **************************************** */ - -static struct _container *thread_messages(CamelFolder *folder, GPtrArray *uids); -static void thread_messages_free(struct _container *); - -/* for debug only */ -int dump_tree(struct _container *c, int depth); - -static void -container_add_child(struct _container *node, struct _container *child) -{ - d(printf("\nAdding child %p to parent %p \n", child, node)); - child->next = node->child; - node->child = child; - child->parent = node; -} - -#if 0 -static void -container_unparent_child(struct _container *child) -{ - struct _container *c, *node; - - /* are we unparented? */ - if (child->parent == NULL) { - return; - } - - /* else remove child from its existing parent, and reparent */ - node = child->parent; - c = (struct _container *)&node->child; - d(printf("scanning children:\n")); - while (c->next) { - d(printf(" %p\n", c)); - if (c->next==child) { - d(printf("found node %p\n", child)); - c->next = c->next->next; - child->parent = NULL; - return; - } - c = c->next; - } - - printf("DAMN, we shouldn't be here!\n"); -} -#endif - -static void -container_parent_child(struct _container *parent, struct _container *child) -{ - struct _container *c, *node, **prev; - - /* are we already the right parent? */ - if (child->parent == parent) - return; - - /* are we unparented? */ - if (child->parent == NULL) { - container_add_child(parent, child); - return; - } - - /* check for trying to make my child my parent */ - for (c = parent; c; c = c->parent) { - if (c == child) { - d(printf("AIIE: trying to lop off hunk of nodes!\n")); - return; - } - } - - /* else remove child from its existing parent, and reparent */ - node = child->parent; - - /* c = (struct _container *)&node->child; - *d(printf("scanning children:\n")); - *while (c->next) { - * d(printf(" %p\n", c)); - * if (c->next==child) { - * d(printf("found node %p\n", child)); - * c->next = c->next->next; - * child->parent = NULL; - * container_add_child(parent, child); - * return; - * } - * c = c->next; - *} - */ - - d(printf("PKGW deparent child")); - c = node->child; - prev = &(node->child); - while (c) { - d(printf (" %p\n", c)); - - if (c == child) { - d(printf (" hit child %p\n", child)); - (*prev) = c->next; - c->next = NULL; - c->parent = NULL; - container_add_child (parent, child); - return; - } - - prev = &(c->next); - c = c->next; - } - - printf("DAMN, we shouldn't be here!\n"); -} - -static void -prune_empty(struct _container **cp) -{ - struct _container *child, *next, *c, *lastc; - - /* yes, this is intentional */ - lastc = (struct _container *)cp; - while (lastc->next) { - c = lastc->next; - - d(printf("checking message %p %p (%s)\n", c, - c->message, c->message?c->message->message_id:"")); - if (c->message == NULL) { - if (c->child == NULL) { - d(printf("removing empty node\n")); - lastc->next = c->next; - free_container (&c); - continue; - } - if (c->parent || c->child->next==0) { - d(printf("promoting child\n")); - lastc->next = c->next; /* remove us */ - child = c->child; - while (child) { - next = child->next; - - child->parent = c->parent; - child->next = lastc->next; - lastc->next = child; - - child = next; - } - free_container (&c); - continue; - } - } - prune_empty(&c->child); - lastc = c; - } -} - -static void -hashloop(void *key, void *value, void *data) -{ - struct _container *c = value; - struct _container *tail = data; - - if (c->parent == NULL) { - c->next = tail->next; - tail->next = c; - link_container(c); - } -} - -static char * -get_root_subject(struct _container *c, int *re) -{ - char *s, *p; - struct _container *scan; - - s = NULL; - *re = FALSE; - if (c->message) - s = c->message->subject; - else { - /* one of the children will always have a message */ - scan = c->child; - while (scan) { - if (scan->message) { - s = scan->message->subject; - break; - } - scan = scan->next; - } - } - if (s != NULL) { - while (*s) { - while (isspace(*s)) - s++; - if (s[0] == 0) - break; - if ((s[0] == 'r' || s[0]=='R') - && (s[1] == 'e' || s[1]=='E')) { - p = s+2; - while (isdigit(*p) || (ispunct(*p) && (*p != ':'))) - p++; - if (*p==':') { - *re = TRUE; - s = p+1; - } else - break; - } else - break; - } - if (*s) - return s; - } - return NULL; -} - -/* this is pretty slow, but not used often */ -static void -remove_node(struct _container **list, struct _container *node, struct _container **clast) -{ - struct _container *c; - - /* this is intentional, even if it looks funny */ - c = (struct _container *)list; - while (c->next) { - if (c->next == node) { - if (clast && *clast == c->next) - *clast = c; - c->next = c->next->next; - break; - } - c = c->next; - } -} - -static void -group_root_set(struct _container **cp) -{ - GHashTable *subject_table = g_hash_table_new(g_str_hash, g_str_equal); - struct _container *c, *clast, *scan, *container; - - /* gather subject lines */ - d(printf("gathering subject lines\n")); - clast = (struct _container *)cp; - c = clast->next; - while (c) { - c->root_subject = get_root_subject(c, &c->re); - if (c->root_subject) { - container = g_hash_table_lookup(subject_table, c->root_subject); - if (container == NULL - || (container->message == NULL && c->message) - || (container->re == TRUE && !c->re)) { - g_hash_table_insert(subject_table, c->root_subject, c); - } - } - c = c->next; - } - - /* merge common subjects? */ - clast = (struct _container *)cp; - while (clast->next) { - c = clast->next; - d(printf("checking %p %s\n", c, c->root_subject)); - if (c->root_subject - && (container = g_hash_table_lookup(subject_table, c->root_subject)) - && (container != c)) { - d(printf(" matching %p %s\n", container, container->root_subject)); - if (c->message == NULL && container->message == NULL) { - d(printf("merge containers children\n")); - /* steal the children from c onto container, and unlink c */ - scan = (struct _container *)&container->child; - while (scan->next) - scan = scan->next; - scan->next = c->child; - clast->next = c->next; - continue; - } if (c->message == NULL && container->message != NULL) { - d(printf("container is non-empty parent\n")); - remove_node(cp, container, &clast); - container_add_child(c, container); - } else if (c->message != NULL && container->message == NULL) { - d(printf("container is empty child\n")); - clast->next = c->next; - container_add_child(container, c); - continue; - } else if (c->re && !container->re) { - d(printf("container is re\n")); - clast->next = c->next; - container_add_child(container, c); - continue; - } else if (!c->re && container->re) { - d(printf("container is not re\n")); - remove_node(cp, container, &clast); - container_add_child(c, container); - } else if (c->re && container->re) { - d(printf("subjects are common %p and %p\n", c, container)); - - remove_node(cp, container, &clast); - remove_node(cp, c, &clast); - - scan = alloc_container(AL_401); - scan->root_subject = c->root_subject; - scan->re = c->re && container->re; - scan->next = c->next; - clast->next = scan; - container_add_child(scan, c); - container_add_child(scan, container); - clast = scan; - g_hash_table_insert(subject_table, scan->root_subject, scan); - continue; - } - } - clast = c; - } - g_hash_table_destroy(subject_table); -} - -int -dump_tree(struct _container *c, int depth) -{ - char *p; - int count=0; - - p = alloca(depth*2+1); - memset(p, ' ', depth*2); - p[depth*2] = 0; - - while (c) { - if (c->message) { - printf("%s %p Subject: %s <%s>\n", p, c, c->message->subject, c->message->message_id); - count += 1; - } else { - printf("%s %p \n", p, c); - } - if (c->child) - count += dump_tree(c->child, depth+1); - c = c->next; - } - return count; -} - -static void thread_messages_free(struct _container *c) -{ - struct _container *n; - - /* FIXME: ok, for some reason this doesn't work .. investigate later ... */ - - while (c) { - n = c->next; - if (c->child) - thread_messages_free(c->child); /* free's children first */ - free_container (&c); - c = n; - } -} - -static int -sort_node(const void *a, const void *b) -{ - const struct _container *a1 = ((struct _container **)a)[0]; - const struct _container *b1 = ((struct _container **)b)[0]; - - /* if we have no message, it must be a dummy node, which - also means it must have a child, just use that as the - sort data (close enough?) */ - if (a1->message == NULL) - a1 = a1->child; - if (b1->message == NULL) - b1 = b1->child; - if (a1->order == b1->order) - return 0; - if (a1->order < b1->order) - return 1; - else - return -1; -} - -static void -sort_thread(struct _container **cp) -{ - struct _container *c, *head, **carray; - int size=0; - - c = *cp; - while (c) { - /* sort the children while we're at it */ - if (c->child) - sort_thread(&c->child); - size++; - c = c->next; - } - if (size<2) - return; - carray = alloca(size*sizeof(struct _container *)); - c = *cp; - size=0; - while (c) { - carray[size] = c; - c = c->next; - size++; - } - qsort(carray, size, sizeof(struct _container *), sort_node); - size--; - head = carray[size]; - head->next = NULL; - size--; - do { - c = carray[size]; - c->next = head; - head = c; - size--; - } while (size>=0); - *cp = head; -} - -static struct _container * -thread_messages(CamelFolder *folder, GPtrArray *uids) -{ - GHashTable *id_table, *no_id_table; - int i; - struct _container *c, *p, *child, *head, *container; - struct _header_references *ref; - - id_table = g_hash_table_new(g_str_hash, g_str_equal); - no_id_table = g_hash_table_new(NULL, NULL); - for (i=0;ilen;i++) { - const CamelMessageInfo *mi; - mail_tool_camel_lock_up (); - mi = camel_folder_get_message_info (folder, uids->pdata[i]); - mail_tool_camel_lock_down (); - - if (mi == NULL) { - g_warning("Folder doesn't contain uid %s", (char *)uids->pdata[i]); - continue; - } - - if (mi->message_id) { - d(printf("doing : %s\n", mi->message_id)); - c = g_hash_table_lookup(id_table, mi->message_id); - if (!c) { - c = alloc_container(AL_541); - g_hash_table_insert(id_table, mi->message_id, c); - } - } else { - d(printf("doing : (no message id)\n")); - c = alloc_container(AL_546); - g_hash_table_insert(no_id_table, (void *)mi, c); - } - - c->message = mi; - c->order = i; - container = c; - ref = mi->references; - p = NULL; - child = container; - head = NULL; - d(printf("references:\n")); - while (ref) { - if (ref->id == NULL) { - printf("ref missing id!?\n"); - ref = ref->next; - continue; - } - - d(printf("looking up reference: %s\n", ref->id)); - c = g_hash_table_lookup(id_table, ref->id); - if (c == NULL) { - d(printf("not found\n")); - c = alloc_container(AL_569); - g_hash_table_insert(id_table, ref->id, c); - } - if (c!=child) - container_parent_child(c, child); - child = c; - if (head == NULL) - head = c; - ref = ref->next; - } - } - - d(printf("\n\n")); - /* build a list of root messages (no parent) */ - head = NULL; - g_hash_table_foreach(id_table, hashloop, &head); - g_hash_table_foreach(no_id_table, hashloop, &head); - - g_hash_table_destroy(id_table); - g_hash_table_destroy(no_id_table); - - /* remove empty parent nodes */ - prune_empty(&head); - - /* find any siblings which missed out */ - group_root_set(&head); - -#if 0 - printf("finished\n"); - i = dump_tree(head, 0); - printf("%d count, %d items in tree\n", uids->len, i); -#endif - - sort_thread(&head); - return head; -} - -/* ** THREAD MESSAGES ***************************************************** */ - -typedef struct thread_messages_input_s { - MessageList *ml; - GPtrArray *uids; - gboolean use_camel_uidfree; - void (*build) (MessageList *, struct _container *); -} thread_messages_input_t; - -typedef struct thread_messages_data_s { - struct _container *container; -} thread_messages_data_t; - -static gchar *describe_thread_messages (gpointer in_data, gboolean gerund); -static void setup_thread_messages (gpointer in_data, gpointer op_data, CamelException *ex); -static void do_thread_messages (gpointer in_data, gpointer op_data, CamelException *ex); -static void cleanup_thread_messages (gpointer in_data, gpointer op_data, CamelException *ex); - -static gchar *describe_thread_messages (gpointer in_data, gboolean gerund) -{ - if (gerund) - return g_strdup ("Threading message list"); - else - return g_strdup ("Thread message list"); -} - -static void setup_thread_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - thread_messages_input_t *input = (thread_messages_input_t *) in_data; - - if (!IS_MESSAGE_LIST (input->ml)) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No messagelist to thread was provided to thread_messages"); - return; - } - - if (!input->uids) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No uids were provided to thread_messages"); - return; - } - - if (!input->build) { - camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM, - "No build callback provided to thread_messages"); - return; - } - - gtk_object_ref (GTK_OBJECT (input->ml)); -} - -static void do_thread_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - thread_messages_input_t *input = (thread_messages_input_t *) in_data; - thread_messages_data_t *data = (thread_messages_data_t *) op_data; - - data->container = thread_messages (input->ml->folder, input->uids); -} - -static void cleanup_thread_messages (gpointer in_data, gpointer op_data, CamelException *ex) -{ - thread_messages_input_t *input = (thread_messages_input_t *) in_data; - thread_messages_data_t *data = (thread_messages_data_t *) op_data; - - (input->build) (input->ml, data->container); - walk_containers (data->container); - thread_messages_free (data->container); - - print_containers(); - - if (input->use_camel_uidfree) { - mail_tool_camel_lock_up (); - camel_folder_free_uids (input->ml->folder, input->uids); - mail_tool_camel_lock_down (); - } else { - g_ptr_array_add (input->uids, NULL); - g_strfreev ((char **)input->uids->pdata); - g_ptr_array_free (input->uids, FALSE); - } - - gtk_object_unref (GTK_OBJECT (input->ml)); -} - -static const mail_operation_spec op_thread_messages = -{ - describe_thread_messages, - sizeof (thread_messages_data_t), - setup_thread_messages, - do_thread_messages, - cleanup_thread_messages -}; - -void mail_do_thread_messages (MessageList *ml, GPtrArray *uids, - gboolean use_camel_uidfree, - void (*build) (MessageList *, - struct _container *)) -{ - thread_messages_input_t *input; - - input = g_new (thread_messages_input_t, 1); - input->ml = ml; - input->uids = uids; - input->use_camel_uidfree = use_camel_uidfree; - input->build = build; - - mail_operation_queue (&op_thread_messages, input, TRUE); -} - -/* ************************************************************************ */ - -#ifdef STANDALONE - -static char * -auth_callback(char *prompt, gboolean secret, - CamelService *service, char *item, - CamelException *ex) -{ - printf ("auth_callback called: %s\n", prompt); - return NULL; -} - -int -main (int argc, char**argv) -{ - CamelSession *session; - CamelException *ex; - CamelStore *store; - gchar *store_url = "mbox:///home/notzed/evolution/local/Inbox"; - CamelFolder *folder; - CamelMimeMessage *message; - GList *uid_list; - GPtrArray *summary; - - gtk_init (&argc, &argv); - camel_init (); - ex = camel_exception_new (); - - session = camel_session_new (auth_callback); - store = camel_session_get_store (session, store_url, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_session_get_store\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - folder = camel_store_get_folder (store, "mbox", TRUE, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_store_get_folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - -#if 0 - camel_folder_open (folder, FOLDER_OPEN_RW, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught when trying to open the folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } -#endif - - summary = camel_folder_get_summary(folder); - thread_messages((CamelMessageInfo **)summary->pdata, summary->len); - - return 0; -} - -#endif - -/* - - msgid: d - references: a b c - - msgid: f - references: c d - - msgid: e - references: c - - a - \ - b - \ - c - \ - d - |\ - e f - */ -/* - lookup d - create new node d - child = d - loop on c b a - lookup node? - if no node, create node - add child to node - child = node - endloop - - */ diff --git a/mail/message-thread.h b/mail/message-thread.h deleted file mode 100644 index 5c4be91ade..0000000000 --- a/mail/message-thread.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _MESSAGE_THREAD_H -#define _MESSAGE_THREAD_H - -#include -#include "message-list.h" - -struct _container { - struct _container *next, - *parent, - *child; - const CamelMessageInfo *message; - char *root_subject; /* cached root equivalent subject */ - int re; /* re version of subject? */ - int order; /* the order of this message in the folder */ -}; - -void mail_do_thread_messages (MessageList *ml, GPtrArray *uids, - gboolean use_camel_uidfree, - void (*build) (MessageList *, - struct _container *)); - -#endif /* !_MESSAGE_THREAD_H */ - diff --git a/mail/session.c b/mail/session.c deleted file mode 100644 index b76e096abb..0000000000 --- a/mail/session.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * session.c: handles the session information and resource manipulation - * - * Author: - * Miguel de Icaza (miguel@gnu.org) - * - * (C) 2000 Helix Code, Inc. http://www.helixcode.com - */ -#include -#include -#include "mail.h" -#include "mail-threads.h" - -CamelSession *session; -GHashTable *passwords; - -static void -request_callback (gchar *string, gpointer data) -{ - char **ans = data; - - if (string) - *ans = g_strdup(string); - else - *ans = NULL; -} - -char * -mail_request_dialog (const char *prompt, gboolean secret, const char *key, - gboolean async) -{ - GtkWidget *dialog; - - char *ans; - - if (!passwords) - passwords = g_hash_table_new (g_str_hash, g_str_equal); - - ans = g_hash_table_lookup (passwords, key); - if (ans) - return g_strdup (ans); - - if (!async) { - dialog = gnome_request_dialog (secret, prompt, NULL, 0, - request_callback, &ans, NULL); - if (!dialog) - return NULL; - GDK_THREADS_ENTER (); - if (gnome_dialog_run_and_close (GNOME_DIALOG (dialog)) == -1 || - ans == NULL) { - GDK_THREADS_LEAVE (); - return NULL; - } - - GDK_THREADS_LEAVE (); - } else { - if (!mail_op_get_password ((char *) prompt, secret, &ans)) - return NULL; - } - - g_hash_table_insert (passwords, g_strdup (key), g_strdup (ans)); - return ans; -} - -static char * -auth_callback (CamelAuthCallbackMode mode, char *data, gboolean secret, - CamelService *service, char *item, CamelException *ex) -{ - char *key, *ans, *url; - - if (!passwords) - passwords = g_hash_table_new (g_str_hash, g_str_equal); - - url = camel_url_to_string (service->url, FALSE); - key = g_strdup_printf ("%s:%s", url, item); - g_free (url); - - if (mode == CAMEL_AUTHENTICATOR_TELL) { - if (!data) { - g_hash_table_remove (passwords, key); - g_free (key); - } else { - gpointer old_key, old_data; - - if (g_hash_table_lookup_extended (passwords, key, - &old_key, - &old_data)) { - g_hash_table_insert (passwords, old_key, data); - g_free (old_data); - g_free (key); - } else - g_hash_table_insert (passwords, key, data); - } - - return NULL; - } - - ans = mail_request_dialog (data, secret, key, TRUE); - g_free (key); - - if (!ans) { - camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, - "User canceled operation."); - } - - return ans; -} - -/* ******************** */ - -typedef struct _timeout_data_s { - CamelTimeoutCallback cb; - gpointer camel_data; - gboolean result; -} timeout_data_t; - -static gchar * -describe_camel_timeout (gpointer in_data, gboolean gerund) -{ - /* FIXME this is so wrong */ - - if (gerund) - return g_strdup ("Keeping connection alive"); - else - return g_strdup ("Keep connection alive"); -} - -static void -noop_camel_timeout (gpointer in_data, gpointer op_data, CamelException *ex) -{ -} - -static void -do_camel_timeout (gpointer in_data, gpointer op_data, CamelException *ex) -{ - timeout_data_t *td = (timeout_data_t *) in_data; - - td->result = (td->cb) (td->camel_data); -} - -static const mail_operation_spec spec_camel_timeout = -{ - describe_camel_timeout, - 0, - noop_camel_timeout, - do_camel_timeout, - noop_camel_timeout -}; - -static gboolean -camel_timeout (gpointer data) -{ - timeout_data_t *td = (timeout_data_t *) data; - - if (td->result == FALSE) { - g_free (td); - return FALSE; - } - - mail_operation_queue (&spec_camel_timeout, td, FALSE); - return TRUE; -} - -static guint -register_callback (guint32 interval, CamelTimeoutCallback cb, gpointer camel_data) -{ - timeout_data_t *td; - - /* We do this because otherwise the timeout can get called - * more often than the dispatch thread can get rid of it, - * leading to timeout calls piling up, and we don't have a - * good way to watch the return values. It's not cool. - */ - g_return_val_if_fail (interval > 1000, 0); - - td = g_new (timeout_data_t, 1); - td->result = TRUE; - td->cb = cb; - td->camel_data = camel_data; - - return gtk_timeout_add_full (interval, camel_timeout, NULL, - td, g_free); -} - -static gboolean -remove_callback (guint handle) -{ - gtk_timeout_remove (handle); - return TRUE; -} - -/* ******************** */ - -void -session_init (void) -{ - camel_init (); - session = camel_session_new (auth_callback, register_callback, - remove_callback); -} - -static gboolean -free_entry (gpointer key, gpointer value, gpointer user_data) -{ - g_free (key); - memset (value, 0, strlen (value)); - g_free (value); - return TRUE; -} - -void -forget_passwords (BonoboUIHandler *uih, void *user_data, const char *path) -{ - g_hash_table_foreach_remove (passwords, free_entry, NULL); -} diff --git a/mail/test-mail.c b/mail/test-mail.c deleted file mode 100644 index ecf8c5eda5..0000000000 --- a/mail/test-mail.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Tests the mail summary display bonobo component - * - * Author: - * Miguel de Icaza (miguel@kernel.org) - * - * (C) 2000 Helix Code, Inc. - */ - -#include - -#include -#include -#include - -static guint -create_container (void) -{ - GtkWidget *window, *control; - BonoboUIHandler *uih; - - gdk_rgb_init (); - - gtk_widget_set_default_colormap (gdk_rgb_get_cmap ()); - gtk_widget_set_default_visual (gdk_rgb_get_visual ()); - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_set_usize (GTK_WIDGET (window), 640, 480); - gtk_widget_show (GTK_WIDGET (window)); - - uih = bonobo_ui_handler_new (); - - control = bonobo_widget_new_control ("OAFIID:control:evolution-mail:833d5a71-a201-4a0e-b7e6-5475c5c4cb45", - bonobo_object_corba_objref (BONOBO_OBJECT (uih))); - - if (control == NULL){ - printf ("Could not launch mail control\n"); - exit (1); - } - gtk_container_add (GTK_CONTAINER (window), control); - - gtk_widget_show (window); - gtk_widget_show (control); - - - return FALSE; -} - -int -main (int argc, char *argv []) -{ - gnome_init ("sample-control-container", "1.0", argc, argv); - oaf_init (argc, argv); - - if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) - g_error ("Could not initialize Bonobo\n"); - - gtk_idle_add ((GtkFunction) create_container, NULL); - - /* - * Main loop - */ - bonobo_main (); - - return 0; -} - - - - - diff --git a/mail/test-thread.c b/mail/test-thread.c deleted file mode 100644 index eddf9dd7c8..0000000000 --- a/mail/test-thread.c +++ /dev/null @@ -1,230 +0,0 @@ -/* Tests the multithreaded UI code */ - -#include "config.h" -#include -#include -#include -#include -#include -#include "mail-threads.h" - -static gchar *desc_1 (gpointer in, gboolean gerund); -static void op_1( gpointer in, gpointer op, CamelException *ex ); -static gchar *desc_2 (gpointer in, gboolean gerund); -static void op_2( gpointer in, gpointer op, CamelException *ex ); -static gchar *desc_3 (gpointer in, gboolean gerund); -static void op_3( gpointer in, gpointer op, CamelException *ex ); -static gchar *desc_4 (gpointer in, gboolean gerund); -static void op_4( gpointer in, gpointer op, CamelException *ex ); -static gchar *desc_5 (gpointer in, gboolean gerund); -static void op_5( gpointer in, gpointer op, CamelException *ex ); -static gchar *desc_6 (gpointer in, gboolean gerund); -static gchar *desc_7 (gpointer in, gboolean gerund); -static gchar *desc_8 (gpointer in, gboolean gerund); -static void done( gpointer in, gpointer op, CamelException *ex ); -static void exception( gpointer in, gpointer op, CamelException *ex ); -static gboolean queue_ops( void ); - -const mail_operation_spec spec1 = { desc_1, 0, NULL, op_1, done }; -const mail_operation_spec spec2 = { desc_2, 0, NULL, op_2, done }; -const mail_operation_spec spec3 = { desc_3, 0, NULL, op_3, done }; -const mail_operation_spec spec4 = { desc_4, 0, NULL, op_4, NULL }; -const mail_operation_spec spec5 = { desc_5, 0, NULL, op_5, done }; -const mail_operation_spec spec6 = { desc_6, 0, exception, op_4, NULL }; -const mail_operation_spec spec7 = { desc_7, 0, NULL, exception, NULL }; -const mail_operation_spec spec8 = { desc_8, 0, NULL, op_4, exception }; - -static gboolean queue_ops( void ) -{ - int i; - - g_message( "Top of queue_ops" ); - - mail_operation_queue( &spec1, "op1 finished", FALSE ); - mail_operation_queue( &spec2, "op2 finished", FALSE ); - mail_operation_queue( &spec3, "op3 finished", FALSE ); - - for( i = 0; i < 3; i++ ) { - mail_operation_queue( &spec4, GINT_TO_POINTER( i ), FALSE ); - } - - g_message( "Waiting for finish..." ); - mail_operation_wait_for_finish(); - - g_message( "Ops done -- queue some more!" ); - - mail_operation_queue( &spec1, "done a second time", FALSE ); - - g_message( "Waiting for finish again..." ); - mail_operation_wait_for_finish(); - - g_message( "Ops done -- more, more!" ); - - mail_operation_queue( &spec5, "passwords stolen", FALSE ); - - for( i = 0; i < 3; i++ ) { - mail_operation_queue( &spec4, GINT_TO_POINTER( i ), FALSE ); - } - - mail_operation_queue( &spec6, NULL, FALSE ); - mail_operation_queue( &spec7, NULL, FALSE ); - mail_operation_queue( &spec8, NULL, FALSE ); - - g_message( "Waiting for finish for the last time..." ); - mail_operations_terminate(); - g_message( "Ops done again. Exiting 0" ); - gtk_exit( 0 ); - return FALSE; -} - -static void exception( gpointer in, gpointer op, CamelException *ex ) -{ - camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, "I don't feel like it."); -} - -static void op_1( gpointer in, gpointer op, CamelException *ex ) -{ - gfloat pct; - - mail_op_show_progressbar(); - mail_op_set_message( "Watch the progress bar!" ); - - for( pct = 0.0; pct < 1.0; pct += 0.2 ) { - sleep( 1 ); - mail_op_set_percentage( pct ); - } -} - -static void op_2( gpointer in, gpointer op, CamelException *ex ) -{ - int i; - - mail_op_hide_progressbar(); - for( i = 5; i > 0; i-- ) { - mail_op_set_message( "%d", i ); - sleep( 1 ); - } - - mail_op_set_message( "BOOOM!" ); - sleep( 1 ); -} - -static void op_3( gpointer in, gpointer op, CamelException *ex ) -{ - gfloat pct; - - mail_op_show_progressbar(); - mail_op_set_message( "Frobulating the foosamatic" ); - - for( pct = 0.0; pct < 0.3; pct += 0.1 ) { - mail_op_set_percentage( pct ); - sleep( 1 ); - } - - mail_op_error( "Oh no! The foosamatic was booby-trapped!" ); - sleep( 1 ); -} - -static void op_4( gpointer in, gpointer op, CamelException *ex ) -{ - mail_op_hide_progressbar(); - mail_op_set_message( "Filler # %d", GPOINTER_TO_INT( in ) ); - sleep( 1 ); -} - -static void op_5( gpointer in, gpointer op, CamelException *ex ) -{ - gchar *pass; - gboolean ret; - - mail_op_show_progressbar(); - mail_op_set_percentage( 0.5 ); - - ret = mail_op_get_password( "What is your super-secret password?", TRUE, &pass ); - - if( ret == FALSE ) - mail_op_set_message( "Oh no, you cancelled! : %s", pass ); - else - mail_op_set_message( "\"%s\", you said?", pass ); - - sleep( 1 ); -} - -static void done( gpointer in, gpointer op, CamelException *ex ) -{ - g_message( "Operation done: %s", (gchar *) in ); -} - -static gchar *desc_1 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Showing the Crawling Progress Bar of Doom"); - else - return g_strdup ("Progress Bar"); -} - -static gchar *desc_2 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Exploring the Mysterious Message Setter"); - else - return g_strdup ("Explore"); -} - -static gchar *desc_3 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Dare the Error Dialog of No Return"); - else - return g_strdup ("Dare"); -} - -static gchar *desc_4 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup_printf ("Filling Queue Space -- %d", GPOINTER_TO_INT (in)); - else - return g_strdup_printf ("Filler -- %d", GPOINTER_TO_INT (in)); -} - -static gchar *desc_5 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Stealing your Password"); - else - return g_strdup ("The Dastardly Password Stealer"); -} - -static gchar *desc_6 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Setting exception on setup"); - else - return g_strdup ("Exception on setup"); -} - -static gchar *desc_7 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Setting exception in process"); - else - return g_strdup ("Exception coming soon"); -} - -static gchar *desc_8 (gpointer in, gboolean gerund) -{ - if (gerund) - return g_strdup ("Setting exception in cleanup"); - else - return g_strdup ("Exception in cleanup"); -} - - -int main( int argc, char **argv ) -{ - g_thread_init( NULL ); - gnome_init( "test-thread", "0.0", argc, argv ); - gtk_idle_add( (GtkFunction) queue_ops, NULL ); - gtk_main(); - return 0; -} diff --git a/notes/.cvsignore b/notes/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/notes/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/notes/GNOME_Evolution_Notes.oaf.in b/notes/GNOME_Evolution_Notes.oaf.in deleted file mode 100644 index 704b4028d8..0000000000 --- a/notes/GNOME_Evolution_Notes.oaf.in +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/notes/GNOME_Evolution_Notes.oafinfo b/notes/GNOME_Evolution_Notes.oafinfo deleted file mode 100644 index 704b4028d8..0000000000 --- a/notes/GNOME_Evolution_Notes.oafinfo +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/notes/Makefile.am b/notes/Makefile.am deleted file mode 100644 index 388e19152a..0000000000 --- a/notes/Makefile.am +++ /dev/null @@ -1,46 +0,0 @@ -bin_PROGRAMS = evolution-notes - -noinst_PROGRAMS = notes-test - -INCLUDES = \ - -I$(top_builddir)/shell \ - -I$(top_srcdir)/shell \ - -I$(top_srcdir)/widgets/e-text \ - $(BONOBO_HTML_GNOME_CFLAGS) \ - -DEVOLUTION_VERSION=\""$(VERSION)"\" \ - -DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \ - -DEVOLUTION_ICONSDIR=\""$(iconsdir)"\" \ - -DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\" \ - -DEVOLUTION_DATADIR=\""$(datadir)"\" \ - -DG_LOG_DOMAIN=\"evolution-notes\" - -evolution_notes_SOURCES = \ - component-factory.c \ - main.c \ - notes.c - -notes_test_SOURCES = \ - e-bevel-button.c \ - e-bevel-button.h \ - e-bevel-button-util.c \ - e-bevel-button-util.h \ - e-note.c \ - e-note.h \ - test-notes.c - -OAF_FILES = evolution-notes.oafinfo - -if USING_OAF -oafdir = $(datadir)/oaf -oaf_DATA = $(OAF_FILES) -endif - -notes_test_LDADD = \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(top_builddir)/e-util/libeutil.la \ - $(BONOBO_HTML_GNOME_LIBS) - -evolution_notes_LDADD = \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/shell/libeshell.a \ - $(BONOBO_HTML_GNOME_LIBS) diff --git a/notes/component-factory.c b/notes/component-factory.c deleted file mode 100644 index 3f8176cc9c..0000000000 --- a/notes/component-factory.c +++ /dev/null @@ -1,151 +0,0 @@ -#include - -#include -#include - -#include "Evolution.h" -#include "evolution-storage.h" - -#include "evolution-shell-component.h" - -#include "e-util/e-gui-utils.h" - -#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-notes:f2f0f57f-27d9-4498-b54b-248f223ee772" - -static const EvolutionShellComponentFolderType folder_types[] = { - { "notes", "evolution-notes.png" }, - { NULL, NULL } -}; - -static void -new_note_cb (BonoboUIHandler *uih, void *user_data, const char *path) -{ - g_print ("new note!\n"); -} - -static GnomeUIInfo gnome_toolbar [] = { - GNOMEUIINFO_ITEM_STOCK (N_("New"), N_("Create a new note"), new_note_cb, GNOME_STOCK_PIXMAP_NEW), - GNOMEUIINFO_END -}; - -static void -control_deactivate (BonoboControl *control, BonoboUIHandler *uih) -{ - bonobo_ui_handler_dock_remove (uih, "/Toolbar"); -} - -static void -control_activate (BonoboControl *control, BonoboUIHandler *uih) -{ - Bonobo_UIHandler remote_uih; - GtkWidget *toolbar, *toolbar_frame; - BonoboControl *toolbar_control ; - - remote_uih = bonobo_control_get_remote_ui_handler (control); - bonobo_ui_handler_set_container (uih, remote_uih); - bonobo_object_release_unref (remote_uih, NULL); - - toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, - GTK_TOOLBAR_BOTH); - - gnome_app_fill_toolbar_with_data (GTK_TOOLBAR (toolbar), - gnome_toolbar, - NULL, NULL); - - toolbar_frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (toolbar_frame), GTK_SHADOW_OUT); - gtk_container_add (GTK_CONTAINER (toolbar_frame), toolbar); - gtk_widget_show (toolbar_frame); - - gtk_widget_show_all (toolbar_frame); - - toolbar_control = bonobo_control_new (toolbar_frame); - bonobo_ui_handler_dock_add ( - uih, "/Toolbar", - bonobo_object_corba_objref (BONOBO_OBJECT (toolbar_control)), - GNOME_DOCK_ITEM_BEH_EXCLUSIVE, - GNOME_DOCK_TOP, - 1, 1, 0); -} - - -static void -control_activate_cb (BonoboControl *control, - gboolean activate) -{ - BonoboUIHandler *uih; - - uih = bonobo_control_get_ui_handler (control); - g_assert (uih); - - if (activate) - control_activate (control, uih); - else - control_deactivate (control, uih); -} - - -static BonoboControl * -create_view (EvolutionShellComponent *shell_component, - const char *physical_uri, - void *closure) -{ - BonoboControl * control; - - control = notes_factory_new_control (); - - gtk_signal_connect (GTK_OBJECT (control), "activate", - control_activate_cb, NULL); - - - return control; -} - -static void -owner_set_cb (EvolutionShellComponent *shell_component, - EvolutionShellClient shell_client, - gpointer user_data) -{ - g_print ("evolution-notes: Yeeeh! We have an owner!\n"); /* FIXME */ -} - -static void -owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data) -{ - g_print ("No owner anymore\n"); -} - -/* The factory function */ -static BonoboObject * -notes_component_factory (BonoboGenericFactory *factory, - void *closure) -{ - EvolutionShellComponent *shell_component; - - shell_component = evolution_shell_component_new (folder_types, create_view, NULL); - - gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set", - GTK_SIGNAL_FUNC (owner_set_cb), NULL); - gtk_signal_connect (GTK_OBJECT (shell_component), "owner_unset", - GTK_SIGNAL_FUNC (owner_unset_cb), NULL); - - return BONOBO_OBJECT (shell_component); -} - - -void -component_factory_init (void) -{ - static BonoboGenericFactory *factory = NULL; - - if (factory != NULL) - return; - - factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, notes_component_factory, NULL); - - if (factory == NULL) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Cannot initialize Evolution's notes component.")); - exit (1); - } -} diff --git a/notes/component-factory.h b/notes/component-factory.h deleted file mode 100644 index 9535ccc4ae..0000000000 --- a/notes/component-factory.h +++ /dev/null @@ -1,7 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -#ifndef COMPONENT_FACTORY_H -#define COMPONENT_FACTORY_H - -void component_factory_init (void); - -#endif diff --git a/notes/e-bevel-button-util.c b/notes/e-bevel-button-util.c deleted file mode 100644 index cfa01f71a2..0000000000 --- a/notes/e-bevel-button-util.c +++ /dev/null @@ -1,189 +0,0 @@ -#include -#include "e-bevel-button-util.h" - -static void rgb_to_hls (gdouble *r, gdouble *g, gdouble *b); -static void hls_to_rgb (gdouble *h, gdouble *l, gdouble *s); - -void -e_bevel_button_util_shade (GdkColor *a, - GdkColor *b, - gdouble k) -{ - gdouble red; - gdouble green; - gdouble blue; - - red = (gdouble) a->red / 65535.0; - green = (gdouble) a->green / 65535.0; - blue = (gdouble) a->blue / 65535.0; - - rgb_to_hls (&red, &green, &blue); - - green *= k; - if (green > 1.0) - green = 1.0; - else if (green < 0.0) - green = 0.0; - - blue *= k; - if (blue > 1.0) - blue = 1.0; - else if (blue < 0.0) - blue = 0.0; - - hls_to_rgb (&red, &green, &blue); - - b->red = red * 65535.0; - b->green = green * 65535.0; - b->blue = blue * 65535.0; -} - -static void -rgb_to_hls (gdouble *r, - gdouble *g, - gdouble *b) -{ - gdouble min; - gdouble max; - gdouble red; - gdouble green; - gdouble blue; - gdouble h, l, s; - gdouble delta; - - red = *r; - green = *g; - blue = *b; - - if (red > green) - { - if (red > blue) - max = red; - else - max = blue; - - if (green < blue) - min = green; - else - min = blue; - } - else - { - if (green > blue) - max = green; - else - max = blue; - - if (red < blue) - min = red; - else - min = blue; - } - - l = (max + min) / 2; - s = 0; - h = 0; - - if (max != min) - { - if (l <= 0.5) - s = (max - min) / (max + min); - else - s = (max - min) / (2 - max - min); - - delta = max -min; - if (red == max) - h = (green - blue) / delta; - else if (green == max) - h = 2 + (blue - red) / delta; - else if (blue == max) - h = 4 + (red - green) / delta; - - h *= 60; - if (h < 0.0) - h += 360; - } - - *r = h; - *g = l; - *b = s; -} - -static void -hls_to_rgb (gdouble *h, - gdouble *l, - gdouble *s) -{ - gdouble hue; - gdouble lightness; - gdouble saturation; - gdouble m1, m2; - gdouble r, g, b; - - lightness = *l; - saturation = *s; - - if (lightness <= 0.5) - m2 = lightness * (1 + saturation); - else - m2 = lightness + saturation - lightness * saturation; - m1 = 2 * lightness - m2; - - if (saturation == 0) - { - *h = lightness; - *l = lightness; - *s = lightness; - } - else - { - hue = *h + 120; - while (hue > 360) - hue -= 360; - while (hue < 0) - hue += 360; - - if (hue < 60) - r = m1 + (m2 - m1) * hue / 60; - else if (hue < 180) - r = m2; - else if (hue < 240) - r = m1 + (m2 - m1) * (240 - hue) / 60; - else - r = m1; - - hue = *h; - while (hue > 360) - hue -= 360; - while (hue < 0) - hue += 360; - - if (hue < 60) - g = m1 + (m2 - m1) * hue / 60; - else if (hue < 180) - g = m2; - else if (hue < 240) - g = m1 + (m2 - m1) * (240 - hue) / 60; - else - g = m1; - - hue = *h - 120; - while (hue > 360) - hue -= 360; - while (hue < 0) - hue += 360; - - if (hue < 60) - b = m1 + (m2 - m1) * hue / 60; - else if (hue < 180) - b = m2; - else if (hue < 240) - b = m1 + (m2 - m1) * (240 - hue) / 60; - else - b = m1; - - *h = r; - *l = g; - *s = b; - } -} diff --git a/notes/e-bevel-button-util.h b/notes/e-bevel-button-util.h deleted file mode 100644 index 759a9025cc..0000000000 --- a/notes/e-bevel-button-util.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __E_BEVEL_BUTTON_UTIL_H__ -#define __E_BEVEL_BUTTON_UTIL_H__ - -#define LIGHTNESS_MULT 1.3 -#define DARKNESS_MULT 0.7 - -void -e_bevel_button_util_shade (GdkColor *a, - GdkColor *b, - gdouble k); - -#endif /* __E_BEVEL_BUTTON_UTIL_H__ */ diff --git a/notes/e-bevel-button.c b/notes/e-bevel-button.c deleted file mode 100644 index 480a430516..0000000000 --- a/notes/e-bevel-button.c +++ /dev/null @@ -1,175 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ - -#include -#include - -#include "e-util/e-util.h" - -#include "e-bevel-button.h" -#include "e-bevel-button-util.h" - -#define PARENT_TYPE GTK_TYPE_BUTTON - -static GtkButtonClass *parent_class = NULL; - -struct _EBevelButtonPrivate { - GdkColor base_color; - GdkColor dark_color; - GdkColor light_color; - GdkGC *gc; -}; - -static void -e_bevel_button_paint (GtkWidget *widget, GdkRectangle *area) -{ - EBevelButton *button; - - button = E_BEVEL_BUTTON (widget); - - if (GTK_WIDGET_DRAWABLE (widget)) { - gdk_window_set_back_pixmap (widget->window, NULL, TRUE); - gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height); - - gdk_gc_set_foreground (button->priv->gc, &button->priv->base_color); - gdk_draw_rectangle (widget->window, - button->priv->gc, - TRUE, - 0, 0, - widget->allocation.width, widget->allocation.height); - - if (GTK_BUTTON (button)->in_button) { - gdk_gc_set_foreground (button->priv->gc, - GTK_BUTTON (button)->button_down ? - &button->priv->dark_color : - &button->priv->light_color); - gdk_draw_line (widget->window, button->priv->gc, - 0, 0, 0, widget->allocation.height - 2); - gdk_draw_line (widget->window, button->priv->gc, - 0, 0, widget->allocation.width - 2, 0); - - gdk_gc_set_foreground (button->priv->gc, - GTK_BUTTON (button)->button_down ? - &button->priv->light_color : - &button->priv->dark_color); - gdk_draw_line (widget->window, button->priv->gc, - widget->allocation.width - 1 , 1, - widget->allocation.width - 1, widget->allocation.height - 1); - gdk_draw_line (widget->window, button->priv->gc, - 1, widget->allocation.height - 1, - widget->allocation.width - 1, widget->allocation.height - 1); - } - } -} - -static gint -e_bevel_button_expose (GtkWidget *widget, GdkEventExpose *event) -{ - GtkBin *bin; - GdkEventExpose child_event; - - if (GTK_WIDGET_DRAWABLE (widget)) { - bin = GTK_BIN (widget); - - e_bevel_button_paint (widget, &event->area); - - child_event = *event; - if (bin->child && GTK_WIDGET_NO_WINDOW (bin->child) && - gtk_widget_intersect (bin->child, &event->area, &child_event.area)) - gtk_widget_event (bin->child, (GdkEvent*) &child_event); - } - - return FALSE; -} - -static void -e_bevel_button_draw (GtkWidget *widget, GdkRectangle *area) -{ - GdkRectangle child_area; - GdkRectangle tmp_area; - - g_return_if_fail (widget != NULL); - g_return_if_fail (E_IS_BEVEL_BUTTON (widget)); - g_return_if_fail (area != NULL); - - if (GTK_WIDGET_DRAWABLE (widget)) { - tmp_area = *area; - tmp_area.x -= GTK_CONTAINER (widget)->border_width; - tmp_area.y -= GTK_CONTAINER (widget)->border_width; - - e_bevel_button_paint (widget, &tmp_area); - - if (GTK_BIN (widget)->child && gtk_widget_intersect (GTK_BIN (widget)->child, &tmp_area, &child_area)) - gtk_widget_draw (GTK_BIN (widget)->child, &child_area); - } -} - -static void -e_bevel_button_realize (GtkWidget *widget) -{ - EBevelButton *button = E_BEVEL_BUTTON (widget); - - GTK_WIDGET_CLASS (parent_class)->realize (widget); - - button->priv->gc = gdk_gc_new (widget->window); - - gdk_color_parse ("#d0d888", &button->priv->base_color); - e_bevel_button_util_shade (&button->priv->base_color, - &button->priv->light_color, - LIGHTNESS_MULT); - e_bevel_button_util_shade (&button->priv->base_color, - &button->priv->dark_color, - DARKNESS_MULT); - gdk_colormap_alloc_color (gdk_rgb_get_cmap (), &button->priv->base_color, FALSE, TRUE); - gdk_colormap_alloc_color (gdk_rgb_get_cmap (), &button->priv->light_color, FALSE, TRUE); - gdk_colormap_alloc_color (gdk_rgb_get_cmap (), &button->priv->dark_color, FALSE, TRUE); -} - -static void -e_bevel_button_class_init (EBevelButtonClass *klass) -{ - GtkWidgetClass *widget_class; - - widget_class = (GtkWidgetClass *)klass; - - parent_class = gtk_type_class (PARENT_TYPE); - - widget_class->draw = e_bevel_button_draw; - widget_class->expose_event = e_bevel_button_expose; - widget_class->realize = e_bevel_button_realize; -} - -static void -e_bevel_button_init (EBevelButton *button) -{ - EBevelButtonPrivate *priv; - - GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS); - - priv = g_new (EBevelButtonPrivate, 1); - - button->priv = priv; -} - -GtkWidget * -e_bevel_button_new (void) -{ - EBevelButton *button; - - button = gtk_type_new (E_TYPE_BEVEL_BUTTON); - - return GTK_WIDGET (button); -} - -E_MAKE_TYPE (e_bevel_button, "EBevelButton", EBevelButton, e_bevel_button_class_init, e_bevel_button_init, PARENT_TYPE); - - - - - - - - - - - - diff --git a/notes/e-bevel-button.h b/notes/e-bevel-button.h deleted file mode 100644 index 333c317b43..0000000000 --- a/notes/e-bevel-button.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -#ifndef __E_BEVEL_BUTTON_H__ -#define __E_BEVEL_BUTTON_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#define E_TYPE_BEVEL_BUTTON (e_bevel_button_get_type ()) -#define E_BEVEL_BUTTON(obj) (GTK_CHECK_CAST ((obj), E_TYPE_BEVEL_BUTTON, EBevelButton)) -#define E_BEVEL_BUTTON_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_BEVEL_BUTTON, EBevelButtonClass)) -#define E_IS_BEVEL_BUTTON(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_BEVEL_BUTTON)) -#define E_IS_BEVEL_BUTTON_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_BEVEL_BUTTON)) - -typedef struct _EBevelButton EBevelButton; -typedef struct _EBevelButtonPrivate EBevelButtonPrivate; -typedef struct _EBevelButtonClass EBevelButtonClass; - -struct _EBevelButton { - GtkButton parent; - - EBevelButtonPrivate *priv; -}; - -struct _EBevelButtonClass { - GtkButtonClass parent_class; -}; - -GtkType e_bevel_button_get_type (void); - -GtkWidget *e_bevel_button_new (void); -void e_bevel_button_set_base_color (EBevelButton *button, GdkColor *color); - -#endif /* __E_BEVEL_BUTTON_H__ */ - diff --git a/notes/e-note.c b/notes/e-note.c deleted file mode 100644 index 998acd24f0..0000000000 --- a/notes/e-note.c +++ /dev/null @@ -1,381 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ - -#include -#include -#include - -#include "e-util/e-canvas.h" -#include "e-util/e-util.h" -#include "widgets/e-text/e-text.h" - -#include "e-note.h" -#include "e-bevel-button.h" -#include "e-bevel-button-util.h" - -#define PARENT_TYPE GTK_TYPE_WINDOW - -enum { - E_NOTE_TEXT_CHANGED, - E_NOTE_LAST_SIGNAL -}; - -static guint e_note_signals [E_NOTE_LAST_SIGNAL] = { 0 }; - -static GtkWindowClass *parent_class = NULL; - -struct _ENotePrivate { - GtkWidget *canvas; - - GnomeCanvasItem *frame; - GnomeCanvasItem *rect; - - GnomeCanvasItem *text_item; - - GnomeCanvasItem *move_button; - GnomeCanvasItem *close_button; - GnomeCanvasItem *resize_button; - - /* Used for moving and resizing */ - gint press_x, press_y; - gint resize_width, resize_height; - gboolean in_drag; -}; - -static void -e_note_text_changed (ETextModel *model, gpointer data) -{ - gtk_signal_emit (GTK_OBJECT (data), - e_note_signals [E_NOTE_TEXT_CHANGED]); -} - -static gint -e_note_resize_button_changed (GtkWidget *widget, GdkEventButton *event, gpointer data) -{ - ENote *note = E_NOTE (data); - - if (event->type == GDK_BUTTON_PRESS) { - note->priv->press_x = event->x_root; - note->priv->press_y = event->y_root; - - gdk_window_get_geometry (GTK_WIDGET (note)->window, NULL, NULL, - ¬e->priv->resize_width, ¬e->priv->resize_height, NULL); - - gdk_pointer_grab (widget->window, - FALSE, - (GDK_BUTTON1_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK), - NULL, - NULL, - GDK_CURRENT_TIME); - note->priv->in_drag = TRUE; - - } - else { - if (note->priv->in_drag) { - if (event->window != widget->window) - return FALSE; - - gdk_pointer_ungrab (GDK_CURRENT_TIME); - note->priv->in_drag = FALSE; - } - } - - return TRUE; -} - -static gint -e_note_resize_motion_event (GtkWidget *widget, GdkEventMotion *event, gpointer data) -{ - GtkWidget *window = GTK_WIDGET (data); - ENote *note = E_NOTE (data); - gint new_x, new_y; - gint width, height; - - if (note->priv->in_drag) { - gdk_window_get_pointer (GDK_ROOT_PARENT (), &new_x, &new_y, NULL); - - width = note->priv->resize_width + new_x - note->priv->press_x; - if (width < 60) - width = 60; - - height = note->priv->resize_height + new_y - note->priv->press_y; - if (height < 60) - height = 60; - - gdk_window_resize (window->window, width, height); - - return TRUE; - } - - return FALSE; -} - -static gint -e_note_move_button_changed (GtkWidget *widget, GdkEventButton *event, gpointer data) -{ - ENote *note = E_NOTE (data); - - if (event->button != 1) - return FALSE; - - if (event->type == GDK_BUTTON_PRESS) { - gint root_x, root_y; - - gdk_window_get_origin (widget->window, &root_x, &root_y); - note->priv->press_x = root_x - event->x_root; - note->priv->press_y = root_y - event->y_root; - - gdk_pointer_grab (widget->window, - FALSE, - (GDK_BUTTON1_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK), - NULL, - NULL, - GDK_CURRENT_TIME); - - note->priv->in_drag = TRUE; - } - else { - if (note->priv->in_drag) { - if (event->window != widget->window) - return FALSE; - - gdk_pointer_ungrab (GDK_CURRENT_TIME); - note->priv->in_drag = FALSE; - } - } - - return TRUE; -} - -static gint -e_note_move_motion_event (GtkWidget *widget, GdkEventMotion *event, gpointer data) -{ - gint new_x, new_y; - ENote *note = E_NOTE (data); - GtkWidget *window = GTK_WIDGET (data); - - if (note->priv->in_drag) { - gdk_window_get_pointer (GDK_ROOT_PARENT (), &new_x, &new_y, NULL); - - new_x += note->priv->press_x; - new_y += note->priv->press_y; - - gdk_window_move (window->window, new_x, new_y); - } - - return TRUE; -} - -static void -e_note_canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation, gpointer data) -{ - ENote *note; - gdouble height; - - note = E_NOTE (data); - - gnome_canvas_item_set (note->priv->text_item, - "width", (gdouble) allocation->width - 10, - NULL); - gtk_object_get (GTK_OBJECT (note->priv->text_item), - "height", &height, - NULL); - height = MAX (height, allocation->height); - gnome_canvas_set_scroll_region (GNOME_CANVAS (note->priv->canvas), 0, 0, - allocation->width, height); - gnome_canvas_item_set (note->priv->frame, - "x2", (gdouble) allocation->width - 1, - "y2", (gdouble) allocation->height - 1, - NULL); - gnome_canvas_item_set (note->priv->rect, - "x2", (gdouble) allocation->width - 1, - "y2", (gdouble) allocation->height - 1, - NULL); - gnome_canvas_item_set (note->priv->move_button, - "width", (gdouble) allocation->width - 29, - NULL); - gnome_canvas_item_set (note->priv->resize_button, - "x", (gdouble) allocation->width - 23, - "y", (gdouble) allocation->height - 23, - NULL); - gnome_canvas_item_set (note->priv->close_button, - "x", (gdouble) allocation->width - 23, - NULL); -} - -static void -e_note_realize (GtkWidget *widget) -{ - GTK_WIDGET_CLASS (parent_class)->realize (widget); - - gdk_window_set_decorations (widget->window, 0); -} - -static void -e_note_class_init (ENoteClass *klass) -{ - GtkWidgetClass *widget_class; - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *)klass; - widget_class = (GtkWidgetClass *)klass; - parent_class = gtk_type_class (PARENT_TYPE); - - widget_class->realize = e_note_realize; - - e_note_signals [E_NOTE_TEXT_CHANGED] = - gtk_signal_new ("changed", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (ENoteClass, text_changed), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, e_note_signals, E_NOTE_LAST_SIGNAL); -} - -static void -e_note_init (ENote *note) -{ - ENotePrivate *priv; - GtkWidget *button; - - priv = g_new (ENotePrivate, 1); - - note->priv = priv; - - gtk_widget_push_visual (gdk_rgb_get_visual ()); - gtk_widget_push_colormap (gdk_rgb_get_cmap ()); - - priv->canvas = e_canvas_new (); - - gtk_widget_pop_visual (); - gtk_widget_pop_colormap (); - - gtk_signal_connect (GTK_OBJECT (priv->canvas), "size_allocate", - GTK_SIGNAL_FUNC (e_note_canvas_size_allocate), note); - gtk_widget_show (priv->canvas); - gtk_container_add (GTK_CONTAINER (note), priv->canvas); - - priv->rect = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (priv->canvas)), - gnome_canvas_rect_get_type (), - "x1", 0.0, - "y1", 0.0, - "x2", 100.0, - "y2", 100.0, - "fill_color_rgba", 0xf5ffa0ff, - NULL); - priv->frame = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (priv->canvas)), - gnome_canvas_rect_get_type (), - "x1", 0.0, - "y1", 0.0, - "x2", 100.0, - "y2", 100.0, - "outline_color", "black", - NULL); - - priv->text_item = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (priv->canvas)), - e_text_get_type (), - "text", "", - "font_gdk", priv->canvas->style->font, - "fill_color", "black", - "anchor", GTK_ANCHOR_NW, - "clip", TRUE, - "editable", TRUE, - "line_wrap", TRUE, - "width", 150.0, - NULL); - e_canvas_item_move_absolute(priv->text_item, - 5, 25); - - gtk_signal_connect (GTK_OBJECT (E_TEXT (priv->text_item)->model), "changed", - GTK_SIGNAL_FUNC (e_note_text_changed), note); - - button = e_bevel_button_new (); - gtk_signal_connect (GTK_OBJECT (button), "button_press_event", - GTK_SIGNAL_FUNC (e_note_move_button_changed), note); - gtk_signal_connect (GTK_OBJECT (button), "button_release_event", - GTK_SIGNAL_FUNC (e_note_move_button_changed), note); - gtk_signal_connect (GTK_OBJECT (button), "motion_notify_event", - GTK_SIGNAL_FUNC (e_note_move_motion_event), note); - gtk_widget_show (button); - priv->move_button = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (priv->canvas)), - gnome_canvas_widget_get_type (), - "widget", button, - "x", 3.0, - "y", 3.0, - "width", 20.0, - "height", 20.0, - NULL); - button = e_bevel_button_new (); - gtk_widget_show (button); - priv->close_button = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (priv->canvas)), - gnome_canvas_widget_get_type (), - "widget", button, - "x", 3.0, - "y", 3.0, - "width", 20.0, - "height", 20.0, - NULL); - - button = e_bevel_button_new (); - gtk_signal_connect (GTK_OBJECT (button), "button_press_event", - GTK_SIGNAL_FUNC (e_note_resize_button_changed), note); - gtk_signal_connect (GTK_OBJECT (button), "button_release_event", - GTK_SIGNAL_FUNC (e_note_resize_button_changed), note); - gtk_signal_connect (GTK_OBJECT (button), "motion_notify_event", - GTK_SIGNAL_FUNC (e_note_resize_motion_event), note); - gtk_widget_show (button); - priv->resize_button = gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (priv->canvas)), - gnome_canvas_widget_get_type (), - "widget", button, - "x", 3.0, - "y", 3.0, - "width", 20.0, - "height", 20.0, - NULL); -} - -void -e_note_set_text (ENote *note, gchar *text) -{ - g_return_if_fail (note != NULL); - g_return_if_fail (E_IS_NOTE (note)); - g_return_if_fail (text != NULL); - - gnome_canvas_item_set (note->priv->text_item, - "text", text, - NULL); -} - -gchar * -e_note_get_text (ENote *note) -{ - gchar *text; - - g_return_val_if_fail (note != NULL, NULL); - g_return_val_if_fail (E_IS_NOTE (note), NULL); - g_return_val_if_fail (text != NULL, NULL); - - gtk_object_get (GTK_OBJECT (note->priv->text_item), - "text", &text, - NULL); - - return text; -} - - -GtkWidget * -e_note_new (void) -{ - ENote *note; - - note = gtk_type_new (E_TYPE_NOTE); - - return GTK_WIDGET (note); -} - -E_MAKE_TYPE (e_note, "ENote", ENote, e_note_class_init, e_note_init, PARENT_TYPE); diff --git a/notes/e-note.h b/notes/e-note.h deleted file mode 100644 index d7d4c63b95..0000000000 --- a/notes/e-note.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ - -#ifndef __E_NOTE_H__ -#define __E_NOTE_H__ - -#include -#include -#include "e-bevel-button.h" - -#define E_TYPE_NOTE (e_note_get_type ()) -#define E_NOTE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_NOTE, ENote)) -#define E_NOTE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_NOTE, ENoteClass)) -#define E_IS_NOTE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_NOTE)) -#define E_IS_NOTE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), E_TYPE_NOTE)) - -typedef struct _ENote ENote; -typedef struct _ENotePrivate ENotePrivate; -typedef struct _ENoteClass ENoteClass; - -struct _ENote { - GtkWindow parent; - - ENotePrivate *priv; -}; - -struct _ENoteClass { - GtkWindowClass parent_class; - - void (* text_changed) (ENote *note); -}; - -GtkType e_note_get_type (void); -GtkWidget *e_note_new (void); -void e_note_set_text (ENote *note, gchar *text); -gchar *e_note_get_text (ENote *note); - -#endif /* __E_NOTE_H__ */ diff --git a/notes/evolution-notes.oafinfo b/notes/evolution-notes.oafinfo deleted file mode 100644 index 704b4028d8..0000000000 --- a/notes/evolution-notes.oafinfo +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/notes/main.c b/notes/main.c deleted file mode 100644 index f3198c0d63..0000000000 --- a/notes/main.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * - * Author: - * Anders Carlsson (andersca@gnu.org) - * - * (C) 2000 Helix Code, Inc. - */ - -#include -#include -#include -#include - -#include "e-util/e-gui-utils.h" -#include "component-factory.h" - -static void -init_corba (gint argc, gchar **argv) -{ - gnome_init_with_popt_table ("evolution-notes-component", VERSION, argc, argv, - oaf_popt_options, 0, NULL); - oaf_init (argc, argv); -} - -static void -init_bonobo (void) -{ - if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Notes Component: Could not initialize bonobo")); - exit (1); - } -} - -gint -main (gint argc, gchar **argv) -{ - bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR); - textdomain (PACKAGE); - - init_corba (argc, argv); - init_bonobo (); - - e_setup_base_dir (); - - notes_factory_init (); - component_factory_init (); - - bonobo_main (); - - return 0; -} diff --git a/notes/test-notes.c b/notes/test-notes.c deleted file mode 100644 index 8352ea789f..0000000000 --- a/notes/test-notes.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ - -#include -#include -#include - -#include "e-util/e-canvas.h" -#include "widgets/e-text/e-text.h" - -#include "e-note.h" - -void -text_changed (GtkWidget *widget, gpointer data) -{ - g_print ("Text changed!\n"); -} - -gint -main (gint argc, gchar **argv) -{ - GtkWidget *note; - - gnome_init ("NotesTest", "0.0.1", argc, argv); - - note = e_note_new (); - e_note_set_text (E_NOTE (note), "This is a text note widget"); - gtk_signal_connect (GTK_OBJECT (note), "changed", - GTK_SIGNAL_FUNC (text_changed), NULL); - - gtk_widget_show (note); - gtk_main (); - - return 0; -} diff --git a/po/.cvsignore b/po/.cvsignore deleted file mode 100644 index 3d5b22df60..0000000000 --- a/po/.cvsignore +++ /dev/null @@ -1,12 +0,0 @@ -*.gmo -*.mo -Makefile -Makefile.in -Makefile.in.in -POTFILES -cat-id-tbl.c -gnome-objc.pot -gnome.pot -stamp-cat-id -evolution.pot - diff --git a/po/ChangeLog b/po/ChangeLog deleted file mode 100644 index a41d60cc96..0000000000 --- a/po/ChangeLog +++ /dev/null @@ -1,539 +0,0 @@ -2000-08-19 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-08-19 Matthias Warkus - - * de.po: Updated. - -2000-08-19 Valek Filippov - - * ru.po: updated russian translation. - * POTFILES.in: Added missing files that are in the build. - -2000-08-17 Valek Filippov - - * ru.po: updated russian translation. - -2000-08-17 Kai Lahmann - - * de.po: Updated German translation - -2000-08-16 Valek Filippov - - * ru.po: updated russian translation. - -2000-08-13 Valek Filippov - - * ru.po: updated russian translation. - * POTFILES.in: Added missing files that are in the build. - -2000-08-12 Valek Filippov - - * ru.po: updated russian translation. - * POTFILES.in: Added missing files that are in the build. Sorted in alphabet order - - -2000-08-11 Valek Filippov - - * ru.po: updated russian translation. - -2000-08-10 Akira TAGOH - - * ja.po: Updated Japanese translation. - -2000-08-08 Valek Filippov - - * ru.po: updated russian translation. - -2000-08-07 Kjartan Maraas - - * POTFILES.in: Added missing files that are in the build. - * no.po: Updated Norwegian translation. - -2000-08-07 Valek Filippov - - * ru.po: updated russian translation. - -2000-08-05 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-08-04 Szabolcs BAN - - * hu.po: Updated Hungarian translations. - -2000-08-03 Alastair McKinstry - - * ga.po: Add Irish translation. - -2000-08-02 Pablo Saratxaga - - * es.po,hu.po,it.po,sl.po: various syntax checkings (missing %s, %S - instead of %s etc) - -2000-07-30 Valek Filippov - - * ru.po: updated russian translation. - -2000-07-28 Szabolcs BAN - - * hu.po: Updated Hungarian translations. - -2000-07-27 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-07-27 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-07-26 Valek Filippov - - * ru.po: updated russian translation. - -2000-07-24 Matthias Warkus - - * de.po: Updated German translation. - -2000-07-24 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-07-24 Szabolcs BAN - - * hu.po: updated Hungarian translations... - -2000-07-24 Federico Mena Quintero - - * it.po: Added missing \n. - -2000-07-23 Valek Filippov - - * ru.po: updated russian translation. - -2000-07-23 Ettore Perazzoli - - * it.po: Updated Italian translation from Clara Tattoni - . - -2000-07-21 Szabolcs BAN - - * hu.po: updated Hungarian translations... - -2000-07-21 Andreas Hyden - - * sv.po: Fixed an error. - -2000-07-19 Valek Filippov - - * ru.po: updated russian translation. - -2000-07-16 Jesus Bravo Alvarez - - * gl.po: Updated Galician translation. - -2000-07-16 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-07-16 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-07-15 Matthias Warkus - - * de.po: Updated. Should be complete and pretty usable. - -2000-07-13 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-07-13 Valek Filippov - - * ru.po: Updated russian translation. - -2000-07-10 Federico Mena Quintero - - * POTFILES.in: Removed several calendar/gui files that are no - longer there. - -2000-07-09 Federico Mena Quintero - - * POTFILES.in: Removed calendar/gui/evolution-calendar-control.c - -2000-07-09 Valek Filippov - - * ru.po: Updated russian translation. - -2000-07-09 Matthias Warkus - - * de.po: Rough cut at a complete German translation. Still needs a - lot of love. - -2000-07-03 Ettore Perazzoli - - * POTFILES.in: Removed `e-select-names.c' and - `select-name.glade.h' which were removed by Chris' commit. - -2000-06-30 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-29 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-28 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-28 Kjartan Maraas - - * POTFILES.in: Added a load of missing files. - * no.po: Updated Norwegian translation. - -2000-06-27 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-24 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-21 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-06-20 Jesus Bravo Alvarez - - * pt.po: Updated Portuguese translation from - Tiago Antao - -2000-06-19 Ettore Perazzoli - - * it.po: Italian translation from Clara Tattoni - . - -2000-06-17 Jeffrey Stedfast - - * POTFILES.in: why the heck was - camel/providers/imap/imap.c listed? Oh well, 'tis - removed now... - -2000-06-17 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-16 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-06-13 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-11 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-11 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-06-10 Zbigniew Chyla - - * pl.po: Added Polish translation. - -2000-06-10 Valek Filippov - - * ru.po: Updated russian translation. - -2000-06-09 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-06-08 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-06-06 Fatih Demir - - * tr.po: Finished it [ what about the caveat message? - Translating it is much fun ;) ]. - -2000-06-05 Kenneth Christiansen - - * README.tools: Added readme file, which explains the - use of the newly checked in po tools. - - hmm, looking forward to tomorrow...viva los compleaños! - :) - -2000-06-05 Fatih Demir - - * tr.po: A quick-update ( not fully finished ). - -2000-06-04 Valek Filippov - - * ru.po: updated russian translation. - -2000-06-02 Ettore Perazzoli - - * it.po: New. Just a skeleton. - - * de.po: New, from Kai Lahmann . - - * POTFILES.in: Updated. - -2000-06-04 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-06-03 Valek Filippov - - * ru.po: updated russian translation. - -2000-06-02 Jesus Bravo Alvarez - - * pt.po: Added Portuguese translation from - Tiago Antao - -2000-06-01 Valek Filippov - - * ru.po: updated russian translation. - -2000-05-28 Fatih Demir - - * tr.po: Updated the Turkish translation. - -2000-05-28 Valek Filippov - - * ru.po: updated russian translation. - -2000-05-27 Valek Filippov - - * ru.po: updated russian translation. - -2000-05-26 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-23 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-23 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-05-22 Yukihiro Nakai - - * ja.po: Update from Akira TAGOH. - -2000-05-18 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-18 Yukihiro Nakai - - * ja.po: Update from Akira TAGOH. - -2000-05-14 Valek Filippov - - * ru.po: updated russian translation. - -2000-05-14 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-05-13 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-05-13 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-13 Valek Filippov - - * POTFILES.in: added *.glade.h and *-strings.h files. - * ru.po: updated russian translation. - -2000-05-12 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-05-12 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-10 Christopher James Lahey - - * POTFILES.in: Removed mail/mail-component.c. - -2000-05-09 Andreas Hyden - - * sv.po: Updated Swedish translation. - * update.sh: Updated. - -2000-05-08 Andreas Hyden - - * New update.sh script from Kenneth. - -2000-05-08 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-05-08 Héctor García Álvarez - - * es.po: added translation to spanish. - -2000-05-07 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-07 Ettore Perazzoli - - * POTFILES.in: Remove `shell/e-shell-shortcut.c'. - -2000-05-05 Jesus Bravo Alvarez - - * gl.po: Updated Galician translation. - -2000-05-04 Fatih Demir - - * tr.po : Updated the Turkish translation . - -2000-05-03 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-05-03 Valek Filippov - - * ru.po: updated. - -2000-05-02 Ettore Perazzoli - - * POTFILES.in: Removed `shell/e-service.c'. - -2000-05-02 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-05-01 Valek Filippov - - * ru.po: Updated russian translation. - -2000-04-30 Arjan Scherpenisse - - * nl.po: Added Dutch translation - -2000-04-25 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-04-21 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-04-20 Fatih Demir - - * tr.po : Added the Turkish translation . - -2000-04-20 Yukihiro Nakai - - * ja.po: Initial Japanese translation from Akira Tagoh - -2000-04-19 Pablo Saratxaga - - * da.po: Updated Danish file - -2000-04-19 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-04-18 Vincent Renardias - - * fr.po: creation. - -2000-04-18 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-04-15 Valek Filippov - - * ru.po: Updated russian translation. - -2000-04-15 Ettore Perazzoli - - * POTFILES.in: Removed `libversit/vcc.c' as its auto-generated and - breaks. - -2000-04-12 Pablo Saratxaga - - * da.po: Updated Danish file - -2000-04-10 Kjartan Maraas - - * no.po: Updated Norwegian translation. - -2000-04-08 Jesus Bravo Alvarez - - * gl.po: Added Galician translation. - -2000-04-07 Yuri Syrota - - * uk.po: Updated Ukrainian translation. - -2000-04-06 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-04-04 Spiros Papadimitriou - - * el.po: Added Greek translation. - -2000-04-04 Kjartan Maraas - - * da.po: Added Danish translation from Kenneth Christiansen - . - * no.po: Updated Norwegian translation. - * ru.po: Added Russian translation from Valek Filippov - . - -2000-04-04 Andreas Hyden - - * sv.po: Updated Swedish translation. - -2000-04-04 Yuri Syrota - - * uk.po: Added Ukrainian translation. - -2000-04-03 Richard Hult - - * sv.po: Updated Swedish translation. - -2000-04-03 Andreas Hyden - - * sv.po: Added Swedish translation. - -2000-04-01 Kjartan Maraas - - * no.po: Added Norwegian translation. - -2000-04-01 Matt Loper - - * .cvsignore: Added evolution.pot. - -2000-03-27 Federico Mena Quintero - - * POTFILES.in: Removed the calendar files for now. - -1998-07-23 Nuno Ferreira - - * pt.po: Added Portuguese translation. - -1996-06-12 Tristan Tarrant - - * it.po : Italian translations added diff --git a/po/POTFILES.ignore b/po/POTFILES.ignore deleted file mode 100644 index cc2e73df12..0000000000 --- a/po/POTFILES.ignore +++ /dev/null @@ -1 +0,0 @@ -calendar/gui/getdate.c diff --git a/po/POTFILES.in b/po/POTFILES.in deleted file mode 100644 index d14fc1c945..0000000000 --- a/po/POTFILES.in +++ /dev/null @@ -1,109 +0,0 @@ -addressbook/backend/ebook/load-gnomecard-addressbook.c -addressbook/backend/ebook/load-pine-addressbook.c -addressbook/backend/ebook/test-client-list.c -addressbook/backend/ebook/test-client.c -addressbook/conduit/address-conduit-control-applet.c -addressbook/conduit/address-conduit.c -addressbook/contact-editor/categories-strings.h -addressbook/contact-editor/e-contact-editor.c -addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h -addressbook/contact-editor/e-contact-editor-strings.h -addressbook/contact-editor/fullname-strings.h -addressbook/demo/addressbook-factory.c -addressbook/demo/addressbook.c -addressbook/gui/component/addressbook-factory.c -addressbook/gui/component/addressbook.c -addressbook/gui/component/alphabet.glade.h -addressbook/gui/component/e-ldap-storage.c -addressbook/gui/component/ldap-server-dialog.glade.h -addressbook/gui/component/select-names/select-names.glade.h -addressbook/gui/minicard/e-minicard-control.c -addressbook/gui/minicard/e-minicard-view.c -addressbook/gui/minicard/e-minicard.c -addressbook/gui/minicard/test-minicard-view.c -addressbook/gui/search/e-addressbook-search-dialog.c -addressbook/printing/e-contact-print.glade.h -calendar/cal-util/timeutil.c -calendar/conduits/calendar/calendar-conduit-control-applet.c -calendar/conduits/calendar/calendar-conduit.c -calendar/conduits/todo/todo-conduit-control-applet.c -calendar/conduits/todo/todo-conduit.c -calendar/gui/calendar-commands.c -calendar/gui/calendar-model.c -calendar/gui/control-factory.c -calendar/gui/dialogs/alarm-notify-dialog.c -calendar/gui/dialogs/alarm-notify.glade.h -calendar/gui/dialogs/task-editor.c -calendar/gui/dialogs/task-editor-dialog.glade.h -calendar/gui/e-calendar-table.c -calendar/gui/e-day-view-time-item.c -calendar/gui/e-day-view.c -calendar/gui/e-week-view.c -calendar/gui/event-editor.c -calendar/gui/event-editor-dialog.glade.h -calendar/gui/getdate.y -calendar/gui/gncal-todo.c -calendar/gui/gnome-cal.c -calendar/gui/gnome-month-item.c -calendar/gui/goto.c -calendar/gui/main.c -calendar/gui/popup-menu.c -calendar/gui/print.c -calendar/gui/prop.c -composer/e-msg-composer-address-dialog.c -composer/e-msg-composer-address-dialog.glade.h -composer/e-msg-composer-attachment-bar.c -composer/e-msg-composer-attachment.c -composer/e-msg-composer-attachment.glade.h -composer/e-msg-composer-hdrs.c -composer/e-msg-composer.c -filter/filter-datespec.c -filter/filter-editor.c -filter/filter-filter.c -filter/filter-folder.c -filter/filter-part.c -filter/filter-rule.c -filter/score-editor.c -filter/vfolder-editor.c -filter/vfolder-rule.c -libversit/vobject.c -mail/component-factory.c -mail/folder-browser-factory.c -mail/folder-browser.c -mail/mail-callbacks.c -mail/mail-config-gui.c -mail/mail-config.c -mail/mail-config.glade.h -mail/mail-config-druid.glade.h -mail/mail-crypto.c -mail/mail-local.c -mail/mail-ops.c -mail/mail-threads.c -mail/mail-tools.c -mail/mail-vfolder.c -mail/mail-view.c -mail/main.c -mail/message-list.c -notes/component-factory.c -notes/main.c -shell/e-setup.c -shell/e-shell-folder-creation-dialog.c -shell/e-shell-folder-selection-dialog.c -shell/e-shell-folder-title-bar.c -shell/e-shell-view-menu.c -shell/e-shell-view.c -shell/e-shell.c -shell/e-shortcuts-view.c -shell/e-shortcuts.c -shell/e-storage.c -shell/e-storage-set-view.c -shell/main.c -tests/ui-tests/message-browser.c -widgets/e-table/e-table-config.glade.h -widgets/e-table/e-table-field-chooser.glade.h -widgets/e-table/e-table-group.glade.h -widgets/e-table/e-table-header-item.c -widgets/meeting-time-sel/e-meeting-time-sel.c -widgets/misc/e-calendar-item.c -widgets/misc/e-clipped-label.c -widgets/shortcut-bar/e-group-bar.c diff --git a/po/README.tools b/po/README.tools deleted file mode 100644 index 4ec99c1640..0000000000 --- a/po/README.tools +++ /dev/null @@ -1,58 +0,0 @@ -The po/ directory includes two perlscripts, which is done to help -making the translations fully uptodate. - -The first script is called update.pl and is supposed to be run like this: - - ./update.pl [OPTIONS] ...LANGCODE - -This will updates the pot file (the po template, generated from the source code) -and merge them with the translations po files. - -For instance to do this for Danish, type the following - - ./update.pl da - - -The update.pl script also supports other options, they are: - - -V, --version shows the version - -H, --help shows this help page - -P, --pot only generates the potfile - -M, --maintain search for missing files in POTFILES.in - -Especially the --maintain option is very handy for package maintainer, to check -if you included all the files that have marked strings in the POTFILES.in, so -they will be in the generated po template, the socalled pot file. - -There is though one thing to take notice of with this option, please check the -configure.in file to make sure that the files you add to POTFILES.in are being -build, otherwise this can leed to "make dist" throuble. - - -The other utility is the desk.pl script, which will check the cvs module for -missing translation in files like *.desktop, *.directory, *.soundlist and so on. - -Run the script like this: - - ./desk.pl [OPTIONS] ...LANGCODE ENTRY - -An example use could be. - - ./desk.pl da - -which will check all the files for missing Name[da] entries, or - - ./desk.pl no Comment - -which will check all the files for missing Comment[no] entries. "Comment" can -here be replaced with whatever you like - -All scripts support the --help option for further help, though it's not very -extensive for the moment. - -Kenneth Christiansen - -kenneth@gnu.org -kenneth@gnome.org - -Both scripts are copyright 2000 The Free Software Foundation and me. diff --git a/po/da.po b/po/da.po deleted file mode 100644 index 5a0dd5096f..0000000000 --- a/po/da.po +++ /dev/null @@ -1,4813 +0,0 @@ -# Danish translation of evolution -# Copyright (C) 2000 Free Software Foundation, Inc. -# Kenneth Christiansen , 2000. -# Keld Simonsen , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution beta\n" -"POT-Creation-Date: 2000-08-02 16:39+0200\n" -"PO-Revision-Date: 2000-08-19 00:38+0200\n" -"Last-Translator: Keld Simonsen \n" -"Language-Team: Danish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/backend/ebook/test-client-list.c:29 -#: addressbook/backend/ebook/test-client.c:54 -#: addressbook/conduit/address-conduit.c:1215 -#: addressbook/demo/addressbook-factory.c:32 -#: addressbook/gui/component/addressbook-factory.c:59 -#: addressbook/gui/minicard/test-minicard-view.c:45 -#: calendar/conduits/calendar/calendar-conduit.c:1669 -#: calendar/conduits/todo/todo-conduit.c:1298 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Kunne ikke initialisere Bonobo" - -#. This array must be in the same order as enumerations -#. in GnomePilotConduitSyncType as they are used as index. -#. Custom type implies Disabled state. -#. -#: addressbook/conduit/address-conduit-control-applet.c:54 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:55 -#: calendar/conduits/todo/todo-conduit-control-applet.c:55 -msgid "Disabled" -msgstr "Deaktiveret" - -#: addressbook/conduit/address-conduit-control-applet.c:55 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:56 -#: calendar/conduits/todo/todo-conduit-control-applet.c:56 -msgid "Synchronize" -msgstr "Synkronisér" - -#: addressbook/conduit/address-conduit-control-applet.c:56 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:57 -#: calendar/conduits/todo/todo-conduit-control-applet.c:57 -msgid "Copy From Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:57 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:58 -#: calendar/conduits/todo/todo-conduit-control-applet.c:58 -msgid "Copy To Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:58 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:59 -#: calendar/conduits/todo/todo-conduit-control-applet.c:59 -msgid "Merge From Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:59 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:60 -#: calendar/conduits/todo/todo-conduit-control-applet.c:60 -msgid "Merge To Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:143 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:144 -#: calendar/conduits/todo/todo-conduit-control-applet.c:144 -msgid "Eskil Heyn Olsen " -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:145 -msgid "Gpilotd address conduit" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:146 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:147 -#: calendar/conduits/todo/todo-conduit-control-applet.c:147 -msgid "(C) 1998 the Free Software Foundation" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:148 -msgid "Configuration utility for the address conduit.\n" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:149 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:150 -#: calendar/conduits/todo/todo-conduit-control-applet.c:150 -msgid "gnome-unknown.xpm" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:190 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:191 -#: calendar/conduits/todo/todo-conduit-control-applet.c:191 -msgid "Synchronize Action" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:261 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:262 -#: calendar/conduits/todo/todo-conduit-control-applet.c:262 -msgid "Conduit state" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:315 -#: addressbook/conduit/address-conduit-control-applet.c:328 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:316 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:329 -#: calendar/conduits/todo/todo-conduit-control-applet.c:316 -#: calendar/conduits/todo/todo-conduit-control-applet.c:329 -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:334 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:335 -#: calendar/conduits/todo/todo-conduit-control-applet.c:335 -msgid "Not connected to the gnome-pilot daemon" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:339 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:340 -#: calendar/conduits/todo/todo-conduit-control-applet.c:340 -msgid "" -"An error occured when trying to fetch\n" -"pilot list from the gnome-pilot daemon" -msgstr "" - -#: addressbook/conduit/address-conduit.c:127 -#: addressbook/conduit/address-conduit.c:141 -msgid "BLARG\n" -msgstr "" - -#: addressbook/conduit/address-conduit.c:471 -#, c-format -msgid "Address holds %ld address entries" -msgstr "" - -#: addressbook/conduit/address-conduit.c:497 -#: addressbook/conduit/address-conduit.c:499 -msgid "Could not start addressbook server" -msgstr "" - -#: addressbook/conduit/address-conduit.c:512 -#: addressbook/conduit/address-conduit.c:515 -msgid "Could not read pilot's Address application block" -msgstr "" - -#: addressbook/conduit/address-conduit.c:853 -msgid "Error while communicating with address server" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "kategorier" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Punkter tilhører disse kategorier:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Tilgængelige kategorier:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1179 -msgid "FIXME: _Appointment" -msgstr "_Aftale" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1180 -msgid "FIXME: Meeting Re_quest" -msgstr "Mødeforesp_ørgsel" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1182 -msgid "FIXME: _Mail Message" -msgstr "E-post _meddelse" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Contact" -msgstr "_Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1184 -msgid "FIXME: _Task" -msgstr "_Opgave" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1185 -msgid "FIXME: Task _Request" -msgstr "Opgavefo_respørgsel" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1186 -msgid "FIXME: _Journal Entry" -msgstr "_Journalopføring" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1187 -msgid "FIXME: _Note" -msgstr "_Notat" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1189 -#: calendar/gui/event-editor.c:1296 -msgid "FIXME: Ch_oose Form..." -msgstr "Vælg _formular..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1194 -msgid "FIXME: _Memo Style" -msgstr "_Memo stil" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1196 -msgid "FIXME: Define Print _Styles..." -msgstr "Definér udskrift _stil..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1203 -msgid "FIXME: S_end" -msgstr "_Send" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1207 -msgid "FIXME: Save Attac_hments..." -msgstr "Gem _bilag..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Slet" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1210 -msgid "FIXME: _Move to Folder..." -msgstr "_Flyt til folder..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1211 -msgid "FIXME: Cop_y to Folder..." -msgstr "_Kopiér til folder..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1213 -msgid "Page Set_up" -msgstr "Sideopsætning" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1214 -msgid "FIXME: Print Pre_view" -msgstr "Udskriv for_kig" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1235 -msgid "FIXME: Paste _Special..." -msgstr "Indsæt _special..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1240 -msgid "FIXME: Mark as U_nread" -msgstr "Mærk som _ulæst" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1244 -msgid "_Object" -msgstr "Emne" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1249 -#: calendar/gui/event-editor.c:1256 -msgid "FIXME: _Item" -msgstr "_ting" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1250 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Unread Item" -msgstr "_Ulæst ting" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1251 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "_Første ting i folder" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1258 -msgid "FIXME: _Last Item in Folder" -msgstr "_Sidste ting i folder" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1263 -msgid "FIXME: _Standard" -msgstr "_Standard" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1265 -msgid "FIXME: __Formatting" -msgstr "__Formatering" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1268 -msgid "FIXME: _Customize..." -msgstr "_Tilpas..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1273 -msgid "Pre_vious" -msgstr "Fore_gående" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1274 -msgid "Ne_xt" -msgstr "_Næste" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1278 -msgid "_Toolbars" -msgstr "Værk_tøjsbjælker" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1283 -msgid "FIXME: _File..." -msgstr "_Fil..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1284 -msgid "FIXME: It_em..." -msgstr "Tin_g..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1285 -msgid "FIXME: _Object..." -msgstr "_Objekt..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1290 -msgid "FIXME: _Font..." -msgstr "FIXME: Skri_fttype..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1291 -msgid "FIXME: _Paragraph..." -msgstr "_Afsnit..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1298 -msgid "FIXME: Desi_gn This Form" -msgstr "_Design dette skema" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1299 -msgid "FIXME: D_esign a Form..." -msgstr "_Design et skema" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1301 -msgid "FIXME: Publish _Form..." -msgstr "Publicér _skema..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1302 -msgid "FIXME: Pu_blish Form As..." -msgstr "Publicér skema som..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1304 -msgid "FIXME: Script _Debugger" -msgstr "Skript_afluser" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1309 -msgid "FIXME: _Spelling..." -msgstr "_Stavning..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1314 -msgid "_Forms" -msgstr "Sk_emaer" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "_Ny Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "Ny _kontakt fra samme firma" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "Nyt _brev til kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "Ny _meddelse til kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "Nyt _møde med kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "_Planlæg et møde..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "Ny _opgave for kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "Ny _journalopføring for kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "_Flag for opfølgning" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "Vis _kort med adresse" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "_Åbn webside" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "Videresend et _vCard" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1327 -msgid "FIXME: For_ward" -msgstr "_Videresend" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1340 -msgid "_Insert" -msgstr "_Indsæt" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1341 -msgid "F_ormat" -msgstr "F_ormat" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1342 -msgid "_Tools" -msgstr "_Værktøj" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1343 -msgid "Actio_ns" -msgstr "Ha_ndlinger" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Gem og luk" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1382 -msgid "Save the appointment and close the dialog box" -msgstr "Gem aftalen og luk dialogboksen" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:654 -msgid "Print..." -msgstr "Udskriv..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1387 -msgid "Print this item" -msgstr "Udskriv denne ting" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1388 -msgid "FIXME: Insert File..." -msgstr "Indsæt fil..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1389 -msgid "Insert a file as an attachment" -msgstr "Indsæt en fil som bilag" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:443 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:548 -#: mail/folder-browser-factory.c:50 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -#: mail/mail-view.c:147 -msgid "Delete" -msgstr "Slet" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1398 -#: calendar/gui/gncal-todo.c:376 -msgid "Delete this item" -msgstr "Slet dette punkt" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1400 -msgid "FIXME: Previous" -msgstr "Forrige" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1401 -msgid "Go to the previous item" -msgstr "Gå til forrige punkt" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1402 -msgid "FIXME: Next" -msgstr "Næste" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1403 -msgid "Go to the next item" -msgstr "Gå til næste punkt" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1404 -msgid "FIXME: Help" -msgstr "Hjælp" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1405 -msgid "See online help" -msgstr "Se hjælp" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -msgid "Assistant" -msgstr "Sekretær" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Business" -msgstr "Arbejde" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business 2" -msgstr "Arbejde 2" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Business Fax" -msgstr "Firma fax" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Callback" -msgstr "Tilbagering" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Car" -msgstr "Bil" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -msgid "Company" -msgstr "Firma" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -#: addressbook/contact-editor/e-contact-editor.c:1427 -msgid "Home" -msgstr "Hjem" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home 2" -msgstr "Hjem 2" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "Home Fax" -msgstr "Hjemme fax" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "ISDN" -msgstr "Isdn" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -msgid "Mobile" -msgstr "_Mobil" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -#: addressbook/contact-editor/e-contact-editor.c:1428 -#: mail/mail-config.glade.h:28 -msgid "Other" -msgstr "Andet" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Other Fax" -msgstr "Anden fax" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Pager" -msgstr "Kalder" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Primary" -msgstr "Primær epost" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Radio" -msgstr "Radio" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "Telex" -msgstr "Telex" - -#: addressbook/contact-editor/e-contact-editor.c:1339 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Primary Email" -msgstr "Primær epost" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 2" -msgstr "Sekundær epost" - -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Email 3" -msgstr "Tertiær epost" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"Er du sikker på at du\n" -"vil slette denne kontakt?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "Slet kontakt?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Tilføj" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Telefontyper" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Ny telefontype" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "Tilføj" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Kontaktredigering" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "_Fulde navn..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Gem som:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Hjemmeside-adresse:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Vil modtage _HTML e-post" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Adresse:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Arbejde" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Hjemme" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "_Fax på arbejde" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Mobil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "A_rbejde" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "_Dette er postadressen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "K_ontakter..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "Ka_tegorier..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "_Job titel:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Firma:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "Generel" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "_Afdeling:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "_Kontor:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Profession:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "Kalde_navn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "Ægte_fælle:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "_Fødselsdag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "Sekretær" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "_Leders navn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "Br_yllupsdag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "_Notater:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "Detaljer" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Tjek fulde navn" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Titel:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Fornavn:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Mellemnavn:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Efternavn:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "_Suffiks:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Hr.\n" -"Fr.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:437 -#: calendar/gui/calendar-commands.c:511 notes/component-factory.c:27 -msgid "New" -msgstr "Ny" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:437 -msgid "Create a new contact" -msgstr "Opret en ny kontakt" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:441 -msgid "Find" -msgstr "Find" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:441 -msgid "Find a contact" -msgstr "Find kontaktperson" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:442 -#: calendar/gui/calendar-commands.c:516 mail/folder-browser-factory.c:48 -#: mail/mail-view.c:145 -msgid "Print" -msgstr "Udskriv" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:442 -msgid "Print contacts" -msgstr "Udskriv kontakter" - -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:443 -msgid "Delete a contact" -msgstr "Fjern kontaktperson" - -#: addressbook/demo/addressbook.c:103 -#: addressbook/gui/component/addressbook.c:528 -msgid "_New Contact" -msgstr "_Ny kontaktperson" - -#: addressbook/gui/component/addressbook.c:511 -msgid "_Print Contacts..." -msgstr "_Udskriv kontakter" - -#: addressbook/gui/component/addressbook.c:521 -#: addressbook/gui/component/addressbook.c:1045 -msgid "As _Table" -msgstr "Som _tabel" - -#: addressbook/gui/component/addressbook.c:536 -msgid "N_ew Directory Server" -msgstr "N_y katalogtjener" - -#: addressbook/gui/component/addressbook.c:544 -msgid "_Search for contacts" -msgstr "" - -#: addressbook/gui/component/addressbook.c:626 -msgid "Unable to open addressbook" -msgstr "Kunne ikke åbne adressebogen" - -#: addressbook/gui/component/addressbook.c:631 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Vi kunne ikke åbne denne adressebog. Dette betyder enten\n" -"at du har angivet en forkert URI, eller ar du har forsøgt\n" -"at bruge en LDAP tjeneste men ikke har LDAP understøttelse\n" -"kompileret ind. Hvis du har angivet en URI, tjek om URI-en \n" -"er korrekt og genindtast. Hvis ikke, så har du nok prøvet\n" -"at nå en LDAP tjeneste. Hvis du ønsker at kunne bruge LDAP,\n" -"er det nødvendigt at hente og installere OpenLDAP og\n" -"rekompilere og installere evolution.\n" - -#: addressbook/gui/component/addressbook.c:914 -#: addressbook/gui/minicard/e-minicard.c:332 -msgid "Save as VCard" -msgstr "Gem som vCard" - -#: addressbook/gui/component/addressbook.c:1016 -msgid "* Click here to add a contact *" -msgstr "* Klik her for at tilføje en kontakt *" - -#: addressbook/gui/component/addressbook.c:1052 -msgid "As _Minicards" -msgstr "Som _minikort" - -#: addressbook/gui/component/addressbook.c:1103 -msgid "The URI that the Folder Browser will display" -msgstr "Uri'en som mappebladreren vil vise" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "vindue2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:88 -msgid "External Directories" -msgstr "Eksterne kataloger" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Beskrivelse:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP-tjener:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Portnummer:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Rod DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Navn:" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/select-names/select-names.glade.h:7 -msgid "Select Names" -msgstr "Vælg mappe" - -#: addressbook/gui/component/select-names/select-names.glade.h:8 -msgid "Find..." -msgstr "Find..." - -#: addressbook/gui/component/select-names/select-names.glade.h:9 -msgid "Select name from List:" -msgstr "" - -#: addressbook/gui/component/select-names/select-names.glade.h:10 -msgid "Message Recipients" -msgstr "Modtagerliste:" - -#: addressbook/gui/minicard/e-minicard-control.c:276 -msgid "Save in addressbook" -msgstr "Kunne ikke åbne adressebogen" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Der er ingen punkter at vise i denne visning\n" -"\n" -"Dobbelt-klik her for at oprette en ny kontakt." - -#: addressbook/gui/minicard/test-minicard-view.c:100 -msgid "Reflow Test" -msgstr "" - -#: addressbook/gui/minicard/test-minicard-view.c:101 -msgid "Copyright (C) 2000, Helix Code, Inc." -msgstr "Copyright (C) 2000 Helix Code, Inc." - -#: addressbook/gui/minicard/test-minicard-view.c:103 -msgid "This should test the reflow canvas item" -msgstr "" - -#. gtk_signal_connect(fb->search_entry, "changed", search_activate, fb); -#: addressbook/gui/search/e-addressbook-search-dialog.c:127 -#: mail/folder-browser.c:368 -msgid "Search" -msgstr "Søg..." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Sideopsætning:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Stilnavn:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Smugkig:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Alternativer" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Inkludér:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Sektioner:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Lige efter hinanden" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Bogstavfaner på siden" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Toptekst for hvert bogstav" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Start på en ny side" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Antal kolonner:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Blanke skemaer ved slutningen:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Skrifttyper" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Skrifttype..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Toptekster" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Krop" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Skyggelægning" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Udskriv med gråtoner" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Format" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papir" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Type:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "etiket26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Dimensioner:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Bredde:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Højde:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Papirkilde:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Marginer" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Top:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Bund:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Venstre:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Højre:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Side" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Størrelse:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Orientering" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Portræt" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Landskab" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Toptekst" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Bundtekst:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Modsat på lige sider" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Top-/bundtekst" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:596 -msgid "am" -msgstr " " - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:595 -msgid "pm" -msgstr " " - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:146 -msgid "Gpilotd calendar conduit" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:149 -msgid "Configuration utility for the calendar conduit.\n" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit.c:399 -#: calendar/conduits/calendar/calendar-conduit.c:1109 -#: calendar/conduits/todo/todo-conduit.c:443 -#: calendar/conduits/todo/todo-conduit.c:1025 -msgid "Error while communicating with calendar server" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit.c:776 -#: calendar/conduits/calendar/calendar-conduit.c:778 -#: calendar/conduits/todo/todo-conduit.c:707 -#: calendar/conduits/todo/todo-conduit.c:709 -msgid "Could not start gnomecal server" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit.c:806 -#: calendar/conduits/calendar/calendar-conduit.c:809 -msgid "Could not read pilot's DateBook application block" -msgstr "" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:146 -msgid "Gpilotd todo conduit" -msgstr "" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:149 -msgid "Configuration utility for the todo conduit.\n" -msgstr "" - -#: calendar/conduits/todo/todo-conduit.c:737 -#: calendar/conduits/todo/todo-conduit.c:740 -msgid "Could not read pilot's ToDo application block" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -msgid "Outline:" -msgstr "Omrids:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Headings:" -msgstr "Overskrifter:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Empty days:" -msgstr "Tomme dage:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Appointments:" -msgstr "Aftaler:" - -#: calendar/gui/calendar-commands.c:63 -msgid "Highlighted day:" -msgstr "Fremhævet dag:" - -#: calendar/gui/calendar-commands.c:64 -msgid "Day numbers:" -msgstr "Dagnumre:" - -#: calendar/gui/calendar-commands.c:65 -msgid "Current day's number:" -msgstr "Nummer for idag:" - -#: calendar/gui/calendar-commands.c:66 -msgid "To-Do item that is not yet due:" -msgstr "Opgave som ikke skal laves endnu:" - -#: calendar/gui/calendar-commands.c:67 -msgid "To-Do item that is due today:" -msgstr "Opgave som skal laves idag:" - -#: calendar/gui/calendar-commands.c:68 -msgid "To-Do item that is overdue:" -msgstr "Opgave som er overskredet:" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "GNOME kalender" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "Gnomes personlige kalender og skema administrator." - -#: calendar/gui/calendar-commands.c:401 tests/ui-tests/message-browser.c:676 -msgid "File not found" -msgstr "Fil ikke fundet" - -#: calendar/gui/calendar-commands.c:423 -msgid "Open calendar" -msgstr "Åbn kalender" - -#: calendar/gui/calendar-commands.c:462 -msgid "Save calendar" -msgstr "Gem kalender" - -#: calendar/gui/calendar-commands.c:489 calendar/gui/gncal-todo.c:763 -#: calendar/gui/gncal-todo.c:767 -msgid "Day" -msgstr "Dag" - -#: calendar/gui/calendar-commands.c:489 -msgid "Show 1 day" -msgstr "Vis én dag" - -#: calendar/gui/calendar-commands.c:492 -msgid "5 Days" -msgstr "Fem dage" - -#: calendar/gui/calendar-commands.c:492 -msgid "Show the working week" -msgstr "Vis arbejdsugen" - -#: calendar/gui/calendar-commands.c:495 calendar/gui/gncal-todo.c:762 -msgid "Week" -msgstr "Uge" - -#: calendar/gui/calendar-commands.c:495 -msgid "Show 1 week" -msgstr "Vis én uge" - -#: calendar/gui/calendar-commands.c:498 -msgid "Month" -msgstr "Måned" - -#: calendar/gui/calendar-commands.c:498 -msgid "Show 1 month" -msgstr "Vis én måned" - -#: calendar/gui/calendar-commands.c:502 -msgid "Year" -msgstr "År" - -#: calendar/gui/calendar-commands.c:502 -msgid "Show 1 year" -msgstr "Vis ét år" - -#: calendar/gui/calendar-commands.c:511 calendar/gui/calendar-commands.c:663 -msgid "Create a new appointment" -msgstr "Opret en ny aftale" - -#: calendar/gui/calendar-commands.c:516 calendar/gui/calendar-commands.c:655 -msgid "Print this calendar" -msgstr "Print denne kalender" - -#: calendar/gui/calendar-commands.c:520 -msgid "Prev" -msgstr "Forr." - -#: calendar/gui/calendar-commands.c:520 -msgid "Go back in time" -msgstr "Gå tilbage i tid" - -#: calendar/gui/calendar-commands.c:521 -msgid "Today" -msgstr "I dag" - -#: calendar/gui/calendar-commands.c:521 -msgid "Go to present time" -msgstr "Gå til nutiden" - -#: calendar/gui/calendar-commands.c:522 -msgid "Next" -msgstr "Næste" - -#: calendar/gui/calendar-commands.c:522 -msgid "Go forward in time" -msgstr "Gå frem i tid" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to" -msgstr "Gå til" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to a specific date" -msgstr "Gå til en specifik dato" - -#. file menu -#: calendar/gui/calendar-commands.c:640 -msgid "New Ca_lendar" -msgstr "Ny ka_lender" - -#: calendar/gui/calendar-commands.c:641 -msgid "Create a new calendar" -msgstr "Opret en ny kalender" - -#: calendar/gui/calendar-commands.c:644 -msgid "Open Ca_lendar" -msgstr "Åbn k_alender" - -#: calendar/gui/calendar-commands.c:645 -msgid "Open a calendar" -msgstr "Åbn en kalender" - -#: calendar/gui/calendar-commands.c:649 calendar/gui/calendar-commands.c:650 -msgid "Save Calendar As" -msgstr "Gem kalender som" - -#: calendar/gui/calendar-commands.c:663 -msgid "_New appointment..." -msgstr "_Ny aftale..." - -#: calendar/gui/calendar-commands.c:671 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "Opsætning" - -#: calendar/gui/calendar-commands.c:678 calendar/gui/calendar-commands.c:679 -msgid "About Calendar" -msgstr "Om kalenderen" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:721 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:721 -msgid "'s calendar" -msgstr "s kalender" - -#: calendar/gui/calendar-model.c:323 -msgid "Public" -msgstr "Of_fentlig" - -#: calendar/gui/calendar-model.c:326 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "Privat" - -#: calendar/gui/calendar-model.c:329 -msgid "Confidential" -msgstr "_Fortrolig" - -#: calendar/gui/calendar-model.c:332 calendar/gui/calendar-model.c:499 -msgid "Unknown" -msgstr "Ukendt fejl" - -#: calendar/gui/calendar-model.c:419 -msgid "N" -msgstr "N" - -#: calendar/gui/calendar-model.c:419 -msgid "S" -msgstr "søn" - -#: calendar/gui/calendar-model.c:421 -msgid "E" -msgstr "" - -#: calendar/gui/calendar-model.c:421 -msgid "W" -msgstr "ons" - -#: calendar/gui/calendar-model.c:493 -msgid "Transparent" -msgstr "Gennemsigtig" - -#: calendar/gui/calendar-model.c:496 -msgid "Opaque" -msgstr "" - -#: calendar/gui/calendar-model.c:747 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"Datoen skal skrives ind på formatet: \n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:820 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"Den geografiske position skal skrives ind på formatet: \n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:865 -msgid "The percent value must be between 0 and 100" -msgstr "Procentværdien skal være mellem 0 og 100" - -#: calendar/gui/calendar-model.c:898 -msgid "The priority must be between 0 and 10" -msgstr "Prioriteten skal være mellem 0 og 10" - -#: calendar/gui/control-factory.c:132 -msgid "The URI that the calendar will display" -msgstr "URIen som kalenderen skal vise" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Alarm på %A %d %b %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Melding om din aftale på %A %d %b %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "Intet sammendrag" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Luk" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1086 -msgid "Snooze" -msgstr "Udsæt" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Redigér aftale:" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Udsæt-tid (minutter)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1209 -msgid "FIXME: _Delete" -msgstr "_Slet" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "U_komplet opgave" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1311 -msgid "FIXME: Chec_k Names" -msgstr "_Tjek navne" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1312 -msgid "FIXME: Address _Book..." -msgstr "Adresse_bog..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "_Ny opgave" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "S_end statusrapport" - -#: calendar/gui/dialogs/task-editor.c:358 -msgid "FIXME: _Mark Complete" -msgstr "_Markér som fuldført" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1321 -msgid "FIXME: Rec_urrence..." -msgstr "Gen_tagelse" - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "Overspring genta_gelse" - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "Tildel o_pgave" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "Sva_r" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "Svar til a_lle" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1381 -msgid "FIXME: Save and Close" -msgstr "Gem og luk" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "Gem opgaven og luk dialogboksen" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1386 -msgid "FIXME: Print..." -msgstr "Udskriv" - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1391 -msgid "FIXME: Recurrence..." -msgstr "Gentagelse..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1392 -msgid "Configure recurrence rules" -msgstr "Konfigurér regler for gentagelser" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "Tildel opgave..." - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "Tildel opgaven til nogen" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1397 -msgid "FIXME: Delete" -msgstr "Slet" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "E_mne:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "Ejer:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "Sta_rt dato:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "Slut-_dato:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "_Status:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"Ikke påbegyndt\n" -"Under udførelse\n" -"Fuldført\n" -"Fjernet\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "Ikke startet" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "_Prioritet:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"Høj\n" -"Normal\n" -"Lav\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -msgid "High" -msgstr "Høj" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% færdi_g:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "_Kontakter..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "Opgave" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "Fuldført dato:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "Placering:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "Resurser:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "Kommentar" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "Fuldført" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "Oprettet" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "Beskrivelse" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "Tidsmærking" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "Start-dato" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "Slut-dato" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "Geografisk placering" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "Dato for sidste ændring" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "Placering" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "Organisstor" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% færdig" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:476 -#: calendar/gui/prop.c:609 mail/message-list.c:508 -msgid "Priority" -msgstr "Prioritet" - -#: calendar/gui/e-calendar-table.c:260 -msgid "TaskPad" -msgstr "Opgaveblok" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "Påmindelse" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "Åbn..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "Åbn opgaven" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "Markér som fuldført" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "Markér opgaven som fuldført" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "Slet opgaven" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i minutters opdeling" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Ny aftale..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Redigér denne aftale..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Slet denne aftale" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Gør denne aftale flytbar" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "Slet denne opføring" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Slet alle opføringer" - -#: calendar/gui/event-editor.c:294 -msgid "Edit Appointment" -msgstr "Redigér aftale" - -#: calendar/gui/event-editor.c:300 -msgid "No summary" -msgstr "Ingen sammendrag" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Appointment - %s" -msgstr "Aftale - %s" - -#: calendar/gui/event-editor.c:309 -#, c-format -msgid "Task - %s" -msgstr "Opgave - %s" - -#: calendar/gui/event-editor.c:312 -#, c-format -msgid "Journal entry - %s" -msgstr "Journalpunkt - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:613 calendar/gui/event-editor.c:717 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1276 -msgid "FIXME: Ca_lendar..." -msgstr "_Kalender..." - -#: calendar/gui/event-editor.c:1319 -msgid "FIXME: _New Appointment" -msgstr "_Ny aftale" - -#: calendar/gui/event-editor.c:1323 -msgid "FIXME: Invite _Attendees..." -msgstr "Invitér _deltagere..." - -#: calendar/gui/event-editor.c:1324 -msgid "FIXME: C_ancel Invitation..." -msgstr "Annullér invitation" - -#: calendar/gui/event-editor.c:1326 -msgid "FIXME: Forward as v_Calendar" -msgstr "Videresend som v_Calendar" - -#: calendar/gui/event-editor.c:1394 -msgid "FIXME: Invite Attendees..." -msgstr "Invitér deltagere..." - -#: calendar/gui/event-editor.c:1395 -msgid "Invite attendees to a meeting" -msgstr "Invitér deltagere til et møde" - -#: calendar/gui/event-editor.c:1838 -msgid "%a %b %d %Y" -msgstr "%a %d %b %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "event-editor-dialog" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "_Sammendrag:" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "_Ejer:" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "Tid" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "Start-tid:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "Slut-tid:" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "Varer he_le dagen" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "Klassificering" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "Of_fentlig" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "Pri_vat" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "_Fortrolig" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"Minutter\n" -"Timer\n" -"Dage\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "_Vis" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "_Lyd" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "_Program" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "_E-post" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "Send _til:" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "Kø_r program:" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "Regel for gentagelse" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:877 -msgid "None" -msgstr "Ingen" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "Daglig" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Ugentlig" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Månedlig" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Årlig" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "etiket23" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "Hver " - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "dag(e)" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "etiket24" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "uge(r)" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "man" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "tir" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "ons" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "tor" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "fre" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "lør" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "søn" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "etiket25" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "Gentag den" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr ". dag i måneden" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1.\n" -"2.\n" -"3.\n" -"4.\n" -"5.\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"mandag\n" -"tirsdag\n" -"onsdag\n" -"torsdag\n" -"fredag\n" -"lørdag\n" -"søndag\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "Hver" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "måned(er)" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "år" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "etiket27" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "Slutdato" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "Gentag for altid" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "Slut den " - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "Slut efter" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "gentagelser" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "Undtagelser" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "Ændr" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "Gentagelse" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "januar" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "februar" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "marts" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "april" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "maj" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "juni" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "juli" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "august" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "september" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "sept" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "oktober" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "november" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "december" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "søndag" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "mandag" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "tirsdag" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "tirs" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "onsdag" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "ons" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "torsdag" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "tor" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "tors" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "fredag" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "lørdag" - -#: calendar/gui/getdate.y:420 filter/filter-datespec.c:61 -msgid "year" -msgstr "år" - -#: calendar/gui/getdate.y:421 filter/filter-datespec.c:62 -msgid "month" -msgstr "måned" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "14-dage" - -#: calendar/gui/getdate.y:423 filter/filter-datespec.c:63 -msgid "week" -msgstr "uge" - -#: calendar/gui/getdate.y:424 filter/filter-datespec.c:64 -msgid "day" -msgstr "dag" - -#: calendar/gui/getdate.y:425 filter/filter-datespec.c:65 -msgid "hour" -msgstr "time" - -#: calendar/gui/getdate.y:426 filter/filter-datespec.c:66 -msgid "minute" -msgstr "minut" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 filter/filter-datespec.c:67 -msgid "second" -msgstr "sekund" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "sek" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "imorgen" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "igår" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "idag" - -#: calendar/gui/getdate.y:438 filter/filter-datespec.c:504 -#: filter/filter-datespec.c:664 -msgid "now" -msgstr "nu" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "forrige" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "denne" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "næste" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "første" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "tredje" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "fjerde" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "femte" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "sjette" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "syvende" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "ottende" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "niende" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "tiende" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "elvte" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "tolvte" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "siden" - -#: calendar/gui/gncal-todo.c:167 -msgid "Create to-do item" -msgstr "Opret opgavepunkt" - -#: calendar/gui/gncal-todo.c:167 -msgid "Edit to-do item" -msgstr "Redigér opgavepunkt" - -#: calendar/gui/gncal-todo.c:203 -msgid "Summary:" -msgstr "Sammendrag:" - -#: calendar/gui/gncal-todo.c:214 -msgid "Due Date:" -msgstr "Færdig-dato:" - -#: calendar/gui/gncal-todo.c:225 -msgid "Priority:" -msgstr "Prioritet:" - -#: calendar/gui/gncal-todo.c:243 -msgid "Item Comments:" -msgstr "Kommentarer for punkt:" - -#: calendar/gui/gncal-todo.c:374 -msgid "Add to-do item..." -msgstr "Tilføj opgavepunkt..." - -#: calendar/gui/gncal-todo.c:375 -msgid "Edit this item..." -msgstr "Redigér denne opføring..." - -#: calendar/gui/gncal-todo.c:474 -msgid "Summary" -msgstr "Sammendrag" - -#: calendar/gui/gncal-todo.c:475 calendar/gui/prop.c:608 -msgid "Due Date" -msgstr "Færdig-dato" - -#: calendar/gui/gncal-todo.c:477 -msgid "Time Left" -msgstr "Tid tilbage" - -#. Label -#: calendar/gui/gncal-todo.c:489 -msgid "To-do list" -msgstr "Opgaveliste" - -#. Add -#: calendar/gui/gncal-todo.c:528 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Tilføj..." - -#. Edit -#: calendar/gui/gncal-todo.c:537 -msgid "Edit..." -msgstr "Redigér..." - -#: calendar/gui/gncal-todo.c:762 -msgid "Weeks" -msgstr "Uger" - -#: calendar/gui/gncal-todo.c:763 calendar/gui/gncal-todo.c:767 -msgid "Days" -msgstr "Dage" - -#: calendar/gui/gncal-todo.c:768 calendar/gui/gncal-todo.c:772 -msgid "Hours" -msgstr "Timer" - -#: calendar/gui/gncal-todo.c:768 calendar/gui/gncal-todo.c:772 -msgid "Hour" -msgstr "Time" - -#: calendar/gui/gncal-todo.c:773 calendar/gui/gncal-todo.c:777 -msgid "Minutes" -msgstr "Minutter" - -#: calendar/gui/gncal-todo.c:773 calendar/gui/gncal-todo.c:777 -msgid "Minute" -msgstr "Minut" - -#: calendar/gui/gncal-todo.c:778 calendar/gui/gncal-todo.c:782 -msgid "Seconds" -msgstr "Sekunder" - -#: calendar/gui/gncal-todo.c:778 calendar/gui/gncal-todo.c:782 -msgid "Second" -msgstr "Sekund" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1094 -#: calendar/gui/gnome-cal.c:1150 -msgid "Reminder of your appointment at " -msgstr "Påmindelse om din aftale " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1099 calendar/gui/gnome-cal.c:1154 -msgid "Ok" -msgstr "Ok" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "År:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Gå til dato" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Venligst vælg datoen du vil gå til.\n" -"Når du klikker på en dag vil du flytte\n" -"dig til denne dato." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Gå til idag" - -#: calendar/gui/print.c:288 -msgid "1st" -msgstr "1." - -#: calendar/gui/print.c:288 -msgid "2nd" -msgstr "2." - -#: calendar/gui/print.c:288 -msgid "3rd" -msgstr "3." - -#: calendar/gui/print.c:288 -msgid "4th" -msgstr "4." - -#: calendar/gui/print.c:288 -msgid "5th" -msgstr "5." - -#: calendar/gui/print.c:289 -msgid "6th" -msgstr "6." - -#: calendar/gui/print.c:289 -msgid "7th" -msgstr "7." - -#: calendar/gui/print.c:289 -msgid "8th" -msgstr "8." - -#: calendar/gui/print.c:289 -msgid "9th" -msgstr "9." - -#: calendar/gui/print.c:289 -msgid "10th" -msgstr "10." - -#: calendar/gui/print.c:290 -msgid "11th" -msgstr "11." - -#: calendar/gui/print.c:290 -msgid "12th" -msgstr "12." - -#: calendar/gui/print.c:290 -msgid "13th" -msgstr "13." - -#: calendar/gui/print.c:290 -msgid "14th" -msgstr "14." - -#: calendar/gui/print.c:290 -msgid "15th" -msgstr "15." - -#: calendar/gui/print.c:291 -msgid "16th" -msgstr "16." - -#: calendar/gui/print.c:291 -msgid "17th" -msgstr "17." - -#: calendar/gui/print.c:291 -msgid "18th" -msgstr "18." - -#: calendar/gui/print.c:291 -msgid "19th" -msgstr "19." - -#: calendar/gui/print.c:291 -msgid "20th" -msgstr "20." - -#: calendar/gui/print.c:292 -msgid "21st" -msgstr "21." - -#: calendar/gui/print.c:292 -msgid "22nd" -msgstr "22." - -#: calendar/gui/print.c:292 -msgid "23rd" -msgstr "23." - -#: calendar/gui/print.c:292 -msgid "24th" -msgstr "24." - -#: calendar/gui/print.c:292 -msgid "25th" -msgstr "25." - -#: calendar/gui/print.c:293 -msgid "26th" -msgstr "26." - -#: calendar/gui/print.c:293 -msgid "27th" -msgstr "27." - -#: calendar/gui/print.c:293 -msgid "28th" -msgstr "28." - -#: calendar/gui/print.c:293 -msgid "29th" -msgstr "29." - -#: calendar/gui/print.c:293 -msgid "30th" -msgstr "30." - -#: calendar/gui/print.c:294 -msgid "31st" -msgstr "31." - -#: calendar/gui/print.c:349 -msgid "Su" -msgstr "søn" - -#: calendar/gui/print.c:349 -msgid "Mo" -msgstr "man" - -#: calendar/gui/print.c:349 -msgid "Tu" -msgstr "tir" - -#: calendar/gui/print.c:349 -msgid "We" -msgstr "ons" - -#: calendar/gui/print.c:349 -msgid "Th" -msgstr "tor" - -#: calendar/gui/print.c:349 -msgid "Fr" -msgstr "fre" - -#: calendar/gui/print.c:349 -msgid "Sa" -msgstr "lør" - -#: calendar/gui/print.c:937 -msgid "TODO Items" -msgstr "Opgavepunkter" - -#. Day -#: calendar/gui/print.c:1038 -msgid "Current day (%a %b %d %Y)" -msgstr "I dag (%a %d %b %Y)" - -#: calendar/gui/print.c:1058 calendar/gui/print.c:1072 -#: calendar/gui/print.c:1073 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1059 calendar/gui/print.c:1060 -#: calendar/gui/print.c:1074 calendar/gui/print.c:1075 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1062 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Denne uge (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1079 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Denne uge (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1085 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Denne uge (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1098 -msgid "Current month (%a %Y)" -msgstr "Denne måned (%a %Y)" - -#. Year -#: calendar/gui/print.c:1105 -msgid "Current year (%Y)" -msgstr "Dette år (%Y)" - -#: calendar/gui/print.c:1142 -msgid "Print Calendar" -msgstr "Udskriv kalender" - -#: calendar/gui/print.c:1307 -msgid "Print Preview" -msgstr "Forhåndsvisning af udskrift" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "Tidsvisning" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "Tidsformat" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "12 timer (AM/PM)" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "24 timer" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "Ugen starter med" - -#: calendar/gui/prop.c:351 -msgid "Sunday" -msgstr "søndag" - -#: calendar/gui/prop.c:352 -msgid "Monday" -msgstr "mandag" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "Tidsspænd" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Venligst vælg start og slut-tidene du ønsker\n" -"der skal vises i dagvisningen og ugevisningen.\n" -"Tider udenfor dette område vil ikke vises\n" -"som standard." - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "Dagens start:" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "Dagens slutning:" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "Farver i visning" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "Farver" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "Vis på opgavelisten:" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "Tid til afslutning" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "Alternativer for stil for opgaveliste:" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "Fremhæv overskredne opgaver" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "Fremhæv opføringer som ikke skal afsluttes endnu" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "Fremhæv punkter som skal afsluttes idag" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "Egenskaber for opgaveliste" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "Opgaveliste" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "Alarmer" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -msgid "Alarm Properties" -msgstr "Egenskaber for alarmer" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "Dyt ved visning af alarmer" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "Tidsafbrud for lydalarmer" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr " sekunder" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "Slå udsættelse til for " - -#. populate default frame/box -#: calendar/gui/prop.c:840 -msgid "Defaults" -msgstr "Forvalg" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "Klip" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "Klip valgt punkt ud til klippebordet" - -#: composer/e-msg-composer-address-dialog.c:186 -#: mail/folder-browser-factory.c:46 -msgid "Copy" -msgstr "Kopiér" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "Kopiér valgt punkt til klippebordet" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "Indsæt" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "Indsæt fra klippebordet" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "Vælg modtagernes adresser" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Modtagerliste:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Søg..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Navn" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "Adresse" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Egenskaber..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "Til: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "etiket9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "etiket7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "etiket8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u byte" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fk" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Vedhæft bilag" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Fjern" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Fjern valgte punkter fra bilagslisten" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Vedhæft bilag..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Vedhæft bilag til meddelelsen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Egenskaber for bilag" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME-type:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Filnavn:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "Fra:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "Klik her for adressebogen" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "Indtast den identitet som du ønsker at sende denne meddelelse som" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "Til:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "Indtast modtagerne for meddelelsen" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Indtast adresserne som skal modtage en kopi af meddelelsen" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Indtast adresserne som skal modtage en kopi af meddelelsen uden at komme til " -"syne i meddelelsens modtagerliste." - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "Emne:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "Indtast emnet for meddelelsen" - -#: composer/e-msg-composer.c:451 -msgid "Save as..." -msgstr "Gem som..." - -#: composer/e-msg-composer.c:462 -#, c-format -msgid "Error saving file: %s" -msgstr "Fejl ved gemning af fil: %s" - -#: composer/e-msg-composer.c:482 -#, c-format -msgid "Error loading file: %s" -msgstr "Fejl ved indlæsning af fil: %s" - -#: composer/e-msg-composer.c:504 -msgid "Saving changes to message..." -msgstr "Gem ændringer til meddelelse..." - -#: composer/e-msg-composer.c:506 -msgid "About to save changes to message..." -msgstr "Ved at gemme ændringer til meddelelse..." - -#: composer/e-msg-composer.c:590 shell/e-shell-view-menu.c:165 -msgid "Evolution" -msgstr "Evolution" - -#: composer/e-msg-composer.c:596 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"Denne meddelelse er ikke sendt.\n" -"\n" -"Vil du gemme ændringene?" - -#: composer/e-msg-composer.c:618 -msgid "Open file" -msgstr "Åbn fil" - -#: composer/e-msg-composer.c:730 -msgid "That file does not exist." -msgstr "Den fil eksisterer ikke." - -#: composer/e-msg-composer.c:740 -msgid "That is not a regular file." -msgstr "Dette er ikke en almindelig fil." - -#: composer/e-msg-composer.c:750 -msgid "That file exists but is not readable." -msgstr "Den fil eksisterer men kan ikke læses." - -#: composer/e-msg-composer.c:760 -msgid "That file appeared accesible but open(2) failed." -msgstr "Den fil så ud til at være tilgængelig, men open(2) fejlede." - -#: composer/e-msg-composer.c:782 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"Filen er meget stor (mere end 100 k).\n" -"Er du sikker på at du ønsker at indsætte den?" - -#: composer/e-msg-composer.c:803 -msgid "An error occurred while reading the file." -msgstr "En fejl skete ved læsning af filen." - -#: composer/e-msg-composer.c:899 shell/e-shell-view-menu.c:434 -msgid "_File" -msgstr "_Fil" - -#: composer/e-msg-composer.c:905 -msgid "_Open..." -msgstr "_Åbn..." - -#: composer/e-msg-composer.c:906 -msgid "Load a previously saved message" -msgstr "Indlæs en tidligere gemt meddelse" - -#: composer/e-msg-composer.c:914 -msgid "_Save..." -msgstr "Gem..." - -#: composer/e-msg-composer.c:915 -msgid "Save message" -msgstr "Gem meddelelsen" - -#: composer/e-msg-composer.c:923 -msgid "_Save as..." -msgstr "_Gem som..." - -#: composer/e-msg-composer.c:924 -msgid "Save message with a different name" -msgstr "Gem meddelelse med et andet navn" - -#: composer/e-msg-composer.c:932 -msgid "Save in _folder..." -msgstr "Gem i _mappe..." - -#: composer/e-msg-composer.c:933 -msgid "Save the message in a specified folder" -msgstr "Gem meddelelsen i en specificeret mappe" - -#: composer/e-msg-composer.c:942 -msgid "_Insert text file... (FIXME)" -msgstr "_Indsæt tekstfil..." - -#: composer/e-msg-composer.c:943 -msgid "Insert a file as text into the message" -msgstr "Indsæt en fil som tekst i meddelelsen" - -#: composer/e-msg-composer.c:952 -msgid "_Send" -msgstr "_Send" - -#: composer/e-msg-composer.c:953 -msgid "Send the message" -msgstr "Send meddelelsen" - -#: composer/e-msg-composer.c:963 -msgid "_Close..." -msgstr "_Luk..." - -#: composer/e-msg-composer.c:964 -msgid "Quit the message composer" -msgstr "Afslut meddelsesskriver" - -#: composer/e-msg-composer.c:977 shell/e-shell-view-menu.c:478 -msgid "_Edit" -msgstr "_Redigér" - -#: composer/e-msg-composer.c:988 -msgid "_Format" -msgstr "_Format" - -#: composer/e-msg-composer.c:994 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:995 -msgid "Send the mail in HTML format" -msgstr "Send brevet i HTML format" - -#: composer/e-msg-composer.c:1008 mail/folder-browser-factory.c:185 -#: shell/e-shell-view-menu.c:383 shell/e-shell-view-menu.c:489 -#: shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "_Vis" - -#: composer/e-msg-composer.c:1014 -msgid "Show _attachments" -msgstr "Vis _bilag" - -#: composer/e-msg-composer.c:1015 -msgid "Show/hide attachments" -msgstr "Vis/skjul bilag" - -#: composer/e-msg-composer.c:1048 -msgid "Send" -msgstr "Send" - -#: composer/e-msg-composer.c:1049 -msgid "Send this message" -msgstr "Send denne meddelelse" - -#: composer/e-msg-composer.c:1058 -msgid "Attach" -msgstr "Vedhæft" - -#: composer/e-msg-composer.c:1059 -msgid "Attach a file" -msgstr "Vedhæft en fil" - -#: composer/e-msg-composer.c:1246 -msgid "Compose a message" -msgstr "Skriv en meddelelse" - -#: filter/filter-datespec.c:61 -msgid "years" -msgstr "år" - -#: filter/filter-datespec.c:62 -msgid "months" -msgstr "måneder" - -#: filter/filter-datespec.c:63 -msgid "weeks" -msgstr "uger" - -#: filter/filter-datespec.c:64 -msgid "days" -msgstr "dage" - -#: filter/filter-datespec.c:65 -msgid "hours" -msgstr "timer" - -#: filter/filter-datespec.c:66 -msgid "minutes" -msgstr "minutter" - -#: filter/filter-datespec.c:67 -msgid "seconds" -msgstr "sekunder" - -#: filter/filter-datespec.c:232 -msgid "" -"The message's date will be compared against\n" -"whatever the time is when the filter is run\n" -"or vfolder is opened." -msgstr "" - -#: filter/filter-datespec.c:254 -msgid "" -"The message's date will be compared against\n" -"the time that you specify here." -msgstr "" - -#: filter/filter-datespec.c:293 -msgid "" -"The message's date will be compared against\n" -"a time relative to when the filter is run;\n" -"\"a week ago\", for example." -msgstr "" - -#. keep in sync with FilterDatespec_type! -#: filter/filter-datespec.c:328 -msgid "the current time" -msgstr "den aktuelle tid" - -#: filter/filter-datespec.c:328 -msgid "a time you specify" -msgstr "et tidspunkt du angiver" - -#: filter/filter-datespec.c:329 -msgid "a time relative to the current time" -msgstr "et tidspunkt relativt til den aktuelle tid" - -#. The label -#: filter/filter-datespec.c:387 -msgid "Compare against" -msgstr "Sammenlign med" - -#: filter/filter-datespec.c:661 -msgid "" -msgstr "" - -#: filter/filter-editor.c:156 filter/score-editor.c:126 -#: filter/vfolder-editor.c:152 -msgid "Add Rule" -msgstr "Tilføj regel" - -#: filter/filter-editor.c:188 -msgid "Edit Rule" -msgstr "Redigér regel" - -#: filter/filter-filter.c:397 filter/filter-rule.c:534 -msgid "Less" -msgstr "Mindre" - -#: filter/filter-filter.c:400 filter/filter-rule.c:537 -msgid "More" -msgstr "Mere" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "Vælg mappe" - -#: filter/filter-folder.c:205 -msgid "Enter folder URI" -msgstr "" - -#: filter/filter-folder.c:247 -msgid "" -msgstr "" - -#: filter/filter-part.c:420 -msgid "Test" -msgstr "Test" - -#: filter/score-editor.c:160 -msgid "Edit Score Rule" -msgstr "Redigér skoringsregel" - -#: filter/vfolder-editor.c:186 -msgid "Edit VFolder Rule" -msgstr "" - -#: mail/component-factory.c:187 -msgid "Cannot initialize Evolution's mail component." -msgstr "Kan ikke initialisere Evolutions e-postkomponent." - -#: mail/folder-browser-factory.c:33 -msgid "Get mail" -msgstr "Hent post" - -#: mail/folder-browser-factory.c:33 -msgid "Check for new mail" -msgstr "Tjek for ny e-post" - -#: mail/folder-browser-factory.c:34 -msgid "Compose" -msgstr "Skriv" - -#: mail/folder-browser-factory.c:34 -msgid "Compose a new message" -msgstr "Skriv en ny meddelelse" - -#. GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), -#. save_msg, GNOME_STOCK_PIXMAP_SAVE), -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply" -msgstr "Svar" - -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply to the sender of this message" -msgstr "Svar til afsenderen af denne meddelelse" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to All" -msgstr "Svar til alle" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to all recipients of this message" -msgstr "Svar til alle modtagere af denne meddelelse" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward" -msgstr "Videresend" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward this message" -msgstr "Videresend denne meddelelse" - -#: mail/folder-browser-factory.c:45 -msgid "Move" -msgstr "Flyt" - -#: mail/folder-browser-factory.c:45 -msgid "Move message to a new folder" -msgstr "Flyt meddelelsen til en ny mappe" - -#: mail/folder-browser-factory.c:46 -msgid "Copy message to a new folder" -msgstr "Kopiér meddelesen til en ny mappe" - -#: mail/folder-browser-factory.c:48 mail/mail-view.c:145 -msgid "Print the selected message" -msgstr "Udskriv den valgte meddelelse" - -#: mail/folder-browser-factory.c:50 mail/mail-view.c:147 -msgid "Delete this message" -msgstr "Slet denne meddelelse" - -#: mail/folder-browser-factory.c:71 -#, c-format -msgid "Run filter \"%s\"" -msgstr "Kør filter '%s'" - -#: mail/folder-browser-factory.c:127 -msgid "_Threaded Message List" -msgstr "_Trådet meddelelsesliste" - -#: mail/folder-browser-factory.c:137 -msgid "_Print Message" -msgstr "Udskriv meddelelse" - -#: mail/folder-browser-factory.c:146 -msgid "F_older" -msgstr "_Mappe" - -#: mail/folder-browser-factory.c:152 -msgid "_Mark all as Read" -msgstr "_Markér alle meddelelser som læst" - -#: mail/folder-browser-factory.c:158 -msgid "_Expunge" -msgstr "_Udslet" - -#: mail/folder-browser-factory.c:165 -msgid "_Configure Folder" -msgstr "_Konfigurér mappe" - -#: mail/folder-browser-factory.c:172 -msgid "_Message" -msgstr "_Meddelelse" - -#: mail/folder-browser-factory.c:178 -msgid "E_dit" -msgstr "Redigér" - -#: mail/folder-browser-factory.c:192 -msgid "Mail _Filters ..." -msgstr "Post_filtre ..." - -#: mail/folder-browser-factory.c:199 -msgid "_vFolder Editor ..." -msgstr "_VFolder redigering ..." - -#: mail/folder-browser-factory.c:206 -msgid "_Mail Configuration ..." -msgstr "_Post konfiguration ..." - -#: mail/folder-browser-factory.c:213 -msgid "Forget _Passwords" -msgstr "Glem _adgangskoder" - -#: mail/folder-browser.c:371 -msgid "Save" -msgstr "Gem" - -#: mail/mail-callbacks.c:134 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Denne meddelse har intet emne.\n" -"Skal den sendes alligevel?" - -#: mail/mail-callbacks.c:166 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"Du skal konfigurere en identitet\n" -"før du kan sende post." - -#: mail/mail-callbacks.c:182 -msgid "" -"You need to configure a mail transport\n" -"before you can send mail." -msgstr "" -"Du skal konfigurere en post-transport\n" -"før du kan sende e-post." - -#: mail/mail-callbacks.c:389 -msgid "Move message(s) to" -msgstr "Flyt meddelelse(r) til" - -#: mail/mail-callbacks.c:391 -msgid "Copy message(s) to" -msgstr "Kopiér meddelelse(r) til" - -#: mail/mail-callbacks.c:448 -msgid "" -"You may only edit messages saved\n" -"in the Drafts folder." -msgstr "" - -#: mail/mail-callbacks.c:536 -#, c-format -msgid "" -"Error loading filter information:\n" -"%s" -msgstr "" -"Fejl ved indlæsning af filter information:\n" -"%s" - -#: mail/mail-config-gui.c:431 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Angiv dit navn og epost-adresse som skal bruges i udgående post. Du kan også " -"eventuelt angive navnet på din organisation, og navnet på den fil som din " -"signatur kan læses fra." - -#: mail/mail-config-gui.c:444 -msgid "Full name:" -msgstr "Fulde navn:" - -#: mail/mail-config-gui.c:468 -msgid "Email address:" -msgstr "E-post adresse:" - -#: mail/mail-config-gui.c:483 -msgid "Organization:" -msgstr "Organisation:" - -#: mail/mail-config-gui.c:494 -msgid "Signature file:" -msgstr "Signaturfil:" - -#: mail/mail-config-gui.c:499 mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "Signaturfil" - -#: mail/mail-config-gui.c:898 -msgid "Server:" -msgstr "Tjener:" - -#: mail/mail-config-gui.c:904 -msgid "Username:" -msgstr "Brugernavn:" - -#: mail/mail-config-gui.c:910 -msgid "Path:" -msgstr "Sti:" - -#: mail/mail-config-gui.c:918 -msgid "Authentication:" -msgstr "Autentisering:" - -#: mail/mail-config-gui.c:930 -msgid "Detect supported types..." -msgstr "Søg efter understøttede typer..." - -#: mail/mail-config-gui.c:955 -msgid "Don't delete messages from server" -msgstr "Slet ikke meddelser fra server" - -#: mail/mail-config-gui.c:967 -msgid "Test Settings" -msgstr "Test-opsætning" - -#: mail/mail-config-gui.c:1099 mail/mail-config-gui.c:1147 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"vælg den type postprogram du har, og angiv den relevante information om " -"det,\n" -"\n" -"Hvis tjenesten behøver autentifikation kan du klikke på knappen med 'find " -"understøttede typer' efter at have angivet de andre informationer." - -#: mail/mail-config-gui.c:1123 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Vælg den type postprogram du har, og angiv den relevante information om " -"det,\n" -"\n" -"Hvis tjenesten behøver autentifikation kan du klikke på knappen med 'find " -"understøttede typer' efter at have angivet de andre informationer." - -#: mail/mail-config-gui.c:1142 -msgid "Mail transport type:" -msgstr "E-post-transport type:" - -#: mail/mail-config-gui.c:1197 -msgid "Edit Identity" -msgstr "Redigér identitet" - -#: mail/mail-config-gui.c:1199 -msgid "Add Identity" -msgstr "Tilføj identitet" - -#: mail/mail-config-gui.c:1293 -msgid "Edit Source" -msgstr "Redigér kilde" - -#: mail/mail-config-gui.c:1295 -msgid "Add Source" -msgstr "Tilføj kilde" - -#: mail/mail-config-gui.c:1392 -msgid "Edit News Server" -msgstr "Redigér nyhedsserver" - -#: mail/mail-config-gui.c:1394 -msgid "Add News Server" -msgstr "Tilføj nyhedsserver" - -#: mail/mail-config-gui.c:2243 -msgid "The connection was successful!" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "Identiteter" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "Organisation" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "Redigér" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "Kilder" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "E-post-kilder" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "E-post-transport" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "News-tjenere" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "News-kilder" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "Send meddelser i HTML-format" - -#: mail/mail-config.glade.h:27 -msgid "Mark message as seen [ms]: " -msgstr "_Markér alle meddelser som læst" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "E-post-konfiguration" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"Velkommen til Evolution E-post-konfigurationsdruiden!\n" -"Ved at udfylde lidt information om dine e-post-\n" -"indstillinger kan du begynde at sende og modtage e-post\n" -"med det samme. Klik næste for at fortsætte." - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "Identitet" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "E-post-kilde" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"Din e-post-konfiguration er nu komplet.\n" -"Klik \"Fuldfør\" for at gemme dine nye indstillinger" - -#: mail/mail-crypto.c:338 mail/mail-crypto.c:418 -msgid "Please enter your PGP/GPG passphrase." -msgstr "Venligst indtast din PGP/GPG adgangsfrase" - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:422 -msgid "No password provided." -msgstr "Ingen adgangskode oplyst." - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:428 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "Kunne ikke oprette rør til GPG/PGP: %s" - -#: mail/mail-local.c:257 -#, c-format -msgid "Changing folder \"%s\" to \"%s\" format" -msgstr "Ændrer mappe \"%s\" til \"%s\" format" - -#: mail/mail-local.c:261 -#, c-format -msgid "Change folder \"%s\" to \"%s\" format" -msgstr "Ændr mappe \"%s\" til \"%s\" format" - -#: mail/mail-ops.c:74 -#, c-format -msgid "Fetching email from %s" -msgstr "Henter e-post fra %s" - -#: mail/mail-ops.c:76 -#, c-format -msgid "Fetch email from %s" -msgstr "Hent e-post fra %s" - -#: mail/mail-ops.c:87 -msgid "You have no remote mail source configured to fetch mail from." -msgstr "" - -#: mail/mail-ops.c:97 -msgid "Bad folder passed to fetch_mail" -msgstr "" - -#: mail/mail-ops.c:165 -msgid "There is no new mail." -msgstr "Tjek for ny e-post" - -#: mail/mail-ops.c:234 -#, c-format -msgid "Sending \"%s\"" -msgstr "Sender '%s'" - -#: mail/mail-ops.c:239 -msgid "Sending a message without a subject" -msgstr "" - -#: mail/mail-ops.c:242 -#, c-format -msgid "Send \"%s\"" -msgstr "Send '%s'" - -#: mail/mail-ops.c:245 -msgid "Send a message without a subject" -msgstr "Send meddelelsen uden et emne" - -#: mail/mail-ops.c:410 -#, c-format -msgid "Expunging \"%s\"" -msgstr "_Fjerner '%s'" - -#: mail/mail-ops.c:412 -#, c-format -msgid "Expunge \"%s\"" -msgstr "_Fjern '%s'" - -#: mail/mail-ops.c:484 -#, c-format -msgid "Moving messages from \"%s\" into \"%s\"" -msgstr "Flytter meddelelser fra '%s' til '%s'" - -#: mail/mail-ops.c:486 -#, c-format -msgid "Copying messages from \"%s\" into \"%s\"" -msgstr "Kopierer meddelelser fra '%s' til '%s'" - -#: mail/mail-ops.c:489 -#, c-format -msgid "Move messages from \"%s\" into \"%s\"" -msgstr "Flyt meddelelser fra '%s' til '%s'" - -#: mail/mail-ops.c:491 -#, c-format -msgid "Copy messages from \"%s\" into \"%s\"" -msgstr "Kopiér meddelelser fra '%s' til '%s'" - -#: mail/mail-ops.c:637 -#, c-format -msgid "Marking messages in folder \"%s\"" -msgstr "Markerer meddelelser i mappe '%s'" - -#: mail/mail-ops.c:640 -#, c-format -msgid "Mark messages in folder \"%s\"" -msgstr "Markér meddelelser i mappe '%s'" - -#: mail/mail-ops.c:769 -#, c-format -msgid "Scanning folders in \"%s\"" -msgstr "Skanner mapper i '%s'" - -#: mail/mail-ops.c:772 -#, c-format -msgid "Scan folders in \"%s\"" -msgstr "Skan mapper i '%s'" - -#: mail/mail-ops.c:859 -msgid "(No description)" -msgstr "(Ingen beskrivelse)" - -#: mail/mail-ops.c:922 -#, c-format -msgid "Attaching messages from folder \"%s\"" -msgstr "Vedhæfter bilag fra mappe '%s'" - -#: mail/mail-ops.c:925 -#, c-format -msgid "Attach messages from \"%s\"" -msgstr "Vedhæft bilag fra '%s'" - -#: mail/mail-ops.c:1051 -#, c-format -msgid "Forwarding messages \"%s\"" -msgstr "Videresender meddelelser '%s'" - -#: mail/mail-ops.c:1056 -msgid "Forwarding a message without a subject" -msgstr "Videresender en meddelelse uden emne" - -#: mail/mail-ops.c:1059 -#, c-format -msgid "Forward message \"%s\"" -msgstr "Videresend meddelelse '%s'" - -#: mail/mail-ops.c:1064 -msgid "Forward a message without a subject" -msgstr "Videresend en meddelelse uden emne" - -#: mail/mail-ops.c:1129 -msgid "" -"Failed to generate mime part from message while generating forwarded message." -msgstr "" - -#: mail/mail-ops.c:1218 -#, c-format -msgid "Loading \"%s\"" -msgstr "Indlæser '%s'" - -#: mail/mail-ops.c:1220 -#, c-format -msgid "Load \"%s\"" -msgstr "Indlæs '%s'" - -#: mail/mail-ops.c:1339 -#, c-format -msgid "Creating \"%s\"" -msgstr "Opretter '%s'" - -#: mail/mail-ops.c:1341 -#, c-format -msgid "Create \"%s\"" -msgstr "Opret '%s'" - -#: mail/mail-ops.c:1412 -msgid "Exception while reporting result to shell component listener." -msgstr "" - -#: mail/mail-ops.c:1465 -#, c-format -msgid "Synchronizing \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1467 -#, c-format -msgid "Synchronize \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1543 -#, c-format -msgid "Displaying message UID \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1546 -msgid "Clearing message display" -msgstr "" - -#: mail/mail-ops.c:1549 -#, c-format -msgid "Display message UID \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1552 -msgid "Clear message display" -msgstr "" - -#: mail/mail-ops.c:1679 -#, c-format -msgid "Opening messages from folder \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1682 -#, c-format -msgid "Open messages from \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1794 -msgid "Loading Draftbox" -msgstr "" - -#: mail/mail-ops.c:1796 -msgid "Load Draftbox" -msgstr "" - -#: mail/mail-ops.c:1864 -#, c-format -msgid "Viewing messages from folder \"%s\"" -msgstr "" - -#: mail/mail-ops.c:1867 -#, c-format -msgid "View messages from \"%s\"" -msgstr "" - -#: mail/mail-threads.c:274 -#, c-format -msgid "" -"Error while preparing to %s:\n" -"%s" -msgstr "" - -#: mail/mail-threads.c:627 -#, c-format -msgid "" -"Error while `%s':\n" -"%s" -msgstr "" - -#: mail/mail-threads.c:680 -msgid "Incomplete message written on pipe!" -msgstr "Ufuldstændig meddelse skrevet til rør!" - -#: mail/mail-threads.c:684 -msgid "Error reading commands from dispatching thread." -msgstr "Fejl ved læsning af kommandoer fra indgangstråd" - -#: mail/mail-threads.c:749 -msgid "Corrupted message from dispatching thread?" -msgstr "Beskadiget meddelse fra indgangstråd?" - -#: mail/mail-threads.c:861 -msgid "Could not create dialog box." -msgstr "Kunne ikke oprette dialogboks." - -#: mail/mail-threads.c:872 -msgid "User cancelled query." -msgstr "Bruger annullerede forespørgsel." - -#: mail/mail-tools.c:205 -#, c-format -msgid "Couldn't create temporary mbox `%s': %s" -msgstr "Kunne ikke oprette midlertidig mbox '%s': %s" - -#: mail/mail-tools.c:290 -#, c-format -msgid "" -"Could not read UID cache file \"%s\". You may receive duplicate messages." -msgstr "" - -#: mail/mail-tools.c:373 -#, c-format -msgid "[%s] %s" -msgstr "[%s] %s" - -#: mail/mail-tools.c:375 -#, c-format -msgid "[%s] (forwarded message)" -msgstr "[%s] (videresendt meddelelse)" - -#: mail/mail-tools.c:384 -msgid "Fwd: (no subject)" -msgstr "" - -#: mail/mail-tools.c:419 -#, c-format -msgid "Forwarded message - %s" -msgstr "Videresendt meddelelse - %s" - -#: mail/mail-tools.c:421 -msgid "Forwarded message (no subject)" -msgstr "Videresendt meddelelse (intet emne)" - -#: mail/mail-tools.c:532 -#, c-format -msgid "Couldn't stat(2) movemail folder %s" -msgstr "" - -#: mail/mail-tools.c:633 -#, c-format -msgid "Don't know protocol to open URI `%s'" -msgstr "" - -#: mail/mail-tools.c:662 -#, c-format -msgid "" -"Cannot open location `%s':\n" -"%s" -msgstr "" - -#: mail/mail-vfolder.c:298 -msgid "New VFolder" -msgstr "By VFolder" - -#: mail/message-list.c:490 -msgid "Online Status" -msgstr "Opkoblet status" - -#: mail/message-list.c:526 -msgid "From" -msgstr "Fra" - -#: mail/message-list.c:533 -msgid "Subject" -msgstr "Emne" - -#: mail/message-list.c:540 -msgid "Date" -msgstr "Dato" - -#: mail/message-list.c:547 -msgid "Received" -msgstr "Modtaget" - -#: mail/message-list.c:554 -msgid "To" -msgstr "Til" - -#: mail/message-list.c:561 -msgid "Size" -msgstr "Størrelse" - -#: notes/component-factory.c:27 -msgid "Create a new note" -msgstr "Opret en ny note" - -#: notes/component-factory.c:148 -msgid "Cannot initialize Evolution's notes component." -msgstr "Kan ikke initialisere Evolutions note-komponent." - -#: notes/main.c:30 -msgid "Notes Component: Could not initialize bonobo" -msgstr "Note komponent: Kunne ikke initialisere Bonobo" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Evolution installation" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Dette ser ud til at være første gang du kører Evolution." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "Venligst klik \"OK\" for at installere Evolutions brugerfiler under" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Kan ikke oprette kataloget\n" -"%s\n" -"Fejl: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Kan ikke kopiere filer til\n" -"'%s'." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolutions filer blev installeret." - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"Filen '%s' er ikke et katalog.\n" -"Venligst fjern denne for at tillade installation\n" -"af Evolution's brugerfiler." - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"Filen '%s' er ikke et katalog.\n" -"Venligst fjern denne for at tillade installation\n" -"af Evolution's brugerfiler." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Kan ikke oprette specificeret katalog:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "Det angivne katalognavn er ikke gyldigt." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - opret ny mappe" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"Typen på den valgte mappe er ikke gyldig til\n" -"den ønskede operation." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "Ny..." - -#: shell/e-shell-folder-title-bar.c:451 shell/e-shell-folder-title-bar.c:452 -msgid "(Untitled)" -msgstr "(Uden navn)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy fandtes ikke i din $PATH" - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Bug buddy kunne ikke køres" - -#: shell/e-shell-view-menu.c:167 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Ophavsrettigheder 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:169 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution er en samling af gruppeorienterede anvendelser\n" -"til administrering af post, kalender og aftaler\n" -"indenfor Gnomes skrivebordsmiljø." - -#: shell/e-shell-view-menu.c:319 -msgid "Go to folder..." -msgstr "Gå til mappe..." - -#: shell/e-shell-view-menu.c:377 -msgid "_New" -msgstr "_Ny" - -#: shell/e-shell-view-menu.c:389 -msgid "_Folder" -msgstr "_Mappe" - -#: shell/e-shell-view-menu.c:395 -msgid "Evolution bar _shortcut" -msgstr "Evolution _genvejsbjælke" - -#: shell/e-shell-view-menu.c:404 -msgid "_Mail message (FIXME)" -msgstr "E-post _meddelelse (FIXME)" - -#: shell/e-shell-view-menu.c:410 -msgid "_Appointment (FIXME)" -msgstr "_Aftale (FIXME)" - -#: shell/e-shell-view-menu.c:416 -msgid "_Contact (FIXME)" -msgstr "_Kontakt (FIXME)" - -#: shell/e-shell-view-menu.c:422 -msgid "_Task (FIXME)" -msgstr "_Opgave (FIXME)" - -#: shell/e-shell-view-menu.c:444 -msgid "_Go to Folder..." -msgstr "_Gå til mappe..." - -#: shell/e-shell-view-menu.c:445 -msgid "Display a different folder" -msgstr "Vis en anden mappe" - -#: shell/e-shell-view-menu.c:452 -msgid "_Create New Folder..." -msgstr "_Opret ny mappe..." - -#: shell/e-shell-view-menu.c:453 shell/e-shell-view-menu.c:465 -msgid "Create a new folder" -msgstr "Opret en ny folder" - -#: shell/e-shell-view-menu.c:464 -msgid "E_xit..." -msgstr "_Afslut..." - -#: shell/e-shell-view-menu.c:495 -msgid "Show _Shortcut Bar" -msgstr "Vis _genvejslinje" - -#: shell/e-shell-view-menu.c:496 -msgid "Show the shortcut bar" -msgstr "Vis bjælke med genveje" - -#: shell/e-shell-view-menu.c:501 -msgid "Show _Folder Bar" -msgstr "Vis _folderlinje" - -#: shell/e-shell-view-menu.c:502 -msgid "Show the folder bar" -msgstr "Vis bjælke med foldere" - -#: shell/e-shell-view-menu.c:513 -msgid "_Settings" -msgstr "_Indstillinger" - -#: shell/e-shell-view-menu.c:524 -msgid "_Help" -msgstr "_Hjælp" - -#: shell/e-shell-view-menu.c:530 -msgid "Help _Index" -msgstr "Hjælp _indeks" - -#: shell/e-shell-view-menu.c:537 -msgid "Getting _Started" -msgstr "Kom _igang" - -#: shell/e-shell-view-menu.c:544 -msgid "Using the _Mailer" -msgstr "Brug af _e-postlæseren" - -#: shell/e-shell-view-menu.c:551 -msgid "Using the _Calendar" -msgstr "Brug af _kalenderen" - -#: shell/e-shell-view-menu.c:558 -msgid "Using the C_ontact Manager" -msgstr "Brug af k_ontaktlisten" - -#: shell/e-shell-view-menu.c:568 -msgid "_Submit Bug Report" -msgstr "_Send fejlrapport" - -#: shell/e-shell-view-menu.c:569 -msgid "Submit bug report using Bug Buddy" -msgstr "Indsend fejlrapport via bug-buddy" - -#: shell/e-shell-view-menu.c:578 -msgid "_About Evolution..." -msgstr "_Om Evolution..." - -#: shell/e-shell-view-menu.c:579 -msgid "Show information about Evolution" -msgstr "Vis information om Evolution" - -#: shell/e-shell-view.c:122 -msgid "(No folder displayed)" -msgstr "(Ingen mappe vist)" - -#: shell/e-shell-view.c:350 -msgid "Folders" -msgstr "Mapper" - -#: shell/e-shell-view.c:881 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Kan ikke opsætte lokal lagring -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "_Små ikoner" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Vis genveje som små ikoner" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Store i_koner" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Vis genveje som store ikoner" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Aktivér" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Aktivér denne genvej" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Fjern denne genvej fra genvejsbjælken" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Fejl under gemning af genveje." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Uden navn)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Ingen fejl" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Almindelig fejl" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "En mappe med samme navn eksisterer allerede" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "Specificeret mappetype er ikke gyldig" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "I/U-fejl" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Ikke nok plads til at oprette mappen" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Angivet mappe blev ikke fundet" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "Funktionen ikke implementeret i denne lagring" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Adgang nægtet" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Operationen er ikke understøttet" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "Den angivne type er ikke understøttet i denne lagring" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Ukendt fejl" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "Vis den valgte mappe" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Hejsa. Tak for at du har taget tid til at hente denne smugkigsudgave \n" -"af gruppevare-samlingen Evolution.\n" -"\n" -"I løbet af den sidste måneds tid har vores fokus været på at gøre\n" -"Evolution brugbar. Mange af Evolutions udviklere bruger nu Evolution\n" -"til altid at læse deres post. Det kunne du også gøre. (Blot husk\n" -"at have en sikkerhedskopi.)\n" -"\n" -"Men selvom vi har ordnet mange fejl omkring stabilitet og sikkerhed,\n" -"er der stadig en ansvarsfraskrivelse. Evolution vil: gå ned,\n" -"tabe din post selv om du ikke ønsker det, nægte at slette din post når\n" -"du ønsker det, efterlade vildfarne kørende processer, bruge 100 % Cpu,\n" -"fastlåse, sende Html til tilfældige postlister, og ydmyge dig overfor dine\n" -"venner og kolleger. Benyt det på eget ansvar.\n" -"\n" -"Vi håber du vil nyde resultaterne af vores hårde arbejde, og vi\n" -"venter ivrigt på dine bidrag!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Tak\n" -"Holdet bag Evolution\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "Kan ikke initialisere Evolution-skallen." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "Kunne ikke initialisere Bonobo-komponentsystemet." - -#: tests/ui-tests/message-browser.c:360 -msgid "The component now claims that it doesn't support PersistStream!" -msgstr "" - -#: tests/ui-tests/message-browser.c:378 -msgid "" -"An exception occured while trying to load data into the component with " -"PersistStream" -msgstr "" - -#: tests/ui-tests/message-browser.c:471 -#, c-format -msgid "The %s component doesn't support PersistStream!\n" -msgstr "" - -#: tests/ui-tests/message-browser.c:710 -msgid "Open Mime Message" -msgstr "Åbn Mime meddelse" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Felter" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Gruppering" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Sortér" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtrér" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#: widgets/e-table/e-table-header-item.c:1164 -msgid "Field Chooser" -msgstr "Felt-vælger" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"for at tilføje en kolonne til din tabel skal\n" -"du trække den hen til det sted du ønsker den skal være." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "vindue1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Tilgængelige felter" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "etiket1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Vis i denne rækkefølge" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "etiket2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Tilføj >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Fjern" - -#: widgets/e-table/e-table-header-item.c:1156 -msgid "Sort Ascending" -msgstr "Sortér opadgående" - -#: widgets/e-table/e-table-header-item.c:1157 -msgid "Sort Descending" -msgstr "Sortér nedadgående" - -#: widgets/e-table/e-table-header-item.c:1158 -msgid "Unsort" -msgstr "Usorteret" - -#: widgets/e-table/e-table-header-item.c:1160 -msgid "Group By This Field" -msgstr "Gruppér efter dette felt" - -#: widgets/e-table/e-table-header-item.c:1161 -msgid "Group By Box" -msgstr "Gruppér efter boks" - -#: widgets/e-table/e-table-header-item.c:1163 -msgid "Remove This Column" -msgstr "Fjern denne kolonne" - -#: widgets/e-table/e-table-header-item.c:1166 -msgid "Alignment" -msgstr "Tilpasning:" - -#: widgets/e-table/e-table-header-item.c:1167 -msgid "Best Fit" -msgstr "Passer bedst" - -#: widgets/e-table/e-table-header-item.c:1168 -msgid "Format Columns..." -msgstr "Formatér kolonner..." - -#: widgets/e-table/e-table-header-item.c:1170 -msgid "Customize Current View..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Tentativ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Optaget" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Ude" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Ingen information" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "_Invitér andre..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Alternativer" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Vis k_un arbejdstid" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "Vis _zoomet ud" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "_Opdater fri/optaget" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Autovælg" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Alle mennesker og resurser" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Alle _mennesker og en resurse" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "_Nødvendige mennesker" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Nødvendige mennesker _og en resurse" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Tid for mødets _start:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Tid for mødets slutning:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Alle deltagere" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "mtotfls" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Gruppe %i" - -#~ msgid "New appointment for _today..." -#~ msgstr "Ny af_tale for idag..." - -#~ msgid "Create a new appointment for today" -#~ msgstr "Opret en ny aftale for idag" - -#~ msgid "No GPG/PGP program available." -#~ msgstr "GPG/PGP-program ikke tilgængelig." - -#~ msgid "Currently pending operations:" -#~ msgstr "Nuværende udestående opgaver:" - -#~ msgid "_Actions" -#~ msgstr "H_andlinger" diff --git a/po/de.po b/po/de.po deleted file mode 100644 index 7711438bc8..0000000000 --- a/po/de.po +++ /dev/null @@ -1,4837 +0,0 @@ -# German po for Evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Kai Lahmann , 2000. -# Matthias Warkus , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.4\n" -"POT-Creation-Date: 2000-08-19 13:40+0200\n" -"PO-Revision-Date: 2000-08-19 13:54+02:00\n" -"Last-Translator: Matthias Warkus \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/backend/ebook/test-client-list.c:29 -#: addressbook/backend/ebook/test-client.c:54 -#: addressbook/conduit/address-conduit.c:1201 -#: addressbook/demo/addressbook-factory.c:32 -#: addressbook/gui/component/addressbook-factory.c:59 -#: addressbook/gui/minicard/test-minicard-view.c:45 -#: calendar/conduits/calendar/calendar-conduit.c:1669 -#: calendar/conduits/todo/todo-conduit.c:1298 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Konnte Bonobo nicht initialisieren" - -#. This array must be in the same order as enumerations -#. in GnomePilotConduitSyncType as they are used as index. -#. Custom type implies Disabled state. -#. -#: addressbook/conduit/address-conduit-control-applet.c:54 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:55 -#: calendar/conduits/todo/todo-conduit-control-applet.c:55 -msgid "Disabled" -msgstr "Inaktiv" - -#: addressbook/conduit/address-conduit-control-applet.c:55 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:56 -#: calendar/conduits/todo/todo-conduit-control-applet.c:56 -msgid "Synchronize" -msgstr "Synchronisieren" - -#: addressbook/conduit/address-conduit-control-applet.c:56 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:57 -#: calendar/conduits/todo/todo-conduit-control-applet.c:57 -msgid "Copy From Pilot" -msgstr "Aus Pilot kopieren" - -#: addressbook/conduit/address-conduit-control-applet.c:57 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:58 -#: calendar/conduits/todo/todo-conduit-control-applet.c:58 -msgid "Copy To Pilot" -msgstr "In Pilot kopieren" - -#: addressbook/conduit/address-conduit-control-applet.c:58 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:59 -#: calendar/conduits/todo/todo-conduit-control-applet.c:59 -msgid "Merge From Pilot" -msgstr "Aus Pilot einfließen lassen" - -#: addressbook/conduit/address-conduit-control-applet.c:59 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:60 -#: calendar/conduits/todo/todo-conduit-control-applet.c:60 -msgid "Merge To Pilot" -msgstr "In Pilot einfließen lassen" - -#: addressbook/conduit/address-conduit-control-applet.c:143 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:144 -#: calendar/conduits/todo/todo-conduit-control-applet.c:144 -msgid "Eskil Heyn Olsen " -msgstr "Eskil Heyn Olsen " - -#: addressbook/conduit/address-conduit-control-applet.c:145 -msgid "Gpilotd address conduit" -msgstr "Gpilot Adressen-Conduit" - -#: addressbook/conduit/address-conduit-control-applet.c:146 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:147 -#: calendar/conduits/todo/todo-conduit-control-applet.c:147 -msgid "(C) 1998 the Free Software Foundation" -msgstr "(C) 1998 the Free Software Foundation" - -#: addressbook/conduit/address-conduit-control-applet.c:148 -msgid "Configuration utility for the address conduit.\n" -msgstr "Konfigurationswerkzeug für den Adressen-Conduit.\n" - -#: addressbook/conduit/address-conduit-control-applet.c:149 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:150 -#: calendar/conduits/todo/todo-conduit-control-applet.c:150 -msgid "gnome-unknown.xpm" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:190 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:191 -#: calendar/conduits/todo/todo-conduit-control-applet.c:191 -msgid "Synchronize Action" -msgstr "Synchronisationsaktion" - -#: addressbook/conduit/address-conduit-control-applet.c:261 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:262 -#: calendar/conduits/todo/todo-conduit-control-applet.c:262 -msgid "Conduit state" -msgstr "Conduit-Zustand" - -#: addressbook/conduit/address-conduit-control-applet.c:315 -#: addressbook/conduit/address-conduit-control-applet.c:328 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:316 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:329 -#: calendar/conduits/todo/todo-conduit-control-applet.c:316 -#: calendar/conduits/todo/todo-conduit-control-applet.c:329 -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" -"Kein Pilot konfiguriert, bitte wählen Sie zunächst\n" -"das Capplet \"Pilot-Verbindungseigenschaften\"." - -#: addressbook/conduit/address-conduit-control-applet.c:334 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:335 -#: calendar/conduits/todo/todo-conduit-control-applet.c:335 -msgid "Not connected to the gnome-pilot daemon" -msgstr "Nicht mit dem gnome-pilot-Dämon verbunden" - -#: addressbook/conduit/address-conduit-control-applet.c:339 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:340 -#: calendar/conduits/todo/todo-conduit-control-applet.c:340 -msgid "" -"An error occured when trying to fetch\n" -"pilot list from the gnome-pilot daemon" -msgstr "" -"Ein Fehler trat beim dem Versuch auf, die Pilot-\n" -"Liste vom gnome-pilot-Dämon zu lesen" - -#: addressbook/conduit/address-conduit.c:128 -#: addressbook/conduit/address-conduit.c:142 -msgid "BLARG\n" -msgstr "BLARG\n" - -#: addressbook/conduit/address-conduit.c:459 -#, c-format -msgid "Address holds %ld address entries" -msgstr "Address hat %ld Adresseinträge" - -#: addressbook/conduit/address-conduit.c:485 -#: addressbook/conduit/address-conduit.c:487 -msgid "Could not start addressbook server" -msgstr "Konnte Adressbuchserver nicht starten" - -#: addressbook/conduit/address-conduit.c:500 -#: addressbook/conduit/address-conduit.c:503 -msgid "Could not read pilot's Address application block" -msgstr "Konnte Address-Anwendungsblock des Pilot nicht lesen" - -#: addressbook/conduit/address-conduit.c:841 -msgid "Error while communicating with address server" -msgstr "Fehler beim Kommunizieren mit dem Adressenserver" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "Kategorien" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Eintrag/Einträge gehört/gehören zu diesen Kategorien:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Verfügbare Kategorien:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1179 -msgid "FIXME: _Appointment" -msgstr "FIXME: Termin" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1180 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: Besprechungs-Anfrage" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1182 -msgid "FIXME: _Mail Message" -msgstr "FIXME: Nachricht senden" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Contact" -msgstr "FIXME: Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1184 -msgid "FIXME: _Task" -msgstr "FIXME: Auftrag" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1185 -msgid "FIXME: Task _Request" -msgstr "FIXME: Auftrags-Anfrage" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1186 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: Journal-Eintrag" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1187 -msgid "FIXME: _Note" -msgstr "FIXME: Notiz" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1189 -#: calendar/gui/event-editor.c:1296 -msgid "FIXME: Ch_oose Form..." -msgstr "FIXME: Formular wählen..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1194 -msgid "FIXME: _Memo Style" -msgstr "FIXME: Memo-Stil" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1196 -msgid "FIXME: Define Print _Styles..." -msgstr "FIXME: Druckstile definieren..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1203 -msgid "FIXME: S_end" -msgstr "FIXME: Senden" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1207 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: Anlagen speichern..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "Löschen" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1210 -msgid "FIXME: _Move to Folder..." -msgstr "FIXME: In Ordner verschieben..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1211 -msgid "FIXME: Cop_y to Folder..." -msgstr "FIXME: In Ordner kopieren..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1213 -msgid "Page Set_up" -msgstr "Seite einrichten" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1214 -msgid "FIXME: Print Pre_view" -msgstr "FIXME: Druckvorschau" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1235 -msgid "FIXME: Paste _Special..." -msgstr "FIXME: Besonderes einfügen..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1240 -msgid "FIXME: Mark as U_nread" -msgstr "FIXME: Als ungelesen markieren" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1244 -msgid "_Object" -msgstr "Objekt" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1249 -#: calendar/gui/event-editor.c:1256 -msgid "FIXME: _Item" -msgstr "FIXME: Eintrag" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1250 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Unread Item" -msgstr "FIXME: Ungelesener Eintrag" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1251 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "FIXME: Erster Eintrag im Ordner" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1258 -msgid "FIXME: _Last Item in Folder" -msgstr "FIXME: Letzter Eintrag im Ordner" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1263 -msgid "FIXME: _Standard" -msgstr "FIXME: Standard" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1265 -msgid "FIXME: __Formatting" -msgstr "FIXME: Formatieren" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1268 -msgid "FIXME: _Customize..." -msgstr "FIXME: Anpassen..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1273 -msgid "Pre_vious" -msgstr "Voriger" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1274 -msgid "Ne_xt" -msgstr "Nächster" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1278 -msgid "_Toolbars" -msgstr "Werkzeugleisten" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1283 -msgid "FIXME: _File..." -msgstr "FIXME: Datei..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1284 -msgid "FIXME: It_em..." -msgstr "FIXME: Eintrag..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1285 -msgid "FIXME: _Object..." -msgstr "FIXME: Objekt..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1290 -msgid "FIXME: _Font..." -msgstr "FIXME: Schriftart..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1291 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: Absatz..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1298 -msgid "FIXME: Desi_gn This Form" -msgstr "FIXME: Dieses Formular entwerfen" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1299 -msgid "FIXME: D_esign a Form..." -msgstr "FIXME: Ein Formular entwerfen..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1301 -msgid "FIXME: Publish _Form..." -msgstr "FIXME: Formular veröffentlichen..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1302 -msgid "FIXME: Pu_blish Form As..." -msgstr "FIXME: Formular veröffentlichen als..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1304 -msgid "FIXME: Script _Debugger" -msgstr "FIXME: Skriptdebugger" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1309 -msgid "FIXME: _Spelling..." -msgstr "FIXME: Rechtschreibung..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1314 -msgid "_Forms" -msgstr "Formulare" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: Neuer Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "FIXME: Neuer Kontakt aus derselben Firma" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "FIXME: Neuer Brief an Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "FIXME: Neue Nachricht an Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "FIXME: Neue Besprechung mit Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "FIXME: Besprechung planen..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "FIXME: Neuer Auftrag für Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "FIXME: Neuer Journaleintrag für Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "FIXME: Für Antwort markieren..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "FIXME: Karte der Adresse anzeigen" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "FIXME: Webseite öffnen" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "FIXME: Als vCard weiterleiten" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1327 -msgid "FIXME: For_ward" -msgstr "FIXME: Weiterleiten" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1340 -msgid "_Insert" -msgstr "Einfügen" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1341 -msgid "F_ormat" -msgstr "Format" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1342 -msgid "_Tools" -msgstr "Werkzeuge" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1343 -msgid "Actio_ns" -msgstr "Aktionen" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Speichern und schließen" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1382 -msgid "Save the appointment and close the dialog box" -msgstr "Den Termin speichern und das Dialogfenster schließen" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:654 -msgid "Print..." -msgstr "Drucken..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1387 -msgid "Print this item" -msgstr "Diesen Eintrag drucken" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1388 -msgid "FIXME: Insert File..." -msgstr "FIXME: Datei einfügen..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1389 -msgid "Insert a file as an attachment" -msgstr "Eine Datei als Anlage einfügen" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:424 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:548 -#: mail/folder-browser-factory.c:50 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -#: mail/mail-view.c:147 -msgid "Delete" -msgstr "Löschen" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1398 -#: calendar/gui/gncal-todo.c:376 -msgid "Delete this item" -msgstr "Diesen Eintrag löschen" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1400 -msgid "FIXME: Previous" -msgstr "FIXME: Voriger" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1401 -msgid "Go to the previous item" -msgstr "Zum vorigen Eintrag gehen" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1402 -msgid "FIXME: Next" -msgstr "FIXME: Nächster" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1403 -msgid "Go to the next item" -msgstr "Zum nächsten Eintrag gehen" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1404 -msgid "FIXME: Help" -msgstr "FIXME: Hilfe" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1405 -msgid "See online help" -msgstr "Onlinehilfe einsehen" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "Assistent" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "Geschäftlich" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "Geschäftlich 2" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "Geschäftliches Fax" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "Rückruf" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "Auto" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "Firma" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "Zu Hause" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "Zu Hause 2" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "Fax zu Hause" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "Mobil" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:28 -msgid "Other" -msgstr "Andere" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "Anderes Fax" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "Pager" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "Primär" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "Radio" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "Telex" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TTD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "Primäre E-Mail" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "E-Mail 2" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "E-Mail 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"Sind Sie sicher, dass Sie\n" -"diesen Kontakt löschen wollen?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "Kontakt löschen?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "Hinzufügen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Telefon-Typen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Neuer Telefon-Typ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "Hinzufügen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Kontakteditor" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "Voller Name..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Einsortieren unter:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Adresse der Webseite:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Will HTML-Mail erhalten" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Adresse:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "Geschäftlich" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "Zu Hause" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "Geschäftliches Fax" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "Mobil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "Geschäftlich" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "Dies ist die Postadresse" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "Kontakte..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "Kategorien..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "Stellenbezeichnung:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "Firma:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "Allgemein" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "Abteilung:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "Büro:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "Beruf:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "Spitzname:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "Partner:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Geburtstag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "Name des Assistenten:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "Name des Vorgesetzten:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "Jahrestag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "Notizen:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "Details" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Vollen Namen prüfen" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "Titel:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "Vorname:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "Mittelname:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "Nachname:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "Suffix:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Herr\n" -"Frau\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/demo/addressbook.c:76 -#: addressbook/gui/component/addressbook.c:418 -#: calendar/gui/calendar-commands.c:511 notes/component-factory.c:27 -msgid "New" -msgstr "Neu" - -#: addressbook/demo/addressbook.c:76 -#: addressbook/gui/component/addressbook.c:418 -msgid "Create a new contact" -msgstr "Einen neuen Kontakt anlegen" - -#: addressbook/demo/addressbook.c:80 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find" -msgstr "Suchen" - -#: addressbook/demo/addressbook.c:80 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find a contact" -msgstr "Einen Kontakt suchen" - -#: addressbook/demo/addressbook.c:81 -#: addressbook/gui/component/addressbook.c:423 -#: calendar/gui/calendar-commands.c:516 mail/folder-browser-factory.c:48 -#: mail/mail-view.c:145 -msgid "Print" -msgstr "Drucken" - -#: addressbook/demo/addressbook.c:81 -#: addressbook/gui/component/addressbook.c:423 -msgid "Print contacts" -msgstr "Kontakte drucken" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:424 -msgid "Delete a contact" -msgstr "Einen Kontakt löschen" - -#: addressbook/demo/addressbook.c:101 -#: addressbook/gui/component/addressbook.c:509 -msgid "_New Contact" -msgstr "Neuer Kontakt" - -#: addressbook/gui/component/addressbook.c:492 -msgid "_Print Contacts..." -msgstr "Kontakte _drucken..." - -#: addressbook/gui/component/addressbook.c:502 -#: addressbook/gui/component/addressbook.c:972 -msgid "As _Table" -msgstr "Als Tabelle" - -#: addressbook/gui/component/addressbook.c:517 -msgid "N_ew Directory Server" -msgstr "Neuer Verzeichnisserver" - -#: addressbook/gui/component/addressbook.c:600 -msgid "Unable to open addressbook" -msgstr "Kann das Adressbuch nicht öffnen" - -#: addressbook/gui/component/addressbook.c:605 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Wir haben dieses Adressbuch nicht öffnen können. Dies\n" -"heißt entweder, dass Sie einen ungültigen URI eingegeben\n" -"haben, oder versucht haben, auf einen LDAP-Server\n" -"zuzugreifen, ohne LDAP-Unterstützung eincompiliert zu\n" -"haben. Wenn Sie einen URI eingegeben haben, prüfen Sie\n" -"ihn auf Richtigkeit und geben Sie ihn noch einmal ein.\n" -"Wenn nicht, haben Sie wahrscheinlich versucht, auf einen\n" -"LDAP-Server zuzugreifen. Wenn Sie LDAP verwenden wollen,\n" -"müssen Sie OpenLDAP herunterladen, installieren, und\n" -"Evolution neu compilieren und installieren.\n" - -#: addressbook/gui/component/addressbook.c:876 -#: addressbook/gui/minicard/e-minicard.c:332 -msgid "Save as VCard" -msgstr "Als VCard speichern" - -#: addressbook/gui/component/addressbook.c:943 -msgid "* Click here to add a contact *" -msgstr "* Hier klicken, um einen Kontakt hinzuzufügen *" - -#: addressbook/gui/component/addressbook.c:979 -msgid "As _Minicards" -msgstr "Als _Minikarten" - -#: addressbook/gui/component/addressbook.c:1030 -msgid "The URI that the Folder Browser will display" -msgstr "Die URI, die der Suchdienst anzeigen wird" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "windows2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:88 -msgid "External Directories" -msgstr "Externe Verzeichnisse" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Beschreibung:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP-Server:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Portnummer:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Root-DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Name:" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/select-names/select-names.glade.h:7 -msgid "Select Names" -msgstr "Namen wählen" - -#: addressbook/gui/component/select-names/select-names.glade.h:8 -msgid "Find..." -msgstr "Suchen..." - -#: addressbook/gui/component/select-names/select-names.glade.h:9 -msgid "Select name from List:" -msgstr "Name aus Liste wählen:" - -#: addressbook/gui/component/select-names/select-names.glade.h:10 -msgid "Message Recipients" -msgstr "Nachrichtenempfänger" - -#: addressbook/gui/minicard/e-minicard-control.c:276 -msgid "Save in addressbook" -msgstr "In Adressbuch speichern" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"In dieser Ansicht gibt es keine Einträge zum Anzeigen.\n" -"\n" -"Doppelklicken Sie hier, um einen neuen Kontakt anzulegen." - -#: addressbook/gui/minicard/test-minicard-view.c:100 -msgid "Reflow Test" -msgstr "Reflow-Test" - -#: addressbook/gui/minicard/test-minicard-view.c:101 -msgid "Copyright (C) 2000, Helix Code, Inc." -msgstr "Copyright (C) 2000, Helix Code, Inc." - -#: addressbook/gui/minicard/test-minicard-view.c:103 -msgid "This should test the reflow canvas item" -msgstr "Dies sollte das Reflow-Canvasobjekt testen" - -#. gtk_signal_connect(fb->search_entry, "changed", search_activate, fb); -#: addressbook/gui/search/e-addressbook-search-dialog.c:127 -#: mail/folder-browser.c:368 -msgid "Search" -msgstr "Suchen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Seite einrichten:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Stilname:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Vorschau:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Optionen" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Dazunehmen:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Abschnitte:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Folgen einander unmittelbar" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Buchstabenreiter an der Seite" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Überschriften für jeden Buchstaben" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Auf einer neuen Seite beginnen" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Anzahl Spalten:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Leere Formulare am Ende:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Schrifarten" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Schrifart..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Überschriften" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 Punkt Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Textkörper" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 Punkt Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Schattierung" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Mit grauer Schattierung drucken" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Format" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papier" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Typ:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Ausmaße:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Breite:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Höhe:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Papierquelle:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Ränder" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Oben:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Unten:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Links:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Rechts:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Seite" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Größe:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Ausrichtung" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Hochformat" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Querformat" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Kopfzeile" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Fußzeile:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Auf geraden Seiten umkehren" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Kopf-/Fußzeile" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:596 -msgid "am" -msgstr "AM" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:595 -msgid "pm" -msgstr "PM" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:146 -msgid "Gpilotd calendar conduit" -msgstr "Gpilotd-Kalender-Verbindung" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:149 -msgid "Configuration utility for the calendar conduit.\n" -msgstr "Konfigurationstool für die Kalender-Verbindung.\n" - -#: calendar/conduits/calendar/calendar-conduit.c:399 -#: calendar/conduits/calendar/calendar-conduit.c:1109 -#: calendar/conduits/todo/todo-conduit.c:443 -#: calendar/conduits/todo/todo-conduit.c:1025 -msgid "Error while communicating with calendar server" -msgstr "Fehler bei der Kommunikation mit dem Kalender-Server" - -#: calendar/conduits/calendar/calendar-conduit.c:776 -#: calendar/conduits/calendar/calendar-conduit.c:778 -#: calendar/conduits/todo/todo-conduit.c:707 -#: calendar/conduits/todo/todo-conduit.c:709 -msgid "Could not start gnomecal server" -msgstr "Konnte den gnomecal-Server nicht starten" - -#: calendar/conduits/calendar/calendar-conduit.c:806 -#: calendar/conduits/calendar/calendar-conduit.c:809 -msgid "Could not read pilot's DateBook application block" -msgstr "Konnte den DateBook-Anwendungsblock des Pilot nicht lesen" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:146 -msgid "Gpilotd todo conduit" -msgstr "Gpilotd-To-Do-Verbindung" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:149 -msgid "Configuration utility for the todo conduit.\n" -msgstr "Konfigurationstool für die To-Do-Verbindung.\n" - -#: calendar/conduits/todo/todo-conduit.c:737 -#: calendar/conduits/todo/todo-conduit.c:740 -msgid "Could not read pilot's ToDo application block" -msgstr "Konnte den ToDo-Anwendungsblock des Pilot nicht lesen" - -#: calendar/gui/calendar-commands.c:59 -msgid "Outline:" -msgstr "Umrandung:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Headings:" -msgstr "Überschriften:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Empty days:" -msgstr "Leere Tage:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Appointments:" -msgstr "Termine:" - -#: calendar/gui/calendar-commands.c:63 -msgid "Highlighted day:" -msgstr "Markierter Tag:" - -#: calendar/gui/calendar-commands.c:64 -msgid "Day numbers:" -msgstr "Tagesnummern:" - -#: calendar/gui/calendar-commands.c:65 -msgid "Current day's number:" -msgstr "Nummer des aktuellen Tages:" - -#: calendar/gui/calendar-commands.c:66 -msgid "To-Do item that is not yet due:" -msgstr "Noch nicht fälliger To-Do-Eintrag:" - -#: calendar/gui/calendar-commands.c:67 -msgid "To-Do item that is due today:" -msgstr "Heute fälliger To-Do-Eintrag:" - -#: calendar/gui/calendar-commands.c:68 -msgid "To-Do item that is overdue:" -msgstr "Überfälliger To-Do-Eintrag:" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "GNOME-Kalender" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "Der persönliche GNOME-Kalender und -Terminplaner." - -#: calendar/gui/calendar-commands.c:401 tests/ui-tests/message-browser.c:676 -msgid "File not found" -msgstr "Datei nicht gefunden" - -#: calendar/gui/calendar-commands.c:423 -msgid "Open calendar" -msgstr "Kalender öffnen" - -#: calendar/gui/calendar-commands.c:462 -msgid "Save calendar" -msgstr "Kalender speichern" - -#: calendar/gui/calendar-commands.c:489 calendar/gui/gncal-todo.c:763 -#: calendar/gui/gncal-todo.c:767 -msgid "Day" -msgstr "Tag" - -#: calendar/gui/calendar-commands.c:489 -msgid "Show 1 day" -msgstr "Einen Tag zeigen" - -#: calendar/gui/calendar-commands.c:492 -msgid "5 Days" -msgstr "5 Tage" - -#: calendar/gui/calendar-commands.c:492 -msgid "Show the working week" -msgstr "Die Arbeitswoche zeigen" - -#: calendar/gui/calendar-commands.c:495 calendar/gui/gncal-todo.c:762 -msgid "Week" -msgstr "Woche" - -#: calendar/gui/calendar-commands.c:495 -msgid "Show 1 week" -msgstr "1 Woche zeigen" - -#: calendar/gui/calendar-commands.c:498 -msgid "Month" -msgstr "Monat" - -#: calendar/gui/calendar-commands.c:498 -msgid "Show 1 month" -msgstr "1 Monat zeigen" - -#: calendar/gui/calendar-commands.c:502 -msgid "Year" -msgstr "Jahr" - -#: calendar/gui/calendar-commands.c:502 -msgid "Show 1 year" -msgstr "1 Jahr zeigen" - -#: calendar/gui/calendar-commands.c:511 calendar/gui/calendar-commands.c:663 -msgid "Create a new appointment" -msgstr "Neuen Termin anlegen" - -#: calendar/gui/calendar-commands.c:516 calendar/gui/calendar-commands.c:655 -msgid "Print this calendar" -msgstr "Diesen Kalender drucken" - -#: calendar/gui/calendar-commands.c:520 -msgid "Prev" -msgstr "Zurück" - -#: calendar/gui/calendar-commands.c:520 -msgid "Go back in time" -msgstr "In der Zeit zurückgehen" - -#: calendar/gui/calendar-commands.c:521 -msgid "Today" -msgstr "Heute" - -#: calendar/gui/calendar-commands.c:521 -msgid "Go to present time" -msgstr "Zur Gegenwart springen" - -#: calendar/gui/calendar-commands.c:522 -msgid "Next" -msgstr "Vor" - -#: calendar/gui/calendar-commands.c:522 -msgid "Go forward in time" -msgstr "In der Zeit vorangehen" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to" -msgstr "Gehe zu" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to a specific date" -msgstr "Zu einem bestimmten Datum gehen" - -#. file menu -#: calendar/gui/calendar-commands.c:640 -msgid "New Ca_lendar" -msgstr "Neuer Kalender" - -#: calendar/gui/calendar-commands.c:641 -msgid "Create a new calendar" -msgstr "Einen neuen Kalender anlegen" - -#: calendar/gui/calendar-commands.c:644 -msgid "Open Ca_lendar" -msgstr "Kalender öffnen" - -#: calendar/gui/calendar-commands.c:645 -msgid "Open a calendar" -msgstr "Einen Kalender öffnen" - -#: calendar/gui/calendar-commands.c:649 calendar/gui/calendar-commands.c:650 -msgid "Save Calendar As" -msgstr "Kalender speichern unter" - -#: calendar/gui/calendar-commands.c:663 -msgid "_New appointment..." -msgstr "Neuer Termin..." - -#: calendar/gui/calendar-commands.c:671 calendar/gui/prop.c:718 -msgid "Preferences" -msgstr "Einstellungen" - -#: calendar/gui/calendar-commands.c:678 calendar/gui/calendar-commands.c:679 -msgid "About Calendar" -msgstr "Über den Kalender" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:721 -#, c-format -msgid "%s%s" -msgstr "%2$s%1$s" - -#: calendar/gui/calendar-commands.c:721 -msgid "'s calendar" -msgstr "Kalender für " - -#: calendar/gui/calendar-model.c:323 -msgid "Public" -msgstr "Öffentlich" - -#: calendar/gui/calendar-model.c:326 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "Privat" - -#: calendar/gui/calendar-model.c:329 -msgid "Confidential" -msgstr "Vertraulich" - -#: calendar/gui/calendar-model.c:332 calendar/gui/calendar-model.c:499 -msgid "Unknown" -msgstr "Unbekannt" - -#: calendar/gui/calendar-model.c:419 -msgid "N" -msgstr "N" - -#: calendar/gui/calendar-model.c:419 -msgid "S" -msgstr "S" - -#: calendar/gui/calendar-model.c:421 -msgid "E" -msgstr "O" - -#: calendar/gui/calendar-model.c:421 -msgid "W" -msgstr "W" - -#: calendar/gui/calendar-model.c:493 -msgid "Transparent" -msgstr "Transparent" - -#: calendar/gui/calendar-model.c:496 -msgid "Opaque" -msgstr "Opak" - -#: calendar/gui/calendar-model.c:747 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"Das Datum muss in diesem Format eingegeben werden: \n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:820 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"Die geographische Position muss in diesem Format eingegeben werden: \n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:865 -msgid "The percent value must be between 0 and 100" -msgstr "Der Prozentwert muss zwischen 0 und 100 sein" - -#: calendar/gui/calendar-model.c:898 -msgid "The priority must be between 0 and 10" -msgstr "Die Priorität muss zwischen 0 und 10 sein" - -#: calendar/gui/control-factory.c:132 -msgid "The URI that the calendar will display" -msgstr "Der URI, den der Kalender anzeigen wird" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Alarm am %A, %d. %b %Y um %H.%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Hinweis auf Ihren Termin am %A, %d. %b %Y um %H.%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "Keine Zusammenfassung verfügbar." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Schließen" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1086 -msgid "Snooze" -msgstr "Weiterschlafen" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Termin bearbeiten" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Weiterschlaf-Zeit (Minuten)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1209 -msgid "FIXME: _Delete" -msgstr "FIXME: Löschen" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "FIXME: Unvollständiger Auftrag" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1311 -msgid "FIXME: Chec_k Names" -msgstr "FIXME: Namen prüfen" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1312 -msgid "FIXME: Address _Book..." -msgstr "FIXME Adressbuch..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "FIXME: _Neuer Auftrag" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "FIXME: Statusbericht senden" - -#: calendar/gui/dialogs/task-editor.c:358 -msgid "FIXME: _Mark Complete" -msgstr "FIXME: Als abgeschlossen markieren" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1321 -msgid "FIXME: Rec_urrence..." -msgstr "FIXME: Wiederholung..." - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "FIXME: Wiederholung überspringen" - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "FIXME: Auftrag zuweisen" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "FIXME: Antworten" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "FIXME: Antwort an alle" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1381 -msgid "FIXME: Save and Close" -msgstr "FIXME: Speichern und schließen" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "Den Auftrag speichern und das Dialogfenster schließen" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1386 -msgid "FIXME: Print..." -msgstr "FIXME: Drucken..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1391 -msgid "FIXME: Recurrence..." -msgstr "FIXME: Wiederholung..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1392 -msgid "Configure recurrence rules" -msgstr "Wiederholungsregeln konfigurieren" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "FIXME: Auftrag zuweisen..." - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "Jemandem den Auftrag zuweisen" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1397 -msgid "FIXME: Delete" -msgstr "FIXME: Löschen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "Betreff:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "Eigner:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "Anfangsdatum:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "Fällig am:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "Status:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"Nicht begonnen\n" -"Wird bearbeitet\n" -"Abgeschlossen\n" -"Storniert\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "Nicht begonnen" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "_Priorität:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"Hoch\n" -"Normal\n" -"Niedrig\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -msgid "High" -msgstr "Hoch" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% abgeschlossen:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "Kontakte..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "Auftrag" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "Abgeschlossen am:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "Ort:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "Ressourcen:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "Kommentar" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "Abgeschlossen" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "Erzeugt" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "Beschreibung" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "Zeitstempel" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "Anfangsdatum" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "Enddatum" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "Geographische Position" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "Letztes Änderungsdatum" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "Ort" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "Organisator" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% abgeschlossen" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:476 -#: calendar/gui/prop.c:611 mail/message-list.c:508 -msgid "Priority" -msgstr "Priorität" - -#: calendar/gui/e-calendar-table.c:260 -msgid "TaskPad" -msgstr "Auftragsblock" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "Erinnerung" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "Öffnen..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "Den Auftrag öffnen" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "Als abgeschlossen markieren" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "Den Auftrag als abgeschlossen markieren" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "Diesen Auftrag löschen" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i Minuten-Unterteilungen" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Neuer Termin..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Diesen Termin bearbeiten..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Diesen Termin löschen" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Diesen Termin beweglich machen" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "Dieses Auftreten löschen" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Jedes Auftreten löschen" - -#: calendar/gui/event-editor.c:294 -msgid "Edit Appointment" -msgstr "Termin bearbeiten" - -#: calendar/gui/event-editor.c:300 -msgid "No summary" -msgstr "Keine Zusammenfassung" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Appointment - %s" -msgstr "Termin - %s" - -#: calendar/gui/event-editor.c:309 -#, c-format -msgid "Task - %s" -msgstr "Auftrag - %s" - -#: calendar/gui/event-editor.c:312 -#, c-format -msgid "Journal entry - %s" -msgstr "Journal-Eintrag - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:613 calendar/gui/event-editor.c:717 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1276 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: Kalender..." - -#: calendar/gui/event-editor.c:1319 -msgid "FIXME: _New Appointment" -msgstr "FIXME: Neuer Termin" - -#: calendar/gui/event-editor.c:1323 -msgid "FIXME: Invite _Attendees..." -msgstr "FIXME: Teilnehmer einladen..." - -#: calendar/gui/event-editor.c:1324 -msgid "FIXME: C_ancel Invitation..." -msgstr "FIXME: Einladung rückgängig machen..." - -#: calendar/gui/event-editor.c:1326 -msgid "FIXME: Forward as v_Calendar" -msgstr "FIXME: Als vCalendar weiterleiten" - -#: calendar/gui/event-editor.c:1394 -msgid "FIXME: Invite Attendees..." -msgstr "FIXME: Teilnehmer einladen..." - -#: calendar/gui/event-editor.c:1395 -msgid "Invite attendees to a meeting" -msgstr "Teilnehmer zu einer Besprechung einladen" - -#: calendar/gui/event-editor.c:1838 -msgid "%a %b %d %Y" -msgstr "%a, %d. %b %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "Zusammenfassung:" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "Eigner:" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "Zeit" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "Anfangszeit:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "Endzeit:" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "Ganztägiges Ereignis" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "Klassifikation" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "Öffentlich" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "Privat" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "Vertraulich" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"Minuten\n" -"Stunden\n" -"Tage\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "Anzeige" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "Audio" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "_Programm" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "Mail" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "Mail an:" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "Programm aufrufen:" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "Wiederholungsregel" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:875 -msgid "None" -msgstr "Keine" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "Täglich" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Wöchentlich" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Monatlich" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Jährlich" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "Alle " - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "Tag(e)" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "Woche(n)" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Mo" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Di" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Mi" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Do" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Fr" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Sa" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "So" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "Wiederholen am" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr ". Tag des Monats" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1.\n" -"2.\n" -"3.\n" -"4.\n" -"5.\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"Montag\n" -"Dienstag\n" -"Mittwoch\n" -"Donnerstag\n" -"Freitag\n" -"Samstag\n" -"Sonntag\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "Alle" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "Monat(e)" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "Jahr(e)" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "Enddatum" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "Für immer wiederholen" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "Ende am " - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "Ende nach" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "Auftreten" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "Ausnahmen" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "Ändern" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "Wiederholung" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "Januar" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "Februar" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "März" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "April" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "Mai" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "Juni" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "Juli" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "August" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "September" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "Sep" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "Oktober" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "November" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "Dezember" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "Sonntag" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "Montag" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "Dienstag" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "Di" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "Mittwoch" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "Mittw" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "Donnerstag" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "Don" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "Donn" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "Freitag" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "Samstag" - -#: calendar/gui/getdate.y:420 filter/filter-datespec.c:61 -msgid "year" -msgstr "Jahr" - -#: calendar/gui/getdate.y:421 filter/filter-datespec.c:62 -msgid "month" -msgstr "Monat" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "14 Tage" - -#: calendar/gui/getdate.y:423 filter/filter-datespec.c:63 -msgid "week" -msgstr "Woche" - -#: calendar/gui/getdate.y:424 filter/filter-datespec.c:64 -msgid "day" -msgstr "Tag" - -#: calendar/gui/getdate.y:425 filter/filter-datespec.c:65 -msgid "hour" -msgstr "Stunde" - -#: calendar/gui/getdate.y:426 filter/filter-datespec.c:66 -msgid "minute" -msgstr "Minute" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 filter/filter-datespec.c:67 -msgid "second" -msgstr "Sekunde" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "s" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "morgen" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "gestern" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "heute" - -#: calendar/gui/getdate.y:438 filter/filter-datespec.c:504 -#: filter/filter-datespec.c:664 -msgid "now" -msgstr "jetzt" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "letzter" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "dieser" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "nächster" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "erster" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "dritter" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "vierter" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "fünfter" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "sechster" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "siebter" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "achter" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "neunter" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "zehnter" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "elfter" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "zwölfter" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "her" - -#: calendar/gui/gncal-todo.c:167 -msgid "Create to-do item" -msgstr "To-Do-Eintrag erzeugen" - -#: calendar/gui/gncal-todo.c:167 -msgid "Edit to-do item" -msgstr "To-Do-Eintrag bearbeiten" - -#: calendar/gui/gncal-todo.c:203 -msgid "Summary:" -msgstr "Zusammenfassung:" - -#: calendar/gui/gncal-todo.c:214 -msgid "Due Date:" -msgstr "Fällig am:" - -#: calendar/gui/gncal-todo.c:225 -msgid "Priority:" -msgstr "Priorität:" - -#: calendar/gui/gncal-todo.c:243 -msgid "Item Comments:" -msgstr "Kommentar zum Eintrag:" - -#: calendar/gui/gncal-todo.c:374 -msgid "Add to-do item..." -msgstr "To-Do-Eintrag hinzufügen..." - -#: calendar/gui/gncal-todo.c:375 -msgid "Edit this item..." -msgstr "Diesen Eintrag bearbeiten..." - -#: calendar/gui/gncal-todo.c:474 -msgid "Summary" -msgstr "Zusammenfassung" - -#: calendar/gui/gncal-todo.c:475 calendar/gui/prop.c:610 -msgid "Due Date" -msgstr "Fällig am" - -#: calendar/gui/gncal-todo.c:477 -msgid "Time Left" -msgstr "Verbleibende Zeit" - -#. Label -#: calendar/gui/gncal-todo.c:489 -msgid "To-do list" -msgstr "To-do-Liste" - -#. Add -#: calendar/gui/gncal-todo.c:528 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Hinzufügen..." - -#. Edit -#: calendar/gui/gncal-todo.c:537 -msgid "Edit..." -msgstr "Bearbeiten..." - -#: calendar/gui/gncal-todo.c:762 -msgid "Weeks" -msgstr "Wochen" - -#: calendar/gui/gncal-todo.c:763 calendar/gui/gncal-todo.c:767 -msgid "Days" -msgstr "Tage" - -#: calendar/gui/gncal-todo.c:768 calendar/gui/gncal-todo.c:772 -msgid "Hours" -msgstr "Stunden" - -#: calendar/gui/gncal-todo.c:768 calendar/gui/gncal-todo.c:772 -msgid "Hour" -msgstr "Stunde" - -#: calendar/gui/gncal-todo.c:773 calendar/gui/gncal-todo.c:777 -msgid "Minutes" -msgstr "Minuten" - -#: calendar/gui/gncal-todo.c:773 calendar/gui/gncal-todo.c:777 -msgid "Minute" -msgstr "Minute" - -#: calendar/gui/gncal-todo.c:778 calendar/gui/gncal-todo.c:782 -msgid "Seconds" -msgstr "Sekunden" - -#: calendar/gui/gncal-todo.c:778 calendar/gui/gncal-todo.c:782 -msgid "Second" -msgstr "Sekunde" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1094 -#: calendar/gui/gnome-cal.c:1150 -msgid "Reminder of your appointment at " -msgstr "Erinnerung an Ihren Termin am " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1099 calendar/gui/gnome-cal.c:1154 -msgid "Ok" -msgstr "OK" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Jahr:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Zu Datum gehen" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Bitte wählen Sie das Datum, zu dem Sie gehen\n" -"wollen. Wenn Sie auf einen Tag klicken, werden\n" -"Sie zu diesem Datum gebracht." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Zum heutigen Tag" - -#: calendar/gui/print.c:288 -msgid "1st" -msgstr "1." - -#: calendar/gui/print.c:288 -msgid "2nd" -msgstr "2." - -#: calendar/gui/print.c:288 -msgid "3rd" -msgstr "3." - -#: calendar/gui/print.c:288 -msgid "4th" -msgstr "4." - -#: calendar/gui/print.c:288 -msgid "5th" -msgstr "5." - -#: calendar/gui/print.c:289 -msgid "6th" -msgstr "6." - -#: calendar/gui/print.c:289 -msgid "7th" -msgstr "7." - -#: calendar/gui/print.c:289 -msgid "8th" -msgstr "8." - -#: calendar/gui/print.c:289 -msgid "9th" -msgstr "9." - -#: calendar/gui/print.c:289 -msgid "10th" -msgstr "10." - -#: calendar/gui/print.c:290 -msgid "11th" -msgstr "11." - -#: calendar/gui/print.c:290 -msgid "12th" -msgstr "12." - -#: calendar/gui/print.c:290 -msgid "13th" -msgstr "13." - -#: calendar/gui/print.c:290 -msgid "14th" -msgstr "14." - -#: calendar/gui/print.c:290 -msgid "15th" -msgstr "15." - -#: calendar/gui/print.c:291 -msgid "16th" -msgstr "16." - -#: calendar/gui/print.c:291 -msgid "17th" -msgstr "17." - -#: calendar/gui/print.c:291 -msgid "18th" -msgstr "18." - -#: calendar/gui/print.c:291 -msgid "19th" -msgstr "19." - -#: calendar/gui/print.c:291 -msgid "20th" -msgstr "20." - -#: calendar/gui/print.c:292 -msgid "21st" -msgstr "21." - -#: calendar/gui/print.c:292 -msgid "22nd" -msgstr "22." - -#: calendar/gui/print.c:292 -msgid "23rd" -msgstr "23." - -#: calendar/gui/print.c:292 -msgid "24th" -msgstr "24." - -#: calendar/gui/print.c:292 -msgid "25th" -msgstr "25." - -#: calendar/gui/print.c:293 -msgid "26th" -msgstr "26." - -#: calendar/gui/print.c:293 -msgid "27th" -msgstr "27." - -#: calendar/gui/print.c:293 -msgid "28th" -msgstr "28." - -#: calendar/gui/print.c:293 -msgid "29th" -msgstr "29." - -#: calendar/gui/print.c:293 -msgid "30th" -msgstr "30." - -#: calendar/gui/print.c:294 -msgid "31st" -msgstr "31." - -#: calendar/gui/print.c:349 -msgid "Su" -msgstr "So" - -#: calendar/gui/print.c:349 -msgid "Mo" -msgstr "Mo" - -#: calendar/gui/print.c:349 -msgid "Tu" -msgstr "Di" - -#: calendar/gui/print.c:349 -msgid "We" -msgstr "Mi" - -#: calendar/gui/print.c:349 -msgid "Th" -msgstr "Do" - -#: calendar/gui/print.c:349 -msgid "Fr" -msgstr "Fr" - -#: calendar/gui/print.c:349 -msgid "Sa" -msgstr "Sa" - -#: calendar/gui/print.c:943 -msgid "TODO Items" -msgstr "To-Do-Einträge" - -#. Day -#: calendar/gui/print.c:1049 -msgid "Current day (%a %b %d %Y)" -msgstr "Aktueller Tag (%a, %d. %b %Y)" - -#: calendar/gui/print.c:1069 calendar/gui/print.c:1083 -#: calendar/gui/print.c:1084 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1070 calendar/gui/print.c:1071 -#: calendar/gui/print.c:1085 calendar/gui/print.c:1086 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1073 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Aktuelle Woche (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1090 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Aktuelle Woche (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1096 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Aktuelle Woche (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1109 -msgid "Current month (%a %Y)" -msgstr "Aktueller Monat (%a %Y)" - -#. Year -#: calendar/gui/print.c:1116 -msgid "Current year (%Y)" -msgstr "Aktuelles Jahr (%Y)" - -#: calendar/gui/print.c:1153 -msgid "Print Calendar" -msgstr "Kalender drucken" - -#: calendar/gui/print.c:1318 -msgid "Print Preview" -msgstr "Druckvorschau" - -#: calendar/gui/prop.c:336 -msgid "Time display" -msgstr "Zeitanzeige" - -#. Time format -#: calendar/gui/prop.c:340 -msgid "Time format" -msgstr "Zeitformat" - -#: calendar/gui/prop.c:341 -msgid "12-hour (AM/PM)" -msgstr "12 Stunden (AM/PM)" - -#: calendar/gui/prop.c:342 -msgid "24-hour" -msgstr "24 Stunden" - -#. Weeks start on -#: calendar/gui/prop.c:352 -msgid "Weeks start on" -msgstr "Wochen beginnen mit" - -#: calendar/gui/prop.c:353 -msgid "Sunday" -msgstr "Sonntag" - -#: calendar/gui/prop.c:354 -msgid "Monday" -msgstr "Montag" - -#. Day range -#: calendar/gui/prop.c:364 -msgid "Day range" -msgstr "Tagesbereich" - -#: calendar/gui/prop.c:375 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Bitte wählen Sie den Anfang und das Ende des\n" -"Stundenbereichs, der in der Tages- und\n" -"Wochenansicht dargestellt werden soll. Zeiten\n" -"außerhalb dieses Bereichs werden normalerweise\n" -"nicht dargestellt." - -#: calendar/gui/prop.c:391 -msgid "Day start:" -msgstr "Tagesbeginn:" - -#: calendar/gui/prop.c:402 -msgid "Day end:" -msgstr "Tagesende:" - -#: calendar/gui/prop.c:525 -msgid "Colors for display" -msgstr "Farben für Anzeige" - -#: calendar/gui/prop.c:528 -msgid "Colors" -msgstr "Farben" - -#: calendar/gui/prop.c:605 -msgid "Show on TODO List:" -msgstr "Auf To-Do-Liste zeigen:" - -#: calendar/gui/prop.c:612 -msgid "Time Until Due" -msgstr "Zeit bis Fälligkeit" - -#: calendar/gui/prop.c:643 -msgid "To Do List style options:" -msgstr "Stiloptionen der To-Do-Liste:" - -#: calendar/gui/prop.c:648 -msgid "Highlight overdue items" -msgstr "Überfällige Einträge markieren" - -#: calendar/gui/prop.c:651 -msgid "Highlight not yet due items" -msgstr "Noch nicht fällige Einträge markieren" - -#: calendar/gui/prop.c:654 -msgid "Highlight items due today" -msgstr "Heute fällig Einträge markieren" - -#: calendar/gui/prop.c:684 -msgid "To Do List Properties" -msgstr "Eigenschaften der To-Do-Liste" - -#: calendar/gui/prop.c:687 -msgid "To Do List" -msgstr "To-Do-Liste" - -#: calendar/gui/prop.c:786 -msgid "Alarms" -msgstr "Alarme" - -#. build miscellaneous box -#: calendar/gui/prop.c:789 -msgid "Alarm Properties" -msgstr "Alarm-Eigenschaften" - -#: calendar/gui/prop.c:799 -msgid "Beep on display alarms" -msgstr "Bei angezeigtem Alarm piepsen" - -#: calendar/gui/prop.c:809 -msgid "Audio alarms timeout after" -msgstr "Audio-Alarme schweigen nach" - -#: calendar/gui/prop.c:820 calendar/gui/prop.c:837 -msgid " seconds" -msgstr " Sekunden" - -#: calendar/gui/prop.c:826 -msgid "Enable snoozing for " -msgstr "Weiterschlafen aktivieren für " - -#. populate default frame/box -#: calendar/gui/prop.c:842 -msgid "Defaults" -msgstr "Voreinstellungen" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "Ausschneiden" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "Gewähltes Element in die Zwischenablage ausschneiden" - -#: composer/e-msg-composer-address-dialog.c:186 -#: mail/folder-browser-factory.c:46 -msgid "Copy" -msgstr "Kopieren" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "Gewähltes Element in die Zwischenablage ausschneiden" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "Einfügen" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "Element aus der Zwischenablage einfügen" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "Empfängeradresse auswählen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Empfängerliste:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Suchen..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Name" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "Adresse" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Eigenschaften..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "An: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 Byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u Bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Anhang hinzufügen" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Entfernen" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Entferne das gewählte Element aus der Anhangsliste" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Anhang hinzufügen..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Eine Datei zu der Nachricht hinzufügen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Anlagen-Eigenschaften" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME-Typ:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Dateiname:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "Von:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "Für das Adressbuch hier klicken" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "" -"Geben Sie die Identität ein, von der diese Nachricht gesendet werden soll" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "An:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "Gebe die Empfänger der Nachricht ein" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Gebe die Adressen ein, die eine Kopie der Nachricht erhalten" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Gebe die Adressen ein, die eine Kopie erhalten, dienicht in der " -"Empfängerliste auftaucht." - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "Betreff:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "Gebe den Betreff der Nachricht an" - -#: composer/e-msg-composer.c:451 -msgid "Save as..." -msgstr "Speichern unter..." - -#: composer/e-msg-composer.c:462 -#, c-format -msgid "Error saving file: %s" -msgstr "Fehler beim Speichern der Datei: %s" - -#: composer/e-msg-composer.c:482 -#, c-format -msgid "Error loading file: %s" -msgstr "Fehler beim Laden der Datei: %s" - -#: composer/e-msg-composer.c:504 -msgid "Saving changes to message..." -msgstr "Speichere Änderungen an Nachricht..." - -#: composer/e-msg-composer.c:506 -msgid "About to save changes to message..." -msgstr "Dabei, Änderungen an Nachricht zu speichern..." - -#: composer/e-msg-composer.c:590 shell/e-shell-view-menu.c:165 -msgid "Evolution" -msgstr "Evolution" - -#: composer/e-msg-composer.c:596 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"Diese Nachricht wurde nicht versandt.\n" -"\n" -"Wollen Sie Ihre Änderungen speichern?" - -#: composer/e-msg-composer.c:618 -msgid "Open file" -msgstr "Datei öffnen" - -#: composer/e-msg-composer.c:730 -msgid "That file does not exist." -msgstr "Diese Datei existiert nicht." - -#: composer/e-msg-composer.c:740 -msgid "That is not a regular file." -msgstr "Diese Datei ist keine normale Datei." - -#: composer/e-msg-composer.c:750 -msgid "That file exists but is not readable." -msgstr "Diese Datei existiert, ist aber nicht lesbar." - -#: composer/e-msg-composer.c:760 -msgid "That file appeared accesible but open(2) failed." -msgstr "Diese Datei scheint lesbar zu sein, aber open(2) schlug fehl." - -#: composer/e-msg-composer.c:782 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"Diese Datei ist sehr groß (mehr als 100 kB).\n" -"Sind Sie sicher, dass Sie sie einfügen wollen?" - -#: composer/e-msg-composer.c:803 -msgid "An error occurred while reading the file." -msgstr "Ein Fehler trat beim Lesen der Datei auf." - -#: composer/e-msg-composer.c:899 shell/e-shell-view-menu.c:434 -msgid "_File" -msgstr "_Datei" - -#: composer/e-msg-composer.c:905 -msgid "_Open..." -msgstr "Ö_ffnen..." - -#: composer/e-msg-composer.c:906 -msgid "Load a previously saved message" -msgstr "Eine vorher gespeicherte Nachricht laden" - -#: composer/e-msg-composer.c:914 -msgid "_Save..." -msgstr "_Speichern..." - -#: composer/e-msg-composer.c:915 -msgid "Save message" -msgstr "Nachricht speichern" - -#: composer/e-msg-composer.c:923 -msgid "_Save as..." -msgstr "Speichern _unter..." - -#: composer/e-msg-composer.c:924 -msgid "Save message with a different name" -msgstr "Speichert die Nachricht unter einem anderen Namen" - -#: composer/e-msg-composer.c:932 -msgid "Save in _folder..." -msgstr "Speichern in _Ordner..." - -#: composer/e-msg-composer.c:933 -msgid "Save the message in a specified folder" -msgstr "Speichere die Nachricht in einem bestimmten Ordner" - -#: composer/e-msg-composer.c:942 -msgid "_Insert text file... (FIXME)" -msgstr "Textdatei einfügen... (FIXME)" - -#: composer/e-msg-composer.c:943 -msgid "Insert a file as text into the message" -msgstr "Diese Datei als Text in die Nachricht einfügen" - -#: composer/e-msg-composer.c:952 -msgid "_Send" -msgstr "_Senden" - -#: composer/e-msg-composer.c:953 -msgid "Send the message" -msgstr "Sendet die Nschricht" - -#: composer/e-msg-composer.c:963 -msgid "_Close..." -msgstr "S_chließen..." - -#: composer/e-msg-composer.c:964 -msgid "Quit the message composer" -msgstr "Den Nachrichteneditor verlassen" - -#: composer/e-msg-composer.c:977 shell/e-shell-view-menu.c:478 -msgid "_Edit" -msgstr "_Bearbeiten" - -#: composer/e-msg-composer.c:988 -msgid "_Format" -msgstr "_Format" - -#: composer/e-msg-composer.c:994 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:995 -msgid "Send the mail in HTML format" -msgstr "Die Mail in HTML-Format senden" - -#: composer/e-msg-composer.c:1008 mail/folder-browser-factory.c:185 -#: shell/e-shell-view-menu.c:383 shell/e-shell-view-menu.c:489 -#: shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "_Ansicht" - -#: composer/e-msg-composer.c:1014 -msgid "Show _attachments" -msgstr "_Anlagen anzeigen" - -#: composer/e-msg-composer.c:1015 -msgid "Show/hide attachments" -msgstr "Anlagen anzeigen/verbergen" - -#: composer/e-msg-composer.c:1048 -msgid "Send" -msgstr "Senden" - -#: composer/e-msg-composer.c:1049 -msgid "Send this message" -msgstr "Diese Nachricht senden" - -#: composer/e-msg-composer.c:1058 -msgid "Attach" -msgstr "Anhängen" - -#: composer/e-msg-composer.c:1059 -msgid "Attach a file" -msgstr "eine Datei anhängen" - -#: composer/e-msg-composer.c:1246 -msgid "Compose a message" -msgstr "Eine Nachricht erstellen" - -#: filter/filter-datespec.c:61 -msgid "years" -msgstr "Jahre" - -#: filter/filter-datespec.c:62 -msgid "months" -msgstr "Monate" - -#: filter/filter-datespec.c:63 -msgid "weeks" -msgstr "Wochen" - -#: filter/filter-datespec.c:64 -msgid "days" -msgstr "Tage" - -#: filter/filter-datespec.c:65 -msgid "hours" -msgstr "Stunden" - -#: filter/filter-datespec.c:66 -msgid "minutes" -msgstr "Minuten" - -#: filter/filter-datespec.c:67 -msgid "seconds" -msgstr "Sekunden" - -#: filter/filter-datespec.c:232 -msgid "" -"The message's date will be compared against\n" -"whatever the time is when the filter is run\n" -"or vfolder is opened." -msgstr "" -"Das Datum der Nachricht wird mit der Zeit\n" -"verglichen, zu der der Filter ausgeführt oder\n" -"der VFolder geöfnet wird." - -#: filter/filter-datespec.c:254 -msgid "" -"The message's date will be compared against\n" -"the time that you specify here." -msgstr "" -"Das Datum der Nachricht wird mit der hier\n" -"von Ihnen angegebenen Zeit verglichen." - -#: filter/filter-datespec.c:293 -msgid "" -"The message's date will be compared against\n" -"a time relative to when the filter is run;\n" -"\"a week ago\", for example." -msgstr "" -"Das Datum der Nachricht wird verglichen mit\n" -"einer zur Zeit der Filterausführung relativen\n" -"Zeit, z.B. \"vor einer Woche\"." - -#. keep in sync with FilterDatespec_type! -#: filter/filter-datespec.c:328 -msgid "the current time" -msgstr "der aktuellen Zeit" - -#: filter/filter-datespec.c:328 -msgid "a time you specify" -msgstr "einer von Ihnen angegebene Zeit" - -#: filter/filter-datespec.c:329 -msgid "a time relative to the current time" -msgstr "einer zur momentanen Zeit relativen Zeit" - -#. The label -#: filter/filter-datespec.c:387 -msgid "Compare against" -msgstr "Vergleichen mit" - -#: filter/filter-datespec.c:661 -msgid "" -msgstr "" - -#: filter/filter-editor.c:156 filter/score-editor.c:126 -#: filter/vfolder-editor.c:152 -msgid "Add Rule" -msgstr "Regel hinzufügen" - -#: filter/filter-editor.c:188 -msgid "Edit Rule" -msgstr "Regel bearbeiten" - -#: filter/filter-filter.c:397 filter/filter-rule.c:534 -msgid "Less" -msgstr "Weniger" - -#: filter/filter-filter.c:400 filter/filter-rule.c:537 -msgid "More" -msgstr "Mehr" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "Ordner wählen" - -#: filter/filter-folder.c:205 -msgid "Enter folder URI" -msgstr "Ordner-URI eingeben" - -#: filter/filter-folder.c:247 -msgid "" -msgstr "" - -#: filter/filter-part.c:420 -msgid "Test" -msgstr "Test" - -#: filter/score-editor.c:160 -msgid "Edit Score Rule" -msgstr "Bewertungsregel bearbeiten" - -#: filter/vfolder-editor.c:186 -msgid "Edit VFolder Rule" -msgstr "VFolder-Regel bearbeiten" - -#: mail/component-factory.c:187 -msgid "Cannot initialize Evolution's mail component." -msgstr "Kann die Evolution-Mail-Komponente nicht initialisieren" - -#: mail/folder-browser-factory.c:33 -msgid "Get mail" -msgstr "Mails abrufen" - -#: mail/folder-browser-factory.c:33 -msgid "Check for new mail" -msgstr "Nach neuen Mails suchen" - -#: mail/folder-browser-factory.c:34 -msgid "Compose" -msgstr "Erstellen" - -#: mail/folder-browser-factory.c:34 -msgid "Compose a new message" -msgstr "Eine neue Nachricht erstellen" - -#. GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), -#. save_msg, GNOME_STOCK_PIXMAP_SAVE), -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply" -msgstr "Antworten" - -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply to the sender of this message" -msgstr "An den Sender der Nachricht antworten" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to All" -msgstr "Allen antworten" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to all recipients of this message" -msgstr "allen Empfängern der Nachricht antworten" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward" -msgstr "Weiterleiten" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward this message" -msgstr "Die Nachricht weiterleiten" - -#: mail/folder-browser-factory.c:45 -msgid "Move" -msgstr "Verschieben" - -#: mail/folder-browser-factory.c:45 -msgid "Move message to a new folder" -msgstr "Die Nachricht in einen neuen Ordner verschieben" - -#: mail/folder-browser-factory.c:46 -msgid "Copy message to a new folder" -msgstr "Nachricht in einen neuen Ordner kopieren" - -#: mail/folder-browser-factory.c:48 mail/mail-view.c:145 -msgid "Print the selected message" -msgstr "Die gewählte Nachricht drucken" - -#: mail/folder-browser-factory.c:50 mail/mail-view.c:147 -msgid "Delete this message" -msgstr "Die Nachricht löschen" - -#: mail/folder-browser-factory.c:71 -#, c-format -msgid "Run filter \"%s\"" -msgstr "Filter \"%s\" ausführen" - -#: mail/folder-browser-factory.c:127 -msgid "_Threaded Message List" -msgstr "Nachrichtenliste mit Threads" - -#: mail/folder-browser-factory.c:137 -msgid "_Print Message" -msgstr "Nachricht _drucken" - -#: mail/folder-browser-factory.c:146 -msgid "F_older" -msgstr "Ordner" - -#: mail/folder-browser-factory.c:152 -msgid "_Mark all as Read" -msgstr "Alle als gelesen _markieren" - -#: mail/folder-browser-factory.c:158 -msgid "_Expunge" -msgstr "Säubern" - -#: mail/folder-browser-factory.c:165 -msgid "_Configure Folder" -msgstr "Ordner konfigurieren" - -#: mail/folder-browser-factory.c:172 -msgid "_Message" -msgstr "Nachricht" - -#: mail/folder-browser-factory.c:178 -msgid "E_dit" -msgstr "Bearbeiten" - -#: mail/folder-browser-factory.c:192 -msgid "Mail _Filters ..." -msgstr "Mail_filter..." - -#: mail/folder-browser-factory.c:199 -msgid "_vFolder Editor ..." -msgstr "_vFolder-Editor..." - -#: mail/folder-browser-factory.c:206 -msgid "_Mail Configuration ..." -msgstr "Mailkonfiguration..." - -#: mail/folder-browser-factory.c:213 -msgid "Forget _Passwords" -msgstr "Passwörter vergessen" - -#: mail/folder-browser.c:371 -msgid "Save" -msgstr "Speichern" - -#: mail/mail-callbacks.c:134 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Diese Nachricht hat keine Betreffzeile.\n" -"Wirklich senden?" - -#: mail/mail-callbacks.c:166 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"Sie müssen eine Identität einrichten,\n" -"bevor Sie Mail senden können." - -#: mail/mail-callbacks.c:182 -msgid "" -"You need to configure a mail transport\n" -"before you can send mail." -msgstr "" -"Sie müssen einen Mailtransport einrichten,\n" -"bevor Sie Mail senden können." - -#: mail/mail-callbacks.c:389 -msgid "Move message(s) to" -msgstr "Machricht(en) verschieben in" - -#: mail/mail-callbacks.c:391 -msgid "Copy message(s) to" -msgstr "Machricht(en) kopieren in" - -#: mail/mail-callbacks.c:448 -msgid "" -"You may only edit messages saved\n" -"in the Drafts folder." -msgstr "" -"Sie können nur im Entwürfe-Ordner\n" -"abgespeicherte Nachrichten bearbeiten." - -#: mail/mail-callbacks.c:536 -#, c-format -msgid "" -"Error loading filter information:\n" -"%s" -msgstr "" -"Fehler beim Laden von Filterinformation:\n" -"%s" - -#: mail/mail-config-gui.c:431 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Geben Sie den Namen und die E-Mail-Adresse zur Verwendung in Ihrer " -"ausgehenden Mail ein. Sie können auf Wunsch auch den Namen Ihrer " -"Organisation erwähnen, und den einer Datei, in der Ihre Signatur steht." - -#: mail/mail-config-gui.c:444 -msgid "Full name:" -msgstr "Voller Name:" - -#: mail/mail-config-gui.c:468 -msgid "Email address:" -msgstr "E-Mail-Adresse:" - -#: mail/mail-config-gui.c:483 -msgid "Organization:" -msgstr "Organisation:" - -#: mail/mail-config-gui.c:494 -msgid "Signature file:" -msgstr "Signaturdatei:" - -#: mail/mail-config-gui.c:499 mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "Signaturdatei" - -#: mail/mail-config-gui.c:898 -msgid "Server:" -msgstr "Server:" - -#: mail/mail-config-gui.c:904 -msgid "Username:" -msgstr "Benutzername:" - -#: mail/mail-config-gui.c:910 -msgid "Path:" -msgstr "Pfad:" - -#: mail/mail-config-gui.c:918 -msgid "Authentication:" -msgstr "Authentikation:" - -#: mail/mail-config-gui.c:930 -msgid "Detect supported types..." -msgstr "Unterstützte Typen feststellen..." - -#: mail/mail-config-gui.c:955 -msgid "Don't delete messages from server" -msgstr "Nachrichten nicht vom Server löschen" - -#: mail/mail-config-gui.c:967 -msgid "Test Settings" -msgstr "Einstellungen testen" - -#: mail/mail-config-gui.c:1099 mail/mail-config-gui.c:1147 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Wählen Sie, welche Art von Mailserver Sie haben, und geben Sie die relevante " -"Information dazu ein.\n" -"\n" -"Wenn der Server Authentikation erfordert, können Sie auf \"Unterstützte " -"Typen feststellen...\" klicken, bevor Sie andere Informationen eingeben." - -#: mail/mail-config-gui.c:1123 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Wählen Sie, welche Art von Newsserver Sie haben, und geben Sie die relevante " -"Information dazu ein.\n" -"\n" -"Wenn der Server Authentikation erfordert, können Sie auf \"Unterstützte " -"Typen feststellen...\" klicken, nachdem Sie die anderen Informationen " -"eingegeben haben." - -#: mail/mail-config-gui.c:1142 -msgid "Mail transport type:" -msgstr "Mailtransport-Typ:" - -#: mail/mail-config-gui.c:1197 -msgid "Edit Identity" -msgstr "Identität bearbeiten" - -#: mail/mail-config-gui.c:1199 -msgid "Add Identity" -msgstr "Identität hinzufügen" - -#: mail/mail-config-gui.c:1293 -msgid "Edit Source" -msgstr "Quelle bearbeiten" - -#: mail/mail-config-gui.c:1295 -msgid "Add Source" -msgstr "Quelle hinzufügen" - -#: mail/mail-config-gui.c:1392 -msgid "Edit News Server" -msgstr "Newsserver bearbeiten" - -#: mail/mail-config-gui.c:1394 -msgid "Add News Server" -msgstr "Newsserver hinzufügen" - -#: mail/mail-config-gui.c:2243 -msgid "The connection was successful!" -msgstr "Die Verbindung war erfolgreich!" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "Identitäten" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "Organisation" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "Bearbeiten" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "Quellen" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "Mailquellen" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "Mailtransport" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "Newsserver" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "Newsquellen" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "Nachrichten in HTML-Format senden" - -#: mail/mail-config.glade.h:27 -msgid "Mark message as seen [ms]: " -msgstr "Nachrichten als gelesen markieren [ms]: " - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "Mailkonfiguration" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"Willkommen zum Evolution-Mailkonfigurationsassistenten!\n" -"Wenn Sie einige Informationen über Ihre E-Mail-\n" -"Einstellungen geben, können Sie sofort anfangen, E-Mail\n" -"zu senden und zu empfangen. Klicken Sie \"Weiter\" zum\n" -"Fortfahren." - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "Identität" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "Mailquelle" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"Ihre E-Mail-Konfiguration ist nun abgeschlossen.\n" -"Speichern Sie Sie durch Klick auf \"Abschließen\"." - -#: mail/mail-crypto.c:338 mail/mail-crypto.c:418 -msgid "Please enter your PGP/GPG passphrase." -msgstr "Bitte geben Sie Ihre PGP-/GPG-Passphrase ein." - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:422 -msgid "No password provided." -msgstr "Kein Passwort angegeben." - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:428 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "Konnte Pipe zu GPG/PGP nicht anlegen: %s" - -#: mail/mail-local.c:257 -#, c-format -msgid "Changing folder \"%s\" to \"%s\" format" -msgstr "Wandle Ordner \"%s\" in \"%s\"-Format um" - -#: mail/mail-local.c:261 -#, c-format -msgid "Change folder \"%s\" to \"%s\" format" -msgstr "Ordner \"%s\" in \"%s\"-Format umwandeln" - -#: mail/mail-ops.c:74 -#, c-format -msgid "Fetching email from %s" -msgstr "Rufe E-Mail von %s ab" - -#: mail/mail-ops.c:76 -#, c-format -msgid "Fetch email from %s" -msgstr "E-Mail von %s abrufen" - -#: mail/mail-ops.c:87 -msgid "You have no remote mail source configured to fetch mail from." -msgstr "" -"Sie haben keine konfigurierte entfernte Mailquelle, von der Sie Mail abrufen " -"könnten." - -#: mail/mail-ops.c:97 -msgid "Bad folder passed to fetch_mail" -msgstr "Ungültiger Ordner an fetch_mail übergeben" - -#: mail/mail-ops.c:165 -msgid "There is no new mail." -msgstr "Keine neue Mail." - -#: mail/mail-ops.c:234 -#, c-format -msgid "Sending \"%s\"" -msgstr "Sende \"%s\"" - -#: mail/mail-ops.c:239 -msgid "Sending a message without a subject" -msgstr "Sende eine Nachricht ohne eine Betreffzeile" - -#: mail/mail-ops.c:242 -#, c-format -msgid "Send \"%s\"" -msgstr "\"%s\" senden" - -#: mail/mail-ops.c:245 -msgid "Send a message without a subject" -msgstr "Eine Nachricht ohne eine Betreffzeile senden" - -#: mail/mail-ops.c:410 -#, c-format -msgid "Expunging \"%s\"" -msgstr "Säubere \"%s\"" - -#: mail/mail-ops.c:412 -#, c-format -msgid "Expunge \"%s\"" -msgstr "\"%s\" säubern" - -#: mail/mail-ops.c:484 -#, c-format -msgid "Moving messages from \"%s\" into \"%s\"" -msgstr "Verschiebe Nachrichten von \"%s\" in \"%s\"" - -#: mail/mail-ops.c:486 -#, c-format -msgid "Copying messages from \"%s\" into \"%s\"" -msgstr "Kopiere Nachrichten von \"%s\" in \"%s\"" - -#: mail/mail-ops.c:489 -#, c-format -msgid "Move messages from \"%s\" into \"%s\"" -msgstr "Machrichten von \"%s\" in \"%s\" verschieben" - -#: mail/mail-ops.c:491 -#, c-format -msgid "Copy messages from \"%s\" into \"%s\"" -msgstr "Kopiere Nachrichten von \"%s\" in \"%s\"" - -#: mail/mail-ops.c:637 -#, c-format -msgid "Marking messages in folder \"%s\"" -msgstr "Markiere Nachrichten in Ordner \"%s\"" - -#: mail/mail-ops.c:640 -#, c-format -msgid "Mark messages in folder \"%s\"" -msgstr "Markiere Nachrichten in Ordner \"%s\"" - -#: mail/mail-ops.c:769 -#, c-format -msgid "Scanning folders in \"%s\"" -msgstr "Taste Ordner in \"%s\" ab" - -#: mail/mail-ops.c:772 -#, c-format -msgid "Scan folders in \"%s\"" -msgstr "Ordner in \"%s\" abtasten" - -#: mail/mail-ops.c:859 -msgid "(No description)" -msgstr "(Keine Beschreibung)" - -#: mail/mail-ops.c:922 -#, c-format -msgid "Attaching messages from folder \"%s\"" -msgstr "Hänge Nachrichten aus Ordner \"%s\" an" - -#: mail/mail-ops.c:925 -#, c-format -msgid "Attach messages from \"%s\"" -msgstr "Nachrichten aus \"%s\" anhängen" - -#: mail/mail-ops.c:1051 -#, c-format -msgid "Forwarding messages \"%s\"" -msgstr "Leite Nachrichten weiter: \"%s\"" - -#: mail/mail-ops.c:1056 -msgid "Forwarding a message without a subject" -msgstr "Leite eine Nachricht ohne eine Betreffzeile weiter" - -#: mail/mail-ops.c:1059 -#, c-format -msgid "Forward message \"%s\"" -msgstr "Nachricht \"%s\" weiterleiten" - -#: mail/mail-ops.c:1064 -msgid "Forward a message without a subject" -msgstr "Eine Nachricht ohne eine Betreffzeile weiterleiten" - -#: mail/mail-ops.c:1129 -msgid "" -"Failed to generate mime part from message while generating forwarded message." -msgstr "" -"Konnte beim Erzeugen der weitergeleiteten Nachricht keinen MIME-Part aus der " -"Nachricht erzeugen." - -#: mail/mail-ops.c:1218 -#, c-format -msgid "Loading \"%s\"" -msgstr "Lade \"%s\"" - -#: mail/mail-ops.c:1220 -#, c-format -msgid "Load \"%s\"" -msgstr "\"%s\" laden" - -#: mail/mail-ops.c:1339 -#, c-format -msgid "Creating \"%s\"" -msgstr "Erzeuge \"%s\"" - -#: mail/mail-ops.c:1341 -#, c-format -msgid "Create \"%s\"" -msgstr "\"%s\" erzeugen" - -#: mail/mail-ops.c:1412 -msgid "Exception while reporting result to shell component listener." -msgstr "" -"Ausnahmezustand beim Übermitteln des Ergebnisses an " -"Shell-Komponenten-Listener." - -#: mail/mail-ops.c:1465 -#, c-format -msgid "Synchronizing \"%s\"" -msgstr "Synchronisiere \"%s\"" - -#: mail/mail-ops.c:1467 -#, c-format -msgid "Synchronize \"%s\"" -msgstr "\"%s\" synchronisieren" - -#: mail/mail-ops.c:1543 -#, c-format -msgid "Displaying message UID \"%s\"" -msgstr "Zeige Nachrichten-UID \"%s\" an" - -#: mail/mail-ops.c:1546 -msgid "Clearing message display" -msgstr "Lösche Nachrichtenanzeige" - -#: mail/mail-ops.c:1549 -#, c-format -msgid "Display message UID \"%s\"" -msgstr "Nachrichten-UID \"%s\" anzeigen" - -#: mail/mail-ops.c:1552 -msgid "Clear message display" -msgstr "Nachrichtenanzeige löschen" - -#: mail/mail-ops.c:1679 -#, c-format -msgid "Opening messages from folder \"%s\"" -msgstr "Öffne Nachrichten aus Ordner \"%s\"" - -#: mail/mail-ops.c:1682 -#, c-format -msgid "Open messages from \"%s\"" -msgstr "Nachrichten aus \"%s\" öffnen" - -#: mail/mail-ops.c:1794 -msgid "Loading Draftbox" -msgstr "Lade Entwurfsordner" - -#: mail/mail-ops.c:1796 -msgid "Load Draftbox" -msgstr "Entwurfsordner laden" - -#: mail/mail-ops.c:1864 -#, c-format -msgid "Viewing messages from folder \"%s\"" -msgstr "Betrachte Nachrichten aus Ordner \"%s\"" - -#: mail/mail-ops.c:1867 -#, c-format -msgid "View messages from \"%s\"" -msgstr "Nachrichten aus Ordner \"%s\" betrachten" - -#: mail/mail-threads.c:274 -#, c-format -msgid "" -"Error while preparing to %s:\n" -"%s" -msgstr "" -"Fehler beim Vorbereiten auf %s:\n" -"%s" - -#: mail/mail-threads.c:627 -#, c-format -msgid "" -"Error while `%s':\n" -"%s" -msgstr "" -"Fehler beim `%s'_\n" -"%s" - -#: mail/mail-threads.c:680 -msgid "Incomplete message written on pipe!" -msgstr "Unvollständige Nachricht auf Pipe geschrieben!" - -#: mail/mail-threads.c:684 -msgid "Error reading commands from dispatching thread." -msgstr "Fehler beim Lesen von Befehlen vom verwaltenden Thread." - -#: mail/mail-threads.c:749 -msgid "Corrupted message from dispatching thread?" -msgstr "Schadhafte Nachricht von verwaltendem Thread?" - -#: mail/mail-threads.c:861 -msgid "Could not create dialog box." -msgstr "Konnte Dialogfenster nicht erzeugen." - -#: mail/mail-threads.c:872 -msgid "User cancelled query." -msgstr "Benutzer hat Anfrage abgebrochen." - -#: mail/mail-tools.c:205 -#, c-format -msgid "Couldn't create temporary mbox `%s': %s" -msgstr "Konnte temporäre Mbox `%s' nicht anlegen: %s" - -#: mail/mail-tools.c:290 -#, c-format -msgid "" -"Could not read UID cache file \"%s\". You may receive duplicate messages." -msgstr "Konnte UID-Cachedatei \"%s\" nicht lesen. Es ist möglich, dass Sie doppelte Nachrichten erhalten werden." - -#: mail/mail-tools.c:373 -#, c-format -msgid "[%s] %s" -msgstr "[%s] %s" - -#: mail/mail-tools.c:375 -#, c-format -msgid "[%s] (forwarded message)" -msgstr "[%s] (weitergeleitete Nachricht)" - -#: mail/mail-tools.c:384 -msgid "Fwd: (no subject)" -msgstr "Fwd: (keine Betreffzeile)" - -#: mail/mail-tools.c:419 -#, c-format -msgid "Forwarded message - %s" -msgstr "Weitergeleitete Nachricht - %s" - -#: mail/mail-tools.c:421 -msgid "Forwarded message (no subject)" -msgstr "Weitergeleitete Nachricht (keine Betreffzeile)" - -#: mail/mail-tools.c:532 -#, c-format -msgid "Couldn't stat(2) movemail folder %s" -msgstr "Konnte movemail-Ordner %s nicht mit stat(2) untersuchen" - -#: mail/mail-tools.c:633 -#, c-format -msgid "Don't know protocol to open URI `%s'" -msgstr "Kenne Protokol zum Öffnen von URI `%s' nicht" - -#: mail/mail-tools.c:662 -#, c-format -msgid "" -"Cannot open location `%s':\n" -"%s" -msgstr "" -"Kann Ort `%s' nicht öffnen:\n" -"%s" - -#: mail/mail-vfolder.c:298 -msgid "New VFolder" -msgstr "Neuer VFolder" - -#: mail/message-list.c:490 -msgid "Online Status" -msgstr "Online-Status" - -#: mail/message-list.c:526 -msgid "From" -msgstr "Von" - -#: mail/message-list.c:533 -msgid "Subject" -msgstr "Betreff" - -#: mail/message-list.c:540 -msgid "Date" -msgstr "Datum" - -#: mail/message-list.c:547 -msgid "Received" -msgstr "Empfangen" - -#: mail/message-list.c:554 -msgid "To" -msgstr "An" - -#: mail/message-list.c:561 -msgid "Size" -msgstr "Größe" - -#: notes/component-factory.c:27 -msgid "Create a new note" -msgstr "Eine neue Notiz anlegen" - -#: notes/component-factory.c:148 -msgid "Cannot initialize Evolution's notes component." -msgstr "Kann Evolutions Notizen-Komponente nicht initialisieren." - -#: notes/main.c:30 -msgid "Notes Component: Could not initialize bonobo" -msgstr "Notizen-Komponente: Konnte Bonobo nicht initialisieren" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Installation von Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Dies scheint das erste Mal zu sein, dass Sie Evolution ausführen." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"Bitte klicken Sie \"OK\", um Evolutions Benutzerdateien zu installieren " -"unter:" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Kann das Verzeichnis\n" -"%s\n" -"nicht anlegen.\n" -"Fehler: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Kann Dateien nicht in\n" -"`%s'\n" -"kopieren." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolutions Dateien erfolgreich installiert." - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"Die Datei `%s' ist kein Verzeichnis.\n" -"Bitte verschieben Sie es, damit Evolution seine\n" -"Benutzerdateien installieren kann." - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"Das Verzeichnis `%s' existiert, ist aber nicht\n" -"das Evolution-Verzeichnis. Bitte verschieben Sie\n" -"es, damit Evolution seine Benutzerdateien\n" -"installieren kann." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Kann den angegebenen Ordner nicht erstellen:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "Der angegebene Ordnername ist nicht gültig" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Neuen Ordner anlegen" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"Der Typ des ausgewählten Ordners ist für die \n" -"gewählte Operation nicht gültig." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "Neu..." - -#: shell/e-shell-folder-title-bar.c:451 shell/e-shell-folder-title-bar.c:452 -msgid "(Untitled)" -msgstr "(Namenlos)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Der Fehlermelder kann nicht gefunden werden" - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Der Fehlermelder kann nicht starten" - -#: shell/e-shell-view-menu.c:167 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:169 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution ist eine Mail-, Kalender-\n" -"und Kontakt-Management Anwendung\n" -"innerhalt der GNOME-Desktops." - -#: shell/e-shell-view-menu.c:319 -msgid "Go to folder..." -msgstr "Gehe zu Ordner..." - -#: shell/e-shell-view-menu.c:377 -msgid "_New" -msgstr "Neu" - -#: shell/e-shell-view-menu.c:389 -msgid "_Folder" -msgstr "Ordner" - -#: shell/e-shell-view-menu.c:395 -msgid "Evolution bar _shortcut" -msgstr "Evolution-Leistenverknüpfung" - -#: shell/e-shell-view-menu.c:404 -msgid "_Mail message (FIXME)" -msgstr "Nachricht senden (FIXME)" - -#: shell/e-shell-view-menu.c:410 -msgid "_Appointment (FIXME)" -msgstr "Termine (FIXME)" - -#: shell/e-shell-view-menu.c:416 -msgid "_Contact (FIXME)" -msgstr "Kontakt (FIXME)" - -#: shell/e-shell-view-menu.c:422 -msgid "_Task (FIXME)" -msgstr "Auftrag (FIXME)" - -#: shell/e-shell-view-menu.c:444 -msgid "_Go to Folder..." -msgstr "Gehe zu Ordner..." - -#: shell/e-shell-view-menu.c:445 -msgid "Display a different folder" -msgstr "Einen anderen Ordner anzeigen" - -#: shell/e-shell-view-menu.c:452 -msgid "_Create New Folder..." -msgstr "Neuen Ordner anlegen..." - -#: shell/e-shell-view-menu.c:453 shell/e-shell-view-menu.c:465 -msgid "Create a new folder" -msgstr "Einen neuen Ordner anlegen" - -#: shell/e-shell-view-menu.c:464 -msgid "E_xit..." -msgstr "_Beenden..." - -#: shell/e-shell-view-menu.c:495 -msgid "Show _Shortcut Bar" -msgstr "Verknüpfungsleiste anzeigen" - -#: shell/e-shell-view-menu.c:496 -msgid "Show the shortcut bar" -msgstr "Die Verknüpfungsleiste anzeigen" - -#: shell/e-shell-view-menu.c:501 -msgid "Show _Folder Bar" -msgstr "Ordner-Leiste anzeigen" - -#: shell/e-shell-view-menu.c:502 -msgid "Show the folder bar" -msgstr "Die Ordner-Leiste anzeigen" - -#: shell/e-shell-view-menu.c:513 -msgid "_Settings" -msgstr "Einstellungen" - -#: shell/e-shell-view-menu.c:524 -msgid "_Help" -msgstr "_Hilfe" - -#: shell/e-shell-view-menu.c:530 -msgid "Help _Index" -msgstr "Hilfe-_Index" - -#: shell/e-shell-view-menu.c:537 -msgid "Getting _Started" -msgstr "Erste Schritte" - -#: shell/e-shell-view-menu.c:544 -msgid "Using the _Mailer" -msgstr "Den _Mailer benutzen" - -#: shell/e-shell-view-menu.c:551 -msgid "Using the _Calendar" -msgstr "Den Kalender benutzen" - -#: shell/e-shell-view-menu.c:558 -msgid "Using the C_ontact Manager" -msgstr "Die Kontaktverwaltung benutzen" - -#: shell/e-shell-view-menu.c:568 -msgid "_Submit Bug Report" -msgstr "Fehlerbericht einschicken" - -#: shell/e-shell-view-menu.c:569 -msgid "Submit bug report using Bug Buddy" -msgstr "Einen Fehler über dem Fehlermelder melden" - -#: shell/e-shell-view-menu.c:578 -msgid "_About Evolution..." -msgstr "Über Evolution..." - -#: shell/e-shell-view-menu.c:579 -msgid "Show information about Evolution" -msgstr "Information über Evolution anzeigen" - -#: shell/e-shell-view.c:122 -msgid "(No folder displayed)" -msgstr "(Kein Ordner angezeigt)" - -#: shell/e-shell-view.c:350 -msgid "Folders" -msgstr "Ordner" - -#: shell/e-shell-view.c:879 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Kann lokalen Speicher nicht einstellen -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "Kleine Icons" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Die Verknüpfungen als kleine Icons anzeigen" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Große Icons" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Die Verknüpfungen als große Icons zeigen" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Aktivieren" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Diese Verknüpfung aktivieren" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Diese Verknüpfung aus der Verknüpfungsleiste entfernen" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Fehler beim Speichern von Verknüpfungen." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Kein Name)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Kein Fehler" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Allgemeiner Fehler" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "Ein Ordner mit dem gleichen Namen existiert bereits" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "Der angegebene Ordnertyp ist ungültig" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "E-/A-Fehler" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Nicht genügend Platz, um den Ordner zu erstellen" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Der angegebene Ordner wurde nicht gefunden" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "Funktion für diese Speicherweise nicht implementiert" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Erlaubnis verweigert" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Operation nicht unterstützt" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "Der angegebene Typ wird für diese Speicherweise nicht unterstützt" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Unbekannter Fehler" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "Den gewählten Ordner betrachten" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Hallo. Viele Dank dafür, dass Sie sich die Zeit genommen haben, diese\n" -"Vorschauversion der Evolution-Groupware-Suite herunterzuladen.\n" -"\n" -"Über die letzten anderthalb Monate haben wir uns darauf konzentriert,\n" -"Evolution benutzbar zu machen. Viele der Evolution-Entwickler\n" -"verwenden inzwischen Evolution, um all ihre Mail zu lesen. Auch Sie\n" -"könnten das tun. (Machen Sie aber Sicherheitskopien.)\n" -"\n" -"Doch obwohl wir viele Fehler ausgemerzt haben, die die Stabilität und\n" -"Sicherheit beeinträchtigt haben, kriegen Sie trotzdem einen\n" -"Disclaimer: Evolution wird: abstürzen, Ihre Mail verlieren wenn Sie\n" -"das nicht wollen, sich weigern, Ihre Mail zu löschen, wenn Sie es\n" -"wollen, freilaufende Prozesse zurücklassen, 100% CPU verbrauchen, sich\n" -"verklemmen, sich aufhängen, HTML-Mail an zufällig ausgewählte\n" -"Mailinglisten verschicken und Sie vor Ihren Freunden und Mitarbeitern\n" -"lächerlich machen. Zu Risiken und Nebenwirkungen fragen Sie Ihren Arzt\n" -"oder Apotheker.\n" -"\n" -"Wir hoffen, dass Ihnen die Ergebnisse unserer harten Arbeit gefallen\n" -"werden, und wir hoffen auf Ihre Mitarbeit!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Danke.\n" -"das Evolution-Team\n" - -#: shell/main.c:126 -msgid "Cannot initialize the Evolution shell." -msgstr "Kann die Evolution-Shell nicht initialisieren." - -#: shell/main.c:161 -msgid "Cannot initialize the Bonobo component system." -msgstr "Kann das Bonobo-System nicht initialisieren." - -#: tests/ui-tests/message-browser.c:360 -msgid "The component now claims that it doesn't support PersistStream!" -msgstr "" -"Die Komponente behauptet jetzt, dass sie PersistStream nicht unterstützt!" - -#: tests/ui-tests/message-browser.c:378 -msgid "" -"An exception occured while trying to load data into the component with " -"PersistStream" -msgstr "" -"Ein Ausnahmezustand trat während des Versuchs, Daten mit PersistStream in " -"die Komponente zu laden, ein" - -#: tests/ui-tests/message-browser.c:471 -#, c-format -msgid "The %s component doesn't support PersistStream!\n" -msgstr "Die %s-Komponente unterstützt PersistStream nicht!\n" - -#: tests/ui-tests/message-browser.c:710 -msgid "Open Mime Message" -msgstr "MIME-Nachricht öffnen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Felder" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Gruppieren" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Sortieren" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filter" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#: widgets/e-table/e-table-header-item.c:1164 -msgid "Field Chooser" -msgstr "Feldwähler" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"Um Ihrer Tabelle eine Spalte hinzuzufügen, ziehen\n" -"Sie sie dorthin, wo Sie sie haben wollen." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Verfügbare Felder" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "In dieser Reihenfolge anzeigen" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Hinzufügen >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Entfernen" - -#: widgets/e-table/e-table-header-item.c:1156 -msgid "Sort Ascending" -msgstr "Aufsteigend sortieren" - -#: widgets/e-table/e-table-header-item.c:1157 -msgid "Sort Descending" -msgstr "Absteigend sortieren" - -#: widgets/e-table/e-table-header-item.c:1158 -msgid "Unsort" -msgstr "Nicht sortieren" - -#: widgets/e-table/e-table-header-item.c:1160 -msgid "Group By This Field" -msgstr "Nach diesem Feld gruppieren" - -#: widgets/e-table/e-table-header-item.c:1161 -msgid "Group By Box" -msgstr "Nach Kasten gruppieren" - -#: widgets/e-table/e-table-header-item.c:1163 -msgid "Remove This Column" -msgstr "Diese Spalte entfernen" - -#: widgets/e-table/e-table-header-item.c:1166 -msgid "Alignment" -msgstr "Ausrichtung" - -#: widgets/e-table/e-table-header-item.c:1167 -msgid "Best Fit" -msgstr "Einpassen" - -#: widgets/e-table/e-table-header-item.c:1168 -msgid "Format Columns..." -msgstr "Spalten formatieren..." - -#: widgets/e-table/e-table-header-item.c:1170 -msgid "Customize Current View..." -msgstr "Aktuelle Ansicht anpassen..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Vorläufig" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Beschäftigt" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Außer Haus" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Keine Information" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "Andere einladen..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "Optionen" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Nur Arbeitszeit anzeigen" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "Weggezoomt anzeigen" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "Frei/beschäftigt aktualisieren" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "AutoWahl" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "Alle Leute und Ressourcen" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Alle Leute und eine Ressource" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "Benötigte Leute" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Benötigte Leute und eine Ressource" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Anfang der Besprechung:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Ende der Besprechung:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Alle Anwesenden" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "MDMDFSS" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Gruppe %i" diff --git a/po/desk.pl b/po/desk.pl deleted file mode 100755 index 08a2a18a56..0000000000 --- a/po/desk.pl +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/perl -w - -# GNOME entry finder utility. -# (C) 2000 The Free Software Foundation -# -# Author(s): Kenneth Christiansen - - -$VERSION = "1.0.0 beta 5"; -$LANG = $ARGV[0]; -$OPTION2 = $ARGV[1]; -$SEARCH = "Name"; - -if (! $LANG){ - print "desk.pl: missing file arguments\n"; - print "Try `desk.pl --help' for more information.\n"; - exit; -} - -if ($OPTION2){ - $SEARCH=$OPTION2; -} - -if ($LANG){ - -if ($LANG=~/^-(.)*/){ - - if ("$LANG" eq "--version" || "$LANG" eq "-V"){ - print "GNOME Entry finder $VERSION\n"; - print "Written by Kenneth Christiansen , 2000.\n\n"; - print "Copyright (C) 2000 Free Software Foundation, Inc.\n"; - print "This is free software; see the source for copying conditions. There is NO\n"; - print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; - exit; - } - - elsif ($LANG eq "--help" || "$LANG" eq "-H"){ - print "Usage: ./desk.pl [OPTIONS] ...LANGCODE ENTRY\n"; - print "Checks .desktop and alike files for missing translations.\n\n"; - print " -V, --version shows the version\n"; - print " -H, --help shows this help page\n"; - print "\nReport bugs to .\n"; - exit; - } - - else{ - print "desk.pl: invalid option -- $LANG\n"; - print "Try `desk.pl --help' for more information.\n"; - exit; - } -} - -else{ - - $a="find ../ -print | egrep '.*\\.(desktop|soundlist" - ."|directory)' "; - - $b="find ../ -print | egrep '.*\\.(desktop|soundlist" - ."|directory)' "; - - print "Searching for missing $SEARCH\[$LANG\] entries...\n"; - - open(BUF1, "$a|"); - open(BUF2, "$b|"); - - @buf1 = ; - foreach my $file (@buf1){ - open FILE, "<$file"; - while () { - if ($_=~/$SEARCH\[$LANG\]\=/o){ - $file = unpack("x2 A*",$file) . "\n"; - push @buff1, $file; - last; - } - } - } - - @buf2 = ; - foreach my $file (@buf2){ - open FILE, "<$file"; - while () { - if ($_=~/$SEARCH\=/o){ - $file = unpack("x2 A*",$file) . "\n"; - push @buff2, $file; - last; - } - } - } - - @bufff1 = sort (@buff1); - @bufff2 = sort (@buff2); - - my %in2; - foreach (@bufff1) { - $in2{$_} = 1; - } - - foreach (@bufff2){ - if (!exists($in2{$_})){ - push @result, $_ } - } - } - - open(OUT1, ">MISSING.$LANG.$SEARCH"); - print OUT1 @result ; - close OUT1; - - - stat("MISSING.$LANG.$SEARCH"); - print "\nWell, you need to fix these:\n\n" if -s _; - print @result if -s _; - print "\nThe list is saved in MISSING.$LANG.$SEARCH\n" if -s _; - print "\nWell, it's all perfect! Congratulation!\n" if -z _; - unlink "MISSING.$LANG.$SEARCH" if -z _; - exit; -} - - diff --git a/po/el.po b/po/el.po deleted file mode 100644 index 4d6aec992f..0000000000 --- a/po/el.po +++ /dev/null @@ -1,3771 +0,0 @@ -# Greek translation of evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Spiros Papadimitriou , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.1\n" -"POT-Creation-Date: 2000-07-10 21:51-0400\n" -"PO-Revision-Date: 2000-04-04 19:42-0500\n" -"Last-Translator: Spiros Papadimitriou \n" -"Language-Team: Greek \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-7\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:58 -#: calendar/gui/calendar-pilot-sync.c:138 calendar/gui/main.c:68 -#, fuzzy -msgid "Could not initialize Bonobo" -msgstr "ÌïíÜäá Ôá÷/ìåßïõ: Áñ÷éêïðïßçóç ôïõ Bonobo áäýíáôç" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:579 -#: calendar/gui/event-editor.c:1118 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "Ñ_áíôåâïý" - -#: addressbook/contact-editor/e-contact-editor.c:580 -#: calendar/gui/event-editor.c:1119 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "Áß_ôçóç ÓõíÜíôçóçò" - -#: addressbook/contact-editor/e-contact-editor.c:582 -#: calendar/gui/event-editor.c:1121 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "_ÌÞíõìá" - -#: addressbook/contact-editor/e-contact-editor.c:583 -#: calendar/gui/event-editor.c:1122 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "_Ãíùñéìßá" - -#: addressbook/contact-editor/e-contact-editor.c:584 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:585 -#: calendar/gui/event-editor.c:1124 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "Áßôç_óç Åêêñåìüôçôáò" - -#: addressbook/contact-editor/e-contact-editor.c:586 -#: calendar/gui/event-editor.c:1125 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "Êáôá÷þñçóç Çìåñï_ëïãßïõ" - -#: addressbook/contact-editor/e-contact-editor.c:587 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:589 -#: addressbook/contact-editor/e-contact-editor.c:694 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:594 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:596 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:603 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:607 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "ÍÝá åðéóýíáøç..." - -#: addressbook/contact-editor/e-contact-editor.c:609 -#: calendar/gui/event-editor.c:1148 -msgid "FIXME: _Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:610 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:611 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:613 -#: calendar/gui/event-editor.c:1152 -msgid "Page Set_up" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:614 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:635 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:640 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1183 -#, fuzzy -msgid "_Object" -msgstr "ÈÝìá" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: addressbook/contact-editor/e-contact-editor.c:656 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: addressbook/contact-editor/e-contact-editor.c:657 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:663 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:665 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:668 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:673 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:676 -#: calendar/gui/event-editor.c:1217 -#, fuzzy -msgid "_Toolbars" -msgstr "Å_ñãáëåßá" - -#: addressbook/contact-editor/e-contact-editor.c:681 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:682 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:683 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:688 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: _Font..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:689 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:696 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:697 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:700 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:702 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:707 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:709 -#: calendar/gui/event-editor.c:1253 -#, fuzzy -msgid "_Forms" -msgstr "Áðü" - -#: addressbook/contact-editor/e-contact-editor.c:714 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:717 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:718 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:719 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:720 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:721 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:724 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:725 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:726 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:728 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1266 -msgid "FIXME: For_ward" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:741 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:742 -#: calendar/gui/event-editor.c:1280 -#, fuzzy -msgid "F_ormat" -msgstr "Áðü" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:743 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "Å_ñãáëåßá" - -#: addressbook/contact-editor/e-contact-editor.c:744 -#: calendar/gui/event-editor.c:1282 -#, fuzzy -msgid "Actio_ns" -msgstr "Å_íÝñãåéåò" - -#: addressbook/contact-editor/e-contact-editor.c:775 -msgid "Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:776 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:780 -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -#: calendar/gui/event-editor.c:1336 -msgid "FIXME: Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:786 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:326 -#, fuzzy -msgid "Delete this item" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: addressbook/contact-editor/e-contact-editor.c:788 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:791 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1208 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1209 -#: addressbook/contact-editor/e-contact-editor.c:1313 -msgid "Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1210 -msgid "Business 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1211 -msgid "Business Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1212 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1213 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1214 -#, fuzzy -msgid "Company" -msgstr "ÁíôéãñáöÞ" - -#: addressbook/contact-editor/e-contact-editor.c:1215 -#: addressbook/contact-editor/e-contact-editor.c:1314 -#, fuzzy -msgid "Home" -msgstr "Óçìåßù_ìá" - -#: addressbook/contact-editor/e-contact-editor.c:1216 -#, fuzzy -msgid "Home 2" -msgstr "Óçìåßù_ìá" - -#: addressbook/contact-editor/e-contact-editor.c:1217 -#, fuzzy -msgid "Home Fax" -msgstr "Óçìåßù_ìá" - -#: addressbook/contact-editor/e-contact-editor.c:1218 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1219 -#, fuzzy -msgid "Mobile" -msgstr "_ÌÞíõìá" - -#: addressbook/contact-editor/e-contact-editor.c:1220 -#: addressbook/contact-editor/e-contact-editor.c:1315 -msgid "Other" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1221 -msgid "Other Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1222 -#, fuzzy -msgid "Pager" -msgstr "Åðéêüëëçóç" - -#: addressbook/contact-editor/e-contact-editor.c:1223 -#, fuzzy -msgid "Primary" -msgstr "Ðñïôåñáéüôçôá" - -#: addressbook/contact-editor/e-contact-editor.c:1224 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1225 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1226 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1270 -msgid "Primary Email" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1271 -msgid "Email 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1272 -msgid "Email 3" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -msgid "_Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 -msgid "Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -#, fuzzy -msgid "Contact Editor" -msgstr "_Ãíùñéìßá" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -#, fuzzy -msgid "_Home" -msgstr "Óçìåßù_ìá" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -#, fuzzy -msgid "_Mobile" -msgstr "_ÌÞíõìá" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -#, fuzzy -msgid "C_ontacts..." -msgstr "_Ãíùñéìßá" - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -#, fuzzy -msgid "_Job title:" -msgstr "_ÌÞíõìá" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "ÁíôéãñáöÞ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "General" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -#, fuzzy -msgid "No_tes:" -msgstr "Óçìåßù_ìá" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:10 -#, fuzzy -msgid "_Middle:" -msgstr "_ÌÞíõìá" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:415 -#: calendar/gui/calendar-commands.c:544 -#, fuzzy -msgid "New" -msgstr "_ÍÝï" - -#: addressbook/gui/component/addressbook.c:415 -msgid "Create a new contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find" -msgstr "" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find a contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:420 -#: addressbook/gui/component/addressbook.c:487 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -#, fuzzy -msgid "Print" -msgstr "Ðñïôåñáéüôçôá" - -#: addressbook/gui/component/addressbook.c:420 -#, fuzzy -msgid "Print contacts" -msgstr "Ï êáôÜëïãïò ãíùñéìéþí óáò" - -#. Delete -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:498 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "" - -#: addressbook/gui/component/addressbook.c:421 -#, fuzzy -msgid "Delete a contact" -msgstr "ÅðéëÝîôå åðéóýíáøç" - -#: addressbook/gui/component/addressbook.c:494 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:501 -#, fuzzy -msgid "_New Contact" -msgstr "_Ãíùñéìßá" - -#: addressbook/gui/component/addressbook.c:509 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:588 -#, fuzzy -msgid "Unable to open addressbook" -msgstr "Êëßê åäþ ãéá ôï äéåõèõíóéïëüãéï" - -#: addressbook/gui/component/addressbook.c:593 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:329 -msgid "Save as VCard" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "Ôï URI ðïõ èá åìöáíßóåé ï ÅîåñåõíçôÞò ÖáêÝëëùí" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -#, fuzzy -msgid "o" -msgstr "Ðñïò" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:10 -#, fuzzy -msgid "Options" -msgstr "Å_íÝñãåéåò" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:12 -#, fuzzy -msgid "Sections:" -msgstr "Å_íÝñãåéåò" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -#, fuzzy -msgid "Fonts" -msgstr "Ãíùñéìßåò" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -#, fuzzy -msgid "Body" -msgstr "ÓÞìåñá" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:28 -#, fuzzy -msgid "Format" -msgstr "Áðü" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -#, fuzzy -msgid "Paper" -msgstr "Åðéêüëëçóç" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:37 -#, fuzzy -msgid "Top:" -msgstr "Ðñïò:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:41 -#, fuzzy -msgid "Page" -msgstr "Åðéêüëëçóç" - -#: addressbook/printing/e-contact-print.glade.h:42 -#, fuzzy -msgid "Size:" -msgstr "ÌÝãåèïò" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:48 -#, fuzzy -msgid "Portrait" -msgstr "Ðñïôåñáéüôçôá" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -#, fuzzy -msgid "Appointments:" -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -#, fuzzy -msgid "Gnome Calendar" -msgstr "Çìåñïëüãéï" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "" - -#: calendar/gui/calendar-commands.c:456 -#, fuzzy -msgid "Open calendar" -msgstr "Ôï çìåñïëüãéü óáò" - -#: calendar/gui/calendar-commands.c:495 -#, fuzzy -msgid "Save calendar" -msgstr "Ôï çìåñïëüãéü óáò" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:712 -#: calendar/gui/gncal-todo.c:716 -msgid "Day" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:711 -msgid "Week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -#, fuzzy -msgid "Month" -msgstr "Ãíùñéìßåò" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -#, fuzzy -msgid "Print this calendar" -msgstr "Ôï çìåñïëüãéü óáò" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -#, fuzzy -msgid "Today" -msgstr "ÓÞìåñá" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -#, fuzzy -msgid "New Ca_lendar" -msgstr "Çìåñïëüãéï" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -#, fuzzy -msgid "Open Ca_lendar" -msgstr "Çìåñïëüãéï" - -#: calendar/gui/calendar-commands.c:664 -#, fuzzy -msgid "Open a calendar" -msgstr "Ôï çìåñïëüãéü óáò" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -#, fuzzy -msgid "Save Calendar As" -msgstr "Çìåñïëüãéï" - -#: calendar/gui/calendar-commands.c:673 -#, fuzzy -msgid "Print..." -msgstr "Ðñïôåñáéüôçôá" - -#: calendar/gui/calendar-commands.c:682 -#, fuzzy -msgid "_New appointment..." -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -#, fuzzy -msgid "About Calendar" -msgstr "Ôï çìåñïëüãéü óáò" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -#, fuzzy -msgid "'s calendar" -msgstr "Ôï çìåñïëüãéü óáò" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "Specifies the port on which the Pilot is" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "PORT" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:70 -msgid "If you want to debug the attributes on records" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:72 -msgid "Only syncs from desktop to pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:74 -msgid "Only syncs from pilot to desktop" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:97 -msgid "Can not create Pilot socket\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:104 -#, c-format -msgid "Can not bind to device %s\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:107 -msgid "Failed to get a connection from the Pilot device" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:111 -msgid "pi_accept failed" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:211 -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:531 -msgid "No description" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:692 -msgid "Could not open DatebookDB on the Pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:693 -msgid "Unable to open DatebookDB" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:728 -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "Ôï URI ðïõ èá åìöáíßóåé ï ÅîåñåõíçôÞò ÖáêÝëëùí" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1056 -#, fuzzy -msgid "Snooze" -msgstr "ÌÝãåèïò" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:289 -#, fuzzy -msgid "Edit Appointment" -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:298 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/event-editor.c:301 -#, fuzzy, c-format -msgid "Task - %s" -msgstr "Åêêñåìüôçôåò" - -#: calendar/gui/event-editor.c:304 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "Êáôá÷þñçóç Çìåñï_ëïãßïõ" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "Ñ_áíôåâïý" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:14 calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:15 -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "_Display" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:32 -msgid "_Audio" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:33 -msgid "_Program" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:34 -#, fuzzy -msgid "_Mail" -msgstr "_ÌÞíõìá" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "Mail _to:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Run program:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "Classification" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "Pu_blic" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:39 -#, fuzzy -msgid "Pri_vate" -msgstr "Åðéêüëëçóç" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Confidential" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:596 -#, fuzzy -msgid "None" -msgstr "Óçìåßù_ìá" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:80 -#, fuzzy -msgid "month(s)" -msgstr "Ãíùñéìßåò" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:90 -#, fuzzy -msgid "Exceptions" -msgstr "Å_íÝñãåéåò" - -#: calendar/gui/event-editor-dialog.glade.h:92 -#, fuzzy -msgid "Change" -msgstr "Åðéêüëëçóç" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "Åðéêüëëçóç" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "ÓÞìåñá" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -#, fuzzy -msgid "tues" -msgstr "Óçìåßù_ìá" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "" - -#: calendar/gui/getdate.y:421 -#, fuzzy -msgid "month" -msgstr "Ãíùñéìßåò" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "ÁðïóôïëÞ" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "ÓÞìåñá" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Åðéêüëëçóç" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "Ðñïôåñáéüôçôá" - -#: calendar/gui/getdate.y:451 -#, fuzzy -msgid "tenth" -msgstr "ÅóôÜëç" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:171 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:181 -msgid "Due Date:" -msgstr "" - -#: calendar/gui/gncal-todo.c:190 -#, fuzzy -msgid "Priority:" -msgstr "Ðñïôåñáéüôçôá" - -#: calendar/gui/gncal-todo.c:206 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:324 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:325 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:424 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:425 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:426 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Ðñïôåñáéüôçôá" - -#: calendar/gui/gncal-todo.c:427 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:439 -#, fuzzy -msgid "To-do list" -msgstr "Å_ñãáëåßá" - -#. Add -#: calendar/gui/gncal-todo.c:478 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "" - -#. Edit -#: calendar/gui/gncal-todo.c:487 -msgid "Edit..." -msgstr "" - -#: calendar/gui/gncal-todo.c:711 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:712 calendar/gui/gncal-todo.c:716 -#, fuzzy -msgid "Days" -msgstr "Ðñü÷åéñá" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Seconds" -msgstr "Å_íÝñãåéåò" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Second" -msgstr "ÁðïóôïëÞ" - -#: calendar/gui/gnome-cal.c:453 calendar/gui/gnome-cal.c:1064 -#: calendar/gui/gnome-cal.c:1120 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1069 calendar/gui/gnome-cal.c:1124 -msgid "Ok" -msgstr "" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "Fr" -msgstr "Áðü" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "" - -#: calendar/gui/print.c:1084 -#, fuzzy -msgid "Print Calendar" -msgstr "Çìåñïëüãéï" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -#, fuzzy -msgid "Sunday" -msgstr "ÁðïóôïëÞ" - -#: calendar/gui/prop.c:348 -#, fuzzy -msgid "Monday" -msgstr "ÓÞìåñá" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -#, fuzzy -msgid "Alarm Properties" -msgstr "Åðéóýíáøç" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:766 -msgid "Cut" -msgstr "ÊïðÞ" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "ÊïðÞ åðéëåãìÝíïõ áíôéêåéìÝíïõ óôï ðñü÷åéñï" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:767 -msgid "Copy" -msgstr "ÁíôéãñáöÞ" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "ÁíôéãñáöÞ åðéëåãìÝíïõ áíôéêåéìÝíïõ óôï ðñü÷åéñï" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:768 -msgid "Paste" -msgstr "Åðéêüëëçóç" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Åðéêüëëçóç áíôéêåéìÝíïõ áðï ôï ðñü÷åéñï" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "ÅðéëÝîôå ôç äéåýèõíóç ôïõ ðáñáëÞðôç" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -#, fuzzy -msgid "Properties..." -msgstr "Éäéüôçôåò" - -#: composer/e-msg-composer-address-dialog.glade.h:14 -#, fuzzy -msgid "To: >>" -msgstr "Ðñïò:" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -#, fuzzy -msgid "Cc: >>" -msgstr "Áíôßãñáöï:" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -#, fuzzy -msgid "Bcc: >>" -msgstr "Êñõöü áíôßãñáöï:" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u byte" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Íåá åðéóýíáøç" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:332 -msgid "Remove" -msgstr "ÄéáãñáöÞ" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "ÄéáãñáöÞ åðéëåãìÝíùí áíôéêåéìÝíùí áðü ôïí êáôÜëïãï åðéóõíÜøåùí" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "ÍÝá åðéóýíáøç..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Åðéóýíáøç áñ÷åßïõ óôï ìÞíõìá" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -#, fuzzy -msgid "Attachment properties" -msgstr "Åðéóýíáøç" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Êëßê åäþ ãéá ôï äéåõèõíóéïëüãéï" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "Ðñïò:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "ÅéóÜãåôå ôïí ðáñáëÞðôç ôïõ ìçíýìáôïò" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Áíôßãñáöï:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "ÅéóÜãåôå ôéò äéåõèýíóåéò üðïõ èá óôáëåß áíôßãñáöï ôïõ ìçíýìáôïò" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Êñõöü áíôßãñáöï:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"ÅéóÜãåôå ôéò äéåõèýíóåéò üðïõ èá óôáëåß áíôßãñáöï ôïõ ìçíýìáôïò ÷ùñßò áõôÝò " -"íá åìöáíéóôïýí óôïí êáôÜëïãï ðáñáëçðôþí ôïõ ìçíýìáôïò." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "ÈÝìá:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "ÅéóÜãåôå ôï èÝìá ôïõ ìçíýìáôïò" - -#: composer/e-msg-composer.c:463 -msgid "Save as..." -msgstr "" - -#: composer/e-msg-composer.c:474 -#, c-format -msgid "Error saving file: %s" -msgstr "" - -#: composer/e-msg-composer.c:494 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:513 -#, fuzzy -msgid "Discard this message?" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: composer/e-msg-composer.c:561 -#, fuzzy -msgid "Open file" -msgstr "¶íïéãìá ÖáêÝëëïõ" - -#: composer/e-msg-composer.c:718 -msgid "Save in _folder..." -msgstr "ÁðïèÞêåõóç óôï öÜêåëëï..." - -#: composer/e-msg-composer.c:718 -msgid "Save the message in a specified folder" -msgstr "ÁðïèÞêåõóç ôïõ ìçíýìáôïò óôïí êáèïñéóìÝíï öÜêåëëï" - -#: composer/e-msg-composer.c:721 composer/e-msg-composer.c:763 -msgid "Send" -msgstr "ÁðïóôïëÞ" - -#: composer/e-msg-composer.c:721 -msgid "Send the message" -msgstr "ÁðïóôïëÞ ôïõ ìçíýìáôïò" - -#: composer/e-msg-composer.c:733 -msgid "View _attachments" -msgstr "ÅìöÜíéóç åðéóõíÜ_øåùí" - -#: composer/e-msg-composer.c:733 -msgid "View/hide attachments" -msgstr "ÅìöÜíéóç/áðüêñõøç åðéóõíÜøåùí" - -#: composer/e-msg-composer.c:763 -msgid "Send this message" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: composer/e-msg-composer.c:766 -msgid "Cut selected region into the clipboard" -msgstr "ÊïðÞ åðéëåãìÝíçò ðåñéï÷Þò óôï ðñü÷åéñï" - -#: composer/e-msg-composer.c:767 -msgid "Copy selected region into the clipboard" -msgstr "ÁíôéãñáöÞ åðéëåãìÝíçò ðåñéï÷Þò óôï ðñü÷åéñï" - -#: composer/e-msg-composer.c:768 -msgid "Paste selected region into the clipboard" -msgstr "Åðéêüëëçóç åðéëåãìÝíçò ðåñéï÷Þò áðü ôï ðñü÷åéñï" - -#: composer/e-msg-composer.c:769 -msgid "Undo" -msgstr "Áêýñùóç" - -#: composer/e-msg-composer.c:769 -msgid "Undo last operation" -msgstr "Áêýñùóç ôåëåõôáßáò ëåéôïõñãßáò" - -#: composer/e-msg-composer.c:772 -msgid "Attach" -msgstr "Åðéóýíáøç" - -#: composer/e-msg-composer.c:772 -msgid "Attach a file" -msgstr "Åðéóýíáøç áñ÷åßïõ" - -#: composer/e-msg-composer.c:948 -#, fuzzy -msgid "Compose a message" -msgstr "ÓõããñáöÞ íÝïõ ìçíýìáôïò" - -#: filter/filter-editor.c:198 -#, fuzzy -msgid "Edit Filter" -msgstr "_ÖÜêåëëïò" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "" - -#: filter/filter-editor.c:211 -msgid "Finish" -msgstr "" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "" - -#: filter/filter-editor.c:216 -msgid "Apply" -msgstr "" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" - -#: mail/component-factory.c:196 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "Áñ÷éêïðïßçóçò ôïõ óõóôÞìáôïò ìïíÜäùí Bonobo áíåðéôõ÷Þò" - -#: mail/folder-browser-factory.c:29 -msgid "Get mail" -msgstr "" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:30 -#, fuzzy -msgid "Compose a new message" -msgstr "ÓõããñáöÞ íÝïõ ìçíýìáôïò" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "" - -#: mail/folder-browser-factory.c:34 -#, fuzzy -msgid "Reply to the sender of this message" -msgstr "ÅéóÜãåôå ôïí ðáñáëÞðôç ôïõ ìçíýìáôïò" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "" - -#: mail/folder-browser-factory.c:35 -#, fuzzy -msgid "Reply to all recipients of this message" -msgstr "ÅéóÜãåôå ôïí ðáñáëÞðôç ôïõ ìçíýìáôïò" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "" - -#: mail/folder-browser-factory.c:37 -#, fuzzy -msgid "Forward this message" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Refile" -msgstr "ÅëÞöèç" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Move message to a new folder" -msgstr "ÁðïèÞêåõóç ôïõ ìçíýìáôïò óôïí êáèïñéóìÝíï öÜêåëëï" - -#: mail/folder-browser-factory.c:43 -#, fuzzy -msgid "Print the selected message" -msgstr "ÅéóÜãåôå ôïí ðáñáëÞðôç ôïõ ìçíýìáôïò" - -#: mail/folder-browser-factory.c:45 -#, fuzzy -msgid "Delete this message" -msgstr "ÁðïóôïëÞ ðáñüíôïò ìçíýìáôïò" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:83 -msgid "_Filter Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "" - -#: mail/mail-config.c:259 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:274 -msgid "Full name:" -msgstr "" - -#: mail/mail-config.c:302 -msgid "Email address:" -msgstr "" - -#: mail/mail-config.c:325 -msgid "Organization:" -msgstr "" - -#: mail/mail-config.c:337 -msgid "Signature file:" -msgstr "" - -#: mail/mail-config.c:342 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:699 mail/mail-config.c:790 -msgid "Server:" -msgstr "" - -#: mail/mail-config.c:705 -msgid "Username:" -msgstr "" - -#: mail/mail-config.c:711 -#, fuzzy -msgid "Path:" -msgstr "Åðéêüëëçóç" - -#: mail/mail-config.c:717 mail/mail-config.c:796 -msgid "Authentication:" -msgstr "" - -#: mail/mail-config.c:729 mail/mail-config.c:808 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:755 mail/mail-config.c:830 -msgid "Test these values before continuing" -msgstr "" - -#: mail/mail-config.c:937 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:955 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" - -#: mail/mail-config.c:1129 mail/mail-config.c:1208 -msgid "Mail Configuration" -msgstr "" - -#. Identity page -#: mail/mail-config.c:1146 -msgid "Identity" -msgstr "" - -#. Source page -#: mail/mail-config.c:1165 -#, fuzzy -msgid "Mail Source" -msgstr "Êõñßùò Óõíôïìåýóåéò" - -#. Transport page -#: mail/mail-config.c:1186 -msgid "Mail Transport" -msgstr "" - -#: mail/mail-config.c:1308 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1310 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1453 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1455 -#, fuzzy -msgid "Add Source" -msgstr "ÍÝá Óõíôüìåõóç" - -#: mail/mail-ops.c:372 -msgid "Fetching mail" -msgstr "" - -#: mail/mail-ops.c:384 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:732 -#, fuzzy -msgid "Refile message(s) to" -msgstr "ÍÝá ìçíýìáôá" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/main.c:62 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "ÌïíÜäá Ôá÷/ìåßïõ: Áñ÷éêïðïßçóç ôïõ Bonobo áäýíáôç" - -#: mail/message-list.c:460 -#, fuzzy -msgid "Online Status" -msgstr "ÊáôÜóôáóç óýíäåóçò" - -#: mail/message-list.c:488 -msgid "From" -msgstr "Áðü" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "ÈÝìá" - -#: mail/message-list.c:502 -#, fuzzy -msgid "Date" -msgstr "Åðéêüëëçóç" - -#: mail/message-list.c:509 -#, fuzzy -msgid "Received" -msgstr "ÅëÞöèç" - -#: mail/message-list.c:516 -msgid "To" -msgstr "Ðñïò" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "ÌÝãåèïò" - -#: shell/e-init.c:25 -msgid "Evolution can not create its local folders" -msgstr "Ôï Evolution äå ìðïñåß íá äçìéïõñãÞóåé ôïõò ôïðéêïýò öáêÝëëïõò" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "ÁðïèÞêåõóç ôïõ ìçíýìáôïò óôïí êáèïñéóìÝíï öÜêåëëï" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -#, fuzzy -msgid "Evolution - Create new folder" -msgstr "Ôï Evolution äå ìðïñåß íá äçìéïõñãÞóåé ôïõò ôïðéêïýò öáêÝëëïõò" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -#, fuzzy -msgid "New..." -msgstr "_ÍÝï" - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "" - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "" - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "" - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:301 -#, fuzzy -msgid "Go to folder..." -msgstr "ÁðïèÞêåõóç óôï öÜêåëëï..." - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "_ÖÜêåëëïò" - -#: shell/e-shell-view-menu.c:369 -msgid "Evolution _Bar Shortcut" -msgstr "Ã_ñáììÞ Óõíôïìåýóåùí ôïõ Evolution" - -#: shell/e-shell-view-menu.c:375 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "_ÌÞíõìá" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -msgid "Composes a new mail message" -msgstr "ÓõããñáöÞ íÝïõ ìçíýìáôïò" - -#: shell/e-shell-view-menu.c:378 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "Ñ_áíôåâïý" - -#: shell/e-shell-view-menu.c:381 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "_Ãíùñéìßá" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:387 -#, fuzzy -msgid "Task _Request (FIXME)" -msgstr "Áßôç_óç Åêêñåìüôçôáò" - -#: shell/e-shell-view-menu.c:390 -#, fuzzy -msgid "_Journal Entry (FIXME)" -msgstr "Êáôá÷þñçóç Çìåñï_ëïãßïõ" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "_ÍÝï" - -#: shell/e-shell-view-menu.c:402 -#, fuzzy -msgid "_Go to folder..." -msgstr "ÁðïèÞêåõóç óôï öÜêåëëï..." - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:404 -#, fuzzy -msgid "_Create new folder..." -msgstr "ÁðïèÞêåõóç óôï öÜêåëëï..." - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "" - -#: shell/e-shell-view-menu.c:419 -#, fuzzy -msgid "Show _shortcut bar" -msgstr "ÄéáãñáöÞ áðü ÃñáììÞ Óõíôïìåýóåùí" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "Show the shortcut bar" -msgstr "ÄéáãñáöÞ áðü ÃñáììÞ Óõíôïìåýóåùí" - -#: shell/e-shell-view-menu.c:422 -#, fuzzy -msgid "Show _folder bar" -msgstr "ÄéáãñáöÞ áðü ÃñáììÞ Óõíôïìåýóåùí" - -#: shell/e-shell-view-menu.c:423 -msgid "Show the folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:440 -msgid "Help _Index" -msgstr "" - -#: shell/e-shell-view-menu.c:443 -msgid "Getting _Started" -msgstr "" - -#: shell/e-shell-view-menu.c:446 -msgid "Using the _Mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:449 -msgid "Using the _Calendar" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -msgid "Using the Cont_act Manager" -msgstr "" - -#: shell/e-shell-view-menu.c:457 -msgid "_Submit bug report" -msgstr "" - -#: shell/e-shell-view-menu.c:458 -msgid "Submit bug-report via bug-buddy" -msgstr "" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "Å_íÝñãåéåò" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:208 -#, fuzzy -msgid "Folders" -msgstr "_ÖÜêåëëïò" - -#: shell/e-shell-view.c:600 -#, c-format -msgid "Evolution - %s" -msgstr "" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "" - -#: shell/e-shortcut.c:469 -msgid "New group" -msgstr "ÍÝá ÏìÜäá" - -#: shell/e-shortcuts-view.c:235 -#, fuzzy -msgid "_Small icons" -msgstr "ÌéêñÜ Åéêïíßäéá" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:238 -#, fuzzy -msgid "_Large icons" -msgstr "ÌåãÜëá Åéêïíßäéá" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:332 -msgid "Remove this shortcut from the shortcut bar" -msgstr "" - -#: shell/e-shortcuts.c:358 -#, fuzzy -msgid "Error saving shortcuts." -msgstr "Êõñßùò Óõíôïìåýóåéò" - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "" - -#: shell/main.c:99 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "" - -#: shell/main.c:214 -#, fuzzy -msgid "Cannot initialize the configuration system." -msgstr "Áñ÷éêïðïßçóçò ôïõ óõóôÞìáôïò ìïíÜäùí Bonobo áíåðéôõ÷Þò" - -#: shell/main.c:220 -#, fuzzy -msgid "Cannot initialize the Bonobo component system." -msgstr "Áñ÷éêïðïßçóçò ôïõ óõóôÞìáôïò ìïíÜäùí Bonobo áíåðéôõ÷Þò" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:10 -#, fuzzy -msgid "Filter" -msgstr "_ÖÜêåëëïò" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:13 -#, fuzzy -msgid "<< Remove" -msgstr "ÄéáãñáöÞ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -#, fuzzy -msgid "_Options" -msgstr "Å_íÝñãåéåò" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "Áß_ôçóç ÓõíÜíôçóçò" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "Áß_ôçóç ÓõíÜíôçóçò" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "" - -#: widgets/shortcut-bar/e-group-bar.c:633 -#, c-format -msgid "Group %i" -msgstr "" - -#, fuzzy -#~ msgid "Send a new message" -#~ msgstr "ÁðïóôïëÞ ôïõ ìçíýìáôïò" - -#, fuzzy -#~ msgid "Find messages" -#~ msgstr "ÁðåóôáëìÝíá ìçíýìáôá" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "" -#~ "Ìáò óõã÷øñåßôå, ç áñ÷éêïðïßçóç ôïõ åîåñåõíçôÞ öáêÝëëùí ôïõ Evolution áðÝôõ÷å." - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "¸áí èÝëåôå Þ ï÷é ðñïåðéóêüðéóç ìçíõìÜôùí" - -#~ msgid "_Task" -#~ msgstr "Åêêñåìü_ôçôá" - -#~ msgid "_Selected Items" -#~ msgstr "Åðéëå_ãìÝíá Áíôéêåßìåíá" - -#~ msgid "_New Folder" -#~ msgstr "_ÍÝïò ÖÜêåëëïò" - -#~ msgid "_Open" -#~ msgstr "¶íïé_ãìá" - -#~ msgid "Clos_e All Items" -#~ msgstr "Êë_åßóéìï ¼ëùí" - -#~ msgid "Closes all the open items" -#~ msgstr "Êëåßóéìï üëùí ôùí áíïé÷ôþí áíôéêåéìÝíùí" - -#~ msgid "" -#~ "Evolution detected that the file `%s' is a not a directory.\n" -#~ "\n" -#~ "Evolution can rename the file, delete the file or shutdown and\n" -#~ "let you fix the problem." -#~ msgstr "" -#~ "Ôï Evolution âñÞêå üôé ôï áñ÷åßï \"%s\" äåí åßíáé êáôÜëïãïò.\n" -#~ "\n" -#~ "Ôï Evolution ìðïñåß íá ìåôïíïìÜóåé ôï áñ÷åßï, íá ôï äéáãñÜøåé Þ íá\n" -#~ "ôåñìáôßóåé þóôå íá äéïñèþóåôå ôï ðñüâëçìá." - -#~ msgid "" -#~ "This is a development version of Evolution.\n" -#~ " Using the mail component on your mail files\n" -#~ " is extremely hazardous.\n" -#~ "Please backup all your mails before trying\n" -#~ " this program. \n" -#~ " You have been warned\n" -#~ msgstr "" -#~ "ÁõôÞ åßíáé ðåéñáìáôéêÞ Ýêäïóç ôïõ Evolution.\n" -#~ " Ç ÷ñÞóç ôïõ ôìÞìáôïò çë. ôá÷õäñïìåßïõ ãéá ôá áñ÷åßá\n" -#~ " ìçíõìÜôùí åßíáé éäéáßôåñá åðéêßíäõíç.\n" -#~ "Ðáñáêáëïýìå êÜíôå áíôßãñáöá ôùí ìçíõìÜôùí óáò ðñßí\n" -#~ " äïêéìÜóåôå ôï ðáñüí ðñüãñáììá. \n" -#~ " ¸÷åôå ðñïåéäïðïéçèåß!\n" - -#~ msgid "" -#~ "An exception occured while trying to load data into the component with " -#~ "PersistStream" -#~ msgstr "" -#~ "ÐñïÝêõøå åîáßñåóç êáôÜ ôçí áðüðåéñá áíÜãíùóçò äåäïìÝíùí ìå PersistStream áðü " -#~ "ôç ìïíÜäá" - -#~ msgid "The %s component doesn't support PersistStream!\n" -#~ msgstr "Ç ìïíÜäá %s äåí õðïóôçñßæåé ôá PersistStream!\n" - -#~ msgid "Message status" -#~ msgstr "ÊáôÜóôáóç ìçíõìÜôùí" - -#~ msgid "A folder containing mail items" -#~ msgstr "ÖÜêåëëïò ðïõ ðåñéÝ÷åé ìçíýìáôá" - -#~ msgid "A folder containing contacts" -#~ msgstr "ÖÜêåëëïò ðïõ ðåñéÝ÷åé ãíùñéìßåò" - -#~ msgid "A folder containing calendar entries" -#~ msgstr "ÖÜêåëëïò ðïõ ðåñéÝ÷åé óôïé÷åßá çìåñïëïãßïõ" - -#~ msgid "A folder containing tasks" -#~ msgstr "ÖÜêåëïò ðïõ ðåñéÝ÷åé åêêñåìüôçôåò" - -#~ msgid "A service containing mail items" -#~ msgstr "Õðçñåóßá ðïõ ðåñéÝ÷åé ìçíýìáôá" - -#~ msgid "A service containing contacts" -#~ msgstr "Õðçñåóßá ðïõ ðåñéÝ÷åé ãíùñéìßåò" - -#~ msgid "A service containing calendar entries" -#~ msgstr "Õðçñåóßá ðïõ ðåñéÝ÷åé óôïé÷åßá çìåñïëïãßïõ" - -#~ msgid "A service containing tasks" -#~ msgstr "Õðçñåóßá ðïõ ðåñéÝ÷åé åêêñåìüôçôåò" - -#~ msgid "Add New Group" -#~ msgstr "ÍÝá ÏìÜäá" - -#~ msgid "Remove Group" -#~ msgstr "ÄéáãñáöÞ ÏìÜäáò" - -#~ msgid "Rename Group" -#~ msgstr "Ìåôïíïìáóßá ÏìÜäáò" - -#~ msgid "Open in New Window" -#~ msgstr "¶íïéãìá óå ÍÝï ÐáñÜèõñï" - -#~ msgid "Advanced Find" -#~ msgstr "ÁíáæÞôçóç ãéá Ðñï÷ùñçìÝíïõò" - -#~ msgid "Rename Shortcut" -#~ msgstr "Ìåôïíïìáóßá Óõíôüìåõóçò" - -#~ msgid "Executive Summary" -#~ msgstr "Ðåñßëçøç" - -#~ msgid "Inbox" -#~ msgstr "Åéóåñ÷üìåíá" - -#~ msgid "Sent mail messages" -#~ msgstr "ÁðåóôáëìÝíá ìçíýìáôá" - -#~ msgid "Draft mail messages" -#~ msgstr "Ðñü÷åéñá ìçíýìáôá" - -#~ msgid "Tasks list" -#~ msgstr "ÊáôÜëïãïò åêêñåìïôÞôùí" - -#~ msgid "Other Shortcuts" -#~ msgstr "ËïéðÝò Óõíôïìåýóåéò" - -#~ msgid "Enables some debugging functions" -#~ msgstr "Åíåñãïðïßçóç ìåñéêþí ëåéôïõñãéþí áðïóöáëìÜôùóçò" - -#~ msgid "LEVEL" -#~ msgstr "ÅÐÉÐÅÄÏ" diff --git a/po/es.po b/po/es.po deleted file mode 100644 index c820415c13..0000000000 --- a/po/es.po +++ /dev/null @@ -1,3540 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# Héctor García Álvarez , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.0.3\n" -"POT-Creation-Date: 2000-08-02 16:35+0200\n" -"PO-Revision-Date: 2000-05-03 14:26+0200\n" -"Last-Translator: Héctor García Alvarez \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -#, fuzzy -msgid "Could not initialize Bonobo" -msgstr "Componenete de correo: No pude inicializar Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -#, fuzzy -msgid "categories" -msgstr "Ca_tegorias..." - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -#, fuzzy -msgid "Available Categories:" -msgstr "Campos disponibles" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1168 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "C_ita" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1169 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "_Petición de reunión" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/event-editor.c:1171 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "_Mensaje de correo" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/event-editor.c:1172 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "C_ontacto" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/event-editor.c:1174 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "P_etición de tarea" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/event-editor.c:1178 calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/event-editor.c:1196 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Incluir adjunto..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -#, fuzzy -msgid "_Delete" -msgstr "Borrar" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/event-editor.c:1202 -#, fuzzy -msgid "Page Set_up" -msgstr "Configuración de la página:" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1233 -#, fuzzy -msgid "_Object" -msgstr "Asunto" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/event-editor.c:1238 calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/event-editor.c:1239 calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1267 -#, fuzzy -msgid "_Toolbars" -msgstr "_Herramientas" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/event-editor.c:1279 -#, fuzzy -msgid "FIXME: _Font..." -msgstr "Fuente..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/event-editor.c:1303 -#, fuzzy -msgid "_Forms" -msgstr "Formatear" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1316 -#, fuzzy -msgid "FIXME: For_ward" -msgstr "Reenviar" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/event-editor.c:1330 -#, fuzzy -msgid "F_ormat" -msgstr "Formatear" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/event-editor.c:1331 shell/e-shell-view-menu.c:515 -msgid "_Tools" -msgstr "_Herramientas" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/event-editor.c:1332 -#, fuzzy -msgid "Actio_ns" -msgstr "_Acciones" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:673 -#, fuzzy -msgid "Print..." -msgstr "Imprimir" - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:426 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:39 -msgid "Delete" -msgstr "Borrar" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/event-editor.c:1387 calendar/gui/gncal-todo.c:336 -#, fuzzy -msgid "Delete this item" -msgstr "Borrar este mensaje" - -#: addressbook/contact-editor/e-contact-editor.c:856 -#: calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:859 -#: calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:862 -#: calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:863 -#: calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1278 -#, fuzzy -msgid "Assistant" -msgstr "Nombre del asistente:" - -#: addressbook/contact-editor/e-contact-editor.c:1279 -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Business" -msgstr "Trabajo" - -#: addressbook/contact-editor/e-contact-editor.c:1280 -#, fuzzy -msgid "Business 2" -msgstr "Trabajo" - -#: addressbook/contact-editor/e-contact-editor.c:1281 -#, fuzzy -msgid "Business Fax" -msgstr "_Fax del trabajo" - -#: addressbook/contact-editor/e-contact-editor.c:1282 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1283 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1284 -#, fuzzy -msgid "Company" -msgstr "Compañia:" - -#: addressbook/contact-editor/e-contact-editor.c:1285 -#: addressbook/contact-editor/e-contact-editor.c:1384 -#, fuzzy -msgid "Home" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1286 -#, fuzzy -msgid "Home 2" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1287 -#, fuzzy -msgid "Home Fax" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1288 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1289 -#, fuzzy -msgid "Mobile" -msgstr "_Movil" - -#: addressbook/contact-editor/e-contact-editor.c:1290 -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Other" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1291 -msgid "Other Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1292 -#, fuzzy -msgid "Pager" -msgstr "Pagina" - -#: addressbook/contact-editor/e-contact-editor.c:1293 -#, fuzzy -msgid "Primary" -msgstr "Correo electrónico principal" - -#: addressbook/contact-editor/e-contact-editor.c:1294 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1295 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1296 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1340 -msgid "Primary Email" -msgstr "Correo electrónico principal" - -#: addressbook/contact-editor/e-contact-editor.c:1341 -msgid "Email 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1342 -msgid "Email 3" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -#, fuzzy -msgid "_Add" -msgstr "Añadir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Tipo de teléfono" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Nuevo tipo de teléfono" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -msgid "Add" -msgstr "Añadir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Editor de contactos" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "_Nombre completo..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Archivar como:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Dirección de la página web:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Prefiere recivir el correo como _HTML" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Direccion:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Trabajo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "_Fax del trabajo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Movil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -#, fuzzy -msgid "B_usiness" -msgstr "Trabajo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -#, fuzzy -msgid "_This is the mailing address" -msgstr "Esta es la direción de _correo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -#, fuzzy -msgid "C_ontacts..." -msgstr "_Contactos..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "Ca_tegorias..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -#, fuzzy -msgid "_Job title:" -msgstr "Puesto" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "Compañia:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -msgid "General" -msgstr "General" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -#, fuzzy -msgid "_Department:" -msgstr "Departamento:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -#, fuzzy -msgid "_Office:" -msgstr "Oficina:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -#, fuzzy -msgid "_Profession:" -msgstr "Profesión:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -#, fuzzy -msgid "_Nickname:" -msgstr "Nick:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -#, fuzzy -msgid "_Spouse:" -msgstr "Conyuge:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -#, fuzzy -msgid "_Birthday:" -msgstr "Fecha de nacimiento:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -#, fuzzy -msgid "_Assistant's name:" -msgstr "Nombre del asistente:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -#, fuzzy -msgid "_Manager's Name:" -msgstr "Nombre del manager:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -#, fuzzy -msgid "Anni_versary:" -msgstr "Aniversario:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -#, fuzzy -msgid "No_tes:" -msgstr "Notas:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "Detalles" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Comprobar nombre completo" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Título:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Primero:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Mediano:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Último:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "_Sufijo:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Sr.\n" -"Sra.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/gui/component/addressbook.c:420 -#: calendar/gui/calendar-commands.c:544 -#, fuzzy -msgid "New" -msgstr "Correo _nuevo" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Create a new contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find" -msgstr "Buscar" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find a contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:425 -#: addressbook/gui/component/addressbook.c:492 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:37 -msgid "Print" -msgstr "Imprimir" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Print contacts" -msgstr "" - -#: addressbook/gui/component/addressbook.c:426 -#, fuzzy -msgid "Delete a contact" -msgstr "Seleccionar un adjunto" - -#: addressbook/gui/component/addressbook.c:499 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:506 -#, fuzzy -msgid "_New Contact" -msgstr "C_ontacto" - -#: addressbook/gui/component/addressbook.c:514 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:593 -#, fuzzy -msgid "Unable to open addressbook" -msgstr "Presione aquí para acceder a la agenda" - -#: addressbook/gui/component/addressbook.c:598 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "La URI que mostrará el visor de carpetas" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -#, fuzzy -msgid "window2" -msgstr "window1" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -#, fuzzy -msgid "o" -msgstr "A" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Descripción:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "Servidor LDAP:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Número de puerto:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Nombre:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Configuración de la página:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Nombre del estilo:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Vista previa:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Opciones" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Incluye:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Secciones:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Cabaceras para cada carta" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Comenzar en una nueva página" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Número de columnas:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Fuentes" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Fuente..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Cabecera" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Cuerpo" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Oscureciendo" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Imprimir usando un oscurecimiento gris" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Formatear" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papel" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Tipo:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Dimensiones:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Ancho:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Alto:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Fuente del papel:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Margenes" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Encabezado:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Pie:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Izquierda:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Derecha:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Pagina" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Tamaño:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Orientación" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Vertical" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Horizontal" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Cabecera" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Pie:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Cabecera/Pie" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -#, fuzzy -msgid "am" -msgstr "Nombre" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -#, fuzzy -msgid "Headings:" -msgstr "Cabecera" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -#, fuzzy -msgid "Appointments:" -msgstr "C_ita" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -#, fuzzy -msgid "Month" -msgstr "Fuentes" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -#, fuzzy -msgid "Year" -msgstr "Cabecera" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -#, fuzzy -msgid "Prev" -msgstr "Vista previa:" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -#, fuzzy -msgid "Today" -msgstr "Cuerpo" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "" - -#: calendar/gui/calendar-commands.c:682 -#, fuzzy -msgid "_New appointment..." -msgstr "C_ita" - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -msgid "About Calendar" -msgstr "" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -msgid "'s calendar" -msgstr "" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "La URI que mostrará el visor de carpetas" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -#, fuzzy -msgid "Snooze" -msgstr "Tamaño" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "C_ita" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "C_ita" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "Borrar este mensaje" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "Borrar este mensaje" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:291 -#, fuzzy -msgid "Edit Appointment" -msgstr "C_ita" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:300 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "C_ita" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1198 -#, fuzzy -msgid "FIXME: _Delete" -msgstr "Borrar" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1308 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "C_ita" - -#: calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1312 -#, fuzzy -msgid "FIXME: Invite _Attendees..." -msgstr "Incluir adjunto..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "" - -#: calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1386 -#, fuzzy -msgid "FIXME: Delete" -msgstr "Borrar" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "Papel" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "Cuerpo" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -#, fuzzy -msgid "tues" -msgstr "Notas:" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -#, fuzzy -msgid "year" -msgstr "Cabecera" - -#: calendar/gui/getdate.y:421 -#, fuzzy -msgid "month" -msgstr "Fuentes" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "Enviar" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "Cuerpo" - -#: calendar/gui/getdate.y:438 -#, fuzzy -msgid "now" -msgstr "window1" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Pegar" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -#, fuzzy -msgid "first" -msgstr "_Primero:" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -#, fuzzy -msgid "fourth" -msgstr "Ordenar" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -#, fuzzy -msgid "eighth" -msgstr "Alto:" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "Imprimir" - -#: calendar/gui/getdate.y:451 -#, fuzzy -msgid "tenth" -msgstr "Enviado" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:186 -#, fuzzy -msgid "Due Date:" -msgstr "Departamento:" - -#: calendar/gui/gncal-todo.c:195 -#, fuzzy -msgid "Priority:" -msgstr "Prioridad" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:436 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Prioridad" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:449 -#, fuzzy -msgid "To-do list" -msgstr "_Herramientas" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Añadir..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -#, fuzzy -msgid "Edit..." -msgstr "Añadir..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -#, fuzzy -msgid "Seconds" -msgstr "Secciones:" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -#, fuzzy -msgid "Second" -msgstr "Enviar" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "Fr" -msgstr "De" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "" - -#: calendar/gui/print.c:1249 -#, fuzzy -msgid "Print Preview" -msgstr "Vista previa:" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -#, fuzzy -msgid "Sunday" -msgstr "Enviar" - -#: calendar/gui/prop.c:348 -#, fuzzy -msgid "Monday" -msgstr "Cuerpo" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -#, fuzzy -msgid "Alarm Properties" -msgstr "Propiedades del adjunto" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -#, fuzzy -msgid "Defaults" -msgstr "Detalles" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut" -msgstr "Cortar" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Corta la selección y la coloca en el portapapeles" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy" -msgstr "Copiar" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Copia la selección y la coloca en el portapapeles" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste" -msgstr "Pegar" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Pega desde el portapapeles" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Seleccione la dirección del destinatario" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Lista de destinatarios:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Buscar..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Nombre" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "Dirección" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Propiedades..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "A: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Incluir adjunto" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Quitar" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Quitar los elementos seleccionados de la lista de adjuntos" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Incluir adjunto..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Adjuntar un fichero al mensaje" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Propiedades del adjunto" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "Tipo MIME:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Nombre del fichero:" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Presione aquí para acceder a la agenda" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "A:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Escriba los destinatarios del mensaje" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Escriba las direcciones que recivirán una copia del mensaje" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Escriba las direcciones que recivirán una copia del mensaje sin aparecer en " -"la lista de destinatarios del mensaje." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Asunto:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Escriba el asunto del mensaje" - -#: composer/e-msg-composer.c:444 -#, fuzzy -msgid "Save as..." -msgstr "Buscar..." - -#: composer/e-msg-composer.c:455 -#, c-format -msgid "Error saving file: %s" -msgstr "" - -#: composer/e-msg-composer.c:475 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:494 -#, fuzzy -msgid "Discard this message?" -msgstr "Reenviar este mensaje" - -#: composer/e-msg-composer.c:511 -msgid "Open file" -msgstr "" - -#: composer/e-msg-composer.c:623 -msgid "That file does not exist." -msgstr "" - -#: composer/e-msg-composer.c:633 -msgid "That is not a regular file." -msgstr "" - -#: composer/e-msg-composer.c:643 -msgid "That file exists but is not readable." -msgstr "" - -#: composer/e-msg-composer.c:653 -msgid "That file appeared accesible but open(2) failed." -msgstr "" - -#: composer/e-msg-composer.c:675 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" - -#: composer/e-msg-composer.c:696 -msgid "An error occurred while reading the file." -msgstr "" - -#: composer/e-msg-composer.c:792 shell/e-shell-view-menu.c:438 -#, fuzzy -msgid "_File" -msgstr "Filtro" - -#: composer/e-msg-composer.c:798 -#, fuzzy -msgid "_Open..." -msgstr "_Abrir" - -#: composer/e-msg-composer.c:799 -msgid "Load a previously saved message" -msgstr "" - -#: composer/e-msg-composer.c:807 -#, fuzzy -msgid "_Save..." -msgstr "Buscar..." - -#: composer/e-msg-composer.c:808 -#, fuzzy -msgid "Save message" -msgstr "Enviar un nuevo mensaje" - -#: composer/e-msg-composer.c:816 -#, fuzzy -msgid "_Save as..." -msgstr "Buscar..." - -#: composer/e-msg-composer.c:817 -#, fuzzy -msgid "Save message with a different name" -msgstr "Guardar el mensaje en una carpeta especificada" - -#: composer/e-msg-composer.c:825 -msgid "Save in _folder..." -msgstr "Guardar en _carpeta..." - -#: composer/e-msg-composer.c:826 -msgid "Save the message in a specified folder" -msgstr "Guardar el mensaje en una carpeta especificada" - -#: composer/e-msg-composer.c:835 -msgid "_Insert text file... (FIXME)" -msgstr "" - -#: composer/e-msg-composer.c:836 -#, fuzzy -msgid "Insert a file as text into the message" -msgstr "Adjuntar un fichero al mensaje" - -#: composer/e-msg-composer.c:845 -#, fuzzy -msgid "_Send" -msgstr "Enviar" - -#: composer/e-msg-composer.c:846 -msgid "Send the message" -msgstr "Enviar el mensaje" - -#: composer/e-msg-composer.c:856 -msgid "_Close..." -msgstr "" - -#: composer/e-msg-composer.c:857 -msgid "Quit the message composer" -msgstr "" - -#: composer/e-msg-composer.c:870 shell/e-shell-view-menu.c:480 -#, fuzzy -msgid "_Edit" -msgstr "Añadir..." - -#: composer/e-msg-composer.c:881 -#, fuzzy -msgid "_Format" -msgstr "Formatear" - -#: composer/e-msg-composer.c:887 -msgid "HTML" -msgstr "" - -#: composer/e-msg-composer.c:888 -msgid "Send the mail in HTML format" -msgstr "" - -#: composer/e-msg-composer.c:901 shell/e-shell-view-menu.c:387 -#: shell/e-shell-view-menu.c:491 -#, fuzzy -msgid "_View" -msgstr "Correo _nuevo" - -#: composer/e-msg-composer.c:907 -#, fuzzy -msgid "Show _attachments" -msgstr "Ver _adjuntos" - -#: composer/e-msg-composer.c:908 -#, fuzzy -msgid "Show/hide attachments" -msgstr "Ver/ocultar adjuntos" - -#: composer/e-msg-composer.c:941 -msgid "Send" -msgstr "Enviar" - -#: composer/e-msg-composer.c:942 -msgid "Send this message" -msgstr "Enviar este mensaje" - -#: composer/e-msg-composer.c:951 -msgid "Attach" -msgstr "Adjuntar" - -#: composer/e-msg-composer.c:952 -msgid "Attach a file" -msgstr "Adjuntar un fichero" - -#: composer/e-msg-composer.c:1139 -#, fuzzy -msgid "Compose a message" -msgstr "Compone un nuevo mensaje de correo" - -#: mail/component-factory.c:188 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "No pued inicializar la shell de Evolution." - -#: mail/folder-browser-factory.c:23 -msgid "Get mail" -msgstr "Correo nuevo" - -#: mail/folder-browser-factory.c:23 -msgid "Check for new mail" -msgstr "Comprobar correo" - -#: mail/folder-browser-factory.c:24 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:24 -#, fuzzy -msgid "Compose a new message" -msgstr "Compone un nuevo mensaje de correo" - -#: mail/folder-browser-factory.c:28 -msgid "Reply" -msgstr "Responder" - -#: mail/folder-browser-factory.c:28 -msgid "Reply to the sender of this message" -msgstr "Responder al remitente de este mensaje" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to All" -msgstr "Responder a todos" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to all recipients of this message" -msgstr "Responder a todos los destinatarios de este mensaje" - -#: mail/folder-browser-factory.c:31 -msgid "Forward" -msgstr "Reenviar" - -#: mail/folder-browser-factory.c:31 -msgid "Forward this message" -msgstr "Reenviar este mensaje" - -#: mail/folder-browser-factory.c:35 -#, fuzzy -msgid "Move" -msgstr "_Movil" - -#: mail/folder-browser-factory.c:35 -#, fuzzy -msgid "Move message to a new folder" -msgstr "Guardar el mensaje en una carpeta especificada" - -#: mail/folder-browser-factory.c:37 -msgid "Print the selected message" -msgstr "Imprimir el mensaje seleccionado" - -#: mail/folder-browser-factory.c:39 -msgid "Delete this message" -msgstr "Borrar este mensaje" - -#: mail/folder-browser-factory.c:59 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:72 -msgid "_Mark all messages seen" -msgstr "" - -#: mail/folder-browser-factory.c:78 -msgid "_Expunge" -msgstr "_Comprimir" - -#: mail/folder-browser-factory.c:84 -#, fuzzy -msgid "Mail _Filters ..." -msgstr "Asistente para _filtros" - -#: mail/folder-browser-factory.c:90 -#, fuzzy -msgid "_vFolder Editor ..." -msgstr "Asistente para _filtros" - -#: mail/folder-browser-factory.c:96 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:102 -msgid "Forget _Passwords" -msgstr "" - -#: mail/mail-config.c:688 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:701 -#, fuzzy -msgid "Full name:" -msgstr "Nombre del fichero:" - -#: mail/mail-config.c:725 -#, fuzzy -msgid "Email address:" -msgstr "Dirección de la página web:" - -#: mail/mail-config.c:740 -#, fuzzy -msgid "Organization:" -msgstr "Orientación" - -#: mail/mail-config.c:751 -msgid "Signature file:" -msgstr "" - -#: mail/mail-config.c:756 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:1167 -#, fuzzy -msgid "Server:" -msgstr "Servidor LDAP:" - -#: mail/mail-config.c:1173 -#, fuzzy -msgid "Username:" -msgstr "Nombre del fichero:" - -#: mail/mail-config.c:1179 -#, fuzzy -msgid "Path:" -msgstr "Pegar" - -#: mail/mail-config.c:1187 -#, fuzzy -msgid "Authentication:" -msgstr "Orientación" - -#: mail/mail-config.c:1199 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:1222 -msgid "Test Settings" -msgstr "" - -#: mail/mail-config.c:1344 mail/mail-config.c:1392 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:1368 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:1434 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1436 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1515 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1517 -msgid "Add Source" -msgstr "" - -#: mail/mail-config.c:1598 -msgid "Edit News Server" -msgstr "" - -#: mail/mail-config.c:1600 -msgid "Add News Server" -msgstr "" - -#: mail/mail-ops.c:393 -#, fuzzy -msgid "Fetching mail" -msgstr "Correo nuevo" - -#: mail/mail-ops.c:405 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:791 -#, fuzzy -msgid "Move message(s) to" -msgstr "Buscar mensajes" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/message-list.c:456 -msgid "Online Status" -msgstr "" - -#: mail/message-list.c:492 -msgid "From" -msgstr "De" - -#: mail/message-list.c:499 -msgid "Subject" -msgstr "Asunto" - -#: mail/message-list.c:506 -#, fuzzy -msgid "Date" -msgstr "Pegar" - -#: mail/message-list.c:513 -#, fuzzy -msgid "Received" -msgstr "Recivido" - -#: mail/message-list.c:520 -msgid "To" -msgstr "A" - -#: mail/message-list.c:527 -msgid "Size" -msgstr "Tamaño" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "Guardar el mensaje en una carpeta especificada" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -#, fuzzy -msgid "New..." -msgstr "Correo _nuevo" - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "No se ha encontrado a bug buddy en su $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "No se ha podido ejecutar bug buddy" - -#: shell/e-shell-view-menu.c:164 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:166 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:168 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution es un conjunto de applicaciones de\n" -"groupware para manejar el correo, el calendario y la\n" -"lista de contactos en el entorno del escritorio GNOME." - -#: shell/e-shell-view-menu.c:324 -#, fuzzy -msgid "Go to folder..." -msgstr "Guardar en _carpeta..." - -#: shell/e-shell-view-menu.c:381 -msgid "_New" -msgstr "Correo _nuevo" - -#: shell/e-shell-view-menu.c:393 -msgid "_Folder" -msgstr "_Carpeta" - -#: shell/e-shell-view-menu.c:399 -#, fuzzy -msgid "Evolution bar _shortcut" -msgstr "_Barra de atajos de Evolution" - -#: shell/e-shell-view-menu.c:408 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "_Mensaje de correo" - -#: shell/e-shell-view-menu.c:414 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "C_ita" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "C_ontacto" - -#: shell/e-shell-view-menu.c:426 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:448 -#, fuzzy -msgid "_Go to folder..." -msgstr "Guardar en _carpeta..." - -#: shell/e-shell-view-menu.c:449 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:456 -#, fuzzy -msgid "_Create new folder..." -msgstr "Guardar en _carpeta..." - -#: shell/e-shell-view-menu.c:457 shell/e-shell-view-menu.c:467 -msgid "Create a new folder" -msgstr "" - -#: shell/e-shell-view-menu.c:466 -#, fuzzy -msgid "E_xit..." -msgstr "Añadir..." - -#: shell/e-shell-view-menu.c:497 -#, fuzzy -msgid "Show _shortcut bar" -msgstr "_Ocultar la barra de atajos" - -#: shell/e-shell-view-menu.c:498 -#, fuzzy -msgid "Show the shortcut bar" -msgstr "Oculta la barra de atajos" - -#: shell/e-shell-view-menu.c:503 -#, fuzzy -msgid "Show _folder bar" -msgstr "_Ocultar la barra de atajos" - -#: shell/e-shell-view-menu.c:504 -#, fuzzy -msgid "Show the folder bar" -msgstr "Oculta la barra de atajos" - -#: shell/e-shell-view-menu.c:526 -msgid "_Actions" -msgstr "_Acciones" - -#: shell/e-shell-view-menu.c:537 -#, fuzzy -msgid "_Help" -msgstr "_Casa" - -#: shell/e-shell-view-menu.c:543 -msgid "Help _index" -msgstr "" - -#: shell/e-shell-view-menu.c:550 -#, fuzzy -msgid "Getting _started" -msgstr "_Petición de reunión" - -#: shell/e-shell-view-menu.c:557 -msgid "Using the _mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:564 -msgid "Using the _calendar" -msgstr "" - -#: shell/e-shell-view-menu.c:571 -msgid "Using the c_ontact manager" -msgstr "" - -#: shell/e-shell-view-menu.c:581 -#, fuzzy -msgid "_Submit bug report" -msgstr "_Enviar un reporte de error" - -#: shell/e-shell-view-menu.c:582 -#, fuzzy -msgid "Submit bug report using Bug Buddy" -msgstr "Enviar un reporte de error a traves de bug-buddy" - -#: shell/e-shell-view-menu.c:591 -#, fuzzy -msgid "_About Evolution..." -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:592 -msgid "Show information about Evolution" -msgstr "" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:342 -#, fuzzy -msgid "Folders" -msgstr "_Carpeta" - -#: shell/e-shell-view.c:734 -#, fuzzy -msgid "None" -msgstr "_Nota" - -#: shell/e-shell-view.c:738 -#, fuzzy, c-format -msgid "Evolution - %s" -msgstr "Evolution" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "No puedo configurar una carpeta local -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:236 -#, fuzzy -msgid "Show the shortcuts as small icons" -msgstr "Oculta la barra de atajos" - -#: shell/e-shortcuts-view.c:238 -#, fuzzy -msgid "_Large icons" -msgstr "Margenes" - -#: shell/e-shortcuts-view.c:239 -#, fuzzy -msgid "Show the shortcuts as large icons" -msgstr "Oculta la barra de atajos" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "" - -#: shell/e-storage.c:217 -#, fuzzy -msgid "(No name)" -msgstr "Nombre" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "" - -#: shell/main.c:66 -#, fuzzy -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Hola. Gracias por tomarse la molestia de descargar esta liberación de " -"prueba\n" -"de la suit de groupware Evolution.\n" -"\n" -"El equipo de Evolution ha trabajado duro para hacer Evolution tan robusto,\n" -"extensible, bonito, rápido y adecuado para los usuarios de internet como a\n" -"sido posible. Y estamos muy cansados. Pero no hemos acabado -- todavia " -"no.\n" -"\n" -"Mientras esplora Evolution, por favor comprenda que la mayoria de nuestro\n" -"trabajo se ha centrado en el motor que maneja todo el sistema y no en la\n" -"interfaz de usuario. Ahora estamos empezando a coronar la colina, y desde\n" -"ahora vamos a poner todo nuestro cariño y atención a la interfaz de usuario\n" -"Por lo menos sabe que no está usando un software de demostración.\n" -"\n" -"Asi que, es hora para las escusas. Evolution: se rompera, perderá su " -"correo\n" -"dejará procesos corriendo, consumirá el 100% de la CPU, se bloqueará,\n" -"enviará correo en formato HTML a listas de correo al azar, y le pondrá en\n" -"situación embarazosa delante de sus amigos y compañeros de trabajo. Uselo\n" -"asumiendo usted las consecuencias.\n" -"\n" -"Esperamos que le gusten los resultados de nuestro duro trabajo, y " -"¡esperamos\n" -"contribuciones!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Gracias\n" -"El equipo de Evolution\n" - -#: shell/main.c:128 -msgid "Cannot initialize the Evolution shell." -msgstr "No pued inicializar la shell de Evolution." - -#: shell/main.c:166 -#, fuzzy -msgid "Cannot initialize the configuration system." -msgstr "No pued inicializar la shell de Evolution." - -#: shell/main.c:172 -msgid "Cannot initialize the Bonobo component system." -msgstr "No puedo inicializar el sistema de componentes Bonobo." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Campos" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Agrupando" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Ordenar" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtro" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#, fuzzy -msgid "Field Chooser" -msgstr "Campos" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Campos disponibles" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Mostrar en este orden" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Añadir >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Quitar" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -#, fuzzy -msgid "Tentative" -msgstr "Orientación" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -#, fuzzy -msgid "Out of Office" -msgstr "Oficina:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -#, fuzzy -msgid "_Options" -msgstr "Opciones" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "_Petición de reunión" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "_Petición de reunión" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -#, fuzzy -msgid "..." -msgstr "Añadir..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, fuzzy, c-format -msgid "Group %i" -msgstr "Agrupando" - -#, fuzzy -#~ msgid "No description" -#~ msgstr "Descripción:" - -#, fuzzy -#~ msgid "_Mail" -#~ msgstr "_Movil" - -#, fuzzy -#~ msgid "Pri_vate" -#~ msgstr "Pegar" - -#, fuzzy -#~ msgid "Daily" -#~ msgstr "Detalles" - -#, fuzzy -#~ msgid "label23" -#~ msgstr "label2" - -#, fuzzy -#~ msgid "label24" -#~ msgstr "label2" - -#, fuzzy -#~ msgid "label25" -#~ msgstr "label2" - -#, fuzzy -#~ msgid "month(s)" -#~ msgstr "Fuentes" - -#, fuzzy -#~ msgid "label27" -#~ msgstr "label7" - -#, fuzzy -#~ msgid "Exceptions" -#~ msgstr "Opciones" - -#, fuzzy -#~ msgid "Change" -#~ msgstr "Oscureciendo" - -#~ msgid "Cut selected region into the clipboard" -#~ msgstr "Corta la región seleccionada y la coloca en el portapapeles" - -#~ msgid "Copy selected region into the clipboard" -#~ msgstr "Copia la región seleccionada y la coloca en el portapapeles" - -#~ msgid "Undo" -#~ msgstr "Deshacer" - -#~ msgid "Undo last operation" -#~ msgstr "Deshacer la ultima operación" - -#, fuzzy -#~ msgid "Edit Filter" -#~ msgstr "Filtro" - -#, fuzzy -#~ msgid "Finish" -#~ msgstr "Buscar" - -#, fuzzy -#~ msgid "Apply" -#~ msgstr "Responder" - -#, fuzzy -#~ msgid "Refile" -#~ msgstr "Recivido" - -#~ msgid "Mail Component: I could not initialize Bonobo" -#~ msgstr "Componenete de correo: No pude inicializar Bonobo" - -#~ msgid "Composes a new mail message" -#~ msgstr "Compone un nuevo mensaje de correo" - -#, fuzzy -#~ msgid "Task _Request (FIXME)" -#~ msgstr "P_etición de tarea" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "" -#~ "Lo sentimos, el visor de carpetas de Evolution no ha podido ser inicializado" - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "Si debe ser mostrada una vista previa del mensaje" - -#~ msgid "_Task" -#~ msgstr "_Tarea" - -#~ msgid "_Selected Items" -#~ msgstr "_Seleccionar elementos" - -#~ msgid "_New Folder" -#~ msgstr "_Nueva carpeta" - -#~ msgid "Clos_e All Items" -#~ msgstr "_Cerrar todos los elementos" - -#~ msgid "Closes all the open items" -#~ msgstr "Cerrar todos los elementos abiertos" diff --git a/po/flu-danish b/po/flu-danish deleted file mode 100644 index 51953e5980..0000000000 --- a/po/flu-danish +++ /dev/null @@ -1,114 +0,0 @@ -#~ msgid "A folder containing mail items" -#~ msgstr "En mappe som indeholder e-post ting" - -#~ msgid "A folder containing contacts" -#~ msgstr "En mappe med kontakter" - -#~ msgid "A folder containing calendar entries" -#~ msgstr "En mappe med kalenderting" - -#~ msgid "A folder containing tasks" -#~ msgstr "En mappe med opgaver" - -#~ msgid "Evolution can not create its local folders" -#~ msgstr "Evolution kan ikke oprette sine lokale mapper" - -#~ msgid "Large Icons" -#~ msgstr "Store ikoner" - -#~ msgid "Small Icons" -#~ msgstr "Små ikoner" - -#~ msgid "Add New Group" -#~ msgstr "Tilføj ny gruppe" - -#~ msgid "Remove Group" -#~ msgstr "Fjern gruppe" - -#~ msgid "Rename Group" -#~ msgstr "Omdøb gruppe" - -#~ msgid "Add Shortcut" -#~ msgstr "Tilføj genvej" - -#~ msgid "Open Folder" -#~ msgstr "Åbn mappe" - -#~ msgid "Open in New Window" -#~ msgstr "Åbn i et nyt vindue" - -#~ msgid "Advanced Find" -#~ msgstr "Avanceret søgning" - -#~ msgid "Remove From Shortcut Bar" -#~ msgstr "Fjern fra genvejslinjen" - -#~ msgid "Rename Shortcut" -#~ msgstr "Omdøb genvej" - -#~ msgid "Properties" -#~ msgstr "Egenskaber" - -#~ msgid "Today" -#~ msgstr "I dag" - -#~ msgid "Executive Summary" -#~ msgstr "Oversigt" - -#~ msgid "Inbox" -#~ msgstr "Indboks" - -#~ msgid "New mail messages" -#~ msgstr "Nye e-post meddelelser" - -#~ msgid "Sent messages" -#~ msgstr "Sendte meddelelser" - -#~ msgid "Sent mail messages" -#~ msgstr "Sendte e-post meddelelser" - -#~ msgid "Drafts" -#~ msgstr "Kladder" - -#~ msgid "Draft mail messages" -#~ msgstr "E-post-kladder" - -#~ msgid "Calendar" -#~ msgstr "Kalender" - -#~ msgid "Your calendar" -#~ msgstr "Din kalender" - -#~ msgid "Contacts" -#~ msgstr "Kontakter" - -#~ msgid "Your contacts list" -#~ msgstr "Din kontaktliste" - -#~ msgid "Tasks" -#~ msgstr "Opgaver" - -#~ msgid "Tasks list" -#~ msgstr "Opgaveliste" - -#~ msgid "Main Shortcuts" -#~ msgstr "Hovedgenveje" - -#~ msgid "Other Shortcuts" -#~ msgstr "Andre genveje" - -#~ msgid "New group" -#~ msgstr "Ny gruppe" - -#~ msgid "Enables some debugging functions" -#~ msgstr "Aktivér fejlsøgningsfunktioner" - -#~ msgid "LEVEL" -#~ msgstr "LEVEL" - -#~ msgid "" -#~ "It was not possible to setup the Evolution startup files. Please\n" -#~ "fix the problem, and restart Evolution" -#~ msgstr "" -#~ "Det var ikke muligt at sætte Evolutions opstartsfiler op. Venligst\n" -#~ "ret problemet, og genstart Evolution" diff --git a/po/fr.po b/po/fr.po deleted file mode 100644 index 198e481b17..0000000000 --- a/po/fr.po +++ /dev/null @@ -1,3501 +0,0 @@ -# evolution fr.po -# Copyright (C) 2000 Free Software Foundation, Inc. -# Vincent Renardias , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution VERSION\n" -"POT-Creation-Date: 2000-07-10 21:51-0400\n" -"PO-Revision-Date: 2000-04-18 17:50+0200\n" -"Last-Translator: Vincent Renardias \n" -"Language-Team: GNOME French Team \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:58 -#: calendar/gui/calendar-pilot-sync.c:138 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Impossible d'initialiser Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "catégories" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Catégories disponibles : " - -#: addressbook/contact-editor/e-contact-editor.c:579 -#: calendar/gui/event-editor.c:1118 -msgid "FIXME: _Appointment" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:580 -#: calendar/gui/event-editor.c:1119 -msgid "FIXME: Meeting Re_quest" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:582 -#: calendar/gui/event-editor.c:1121 -msgid "FIXME: _Mail Message" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:583 -#: calendar/gui/event-editor.c:1122 -msgid "FIXME: _Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:584 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:585 -#: calendar/gui/event-editor.c:1124 -msgid "FIXME: Task _Request" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:586 -#: calendar/gui/event-editor.c:1125 -msgid "FIXME: _Journal Entry" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:587 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:589 -#: addressbook/contact-editor/e-contact-editor.c:694 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:594 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:596 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:603 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:607 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Ajouter attachement..." - -#: addressbook/contact-editor/e-contact-editor.c:609 -#: calendar/gui/event-editor.c:1148 -msgid "FIXME: _Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:610 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:611 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:613 -#: calendar/gui/event-editor.c:1152 -msgid "Page Set_up" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:614 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:635 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:640 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1183 -msgid "_Object" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: addressbook/contact-editor/e-contact-editor.c:656 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: addressbook/contact-editor/e-contact-editor.c:657 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:663 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:665 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:668 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:673 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:676 -#: calendar/gui/event-editor.c:1217 -msgid "_Toolbars" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:681 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:682 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:683 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:688 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: _Font..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:689 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:696 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:697 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:700 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:702 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:707 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:709 -#: calendar/gui/event-editor.c:1253 -msgid "_Forms" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:714 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:717 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:718 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:719 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:720 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:721 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:724 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:725 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:726 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:728 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1266 -msgid "FIXME: For_ward" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:741 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:742 -#: calendar/gui/event-editor.c:1280 -msgid "F_ormat" -msgstr "" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:743 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:744 -#: calendar/gui/event-editor.c:1282 -msgid "Actio_ns" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:775 -msgid "Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:776 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:780 -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -#: calendar/gui/event-editor.c:1336 -msgid "FIXME: Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:786 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:326 -msgid "Delete this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:788 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:791 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1208 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1209 -#: addressbook/contact-editor/e-contact-editor.c:1313 -msgid "Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1210 -msgid "Business 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1211 -msgid "Business Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1212 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1213 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1214 -#, fuzzy -msgid "Company" -msgstr "Copier" - -#: addressbook/contact-editor/e-contact-editor.c:1215 -#: addressbook/contact-editor/e-contact-editor.c:1314 -msgid "Home" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1216 -msgid "Home 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1217 -msgid "Home Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1218 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1219 -msgid "Mobile" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1220 -#: addressbook/contact-editor/e-contact-editor.c:1315 -msgid "Other" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1221 -msgid "Other Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1222 -#, fuzzy -msgid "Pager" -msgstr "Coller" - -#: addressbook/contact-editor/e-contact-editor.c:1223 -msgid "Primary" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1224 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1225 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1226 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1270 -msgid "Primary Email" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1271 -msgid "Email 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1272 -msgid "Email 3" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -msgid "_Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 -msgid "Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "Copier" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "General" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:415 -#: calendar/gui/calendar-commands.c:544 -msgid "New" -msgstr "" - -#: addressbook/gui/component/addressbook.c:415 -msgid "Create a new contact" -msgstr "Créer un nouveau contact" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find" -msgstr "Rechercher" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find a contact" -msgstr "Rechercher un contact" - -#: addressbook/gui/component/addressbook.c:420 -#: addressbook/gui/component/addressbook.c:487 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -msgid "Print" -msgstr "Imprimer" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Print contacts" -msgstr "" - -#. Delete -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:498 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "Effacer" - -#: addressbook/gui/component/addressbook.c:421 -msgid "Delete a contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:494 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:501 -msgid "_New Contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:509 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:588 -msgid "Unable to open addressbook" -msgstr "" - -#: addressbook/gui/component/addressbook.c:593 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:329 -msgid "Save as VCard" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -#, fuzzy -msgid "Paper" -msgstr "Coller" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:37 -#, fuzzy -msgid "Top:" -msgstr "À :" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:41 -#, fuzzy -msgid "Page" -msgstr "Coller" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:712 -#: calendar/gui/gncal-todo.c:716 -msgid "Day" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:711 -msgid "Week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "" - -#: calendar/gui/calendar-commands.c:673 -msgid "Print..." -msgstr "" - -#: calendar/gui/calendar-commands.c:682 -msgid "_New appointment..." -msgstr "" - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -msgid "About Calendar" -msgstr "" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -msgid "'s calendar" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "Specifies the port on which the Pilot is" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "PORT" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:70 -msgid "If you want to debug the attributes on records" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:72 -msgid "Only syncs from desktop to pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:74 -msgid "Only syncs from pilot to desktop" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:97 -msgid "Can not create Pilot socket\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:104 -#, c-format -msgid "Can not bind to device %s\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:107 -msgid "Failed to get a connection from the Pilot device" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:111 -msgid "pi_accept failed" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:211 -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:531 -msgid "No description" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:692 -msgid "Could not open DatebookDB on the Pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:693 -msgid "Unable to open DatebookDB" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:728 -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "" - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Fermer" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1056 -msgid "Snooze" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:289 -msgid "Edit Appointment" -msgstr "" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:298 -#, c-format -msgid "Appointment - %s" -msgstr "" - -#: calendar/gui/event-editor.c:301 -#, c-format -msgid "Task - %s" -msgstr "" - -#: calendar/gui/event-editor.c:304 -#, c-format -msgid "Journal entry - %s" -msgstr "" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -msgid "FIXME: _New Appointment" -msgstr "" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:14 calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:15 -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "_Display" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:32 -msgid "_Audio" -msgstr "_Audio" - -#: calendar/gui/event-editor-dialog.glade.h:33 -msgid "_Program" -msgstr "_Programme" - -#: calendar/gui/event-editor-dialog.glade.h:34 -msgid "_Mail" -msgstr "_Mail" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "Mail _to:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Run program:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "Classification" -msgstr "Classification" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "Pu_blic" -msgstr "pu_blic" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Pri_vate" -msgstr "Pri_vé" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Confidential" -msgstr "_Confidentiel" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "Règle récurrente" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:596 -msgid "None" -msgstr "Aucune" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "Journalier" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Hebdomadaire" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Mensuel" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Annuel" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "lun" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "mar" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "mer" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "jeu" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "ven" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "sam" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "dim" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "ème jour du mois" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:92 -#, fuzzy -msgid "Change" -msgstr "Coller" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "Coller" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Coller" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:171 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:181 -msgid "Due Date:" -msgstr "" - -#: calendar/gui/gncal-todo.c:190 -msgid "Priority:" -msgstr "" - -#: calendar/gui/gncal-todo.c:206 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:324 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:325 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:424 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:425 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:426 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "" - -#: calendar/gui/gncal-todo.c:427 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:439 -msgid "To-do list" -msgstr "" - -#. Add -#: calendar/gui/gncal-todo.c:478 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "" - -#. Edit -#: calendar/gui/gncal-todo.c:487 -msgid "Edit..." -msgstr "" - -#: calendar/gui/gncal-todo.c:711 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:712 calendar/gui/gncal-todo.c:716 -msgid "Days" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Seconds" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Second" -msgstr "" - -#: calendar/gui/gnome-cal.c:453 calendar/gui/gnome-cal.c:1064 -#: calendar/gui/gnome-cal.c:1120 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1069 calendar/gui/gnome-cal.c:1124 -msgid "Ok" -msgstr "" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -msgid "Sunday" -msgstr "" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -msgid "Alarm Properties" -msgstr "" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:766 -msgid "Cut" -msgstr "Couper" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:767 -msgid "Copy" -msgstr "Copier" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:768 -msgid "Paste" -msgstr "Coller" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:14 -#, fuzzy -msgid "To: >>" -msgstr "À :" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -#, fuzzy -msgid "Cc: >>" -msgstr "Cc :" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -#, fuzzy -msgid "Bcc: >>" -msgstr "Bcc :" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 octet" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u octets" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fKo" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fMo" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fGo" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Ajouter attachement" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:332 -msgid "Remove" -msgstr "Enlever" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Ajouter attachement..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "À :" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc :" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc :" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "" - -#: composer/e-msg-composer.c:463 -msgid "Save as..." -msgstr "" - -#: composer/e-msg-composer.c:474 -#, c-format -msgid "Error saving file: %s" -msgstr "" - -#: composer/e-msg-composer.c:494 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:513 -msgid "Discard this message?" -msgstr "" - -#: composer/e-msg-composer.c:561 -msgid "Open file" -msgstr "" - -#: composer/e-msg-composer.c:718 -msgid "Save in _folder..." -msgstr "" - -#: composer/e-msg-composer.c:718 -msgid "Save the message in a specified folder" -msgstr "" - -#: composer/e-msg-composer.c:721 composer/e-msg-composer.c:763 -msgid "Send" -msgstr "" - -#: composer/e-msg-composer.c:721 -msgid "Send the message" -msgstr "" - -#: composer/e-msg-composer.c:733 -msgid "View _attachments" -msgstr "" - -#: composer/e-msg-composer.c:733 -msgid "View/hide attachments" -msgstr "" - -#: composer/e-msg-composer.c:763 -msgid "Send this message" -msgstr "" - -#: composer/e-msg-composer.c:766 -msgid "Cut selected region into the clipboard" -msgstr "" - -#: composer/e-msg-composer.c:767 -msgid "Copy selected region into the clipboard" -msgstr "" - -#: composer/e-msg-composer.c:768 -msgid "Paste selected region into the clipboard" -msgstr "" - -#: composer/e-msg-composer.c:769 -msgid "Undo" -msgstr "" - -#: composer/e-msg-composer.c:769 -msgid "Undo last operation" -msgstr "" - -#: composer/e-msg-composer.c:772 -msgid "Attach" -msgstr "" - -#: composer/e-msg-composer.c:772 -msgid "Attach a file" -msgstr "" - -#: composer/e-msg-composer.c:948 -msgid "Compose a message" -msgstr "" - -#: filter/filter-editor.c:198 -msgid "Edit Filter" -msgstr "" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "" - -#: filter/filter-editor.c:211 -msgid "Finish" -msgstr "" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "" - -#: filter/filter-editor.c:216 -msgid "Apply" -msgstr "" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" - -#: mail/component-factory.c:196 -msgid "Cannot initialize Evolution's mail component." -msgstr "" - -#: mail/folder-browser-factory.c:29 -msgid "Get mail" -msgstr "" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:30 -msgid "Compose a new message" -msgstr "" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "" - -#: mail/folder-browser-factory.c:34 -msgid "Reply to the sender of this message" -msgstr "" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to all recipients of this message" -msgstr "" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "" - -#: mail/folder-browser-factory.c:37 -msgid "Forward this message" -msgstr "" - -#: mail/folder-browser-factory.c:41 -msgid "Refile" -msgstr "" - -#: mail/folder-browser-factory.c:41 -msgid "Move message to a new folder" -msgstr "" - -#: mail/folder-browser-factory.c:43 -msgid "Print the selected message" -msgstr "" - -#: mail/folder-browser-factory.c:45 -msgid "Delete this message" -msgstr "" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:83 -msgid "_Filter Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "" - -#: mail/mail-config.c:259 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:274 -msgid "Full name:" -msgstr "" - -#: mail/mail-config.c:302 -msgid "Email address:" -msgstr "" - -#: mail/mail-config.c:325 -msgid "Organization:" -msgstr "" - -#: mail/mail-config.c:337 -msgid "Signature file:" -msgstr "" - -#: mail/mail-config.c:342 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:699 mail/mail-config.c:790 -msgid "Server:" -msgstr "Serveur : " - -#: mail/mail-config.c:705 -msgid "Username:" -msgstr "Nom d'utilisateur : " - -#: mail/mail-config.c:711 -msgid "Path:" -msgstr "Chemin : " - -#: mail/mail-config.c:717 mail/mail-config.c:796 -msgid "Authentication:" -msgstr "" - -#: mail/mail-config.c:729 mail/mail-config.c:808 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:755 mail/mail-config.c:830 -msgid "Test these values before continuing" -msgstr "" - -#: mail/mail-config.c:937 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:955 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" - -#: mail/mail-config.c:1129 mail/mail-config.c:1208 -msgid "Mail Configuration" -msgstr "" - -#. Identity page -#: mail/mail-config.c:1146 -msgid "Identity" -msgstr "Identité" - -#. Source page -#: mail/mail-config.c:1165 -msgid "Mail Source" -msgstr "" - -#. Transport page -#: mail/mail-config.c:1186 -msgid "Mail Transport" -msgstr "" - -#: mail/mail-config.c:1308 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1310 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1453 -msgid "Edit Source" -msgstr "Éditer source" - -#: mail/mail-config.c:1455 -msgid "Add Source" -msgstr "Ajouter source" - -#: mail/mail-ops.c:372 -msgid "Fetching mail" -msgstr "" - -#: mail/mail-ops.c:384 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:732 -msgid "Refile message(s) to" -msgstr "" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/main.c:62 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "" - -#: mail/message-list.c:460 -msgid "Online Status" -msgstr "" - -#: mail/message-list.c:488 -msgid "From" -msgstr "De" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "Sujet" - -#: mail/message-list.c:502 -msgid "Date" -msgstr "Date" - -#: mail/message-list.c:509 -msgid "Received" -msgstr "Reçu" - -#: mail/message-list.c:516 -msgid "To" -msgstr "À" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "Taille" - -#: shell/e-init.c:25 -msgid "Evolution can not create its local folders" -msgstr "" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Installation d'Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -msgid "New..." -msgstr "Nouveau..." - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "(Sans titre)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "" - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "" - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "" - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:301 -msgid "Go to folder..." -msgstr "" - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "" - -#: shell/e-shell-view-menu.c:369 -msgid "Evolution _Bar Shortcut" -msgstr "" - -#: shell/e-shell-view-menu.c:375 -msgid "_Mail message (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -msgid "Composes a new mail message" -msgstr "" - -#: shell/e-shell-view-menu.c:378 -msgid "_Appointment (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:381 -msgid "_Contact (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:387 -msgid "Task _Request (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:390 -msgid "_Journal Entry (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "_Nouveau" - -#: shell/e-shell-view-menu.c:402 -msgid "_Go to folder..." -msgstr "" - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:404 -msgid "_Create new folder..." -msgstr "" - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "" - -#: shell/e-shell-view-menu.c:419 -msgid "Show _shortcut bar" -msgstr "" - -#: shell/e-shell-view-menu.c:420 -msgid "Show the shortcut bar" -msgstr "" - -#: shell/e-shell-view-menu.c:422 -msgid "Show _folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:423 -msgid "Show the folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:440 -msgid "Help _Index" -msgstr "" - -#: shell/e-shell-view-menu.c:443 -msgid "Getting _Started" -msgstr "" - -#: shell/e-shell-view-menu.c:446 -msgid "Using the _Mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:449 -msgid "Using the _Calendar" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -msgid "Using the Cont_act Manager" -msgstr "" - -#: shell/e-shell-view-menu.c:457 -msgid "_Submit bug report" -msgstr "" - -#: shell/e-shell-view-menu.c:458 -msgid "Submit bug-report via bug-buddy" -msgstr "" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:208 -msgid "Folders" -msgstr "" - -#: shell/e-shell-view.c:600 -#, c-format -msgid "Evolution - %s" -msgstr "" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "" - -#: shell/e-shortcut.c:469 -msgid "New group" -msgstr "Nouveau groupe" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate" -msgstr "Activer" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:332 -msgid "Remove this shortcut from the shortcut bar" -msgstr "" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "" - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Pas de nom)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Pas d'erreur" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Erreur générique" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "Erreur d'E/S" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Permission refusée" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Opération non supportée" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Erreur inconnue" - -#: shell/main.c:99 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "" - -#: shell/main.c:214 -msgid "Cannot initialize the configuration system." -msgstr "" - -#: shell/main.c:220 -msgid "Cannot initialize the Bonobo component system." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Champs" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Groupage" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Tri" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtre" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Ajouter >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Enlever" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Occupé" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Pas d'information" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Options" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:633 -#, c-format -msgid "Group %i" -msgstr "Groupe %i" diff --git a/po/ga.po b/po/ga.po deleted file mode 100755 index bc596e35a6..0000000000 --- a/po/ga.po +++ /dev/null @@ -1,455 +0,0 @@ -# Irish language translation of evolution -# Copyright (C) 2000 Free Software Foundation, Inc. -# Alastair McKinstry, , 2000. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: evolution CVS\n" -"POT-Creation-Date: 2000-05-10 22:19-0400\n" -"PO-Revision-Date: 2000-08-02 13:00:00-0000\n" -"Last-Translator: Alastair McKinstry, \n" -"Language-Team: Irish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:462 -msgid "Cut" -msgstr "Gearr" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:463 -msgid "Copy" -msgstr "Greamaigh" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytanna" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:307 -msgid "Add attachment" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:364 -msgid "Remove" -msgstr "Scríos" - -#: composer/e-msg-composer-attachment-bar.c:365 -msgid "Remove selected items from the attachment list" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:396 -msgid "Add attachment..." -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:397 -msgid "Attach a file to the message" -msgstr "" - -#: composer/e-msg-composer-attachment.c:259 -msgid "Select attachment" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:89 -msgid "Click here for the address book" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:124 -msgid "To:" -msgstr "Do:" - -#: composer/e-msg-composer-hdrs.c:125 -msgid "Enter the recipients of the message" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:129 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:130 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:135 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:136 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" - -#: composer/e-msg-composer-hdrs.c:142 -msgid "Subject:" -msgstr "Abair:" - -#: composer/e-msg-composer-hdrs.c:143 -msgid "Enter the subject of the mail" -msgstr "" - -#: composer/e-msg-composer.c:420 -msgid "Save in _folder..." -msgstr "Sábháil 'san _fillteán" - -#: composer/e-msg-composer.c:420 -msgid "Save the message in a specified folder" -msgstr "" - -#: composer/e-msg-composer.c:423 composer/e-msg-composer.c:460 -#: mail/folder-browser-factory.c:138 -msgid "Send" -msgstr "Post" - -#: composer/e-msg-composer.c:423 -msgid "Send the message" -msgstr "Post an sceál seo" - -#: composer/e-msg-composer.c:431 -msgid "View _attachments" -msgstr "" - -#: composer/e-msg-composer.c:431 -msgid "View/hide attachments" -msgstr "" - -#: composer/e-msg-composer.c:460 -msgid "Send this message" -msgstr "" - -#: composer/e-msg-composer.c:462 -msgid "Cut selected region into the clipboard" -msgstr "" - -#: composer/e-msg-composer.c:463 -msgid "Copy selected region into the clipboard" -msgstr "" - -#: composer/e-msg-composer.c:464 -msgid "Paste selected region into the clipboard" -msgstr "" - -#: composer/e-msg-composer.c:465 -msgid "Undo" -msgstr "Leasú" - -#: composer/e-msg-composer.c:465 -msgid "Undo last operation" -msgstr "" - -#: composer/e-msg-composer.c:467 -msgid "Attach" -msgstr "" - -#: composer/e-msg-composer.c:467 -msgid "Attach a file" -msgstr "" - -#: mail/folder-browser-factory.c:85 -msgid "" -"Hi. Thanks for taking the time to download this preview release of\n" -"the Evolution groupware suite.\n" -"\n" -"The Evolution team has worked hard to make Evolution as robust,\n" -"extensible, pretty, fast and well-suited to heavy internet users as\n" -"possible. And we're very tired. But we're not done -- not yet.\n" -"\n" -"As you explore Evolution, please understand that most of our work has\n" -"been focused on the backend engine which drives the entire system and\n" -"not on the user interface. We are just cresting the hill now, though,\n" -"and will be pouring most of our love and attention into the UI from\n" -"here out. But at least you know that you're not using demoware.\n" -"\n" -"So, time for the nerdy disclaimer. Evolution will: crash, lose your\n" -"mail, leave stray processes running, consume 100% CPU, race, lock,\n" -"send HTML mail to random mailing lists, and embarass you in front of\n" -"your friends and co-workers. Use at your own risk.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: mail/folder-browser-factory.c:113 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Go raibh maith agat\n" -"An Fhoireann Evolution\n" - -#: mail/folder-browser-factory.c:137 -msgid "Get mail" -msgstr "" - -#: mail/folder-browser-factory.c:137 -msgid "Check for new mail" -msgstr "" - -#: mail/folder-browser-factory.c:138 -msgid "Send a new message" -msgstr "" - -#: mail/folder-browser-factory.c:139 -msgid "Find" -msgstr "" - -#: mail/folder-browser-factory.c:139 -msgid "Find messages" -msgstr "" - -#: mail/folder-browser-factory.c:143 -msgid "Reply" -msgstr "Freagrair" - -#: mail/folder-browser-factory.c:143 -msgid "Reply to the sender of this message" -msgstr "" - -#: mail/folder-browser-factory.c:144 -msgid "Reply to All" -msgstr "" - -#: mail/folder-browser-factory.c:144 -msgid "Reply to all recipients of this message" -msgstr "" - -#: mail/folder-browser-factory.c:146 -msgid "Forward" -msgstr "Sheoladh Chuig duine" - -#: mail/folder-browser-factory.c:146 -msgid "Forward this message" -msgstr "" - -#: mail/folder-browser-factory.c:150 -msgid "Print" -msgstr "Priontáil" - -#: mail/folder-browser-factory.c:150 -msgid "Print the selected message" -msgstr "" - -#: mail/folder-browser-factory.c:152 -msgid "Delete" -msgstr "Scríos" - -#: mail/folder-browser-factory.c:152 -msgid "Delete this message" -msgstr "Scríos an sceal seo" - -#: mail/folder-browser-factory.c:169 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:292 -msgid "We are sorry, Evolution's Folder Browser can not be initialized." -msgstr "" - -#: mail/folder-browser.c:207 -msgid "The URI that the Folder Browser will display" -msgstr "" - -#: mail/folder-browser.c:210 -msgid "Whether a message preview should be shown" -msgstr "" - -#: mail/main.c:54 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "" - -#: mail/message-list.c:421 -msgid "Priority" -msgstr "Tosaíocht" - -#: mail/message-list.c:435 -msgid "From" -msgstr "Ó:" - -#: mail/message-list.c:442 -msgid "Subject" -msgstr "Abair" - -#: mail/message-list.c:449 -msgid "Sent" -msgstr "" - -#: mail/message-list.c:456 -msgid "Receive" -msgstr "" - -#: mail/message-list.c:463 -msgid "To" -msgstr "Do" - -#: mail/message-list.c:470 -msgid "Size" -msgstr "Méid" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:62 -msgid "Bug buddy was not found in your $PATH." -msgstr "" - -#. same as above -#: shell/e-shell-view-menu.c:68 -msgid "Bug buddy could not be run." -msgstr "" - -#: shell/e-shell-view-menu.c:110 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:112 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "" - -#: shell/e-shell-view-menu.c:114 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:163 shell/e-shell-view-menu.c:229 -msgid "_Folder" -msgstr "_Fillteán" - -#: shell/e-shell-view-menu.c:167 -msgid "Evolution _Bar Shortcut" -msgstr "" - -#: shell/e-shell-view-menu.c:173 -msgid "_Mail message" -msgstr "_Post sceál" - -#: shell/e-shell-view-menu.c:174 shell/e-shell-view-menu.c:177 -msgid "Composes a new mail message" -msgstr "" - -#: shell/e-shell-view-menu.c:176 -msgid "_Appointment" -msgstr "_Coinne" - -#: shell/e-shell-view-menu.c:179 -msgid "Meeting Re_quest" -msgstr "" - -#: shell/e-shell-view-menu.c:182 -msgid "_Contact" -msgstr "" - -#: shell/e-shell-view-menu.c:185 -msgid "_Task" -msgstr "_Teacs" - -#: shell/e-shell-view-menu.c:188 -msgid "Task _Request" -msgstr "" - -#: shell/e-shell-view-menu.c:191 -msgid "_Journal Entry" -msgstr "" - -#: shell/e-shell-view-menu.c:194 -msgid "_Note" -msgstr "_Nota" - -#: shell/e-shell-view-menu.c:204 -msgid "_Selected Items" -msgstr "" - -#: shell/e-shell-view-menu.c:212 -msgid "_New Folder" -msgstr "Fillteán _Nua" - -#: shell/e-shell-view-menu.c:220 -msgid "_New" -msgstr "_Nua" - -#: shell/e-shell-view-menu.c:221 -msgid "_Open" -msgstr "_Oscáil" - -#: shell/e-shell-view-menu.c:222 -msgid "Clos_e All Items" -msgstr "_Dún gach rud" - -#: shell/e-shell-view-menu.c:222 -msgid "Closes all the open items" -msgstr "" - -#: shell/e-shell-view-menu.c:243 -msgid "_Toggle Shortcut Bar" -msgstr "" - -#: shell/e-shell-view-menu.c:244 -msgid "Toggles the shortcut bar" -msgstr "" - -#: shell/e-shell-view-menu.c:246 -msgid "_Toggle Treeview" -msgstr "" - -#: shell/e-shell-view-menu.c:247 -msgid "Toggles the tree view" -msgstr "" - -#: shell/e-shell-view-menu.c:262 -msgid "_Submit bug" -msgstr "" - -#: shell/e-shell-view-menu.c:263 -msgid "Submit bug-report via bug-buddy" -msgstr "" - -#. FIXME: add Favorites here -#: shell/e-shell-view-menu.c:278 -msgid "_Tools" -msgstr "_Uirlisí" - -#: shell/e-shell-view-menu.c:279 -msgid "_Actions" -msgstr "" - -#: shell/e-shell.c:82 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "" - -#: shell/main.c:111 -msgid "Cannot initialize the Bonobo component system." -msgstr "" - -#: shell/main.c:126 -msgid "Cannot initialize the Evolution shell." -msgstr "" diff --git a/po/gl.po b/po/gl.po deleted file mode 100644 index b4d3873184..0000000000 --- a/po/gl.po +++ /dev/null @@ -1,3334 +0,0 @@ -# Galician translation of Evolution. -# Copyright (C) 2000 Jesús Bravo Álvarez. -# Jesús Bravo Álvarez , 2000. -# -# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas -# colaborar connosco, podes atopar máis información en http://trasno.gpul.org -# -# First Version: 2000-04-07 22:14+0200 -# -msgid "" -msgstr "" -"Project-Id-Version: Evolution 0.0.2\n" -"POT-Creation-Date: 2000-08-02 16:39+0200\n" -"PO-Revision-Date: 2000-07-16 19:19+0200\n" -"Last-Translator: Jesús Bravo Álvarez \n" -"Language-Team: Galician \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Non se puido inicializar Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "categorías" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Elemento(s) pertencentes a estas categorías:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Categorías Dispoñibles:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "FIXME: _Cita" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: _Solicitude de Reunión" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "FIXME: Enviar _Mensaxe" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "FIXME: _Contacto" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "FIXME: _Tarefa" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "FIXME: Solicitude de _Tarefa" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: Entrada de _Xornal" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "FIXME: _Nota" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/event-editor.c:1178 calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: Gardar Ad_xuntos..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Borrar" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Obxecto" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/event-editor.c:1238 calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "FIXME: _Elemento" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/event-editor.c:1239 calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "FIXME: _Personalizar..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "An_terior" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "Se_guinte" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "_Barras de ferramentas" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "FIXME: _Ficheiro..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "FIXME: _Elemento..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "FIXME: _Obxecto..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "FIXME: _Fonte..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: _Parágrafo..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: _Novo Contacto" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "FIXME: _Reenviar" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "_Inserir" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "_Formatar" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/event-editor.c:1331 shell/e-shell-view-menu.c:515 -msgid "_Tools" -msgstr "_Utilidades" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "Acció_ns" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Gardar e Pechar" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "Garda-la cita e pecha-la caixa de diálogo" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:673 -msgid "Print..." -msgstr "Imprimir..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Imprimir este elemento" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Inserir un ficheiro como adxunto" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:426 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:39 -msgid "Delete" -msgstr "Borrar" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/event-editor.c:1387 calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "Borrar este elemento" - -#: addressbook/contact-editor/e-contact-editor.c:856 -#: calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Ir ó elemento anterior" - -#: addressbook/contact-editor/e-contact-editor.c:859 -#: calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Ir ó elemento seguinte" - -#: addressbook/contact-editor/e-contact-editor.c:862 -#: calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "FIXME: Axuda" - -#: addressbook/contact-editor/e-contact-editor.c:863 -#: calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Ve-la axuda online" - -#: addressbook/contact-editor/e-contact-editor.c:1278 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1279 -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1280 -msgid "Business 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1281 -msgid "Business Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1282 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1283 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1284 -msgid "Company" -msgstr "Compañía" - -#: addressbook/contact-editor/e-contact-editor.c:1285 -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Home" -msgstr "Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1286 -msgid "Home 2" -msgstr "Casa 2" - -#: addressbook/contact-editor/e-contact-editor.c:1287 -msgid "Home Fax" -msgstr "Fax de Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1288 -msgid "ISDN" -msgstr "RDSI" - -#: addressbook/contact-editor/e-contact-editor.c:1289 -msgid "Mobile" -msgstr "Móbil" - -#: addressbook/contact-editor/e-contact-editor.c:1290 -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Other" -msgstr "Outro" - -#: addressbook/contact-editor/e-contact-editor.c:1291 -msgid "Other Fax" -msgstr "Outro Fax" - -#: addressbook/contact-editor/e-contact-editor.c:1292 -msgid "Pager" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1293 -msgid "Primary" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1294 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1295 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1296 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1340 -msgid "Primary Email" -msgstr "Email Principal" - -#: addressbook/contact-editor/e-contact-editor.c:1341 -msgid "Email 2" -msgstr "Email 2" - -#: addressbook/contact-editor/e-contact-editor.c:1342 -msgid "Email 3" -msgstr "Email 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Engadir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -msgid "Add" -msgstr "Engadir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Editor de Contactos" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "Nome _Completo..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Enderezo da páxina Web:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Quere recibir correo _HTML" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Enderezo:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Traballo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "_Fax do Traballo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Móbil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "T_raballo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "C_ontactos..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "Ca_tegorías..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Compañía:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -msgid "General" -msgstr "Xeral" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "_Departamento:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "_Oficina:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Profesión:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Cu_mpreanos:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "No_tas:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "Detalles" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Nome:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Outros nomes:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Apelido(s):" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:420 -#: calendar/gui/calendar-commands.c:544 -msgid "New" -msgstr "Novo" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Create a new contact" -msgstr "Crear un novo contacto" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find" -msgstr "Buscar" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find a contact" -msgstr "Buscar un contacto" - -#: addressbook/gui/component/addressbook.c:425 -#: addressbook/gui/component/addressbook.c:492 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:37 -msgid "Print" -msgstr "Imprimir" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Print contacts" -msgstr "" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Delete a contact" -msgstr "Borrar un contacto" - -#: addressbook/gui/component/addressbook.c:499 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:506 -msgid "_New Contact" -msgstr "_Novo Contacto" - -#: addressbook/gui/component/addressbook.c:514 -msgid "N_ew Directory Server" -msgstr "N_ovo Servidor de Directorio" - -#: addressbook/gui/component/addressbook.c:593 -msgid "Unable to open addressbook" -msgstr "Non se pode abri-lo libro de enderezos" - -#: addressbook/gui/component/addressbook.c:598 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "Gardar como VCard" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "* Prema aquí para engadir un contacto *" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "O URI que amosará o navegador de carpetas" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "window2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Descrición:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "Servidor LDAP:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Número de Porto:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Nome:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Opcións" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Seccións:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Número de columnas:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Fontes" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Fonte..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papel" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Tipo:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Dimensións:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Largura:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Altura:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Marxes" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Superior:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Inferior:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Esquerda:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Dereita:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Páxina" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Tamaño:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Orientación" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Vertical" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Horizontal" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -msgid "am" -msgstr "am" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "pm" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "Citas:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "Axenda de Gnome" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "Ficheiro non atopado" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "Abrir axenda" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "Gardar axenda" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Día" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "Amosar un día" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "5 Días" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "Amosa-la semana laboral" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Semana" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "Amosar unha semana" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "Mes" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "Amosar un mes" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "Ano" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "Amosar un ano" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "Crear unha nova cita" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Hoxe" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "" - -#: calendar/gui/calendar-commands.c:682 -msgid "_New appointment..." -msgstr "_Nova cita..." - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -msgid "About Calendar" -msgstr "" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -msgid "'s calendar" -msgstr "" - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "O URI que amosará o calendario" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Editar cita" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Nova cita..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Editar esta cita..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Borrar esta cita" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "Editar Cita" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "Cita - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "Tarefa - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "FIXME: _Borrar" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: A_xenda..." - -#: calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "FIXME: _Libro de enderezos..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "FIXME: _Nova Cita" - -#: calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1312 -#, fuzzy -msgid "FIXME: Invite _Attendees..." -msgstr "FIXME: Gardar Ad_xuntos..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "FIXME: Gardar e Pechar" - -#: calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "FIXME: Imprimir..." - -#: calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "FIXME: Borrar" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "xaneiro" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "febreiro" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "marzo" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "abril" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "maio" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "xuño" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "xullo" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "agosto" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "setembro" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "setem" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "outubro" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "novembro" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "decembro" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "domingo" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "luns" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "martes" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "mart" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "mércores" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "mércor" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "xoves" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "xov" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "xoves" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "venres" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "sábado" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "ano" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "mes" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "quincena" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "semana" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "día" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "hora" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "minuto" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "segundo" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "seg" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "mañá" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "onte" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "hoxe" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "agora" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Prioridade:" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Resume" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:436 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Prioridade" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Engadir..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "Editar..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Semanas" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Días" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Horas" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Hora" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Minutos" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Minuto" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "Segundos" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "Segundo" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Dom" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Lun" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Mar" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Mér" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Xov" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Ven" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Sáb" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Ano:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "Do" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "Lu" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "Ma" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "Me" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "Xo" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "Ve" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "Sa" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Mes actual (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Ano actual (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Imprimir axenda" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Previsualizar da Impresión" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "Formato da hora" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "12 horas (AM/PM)" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "24 horas" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "A semana comeza o" - -#: calendar/gui/prop.c:347 -msgid "Sunday" -msgstr "Domingo" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "Luns" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "Cores" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -msgid "Alarm Properties" -msgstr "" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr " segundos" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut" -msgstr "Cortar" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Borrar e copiar o elemento seleccionado ó cartafol" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy" -msgstr "Copiar" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Copiar o elemento seleccionado ó cartafol" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste" -msgstr "Pegar" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Pegar elemento do cartafol" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Seleccionar os enderezos dos destinatarios" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Lista de destinatarios:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Buscar..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Nome" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "Enderezo" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Propiedades..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "A: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Engadir adxunto" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Quitar" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Quitar os elementos seleccionados da lista de adxuntos" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Engadir adxunto..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Adxuntar un ficheiro á mensaxe" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "Tipo MIME:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Nome de ficheiro:" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Prema aquí para o libro de enderezos" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "A:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Introduza os destinatarios da mensaxe" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Introduza os enderezos que recibirán unha copia da mensaxe" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Introduza os enderezos que recibirán unha copia da mensaxe sen apareceren na " -"lista de destinatarios." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Asunto:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Introduza o asunto da mensaxe" - -#: composer/e-msg-composer.c:444 -msgid "Save as..." -msgstr "Gardar como..." - -#: composer/e-msg-composer.c:455 -#, c-format -msgid "Error saving file: %s" -msgstr "Erro gardando o ficheiro: %s" - -#: composer/e-msg-composer.c:475 -#, c-format -msgid "Error loading file: %s" -msgstr "Erro cargando o ficheiro: %s" - -#: composer/e-msg-composer.c:494 -msgid "Discard this message?" -msgstr "¿Descartar esta mensaxe?" - -#: composer/e-msg-composer.c:511 -msgid "Open file" -msgstr "Abrir ficheiro" - -#: composer/e-msg-composer.c:623 -msgid "That file does not exist." -msgstr "O ficheiro non existe." - -#: composer/e-msg-composer.c:633 -msgid "That is not a regular file." -msgstr "Non é un ficheiro normal." - -#: composer/e-msg-composer.c:643 -msgid "That file exists but is not readable." -msgstr "O ficheiro existe pero non se pode ler." - -#: composer/e-msg-composer.c:653 -msgid "That file appeared accesible but open(2) failed." -msgstr "O ficheiro parecía accesible pero a chamada a open(2) fallou." - -#: composer/e-msg-composer.c:675 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"O ficheiro é moi longo (máis de 100K).\n" -"¿Está seguro de querer inserilo?" - -#: composer/e-msg-composer.c:696 -msgid "An error occurred while reading the file." -msgstr "Ocorreu un erro lendo o ficheiro." - -#: composer/e-msg-composer.c:792 shell/e-shell-view-menu.c:438 -#, fuzzy -msgid "_File" -msgstr "_Móbil" - -#: composer/e-msg-composer.c:798 -msgid "_Open..." -msgstr "" - -#: composer/e-msg-composer.c:799 -msgid "Load a previously saved message" -msgstr "" - -#: composer/e-msg-composer.c:807 -#, fuzzy -msgid "_Save..." -msgstr "Gardar como..." - -#: composer/e-msg-composer.c:808 -#, fuzzy -msgid "Save message" -msgstr "Enviar a mensaxe" - -#: composer/e-msg-composer.c:816 -#, fuzzy -msgid "_Save as..." -msgstr "Gardar como..." - -#: composer/e-msg-composer.c:817 -#, fuzzy -msgid "Save message with a different name" -msgstr "Garda-la mensaxe na carpeta indicada" - -#: composer/e-msg-composer.c:825 -msgid "Save in _folder..." -msgstr "Gardar en _carpeta..." - -#: composer/e-msg-composer.c:826 -msgid "Save the message in a specified folder" -msgstr "Garda-la mensaxe na carpeta indicada" - -#: composer/e-msg-composer.c:835 -#, fuzzy -msgid "_Insert text file... (FIXME)" -msgstr "_Inserir Ficheiro de Texto" - -#: composer/e-msg-composer.c:836 -msgid "Insert a file as text into the message" -msgstr "Inserir un ficheiro como texto na mensaxe" - -#: composer/e-msg-composer.c:845 -#, fuzzy -msgid "_Send" -msgstr "Enviar" - -#: composer/e-msg-composer.c:846 -msgid "Send the message" -msgstr "Enviar a mensaxe" - -#: composer/e-msg-composer.c:856 -msgid "_Close..." -msgstr "" - -#: composer/e-msg-composer.c:857 -msgid "Quit the message composer" -msgstr "" - -#: composer/e-msg-composer.c:870 shell/e-shell-view-menu.c:480 -#, fuzzy -msgid "_Edit" -msgstr "Editar..." - -#: composer/e-msg-composer.c:881 -#, fuzzy -msgid "_Format" -msgstr "_Formatar" - -#: composer/e-msg-composer.c:887 -msgid "HTML" -msgstr "" - -#: composer/e-msg-composer.c:888 -msgid "Send the mail in HTML format" -msgstr "" - -#: composer/e-msg-composer.c:901 shell/e-shell-view-menu.c:387 -#: shell/e-shell-view-menu.c:491 -#, fuzzy -msgid "_View" -msgstr "_Nova" - -#: composer/e-msg-composer.c:907 -#, fuzzy -msgid "Show _attachments" -msgstr "Mirar _adxuntos" - -#: composer/e-msg-composer.c:908 -#, fuzzy -msgid "Show/hide attachments" -msgstr "Mirar/ocultar adxuntos" - -#: composer/e-msg-composer.c:941 -msgid "Send" -msgstr "Enviar" - -#: composer/e-msg-composer.c:942 -msgid "Send this message" -msgstr "Enviar esta mensaxe" - -#: composer/e-msg-composer.c:951 -msgid "Attach" -msgstr "Adxuntar" - -#: composer/e-msg-composer.c:952 -msgid "Attach a file" -msgstr "Adxuntar un ficheiro" - -#: composer/e-msg-composer.c:1139 -msgid "Compose a message" -msgstr "Compoñer unha mensaxe" - -#: mail/component-factory.c:188 -msgid "Cannot initialize Evolution's mail component." -msgstr "Non se pode inicializa-lo compoñente de correo de Evolution." - -#: mail/folder-browser-factory.c:23 -msgid "Get mail" -msgstr "Baixar correo" - -#: mail/folder-browser-factory.c:23 -msgid "Check for new mail" -msgstr "Comprobar o novo correo" - -#: mail/folder-browser-factory.c:24 -msgid "Compose" -msgstr "Compoñer" - -#: mail/folder-browser-factory.c:24 -msgid "Compose a new message" -msgstr "Compoñer unha nova mensaxe" - -#: mail/folder-browser-factory.c:28 -msgid "Reply" -msgstr "Responder" - -#: mail/folder-browser-factory.c:28 -msgid "Reply to the sender of this message" -msgstr "Responder ó autor desta mensaxe" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to All" -msgstr "Responder a Todos" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to all recipients of this message" -msgstr "Responder a tódolos destinatarios desta mensaxe" - -#: mail/folder-browser-factory.c:31 -msgid "Forward" -msgstr "Re-enviar" - -#: mail/folder-browser-factory.c:31 -msgid "Forward this message" -msgstr "Re-enviar esta mensaxe" - -#: mail/folder-browser-factory.c:35 -#, fuzzy -msgid "Move" -msgstr "Lu" - -#: mail/folder-browser-factory.c:35 -msgid "Move message to a new folder" -msgstr "Mover mensaxe a unha nova carpeta" - -#: mail/folder-browser-factory.c:37 -msgid "Print the selected message" -msgstr "Imprimir a mensaxe seleccionada" - -#: mail/folder-browser-factory.c:39 -msgid "Delete this message" -msgstr "Borrar esta mensaxe" - -#: mail/folder-browser-factory.c:59 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:72 -msgid "_Mark all messages seen" -msgstr "" - -#: mail/folder-browser-factory.c:78 -msgid "_Expunge" -msgstr "_Eliminar" - -#: mail/folder-browser-factory.c:84 -#, fuzzy -msgid "Mail _Filters ..." -msgstr "FIXME: _Ficheiro..." - -#: mail/folder-browser-factory.c:90 -msgid "_vFolder Editor ..." -msgstr "" - -#: mail/folder-browser-factory.c:96 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:102 -msgid "Forget _Passwords" -msgstr "Esquecer _Contrasinais" - -#: mail/mail-config.c:688 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:701 -msgid "Full name:" -msgstr "Nome completo:" - -#: mail/mail-config.c:725 -msgid "Email address:" -msgstr "Enderezo de email:" - -#: mail/mail-config.c:740 -msgid "Organization:" -msgstr "Organización:" - -#: mail/mail-config.c:751 -msgid "Signature file:" -msgstr "Ficheiro de sinatura:" - -#: mail/mail-config.c:756 -msgid "Signature File" -msgstr "Ficheiro de Sinatura" - -#: mail/mail-config.c:1167 -msgid "Server:" -msgstr "Servidor:" - -#: mail/mail-config.c:1173 -msgid "Username:" -msgstr "Nome de usuario:" - -#: mail/mail-config.c:1179 -msgid "Path:" -msgstr "Camiño:" - -#: mail/mail-config.c:1187 -msgid "Authentication:" -msgstr "Autenticación:" - -#: mail/mail-config.c:1199 -msgid "Detect supported types..." -msgstr "Detectar tipos soportados..." - -#: mail/mail-config.c:1222 -msgid "Test Settings" -msgstr "" - -#: mail/mail-config.c:1344 mail/mail-config.c:1392 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:1368 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:1434 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1436 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1515 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1517 -msgid "Add Source" -msgstr "" - -#: mail/mail-config.c:1598 -msgid "Edit News Server" -msgstr "Editar Servidor de News" - -#: mail/mail-config.c:1600 -msgid "Add News Server" -msgstr "Engadir Servidor de News" - -#: mail/mail-ops.c:393 -msgid "Fetching mail" -msgstr "Baixando correo" - -#: mail/mail-ops.c:405 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Esta mensaxe non ten asunto.\n" -"¿Enviar realmente?" - -#: mail/mail-ops.c:791 -#, fuzzy -msgid "Move message(s) to" -msgstr "Mover mensaxe a unha nova carpeta" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/message-list.c:456 -msgid "Online Status" -msgstr "" - -#: mail/message-list.c:492 -msgid "From" -msgstr "De" - -#: mail/message-list.c:499 -msgid "Subject" -msgstr "Asunto" - -#: mail/message-list.c:506 -msgid "Date" -msgstr "Data" - -#: mail/message-list.c:513 -msgid "Received" -msgstr "Recibido" - -#: mail/message-list.c:520 -msgid "To" -msgstr "A" - -#: mail/message-list.c:527 -msgid "Size" -msgstr "Tamaño" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Instalación de Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Semella que é a primeira vez que executa Evolution." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"Prema \"Aceptar\" para instala-los ficheiros de usuario de Evolution en" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Non se pode crea-lo directorio\n" -"%s\n" -"Erro: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Non se poden copia-los ficheiros a\n" -"`%s'." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Ficheiros de Evolution instalados con éxito." - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"O ficheiro `%s' non é un directorio.\n" -"Elimíneo para poder instala-los ficheiros de\n" -"usuario de Evolution." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Non se pode crea-la carpeta indicada:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Crear unha nova carpeta" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -msgid "New..." -msgstr "" - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "(Sen_título)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy non foi atopado no seu $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Non se puido executar Bug buddy." - -#: shell/e-shell-view-menu.c:164 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:166 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:168 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:324 -msgid "Go to folder..." -msgstr "Ir á carpeta..." - -#: shell/e-shell-view-menu.c:381 -msgid "_New" -msgstr "_Nova" - -#: shell/e-shell-view-menu.c:393 -msgid "_Folder" -msgstr "_Carpeta" - -#: shell/e-shell-view-menu.c:399 -#, fuzzy -msgid "Evolution bar _shortcut" -msgstr "_Barra de Atallos de Evolution" - -#: shell/e-shell-view-menu.c:408 -msgid "_Mail message (FIXME)" -msgstr "Enviar _Mensaxe (FIXME)" - -#: shell/e-shell-view-menu.c:414 -msgid "_Appointment (FIXME)" -msgstr "_Cita (FIXME)" - -#: shell/e-shell-view-menu.c:420 -msgid "_Contact (FIXME)" -msgstr "_Contacto (FIXME)" - -#: shell/e-shell-view-menu.c:426 -msgid "_Task (FIXME)" -msgstr "_Tarefa (FIXME)" - -#: shell/e-shell-view-menu.c:448 -msgid "_Go to folder..." -msgstr "_Ir á carpeta..." - -#: shell/e-shell-view-menu.c:449 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:456 -msgid "_Create new folder..." -msgstr "_Crear unha nova carpeta..." - -#: shell/e-shell-view-menu.c:457 shell/e-shell-view-menu.c:467 -msgid "Create a new folder" -msgstr "Crear unha nova carpeta" - -#: shell/e-shell-view-menu.c:466 -#, fuzzy -msgid "E_xit..." -msgstr "Editar..." - -#: shell/e-shell-view-menu.c:497 -msgid "Show _shortcut bar" -msgstr "Amosar barra de _atallos" - -#: shell/e-shell-view-menu.c:498 -msgid "Show the shortcut bar" -msgstr "Amosa-la barra de atallos" - -#: shell/e-shell-view-menu.c:503 -msgid "Show _folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:504 -msgid "Show the folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:526 -msgid "_Actions" -msgstr "_Accións" - -#: shell/e-shell-view-menu.c:537 -#, fuzzy -msgid "_Help" -msgstr "_Casa" - -#: shell/e-shell-view-menu.c:543 -#, fuzzy -msgid "Help _index" -msgstr "_Índice da Axuda" - -#: shell/e-shell-view-menu.c:550 -#, fuzzy -msgid "Getting _started" -msgstr "Hora de _comezo da reunión:" - -#: shell/e-shell-view-menu.c:557 -#, fuzzy -msgid "Using the _mailer" -msgstr "Usando o _Lector" - -#: shell/e-shell-view-menu.c:564 -#, fuzzy -msgid "Using the _calendar" -msgstr "Usando a _Axenda" - -#: shell/e-shell-view-menu.c:571 -#, fuzzy -msgid "Using the c_ontact manager" -msgstr "Usando o Xestor de _Contactos" - -#: shell/e-shell-view-menu.c:581 -msgid "_Submit bug report" -msgstr "_Enviar informe de erro" - -#: shell/e-shell-view-menu.c:582 -#, fuzzy -msgid "Submit bug report using Bug Buddy" -msgstr "Enviar un informe de erro con bug-buddy" - -#: shell/e-shell-view-menu.c:591 -#, fuzzy -msgid "_About Evolution..." -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:592 -msgid "Show information about Evolution" -msgstr "" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:342 -msgid "Folders" -msgstr "Carpetas" - -#: shell/e-shell-view.c:734 -msgid "None" -msgstr "" - -#: shell/e-shell-view.c:738 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Non se pode activar o almacenamento local -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "Iconas _Pequenas" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Amosa-los atallos como iconas pequenas" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Iconas _Grandes" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Amosa-los atallos como iconas grandes" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Activar" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Activar este atallo" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Erro gardando atallos." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Erro xenérico" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "Xa existe unha carpeta co mesmo nome" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "Erro de E/S" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Non hai espacio dabondo para crea-la carpeta" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Non se atopou a carpeta especificada" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Permiso denegado" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Operación non soportada" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Erro descoñecido" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Graciñas\n" -"O Equipo de Evolution\n" - -#: shell/main.c:128 -msgid "Cannot initialize the Evolution shell." -msgstr "Non se pode inicializar a shell de Evolution." - -#: shell/main.c:166 -msgid "Cannot initialize the configuration system." -msgstr "Non se pode inicializa-lo sistema de configuración." - -#: shell/main.c:172 -msgid "Cannot initialize the Bonobo component system." -msgstr "Non se pode inicializar o sistema de compoñentes de Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Engadir >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Quitar" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Opcións" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Hora de _comezo da reunión:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Hora de _remate da reunión:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "" - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Grupo %i" - -#~ msgid "Cut selected region into the clipboard" -#~ msgstr "Corta-la rexión seleccionada ó cartafol" - -#~ msgid "Copy selected region into the clipboard" -#~ msgstr "Copia-la rexión seleccionada ó cartafol" - -#~ msgid "Paste selected region into the clipboard" -#~ msgstr "Pega-la rexión seleccionada ó cartafol" - -#~ msgid "Undo" -#~ msgstr "Desfacer" - -#~ msgid "Undo last operation" -#~ msgstr "Desface-la última operación" - -#~ msgid "Edit Filter" -#~ msgstr "Editar Filtro" - -#~ msgid "Create filter" -#~ msgstr "Crear filtro" - -#~ msgid "Back" -#~ msgstr "Atrás" - -#~ msgid "Finish" -#~ msgstr "Finalizar" - -#~ msgid "Cancel" -#~ msgstr "Cancelar" - -#~ msgid "Apply" -#~ msgstr "Aplicar" - -#~ msgid "Test these values before continuing" -#~ msgstr "Probe eses valores antes de continuar" - -#~ msgid "Mail Configuration" -#~ msgstr "Configuración do Correo" - -#~ msgid "Identity" -#~ msgstr "Identidade" - -#~ msgid "Mail Component: I could not initialize Bonobo" -#~ msgstr "Compoñente de Correo: Non se pode inicializar Bonobo" - -#~ msgid "Composes a new mail message" -#~ msgstr "Compoñer unha nova mensaxe de correo" - -#~ msgid "Task _Request (FIXME)" -#~ msgstr "Solicitar _Tarefa (FIXME)" - -#~ msgid "_Journal Entry (FIXME)" -#~ msgstr "Entrada de _Xornal (FIXME)" diff --git a/po/hu.po b/po/hu.po deleted file mode 100644 index 89215b4b61..0000000000 --- a/po/hu.po +++ /dev/null @@ -1,3904 +0,0 @@ -# Evolution Hungarian translations -# Copyright (C) 2000 Free Software Foundation, Inc. -# Szabolcs BAN , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution VERSION\n" -"POT-Creation-Date: 2000-08-11 14:21+0200\n" -"PO-Revision-Date: 2000-05-19 19:06+0100\n" -"Last-Translator: Szabolcs BAN \n" -"Language-Team: Hungarian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=8859-2\n" -"Content-Transfer-Encoding: 8bits\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Nem tudom a bonobo-t elindítani" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "kategóriák" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Az elemek az alábbi kategóriákhoz tartoznak:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Meglévõ mezõk" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "FIXME: _Idõpont" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: Találkozó _felhívás" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "FIXME: _Levél" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "FIXME: _Címjegyzék" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "FIXME: _Feladat" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "FIXME: Feladat f_elhívás" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: _Napló bejegyzés" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "FIXME: _Feljegyzés" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1178 -#: calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "FIXME: Válassz f_ormát..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "FIXME: _Memo stílus" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "FIXME: Nyomtatási stílusok definiálása..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "FIXME: _Elküld" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: Csatolások me_ntése..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Töröl" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "FIXME: _Mappába mozgat..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "FIXME: Mappába máso_l..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "Oldal _beállítás:" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "FIXME: Nyomtatás né_zet" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "FIXME: _Speciális beillesztés" - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "FIXME: Ne_m olvasottnak jelöl" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Objektum" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1238 -#: calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "FIXME: _Elem" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1239 -#: calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "FIXME: _Nem olvasott elem" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "FIXME: Elsõ e_lem a mappában" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "FIXME: _Utolsó elem a mappában" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "FIXME: Á_ltalános" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "FIXME: __Formázás" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "FIXME: _Beállít..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "E_lõzõ" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "Kö_vetkezõ" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "_Eszközök" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "FIXME: _Fájl..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "FIXME: Elem..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "FIXME: _Objektum..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "FIXME: _Betûtípus..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: B_ekezdés..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "FIXME: Aktuális kérdõív _tervezése" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "FIXME: Kérdõív t_ervezése" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "FIXME: Kérdõív _publikálása" - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "FIXME: Kérdõív publikálása _mint..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "FIXME: Szkript _hibakeresõ" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "FIXME: _Helyesírás..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "_Kérdõívek" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: Ú_j névjegy" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "FIXME: Új névjegy ugyanannál a _cégnél" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "FIXME: Levél ennek a _személynek" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "FIXME: Üze_net ennek a személynek" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "FIXME: Ta_lálkozó ezzel a személlyel" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "FIXME: _Találkozó tervezése" - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "FIXME: Új feladat a névjegyhez" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "FIXME: Új napló bejegyzés a névjegyhez" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "FIXME: _Zászló folytatáshoz..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "FIXME: _Térkép vagy cím megjelenítése" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "FIXME: _Weblap megnyitása" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "FIXME: _vCard-ként továbbküld" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "FIXME: _Továbbít" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "_Beilleszt" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "F_ormátum" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1331 -#: shell/e-shell-view-menu.c:512 -msgid "_Tools" -msgstr "_Eszközök" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "_Mûveletek" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Ment és bezár" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "A találkozó mentése és a párbeszédablak bezárása" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:680 -msgid "Print..." -msgstr "Nyomtat..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Az elem nyomtatása" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "FIXME: Fájl beillesztése..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Fájl beillesztése csatolásként" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:427 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:40 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -msgid "Delete" -msgstr "Töröl" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1387 -#: calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "Az elem törlése" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "FIXME: Elõzõ" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Az elõzõ elemre ugrás" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "FIXME: Következõ" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Következõ elemre ugrás" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "FIXME: Súgó" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Az online súgó" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "Asszisztens" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "Üzleti" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "2. Üzleti" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "Üzleti fax" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "Visszahívás" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "Autó" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "Vállalat" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "Otthoni" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "2. Otthoni" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "Otthoni fax" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "Mobil" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:27 -msgid "Other" -msgstr "Más" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "Egyéb fax" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "Személyhívó" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "Elsõdleges" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "Rádió" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "Telex" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "Elsõdleges email" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "2. email" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "3. email" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"Tényleg törölni akarod\n" -"ezt a névjegyet?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "Névjegy törlése?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "Hozzá_ad" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Telefon típusok" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Új telefon típus" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "Hozzáad" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Névjegy szerkesztõ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "_Teljes név..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Fájl mint:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Weblap cím:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "_HTML levelet kér" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Cím:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "Ü_zleti" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Otthoni" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "Üzleti _fax" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Mobil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "Üz_leti" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "Ez a _levelezési cím" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "_Névjegyek..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "Ka_tegóriák..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "_Beosztás" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Vállalat:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "Alap" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "_Osztály:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "_Hivatal:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Foglalkozás:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "Be_cenév:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "Háza_stárs:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Születésna_p:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "_Asszisztens neve:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "_Fõnök neve:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "É_vforduló:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "Felje_gyzések:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "Részletek" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "A teljes név ellenõrzése" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Beosztás:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Keresztnév:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Utónév:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Vezetéknév:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "_Elõtag:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Dr.\n" -"Prof.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Ifj.\n" -"Özv.\n" - -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/calendar-commands.c:545 -msgid "New" -msgstr "Új" - -#: addressbook/gui/component/addressbook.c:421 -msgid "Create a new contact" -msgstr "Egy új névjegy készítése" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Find" -msgstr "Keres" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Find a contact" -msgstr "Névjegy keresése" - -#: addressbook/gui/component/addressbook.c:426 -#: calendar/gui/calendar-commands.c:549 mail/folder-browser-factory.c:38 -msgid "Print" -msgstr "Nyomtat" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Print contacts" -msgstr "Névjegyek nyomtatása" - -#: addressbook/gui/component/addressbook.c:427 -msgid "Delete a contact" -msgstr "Névjegy törlése" - -#: addressbook/gui/component/addressbook.c:495 -msgid "_Print Contacts..." -msgstr "_Névjegyek nyomtatása..." - -#: addressbook/gui/component/addressbook.c:505 -#: addressbook/gui/component/addressbook.c:1044 -msgid "As _Table" -msgstr "_Táblázatként" - -#: addressbook/gui/component/addressbook.c:512 -msgid "_New Contact" -msgstr "Ú_j névjegy" - -#: addressbook/gui/component/addressbook.c:520 -msgid "N_ew Directory Server" -msgstr "Ú_j címtár szerver" - -#: addressbook/gui/component/addressbook.c:603 -msgid "Unable to open addressbook" -msgstr "Nem tudom megnyitni a címjegyzéket" - -#: addressbook/gui/component/addressbook.c:608 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Nem tudom a címjegyzéket megnyitni. Ez azt jelenti,\n" -"hogy hibás URI-t írtál be, vagy egy LDAP szervert\n" -"szeretnél elérni, és nincs LDAP támogatás befordítva.\n" -"Ha URI-t írtál be, ellenõrizd az URI-t elírás vagy\n" -"helytelen szintaktika szempontjából. Ha nem,\n" -"lehet, hogy egy LDAP szervert kéne elérned. Ha szeretnél\n" -"használni egy LDAP szervert, le kell töltened és\n" -"telepítened az OpenLDAP csomagot, és újrafordítani az Evolúciót.\n" - -#: addressbook/gui/component/addressbook.c:948 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "VCard-ként mentés" - -#: addressbook/gui/component/addressbook.c:1015 -msgid "* Click here to add a contact *" -msgstr "* Kattints ide névjegy hozzáadásához *" - -#: addressbook/gui/component/addressbook.c:1051 -msgid "As _Minicards" -msgstr "_Kártyákként" - -#: addressbook/gui/component/addressbook.c:1102 -msgid "The URI that the Folder Browser will display" -msgstr "Az URI amit a Mappa Böngészõ meg fog nyitni" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "2.ablak" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:87 -msgid "External Directories" -msgstr "Külsõ könyvtárak" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Leírás:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP szerver:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Portszám:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Root DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Név:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Nincsenek elemek, amiket meg lehetne mutatni\n" -"\n" -"Új névjegy készítéséhez kattints kettõt ide." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Oldal beállítás:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Stílus neve:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Elõnézet:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Beállítások" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Beleértve:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Szekciók:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Rögtön egymás után következnek" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Levél címkék minden lapon" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Fejléc minden levélnek" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Új lapon kezdd" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Oszlopok száma:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "A végén a formok ürítése:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Betûtípusok" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Betûtípus..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Fejlécek" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Törzs" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Árnyalás" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Nyomatás szürkeskálás árnyalással" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Formátum" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papír" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Típus" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Dimenziók:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Szélesség:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Magasság:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Papír forrás:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Margók" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Felsõ:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Alsó:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Bal:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Jobb:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Lap" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Méret:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Elhelyezkedés" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Álló" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Fekvõ" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Fejléc" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Lábléc:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Páros lapokon fordított" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Fejléc/lábléc" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -msgid "am" -msgstr "de" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "du" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "Körvonal:" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "Fejlécek:" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "Üres napok:" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "Megbeszélések:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "Kiemelt nap:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "Nap számozás:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "Jelenlegi nap száma:" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "Tennivaló, ami még nem járt le:" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "Tennivaló, ami ma jár le:" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "Tennivaló, ami lejárt:" - -#: calendar/gui/calendar-commands.c:176 -msgid "Gnome Calendar" -msgstr "Gnome Naptár" - -#: calendar/gui/calendar-commands.c:179 -msgid "The GNOME personal calendar and schedule manager." -msgstr "GNOME személyi naptár és idõzítõ menedzser." - -#: calendar/gui/calendar-commands.c:435 -msgid "File not found" -msgstr "Nem találom a fájlt" - -#: calendar/gui/calendar-commands.c:457 -msgid "Open calendar" -msgstr "Naptár megnyitása" - -#: calendar/gui/calendar-commands.c:496 -msgid "Save calendar" -msgstr "Naptár mentése" - -#: calendar/gui/calendar-commands.c:523 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Nap" - -#: calendar/gui/calendar-commands.c:523 -msgid "Show 1 day" -msgstr "Egy napot mutass" - -#: calendar/gui/calendar-commands.c:526 -msgid "5 Days" -msgstr "5 nap" - -#: calendar/gui/calendar-commands.c:526 -msgid "Show the working week" -msgstr "A munkahetet mutasd" - -#: calendar/gui/calendar-commands.c:529 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Hét" - -#: calendar/gui/calendar-commands.c:529 -msgid "Show 1 week" -msgstr "Egy hét mutatása" - -#: calendar/gui/calendar-commands.c:532 -msgid "Month" -msgstr "Hónap" - -#: calendar/gui/calendar-commands.c:532 -msgid "Show 1 month" -msgstr "Egy hónap mutatása" - -#: calendar/gui/calendar-commands.c:536 -msgid "Year" -msgstr "Év" - -#: calendar/gui/calendar-commands.c:536 -msgid "Show 1 year" -msgstr "Egy év mutatása" - -#: calendar/gui/calendar-commands.c:545 calendar/gui/calendar-commands.c:689 -msgid "Create a new appointment" -msgstr "Új megbeszélés készítése" - -#: calendar/gui/calendar-commands.c:549 calendar/gui/calendar-commands.c:681 -msgid "Print this calendar" -msgstr "A naptár nyomtatása" - -#: calendar/gui/calendar-commands.c:553 -msgid "Prev" -msgstr "Elõzõ" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go back in time" -msgstr "Vissza az idõben" - -#: calendar/gui/calendar-commands.c:554 -msgid "Today" -msgstr "Ma" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go to present time" -msgstr "Jelenidõre ugrás" - -#: calendar/gui/calendar-commands.c:555 -msgid "Next" -msgstr "Köv." - -#: calendar/gui/calendar-commands.c:555 -msgid "Go forward in time" -msgstr "Elõre az idõben" - -#: calendar/gui/calendar-commands.c:559 -msgid "Go to" -msgstr "Menj..." - -#: calendar/gui/calendar-commands.c:559 -msgid "Go to a specific date" -msgstr "Megadott idõpontra ugrás" - -#. file menu -#: calendar/gui/calendar-commands.c:666 -msgid "New Ca_lendar" -msgstr "Új nap_tár" - -#: calendar/gui/calendar-commands.c:667 -msgid "Create a new calendar" -msgstr "Új naptár készítése" - -#: calendar/gui/calendar-commands.c:670 -msgid "Open Ca_lendar" -msgstr "Naptár megnyitá_sa" - -#: calendar/gui/calendar-commands.c:671 -msgid "Open a calendar" -msgstr "Naptár megnyitása" - -#: calendar/gui/calendar-commands.c:675 calendar/gui/calendar-commands.c:676 -msgid "Save Calendar As" -msgstr "Naptár mentése mint" - -#: calendar/gui/calendar-commands.c:689 -msgid "_New appointment..." -msgstr "Új _idõpont" - -#: calendar/gui/calendar-commands.c:694 -msgid "New appointment for _today..." -msgstr "Új megbeszélés _mára..." - -#: calendar/gui/calendar-commands.c:695 -msgid "Create a new appointment for today" -msgstr "Mára új megbeszélés betétele" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "Beállítások" - -#: calendar/gui/calendar-commands.c:710 calendar/gui/calendar-commands.c:711 -msgid "About Calendar" -msgstr "Naptár névjegy" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:753 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:753 -msgid "'s calendar" -msgstr "naptára" - -#: calendar/gui/calendar-model.c:452 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"A dátumot a következõ formában tudod beírni: \n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:525 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"A földrajzi pozíció megadása a következõ formátumban lehetséges: \n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:570 -msgid "The percent value must be between 0 and 100" -msgstr "A százalékos érték 0 és 100 között lehet csak" - -#: calendar/gui/calendar-model.c:603 -msgid "The priority must be between 0 and 10" -msgstr "A prioritás 0 és 10 között lehet" - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "Az URI amit a naptár megjelenít" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Riasztás idõpontja: %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Találkozó figyelmeztetés: %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "Nincs elérhetõ összegzés." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Bezár" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "Szundi" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "_Idõpont szerkesztése" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Szundi idõ (percek)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "FIXME: _Töröl" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "FIXME: _Nem teljesített feladat" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "FIXME: Nevek _ellenõrzése" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "FIXME: _Címjegyzék..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "FIXME: Ú_j feladat" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "FIXME: Státusz jelentés _elküldése" - -#: calendar/gui/dialogs/task-editor.c:358 -msgid "FIXME: _Mark Complete" -msgstr "FIXME: _Teljesítettnek jelöl" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "FIXME: Ismétlõ_dés..." - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "FIXME: Ismétlõdés _kihagyása..." - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "FIXME: _Feladat hozzárendelése" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "FIXME: _Válasz" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "FIXME: M_indenkinek" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "FIXME: Ment és bezár" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "A feladat mentése és a párbeszédablak bezárása" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "FIXME: Nyomtat..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "FIXME: Ismétlõdés..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "Ismétlõdési szabályok beállítása" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "FIXME: Feladat hozzáadása" - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "Feladat rendelése valakihez" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "FIXME: Töröl" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "Té_ma:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "Tulaj:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "Ke_zdési dátum:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "Le_járat:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "_Státusz:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"Nem indult még el\n" -"Folyamatban van\n" -"Befejezõdött\n" -"Törölve\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "Nem indult még el" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "_Prioritás:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"Magas\n" -"Normális\n" -"Alacsony\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -msgid "High" -msgstr "Magas" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% kész:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "_Névjegyek..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "Személyes" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "Feladat" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "Teljesítés dátuma:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "Hely:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "Források:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "Megjegyzés" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "Elvégezve" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "Létrehozva" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "Leírás" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "Idõbélyeg" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "Kezdés dátuma" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "Végdátum" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "Földrajzi pozíció" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "Az utolsó módosítás dátuma" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "Hely" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "Rendezõ" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% kész" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:436 -#: calendar/gui/prop.c:609 mail/message-list.c:484 -msgid "Priority" -msgstr "Prioritás" - -#: calendar/gui/e-calendar-table.c:260 -msgid "TaskPad" -msgstr "FeladatTábla" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "Emlékeztetõ" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "Megnyit..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "A feladat megnyitása" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "Késznek jelöl" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "Megjelölés mint kész feladat" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "A feladat törlése" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i perces osztás" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Új _idõpont" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "A megbeszélés szerkesztése..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "A megbeszélés törlése" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "A megbeszélés mozgathatóvá tétele" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "A megjelenés törlése" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Az összes megjelenés törlése" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "Megbeszélés szerkesztése" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "Nincs összegzés" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "Idõpont - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "Feladat - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "Napló bejegyzés - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: Nap_tár..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "FIXME: Új _megbeszélés" - -#: calendar/gui/event-editor.c:1312 -msgid "FIXME: Invite _Attendees..." -msgstr "FIXME: Hallgatók meghívása..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "FIXME: Meghívás törlése..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "FIXME: v_Calendar-ként továbbítás" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "FIXME: Hallgatók meghívása..." - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "Megbeszélésre hallgatók meghívása" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "event-editor-dialog" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "Ö_sszegzés:" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "_Tulaj:" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "Idõ" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "Kezdési idõ:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "Vég idõpont:" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "Minden napos esemény" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "Besorolás" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "Nyil_vános" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "Szemé_lyes" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "_Bizalmas" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"Perc\n" -"Óra\n" -"Nap\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "_Megjelenít" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "_Hang" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "_Program" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "_Levél" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "Levél _valakinek:" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "_Program indítása:" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "Ismétlõdési szabály" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:736 -msgid "None" -msgstr "Semmi" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "Naponta" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Hetente" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Havonta" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Évente" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "label23" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "Minden " - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "nap" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "label24" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "héten" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Hé" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Ke" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Sze" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Csü" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Pé" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Szo" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Va" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "label25" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "Ismétlõdik" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "-ik napján a hónapnak" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1.\n" -"2.\n" -"3.\n" -"4.\n" -"5.\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"Hétfõ\n" -"Kedd\n" -"Szerda\n" -"Csütörtök\n" -"Péntek\n" -"Szombat\n" -"Vasárnap\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "Minden" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "hónapban" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "évben" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "label27" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "Végdátum" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "Örökké ismétlõdjön" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "Vége ha " - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "Vége ezután:" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "megjelenés" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "Kivételek" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "Csere" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "Ismétlõdés" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "január" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "február" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "március" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "április" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "május" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "június" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "július" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "augusztus" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "szeptember" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "szept" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "október" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "november" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "december" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "vasárnap" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "hétfõ" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "kedd" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "kedd" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "szerda" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "szerda" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "csütörtök" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "csüt" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "csüt" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "péntek" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "szombat" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "év" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "hónap" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "két hét" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "hét" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "nap" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "óra" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "perc" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "perc" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "másodperc" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "mp" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "holnap" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "tegnap" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "ma" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "most" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "utolsó" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "ez" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "következõ" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "elsõ" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "harmadik" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "negyedik" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "ötödik" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "hatodik" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "hetedik" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "nyolcadik" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "kilencedik" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "tizedik" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "tizenegyedik" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "tizenkettedik" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "óta" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "Tennivaló készítése" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "Tennivaló szerkesztése" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "Összegzés:" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "Lejárat:" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Prioritás:" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "Megjegyzések:" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "Tennivaló hozzáadása..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "Elem szerkesztése..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Összegzés" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:608 -msgid "Due Date" -msgstr "Lejárat" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "Hátra van" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "Lejárat" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Hozzáad..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "Szerkeszt..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Hetek" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Napok" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Órák" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Óra" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Percek" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Perc" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "Másodpercek" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "Másodperc" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "A találkozód figyelmeztetõ üzenete:" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "Ok" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Év:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Dátumra ugrás" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Kérlek válassz egy dátumot amire lépni akarsz.\n" -"Ha egy napra kattintassz, arra a dátumra leszel\n" -"téve." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Ugorj mára" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1." - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2." - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3." - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4." - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5." - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6." - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7." - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8." - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9." - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10." - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11." - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12." - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13." - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14." - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15." - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16." - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17." - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18." - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19." - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20." - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21." - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22." - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23." - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24." - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25." - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26." - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27." - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28." - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29." - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30." - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31." - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "V" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "H" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "K" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "Sze" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "Cs" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "P" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "Szo" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "Tennivaló elemek" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "Mai nap (%a %b %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Aktuális hét (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Aktuális hét (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Aktuális hét (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Aktuális hónap (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Ezév (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Naptár nyomtatása" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Nyomtatási elõnézet" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "Idõ mutatása" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "Idõ formátum" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "12 órás (de/du)" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "24 órás" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "A hetek kezdete" - -#: calendar/gui/prop.c:351 -msgid "Sunday" -msgstr "Vasárnap" - -#: calendar/gui/prop.c:352 -msgid "Monday" -msgstr "Hétfõ" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "Nap tartomány" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Kérlek add meg, hogy mikor kezdõdjön és mikor\n" -"fejezõdjön be a nap és a hét.\n" -"Az ezen kívülesõ idõpontok nem lesznek\n" -"megjelenítve." - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "Nap kezdete:" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "Nap vége:" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "Megjelenítés színei" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "Színek" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "Tennivaló lista mutatása:" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "Lejáratig hátralévõ idõ" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "Tennivaló lista stílus beállításai:" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "Lejárt elemek kivilágítása" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "Világísd ki a még nem lejárt elemeket" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "A ma lejáró elemek kivilágítása" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "Tennivaló lista beállításai" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "Tennivaló lista" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "Ébresztõk" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -msgid "Alarm Properties" -msgstr "Ébresztõ beállítások" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "Ébresztõ kiírásánál csipogj" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "Hang ébreszés idõzítése" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr " másodperc után" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "Szundi engedése" - -#. populate default frame/box -#: calendar/gui/prop.c:840 -msgid "Defaults" -msgstr "Alapértelmezett" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "Kivág" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "Kivágja a kiválasztott elemet a vágólapra" - -#: composer/e-msg-composer-address-dialog.c:186 -msgid "Copy" -msgstr "Másol" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "Másolja a kiválasztott elemet a vágólapra" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "Beilleszt" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "Beilleszti az elemet a vágólapról" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "A címzettek címeinek kiválasztása" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Címzett lista:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Keres..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Név" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "Cím" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Tulajdonságok..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "To: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 bájt" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bájt" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Csatolás hozzáadása" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Törlés" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Törli a kiválasztott elemeket a csatolási listáról" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Csatol..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Csatolj egy fájlt a levélhez" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Csatolás beállítások" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME típus:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Fájlnév:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "Feladó:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "Címjegyzékben való kereséshez kattints ide" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "Írd be a leveleid feladóját, amilyen címrõl levelezel" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "To:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "Írd be a levél címzettjét" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Írd be, kik kapjanak másolatot a levélrõl" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Írd be azokat a címeket, akik rejtett másolatot kapnak a levélrõl, azaz a " -"címzettnél nem jelenik meg a címük" - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "Téma:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "Írd be a levél címét (subject)" - -#: composer/e-msg-composer.c:450 -msgid "Save as..." -msgstr "Ment mint..." - -#: composer/e-msg-composer.c:461 -#, c-format -msgid "Error saving file: %s" -msgstr "Fájl mentési hiba: %s" - -#: composer/e-msg-composer.c:481 -#, c-format -msgid "Error loading file: %s" -msgstr "Fájl betöltési hiba: %s" - -#: composer/e-msg-composer.c:534 shell/e-shell-view-menu.c:164 -msgid "Evolution" -msgstr "Evolúció" - -#: composer/e-msg-composer.c:540 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"A levél nem lett elküldve.\n" -"\n" -"Menteni akarod a változásaidat?" - -#: composer/e-msg-composer.c:563 -msgid "Open file" -msgstr "Fájl megnyitás" - -#: composer/e-msg-composer.c:675 -msgid "That file does not exist." -msgstr "A fájl nem létezik." - -#: composer/e-msg-composer.c:685 -msgid "That is not a regular file." -msgstr "Nem sima fájl." - -#: composer/e-msg-composer.c:695 -msgid "That file exists but is not readable." -msgstr "Az a fájl létezik, de nem olvasható." - -#: composer/e-msg-composer.c:705 -msgid "That file appeared accesible but open(2) failed." -msgstr "A fájl elérhetõnek látszik, de open(2) hiba történt." - -#: composer/e-msg-composer.c:727 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"A fájl túl nagy (100K fölötti).\n" -"Tényleg be szeretnéd szúrni?" - -#: composer/e-msg-composer.c:748 -msgid "An error occurred while reading the file." -msgstr "Hiba történt megnyitás közben." - -#: composer/e-msg-composer.c:844 shell/e-shell-view-menu.c:433 -msgid "_File" -msgstr "_Fájl" - -#: composer/e-msg-composer.c:850 -msgid "_Open..." -msgstr "_Megnyit..." - -#: composer/e-msg-composer.c:851 -msgid "Load a previously saved message" -msgstr "Elõzõleg mentett üzenet betöltése" - -#: composer/e-msg-composer.c:859 -msgid "_Save..." -msgstr "_Ment..." - -#: composer/e-msg-composer.c:860 -msgid "Save message" -msgstr "Levél mentése" - -#: composer/e-msg-composer.c:868 -msgid "_Save as..." -msgstr "_Ment mint..." - -#: composer/e-msg-composer.c:869 -msgid "Save message with a different name" -msgstr "A levél elmentése másik néven" - -#: composer/e-msg-composer.c:877 -msgid "Save in _folder..." -msgstr "Mentsd _mappába" - -#: composer/e-msg-composer.c:878 -msgid "Save the message in a specified folder" -msgstr "A levél elmentése másik mappába" - -#: composer/e-msg-composer.c:887 -msgid "_Insert text file... (FIXME)" -msgstr "_Szövegfájl beillesztése (FIXME)" - -#: composer/e-msg-composer.c:888 -msgid "Insert a file as text into the message" -msgstr "Fájl beillesztése szövegként" - -#: composer/e-msg-composer.c:897 -msgid "_Send" -msgstr "_Elküld" - -#: composer/e-msg-composer.c:898 -msgid "Send the message" -msgstr "Levél elküldése" - -#: composer/e-msg-composer.c:908 -msgid "_Close..." -msgstr "_Bezár..." - -#: composer/e-msg-composer.c:909 -msgid "Quit the message composer" -msgstr "Kilépés a levélszerkesztõbõl" - -#: composer/e-msg-composer.c:922 shell/e-shell-view-menu.c:477 -msgid "_Edit" -msgstr "_Szerkeszt" - -#: composer/e-msg-composer.c:933 -msgid "_Format" -msgstr "_Formátum" - -#: composer/e-msg-composer.c:939 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:940 -msgid "Send the mail in HTML format" -msgstr "A levelet HTML formátumban küldd" - -#: composer/e-msg-composer.c:953 shell/e-shell-view-menu.c:382 -#: shell/e-shell-view-menu.c:488 shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "_Nézet" - -#: composer/e-msg-composer.c:959 -msgid "Show _attachments" -msgstr "Csatolások _nézete" - -#: composer/e-msg-composer.c:960 -msgid "Show/hide attachments" -msgstr "Csatolások megjelenítése/elrejtése" - -#: composer/e-msg-composer.c:993 -msgid "Send" -msgstr "Elküld" - -#: composer/e-msg-composer.c:994 -msgid "Send this message" -msgstr "Küldd el a levelet" - -#: composer/e-msg-composer.c:1003 -msgid "Attach" -msgstr "Csatolás" - -#: composer/e-msg-composer.c:1004 -msgid "Attach a file" -msgstr "Fájl csatolása" - -#: composer/e-msg-composer.c:1191 -msgid "Compose a message" -msgstr "Levél írása" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "Válassz mappát" - -#: filter/filter-folder.c:246 -msgid "" -msgstr "" - -#: mail/component-factory.c:225 -msgid "Cannot initialize Evolution's mail component." -msgstr "Nem tudom az Evolúció levelezõ komponensét elindítani." - -#: mail/folder-browser-factory.c:24 -msgid "Get mail" -msgstr "Letöltés" - -#: mail/folder-browser-factory.c:24 -msgid "Check for new mail" -msgstr "Új levél jött-e?" - -#: mail/folder-browser-factory.c:25 -msgid "Compose" -msgstr "Szerkesztés" - -#: mail/folder-browser-factory.c:25 -msgid "Compose a new message" -msgstr "Egy új levelet készít" - -#: mail/folder-browser-factory.c:29 -msgid "Reply" -msgstr "Válasz" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to the sender of this message" -msgstr "Válasz küldése a feladónak erre a levélre" - -#: mail/folder-browser-factory.c:30 -msgid "Reply to All" -msgstr "Mindenkinek" - -#: mail/folder-browser-factory.c:30 -msgid "Reply to all recipients of this message" -msgstr "Válasz a feladónak és az összes címzettnek" - -#: mail/folder-browser-factory.c:32 -msgid "Forward" -msgstr "Továbbít" - -#: mail/folder-browser-factory.c:32 -msgid "Forward this message" -msgstr "A levél továbbítása" - -#: mail/folder-browser-factory.c:36 -msgid "Move" -msgstr "Mozgat" - -#: mail/folder-browser-factory.c:36 -msgid "Move message to a new folder" -msgstr "Levél mozgatása más mappába" - -#: mail/folder-browser-factory.c:38 -msgid "Print the selected message" -msgstr "A levél nyomtatása" - -#: mail/folder-browser-factory.c:40 -msgid "Delete this message" -msgstr "A levél törlése" - -#: mail/folder-browser-factory.c:62 -msgid "_Threaded Message List" -msgstr "_Témaszerinti levéllista" - -#: mail/folder-browser-factory.c:72 -msgid "_Print message" -msgstr "Levél _nyomtatása" - -#: mail/folder-browser-factory.c:81 -msgid "_Mark all messages seen" -msgstr "_Minden olvasott levél kijelölése" - -#: mail/folder-browser-factory.c:86 -msgid "E_dit Message" -msgstr "_Levél szerkesztése" - -#: mail/folder-browser-factory.c:92 -msgid "_View Message" -msgstr "Levél meg_tekintése" - -#: mail/folder-browser-factory.c:98 -msgid "_Expunge" -msgstr "_Tisztít" - -#: mail/folder-browser-factory.c:104 -msgid "Mail _Filters ..." -msgstr "Levelezési _szûrõk ..." - -#: mail/folder-browser-factory.c:110 -msgid "_vFolder Editor ..." -msgstr "_vMappa szerkesztõ ..." - -#: mail/folder-browser-factory.c:116 -msgid "_Mail Configuration ..." -msgstr "_Levelezési beállítások ... " - -#: mail/folder-browser-factory.c:122 -msgid "Forget _Passwords" -msgstr "_Jelszó elfelejtése" - -#: mail/folder-browser-factory.c:129 -msgid "_Configure Folder" -msgstr "_Mappa beállítása" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "Azonosítók" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "Szervezet" - -#: mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "Aláírás fájl" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "Szerkeszt" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "Források" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "Levél források" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "Levél küldés" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "Hírcsoport-szerverek" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "Hírcsoport források" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "A levelet HTML formátumban küldd" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "Levelezés beállítása" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"Üdvözöllek az Evolúció levelezési varázslóban!\n" -"A levelezési beállításaiddal kapcsolatos információk\n" -"kitöltésével leveleket tudsz majd fogadni és küldeni.\n" -"Kattints a 'Következõ' gombra a folytatáshoz." - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "Azonosító" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "Levél forrás" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"A levelezési beállításod most teljes.\n" -"Kattints a 'Befejez' gombra a mentéshez" - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:420 -msgid "No GPG/PGP program available." -msgstr "Nincs elérhetõ GPG/PGP program." - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:426 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "Nem tudok GPG/PGP programot pipe-olni: %s" - -#: mail/mail-ops.c:433 -msgid "Fetching mail" -msgstr "Levelek letöltése" - -#: mail/mail-ops.c:445 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Nincs tárgya a levélnek.\n" -"Tényleg elküldjem?" - -#: mail/mail-ops.c:564 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"Egy azonosítót be kell állítanod\n" -"mielõtt levelet küldessz." - -#: mail/mail-ops.c:838 -msgid "Move message(s) to" -msgstr "Levél(levelek) mozgatása más mappába" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "Függõben lévõ mûveletek:" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "Nem teljes üzenet lett a csõbe írva!" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "Parancsok olvasásánál hiba történt egy feladó threadtõl." - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "Hibás üzenet az feladó threadtõl?" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "Nem tudom a dialógust elkészíteni." - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "A lekérdezést megszakítottad." - -#: mail/message-list.c:466 -msgid "Online Status" -msgstr "Online státusz" - -#: mail/message-list.c:502 -msgid "From" -msgstr "Feladó" - -#: mail/message-list.c:509 -msgid "Subject" -msgstr "Téma" - -#: mail/message-list.c:516 -msgid "Date" -msgstr "Dátum" - -#: mail/message-list.c:523 -msgid "Received" -msgstr "Kézbesítve" - -#: mail/message-list.c:530 -msgid "To" -msgstr "Címzett" - -#: mail/message-list.c:537 -msgid "Size" -msgstr "Méret" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Evolúció telepítés" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Úgy látszik, elsõ alkalommal futtatod az Evolúciót." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"Kérlek nyomd meg az 'OK' gombot az Evolúció felhasználói fájljainak " -"telepítéséhez" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Nem tudom létrehozni a könyvtárat\n" -"%s\n" -"Hiba: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Nem tudom másolni a fájlokat\n" -"'%s'-be." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Az Evolúció fájljai sikeresen települtek." - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"Az '%s' fájl nem egy könyvtár.\n" -"Kérlek mozgasd el a fájlt hogy az Evolúció\n" -"települni tudjon." - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"Az '%s' könyvtár létezik.\n" -"Kérlek töröld a fájlt hogy az Evolúció\n" -"települni tudjon." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Nem tudom elkészíteni a megadott mappát:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "A megadott mappa név nem jó." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolúció - Új mappa készítése" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"A kiválasztott mappa típusa nem jó a megadott\n" -"mûvelethez." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "Új..." - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "(Névtelen)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy nem található a $PATH-odban." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "A Bug buddy-t nem tudom futtatni." - -#: shell/e-shell-view-menu.c:166 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:168 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Az Evolúció egy munkacsoport program \n" -"levelezéshez, naptár és címjegyzék funkciókkal\n" -"a GNOME grafikus környezethez." - -#: shell/e-shell-view-menu.c:318 -msgid "Go to folder..." -msgstr "Mappába menj..." - -#: shell/e-shell-view-menu.c:376 -msgid "_New" -msgstr "Ú_j" - -#: shell/e-shell-view-menu.c:388 -msgid "_Folder" -msgstr "_Mappa" - -#: shell/e-shell-view-menu.c:394 -msgid "Evolution bar _shortcut" -msgstr "Evolúció indítósáv _ikon" - -#: shell/e-shell-view-menu.c:403 -msgid "_Mail message (FIXME)" -msgstr "_Levél (FIXME)" - -#: shell/e-shell-view-menu.c:409 -msgid "_Appointment (FIXME)" -msgstr "_Idõpont (FIXME)" - -#: shell/e-shell-view-menu.c:415 -msgid "_Contact (FIXME)" -msgstr "_Címjegyzék (FIXME)" - -#: shell/e-shell-view-menu.c:421 -msgid "_Task (FIXME)" -msgstr "_Munka (FIXME)" - -#: shell/e-shell-view-menu.c:443 -msgid "_Go to folder..." -msgstr "Menj a ... _mappába" - -#: shell/e-shell-view-menu.c:444 -msgid "Display a different folder" -msgstr "Egy másik mappa mutatása" - -#: shell/e-shell-view-menu.c:451 -msgid "_Create new folder..." -msgstr "Új m_appa készítése..." - -#: shell/e-shell-view-menu.c:452 shell/e-shell-view-menu.c:464 -msgid "Create a new folder" -msgstr "Új mappa készítése" - -#: shell/e-shell-view-menu.c:463 -msgid "E_xit..." -msgstr "K_ilép..." - -#: shell/e-shell-view-menu.c:494 -msgid "Show _shortcut bar" -msgstr "Oldal_sáv mutatása" - -#: shell/e-shell-view-menu.c:495 -msgid "Show the shortcut bar" -msgstr "Az oldalsáv mutatása" - -#: shell/e-shell-view-menu.c:500 -msgid "Show _folder bar" -msgstr "Mapp_asáv mutatása" - -#: shell/e-shell-view-menu.c:501 -msgid "Show the folder bar" -msgstr "A mappákat tartalmazó sáv mutatása" - -#: shell/e-shell-view-menu.c:523 -msgid "_Actions" -msgstr "_Mûveletek" - -#: shell/e-shell-view-menu.c:534 -msgid "_Help" -msgstr "_Súgó" - -#: shell/e-shell-view-menu.c:540 -msgid "Help _index" -msgstr "Súgó _tartalomjegyzék" - -#: shell/e-shell-view-menu.c:547 -msgid "Getting _started" -msgstr "_Induláshoz" - -#: shell/e-shell-view-menu.c:554 -msgid "Using the _mailer" -msgstr "A _levelezõ használata" - -#: shell/e-shell-view-menu.c:561 -msgid "Using the _calendar" -msgstr "A _naptár használata" - -#: shell/e-shell-view-menu.c:568 -msgid "Using the c_ontact manager" -msgstr "A _címjegyzék használata" - -#: shell/e-shell-view-menu.c:578 -msgid "_Submit bug report" -msgstr "_Hibajelentés küldése" - -#: shell/e-shell-view-menu.c:579 -msgid "Submit bug report using Bug Buddy" -msgstr "Hibajelentés feladása bug-buddy-val" - -#: shell/e-shell-view-menu.c:588 -msgid "_About Evolution..." -msgstr "_Evolúció névjegy" - -#: shell/e-shell-view-menu.c:589 -msgid "Show information about Evolution" -msgstr "Információk megjelenítése az Evolúcióval kapcsolatban" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "(Nincs mappa mutatva)" - -#: shell/e-shell-view.c:342 -msgid "Folders" -msgstr "Mappák" - -#: shell/e-shell-view.c:740 -#, c-format -msgid "Evolution - %s" -msgstr "Evolúció - %s" - -#: shell/e-shell.c:291 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Nem tudom beállítani a helyi tárterületet -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "_Kis ikonok" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Kis ikonok mutatása az elemeken" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "_Nagy ikonok" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Nagy ikonok mutatása az elemeken" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Aktivál" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Az elem aktiválása" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Vedd le ezt az elemet az indítósávról" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Nem sikerül elmenteni az elemeket." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(névtelen)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Nincs hiba" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Alapvetõ hiba" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "A megadott néven már létezik mappa" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "A megadott mappatípus nem jó" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "I/O hiba" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Nincs elég hely a mappa elkészítéséhez" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "A megadott mappát nem találom" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "A funkció nincs még ebben a tárolóban megírva" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Jogosultsági hiba" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "A mûvelet nem támogatott" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "A megadott típus nem támogatott ebben a tárolóban." - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Nem ismert hiba" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "A kijelölt mappák megtekintése" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Helló, köszönjük, hogy letöltötted az Evolution csomag fejlesztõi \n" -"verzióját.\n" -"\n" -"Az Evolúció csapat sokat és keményen dolgozott hogy az Evolúciót \n" -"robusztussá, széppé, jól használhatóvá, gyorssá és jól tervezetté \n" -"tegye, ahogy csak lehetett. Nagyon fáradtak vagyunk. Még nem vagyunk \n" -"kész, még nem.\n" -"\n" -"Mikor elindítod az Evolúciót, kérlek értsd meg, hogy a munkánk nagy\n" -"része a backend (háttér) írására irányult, amely az egész rendszert\n" -"hajtja, és nem a felhasználói felületre. Ez csak a hegycsúcs teteje,\n" -"és még sok szeretetet fogunk beleölni az UI fejlesztérébe. Tudnod kell\n" -"viszont, hogy amit használsz, nem demoware.\n" -"Tehát, itt az idõ a mentegetõzésre. Az Evolúció fog: crash-elni, \n" -"elveszti a leveleid, kósza processzeket hagy futni, megeszi a teljes\n" -"CPU idõdet, HTML leveleket küld véletlenszerû levlistáknak, és lejárat\n" -"a kollegáid és a barátaid elõtt. Használd a saját felelõsségedre.\n" -"Azért reméljük, élvezni fogod a kemény munkánk eredményét, és várjuk\n" -"hozzájárulásod! \n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Köszönettel\n" -"Az Evolúció Csapat\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "Nem tudom elindítani az Evolúció shell-t." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "Nem tudom elindítani a Bonobo komponens rendszert." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Mezõk" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Csoportosítás" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Rendezés" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Szûrõ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "Elemválasztó" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"Oszlop hozzáadását a táblázathoz legegyszerûbben\n" -"a megfelelõ helyre húzással teheted meg." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Meglévõ mezõk" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Ilyen rendezésben mutasd" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Hozzáad >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Töröl" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Kísérleti" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Foglalt" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Üzemen kívül" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Nincs információ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "_Mások meghívása..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Beállítások" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Csak a _munkaórák mutatása" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "_Nagyított mutatása" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "_Szabad/foglalt frissítése" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Automatikus kiszedés" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Minden ember és erõforrás" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Minden _ember és egy erõforrás" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "_A kért emberek" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "A kért emberek és egy e_rõforrás" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Megbeszélés _kezdõdik:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Megbeszélés _vége:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Minden meghívott" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "HKSCPsV" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Csoportosítás %i" diff --git a/po/it.po b/po/it.po deleted file mode 100644 index 96b215002b..0000000000 --- a/po/it.po +++ /dev/null @@ -1,3721 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# Clara Tattoni , 2000 -# -msgid "" -msgstr "" -"Project-Id-Version: Evolution 1.0\n" -"POT-Creation-Date: 2000-08-02 16:37+0200\n" -"PO-Revision-Date: 2000-07-15 23:33+02:00\n" -"Last-Translator: Clara Tattoni \n" -"Language-Team: Italiano \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -#, fuzzy -msgid "Could not initialize Bonobo" -msgstr "Impossibile inizializzare Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -#, fuzzy -msgid "categories" -msgstr "Ca_tegorie" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -#, fuzzy -msgid "Available Categories:" -msgstr "Campi disponibili" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1168 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "_Appuntamenti" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1169 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "_Richieste di appuntamenti" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/event-editor.c:1171 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "Invia _Messaggio" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/event-editor.c:1172 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "_Contatti" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "_Compito" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/event-editor.c:1174 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "_Richiesta compiti" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1175 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "_Ingressi giornalieri" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "_Note" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/event-editor.c:1178 calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "Scegli sc_heda..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "Stile _Memo" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "Definisci _Stili di Stampa" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "_Invia" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/event-editor.c:1196 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Salva allegato..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -#, fuzzy -msgid "_Delete" -msgstr "Elimina" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "_Sposta nella cartella..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "_Copia nella cartella..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/event-editor.c:1202 -#, fuzzy -msgid "Page Set_up" -msgstr "Impostazione pagina" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "A_nteprima di stampa" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "Incolla _speciale..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "Segna come _non letto" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Oggetto" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/event-editor.c:1238 calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "_Articolo" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/event-editor.c:1239 calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "Articolo _non letto" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "P_rimo articolo nella cartella" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "U_ltimo articolo nella cartella" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "_Strandard" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "Pe_rsonalizza..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "Prec_edente" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "Succe_ssivo" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1267 -#, fuzzy -msgid "_Toolbars" -msgstr "S_trumenti" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "_File..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "_Articolo" - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "Oggetto..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/event-editor.c:1279 -#, fuzzy -msgid "FIXME: _Font..." -msgstr "Carattere..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "_Paragrafo..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "Impo_sta questa scheda..." - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "_imposta una scheda..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "Pu_bblica scheda..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "Pubblica _scheda come..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "Or_tografia..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/event-editor.c:1303 -#, fuzzy -msgid "_Forms" -msgstr "Formato" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "_Nuovo Contatto" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "Nuovo _Contatto della Stessa Compagnia" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "Nuova _Lettera per il Contatto" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "Nuovo _Messaggio per il Contatto" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "Nuovo meetin_g con Contatto" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "O_rganizza un Meeting..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "Nuovo _Compito per il Contatto" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "Nuova a_ggiunta quotidiana per il Contatto" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "_Mostra la Mappa degli Indirizzi" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "_Apri Pagina Web" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "Inoltra come _vCard" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1316 -#, fuzzy -msgid "FIXME: For_ward" -msgstr "_Inoltra" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "_Inserisci" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/event-editor.c:1330 -#, fuzzy -msgid "F_ormat" -msgstr "Formato" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/event-editor.c:1331 shell/e-shell-view-menu.c:515 -msgid "_Tools" -msgstr "S_trumenti" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/event-editor.c:1332 -#, fuzzy -msgid "Actio_ns" -msgstr "_Azioni" - -#: addressbook/contact-editor/e-contact-editor.c:839 -#, fuzzy -msgid "Save and Close" -msgstr "Salva ed Esci" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "Salva l'appuntamento ed esci dalla finestra di dialogo" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:673 -#, fuzzy -msgid "Print..." -msgstr "Stampa" - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Stampa questo articolo" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "Inserisci un File..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Inserisci un file come allegato" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:426 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:39 -msgid "Delete" -msgstr "Elimina" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/event-editor.c:1387 calendar/gui/gncal-todo.c:336 -#, fuzzy -msgid "Delete this item" -msgstr "Elimina questo messaggio" - -#: addressbook/contact-editor/e-contact-editor.c:856 -#: calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "Precedente" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Vai al precedente" - -#: addressbook/contact-editor/e-contact-editor.c:859 -#: calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "Successivo" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Vai al successivo" - -#: addressbook/contact-editor/e-contact-editor.c:862 -#: calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "Aiuto" - -#: addressbook/contact-editor/e-contact-editor.c:863 -#: calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Vedere l'aiuto in linea" - -#: addressbook/contact-editor/e-contact-editor.c:1278 -#, fuzzy -msgid "Assistant" -msgstr "Nome dell'_Assistente" - -#: addressbook/contact-editor/e-contact-editor.c:1279 -#: addressbook/contact-editor/e-contact-editor.c:1383 -#, fuzzy -msgid "Business" -msgstr "_Ufficio" - -#: addressbook/contact-editor/e-contact-editor.c:1280 -#, fuzzy -msgid "Business 2" -msgstr "_Ufficio" - -#: addressbook/contact-editor/e-contact-editor.c:1281 -#, fuzzy -msgid "Business Fax" -msgstr "_Fax Ufficio" - -#: addressbook/contact-editor/e-contact-editor.c:1282 -msgid "Callback" -msgstr "Richiamare" - -#: addressbook/contact-editor/e-contact-editor.c:1283 -msgid "Car" -msgstr "Auto" - -#: addressbook/contact-editor/e-contact-editor.c:1284 -#, fuzzy -msgid "Company" -msgstr "_Compagnia" - -#: addressbook/contact-editor/e-contact-editor.c:1285 -#: addressbook/contact-editor/e-contact-editor.c:1384 -#, fuzzy -msgid "Home" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1286 -#, fuzzy -msgid "Home 2" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1287 -#, fuzzy -msgid "Home Fax" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1288 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1289 -#, fuzzy -msgid "Mobile" -msgstr "C_ellulare" - -#: addressbook/contact-editor/e-contact-editor.c:1290 -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Other" -msgstr "Altro" - -#: addressbook/contact-editor/e-contact-editor.c:1291 -msgid "Other Fax" -msgstr "Altro fax" - -#: addressbook/contact-editor/e-contact-editor.c:1292 -#, fuzzy -msgid "Pager" -msgstr "Pagina" - -#: addressbook/contact-editor/e-contact-editor.c:1293 -#, fuzzy -msgid "Primary" -msgstr "Posta Elettronica" - -#: addressbook/contact-editor/e-contact-editor.c:1294 -msgid "Radio" -msgstr "Radio" - -#: addressbook/contact-editor/e-contact-editor.c:1295 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1296 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1340 -msgid "Primary Email" -msgstr "Posta Elettronica" - -#: addressbook/contact-editor/e-contact-editor.c:1341 -msgid "Email 2" -msgstr "Posta elettronica 2" - -#: addressbook/contact-editor/e-contact-editor.c:1342 -msgid "Email 3" -msgstr "Posta elettronica 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Aggiungi" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Tipi di Telefono" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Nuovo tipo di telefono" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -msgid "Add" -msgstr "Aggiungi" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Editor dei Contatti" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "Nome e Cognome" - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Memorizza come:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -#, fuzzy -msgid "Web page address:" -msgstr "Indirizzo email:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Vuole ricevere messaggi in _HTML" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Indirizzo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -#, fuzzy -msgid "_Business" -msgstr "_Ufficio" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -#, fuzzy -msgid "_Home" -msgstr "_Casa" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -#, fuzzy -msgid "Business _Fax" -msgstr "_Fax Ufficio" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -#, fuzzy -msgid "_Mobile" -msgstr "C_ellulare" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "_Ufficio" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "Indirizzo a cui _spedire" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "C_ontatti" - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "Ca_tegorie" - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -#, fuzzy -msgid "_Job title:" -msgstr "_Titolo" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "_Compagnia" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -msgid "General" -msgstr "Generale" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "_Dipartimento" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "_Ufficio" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Professione" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "_Nickname" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "Coniuge" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Co_mpleanno" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -#, fuzzy -msgid "_Assistant's name:" -msgstr "Nome dell'_Assistente" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "Nome del _Manager" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "Anni_versario" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "No_te" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#, fuzzy -msgid "Details" -msgstr "Predefinito" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Verifiare Nome e Cognome" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Titolo" - -#: addressbook/contact-editor/fullname-strings.h:9 -#, fuzzy -msgid "_First:" -msgstr "Formato" - -#: addressbook/contact-editor/fullname-strings.h:10 -#, fuzzy -msgid "_Middle:" -msgstr "_Titolo" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:12 -#, fuzzy -msgid "_Suffix:" -msgstr "_Ufficio" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Sig.\n" -"Sig.ra\n" -"Dott.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:420 -#: calendar/gui/calendar-commands.c:544 -#, fuzzy -msgid "New" -msgstr "_Nuovo" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Create a new contact" -msgstr "Crea un nuovo contatto " - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find" -msgstr "Trova" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find a contact" -msgstr "Trova un contatto" - -#: addressbook/gui/component/addressbook.c:425 -#: addressbook/gui/component/addressbook.c:492 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:37 -msgid "Print" -msgstr "Stampa" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Print contacts" -msgstr "Stampa contatti" - -#: addressbook/gui/component/addressbook.c:426 -#, fuzzy -msgid "Delete a contact" -msgstr "Selezionare un contatto" - -#: addressbook/gui/component/addressbook.c:499 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "Come _Tabella" - -#: addressbook/gui/component/addressbook.c:506 -#, fuzzy -msgid "_New Contact" -msgstr "_Contatti" - -#: addressbook/gui/component/addressbook.c:514 -msgid "N_ew Directory Server" -msgstr "N_uovo Server delle Cartelle" - -#: addressbook/gui/component/addressbook.c:593 -#, fuzzy -msgid "Unable to open addressbook" -msgstr "Impossibile aprire la rubruca" - -#: addressbook/gui/component/addressbook.c:598 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Impossibile aprire questa rubruca. Questo significa che \n" -"è stata inserita una URI non corretta, oppure che si è\n" -"cercato di accedere a un server LDAP senza avere il supporto \n" -"LDAP compilato. Se si è inserita una URI, controllarne \n" -"la correttezza ed inserirla nuovamente. Altrimenti, è \n" -"probabile che si sia cercato di accedere ad un server LDAP. \n" -"Se si desidera usare LDAP, è necessario scaricare e \n" -"installare OpenLDAP, ricompilare e reinstallare Evolution.\n" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "Salva come vCard" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "Come _Minicards" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "La URI visualizzata dal Browser delle cartelle" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -#, fuzzy -msgid "a" -msgstr "am" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -#, fuzzy -msgid "e" -msgstr "Me" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -#, fuzzy -msgid "m" -msgstr "am" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -#, fuzzy -msgid "o" -msgstr "A" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -#, fuzzy -msgid "r" -msgstr "Ve" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -#, fuzzy -msgid "u" -msgstr "Do" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -#, fuzzy -msgid "Description:" -msgstr "Nessuna descrizione" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -#, fuzzy -msgid "LDAP Server:" -msgstr "Server:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Numero Port" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Nome:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Non c'è niente da mostrare in questa view\n" -"\n" -"Fare doppio click qui per creare un nuovo contatto." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -#, fuzzy -msgid "Page Setup:" -msgstr "Impostazione pagina" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Nome dello stile" - -#: addressbook/printing/e-contact-print.glade.h:9 -#, fuzzy -msgid "Preview:" -msgstr "Precedente" - -#: addressbook/printing/e-contact-print.glade.h:10 -#, fuzzy -msgid "Options" -msgstr "Opzioni" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Allega" - -#: addressbook/printing/e-contact-print.glade.h:12 -#, fuzzy -msgid "Sections:" -msgstr "Secondi" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Concatenati l'un l'altro" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Titolo per ogni lettera" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Inizia su una nuova pagina" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Numero di colonne:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Moduli bianchi alla fine" - -#: addressbook/printing/e-contact-print.glade.h:19 -#, fuzzy -msgid "Fonts" -msgstr "Mese" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -#, fuzzy -msgid "Font..." -msgstr "Stampa" - -#: addressbook/printing/e-contact-print.glade.h:22 -#, fuzzy -msgid "Headings" -msgstr "Titoli" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -#, fuzzy -msgid "Body" -msgstr "Oggi" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Ombreggiatura" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Stampa usando ombreggiatura grigia" - -#: addressbook/printing/e-contact-print.glade.h:28 -#, fuzzy -msgid "Format" -msgstr "Formato" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Carta" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Tipo" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -msgid "label26" -msgstr "etichetta" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Dimensioni:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Larghezza:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Altezza:" - -#: addressbook/printing/e-contact-print.glade.h:35 -#, fuzzy -msgid "Paper source:" -msgstr "Fonte della posta" - -#: addressbook/printing/e-contact-print.glade.h:36 -#, fuzzy -msgid "Margins" -msgstr "Icone _grandi" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Superiore:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Inferiore:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Sinistra:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Destra:" - -#: addressbook/printing/e-contact-print.glade.h:41 -#, fuzzy -msgid "Page" -msgstr "Pagina" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Dimensione:" - -#: addressbook/printing/e-contact-print.glade.h:47 -#, fuzzy -msgid "Orientation" -msgstr "Organizzazione" - -#: addressbook/printing/e-contact-print.glade.h:48 -#, fuzzy -msgid "Portrait" -msgstr "Prioritario" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:52 -#, fuzzy -msgid "Header" -msgstr "Anno" - -#: addressbook/printing/e-contact-print.glade.h:53 -#, fuzzy -msgid "Footer:" -msgstr "Filtra" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -#, fuzzy -msgid "am" -msgstr "am" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "Linea:" - -#: calendar/gui/calendar-commands.c:57 -#, fuzzy -msgid "Headings:" -msgstr "Titoli" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "Giorni liberi:" - -#: calendar/gui/calendar-commands.c:59 -#, fuzzy -msgid "Appointments:" -msgstr "_Appuntamenti" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "Giorni sottolineati:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "Data" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "Data odierna" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "Compito non ancora svolto:" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "Compito da svolgere oggi:" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "Compito svolto: " - -#: calendar/gui/calendar-commands.c:175 -#, fuzzy -msgid "Gnome Calendar" -msgstr "Usare il _Calendario" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "Il calendario personale e il gestore degli impegni di GNOME." - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "File non trovato" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "Apri calendario" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "Salva calendario" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Giorno" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "Mostra 1 giorno" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "5 giorni" - -#: calendar/gui/calendar-commands.c:525 -#, fuzzy -msgid "Show the working week" -msgstr "Mostra la settimana lavorativa" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Settimana" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "Mostra 1 settimana" - -#: calendar/gui/calendar-commands.c:531 -#, fuzzy -msgid "Month" -msgstr "Mese" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "Mostra 1 mese" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "Anno" - -#: calendar/gui/calendar-commands.c:535 -#, fuzzy -msgid "Show 1 year" -msgstr "Mostra 1 anno" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "Crea un nuovo appuntamento" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -#, fuzzy -msgid "Print this calendar" -msgstr "Stampa il _Calendario" - -#: calendar/gui/calendar-commands.c:552 -#, fuzzy -msgid "Prev" -msgstr "Precedente" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "Vai indietro nel tempo" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Oggi" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "Vai al presente" - -#: calendar/gui/calendar-commands.c:554 -msgid "Next" -msgstr "Successivo" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "Vai avanti nel tempo" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "Vai a " - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "Vai ad una data specifica" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -#, fuzzy -msgid "New Ca_lendar" -msgstr "Nuovo _Calendario" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "Crea un nuovo _Calendario" - -#: calendar/gui/calendar-commands.c:663 -#, fuzzy -msgid "Open Ca_lendar" -msgstr "Apri _Calendario" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "Apri un calendario" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "Salva Calendario come" - -#: calendar/gui/calendar-commands.c:682 -#, fuzzy -msgid "_New appointment..." -msgstr "_Nuovo Appuntamento..." - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "Nuovo appuntamento per _oggi..." - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "Crea nuovo appuntamento per oggi..." - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "Preferenze" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -#, fuzzy -msgid "About Calendar" -msgstr "Riguardo il Calendario" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "%2$s%1$s" - -#: calendar/gui/calendar-commands.c:746 -#, fuzzy -msgid "'s calendar" -msgstr "calendario di" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "La URI che il calendario visualizzerà" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Avviso alle %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Avviso dell'appuntamento alle:%A %b %d %Y %H:%M" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -#, fuzzy -msgid "Close" -msgstr "Colori" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -#, fuzzy -msgid "Snooze" -msgstr "Sonnellino" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "_Appuntamenti" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i divisioni per minuto" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "Nuovo appuntamento..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Edita questo appuntamento..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "Elimina questo appuntamento" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Rendi rimandabile questo appuntamento" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "Elimina questa ricorrenza" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Elimina tutte le ricorrenze" - -#: calendar/gui/event-editor.c:291 -#, fuzzy -msgid "Edit Appointment" -msgstr "_Appuntamenti" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "Niente riassunto" - -#: calendar/gui/event-editor.c:300 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "Appuntamenti -%s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "" - -#: calendar/gui/event-editor.c:306 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "Ingressi giornalieri -%s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1198 -#, fuzzy -msgid "FIXME: _Delete" -msgstr "_Elimina" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "Cal_endario" - -#: calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "_Controlla nomi" - -#: calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "R_ubrica..." - -#: calendar/gui/event-editor.c:1308 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "Nuovo _appuntamento" - -#: calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "Ric_orrenza..." - -#: calendar/gui/event-editor.c:1312 -#, fuzzy -msgid "FIXME: Invite _Attendees..." -msgstr "Invita Assistenti" - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "_Annulla Invito..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "Inoltra come v_Calrendar" - -#: calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "Salva ed Esci" - -#: calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "Stampa..." - -#: calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "Ricorrenza..." - -#: calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "Configura regole di ricorrenza" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "Invita Assistenti" - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "Invita gli assistenti al meeting" - -#: calendar/gui/event-editor.c:1386 -#, fuzzy -msgid "FIXME: Delete" -msgstr "Elimina" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "Carta" - -#: calendar/gui/getdate.y:395 -#, fuzzy -msgid "may" -msgstr "Giorno" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -#, fuzzy -msgid "sunday" -msgstr "Domenica" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "Lunedì" - -#: calendar/gui/getdate.y:406 -#, fuzzy -msgid "tuesday" -msgstr "Domenica" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -#, fuzzy -msgid "thur" -msgstr "Altro" - -#: calendar/gui/getdate.y:412 -#, fuzzy -msgid "thurs" -msgstr "Altro" - -#: calendar/gui/getdate.y:413 -#, fuzzy -msgid "friday" -msgstr "Posta Elettronica" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -#, fuzzy -msgid "year" -msgstr "Anno" - -#: calendar/gui/getdate.y:421 -#, fuzzy -msgid "month" -msgstr "Mese" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -#, fuzzy -msgid "week" -msgstr "Settimana" - -#: calendar/gui/getdate.y:424 -#, fuzzy -msgid "day" -msgstr "Oggi" - -#: calendar/gui/getdate.y:425 -#, fuzzy -msgid "hour" -msgstr "Ora" - -#: calendar/gui/getdate.y:426 -#, fuzzy -msgid "minute" -msgstr "Minuto" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "secondi" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "Oggi" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Incolla" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -#, fuzzy -msgid "next" -msgstr "Successivo" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -#, fuzzy -msgid "third" -msgstr "Altro" - -#: calendar/gui/getdate.y:445 -#, fuzzy -msgid "fourth" -msgstr "Ora" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -#, fuzzy -msgid "eighth" -msgstr "Altezza:" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "Stampa" - -#: calendar/gui/getdate.y:451 -#, fuzzy -msgid "tenth" -msgstr "Mese" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "Crea una cosa da fare" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "Modifica cosa da fare" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "Riassunto:" - -#: calendar/gui/gncal-todo.c:186 -#, fuzzy -msgid "Due Date:" -msgstr "Scadenza" - -#: calendar/gui/gncal-todo.c:195 -#, fuzzy -msgid "Priority:" -msgstr "Prioritario" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "Commenti" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "Aggiungi..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "Modifica..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Riassunto" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:604 -#, fuzzy -msgid "Due Date" -msgstr "Data" - -#: calendar/gui/gncal-todo.c:436 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Prioritario" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "Tempo rimasto" - -#. Label -#: calendar/gui/gncal-todo.c:449 -#, fuzzy -msgid "To-do list" -msgstr "S_trumenti" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Aggiungi..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -#, fuzzy -msgid "Edit..." -msgstr "Aggiungi..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Settimane" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Giorni" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Ore" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Ora" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Minuti" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Minuto" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -#, fuzzy -msgid "Seconds" -msgstr "Secondi" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -#, fuzzy -msgid "Second" -msgstr "Secondi" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "Promemoria dell'appuntamento alle" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Dom" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Lun" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Mar" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Mer" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Gio" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Ven" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Sab" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Anno:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Vai alla data" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Selezionare la data in cui si vuole andare.\n" -"Clickando su un giorno, si viene spostati\n" -"su quella data." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Vai a oggi" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "Do" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "Lu" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "Ma" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "We" -msgstr "Me" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "Gi" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "Fr" -msgstr "Ve" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "Sa" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "Da fare" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "Data odierna(%a %b %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Settimana corrente (%s %s %d - %s %d %d) " - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Settimana corrente (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Settimana in corso (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Mese corrente (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Anno corrente (%Y)" - -#: calendar/gui/print.c:1084 -#, fuzzy -msgid "Print Calendar" -msgstr "Usare il _Calendario" - -#: calendar/gui/print.c:1249 -#, fuzzy -msgid "Print Preview" -msgstr "Anteprima di stampa" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "Visualizza ora" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "Formato" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "12 ore (AM/PM)" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "24 ore" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "La Settimana comincia da" - -#: calendar/gui/prop.c:347 -#, fuzzy -msgid "Sunday" -msgstr "Domenica" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "Lunedì" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "Ampiezza della giornata" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Selezionare le ore di inizio e di fine\n" -"che si desiderano visualizzare nella schermata\n" -"del giorno e della settimana. Le ore al di fuori \n" -"di questo intervallo non saranno visualizzate. " - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "Inizio giornata:" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "Fine giornata:" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "Colori da usare" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "Colori" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "Mostra lista compiti:" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "Cronometra fino al termine" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "Opzioni dello stile della lista dei compiti:" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "Evidenzia compiti svolti" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "Evidenzia compiti da svolgere" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "Evidenzia compiti svolti oggi" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "Proprietà della lista dei compiti" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "Lista dei compiti" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "Avviso sonoro" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -#, fuzzy -msgid "Alarm Properties" -msgstr "Proprietà dell'avviso sonoro" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "Interruzione avviso sonoro dopo:" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "secondi" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "Abilita suoneria per" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -#, fuzzy -msgid "Defaults" -msgstr "Predefinito" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut" -msgstr "Taglia" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Taglia l'oggetto selezionato nella clipboard" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy" -msgstr "Copia" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Copia gli oggetti selezionati sulla clipboard" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste" -msgstr "Incolla" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Incolla un oggetto dalla clipboard" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Seleziona gli indirizzi dei destinatari" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Elenco dei destinatari:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Cerca..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Nome" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "Indirizzo" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Proprietà..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "A: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -#, fuzzy -msgid "Cc: >>" -msgstr "A: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -#, fuzzy -msgid "Bcc: >>" -msgstr "A: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -#, fuzzy -msgid "label9" -msgstr "etichetta" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -#, fuzzy -msgid "label7" -msgstr "etichetta" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -#, fuzzy -msgid "label8" -msgstr "etichetta" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Aggiungere allegato" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Rimuovere" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Rimuovere l'oggetto selezionato dalla lista degli allegati" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Aggiungere allegato..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Allegare un file al messaggio" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -#, fuzzy -msgid "Attachment properties" -msgstr "Proprietà dell'avviso sonoro" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:10 -#, fuzzy -msgid "File name:" -msgstr "Nome e cognome" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Fare clic qui per la rubrica" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "A:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Inserire i destinatari del messaggio" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "" -"Inserire gli indirizzi che riceveranno una copia conforme del messaggio" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Inserire gli indirizzi che riceveranno una copia conforme del messaggio " -"senza apparire nell'elenco dei destinatari del messaggio." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Inserire il titolo dell'email" - -#: composer/e-msg-composer.c:444 -#, fuzzy -msgid "Save as..." -msgstr "Cerca..." - -#: composer/e-msg-composer.c:455 -#, fuzzy, c-format -msgid "Error saving file: %s" -msgstr "Errore nel caricare il file: %s" - -#: composer/e-msg-composer.c:475 -#, c-format -msgid "Error loading file: %s" -msgstr "Errore nel caricare il file: %s" - -#: composer/e-msg-composer.c:494 -#, fuzzy -msgid "Discard this message?" -msgstr "Inoltra questo messaggio" - -#: composer/e-msg-composer.c:511 -msgid "Open file" -msgstr "Apri file" - -#: composer/e-msg-composer.c:623 -msgid "That file does not exist." -msgstr "" - -#: composer/e-msg-composer.c:633 -msgid "That is not a regular file." -msgstr "" - -#: composer/e-msg-composer.c:643 -msgid "That file exists but is not readable." -msgstr "" - -#: composer/e-msg-composer.c:653 -msgid "That file appeared accesible but open(2) failed." -msgstr "" - -#: composer/e-msg-composer.c:675 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" - -#: composer/e-msg-composer.c:696 -msgid "An error occurred while reading the file." -msgstr "" - -#: composer/e-msg-composer.c:792 shell/e-shell-view-menu.c:438 -#, fuzzy -msgid "_File" -msgstr "Filtra" - -#: composer/e-msg-composer.c:798 -#, fuzzy -msgid "_Open..." -msgstr "_Apri" - -#: composer/e-msg-composer.c:799 -msgid "Load a previously saved message" -msgstr "" - -#: composer/e-msg-composer.c:807 -msgid "_Save..." -msgstr "" - -#: composer/e-msg-composer.c:808 -#, fuzzy -msgid "Save message" -msgstr "Invia un nuovo messaggio" - -#: composer/e-msg-composer.c:816 -#, fuzzy -msgid "_Save as..." -msgstr "Cerca..." - -#: composer/e-msg-composer.c:817 -#, fuzzy -msgid "Save message with a different name" -msgstr "Salva il messaggio in una cartella specificata" - -#: composer/e-msg-composer.c:825 -msgid "Save in _folder..." -msgstr "Salva nella _cartella..." - -#: composer/e-msg-composer.c:826 -msgid "Save the message in a specified folder" -msgstr "Salva il messaggio in una cartella specificata" - -#: composer/e-msg-composer.c:835 -msgid "_Insert text file... (FIXME)" -msgstr "" - -#: composer/e-msg-composer.c:836 -#, fuzzy -msgid "Insert a file as text into the message" -msgstr "Allegare un file al messaggio" - -#: composer/e-msg-composer.c:845 -#, fuzzy -msgid "_Send" -msgstr "Invia" - -#: composer/e-msg-composer.c:846 -msgid "Send the message" -msgstr "Invia il messaggio" - -#: composer/e-msg-composer.c:856 -#, fuzzy -msgid "_Close..." -msgstr "Sfoglia..." - -#: composer/e-msg-composer.c:857 -msgid "Quit the message composer" -msgstr "" - -#: composer/e-msg-composer.c:870 shell/e-shell-view-menu.c:480 -#, fuzzy -msgid "_Edit" -msgstr "Modifica" - -#: composer/e-msg-composer.c:881 -#, fuzzy -msgid "_Format" -msgstr "Formato" - -#: composer/e-msg-composer.c:887 -msgid "HTML" -msgstr "" - -#: composer/e-msg-composer.c:888 -#, fuzzy -msgid "Send the mail in HTML format" -msgstr "Invia posta in formato HTML" - -#: composer/e-msg-composer.c:901 shell/e-shell-view-menu.c:387 -#: shell/e-shell-view-menu.c:491 -#, fuzzy -msgid "_View" -msgstr "_Nuovo" - -#: composer/e-msg-composer.c:907 -#, fuzzy -msgid "Show _attachments" -msgstr "Mostra _allegati" - -#: composer/e-msg-composer.c:908 -#, fuzzy -msgid "Show/hide attachments" -msgstr "Mostra/nascondi allegati" - -#: composer/e-msg-composer.c:941 -msgid "Send" -msgstr "Invia" - -#: composer/e-msg-composer.c:942 -msgid "Send this message" -msgstr "Invia questo messaggio" - -#: composer/e-msg-composer.c:951 -msgid "Attach" -msgstr "Allega" - -#: composer/e-msg-composer.c:952 -msgid "Attach a file" -msgstr "Allega un file" - -#: composer/e-msg-composer.c:1139 -#, fuzzy -msgid "Compose a message" -msgstr "Componi un nuovo messaggio" - -#: mail/component-factory.c:188 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "Impossibile inizializzare il componente della posta di Evolution." - -#: mail/folder-browser-factory.c:23 -msgid "Get mail" -msgstr "Ricevi posta" - -#: mail/folder-browser-factory.c:23 -msgid "Check for new mail" -msgstr "Controlla nuova posta" - -#: mail/folder-browser-factory.c:24 -#, fuzzy -msgid "Compose" -msgstr "Colori" - -#: mail/folder-browser-factory.c:24 -#, fuzzy -msgid "Compose a new message" -msgstr "Componi un nuovo messaggio" - -#: mail/folder-browser-factory.c:28 -msgid "Reply" -msgstr "Rispondi" - -#: mail/folder-browser-factory.c:28 -msgid "Reply to the sender of this message" -msgstr "Rispondi all'autore di questo messaggio" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to All" -msgstr "Rispondi a Tutti" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to all recipients of this message" -msgstr "Rispondi a tutti i destinatari di questo messaggio" - -#: mail/folder-browser-factory.c:31 -msgid "Forward" -msgstr "Inoltra" - -#: mail/folder-browser-factory.c:31 -msgid "Forward this message" -msgstr "Inoltra questo messaggio" - -#: mail/folder-browser-factory.c:35 -#, fuzzy -msgid "Move" -msgstr "Lu" - -#: mail/folder-browser-factory.c:35 -#, fuzzy -msgid "Move message to a new folder" -msgstr "Salva il messaggio in una cartella specificata" - -#: mail/folder-browser-factory.c:37 -msgid "Print the selected message" -msgstr "Stampa il messaggio selezionato" - -#: mail/folder-browser-factory.c:39 -msgid "Delete this message" -msgstr "Elimina questo messaggio" - -#: mail/folder-browser-factory.c:59 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:72 -#, fuzzy -msgid "_Mark all messages seen" -msgstr "Invia un _Messaggio" - -#: mail/folder-browser-factory.c:78 -msgid "_Expunge" -msgstr "Canc_ella" - -#: mail/folder-browser-factory.c:84 -#, fuzzy -msgid "Mail _Filters ..." -msgstr "_File..." - -#: mail/folder-browser-factory.c:90 -msgid "_vFolder Editor ..." -msgstr "" - -#: mail/folder-browser-factory.c:96 -msgid "_Mail Configuration ..." -msgstr "_Configurazione della Posta" - -#: mail/folder-browser-factory.c:102 -msgid "Forget _Passwords" -msgstr "Dimentica _Password" - -#: mail/mail-config.c:688 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Inserire il nome e indirizzo di posta elettronica da usare per la\n" -"posta in uscita. È possibile, eventualmente, inserire il nome\n" -"dell'organizzazione, e il nome di un file dal quale leggere la firma." - -#: mail/mail-config.c:701 -#, fuzzy -msgid "Full name:" -msgstr "Nome e cognome" - -#: mail/mail-config.c:725 -#, fuzzy -msgid "Email address:" -msgstr "Indirizzo email:" - -#: mail/mail-config.c:740 -#, fuzzy -msgid "Organization:" -msgstr "Organizzazione" - -#: mail/mail-config.c:751 -msgid "Signature file:" -msgstr "File firma:" - -#: mail/mail-config.c:756 -msgid "Signature File" -msgstr "File firma" - -#: mail/mail-config.c:1167 -#, fuzzy -msgid "Server:" -msgstr "Server:" - -#: mail/mail-config.c:1173 -msgid "Username:" -msgstr "" - -#: mail/mail-config.c:1179 -#, fuzzy -msgid "Path:" -msgstr "Percorso:" - -#: mail/mail-config.c:1187 -#, fuzzy -msgid "Authentication:" -msgstr "Autenticazione:" - -#: mail/mail-config.c:1199 -msgid "Detect supported types..." -msgstr "Trova i tipi supportati..." - -#: mail/mail-config.c:1222 -#, fuzzy -msgid "Test Settings" -msgstr "Verifica i Nomi Selezionati" - -#: mail/mail-config.c:1344 mail/mail-config.c:1392 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Selezionare il tipo di server della posta e inserirne le informazioni " -"rilevanti. \n" -"\n" -"Se il server richiede un'autenticazione, è possibile cliccare il\n" -"bottone \\\"Trova i tipi supportati...\\\" dopo aver inserito le altre\n" -"informazioni. " - -#: mail/mail-config.c:1368 -#, fuzzy -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Selezionare il tipo di server della posta e inserirne le informazioni " -"rilevanti. \n" -"\n" -"Se il server richiede un'autenticazione, è possibile cliccare il\n" -"bottone \\\"Trova i tipi supportati...\\\" dopo aver inserito le altre\n" -"informazioni. " - -#: mail/mail-config.c:1434 -msgid "Edit Identity" -msgstr "Modifica Identità" - -#: mail/mail-config.c:1436 -msgid "Add Identity" -msgstr "Aggiungi Identità" - -#: mail/mail-config.c:1515 -msgid "Edit Source" -msgstr "Modifica Sorgente" - -#: mail/mail-config.c:1517 -msgid "Add Source" -msgstr "Aggiungi Sorgente" - -#: mail/mail-config.c:1598 -msgid "Edit News Server" -msgstr "" - -#: mail/mail-config.c:1600 -msgid "Add News Server" -msgstr "" - -#: mail/mail-ops.c:393 -#, fuzzy -msgid "Fetching mail" -msgstr "Ricevi posta" - -#: mail/mail-ops.c:405 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:791 -msgid "Move message(s) to" -msgstr "" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -#, fuzzy -msgid "Could not create dialog box." -msgstr "Impossibile creare il connettore per il Pilot\n" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/message-list.c:456 -msgid "Online Status" -msgstr "In linea" - -#: mail/message-list.c:492 -msgid "From" -msgstr "Da" - -#: mail/message-list.c:499 -msgid "Subject" -msgstr "" - -#: mail/message-list.c:506 -msgid "Date" -msgstr "Data" - -#: mail/message-list.c:513 -#, fuzzy -msgid "Received" -msgstr "Ricevuto" - -#: mail/message-list.c:520 -msgid "To" -msgstr "A" - -#: mail/message-list.c:527 -msgid "Size" -msgstr "Dimensioni" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Installazione di Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Sembra che tu stia usando Evolution per la prima volta. " - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "Cliccare \\\"OK\"\\ per installare i files di utente du Evolution in " - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Impossibile creare la cartella\n" -"%s\n" -"Errore: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Impossibile copiare i file in\n" -"`%s'" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "File di Evolution installati con successo." - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"Il file `%s' non è una cartella.\n" -"Rinmuoverlo per permettere l'installazione\n" -"dei file utente di Evolution." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Impossibile creare la cartella\n" -"%s\n" -"Errore: %s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -#, fuzzy -msgid "Evolution - Create new folder" -msgstr "Evolution non riesce a creare le sue cartelle locali" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -#, fuzzy -msgid "New..." -msgstr "_Nuovo" - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "(Senza nome)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Impossibile trovare Bug Buddy nel tuo $PATH. " - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Bug buddy non può essere eseguito." - -#: shell/e-shell-view-menu.c:164 -msgid "Evolution" -msgstr "" - -#: shell/e-shell-view-menu.c:166 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "" - -#: shell/e-shell-view-menu.c:168 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution è una suite di applicazioni groupware\n" -"per posta, calendario e gestione dei contatti\n" -"nell'ambito dell'ambiente GNOME desktop. " - -#: shell/e-shell-view-menu.c:324 -#, fuzzy -msgid "Go to folder..." -msgstr "Vai nella cartella..." - -#: shell/e-shell-view-menu.c:381 -msgid "_New" -msgstr "_Nuovo" - -#: shell/e-shell-view-menu.c:393 -msgid "_Folder" -msgstr "_Cartella" - -#: shell/e-shell-view-menu.c:399 -#, fuzzy -msgid "Evolution bar _shortcut" -msgstr "_Collegamento" - -#: shell/e-shell-view-menu.c:408 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "Invia un _Messaggio" - -#: shell/e-shell-view-menu.c:414 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "_Appuntamenti" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "_Contatti" - -#: shell/e-shell-view-menu.c:426 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:448 -#, fuzzy -msgid "_Go to folder..." -msgstr "Vai nella cartella..." - -#: shell/e-shell-view-menu.c:449 -msgid "Display a different folder" -msgstr "Mostra un'altra cartella" - -#: shell/e-shell-view-menu.c:456 -#, fuzzy -msgid "_Create new folder..." -msgstr "Salva nella _cartella..." - -#: shell/e-shell-view-menu.c:457 shell/e-shell-view-menu.c:467 -#, fuzzy -msgid "Create a new folder" -msgstr "Crea un nuovo _Calendario" - -#: shell/e-shell-view-menu.c:466 -#, fuzzy -msgid "E_xit..." -msgstr "Aggiungi..." - -#: shell/e-shell-view-menu.c:497 -msgid "Show _shortcut bar" -msgstr "Mo_stra la barra dei collegamenti" - -#: shell/e-shell-view-menu.c:498 -msgid "Show the shortcut bar" -msgstr "Mostra la barra dei collegamenti" - -#: shell/e-shell-view-menu.c:503 -msgid "Show _folder bar" -msgstr "Mostra la _barra delle cartelle" - -#: shell/e-shell-view-menu.c:504 -msgid "Show the folder bar" -msgstr "Mostra la barra delle cartelle" - -#: shell/e-shell-view-menu.c:526 -msgid "_Actions" -msgstr "_Azioni" - -#: shell/e-shell-view-menu.c:537 -msgid "_Help" -msgstr "" - -#: shell/e-shell-view-menu.c:543 -#, fuzzy -msgid "Help _index" -msgstr "Indice degli Aiuti" - -#: shell/e-shell-view-menu.c:550 -#, fuzzy -msgid "Getting _started" -msgstr "Ora di inizio appuntamento:" - -#: shell/e-shell-view-menu.c:557 -#, fuzzy -msgid "Using the _mailer" -msgstr "Usare il programma di posta" - -#: shell/e-shell-view-menu.c:564 -#, fuzzy -msgid "Using the _calendar" -msgstr "Usare il _Calendario" - -#: shell/e-shell-view-menu.c:571 -#, fuzzy -msgid "Using the c_ontact manager" -msgstr "Usare il _Gestore dei Contatti" - -#: shell/e-shell-view-menu.c:581 -msgid "_Submit bug report" -msgstr "_Inoltra un bug report" - -#: shell/e-shell-view-menu.c:582 -#, fuzzy -msgid "Submit bug report using Bug Buddy" -msgstr "Inoltra un bug-report con bug-buddy" - -#: shell/e-shell-view-menu.c:591 -msgid "_About Evolution..." -msgstr "" - -#: shell/e-shell-view-menu.c:592 -msgid "Show information about Evolution" -msgstr "" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "(Nessuna cartella mostrata)" - -#: shell/e-shell-view.c:342 -#, fuzzy -msgid "Folders" -msgstr "Cartelle" - -#: shell/e-shell-view.c:734 -#, fuzzy -msgid "None" -msgstr "Nessuno " - -#: shell/e-shell-view.c:738 -#, c-format -msgid "Evolution - %s" -msgstr "" - -#: shell/e-shell.c:293 -#, fuzzy, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Impossibile impostare il local storage --%s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "Icone _piccole" - -#: shell/e-shortcuts-view.c:236 -#, fuzzy -msgid "Show the shortcuts as small icons" -msgstr "Mostra i collegamenti come icone piccole " - -#: shell/e-shortcuts-view.c:238 -#, fuzzy -msgid "_Large icons" -msgstr "Icone _grandi" - -#: shell/e-shortcuts-view.c:239 -#, fuzzy -msgid "Show the shortcuts as large icons" -msgstr "Mostra i collegamenti come icone grandi" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Attiva" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Attiva questo collegamento" - -#: shell/e-shortcuts-view.c:333 -#, fuzzy -msgid "Remove this shortcut from the shortcut bar" -msgstr "Rimuovi il collegamenti dalla barra dei collegamenti" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Errore di salvataggio dei collegamenti." - -#: shell/e-storage.c:217 -#, fuzzy -msgid "(No name)" -msgstr "Nome" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "" - -#: shell/main.c:66 -#, fuzzy -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Buongiorno.  Grazie per aver trovato il tempo di scaricare questa\n" -"prima versione-prototipo del groupware suite Evolution.\n" -"\n" -"La squadra di evolution ha lavorato sodo per rendere Evolution il più\n" -"robusto, estensibile, gradevole, veloce ed adatto possibile ad un uso\n" -"intenso di internet.  Siamo stanchi.  Ma non abbiamo ancora finito.\n" -"\n" -"Mentre espolorate Evolution, vogliate tenere presente che la maggior\n" -"parte del nostro lavoro è stato indirizzato sul motore di fondo che\n" -"gestisce l'intero sistema e non sull'interfaccia utente.  Stiamo\n" -"appena raggiungendo il nostro obiettivo, da quel momento in poi, ci\n" -"dedicheremo con passione e attenzione all'interfaccia utente. Almeno\n" -"sappiate che state utilizzando una versione dimostrativa.  \n" -"\n" -"Ora è il momento della liberatoria da nerd.  Evolution farà impallare\n" -"il vostro computer, perderà la vostra posta, lascerà processi attivi,\n" -"consumerà il 100% del tempo di CPU, si bloccherà, manderà posta in\n" -"HTML a liste di indirizzi scelti a caso mettendovi in imbarazzo di\n" -"fronte ad amici e colleghi.  Usatelo a vostro rischio e pericolo.\n" -"\n" -"Ci auguriamo che apprezziate il risultato del nostro duro lavoro,\n" -"e aspettiamo ansiosamente il vostro contributo\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Grazie\n" -"il team di Evolution.\n" - -#: shell/main.c:128 -msgid "Cannot initialize the Evolution shell." -msgstr "Impossibile inizializzare la shell di Evolution." - -#: shell/main.c:166 -#, fuzzy -msgid "Cannot initialize the configuration system." -msgstr "Impossibile inizializzare la shell di Evolution." - -#: shell/main.c:172 -msgid "Cannot initialize the Bonobo component system." -msgstr "Impossibile inizializzare il sistema di componenti Bonobo." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Campi" - -#: widgets/e-table/e-table-config.glade.h:8 -#, fuzzy -msgid "Grouping" -msgstr "Gruppi %i" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Ordina" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtra" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#, fuzzy -msgid "Field Chooser" -msgstr "Campi" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Campi disponibili" - -#: widgets/e-table/e-table-group.glade.h:9 -#, fuzzy -msgid "label1" -msgstr "etichetta" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Mostra in questo ordine" - -#: widgets/e-table/e-table-group.glade.h:11 -#, fuzzy -msgid "label2" -msgstr "etichetta" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Aggiungi >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Rimuovi" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -#, fuzzy -msgid "Tentative" -msgstr "Tentativo" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Occupato" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Via dall'ufficio" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Nessuna informazione" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "_Invita altri" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -#, fuzzy -msgid "_Options" -msgstr "Opzioni" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Mostra s_olo le ore lavorative" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "Vista _allargata" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "A_ggiorna libero/Occupato" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Tutto il Personale e le Risorse" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Tutto il _Personale e una Risorsa" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "Personale _Richiesto" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Personale Richiesto e _una risorsa" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "Ora di inizio appuntamento:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "Ora di termine dell' appuntamento:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Tutti i partecipanti" - -#: widgets/misc/e-clipped-label.c:106 -#, fuzzy -msgid "..." -msgstr "Aggiungi..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, fuzzy, c-format -msgid "Group %i" -msgstr "Gruppi %i" - -#, fuzzy -#~ msgid "_Close Calendar" -#~ msgstr "Chiudi il _Calendario" - -#~ msgid "Close current calendar" -#~ msgstr "Chiudi calendario corrente" - -#~ msgid "Disabled" -#~ msgstr "Disabilitato" - -#~ msgid "Synchronize" -#~ msgstr "Sincronizza" - -#~ msgid "Copy From Pilot" -#~ msgstr "Copia dal Pilot" - -#~ msgid "Copy To Pilot" -#~ msgstr "Copia sul Pilot" - -#~ msgid "Merge To Pilot" -#~ msgstr "Unisci dal Pilot" - -#~ msgid "Configuration utility for the calendar conduit.\n" -#~ msgstr "Utilità di configurazione per il calendario.\n" - -#~ msgid "Synchronize Action" -#~ msgstr "Sincronizzazione" - -#~ msgid "" -#~ "No pilot configured, please choose the\n" -#~ "'Pilot Link Properties' capplet first." -#~ msgstr "" -#~ "Nessun pilot configurato, scegliere prima\n" -#~ "le 'Proprietà di collegamento del Pilot'. " - -#, fuzzy -#~ msgid "Cannot initialze the GnomePilot Daemon" -#~ msgstr "Impossibile inizializzare il sistema di componenti Bonobo." - -#~ msgid "Cannot connect to the GnomePilot Daemon" -#~ msgstr "Impossibile conettersi al demone GnomePIlot" - -#~ msgid "Error while communicating with calendar server" -#~ msgstr "Errore durante la comunicazione con il server del calendario" - -#~ msgid "Calendar holds %d entries" -#~ msgstr "Il calendario contiene %d dati inseriti" - -#~ msgid "Could not start gnomecal server" -#~ msgstr "Impossibile avviare il server gnomecal" - -#~ msgid "Could not read pilot's DateBook application block" -#~ msgstr "Impossibile leggere il blocco Datebook del Pilot" - -#~ msgid "Specifies the port on which the Pilot is" -#~ msgstr "Specifica la porta alla quale è collegato il Pilot" - -#~ msgid "If you want to debug the attributes on records" -#~ msgstr "Se si voglioni debuggare gli attibuti sui record" - -#~ msgid "Only syncs from desktop to pilot" -#~ msgstr "Sincronizza solamente dal desktop al Pilot" - -#~ msgid "Only syncs from pilot to desktop" -#~ msgstr "Sincronizza solamente dal Pilot al desktop" - -#~ msgid "Can not bind to device %s\n" -#~ msgstr "Impossibile collegare il dispositivo %s\n" - -#~ msgid "Failed to get a connection from the Pilot device" -#~ msgstr "Connessione al dispositivo Pilot non riuscita" - -#~ msgid "\tObject did not exist, creating a new one\n" -#~ msgstr "\\tOggetto non esistente, creazione di uno nuovo\n" - -#~ msgid "" -#~ "\tObject has been modified on desktop and on the pilot, desktop takes " -#~ "precedence\n" -#~ msgstr "" -#~ "\\tOggetto è stato modificato sul desktop e sul Pilot, il descktop ha la " -#~ "precedenza\n" - -#~ msgid "Syncing with the pilot..." -#~ msgstr "Sincronizzazione con il Pilot..." - -#~ msgid "Could not open DatebookDB on the Pilot" -#~ msgstr "Impossibile aprire DateBookDB sul Pilot" - -#~ msgid "Unable to open DatebookDB" -#~ msgstr "Impossibile aprire DateBookDB" - -#~ msgid "Synced DateBook from Pilot to GnomeCal" -#~ msgstr "DateBook del Pilot sincronizzato con GnomeCal" - -#~ msgid "Configuration utility for the todo conduit.\n" -#~ msgstr "Utilità di confugurazione per FIXME\n" - -#~ msgid "Enabled" -#~ msgstr "Abilitato" - -#~ msgid "Cut selected region into the clipboard" -#~ msgstr "Taglia la regione selezionata nella clipboard " - -#~ msgid "Copy selected region into the clipboard" -#~ msgstr "Copia la regione selezionata nella clipboard" - -#~ msgid "Paste selected region into the clipboard" -#~ msgstr "Incolla la regione selezionata nella clipboar" - -#~ msgid "Undo" -#~ msgstr "Annulla" - -#~ msgid "Undo last operation" -#~ msgstr "Annulla ultima operazione" - -#~ msgid "Find messages" -#~ msgstr "Trova messaggio" - -#~ msgid "Test these values before continuing" -#~ msgstr "Provare questi valori prima di continuare" - -#~ msgid "Select the method you would like to use to deliver your mail." -#~ msgstr "" -#~ "Selezionare il metodo che si desidera utilizzare per inviare la posta." - -#, fuzzy -#~ msgid "Mail Configuration" -#~ msgstr "_Configurazione della Posta" - -#~ msgid "Identity" -#~ msgstr "Identità" - -#~ msgid "Mail Source" -#~ msgstr "Sorgente della Posta" - -#~ msgid "Mail Transport" -#~ msgstr "Trasporto della Posta" - -#~ msgid "Signature file" -#~ msgstr "File firma" - -#, fuzzy -#~ msgid "Camel Providers Configuration" -#~ msgstr "Configurazione del Provider Camel" - -#~ msgid "Identities" -#~ msgstr "Identità" - -#~ msgid "Sources" -#~ msgstr "Sorgenti" - -#~ msgid "Transports" -#~ msgstr "Trasporti" - -#~ msgid "Mail Component: I could not initialize Bonobo" -#~ msgstr "Componente della Posta: impossibile inizializzare Bonobo" - -#, fuzzy -#~ msgid "Cannot open location: %s" -#~ msgstr "Impossibile impostare location: %s" - -#~ msgid "New group" -#~ msgstr "Nuovo gruppo" - -#~ msgid "Composes a new mail message" -#~ msgstr "Componei un nuovo messaggio" - -#~ msgid "Meeting Re_quest" -#~ msgstr "_Richieste di appuntamenti" - -#~ msgid "_Task" -#~ msgstr "_Obiettivi" - -#~ msgid "Task _Request" -#~ msgstr "_Richiesta Obiettivi" - -#~ msgid "_Journal Entry" -#~ msgstr "_Ingressi giornalieri" - -#~ msgid "_Note" -#~ msgstr "_Appunti" - -#~ msgid "_Selected Items" -#~ msgstr "_Oggetti selezionati" - -#~ msgid "Clos_e All Items" -#~ msgstr "Chiudi _Tutti" - -#~ msgid "Closes all the open items" -#~ msgstr "Chiude tutti gli oggetti aperti" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "" -#~ "Spiacenti, il Browser delle cartelle di Evolution non può essere " -#~ "inizializzato" - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "Se un'anteprima del mesaggio dovrebbe essere mostrata" diff --git a/po/ja.po b/po/ja.po deleted file mode 100644 index 42f6f8add0..0000000000 --- a/po/ja.po +++ /dev/null @@ -1,3915 +0,0 @@ -# evolution ja.po -# Copyright (C) 2000 Free Software Foundation, Inc. -# Akira TAGOH , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution CVS-20000810\n" -"POT-Creation-Date: 2000-08-10 12:58+0900\n" -"PO-Revision-Date: 2000-08-10 13:52+0900\n" -"Last-Translator: Akira TAGOH \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=euc-jp\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Bonobo ¤Î½é´ü²½¤¬½ÐÍè¤Þ¤»¤ó¤Ç¤·¤¿" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "¥«¥Æ¥´¥ê" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "¥¢¥¤¥Æ¥à¤Ï¤³¤ì¤é¤Î¥«¥Æ¥´¥ê¤Ë°¤·¤Æ¤¤¤Þ¤¹:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "ÍøÍѤǤ­¤ë¥«¥Æ¥´¥ê:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "FIXME: ͽÌó(_A)" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: ²ñµÄ°ÍÍê(_q)" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "FIXME: ¥á¡¼¥ë¥á¥Ã¥»¡¼¥¸(_M)" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "FIXME: ¸ò¾Ä(_C)" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "FIXME: ºî¶È(_T)" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "FIXME: ºî¶È°ÍÍê(_R)" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: »ÅÌõµ­Æþ(_J)" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "FIXME: ¥Î¡¼¥È(_N)" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1178 -#: calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "FIXME: ¥Õ¥©¡¼¥à¤òÁªÂò(_o)..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "FIXME: ¥á¥â¥¹¥¿¥¤¥ë(_M)" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "FIXME: °õºþ¥¹¥¿¥¤¥ë¤ÎÄêµÁ(_S)..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "FIXME: Á÷¿®(_e)" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: źÉÕ¤ÎÊݸ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "ºï½ü(_D)" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "FIXME: ¥Õ¥©¥ë¥À¤Ø°ÜÆ°(_M)..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "FIXME: ¥Õ¥©¥ë¥À¤Ø¥³¥Ô¡¼(_y)..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "¥Ú¡¼¥¸ÀßÄê(_u)" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "FIXME: °õºþ¥×¥ì¥Ó¥å¡¼(_v)" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "FIXME: Æü쎤êÉÕ¤±(_S)..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "FIXME: ̤Æɤ˥ޡ¼¥¯(_n)" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "¥ª¥Ö¥¸¥§¥¯¥È(_O)" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1238 -#: calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "FIXME: ¥¢¥¤¥Æ¥à(_I)" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1239 -#: calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "FIXME: ̤ÆÉ¥¢¥¤¥Æ¥à(_U)" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "FIXME: ¥Õ¥©¥ë¥À¤ÎºÇ½é¤Î¥¢¥¤¥Æ¥à(_r)" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "FIXME: ¥Õ¥©¥ë¥À¤ÎºÇ¸å¤Î¥¢¥¤¥Æ¥à(_L)" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "FIXME: ɸ½à(_S)" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "FIXME: ½ñ¼°(__)" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "FIXME: ¥«¥¹¥¿¥Þ¥¤¥º(_C)..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "Á°(_v)" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "¼¡(_x)" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "¥Ä¡¼¥ë¥Ð¡¼(_T)" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "FIXME: ¥Õ¥¡¥¤¥ë(_F)..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "FIXME: ¥¢¥¤¥Æ¥à(_e)..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "FIXME: ¥ª¥Ö¥¸¥§¥¯¥È(_O)..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "FIXME: ¥Õ¥©¥ó¥È(_F)..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: ÃÊÍî(_P)..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "FIXME: ¤³¤Î¥Õ¥©¡¼¥à¤Î¥Ç¥¶¥¤¥ó(_g)" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "FIXME: ¥Õ¥©¡¼¥à¤Î¥Ç¥¶¥¤¥ó(_e)" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "FIXME: ȯ¹Ô¥Õ¥©¡¼¥à(_F)..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "FIXME: ¾¤Îȯ¹Ô¥Õ¥©¡¼¥à(_b)..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "FIXME: ¥¹¥¯¥ê¥×¥È¥Ç¥Ð¥Ã¥¬(_D)" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "FIXME: ¥¹¥Ú¥ë(_S)..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "¥Õ¥©¡¼¥à(_F)" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: ¿·µ¬¸ò¾Ä(_C)" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "FIXME: Ʊ¤¸Áê¼ê¤«¤é¿·µ¬¸ò¾Ä(_C)" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "FIXME: ¿·µ¬¼ê»æ¤Ë¸ò¾Ä(_L)" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "FIXME: ¸ò¾Ä¤¹¤ë¿·µ¬¥á¥Ã¥»¡¼¥¸(_M)" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "FIXME: ¸ò¾Ä¤È¤Î¿·µ¬²ñµÄ(_g)" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "FIXME: ²ñµÄ·×²è(_P)..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "FIXME: ¸ò¾Ä¤Î¤¿¤á¤Î¿·µ¬ºî¶È(_T)" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "FIXME: ¸ò¾Ä¤Î¤¿¤á¤Î¿·µ¬»ÅÌõµ­Æþ" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "FIXME: ºÆÄ´ºº¤Î¤¿¤á¤Î¥Õ¥é¥°(_F)..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "FIXME: ¥¢¥É¥ì¥¹¤Î¥Þ¥Ã¥×¤òɽ¼¨(_D)" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "FIXME: Web ¥Ú¡¼¥¸¤ò³«¤¯(_O)" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "FIXME: vCard ¤ÇžÁ÷(_v)" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "FIXME: žÁ÷(_w)" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "ÁÞÆþ(_I)" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È(_o)" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1331 -#: shell/e-shell-view-menu.c:512 -msgid "_Tools" -msgstr "¥Ä¡¼¥ë(_T)" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "¹ÔÆ°(_n)" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Êݸ¤ÈÊĤ¸¤ë" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "ͽÌó¤òÊݸ¤·¤Æ¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤òÊĤ¸¤ë" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:680 -msgid "Print..." -msgstr "°õºþ..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "¤³¤Î¥¢¥¤¥Æ¥à¤ò°õºþ¤¹¤ë" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "FIXME: ¥Õ¥¡¥¤¥ë¤ÎÁÞÆþ..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "¥Õ¥¡¥¤¥ë¤òźÉդȤ·¤ÆÁÞÆþ¤¹¤ë" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:427 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:40 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -msgid "Delete" -msgstr "ºï½ü" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1387 -#: calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "¤³¤Î¥¢¥¤¥Æ¥à¤òºï½ü" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "FIXME: Á°" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Á°¤Î¥¢¥¤¥Æ¥à¤Ø°ÜÆ°¤¹¤ë" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "FIXME: ¼¡" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "¼¡¤Î¥¢¥¤¥Æ¥à¤Ø°ÜÆ°¤¹¤ë" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "FIXME: ¥Ø¥ë¥×" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¤ò¸«¤ë" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "¥¢¥·¥¹¥¿¥ó¥È" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "»Å»ö" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "»Å»ö 2" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "»Å»ö¤Î FAX" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "¸Æ¤ÓÌᤷ" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "¼Ö" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "²ñ¼Ò" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "²È" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "²È 2" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "²È¤Î FAX" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "¥â¥Ð¥¤¥ë" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:27 -msgid "Other" -msgstr "¤½¤Î¾" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "¤½¤Î¾¤Î FAX" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "¥Ý¥±¥Ù¥ë" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "¼çÍפÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "¥é¥¸¥ª" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "¥Æ¥ì¥Ã¥¯¥¹" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "¼çÍ×¤Ê Email" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "Email 2" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "Email 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"¤³¤Î¥³¥ó¥¿¥¯¥È¤òºï½ü\n" -"¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "¥³¥ó¥¿¥¯¥È¤òºï½ü?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "ÄɲÃ(_A)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "ÅÅÏÃ¥¿¥¤¥×" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "¿·µ¬ÅÅÏÃ¥¿¥¤¥×" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "ÄɲÃ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "¥³¥ó¥¿¥¯¥È¥¨¥Ç¥£¥¿" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "¥Õ¥ë¥Í¡¼¥à(_F)..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "ÊÌ̾:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Web ¥Ú¡¼¥¸¤Î URL:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "HTML ¥á¡¼¥ë¤ò¼õ¿®µö²Ä(_H)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "½»½ê:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "»Å»ö(_B)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "²È(_H)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "»Å»ö¤Î FAX(_F)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "¥â¥Ð¥¤¥ë(_M)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "»Å»ö(_u)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "¤³¤ì¤Ï͹ÊØʪ¤Î½»½ê¤Ç¤¹" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "¥³¥ó¥¿¥¯¥È(_o)..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "¥«¥Æ¥´¥ê(_t)..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "²ñ¼Ò(_C):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "°ìÈÌ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "ôÅöÉô½ð(_D):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "»ö̳½ê(_O):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "ÀìÌ翦(_P):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "¥Ë¥Ã¥¯¥Í¡¼¥à(_N):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "ÇÛ¶ö¼Ô(_S):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "ÃÂÀ¸Æü(_B):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "¥¢¥·¥¹¥¿¥ó¥È¤Î̾Á°(_A):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "¥Þ¥Í¡¼¥¸¥ã¤Î̾Á°(_M):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "µ­Ç°Æü(_v):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "¥Î¡¼¥È(_t):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "¾ÜºÙ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "¥Õ¥ë¥Í¡¼¥à¤Î¥Á¥§¥Ã¥¯" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "¸ª½ñ¤­(_T):" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "̾(_F):" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "Ãæ´Ö̾(_M):" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "À«(_L):" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "ÀÜÈø¼­(_S):" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/calendar-commands.c:545 -msgid "New" -msgstr "¿·µ¬" - -#: addressbook/gui/component/addressbook.c:421 -msgid "Create a new contact" -msgstr "¿·µ¬¥³¥ó¥¿¥¯¥È¤òºîÀ®¤¹¤ë" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Find" -msgstr "¸¡º÷" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Find a contact" -msgstr "¥³¥ó¥¿¥¯¥È¤ò¸¡º÷¤¹¤ë" - -#: addressbook/gui/component/addressbook.c:426 -#: calendar/gui/calendar-commands.c:549 mail/folder-browser-factory.c:38 -msgid "Print" -msgstr "°õºþ" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Print contacts" -msgstr "¥³¥ó¥¿¥¯¥È¤ò°õºþ¤¹¤ë" - -#: addressbook/gui/component/addressbook.c:427 -msgid "Delete a contact" -msgstr "¥³¥ó¥¿¥¯¥È¤òºï½ü" - -#: addressbook/gui/component/addressbook.c:495 -msgid "_Print Contacts..." -msgstr "¥³¥ó¥¿¥¯¥È¤ò°õºþ¤¹¤ë(_P)..." - -#: addressbook/gui/component/addressbook.c:505 -#: addressbook/gui/component/addressbook.c:1044 -msgid "As _Table" -msgstr "¥Æ¡¼¥Ö¥ë(_T)" - -#: addressbook/gui/component/addressbook.c:512 -msgid "_New Contact" -msgstr "¿·µ¬¥³¥ó¥¿¥¯¥È(_N)" - -#: addressbook/gui/component/addressbook.c:520 -msgid "N_ew Directory Server" -msgstr "¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê¥µ¡¼¥Ð(_e)" - -#: addressbook/gui/component/addressbook.c:603 -msgid "Unable to open addressbook" -msgstr "½»½êÏ¿¤ò³«¤¯¤³¤È¤¬½ÐÍè¤Þ¤»¤ó" - -#: addressbook/gui/component/addressbook.c:608 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"²æ¡¹¤Ï¤³¤Î½»½êÏ¿¤ò³«¤¯¤³¤È¤¬½ÐÍè¤Þ¤»¤ó. ¤³¤ì¤Ï¤¢¤Ê¤¿¤¬\n" -"´Ö°ã¤Ã¤¿ URI ¤òÆþÎϤ·¤¿¤«, LDAP ¥µ¡¼¥Ð¤Ë¥¢¥¯¥»¥¹¤·¤Æ\n" -"LDAP ¥µ¥Ý¡¼¥È¤òºî¤ê¾å¤²¤Ê¤¤¤è¤¦¤Ë¤·¤¿¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹.\n" -"¤â¤· URI ¤òÆþÎϤ·¤¿¤Ê¤é¸í¤ê¤¬¤Ê¤¤¤« URI ¤ò¥Á¥§¥Ã¥¯¤·¤Æ\n" -"ºÆÆþÎϤ·¤Æ²¼¤µ¤¤. ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð, ¤¿¤Ö¤ó LDAP ¥µ¡¼¥Ð¤Ë\n" -"¥¢¥¯¥»¥¹¤¹¤ë¤Î¤ò»î¤ß¤Þ¤·¤¿¡¥LDAP ¤ò»È¤¦¤³¤È¤ò˾¤à¤Ê¤é\n" -"OpenLDAP ¤Î¥À¥¦¥ó¥í¡¼¥É¤È¥¤¥ó¥¹¥È¡¼¥ë, ¤½¤·¤Æ evolution\n" -"¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦\n" - -#: addressbook/gui/component/addressbook.c:948 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "VCard ¤ÇÊݸ" - -#: addressbook/gui/component/addressbook.c:1015 -msgid "* Click here to add a contact *" -msgstr "* ¤³¤³¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¥³¥ó¥¿¥¯¥È¤òÄɲ䷤Ƥ¯¤À¤µ¤¤ *" - -#: addressbook/gui/component/addressbook.c:1051 -msgid "As _Minicards" -msgstr "¥ß¥Ë¥«¡¼¥É" - -#: addressbook/gui/component/addressbook.c:1102 -msgid "The URI that the Folder Browser will display" -msgstr "¥Õ¥©¥ë¥À¥Ö¥é¥¦¥¶¤¬É½¼¨¤¹¤ë URI" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "window2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:87 -msgid "External Directories" -msgstr "³°Éô¥Ç¥£¥ì¥¯¥È¥ê" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "ÀâÌÀ:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP ¥µ¡¼¥Ð:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "¥Ý¡¼¥ÈÈÖ¹æ:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Root DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "̾Á°:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"¤³¤Î¥Ó¥å¡¼¤ÎÃæ¤Ëɽ¼¨¤Ç¤­¤ë¥¢¥¤¥Æ¥à¤Ï¤¢¤ê¤Þ¤»¤ó\n" -"\n" -"¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤ò¤·¤Æ¿·µ¬¥³¥ó¥¿¥¯¥È¤òºîÀ®¤·¤Æ²¼¤µ¤¤" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "¥Ú¡¼¥¸ÀßÄê:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "¥¹¥¿¥¤¥ë̾:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "¥×¥ì¥Ó¥å¡¼:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "¥ª¥×¥·¥ç¥ó" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "´Þ¤à:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "¥»¥¯¥·¥ç¥ó:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "¥µ¥¤¥É¤Îʸ»ú¥¿¥Ö" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "³Æʸ½ñ¤Î¤¿¤á¤Î¸«½Ð¤·" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "¿·µ¬¥Ú¡¼¥¸¤«¤é³«»Ï" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Îó¿ô:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "ºÇ¸å¤Î¶õÇò·Á¼°:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "¥Õ¥©¥ó¥È" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "¥Õ¥©¥ó¥È..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "¸«½Ð¤·" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "ËÜÂÎ" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "¥·¥§¡¼¥Ç¥£¥ó¥°" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "¥°¥ì¥¤¥·¥§¡¼¥Ç¥£¥ó¥°¤ò»È¤Ã¤Æ°õºþ" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "ÍÑ»æ" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "¼ïÊÌ:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "À£Ë¡:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Éý:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "¹â¤µ:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "ÍÑ»æ¤Îµ¯ÅÀ:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr ";Çò" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "¾å:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "²¼:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "º¸:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "±¦:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "¥Ú¡¼¥¸" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "¥µ¥¤¥º:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Êý¸þ" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "½ÄĹ" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "²£Ä¹" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "¥Ø¥Ã¥À" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "¥Õ¥Ã¥¿:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "¶ö¿ô¥Ú¡¼¥¸¤òȿž" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "¥Ø¥Ã¥À/¥Õ¥Ã¥¿" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -msgid "am" -msgstr "¸áÁ°" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "¸á¸å" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "³µÍ×:" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "¸«½Ð¤·:" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "¶õ¤­Æü:" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "ͽÌó:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "½ÅÍפÊÆü:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "Æü¿ô:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "¸½ºß¤ÎÆü¿ô:" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "¤Þ¤À´ü¸Â¤ÎÍè¤Æ¤¤¤Ê¤¤ TODO ¥¢¥¤¥Æ¥à:" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "º£Æü´ü¸Â¤Î TODO ¥¢¥¤¥Æ¥à:" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "´ü¸Â¤Î²á¤®¤¿ TODO ¥¢¥¤¥Æ¥à:" - -#: calendar/gui/calendar-commands.c:176 -msgid "Gnome Calendar" -msgstr "GNOME ¥«¥ì¥ó¥À" - -#: calendar/gui/calendar-commands.c:179 -msgid "The GNOME personal calendar and schedule manager." -msgstr "GNOME ¸Ä¿Í¥«¥ì¥ó¥À¤È¥¹¥±¥¸¥å¡¼¥ë´ÉÍý" - -#: calendar/gui/calendar-commands.c:435 -msgid "File not found" -msgstr "¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó" - -#: calendar/gui/calendar-commands.c:457 -msgid "Open calendar" -msgstr "¥«¥ì¥ó¥À¤ò³«¤¯" - -#: calendar/gui/calendar-commands.c:496 -msgid "Save calendar" -msgstr "¥«¥ì¥ó¥À¤òÊݸ" - -#: calendar/gui/calendar-commands.c:523 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Æü" - -#: calendar/gui/calendar-commands.c:523 -msgid "Show 1 day" -msgstr "1 Æü¤òɽ¼¨¤¹¤ë" - -#: calendar/gui/calendar-commands.c:526 -msgid "5 Days" -msgstr "5 Æü" - -#: calendar/gui/calendar-commands.c:526 -msgid "Show the working week" -msgstr "»Å»öÃæ¤Î½µ¤òɽ¼¨¤¹¤ë" - -#: calendar/gui/calendar-commands.c:529 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "½µ" - -#: calendar/gui/calendar-commands.c:529 -msgid "Show 1 week" -msgstr "1 ½µ´Ö¤òɽ¼¨¤¹¤ë" - -#: calendar/gui/calendar-commands.c:532 -msgid "Month" -msgstr "·î" - -#: calendar/gui/calendar-commands.c:532 -msgid "Show 1 month" -msgstr "1 ¥õ·î¤òɽ¼¨¤¹¤ë" - -#: calendar/gui/calendar-commands.c:536 -msgid "Year" -msgstr "ǯ" - -#: calendar/gui/calendar-commands.c:536 -msgid "Show 1 year" -msgstr "1 ǯ´Ö¤òɽ¼¨¤¹¤ë" - -#: calendar/gui/calendar-commands.c:545 calendar/gui/calendar-commands.c:689 -msgid "Create a new appointment" -msgstr "¿·µ¬Í½Ìó¤òºîÀ®¤¹¤ë" - -#: calendar/gui/calendar-commands.c:549 calendar/gui/calendar-commands.c:681 -msgid "Print this calendar" -msgstr "¤³¤Î¥«¥ì¥ó¥À¤ò°õºþ¤¹¤ë" - -#: calendar/gui/calendar-commands.c:553 -msgid "Prev" -msgstr "Á°" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go back in time" -msgstr "»þ´Ö¤òÌá¤ë" - -#: calendar/gui/calendar-commands.c:554 -msgid "Today" -msgstr "º£Æü" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go to present time" -msgstr "¸½ºß¤Î»þ´Ö¤Ø°ÜÆ°¤¹¤ë" - -#: calendar/gui/calendar-commands.c:555 -msgid "Next" -msgstr "¼¡" - -#: calendar/gui/calendar-commands.c:555 -msgid "Go forward in time" -msgstr "»þ´Ö¤ò¿Ê¤à" - -#: calendar/gui/calendar-commands.c:559 -msgid "Go to" -msgstr "°ÜÆ°" - -#: calendar/gui/calendar-commands.c:559 -msgid "Go to a specific date" -msgstr "»ØÄêÆü¤Ø°ÜÆ°¤¹¤ë" - -#. file menu -#: calendar/gui/calendar-commands.c:666 -msgid "New Ca_lendar" -msgstr "¿·µ¬¥«¥ì¥ó¥À(_l)" - -#: calendar/gui/calendar-commands.c:667 -msgid "Create a new calendar" -msgstr "¿·µ¬¥«¥ì¥ó¥À¤òºîÀ®¤¹¤ë" - -#: calendar/gui/calendar-commands.c:670 -msgid "Open Ca_lendar" -msgstr "¥«¥ì¥ó¥À¤ò³«¤¯(_l)" - -#: calendar/gui/calendar-commands.c:671 -msgid "Open a calendar" -msgstr "¥«¥ì¥ó¥À¤ò³«¤¯" - -#: calendar/gui/calendar-commands.c:675 calendar/gui/calendar-commands.c:676 -msgid "Save Calendar As" -msgstr "¥«¥ì¥ó¥À¤òÊÌ̾¤ÇÊݸ" - -#: calendar/gui/calendar-commands.c:689 -msgid "_New appointment..." -msgstr "¿·µ¬Í½Ìó(_N)..." - -#: calendar/gui/calendar-commands.c:694 -msgid "New appointment for _today..." -msgstr "º£Æü¤Î¿·µ¬Í½Ìó(_t)..." - -#: calendar/gui/calendar-commands.c:695 -msgid "Create a new appointment for today" -msgstr "º£Æü¤Î¿·µ¬Í½Ìó¤òºîÀ®¤¹¤ë" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "ÀßÄê" - -#: calendar/gui/calendar-commands.c:710 calendar/gui/calendar-commands.c:711 -msgid "About Calendar" -msgstr "¥«¥ì¥ó¥À¤Ë¤Ä¤¤¤Æ" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:753 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:753 -msgid "'s calendar" -msgstr "¤Î¥«¥ì¥ó¥À¤Ç¤¹" - -#: calendar/gui/calendar-model.c:452 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"ÆüÉդϥե©¡¼¥Þ¥Ã¥È¤ËÆþ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: \n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:525 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"ÃÏÍýŪ¤Ê°ÌÃ֤ϥե©¡¼¥Þ¥Ã¥È¤ËÆþ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: \n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:570 -msgid "The percent value must be between 0 and 100" -msgstr "¥Ñ¡¼¥»¥ó¥ÈÃÍ¤Ï 0 ¤È 100 ¤Î´Ö¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" - -#: calendar/gui/calendar-model.c:603 -msgid "The priority must be between 0 and 10" -msgstr "Í¥Àè½ç°Ì¤Ï 0 ¤È 10 ¤Î´Ö¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó" - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "¥«¥ì¥ó¥À¤¬É½¼¨¤¹¤ë URI" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "%A %b %d %Y %H:%M ¤Ë¥¢¥é¡¼¥à" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "%A %b %d %Y %H:%M ¤Î¤¢¤Ê¤¿¤ÎͽÌó¤Ë¤Ä¤¤¤ÆÄÌÃÎ" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "ÍøÍѤǤ­¤ë¥µ¥Þ¥ê¤Ï¤¢¤ê¤Þ¤»¤ó" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "ÊĤ¸¤ë" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "µï̲¤ê" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "ͽÌó¤ÎÊÔ½¸" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "µï̲¤ê»þ´Ö (ʬ)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "FIXME: ºï½ü(_D)" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "FIXME: ̤´°Î»¤Îºî¶È(_c)" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "FIXME: ̾Á°¥Á¥§¥Ã¥¯(_k)" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "FIXME: ½»½êÏ¿(_B)..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "FIXME: ¿·µ¬ºî¶È(_N)" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "FIXME: ¥¹¥Æ¡¼¥¿¥¹¥ì¥Ý¡¼¥È¤òÁ÷¿®(_e)" - -#: calendar/gui/dialogs/task-editor.c:358 -#, fuzzy -msgid "FIXME: _Mark Complete" -msgstr "FIXME: ºï½ü(_D)" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "FIXME: ¿¶¤êʬ¤±(_u)..." - -#: calendar/gui/dialogs/task-editor.c:361 -#, fuzzy -msgid "FIXME: S_kip Occurrence" -msgstr "FIXME: ¿¶¤êʬ¤±..." - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "FIXME: ºî¶È³äÅö¤Æ(_n)" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "FIXME: ÊÖ¿®(_R)" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "FIXME: Á´°÷¤ØÊÖ¿®(_l)" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "FIXME: Êݸ¤ÈÊĤ¸¤ë" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "ºî¶È¤òÊݸ¤·¤Æ¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤òÊĤ¸¤ë" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "FIXME: °õºþ..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "FIXME: ¿¶¤êʬ¤±..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "¿¶¤êʬ¤±¥ë¡¼¥ë¤òÀßÄꤹ¤ë" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "FIXME: ºî¶È¤Î³ä¤êÅö¤Æ..." - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "ºî¶È¤ò狼¤Ë³ä¤êÅö¤Æ¤Æ¤¯¤À¤µ¤¤" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "FIXME: ºï½ü" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "Âê̾(_u):" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "½êÍ­¼Ô:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "³«»ÏÆü»þ(_r):" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "´üÆü(_D):" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "¾õ¶·(_S):" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"̤Ã幩\n" -"¿Ê¹ÔÃæ\n" -"´°Î»\n" -"¥­¥ã¥ó¥»¥ë\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "̤Ã幩" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "Í¥Àè½ç°Ì(_P):" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"¾å\n" -"Ãæ\n" -"²¼\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -#, fuzzy -msgid "High" -msgstr "¹â¤µ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% ´°Î»(_l):" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "¥³¥ó¥¿¥¯¥È(_C)..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "¥×¥é¥¤¥Ù¡¼¥È" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "ºî¶È" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "´°Î»Æü:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "¾ì½ê:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "¥ê¥½¡¼¥¹:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "¥³¥á¥ó¥È" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "´°Î»" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "ºîÀ®" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "ÀâÌÀ" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "Æü»þ" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "³«»ÏÆü" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "½ªÎ»Æü" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "ÃÏÍýŪ¤Ê°ÌÃÖ" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "ºÇ½ª¹¹¿·Æü" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "¾ì½ê" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "ÁÈ¿¥¼Ô" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% ´°Î»" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:436 -#: calendar/gui/prop.c:609 mail/message-list.c:484 -msgid "Priority" -msgstr "Í¥ÀèÅÙ" - -#: calendar/gui/e-calendar-table.c:260 -#, fuzzy -msgid "TaskPad" -msgstr "ºî¶È(_T)" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "ºÅÂ¥¾õ" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "³«¤¯..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "ºî¶È¤ò³«¤¯" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "ºî¶È¤òºï½ü¤¹¤ë" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i ʬʬ³ä" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "¿·µ¬Í½Ìó..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "¤³¤ÎͽÌó¤òÊÔ½¸..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "¤³¤ÎͽÌó¤òºï½ü" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "¤³¤ÎͽÌó¤ò²ÄÆ°¤Ë¤¹¤ë" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "¤³¤Î½ÐÍè»ö¤òºï½ü" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "¤¹¤Ù¤Æ¤Î½ÐÍè»ö¤òºï½ü" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "ͽÌó¤ÎÊÔ½¸" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "¥µ¥Þ¥ê¤Ê¤·" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "ͽÌó - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "ºî¶È - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "»ÅÌõµ­Æþ - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: ¥«¥ì¥ó¥À(_l)..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "FIXME: ¿·µ¬Í½Ìó(_N)" - -#: calendar/gui/event-editor.c:1312 -msgid "FIXME: Invite _Attendees..." -msgstr "FIXME: ÉÕ¤­Åº¤¤¤ò¾·ÂÔ..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "FIXME: ¾·ÂԤΥ­¥ã¥ó¥»¥ë(_a)..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "FIXME: vCalendar ¤ÇžÁ÷(_C)" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "FIXME: ÉÕ¤­Åº¤¤¤ò¾·ÂÔ..." - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "²ñµÄ¤ËÉÕ¤­Åº¤¤¤ò¾·ÂÔ¤¹¤ë" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "¥¤¥Ù¥ó¥È¥¨¥Ç¥£¥¿¥À¥¤¥¢¥í¥°" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "¥µ¥Þ¥ê(_S):" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "½êÍ­¼Ô(_O):" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "»þ´Ö" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "³«»Ï»þ´Ö:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "½ªÎ»»þ´Ö:" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "ËèÆü¤Î¥¤¥Ù¥ó¥È(_l)" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "ʬÎà" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "°ìÈÌ(_b)" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "¥×¥é¥¤¥Ù¡¼¥È(_v)" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "ÆâÌ©(_C)" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"ʬ\n" -"»þ\n" -"Æü\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "ɽ¼¨(_D)" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "¥ª¡¼¥Ç¥£¥ª(_A)" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "¥×¥í¥°¥é¥à(_P)" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "¥á¡¼¥ë(_M)" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "¥á¡¼¥ë¤ÎÁ÷¤êÀè(_t):" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "¥×¥í¥°¥é¥à¤ò¼Â¹Ô(_R):" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "¿¶¤êʬ¤±¥ë¡¼¥ë" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:736 -msgid "None" -msgstr "¥Î¡¼¥È" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "ËèÆü" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Ëè½µ" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Ëè·î" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Ëèǯ" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "label23" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "¾ï¤Ë " - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "Æü" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "label24" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "½µ" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "·î" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "²Ð" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "¿å" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "ÌÚ" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "¶â" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "ÅÚ" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Æü" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "label25" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1 ÈÖÌÜ\n" -"2 ÈÖÌÜ\n" -"3 ÈÖÌÜ\n" -"4 ÈÖÌÜ\n" -"5 ÈÖÌÜ\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"·îÍË\n" -"²ÐÍË\n" -"¿åÍË\n" -"ÌÚÍË\n" -"¶âÍË\n" -"ÅÚÍË\n" -"ÆüÍË\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "¾ï¤Ë" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "·î" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "ǯ" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "label27" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "½ªÎ»Æü" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "±Êµ×¤Ë·«¤êÊÖ¤¹" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -#, fuzzy -msgid "End after" -msgstr "¥Õ¥£¥ë¥¿¤ÎÊÔ½¸" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "½ÐÍè»ö" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "Îã³°" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "Êѹ¹" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "¿¶¤êʬ¤±" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "1·î" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "2·î" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "3·î" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "4·î" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "5·î" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "6·î" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "7·î" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "8·î" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "9·î" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "9·î" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "10·î" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "11·î" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "12·î" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "ÆüÍË" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "·îÍË" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "²ÐÍË" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "²ÐÍË" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "¿åÍË" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "¿åÍË" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "ÌÚÍË" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "ÌÚÍË" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "ÌÚÍË" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "¶âÍË" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "ÅÚÍË" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "ǯ" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "·î" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "2½µ´Ö" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "½µ" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "Æü" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "»þ" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "ʬ" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "ʬ" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr " ÉÃ" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "ÉÃ" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "ÌÀÆü" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "ºòÆü" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "º£Æü" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "º£" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "ºÇ¸å" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "¤³¤ì" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "¼¡" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "1ÈÖÌÜ" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "3ÈÖÌÜ" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "4ÈÖÌÜ" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "5ÈÖÌÜ" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "6ÈÖÌÜ" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "7ÈÖÌÜ" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "8ÈÖÌÜ" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "9ÈÖÌÜ" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "10ÈÖÌÜ" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "11ÈÖÌÜ" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "12ÈÖÌÜ" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "°ÊÁ°" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "TODO ¥¢¥¤¥Æ¥à¤òºîÀ®" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "TODO ¥¢¥¤¥Æ¥à¤òÊÔ½¸" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "¥µ¥Þ¥ê:" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "´üÆü:" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Í¥ÀèÅÙ:" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "¥¢¥¤¥Æ¥à¤Î¥³¥á¥ó¥È:" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "TODO ¥¢¥¤¥Æ¥à¤òÄɲÃ..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "¥¢¥¤¥Æ¥à¤òÊÔ½¸..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "¥µ¥Þ¥ê" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:608 -msgid "Due Date" -msgstr "´üÆü" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "»Ä¤Ã¤¿»þ´Ö" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "TODO ¥ê¥¹¥È" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "ÄɲÃ..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "ÊÔ½¸..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "½µ" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Æü" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "»þ" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "»þ" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "ʬ" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "ʬ" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "ÉÃ" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "ÉÃ" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "¤¢¤Ê¤¿¤ÎͽÌó¤ÎºÅÂ¥ " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "Ok" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "ǯ:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Æü¤Ë¤Á¤Ø°ÜÆ°" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"°ÜÆ°¤·¤¿¤¤Æü¤Ë¤Á¤òÁªÂò¤·¤Æ²¼¤µ¤¤\n" -"Æü¤Ë¤Á¤ò¥¯¥ê¥Ã¥¯¤·¤¿»þ, ¤½¤ÎÆü¤Ë¤Á¤Ë¤Ê¤ë\n" -"¤Ç¤·¤ç¤¦" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "º£Æü¤Ø°ÜÆ°" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1st" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2nd" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3rd" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4th" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5th" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6th" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7th" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8th" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9th" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10th" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11th" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12th" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13th" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14th" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15th" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16th" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17th" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18th" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19th" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20th" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21st" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22nd" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23rd" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24th" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25th" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26th" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27th" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28th" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29th" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30th" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31st" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "Æü" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "·î" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "²Ð" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "¿å" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "ÌÚ" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "¶â" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "ÅÚ" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "TODO ¥¢¥¤¥Æ¥à" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "º£Æü¤ÎÆüÉÕ (%a %b %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "º£½µ (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "º£½µ (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "º£½µ (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "º£·î (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "º£Ç¯ (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "¥«¥ì¥ó¥À¤Î°õºþ" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "°õºþ¥×¥ì¥Ó¥å¡¼" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "»þ´Ö¤Îɽ¼¨" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "»þ´Ö¤Î¥Õ¥©¡¼¥Þ¥Ã¥È" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "12 »þ´ÖÀ© (¸áÁ°/¸á¸å)" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "24 »þ´ÖÀ©" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "½µ¤Î»Ï¤á" - -#: calendar/gui/prop.c:351 -msgid "Sunday" -msgstr "ÆüÍË" - -#: calendar/gui/prop.c:352 -msgid "Monday" -msgstr "·îÍË" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "Æü¤Ë¤Á¤ÎÉý" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Æüɽ¼¨¤È½µÉ½¼¨¤Çɽ¼¨¤·¤¿¤¤³«»Ï¤È½ªÎ»»þ´Ö¤òÁªÂò\n" -"¤·¤Æ²¼¤µ¤¤\n" -"¤³¤ÎÈϰϳ°¤Î»þ´Ö¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤Ïɽ¼¨¤µ¤ì¤Ê¤¤\n" -"¤Ç¤·¤ç¤¦" - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "³«»ÏÆü:" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "½ªÎ»Æü:" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "ɽ¼¨¿§" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "¿§" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "TODO ¥ê¥¹¥È¤Ëɽ¼¨:" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "´ü¸Â¤Þ¤Ç¤Î»þ´Ö" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "TODO ¥ê¥¹¥È¥¹¥¿¥¤¥ë¤Î¥ª¥×¥·¥ç¥ó:" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "´ü¸Â¤¬²á¤®¤¿¥¢¥¤¥Æ¥à¤ò¶¯Ä´" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "¤Þ¤À´ü¸Â¤¬Íè¤Æ¤¤¤Ê¤¤¥¢¥¤¥Æ¥à¤ò¶¯Ä´" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "º£Æü´ü¸Â¤Î¥¢¥¤¥Æ¥à¤ò¶¯Ä´" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "TODO ¥ê¥¹¥È¤Î¥×¥í¥Ñ¥Æ¥£" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "TODO ¥ê¥¹¥È" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "¥¢¥é¡¼¥à" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -msgid "Alarm Properties" -msgstr "¥¢¥é¡¼¥à¤Î¥×¥í¥Ñ¥Æ¥£" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "ɽ¼¨¥¢¥é¡¼¥à¤ò BEEP ²»¤ÇÌĤ餹" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "¥ª¡¼¥Ç¥£¥ª¥¢¥é¡¼¥à¤Î¥¿¥¤¥à¥¢¥¦¥È¤Þ¤Ç¸å" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr " ÉÃ" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "µï̲¤ê¤òÍ­¸ú " - -#. populate default frame/box -#: calendar/gui/prop.c:840 -msgid "Defaults" -msgstr "¥Ç¥Õ¥©¥ë¥È" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "ÀÚ¤ê¼è¤ê" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤ÎÃæ¤ØÁªÂò¤µ¤ì¤¿¥¢¥¤¥Æ¥à¤òÀÚ¤ê¼è¤ë" - -#: composer/e-msg-composer-address-dialog.c:186 -msgid "Copy" -msgstr "¥³¥Ô¡¼" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤ÎÃæ¤ØÁªÂò¤µ¤ì¤¿¥¢¥¤¥Æ¥à¤ò¥³¥Ô¡¼¤¹¤ë" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "Ž¤êÉÕ¤±" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "¥¯¥ê¥Ã¥×¥Ü¡¼¥É¤«¤é¥¢¥¤¥Æ¥à¤òŽ¤êÉÕ¤±¤ë" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "¼õ¼è¿Í¤Î¥¢¥É¥ì¥¹¤òÁªÂò¤·¤Þ¤¹" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "¼õ¿®¼Ô¤Î¥ê¥¹¥È:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "¸¡º÷..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "̾Á°" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "¥¢¥É¥ì¥¹" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "¥×¥í¥Ñ¥Æ¥£..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "To: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 ¥Ð¥¤¥È" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u ¥Ð¥¤¥È" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "źÉÕʪ¤ÎÄɲÃ" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "ºï½ü" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "źÉÕʪ¥ê¥¹¥È¤«¤éÁªÂò¤·¤¿¥¢¥¤¥Æ¥à¤òºï½ü¤¹¤ë" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "źÉÕʪ¤ÎÄɲÃ..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤Ø¥Õ¥¡¥¤¥ë¤òźÉÕ¤¹¤ë" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "źÉդΥץí¥Ñ¥Æ¥£" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME ¼ïÊÌ:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "¥Õ¥¡¥¤¥ë̾:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "º¹½Ð¿Í:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "¥¢¥É¥ì¥¹Ä¢¤Î¤¿¤á¤Ë¤³¤³¤Ç¥¯¥ê¥Ã¥¯" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤·¤¿¤¤¿È¸µ¤òÆþÎÏ" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "¼õ¼è¿Í:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤Î¼õ¼è¿Í¤òÆþÎÏ" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥«¡¼¥Ü¥ó¥³¥Ô¡¼¤ò¼õ¿®¤¹¤ë¥¢¥É¥ì¥¹¤òÆþÎÏ" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"¥á¥Ã¥»¡¼¥¸¤Î¼õ¼è¿Í¥ê¥¹¥È¤ÎÃæ¤Ë¸½¤ì¤Ê¤¤¤Ç, " -"¥á¥Ã¥»¡¼¥¸¤Î¥«¡¼¥Ü¥ó¥³¥Ô¡¼¤ò¼õ¿®¤¹¤ë¥¢¥É¥ì¥¹¤òÆþÎÏ" - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "Subject:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "¥á¡¼¥ë¤ÎɽÂê¤òÆþÎÏ" - -#: composer/e-msg-composer.c:450 -msgid "Save as..." -msgstr "ÊÌ̾¤ÇÊݸ..." - -#: composer/e-msg-composer.c:461 -#, c-format -msgid "Error saving file: %s" -msgstr "¥Õ¥¡¥¤¥ë¤ÎÊݸÃæ¤Ë¥¨¥é¡¼: %s" - -#: composer/e-msg-composer.c:481 -#, c-format -msgid "Error loading file: %s" -msgstr "¥Õ¥¡¥¤¥ë¤Î¥í¡¼¥ÉÃæ¤Ë¥¨¥é¡¼: %s" - -#: composer/e-msg-composer.c:534 shell/e-shell-view-menu.c:164 -msgid "Evolution" -msgstr "Evolution" - -#: composer/e-msg-composer.c:540 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏÁ÷¿®¤·¤Æ¤¤¤Þ¤»¤ó\n" -"\n" -"Êѹ¹¤òÊݸ¤·¤Þ¤¹¤«?" - -#: composer/e-msg-composer.c:563 -msgid "Open file" -msgstr "¥Õ¥¡¥¤¥ë¤ò³«¤¯" - -#: composer/e-msg-composer.c:675 -msgid "That file does not exist." -msgstr "¤½¤Î¥Õ¥¡¥¤¥ë¤Ï¸ºß¤·¤Þ¤»¤ó" - -#: composer/e-msg-composer.c:685 -msgid "That is not a regular file." -msgstr "¤½¤ì¤ÏÄ̾ï¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" - -#: composer/e-msg-composer.c:695 -msgid "That file exists but is not readable." -msgstr "¤½¤Î¥Õ¥¡¥¤¥ë¤Ï¸ºß¤·¤Þ¤¹¤¬¡¤Æɤ߼è¤ê²Äǽ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" - -#: composer/e-msg-composer.c:705 -msgid "That file appeared accesible but open(2) failed." -msgstr "¤½¤Î¥Õ¥¡¥¤¥ë¤Ï¥¢¥¯¥»¥¹²Äǽ¤Î¤è¤¦¤Ë¸«¤¨¤Þ¤¹¤¬¡¤open(2) ¤Ï¼ºÇÔ¤·¤Þ¤·¤¿" - -#: composer/e-msg-composer.c:727 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"¥Õ¥¡¥¤¥ë¤Ï¤È¤Æ¤âÂ礭¤¤ (100K °Ê¾å) ¤Ç¤¹\n" -"¤½¤ì¤òÁÞÆþ¤¹¤ë¤³¤È¤ò˾¤à¤Î¤Ï³Î¤«¤Ç¤¹¤«?" - -#: composer/e-msg-composer.c:748 -msgid "An error occurred while reading the file." -msgstr "¥Õ¥¡¥¤¥ëÆɹþÃæ¤Î´Ö¤Ë¥¨¥é¡¼¤ÏȯÀ¸¤·¤Þ¤·¤¿" - -#: composer/e-msg-composer.c:844 shell/e-shell-view-menu.c:433 -msgid "_File" -msgstr "¥Õ¥¡¥¤¥ë(_F)" - -#: composer/e-msg-composer.c:850 -msgid "_Open..." -msgstr "³«¤¯(_O)..." - -#: composer/e-msg-composer.c:851 -msgid "Load a previously saved message" -msgstr "°ÊÁ°¤ËÊݸ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÆɤ߹þ¤à" - -#: composer/e-msg-composer.c:859 -msgid "_Save..." -msgstr "Êݸ(_S)..." - -#: composer/e-msg-composer.c:860 -msgid "Save message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÊݸ¤¹¤ë" - -#: composer/e-msg-composer.c:868 -msgid "_Save as..." -msgstr "ÊÌ̾¤ÇÊݸ(_S)..." - -#: composer/e-msg-composer.c:869 -msgid "Save message with a different name" -msgstr "Ê̤Î̾Á°¤Ç¥á¥Ã¥»¡¼¥¸¤òÊݸ¤¹¤ë" - -#: composer/e-msg-composer.c:877 -msgid "Save in _folder..." -msgstr "¥Õ¥©¥ë¥ÀÆâ¤òÊݸ(_f)..." - -#: composer/e-msg-composer.c:878 -msgid "Save the message in a specified folder" -msgstr "»ØÄꤷ¤¿¥Õ¥©¥ë¥ÀÆâ¤Î¥á¥Ã¥»¡¼¥¸¤òÊݸ¤¹¤ë" - -#: composer/e-msg-composer.c:887 -msgid "_Insert text file... (FIXME)" -msgstr "¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÁÞÆþ(_I)... (FIXME)" - -#: composer/e-msg-composer.c:888 -msgid "Insert a file as text into the message" -msgstr "¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤ò¥á¥Ã¥»¡¼¥¸¤ÎÃæ¤ËÁÞÆþ¤¹¤ë" - -#: composer/e-msg-composer.c:897 -msgid "_Send" -msgstr "Á÷¿®(_S)" - -#: composer/e-msg-composer.c:898 -msgid "Send the message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë" - -#: composer/e-msg-composer.c:908 -msgid "_Close..." -msgstr "ÊĤ¸¤ë(_C)..." - -#: composer/e-msg-composer.c:909 -msgid "Quit the message composer" -msgstr "¥á¥Ã¥»¡¼¥¸ºîÀ®¤ò½ªÎ»¤¹¤ë" - -#: composer/e-msg-composer.c:922 shell/e-shell-view-menu.c:477 -msgid "_Edit" -msgstr "ÊÔ½¸(_E)" - -#: composer/e-msg-composer.c:933 -msgid "_Format" -msgstr "¥Õ¥©¡¼¥Þ¥Ã¥È(_F)" - -#: composer/e-msg-composer.c:939 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:940 -msgid "Send the mail in HTML format" -msgstr "HTML ·Á¼°¤Ç¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë" - -#: composer/e-msg-composer.c:953 shell/e-shell-view-menu.c:382 -#: shell/e-shell-view-menu.c:488 shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "ɽ¼¨(_V)" - -#: composer/e-msg-composer.c:959 -msgid "Show _attachments" -msgstr "źÉÕʪ¤òɽ¼¨(_a)" - -#: composer/e-msg-composer.c:960 -msgid "Show/hide attachments" -msgstr "źÉÕʪ¤òɽ¼¨/±£¤¹" - -#: composer/e-msg-composer.c:993 -msgid "Send" -msgstr "Á÷¿®" - -#: composer/e-msg-composer.c:994 -msgid "Send this message" -msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë" - -#: composer/e-msg-composer.c:1003 -msgid "Attach" -msgstr "źÉÕ" - -#: composer/e-msg-composer.c:1004 -msgid "Attach a file" -msgstr "¥Õ¥¡¥¤¥ë¤òźÉÕ¤¹¤ë" - -#: composer/e-msg-composer.c:1191 -msgid "Compose a message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤¹¤ë" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë" - -#: filter/filter-folder.c:246 -msgid "" -msgstr "<¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë¤¿¤á¤Ë¤³¤³¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤>" - -#: mail/component-factory.c:225 -msgid "Cannot initialize Evolution's mail component." -msgstr "Evolution ¥á¡¼¥ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î½é´ü²½¤¬½ÐÍè¤Þ¤»¤ó" - -#: mail/folder-browser-factory.c:24 -msgid "Get mail" -msgstr "¿·Ãå¥á¡¼¥ë" - -#: mail/folder-browser-factory.c:24 -msgid "Check for new mail" -msgstr "¿·Ãå¥á¡¼¥ë¤Î¥Á¥§¥Ã¥¯" - -#: mail/folder-browser-factory.c:25 -msgid "Compose" -msgstr "ºîÀ®" - -#: mail/folder-browser-factory.c:25 -msgid "Compose a new message" -msgstr "¿·µ¬¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤¹¤ë" - -#: mail/folder-browser-factory.c:29 -msgid "Reply" -msgstr "ÊÖ¿®" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to the sender of this message" -msgstr "¥á¥Ã¥»¡¼¥¸¤Îº¹½Ð¿Í¤ØÊÖ¿®¤¹¤ë" - -#: mail/folder-browser-factory.c:30 -msgid "Reply to All" -msgstr "Á´°÷¤ØÊÖ¿®" - -#: mail/folder-browser-factory.c:30 -msgid "Reply to all recipients of this message" -msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤Î¼õ¼è¿ÍÁ´°÷¤ØÊÖ¿®¤¹¤ë" - -#: mail/folder-browser-factory.c:32 -msgid "Forward" -msgstr "žÁ÷" - -#: mail/folder-browser-factory.c:32 -msgid "Forward this message" -msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òžÁ÷¤¹¤ë" - -#: mail/folder-browser-factory.c:36 -msgid "Move" -msgstr "°ÜÆ°" - -#: mail/folder-browser-factory.c:36 -msgid "Move message to a new folder" -msgstr "¿·µ¬¥Õ¥©¥ë¥À¤Ø¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤¹¤ë" - -#: mail/folder-browser-factory.c:38 -msgid "Print the selected message" -msgstr "ÁªÂò¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò°õºþ¤¹¤ë" - -#: mail/folder-browser-factory.c:40 -msgid "Delete this message" -msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë" - -#: mail/folder-browser-factory.c:62 -msgid "_Threaded Message List" -msgstr "¥á¥Ã¥»¡¼¥¸¤ò¥¹¥ì¥Ã¥Éɽ¼¨(_T)" - -#: mail/folder-browser-factory.c:72 -msgid "_Print message" -msgstr "¥á¥Ã¥»¡¼¥¸¤ò°õºþ(_P)" - -#: mail/folder-browser-factory.c:81 -msgid "_Mark all messages seen" -msgstr "" - -#: mail/folder-browser-factory.c:86 -msgid "E_dit Message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òÊÔ½¸(_d)" - -#: mail/folder-browser-factory.c:92 -msgid "_View Message" -msgstr "¥á¥Ã¥»¡¼¥¸¤òɽ¼¨(_V)" - -#: mail/folder-browser-factory.c:98 -msgid "_Expunge" -msgstr "Ëõ¾Ã(_E)" - -#: mail/folder-browser-factory.c:104 -msgid "Mail _Filters ..." -msgstr "¥á¡¼¥ë¥Õ¥£¥ë¥¿(_F) ..." - -#: mail/folder-browser-factory.c:110 -msgid "_vFolder Editor ..." -msgstr "²¾ÁÛ¥Õ¥©¥ë¥À¥¨¥Ç¥£¥¿(_v) ..." - -#: mail/folder-browser-factory.c:116 -msgid "_Mail Configuration ..." -msgstr "¥á¡¼¥ëÀßÄê(_M)..." - -#: mail/folder-browser-factory.c:122 -msgid "Forget _Passwords" -msgstr "¥Ñ¥¹¥ï¡¼¥Éʶ¼º(_P)" - -#: mail/folder-browser-factory.c:129 -msgid "_Configure Folder" -msgstr "¥Õ¥©¥ë¥À¹½À®(_C)" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "¿È¸µ" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "ÁÈ¿¥" - -#: mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "½ð̾¥Õ¥¡¥¤¥ë" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "ÊÔ½¸" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "µ¯ÅÀ" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "¥á¡¼¥ë¥½¡¼¥¹" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "¥á¡¼¥ë¤ÎžÁ÷" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "¥Ë¥å¡¼¥¹¥µ¡¼¥Ð" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "¥Ë¥å¡¼¥¹¥½¡¼¥¹" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "HTML ·Á¼°¤Ç¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "¥á¡¼¥ëÀßÄê" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"¤è¤¦¤³¤½¡¤Evolution ¥á¡¼¥ëÀßÄꥦ¥£¥¶¡¼¥É¤Ø!\n" -"¤¢¤Ê¤¿¤ÎÅŻҥ᡼¥ëÀßÄê¤Ë¤Ä¤¤¤Æ¤¤¤¯¤Ä¤«¤Î¾ðÊó¤òÆþÎÏ\n" -"¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¤¤¹¤°¤ËÅŻҥ᡼¥ë¤òÁ÷¼õ¿®¤·»Ï¤á¤ë\n" -"¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥¼¡¤ò¥¯¥ê¥Ã¥¯¤·¤Æ³¤±¤Æ¤¯¤À¤µ¤¤¡¥" - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "¿È¸µ" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "¥á¡¼¥ë¤Îµ¯ÅÀ" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"¤¢¤Ê¤¿¤ÎÅŻҥ᡼¥ë¤ÎÀßÄê¤Ï´°Î»¤·¤Þ¤·¤¿\n" -"\"´°Î»\" ¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¿·¤·¤¤ÀßÄê¤òÊݸ¤·¤Æ¤¯¤À¤µ¤¤" - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:420 -msgid "No GPG/PGP program available." -msgstr "GPG/PGP ¥×¥í¥°¥é¥à¤ÏÍøÍѤǤ­¤Þ¤»¤ó" - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:426 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "GPG/PGP ¤Ø¤Î¥Ñ¥¤¥×¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: %s" - -#: mail/mail-ops.c:433 -msgid "Fetching mail" -msgstr "¥á¡¼¥ë¤ò¼è¤ê½Ð¤¹" - -#: mail/mail-ops.c:445 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏɽÂ꤬¤¢¤ê¤Þ¤»¤ó\n" -"ËÜÅö¤ËÁ÷¿®¤·¤Þ¤¹¤«?" - -#: mail/mail-ops.c:564 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"¤¢¤Ê¤¿¤Ï¥á¡¼¥ë¤òÁ÷¿®¤¹¤ëÁ°¤Ë¿È¸µ¤Î\n" -"ÀßÄê¤ò¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹" - -#: mail/mail-ops.c:838 -#, fuzzy -msgid "Move message(s) to" -msgstr "¿·µ¬¥Õ¥©¥ë¥À¤Ø¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤¹¤ë" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "¸½ºß̤²ò·è¤ÎÁàºî:" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "¥Ñ¥¤¥×¾å¤ËÉÔ´°Á´¤Ê¥á¥Ã¥»¡¼¥¸¤¬½ñ¤«¤ì¤Þ¤·¤¿!" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "Çɸ¯¤µ¤ì¤¿¥¹¥ì¥Ã¥É¤«¤é¥³¥Þ¥ó¥ÉÆɤ߹þ¤ßÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "Çɸ¯¤µ¤ì¤¿¥¹¥ì¥Ã¥É¤«¤éÉÔÀµ¤Ê¥á¥Ã¥»¡¼¥¸?" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤òºîÀ®¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¤Ç¤·¤¿" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "¥æ¡¼¥¶¤Ï¥¯¥¨¥ê¤ò¥­¥ã¥ó¥»¥ë¤·¤Þ¤·¤¿" - -#: mail/message-list.c:466 -msgid "Online Status" -msgstr "¥ª¥ó¥é¥¤¥ó¾õÂÖ" - -#: mail/message-list.c:502 -msgid "From" -msgstr "º¹½Ð¿Í" - -#: mail/message-list.c:509 -msgid "Subject" -msgstr "ɽÂê" - -#: mail/message-list.c:516 -msgid "Date" -msgstr "ÆüÉÕ" - -#: mail/message-list.c:523 -msgid "Received" -msgstr "¼õ¿®" - -#: mail/message-list.c:530 -msgid "To" -msgstr "¼õ¼è¿Í" - -#: mail/message-list.c:537 -msgid "Size" -msgstr "¥µ¥¤¥º" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Evolution ¤Î¥¤¥ó¥¹¥È¡¼¥ë" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "¤¢¤Ê¤¿¤Ï Evolution ¤ò½é¤á¤Æ¼Â¹Ô¤·¤¿¤è¤¦¤Ë»×¤¨¤Þ¤¹" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"Evolution ¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¤Î¤Ç \"OK\" ¤ò¥¯¥ê¥Ã¥¯¤·¤Æ²¼¤µ¤¤" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"¥Ç¥£¥ì¥¯¥È¥ê %s ¤òºîÀ®½ÐÍè¤Þ¤»¤ó\n" -"\n" -"¥¨¥é¡¼: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"'%s' ¤ÎÃæ¤Ë¥Õ¥¡¥¤¥ë¤ò\n" -"¥³¥Ô¡¼½ÐÍè¤Þ¤»¤ó" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolution ¤Î¥Õ¥¡¥¤¥ë¤ÏÀµ¤·¤¯¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤·¤¿" - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"¥Õ¥¡¥¤¥ë '%s' ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó\n" -"Evolution ¥æ¡¼¥¶¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ò\n" -"µöÍƤ¹¤ë¤¿¤á¤Ë°ÜÆ°¤·¤Æ²¼¤µ¤¤" - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"¥Ç¥£¥ì¥¯¥È¥ê '%s' ¤Ï¸ºß¤·¤Æ¤Þ¤¹¤¬¡¤Evolution\n" -"¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥Evolution ¥æ¡¼¥¶\n" -"¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤òµöÍƤ¹¤ë¤¿¤á¤Ë°ÜÆ°¤·¤Æ²¼¤µ¤¤" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"»ØÄꤵ¤ì¤¿¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "»ØÄꤵ¤ì¤¿¥Õ¥©¥ë¥À̾¤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - ¿·µ¬¥Õ¥©¥ë¥À¤ÎºîÀ®" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"ÁªÂò¤·¤¿¥Õ¥©¥ë¥À¤Î¼ïÊ̤ÏÍ׵ᤵ¤ì¤¿Áàºî¤Î¤¿¤á¤Ë\n" -"Í­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "¿·µ¬..." - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "(¥¿¥¤¥È¥ë¤Ê¤·)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy ¤Ï¤¢¤Ê¤¿¤Î $PATH ¤Ë¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó" - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Bug buddy ¤Ï¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿" - -#: shell/e-shell-view-menu.c:166 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:168 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution ¤Ï GNOME ¥Ç¥¹¥¯¥È¥Ã¥×´Ä¶­¤Ç¤Î¥á¡¼¥ë¡¤\n" -"¥«¥ì¥ó¥À¡¤¤½¤·¤Æ¥³¥ó¥¿¥¯¥È¥Þ¥Í¡¼¥¸¥á¥ó¥È¤Î¤¿¤á¤Î\n" -"¥°¥ë¡¼¥×¥¦¥§¥¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥Ñ¥Ã¥±¡¼¥¸¥½¥Õ¥È¤Ç¤¹" - -#: shell/e-shell-view-menu.c:318 -msgid "Go to folder..." -msgstr "¥Õ¥©¥ë¥À¤Ø°ÜÆ°..." - -#: shell/e-shell-view-menu.c:376 -msgid "_New" -msgstr "¿·µ¬(_N)" - -#: shell/e-shell-view-menu.c:388 -msgid "_Folder" -msgstr "¥Õ¥©¥ë¥À(_F)" - -#: shell/e-shell-view-menu.c:394 -msgid "Evolution bar _shortcut" -msgstr "Evolution ¥Ð¡¼¥·¥ç¡¼¥È¥«¥Ã¥È(_s)" - -#: shell/e-shell-view-menu.c:403 -msgid "_Mail message (FIXME)" -msgstr "¥á¡¼¥ë¥á¥Ã¥»¡¼¥¸(_M) (FIXME)" - -#: shell/e-shell-view-menu.c:409 -msgid "_Appointment (FIXME)" -msgstr "Ìó«(_A) (FIXME)" - -#: shell/e-shell-view-menu.c:415 -msgid "_Contact (FIXME)" -msgstr "¥³¥ó¥¿¥¯¥È(_C) (FIXME)" - -#: shell/e-shell-view-menu.c:421 -msgid "_Task (FIXME)" -msgstr "ºî¶È(_T) (FIXME)" - -#: shell/e-shell-view-menu.c:443 -msgid "_Go to folder..." -msgstr "¥Õ¥©¥ë¥À¤Ø°ÜÆ°(_G)..." - -#: shell/e-shell-view-menu.c:444 -msgid "Display a different folder" -msgstr "Ê̤Υե©¥ë¥À¤òɽ¼¨¤¹¤ë" - -#: shell/e-shell-view-menu.c:451 -msgid "_Create new folder..." -msgstr "¿·µ¬¥Õ¥©¥ë¥À¤ÎºîÀ®(_C)..." - -#: shell/e-shell-view-menu.c:452 shell/e-shell-view-menu.c:464 -msgid "Create a new folder" -msgstr "¿·µ¬¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ë" - -#: shell/e-shell-view-menu.c:463 -msgid "E_xit..." -msgstr "½ªÎ»(_x)..." - -#: shell/e-shell-view-menu.c:494 -msgid "Show _shortcut bar" -msgstr "¥·¥ç¡¼¥È¥«¥Ã¥È¥Ð¡¼¤òɽ¼¨(_s)" - -#: shell/e-shell-view-menu.c:495 -msgid "Show the shortcut bar" -msgstr "¥·¥ç¡¼¥È¥«¥Ã¥È¥Ð¡¼¤Îɽ¼¨¤¹¤ë" - -#: shell/e-shell-view-menu.c:500 -msgid "Show _folder bar" -msgstr "¥Õ¥©¥ë¥À¥Ð¡¼¤òɽ¼¨(_f)" - -#: shell/e-shell-view-menu.c:501 -msgid "Show the folder bar" -msgstr "¥Õ¥©¥ë¥À¥Ð¡¼¤Îɽ¼¨¤¹¤ë" - -#: shell/e-shell-view-menu.c:523 -msgid "_Actions" -msgstr "¹ÔÆ°(_A)" - -#: shell/e-shell-view-menu.c:534 -msgid "_Help" -msgstr "¥Ø¥ë¥×(_H)" - -#: shell/e-shell-view-menu.c:540 -msgid "Help _index" -msgstr "¥Ø¥ë¥×¥¤¥ó¥Ç¥Ã¥¯¥¹(_i)" - -#: shell/e-shell-view-menu.c:547 -msgid "Getting _started" -msgstr "»Ï¤á(_s)" - -#: shell/e-shell-view-menu.c:554 -msgid "Using the _mailer" -msgstr "¥á¡¼¥é¤Î»È¤¤Êý(_m)" - -#: shell/e-shell-view-menu.c:561 -msgid "Using the _calendar" -msgstr "¥«¥ì¥ó¥À¤Î»È¤¤Êý(_c)" - -#: shell/e-shell-view-menu.c:568 -msgid "Using the c_ontact manager" -msgstr "¥³¥ó¥¿¥¯¥È¥Þ¥Í¡¼¥¸¥ã¤Î»È¤¤Êý(_o)" - -#: shell/e-shell-view-menu.c:578 -msgid "_Submit bug report" -msgstr "ÉÔ¶ñ¹çÊó¹ðÄó½Ð(_S)" - -#: shell/e-shell-view-menu.c:579 -msgid "Submit bug report using Bug Buddy" -msgstr "Bug Buddy »È¤Ã¤ÆÉÔ¶ñ¹çÊó¹ð¤òÄó½Ð¤¹¤ë" - -#: shell/e-shell-view-menu.c:588 -msgid "_About Evolution..." -msgstr "Evolution ¤Ë¤Ä¤¤¤Æ(_A)..." - -#: shell/e-shell-view-menu.c:589 -msgid "Show information about Evolution" -msgstr "Evolution ¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òɽ¼¨¤¹¤ë" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "(ɽ¼¨¤·¤¿¥Õ¥©¥ë¥À¤Ï¤¢¤ê¤Þ¤»¤ó)" - -#: shell/e-shell-view.c:342 -msgid "Folders" -msgstr "¥Õ¥©¥ë¥À" - -#: shell/e-shell-view.c:740 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:291 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "¶ÉÉôµ­²±ÁõÃ֤Υ»¥Ã¥È¥¢¥Ã¥×¤¬½ÐÍè¤Þ¤»¤ó -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "¾®¤µ¤¤¥¢¥¤¥³¥ó(_S)" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "¾®¤µ¤¤¥¢¥¤¥³¥ó¤Ç¥·¥ç¡¼¥È¥«¥Ã¥È¤òɽ¼¨¤¹¤ë" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Â礭¤¤¥¢¥¤¥³¥ó(_L)" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Â礭¤¤¥¢¥¤¥³¥ó¤Ç¥·¥ç¡¼¥È¥«¥Ã¥È¤òɽ¼¨¤¹¤ë" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "¥¢¥¯¥Æ¥£¥Ö" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "¤³¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤ò¥¢¥¯¥Æ¥£¥Ö¤Ë¤¹¤ë" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "¥·¥ç¡¼¥È¥«¥Ã¥È¥Ð¡¼¤«¤é¤³¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤òºï½ü¤¹¤ë" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "¥·¥ç¡¼¥È¥«¥Ã¥È¤ÎÊݸÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿" - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(̾Á°¤Ê¤·)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "¥¨¥é¡¼¤Ï¤¢¤ê¤Þ¤»¤ó" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "°ìÈÌŪ¤Ê¥¨¥é¡¼" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "Ʊ¤¸Ì¾Á°¤Î¥Õ¥©¥ë¥À¤¬¤¹¤Ç¤Ë¸ºß¤·¤Æ¤¤¤Þ¤¹" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "»ØÄꤵ¤ì¤¿¥Õ¥©¥ë¥À¼ïÊ̤ÏÍ­¸ú¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "I/O ¥¨¥é¡¼" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ë½½Ê¬¤Ê¶õ¤­¤¬¤¢¤ê¤Þ¤»¤ó" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "»ØÄꤵ¤ì¤¿¥Õ¥©¥ë¥À¤Ï¸«ÉÕ¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "µ¡Ç½¤Ï¤³¤Îµ­²±ÁõÃ֤ǤϼÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "µö²Ä¤¬¤¢¤ê¤Þ¤»¤ó" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Áàºî¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "»ØÄꤵ¤ì¤¿¼ïÊ̤Ϥ³¤Îµ­²±ÁõÃ֤Ǥϥµ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "̤ÃΤΥ¨¥é¡¼" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "ÁªÂò¤µ¤ì¤¿¥Õ¥©¥ë¥À¤òɽ¼¨¤¹¤ë" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"¤ä¤¢¡¤Evolution ¥°¥ë¡¼¥×¥¦¥§¥¢¥¹¥¤¡¼¥È¤Î¤³¤Î preview release ¤Î\n" -"¥À¥¦¥ó¥í¡¼¥É¤Ë»þ´Ö¤ò³ä¤¤¤Æ¤¯¤ì¤Æ¤¢¤ê¤¬¤È¤¦\n" -"\n" -"ºÇ¸å¤Î°ì¥ö·îȾ¤Î´Ö¡¤²æ¡¹¤Î¾ÇÅÀ¤Ï Evolution ¤òÍ­ÍѤˤ¹¤ë¤³¤È¤Ë\n" -"¤Ä¤¤¤Æ¤Ç¤·¤¿¡¥Evolution ³«È¯¼Ô¤Î¿¤¯¤Ï¥Õ¥ë¥¿¥¤¥à¤ÇÈà¤é¤Î¥á¡¼¥ë\n" -"¤òÆɤि¤á¤Ëº£ Evolution ¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡¥¤¢¤Ê¤¿¤â½ÐÍè¤Þ¤·¤¿¡¥\n" -"(ɬ¤º¥Ð¥Ã¥¯¥¢¥Ã¥×¤òÊÝ»ý¤·¤Æ¤¯¤À¤µ¤¤)\n" -"\n" -"¤·¤«¤·²æ¡¹¤¬¤½¤Î°ÂÄêÀ­¤È¥»¥­¥å¥ê¥Æ¥£¤Ë±Æ¶Á¤òÍ¿¤¨¤Æ¤¤¤ë¿¤¯¤Î¥Ð¥°\n" -"¤ò½¤Àµ¤·¤¿´Ö¤Ë¡¤¤¢¤Ê¤¿¤Ï¤Þ¤ÀÃǤê½ñ¤­¤ò¼õ¤±¼è¤ê¤Þ¤¹: Evolution ¤Ï:\n" -"¥¯¥é¥Ã¥·¥å¤·¤¿¤ê¡¤¤¢¤Ê¤¿¤¬¤½¤¦Ë¾¤Þ¤Ê¤¯¤È¤â¥á¡¼¥ë¤òʶ¼º¤·¤¿¤ê¡¤\n" -"¤¢¤Ê¤¿¤¬Ë¾¤ó¤Ç¤â¥á¡¼¥ë¤Îºï½ü¤òµñÈݤ·¤¿¤ê¡¤»þÀÞ¥×¥í¥»¥¹¤¬Æ°ºî¤·¤¿\n" -"¤Þ¤Þ¤Î¾õÂ֤ˤʤ俤ꡤ100% ¤Î CPU ¥Ñ¥ï¡¼¤ò¾ÃÈñ¤·¤¿¤ê¡¤¤È¤Æ¤â®¤¯\n" -"Æ°¤¤¤¿¤ê¡¤¥í¥Ã¥¯¤·¤¿¤ê¡¤Ç¤°Õ¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ë HTML ¥á¡¼¥ë¤ò\n" -"Á÷¤Ã¤¿¤ê¡¤¤½¤·¤Æ¤¢¤Ê¤¿¤Îͧ¿Í¤È»Å»öÃç´Ö¤ÎÁ°¤Ç¤¢¤Ê¤¿¤òº¤¤é¤»¤ë\n" -"¤Ç¤·¤ç¤¦¡¥\n" -"¤¢¤¯¤Þ¤ÇÀâÌÀ½ñ¤Ë½¾¤Ã¤Æ¤ª»È¤¤¤¯¤À¤µ¤¤¡¥\n" -"\n" -"²æ¡¹¤Ï¤¢¤Ê¤¿¤¬²æ¡¹¤ÎÀ®²Ì¤ò³Ú¤·¤à¤³¤È¤ò˾¤ó¤Ç¤¤¤Þ¤¹¡¥¤½¤·¤Æ²æ¡¹¤Ï\n" -"Ç®¿´¤Ë¤¢¤Ê¤¿¤Î¹×¸¥¤òÂÔ¤Á¼õ¤±¤Æ¤¤¤Þ¤¹!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"¤¢¤ê¤¬¤È¤¦\n" -"Evolution ¥Á¡¼¥à\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "Evolution ¥·¥§¥ë¤Î½é´ü²½¤¬½ÐÍè¤Þ¤»¤ó" - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "Bonobo ¥³¥ó¥Ý¡¼¥Í¥ó¥È¥·¥¹¥Æ¥à¤ò½é´ü²½½ÐÍè¤Þ¤»¤ó" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "¥Õ¥£¡¼¥ë¥É" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "¥°¥ë¡¼¥×" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "¥½¡¼¥È" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "¥Õ¥£¥ë¥¿" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "¥Õ¥£¡¼¥ë¥ÉÁªÂò" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"¥«¥é¥à¤ò¤¢¤Ê¤¿¤Î¥Æ¡¼¥Ö¥ë¤Ë²Ã¤¨¤ë¤¿¤á¤Ë¡¤¤½¤ì¤ò\n" -"ɽ¼¨¤·¤¿¤¤¾ì½ê¤Ë¥É¥é¥Ã¥°¤·¤Æ¤¯¤À¤µ¤¤¡¥" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "ÍøÍѤǤ­¤ë¥Õ¥£¡¼¥ë¥É" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "¤³¤Î¥ª¡¼¥À¡¼¤Çɽ¼¨¤¹¤ë" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Äɲà >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< ºï½ü" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "»î°Æ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "¥Ó¥¸¡¼" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "¥ª¥Õ¥£¥¹¤Î³°" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "¾ðÊó¤Ê¤·" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "¾¤Î¾·ÂÔ(_I)..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "¥ª¥×¥·¥ç¥ó(_O)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "»Å»öÃæ¤Î»þ´Ö¤À¤±É½¼¨(_O)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "½Ì¾®¤·¤Æɽ¼¨(_Z)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "¥Õ¥ê¡¼/¥Ó¥¸¡¼ ¤Î¹¹¿·(_U)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "<<(_<)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "¼«Æ°¥Ô¥Ã¥¯¥¢¥Ã¥×(_A)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">>(_>)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "¤¹¤Ù¤Æ¤Î¿Í¡¹¤È¥ê¥½¡¼¥¹(_A)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "¤¹¤Ù¤Æ¤Î¿Í¡¹¤È¤Ò¤È¤Ä¤Î¥ê¥½¡¼¥¹(_P)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "¿Í¡¹¤¬É¬Í×(_R)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "¿Í¡¹¤È¤Ò¤È¤Ä¤Î¥ê¥½¡¼¥¹¤¬É¬Í×(_O)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "²ñµÄ³«»Ï»þ´Ö(_s):" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "²ñµÄ½ªÎ»»þ´Ö(_e):" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "¤¹¤Ù¤Æ¤ÎÉÕ¤­Åº¤¤" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "MTWTFSS" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "¥°¥ë¡¼¥× %i" diff --git a/po/ko.po b/po/ko.po deleted file mode 100644 index 513501cd8e..0000000000 --- a/po/ko.po +++ /dev/null @@ -1,3699 +0,0 @@ -# evolution ko.po -# Copyright (C) 2000 Free Software Foundation, Inc. -# Young-Ho, Cha , 2000. -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.0\n" -"POT-Creation-Date: 2000-07-10 21:51-0400\n" -"PO-Revision-Date: 2000-05-16 09:53:35+0900\n" -"Last-Translator: Sung-Hyun Nam \n" -"Language-Team: korean \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=euc-kr\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:58 -#: calendar/gui/calendar-pilot-sync.c:138 calendar/gui/main.c:68 -#, fuzzy -msgid "Could not initialize Bonobo" -msgstr "¸ÞÀÏ ÄÄÆ÷³ÍÆ®: Bonobo¸¦ ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -#, fuzzy -msgid "categories" -msgstr "¸ñ·Ï(_t)..." - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -#, fuzzy -msgid "Available Categories:" -msgstr "°¡´ÉÇÑ Çʵå" - -#: addressbook/contact-editor/e-contact-editor.c:579 -#: calendar/gui/event-editor.c:1118 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "¾à¼Ó(_A)" - -#: addressbook/contact-editor/e-contact-editor.c:580 -#: calendar/gui/event-editor.c:1119 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "ȸÀÇ ¿äû(_q)" - -#: addressbook/contact-editor/e-contact-editor.c:582 -#: calendar/gui/event-editor.c:1121 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "ÆíÁö ¸Þ¼¼Áö(_M)" - -#: addressbook/contact-editor/e-contact-editor.c:583 -#: calendar/gui/event-editor.c:1122 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "¿¬°á(_C)" - -#: addressbook/contact-editor/e-contact-editor.c:584 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:585 -#: calendar/gui/event-editor.c:1124 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "ÀÛ¾÷ ¿äû(_R)" - -#: addressbook/contact-editor/e-contact-editor.c:586 -#: calendar/gui/event-editor.c:1125 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "¿©Çà ÀÏÁ¤(_J)" - -#: addressbook/contact-editor/e-contact-editor.c:587 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:589 -#: addressbook/contact-editor/e-contact-editor.c:694 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:594 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:596 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:603 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:607 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "÷ºÎÆÄÀÏ Ãß°¡..." - -#: addressbook/contact-editor/e-contact-editor.c:609 -#: calendar/gui/event-editor.c:1148 -#, fuzzy -msgid "FIXME: _Delete" -msgstr "»èÁ¦" - -#: addressbook/contact-editor/e-contact-editor.c:610 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:611 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:613 -#: calendar/gui/event-editor.c:1152 -#, fuzzy -msgid "Page Set_up" -msgstr "ÂÊ ¼³Á¤:" - -#: addressbook/contact-editor/e-contact-editor.c:614 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:635 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:640 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1183 -#, fuzzy -msgid "_Object" -msgstr "Á¦¸ñ" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: addressbook/contact-editor/e-contact-editor.c:656 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: addressbook/contact-editor/e-contact-editor.c:657 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:663 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:665 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:668 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:673 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:676 -#: calendar/gui/event-editor.c:1217 -#, fuzzy -msgid "_Toolbars" -msgstr "µµ±¸(_T)" - -#: addressbook/contact-editor/e-contact-editor.c:681 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:682 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:683 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:688 -#: calendar/gui/event-editor.c:1229 -#, fuzzy -msgid "FIXME: _Font..." -msgstr "±Û²Ã..." - -#: addressbook/contact-editor/e-contact-editor.c:689 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:696 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:697 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:700 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:702 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:707 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:709 -#: calendar/gui/event-editor.c:1253 -#, fuzzy -msgid "_Forms" -msgstr "Çü½Ä" - -#: addressbook/contact-editor/e-contact-editor.c:714 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:717 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:718 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:719 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:720 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:721 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:724 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:725 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:726 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:728 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1266 -#, fuzzy -msgid "FIXME: For_ward" -msgstr "Àü´Þ" - -#: addressbook/contact-editor/e-contact-editor.c:741 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:742 -#: calendar/gui/event-editor.c:1280 -#, fuzzy -msgid "F_ormat" -msgstr "Çü½Ä" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:743 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "µµ±¸(_T)" - -#: addressbook/contact-editor/e-contact-editor.c:744 -#: calendar/gui/event-editor.c:1282 -#, fuzzy -msgid "Actio_ns" -msgstr "Çൿ(_A)" - -#: addressbook/contact-editor/e-contact-editor.c:775 -msgid "Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:776 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:780 -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -#: calendar/gui/event-editor.c:1336 -#, fuzzy -msgid "FIXME: Delete" -msgstr "»èÁ¦" - -#: addressbook/contact-editor/e-contact-editor.c:786 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:326 -#, fuzzy -msgid "Delete this item" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ »èÁ¦ÇÕ´Ï´Ù" - -#: addressbook/contact-editor/e-contact-editor.c:788 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:791 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1208 -#, fuzzy -msgid "Assistant" -msgstr "Á¶¼ö À̸§:" - -#: addressbook/contact-editor/e-contact-editor.c:1209 -#: addressbook/contact-editor/e-contact-editor.c:1313 -msgid "Business" -msgstr "Á÷Àå" - -#: addressbook/contact-editor/e-contact-editor.c:1210 -#, fuzzy -msgid "Business 2" -msgstr "Á÷Àå" - -#: addressbook/contact-editor/e-contact-editor.c:1211 -#, fuzzy -msgid "Business Fax" -msgstr "Á÷Àå Æѽº(_F)" - -#: addressbook/contact-editor/e-contact-editor.c:1212 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1213 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1214 -#, fuzzy -msgid "Company" -msgstr "ȸ»ç:" - -#: addressbook/contact-editor/e-contact-editor.c:1215 -#: addressbook/contact-editor/e-contact-editor.c:1314 -#, fuzzy -msgid "Home" -msgstr "Áý(_H)" - -#: addressbook/contact-editor/e-contact-editor.c:1216 -#, fuzzy -msgid "Home 2" -msgstr "Áý(_H)" - -#: addressbook/contact-editor/e-contact-editor.c:1217 -#, fuzzy -msgid "Home Fax" -msgstr "Áý(_H)" - -#: addressbook/contact-editor/e-contact-editor.c:1218 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1219 -#, fuzzy -msgid "Mobile" -msgstr "ÈÞ´ëÀüÈ­(_M)" - -#: addressbook/contact-editor/e-contact-editor.c:1220 -#: addressbook/contact-editor/e-contact-editor.c:1315 -msgid "Other" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1221 -msgid "Other Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1222 -#, fuzzy -msgid "Pager" -msgstr "ÂÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1223 -#, fuzzy -msgid "Primary" -msgstr "ÀÚÁÖ¾²´Â Email" - -#: addressbook/contact-editor/e-contact-editor.c:1224 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1225 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1226 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1270 -msgid "Primary Email" -msgstr "ÀÚÁÖ¾²´Â Email" - -#: addressbook/contact-editor/e-contact-editor.c:1271 -msgid "Email 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1272 -msgid "Email 3" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -#, fuzzy -msgid "_Add" -msgstr "Ãß°¡" - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#, fuzzy -msgid "_Delete" -msgstr "»èÁ¦" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "ÀüÈ­ ÇüÅÂ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "»õ ÀüÈ­ ÇüÅÂ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 -msgid "Add" -msgstr "Ãß°¡" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "¿¬¶ôó ÆíÁý±â" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "Àüü À̸§(_F)..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "ÆÄÀÏ·Î ÀúÀå:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "ȨÆäÀÌÁö ÁÖ¼Ò:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -#, fuzzy -msgid "Wants to receive _HTML mail" -msgstr "HTMLÇü½Ä ÆíÁö »ç¿ë(_H)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "ÁÖ¼Ò:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "Á÷Àå(_B)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "Áý(_H)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "Á÷Àå Æѽº(_F)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "ÈÞ´ëÀüÈ­(_M)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -#, fuzzy -msgid "B_usiness" -msgstr "Á÷Àå" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -#, fuzzy -msgid "_This is the mailing address" -msgstr "ÀÌ°ÍÀº ÀüÀÚ¿ìÆí ÁÖ¼ÒÀÔ´Ï´Ù(_m)" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -#, fuzzy -msgid "C_ontacts..." -msgstr "¿¬¶ôó(_C)..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "¸ñ·Ï(_t)..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -#, fuzzy -msgid "_Job title:" -msgstr "Á÷ÇÔ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "ȸ»ç:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "General" -msgstr "ÀÏ¹Ý Á¤º¸" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -#, fuzzy -msgid "_Department:" -msgstr "ºÎ¼­:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -#, fuzzy -msgid "_Office:" -msgstr "»ç¹«½Ç:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -#, fuzzy -msgid "_Profession:" -msgstr "Á÷¾÷:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -#, fuzzy -msgid "_Nickname:" -msgstr "º°¸í:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -#, fuzzy -msgid "_Spouse:" -msgstr "¹è¿ìÀÚ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -#, fuzzy -msgid "_Birthday:" -msgstr "»ýÀÏ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -#, fuzzy -msgid "_Assistant's name:" -msgstr "Á¶¼ö À̸§:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -#, fuzzy -msgid "_Manager's Name:" -msgstr "¸Å´ÏÀú À̸§:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -#, fuzzy -msgid "Anni_versary:" -msgstr "±â³äÀÏ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -#, fuzzy -msgid "No_tes:" -msgstr "³ëÆ®:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "ÀÚ¼¼È÷" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Àüü À̸§ È®ÀÎ" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "¼º(_F):" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "À̸§(_L):" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:415 -#: calendar/gui/calendar-commands.c:544 -#, fuzzy -msgid "New" -msgstr "»õ·Î¿î(_N)" - -#: addressbook/gui/component/addressbook.c:415 -msgid "Create a new contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find" -msgstr "ã±â" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find a contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:420 -#: addressbook/gui/component/addressbook.c:487 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -msgid "Print" -msgstr "Àμâ" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Print contacts" -msgstr "" - -#. Delete -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:498 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "»èÁ¦" - -#: addressbook/gui/component/addressbook.c:421 -#, fuzzy -msgid "Delete a contact" -msgstr "÷ºÎÆÄÀÏ ¼±ÅÃ" - -#: addressbook/gui/component/addressbook.c:494 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:501 -#, fuzzy -msgid "_New Contact" -msgstr "¿¬°á(_C)" - -#: addressbook/gui/component/addressbook.c:509 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:588 -#, fuzzy -msgid "Unable to open addressbook" -msgstr "ÁÖ¼Ò·Ï" - -#: addressbook/gui/component/addressbook.c:593 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:329 -msgid "Save as VCard" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "Æú´õ Ž»ö±â°¡ Ç¥½ÃÇÒ URI" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -#, fuzzy -msgid "o" -msgstr "¹Þ´Â »ç¶÷" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "¼³¸í:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP ¼­¹ö:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Æ÷Æ® ¹øÈ£:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "·çÆ® DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "À̸§:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "ÂÊ ¼³Á¤:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Çü½Ä À̸§:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "¹Ì¸®º¸±â:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "¼³Á¤" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Æ÷ÇÔ:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "¼½¼Ç:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "°¢ À帶´Ù Ç¥Á¦´Þ±â" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "»õ ÂÊÀ» ½ÃÀÛÇÕ´Ï´Ù" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "¿­ ¼ö:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "³¡´Ü ºñ¿ì±â:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "±Û²Ã" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "±Û²Ã..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "¸Ó¸´¸»" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 Æ÷ÀÎÆ® Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "º»¹®" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 Æ÷ÀÎÆ® Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "¸í¾Ï" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "ȸ»ö ¸í¾ÏÀ¸·Î Àμâ" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Çü½Ä" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Á¾ÀÌ" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "ÇüÅÂ:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Æø:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "³ôÀÌ:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "±ÞÁö¹æ¹ý:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "¿©¹é" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "À§:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "¾Æ·¡:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "¿ÞÂÊ:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "¿À¸¥ÂÊ:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "ÂÊ" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Å©±â:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "¹æÇâ" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "¼¼·Î" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "°¡·Î" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "¸Ó¸®¸»:" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "²¿¸®¸»:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "¦¼ö ÂÊ µÚÁý±â" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "¸Ó¸®¸»/²¿¸®¸»" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -#, fuzzy -msgid "am" -msgstr "À̸§" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -#, fuzzy -msgid "Headings:" -msgstr "¸Ó¸´¸»" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -#, fuzzy -msgid "Appointments:" -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:712 -#: calendar/gui/gncal-todo.c:716 -msgid "Day" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -#, fuzzy -msgid "Show the working week" -msgstr "³ª¹« ¸ð¾çº¸±â·Î Åä±ÛÇÕ´Ï´Ù" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:711 -msgid "Week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -#, fuzzy -msgid "Month" -msgstr "±Û²Ã" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -#, fuzzy -msgid "Year" -msgstr "¸Ó¸®¸»:" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -#, fuzzy -msgid "Prev" -msgstr "¹Ì¸®º¸±â:" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -#, fuzzy -msgid "Today" -msgstr "º»¹®" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "" - -#: calendar/gui/calendar-commands.c:673 -#, fuzzy -msgid "Print..." -msgstr "Àμâ" - -#: calendar/gui/calendar-commands.c:682 -#, fuzzy -msgid "_New appointment..." -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -msgid "About Calendar" -msgstr "" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -msgid "'s calendar" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "Specifies the port on which the Pilot is" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "PORT" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:70 -msgid "If you want to debug the attributes on records" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:72 -msgid "Only syncs from desktop to pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:74 -msgid "Only syncs from pilot to desktop" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:97 -msgid "Can not create Pilot socket\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:104 -#, c-format -msgid "Can not bind to device %s\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:107 -msgid "Failed to get a connection from the Pilot device" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:111 -msgid "pi_accept failed" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:211 -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:531 -#, fuzzy -msgid "No description" -msgstr "¼³¸í:" - -#: calendar/gui/calendar-pilot-sync.c:692 -msgid "Could not open DatebookDB on the Pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:693 -msgid "Unable to open DatebookDB" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:728 -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "Æú´õ Ž»ö±â°¡ Ç¥½ÃÇÒ URI" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1056 -#, fuzzy -msgid "Snooze" -msgstr "Å©±â" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ »èÁ¦ÇÕ´Ï´Ù" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ »èÁ¦ÇÕ´Ï´Ù" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:289 -#, fuzzy -msgid "Edit Appointment" -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:298 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/event-editor.c:301 -#, c-format -msgid "Task - %s" -msgstr "" - -#: calendar/gui/event-editor.c:304 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "¿©Çà ÀÏÁ¤(_J)" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "¾à¼Ó(_A)" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:14 calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:15 -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "_Display" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:32 -msgid "_Audio" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:33 -msgid "_Program" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:34 -#, fuzzy -msgid "_Mail" -msgstr "ÈÞ´ëÀüÈ­(_M)" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "Mail _to:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Run program:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "Classification" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "Pu_blic" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:39 -#, fuzzy -msgid "Pri_vate" -msgstr "ºÙÀ̱â" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Confidential" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:596 -#, fuzzy -msgid "None" -msgstr "³ëÆ®(_N)" - -#: calendar/gui/event-editor-dialog.glade.h:44 -#, fuzzy -msgid "Daily" -msgstr "ÀÚ¼¼È÷" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:80 -#, fuzzy -msgid "month(s)" -msgstr "±Û²Ã" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:90 -#, fuzzy -msgid "Exceptions" -msgstr "¼³Á¤" - -#: calendar/gui/event-editor-dialog.glade.h:92 -#, fuzzy -msgid "Change" -msgstr "¸í¾Ï" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "Á¾ÀÌ" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "º»¹®" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -#, fuzzy -msgid "tues" -msgstr "³ëÆ®:" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -#, fuzzy -msgid "year" -msgstr "¸Ó¸®¸»:" - -#: calendar/gui/getdate.y:421 -#, fuzzy -msgid "month" -msgstr "±Û²Ã" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "º¸³¿" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "º»¹®" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "ºÙÀ̱â" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -#, fuzzy -msgid "first" -msgstr "¼º(_F):" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -#, fuzzy -msgid "fourth" -msgstr "Á¤·Ä" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -#, fuzzy -msgid "eighth" -msgstr "³ôÀÌ:" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "Àμâ" - -#: calendar/gui/getdate.y:451 -#, fuzzy -msgid "tenth" -msgstr "º¸³Â½¿" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:171 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:181 -#, fuzzy -msgid "Due Date:" -msgstr "ºÎ¼­:" - -#: calendar/gui/gncal-todo.c:190 -#, fuzzy -msgid "Priority:" -msgstr "¿ì¼±¼øÀ§" - -#: calendar/gui/gncal-todo.c:206 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:324 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:325 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:424 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:425 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:426 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "¿ì¼±¼øÀ§" - -#: calendar/gui/gncal-todo.c:427 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:439 -#, fuzzy -msgid "To-do list" -msgstr "µµ±¸(_T)" - -#. Add -#: calendar/gui/gncal-todo.c:478 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Ãß°¡..." - -#. Edit -#: calendar/gui/gncal-todo.c:487 -#, fuzzy -msgid "Edit..." -msgstr "Ãß°¡..." - -#: calendar/gui/gncal-todo.c:711 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:712 calendar/gui/gncal-todo.c:716 -msgid "Days" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Seconds" -msgstr "¼½¼Ç:" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Second" -msgstr "º¸³¿" - -#: calendar/gui/gnome-cal.c:453 calendar/gui/gnome-cal.c:1064 -#: calendar/gui/gnome-cal.c:1120 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1069 calendar/gui/gnome-cal.c:1124 -msgid "Ok" -msgstr "" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "Fr" -msgstr "º¸³½ »ç¶÷" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "" - -#: calendar/gui/print.c:1249 -#, fuzzy -msgid "Print Preview" -msgstr "¹Ì¸®º¸±â:" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -#, fuzzy -msgid "Sunday" -msgstr "º¸³¿" - -#: calendar/gui/prop.c:348 -#, fuzzy -msgid "Monday" -msgstr "º»¹®" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -#, fuzzy -msgid "Alarm Properties" -msgstr "÷ºÎ ¼Ó¼º" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -#, fuzzy -msgid "Defaults" -msgstr "ÀÚ¼¼È÷" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:766 -msgid "Cut" -msgstr "ÀÚ¸£±â" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "¼±ÅÃÇÑ Ç׸ñÀ» Ŭ¸³º¸µå·Î ÀÚ¸¨´Ï´Ù" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:767 -msgid "Copy" -msgstr "º¹»ç" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "¼±ÅÃÇÑ Ç׸ñÀ» Ŭ¸³º¸µå·Î º¹»çÇÕ´Ï´Ù" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:768 -msgid "Paste" -msgstr "ºÙÀ̱â" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Ŭ¸³º¸µå¿¡¼­ Ç׸ñÀ» º¹»çÇÕ´Ï´Ù" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "¹ÞÀ» »ç¶÷ÀÇ ÁÖ¼Ò ¼±ÅÃ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "¹Þ´Â»ç¶÷ ¸ñ·Ï:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "°Ë»ö..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "À̸§" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "ÁÖ¼Ò" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "¼³Á¤..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "¹Þ´Â»ç¶÷: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "ÂüÁ¶: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 ¹ÙÀÌÆ®" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u ¹ÙÀÌÆ®" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "÷ºÎÆÄÀÏ Ãß°¡" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:332 -msgid "Remove" -msgstr "Á¦°Å" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "÷ºÎÆÄÀÏ ¸ñ·Ï¿¡¼­ ¼±ÅÃÇÑ Ç׸ñÀ» Á¦°ÅÇÕ´Ï´Ù" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "÷ºÎÆÄÀÏ Ãß°¡..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "¸Þ¼¼Áö¿¡ ÆÄÀÏÀ» ÷ºÎÇÕ´Ï´Ù" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "÷ºÎ ¼Ó¼º" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME Çü½Ä:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "ÆÄÀÏ À̸§:" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "ÁÖ¼Ò·Ï" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "¹Þ´Â»ç¶÷:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "¸Þ¼¼Áö¸¦ ¹ÞÀ»»ç¶÷À» ÀÔ·ÂÇϼ¼¿ä" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "ÂüÁ¶:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "¸Þ¼¼ÁöÀÇ »çº»À» ¹ÞÀ» »ç¶÷ÀÇ ÁÖ¼Ò¸¦ ÀÔ·ÂÇϼ¼¿ä" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "ÂüÁ¶ ¸ñ·Ï¿¡´Â ¾øÁö¸¸ ¸Þ¼¼ÁöÀÇ »çº»À» ¹ÞÀ» »ç¶÷µéÀÇ ÁÖ¼Ò¸¦ ÀÔ·ÂÇϼ¼¿ä" - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Á¦¸ñ:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "ÆíÁöÀÇ Á¦¸ñÀ» ÀÔ·ÂÇϼ¼¿ä" - -#: composer/e-msg-composer.c:463 -#, fuzzy -msgid "Save as..." -msgstr "°Ë»ö..." - -#: composer/e-msg-composer.c:474 -#, c-format -msgid "Error saving file: %s" -msgstr "" - -#: composer/e-msg-composer.c:494 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:513 -#, fuzzy -msgid "Discard this message?" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ ´Ù¸¥»ç¶÷¿¡°Ô Àü´ÞÇÕ´Ï´Ù" - -#: composer/e-msg-composer.c:561 -msgid "Open file" -msgstr "" - -#: composer/e-msg-composer.c:718 -msgid "Save in _folder..." -msgstr "Æú´õ·Î ÀúÀå(_f)..." - -#: composer/e-msg-composer.c:718 -msgid "Save the message in a specified folder" -msgstr "¸Þ¼¼Áö¸¦ ÁöÁ¤ÇÑ Æú´õ·Î ÀúÀåÇÕ´Ï´Ù" - -#: composer/e-msg-composer.c:721 composer/e-msg-composer.c:763 -msgid "Send" -msgstr "º¸³¿" - -#: composer/e-msg-composer.c:721 -msgid "Send the message" -msgstr "¸Þ¼¼Áö¸¦ º¸³À´Ï´Ù" - -#: composer/e-msg-composer.c:733 -msgid "View _attachments" -msgstr "÷ºÎ¹° º¸±â(_a)" - -#: composer/e-msg-composer.c:733 -msgid "View/hide attachments" -msgstr "÷ºÎ¹°À» º¸°Å³ª ¼û±é´Ï´Ù" - -#: composer/e-msg-composer.c:763 -msgid "Send this message" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ º¸³¿" - -#: composer/e-msg-composer.c:766 -msgid "Cut selected region into the clipboard" -msgstr "¼±ÅÃÇÑ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î ÀÚ¸¨´Ï´Ù" - -#: composer/e-msg-composer.c:767 -msgid "Copy selected region into the clipboard" -msgstr "¼±ÅÃÇÑ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î º¹»çÇÕ´Ï´Ù" - -#: composer/e-msg-composer.c:768 -msgid "Paste selected region into the clipboard" -msgstr "Ŭ¸³º¸µå¿¡ ¼±ÅÃµÈ ¿µ¿ªÀ» ºÙÀÔ´Ï´Ù" - -#: composer/e-msg-composer.c:769 -msgid "Undo" -msgstr "Ãë¼Ò" - -#: composer/e-msg-composer.c:769 -msgid "Undo last operation" -msgstr "¸¶Áö¸· ÀÛ¾÷ Ãë¼Ò" - -#: composer/e-msg-composer.c:772 -msgid "Attach" -msgstr "÷ºÎ" - -#: composer/e-msg-composer.c:772 -msgid "Attach a file" -msgstr "ÆÄÀÏÀ» ÷ºÎÇÕ´Ï´Ù" - -#: composer/e-msg-composer.c:948 -#, fuzzy -msgid "Compose a message" -msgstr "»õ ¸ÞÀÏ ¸Þ¼¼Áö¸¦ ÀÛ¼ºÇÕ´Ï´Ù" - -#: filter/filter-editor.c:198 -#, fuzzy -msgid "Edit Filter" -msgstr "ÇÊÅÍ" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "" - -#: filter/filter-editor.c:211 -#, fuzzy -msgid "Finish" -msgstr "ã±â" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "" - -#: filter/filter-editor.c:216 -#, fuzzy -msgid "Apply" -msgstr "´äÀå" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" - -#: mail/component-factory.c:196 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "Evolution ½©À» ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù." - -#: mail/folder-browser-factory.c:29 -msgid "Get mail" -msgstr "ÆíÁö ¹Þ±â" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "»õ ÆíÁö¸¦ È®ÀÎÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:30 -#, fuzzy -msgid "Compose a new message" -msgstr "»õ ¸ÞÀÏ ¸Þ¼¼Áö¸¦ ÀÛ¼ºÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "´äÀå" - -#: mail/folder-browser-factory.c:34 -msgid "Reply to the sender of this message" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ º¸³½»ç¶÷¿¡°Ô ´äÀåÀ» ÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "¸ðµÎ ´äÀå" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to all recipients of this message" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ ¹ÞÀº ¸ðµç »ç¶÷¿¡°Ô ´äÀåÀ» ÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "Àü´Þ" - -#: mail/folder-browser-factory.c:37 -msgid "Forward this message" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ ´Ù¸¥»ç¶÷¿¡°Ô Àü´ÞÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Refile" -msgstr "¹Þ¾Ò½¿" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Move message to a new folder" -msgstr "¸Þ¼¼Áö¸¦ ÁöÁ¤ÇÑ Æú´õ·Î ÀúÀåÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:43 -msgid "Print the selected message" -msgstr "¼±ÅÃÇÑ ¸Þ¼¼Áö¸¦ ÀμâÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:45 -msgid "Delete this message" -msgstr "ÀÌ ¸Þ¼¼Áö¸¦ »èÁ¦ÇÕ´Ï´Ù" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "Á¦°Å(_E)" - -#: mail/folder-browser-factory.c:83 -#, fuzzy -msgid "_Filter Druid ..." -msgstr "ÇÊÅÍ" - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "" - -#: mail/mail-config.c:259 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:274 -#, fuzzy -msgid "Full name:" -msgstr "ÆÄÀÏ À̸§:" - -#: mail/mail-config.c:302 -#, fuzzy -msgid "Email address:" -msgstr "ȨÆäÀÌÁö ÁÖ¼Ò:" - -#: mail/mail-config.c:325 -#, fuzzy -msgid "Organization:" -msgstr "¹æÇâ" - -#: mail/mail-config.c:337 -msgid "Signature file:" -msgstr "" - -#: mail/mail-config.c:342 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:699 mail/mail-config.c:790 -#, fuzzy -msgid "Server:" -msgstr "LDAP ¼­¹ö:" - -#: mail/mail-config.c:705 -#, fuzzy -msgid "Username:" -msgstr "ÆÄÀÏ À̸§:" - -#: mail/mail-config.c:711 -#, fuzzy -msgid "Path:" -msgstr "ºÙÀ̱â" - -#: mail/mail-config.c:717 mail/mail-config.c:796 -#, fuzzy -msgid "Authentication:" -msgstr "¹æÇâ" - -#: mail/mail-config.c:729 mail/mail-config.c:808 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:755 mail/mail-config.c:830 -msgid "Test these values before continuing" -msgstr "" - -#: mail/mail-config.c:937 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:955 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" - -#: mail/mail-config.c:1129 mail/mail-config.c:1208 -msgid "Mail Configuration" -msgstr "" - -#. Identity page -#: mail/mail-config.c:1146 -msgid "Identity" -msgstr "" - -#. Source page -#: mail/mail-config.c:1165 -msgid "Mail Source" -msgstr "" - -#. Transport page -#: mail/mail-config.c:1186 -msgid "Mail Transport" -msgstr "" - -#: mail/mail-config.c:1308 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1310 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1453 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1455 -msgid "Add Source" -msgstr "" - -#: mail/mail-ops.c:372 -#, fuzzy -msgid "Fetching mail" -msgstr "ÆíÁö ¹Þ±â" - -#: mail/mail-ops.c:384 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:732 -#, fuzzy -msgid "Refile message(s) to" -msgstr "¸Þ¼¼Áö¸¦ ã½À´Ï´Ù" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/main.c:62 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "¸ÞÀÏ ÄÄÆ÷³ÍÆ®: Bonobo¸¦ ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù" - -#: mail/message-list.c:460 -msgid "Online Status" -msgstr "" - -#: mail/message-list.c:488 -msgid "From" -msgstr "º¸³½ »ç¶÷" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "Á¦¸ñ" - -#: mail/message-list.c:502 -#, fuzzy -msgid "Date" -msgstr "ºÙÀ̱â" - -#: mail/message-list.c:509 -#, fuzzy -msgid "Received" -msgstr "¹Þ¾Ò½¿" - -#: mail/message-list.c:516 -msgid "To" -msgstr "¹Þ´Â »ç¶÷" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "Å©±â" - -#: shell/e-init.c:25 -msgid "Evolution can not create its local folders" -msgstr "" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "¸Þ¼¼Áö¸¦ ÁöÁ¤ÇÑ Æú´õ·Î ÀúÀåÇÕ´Ï´Ù" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -#, fuzzy -msgid "New..." -msgstr "»õ·Î¿î(_N)" - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "½Ã½ºÅÛÀÇ °æ·Î¿¡ Bug buddy¸¦ ãÀ»¼ö ¾ø½À´Ï´Ù." - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "Bug buddy¸¦ ½ÇÇàÇÒ¼ö ¾ø½À´Ï´Ù." - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "" - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution Àº ±×³ð µ¥½ºÅ©Å¾ ȯ°æ¿¡¼­ ÀüÀÚ¿ìÆí, \n" -"ÀÏÁ¤, ¿¬¶ôó °ü¸®¸¦ ÇÏ´Â ±×·ì¿þ¾î ÀÀ¿ëÇÁ·Î±×·¥\n" -"¸ðÀ½ ÀÔ´Ï´Ù." - -#: shell/e-shell-view-menu.c:301 -#, fuzzy -msgid "Go to folder..." -msgstr "Æú´õ·Î ÀúÀå(_f)..." - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "Æú´õ(_F)" - -#: shell/e-shell-view-menu.c:369 -msgid "Evolution _Bar Shortcut" -msgstr "Evolution ´ÜÃà ¸·´ë(_B)" - -#: shell/e-shell-view-menu.c:375 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "ÆíÁö ¸Þ¼¼Áö(_M)" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -msgid "Composes a new mail message" -msgstr "»õ ¸ÞÀÏ ¸Þ¼¼Áö¸¦ ÀÛ¼ºÇÕ´Ï´Ù" - -#: shell/e-shell-view-menu.c:378 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "¾à¼Ó(_A)" - -#: shell/e-shell-view-menu.c:381 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "¿¬°á(_C)" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:387 -#, fuzzy -msgid "Task _Request (FIXME)" -msgstr "ÀÛ¾÷ ¿äû(_R)" - -#: shell/e-shell-view-menu.c:390 -#, fuzzy -msgid "_Journal Entry (FIXME)" -msgstr "¿©Çà ÀÏÁ¤(_J)" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "»õ·Î¿î(_N)" - -#: shell/e-shell-view-menu.c:402 -#, fuzzy -msgid "_Go to folder..." -msgstr "Æú´õ·Î ÀúÀå(_f)..." - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:404 -#, fuzzy -msgid "_Create new folder..." -msgstr "Æú´õ·Î ÀúÀå(_f)..." - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "" - -#: shell/e-shell-view-menu.c:419 -#, fuzzy -msgid "Show _shortcut bar" -msgstr "´ÜÃà ¸·´ë Åä±Û" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "Show the shortcut bar" -msgstr "´ÜÃื´ë¸¦ Åä±ÛÇÕ´Ï´Ù" - -#: shell/e-shell-view-menu.c:422 -#, fuzzy -msgid "Show _folder bar" -msgstr "´ÜÃà ¸·´ë Åä±Û" - -#: shell/e-shell-view-menu.c:423 -#, fuzzy -msgid "Show the folder bar" -msgstr "´ÜÃื´ë¸¦ Åä±ÛÇÕ´Ï´Ù" - -#: shell/e-shell-view-menu.c:440 -msgid "Help _Index" -msgstr "" - -#: shell/e-shell-view-menu.c:443 -msgid "Getting _Started" -msgstr "" - -#: shell/e-shell-view-menu.c:446 -msgid "Using the _Mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:449 -msgid "Using the _Calendar" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -msgid "Using the Cont_act Manager" -msgstr "" - -#: shell/e-shell-view-menu.c:457 -#, fuzzy -msgid "_Submit bug report" -msgstr "¹ö±× Á¦º¸(_S)" - -#: shell/e-shell-view-menu.c:458 -msgid "Submit bug-report via bug-buddy" -msgstr "bug-buddy·Î ¹ö±×Á¦º¸¸¦ ÇÕ´Ï´Ù" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "Çൿ(_A)" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:208 -#, fuzzy -msgid "Folders" -msgstr "Æú´õ(_F)" - -#: shell/e-shell-view.c:600 -#, c-format -msgid "Evolution - %s" -msgstr "" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "½Ã½ºÅÛ ÀúÀåÀåÄ¡¸¦ ÁöÁ¤ÇÒ¼ö ¾ø½À´Ï´Ù -- %s" - -#: shell/e-shortcut.c:469 -msgid "New group" -msgstr "" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:236 -#, fuzzy -msgid "Show the shortcuts as small icons" -msgstr "´ÜÃื´ë¸¦ Åä±ÛÇÕ´Ï´Ù" - -#: shell/e-shortcuts-view.c:238 -#, fuzzy -msgid "_Large icons" -msgstr "¿©¹é" - -#: shell/e-shortcuts-view.c:239 -#, fuzzy -msgid "Show the shortcuts as large icons" -msgstr "´ÜÃื´ë¸¦ Åä±ÛÇÕ´Ï´Ù" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:332 -msgid "Remove this shortcut from the shortcut bar" -msgstr "" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "" - -#: shell/e-storage.c:217 -#, fuzzy -msgid "(No name)" -msgstr "À̸§" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "" - -#: shell/main.c:99 -#, fuzzy -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"¾È³çÇϼ¼¿ä. Evolution ±×·ì¿þ¾î ½´Æ®ÀÇ ¹Ì¸®º¸±â ÆÇÀ» ´Ù¿î·Îµå ¹Þ¾ÆÁּż­\n" -"°¨»çÇÕ´Ï´Ù. \n" -"\n" -"Evolution ÆÀÀº ÀÎÅÍ³Ý »ç¿ëÀÚ¿¡°Ô °¡´ÉÇÑÇÑ °­·ÂÇÑ, È®À强ÀÖ°í ¿¹»Û, \n" -"ºü¸£°í Àß ¿¬µ¿µÇ°Ô EvolutionÀ» ¸¸µå´Âµ¥ ÃÖ¼±À» ´ÙÇؼ­ ÀÛ¾÷ÇÏ°í \n" -"ÀÖ½À´Ï´Ù. ¾ÆÁÖ ÈûµçÀÛ¾÷ÀÌÁö¸¸ ¾ÆÁ÷ ¿Ï·áµÇÁö´Â ¾Ê¾Ò½À´Ï´Ù. \n" -"\n" -"EvolutionÀ» ÀÌÇØÇÏ·Á¸é, »ç¿ëÀÚÀÎÅÍÆäÀ̽º »Ó¸¸ ¾Æ´Ï¶ó Àüü ½Ã½ºÅÛÀ»\n" -"Á¦¾îÇÏ´Â ±â¹Ý ¿£ÁøÀ» ¸¸µå´Âµ¥ ¿ì¸®ÀÛ¾÷ÀÇ ´ëºÎºÐÀÌÀÌ ÃÐÁ¡ÀÌ ¸ÂÃß¾îÁ®\n" -"Àִٴ°ÍÀ» ÀÌÇØÇÏ°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. We are just cresting the hill now,\n" -"though, and will be pouring most of our love and attention into the UI\n" -"from here out. ÇÏÁö¸¸ Àû¾îµµ µ¥¸ðÆÇÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù´Â°ÍÀ» ¾Ë²®´Ï´Ù.\n" -"\n" -"¹Ùº¸°°Àº ±Ç¸®Æ÷±â ¼­¾à¼­ÀÔ´Ï´Ù. EvolutionÀº :½Ã½ºÅÛÀ» Æı«ÇÒ¼ö ÀÖÀ¸¸ç\n" -"´ç½ÅÀÇ ¸ÞÀÏÀ» Àоî¹ö¸±¼öµµ, ÇÁ·Î¼¼½º ½ÇÇàÀÌ Çì¸á¼öµµ CPUÁ¡À¯¸¦ 100% \n" -"»ç¿ëÇÒ¼öµµ, ¿Àµ¿ÀÛ Çϰųª ¸ØÃâ¼öµµ, ¾Æ¹« ¸ÞÀϸµ ¸ñ·Ï¿¡³ª HTMLÇü½ÄÀÇ \n" -"¸ÞÀÏÀ» º¸³»¼­ ´ç½ÅÀÇ Ä£±¸³ª µ¿·áÁ÷¿øÀ» ³î·¡ÄÑ ÁÙ¼öµµ ÀÖÀ¸³ª ÀÌ·±°ÍµéÀ»\n" -"°¨¼öÇÒ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.\n" -"\n" -"¿ì¸®ÀÇ Èûµç ÀÛ¾÷ÀÇ °á°ú°¡ ´ç½ÅÀ» ±â»Ú°Ô ÇÏ¿´À¸¸é ÁÁ°ÚÀ¸¸ç, ¶ÇÇÑ ´ç½ÅÀÇ\n" -"µµ¿òÀ» °£ÀýÈ÷ ±â´Ù¸®°í ÀÖ½À´Ï´Ù.\n" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"°¨»çÇÕ´Ï´Ù\n" -"Evolution ÆÀ\n" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "Evolution ½©À» ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù." - -#: shell/main.c:214 -#, fuzzy -msgid "Cannot initialize the configuration system." -msgstr "Evolution ½©À» ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù." - -#: shell/main.c:220 -msgid "Cannot initialize the Bonobo component system." -msgstr "º¸³ëº¸ ÄÄÆ÷³ÍÆ® ½Ã½ºÅÛÀ» ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Çʵå" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "¹­±â" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Á¤·Ä" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "ÇÊÅÍ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#, fuzzy -msgid "Field Chooser" -msgstr "Çʵå" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "°¡´ÉÇÑ Çʵå" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "ÀÌ ¼ø¼­·Î º¸±â" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Ãß°¡ >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Á¦°Å" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -#, fuzzy -msgid "Tentative" -msgstr "¹æÇâ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -#, fuzzy -msgid "Out of Office" -msgstr "»ç¹«½Ç:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -#, fuzzy -msgid "_Options" -msgstr "¼³Á¤" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "ȸÀÇ ¿äû(_q)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "ȸÀÇ ¿äû(_q)" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -#, fuzzy -msgid "..." -msgstr "Ãß°¡..." - -#: widgets/shortcut-bar/e-group-bar.c:633 -#, fuzzy, c-format -msgid "Group %i" -msgstr "¹­±â" - -#~ msgid "Browse..." -#~ msgstr "Ž»ö..." - -#~ msgid "Send a new message" -#~ msgstr "»õ ¸Þ¼¼Áö¸¦ º¸³À´Ï´Ù" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "EvolutionÀÇ Æú´õ Ž»ö±â¸¦ ÃʱâÈ­ ÇÒ¼ö ¾ø½À´Ï´Ù." - -#~ msgid "_Task" -#~ msgstr "ÀÛ¾÷(_T)" - -#~ msgid "_Selected Items" -#~ msgstr "¼±ÅÃÇÑ Ç׸ñ(_S)" - -#~ msgid "_New Folder" -#~ msgstr "»õ Æú´õ(_N)" - -#~ msgid "_Open" -#~ msgstr "¿­±â(_O)" - -#~ msgid "Clos_e All Items" -#~ msgstr "¸ðµç Ç׸ñ ´Ý±â(_e)" - -#~ msgid "Closes all the open items" -#~ msgstr "¿­·ÁÀÖ´Â ¸ðµç Ç׸ñÀ» ´Ý½À´Ï´Ù" - -#, fuzzy -#~ msgid "Show _Treeview" -#~ msgstr "³ª¹«¸ð¾çº¸±â Åä±Û(_T)" diff --git a/po/nl.po b/po/nl.po deleted file mode 100644 index 49bb08dd67..0000000000 --- a/po/nl.po +++ /dev/null @@ -1,3770 +0,0 @@ -# Evolution - Dutch translation -# Copyright (C) 2000 Free Software Foundation, Inc. -# Arjan Scherpenisse , 2000 -msgid "" -msgstr "" -"Project-Id-Version: Evolution VERSION\n" -"POT-Creation-Date: 2000-07-10 21:51-0400\n" -"PO-Revision-Date: 2000-04-20 01:24+0100\n" -"Last-Translator: Arjan Scherpenisse \n" -"Language-Team: Dutch \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:58 -#: calendar/gui/calendar-pilot-sync.c:138 calendar/gui/main.c:68 -#, fuzzy -msgid "Could not initialize Bonobo" -msgstr "Mail gedeelte: Ik kon Bonobo niet initializeren" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:579 -#: calendar/gui/event-editor.c:1118 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "_Afspraak" - -#: addressbook/contact-editor/e-contact-editor.c:580 -#: calendar/gui/event-editor.c:1119 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "Verzoek tot _Vergadering" - -#: addressbook/contact-editor/e-contact-editor.c:582 -#: calendar/gui/event-editor.c:1121 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "_Mail bericht" - -#: addressbook/contact-editor/e-contact-editor.c:583 -#: calendar/gui/event-editor.c:1122 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "_Contact" - -#: addressbook/contact-editor/e-contact-editor.c:584 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:585 -#: calendar/gui/event-editor.c:1124 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "Taak _Verzoek" - -#: addressbook/contact-editor/e-contact-editor.c:586 -#: calendar/gui/event-editor.c:1125 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "_Dagboek Item" - -#: addressbook/contact-editor/e-contact-editor.c:587 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:589 -#: addressbook/contact-editor/e-contact-editor.c:694 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:594 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:596 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:603 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:607 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Bestand bijvoegen..." - -#: addressbook/contact-editor/e-contact-editor.c:609 -#: calendar/gui/event-editor.c:1148 -#, fuzzy -msgid "FIXME: _Delete" -msgstr "Verwijderen" - -#: addressbook/contact-editor/e-contact-editor.c:610 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:611 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:613 -#: calendar/gui/event-editor.c:1152 -msgid "Page Set_up" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:614 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:635 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:640 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1183 -#, fuzzy -msgid "_Object" -msgstr "Onderwerp" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: addressbook/contact-editor/e-contact-editor.c:656 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: addressbook/contact-editor/e-contact-editor.c:657 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:663 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:665 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:668 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:673 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:676 -#: calendar/gui/event-editor.c:1217 -#, fuzzy -msgid "_Toolbars" -msgstr "_Gereedschap" - -#: addressbook/contact-editor/e-contact-editor.c:681 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:682 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:683 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:688 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: _Font..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:689 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:696 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:697 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:700 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:702 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:707 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:709 -#: calendar/gui/event-editor.c:1253 -#, fuzzy -msgid "_Forms" -msgstr "Doorsturen" - -#: addressbook/contact-editor/e-contact-editor.c:714 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:717 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:718 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:719 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:720 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:721 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:724 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:725 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:726 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:728 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1266 -#, fuzzy -msgid "FIXME: For_ward" -msgstr "Doorsturen" - -#: addressbook/contact-editor/e-contact-editor.c:741 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:742 -#: calendar/gui/event-editor.c:1280 -#, fuzzy -msgid "F_ormat" -msgstr "Doorsturen" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:743 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "_Gereedschap" - -#: addressbook/contact-editor/e-contact-editor.c:744 -#: calendar/gui/event-editor.c:1282 -#, fuzzy -msgid "Actio_ns" -msgstr "_Acties" - -#: addressbook/contact-editor/e-contact-editor.c:775 -msgid "Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:776 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:780 -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -#: calendar/gui/event-editor.c:1336 -#, fuzzy -msgid "FIXME: Delete" -msgstr "Verwijderen" - -#: addressbook/contact-editor/e-contact-editor.c:786 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:326 -#, fuzzy -msgid "Delete this item" -msgstr "Verwijdert dit bericht" - -#: addressbook/contact-editor/e-contact-editor.c:788 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:791 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1208 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1209 -#: addressbook/contact-editor/e-contact-editor.c:1313 -msgid "Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1210 -msgid "Business 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1211 -msgid "Business Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1212 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1213 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1214 -#, fuzzy -msgid "Company" -msgstr "Kopieren" - -#: addressbook/contact-editor/e-contact-editor.c:1215 -#: addressbook/contact-editor/e-contact-editor.c:1314 -#, fuzzy -msgid "Home" -msgstr "_Notitie" - -#: addressbook/contact-editor/e-contact-editor.c:1216 -#, fuzzy -msgid "Home 2" -msgstr "_Notitie" - -#: addressbook/contact-editor/e-contact-editor.c:1217 -#, fuzzy -msgid "Home Fax" -msgstr "_Notitie" - -#: addressbook/contact-editor/e-contact-editor.c:1218 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1219 -#, fuzzy -msgid "Mobile" -msgstr "_Mail" - -#: addressbook/contact-editor/e-contact-editor.c:1220 -#: addressbook/contact-editor/e-contact-editor.c:1315 -msgid "Other" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1221 -msgid "Other Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1222 -#, fuzzy -msgid "Pager" -msgstr "Plakken" - -#: addressbook/contact-editor/e-contact-editor.c:1223 -#, fuzzy -msgid "Primary" -msgstr "Prioriteit" - -#: addressbook/contact-editor/e-contact-editor.c:1224 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1225 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1226 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1270 -msgid "Primary Email" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1271 -msgid "Email 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1272 -msgid "Email 3" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#, fuzzy -msgid "_Delete" -msgstr "Verwijderen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 -msgid "Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -#, fuzzy -msgid "Contact Editor" -msgstr "_Contact" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -#, fuzzy -msgid "_Home" -msgstr "_Notitie" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -#, fuzzy -msgid "_Mobile" -msgstr "_Mail" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -#, fuzzy -msgid "C_ontacts..." -msgstr "_Contact" - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -#, fuzzy -msgid "_Job title:" -msgstr "_Mail" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "Kopieren" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "General" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -#, fuzzy -msgid "No_tes:" -msgstr "_Notitie" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:10 -#, fuzzy -msgid "_Middle:" -msgstr "_Mail" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:415 -#: calendar/gui/calendar-commands.c:544 -#, fuzzy -msgid "New" -msgstr "_Nieuw" - -#: addressbook/gui/component/addressbook.c:415 -msgid "Create a new contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find" -msgstr "Zoeken" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find a contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:420 -#: addressbook/gui/component/addressbook.c:487 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -msgid "Print" -msgstr "Afdrukken" - -#: addressbook/gui/component/addressbook.c:420 -#, fuzzy -msgid "Print contacts" -msgstr "Uw contactenlijst" - -#. Delete -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:498 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "Verwijderen" - -#: addressbook/gui/component/addressbook.c:421 -#, fuzzy -msgid "Delete a contact" -msgstr "Selecteer het bestand" - -#: addressbook/gui/component/addressbook.c:494 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:501 -#, fuzzy -msgid "_New Contact" -msgstr "_Contact" - -#: addressbook/gui/component/addressbook.c:509 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:588 -#, fuzzy -msgid "Unable to open addressbook" -msgstr "Klik hier voor het adresboek" - -#: addressbook/gui/component/addressbook.c:593 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:329 -msgid "Save as VCard" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "De URI die de Map Bladeraar weer zal geven" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -#, fuzzy -msgid "o" -msgstr "Aan" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:10 -#, fuzzy -msgid "Options" -msgstr "_Acties" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:12 -#, fuzzy -msgid "Sections:" -msgstr "_Acties" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:16 -#, fuzzy -msgid "Start on a new page" -msgstr "Stuur een bericht" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -#, fuzzy -msgid "Fonts" -msgstr "Contacten" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -#, fuzzy -msgid "Body" -msgstr "Vandaag" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:28 -#, fuzzy -msgid "Format" -msgstr "Doorsturen" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -#, fuzzy -msgid "Paper" -msgstr "Plakken" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:37 -#, fuzzy -msgid "Top:" -msgstr "Aan:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:41 -#, fuzzy -msgid "Page" -msgstr "Plakken" - -#: addressbook/printing/e-contact-print.glade.h:42 -#, fuzzy -msgid "Size:" -msgstr "Grootte" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:48 -#, fuzzy -msgid "Portrait" -msgstr "Prioriteit" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -#, fuzzy -msgid "Appointments:" -msgstr "_Afspraak" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -#, fuzzy -msgid "Gnome Calendar" -msgstr "Kalender" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "" - -#: calendar/gui/calendar-commands.c:456 -#, fuzzy -msgid "Open calendar" -msgstr "Uw kalender" - -#: calendar/gui/calendar-commands.c:495 -#, fuzzy -msgid "Save calendar" -msgstr "Uw kalender" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:712 -#: calendar/gui/gncal-todo.c:716 -msgid "Day" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -#, fuzzy -msgid "Show the working week" -msgstr "Toont of verbergt het boomoverzicht" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:711 -msgid "Week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -#, fuzzy -msgid "Month" -msgstr "Contacten" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -#, fuzzy -msgid "Print this calendar" -msgstr "Uw kalender" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -#, fuzzy -msgid "Today" -msgstr "Vandaag" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -#, fuzzy -msgid "New Ca_lendar" -msgstr "Kalender" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -#, fuzzy -msgid "Open Ca_lendar" -msgstr "Kalender" - -#: calendar/gui/calendar-commands.c:664 -#, fuzzy -msgid "Open a calendar" -msgstr "Uw kalender" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -#, fuzzy -msgid "Save Calendar As" -msgstr "Kalender" - -#: calendar/gui/calendar-commands.c:673 -#, fuzzy -msgid "Print..." -msgstr "Afdrukken" - -#: calendar/gui/calendar-commands.c:682 -#, fuzzy -msgid "_New appointment..." -msgstr "_Afspraak" - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -#, fuzzy -msgid "About Calendar" -msgstr "Uw kalender" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -#, fuzzy -msgid "'s calendar" -msgstr "Uw kalender" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "Specifies the port on which the Pilot is" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "PORT" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:70 -msgid "If you want to debug the attributes on records" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:72 -msgid "Only syncs from desktop to pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:74 -msgid "Only syncs from pilot to desktop" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:97 -msgid "Can not create Pilot socket\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:104 -#, c-format -msgid "Can not bind to device %s\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:107 -msgid "Failed to get a connection from the Pilot device" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:111 -msgid "pi_accept failed" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:211 -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:531 -msgid "No description" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:692 -msgid "Could not open DatebookDB on the Pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:693 -msgid "Unable to open DatebookDB" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:728 -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "De URI die de Map Bladeraar weer zal geven" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1056 -#, fuzzy -msgid "Snooze" -msgstr "Grootte" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "_Afspraak" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "_Afspraak" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "Verwijdert dit bericht" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "Verwijdert dit bericht" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:289 -#, fuzzy -msgid "Edit Appointment" -msgstr "_Afspraak" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:298 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "_Afspraak" - -#: calendar/gui/event-editor.c:301 -#, fuzzy, c-format -msgid "Task - %s" -msgstr "Taken" - -#: calendar/gui/event-editor.c:304 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "_Dagboek Item" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "_Afspraak" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:14 calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:15 -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "_Display" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:32 -msgid "_Audio" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:33 -msgid "_Program" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:34 -#, fuzzy -msgid "_Mail" -msgstr "_Mail" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "Mail _to:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Run program:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "Classification" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "Pu_blic" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:39 -#, fuzzy -msgid "Pri_vate" -msgstr "Plakken" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Confidential" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:596 -#, fuzzy -msgid "None" -msgstr "_Notitie" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:80 -#, fuzzy -msgid "month(s)" -msgstr "Contacten" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:90 -#, fuzzy -msgid "Exceptions" -msgstr "_Acties" - -#: calendar/gui/event-editor-dialog.glade.h:92 -#, fuzzy -msgid "Change" -msgstr "Plakken" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "Plakken" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "Vandaag" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -#, fuzzy -msgid "tues" -msgstr "_Notitie" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "" - -#: calendar/gui/getdate.y:421 -#, fuzzy -msgid "month" -msgstr "Contacten" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "Versturen" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "Vandaag" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Plakken" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "Afdrukken" - -#: calendar/gui/getdate.y:451 -#, fuzzy -msgid "tenth" -msgstr "Verzonden" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:171 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:181 -msgid "Due Date:" -msgstr "" - -#: calendar/gui/gncal-todo.c:190 -#, fuzzy -msgid "Priority:" -msgstr "Prioriteit" - -#: calendar/gui/gncal-todo.c:206 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:324 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:325 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:424 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:425 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:426 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Prioriteit" - -#: calendar/gui/gncal-todo.c:427 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:439 -#, fuzzy -msgid "To-do list" -msgstr "_Gereedschap" - -#. Add -#: calendar/gui/gncal-todo.c:478 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "" - -#. Edit -#: calendar/gui/gncal-todo.c:487 -msgid "Edit..." -msgstr "" - -#: calendar/gui/gncal-todo.c:711 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:712 calendar/gui/gncal-todo.c:716 -#, fuzzy -msgid "Days" -msgstr "Klad" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Seconds" -msgstr "_Acties" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Second" -msgstr "Versturen" - -#: calendar/gui/gnome-cal.c:453 calendar/gui/gnome-cal.c:1064 -#: calendar/gui/gnome-cal.c:1120 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1069 calendar/gui/gnome-cal.c:1124 -msgid "Ok" -msgstr "" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "Fr" -msgstr "Van" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "" - -#: calendar/gui/print.c:1084 -#, fuzzy -msgid "Print Calendar" -msgstr "Kalender" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -#, fuzzy -msgid "Sunday" -msgstr "Versturen" - -#: calendar/gui/prop.c:348 -#, fuzzy -msgid "Monday" -msgstr "Vandaag" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -#, fuzzy -msgid "Alarm Properties" -msgstr "Eigenschappen" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:766 -msgid "Cut" -msgstr "Knippen" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Knip het geselecteerde item naar het klembord" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:767 -msgid "Copy" -msgstr "Kopieren" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Kopieer het geseleceteerde item naar het klembord" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:768 -msgid "Paste" -msgstr "Plakken" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Plak een item vanaf het klembord" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Selecteer de geadresseerden" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -#, fuzzy -msgid "Properties..." -msgstr "Eigenschappen" - -#: composer/e-msg-composer-address-dialog.glade.h:14 -#, fuzzy -msgid "To: >>" -msgstr "Aan:" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -#, fuzzy -msgid "Cc: >>" -msgstr "Cc:" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -#, fuzzy -msgid "Bcc: >>" -msgstr "Bcc:" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Bestand bijvoegen" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:332 -msgid "Remove" -msgstr "Verwijderen" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Verwijder het geselecteerde bestand uit de lijst van attachments" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Bestand bijvoegen..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Voeg een bestand bij het bericht" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Klik hier voor het adresboek" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "Aan:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Geef de geaddreseerden" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Geef de adressen die een 'carbon copy' van het bericht moeten krijgen" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Geef de adressen die een 'carbon copy' van het bericht moeten krijgen " -"zonder\n" -"dat ze op de geadresseerden-lijst van het bericht verschijnen." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Onderwerp:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Geef het onderwerp van het bericht" - -#: composer/e-msg-composer.c:463 -msgid "Save as..." -msgstr "" - -#: composer/e-msg-composer.c:474 -#, c-format -msgid "Error saving file: %s" -msgstr "" - -#: composer/e-msg-composer.c:494 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:513 -#, fuzzy -msgid "Discard this message?" -msgstr "Dit bericht doorsturen" - -#: composer/e-msg-composer.c:561 -#, fuzzy -msgid "Open file" -msgstr "Map Openen" - -#: composer/e-msg-composer.c:718 -msgid "Save in _folder..." -msgstr "Opslaan in _map..." - -#: composer/e-msg-composer.c:718 -msgid "Save the message in a specified folder" -msgstr "Sla het bericht op in een bepaalde map" - -#: composer/e-msg-composer.c:721 composer/e-msg-composer.c:763 -msgid "Send" -msgstr "Versturen" - -#: composer/e-msg-composer.c:721 -msgid "Send the message" -msgstr "Verstuurt het bericht" - -#: composer/e-msg-composer.c:733 -msgid "View _attachments" -msgstr "Bekijk _attachments" - -#: composer/e-msg-composer.c:733 -msgid "View/hide attachments" -msgstr "Toon/verberg de attachments" - -#: composer/e-msg-composer.c:763 -msgid "Send this message" -msgstr "Dit bericht versturen" - -#: composer/e-msg-composer.c:766 -msgid "Cut selected region into the clipboard" -msgstr "Knip het geselecteerde gebied naar het klembord" - -#: composer/e-msg-composer.c:767 -msgid "Copy selected region into the clipboard" -msgstr "Kopieer het geselecteerde gebied naar het klembord" - -#: composer/e-msg-composer.c:768 -msgid "Paste selected region into the clipboard" -msgstr "Plak het geselecteerde gebied vanuit het klembord" - -#: composer/e-msg-composer.c:769 -msgid "Undo" -msgstr "Ongedaan maken" - -#: composer/e-msg-composer.c:769 -msgid "Undo last operation" -msgstr "Maak de laatste bewerking ongedaan" - -#: composer/e-msg-composer.c:772 -msgid "Attach" -msgstr "Bijvoegen" - -#: composer/e-msg-composer.c:772 -msgid "Attach a file" -msgstr "Voeg een bestand bij" - -#: composer/e-msg-composer.c:948 -#, fuzzy -msgid "Compose a message" -msgstr "Stelt een nieuw bericht op" - -#: filter/filter-editor.c:198 -#, fuzzy -msgid "Edit Filter" -msgstr "_Map" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "" - -#: filter/filter-editor.c:211 -#, fuzzy -msgid "Finish" -msgstr "Zoeken" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "" - -#: filter/filter-editor.c:216 -#, fuzzy -msgid "Apply" -msgstr "Beantwoorden" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" - -#: mail/component-factory.c:196 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "Niet in geslaagd om het Bonobo componentensysteem te initializeren" - -#: mail/folder-browser-factory.c:29 -#, fuzzy -msgid "Get mail" -msgstr "Nieuwe mail" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "Controleer op nieuwe mail" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:30 -#, fuzzy -msgid "Compose a new message" -msgstr "Stelt een nieuw bericht op" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "Beantwoorden" - -#: mail/folder-browser-factory.c:34 -msgid "Reply to the sender of this message" -msgstr "Beantwoord dit bericht" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "Alle beantwoorden" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to all recipients of this message" -msgstr "Stuur antwoord naar alle geadresseerden van dit bericht" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "Doorsturen" - -#: mail/folder-browser-factory.c:37 -msgid "Forward this message" -msgstr "Dit bericht doorsturen" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Refile" -msgstr "Ontvangen" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Move message to a new folder" -msgstr "Sla het bericht op in een bepaalde map" - -#: mail/folder-browser-factory.c:43 -msgid "Print the selected message" -msgstr "Druk dit bericht af" - -#: mail/folder-browser-factory.c:45 -msgid "Delete this message" -msgstr "Verwijdert dit bericht" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:83 -msgid "_Filter Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "" - -#: mail/mail-config.c:259 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:274 -msgid "Full name:" -msgstr "" - -#: mail/mail-config.c:302 -msgid "Email address:" -msgstr "" - -#: mail/mail-config.c:325 -msgid "Organization:" -msgstr "" - -#: mail/mail-config.c:337 -msgid "Signature file:" -msgstr "" - -#: mail/mail-config.c:342 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:699 mail/mail-config.c:790 -msgid "Server:" -msgstr "" - -#: mail/mail-config.c:705 -msgid "Username:" -msgstr "" - -#: mail/mail-config.c:711 -#, fuzzy -msgid "Path:" -msgstr "Plakken" - -#: mail/mail-config.c:717 mail/mail-config.c:796 -msgid "Authentication:" -msgstr "" - -#: mail/mail-config.c:729 mail/mail-config.c:808 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:755 mail/mail-config.c:830 -msgid "Test these values before continuing" -msgstr "" - -#: mail/mail-config.c:937 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:955 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" - -#: mail/mail-config.c:1129 mail/mail-config.c:1208 -msgid "Mail Configuration" -msgstr "" - -#. Identity page -#: mail/mail-config.c:1146 -msgid "Identity" -msgstr "" - -#. Source page -#: mail/mail-config.c:1165 -#, fuzzy -msgid "Mail Source" -msgstr "Belangrijkste Snelkoppelingen" - -#. Transport page -#: mail/mail-config.c:1186 -msgid "Mail Transport" -msgstr "" - -#: mail/mail-config.c:1308 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1310 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1453 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1455 -#, fuzzy -msgid "Add Source" -msgstr "Snelkoppeling Toevoegen" - -#: mail/mail-ops.c:372 -#, fuzzy -msgid "Fetching mail" -msgstr "Nieuwe mail" - -#: mail/mail-ops.c:384 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:732 -#, fuzzy -msgid "Refile message(s) to" -msgstr "Nieuwe email-berichten" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/main.c:62 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "Mail gedeelte: Ik kon Bonobo niet initializeren" - -#: mail/message-list.c:460 -msgid "Online Status" -msgstr "" - -#: mail/message-list.c:488 -msgid "From" -msgstr "Van" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "Onderwerp" - -#: mail/message-list.c:502 -#, fuzzy -msgid "Date" -msgstr "Plakken" - -#: mail/message-list.c:509 -#, fuzzy -msgid "Received" -msgstr "Ontvangen" - -#: mail/message-list.c:516 -msgid "To" -msgstr "Aan" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "Grootte" - -#: shell/e-init.c:25 -msgid "Evolution can not create its local folders" -msgstr "Evolution kan zijn lokale mappen niet maken" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "Sla het bericht op in een bepaalde map" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -#, fuzzy -msgid "Evolution - Create new folder" -msgstr "Evolution kan zijn lokale mappen niet maken" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -#, fuzzy -msgid "New..." -msgstr "_Nieuw" - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "" - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "" - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "" - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:301 -#, fuzzy -msgid "Go to folder..." -msgstr "Opslaan in _map..." - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "_Map" - -#: shell/e-shell-view-menu.c:369 -msgid "Evolution _Bar Shortcut" -msgstr "Evolution _Balk Snelkoppeling" - -#: shell/e-shell-view-menu.c:375 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "_Mail bericht" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -msgid "Composes a new mail message" -msgstr "Stelt een nieuw bericht op" - -#: shell/e-shell-view-menu.c:378 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "_Afspraak" - -#: shell/e-shell-view-menu.c:381 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "_Contact" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:387 -#, fuzzy -msgid "Task _Request (FIXME)" -msgstr "Taak _Verzoek" - -#: shell/e-shell-view-menu.c:390 -#, fuzzy -msgid "_Journal Entry (FIXME)" -msgstr "_Dagboek Item" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "_Nieuw" - -#: shell/e-shell-view-menu.c:402 -#, fuzzy -msgid "_Go to folder..." -msgstr "Opslaan in _map..." - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:404 -#, fuzzy -msgid "_Create new folder..." -msgstr "Opslaan in _map..." - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "" - -#: shell/e-shell-view-menu.c:419 -#, fuzzy -msgid "Show _shortcut bar" -msgstr "Snelkoppelingenbalk Tonen/Verbergen" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "Show the shortcut bar" -msgstr "Toont of verbergt de snelkoppelingenbalk" - -#: shell/e-shell-view-menu.c:422 -#, fuzzy -msgid "Show _folder bar" -msgstr "Snelkoppelingenbalk Tonen/Verbergen" - -#: shell/e-shell-view-menu.c:423 -#, fuzzy -msgid "Show the folder bar" -msgstr "Toont of verbergt de snelkoppelingenbalk" - -#: shell/e-shell-view-menu.c:440 -msgid "Help _Index" -msgstr "" - -#: shell/e-shell-view-menu.c:443 -msgid "Getting _Started" -msgstr "" - -#: shell/e-shell-view-menu.c:446 -msgid "Using the _Mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:449 -msgid "Using the _Calendar" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -msgid "Using the Cont_act Manager" -msgstr "" - -#: shell/e-shell-view-menu.c:457 -msgid "_Submit bug report" -msgstr "" - -#: shell/e-shell-view-menu.c:458 -msgid "Submit bug-report via bug-buddy" -msgstr "" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "_Acties" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:208 -#, fuzzy -msgid "Folders" -msgstr "_Map" - -#: shell/e-shell-view.c:600 -#, c-format -msgid "Evolution - %s" -msgstr "" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "" - -#: shell/e-shortcut.c:469 -msgid "New group" -msgstr "Nieuwe groep" - -#: shell/e-shortcuts-view.c:235 -#, fuzzy -msgid "_Small icons" -msgstr "Kleine Iconen" - -#: shell/e-shortcuts-view.c:236 -#, fuzzy -msgid "Show the shortcuts as small icons" -msgstr "Toont of verbergt de snelkoppelingenbalk" - -#: shell/e-shortcuts-view.c:238 -#, fuzzy -msgid "_Large icons" -msgstr "Grote Iconen" - -#: shell/e-shortcuts-view.c:239 -#, fuzzy -msgid "Show the shortcuts as large icons" -msgstr "Toont of verbergt de snelkoppelingenbalk" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:332 -#, fuzzy -msgid "Remove this shortcut from the shortcut bar" -msgstr "Verwijderen van Snelkoppelingenbalk" - -#: shell/e-shortcuts.c:358 -#, fuzzy -msgid "Error saving shortcuts." -msgstr "Belangrijkste Snelkoppelingen" - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "" - -#: shell/main.c:99 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "" - -#: shell/main.c:214 -#, fuzzy -msgid "Cannot initialize the configuration system." -msgstr "Niet in geslaagd om het Bonobo componentensysteem te initializeren" - -#: shell/main.c:220 -#, fuzzy -msgid "Cannot initialize the Bonobo component system." -msgstr "Niet in geslaagd om het Bonobo componentensysteem te initializeren" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -#, fuzzy -msgid "Fields" -msgstr "Zoeken" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:10 -#, fuzzy -msgid "Filter" -msgstr "_Map" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#, fuzzy -msgid "Field Chooser" -msgstr "Zoeken" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:13 -#, fuzzy -msgid "<< Remove" -msgstr "Verwijderen" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -#, fuzzy -msgid "_Options" -msgstr "_Acties" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "Verzoek tot _Vergadering" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "Verzoek tot _Vergadering" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "" - -#: widgets/shortcut-bar/e-group-bar.c:633 -#, c-format -msgid "Group %i" -msgstr "" - -#~ msgid "Send a new message" -#~ msgstr "Stuur een bericht" - -#~ msgid "Find messages" -#~ msgstr "Zoek naar berichten" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "Het spijt ons, Evolution's Map Bladeraar kon niet worden geladen." - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "Of een voorbeeld-bericht getoond moet worden" - -#~ msgid "_Task" -#~ msgstr "_Taak" - -#~ msgid "_Selected Items" -#~ msgstr "_Geselecteerde Items" - -#~ msgid "_New Folder" -#~ msgstr "_Nieuwe Map" - -#~ msgid "_Open" -#~ msgstr "_Openen" - -#~ msgid "Clos_e All Items" -#~ msgstr "Alle Items _Sluiten" - -#~ msgid "Closes all the open items" -#~ msgstr "Sluit alle geopende items" - -#, fuzzy -#~ msgid "Show _Treeview" -#~ msgstr "_Boomoverzicht Tonen/Verbergen" - -#~ msgid "" -#~ "This is a development version of Evolution.\n" -#~ "Using the mail component on your mail files\n" -#~ "is extremely hazardous.\n" -#~ "\n" -#~ "Do not run this program on your real mail\n" -#~ " and do not give it access to your real mail server.\n" -#~ "\n" -#~ "You have been warned\n" -#~ msgstr "" -#~ "Dit is een ontwikkel-versie van Evolution.\n" -#~ "Het gebruik van het email-gedeelte op uw mail bestanden\n" -#~ "is erg af te raden.\n" -#~ "\n" -#~ "Gebruik dit programma niet om uw echte email mee\n" -#~ "te lezen en geef het geen toegang tot uw echte mail server.\n" -#~ "\n" -#~ "U bent gewaarschuwd\n" - -#~ msgid "A folder containing mail items" -#~ msgstr "Een map die de mail items bevat" - -#~ msgid "A folder containing contacts" -#~ msgstr "Een map die de contacten bevat" - -#~ msgid "A folder containing calendar entries" -#~ msgstr "Een map die kalender entries bevat" - -#~ msgid "A folder containing tasks" -#~ msgstr "Een map die taken bevat" - -#~ msgid "A service containing mail items" -#~ msgstr "Een dienst die mail items bevat" - -#~ msgid "A service containing contacts" -#~ msgstr "Een dienst die contacten bevat" - -#~ msgid "A service containing calendar entries" -#~ msgstr "Een dienst die kalender entries bevat" - -#~ msgid "A service containing tasks" -#~ msgstr "Een dienst die taken bevat" - -#~ msgid "Add New Group" -#~ msgstr "Nieuwe Groep Toevoegen" - -#~ msgid "Remove Group" -#~ msgstr "Groep Verwijderen" - -#~ msgid "Rename Group" -#~ msgstr "Naam Wijzigen Groep" - -#~ msgid "Open in New Window" -#~ msgstr "Openen in Nieuw Venster" - -#~ msgid "Advanced Find" -#~ msgstr "Geavanceerd Zoeken" - -#~ msgid "Rename Shortcut" -#~ msgstr "Naam Wijzigen Snelkoppeling" - -#~ msgid "Executive Summary" -#~ msgstr "Samenvatting" - -#~ msgid "Inbox" -#~ msgstr "Postvak In" - -#~ msgid "Sent messages" -#~ msgstr "Verzonden berichten" - -#~ msgid "Sent mail messages" -#~ msgstr "Verzonden email-berichten" - -#~ msgid "Draft mail messages" -#~ msgstr "Klad mail berichten" - -#~ msgid "Tasks list" -#~ msgstr "Taaklisjt" - -#~ msgid "Other Shortcuts" -#~ msgstr "Andere Snelkoppelingen" - -#~ msgid "Enables some debugging functions" -#~ msgstr "Zet wat debugging functies aan" - -#~ msgid "LEVEL" -#~ msgstr "LEVEL" - -#~ msgid "" -#~ "It was not possible to setup the Evolution startup files. Please\n" -#~ "fix the problem, and restart Evolution" -#~ msgstr "" -#~ "Het was niet mogelijk om de Evolution opstartbestanden de installeren.\n" -#~ "Repareer het probleem, en start Evolution overnieuw." diff --git a/po/no.po b/po/no.po deleted file mode 100644 index 72c68a41b3..0000000000 --- a/po/no.po +++ /dev/null @@ -1,4627 +0,0 @@ -# Norwegian translation of evolution (bokmål dialect). -# Copyright (C) 2000 Free Software Foundation, Inc. -# Kjartan Maraas , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.4\n" -"POT-Creation-Date: 2000-08-15 22:52+0200\n" -"PO-Revision-Date: 2000-08-19 21:36+02:00\n" -"Last-Translator: Kjartan Maraas \n" -"Language-Team: Norwegian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/backend/ebook/test-client-list.c:29 -#: addressbook/backend/ebook/test-client.c:54 -#: addressbook/conduit/address-conduit.c:1201 -#: addressbook/demo/addressbook-factory.c:32 -#: addressbook/gui/component/addressbook-factory.c:59 -#: addressbook/gui/minicard/test-minicard-view.c:45 -#: calendar/conduits/calendar/calendar-conduit.c:1669 -#: calendar/conduits/todo/todo-conduit.c:1298 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Kunne ikke initialisere Bonobo" - -#. This array must be in the same order as enumerations -#. in GnomePilotConduitSyncType as they are used as index. -#. Custom type implies Disabled state. -#. -#: addressbook/conduit/address-conduit-control-applet.c:54 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:55 -#: calendar/conduits/todo/todo-conduit-control-applet.c:55 -msgid "Disabled" -msgstr "Slått av" - -#: addressbook/conduit/address-conduit-control-applet.c:55 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:56 -#: calendar/conduits/todo/todo-conduit-control-applet.c:56 -msgid "Synchronize" -msgstr "Synkronisér" - -#: addressbook/conduit/address-conduit-control-applet.c:56 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:57 -#: calendar/conduits/todo/todo-conduit-control-applet.c:57 -msgid "Copy From Pilot" -msgstr "Kopiér fra Pilot" - -#: addressbook/conduit/address-conduit-control-applet.c:57 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:58 -#: calendar/conduits/todo/todo-conduit-control-applet.c:58 -msgid "Copy To Pilot" -msgstr "Kopiér til Pilot" - -#: addressbook/conduit/address-conduit-control-applet.c:58 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:59 -#: calendar/conduits/todo/todo-conduit-control-applet.c:59 -msgid "Merge From Pilot" -msgstr "Flett fra Pilot" - -#: addressbook/conduit/address-conduit-control-applet.c:59 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:60 -#: calendar/conduits/todo/todo-conduit-control-applet.c:60 -msgid "Merge To Pilot" -msgstr "Flett til Pilot" - -#: addressbook/conduit/address-conduit-control-applet.c:143 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:144 -#: calendar/conduits/todo/todo-conduit-control-applet.c:144 -msgid "Eskil Heyn Olsen " -msgstr "Eskil Heyn Olsen " - -#: addressbook/conduit/address-conduit-control-applet.c:145 -msgid "Gpilotd address conduit" -msgstr "Gpilotd addressekomponent" - -#: addressbook/conduit/address-conduit-control-applet.c:146 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:147 -#: calendar/conduits/todo/todo-conduit-control-applet.c:147 -msgid "(C) 1998 the Free Software Foundation" -msgstr "(C) 1998 the Free Software Foundation" - -#: addressbook/conduit/address-conduit-control-applet.c:148 -msgid "Configuration utility for the address conduit.\n" -msgstr "Konfigurasjonsverktøy for adressekomponenten.\n" - -#: addressbook/conduit/address-conduit-control-applet.c:149 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:150 -#: calendar/conduits/todo/todo-conduit-control-applet.c:150 -msgid "gnome-unknown.xpm" -msgstr "gnome-unknown.xpm" - -#: addressbook/conduit/address-conduit-control-applet.c:190 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:191 -#: calendar/conduits/todo/todo-conduit-control-applet.c:191 -msgid "Synchronize Action" -msgstr "Synkroniseringshandling" - -#: addressbook/conduit/address-conduit-control-applet.c:261 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:262 -#: calendar/conduits/todo/todo-conduit-control-applet.c:262 -msgid "Conduit state" -msgstr "Komponent-tilstand" - -#: addressbook/conduit/address-conduit-control-applet.c:315 -#: addressbook/conduit/address-conduit-control-applet.c:328 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:316 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:329 -#: calendar/conduits/todo/todo-conduit-control-applet.c:316 -#: calendar/conduits/todo/todo-conduit-control-applet.c:329 -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" -"Ingen pilot er konfigurert, vennligst\n" -"velg cappleten 'Egenskaper for pilot link' først." - -#: addressbook/conduit/address-conduit-control-applet.c:334 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:335 -#: calendar/conduits/todo/todo-conduit-control-applet.c:335 -msgid "Not connected to the gnome-pilot daemon" -msgstr "Ikke tilkoblet gnome-pilot daemon" - -#: addressbook/conduit/address-conduit-control-applet.c:339 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:340 -#: calendar/conduits/todo/todo-conduit-control-applet.c:340 -msgid "" -"An error occured when trying to fetch\n" -"pilot list from the gnome-pilot daemon" -msgstr "" -"En feil oppsto under forsøk på å hente\n" -"pilot-listen fra gnome-pilot daemonen" - -#: addressbook/conduit/address-conduit.c:128 -#: addressbook/conduit/address-conduit.c:142 -msgid "BLARG\n" -msgstr "BLARG\n" - -#: addressbook/conduit/address-conduit.c:459 -#, c-format -msgid "Address holds %ld address entries" -msgstr "Adressen har %ld adresseoppføringer" - -#: addressbook/conduit/address-conduit.c:485 -#: addressbook/conduit/address-conduit.c:487 -msgid "Could not start addressbook server" -msgstr "Kunne ikke starte adressebok-tjeneren" - -#: addressbook/conduit/address-conduit.c:500 -#: addressbook/conduit/address-conduit.c:503 -msgid "Could not read pilot's Address application block" -msgstr "Kunne ikke lese pilotens adresseapplikasjonsblokk" - -#: addressbook/conduit/address-conduit.c:841 -msgid "Error while communicating with address server" -msgstr "Feil under kommunikasjon med adresse-tjeneren" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "kategorier" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Oppføring(er) hører til disse kategoriene:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Tilgjengelige kategorier:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "_Avtale" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "Møteforesp_ørsel" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "Send _melding" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "_Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "_Oppgave" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "Oppgavefo_respørsel" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "_Journaloppføring" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "_Notis" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1178 -#: calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "Velg skjema..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "_Notis-stil" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "Definér utskriftstiler..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "_Send" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "Lagre vedlegg..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Slett" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "_Flytt til mappe..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "Kopiér til mappe..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "Sideoppsett" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "Forhåndsvisning av utskrift" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "Lim inn _spesial..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "Merk som ulest" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Objekt" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1238 -#: calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "_Oppføring" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1239 -#: calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "_Ulest oppføring" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "Fø_rste oppføring i mappe" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "_Siste oppføring i mappe" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "_Standard" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "_Formatering" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "_Tilpass..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "Forri_ge" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "Nes_te" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "Verk_tøylinjer" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "_Fil..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "Opp_føring" - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "_Objekt..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "FIXME: Skri_fttyper..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "_Avsnitt..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "_Utform dette skjemaet" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "U_tform et skjema..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "Publisér skjema..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "Pu_blisér skjema som..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "Feilsøking i skript" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "_Stavekontroll..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "Sk_jemaer" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "_Ny kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "Ny _kontakt fra samme firma" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "Nytt brev ti_l kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "Ny _melding til kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "Nytt m_øte med kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "_Planlegg et møte..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "Ny opp_gave for kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "Ny _journaloppføring for kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "Merk _for oppfølging..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "_Vis kart med adresse" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "_Åpne webside" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "Videresend som _vCard" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "_Videresend" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "Sett _inn" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "F_ormat" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1331 -#: shell/e-shell-view-menu.c:513 -msgid "_Tools" -msgstr "_Verktøy" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "Ha_ndlinger" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Lagre og lukk" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "Lagre avtalen og lukk dialogboksen" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:654 -msgid "Print..." -msgstr "Skriv ut..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Skriv ut denne oppføringen" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "Sett inn fil..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Sett inn en fil som vedlegg" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:424 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:50 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -#: mail/mail-view.c:147 -msgid "Delete" -msgstr "Slett" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1387 -#: calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "Slett denne oppføringen" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "Forrige" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Gå til forrige oppføring" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "Neste" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Gå til neste oppføring" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "Hjelp" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Se hjelp" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "Assistent" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "Arbeid" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "Arbeid 2" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "Faks på arbeid" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "Tilbakering" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "Bil" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "Firma" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "Hjemme" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "Hjemme 2" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "Faks hjemme" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "Mobil" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:27 -msgid "Other" -msgstr "Annet" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "Annen faks" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "Personsøker" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "Primær" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "Radio" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "Teleks" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TTD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "Primær e-post" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "E-post 2" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "E-post 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"Er du sikker på at du\n" -"vil slette denne kontakten?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "Slett kontakt?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Legg til" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Telefontyper" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Ny telefontype" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "Legg til" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Kontaktredigering" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr ":Fullt navn..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Lagre som:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Hjemmeside-adresse:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Vil motta _HTML e-post" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Adresse:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "Ar_beid" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Hjemme" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "_Faks på arbeid" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Mobil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "A_rbeid" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "De_tte er postadressen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "K_ontakter..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "Ka_tegorier..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "_Jobbtittel:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Firma:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "Generell" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "Av_deling:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "Kont_or:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Yrke:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "Kalle_navn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "Ekte_felle:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Fø_dselsdag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "Assistents navn" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "_Leders navn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "Br_yllupsdag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "No_tater:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "Detaljer" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Sjekk fullt navn:" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Tittel:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Fornavn:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Mellomnavn:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Etternavn:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "_Suffiks:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Hr.\n" -"Fru.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:418 -#: calendar/gui/calendar-commands.c:511 notes/component-factory.c:27 -msgid "New" -msgstr "Ny" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:418 -msgid "Create a new contact" -msgstr "Opprett en ny kontakt" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find" -msgstr "Finn" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find a contact" -msgstr "Finn en kontakt" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:423 -#: calendar/gui/calendar-commands.c:516 mail/folder-browser-factory.c:48 -#: mail/mail-view.c:145 -msgid "Print" -msgstr "Skriv ut" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:423 -msgid "Print contacts" -msgstr "Skriv ut kontakter" - -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:424 -msgid "Delete a contact" -msgstr "Slett en kontakt" - -#: addressbook/demo/addressbook.c:103 -#: addressbook/gui/component/addressbook.c:509 -msgid "_New Contact" -msgstr "_Ny kontakt" - -#: addressbook/gui/component/addressbook.c:492 -msgid "_Print Contacts..." -msgstr "_Skriv ut kontakter..." - -#: addressbook/gui/component/addressbook.c:502 -#: addressbook/gui/component/addressbook.c:972 -msgid "As _Table" -msgstr "Som _tabell" - -#: addressbook/gui/component/addressbook.c:517 -msgid "N_ew Directory Server" -msgstr "N_y katalogtjener" - -#: addressbook/gui/component/addressbook.c:600 -msgid "Unable to open addressbook" -msgstr "Kunne ikke åpne adresseboken" - -#: addressbook/gui/component/addressbook.c:605 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Kunne ikke åpne denne adresseboken. Dette beyr at du\n" -"har skrevet inn en ugyldig URI, eller at du har forsøkt\n" -"å aksessere en LDAP-tjener og ikke har støtte for LDAP\n" -"kompilert inn. Hvis du skrev inn en URI, vær vennlig\n" -"og sjekk om denne er korrekt, og skriv den inn på nytt.\n" -"Hvis ikke har du sannsynligvis forsøkt å bruke en LDAP-\n" -"tjener. Hvis du ønsker å bruke LDAP må du laste ned og\n" -"installere OpenLDAP, deretter må du kompilere og\n" -"installere Evolution på nytt.\n" - -#: addressbook/gui/component/addressbook.c:876 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "Lagre som VCard" - -#: addressbook/gui/component/addressbook.c:943 -msgid "* Click here to add a contact *" -msgstr "* Klikk her for å legge til en kontakt *" - -#: addressbook/gui/component/addressbook.c:979 -msgid "As _Minicards" -msgstr "Som _minikort" - -#: addressbook/gui/component/addressbook.c:1030 -msgid "The URI that the Folder Browser will display" -msgstr "URIen som mappeutforskeren vil vise" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "vindu2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:88 -msgid "External Directories" -msgstr "Eksterne kataloger" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Beskrivelse:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP-tjener:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Portnummer:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Rot DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Navn:" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/select-names/select-names.glade.h:7 -msgid "Select Names" -msgstr "Velg navn" - -#: addressbook/gui/component/select-names/select-names.glade.h:8 -msgid "Find..." -msgstr "Finn..." - -#: addressbook/gui/component/select-names/select-names.glade.h:9 -msgid "Select name from List:" -msgstr "Velg navn fra liste:" - -#: addressbook/gui/component/select-names/select-names.glade.h:10 -msgid "Message Recipients" -msgstr "Meldingsmottakere:" - -#: addressbook/gui/minicard/e-minicard-control.c:276 -msgid "Save in addressbook" -msgstr "Lagre i adressebok" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Ingen oppføringer i denne visningen\n" -"\n" -"Dobbelklikk her for å opprette en ny kontakt." - -#: addressbook/gui/minicard/test-minicard-view.c:100 -msgid "Reflow Test" -msgstr "Test av \"reflow\"" - -#: addressbook/gui/minicard/test-minicard-view.c:101 -msgid "Copyright (C) 2000, Helix Code, Inc." -msgstr "Copyright (C) 2000, Helix Code, Inc." - -#: addressbook/gui/minicard/test-minicard-view.c:103 -msgid "This should test the reflow canvas item" -msgstr "Dette tester \"canvas-funksjonen \"reflow\"" - -#. gtk_signal_connect(fb->search_entry, "changed", search_activate, fb); -#: addressbook/gui/search/e-addressbook-search-dialog.c:127 -#: mail/folder-browser.c:349 -msgid "Search" -msgstr "Søk" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Sideoppsett" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Stilnavn:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Forhåndsvis:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Alternativer" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Inkluder:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Seksjoner:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Rett etter hverandre" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Bokstavfaner på siden" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Topptekst for hver bokstav" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Start på en ny side" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Antall kolonner:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Blanke skjema på slutten:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Skrifttyper" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Skrifttype..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Topptekster" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Kropp" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Skyggelegging" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Skriv ut med gråtoner" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Format" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papir" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Type:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "etikett26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Dimensjoner:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Bredde:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Høyde:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Papirkilde:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Marger" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Topp:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Bunn:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Venstre:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Høyre:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Side" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Størrelse:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Orientering" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Portrett" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Landskap" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Topptekst" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Bunntekst:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Motsatt på like sider" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Topp-/bunntekst" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:596 -msgid "am" -msgstr "am" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:595 -msgid "pm" -msgstr "pm" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:146 -msgid "Gpilotd calendar conduit" -msgstr "Gpilotd kalenderkomponent" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:149 -msgid "Configuration utility for the calendar conduit.\n" -msgstr "Konfigurasjonsverktøy for kalenderkomponenten.\n" - -#: calendar/conduits/calendar/calendar-conduit.c:399 -#: calendar/conduits/calendar/calendar-conduit.c:1109 -#: calendar/conduits/todo/todo-conduit.c:443 -#: calendar/conduits/todo/todo-conduit.c:1025 -msgid "Error while communicating with calendar server" -msgstr "Feil under kommunikasjon med kalendertjeneren" - -#: calendar/conduits/calendar/calendar-conduit.c:776 -#: calendar/conduits/calendar/calendar-conduit.c:778 -#: calendar/conduits/todo/todo-conduit.c:707 -#: calendar/conduits/todo/todo-conduit.c:709 -msgid "Could not start gnomecal server" -msgstr "Kunne ikke starte gnomecal-tjeneren" - -#: calendar/conduits/calendar/calendar-conduit.c:806 -#: calendar/conduits/calendar/calendar-conduit.c:809 -msgid "Could not read pilot's DateBook application block" -msgstr "Kunne ikke lese pilotens DateBook applikasjonsblokk" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:146 -msgid "Gpilotd todo conduit" -msgstr "Gpilotd oppgavelistekomponent" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:149 -msgid "Configuration utility for the todo conduit.\n" -msgstr "Konfigurasjonsverktøy for oppgavelistekomponenten.\n" - -#: calendar/conduits/todo/todo-conduit.c:737 -#: calendar/conduits/todo/todo-conduit.c:740 -msgid "Could not read pilot's ToDo application block" -msgstr "Kunne ikke lese pilotens applikasjonsblokk for oppgaveliste" - -#: calendar/gui/calendar-commands.c:59 -msgid "Outline:" -msgstr "Omriss:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Headings:" -msgstr "Topptekster:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Empty days:" -msgstr "Tomme dager:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Appointments:" -msgstr "Avtaler:" - -#: calendar/gui/calendar-commands.c:63 -msgid "Highlighted day:" -msgstr "Merket dag:" - -#: calendar/gui/calendar-commands.c:64 -msgid "Day numbers:" -msgstr "Dagnummer:" - -#: calendar/gui/calendar-commands.c:65 -msgid "Current day's number:" -msgstr "Nummer for idag:" - -#: calendar/gui/calendar-commands.c:66 -msgid "To-Do item that is not yet due:" -msgstr "Oppgavelisteoppføring som ikke har gått ut ennå:" - -#: calendar/gui/calendar-commands.c:67 -msgid "To-Do item that is due today:" -msgstr "Oppgavelisteoppføring som går ut idag:" - -#: calendar/gui/calendar-commands.c:68 -msgid "To-Do item that is overdue:" -msgstr "Oppgavelisteoppføring som har gått ut:" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "GNOME kalender" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "GNOME's personlige kalender og tidsplanlegger." - -#: calendar/gui/calendar-commands.c:401 tests/ui-tests/message-browser.c:676 -msgid "File not found" -msgstr "Fil ikke funnet" - -#: calendar/gui/calendar-commands.c:423 -msgid "Open calendar" -msgstr "Åpne kalender" - -#: calendar/gui/calendar-commands.c:462 -msgid "Save calendar" -msgstr "Lagre kalender" - -#: calendar/gui/calendar-commands.c:489 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Dag" - -#: calendar/gui/calendar-commands.c:489 -msgid "Show 1 day" -msgstr "Vis 1 dag" - -#: calendar/gui/calendar-commands.c:492 -msgid "5 Days" -msgstr "5 dager" - -#: calendar/gui/calendar-commands.c:492 -msgid "Show the working week" -msgstr "Vis arbeidsuken" - -#: calendar/gui/calendar-commands.c:495 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Uke" - -#: calendar/gui/calendar-commands.c:495 -msgid "Show 1 week" -msgstr "Vis 1 uke" - -#: calendar/gui/calendar-commands.c:498 -msgid "Month" -msgstr "Måned" - -#: calendar/gui/calendar-commands.c:498 -msgid "Show 1 month" -msgstr "Vis 1 måned" - -#: calendar/gui/calendar-commands.c:502 -msgid "Year" -msgstr "År" - -#: calendar/gui/calendar-commands.c:502 -msgid "Show 1 year" -msgstr "Vis 1 år" - -#: calendar/gui/calendar-commands.c:511 calendar/gui/calendar-commands.c:663 -msgid "Create a new appointment" -msgstr "Opprett en ny avtale" - -#: calendar/gui/calendar-commands.c:516 calendar/gui/calendar-commands.c:655 -msgid "Print this calendar" -msgstr "Skriv ut denne kalenderen" - -#: calendar/gui/calendar-commands.c:520 -msgid "Prev" -msgstr "Forrige" - -#: calendar/gui/calendar-commands.c:520 -msgid "Go back in time" -msgstr "Gå tilbake i tid" - -#: calendar/gui/calendar-commands.c:521 -msgid "Today" -msgstr "Idag" - -#: calendar/gui/calendar-commands.c:521 -msgid "Go to present time" -msgstr "Gå til nåtiden" - -#: calendar/gui/calendar-commands.c:522 -msgid "Next" -msgstr "Neste" - -#: calendar/gui/calendar-commands.c:522 -msgid "Go forward in time" -msgstr "Gå frem i tid" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to" -msgstr "Gå til" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to a specific date" -msgstr "Gå til en spesifikk dato" - -#. file menu -#: calendar/gui/calendar-commands.c:640 -msgid "New Ca_lendar" -msgstr "Ny ka_lenderen" - -#: calendar/gui/calendar-commands.c:641 -msgid "Create a new calendar" -msgstr "Opprett en ny kalender" - -#: calendar/gui/calendar-commands.c:644 -msgid "Open Ca_lendar" -msgstr "Åpne ka_lender" - -#: calendar/gui/calendar-commands.c:645 -msgid "Open a calendar" -msgstr "Åpne en kalender" - -#: calendar/gui/calendar-commands.c:649 calendar/gui/calendar-commands.c:650 -msgid "Save Calendar As" -msgstr "Lagre kalender som" - -#: calendar/gui/calendar-commands.c:663 -msgid "_New appointment..." -msgstr "_Ny avtale..." - -#: calendar/gui/calendar-commands.c:671 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "Brukervalg" - -#: calendar/gui/calendar-commands.c:678 calendar/gui/calendar-commands.c:679 -msgid "About Calendar" -msgstr "Om kalender" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:721 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:721 -msgid "'s calendar" -msgstr "sin kalender" - -#: calendar/gui/calendar-model.c:323 -msgid "Public" -msgstr "Offentlig" - -#: calendar/gui/calendar-model.c:326 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "Privat" - -#: calendar/gui/calendar-model.c:329 -msgid "Confidential" -msgstr "Konfidensiell" - -#: calendar/gui/calendar-model.c:332 calendar/gui/calendar-model.c:499 -msgid "Unknown" -msgstr "Ukjent" - -#: calendar/gui/calendar-model.c:419 -msgid "N" -msgstr "N" - -#: calendar/gui/calendar-model.c:419 -msgid "S" -msgstr "S" - -#: calendar/gui/calendar-model.c:421 -msgid "E" -msgstr "Ø" - -#: calendar/gui/calendar-model.c:421 -msgid "W" -msgstr "V" - -#: calendar/gui/calendar-model.c:493 -msgid "Transparent" -msgstr "Gjennomsiktig" - -#: calendar/gui/calendar-model.c:496 -msgid "Opaque" -msgstr "Ugjennomsiktig" - -#: calendar/gui/calendar-model.c:747 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"Datoen må skrives inn på formatet: \n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:820 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"Den geografiske posisjonen må skrives inn på formatet: \n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:865 -msgid "The percent value must be between 0 and 100" -msgstr "Prosentverdien må være mellom 0 og 100" - -#: calendar/gui/calendar-model.c:898 -msgid "The priority must be between 0 and 10" -msgstr "Prioriteten må være mellom 0 og 10" - -#: calendar/gui/control-factory.c:132 -msgid "The URI that the calendar will display" -msgstr "URIen som kalenderen skal vise" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Alarm på %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Melding om din avtale på %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "Ingen sammendrag tilgjengelig." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Lukk" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "Utsett" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Rediger avtale:" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Utsett-tid (minutter)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "_Slett" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "U_komplett oppgave" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "Sjek_k navn" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "Addresse_bok..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "_Ny oppgave" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "S_end statusrapport" - -#: calendar/gui/dialogs/task-editor.c:358 -msgid "FIXME: _Mark Complete" -msgstr "_Merk som fullført" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "Gjentakelse..." - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "Hopp over gjenta_kelse" - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "Tildel o_ppgave" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "Sva_r" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "Svar til a_lle" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "Lagre og lukk" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "Lagre oppgaven og lukk dialogboksen" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "Skriv ut..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "Gjentakelse..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "Konfigurér regler for gjenintrffelse" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "Tildel oppgave..." - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "Tildel oppgaven til noen" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "Slett" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "E_mne:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "Eier:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "Sta_rt dato:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "Fer_dig-dato:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "_Status:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"Ikke påbegynt\n" -"Under arbeid\n" -"Fullført\n" -"Avbrutt\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "Ikke startet" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "_Prioritet:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"Høy\n" -"Normal\n" -"Lav\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -msgid "High" -msgstr "Høy" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% ferdi_g:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "_Kontakter..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "Oppgave" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "Fullført dato:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "Plassering:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "Ressurser:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "Kommentar" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "Fullført" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "Opprettet" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "Beskrivelse" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "Tidsmerking" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "Start-dato" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "Slutt-dato" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "Geografisk plassering" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "Dato for siste endring" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "Plassering" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "Organiserer" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% ferdig" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:436 -#: calendar/gui/prop.c:609 mail/message-list.c:507 -msgid "Priority" -msgstr "Prioritet" - -#: calendar/gui/e-calendar-table.c:260 -msgid "TaskPad" -msgstr "Oppgaveblokk" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "Påminnelse" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "Åpne..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "Åpne oppgaven" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "Merk som fullført" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "Merk oppgaven som fullført" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "Slett oppgaven" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i minutters oppdeling" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Ny avtale..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Redigér denne avtalen..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Slett denne avtalen" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Gjør denne avtalen flyttbar" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "Slett denne oppføringen" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Slett alle oppføringer" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "Rediger avtale" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "Ingen sammendrag" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "Avtale - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "Oppgave - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "Journaloppføring - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "Ka_lender..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "_Ny avtale" - -#: calendar/gui/event-editor.c:1312 -msgid "FIXME: Invite _Attendees..." -msgstr "Invitér _deltakere..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "Avlys invitasjon..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "Videresend som v_Calendar" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "Invitér deltakere..." - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "Invitér deltakere til et møte" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "event-editor-dialog" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "_Sammendrag:" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "_Eier:" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "Tid" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "Start-tid:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "Slutt-tid:" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "Varer he_le dagen" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "Klassifisering" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "Of_fentlig" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "Pri_vat" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "_Konfidensiell" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"Minutter\n" -"Timer\n" -"Dager\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "_Vis" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "_Lyd" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "_Program" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "_E-post" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "Send _til:" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "Kjø_r program:" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "Regel for gjenintreffelse" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:875 -msgid "None" -msgstr "Ingen" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "Daglig" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Ukentlig" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Månedlig" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Årlig" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "etikett23" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "Hver" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "dag(er)" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "etikett24" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "uke(r)" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Man" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Tir" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Ons" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Tor" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Fre" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Lør" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Søn" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "etikett25" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "Gjeninntreff den" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "de dagen i måneden" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1ste\n" -"2dre\n" -"3dje\n" -"4de\n" -"5te\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"Mandag\n" -"Tirsdag\n" -"Onsdag\n" -"Torsdag\n" -"Fredag\n" -"Lørdag\n" -"Søndag\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "Hver" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "måned(er)" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "år" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "etikett27" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "Sluttdato" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "Gjenta for alltid" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "Slutt på " - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "Slutt etter" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "gjentakelser" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "Unntak" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "Endre" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "Gjeninntreffelse" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "januar" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "februar" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "mars" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "april" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "mai" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "juni" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "juli" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "august" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "september" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "sept" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "oktober" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "november" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "desember" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "søndag" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "mandag" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "tirsdag" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "tirs" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "onsdag" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "ons" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "torsdag" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "tor" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "tors" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "fredag" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "lørdag" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "år" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "måned" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "14-dager" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "uke" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "dag" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "time" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "minutt" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "sekund" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "sek" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "imorgen" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "igår" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "idag" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "nå" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "forrige" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "denne" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "neste" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "første" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "tredje" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "fjerde" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "femte" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "sjette" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "syvende" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "åttende" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "niende" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "tiende" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "ellevte" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "tolvte" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "siden" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "Opprett opgavelisteoppføring" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "Redigér oppgavelisteoppføring" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "Sammendrag:" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "Ferdig-dato:" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Prioritet:" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "Kommentarer for oppføring:" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "Legg til oppgavelisteoppføring..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "Redigér denne oppføringen..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Sammendrag" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:608 -msgid "Due Date" -msgstr "Ferdig-dato" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "Gjenstående tid" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "Oppgaveliste" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Legg til..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "Redigér..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Uker" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Dager" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Timer" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Time" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Minutter" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Minutt" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "Sekunder" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "Send" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "Påminnelse om din avtale " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "Ok" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "År:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Gå til dato" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Vennligst velg datoen du vil gå til.\n" -"Når du klikker på en dag vil du flytte\n" -"deg til denne datoen." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Gå til idag" - -#: calendar/gui/print.c:288 -msgid "1st" -msgstr "1" - -#: calendar/gui/print.c:288 -msgid "2nd" -msgstr "2" - -#: calendar/gui/print.c:288 -msgid "3rd" -msgstr "3" - -#: calendar/gui/print.c:288 -msgid "4th" -msgstr "4" - -#: calendar/gui/print.c:288 -msgid "5th" -msgstr "5" - -#: calendar/gui/print.c:289 -msgid "6th" -msgstr "6" - -#: calendar/gui/print.c:289 -msgid "7th" -msgstr "7" - -#: calendar/gui/print.c:289 -msgid "8th" -msgstr "8" - -#: calendar/gui/print.c:289 -msgid "9th" -msgstr "9" - -#: calendar/gui/print.c:289 -msgid "10th" -msgstr "10" - -#: calendar/gui/print.c:290 -msgid "11th" -msgstr "11" - -#: calendar/gui/print.c:290 -msgid "12th" -msgstr "12" - -#: calendar/gui/print.c:290 -msgid "13th" -msgstr "13" - -#: calendar/gui/print.c:290 -msgid "14th" -msgstr "14" - -#: calendar/gui/print.c:290 -msgid "15th" -msgstr "15" - -#: calendar/gui/print.c:291 -msgid "16th" -msgstr "16" - -#: calendar/gui/print.c:291 -msgid "17th" -msgstr "17" - -#: calendar/gui/print.c:291 -msgid "18th" -msgstr "18" - -#: calendar/gui/print.c:291 -msgid "19th" -msgstr "19" - -#: calendar/gui/print.c:291 -msgid "20th" -msgstr "20" - -#: calendar/gui/print.c:292 -msgid "21st" -msgstr "21" - -#: calendar/gui/print.c:292 -msgid "22nd" -msgstr "22" - -#: calendar/gui/print.c:292 -msgid "23rd" -msgstr "23" - -#: calendar/gui/print.c:292 -msgid "24th" -msgstr "24" - -#: calendar/gui/print.c:292 -msgid "25th" -msgstr "25" - -#: calendar/gui/print.c:293 -msgid "26th" -msgstr "26" - -#: calendar/gui/print.c:293 -msgid "27th" -msgstr "27" - -#: calendar/gui/print.c:293 -msgid "28th" -msgstr "28" - -#: calendar/gui/print.c:293 -msgid "29th" -msgstr "29" - -#: calendar/gui/print.c:293 -msgid "30th" -msgstr "30" - -#: calendar/gui/print.c:294 -msgid "31st" -msgstr "31" - -#: calendar/gui/print.c:349 -msgid "Su" -msgstr "Søn" - -#: calendar/gui/print.c:349 -msgid "Mo" -msgstr "Man" - -#: calendar/gui/print.c:349 -msgid "Tu" -msgstr "Tir" - -#: calendar/gui/print.c:349 -msgid "We" -msgstr "Ons" - -#: calendar/gui/print.c:349 -msgid "Th" -msgstr "Tor" - -#: calendar/gui/print.c:349 -msgid "Fr" -msgstr "Fre" - -#: calendar/gui/print.c:349 -msgid "Sa" -msgstr "Lør" - -#: calendar/gui/print.c:937 -msgid "TODO Items" -msgstr "Oppgavelisteoppføringer" - -#. Day -#: calendar/gui/print.c:1038 -msgid "Current day (%a %b %d %Y)" -msgstr "I dag (%a %b %d %Y)" - -#: calendar/gui/print.c:1058 calendar/gui/print.c:1072 -#: calendar/gui/print.c:1073 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1059 calendar/gui/print.c:1060 -#: calendar/gui/print.c:1074 calendar/gui/print.c:1075 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1062 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Denne uken (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1079 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Denne uken (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1085 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Denne uken (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1098 -msgid "Current month (%a %Y)" -msgstr "Denne måneden (%a %Y)" - -#. Year -#: calendar/gui/print.c:1105 -msgid "Current year (%Y)" -msgstr "Dette året (%Y)" - -#: calendar/gui/print.c:1142 -msgid "Print Calendar" -msgstr "Skriv ut kalender" - -#: calendar/gui/print.c:1307 -msgid "Print Preview" -msgstr "Forhåndsvisning av utskrift" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "Tidsvisning" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "Tidsformat" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "12 timer (AM/PM)" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "24 timer" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "Uken starter på" - -#: calendar/gui/prop.c:351 -msgid "Sunday" -msgstr "Søndag" - -#: calendar/gui/prop.c:352 -msgid "Monday" -msgstr "Mandag" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "Dagområde" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Vennligst velg start og slutt-tidene du ønsker\n" -"at skal vises i dagvisningen og ukevisningen.\n" -"Tider utenfor dette området vil ikke vises\n" -"som standard." - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "Dagens start:" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "Dagens slutt:" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "Farger i visning" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "Farger" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "Vis på oppgavelisten:" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "Tid før den går ut" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "Alternativer for stil for oppgaveliste:" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "Merk utgåtte oppføringer" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "Merk oppføringer som ikke har gått ut" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "Merk oppføringer som går ut idag" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "Egenskaper for oppgaveliste" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "Oppgaveliste" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "Alarmer" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -msgid "Alarm Properties" -msgstr "Egenskaper for alarmer" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "Pip ved visning av alarmer" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "Tidsavbrudd for lydalarmer" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr " sekunder" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "Slå på utsetting for " - -#. populate default frame/box -#: calendar/gui/prop.c:840 -msgid "Defaults" -msgstr "Forvalg" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "Klipp ut" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "Klipp ut valgt oppføring til utklippstavlen" - -#: composer/e-msg-composer-address-dialog.c:186 -#: mail/folder-browser-factory.c:46 -msgid "Copy" -msgstr "Kopiér" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "Kopiér valgt oppføring til utklippstavlen" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "Lim inn" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "Lim inn fra utklippstavlen" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "Velg mottakerenes adresser" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Mottakerliste:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Søk..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Navn" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "Adresse" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Egenskaper..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "Til: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "etikett9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "etikett7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "etikett8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Legg til vedlegg" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Fjern" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Fjern valgte oppføringer fra vedleggslisten" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Legg til vedlegg..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Legg en fil ved meldingen" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Egenskaper for vedlegg" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME-type:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Filnavn:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "Fra:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "Klikk her for å få opp adresseboken" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "Skriv inn identitet for avsender av denne meldingen" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "Til:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "Skriv inn mottakerene for meldingen" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Skriv inn adressene som skal motta en kopi av meldingen" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Skriv inn adressene som skal motta en kopi av meldingen uten å komme til " -"syne i mottakerlisten for meldingen." - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "Emne:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "Skriv inn emnet for meldingen" - -#: composer/e-msg-composer.c:451 -msgid "Save as..." -msgstr "Lagre som..." - -#: composer/e-msg-composer.c:462 -#, c-format -msgid "Error saving file: %s" -msgstr "Feil under lagring av fil: %s" - -#: composer/e-msg-composer.c:482 -#, c-format -msgid "Error loading file: %s" -msgstr "Feil under lasting av fil: %s" - -#: composer/e-msg-composer.c:504 -msgid "Saving changes to message..." -msgstr "Lagre endringer i meldingen..." - -#: composer/e-msg-composer.c:506 -msgid "About to save changes to message..." -msgstr "Lagrer endringer til meldingen..." - -#: composer/e-msg-composer.c:590 shell/e-shell-view-menu.c:165 -msgid "Evolution" -msgstr "Evolution" - -#: composer/e-msg-composer.c:596 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"Denne meldingen er ikke sendt.\n" -"\n" -"Vil du lagre endringene?" - -#: composer/e-msg-composer.c:618 -msgid "Open file" -msgstr "Åpne fil" - -#: composer/e-msg-composer.c:730 -msgid "That file does not exist." -msgstr "Filen eksisterer ikke." - -#: composer/e-msg-composer.c:740 -msgid "That is not a regular file." -msgstr "Er ikke en vanlig fil." - -#: composer/e-msg-composer.c:750 -msgid "That file exists but is not readable." -msgstr "Filen eksisterer men er ikke lesbar." - -#: composer/e-msg-composer.c:760 -msgid "That file appeared accesible but open(2) failed." -msgstr "Filen ser ut til å være tilgjengelig men open(2) feilet." - -#: composer/e-msg-composer.c:782 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"File en meget stor (mer enn 100K).\n" -"Er du sikker på at du vil sette den inn?" - -#: composer/e-msg-composer.c:803 -msgid "An error occurred while reading the file." -msgstr "En feil oppsto under lesing fra filen." - -#: composer/e-msg-composer.c:899 shell/e-shell-view-menu.c:434 -msgid "_File" -msgstr "_Fil" - -#: composer/e-msg-composer.c:905 -msgid "_Open..." -msgstr "_Åpne..." - -#: composer/e-msg-composer.c:906 -msgid "Load a previously saved message" -msgstr "Les en tidligere lagret melding" - -#: composer/e-msg-composer.c:914 -msgid "_Save..." -msgstr "_Lagre..." - -#: composer/e-msg-composer.c:915 -msgid "Save message" -msgstr "Send melding" - -#: composer/e-msg-composer.c:923 -msgid "_Save as..." -msgstr "Lagre _som..." - -#: composer/e-msg-composer.c:924 -msgid "Save message with a different name" -msgstr "Lagre meldingen med et nytt navn" - -#: composer/e-msg-composer.c:932 -msgid "Save in _folder..." -msgstr "Lagre i _mappe..." - -#: composer/e-msg-composer.c:933 -msgid "Save the message in a specified folder" -msgstr "Lagre meldingen i en spesifisert mappe" - -#: composer/e-msg-composer.c:942 -msgid "_Insert text file... (FIXME)" -msgstr "Sett _inn tekstfil..." - -#: composer/e-msg-composer.c:943 -msgid "Insert a file as text into the message" -msgstr "Sett inn en tekstfil i meldingen" - -#: composer/e-msg-composer.c:952 -msgid "_Send" -msgstr "_Send" - -#: composer/e-msg-composer.c:953 -msgid "Send the message" -msgstr "Send meldingen" - -#: composer/e-msg-composer.c:963 -msgid "_Close..." -msgstr "L_ukk..." - -#: composer/e-msg-composer.c:964 -msgid "Quit the message composer" -msgstr "Avslutt meldingsredigering" - -#: composer/e-msg-composer.c:977 shell/e-shell-view-menu.c:478 -msgid "_Edit" -msgstr "R_edigér" - -#: composer/e-msg-composer.c:988 -msgid "_Format" -msgstr "_Formatér" - -#: composer/e-msg-composer.c:994 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:995 -msgid "Send the mail in HTML format" -msgstr "Send meldingen i HTML-format" - -#: composer/e-msg-composer.c:1008 shell/e-shell-view-menu.c:383 -#: shell/e-shell-view-menu.c:489 shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "_Vis" - -#: composer/e-msg-composer.c:1014 -msgid "Show _attachments" -msgstr "Vis _vedlegg" - -#: composer/e-msg-composer.c:1015 -msgid "Show/hide attachments" -msgstr "Vis/skjul vedlegg" - -#: composer/e-msg-composer.c:1048 -msgid "Send" -msgstr "Send" - -#: composer/e-msg-composer.c:1049 -msgid "Send this message" -msgstr "Send denne meldingen" - -#: composer/e-msg-composer.c:1058 -msgid "Attach" -msgstr "Legg ved" - -#: composer/e-msg-composer.c:1059 -msgid "Attach a file" -msgstr "Legg ved en fil" - -#: composer/e-msg-composer.c:1246 -msgid "Compose a message" -msgstr "Skriv en melding" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "Velg mappe" - -#: filter/filter-folder.c:245 -msgid "" -msgstr "" - -#: mail/component-factory.c:187 -msgid "Cannot initialize Evolution's mail component." -msgstr "Kan ikke initialisere Evolutions e-postkomponent." - -#: mail/folder-browser-factory.c:33 -msgid "Get mail" -msgstr "Hent e-post" - -#: mail/folder-browser-factory.c:33 -msgid "Check for new mail" -msgstr "Sjekk etter ny e-post" - -#: mail/folder-browser-factory.c:34 -msgid "Compose" -msgstr "Skriv" - -#: mail/folder-browser-factory.c:34 -msgid "Compose a new message" -msgstr "Skriv en ny melding" - -#. GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), -#. save_msg, GNOME_STOCK_PIXMAP_SAVE), -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply" -msgstr "Svar" - -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply to the sender of this message" -msgstr "Svar til avsender av denne meldingen" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to All" -msgstr "Svar til alle" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to all recipients of this message" -msgstr "Svar til alle mottakere av denne meldingen" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward" -msgstr "Videresend" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward this message" -msgstr "Videresend denne meldingen" - -#: mail/folder-browser-factory.c:45 -msgid "Move" -msgstr "Flytt" - -#: mail/folder-browser-factory.c:45 -msgid "Move message to a new folder" -msgstr "Flytt meldingen til en ny mappe" - -#: mail/folder-browser-factory.c:46 -msgid "Copy message to a new folder" -msgstr "Kopiér melding til en ny mappe" - -#: mail/folder-browser-factory.c:48 mail/mail-view.c:145 -msgid "Print the selected message" -msgstr "Skriv ut den valgte meldingen" - -#: mail/folder-browser-factory.c:50 mail/mail-view.c:147 -msgid "Delete this message" -msgstr "Slett denne meldingen" - -#: mail/folder-browser-factory.c:72 -msgid "_Threaded Message List" -msgstr "Meldingsliste med _tråder" - -#: mail/folder-browser-factory.c:82 -msgid "_Print message" -msgstr "Skriv _ut melding" - -#: mail/folder-browser-factory.c:90 -msgid "E_dit Message" -msgstr "Re_digér melding" - -#: mail/folder-browser-factory.c:97 -msgid "_View Message" -msgstr "_Vis melding" - -#: mail/folder-browser-factory.c:106 -msgid "_Mark all messages seen" -msgstr "_Merk alle meldinger som lest" - -#: mail/folder-browser-factory.c:110 -msgid "_Expunge" -msgstr "_Fjern" - -#: mail/folder-browser-factory.c:116 -msgid "Mail _Filters ..." -msgstr "E-post _filtre ..." - -#: mail/folder-browser-factory.c:122 -msgid "_vFolder Editor ..." -msgstr "_vFolder-redigering ..." - -#: mail/folder-browser-factory.c:128 -msgid "_Mail Configuration ..." -msgstr "_E-post konfigurasjon ..." - -#: mail/folder-browser-factory.c:134 -msgid "Forget _Passwords" -msgstr "Glem _passord" - -#: mail/folder-browser-factory.c:141 -msgid "_Configure Folder" -msgstr "_Konfigurér mappe" - -#: mail/folder-browser.c:352 -msgid "Save" -msgstr "Lagre" - -#: mail/mail-callbacks.c:134 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Denne meldingen har ikke emne.\n" -"Send likevel?" - -#: mail/mail-callbacks.c:166 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"Du må konfigurere en identitet\n" -"før du kan sende e-post." - -#: mail/mail-callbacks.c:182 -msgid "" -"You need to configure a mail transport\n" -"before you can send mail." -msgstr "" -"Du må konfigurere en e-post-transport\n" -"før du kan sende e-post." - -#: mail/mail-callbacks.c:389 -msgid "Move message(s) to" -msgstr "Flytt melding(er) til" - -#: mail/mail-callbacks.c:391 -msgid "Copy message(s) to" -msgstr "Kopiér melding(er) til" - -#: mail/mail-callbacks.c:448 -msgid "" -"You may only edit messages saved\n" -"in the Drafts folder." -msgstr "" -"Du kan kun redigere meldinger lagret\n" -"i Skisser-katalogen." - -#: mail/mail-callbacks.c:536 -#, c-format -msgid "" -"Error loading filter information:\n" -"%s" -msgstr "" -"Feil under lasting av filter-informasjon:\n" -"%s" - -#: mail/mail-config-gui.c:430 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Skriv inn ditt navn og din e-post adresse for bruk i utgående post. Du kan " -"også skrive inn navnet på din organisasjon, og navnet på en signaturfil." - -#: mail/mail-config-gui.c:443 -msgid "Full name:" -msgstr "Fullt navn:" - -#: mail/mail-config-gui.c:467 -msgid "Email address:" -msgstr "E-post adresse:" - -#: mail/mail-config-gui.c:482 -msgid "Organization:" -msgstr "Organisasjon:" - -#: mail/mail-config-gui.c:493 -msgid "Signature file:" -msgstr "Signaturfil:" - -#: mail/mail-config-gui.c:498 mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "Signaturfil" - -#: mail/mail-config-gui.c:897 -msgid "Server:" -msgstr "Tjener:" - -#: mail/mail-config-gui.c:903 -msgid "Username:" -msgstr "Brukernavn:" - -#: mail/mail-config-gui.c:909 -msgid "Path:" -msgstr "Sti:" - -#: mail/mail-config-gui.c:917 -msgid "Authentication:" -msgstr "Autentisering:" - -#: mail/mail-config-gui.c:929 -msgid "Detect supported types..." -msgstr "Søk etter støttede typer..." - -#: mail/mail-config-gui.c:952 -msgid "Don't delete messages from server" -msgstr "Ikke slett meldinger fra tjeneren" - -#: mail/mail-config-gui.c:964 -msgid "Test Settings" -msgstr "Prøv ut innstillinger" - -#: mail/mail-config-gui.c:1094 mail/mail-config-gui.c:1142 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Velg hvilken type e-post tjener du har, og skriv inn relevant informasjon om " -"denne.\n" -"\n" -"Hvis tjeneren trenger autentisering, kan du klikke på \"Søk etter støttede " -"typer...\" knappen etter at du har skrevet inn resten av informasjonen." - -#: mail/mail-config-gui.c:1118 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Velg hvilken type news-tjener du har, og skriv inn relevant informasjon om " -"denne.\n" -"\n" -"Hvis tjeneren trenger autentisering, kan du klikke på \"Søk etter støttede " -"typer...\"-knappen etter at du har skrevet inn resten av informasjonen." - -#: mail/mail-config-gui.c:1192 -msgid "Edit Identity" -msgstr "Rediger identitet" - -#: mail/mail-config-gui.c:1194 -msgid "Add Identity" -msgstr "Legg til identitet" - -#: mail/mail-config-gui.c:1288 -msgid "Edit Source" -msgstr "Rediger kilde" - -#: mail/mail-config-gui.c:1290 -msgid "Add Source" -msgstr "Legg til kilde" - -#: mail/mail-config-gui.c:1387 -msgid "Edit News Server" -msgstr "Redigér news-tjener" - -#: mail/mail-config-gui.c:1389 -msgid "Add News Server" -msgstr "Legg til news-tjener" - -#: mail/mail-config-gui.c:2217 -msgid "The connection was successful!" -msgstr "Tilkoblingen var vellykket!" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "Identiteter" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "Organisasjon" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "Redigér" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "Kilder" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "E-post-kilder" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "E-post-transport" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "News-tjenere" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "News-kilder" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "Send meldinger i HTML-format" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "E-post-konfigurasjon" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"Velkommen til Evolution E-post-konfigurasjonsdruiden!\n" -"Ved å fylle ut litt informasjon om dine e-post-\n" -"innstillinger kan du begynne å sende og motta e-post\n" -"med én gang. Klikk neste for å fortsette." - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "Identitet" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "E-post-kilde" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"Din e-post-konfigurasjon er nå komplett.\n" -"Klikk \"Fullfør\" for å lagre dine nye innstillinger" - -#: mail/mail-crypto.c:338 mail/mail-crypto.c:418 -msgid "Please enter your PGP/GPG passphrase." -msgstr "Vennligst skriv inn din PGP/GPG passphrase." - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:422 -msgid "No password provided." -msgstr "Ingen passord gitt." - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:428 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "Kunne ikke opprette rør til GPG/PGP: %s" - -#: mail/mail-local.c:256 -#, c-format -msgid "Changing folder \"%s\" to \"%s\" format" -msgstr "Endrer mappe \"%s\" til \"%s\"-format" - -#: mail/mail-local.c:260 -#, c-format -msgid "Change folder \"%s\" to \"%s\" format" -msgstr "Endre mappe \"%s\" til \"%s\"-format" - -#: mail/mail-ops.c:74 -#, c-format -msgid "Fetching email from %s" -msgstr "Henter e-post fra %s" - -#: mail/mail-ops.c:76 -#, c-format -msgid "Fetch email from %s" -msgstr "Hent e-post fra %s" - -#: mail/mail-ops.c:87 -msgid "You have no remote mail source configured to fetch mail from." -msgstr "Du har ikke konfigurert en ekstern e-post-kilde å hente e-post fra." - -#: mail/mail-ops.c:97 -msgid "Bad folder passed to fetch_mail" -msgstr "Ugyldig mappe sendt til fetch_mail" - -#: mail/mail-ops.c:165 -msgid "There is no new mail." -msgstr "Ingen ny e-post." - -#: mail/mail-ops.c:234 -#, c-format -msgid "Sending \"%s\"" -msgstr "Sender \"%s\"" - -#: mail/mail-ops.c:239 -msgid "Sending a message without a subject" -msgstr "Sender en melding uten emne" - -#: mail/mail-ops.c:242 -#, c-format -msgid "Send \"%s\"" -msgstr "Send \"%s\"" - -#: mail/mail-ops.c:245 -msgid "Send a message without a subject" -msgstr "Send en melding uten emne" - -#: mail/mail-ops.c:410 -#, c-format -msgid "Expunging \"%s\"" -msgstr "Fjerner \"%s\"" - -#: mail/mail-ops.c:412 -#, c-format -msgid "Expunge \"%s\"" -msgstr "Fjern \"%s\"" - -#: mail/mail-ops.c:484 -#, c-format -msgid "Moving messages from \"%s\" into \"%s\"" -msgstr "Flytter meldinger fra \"%s\" til \"%s\"" - -#: mail/mail-ops.c:486 -#, c-format -msgid "Copying messages from \"%s\" into \"%s\"" -msgstr "Kopierer meldinger fra \"%s\" til \"%s\"" - -#: mail/mail-ops.c:489 -#, c-format -msgid "Move messages from \"%s\" into \"%s\"" -msgstr "Flytt meldinger fra \"%s\" til \"%s\"" - -#: mail/mail-ops.c:491 -#, c-format -msgid "Copy messages from \"%s\" into \"%s\"" -msgstr "Kopiér meldinger fra \"%s\" til \"%s\"" - -#: mail/mail-ops.c:637 -#, c-format -msgid "Marking messages in folder \"%s\"" -msgstr "Merker meldinger i mappe \"%s" - -#: mail/mail-ops.c:640 -#, c-format -msgid "Mark messages in folder \"%s\"" -msgstr "Merk meldinger i mappe \"%s\"" - -#: mail/mail-ops.c:769 -#, c-format -msgid "Scanning folders in \"%s\"" -msgstr "Skanner mapper i \"%s\"" - -#: mail/mail-ops.c:772 -#, c-format -msgid "Scan folders in \"%s\"" -msgstr "Skann foldere i \"%s\"" - -#: mail/mail-ops.c:859 -msgid "(No description)" -msgstr "(Ingen beskrivelse)" - -#: mail/mail-ops.c:922 -#, c-format -msgid "Attaching messages from folder \"%s\"" -msgstr "Legger ved meldinger fra mappe \"%s\"" - -#: mail/mail-ops.c:925 -#, c-format -msgid "Attach messages from \"%s\"" -msgstr "Legg ved meldinger fra \"%s\"" - -#: mail/mail-ops.c:1051 -#, c-format -msgid "Forwarding messages \"%s\"" -msgstr "Videresender meldinger \"%s\"" - -#: mail/mail-ops.c:1056 -msgid "Forwarding a message without a subject" -msgstr "Videresender en melding uten emne" - -#: mail/mail-ops.c:1059 -#, c-format -msgid "Forward message \"%s\"" -msgstr "Videresend meldingen \"%s\"" - -#: mail/mail-ops.c:1064 -msgid "Forward a message without a subject" -msgstr "Videresend en melding uten emne" - -#: mail/mail-ops.c:1129 -msgid "" -"Failed to generate mime part from message while generating forwarded message." -msgstr "Kunne ikke generere MIME-del fra melding under generering av videresendt melding." - -#: mail/mail-ops.c:1218 -#, c-format -msgid "Loading \"%s\"" -msgstr "Laster \"%s\"" - -#: mail/mail-ops.c:1220 -#, c-format -msgid "Load \"%s\"" -msgstr "Last \"%s\"" - -#: mail/mail-ops.c:1339 -#, c-format -msgid "Creating \"%s\"" -msgstr "Oppretter \"%s\"" - -#: mail/mail-ops.c:1341 -#, c-format -msgid "Create \"%s\"" -msgstr "Opprett \"%s\"" - -#: mail/mail-ops.c:1412 -msgid "Exception while reporting result to shell component listener." -msgstr "Unntak under rapportering av resultat til skallkomponentens lytter." - -#: mail/mail-ops.c:1465 -#, c-format -msgid "Synchronizing \"%s\"" -msgstr "Synkroniserer \"%s\"" - -#: mail/mail-ops.c:1467 -#, c-format -msgid "Synchronize \"%s\"" -msgstr "Synkronisér \"%s\"" - -#: mail/mail-ops.c:1543 -#, c-format -msgid "Displaying message UID \"%s\"" -msgstr "Viser melding-UID \"%s\"" - -#: mail/mail-ops.c:1546 -msgid "Clearing message display" -msgstr "Tømmer meldingsvisning" - -#: mail/mail-ops.c:1549 -#, c-format -msgid "Display message UID \"%s\"" -msgstr "Vis meldings-UID \"%s\"" - -#: mail/mail-ops.c:1552 -msgid "Clear message dispaly" -msgstr "Tøm meldingsvisning" - -#: mail/mail-ops.c:1671 -#, c-format -msgid "Opening messages from folder \"%s\"" -msgstr "Åpner meldinger fra mappe \"%s\"" - -#: mail/mail-ops.c:1674 -#, c-format -msgid "Open messages from \"%s\"" -msgstr "Åpne meldinger fra \"%s\"" - -#: mail/mail-ops.c:1786 -msgid "Loading Draftbox" -msgstr "Laster skissemappe" - -#: mail/mail-ops.c:1788 -msgid "Load Draftbox" -msgstr "Last skissemappe" - -#: mail/mail-ops.c:1856 -#, c-format -msgid "Viewing messages from folder \"%s\"" -msgstr "Viser meldinger fra mappe \"%s\"" - -#: mail/mail-ops.c:1859 -#, c-format -msgid "View messages from \"%s\"" -msgstr "Vis meldinger fra \"%s\"" - -#: mail/mail-threads.c:274 -#, c-format -msgid "" -"Error while preparing to %s:\n" -"%s" -msgstr "" -"Feil under forberedelser til %s:\n" -"%s" - -#: mail/mail-threads.c:622 -#, c-format -msgid "" -"Error while `%s':\n" -"%s" -msgstr "" -"Feil under `%s':\n" -"%s" - -#: mail/mail-threads.c:675 -msgid "Incomplete message written on pipe!" -msgstr "Uferdig melding skrevet på rør!" - -#: mail/mail-threads.c:679 -msgid "Error reading commands from dispatching thread." -msgstr "Feil under lesing av kommandoer fra utsender-tråd." - -#: mail/mail-threads.c:744 -msgid "Corrupted message from dispatching thread?" -msgstr "Korrupt melding fra utsender-tråd?" - -#: mail/mail-threads.c:856 -msgid "Could not create dialog box." -msgstr "Kan ikke opprette dialogboks." - -#: mail/mail-threads.c:867 -msgid "User cancelled query." -msgstr "Spørring avbrutt av bruker." - -#: mail/message-list.c:489 -msgid "Online Status" -msgstr "Tilkoblet status" - -#: mail/message-list.c:525 -msgid "From" -msgstr "Fra" - -#: mail/message-list.c:532 -msgid "Subject" -msgstr "Emne" - -#: mail/message-list.c:539 -msgid "Date" -msgstr "Dato" - -#: mail/message-list.c:546 -msgid "Received" -msgstr "Mottatt" - -#: mail/message-list.c:553 -msgid "To" -msgstr "Til" - -#: mail/message-list.c:560 -msgid "Size" -msgstr "Størrelse" - -#: notes/component-factory.c:27 -msgid "Create a new note" -msgstr "Opprett en ny notis" - -#: notes/component-factory.c:148 -msgid "Cannot initialize Evolution's notes component." -msgstr "Kan ikke initialisere Evolutions notiskomponent." - -#: notes/main.c:30 -msgid "Notes Component: Could not initialize bonobo" -msgstr "Notiskomponent: Kunne ikke initialisere Bonobo" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Evolution installasjon" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Dette ser ut til å være første gang du kjører Evolution." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "Vennligst klikk \"OK\" for å installere Evolutions brukerfiler under" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Kan ikke opprette katalogen\n" -"%s\n" -"Feil: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Kan ikke kopiere filer til\n" -"`%s'." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolutions filer ble installert." - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"Filen '%s' er ikke en katalog.\n" -"Venligst flytt denne for å tillate installasjon\n" -"av Evolution's brukerfiler." - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"Katalogen `%s' eksisterer men er ikke.\n" -"Evolution-katalogen. Venligst flytt den for å \n" -"tillate installasjon av Evolution's brukerfiler." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Kan ikke opprette spesifisert katalog:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "Spesifisert mappe er ikke gyldig." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Lag ny mappe" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"Typen for valgt mappe er ikke gyldig for den\n" -"forespurte operasjonen." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "Ny..." - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "(Uten navn)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy ble ikke funnet i din $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Bug buddy kunne ikke kjøres." - -#: shell/e-shell-view-menu.c:167 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:169 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution er en suite av gruppevareapplikasjoner\n" -"for e-post, kalender og kontaktdatabaser for\n" -"GNOME skrivebordsmiljøet." - -#: shell/e-shell-view-menu.c:319 -msgid "Go to folder..." -msgstr "Gå til mappe..." - -#: shell/e-shell-view-menu.c:377 -msgid "_New" -msgstr "_Ny" - -#: shell/e-shell-view-menu.c:389 -msgid "_Folder" -msgstr "_Mappe" - -#: shell/e-shell-view-menu.c:395 -msgid "Evolution bar _shortcut" -msgstr "_Snarvei til Evolution-linje" - -#: shell/e-shell-view-menu.c:404 -msgid "_Mail message (FIXME)" -msgstr "E-post _melding" - -#: shell/e-shell-view-menu.c:410 -msgid "_Appointment (FIXME)" -msgstr "_Avtale" - -#: shell/e-shell-view-menu.c:416 -msgid "_Contact (FIXME)" -msgstr "_Kontakt" - -#: shell/e-shell-view-menu.c:422 -msgid "_Task (FIXME)" -msgstr "_Oppgave" - -#: shell/e-shell-view-menu.c:444 -msgid "_Go to folder..." -msgstr "_Gå til mappe..." - -#: shell/e-shell-view-menu.c:445 -msgid "Display a different folder" -msgstr "Vis en annen mappe" - -#: shell/e-shell-view-menu.c:452 -msgid "_Create new folder..." -msgstr "_Opprett ny mappe..." - -#: shell/e-shell-view-menu.c:453 shell/e-shell-view-menu.c:465 -msgid "Create a new folder" -msgstr "Opprett en ny mappe" - -#: shell/e-shell-view-menu.c:464 -msgid "E_xit..." -msgstr "A_vslutt..." - -#: shell/e-shell-view-menu.c:495 -msgid "Show _shortcut bar" -msgstr "Vis _snarveilinje" - -#: shell/e-shell-view-menu.c:496 -msgid "Show the shortcut bar" -msgstr "Viser snarveilinjen" - -#: shell/e-shell-view-menu.c:501 -msgid "Show _folder bar" -msgstr "Vis _folderlinje" - -#: shell/e-shell-view-menu.c:502 -msgid "Show the folder bar" -msgstr "Viser folderlinjen" - -#: shell/e-shell-view-menu.c:524 -msgid "_Actions" -msgstr "H_andlinger" - -#: shell/e-shell-view-menu.c:535 -msgid "_Help" -msgstr "_Hjelp" - -#: shell/e-shell-view-menu.c:541 -msgid "Help _index" -msgstr "Hjelp _indeks" - -#: shell/e-shell-view-menu.c:548 -msgid "Getting _started" -msgstr "Kom _igang" - -#: shell/e-shell-view-menu.c:555 -msgid "Using the _mailer" -msgstr "Bruk av _e-postleseren" - -#: shell/e-shell-view-menu.c:562 -msgid "Using the _calendar" -msgstr "Bruk av _kalenderen" - -#: shell/e-shell-view-menu.c:569 -msgid "Using the c_ontact manager" -msgstr "Bruk av k_ontaktlisten" - -#: shell/e-shell-view-menu.c:579 -msgid "_Submit bug report" -msgstr "_Send feilrapport" - -#: shell/e-shell-view-menu.c:580 -msgid "Submit bug report using Bug Buddy" -msgstr "Send feilrapport med bug-buddy" - -#: shell/e-shell-view-menu.c:589 -msgid "_About Evolution..." -msgstr "_Om Evolution..." - -#: shell/e-shell-view-menu.c:590 -msgid "Show information about Evolution" -msgstr "Vis informasjon om Evolution" - -#: shell/e-shell-view.c:122 -msgid "(No folder displayed)" -msgstr "(Ingen mappe vist)" - -#: shell/e-shell-view.c:350 -msgid "Folders" -msgstr "Mapper" - -#: shell/e-shell-view.c:879 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Kan ikke sette opp lokal lagring -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "_Små ikoner" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Vis snarveier som små ikoner" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Store i_koner" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Vis snarveier som store ikoner" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Aktiver" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Aktiver denne snarveien" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Fjern denne snarveien fra snarveilinjen" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Feil under lagring av snarveier." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Uten navn)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Ingen feil" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Vanlig feil" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "En mappe med samme navn eksisterer allerede" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "Spesifisert mappetype er ikke gyldig" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "I/U-feil" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Ikke nok plass til å opprette mappen" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Spesifisert mappe ble ikke funnet" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "Funksjonen er ikke implementert i dette lageret" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Tilgang nektet" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Operasjonen er ikke støttet" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "Spesifisert type er ikke støttet for dette lageret" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Ukjent feil" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "Vis den valgte mappen" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Hei. Takk for at du har tatt deg tid til å laste ned denne prøveversjonen\n" -"av Evolution gruppevare-suiten.\n" -"\n" -"Den siste halvannen måneden har vi fokusert på å gjøre Evolution klar\n" -"for generell bruk. Mange av utviklerene bruker nå Evolution som sin\n" -"eneste e-postløsning. Det kan du også gjøre. (Bare sørg for å ha en \n" -"sikkerhetskopi.)\n" -"\n" -"Men selv om vi har rettet mange feil mhp. stabilitet og sikkerhet, vil vi\n" -"fremdeles vise deg denne meldingen: Evolution vil: krasje, miste din e-post\n" -"når du ikke vil at det skal skje, etterlate seg vilfarne prosesser som \n" -"spiser 100% av din CPU-tid, låse seg, sende e-post i HTML-format til\n" -"tilfeldige e-postlister, og tabbe deg ut foran dine venner og kolleger.\n" -"Bruk kun etter anvisninger.\n" -"\n" -"Vi håper at du nyter resultatene av vårt harde arbeid, og vi venter i\n" -"spenning på at du tilbyr din hjelp!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Takk\n" -"Evolution utviklerene\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "Kan ikke initialisere Evolution skallet." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "Kunne ikke initialisere Bonobo komponentsystemet." - -#: tests/ui-tests/message-browser.c:360 -msgid "The component now claims that it doesn't support PersistStream!" -msgstr "Komponenten hevder nå at den ikke støtter PersistStream!" - -#: tests/ui-tests/message-browser.c:378 -msgid "" -"An exception occured while trying to load data into the component with " -"PersistStream" -msgstr "Et unntak oppsto under forsøk på å laste data inn i komponenten med PersistStream" - -#: tests/ui-tests/message-browser.c:471 -#, c-format -msgid "The %s component doesn't support PersistStream!\n" -msgstr "Komponenten %s støtter ikke PersistStream!\n" - -#: tests/ui-tests/message-browser.c:710 -msgid "Open Mime Message" -msgstr "Åpne MIME-melding" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Felt" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Gruppering" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Sorter" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filter" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#: widgets/e-table/e-table-header-item.c:1164 -msgid "Field Chooser" -msgstr "Feltvelger" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"For å legge til en kolonne i tabellen, dra den til\n" -"plasseringen du ønsker å ha den." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "vindu1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Tilgjengelige felter" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "etikett1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Vis i denne rekkefølgen" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "etikett2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Legg til >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Fjern" - -#: widgets/e-table/e-table-header-item.c:1156 -msgid "Sort Ascending" -msgstr "Sortér stigende" - -#: widgets/e-table/e-table-header-item.c:1157 -msgid "Sort Descending" -msgstr "Sortér synkende" - -#: widgets/e-table/e-table-header-item.c:1158 -msgid "Unsort" -msgstr "Ikke sortér" - -#: widgets/e-table/e-table-header-item.c:1160 -msgid "Group By This Field" -msgstr "Gruppér etter dette feltet" - -#: widgets/e-table/e-table-header-item.c:1161 -msgid "Group By Box" -msgstr "Gruppér etter boks" - -#: widgets/e-table/e-table-header-item.c:1163 -msgid "Remove This Column" -msgstr "Fjern denne kolonnen" - -#: widgets/e-table/e-table-header-item.c:1166 -msgid "Alignment" -msgstr "Justering" - -#: widgets/e-table/e-table-header-item.c:1167 -msgid "Best Fit" -msgstr "Beste tilpasning" - -#: widgets/e-table/e-table-header-item.c:1168 -msgid "Format Columns..." -msgstr "Formatér kolonner..." - -#: widgets/e-table/e-table-header-item.c:1170 -msgid "Customize Current View..." -msgstr "Tilpass aktiv visning..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Tentativ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Opptatt" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Ute" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Ingen informasjon" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "_Inviter andre..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Alternativer" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Vis k_un arbeidstid" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "Vis _zoomet ut" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "_Oppdater fri/ledig" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Autovelg" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Alle mennesker og ressurser" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Alle _mennesker og en ressurs" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "_Nødvendige mennesker" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Nødvendige mennesker _og en ressurs" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Tid for møtets _start:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Tid for møtets slutt:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Alle deltakere" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "MTWTFSS" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Gruppe %i" diff --git a/po/pl.po b/po/pl.po deleted file mode 100644 index 001cc98a31..0000000000 --- a/po/pl.po +++ /dev/null @@ -1,3785 +0,0 @@ -# Polish translation of evolution -# Copyright (C) 2000 Free Software Foundation, Inc. -# GNOME PL Team , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution\n" -"POT-Creation-Date: 2000-07-10 21:51-0400\n" -"PO-Revision-Date: 2000-05-13 03:41+0200\n" -"Last-Translator: GNOME PL Team \n" -"Language-Team: Polish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-2\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:58 -#: calendar/gui/calendar-pilot-sync.c:138 calendar/gui/main.c:68 -#, fuzzy -msgid "Could not initialize Bonobo" -msgstr "Obs³uga poczty: nie powiod³o siê uruchomienie Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:579 -#: calendar/gui/event-editor.c:1118 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "_Spotkanie" - -#: addressbook/contact-editor/e-contact-editor.c:580 -#: calendar/gui/event-editor.c:1119 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "¯±danie spotkania" - -#: addressbook/contact-editor/e-contact-editor.c:582 -#: calendar/gui/event-editor.c:1121 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "_Wiadomo¶æ pocztowa" - -#: addressbook/contact-editor/e-contact-editor.c:583 -#: calendar/gui/event-editor.c:1122 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "_Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:584 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:585 -#: calendar/gui/event-editor.c:1124 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "¯±danie zadania" - -#: addressbook/contact-editor/e-contact-editor.c:586 -#: calendar/gui/event-editor.c:1125 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "Wpis _dziennika" - -#: addressbook/contact-editor/e-contact-editor.c:587 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:589 -#: addressbook/contact-editor/e-contact-editor.c:694 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:594 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:596 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:603 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:607 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Dodaj za³±cznik..." - -#: addressbook/contact-editor/e-contact-editor.c:609 -#: calendar/gui/event-editor.c:1148 -#, fuzzy -msgid "FIXME: _Delete" -msgstr "Usuñ" - -#: addressbook/contact-editor/e-contact-editor.c:610 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:611 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:613 -#: calendar/gui/event-editor.c:1152 -msgid "Page Set_up" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:614 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:635 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:640 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1183 -#, fuzzy -msgid "_Object" -msgstr "Temat" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: addressbook/contact-editor/e-contact-editor.c:656 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: addressbook/contact-editor/e-contact-editor.c:657 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:663 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:665 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:668 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:673 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:676 -#: calendar/gui/event-editor.c:1217 -#, fuzzy -msgid "_Toolbars" -msgstr "_Narzêdzia" - -#: addressbook/contact-editor/e-contact-editor.c:681 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:682 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:683 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:688 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: _Font..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:689 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:696 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:697 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:700 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:702 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:707 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:709 -#: calendar/gui/event-editor.c:1253 -#, fuzzy -msgid "_Forms" -msgstr "_Katalog" - -#: addressbook/contact-editor/e-contact-editor.c:714 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:717 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:718 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:719 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:720 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:721 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:724 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:725 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:726 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:728 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1266 -#, fuzzy -msgid "FIXME: For_ward" -msgstr "Prze¶lij" - -#: addressbook/contact-editor/e-contact-editor.c:741 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:742 -#: calendar/gui/event-editor.c:1280 -msgid "F_ormat" -msgstr "" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:743 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "_Narzêdzia" - -#: addressbook/contact-editor/e-contact-editor.c:744 -#: calendar/gui/event-editor.c:1282 -#, fuzzy -msgid "Actio_ns" -msgstr "_Czynno¶ci" - -#: addressbook/contact-editor/e-contact-editor.c:775 -msgid "Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:776 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:780 -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -#: calendar/gui/event-editor.c:1336 -#, fuzzy -msgid "FIXME: Delete" -msgstr "Usuñ" - -#: addressbook/contact-editor/e-contact-editor.c:786 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:326 -#, fuzzy -msgid "Delete this item" -msgstr "Usuwa tê wiadomo¶æ" - -#: addressbook/contact-editor/e-contact-editor.c:788 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:791 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1208 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1209 -#: addressbook/contact-editor/e-contact-editor.c:1313 -msgid "Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1210 -msgid "Business 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1211 -msgid "Business Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1212 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1213 -msgid "Car" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1214 -#, fuzzy -msgid "Company" -msgstr "Kopiuj" - -#: addressbook/contact-editor/e-contact-editor.c:1215 -#: addressbook/contact-editor/e-contact-editor.c:1314 -msgid "Home" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1216 -msgid "Home 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1217 -msgid "Home Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1218 -msgid "ISDN" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1219 -msgid "Mobile" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1220 -#: addressbook/contact-editor/e-contact-editor.c:1315 -msgid "Other" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1221 -msgid "Other Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1222 -#, fuzzy -msgid "Pager" -msgstr "Wklej" - -#: addressbook/contact-editor/e-contact-editor.c:1223 -#, fuzzy -msgid "Primary" -msgstr "Priorytet" - -#: addressbook/contact-editor/e-contact-editor.c:1224 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1225 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1226 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1270 -msgid "Primary Email" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1271 -msgid "Email 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1272 -msgid "Email 3" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#, fuzzy -msgid "_Delete" -msgstr "Usuñ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 -msgid "Add" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -#, fuzzy -msgid "Contact Editor" -msgstr "_Kontakt" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -#, fuzzy -msgid "_Home" -msgstr "_Notatka" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -#, fuzzy -msgid "_Mobile" -msgstr "_Poczta" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -#, fuzzy -msgid "C_ontacts..." -msgstr "Kontakty" - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -#, fuzzy -msgid "_Company:" -msgstr "Kopiuj" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "General" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -#, fuzzy -msgid "No_tes:" -msgstr "_Notatka" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#, fuzzy -msgid "Details" -msgstr "Pobierz pocztê" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:10 -#, fuzzy -msgid "_Middle:" -msgstr "_Poczta" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:415 -#: calendar/gui/calendar-commands.c:544 -#, fuzzy -msgid "New" -msgstr "_Nowe" - -#: addressbook/gui/component/addressbook.c:415 -msgid "Create a new contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find" -msgstr "Znajd¼" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Find a contact" -msgstr "" - -#: addressbook/gui/component/addressbook.c:420 -#: addressbook/gui/component/addressbook.c:487 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -msgid "Print" -msgstr "Drukuj" - -#: addressbook/gui/component/addressbook.c:420 -#, fuzzy -msgid "Print contacts" -msgstr "Kontakty" - -#. Delete -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:498 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "Usuñ" - -#: addressbook/gui/component/addressbook.c:421 -#, fuzzy -msgid "Delete a contact" -msgstr "Wybierz za³±cznik" - -#: addressbook/gui/component/addressbook.c:494 -#: addressbook/gui/component/addressbook.c:1034 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:501 -#, fuzzy -msgid "_New Contact" -msgstr "_Kontakt" - -#: addressbook/gui/component/addressbook.c:509 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:588 -#, fuzzy -msgid "Unable to open addressbook" -msgstr "Kliknij tu aby zobaczyæ ksi±¿kê adresow±" - -#: addressbook/gui/component/addressbook.c:593 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:938 -#: addressbook/gui/minicard/e-minicard.c:329 -msgid "Save as VCard" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1005 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1041 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1092 -msgid "The URI that the Folder Browser will display" -msgstr "URI które ma wy¶wietliæ przegl±darka katalogów" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -#, fuzzy -msgid "o" -msgstr "Dla" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:10 -#, fuzzy -msgid "Options" -msgstr "_Czynno¶ci" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:12 -#, fuzzy -msgid "Sections:" -msgstr "_Czynno¶ci" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:16 -#, fuzzy -msgid "Start on a new page" -msgstr "Wy¶lij wiadomo¶æ" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -#, fuzzy -msgid "Fonts" -msgstr "Kontakty" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -#, fuzzy -msgid "Body" -msgstr "Dzi¶" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:28 -#, fuzzy -msgid "Format" -msgstr "Prze¶lij" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -#, fuzzy -msgid "Paper" -msgstr "Wklej" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:37 -#, fuzzy -msgid "Top:" -msgstr "Dla:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:41 -#, fuzzy -msgid "Page" -msgstr "Wklej" - -#: addressbook/printing/e-contact-print.glade.h:42 -#, fuzzy -msgid "Size:" -msgstr "Rozmiar" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:48 -#, fuzzy -msgid "Portrait" -msgstr "Priorytet" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -#, fuzzy -msgid "Appointments:" -msgstr "_Spotkanie" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -#, fuzzy -msgid "Gnome Calendar" -msgstr "Kalendarz" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "" - -#: calendar/gui/calendar-commands.c:456 -#, fuzzy -msgid "Open calendar" -msgstr "Twój kalendarz" - -#: calendar/gui/calendar-commands.c:495 -#, fuzzy -msgid "Save calendar" -msgstr "Twój kalendarz" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:712 -#: calendar/gui/gncal-todo.c:716 -msgid "Day" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:711 -msgid "Week" -msgstr "" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -#, fuzzy -msgid "Print this calendar" -msgstr "Twój kalendarz" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Dzi¶" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -#, fuzzy -msgid "New Ca_lendar" -msgstr "Kalendarz" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:663 -#, fuzzy -msgid "Open Ca_lendar" -msgstr "Kalendarz" - -#: calendar/gui/calendar-commands.c:664 -#, fuzzy -msgid "Open a calendar" -msgstr "Twój kalendarz" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -#, fuzzy -msgid "Save Calendar As" -msgstr "Kalendarz" - -#: calendar/gui/calendar-commands.c:673 -#, fuzzy -msgid "Print..." -msgstr "Drukuj" - -#: calendar/gui/calendar-commands.c:682 -#, fuzzy -msgid "_New appointment..." -msgstr "_Spotkanie" - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "" - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -#, fuzzy -msgid "About Calendar" -msgstr "Twój kalendarz" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:746 -#, fuzzy -msgid "'s calendar" -msgstr "Twój kalendarz" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "Specifies the port on which the Pilot is" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:68 -msgid "PORT" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:70 -msgid "If you want to debug the attributes on records" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:72 -msgid "Only syncs from desktop to pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:74 -msgid "Only syncs from pilot to desktop" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:97 -msgid "Can not create Pilot socket\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:104 -#, c-format -msgid "Can not bind to device %s\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:107 -msgid "Failed to get a connection from the Pilot device" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:111 -msgid "pi_accept failed" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:211 -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:531 -msgid "No description" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:692 -msgid "Could not open DatebookDB on the Pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:693 -msgid "Unable to open DatebookDB" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:728 -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "URI które ma wy¶wietliæ przegl±darka katalogów" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1056 -#, fuzzy -msgid "Snooze" -msgstr "Rozmiar" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "_Spotkanie" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "_Spotkanie" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "Usuwa tê wiadomo¶æ" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "Usuwa tê wiadomo¶æ" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:289 -#, fuzzy -msgid "Edit Appointment" -msgstr "_Spotkanie" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:298 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "_Spotkanie" - -#: calendar/gui/event-editor.c:301 -#, fuzzy, c-format -msgid "Task - %s" -msgstr "Zadania" - -#: calendar/gui/event-editor.c:304 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "Wpis _dziennika" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "_Spotkanie" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:14 calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:15 -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "_Display" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:32 -msgid "_Audio" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:33 -msgid "_Program" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:34 -msgid "_Mail" -msgstr "_Poczta" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "Mail _to:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Run program:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "Classification" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "Pu_blic" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:39 -#, fuzzy -msgid "Pri_vate" -msgstr "Wklej" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Confidential" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:596 -#, fuzzy -msgid "None" -msgstr "_Notatka" - -#: calendar/gui/event-editor-dialog.glade.h:44 -#, fuzzy -msgid "Daily" -msgstr "_Poczta" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:90 -#, fuzzy -msgid "Exceptions" -msgstr "_Czynno¶ci" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "_Poczta" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "Dzi¶" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -#, fuzzy -msgid "day" -msgstr "Dzi¶" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "Wy¶lij" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "Dzi¶" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Wklej" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "Drukuj" - -#: calendar/gui/getdate.y:451 -#, fuzzy -msgid "tenth" -msgstr "Wys³ane" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:137 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:171 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:181 -msgid "Due Date:" -msgstr "" - -#: calendar/gui/gncal-todo.c:190 -#, fuzzy -msgid "Priority:" -msgstr "Priorytet" - -#: calendar/gui/gncal-todo.c:206 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:324 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:325 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:424 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:425 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:426 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Priorytet" - -#: calendar/gui/gncal-todo.c:427 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:439 -#, fuzzy -msgid "To-do list" -msgstr "_Narzêdzia" - -#. Add -#: calendar/gui/gncal-todo.c:478 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "" - -#. Edit -#: calendar/gui/gncal-todo.c:487 -msgid "Edit..." -msgstr "" - -#: calendar/gui/gncal-todo.c:711 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:712 calendar/gui/gncal-todo.c:716 -#, fuzzy -msgid "Days" -msgstr "Kopie robocze" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:717 calendar/gui/gncal-todo.c:721 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Seconds" -msgstr "Wy¶lij" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -#, fuzzy -msgid "Second" -msgstr "Wy¶lij" - -#: calendar/gui/gnome-cal.c:453 calendar/gui/gnome-cal.c:1064 -#: calendar/gui/gnome-cal.c:1120 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1069 calendar/gui/gnome-cal.c:1124 -msgid "Ok" -msgstr "" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "" - -#: calendar/gui/print.c:326 -#, fuzzy -msgid "Fr" -msgstr "Od" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "" - -#: calendar/gui/print.c:1084 -#, fuzzy -msgid "Print Calendar" -msgstr "Kalendarz" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -#, fuzzy -msgid "Sunday" -msgstr "Wy¶lij" - -#: calendar/gui/prop.c:348 -#, fuzzy -msgid "Monday" -msgstr "Dzi¶" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -#, fuzzy -msgid "To Do List Properties" -msgstr "W³a¶ciwo¶ci" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -#, fuzzy -msgid "Alarm Properties" -msgstr "W³a¶ciwo¶ci" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:766 -msgid "Cut" -msgstr "Wytnij" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Wycina wybrany element do schowka" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:767 -msgid "Copy" -msgstr "Kopiuj" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Kopiuje wybrany element do schowka" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:768 -msgid "Paste" -msgstr "Wklej" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Wstawia zawarto¶æ schowka" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Wybierz adresy odbiorców" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -#, fuzzy -msgid "Properties..." -msgstr "W³a¶ciwo¶ci" - -#: composer/e-msg-composer-address-dialog.glade.h:14 -#, fuzzy -msgid "To: >>" -msgstr "Dla:" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -#, fuzzy -msgid "Cc: >>" -msgstr "Cc:" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -#, fuzzy -msgid "Bcc: >>" -msgstr "Bcc:" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 bajt" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bajtów" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fk" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Dodaj za³±cznik" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:332 -msgid "Remove" -msgstr "Usuñ" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Usuwa wybrane elementy z listy za³±czników" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Dodaj za³±cznik..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Za³±cza plik do wiadomo¶ci" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Kliknij tu aby zobaczyæ ksi±¿kê adresow±" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "Dla:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Podaj adres odbiorcy" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Podaj adresy, pod które zostanie przes³ana kopia wiadomo¶ci" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Podaj adresy, pod które zostanie przes³ana kopia wiadomo¶ci bez listy " -"odbiorców." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Temat:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Podaj temat wiadomo¶ci" - -#: composer/e-msg-composer.c:463 -msgid "Save as..." -msgstr "" - -#: composer/e-msg-composer.c:474 -#, c-format -msgid "Error saving file: %s" -msgstr "" - -#: composer/e-msg-composer.c:494 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:513 -#, fuzzy -msgid "Discard this message?" -msgstr "Przesy³a te wiadomo¶æ" - -#: composer/e-msg-composer.c:561 -#, fuzzy -msgid "Open file" -msgstr "Otwórz katalog" - -#: composer/e-msg-composer.c:718 -msgid "Save in _folder..." -msgstr "Zapisz w _katalogu..." - -#: composer/e-msg-composer.c:718 -msgid "Save the message in a specified folder" -msgstr "Zapisuje wiadomo¶æ w podanym katalogu" - -#: composer/e-msg-composer.c:721 composer/e-msg-composer.c:763 -msgid "Send" -msgstr "Wy¶lij" - -#: composer/e-msg-composer.c:721 -msgid "Send the message" -msgstr "Wysy³a wiadomo¶æ" - -#: composer/e-msg-composer.c:733 -msgid "View _attachments" -msgstr "Wy¶wietl _za³±czniki" - -#: composer/e-msg-composer.c:733 -msgid "View/hide attachments" -msgstr "Wy¶wietla/ukrywa za³±czniki" - -#: composer/e-msg-composer.c:763 -msgid "Send this message" -msgstr "Wy¶lij tê wiadomo¶æ" - -#: composer/e-msg-composer.c:766 -msgid "Cut selected region into the clipboard" -msgstr "Wytnij zaznaczony obszar do schowka" - -#: composer/e-msg-composer.c:767 -msgid "Copy selected region into the clipboard" -msgstr "Kopiuj zaznaczony obszar do schowka" - -#: composer/e-msg-composer.c:768 -msgid "Paste selected region into the clipboard" -msgstr "Wklej zaznaczony obszar do schowka" - -#: composer/e-msg-composer.c:769 -msgid "Undo" -msgstr "Cofnij" - -#: composer/e-msg-composer.c:769 -msgid "Undo last operation" -msgstr "Cofa ostatni± operacjê" - -#: composer/e-msg-composer.c:772 -msgid "Attach" -msgstr "Za³±cz" - -#: composer/e-msg-composer.c:772 -msgid "Attach a file" -msgstr "Za³±cza plik" - -#: composer/e-msg-composer.c:948 -#, fuzzy -msgid "Compose a message" -msgstr "Tworzy now± wiadomo¶æ" - -#: filter/filter-editor.c:198 -msgid "Edit Filter" -msgstr "" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "" - -#: filter/filter-editor.c:211 -#, fuzzy -msgid "Finish" -msgstr "Znajd¼" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "" - -#: filter/filter-editor.c:216 -#, fuzzy -msgid "Apply" -msgstr "Odpowiedz" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" - -#: mail/component-factory.c:196 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "Nie mo¿na uruchomiæ pow³oki Evlution." - -#: mail/folder-browser-factory.c:29 -msgid "Get mail" -msgstr "Pobierz pocztê" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "Sprawd¼ pocztê" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:30 -#, fuzzy -msgid "Compose a new message" -msgstr "Tworzy now± wiadomo¶æ" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "Odpowiedz" - -#: mail/folder-browser-factory.c:34 -msgid "Reply to the sender of this message" -msgstr "Odpowiedz nadawcy tej wiadomo¶ci" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "Odpowiedz wszystkim" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to all recipients of this message" -msgstr "Odpowiedz dla wszystkich odbiorców tej wiadomo¶ci" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "Prze¶lij" - -#: mail/folder-browser-factory.c:37 -msgid "Forward this message" -msgstr "Przesy³a te wiadomo¶æ" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Refile" -msgstr "Otrzymane" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Move message to a new folder" -msgstr "Zapisuje wiadomo¶æ w podanym katalogu" - -#: mail/folder-browser-factory.c:43 -msgid "Print the selected message" -msgstr "Drukuje wybran± wiadomo¶æ" - -#: mail/folder-browser-factory.c:45 -msgid "Delete this message" -msgstr "Usuwa tê wiadomo¶æ" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:83 -msgid "_Filter Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "" - -#: mail/mail-config.c:259 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:274 -msgid "Full name:" -msgstr "" - -#: mail/mail-config.c:302 -msgid "Email address:" -msgstr "" - -#: mail/mail-config.c:325 -msgid "Organization:" -msgstr "" - -#: mail/mail-config.c:337 -msgid "Signature file:" -msgstr "" - -#: mail/mail-config.c:342 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:699 mail/mail-config.c:790 -msgid "Server:" -msgstr "" - -#: mail/mail-config.c:705 -msgid "Username:" -msgstr "" - -#: mail/mail-config.c:711 -#, fuzzy -msgid "Path:" -msgstr "Wklej" - -#: mail/mail-config.c:717 mail/mail-config.c:796 -msgid "Authentication:" -msgstr "" - -#: mail/mail-config.c:729 mail/mail-config.c:808 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:755 mail/mail-config.c:830 -msgid "Test these values before continuing" -msgstr "" - -#: mail/mail-config.c:937 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:955 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" - -#: mail/mail-config.c:1129 mail/mail-config.c:1208 -msgid "Mail Configuration" -msgstr "" - -#. Identity page -#: mail/mail-config.c:1146 -msgid "Identity" -msgstr "" - -#. Source page -#: mail/mail-config.c:1165 -#, fuzzy -msgid "Mail Source" -msgstr "G³ówne skróty" - -#. Transport page -#: mail/mail-config.c:1186 -msgid "Mail Transport" -msgstr "" - -#: mail/mail-config.c:1308 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1310 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1453 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1455 -#, fuzzy -msgid "Add Source" -msgstr "Dodaj skrót" - -#: mail/mail-ops.c:372 -#, fuzzy -msgid "Fetching mail" -msgstr "Pobierz pocztê" - -#: mail/mail-ops.c:384 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-ops.c:732 -#, fuzzy -msgid "Refile message(s) to" -msgstr "Nowe wiadomo¶ci" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/main.c:62 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "Obs³uga poczty: nie powiod³o siê uruchomienie Bonobo" - -#: mail/message-list.c:460 -msgid "Online Status" -msgstr "" - -#: mail/message-list.c:488 -msgid "From" -msgstr "Od" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "Temat" - -#: mail/message-list.c:502 -#, fuzzy -msgid "Date" -msgstr "Wklej" - -#: mail/message-list.c:509 -#, fuzzy -msgid "Received" -msgstr "Otrzymane" - -#: mail/message-list.c:516 -msgid "To" -msgstr "Dla" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "Rozmiar" - -#: shell/e-init.c:25 -msgid "Evolution can not create its local folders" -msgstr "Evolution nie mo¿e utworzyæ swoich lokalnych katalogów" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "Zapisuje wiadomo¶æ w podanym katalogu" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -#, fuzzy -msgid "Evolution - Create new folder" -msgstr "Evolution nie mo¿e utworzyæ swoich lokalnych katalogów" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -#, fuzzy -msgid "New..." -msgstr "_Nowe" - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy nie znajduje siê w ¶cie¿ce." - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "Nie mo¿na uruchomiæ Bug buddy." - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution to pakiet aplikacji do komunikacji\n" -"grupowej przez pocztê elektroniczn±, wspólny\n" -"kalendarz i zarz±dzanie kontaktami w ¶rodowisku\n" -"GNOME." - -#: shell/e-shell-view-menu.c:301 -#, fuzzy -msgid "Go to folder..." -msgstr "Zapisz w _katalogu..." - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "_Katalog" - -#: shell/e-shell-view-menu.c:369 -msgid "Evolution _Bar Shortcut" -msgstr "Pasek _skrótów Evolution" - -#: shell/e-shell-view-menu.c:375 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "_Wiadomo¶æ pocztowa" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -msgid "Composes a new mail message" -msgstr "Tworzy now± wiadomo¶æ" - -#: shell/e-shell-view-menu.c:378 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "_Spotkanie" - -#: shell/e-shell-view-menu.c:381 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "_Kontakt" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:387 -#, fuzzy -msgid "Task _Request (FIXME)" -msgstr "¯±danie zadania" - -#: shell/e-shell-view-menu.c:390 -#, fuzzy -msgid "_Journal Entry (FIXME)" -msgstr "Wpis _dziennika" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "_Nowe" - -#: shell/e-shell-view-menu.c:402 -#, fuzzy -msgid "_Go to folder..." -msgstr "Zapisz w _katalogu..." - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:404 -#, fuzzy -msgid "_Create new folder..." -msgstr "Zapisz w _katalogu..." - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "" - -#: shell/e-shell-view-menu.c:419 -#, fuzzy -msgid "Show _shortcut bar" -msgstr "Wy¶wietla/ukrywa pasek skrótów" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "Show the shortcut bar" -msgstr "Wy¶wietla/ukrywa pasek skrótów" - -#: shell/e-shell-view-menu.c:422 -msgid "Show _folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:423 -msgid "Show the folder bar" -msgstr "" - -#: shell/e-shell-view-menu.c:440 -msgid "Help _Index" -msgstr "" - -#: shell/e-shell-view-menu.c:443 -msgid "Getting _Started" -msgstr "" - -#: shell/e-shell-view-menu.c:446 -msgid "Using the _Mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:449 -msgid "Using the _Calendar" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -msgid "Using the Cont_act Manager" -msgstr "" - -#: shell/e-shell-view-menu.c:457 -#, fuzzy -msgid "_Submit bug report" -msgstr "Wy¶lij raport o b³êdzie" - -#: shell/e-shell-view-menu.c:458 -msgid "Submit bug-report via bug-buddy" -msgstr "Wysy³a raport o b³êdzie przez Bug buddy" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "_Czynno¶ci" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:208 -#, fuzzy -msgid "Folders" -msgstr "_Katalog" - -#: shell/e-shell-view.c:600 -#, fuzzy, c-format -msgid "Evolution - %s" -msgstr "Evolution" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Nie mo¿na ustawiæ lokalnego pojemnika -- %s" - -#: shell/e-shortcut.c:469 -msgid "New group" -msgstr "Nowa grupa" - -#: shell/e-shortcuts-view.c:235 -#, fuzzy -msgid "_Small icons" -msgstr "Ma³e ikony" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:238 -#, fuzzy -msgid "_Large icons" -msgstr "Du¿e ikony" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate" -msgstr "" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:332 -#, fuzzy -msgid "Remove this shortcut from the shortcut bar" -msgstr "Usuñ z paska skrótów" - -#: shell/e-shortcuts.c:358 -#, fuzzy -msgid "Error saving shortcuts." -msgstr "G³ówne skróty" - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "" - -#: shell/main.c:99 -#, fuzzy -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Cze¶æ. Dziêki za poswiêcenie chwili na ¶ci±gniêcie tej wersji\n" -"wstêpnej pakietu do komunikacji grupowej Evolution.\n" -"\n" -"Zespó³ Evolution ciê¿ko pracowa³ nad stworzeniem tego programu\n" -"tak rozszerzalnym, ³adnym, szybkim i dopasowanym do potrzeb\n" -"zagorza³ych uzytkowników Internetu, jak to tylko mo¿liwe. Jeste¶my\n" -"bardzo zmêczeni. Ale to jeszcze nie koniec -- jeszcze nie.\n" -"Podczas odkrywania Evolution nale¿y pamiêtaæ, ¿e wiêkszo¶æ naszej pracy\n" -"zosta³a po¶wiêcona silnikowi napêdzaj±cemu system, a nie interfejsowi\n" -"u¿ytkownika. W ka¿dym razie od tej pory bêdziemy wk³adaæ wiêkszo¶æ\n" -"naszej mi³o¶ci i troski w³a¶nie w interfejs. Ale przynajmniej wiadomo,\n" -"¿e to nie jest demo.\n" -"Pora na umycie r±czek. Evolution bêdzie: przewracaæ siê, gubiæ przesy³ki,\n" -"mno¿yæ procesy, zjadaæ 100 mocy procesora, zawieszaæ siê, wysy³aæ\n" -"przesy³ki w HTML-u na losowe listy dyskusyjne i zawstydzaæ Ciê\n" -"przed Twoimi przyjació³mi i wspó³pracownikami. U¿ywaj na w³asn±\n" -"odpowiedzialno¶æ.\n" -"Mamy nadzieje, ¿e spodoba Ci siê efekt naszej ciê¿kiej pracy\n" -"i niecierpliwie oczekujemy Twojej pomocy!\n" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Dziêki\n" -"Zespó³ Evolution\n" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "Nie mo¿na uruchomiæ pow³oki Evlution." - -#: shell/main.c:214 -#, fuzzy -msgid "Cannot initialize the configuration system." -msgstr "Nie mo¿na uruchomiæ pow³oki Evlution." - -#: shell/main.c:220 -#, fuzzy -msgid "Cannot initialize the Bonobo component system." -msgstr "Nieudana próba uruchomienia systemu komponentów Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -#, fuzzy -msgid "Fields" -msgstr "Znajd¼" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "" - -#: widgets/e-table/e-table-config.glade.h:10 -#, fuzzy -msgid "Filter" -msgstr "_Katalog" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "" - -#: widgets/e-table/e-table-group.glade.h:13 -#, fuzzy -msgid "<< Remove" -msgstr "Usuñ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -#, fuzzy -msgid "_Options" -msgstr "_Czynno¶ci" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "¯±danie spotkania" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "¯±danie spotkania" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "" - -#: widgets/shortcut-bar/e-group-bar.c:633 -#, c-format -msgid "Group %i" -msgstr "" - -#~ msgid "Find messages" -#~ msgstr "Znajduje wiadomo¶ci" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "Przepraszamy, przegl±darka katalogów nie mo¿e zostaæ uruchomiona." - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "Czy wyswietlaæ podgl±d wiadomo¶ci" - -#~ msgid "_Task" -#~ msgstr "_Zadanie" - -#~ msgid "_Selected Items" -#~ msgstr "_Wybrane elementy" - -#~ msgid "_New Folder" -#~ msgstr "_Nowy katalog" - -#~ msgid "_Open" -#~ msgstr "_Otwórz" - -#~ msgid "Clos_e All Items" -#~ msgstr "Z_amknij wszystko" - -#~ msgid "Closes all the open items" -#~ msgstr "Zamyka wszystkie otwarte elementy" - -#~ msgid "_Toggle Shortcut Bar" -#~ msgstr "Prze³±cz pasek skrótów" - -#~ msgid "_Toggle Treeview" -#~ msgstr "Prze³±cz widok drzewa" - -#~ msgid "Toggles the tree view" -#~ msgstr "Wy¶wietla/ukrywa widok drzewa" - -#~ msgid "" -#~ "This is a development version of Evolution.\n" -#~ "Using the mail component on your mail files\n" -#~ "is extremely hazardous.\n" -#~ "\n" -#~ "Do not run this program on your real mail\n" -#~ " and do not give it access to your real mail server.\n" -#~ "\n" -#~ "You have been warned\n" -#~ msgstr "" -#~ "Bie¿±ca wersja Evolution jest rozwojowa.\n" -#~ "U¿ywanie obs³ugi poczty na twoich plikach jest\n" -#~ "wysoce ryzykowne.\n" -#~ "\n" -#~ "Nie u¿ywaj tego programu do prawdziwej poczty\n" -#~ " i nie dawaj dostepu do serwera poczty.\n" -#~ "\n" -#~ "Zosta³e¶ ostrze¿ony\n" - -#~ msgid "A folder containing mail items" -#~ msgstr "Katalog zawieraj±cy przesy³ki pocztowe" - -#~ msgid "A folder containing contacts" -#~ msgstr "Katalog zawieraj±cy kontakty" - -#~ msgid "A folder containing calendar entries" -#~ msgstr "Katalog zawierajacy wpisy do kalendarza" - -#~ msgid "A folder containing tasks" -#~ msgstr "Katalog zawieraj±cy zadania" - -#~ msgid "A service containing mail items" -#~ msgstr "Us³uga zawieraj±ca przesy³ki pocztowe" - -#~ msgid "A service containing contacts" -#~ msgstr "Us³uga zawieraj±ca kontakty" - -#~ msgid "A service containing calendar entries" -#~ msgstr "Us³uga zawieraj±ca wpisy do kalendarza" - -#~ msgid "A service containing tasks" -#~ msgstr "Us³uga zawierajaca zadania" - -#~ msgid "Add New Group" -#~ msgstr "Dodaj now± grupê" - -#~ msgid "Remove Group" -#~ msgstr "Usuñ grupê" - -#~ msgid "Rename Group" -#~ msgstr "Zmieñ nazwê grupy" - -#~ msgid "Open in New Window" -#~ msgstr "Otwórz w nowym oknie" - -#~ msgid "Advanced Find" -#~ msgstr "Zaawansowane wyszukiwanie" - -#~ msgid "Rename Shortcut" -#~ msgstr "Zmieñ nazwê skrótu" - -#~ msgid "Executive Summary" -#~ msgstr "Podsumowanie" - -#~ msgid "Inbox" -#~ msgstr "Skrzynka odbiorcza" - -#~ msgid "Sent messages" -#~ msgstr "Wiadomo¶ci wys³ane" - -#~ msgid "Sent mail messages" -#~ msgstr "Wys³ane wiadomo¶ci pocztowe" - -#~ msgid "Draft mail messages" -#~ msgstr "Wiadomo¶ci w fazie roboczej" - -#~ msgid "Your contacts list" -#~ msgstr "Twoja lista kontaktów" - -#~ msgid "Tasks list" -#~ msgstr "Lista zadañ" - -#~ msgid "Other Shortcuts" -#~ msgstr "Inne skróty" - -#~ msgid "Enables some debugging functions" -#~ msgstr "W³±cz funkcje odpluskwiania" - -#~ msgid "LEVEL" -#~ msgstr "POZIOM" - -#~ msgid "" -#~ "It was not possible to setup the Evolution startup files. Please\n" -#~ "fix the problem, and restart Evolution" -#~ msgstr "" -#~ "Nie by³o mo¿liwe ustawienie plików startowych Evolution. Proszê\n" -#~ "usun±æ problem i ponownie uruchomiæ Evolution" diff --git a/po/pt.po b/po/pt.po deleted file mode 100644 index 988645d447..0000000000 --- a/po/pt.po +++ /dev/null @@ -1,2556 +0,0 @@ -# Portuguese translation of evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Tiago Antão , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.1\n" -"POT-Creation-Date: 2000-06-20 14:27+0100\n" -"PO-Revision-Date: 2000-04-16 16:33+01:00\n" -"Last-Translator: Tiago Antão \n" -"Language-Team: Gnome Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:57 -#: calendar/gui/evolution-calendar-control.c:64 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Não se consegui inicializar Bonobo" - -#: addressbook/contact-editor/e-contact-editor.c:578 -#: calendar/gui/event-editor.c:1118 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "_Compromisso" - -#: addressbook/contact-editor/e-contact-editor.c:579 -#: calendar/gui/event-editor.c:1119 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "Pedido de _encontro" - -#: addressbook/contact-editor/e-contact-editor.c:581 -#: calendar/gui/event-editor.c:1121 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "Mensagem de _correio" - -#: addressbook/contact-editor/e-contact-editor.c:582 -#: calendar/gui/event-editor.c:1122 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "_Contacto" - -#: addressbook/contact-editor/e-contact-editor.c:583 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:584 -#: calendar/gui/event-editor.c:1124 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "_Pedido de tarefa" - -#: addressbook/contact-editor/e-contact-editor.c:585 -#: calendar/gui/event-editor.c:1125 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "_Entrada diária?" - -#: addressbook/contact-editor/e-contact-editor.c:586 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:588 -#: addressbook/contact-editor/e-contact-editor.c:693 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:593 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:595 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:602 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:606 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Adicionar anexo..." - -#: addressbook/contact-editor/e-contact-editor.c:608 -#: calendar/gui/event-editor.c:1148 -msgid "FIXME: _Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:609 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:610 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:612 -#: calendar/gui/event-editor.c:1152 -msgid "Page Set_up" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:613 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:634 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:639 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1183 -msgid "_Object" -msgstr "_Objecto" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: addressbook/contact-editor/e-contact-editor.c:655 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: addressbook/contact-editor/e-contact-editor.c:656 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:657 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:662 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:664 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:672 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "An_terior" - -#: addressbook/contact-editor/e-contact-editor.c:673 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "Pró_ximo" - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1217 -msgid "_Toolbars" -msgstr "_Ferramentas" - -#: addressbook/contact-editor/e-contact-editor.c:680 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:681 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:682 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:687 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: _Font..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:688 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:695 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:696 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:698 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:701 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:706 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1253 -#, fuzzy -msgid "_Forms" -msgstr "_Pasta" - -#: addressbook/contact-editor/e-contact-editor.c:713 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:714 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:716 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:717 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:718 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:719 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:720 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:721 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:723 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:724 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:725 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:727 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:728 -#: calendar/gui/event-editor.c:1266 -msgid "FIXME: For_ward" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "_Inserir" - -#: addressbook/contact-editor/e-contact-editor.c:741 -#: calendar/gui/event-editor.c:1280 -msgid "F_ormat" -msgstr "F_ormato" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:742 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:468 -msgid "_Tools" -msgstr "_Ferramentas" - -#: addressbook/contact-editor/e-contact-editor.c:743 -#: calendar/gui/event-editor.c:1282 -msgid "Actio_ns" -msgstr "_Acções" - -#: addressbook/contact-editor/e-contact-editor.c:774 -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:775 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:779 -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:780 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "Imprimir este item" - -#: addressbook/contact-editor/e-contact-editor.c:781 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "Inserir ficheiro como anexo" - -#: addressbook/contact-editor/e-contact-editor.c:784 -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:787 -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:788 -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -#: calendar/gui/event-editor.c:1336 -msgid "FIXME: Delete" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:791 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:322 -msgid "Delete this item" -msgstr "Apagar este item" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:794 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "Ir para o item anterior" - -#: addressbook/contact-editor/e-contact-editor.c:795 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:796 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "Ir para o próximo item" - -#: addressbook/contact-editor/e-contact-editor.c:797 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:798 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1213 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1214 -#: addressbook/contact-editor/e-contact-editor.c:1318 -msgid "Business" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1215 -msgid "Business 2" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1216 -msgid "Business Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1217 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1218 -msgid "Car" -msgstr "Carro" - -#: addressbook/contact-editor/e-contact-editor.c:1219 -msgid "Company" -msgstr "Empresa" - -#: addressbook/contact-editor/e-contact-editor.c:1220 -#: addressbook/contact-editor/e-contact-editor.c:1319 -msgid "Home" -msgstr "Casa" - -#: addressbook/contact-editor/e-contact-editor.c:1221 -msgid "Home 2" -msgstr "Casa 2" - -#: addressbook/contact-editor/e-contact-editor.c:1222 -msgid "Home Fax" -msgstr "Fax de casa" - -#: addressbook/contact-editor/e-contact-editor.c:1223 -msgid "ISDN" -msgstr "RDIS" - -#: addressbook/contact-editor/e-contact-editor.c:1224 -msgid "Mobile" -msgstr "Telemóvel" - -#: addressbook/contact-editor/e-contact-editor.c:1225 -#: addressbook/contact-editor/e-contact-editor.c:1320 mail/mail-config.c:2039 -msgid "Other" -msgstr "Outro" - -#: addressbook/contact-editor/e-contact-editor.c:1226 -msgid "Other Fax" -msgstr "Outro Fax" - -#: addressbook/contact-editor/e-contact-editor.c:1227 -msgid "Pager" -msgstr "Bip" - -#: addressbook/contact-editor/e-contact-editor.c:1228 -msgid "Primary" -msgstr "Primário" - -#: addressbook/contact-editor/e-contact-editor.c:1229 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1230 -msgid "Telex" -msgstr "Telex" - -#: addressbook/contact-editor/e-contact-editor.c:1231 -msgid "TTY/TDD" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1275 -msgid "Primary Email" -msgstr "Endereço principal de correio electrónico" - -#: addressbook/contact-editor/e-contact-editor.c:1276 -msgid "Email 2" -msgstr "Correio electrónico 2" - -#: addressbook/contact-editor/e-contact-editor.c:1277 -msgid "Email 3" -msgstr "Correio electrónico 3" - -#: addressbook/gui/component/addressbook.c:417 mail/message-list.c:628 -msgid "To" -msgstr "Para" - -#: addressbook/gui/component/addressbook.c:418 mail/message-list.c:600 -msgid "From" -msgstr "De" - -#: addressbook/gui/component/addressbook.c:419 -msgid "Cc" -msgstr "Cc" - -#: addressbook/gui/component/addressbook.c:424 -#: calendar/gui/calendar-commands.c:544 -msgid "New" -msgstr "Novo" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Create a new contact" -msgstr "Criar um novo contacto" - -#: addressbook/gui/component/addressbook.c:428 -#: mail/folder-browser-factory.c:37 -msgid "Find" -msgstr "Encontrar" - -#: addressbook/gui/component/addressbook.c:428 -msgid "Find a contact" -msgstr "Encontrar um contacto" - -#: addressbook/gui/component/addressbook.c:429 -#: addressbook/gui/component/addressbook.c:496 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:48 -msgid "Print" -msgstr "Imprimir" - -#: addressbook/gui/component/addressbook.c:429 -msgid "Print contacts" -msgstr "Imprimir contactos" - -#. Delete -#: addressbook/gui/component/addressbook.c:430 calendar/gui/gncal-todo.c:494 -#: mail/folder-browser-factory.c:50 mail/mail-config.c:1865 -#: mail/mail-config.c:1961 -msgid "Delete" -msgstr "Apagar" - -#: addressbook/gui/component/addressbook.c:430 -msgid "Delete a contact" -msgstr "Apagar um contacto" - -#: addressbook/gui/component/addressbook.c:503 -msgid "Test Select Names" -msgstr "" - -#: addressbook/gui/component/addressbook.c:510 -#: addressbook/gui/component/addressbook.c:1052 -msgid "As _Table" -msgstr "Como _Tabela" - -#: addressbook/gui/component/addressbook.c:517 -msgid "_New Contact" -msgstr "_Novo Contacto" - -#: addressbook/gui/component/addressbook.c:525 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:604 -msgid "Unable to open addressbook" -msgstr "Impossível abrir o livro de endereços" - -#: addressbook/gui/component/addressbook.c:609 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:960 -#: addressbook/gui/minicard/e-minicard.c:329 -msgid "Save as VCard" -msgstr "Gravar como VCard" - -#: addressbook/gui/component/addressbook.c:1059 -msgid "As _Minicards" -msgstr "" - -#: addressbook/gui/component/addressbook.c:1110 -msgid "The URI that the Folder Browser will display" -msgstr "O URI que o navegador de pastas mostrará" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "am" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "pm" - -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "h" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "Cabeçalhos:" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "Dias vazios:" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "Compromissos:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "Calendário do Gnome" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "Ficheiro não encontrado" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "Abrir calendário" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "Gravar calendário" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:708 -#: calendar/gui/gncal-todo.c:712 -msgid "Day" -msgstr "Dia" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "Mostrar 1 dia" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "5 Dias" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "Mostrar a semana de trabalho" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:707 -msgid "Week" -msgstr "Semana" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "Mostrar 1 semana" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "Mês" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "Mostrar 1 mês" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "Ano" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "Mostrar 1 ano" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:690 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "Imprimir este calendário" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Hoje" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "Ir para" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "Ir para uma data específica" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "Novo Ca_lendário" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "Criar um novo calendário" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "Abrir Ca_lendário" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "Abrir um calendário" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "Guardar Calendário como" - -#: calendar/gui/calendar-commands.c:673 -msgid "Print..." -msgstr "Imprimir..." - -#: calendar/gui/calendar-commands.c:679 -msgid "_Close Calendar" -msgstr "_Fechar Calendário" - -#: calendar/gui/calendar-commands.c:680 -msgid "Close current calendar" -msgstr "Fechar o calendário corrente" - -#: calendar/gui/calendar-commands.c:690 -msgid "_New appointment..." -msgstr "_Novo compromisso..." - -#: calendar/gui/calendar-commands.c:695 -msgid "New appointment for _today..." -msgstr "Novo compromisso para _hoje..." - -#: calendar/gui/calendar-commands.c:696 -msgid "Create a new appointment for today" -msgstr "Criar um novo compromisso para hoje" - -#: calendar/gui/calendar-commands.c:704 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "Preferências" - -#: calendar/gui/calendar-commands.c:711 calendar/gui/calendar-commands.c:712 -msgid "About Calendar" -msgstr "Sobre o calendário" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:754 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:754 -#, fuzzy -msgid "'s calendar" -msgstr "O seu calendário" - -#. This array must be in the same order as enumerations -#. in GnomePilotConduitSyncType as they are used as index. -#. Custom type implies Disabled state. -#. -#: calendar/gui/calendar-conduit-control-applet.c:51 -msgid "Disabled" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:52 -msgid "Synchronize" -msgstr "Sincronizar" - -#: calendar/gui/calendar-conduit-control-applet.c:53 -msgid "Copy From Pilot" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:54 -msgid "Copy To Pilot" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:55 -msgid "Merge From Pilot" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:56 -msgid "Merge To Pilot" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:142 -#: calendar/gui/todo-conduit-control-applet.c:110 -msgid "Eskil Heyn Olsen " -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:144 -msgid "GnomeCalendar Conduit" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:145 -msgid "(C) 1998" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:147 -msgid "Configuration utility for the calendar conduit.\n" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:148 -msgid "gnome-calendar-conduit.png" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:190 -msgid "Synchronize Action" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:261 -#: calendar/gui/todo-conduit-control-applet.c:194 -msgid "Conduit state" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:305 -#: calendar/gui/calendar-conduit-control-applet.c:316 -#: calendar/gui/todo-conduit-control-applet.c:235 -#: calendar/gui/todo-conduit-control-applet.c:246 -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:332 -#: calendar/gui/calendar-conduit-control-applet.c:333 -#: calendar/gui/todo-conduit-control-applet.c:265 -#: calendar/gui/todo-conduit-control-applet.c:266 -msgid "Cannot initialze the GnomePilot Daemon" -msgstr "" - -#: calendar/gui/calendar-conduit-control-applet.c:339 -#: calendar/gui/calendar-conduit-control-applet.c:340 -#: calendar/gui/todo-conduit-control-applet.c:272 -#: calendar/gui/todo-conduit-control-applet.c:273 -msgid "Cannot connect to the GnomePilot Daemon" -msgstr "" - -#: calendar/gui/calendar-conduit.c:116 calendar/gui/calendar-conduit.c:156 -#: calendar/gui/calendar-conduit.c:239 calendar/gui/calendar-conduit.c:279 -#: calendar/gui/calendar-conduit.c:501 calendar/gui/calendar-conduit.c:542 -#: calendar/gui/calendar-conduit.c:858 calendar/gui/calendar-conduit.c:910 -#: calendar/gui/calendar-conduit.c:1332 -msgid "Error while communicating with calendar server" -msgstr "" - -#: calendar/gui/calendar-conduit.c:546 -#, c-format -msgid "Calendar holds %d entries" -msgstr "" - -#: calendar/gui/calendar-conduit.c:568 calendar/gui/calendar-conduit.c:570 -msgid "Could not start gnomecal server" -msgstr "" - -#: calendar/gui/calendar-conduit.c:598 calendar/gui/calendar-conduit.c:601 -msgid "Could not read pilot's DateBook application block" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:60 -msgid "Specifies the port on which the Pilot is" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:60 -msgid "PORT" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:62 -msgid "If you want to debug the attributes on records" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:64 -msgid "Only syncs from desktop to pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:66 -msgid "Only syncs from pilot to desktop" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:89 -msgid "Can not create Pilot socket\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:96 -#, c-format -msgid "Can not bind to device %s\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:99 -msgid "Failed to get a connection from the Pilot device" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:102 -msgid "pi_accept failed" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:167 -msgid "\tObject did not exist, creating a new one\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:174 -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:475 -msgid "No description" -msgstr "Nenhuma descrição" - -#: calendar/gui/calendar-pilot-sync.c:547 -msgid "Syncing with the pilot..." -msgstr "Sincronizando com o pilot..." - -#: calendar/gui/calendar-pilot-sync.c:554 -msgid "Could not open DatebookDB on the Pilot" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:555 -msgid "Unable to open DatebookDB" -msgstr "" - -#: calendar/gui/calendar-pilot-sync.c:617 -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26º" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27º" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28º" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29º" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30º" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31º" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "Do" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "Sg" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "Te" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "Qa" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "Qi" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "Sx" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "Sá" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Mês corrente (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Ano corrente (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Imprimir calendário" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Prever impressão" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2248 calendar/gui/e-day-view.c:2255 -#: calendar/gui/e-day-view.c:2264 calendar/gui/e-week-view.c:2625 -#: calendar/gui/e-week-view.c:2632 calendar/gui/e-week-view.c:2641 -msgid "New appointment..." -msgstr "Novo compromisso" - -#: calendar/gui/e-day-view.c:2252 calendar/gui/e-day-view.c:2259 -#: calendar/gui/e-week-view.c:2629 calendar/gui/e-week-view.c:2636 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2253 calendar/gui/e-week-view.c:2630 -msgid "Delete this appointment" -msgstr "" - -#: calendar/gui/e-day-view.c:2260 calendar/gui/e-week-view.c:2637 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2261 calendar/gui/e-week-view.c:2638 -msgid "Delete this occurrence" -msgstr "Apagar esta ocurrência" - -#: calendar/gui/e-day-view.c:2262 calendar/gui/e-week-view.c:2639 -msgid "Delete all occurrences" -msgstr "Apagar todas as ocurrências" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Ano:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/control-factory.c:136 -#: calendar/gui/evolution-calendar-control.c:131 -msgid "The URI that the calendar will display" -msgstr "O URI que o calendário mostrará" - -#: calendar/gui/gncal-todo.c:135 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:135 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:169 -msgid "Summary:" -msgstr "Sumário:" - -#: calendar/gui/gncal-todo.c:179 -msgid "Due Date:" -msgstr "" - -#: calendar/gui/gncal-todo.c:188 -msgid "Priority:" -msgstr "Prioridade:" - -#: calendar/gui/gncal-todo.c:204 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:320 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:321 -msgid "Edit this item..." -msgstr "Editar este item..." - -#: calendar/gui/gncal-todo.c:420 -msgid "Summary" -msgstr "Sumário" - -#: calendar/gui/gncal-todo.c:421 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:422 calendar/gui/prop.c:605 -#: mail/message-list.c:586 -msgid "Priority" -msgstr "Prioridade" - -#: calendar/gui/gncal-todo.c:423 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:435 -#, fuzzy -msgid "To-do list" -msgstr "_Ferramentas" - -#. Add -#: calendar/gui/gncal-todo.c:474 -msgid "Add..." -msgstr "Adicionar..." - -#. Edit -#: calendar/gui/gncal-todo.c:483 -msgid "Edit..." -msgstr "Editar..." - -#: calendar/gui/gncal-todo.c:707 -msgid "Weeks" -msgstr "Semanas" - -#: calendar/gui/gncal-todo.c:708 calendar/gui/gncal-todo.c:712 -msgid "Days" -msgstr "DiasRascunhos" - -#: calendar/gui/gncal-todo.c:713 calendar/gui/gncal-todo.c:717 -msgid "Hours" -msgstr "Horas" - -#: calendar/gui/gncal-todo.c:713 calendar/gui/gncal-todo.c:717 -msgid "Hour" -msgstr "Hora" - -#: calendar/gui/gncal-todo.c:718 calendar/gui/gncal-todo.c:722 -msgid "Minutes" -msgstr "Minutos" - -#: calendar/gui/gncal-todo.c:718 calendar/gui/gncal-todo.c:722 -msgid "Minute" -msgstr "Minuto" - -#: calendar/gui/gncal-todo.c:723 calendar/gui/gncal-todo.c:727 -msgid "Seconds" -msgstr "Segundos" - -#: calendar/gui/gncal-todo.c:723 calendar/gui/gncal-todo.c:727 -msgid "Second" -msgstr "Segundo" - -#: calendar/gui/gnome-cal.c:442 calendar/gui/gnome-cal.c:1081 -#: calendar/gui/gnome-cal.c:1137 -msgid "Reminder of your appointment at " -msgstr "" - -#: calendar/gui/gnome-cal.c:1073 -#, fuzzy -msgid "Snooze" -msgstr "Tamanho" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1086 calendar/gui/gnome-cal.c:1141 -msgid "Ok" -msgstr "Ok" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Dom" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Seg" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Ter" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Qua" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Qui" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Sex" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Sáb" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "12 horas (AM/PM)" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "24 horas" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:347 -msgid "Sunday" -msgstr "Domingo" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "Segunda-feira" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "Cores" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -#, fuzzy -msgid "To Do List Properties" -msgstr "Propriedades" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "Alarmes" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -msgid "Alarm Properties" -msgstr "Propriedades do alarme" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr " segundos" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "" - -#: calendar/gui/todo-conduit-control-applet.c:112 -msgid "Gpilotd todo conduit" -msgstr "" - -#: calendar/gui/todo-conduit-control-applet.c:113 -msgid "(C) 1998 the Free Software Foundation" -msgstr "(C) 1998 Free Software Foundation" - -#: calendar/gui/todo-conduit-control-applet.c:115 -msgid "Configuration utility for the todo conduit.\n" -msgstr "" - -#: calendar/gui/todo-conduit-control-applet.c:116 -msgid "gnome-unknown.xpm" -msgstr "gnome-unknown.xpm" - -#: calendar/gui/todo-conduit-control-applet.c:141 -msgid "Enabled" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/event-editor.c:289 -msgid "Edit Appointment" -msgstr "_Editar Compromisso" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "Nenhum sumário" - -#: calendar/gui/event-editor.c:298 -#, c-format -msgid "Appointment - %s" -msgstr "Compromisso - %s" - -#: calendar/gui/event-editor.c:301 -#, c-format -msgid "Task - %s" -msgstr "Tarefa - %s" - -#: calendar/gui/event-editor.c:304 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "_Entrada diária?" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "_Compromisso" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:690 -msgid "Cut" -msgstr "Cortar" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Cortar item seleccionado para a área de transferência" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:691 -msgid "Copy" -msgstr "Copiar" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Copiar item seleccionada para a área de transferência" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:692 -msgid "Paste" -msgstr "Colar" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Colar item da área de transferência" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Seleccionar o endereço dos receptores" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Adicionar anexo" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:332 -msgid "Remove" -msgstr "Remover" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Remover items seleccionados da lista de anexos" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Adicionar anexo..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Anexar um ficheiro à mensagem" - -#: composer/e-msg-composer-hdrs.c:89 -msgid "Click here for the address book" -msgstr "Pressione aqui para o livro de endereços" - -#: composer/e-msg-composer-hdrs.c:124 -msgid "To:" -msgstr "Para:" - -#: composer/e-msg-composer-hdrs.c:125 -msgid "Enter the recipients of the message" -msgstr "Introduza os receptores da mensagem" - -#: composer/e-msg-composer-hdrs.c:129 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:130 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Entre os endereços que irão receber uma cópia da mensagem" - -#: composer/e-msg-composer-hdrs.c:135 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:136 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Entre os endereços que irão receber uma cópia da mensagem sem conhecimento " -"do receptor" - -#: composer/e-msg-composer-hdrs.c:142 -msgid "Subject:" -msgstr "Assunto:" - -#: composer/e-msg-composer-hdrs.c:143 -msgid "Enter the subject of the mail" -msgstr "Introduza o assunto da carta" - -#: composer/e-msg-composer.c:492 -msgid "Open file" -msgstr "Abrir ficheiro" - -#: composer/e-msg-composer.c:502 -#, c-format -msgid "Error loading file: %s" -msgstr "" - -#: composer/e-msg-composer.c:543 -msgid "Discard this message?" -msgstr "Descartar esta mensagem?" - -#: composer/e-msg-composer.c:648 -msgid "Save in _folder..." -msgstr "Gravar na _pasta..." - -#: composer/e-msg-composer.c:648 -msgid "Save the message in a specified folder" -msgstr "Gravar a mensagem na pasta especificada" - -#: composer/e-msg-composer.c:651 composer/e-msg-composer.c:688 -#: mail/folder-browser-factory.c:36 -msgid "Send" -msgstr "Enviar" - -#: composer/e-msg-composer.c:651 -msgid "Send the message" -msgstr "Enviar a mensagem" - -#: composer/e-msg-composer.c:659 -msgid "View _attachments" -msgstr "Ver _anexos" - -#: composer/e-msg-composer.c:659 -msgid "View/hide attachments" -msgstr "Ver/esconder anexos" - -#: composer/e-msg-composer.c:688 -msgid "Send this message" -msgstr "Enviar esta mensagem" - -#: composer/e-msg-composer.c:690 -msgid "Cut selected region into the clipboard" -msgstr "Cortar a região seleccionada para a área de transferência" - -#: composer/e-msg-composer.c:691 -msgid "Copy selected region into the clipboard" -msgstr "Copiar a região seleccionada para a área de transferência" - -#: composer/e-msg-composer.c:692 -msgid "Paste selected region into the clipboard" -msgstr "Colar a região seleccionada para a área de transferência" - -#: composer/e-msg-composer.c:693 -msgid "Undo" -msgstr "Anular" - -#: composer/e-msg-composer.c:693 -msgid "Undo last operation" -msgstr "Anular a última operação" - -#: composer/e-msg-composer.c:695 -msgid "Attach" -msgstr "Anexar" - -#: composer/e-msg-composer.c:695 -msgid "Attach a file" -msgstr "Anexar um ficheiro" - -#: composer/e-msg-composer.c:857 -msgid "Compose a message" -msgstr "Criar uma nova mensagem" - -#: mail/folder-browser-factory.c:35 -msgid "Get mail" -msgstr "" - -#: mail/folder-browser-factory.c:35 -msgid "Check for new mail" -msgstr "Verificar novo correio" - -#: mail/folder-browser-factory.c:36 -msgid "Send a new message" -msgstr "Enviar uma nova mensagem" - -#: mail/folder-browser-factory.c:37 -msgid "Find messages" -msgstr "Encontrar mensagens" - -#: mail/folder-browser-factory.c:41 -msgid "Reply" -msgstr "Responder" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Reply to the sender of this message" -msgstr "Responder ao emissor desta mensagem" - -#: mail/folder-browser-factory.c:42 -msgid "Reply to All" -msgstr "Reponder para todos" - -#: mail/folder-browser-factory.c:42 -msgid "Reply to all recipients of this message" -msgstr "Reponder a todos receptores da mensagem" - -#: mail/folder-browser-factory.c:44 -msgid "Forward" -msgstr "" - -#: mail/folder-browser-factory.c:44 -#, fuzzy -msgid "Forward this message" -msgstr "Enviar esta mensagem" - -#: mail/folder-browser-factory.c:48 -#, fuzzy -msgid "Print the selected message" -msgstr "Imprimir a mensagem seleccionada" - -#: mail/folder-browser-factory.c:50 -#, fuzzy -msgid "Delete this message" -msgstr "Enviar esta mensagem" - -#: mail/folder-browser-factory.c:69 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:75 -msgid "_Filter Druid ..." -msgstr "Druída dos _filtros" - -#: mail/folder-browser-factory.c:81 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:87 -msgid "_Mail Configuration ..." -msgstr "Configuração do co_rreio..." - -#: mail/folder-browser-factory.c:93 -msgid "Forget _Passwords" -msgstr "Esquecer _Senhas" - -#: mail/mail-config.c:258 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config.c:273 -msgid "Full name:" -msgstr "Nome completo:" - -#: mail/mail-config.c:301 -msgid "Email address:" -msgstr "Endereço de correio:" - -#: mail/mail-config.c:324 -msgid "Organization:" -msgstr "Organização:" - -#: mail/mail-config.c:336 -msgid "Signature file:" -msgstr "Ficheiro com assinatura:" - -#: mail/mail-config.c:341 -msgid "Signature File" -msgstr "" - -#: mail/mail-config.c:698 mail/mail-config.c:789 -msgid "Server:" -msgstr "Servidor:" - -#: mail/mail-config.c:704 -msgid "Username:" -msgstr "Utilizador:" - -#: mail/mail-config.c:710 -msgid "Path:" -msgstr "Caminho" - -#: mail/mail-config.c:716 mail/mail-config.c:795 -msgid "Authentication:" -msgstr "Autenticação" - -#: mail/mail-config.c:728 mail/mail-config.c:807 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:754 mail/mail-config.c:829 -msgid "Test these values before continuing" -msgstr "" - -#: mail/mail-config.c:936 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:954 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" - -#: mail/mail-config.c:1128 mail/mail-config.c:1207 -msgid "Mail Configuration" -msgstr "Configuração do correio" - -#. Identity page -#: mail/mail-config.c:1145 mail/mail-config.c:1874 -msgid "Identity" -msgstr "" - -#. Source page -#: mail/mail-config.c:1164 -#, fuzzy -msgid "Mail Source" -msgstr "atalhos principais" - -#. Transport page -#: mail/mail-config.c:1185 -msgid "Mail Transport" -msgstr "Transporte de correio" - -#: mail/mail-config.c:1307 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config.c:1309 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config.c:1452 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config.c:1454 -msgid "Add Source" -msgstr "Adicionar Fonte" - -#: mail/mail-config.c:1716 -msgid "Name" -msgstr "Nome" - -#: mail/mail-config.c:1716 -msgid "Address" -msgstr "Endereço" - -#: mail/mail-config.c:1716 -msgid "Organization" -msgstr "Organização" - -#: mail/mail-config.c:1716 -msgid "Signature file" -msgstr "" - -#: mail/mail-config.c:1742 -msgid "Camel Providers Configuration" -msgstr "" - -#: mail/mail-config.c:1831 -msgid "Identities" -msgstr "" - -#: mail/mail-config.c:1847 mail/mail-config.c:1943 -msgid "Add" -msgstr "Adicionar" - -#: mail/mail-config.c:1856 mail/mail-config.c:1952 -msgid "Edit" -msgstr "" - -#: mail/mail-config.c:1927 -msgid "Mail sources" -msgstr "Fontes de correio" - -#: mail/mail-config.c:1970 -msgid "Sources" -msgstr "Fontes" - -#: mail/mail-config.c:2009 -msgid "Transports" -msgstr "Transportes" - -#: mail/mail-config.c:2030 -msgid "Send messages in HTML format" -msgstr "Enviar mensagem em formato HTML" - -#: mail/main.c:58 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "Component de correio: Não consegui inicializar Bonobo" - -#: mail/message-list.c:572 -msgid "Online Status" -msgstr "Situação online" - -#: mail/message-list.c:607 -msgid "Subject" -msgstr "Assunto" - -#: mail/message-list.c:614 -msgid "Date" -msgstr "Data" - -#: mail/message-list.c:621 -msgid "Receive" -msgstr "Receber" - -#: mail/message-list.c:635 -msgid "Size" -msgstr "Tamanho" - -#: mail/component-factory.c:173 -msgid "Cannot initialize Evolution's mail component." -msgstr "Não consigo inicializar o componente de mail do Evolution." - -#: shell/main.c:99 -msgid "" -"Hi. Thanks for taking the time to download this preview release of\n" -"the Evolution groupware suite.\n" -"\n" -"The Evolution team has worked hard to make Evolution as robust,\n" -"extensible, pretty, fast and well-suited to heavy internet users as\n" -"possible. And we're very tired. But we're not done -- not yet.\n" -"\n" -"As you explore Evolution, please understand that most of our work has\n" -"been focused on the backend engine which drives the entire system and\n" -"not on the user interface. We are just cresting the hill now, though,\n" -"and will be pouring most of our love and attention into the UI from\n" -"here out. But at least you know that you're not using demoware.\n" -"\n" -"So, time for the nerdy disclaimer. Evolution will: crash, lose your\n" -"mail, leave stray processes running, consume 100% CPU, race, lock,\n" -"send HTML mail to random mailing lists, and embarass you in front of\n" -"your friends and co-workers. Use at your own risk.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: shell/main.c:128 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" - -#: shell/main.c:169 -msgid "Cannot initialize the Evolution shell." -msgstr "" - -#: shell/main.c:205 -msgid "Cannot initialize the Bonobo component system." -msgstr "Falhou a inicialização do sistema de componentes Bonobo." - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Instalação do Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Esta parece ser a primeira vez que está a correr o Evolution." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "Carregue em \\\"OK\\\" para instalar os ficheiros de utilizador do Evolution em" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Ficheiros do Evolution instalados com sucesso" - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-view.c:112 -msgid "(No folder displayed)" -msgstr "(Nenhuma pasta mostrada)" - -#: shell/e-shell-view.c:207 -msgid "Folders" -msgstr "_Pastas" - -#: shell/e-shell-view.c:575 -msgid "None" -msgstr "Nenhuma" - -#: shell/e-shell-view.c:579 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell-view.c:647 -#, c-format -msgid "Cannot open location: %s" -msgstr "Não consigo abrir a localização: %s" - -#: shell/e-shell.c:250 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "" - -#: shell/e-shell-folder-title-bar.c:353 -msgid "(Untitled)" -msgstr "(Sem título)" - -#: shell/e-shortcut.c:469 -msgid "New group" -msgstr "Novo grupo" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "Ícone_s pequenos" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Ícones _grandes" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Mostrar atalhos co ícones grandes" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate" -msgstr "Activar" - -#: shell/e-shortcuts-view.c:329 -msgid "Activate this shortcut" -msgstr "Activar este atalho" - -#: shell/e-shortcuts-view.c:332 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Remover este atalho da barra de atalhos" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "O Bug buddy não foi encontrado no seu $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "Não consegui correr o Bub buddy" - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:302 shell/e-shell-view-menu.c:399 -msgid "Go to folder..." -msgstr "Ir para a _pasta..." - -#: shell/e-shell-view-menu.c:343 -msgid "_Folder" -msgstr "_Pasta" - -#: shell/e-shell-view-menu.c:347 -msgid "Evolution _Bar Shortcut" -msgstr "Atalho para _barra do Evolution" - -#: shell/e-shell-view-menu.c:353 -msgid "_Mail message" -msgstr "Mensagem de _correio" - -#: shell/e-shell-view-menu.c:354 shell/e-shell-view-menu.c:357 -msgid "Composes a new mail message" -msgstr "Criar uma nova mensagem" - -#: shell/e-shell-view-menu.c:356 -msgid "_Appointment" -msgstr "_Compromisso" - -#: shell/e-shell-view-menu.c:359 -msgid "Meeting Re_quest" -msgstr "Pedido de _encontro" - -#: shell/e-shell-view-menu.c:362 -msgid "_Contact" -msgstr "_Contacto" - -#: shell/e-shell-view-menu.c:365 -msgid "_Task" -msgstr "_Tarefa" - -#: shell/e-shell-view-menu.c:368 -msgid "Task _Request" -msgstr "_Pedido de tarefa" - -#: shell/e-shell-view-menu.c:371 -msgid "_Journal Entry" -msgstr "_Entrada diária?" - -#: shell/e-shell-view-menu.c:374 -msgid "_Note" -msgstr "_Nota" - -#: shell/e-shell-view-menu.c:384 -msgid "_Selected Items" -msgstr "_Items seleccionados" - -#: shell/e-shell-view-menu.c:392 -msgid "_New" -msgstr "_Novo" - -#: shell/e-shell-view-menu.c:393 -msgid "_Open" -msgstr "_Abrir" - -#: shell/e-shell-view-menu.c:395 -msgid "Clos_e All Items" -msgstr "_Fechar todos os items" - -#: shell/e-shell-view-menu.c:395 -msgid "Closes all the open items" -msgstr "Fecha todos os items abertos" - -#: shell/e-shell-view-menu.c:399 -msgid "Display a different folder" -msgstr "Mostrar uma pasta diferente" - -#: shell/e-shell-view-menu.c:414 -msgid "Show _shortcut bar" -msgstr "Mostrar barra de atalho_s" - -#: shell/e-shell-view-menu.c:415 -msgid "Show the shortcut bar" -msgstr "Mostrar a barra de atalhos" - -#: shell/e-shell-view-menu.c:417 -msgid "Show _folder bar" -msgstr "Motrar barra de _pastas" - -#: shell/e-shell-view-menu.c:418 -msgid "Show the folder bar" -msgstr "Mostrar a barra de pastas" - -#: shell/e-shell-view-menu.c:435 -msgid "Help _Index" -msgstr "Índ_ice de ajuda" - -#: shell/e-shell-view-menu.c:438 -msgid "Getting _Started" -msgstr "_Começando" - -#: shell/e-shell-view-menu.c:441 -msgid "Using the _Mailer" -msgstr "Usando o programa de C_orreio" - -#: shell/e-shell-view-menu.c:444 -msgid "Using the _Calendar" -msgstr "Usando o _Calendário" - -#: shell/e-shell-view-menu.c:447 -msgid "Using the Cont_act Manager" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -msgid "_Submit bug report" -msgstr "" - -#: shell/e-shell-view-menu.c:453 -msgid "Submit bug-report via bug-buddy" -msgstr "" - -#: shell/e-shell-view-menu.c:469 -msgid "_Actions" -msgstr "_Acções" - -#: shell/e-init.c:25 -msgid "Evolution can not create its local folders" -msgstr "O Evolution não consegue criar as suas pastas locais" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Erro a gravar os atalhos." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:385 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Busy" -msgstr "Ocupado" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Out of Office" -msgstr "Fora do escritório" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "No Information" -msgstr "Nenhuma Informação" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:404 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:424 -msgid "_Options" -msgstr "_Opções" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:441 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:454 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:472 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:490 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:507 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:521 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:538 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:551 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:564 -msgid "_Required People" -msgstr "Pessoas _Necessãrias" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:577 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:600 -msgid "Meeting _start time:" -msgstr "Hora de ín_icio de encontro" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:624 -msgid "Meeting _end time:" -msgstr "Hora de _fim de _encontro" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:737 -msgid "All Attendees" -msgstr "" - -#: widgets/shortcut-bar/e-group-bar.c:631 -#, c-format -msgid "Group %i" -msgstr "Grupo %i" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#~ msgid "" -#~ "Evolution detected that the file `%s' is a not a directory.\n" -#~ "\n" -#~ "Evolution can rename the file, delete the file or shutdown and\n" -#~ "let you fix the problem." -#~ msgstr "" -#~ "O Evolution detectou que o ficheiro '%s' não é um directório.\n" -#~ "\n" -#~ "O Evolution pode mudar o nome ou apagar o ficheiro ou então desligue\n" -#~ "e resolva o problema." - -#~ msgid "" -#~ "This is a development version of Evolution.\n" -#~ " Using the mail component on your mail files\n" -#~ " is extremely hazardous.\n" -#~ "Please backup all your mails before trying\n" -#~ " this program. \n" -#~ " You have been warned\n" -#~ msgstr "" -#~ "Esta verão do Evolution é de desenvolvimento.\n" -#~ " Usar o componente de correio nos seus ficheiros\n" -#~ " é extremamente perigoso.\n" -#~ "Por favor faça uma cópia de segurança antes de usar\n" -#~ " o programa.\n" -#~ " Foi avisado\n" - -#~ msgid "_Mail" -#~ msgstr "_Correio" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "" -#~ "Pedimos desculpa. O navegador de pastas do Evolution não pode ser " -#~ "inicializado." - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "Se uma previsão da mensagem deve ser mostrada" - -#~ msgid "" -#~ "An exception occured while trying to load data into the component with " -#~ "PersistStream" -#~ msgstr "" -#~ "Um excepção ocorreu enquanto se tentava carregar dados no componente com " -#~ "PersistStream" - -#~ msgid "The %s component doesn't support PersistStream!\n" -#~ msgstr "O componente %s não suporta PersistStream!\n" - -#~ msgid "Message status" -#~ msgstr "Situação das mensagens" - -#~ msgid "Attachment" -#~ msgstr "Anexo" - -#~ msgid "Sent" -#~ msgstr "Enviar" - -#~ msgid "A folder containing mail items" -#~ msgstr "Uma pasta contendo items de correio" - -#~ msgid "A folder containing contacts" -#~ msgstr "Uma pasta contendo contactos" - -#~ msgid "A folder containing calendar entries" -#~ msgstr "Uma pasta contendo entradas de calendário" - -#~ msgid "A folder containing tasks" -#~ msgstr "Uma pasta contendo tarefas" - -#~ msgid "A service containing mail items" -#~ msgstr "Um serviço contendo items de correio" - -#~ msgid "A service containing contacts" -#~ msgstr "Um serviço contendo contactos" - -#~ msgid "A service containing calendar entries" -#~ msgstr "Um serviço contendo entradas de calendário" - -#~ msgid "A service containing tasks" -#~ msgstr "Um serviço contendo tarefas" - -#~ msgid "Add New Group" -#~ msgstr "Adicionar novo grupo" - -#~ msgid "Remove Group" -#~ msgstr "Remover grupo" - -#~ msgid "Rename Group" -#~ msgstr "Mudar nome de grupo" - -#~ msgid "Open in New Window" -#~ msgstr "Åbrir em nova janela" - -#~ msgid "Advanced Find" -#~ msgstr "Encontrar avançado" - -#~ msgid "Rename Shortcut" -#~ msgstr "Mudar nome de atalho" - -#~ msgid "_New Folder" -#~ msgstr "_Nova pasta" - -#~ msgid "Executive Summary" -#~ msgstr "Sumário executivo" - -#~ msgid "Inbox" -#~ msgstr "Correio novo" - -#~ msgid "New mail messages" -#~ msgstr "Novas mensagens de correio" - -#~ msgid "Sent mail messages" -#~ msgstr "Mensagens enviadas" - -#~ msgid "Draft mail messages" -#~ msgstr "Mensagens de correio em rascunho" - -#~ msgid "Your contacts list" -#~ msgstr "A sua lista de contactos" - -#~ msgid "Tasks list" -#~ msgstr "Lista de tarefas" - -#~ msgid "Enables some debugging functions" -#~ msgstr "Liga algumas funções de deupração" - -#~ msgid "LEVEL" -#~ msgstr "NÍVEL" diff --git a/po/pt_BR.po b/po/pt_BR.po deleted file mode 100644 index 1eecfafe43..0000000000 --- a/po/pt_BR.po +++ /dev/null @@ -1,3904 +0,0 @@ -# Brazilian Translation of Evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Gustavo Maciel Dias Vieira , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.3\n" -"POT-Creation-Date: 2000-08-02 11:36-0300\n" -"PO-Revision-Date: 2000-07-29 23:07-03:00\n" -"Last-Translator: Gustavo Maciel Dias Vieira \n" -"Language-Team: Brazilian Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Não foi possível iniciar Bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "categorias" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Item(ns) pertence(m) a estas categorias:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Categorias disponíveis:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "FIXME: _Compromisso" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: Pedido de _reunião" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "FIXME: _Mensagem de correio" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "FIXME: _Contato" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "FIXME: _Tarefa" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "FIXME: Pedido de t_arefa" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: Item de _diário" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "FIXME: _Anotação" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/event-editor.c:1178 calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "FIXME: Escolher _formulário..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "FIXME: Estilo de _memorando" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "FIXME: Definir estilos de _impressão..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "FIXME: _Enviar" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: Salvar a_nexos..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Excluir" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "FIXME: _Mover para a pasta..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "FIXME: _Copiar para a pasta..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "_Configuração de página" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "FIXME: _Visualizar impressão" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "FIXME: Colar _especial..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "FIXME: _Marcar como não lido" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Objeto" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/event-editor.c:1238 calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "FIXME: _Item" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/event-editor.c:1239 calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "FIXME: Item não _lido" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "FIXME: _Primeiro item na pasta" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "FIXME: Úl_timo item na pasta" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "FIXME: _Padrão" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "FIXME: __Formatação" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "FIXME: _Customizar..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "_Anterior" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "P_róximo" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "_Ferramentas" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "FIXME: _Arquivo..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "FIXME: _Item..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "FIXME: _Objeto..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "FIXME: _Fonte..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: _Parágrafo..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "FIXME: Projetar _este formulário" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "FIXME: Projetar _um formulário..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "FIXME: Publicar _formulário..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "FIXME: Publicar formulário _como..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "FIXME: _Depurador de scripts" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "FIXME: _Ortografia..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "_Formulários" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: _Novo contato" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "FIXME: Novo _contato da mesma empresa" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "FIXME: Nova c_orrespondência para contato" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "FIXME: Nova _mensagem para contato" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "FIXME: Nova _reunião com contato" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "FIXME: _Planejar uma reunião..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "FIXME: Nova _tarefa para contato" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "FIXME: Novo item de _diário para contato" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "FIXME: _Marcar para seguimento..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "FIXME: _Exibir mapa do endereço" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "FIXME: _Abrir página web" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "FIXME: Encaminhar como _vCard" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "FIXME: _Encaminhar" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "_Inserir" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "F_ormato" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/event-editor.c:1331 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "_Ferramentas" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "_Ações" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Salvar e fechar" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "Salva o compromisso e fecha a caixa de diálogo" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:673 -msgid "Print..." -msgstr "Imprimir..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Imprime este item" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "FIXME: Inserir arquivo..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Insere um arquivo como um anexo" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:426 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "Excluir" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/event-editor.c:1387 calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "Exclui este item" - -#: addressbook/contact-editor/e-contact-editor.c:856 -#: calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "FIXME: Anterior" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Vai para o item anterior" - -#: addressbook/contact-editor/e-contact-editor.c:859 -#: calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "FIXME: Próximo" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Vai para o próximo item" - -#: addressbook/contact-editor/e-contact-editor.c:862 -#: calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "FIXME: Ajuda" - -#: addressbook/contact-editor/e-contact-editor.c:863 -#: calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Abre ajuda" - -#: addressbook/contact-editor/e-contact-editor.c:1278 -msgid "Assistant" -msgstr "Assistente:" - -#: addressbook/contact-editor/e-contact-editor.c:1279 -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Business" -msgstr "Comercial" - -#: addressbook/contact-editor/e-contact-editor.c:1280 -msgid "Business 2" -msgstr "Comercial 2" - -#: addressbook/contact-editor/e-contact-editor.c:1281 -msgid "Business Fax" -msgstr "Fax comercial" - -#: addressbook/contact-editor/e-contact-editor.c:1282 -msgid "Callback" -msgstr "Callback" - -#: addressbook/contact-editor/e-contact-editor.c:1283 -msgid "Car" -msgstr "Carro" - -#: addressbook/contact-editor/e-contact-editor.c:1284 -msgid "Company" -msgstr "Empresa" - -#: addressbook/contact-editor/e-contact-editor.c:1285 -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Home" -msgstr "Residencial" - -#: addressbook/contact-editor/e-contact-editor.c:1286 -msgid "Home 2" -msgstr "Residencial 2" - -#: addressbook/contact-editor/e-contact-editor.c:1287 -msgid "Home Fax" -msgstr "Fax residencial" - -#: addressbook/contact-editor/e-contact-editor.c:1288 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1289 -msgid "Mobile" -msgstr "Celular" - -#: addressbook/contact-editor/e-contact-editor.c:1290 -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Other" -msgstr "Outro" - -#: addressbook/contact-editor/e-contact-editor.c:1291 -msgid "Other Fax" -msgstr "Outro fax" - -#: addressbook/contact-editor/e-contact-editor.c:1292 -msgid "Pager" -msgstr "Pager" - -#: addressbook/contact-editor/e-contact-editor.c:1293 -msgid "Primary" -msgstr "Principal" - -#: addressbook/contact-editor/e-contact-editor.c:1294 -msgid "Radio" -msgstr "Rádio" - -#: addressbook/contact-editor/e-contact-editor.c:1295 -msgid "Telex" -msgstr "Telex" - -#: addressbook/contact-editor/e-contact-editor.c:1296 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1340 -msgid "Primary Email" -msgstr "E-mail principal" - -#: addressbook/contact-editor/e-contact-editor.c:1341 -msgid "Email 2" -msgstr "E-mail 2" - -#: addressbook/contact-editor/e-contact-editor.c:1342 -msgid "Email 3" -msgstr "E-mail 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Incluir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Tipos de telefone" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Novo tipo de telefone" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -msgid "Add" -msgstr "Incluir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Editor de contatos" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "Nome _completo..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Arquivar como:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Endereço de página web:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Deseja receber correio _HTML" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Endereço:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Comercial" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Residencial" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "_Fax comercial" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "Cel_ular" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "C_omercial" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "E_ste é o endereço de correspondência" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "Co_ntatos..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "Ca_tegorias..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "C_argo:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Empresa:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -msgid "General" -msgstr "Geral" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "_Departamento:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "_Escritório:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Profissão:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "_Apelido:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "_Cônjuge:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Ani_versário:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "Nome do a_ssistente:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "Nome do _gerente:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "_Bodas:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "_Notas:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "Detalhes" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Verificar nome completo" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Tratamento:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Nome:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "Nome do _meio:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Sobrenome:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "S_ufixo:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Sr.\n" -"Sra.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/gui/component/addressbook.c:420 -#: calendar/gui/calendar-commands.c:544 -msgid "New" -msgstr "Novo" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Create a new contact" -msgstr "Cria um novo contato" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find" -msgstr "Localizar" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find a contact" -msgstr "Localiza um contato" - -#: addressbook/gui/component/addressbook.c:425 -#: addressbook/gui/component/addressbook.c:492 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -msgid "Print" -msgstr "Imprimir" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Print contacts" -msgstr "Imprime contatos" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Delete a contact" -msgstr "Exclui um contato" - -#: addressbook/gui/component/addressbook.c:499 -#: addressbook/gui/component/addressbook.c:1039 -msgid "As _Table" -msgstr "Como _tabela" - -#: addressbook/gui/component/addressbook.c:506 -msgid "_New Contact" -msgstr "_Novo contato" - -#: addressbook/gui/component/addressbook.c:514 -msgid "N_ew Directory Server" -msgstr "Novo _servidor de diretório" - -#: addressbook/gui/component/addressbook.c:593 -msgid "Unable to open addressbook" -msgstr "Não é possível abrir o catálogo de endereços" - -#: addressbook/gui/component/addressbook.c:598 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Não foi possível abrir este catálogo de endereços. Isto \n" -"significa que você forneceu uma URI incorreta ou tentou\n" -"acessar um servidor LDAP sem que o suporte para LDAP esteja\n" -"compilado. Se você entrou uma URI, verifique a URI e tente \n" -"novamente. Caso contrário, você provavelmente tentou\n" -"acessar um servidor LDAP. Se você quiser usar LDAP, você\n" -"vai precisar baixar e instalar OpenLDAP e recompilar e\n" -"instalar Evolution.\n" - -#: addressbook/gui/component/addressbook.c:943 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "Salvar como vCard" - -#: addressbook/gui/component/addressbook.c:1010 -msgid "* Click here to add a contact *" -msgstr "* Clique aqui para incluir um contato *" - -#: addressbook/gui/component/addressbook.c:1046 -msgid "As _Minicards" -msgstr "Como _minicartões" - -#: addressbook/gui/component/addressbook.c:1097 -msgid "The URI that the Folder Browser will display" -msgstr "A URI que o navegador de pastas vai exibir" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "window2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Descrição" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "Servidor LDAP:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Número da porta:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "DN raiz:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Nome:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Não há itens neste modo de exibição\n" -"\n" -"Clique duas vezes aqui para criar um novo contato." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Configuração de página:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Nome do estilo:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Visualizar:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Opções" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Incluir:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Seções:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Aparecem uma após a outra" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Cabeçalhos para cada carta" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Começam em uma nova página" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Número de colunas:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Formulários vazios no fim:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Fontes" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Fonte..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Cabeçalhos" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Corpo" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Sombreamento" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Imprimir usando sombreamento" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Formato" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papel" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Tipo:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Tamanho:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Largura:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Altura:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Fonte de papel:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Margens" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Superior:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Inferior:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Esquerda:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Direita:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Página" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Tamanho:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Orientação" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Retrato" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Paisagem" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Cabeçalho" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Rodapé:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Inverter nas páginas pares" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Cabeçalho/rodapé" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "am" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "pm" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "Resumo:" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "Cabeçalhos:" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "Dias vazios:" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "Compromissos:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "Dia realçado:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "Números do dia:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "Número do dia atual:" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "Tarefa que não está com prazo vencido:" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "Tarefa que o prazo vence hoje:" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "Tarefa que está atrasada:" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "Agenda Gnome" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "A agenda pessoal e gerente de compromissos do GNOME." - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "Arquivo não encontrado" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "Abrir agenda" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "Salvar agenda" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Dia" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "Exibe 1 dia" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "5 dias" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "Exibe a semana útil" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Semana" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "Exibe 1 semana" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "Mês" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "Exibe 1 mês" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "Ano" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "Exibe 1 ano" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "Cria um novo compromisso" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "Imprime esta agenda" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "Anterior" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "Volta no tempo" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Hoje" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "Vai para a data atual" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "Próximo" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "Avança no tempo" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "Ir para" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "Vai para uma data específica" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "Nova _agenda" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "Cria uma nova agenda" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "Abrir a_genda" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "Abre uma agenda" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "Salvar agenda _como" - -#: calendar/gui/calendar-commands.c:682 -msgid "_New appointment..." -msgstr "Novo _compromisso..." - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "Novo compromisso para _hoje..." - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "Cria um novo compromisso para hoje" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "Preferências" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -msgid "About Calendar" -msgstr "Sobre a agenda" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "%2$s%1$s" - -#: calendar/gui/calendar-commands.c:746 -msgid "'s calendar" -msgstr "Agenda de " - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "A URI que a agenda vai exibir" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Alarme em %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Notificação sobre seu compromisso em %A %b %d %Y %H:%M" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Fechar" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "Adiar" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Editar compromisso" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Tempo de adiamento (minutos)" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i frações de minuto" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Novo compromisso..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Editar este compromisso..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Excluir este compromisso" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Tornar este compromisso móvel" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "Excluir esta ocorrência" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Excluir todas as ocorrências" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "Editar compromisso" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "Sem resumo" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "Compromisso - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "Tarefa - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "Item de diário - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "FIXME: _Excluir" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: _Agenda..." - -#: calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "FIXME: _Verificar nomes" - -#: calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "FIXME: _Catálogo de endereços..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "FIXME: _Novo compromisso" - -#: calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "FIXME: _Recorrência..." - -#: calendar/gui/event-editor.c:1312 -msgid "FIXME: Invite _Attendees..." -msgstr "FIXME: Convidar _participantes..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "FIXME: Cancelar con_vite..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "FIXME: _Encaminhar como vCalendar" - -#: calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "FIXME: Salvar e fechar" - -#: calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "FIXME: Imprimir..." - -#: calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "FIXME: Recorrência..." - -#: calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "Configura as regras de recorrência" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "FIXME: Convidar participantes..." - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "Convida os participantes para uma reunião" - -#: calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "FIXME: Excluir" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "janeiro" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "fevereiro" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "março" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "abril" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "maio" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "junho" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "julho" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "agosto" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "setembro" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "set" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "outubro" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "novembro" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "dezembro" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "domigo" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "segunda-feira" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "terça-feira" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "terça" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "quarta-feira" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "quarta" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "quinta-feira" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "quint" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "quinta" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "sexta-feira" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "sábado" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "ano" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "mês" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "quinzena" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "semana" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "dia" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "hora" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "minuto" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "segundo" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "seg" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "amanhã" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "ontem" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "hoje" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "agora" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "último" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "este" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "próximo" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "primeiro" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "terceiro" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "quarto" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "quinto" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "sexto" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "sétimo" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "oitavo" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "nono" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "décimo" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "décimo primeiro" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "décimo segundo" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "atrás" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "Criar tarefa" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "Editar tarefa" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "Resumo:" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "Prazo de conclusão:" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Prioridade:" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "Comentários:" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "Incluir tarefa..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "Editar este item..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Resumo" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "Prazo de conclusão" - -#: calendar/gui/gncal-todo.c:436 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Prioridade" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "Tempo restante" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "Lista de tarefas" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Incluir..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "Editar..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Semanas" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Dias" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Horas" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Hora" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Minutos" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Minuto" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "Segundos" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "Segundo" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "Lembrete de seu compromisso às " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "Ok" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "dom" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "seg" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "ter" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "qua" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "qui" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "sex" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "sáb" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Ano:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Ir para data" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Por favor selecione a data para onde você deseja ir.\n" -"Quando você clicar em um dia, você será \n" -"levado para esta data." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Ir para hoje" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1º" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2º" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3º" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4º" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5º" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6º" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7º" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8º" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9º" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10º" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11º" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12º" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13º" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14º" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15º" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16º" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17º" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18º" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19º" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20º" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21º" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22º" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23º" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24º" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25º" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26º" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27º" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28º" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29º" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30º" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31º" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "do" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "se" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "te" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "qu" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "qu" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "se" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "sá" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "Tarefas" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "Dia atual (%a %b %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Semana atual (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Semana atual (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Semana atual (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Mês atual (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Ano atual (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Imprimir agenda" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Visualizar impressão" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "Exibição da hora" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "Formato da hora" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "12 horas (AM/PM)" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "24 horas" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "Semanas começam" - -#: calendar/gui/prop.c:347 -msgid "Sunday" -msgstr "Domigo" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "Segunda" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "Intervalo do dia" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Por favor selecione as horas do início e fim que\n" -"você quer exibidas nas visões de dia e semana.\n" -"Horas fora deste intervalo não irão ser exibidas\n" -"normalmente." - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "Início do dia:" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "Fim do dia:" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "Cores para a exibição" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "Cores" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "Exibir na lista de tarefas:" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "Tempo até o prazo" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "Opções de estilo da lista de tarefas:" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "Realçar tarefas com prazo vencido" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "Realçar tarefas com prazo ainda não vencido" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "Realçar tarefas com prazo para hoje" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "Propriedades da lista de tarefas" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "Lista de tarefas" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "Alarmes" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -msgid "Alarm Properties" -msgstr "Propriedades do alarme" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "Bips em alarmes visuais" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "Alarmes sonoros param após" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr " segundos" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "Habilitar adiamento para " - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "Padrões" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut" -msgstr "Recortar" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Recortar item selecionado para a área de tranferência" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy" -msgstr "Copiar" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Copiar item selecionado para a área de transferência" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste" -msgstr "Colar" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Colar item da área de transferência" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Selecionar endereço dos destinatários" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Lista de destinatários:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Procurar..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Nome" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "Endereço" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Propriedades..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "Para: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bytes" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Incluir anexo" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Remover" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Remover itens selecionados da lista de anexos" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Incluir anexo..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Anexar um arquivo à mensagem" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Propriedades do anexo" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "Tipo MIME:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Nome do arquivo:" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Clique aqui para o catálogo de endereços" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "Para:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Entre os destinatários da mensagem" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Entre os endereços que receberão uma cópia da mensagem" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Entre os endereços que receberão uma cópia da mensagem sem aparecer na lista " -"de destinatários da mensagem" - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Assunto:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Entre o assunto da correspondência" - -#: composer/e-msg-composer.c:447 -msgid "Save as..." -msgstr "Salvar como..." - -#: composer/e-msg-composer.c:458 -#, c-format -msgid "Error saving file: %s" -msgstr "Erro ao salvar arquivo: %s" - -#: composer/e-msg-composer.c:478 -#, c-format -msgid "Error loading file: %s" -msgstr "Erro ao carregar arquivo: %s" - -#: composer/e-msg-composer.c:497 -msgid "Discard this message?" -msgstr "Descartar esta mensagem?" - -#: composer/e-msg-composer.c:514 -msgid "Open file" -msgstr "Abrir arquivo" - -#: composer/e-msg-composer.c:626 -msgid "That file does not exist." -msgstr "Este arquivo não existe." - -#: composer/e-msg-composer.c:636 -msgid "That is not a regular file." -msgstr "Este não é um arquivo comum." - -#: composer/e-msg-composer.c:646 -msgid "That file exists but is not readable." -msgstr "Este arquivo existe mas não é legível." - -#: composer/e-msg-composer.c:656 -msgid "That file appeared accesible but open(2) failed." -msgstr "Este arquivo aparenta ser acessível mas open(2) falhou." - -#: composer/e-msg-composer.c:678 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"O arquivo é muito grande (mais que 100K).\n" -"Você tem certeza que deseja inserí-lo?" - -#: composer/e-msg-composer.c:699 -msgid "An error occurred while reading the file." -msgstr "Um erro ocorreu ao ler o arquivo." - -#: composer/e-msg-composer.c:795 -msgid "_File" -msgstr "_Arquivo" - -#: composer/e-msg-composer.c:801 -msgid "_Open..." -msgstr "_Abrir..." - -#: composer/e-msg-composer.c:802 -msgid "Load a previously saved message" -msgstr "Carrega uma mensagem salva anteriormente" - -#: composer/e-msg-composer.c:810 -msgid "_Save..." -msgstr "_Salvar..." - -#: composer/e-msg-composer.c:811 -msgid "Save message" -msgstr "Salva a mensagem" - -#: composer/e-msg-composer.c:819 -msgid "_Save as..." -msgstr "Salvar _como..." - -#: composer/e-msg-composer.c:820 -msgid "Save message with a different name" -msgstr "Salva a mensagem com um nome diferente" - -#: composer/e-msg-composer.c:828 -msgid "Save in _folder..." -msgstr "Salvar na _pasta..." - -#: composer/e-msg-composer.c:829 -msgid "Save the message in a specified folder" -msgstr "Salva a mensagem em uma pasta escolhida" - -#: composer/e-msg-composer.c:838 -msgid "_Insert text file... (FIXME)" -msgstr "_Inserir arquivo texto... (FIXME)" - -#: composer/e-msg-composer.c:839 -msgid "Insert a file as text into the message" -msgstr "Insere um arquivo como texto na mensagem" - -#: composer/e-msg-composer.c:848 -msgid "_Send" -msgstr "_Enviar" - -#: composer/e-msg-composer.c:849 -msgid "Send the message" -msgstr "Envia a mensagem" - -#: composer/e-msg-composer.c:859 -msgid "_Close..." -msgstr "_Fechar..." - -#: composer/e-msg-composer.c:860 -msgid "Quit the message composer" -msgstr "Sai do editor de mensagens" - -#: composer/e-msg-composer.c:873 -msgid "_Edit" -msgstr "_Editar" - -#: composer/e-msg-composer.c:884 -msgid "_Format" -msgstr "_Formato" - -#: composer/e-msg-composer.c:890 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:891 -msgid "Send the mail in HTML format" -msgstr "Envia a mensagem em formato HTML" - -#: composer/e-msg-composer.c:904 -msgid "_View" -msgstr "_Visualizar" - -#: composer/e-msg-composer.c:910 -msgid "Show _attachments" -msgstr "Exibir _anexos" - -#: composer/e-msg-composer.c:911 -msgid "Show/hide attachments" -msgstr "Exibe/esconde os anexos" - -#: composer/e-msg-composer.c:944 -msgid "Send" -msgstr "Enviar" - -#: composer/e-msg-composer.c:945 -msgid "Send this message" -msgstr "Envia esta mensagem" - -#: composer/e-msg-composer.c:954 -msgid "Attach" -msgstr "Anexar" - -#: composer/e-msg-composer.c:955 -msgid "Attach a file" -msgstr "Anexa um arquivo" - -#: composer/e-msg-composer.c:1142 -msgid "Compose a message" -msgstr "Redigir uma mensagem" - -#: filter/filter-editor.c:198 -msgid "Edit Filter" -msgstr "Editar filtro" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "Criar filtro" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "Voltar" - -#: filter/filter-editor.c:211 -msgid "Finish" -msgstr "Concluir" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "Cancelar" - -#: filter/filter-editor.c:216 -msgid "Apply" -msgstr "Aplicar" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" -"

Criar regra de filtragem

Selecione uma das regras base acima, " -"então continue para personalizá-la.

" - -#: mail/component-factory.c:196 -msgid "Cannot initialize Evolution's mail component." -msgstr "Não é possível iniciar o componente de correio do Evolution." - -#: mail/folder-browser-factory.c:29 -msgid "Get mail" -msgstr "Receber correspondência" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "Verificar nova correspondência" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "Redigir" - -#: mail/folder-browser-factory.c:30 -msgid "Compose a new message" -msgstr "Redige uma nova mensagem" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "Responder" - -#: mail/folder-browser-factory.c:34 -msgid "Reply to the sender of this message" -msgstr "Responder ao remetente desta mensagem" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "Responder a todos" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to all recipients of this message" -msgstr "Responder a todos os destinatários desta mensagem" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "Encaminhar" - -#: mail/folder-browser-factory.c:37 -msgid "Forward this message" -msgstr "Encaminhar esta mensagem" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Refile" -msgstr "Abrir arquivo" - -#: mail/folder-browser-factory.c:41 -msgid "Move message to a new folder" -msgstr "Move a mensagem para uma nova pasta" - -#: mail/folder-browser-factory.c:43 -msgid "Print the selected message" -msgstr "Imprimir a mensagem selecionada" - -#: mail/folder-browser-factory.c:45 -msgid "Delete this message" -msgstr "Excluir esta mensagem" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "_Lista encadeada de mensagens" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "_Excluir permanentemente" - -#: mail/folder-browser-factory.c:83 -msgid "_Filter Druid ..." -msgstr "Assistente de _filtros ..." - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "Assistente de pastas _virtuais ..." - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "_Configuração de correio ..." - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "Esquecer _senhas" - -#: mail/mail-config.c:262 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Entre o nome e endereço de e-mail que devem ser usados na correspondência " -"enviada. Você podem também, opcionalmente, o nome de sua empresa e o nome de " -"um arquivo que contém a sua assinatura." - -#: mail/mail-config.c:277 -msgid "Full name:" -msgstr "Nome completo:" - -#: mail/mail-config.c:305 -msgid "Email address:" -msgstr "Endereço de e-mail:" - -#: mail/mail-config.c:328 -msgid "Organization:" -msgstr "Empresa:" - -#: mail/mail-config.c:340 -msgid "Signature file:" -msgstr "Arquivo de assinatura:" - -#: mail/mail-config.c:345 -msgid "Signature File" -msgstr "Arquivo de assinatura" - -#: mail/mail-config.c:718 mail/mail-config.c:812 mail/mail-config.c:1621 -msgid "Server:" -msgstr "Servidor:" - -#: mail/mail-config.c:725 -msgid "Username:" -msgstr "Nome do usuário:" - -#: mail/mail-config.c:732 -msgid "Path:" -msgstr "Caminho:" - -#: mail/mail-config.c:739 mail/mail-config.c:819 -msgid "Authentication:" -msgstr "Autenticação:" - -#: mail/mail-config.c:751 mail/mail-config.c:831 -msgid "Detect supported types..." -msgstr "Detectar tipos suportados..." - -#: mail/mail-config.c:777 mail/mail-config.c:853 -msgid "Test these values before continuing" -msgstr "Testar estes valores antes de continuar" - -#: mail/mail-config.c:960 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Selecione o tipo de seu servidor de correio e entre os dados relevantes " -"sobre ele.\n" -"\n" -"Se o servidor exigir autenticação, você pode clicar o botão \"Detectar tipos " -"suportados...\" após entrar os outros dados." - -#: mail/mail-config.c:978 -msgid "Select the method you would like to use to deliver your mail." -msgstr "" -"Selecione a maneira como você gostaria de entregar sua correspondência." - -#: mail/mail-config.c:1163 mail/mail-config.c:1242 -#, fuzzy -msgid "Mail Configuration" -msgstr "_Configuração de correio ..." - -#. Identity page -#: mail/mail-config.c:1180 -#, fuzzy -msgid "Identity" -msgstr "Incluir identidade" - -#. Source page -#: mail/mail-config.c:1199 -#, fuzzy -msgid "Mail Source" -msgstr "Editar fonte" - -#. Transport page -#: mail/mail-config.c:1220 -msgid "Mail Transport" -msgstr "Transporte de correio" - -#: mail/mail-config.c:1343 -msgid "Edit Identity" -msgstr "Editar identidade" - -#: mail/mail-config.c:1345 -msgid "Add Identity" -msgstr "Incluir identidade" - -#: mail/mail-config.c:1488 -msgid "Edit Source" -msgstr "Editar fonte" - -#: mail/mail-config.c:1490 -msgid "Add Source" -msgstr "Incluir fonte" - -#. "\n\n" -#. "If the server requires authentication, you can click the " -#. "\"Detect supported types...\" button after entering " -#. "the other information." -#: mail/mail-config.c:1600 -msgid "Enter the hostname of the News Server you have." -msgstr "" - -#: mail/mail-config.c:1656 -msgid "Edit News Server" -msgstr "Editar servidor de news" - -#: mail/mail-config.c:1658 -msgid "Add News Server" -msgstr "Incluir servidor de news" - -#: mail/mail-ops.c:374 -msgid "Fetching mail" -msgstr "Coletando correio" - -#: mail/mail-ops.c:386 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Esta mensagem não possui um assunto.\n" -"Deseja enviar?" - -#: mail/mail-ops.c:743 -#, fuzzy -msgid "Refile message(s) to" -msgstr "Mover mensagem(ns) para" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "Operações pendentes no momento:" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "Mensagem incompleta escrita no pipe!" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "Erro ao ler comandos da thread de envio." - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "Mensagem corrompida da thread de envio?" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "Não foi possível criar caixa de diálogo." - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "O usuário cancelou a consulta." - -#: mail/main.c:62 -#, fuzzy -msgid "Mail Component: I could not initialize Bonobo" -msgstr "Não foi possível iniciar Bonobo" - -#: mail/message-list.c:460 -msgid "Online Status" -msgstr "Estado conectado" - -#: mail/message-list.c:488 -msgid "From" -msgstr "De" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "Assunto" - -#: mail/message-list.c:502 -msgid "Date" -msgstr "Data" - -#: mail/message-list.c:509 -msgid "Received" -msgstr "Recebida em" - -#: mail/message-list.c:516 -msgid "To" -msgstr "Para" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "Tamanho" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Instalação do Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Esta parece ser a primeira vez que você executa o Evolution." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "Por favor clique \"OK\" para instalar os arquivos do Evolution em" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Não é possível criar o diretório\n" -"%s\n" -"Erro: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Não é possível copiar arquivos em\n" -"`%s'." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Arquivos do Evolution instalados com sucesso." - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"O arquivo `%s' não é um diretório.\n" -"Por favor o remova para permitir a instalação\n" -"dos arquivos de usuário do Evolution." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Não é possível criar a pasta especificada:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "O nome especificado para a pasta é inválido." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Criar nova pasta" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"O tipo da pasta selecionada não é válido para\n" -"a operação desejada." - -#: shell/e-shell-folder-selection-dialog.c:236 -msgid "New..." -msgstr "Novo..." - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "(Sem nome)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug buddy não foi encontrado em seu $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "Bug buddy não pôde ser executado." - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution é um conjunto de aplicativos de 'groupware'\n" -"para correio, agenda e gerenciamento de contatos\n" -"dentro do ambiente GNOME." - -#: shell/e-shell-view-menu.c:301 -msgid "Go to folder..." -msgstr "Ir para a pasta..." - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "_Pasta" - -#: shell/e-shell-view-menu.c:369 -#, fuzzy -msgid "Evolution _Bar Shortcut" -msgstr "Atalho da _barra do Evolution" - -#: shell/e-shell-view-menu.c:375 -msgid "_Mail message (FIXME)" -msgstr "_Mensagem de correio (FIXME)" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -#, fuzzy -msgid "Composes a new mail message" -msgstr "Redige uma nova mensagem" - -#: shell/e-shell-view-menu.c:378 -msgid "_Appointment (FIXME)" -msgstr "_Compromisso (FIXME)" - -#: shell/e-shell-view-menu.c:381 -msgid "_Contact (FIXME)" -msgstr "C_ontato (FIXME)" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "_Tarefa (FIXME)" - -#: shell/e-shell-view-menu.c:387 -#, fuzzy -msgid "Task _Request (FIXME)" -msgstr "_Tarefa (FIXME)" - -#: shell/e-shell-view-menu.c:390 -#, fuzzy -msgid "_Journal Entry (FIXME)" -msgstr "C_ontato (FIXME)" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "_Novo" - -#: shell/e-shell-view-menu.c:402 -msgid "_Go to folder..." -msgstr "Ir para a _pasta..." - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "Exibe uma pasta diferente" - -#: shell/e-shell-view-menu.c:404 -msgid "_Create new folder..." -msgstr "_Criar nova pasta..." - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "Cria uma nova pasta" - -#: shell/e-shell-view-menu.c:419 -msgid "Show _shortcut bar" -msgstr "Exibir barra de _atalhos" - -#: shell/e-shell-view-menu.c:420 -msgid "Show the shortcut bar" -msgstr "Exibe a barra de atalhos" - -#: shell/e-shell-view-menu.c:422 -msgid "Show _folder bar" -msgstr "Exibir barra de _pastas" - -#: shell/e-shell-view-menu.c:423 -msgid "Show the folder bar" -msgstr "Exibe a barra de pastas" - -#: shell/e-shell-view-menu.c:440 -#, fuzzy -msgid "Help _Index" -msgstr "Índice da _ajuda" - -#: shell/e-shell-view-menu.c:443 -#, fuzzy -msgid "Getting _Started" -msgstr "_Primeiros passos" - -#: shell/e-shell-view-menu.c:446 -#, fuzzy -msgid "Using the _Mailer" -msgstr "Usando o _correio" - -#: shell/e-shell-view-menu.c:449 -#, fuzzy -msgid "Using the _Calendar" -msgstr "Usando a a_genda" - -#: shell/e-shell-view-menu.c:452 -#, fuzzy -msgid "Using the Cont_act Manager" -msgstr "Usando o gerenciador _de contatos" - -#: shell/e-shell-view-menu.c:457 -msgid "_Submit bug report" -msgstr "_Enviar relatório de erro" - -#: shell/e-shell-view-menu.c:458 -#, fuzzy -msgid "Submit bug-report via bug-buddy" -msgstr "Envia um relatório de erro via Bug Buddy" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "Açõe_s" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "(Nenhuma pasta exibida)" - -#: shell/e-shell-view.c:208 -msgid "Folders" -msgstr "Pastas" - -#: shell/e-shell-view.c:596 -msgid "None" -msgstr "Nenhum" - -#: shell/e-shell-view.c:600 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Não é possível definir repositório local -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "Ícones _pequenos" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Exibe os atalhos como ícones pequenos" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "Ícones _grandes" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Exibe os atalhos como ícones grandes" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Ativar" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Ativa este atalho" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Remove este atalho da barra de atalhos" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Erro ao salvar atalhos." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Sem nome)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Sem erro" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Erro genérico" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "Já existe uma pasta com o mesmo nome" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "O tipo de pasta especificado não é válido" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "Erro de I/O" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Não há espaço suficiente para criar a pasta" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "A pasta especificada não foi achada" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "Função não implementada neste repositório" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Permissão negada" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Operação não suportada" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "O tipo especificado não é suportado neste repositório" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Erro desconhecido" - -#: shell/main.c:99 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Thanks\n" -"The Evolution Team\n" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "Não é possível iniciar o Evolution." - -#: shell/main.c:214 -msgid "Cannot initialize the configuration system." -msgstr "Não é possível iniciar o sistema de configuração." - -#: shell/main.c:220 -msgid "Cannot initialize the Bonobo component system." -msgstr "Não é possível iniciar o sistema de componentes Bonobo." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Campos" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Agrupamento" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Ordem" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtro" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "Editor de campos" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"Para incluir uma coluna à sua tabela, arreste-a\n" -"para o local onde você deseja que ela apareça." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Campos disponíveis" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Exibir nesta ordem" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Incluir >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Remover" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Preliminar" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Ocupado" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Fora do escritório" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Sem informação" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "_Convidar outros..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Opções" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Exibir apenas _horas do expediente" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "Exibir com _menos ampliação" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "_Atualizar livre/ocupado" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Autoescolher" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Todas as pessoas e recursos" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Todas as _pessoas e um recurso" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "Pessoas _necessárias" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Pessoas necessárias e _um recurso" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Hora de _início da reunião:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Hora de _término da reunião:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Todos os participantes" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Grupo %i" - -#, fuzzy -msgid "FIXME: Intive _Attendees..." -msgstr "FIXME: Convidar _participantes..." - -#, fuzzy -msgid "Cut selected region into the clipboard" -msgstr "Recortar item selecionado para a área de tranferência" - -#, fuzzy -msgid "Copy selected region into the clipboard" -msgstr "Copiar item selecionado para a área de transferência" - -#, fuzzy -msgid "Paste selected region into the clipboard" -msgstr "Recortar item selecionado para a área de tranferência" - -msgid "Undo" -msgstr "Desfazer" - -msgid "Undo last operation" -msgstr "Desfazer a última operação" - -#, fuzzy -msgid "Cc" -msgstr "Cc:" - -#, fuzzy -msgid "Test Select Names" -msgstr "Testar configurações" - -#, fuzzy -msgid "_Close Calendar" -msgstr "Agenda Gnome" - -#, fuzzy -msgid "Close current calendar" -msgstr "Abrir agenda" - -msgid "Disabled" -msgstr "Desativado" - -msgid "Synchronize" -msgstr "Sincronizar" - -msgid "Copy From Pilot" -msgstr "Copiar do pilot" - -msgid "Copy To Pilot" -msgstr "Copiar para o pilot" - -msgid "Merge From Pilot" -msgstr "Mesclar do pilot" - -msgid "Merge To Pilot" -msgstr "Mesclar para o pilot" - -msgid "Eskil Heyn Olsen " -msgstr "Eskil Heyn Olsen " - -#, fuzzy -msgid "GnomeCalendar Conduit" -msgstr "Agenda Gnome" - -msgid "(C) 1998" -msgstr "(C) 1998" - -msgid "Configuration utility for the calendar conduit.\n" -msgstr "Utilitário de configuração para o canal de agenda.\n" - -msgid "gnome-calendar-conduit.png" -msgstr "gnome-calendar-conduit.png" - -msgid "Synchronize Action" -msgstr "Ação ao sincronizar" - -msgid "Conduit state" -msgstr "Estado do canal" - -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" -"Não existem pilots configurados, por favor escolha\n" -"'Pilot Link' na central de controle primeiro." - -#, fuzzy -msgid "Cannot initialze the GnomePilot Daemon" -msgstr "Não é possível iniciar o sistema de componentes Bonobo." - -msgid "Cannot connect to the GnomePilot Daemon" -msgstr "Não é possível conectar ao daemon Gnome Pilot" - -msgid "Error while communicating with calendar server" -msgstr "Erro ao comunicar com o servidor de agenda" - -msgid "Calendar holds %d entries" -msgstr "Agenda mantém %d registros" - -msgid "Could not start gnomecal server" -msgstr "Não foi possível iniciar servidor gnomecal" - -msgid "Could not read pilot's DateBook application block" -msgstr "Não foi possível ler dados da aplicação DateBook no pilot" - -msgid "Specifies the port on which the Pilot is" -msgstr "Especifica a porta onde o pilot está" - -msgid "PORT" -msgstr "PORTA" - -msgid "If you want to debug the attributes on records" -msgstr "Se você quer depurar os atributos dos registros" - -msgid "Only syncs from desktop to pilot" -msgstr "Apenas sincroniza do computador para o pilot" - -msgid "Only syncs from pilot to desktop" -msgstr "Apenas sincroniza do pilot para o computador" - -#, fuzzy -msgid "Can not create Pilot socket\n" -msgstr "Não foi possível criar caixa de diálogo." - -msgid "Can not bind to device %s\n" -msgstr "Não é possível ligar ao dispositivo %s\n" - -msgid "Failed to get a connection from the Pilot device" -msgstr "Falha ao criar uma conexão com o pilot" - -msgid "pi_accept failed" -msgstr "Falhou pi_accept" - -msgid "" -"\tObject has been modified on desktop and on the pilot, desktop takes " -"precedence\n" -msgstr "" -"\tObjeto foi alterado no computador e no pilot, computador tem a " -"precedência\n" - -#, fuzzy -msgid "No description" -msgstr "Descrição" - -msgid "Could not open DatebookDB on the Pilot" -msgstr "Não foi possível abrir DatebookDB no pilot" - -#, fuzzy -msgid "Unable to open DatebookDB" -msgstr "Não é possível abrir o catálogo de endereços" - -msgid "Synced DateBook from Pilot to GnomeCal" -msgstr "Sincronizado DateBook do pilot à Agenda Gnome" - -msgid "event-editor-dialog" -msgstr "event-editor-dialog" - -#, fuzzy -msgid "_Summary:" -msgstr "Resumo:" - -msgid "_Owner:" -msgstr "_Dono:" - -#, fuzzy -msgid "Time" -msgstr "Tempo restante" - -#, fuzzy -msgid "Start time:" -msgstr "Hora de _início da reunião:" - -msgid "End time:" -msgstr "Hora de término:" - -msgid "A_ll day event" -msgstr "Evento para o dia _todo" - -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"Minutos\n" -"Horas\n" -"Dias\n" - -#, fuzzy -msgid "_Display" -msgstr "Exibição da hora" - -#, fuzzy -msgid "_Audio" -msgstr "_Incluir" - -msgid "_Program" -msgstr "_Programa" - -#, fuzzy -msgid "_Mail" -msgstr "Cel_ular" - -msgid "Mail _to:" -msgstr "C_orreio para:" - -msgid "_Run program:" -msgstr "E_xecutar programa:" - -msgid "Classification" -msgstr "Classificação" - -msgid "Pu_blic" -msgstr "Pú_blico" - -#, fuzzy -msgid "Pri_vate" -msgstr "Ativar" - -msgid "_Confidential" -msgstr "Con_fidencial" - -#, fuzzy -msgid "Recurrence rule" -msgstr "Configura as regras de recorrência" - -#, fuzzy -msgid "Daily" -msgstr "Dia" - -#, fuzzy -msgid "Weekly" -msgstr "Semana" - -#, fuzzy -msgid "Monthly" -msgstr "Mês" - -#, fuzzy -msgid "Yearly" -msgstr "Ano" - -#, fuzzy -msgid "label23" -msgstr "label2" - -msgid "Every " -msgstr "A cada " - -#, fuzzy -msgid "day(s)" -msgstr "dia" - -#, fuzzy -msgid "label24" -msgstr "label2" - -#, fuzzy -msgid "week(s)" -msgstr "semana" - -#, fuzzy -msgid "label25" -msgstr "label2" - -msgid "Recur on the" -msgstr "Repetir no" - -msgid "th day of the month" -msgstr "º dia do mês" - -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1º\n" -"2º\n" -"3º\n" -"4º\n" -"5º\n" - -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"Segunda-feira\n" -"Terça-feira\n" -"Quarta-feira\n" -"Quinta-feira\n" -"Sexta-feira\n" -"Sábado\n" -"Domingo\n" - -msgid "Every" -msgstr "A cada" - -#, fuzzy -msgid "month(s)" -msgstr "mês" - -#, fuzzy -msgid "year(s)" -msgstr "ano" - -#, fuzzy -msgid "label27" -msgstr "label7" - -msgid "Ending date" -msgstr "Data de término" - -msgid "Repeat forever" -msgstr "Repetir para sempre" - -msgid "End on " -msgstr "Terminar em" - -#, fuzzy -msgid "End after" -msgstr "Editar filtro" - -#, fuzzy -msgid "occurrence(s)" -msgstr "Excluir todas as ocorrências" - -#, fuzzy -msgid "Exceptions" -msgstr "Opções" - -#, fuzzy -msgid "Change" -msgstr "Cancelar" - -#, fuzzy -msgid "Recurrence" -msgstr "FIXME: Recorrência..." - -msgid "Gpilotd todo conduit" -msgstr "Canal de tarefas para Gnome Pilot" - -msgid "(C) 1998 the Free Software Foundation" -msgstr "(C) 1998 the Free Software Foundation" - -msgid "Configuration utility for the todo conduit.\n" -msgstr "Utilitário de configuração para o canal de tarefas.\n" - -msgid "gnome-unknown.xpm" -msgstr "gnome-unknown.xpm" - -msgid "Enabled" -msgstr "Habilitado" - -#, fuzzy -msgid "Organization" -msgstr "Empresa:" - -#, fuzzy -msgid "Signature file" -msgstr "Arquivo de assinatura:" - -#, fuzzy -msgid "Camel Providers Configuration" -msgstr "_Configuração de correio ..." - -#, fuzzy -msgid "Identities" -msgstr "Incluir identidade" - -#, fuzzy -msgid "Mail sources" -msgstr "Fonte de papel:" - -#, fuzzy -msgid "Sources" -msgstr "Incluir fonte" - -msgid "Transports" -msgstr "Transportes" - -#, fuzzy -msgid "Evolution can not create its local folders" -msgstr "Evolution - Criar nova pasta" - -#, fuzzy -msgid "_Appointment" -msgstr "Compromissos:" - -#, fuzzy -msgid "Meeting Re_quest" -msgstr "FIXME: Pedido de _reunião" - -#, fuzzy -msgid "_Contact" -msgstr "_Novo contato" - -msgid "_Task" -msgstr "_Tarefa" - -#, fuzzy -msgid "Task _Request" -msgstr "FIXME: Pedido de t_arefa" - -#, fuzzy -msgid "_Journal Entry" -msgstr "FIXME: Item de _diário" - -#, fuzzy -msgid "_Note" -msgstr "_Notas:" - -msgid "_Selected Items" -msgstr "_Itens selecionados" - -msgid "Clos_e All Items" -msgstr "Fechar _todos os itens" - -msgid "Closes all the open items" -msgstr "Fecha todos os itens abertos" - -#, fuzzy -msgid "Cannot open location: %s" -msgstr "Não é possível definir repositório local -- %s" - -msgid "New group" -msgstr "Novo grupo" - -#, fuzzy -msgid "Browse..." -msgstr "_Fechar..." - -msgid "_Configure Camel Providers ..." -msgstr "_Configurar provedores Camel" - -msgid "We are sorry, Evolution's Folder Browser can not be initialized." -msgstr "Pedimos desculpas, o navegador de pastas não pode ser iniciado." - -#, fuzzy -msgid "Whether a message preview should be shown" -msgstr "Se a visualização de uma mensagem deve ser exibida" - -#, fuzzy -msgid "_New Folder" -msgstr "_Pasta" - -msgid "\tObject did not exist, creating a new one\n" -msgstr "\tObjeto não existe, criando um novo\n" - -msgid "Syncing with the pilot..." -msgstr "Sincronizando com o pilot..." - -msgid "IMAP server replied using unknown tokens.\n" -msgstr "Servidor IMAP respondeu usando mensagens desconhecidas.\n" - -msgid "IMAP responded with \"no such message\".\n" -msgstr "IMAP respondeu com \"mensagem desconhecida\".\n" - -msgid "Connecting to IMAP server (%s)..." -msgstr "Conectando ao servidor IMAP (%s)..." - -msgid "failed.\n" -msgstr "falhou.\n" - -msgid "success.\n" -msgstr "sucesso.\n" - -#, fuzzy -msgid "Select Names" -msgstr "Nome do estilo:" - -#, fuzzy -msgid "Find..." -msgstr "Localizar" - -msgid "T_ype name or select from List:" -msgstr "_Digite o nome ou selecione da lista:" - -#, fuzzy -msgid "Message Recipients" -msgstr "Lista de destinatários:" - -#, fuzzy -msgid "Cannot initialize Evolution's notes component." -msgstr "Não é possível iniciar o componente de correio do Evolution." - -#, fuzzy -msgid "Notes Component: Could not initialize bonobo" -msgstr "Não foi possível iniciar Bonobo" - -#~ msgid "Move" -#~ msgstr "Mover" - -#~ msgid "_Mark all messages seen" -#~ msgstr "_Marcar todas as messagens como lidas" - -#~ msgid "" -#~ "Select the kind of news server you have, and enter the relevant information " -#~ "about it.\n" -#~ "\n" -#~ "If the server requires authentication, you can click the \"Detect supported " -#~ "types...\" button after entering the other information." -#~ msgstr "" -#~ "Selecione o tipo de seu servidor de news e entre os dados relevantes sobre " -#~ "ele.\n" -#~ "\n" -#~ "Se o servidor exigir autenticação, você pode clicar o botão \"Detectar tipos " -#~ "suportados...\" após entrar os outros dados." - -#~ msgid "E_xit..." -#~ msgstr "_Sair..." - -#~ msgid "_Help" -#~ msgstr "A_juda" - -#~ msgid "_About Evolution..." -#~ msgstr "_Sobre o Evolution..." - -#~ msgid "Show information about Evolution" -#~ msgstr "Exibe informações sobre o Evolution" diff --git a/po/ru.po b/po/ru.po deleted file mode 100644 index e107572737..0000000000 --- a/po/ru.po +++ /dev/null @@ -1,4822 +0,0 @@ -# Copyright (C) 2000 Free Software Foundation, Inc. -# Valek Filippov , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: E-volution\n" -"POT-Creation-Date: 2000-08-19 11:01+0000\n" -"PO-Revision-Date: 2000-08-19 11:16+00:00\n" -"Last-Translator: Valek Filippov \n" -"Language-Team: Russian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=koi8-r\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/backend/ebook/test-client-list.c:29 -#: addressbook/backend/ebook/test-client.c:54 -#: addressbook/conduit/address-conduit.c:1201 -#: addressbook/demo/addressbook-factory.c:32 -#: addressbook/gui/component/addressbook-factory.c:59 -#: addressbook/gui/minicard/test-minicard-view.c:45 -#: calendar/conduits/calendar/calendar-conduit.c:1669 -#: calendar/conduits/todo/todo-conduit.c:1298 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "îÅ ÕÄÁÌÏÓØ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ Bonobo" - -#. This array must be in the same order as enumerations -#. in GnomePilotConduitSyncType as they are used as index. -#. Custom type implies Disabled state. -#. -#: addressbook/conduit/address-conduit-control-applet.c:54 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:55 -#: calendar/conduits/todo/todo-conduit-control-applet.c:55 -msgid "Disabled" -msgstr "ïÔËÌÀÞÅÎÏ" - -#: addressbook/conduit/address-conduit-control-applet.c:55 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:56 -#: calendar/conduits/todo/todo-conduit-control-applet.c:56 -msgid "Synchronize" -msgstr "óÉÎÈÒÏÎÉÚÏ×ÁÔØ" - -#: addressbook/conduit/address-conduit-control-applet.c:56 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:57 -#: calendar/conduits/todo/todo-conduit-control-applet.c:57 -msgid "Copy From Pilot" -msgstr "óËÏÐÉÒÏ×ÁÔØ ÉÚ ðÉÌÏÔÁ" - -#: addressbook/conduit/address-conduit-control-applet.c:57 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:58 -#: calendar/conduits/todo/todo-conduit-control-applet.c:58 -msgid "Copy To Pilot" -msgstr "óËÏÐÉÒÏ×ÁÔØ × ðÉÌÏÔ" - -#: addressbook/conduit/address-conduit-control-applet.c:58 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:59 -#: calendar/conduits/todo/todo-conduit-control-applet.c:59 -msgid "Merge From Pilot" -msgstr "ïÂßÅÄÉÎÉÔØ ÉÚ ðÉÌÏÔÁ" - -#: addressbook/conduit/address-conduit-control-applet.c:59 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:60 -#: calendar/conduits/todo/todo-conduit-control-applet.c:60 -msgid "Merge To Pilot" -msgstr "ïÂßÅÄÉÎÉÔØ × ðÉÌÏÔÅ" - -#: addressbook/conduit/address-conduit-control-applet.c:143 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:144 -#: calendar/conduits/todo/todo-conduit-control-applet.c:144 -msgid "Eskil Heyn Olsen " -msgstr "Eskil Heyn Olsen " - -#: addressbook/conduit/address-conduit-control-applet.c:145 -msgid "Gpilotd address conduit" -msgstr "ëÏÎÄÕÉÔ ÁÄÒÅÓÏ× Gpilotd" - -#: addressbook/conduit/address-conduit-control-applet.c:146 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:147 -#: calendar/conduits/todo/todo-conduit-control-applet.c:147 -msgid "(C) 1998 the Free Software Foundation" -msgstr "(C) 1998 the Free Software Foundation" - -#: addressbook/conduit/address-conduit-control-applet.c:148 -msgid "Configuration utility for the address conduit.\n" -msgstr "óÒÅÄÓÔ×Ï ÎÁÓÔÒÏÊËÉ ÄÌÑ ËÏÎÄÕÉÔÁ ÁÄÒÅÓÏ×.\n" - -#: addressbook/conduit/address-conduit-control-applet.c:149 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:150 -#: calendar/conduits/todo/todo-conduit-control-applet.c:150 -msgid "gnome-unknown.xpm" -msgstr "gnome-unknown.xpm" - -#: addressbook/conduit/address-conduit-control-applet.c:190 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:191 -#: calendar/conduits/todo/todo-conduit-control-applet.c:191 -msgid "Synchronize Action" -msgstr "óÉÎÈÒÏÎÉÚÏ×ÁÔØ ÄÅÊÓÔ×ÉÑ" - -#: addressbook/conduit/address-conduit-control-applet.c:261 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:262 -#: calendar/conduits/todo/todo-conduit-control-applet.c:262 -msgid "Conduit state" -msgstr "óÏÓÔÏÑÎÉÅ ËÏÎÄÕÉÔÁ" - -#: addressbook/conduit/address-conduit-control-applet.c:315 -#: addressbook/conduit/address-conduit-control-applet.c:328 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:316 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:329 -#: calendar/conduits/todo/todo-conduit-control-applet.c:316 -#: calendar/conduits/todo/todo-conduit-control-applet.c:329 -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" -"ðÉÌÏÔ ÎÅ ÎÁÓÔÒÏÅÎ, ÐÏÖÁÌÕÊÓÔÁ ×ÙÂÅÒÉÔÅ\n" -"ÓÎÁÞÁÌÁ capplet \"ó×ÏÊÓÔ×Á Ó×ÑÚÉ Ó ðÉÌÏÔÏÍ\"." - -#: addressbook/conduit/address-conduit-control-applet.c:334 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:335 -#: calendar/conduits/todo/todo-conduit-control-applet.c:335 -msgid "Not connected to the gnome-pilot daemon" -msgstr "îÅ ÐÏÄËÌÀÞÅÎ Ë ÄÅÍÏÎÕ gnome-pilot" - -#: addressbook/conduit/address-conduit-control-applet.c:339 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:340 -#: calendar/conduits/todo/todo-conduit-control-applet.c:340 -msgid "" -"An error occured when trying to fetch\n" -"pilot list from the gnome-pilot daemon" -msgstr "" -"ðÒÉ ÐÏÐÙÔËÅ ÐÏÌÕÞÉÔØ ÓÐÉÓÏË ðÉÌÏÔÏ×\n" -"ÏÔ ÄÅÍÏÎÁ gnome-pilot ×ÏÚÎÉËÌÁ ÏÛÉÂËÁ" - -#: addressbook/conduit/address-conduit.c:128 -#: addressbook/conduit/address-conduit.c:142 -msgid "BLARG\n" -msgstr "BLARG\n" - -#: addressbook/conduit/address-conduit.c:459 -#, c-format -msgid "Address holds %ld address entries" -msgstr "áÄÒÅÓ ÈÒÁÎÉÔ %ld ÚÁÐÉÓÅÊ ÁÄÒÅÓÏ×" - -#: addressbook/conduit/address-conduit.c:485 -#: addressbook/conduit/address-conduit.c:487 -msgid "Could not start addressbook server" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÕÓÔÉÔØ ÓÅÒ×ÅÒ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ" - -#: addressbook/conduit/address-conduit.c:500 -#: addressbook/conduit/address-conduit.c:503 -msgid "Could not read pilot's Address application block" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ ÂÌÏË ÐÒÉÌÏÖÅÎÉÑ ÁÄÒÅÓÏ× ðÉÌÏÔÁ" - -#: addressbook/conduit/address-conduit.c:841 -msgid "Error while communicating with address server" -msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÄËÌÀÞÅÎÉÉ Ë ÓÅÒ×ÅÒÕ ÁÄÒÅÓÏ×" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "ËÁÔÅÇÏÒÉÉ" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "üÌÅÍÅÎÔÙ ÐÒÉÎÁÄÌÅÖÁÝÉÅ ÜÔÉÍ ËÁÔÅÇÏÒÉÑÍ:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "äÏÓÔÕÐÎÙÅ ËÁÔÅÇÏÒÉÉ:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1179 -msgid "FIXME: _Appointment" -msgstr "FIXME: ÷ÓÔÒÅÞÁ" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1180 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: úÁÐÒÏÓ ×ÓÔÒÅÞÉ" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1182 -msgid "FIXME: _Mail Message" -msgstr "FIXME: ðÏÞÔÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Contact" -msgstr "FIXME: ëÏÎÔÁËÔ" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1184 -msgid "FIXME: _Task" -msgstr "FIXME: úÁÄÁÎÉÅ" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1185 -msgid "FIXME: Task _Request" -msgstr "FIXME: úÁÐÒÏÓ ÚÁÄÁÎÉÑ" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1186 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: öÕÒÎÁÌØÎÁÑ ÚÁÐÉÓØ" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1187 -msgid "FIXME: _Note" -msgstr "FIXME: úÁÍÅÔËÁ" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1189 -#: calendar/gui/event-editor.c:1296 -msgid "FIXME: Ch_oose Form..." -msgstr "FIXME: ÷ÙÂÒÁÔØ ÉÚ..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1194 -msgid "FIXME: _Memo Style" -msgstr "FIXME: óÔÉÌØ ÐÁÍÑÔËÉ" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1196 -msgid "FIXME: Define Print _Styles..." -msgstr "FIXME: ïÐÒÅÄÅÌÉÔØ ÓÔÉÌÉ ÐÅÞÁÔÉ..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1203 -msgid "FIXME: S_end" -msgstr "FIXME: ïÔÐÒÁ×ÉÔØ" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1207 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: óÏÈÒÁÎÉÔØ ×ÌÏÖÅÎÉÑ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "õÄÁÌÉÔØ" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1210 -msgid "FIXME: _Move to Folder..." -msgstr "FIXME: ðÅÒÅÍÅÓÔÉÔØ × ÐÁÐËÕ..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1211 -msgid "FIXME: Cop_y to Folder..." -msgstr "FIXME: óËÏÐÉÒÏ×ÁÔØ × ÐÁÐËÕ..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1213 -msgid "Page Set_up" -msgstr "îÁÓÔÒÏÊËÁ ÓÔÒÁÎÉÃÙ:" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1214 -msgid "FIXME: Print Pre_view" -msgstr "FIXME: ðÒÏÓÍÏÔÒ ÐÅÞÁÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1235 -msgid "FIXME: Paste _Special..." -msgstr "FIXME: óÐÅÃÉÁÌØÎÁÑ ×ÓÔÁ×ËÁ..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1240 -msgid "FIXME: Mark as U_nread" -msgstr "FIXME: ðÏÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÔÅÎÎÏÅ" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1244 -msgid "_Object" -msgstr "ïÂßÅËÔ" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1249 -#: calendar/gui/event-editor.c:1256 -msgid "FIXME: _Item" -msgstr "FIXME: üÌÅÍÅÎÔ" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1250 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Unread Item" -msgstr "FIXME: îÅÐÒÏÞÔÅÎÎÙÊ ÜÌÅÍÅÎÔ" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1251 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "FIXME: ðÅÒ×ÙÊ ÜÌÅÍÅÎÔ × ÐÁÐËÅ" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1258 -msgid "FIXME: _Last Item in Folder" -msgstr "FIXME: ðÏÓÌÅÄÎÉÊ ÜÌÅÍÅÎÔ × ÐÁÐËÅ" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1263 -msgid "FIXME: _Standard" -msgstr "FIXME: óÔÁÎÄÁÒÔ" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1265 -msgid "FIXME: __Formatting" -msgstr "FIXME: æÏÒÍÁÔÉÒÏ×ÁÎÉÅ" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1268 -msgid "FIXME: _Customize..." -msgstr "FIXME: îÁÓÔÒÏÊËÁ..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1273 -msgid "Pre_vious" -msgstr "ðÒÅÄ." - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1274 -msgid "Ne_xt" -msgstr "óÌÅÄ." - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1278 -msgid "_Toolbars" -msgstr "ðÁÎÅÌÉ ÉÎÓÔÒÕÍÅÎÔÏ×" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1283 -msgid "FIXME: _File..." -msgstr "FIXME: æÁÊÌ..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1284 -msgid "FIXME: It_em..." -msgstr "FIXME: üÌÅÍÅÎÔ..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1285 -msgid "FIXME: _Object..." -msgstr "FIXME: ïÂßÅËÔ..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1290 -msgid "FIXME: _Font..." -msgstr "FIXME: ûÒÉÆÔ..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1291 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: ðÁÒÁÇÒÁÆ..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1298 -msgid "FIXME: Desi_gn This Form" -msgstr "FIXME: ëÏÎÓÔÒÕËÃÉÑ ÜÔÏÊ ÆÏÒÍÙ" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1299 -msgid "FIXME: D_esign a Form..." -msgstr "FIXME: óÏÚÄÁÔØ ÆÏÒÍÕ..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1301 -msgid "FIXME: Publish _Form..." -msgstr "FIXME: ïÐÕÂÌÉËÏ×ÁÔØ ÆÏÒÍÕ..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1302 -msgid "FIXME: Pu_blish Form As..." -msgstr "FIXME: ïÐÕÂÌÉËÏ×ÁÔØ ÆÏÒÍÕ ËÁË..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1304 -msgid "FIXME: Script _Debugger" -msgstr "FIXME: ïÔÌÁÄÞÉË ÓËÒÉÐÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1309 -msgid "FIXME: _Spelling..." -msgstr "FIXME: ðÒÏ×ÅÒËÁ ÐÒÁ×ÏÐÉÓÁÎÉÑ..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1314 -msgid "_Forms" -msgstr "æÏÒÍÙ" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: îÏ×ÙÊ ËÏÎÔÁËÔ" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "FIXME: îÏ×ÙÊ ËÏÎÔÁËÔ × ÔÏÊ ÖÅ ËÏÍÐÁÎÉÉ" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "FIXME: îÏ×ÏÅ ÐÉÓØÍÏ ÄÌÑ ËÏÎÔÁËÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "FIXME: îÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ ÄÌÑ ËÏÎÔÁËÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "FIXME: îÏ×ÁÑ ×ÓÔÒÅÞÁ Ó ËÏÎÔÁËÔÏÍ" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "FIXME: ðÌÁÎ ×ÓÔÒÅÞÉ..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "FIXME: îÏ×ÁÑ ÚÁÄÁÞÁ ÄÌÑ ËÏÎÔÁËÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "FIXME: îÏ×ÁÑ ÖÕÒÎÁÌØÎÁÑ ÚÁÐÉÓØ ÄÌÑ ËÏÎÔÁËÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "FIXME: ïÔÏÂÒÁÚÉÔØ ËÁÒÔÕ ÁÄÒÅÓÏ×" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "FIXME: ïÔËÒÙÔØ Web-ÓÔÒÁÎÉÃÕ" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "FIXME: ðÅÒÅÓÌÁÔØ ËÁË vCard" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1327 -msgid "FIXME: For_ward" -msgstr "FIXME: ðÅÒÅÓÌÁÔØ" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1340 -msgid "_Insert" -msgstr "÷ÓÔÁ×ÉÔØ" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1341 -msgid "F_ormat" -msgstr "æÏÒÍÁÔ" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1342 -msgid "_Tools" -msgstr "éÎÓÔÒÕÍÅÎÔÙ" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1343 -msgid "Actio_ns" -msgstr "äÅÊÓÔ×ÉÑ" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "óÏÈÒÁÎÉÔØ É ÚÁËÒÙÔØ" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1382 -msgid "Save the appointment and close the dialog box" -msgstr "óÏÈÒÁÎÉÔØ ×ÓÔÒÅÞÕ É ÚÁËÒÙÔØ ÏËÎÏ ÄÉÁÌÏÇÁ" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:654 -msgid "Print..." -msgstr "ðÅÞÁÔØ..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1387 -msgid "Print this item" -msgstr "ðÅÞÁÔØ ÜÔÏÇÏ ÜÌÅÍÅÎÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1388 -msgid "FIXME: Insert File..." -msgstr "FIXME: ÷ÓÔÁ×ÉÔØ ÆÁÊÌ..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1389 -msgid "Insert a file as an attachment" -msgstr "÷ÓÔÁ×ÉÔØ ÆÁÊÌ ËÁË ×ÌÏÖÅÎÉÅ" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:424 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:548 -#: mail/folder-browser-factory.c:50 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -#: mail/mail-view.c:147 -msgid "Delete" -msgstr "õÄÁÌÉÔØ" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1398 -#: calendar/gui/gncal-todo.c:376 -msgid "Delete this item" -msgstr "õÄÁÌÉÔØ ÜÔÏÔ ÜÌÅÍÅÎÔ" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1400 -msgid "FIXME: Previous" -msgstr "FIXME: ðÒÅÄ." - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1401 -msgid "Go to the previous item" -msgstr "ðÅÒÅÊÔÉ Ë ÐÒÅÄÙÄÕÝÅÍÕ ÜÌÅÍÅÎÔÕ" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1402 -msgid "FIXME: Next" -msgstr "FIXME: óÌÅÄ." - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1403 -msgid "Go to the next item" -msgstr "ðÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÍÕ ÜÌÅÍÅÎÔÕ" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1404 -msgid "FIXME: Help" -msgstr "FIXME: óÐÒÁ×ËÁ" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1405 -msgid "See online help" -msgstr "ðÒÏÓÍÏÔÒ ÓÐÒÁ×ËÉ × ÓÅÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "ðÏÍÏÝÎÉË" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "òÁÂÏÞÉÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "òÁÂÏÞÉÊ 2" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "òÁÂÏÞÉÊ ÆÁËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "íÁÛÉÎÁ" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "ëÏÍÐÁÎÉÑ" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "äÏÍÁÛÎÉÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "äÏÍÁÛÎÉÊ 2" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "äÏÍÁÛÎÉÊ æÁËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "íÏÂÉÌØÎÙÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:28 -msgid "Other" -msgstr "äÒÕÇÏÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "äÒÕÇÏÊ ÆÁËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "ðÜÊÄÖÅÒ" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "ðÅÒ×ÙÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "òÁÄÉÏ" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "ôÅÌÅËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "ðÅÒ×ÙÊ ÜÌ.ÁÄÒÅÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "üÌ.ÁÄÒÅÓ 2" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "üÌ.ÁÄÒÅÓ 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ\n" -"ÕÄÁÌÉÔØ ÜÔÏÔ ËÏÎÔÁËÔ?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "õÄÁÌÉÔØ ËÏÎÔÁËÔ?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "äÏÂÁ×ÉÔØ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "ôÉÐ ÔÅÌÅÆÏÎÁ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "îÏ×ÙÊ ÔÉÐ ÔÅÌÅÆÏÎÁ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "äÏÂÁ×ÉÔØ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "òÅÄÁËÔÏÒ ËÏÎÔÁËÔÏ×" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "ðÏÌÎÏÅ ÉÍÑ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "æÁÊÌ ËÁË:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "áÄÒÅÓ web-ÓÔÒÁÎÉÃÙ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "èÏÞÅÔ ÐÏÌÕÞÁÔØ ÐÏÞÔÕ × HTML" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "áÄÒÅÓ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "òÁÂÏÞÉÊ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "äÏÍÁÛÎÉÊ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "òÁÂÏÞÉÊ ÆÁËÓ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "íÏÂÉÌØÎÙÊ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "òÁÂÏÞÉÊ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "üÔÏ ÐÏÞÔÏ×ÙÊ ÁÄÒÅÓ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "ëÏÎÔÁËÔÙ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "ëÁÔÅÇÏÒÉÉ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "äÏÌÖÎÏÓÔØ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "ëÏÍÐÁÎÉÑ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "ïÂÝÅÅ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "ïÔÄÅÌ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "ïÆÉÓ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "ðÒÏÆÅÓÓÉÑ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "ðÓÅ×ÄÏÎÉÍ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "óÕÐÒÕÇ(Á):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "äÅÎØ ÒÏÖÄÅÎÉÑ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "éÍÑ ÐÏÍÏÝÎÉËÁ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "éÍÑ ÍÅÎÅÄÖÅÒÁ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "çÏÄÏ×ÝÉÎÁ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "úÁÍÅÔËÉ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "äÅÔÁÌÉ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "ðÒÏ×ÅÒÉÔØ ÐÏÌÎÏÅ ÉÍÑ" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "úÁÇÏÌÏ×ÏË:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "éÍÑ:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "ïÔÞÅÓÔ×Ï:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "æÁÍÉÌÉÑ:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "óÕÆÆÉËÓ:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Ç.\n" -"Ç-ÖÁ.\n" -"Ä-Ò.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"ÍÌ.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:418 -#: calendar/gui/calendar-commands.c:511 notes/component-factory.c:27 -msgid "New" -msgstr "îÏ×ÙÊ" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:418 -msgid "Create a new contact" -msgstr "óÏÚÄÁÔØ ÎÏ×ÙÊ ËÏÎÔÁËÔ" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find" -msgstr "îÁÊÔÉ" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find a contact" -msgstr "îÁÊÔÉ ËÏÎÔÁËÔ" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:423 -#: calendar/gui/calendar-commands.c:516 mail/folder-browser-factory.c:48 -#: mail/mail-view.c:145 -msgid "Print" -msgstr "ðÅÞÁÔØ" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:423 -msgid "Print contacts" -msgstr "îÁÐÅÞÁÔÁÔØ ËÏÎÔÁËÔ" - -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:424 -msgid "Delete a contact" -msgstr "õÄÁÌÉÔØ ËÏÎÔÁËÔ" - -#: addressbook/demo/addressbook.c:103 -#: addressbook/gui/component/addressbook.c:509 -msgid "_New Contact" -msgstr "îÏ×ÙÊ ËÏÎÔÁËÔ" - -#: addressbook/gui/component/addressbook.c:492 -msgid "_Print Contacts..." -msgstr "îÁÐÅÞÁÔÁÔØ ËÏÎÔÁËÔÙ..." - -#: addressbook/gui/component/addressbook.c:502 -#: addressbook/gui/component/addressbook.c:972 -msgid "As _Table" -msgstr "ëÁË ÔÁÂÌÉÃÁ" - -#: addressbook/gui/component/addressbook.c:517 -msgid "N_ew Directory Server" -msgstr "îÏ×ÙÊ ÓÅÒ×ÅÒ ËÁÔÁÌÏÇÏ×" - -#: addressbook/gui/component/addressbook.c:600 -msgid "Unable to open addressbook" -msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÁÄÒÅÓÎÕÀ ËÎÉÇÕ" - -#: addressbook/gui/component/addressbook.c:605 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÜÔÕ ÁÄÒÅÓÎÕÀ ËÎÉÇÕ. üÔÏ ÚÎÁÞÉÔ,\n" -"ÞÔÏ ÌÉÂÏ ×Ù ××ÅÌÉ ÎÅËÏÒÒÅËÔÎÙÊ URI, ÌÉÂÏ ÐÙÔÁÌÉÓØ\n" -"ÏÂÒÁÔÉÔØÓÑ Ë LDAP ÓÅÒ×ÅÒÕ É ÎÅ ÉÍÅÅÔÅ ×ÓÔÒÏÅÎÎÏÊ\n" -"ÐÏÄÄÅÒÖËÉ LDAP. åÓÌÉ ×Ù ××ÏÄÉÌÉ URI, ÐÒÏ×ÅÒØÔÅ ÅÇÏ\n" -"ÐÒÁ×ÉÌØÎÏÓÔØ É ÐÅÒÅ××ÅÄÉÔÅ. åÓÌÉ ÎÅÔ, ×Ù ×ÏÚÍÏÖÎÏ\n" -"ÐÙÔÁÌÉÓØ ÏÂÒÁÔÉÔØÓÑ Ë LDAP ÓÅÒ×ÅÒÕ. åÓÌÉ ×Ù ÈÏÔÉÔÅ\n" -"ÉÓÐÏÌØÚÏ×ÁÔØ LDAP, ×ÁÍ ÎÁÄÏ ÓËÁÞÁÔØ É ÕÓÔÁÎÏ×ÉÔØ \n" -"OpenLDAP É ÐÅÒÅËÏÍÐÉÌÉÒÏ×ÁÔØ É ÕÓÔÁÎÏ×ÉÔØ evolution.\n" - -#: addressbook/gui/component/addressbook.c:876 -#: addressbook/gui/minicard/e-minicard.c:332 -msgid "Save as VCard" -msgstr "óÏÈÒÁÎÉÔØ ËÁË VCard" - -#: addressbook/gui/component/addressbook.c:943 -msgid "* Click here to add a contact *" -msgstr "* ýÅÌËÎÉÔÅ ÚÄÅÓØ ÞÔÏÂÙ ÄÏÂÁ×ÉÔØ ËÏÎÔÁËÔ *" - -#: addressbook/gui/component/addressbook.c:979 -msgid "As _Minicards" -msgstr "ëÁË ÍÉÎÉËÁÒÔÏÞËÉ" - -#: addressbook/gui/component/addressbook.c:1030 -msgid "The URI that the Folder Browser will display" -msgstr "URI, ËÏÔÏÒÙÊ ÂÕÄÅÔ ÐÏËÁÚÙ×ÁÔØ ÐÒÏÇÒÁÍÍÁ ÐÒÏÓÍÏÔÒÁ ÐÁÐÏË" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "ÏËÎÏ2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "Ë" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:88 -msgid "External Directories" -msgstr "÷ÎÅÛÎÉÅ ËÁÔÁÌÏÇÉ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "ïÐÉÓÁÎÉÅ:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "óÅÒ×ÅÒ LDAP:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "îÏÍÅÒ ÐÏÒÔÁ:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "éÍÑ:" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/select-names/select-names.glade.h:7 -msgid "Select Names" -msgstr "÷ÙÂÒÁÔØ ÉÍÅÎÁ" - -#: addressbook/gui/component/select-names/select-names.glade.h:8 -msgid "Find..." -msgstr "îÁÊÔÉ..." - -#: addressbook/gui/component/select-names/select-names.glade.h:9 -msgid "Select name from List:" -msgstr "÷ÙÂÒÁÔØ ÉÍÅÎÁ ÉÚ ÓÐÉÓËÁ:" - -#: addressbook/gui/component/select-names/select-names.glade.h:10 -msgid "Message Recipients" -msgstr "ðÏÌÕÞÁÔÅÌÉ ÓÏÏÂÝÅÎÉÑ" - -#: addressbook/gui/minicard/e-minicard-control.c:276 -msgid "Save in addressbook" -msgstr "óÏÈÒÁÎÉÔØ × ÁÄÒÅÓÎÏÊ ËÎÉÇÅ" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"îÅÔ ÜÌÅÍÅÎÔÏ× ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÑ × ÜÔÏÍ ÏËÎÅ\n" -"\n" -"ä×ÁÖÄÙ ÝÅÌËÎÉÔÅ ÚÄÅÓØ ÄÌÑ ÓÏÚÄÁÎÉÑ ÎÏ×ÏÇÏ ËÏÎÔÁËÔÁ." - -#: addressbook/gui/minicard/test-minicard-view.c:100 -msgid "Reflow Test" -msgstr "ðÅÒÅÚÁÐÕÓÔÉÔØ ÔÅÓÔ" - -#: addressbook/gui/minicard/test-minicard-view.c:101 -msgid "Copyright (C) 2000, Helix Code, Inc." -msgstr "Copyright (C) 2000 Helix Code, Inc." - -#: addressbook/gui/minicard/test-minicard-view.c:103 -msgid "This should test the reflow canvas item" -msgstr "" - -#. gtk_signal_connect(fb->search_entry, "changed", search_activate, fb); -#: addressbook/gui/search/e-addressbook-search-dialog.c:127 -#: mail/folder-browser.c:368 -msgid "Search" -msgstr "ðÏÉÓË" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "îÁÓÔÒÏÊËÁ ÓÔÒÁÎÉÃÙ:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "îÁÚ×ÁÎÉÅ ÓÔÉÌÑ:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "ðÒÏÓÍÏÔÒ:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "ðÁÒÁÍÅÔÒÙ" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "÷ËÌÀÞÉÔØ:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "òÁÚÄÅÌÙ:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "ïÄÉÎ ÚÁ ÄÒÕÇÉÍ" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "úÁËÌÁÄËÉ ÂÕË× ÓÂÏËÕ" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "úÁÇÏÌÏ×ËÉ ÄÌÑ ËÁÖÄÏÊ ÂÕË×Ù" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "îÁÞÉÎÁÔØ Ó ÎÏ×ÏÊ ÓÔÒÁÎÉÃÙ" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "þÉÓÌÏ ÓÔÏÌÂÃÏ×:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "ðÕÓÔÁÑ ÆÏÒÍÁ × ËÏÎÃÅ:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "ûÒÉÆÔÙ..." - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "ûÒÉÆÔ..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "úÁÇÏÌÏ×ËÉ" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "ôÅÌÏ" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "ðÏÌÕÔÏÎÁ" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "ðÅÞÁÔØ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÏÌÕÔÏÎÏ×" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "æÏÒÍÁÔ" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "âÕÍÁÇÁ" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "ôÉÐ:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "ÍÅÔËÁ26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "òÁÚÍÅÒÙ:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "ûÉÒÉÎÁ:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "÷ÙÓÏÔÁ:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "éÓÔÏÞÎÉË ÂÕÍÁÇÉ:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "ðÏÌÑ" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "ó×ÅÒÈÕ:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "óÎÉÚÕ:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "óÌÅ×Á:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "óÐÒÁ×Á:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "óÔÒÁÎÉÃÁ" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "òÁÚÍÅÒ:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "ïÒÉÅÎÔÁÃÉÑ" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "ðÏÒÔÒÅÔ" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "âÌÏËÎÏÔ" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "úÁÇÏÌÏ×ÏË" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "óÎÏÓËÁ:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "ïÂÒÁÝÁÔØ ÎÁ ÞÅÔÎÙÈ ÓÔÒÁÎÉÃÁÈ" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "úÁÇÏÌÏ×ÏË/óÎÏÓËÁ" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:596 -msgid "am" -msgstr "Ä.Ð." - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:595 -msgid "pm" -msgstr "Ð.Ð." - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:146 -msgid "Gpilotd calendar conduit" -msgstr "ëÏÎÄÕÉÔ ËÁÌÅÎÄÁÒÑ Gpilotd" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:149 -msgid "Configuration utility for the calendar conduit.\n" -msgstr "óÒÅÄÓÔ×Ï ÎÁÓÔÒÏÊËÉ ÄÌÑ ËÏÎÄÕÉÔÁ ËÁÌÅÎÄÁÒÑ.\n" - -#: calendar/conduits/calendar/calendar-conduit.c:399 -#: calendar/conduits/calendar/calendar-conduit.c:1109 -#: calendar/conduits/todo/todo-conduit.c:443 -#: calendar/conduits/todo/todo-conduit.c:1025 -msgid "Error while communicating with calendar server" -msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÄËÌÀÞÅÎÉÉ Ë ÓÅÒ×ÅÒÕ ËÁÌÅÎÄÁÒÑ" - -#: calendar/conduits/calendar/calendar-conduit.c:776 -#: calendar/conduits/calendar/calendar-conduit.c:778 -#: calendar/conduits/todo/todo-conduit.c:707 -#: calendar/conduits/todo/todo-conduit.c:709 -msgid "Could not start gnomecal server" -msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ÓÅÒ×ÅÒ gnomecal" - -#: calendar/conduits/calendar/calendar-conduit.c:806 -#: calendar/conduits/calendar/calendar-conduit.c:809 -msgid "Could not read pilot's DateBook application block" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ ÂÌÏË ÐÒÉÌÏÖÅÎÉÑ ËÎÉÇÉ ÄÁÎÎÙÈ ðÉÌÏÔÁ" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:146 -msgid "Gpilotd todo conduit" -msgstr "ëÏÎÄÕÉÔ ÚÁÄÁÎÉÊ Gpilotd" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:149 -msgid "Configuration utility for the todo conduit.\n" -msgstr "óÒÅÄÓÔ×Ï ÎÁÓÔÒÏÊËÉ ÄÌÑ ËÏÎÄÕÉÔÁ ÚÁÄÁÎÉÊ.\n" - -#: calendar/conduits/todo/todo-conduit.c:737 -#: calendar/conduits/todo/todo-conduit.c:740 -msgid "Could not read pilot's ToDo application block" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÅÓÔØ ÂÌÏË ÐÒÉÌÏÖÅÎÉÑ ÚÁÄÁÎÉÊ ðÉÌÏÔÁ" - -#: calendar/gui/calendar-commands.c:59 -msgid "Outline:" -msgstr "ëÏÎÔÕÒ:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Headings:" -msgstr "úÁÇÏÌÏ×ËÉ:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Empty days:" -msgstr "ðÕÓÔÙÅ ÄÎÉ:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Appointments:" -msgstr "÷ÓÔÒÅÞÉ:" - -#: calendar/gui/calendar-commands.c:63 -msgid "Highlighted day:" -msgstr "ðÏÄÓ×ÅÞÅÎÎÙÅ ÄÎÉ:" - -#: calendar/gui/calendar-commands.c:64 -msgid "Day numbers:" -msgstr "þÉÓÌÁ ÄÎÅÊ:" - -#: calendar/gui/calendar-commands.c:65 -msgid "Current day's number:" -msgstr "þÉÓÌÏ ÔÅËÕÝÅÇÏ ÄÎÑ:" - -#: calendar/gui/calendar-commands.c:66 -msgid "To-Do item that is not yet due:" -msgstr "úÁÄÁÎÉÑ, ÄÌÑ ËÏÔÏÒÙÈ ÓÒÏË ×ÙÐÏÌÎÅÎÉÑ ÎÅ ÎÁÓÔÁÌ:" - -#: calendar/gui/calendar-commands.c:67 -msgid "To-Do item that is due today:" -msgstr "úÁÄÁÎÉÑ, ËÏÔÏÒÙÅ ÄÏÌÖÎÙ ÂÙÔØ ×ÙÐÏÌÎÅÎÙ ÓÅÇÏÄÎÑ:" - -#: calendar/gui/calendar-commands.c:68 -msgid "To-Do item that is overdue:" -msgstr "ðÒÏÓÒÏÞÅÎÎÙÅ ÚÁÄÁÎÉÑ:" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "ëÁÌÅÎÄÁÒØ Gnome" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "ìÉÞÎÙÊ ËÁÌÅÎÄÁÒØ É ÄÉÓÐÅÔÞÅÒ ÒÁÓÐÉÓÁÎÉÑ Gnome." - -#: calendar/gui/calendar-commands.c:401 tests/ui-tests/message-browser.c:676 -msgid "File not found" -msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ" - -#: calendar/gui/calendar-commands.c:423 -msgid "Open calendar" -msgstr "ïÔËÒÙÔØ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:462 -msgid "Save calendar" -msgstr "óÏÈÒÁÎÉÔØ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:489 calendar/gui/gncal-todo.c:763 -#: calendar/gui/gncal-todo.c:767 -msgid "Day" -msgstr "äÅÎØ" - -#: calendar/gui/calendar-commands.c:489 -msgid "Show 1 day" -msgstr "ðÏËÁÚÁÔØ 1 ÄÅÎØ" - -#: calendar/gui/calendar-commands.c:492 -msgid "5 Days" -msgstr "5 ÄÎÅÊ" - -#: calendar/gui/calendar-commands.c:492 -msgid "Show the working week" -msgstr "ðÏËÁÚÁÔØ ÒÁÂÏÞÕÀ ÎÅÄÅÌÀ" - -#: calendar/gui/calendar-commands.c:495 calendar/gui/gncal-todo.c:762 -msgid "Week" -msgstr "îÅÄÅÌÑ" - -#: calendar/gui/calendar-commands.c:495 -msgid "Show 1 week" -msgstr "ðÏËÁÚÁÔØ 1 ÎÅÄÅÌÀ" - -#: calendar/gui/calendar-commands.c:498 -msgid "Month" -msgstr "íÅÓÑÃ" - -#: calendar/gui/calendar-commands.c:498 -msgid "Show 1 month" -msgstr "ðÏËÁÚÁÔØ 1 ÍÅÓÑÃ" - -#: calendar/gui/calendar-commands.c:502 -msgid "Year" -msgstr "çÏÄ" - -#: calendar/gui/calendar-commands.c:502 -msgid "Show 1 year" -msgstr "ðÏËÁÚÁÔØ 1 ÇÏÄ" - -#: calendar/gui/calendar-commands.c:511 calendar/gui/calendar-commands.c:663 -msgid "Create a new appointment" -msgstr "óÏÚÄÁÔØ ÎÏ×ÕÀ ×ÓÔÒÅÞÕ" - -#: calendar/gui/calendar-commands.c:516 calendar/gui/calendar-commands.c:655 -msgid "Print this calendar" -msgstr "îÁÐÅÞÁÔÁÔØ ÜÔÏÔ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:520 -msgid "Prev" -msgstr "ðÒÅÄ." - -#: calendar/gui/calendar-commands.c:520 -msgid "Go back in time" -msgstr "ðÅÒÅÊÔÉ × ÐÒÏÛÌÏÅ" - -#: calendar/gui/calendar-commands.c:521 -msgid "Today" -msgstr "óÅÇÏÄÎÑ" - -#: calendar/gui/calendar-commands.c:521 -msgid "Go to present time" -msgstr "ðÅÒÅÊÔÉ Ë ÎÁÓÔÏÑÝÅÍÕ" - -#: calendar/gui/calendar-commands.c:522 -msgid "Next" -msgstr "óÌÅÄ." - -#: calendar/gui/calendar-commands.c:522 -msgid "Go forward in time" -msgstr "ðÅÒÅÊÔÉ × ÂÕÄÕÝÅÅ" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to" -msgstr "ðÅÒÅÊÔÉ" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to a specific date" -msgstr "ðÅÒÅÊÔÉ Ë ÕËÁÚÁÎÎÏÊ ÄÁÔÅ" - -#. file menu -#: calendar/gui/calendar-commands.c:640 -msgid "New Ca_lendar" -msgstr "îÏ×ÙÊ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:641 -msgid "Create a new calendar" -msgstr "óÏÚÄÁÔØ ÎÏ×ÙÊ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:644 -msgid "Open Ca_lendar" -msgstr "ïÔËÒÙÔØ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:645 -msgid "Open a calendar" -msgstr "ïÔËÒÙÔØ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-commands.c:649 calendar/gui/calendar-commands.c:650 -msgid "Save Calendar As" -msgstr "óÏÈÒÁÎÉÔØ ËÁÌÅÎÄÁÒØ ËÁË" - -#: calendar/gui/calendar-commands.c:663 -msgid "_New appointment..." -msgstr "îÏ×ÁÑ ×ÓÔÒÅÞÁ..." - -#: calendar/gui/calendar-commands.c:671 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "îÁÓÔÒÏÊËÉ" - -#: calendar/gui/calendar-commands.c:678 calendar/gui/calendar-commands.c:679 -msgid "About Calendar" -msgstr "ï ÐÒÏÇÒÁÍÍÅ \"ëÁÌÅÎÄÁÒØ\"" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:721 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:721 -msgid "'s calendar" -msgstr "' ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/calendar-model.c:323 -msgid "Public" -msgstr "ïÂÝÅÅ" - -#: calendar/gui/calendar-model.c:326 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "ìÉÞÎÏÅ" - -#: calendar/gui/calendar-model.c:329 -msgid "Confidential" -msgstr "ëÏÎÆÉÄÅÎÃÉÁÌØÎÏÅ" - -#: calendar/gui/calendar-model.c:332 calendar/gui/calendar-model.c:499 -msgid "Unknown" -msgstr "îÅÉÚ×ÅÓÔÎÏÅ" - -#: calendar/gui/calendar-model.c:419 -msgid "N" -msgstr "ó" - -#: calendar/gui/calendar-model.c:419 -msgid "S" -msgstr "à" - -#: calendar/gui/calendar-model.c:421 -msgid "E" -msgstr "÷" - -#: calendar/gui/calendar-model.c:421 -msgid "W" -msgstr "ú" - -#: calendar/gui/calendar-model.c:493 -msgid "Transparent" -msgstr "ðÒÏÚÒÁÞÎÙÊ" - -#: calendar/gui/calendar-model.c:496 -msgid "Opaque" -msgstr "îÅÐÒÏÚÒÁÞÎÙÊ" - -#: calendar/gui/calendar-model.c:747 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"äÁÔÁ ÄÏÌÖÎÁ ÂÙÔØ ××ÅÄÅÎÁ × ÆÏÒÍÁÔÅ:\n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:820 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"çÅÏÇÒÁÆÉÞÅÓËÏÅ ÐÏÌÏÖÅÎÉÅ ÄÏÌÖÎÏ ÂÙÔØ ××ÅÄÅÎÏ × ÆÏÒÍÁÔÅ:\n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:865 -msgid "The percent value must be between 0 and 100" -msgstr "úÎÁÞÅÎÉÅ ÐÒÏÃÅÎÔÁ ÄÏÌÖÎÏ ÂÙÔØ ÍÅÖÄÕ 0 É 100" - -#: calendar/gui/calendar-model.c:898 -msgid "The priority must be between 0 and 10" -msgstr "ðÒÉÏÒÉÔÅÔ ÄÏÌÖÅÎ ÂÙÔØ ÍÅÖÄÕ 0 É 10" - -#: calendar/gui/control-factory.c:132 -msgid "The URI that the calendar will display" -msgstr "URI, ËÏÔÏÒÙÊ ÂÕÄÅÔ ÐÏËÁÚÙ×ÁÔØ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "ôÁÊÍÅÒ ÎÁ %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "õ×ÅÄÏÍÌÅÎÉÅ Ï ×ÁÛÅÊ ×ÓÔÒÅÞÅ × %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "éÔÏÇ ÎÅ ÄÏÓÔÕÐÅÎ." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "úÁËÒÙÔØ" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1086 -msgid "Snooze" -msgstr "ëÏÒÏÔËÉÊ ÓÏÎ" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "ðÒÁ×ËÁ ×ÓÔÒÅÞÉ" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "÷ÒÅÍÑ ÄÒÅÍÁÎÉÑ (ÍÉÎÕÔ)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1209 -msgid "FIXME: _Delete" -msgstr "FIXME: õÄÁÌÉÔØ" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "FIXME: îÅ×ÙÐÏÌÎÅÎÎÏÅ úÁÄÁÎÉÅ" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1311 -msgid "FIXME: Chec_k Names" -msgstr "FIXME: ðÒÏ×ÅÒËÁ ÉÍÅÎ" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1312 -msgid "FIXME: Address _Book..." -msgstr "FIXME: áÄÒÅÓÎÁÑ ËÎÉÇÁ..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "FIXME: îÏ×ÏÅ úÁÄÁÎÉÅ" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "FIXME: ïÔÐÒÁ×ÉÔØ ÏÔÞÅÔ Ï ÓÏÓÔÏÑÎÉÉ" - -#: calendar/gui/dialogs/task-editor.c:358 -msgid "FIXME: _Mark Complete" -msgstr "FIXME: ðÏÍÅÔÉÔØ ËÁË ×ÙÐÏÌÎÅÎÎÏÅ" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1321 -msgid "FIXME: Rec_urrence..." -msgstr "FIXME: ðÏ×ÔÏÒÅÎÉÅ..." - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "FIXME: ðÒÏÐÕÓÔÉÔØ ÓÌÕÞÁÊ" - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "FIXME: îÁÚÎÁÞÉÔØ úÁÄÁÎÉÅ" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "FIXME: ïÔ×ÅÔÉÔØ" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "FIXME: ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1381 -msgid "FIXME: Save and Close" -msgstr "FIXME: óÏÈÒÁÎÉÔØ É ÚÁËÒÙÔØ" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "óÏÈÒÁÎÉÔØ ÚÁÄÁÎÉÅ É ÚÁËÒÙÔØ ÏËÎÏ ÄÉÁÌÏÇÁ" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1386 -msgid "FIXME: Print..." -msgstr "FIXME: ðÅÞÁÔØ..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1391 -msgid "FIXME: Recurrence..." -msgstr "FIXME: ðÏ×ÔÏÒÅÎÉÅ..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1392 -msgid "Configure recurrence rules" -msgstr "îÁÓÔÒÏÊËÁ ÐÒÁ×ÉÌ ÐÏ×ÔÏÒÅÎÉÑ" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "FIXME: îÁÚÎÁÞÉÔØ ÚÁÄÁÎÉÅ..." - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "îÁÚÎÁÞÉÔØ ÚÁÄÁÎÉÅ ËÏÍÕ-ÌÉÂÏ" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1397 -msgid "FIXME: Delete" -msgstr "FIXME: õÄÁÌÉÔØ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "ôÅÍÁ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "÷ÌÁÄÅÌÅÃ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "äÁÔÁ ÎÁÞÁÌÁ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "õÓÌÏ×ÌÅÎÎÁÑ ÄÁÔÁ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "óÏÓÔÏÑÎÉÅ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"îÅ ÎÁÞÁÔÏ\n" -"÷ ÐÒÏÃÅÓÓÅ\n" -"úÁ×ÅÒÛÅÎÏ\n" -"ïÔÍÅÎÅÎÏ\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "îÅ ÎÁÞÁÔÏ" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "ðÒÉÏÒÉÔÅÔ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"÷ÙÓÏËÉÊ\n" -"îÏÒÍÁÌØÎÙÊ\n" -"îÉÚËÉÊ\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -msgid "High" -msgstr "÷ÙÓÏËÉÊ" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% ÷ÙÐÏÌÎÅÎÉÑ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "ëÏÎÔÁËÔÙ..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "úÁÄÁÎÉÅ" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "äÁÔÁ ×ÙÐÏÌÎÅÎÉÑ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "òÁÓÐÏÌÏÖÅÎÉÅ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "éÓÔÏÞÎÉËÉ:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "ëÏÍÍÅÎÔÁÒÉÊ" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "úÁ×ÅÒÛÅÎÏ" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "óÏÚÄÁÎÏ" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "ïÐÉÓÁÎÉÅ" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "ïÔÍÅÔËÁ ×ÒÅÍÅÎÉ" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "äÁÔÁ ÎÁÞÁÌÁ" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "äÁÔÁ ÏËÏÎÞÁÎÉÑ" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "çÅÏÇÒÁÆÉÞÅÓËÏÅ ÐÏÌÏÖÅÎÉÅ" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "äÁÔÁ ÐÏÓÌÅÄÎÅÇÏ ÉÚÍÅÎÅÎÉÑ" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "ðÏÌÏÖÅÎÉÅ" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "ïÒÇÁÎÉÚÁÔÏÒ" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% ÷ÙÐÏÌÎÅÎÏ" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:476 -#: calendar/gui/prop.c:609 mail/message-list.c:508 -msgid "Priority" -msgstr "ðÒÉÏÒÉÔÅÔ" - -#: calendar/gui/e-calendar-table.c:260 -msgid "TaskPad" -msgstr "úÁÄÁÎÉÑ" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "îÁÐÏÍÉÎÁÎÉÅ" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "ïÔËÒÙÔØ..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "ïÔËÒÙÔØ ÚÁÄÁÎÉÅ" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "ðÏÍÅÔÉÔØ ËÁË ×ÙÐÏÌÎÅÎÎÏÅ" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "ðÏÍÅÔÉÔØ ÚÁÄÁÎÉÅ ËÁË ×ÙÐÏÌÎÅÎÎÏÅ" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "õÄÁÌÉÔØ ÚÁÄÁÎÉÅ" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "îÏ×ÁÑ ×ÓÔÒÅÞÁ..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "ðÒÁ×ËÁ ÜÔÏÊ ×ÓÔÒÅÞÉ..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "õÄÁÌÉÔØ ÜÔÕ ×ÓÔÒÅÞÕ" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "óÄÅÌÁÔØ ÜÔÕ ×ÓÔÒÅÞÕ ÐÅÒÅÍÅÝÁÅÍÏÊ" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "õÄÁÌÉÔØ ÜÔÏÔ ÓÌÕÞÁÊ" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "õÄÁÌÉÔØ ×ÓÅ ÓÌÕÞÁÉ" - -#: calendar/gui/event-editor.c:294 -msgid "Edit Appointment" -msgstr "ðÒÁ×ËÁ ×ÓÔÒÅÞÉ" - -#: calendar/gui/event-editor.c:300 -msgid "No summary" -msgstr "îÅÔ ÉÔÏÇÁ" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Appointment - %s" -msgstr "÷ÓÔÒÅÞÁ - %s" - -#: calendar/gui/event-editor.c:309 -#, c-format -msgid "Task - %s" -msgstr "úÁÄÁÎÉÅ - %s" - -#: calendar/gui/event-editor.c:312 -#, c-format -msgid "Journal entry - %s" -msgstr "öÕÒÎÁÌØÎÁÑ ÚÁÐÉÓØ - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:613 calendar/gui/event-editor.c:717 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1276 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: ëÁÌÅÎÄÁÒØ..." - -#: calendar/gui/event-editor.c:1319 -msgid "FIXME: _New Appointment" -msgstr "FIXME: îÏ×ÁÑ ×ÓÔÒÅÞÁ" - -#: calendar/gui/event-editor.c:1323 -msgid "FIXME: Invite _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1324 -msgid "FIXME: C_ancel Invitation..." -msgstr "FIXME: ïÔÍÅÎÁ ÐÒÉÇÌÁÛÅÎÉÑ..." - -#: calendar/gui/event-editor.c:1326 -msgid "FIXME: Forward as v_Calendar" -msgstr "FIXME: ðÅÒÅÓÌÁÔØ ËÁË v_Calendar" - -#: calendar/gui/event-editor.c:1394 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1395 -msgid "Invite attendees to a meeting" -msgstr "ðÒÉÇÌÁÓÉÔØ ÐÏÓÅÔÉÔÅÌÅÊ ÎÁ ×ÓÔÒÅÞÕ" - -#: calendar/gui/event-editor.c:1838 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "ÄÉÁÌÏÇ ÒÅÄÁËÔÏÒÁ ÓÏÂÙÔÉÊ" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "éÔÏÇ:" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "÷ÌÁÄÅÌÅÃ:" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "÷ÒÅÍÑ" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "÷ÒÅÍÑ ÎÁÞÁÌÁ:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "÷ÒÅÍÑ ÏËÏÎÞÁÎÉÑ:" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "÷ÓÅ ÓÏÂÙÔÉÑ ÄÎÑ" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "ëÌÁÓÓÉÆÉËÁÃÉÑ" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "ïÂÝÅÅ" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "ìÉÞÎÏÅ" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "ëÏÎÆÉÄÅÎÃÉÁÌØÎÏÅ" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"íÉÎÕÔÙ\n" -"þÁÓÙ\n" -"äÎÉ\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "ïÔÏÂÒÁÚÉÔØ" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "áÕÄÉÏ" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "ðÒÏÇÒÁÍÍÁ" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "ðÏÞÔÁ" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "ðÏÞÔÁ ÄÌÑ:" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "úÁÐÕÓÔÉÔØ ÐÒÏÇÒÁÍÍÕ:" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "ðÒÁ×ÉÌÏ ÐÏ×ÔÏÒÅÎÉÑ" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:875 -msgid "None" -msgstr "îÅÔ" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "åÖÅÄÎÅ×ÎÏ" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "åÖÅÎÅÄÅÌØÎÏ" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "åÖÅÍÅÓÑÞÎÏ" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "åÖÅÇÏÄÎÏ" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "ÍÅÔËÁ23" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "ëÁÖÄÙÊ" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "ÄÅÎØ" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "ÍÅÔËÁ24" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "ÎÅÄÅÌÑ" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "ðÏÎ" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "÷ÔÒ" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "óÒÄ" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "þÔ×" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "ðÑÔ" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "óÕÂ" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "÷ÓË" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "ÍÅÔËÁ25" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "ðÏ×ÔÏÒ" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "-ÏÊ ÄÅÎØ ÍÅÓÑÃÁ" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1ÙÊ\n" -"2ÏÊ\n" -"3ÉÊ\n" -"4ÙÊ\n" -"5ÙÊ\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"ðÏÎÅÄÅÌØÎÉË\n" -"÷ÔÏÒÎÉË\n" -"óÒÅÄÁ\n" -"þÅÔ×ÅÒÇ\n" -"ðÑÔÎÉÃÁ\n" -"óÕÂÂÏÔÁ\n" -"÷ÏÓËÒÅÓÅÎØÅ\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "ëÁÖÄÙÊ" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "ÍÅÓÑÃ" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "ÇÏÄ" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "ÍÅÔËÁ27" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "äÁÔÁ ÚÁ×ÅÒÛÅÎÉÑ" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "âÅÓËÏÎÅÞÎÏÅ ÐÏ×ÔÏÒÅÎÉÅ" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "úÁËÏÎÞÉÔØ ×" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "úÁËÏÎÞÉÔØ ÐÏÓÌÅ" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "ÓÌÕÞÁÉ" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "éÓËÌÀÞÅÎÉÑ" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "éÚÍÅÎÉÔØ" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "ðÏ×ÔÏÒÅÎÉÅ" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "ÑÎ×ÁÒØ" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "ÆÅ×ÒÁÌØ" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "ÍÁÒÔ" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "ÁÐÒÅÌØ" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "ÍÁÊ" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "ÉÀÎØ" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "ÉÀÌØ" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "Á×ÇÕÓÔ" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "ÓÅÎÔÑÂÒØ" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "ÓÅÎÔ" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "ÏËÔÑÂÒØ" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "ÎÏÑÂÒØ" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "ÄÅËÁÂÒØ" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "×ÏÓËÒÅÓÅÎØÅ" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "ÐÏÎÅÄÅÌØÎÉË" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "×ÔÏÒÎÉË" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "×ÔÒÎ" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "ÓÒÅÄÁ" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "ÓÒÄ" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "ÞÅÔ×ÅÒÇ" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "ÞÅÔ×" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "ÞÅÔ×" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "ÐÑÔÎÉÃÁ" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "ÓÕÂÂÏÔÁ" - -#: calendar/gui/getdate.y:420 filter/filter-datespec.c:61 -msgid "year" -msgstr "ÇÏÄ" - -#: calendar/gui/getdate.y:421 filter/filter-datespec.c:62 -msgid "month" -msgstr "ÍÅÓÑÃ" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "Ä×Å ÎÅÄÅÌÉ" - -#: calendar/gui/getdate.y:423 filter/filter-datespec.c:63 -msgid "week" -msgstr "ÎÅÄÅÌÑ" - -#: calendar/gui/getdate.y:424 filter/filter-datespec.c:64 -msgid "day" -msgstr "ÄÅÎØ" - -#: calendar/gui/getdate.y:425 filter/filter-datespec.c:65 -msgid "hour" -msgstr "ÞÁÓ" - -#: calendar/gui/getdate.y:426 filter/filter-datespec.c:66 -msgid "minute" -msgstr "ÍÉÎÕÔÁ" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "ÍÉÎ" - -#: calendar/gui/getdate.y:428 filter/filter-datespec.c:67 -msgid "second" -msgstr "ÓÅËÕÎÄÁ" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "ÓÅË" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "ÚÁ×ÔÒÁ" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "×ÞÅÒÁ" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "ÓÅÇÏÄÎÑ" - -#: calendar/gui/getdate.y:438 filter/filter-datespec.c:504 -#: filter/filter-datespec.c:664 -msgid "now" -msgstr "ÓÅÊÞÁÓ" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "ÐÏÓÌÅÄÎÉÊ" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "ÜÔÏÔ" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "cÌÅÄ." - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "ÐÅÒ×ÙÊ" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "ÔÒÅÔÉÊ" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "ÞÅÔ×ÅÒÔÙÊ" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "ÐÑÔÙÊ" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "ÛÅÓÔÏÊ" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "ÓÅÄØÍÏÊ" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "×ÏÓØÍÏÊ" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "ÄÅ×ÑÔÙÊ" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "ÄÅÓÑÔÙÊ" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "ÏÄÉÎÁÄÃÁÔÙÊ" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "Ä×ÅÎÁÄÃÁÔÙÊ" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "ÎÁÚÁÄ" - -#: calendar/gui/gncal-todo.c:167 -msgid "Create to-do item" -msgstr "óÏÚÄÁÔØ ÚÁÄÁÎÉÅ" - -#: calendar/gui/gncal-todo.c:167 -msgid "Edit to-do item" -msgstr "ðÒÁ×ËÁ ÚÁÄÁÎÉÑ" - -#: calendar/gui/gncal-todo.c:203 -msgid "Summary:" -msgstr "éÔÏÇ:" - -#: calendar/gui/gncal-todo.c:214 -msgid "Due Date:" -msgstr "õÓÌÏ×ÌÅÎÎÁÑ ÄÁÔÁ:" - -#: calendar/gui/gncal-todo.c:225 -msgid "Priority:" -msgstr "ðÒÉÏÒÉÔÅÔ:" - -#: calendar/gui/gncal-todo.c:243 -msgid "Item Comments:" -msgstr "ëÏÍÍÅÎÔÁÒÉÉ ÜÌÅÍÅÎÔÁ:" - -#: calendar/gui/gncal-todo.c:374 -msgid "Add to-do item..." -msgstr "äÏÂÁ×ÉÔØ ÚÁÄÁÎÉÅ..." - -#: calendar/gui/gncal-todo.c:375 -msgid "Edit this item..." -msgstr "ðÒÁ×ËÁ ÜÔÏÇÏ ÜÌÅÍÅÎÔÁ..." - -#: calendar/gui/gncal-todo.c:474 -msgid "Summary" -msgstr "éÔÏÇÏ" - -#: calendar/gui/gncal-todo.c:475 calendar/gui/prop.c:608 -msgid "Due Date" -msgstr "õÓÌÏ×ÌÅÎÎÁÑ ÄÁÔÁ" - -#: calendar/gui/gncal-todo.c:477 -msgid "Time Left" -msgstr "ïÓÔÁ×ÛÅÅÓÑ ×ÒÅÍÑ" - -#. Label -#: calendar/gui/gncal-todo.c:489 -msgid "To-do list" -msgstr "óÐÉÓÏË ÚÁÄÁÎÉÊ" - -#. Add -#: calendar/gui/gncal-todo.c:528 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "äÏÂÁ×ÉÔØ..." - -#. Edit -#: calendar/gui/gncal-todo.c:537 -msgid "Edit..." -msgstr "ðÒÁ×ËÁ..." - -#: calendar/gui/gncal-todo.c:762 -msgid "Weeks" -msgstr "îÅÄÅÌÉ" - -#: calendar/gui/gncal-todo.c:763 calendar/gui/gncal-todo.c:767 -msgid "Days" -msgstr "äÎÉ" - -#: calendar/gui/gncal-todo.c:768 calendar/gui/gncal-todo.c:772 -msgid "Hours" -msgstr "þÁÓÙ" - -#: calendar/gui/gncal-todo.c:768 calendar/gui/gncal-todo.c:772 -msgid "Hour" -msgstr "þÁÓ" - -#: calendar/gui/gncal-todo.c:773 calendar/gui/gncal-todo.c:777 -msgid "Minutes" -msgstr "íÉÎÕÔÙ" - -#: calendar/gui/gncal-todo.c:773 calendar/gui/gncal-todo.c:777 -msgid "Minute" -msgstr "íÉÎÕÔÁ" - -#: calendar/gui/gncal-todo.c:778 calendar/gui/gncal-todo.c:782 -msgid "Seconds" -msgstr "óÅËÕÎÄÙ" - -#: calendar/gui/gncal-todo.c:778 calendar/gui/gncal-todo.c:782 -msgid "Second" -msgstr "óÅËÕÎÄÁ" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1094 -#: calendar/gui/gnome-cal.c:1150 -msgid "Reminder of your appointment at " -msgstr "îÁÐÏÍÉÎÁÎÉÅ Ï ×ÁÛÅÊ ×ÓÔÒÅÞÅ × " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1099 calendar/gui/gnome-cal.c:1154 -msgid "Ok" -msgstr "ïË" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "çÏÄ:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "ðÅÒÅÊÔÉ Ë ÄÁÔÅ" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"ðÏÖÁÌÕÊÓÔÁ ×ÙÂÅÒÉÔÅ ÄÁÔÕ, Ë ËÏÔÏÒÏÊ ÷Ù ÈÏÔÉÔÅ\n" -"ÐÅÒÅÊÔÉ. ëÏÇÄÁ ÷Ù ÝÅÌËÎÅÔÅ ËÎÏÐËÏÊ ÍÙÛÉ ÎÁ\n" -"ÎÕÖÎÏÍ ÄÎÅ, ÷Ù ÐÅÒÅÊÄÅÔÅ Ë ÜÔÏÊ ÄÁÔÅ." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "ðÅÒÅÊÔÉ Ë ÓÅÇÏÄÎÑÛÎÅÍÕ ÄÎÀ" - -#: calendar/gui/print.c:288 -msgid "1st" -msgstr "1-ÙÊ" - -#: calendar/gui/print.c:288 -msgid "2nd" -msgstr "2-ÏÊ" - -#: calendar/gui/print.c:288 -msgid "3rd" -msgstr "3-ÉÊ" - -#: calendar/gui/print.c:288 -msgid "4th" -msgstr "4-ÙÊ" - -#: calendar/gui/print.c:288 -msgid "5th" -msgstr "5-ÙÊ" - -#: calendar/gui/print.c:289 -msgid "6th" -msgstr "6-ÏÊ" - -#: calendar/gui/print.c:289 -msgid "7th" -msgstr "7-ÏÊ" - -#: calendar/gui/print.c:289 -msgid "8th" -msgstr "8-ÏÊ" - -#: calendar/gui/print.c:289 -msgid "9th" -msgstr "9-ÙÊ" - -#: calendar/gui/print.c:289 -msgid "10th" -msgstr "10-ÙÊ" - -#: calendar/gui/print.c:290 -msgid "11th" -msgstr "11-ÙÊ" - -#: calendar/gui/print.c:290 -msgid "12th" -msgstr "12-ÙÊ" - -#: calendar/gui/print.c:290 -msgid "13th" -msgstr "13-ÙÊ" - -#: calendar/gui/print.c:290 -msgid "14th" -msgstr "14-ÙÊ" - -#: calendar/gui/print.c:290 -msgid "15th" -msgstr "15-ÙÊ" - -#: calendar/gui/print.c:291 -msgid "16th" -msgstr "16-ÙÊ" - -#: calendar/gui/print.c:291 -msgid "17th" -msgstr "17-ÙÊ" - -#: calendar/gui/print.c:291 -msgid "18th" -msgstr "18-ÙÊ" - -#: calendar/gui/print.c:291 -msgid "19th" -msgstr "19-ÙÊ" - -#: calendar/gui/print.c:291 -msgid "20th" -msgstr "20-ÙÊ" - -#: calendar/gui/print.c:292 -msgid "21st" -msgstr "21-ÙÊ" - -#: calendar/gui/print.c:292 -msgid "22nd" -msgstr "22-ÏÊ" - -#: calendar/gui/print.c:292 -msgid "23rd" -msgstr "23-ÉÊ" - -#: calendar/gui/print.c:292 -msgid "24th" -msgstr "24-ÙÊ" - -#: calendar/gui/print.c:292 -msgid "25th" -msgstr "25-ÙÊ" - -#: calendar/gui/print.c:293 -msgid "26th" -msgstr "26-ÏÊ" - -#: calendar/gui/print.c:293 -msgid "27th" -msgstr "27-ÏÊ" - -#: calendar/gui/print.c:293 -msgid "28th" -msgstr "28-ÏÊ" - -#: calendar/gui/print.c:293 -msgid "29th" -msgstr "29-ÙÊ" - -#: calendar/gui/print.c:293 -msgid "30th" -msgstr "30-ÙÊ" - -#: calendar/gui/print.c:294 -msgid "31st" -msgstr "31-ÙÊ" - -#: calendar/gui/print.c:349 -msgid "Su" -msgstr "÷Ó" - -#: calendar/gui/print.c:349 -msgid "Mo" -msgstr "ðÎ" - -#: calendar/gui/print.c:349 -msgid "Tu" -msgstr "÷Ô" - -#: calendar/gui/print.c:349 -msgid "We" -msgstr "óÒ" - -#: calendar/gui/print.c:349 -msgid "Th" -msgstr "þÔ" - -#: calendar/gui/print.c:349 -msgid "Fr" -msgstr "ðÔ" - -#: calendar/gui/print.c:349 -msgid "Sa" -msgstr "CÂ" - -#: calendar/gui/print.c:937 -msgid "TODO Items" -msgstr "úÁÄÁÎÉÑ" - -#. Day -#: calendar/gui/print.c:1038 -msgid "Current day (%a %b %d %Y)" -msgstr "ôÅËÕÝÉÊ ÄÅÎØ (%a %b %d %Y)" - -#: calendar/gui/print.c:1058 calendar/gui/print.c:1072 -#: calendar/gui/print.c:1073 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1059 calendar/gui/print.c:1060 -#: calendar/gui/print.c:1074 calendar/gui/print.c:1075 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1062 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "ôÅËÕÝÁÑ ÎÅÄÅÌÑ (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1079 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "ôÅËÕÝÁÑ ÎÅÄÅÌÑ (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1085 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "ôÅËÕÝÁÑ ÎÅÄÅÌÑ (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1098 -msgid "Current month (%a %Y)" -msgstr "ôÅËÕÝÉÊ ÍÅÓÑà (%a %Y)" - -#. Year -#: calendar/gui/print.c:1105 -msgid "Current year (%Y)" -msgstr "ôÅËÕÝÉÊ ÇÏÄ (%Y)" - -#: calendar/gui/print.c:1142 -msgid "Print Calendar" -msgstr "îÁÐÅÞÁÔÁÔØ ËÁÌÅÎÄÁÒØ" - -#: calendar/gui/print.c:1307 -msgid "Print Preview" -msgstr "ðÒÏÓÍÏÔÒ ÐÅÞÁÔÉ" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "ïÔÏÂÒÁÖÁÅÍÏÅ ×ÒÅÍÑ" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "æÏÒÍÁÔ ×ÒÅÍÅÎÉ" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "12-ÞÁÓÏ×ÏÊ (äð/ðð)" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "24-ÞÁÓÏ×ÏÊ" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "îÅÄÅÌÉ ÎÁÞÉÎÁÀÔÓÑ ×" - -#: calendar/gui/prop.c:351 -msgid "Sunday" -msgstr "÷ÏÓËÒÅÓÅÎØÅ" - -#: calendar/gui/prop.c:352 -msgid "Monday" -msgstr "ðÏÎÅÄÅÌØÎÉË" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "äÉÁÐÁÚÏÎ ÄÎÑ" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"÷ÙÂÅÒÉÔÅ ÎÁÞÁÌØÎÙÊ É ËÏÎÅÞÎÙÊ ÞÁÓÙ, ËÏÔÏÒÙÅ ÷Ù\n" -"ÈÏÔÉÔÅ ×ÉÄÅÔØ × ÒÅÖÉÍÅ ÐÒÏÓÍÏÔÒÁ ÄÎÅÊ É ÎÅÄÅÌØ.\n" -"÷ÒÅÍÑ ×ÎÅ ÜÔÏÇÏ ÄÉÁÐÁÚÏÎÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÅ ÂÕÄÅÔ\n" -"ÐÏËÁÚÙ×ÁÔØÓÑ." - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "îÁÞÁÌÏ ÄÎÑ:" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "ëÏÎÅà ÄÎÑ:" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "ã×ÅÔÁ ÄÌÑ ÐÏËÁÚÁ" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "ã×ÅÔÁ" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "ðÏËÁÚÁÔØ × ÓÐÉÓËÅ ÚÁÄÁÎÉÊ:" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "÷ÒÅÍÑ ÄÏ ÕÓÌÏ×ÌÅÎÎÏÇÏ" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "ðÁÒÁÍÅÔÒÙ ÓÔÉÌÑ ÓÐÉÓËÁ \"éÓÐÏÌÎÉÔØ\":" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "ðÏÄÓ×ÅÔËÁ ÐÒÏÓÒÏÞÅÎÎÙÈ ÜÌÅÍÅÎÔÏ×" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "ðÏÄÓ×ÅÔËÁ ÅÝÅ ÎÅ ÉÓÐÏÌÎÅÎÎÙÈ ÜÌÅÍÅÎÔÏ×" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "ðÏÄÓ×ÅÔËÁ ÜÌÅÍÅÎÔÏ× ÕÓÌÏ×ÌÅÎÎÙÈ ÎÁ ÓÅÇÏÄÎÑ" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "ó×ÏÊÓÔ×Á ÓÐÉÓËÁ \"éÓÐÏÌÎÉÔØ\"" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "óÐÉÓÏË \"éÓÐÏÌÎÉÔØ\"" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "ôÁÊÍÅÒÙ" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -msgid "Alarm Properties" -msgstr "ó×ÏÊÓÔ×Á ÔÁÊÍÅÒÏ×" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "çÕÄÏË ÐÒÉ ÏÔÏÂÒÁÖÅÎÉÉ ÔÁÊÍÅÒÏ×" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "úÁÄÅÒÖËÁ ÁÕÄÉÏÓÉÇÎÁÌÁ ÎÁ" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr " ÓÅËÕÎÄ" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "òÁÚÒÅÛÉÔØ ËÒÁÔËÉÊ ÓÏÎ ÄÌÑ " - -#. populate default frame/box -#: calendar/gui/prop.c:840 -msgid "Defaults" -msgstr "éÓÈ.ÚÎÁÞÅÎÉÑ" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "÷ÙÒÅÚÁÔØ" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "÷ÙÒÅÚÁÅÔ ×ÙÄÅÌÅÎÎÙÊ ÜÌÅÍÅÎÔ × ÂÕÆÅÒ ÏÂÍÅÎÁ" - -#: composer/e-msg-composer-address-dialog.c:186 -#: mail/folder-browser-factory.c:46 -msgid "Copy" -msgstr "óËÏÐÉÒÏ×ÁÔØ" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "ëÏÐÉÒÕÅÔ ×ÙÄÅÌÅÎÎÙÊ ÜÌÅÍÅÎÔ × ÂÕÆÅÒ ÏÂÍÅÎÁ" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "÷ÓÔÁ×ÉÔØ" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "÷ÓÔÁ×ÉÔØ ÜÌÅÍÅÎÔ ÉÚ ÂÕÆÅÒÁ ÏÂÍÅÎÁ" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "÷ÙÂÒÁÔØ ÁÄÒÅÓÁ ÐÏÌÕÞÁÔÅÌÅÊ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "óÐÉÓÏË ÐÏÌÕÞÁÔÅÌÅÊ:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "ðÏÉÓË..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "éÍÑ" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "áÄÒÅÓ" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "ó×ÏÊÓÔ×Á..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "ëÏÍÕ: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "ëÏÐÉÑ: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "óËÒ.ËÏÐÉÑ: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "ÍÅÔËÁ9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "ÍÅÔËÁ7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "ÍÅÔËÁ8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 ÂÁÊÔ" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u ÂÁÊÔ" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fë" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "äÏÂÁ×ÉÔØ ×ÌÏÖÅÎÉÅ" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "õÄÁÌÉÔØ" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "õÄÁÌÉÔØ ×ÙÂÒÁÎÎÙÅ ÜÌÅÍÅÎÔÙ ÉÚ ÓÐÉÓËÁ ×ÌÏÖÅÎÉÊ" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "äÏÂÁ×ÉÔØ ×ÌÏÖÅÎÉÅ..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "ðÒÉÓÏÅÄÉÎÉÔØ ÆÁÊÌ Ë ÓÏÏÂÝÅÎÉÀ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "ó×ÏÊÓÔ×Á ×ÌÏÖÅÎÉÑ" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "ôÉÐ MIME:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "éÍÑ ÆÁÊÌÁ:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "ïÔ:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "ýÅÌËÎÉÔÅ ÚÄÅÓØ ÄÌÑ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "÷×ÅÄÉÔÅ ÉÍÅÎÏ×ÁÎÉÅ, ÏÔ ËÏÔÏÒÏÇÏ ×Ù ÈÏÔÉÔÅ ÏÔÐÒÁ×ÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "ëÏÍÕ:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "÷×ÅÄÉÔÅ ÐÏÌÕÞÁÔÅÌÅÊ ÓÏÏÂÝÅÎÉÑ" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "ëÏÐÉÑ:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "÷×ÅÄÉÔÅ ÁÄÒÅÓÁÔÏ×, ËÏÔÏÒÙÅ ÐÏÌÕÞÁÔ ËÏÐÉÀ ÓÏÏÂÝÅÎÉÑ" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "óËÒ.ËÏÐÉÑ:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"÷×ÅÄÉÔÅ ÁÄÒÅÓÁÔÏ×, ËÏÔÏÒÙÅ ÐÏÌÕÞÁÔ ËÏÐÉÀ ÓÏÏÂÝÅÎÉÑ ÎÅ ÐÏÐÁ× × ÓÐÉÓÏË " -"ÐÏÌÕÞÁÔÅÌÅÊ." - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "ôÅÍÁ:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "÷×ÅÄÉÔÅ ÔÅÍÕ ÐÉÓØÍÁ" - -#: composer/e-msg-composer.c:451 -msgid "Save as..." -msgstr "óÏÈÒÁÎÉÔØ ËÁË..." - -#: composer/e-msg-composer.c:462 -#, c-format -msgid "Error saving file: %s" -msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ: %s" - -#: composer/e-msg-composer.c:482 -#, c-format -msgid "Error loading file: %s" -msgstr "ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÆÁÊÌÁ: %s" - -#: composer/e-msg-composer.c:504 -msgid "Saving changes to message..." -msgstr "óÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ × ÓÏÏÂÝÅÎÉÉ..." - -#: composer/e-msg-composer.c:506 -msgid "About to save changes to message..." -msgstr "ï ÓÏÈÒÁÎÅÎÉÉ ÉÚÍÅÎÅÎÉÊ × ÓÏÏÂÝÅÎÉÉ..." - -#: composer/e-msg-composer.c:590 shell/e-shell-view-menu.c:165 -msgid "Evolution" -msgstr "ü×ÏÌÀÃÉÑ" - -#: composer/e-msg-composer.c:596 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"üÔÏ ÓÏÏÂÝÅÎÉÅ ÎÅ ÂÙÌÏ ÏÔÐÒÁ×ÌÅÎÏ.\n" -"\n" -"÷Ù ÈÏÔÉÔÅ ÓÏÈÒÁÎÉÔØ ÉÚÍÅÎÅÎÉÑ?" - -#: composer/e-msg-composer.c:618 -msgid "Open file" -msgstr "ïÔËÒÙÔØ ÆÁÊÌ" - -#: composer/e-msg-composer.c:730 -msgid "That file does not exist." -msgstr "üÔÏÔ ÆÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ." - -#: composer/e-msg-composer.c:740 -msgid "That is not a regular file." -msgstr "üÔÏ ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ." - -#: composer/e-msg-composer.c:750 -msgid "That file exists but is not readable." -msgstr "üÔÏÔ ÆÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ, ÎÏ ÎÅ ÞÉÔÁÅÔÓÑ." - -#: composer/e-msg-composer.c:760 -msgid "That file appeared accesible but open(2) failed." -msgstr "æÁÊÌ ×ÙÇÌÑÄÉÔ ÄÏÓÔÕÐÎÙÍ, ÎÏ ÐÒÏÉÚÏÛÅÌ ÓÂÏÊ open(2)." - -#: composer/e-msg-composer.c:782 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"æÁÊÌ ÏÞÅÎØ ÂÏÌØÛÏÊ (ÂÏÌØÛÅ 100ë).\n" -"÷Ù Õ×ÅÒÅÎÙ, ÞÔÏ ÈÏÔÉÔÅ ×ÓÔÁ×ÉÔØ ÅÇÏ?" - -#: composer/e-msg-composer.c:803 -msgid "An error occurred while reading the file." -msgstr "ðÒÉ ÞÔÅÎÉÉ ÆÁÊÌÁ ×ÏÚÎÉËÌÁ ÏÛÉÂËÁ." - -#: composer/e-msg-composer.c:899 shell/e-shell-view-menu.c:434 -msgid "_File" -msgstr "æÁÊÌ" - -#: composer/e-msg-composer.c:905 -msgid "_Open..." -msgstr "ïÔËÒÙÔØ..." - -#: composer/e-msg-composer.c:906 -msgid "Load a previously saved message" -msgstr "úÁÇÒÕÚÉÔØ ÒÁÎÅÅ ÓÏÈÒÁÎÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: composer/e-msg-composer.c:914 -msgid "_Save..." -msgstr "CÏÈÒÁÎÉÔØ..." - -#: composer/e-msg-composer.c:915 -msgid "Save message" -msgstr "óÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ" - -#: composer/e-msg-composer.c:923 -msgid "_Save as..." -msgstr "óÏÈÒÁÎÉÔØ ËÁË..." - -#: composer/e-msg-composer.c:924 -msgid "Save message with a different name" -msgstr "óÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ c ÄÒÕÇÉÍ ÎÁÚ×ÁÎÉÅÍ" - -#: composer/e-msg-composer.c:932 -msgid "Save in _folder..." -msgstr "óÏÈÒÁÎÉÔØ × ÐÁÐËÅ..." - -#: composer/e-msg-composer.c:933 -msgid "Save the message in a specified folder" -msgstr "óÏÈÒÁÎÉÔØ ÓÏÏÂÝÅÎÉÅ × ÕËÁÚÁÎÎÏÊ ÐÁÐËÅ" - -#: composer/e-msg-composer.c:942 -msgid "_Insert text file... (FIXME)" -msgstr "÷ÓÔÁ×ÉÔØ ÔÅËÓÔÏ×ÙÊ ÆÁÊÌ... (FIXME)" - -#: composer/e-msg-composer.c:943 -msgid "Insert a file as text into the message" -msgstr "÷ÓÔÁ×ÉÔØ ÆÁÊÌ × ÓÏÏÂÝÅÎÉÅ ËÁË ÔÅËÓÔ" - -#: composer/e-msg-composer.c:952 -msgid "_Send" -msgstr "ïÔÐÒÁ×ÉÔØ" - -#: composer/e-msg-composer.c:953 -msgid "Send the message" -msgstr "ïÔÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ" - -#: composer/e-msg-composer.c:963 -msgid "_Close..." -msgstr "úÁËÒÙÔØ..." - -#: composer/e-msg-composer.c:964 -msgid "Quit the message composer" -msgstr "÷ÙÊÔÉ ÉÚ ÒÅÄÁËÔÏÒÁ ÓÏÏÂÝÅÎÉÊ" - -#: composer/e-msg-composer.c:977 shell/e-shell-view-menu.c:478 -msgid "_Edit" -msgstr "ðÒÁ×ËÁ" - -#: composer/e-msg-composer.c:988 -msgid "_Format" -msgstr "æÏÒÍÁÔ" - -#: composer/e-msg-composer.c:994 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:995 -msgid "Send the mail in HTML format" -msgstr "ïÔÐÒÁ×ÉÔØ ÐÏÞÔÕ × ÆÏÒÍÁÔÅ HTML" - -#: composer/e-msg-composer.c:1008 mail/folder-browser-factory.c:185 -#: shell/e-shell-view-menu.c:383 shell/e-shell-view-menu.c:489 -#: shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "ðÒÏÓÍÏÔÒ" - -#: composer/e-msg-composer.c:1014 -msgid "Show _attachments" -msgstr "ðÏËÁÚÁÔØ ×ÌÏÖÅÎÉÑ" - -#: composer/e-msg-composer.c:1015 -msgid "Show/hide attachments" -msgstr "ðÏËÁÚÁÔØ/ÓËÒÙÔØ ×ÌÏÖÅÎÉÑ" - -#: composer/e-msg-composer.c:1048 -msgid "Send" -msgstr "ïÔÐÒÁ×ÉÔØ" - -#: composer/e-msg-composer.c:1049 -msgid "Send this message" -msgstr "ïÔÐÒÁ×ÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ" - -#: composer/e-msg-composer.c:1058 -msgid "Attach" -msgstr "ðÒÉÓÏÅÄÉÎÉÔØ" - -#: composer/e-msg-composer.c:1059 -msgid "Attach a file" -msgstr "ðÒÉÓÏÅÄÉÎÉÔØ ÆÁÊÌ" - -#: composer/e-msg-composer.c:1246 -msgid "Compose a message" -msgstr "óÏÚÄÁÔØ ÓÏÏÂÝÅÎÉÅ" - -#: filter/filter-datespec.c:61 -msgid "years" -msgstr "ÇÏÄÙ" - -#: filter/filter-datespec.c:62 -msgid "months" -msgstr "ÍÅÓÑÃÙ" - -#: filter/filter-datespec.c:63 -msgid "weeks" -msgstr "ÎÅÄÅÌÉ" - -#: filter/filter-datespec.c:64 -msgid "days" -msgstr "ÄÎÉ" - -#: filter/filter-datespec.c:65 -msgid "hours" -msgstr "ÞÁÓÙ" - -#: filter/filter-datespec.c:66 -msgid "minutes" -msgstr "ÍÉÎÕÔÙ" - -#: filter/filter-datespec.c:67 -msgid "seconds" -msgstr "ÓÅËÕÎÄÙ" - -#: filter/filter-datespec.c:232 -msgid "" -"The message's date will be compared against\n" -"whatever the time is when the filter is run\n" -"or vfolder is opened." -msgstr "" -"äÁÔÁ ÓÏÏÂÝÅÎÉÑ ÂÕÄÅÔ ÓÒÁ×ÎÉ×ÁÔØÓÑ ÌÉÂÏ\n" -"ÓÏ ×ÒÅÍÅÎÅÍ ÚÁÐÕÓËÁ ÆÉÌØÔÒÁ, ÌÉÂÏ \n" -"ÏÔËÒÙÔÉÑ ×ÉÒÔ.ÐÁÐËÉ." - -#: filter/filter-datespec.c:254 -msgid "" -"The message's date will be compared against\n" -"the time that you specify here." -msgstr "" -"äÁÔÁ ÓÏÏÂÝÅÎÉÑ ÂÕÄÅÔ ÓÒÁ×ÎÉ×ÁÔØÓÑ Ó ÄÁÔÏÊ,\n" -"ËÏÔÏÒÕÀ ×Ù ÕËÁÚÁÌÉ ÚÄÅÓØ." - -#: filter/filter-datespec.c:293 -msgid "" -"The message's date will be compared against\n" -"a time relative to when the filter is run;\n" -"\"a week ago\", for example." -msgstr "" -"äÁÔÁ ÓÏÏÂÝÅÎÉÑ ÂÕÄÅÔ ÓÒÁ×ÎÉ×ÁÔØÓÑ ÓÏ\n" -"×ÒÅÍÅÎÅÍ ÏÔÎÏÓÉÔÅÌØÎÏ ÚÁÐÕÓËÁ ÆÉÌØÔÒÁ;\n" -"ÎÁÐÒÉÍÅÒ \"ÎÅÄÅÌÀ ÎÁÚÁÄ\"." - -#. keep in sync with FilterDatespec_type! -#: filter/filter-datespec.c:328 -msgid "the current time" -msgstr "ÔÅËÕÝÅÅ ×ÒÅÍÑ" - -#: filter/filter-datespec.c:328 -msgid "a time you specify" -msgstr "ÕËÁÚÁÎÎÏÅ ×ÁÍÉ ×ÒÅÍÑ" - -#: filter/filter-datespec.c:329 -msgid "a time relative to the current time" -msgstr "×ÒÅÍÑ ÏÔÎÏÓÉÔÅÌØÎÏ ÔÅËÕÝÅÇÏ" - -#. The label -#: filter/filter-datespec.c:387 -msgid "Compare against" -msgstr "óÒÁ×ÎÉ×ÁÔØ Ó" - -#: filter/filter-datespec.c:661 -msgid "" -msgstr "<ÝÅÌËÎÉÔÅ ÚÄÅÓØ ÄÌÑ ×ÙÂÏÒÁ ÄÁÔÙ>" - -#: filter/filter-editor.c:156 filter/score-editor.c:126 -#: filter/vfolder-editor.c:152 -msgid "Add Rule" -msgstr "äÏÂÁ×ÉÔØ ÐÒÁ×ÉÌÏ" - -#: filter/filter-editor.c:188 -msgid "Edit Rule" -msgstr "ðÒÁ×ËÁ ÐÒÁ×ÉÌÁ" - -#: filter/filter-filter.c:397 filter/filter-rule.c:534 -msgid "Less" -msgstr "íÅÎØÛÅ" - -#: filter/filter-filter.c:400 filter/filter-rule.c:537 -msgid "More" -msgstr "âÏÌØÛÅ" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "÷ÙÂÒÁÔØ ÐÁÐËÕ" - -#: filter/filter-folder.c:205 -msgid "Enter folder URI" -msgstr "÷×ÅÓÔÉ URI ÐÁÐËÉ" - -#: filter/filter-folder.c:247 -msgid "" -msgstr "<ÝÅÌËÎÉÔÅ ÚÄÅÓØ ÄÌÑ ×ÙÂÏÒÁ ÐÁÐËÉ>" - -#: filter/filter-part.c:420 -msgid "Test" -msgstr "ðÒÏ×ÅÒËÁ" - -#: filter/score-editor.c:160 -msgid "Edit Score Rule" -msgstr "ðÒÁ×ËÁ ÐÒÁ×ÉÌÁ ÐÏÄÓÞÅÔÁ" - -#: filter/vfolder-editor.c:186 -msgid "Edit VFolder Rule" -msgstr "ðÒÁ×ËÁ ÐÒÁ×ÉÌÁ ×ÉÒÔ.ÐÁÐËÉ" - -#: mail/component-factory.c:187 -msgid "Cannot initialize Evolution's mail component." -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÐÏÞÔÏ×ÙÊ ËÏÍÐÏÎÅÎÔ \"ü×ÏÌÀÃÉÉ\"." - -#: mail/folder-browser-factory.c:33 -msgid "Get mail" -msgstr "ðÏÌÕÞÉÔØ ÐÏÞÔÕ" - -#: mail/folder-browser-factory.c:33 -msgid "Check for new mail" -msgstr "ðÒÏ×ÅÒÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" - -#: mail/folder-browser-factory.c:34 -msgid "Compose" -msgstr "óÏÚÄÁÔØ" - -#: mail/folder-browser-factory.c:34 -msgid "Compose a new message" -msgstr "óÏÚÄÁÔØ ÎÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ" - -#. GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), -#. save_msg, GNOME_STOCK_PIXMAP_SAVE), -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply" -msgstr "ïÔ×ÅÔÉÔØ" - -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply to the sender of this message" -msgstr "ïÔ×ÅÔÉÔØ ÏÔÐÒÁ×ÉÔÅÌÀ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to All" -msgstr "ïÔ×ÅÔÉÔØ ×ÓÅÍ" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to all recipients of this message" -msgstr "ïÔ×ÅÔÉÔØ ×ÓÅÍ ÐÏÌÕÞÁÔÅÌÑÍ ÜÔÏÇÏ ÓÏÏÂÝÅÎÉÑ" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward" -msgstr "ðÅÒÅÓÌÁÔØ" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward this message" -msgstr "ðÅÒÅÓÌÁÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ" - -#: mail/folder-browser-factory.c:45 -msgid "Move" -msgstr "ðÅÒÅÎÅÓÔÉ" - -#: mail/folder-browser-factory.c:45 -msgid "Move message to a new folder" -msgstr "ðÅÒÅÍÅÓÔÉÔØ ÓÏÏÂÝÅÎÉÅ × ÎÏ×ÕÀ ÐÁÐËÕ" - -#: mail/folder-browser-factory.c:46 -msgid "Copy message to a new folder" -msgstr "óËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ × ÎÏ×ÕÀ ÐÁÐËÕ" - -#: mail/folder-browser-factory.c:48 mail/mail-view.c:145 -msgid "Print the selected message" -msgstr "òÁÓÐÅÞÁÔÁÔØ ×ÙÄÅÌÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" - -#: mail/folder-browser-factory.c:50 mail/mail-view.c:147 -msgid "Delete this message" -msgstr "õÄÁÌÉÔØ ÜÔÏ ÓÏÏÂÝÅÎÉÅ" - -#: mail/folder-browser-factory.c:71 -#, c-format -msgid "Run filter \"%s\"" -msgstr "ðÒÉÍÅÎÉÔØ ÆÉÌØÔÒ \"%s\"" - -#: mail/folder-browser-factory.c:127 -msgid "_Threaded Message List" -msgstr "óÐÉÓÏË ÐÏÄÛÉÔÙÈ ÓÏÏÂÝÅÎÉÊ" - -#: mail/folder-browser-factory.c:137 -msgid "_Print Message" -msgstr "ðÅÞÁÔØ ÓÏÏÂÝÅÎÉÑ" - -#: mail/folder-browser-factory.c:146 -msgid "F_older" -msgstr "ðÁÐËÁ" - -#: mail/folder-browser-factory.c:152 -msgid "_Mark all as Read" -msgstr "ðÏÍÅÔÉÔØ ×ÓÅ ËÁË ÐÒÏÞÔÅÎÎÏÅ" - -#: mail/folder-browser-factory.c:158 -msgid "_Expunge" -msgstr "÷ÙÞÅÒËÎÕÔØ" - -#: mail/folder-browser-factory.c:165 -msgid "_Configure Folder" -msgstr "îÁÓÔÒÏÉÔØ ÐÁÐËÕ" - -#: mail/folder-browser-factory.c:172 -msgid "_Message" -msgstr "óÏÏÂÝÅÎÉÅ" - -#: mail/folder-browser-factory.c:178 -msgid "E_dit" -msgstr "ðÒÁ×ËÁ" - -#: mail/folder-browser-factory.c:192 -msgid "Mail _Filters ..." -msgstr "ðÏÞÔÏ×ÙÅ ÆÉÌØÔÒÙ ..." - -#: mail/folder-browser-factory.c:199 -msgid "_vFolder Editor ..." -msgstr "òÅÄÁËÔÏÒ ×ÉÒÔÕÁÌØÎÙÈ ÐÁÐÏË ..." - -#: mail/folder-browser-factory.c:206 -msgid "_Mail Configuration ..." -msgstr "îÁÓÔÒÏÊËÁ ÐÏÞÔÙ ..." - -#: mail/folder-browser-factory.c:213 -msgid "Forget _Passwords" -msgstr "úÁÂÙÔØ ÐÁÒÏÌÉ" - -#: mail/folder-browser.c:371 -msgid "Save" -msgstr "óÏÈÒÁÎÉÔØ" - -#: mail/mail-callbacks.c:134 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"üÔÏ ÓÏÏÂÝÅÎÉÅ ÎÅ ÉÍÅÅÔ ÔÅÍÙ.\n" -"ðÏÓÌÁÔØ ÅÇÏ?" - -#: mail/mail-callbacks.c:166 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"÷Ù ÄÏÌÖÎÙ ÎÁÓÔÒÏÉÔØ ÉÄÅÎÔÉÆÉËÁÃÉÀ\n" -"ÄÏ ÔÏÇÏ ËÁË ×Ù ÓÍÏÖÅÔÅ ÐÏÓÌÁÔØ ÐÏÞÔÕ." - -#: mail/mail-callbacks.c:182 -msgid "" -"You need to configure a mail transport\n" -"before you can send mail." -msgstr "" -"÷Ù ÄÏÌÖÎÙ ÎÁÓÔÒÏÉÔØ ÐÅÒÅÄÁÞÕ ÐÏÞÔÙ\n" -"ÄÏ ÔÏÇÏ ËÁË ×Ù ÓÍÏÖÅÔÅ ÐÏÓÌÁÔØ ÐÏÞÔÕ." - -#: mail/mail-callbacks.c:389 -msgid "Move message(s) to" -msgstr "ðÅÒÅÍÅÓÔÉÔØ ÓÏÏÂÝÅÎÉÅ ×" - -#: mail/mail-callbacks.c:391 -msgid "Copy message(s) to" -msgstr "óËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ ×" - -#: mail/mail-callbacks.c:448 -msgid "" -"You may only edit messages saved\n" -"in the Drafts folder." -msgstr "" -"÷Ù ÍÏÖÅÔÅ ÐÒÁ×ÉÔØ ÔÏÌØËÏ ÓÏÏÂÝÅÎÉÑ\n" -"ÓÏÈÒÁÎÅÎÎÙÅ × ÐÁÐËÅ \"þÅÒÎÏ×ÉËÉ\"." - -#: mail/mail-callbacks.c:536 -#, c-format -msgid "" -"Error loading filter information:\n" -"%s" -msgstr "" -"ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÉÎÆÏÒÍÁÃÉÉ ÆÉÌØÔÒÁ:\n" -"%s" - -#: mail/mail-config-gui.c:431 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"÷×ÅÄÉÔÅ ×ÁÛÅ ÉÍÑ É ÜÌ.ÁÄÒÅÓ, ËÏÔÏÒÙÅ ÂÕÄÕÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÄÌÑ ÉÓÈÏÄÑÝÅÊ " -"ÐÏÞÔÙ. ÷Ù ÍÏÖÅÔÅ ÔÁËÖÅ, ÄÏÐÏÌÎÉÔÅÌØÎÏ, ××ÅÓÔÉ ÎÁÚ×ÁÎÉÅ ×ÁÛÅÊ ÏÒÇÁÎÉÚÁÃÉÉ É " -"ÎÁÚ×ÁÎÉÅ ÆÁÊÌÁ, × ËÏÔÏÒÏÍ ÈÒÁÎÉÔÓÑ ×ÁÛÁ ÐÏÄÐÉÓØ." - -#: mail/mail-config-gui.c:444 -msgid "Full name:" -msgstr "ðÏÌÎÏÅ ÉÍÑ:" - -#: mail/mail-config-gui.c:468 -msgid "Email address:" -msgstr "üÌ.ÁÄÒÅÓ:" - -#: mail/mail-config-gui.c:483 -msgid "Organization:" -msgstr "ïÒÇÁÎÉÚÁÃÉÑ:" - -#: mail/mail-config-gui.c:494 -msgid "Signature file:" -msgstr "æÁÊÌ ÐÏÄÐÉÓÉ:" - -#: mail/mail-config-gui.c:499 mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "æÁÊÌ ÐÏÄÐÉÓÉ" - -#: mail/mail-config-gui.c:898 -msgid "Server:" -msgstr "óÅÒ×ÅÒ:" - -#: mail/mail-config-gui.c:904 -msgid "Username:" -msgstr "éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ:" - -#: mail/mail-config-gui.c:910 -msgid "Path:" -msgstr "ðÕÔØ:" - -#: mail/mail-config-gui.c:918 -msgid "Authentication:" -msgstr "éÄÅÎÔÉÆÉËÁÃÉÑ:" - -#: mail/mail-config-gui.c:930 -msgid "Detect supported types..." -msgstr "ïÐÒÅÄÅÌÉÔØ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÔÉÐÙ..." - -#: mail/mail-config-gui.c:955 -msgid "Don't delete messages from server" -msgstr "îÅ ÕÄÁÌÑÔØ ÓÏÏÂÝÅÎÉÑ Ó ÓÅÒ×ÅÒÁ" - -#: mail/mail-config-gui.c:967 -msgid "Test Settings" -msgstr "õÓÔÁÎÏ×ËÉ ÔÅÓÔÁ" - -#: mail/mail-config-gui.c:1099 mail/mail-config-gui.c:1147 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"÷ÙÂÅÒÉÔÅ ×ÉÄ ÉÓÐÏÌØÚÕÅÍÏÇÏ ×ÁÍÉ ÐÏÞÔÏ×ÏÇÏ ÓÅÒ×ÅÒÁ É ××ÅÄÉÔÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÕÀ " -"ÉÎÆÏÒÍÁÃÉÀ Ï ÎÅÍ.\n" -"\n" -"åÓÌÉ ÓÅÒ×ÅÒ ÔÒÅÂÕÅÔ ÉÄÅÎÔÉÆÉËÁÃÉÉ, ÔÏ ÝÅÌËÎÉÔÅ ÎÁ ËÎÏÐËÅ \"ïÐÒÅÄÅÌÉÔØ " -"ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÔÉÐÙ...\" ÐÏÓÌÅ ××ÏÄÁ ÏÓÔÁÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ." - -#: mail/mail-config-gui.c:1123 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"÷ÙÂÅÒÉÔÅ ÉÓÐÏÌØÚÕÅÍÙÊ ×ÁÍÉ ÓÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ É ××ÅÄÉÔÅ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÕÀ " -"ÉÎÆÏÒÍÁÃÉÀ Ï ÎÅÍ.\n" -"\n" -"åÓÌÉ ÓÅÒ×ÅÒ ÔÒÅÂÕÅÔ ÉÄÅÎÔÉÆÉËÁÃÉÉ, ×Ù ÍÏÖÅÔÅ ÝÅÌËÎÕÔØ ÎÁ ËÎÏÐËÅ \"ïÐÒÅÄÅÌÉÔØ " -"ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÔÉÐÙ...\" ÐÏÓÌÅ ××ÏÄÁ ÏÓÔÁÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ." - -#: mail/mail-config-gui.c:1142 -msgid "Mail transport type:" -msgstr "ôÉÐ ÐÅÒÅÄÁÞÉ ÐÏÞÔÙ:" - -#: mail/mail-config-gui.c:1197 -msgid "Edit Identity" -msgstr "ðÒÁ×ËÁ ÉÍÅÎÏ×ÁÎÉÑ" - -#: mail/mail-config-gui.c:1199 -msgid "Add Identity" -msgstr "äÏÂÁ×ÉÔØ ÉÍÅÎÏ×ÁÎÉÅ" - -#: mail/mail-config-gui.c:1293 -msgid "Edit Source" -msgstr "ðÒÁ×ËÁ ÉÓÔÏÞÎÉËÁ" - -#: mail/mail-config-gui.c:1295 -msgid "Add Source" -msgstr "äÏÂÁ×ÉÔØ ÉÓÔÏÞÎÉË" - -#: mail/mail-config-gui.c:1392 -msgid "Edit News Server" -msgstr "ðÒÁ×ËÁ ÓÅÒ×ÅÒÁ ÎÏ×ÏÓÔÅÊ" - -#: mail/mail-config-gui.c:1394 -msgid "Add News Server" -msgstr "äÏÂÁ×ÉÔØ ÓÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ" - -#: mail/mail-config-gui.c:2243 -msgid "The connection was successful!" -msgstr "óÏÅÄÉÎÅÎÉÅ ÂÙÌÏ ÕÓÐÅÛÎÙÍ!" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "éÍÅÎÏ×ÁÎÉÑ" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "ïÒÇÁÎÉÚÁÃÉÑ" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "ðÒÁ×ËÁ" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "éÓÔÏÞÎÉËÉ" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "éÓÔÏÞÎÉËÉ ÐÏÞÔÙ" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "ðÅÒÅÄÁÞÁ ÐÏÞÔÙ" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "óÅÒ×ÅÒÙ ÎÏ×ÏÓÔÅÊ" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "éÓÔÏÞÎÉËÉ ÎÏ×ÏÓÔÅÊ" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "ïÔÐÒÁ×ÉÔØ ÐÏÞÔÕ × ÆÏÒÍÁÔÅ HTML" - -#: mail/mail-config.glade.h:27 -msgid "Mark message as seen [ms]: " -msgstr "ïÔÍÅÔÉÔØ ÓÏÏÂÝÅÎÉÅ ËÁË ÐÒÏÓÍÏÔÒÅÎÎÏÅ [ÍÓ]:" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "îÁÓÔÒÏÊËÁ ÐÏÞÔÙ" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ Ë ÐÏÍÏÝÎÉËÕ ÐÏ ÎÁÓÔÒÏÊËÅ ÐÏÞÔÙ × Evolution!\n" -"÷×ÅÄÑ ÎÅËÏÔÏÒÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÁÛÉÈ ÐÏÞÔÏ×ÙÈ ÎÁÓÔÒÏÊËÁÈ\n" -"×Ù ÓÍÏÖÅÔÅ ÎÁÞÁÔØ ÐÏÓÙÌÁÔØ É ÐÒÉÎÉÍÁÔØ ÐÏÞÔÕ.\n" -"äÌÑ ÐÒÏÄÏÌÖÅÎÉÑ ÎÁÖÍÉÔÅ \"óÌÅÄ.\"." - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "éÍÅÎÏ×ÁÎÉÅ" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "éÓÔÏÞÎÉË ÐÏÞÔÙ" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"îÁÓÔÒÏÊËÁ ×ÁÛÅÊ ÐÏÞÔÙ ÚÁ×ÅÒÛÅÎÁ.\n" -"îÁÖÍÉÔÅ \"úÁ×ÅÒÛÉÔØ\", ÞÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÎÏ×ÙÅ ÕÓÔÁÎÏ×ËÉ." - -#: mail/mail-crypto.c:338 mail/mail-crypto.c:418 -msgid "Please enter your PGP/GPG passphrase." -msgstr "ðÏÖÁÌÕÊÓÔÁ ××ÅÄÉÔÅ ×ÁÛÕ ÐÁÒÏÌØÎÕÀ ÆÒÁÚÕ PGP/GPG." - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:422 -msgid "No password provided." -msgstr "ðÁÒÏÌØ ÎÅ ÐÒÅÄÏÓÔÁ×ÌÅÎ." - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:428 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ËÁÎÁÌ Ë GPG/PGP: %s" - -#: mail/mail-local.c:257 -#, c-format -msgid "Changing folder \"%s\" to \"%s\" format" -msgstr "éÚÍÅÎÅÎÉÅ ÐÁÐËÉ \"%s\" × ÆÏÒÍÁÔ \"%s\"" - -#: mail/mail-local.c:261 -#, c-format -msgid "Change folder \"%s\" to \"%s\" format" -msgstr "éÚÍÅÎÉÔØ ÐÁÐËÕ \"%s\" × ÆÏÒÍÁÔ \"%s\"" - -#: mail/mail-ops.c:74 -#, c-format -msgid "Fetching email from %s" -msgstr "ðÏÌÕÞÅÎÉÅ ÐÏÞÔÙ c %s" - -#: mail/mail-ops.c:76 -#, c-format -msgid "Fetch email from %s" -msgstr "ðÏÌÕÞÉÔØ ÐÏÞÔÕ c %s" - -#: mail/mail-ops.c:87 -msgid "You have no remote mail source configured to fetch mail from." -msgstr "" -"õ ×ÁÓ ÎÅ ÎÁÓÔÒÏÅÎ ÉÓÔÏÞÎÉË ÐÏÞÔÙ, ÉÚ ËÏÔÏÒÏÇÏ ÅÅ ÍÏÖÎÏ ÂÙÌÏ ÂÙ ÐÏÌÕÞÉÔØ." - -#: mail/mail-ops.c:97 -msgid "Bad folder passed to fetch_mail" -msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÐÁÐËÁ ÐÅÒÅÄÁÎÁ × fetch_mail" - -#: mail/mail-ops.c:165 -msgid "There is no new mail." -msgstr "îÅÔ ÎÏ×ÏÊ ÐÏÞÔÙ." - -#: mail/mail-ops.c:234 -#, c-format -msgid "Sending \"%s\"" -msgstr "ïÔÐÒÁ×ËÁ \"%s\"" - -#: mail/mail-ops.c:239 -msgid "Sending a message without a subject" -msgstr "ïÔÐÒÁ×ËÁ ÓÏÏÂÝÅÎÉÑ ÂÅÚ ÔÅÍÙ" - -#: mail/mail-ops.c:242 -#, c-format -msgid "Send \"%s\"" -msgstr "ðÏÓÌÁÔØ \"%s\"" - -#: mail/mail-ops.c:245 -msgid "Send a message without a subject" -msgstr "ðÏÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ ÂÅÚ ÔÅÍÙ" - -#: mail/mail-ops.c:410 -#, c-format -msgid "Expunging \"%s\"" -msgstr "÷ÙÞÅÒËÉ×ÁÎÉÅ \"%s\"" - -#: mail/mail-ops.c:412 -#, c-format -msgid "Expunge \"%s\"" -msgstr "÷ÙÞÅÒËÎÕÔØ \"%s\"" - -#: mail/mail-ops.c:484 -#, c-format -msgid "Moving messages from \"%s\" into \"%s\"" -msgstr "ðÅÒÅÍÅÝÅÎÉÅ ÓÏÏÂÝÅÎÉÊ ÉÚ \"%s\" × \"%s\"" - -#: mail/mail-ops.c:486 -#, c-format -msgid "Copying messages from \"%s\" into \"%s\"" -msgstr "ëÏÐÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÊ ÉÚ \"%s\" × \"%s\"" - -#: mail/mail-ops.c:489 -#, c-format -msgid "Move messages from \"%s\" into \"%s\"" -msgstr "ðÅÒÅÍÅÓÔÉÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ \"%s\" × \"%s\"" - -#: mail/mail-ops.c:491 -#, c-format -msgid "Copy messages from \"%s\" into \"%s\"" -msgstr "óËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ \"%s\" × \"%s\"" - -#: mail/mail-ops.c:637 -#, c-format -msgid "Marking messages in folder \"%s\"" -msgstr "ðÏÍÅÞÁÎÉÅ ÓÏÏÂÝÅÎÉÊ × ÐÁÐËÅ \"%s\"" - -#: mail/mail-ops.c:640 -#, c-format -msgid "Mark messages in folder \"%s\"" -msgstr "ðÏÍÅÔÉÔØ ÓÏÏÂÝÅÎÉÑ × ÐÁÐËÅ \"%s\"" - -#: mail/mail-ops.c:769 -#, c-format -msgid "Scanning folders in \"%s\"" -msgstr "óÞÉÔÙ×ÁÎÉÅ ÐÁÐÏË × \"%s\"" - -#: mail/mail-ops.c:772 -#, c-format -msgid "Scan folders in \"%s\"" -msgstr "óÞÉÔÁÔØ ÐÁÐËÉ × \"%s\"" - -#: mail/mail-ops.c:859 -msgid "(No description)" -msgstr "(îÅÔ ÏÐÉÓÁÎÉÑ)" - -#: mail/mail-ops.c:922 -#, c-format -msgid "Attaching messages from folder \"%s\"" -msgstr "ðÒÉÓÏÅÄÉÎÅÎÉÅ ÓÏÏÂÝÅÎÉÊ ÉÚ ÐÁÐËÉ \"%s\"" - -#: mail/mail-ops.c:925 -#, c-format -msgid "Attach messages from \"%s\"" -msgstr "ðÒÉÓÏÅÄÉÎÉÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ \"%s\"" - -#: mail/mail-ops.c:1051 -#, c-format -msgid "Forwarding messages \"%s\"" -msgstr "ðÅÒÅÓÙÌËÁ ÓÏÏÂÝÅÎÉÊ \"%s\"" - -#: mail/mail-ops.c:1056 -msgid "Forwarding a message without a subject" -msgstr "ðÅÒÅÓÙÌËÁ ÓÏÏÂÝÅÎÉÑ ÂÅÚ ÔÅÍÙ" - -#: mail/mail-ops.c:1059 -#, c-format -msgid "Forward message \"%s\"" -msgstr "ðÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ \"%s\"" - -#: mail/mail-ops.c:1064 -msgid "Forward a message without a subject" -msgstr "ðÅÒÅÓÌÁÔØ ÓÏÏÂÝÅÎÉÅ ÂÅÚ ÔÅÍÙ" - -#: mail/mail-ops.c:1129 -msgid "" -"Failed to generate mime part from message while generating forwarded message." -msgstr "" -"îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ mime-ÞÁÓÔØ ÉÚ ÓÏÏÂÝÅÎÉÑ ÐÒÉ ÓÏÚÄÁÎÉÉ ÐÅÒÅÓÙÌÁÅÍÏÇÏ " -"ÓÏÏÂÝÅÎÉÑ." - -#: mail/mail-ops.c:1218 -#, c-format -msgid "Loading \"%s\"" -msgstr "úÁÇÒÕÚËÁ \"%s\"" - -#: mail/mail-ops.c:1220 -#, c-format -msgid "Load \"%s\"" -msgstr "úÁÇÒÕÚÉÔØ \"%s\"" - -#: mail/mail-ops.c:1339 -#, c-format -msgid "Creating \"%s\"" -msgstr "óÏÚÄÁÎÉÅ \"%s\"" - -#: mail/mail-ops.c:1341 -#, c-format -msgid "Create \"%s\"" -msgstr "óÏÚÄÁÔØ \"%s\"" - -#: mail/mail-ops.c:1412 -msgid "Exception while reporting result to shell component listener." -msgstr "" - -#: mail/mail-ops.c:1465 -#, c-format -msgid "Synchronizing \"%s\"" -msgstr "óÉÎÈÒÏÎÉÚÁÃÉÑ \"%s\"" - -#: mail/mail-ops.c:1467 -#, c-format -msgid "Synchronize \"%s\"" -msgstr "óÉÎÈÒÏÎÉÚÏ×ÁÔØ \"%s\"" - -#: mail/mail-ops.c:1543 -#, c-format -msgid "Displaying message UID \"%s\"" -msgstr "ðÏËÁÚÁÔØ UID ÓÏÏÂÝÅÎÉÑ \"%s\"" - -#: mail/mail-ops.c:1546 -msgid "Clearing message display" -msgstr "ïÞÉÓÔËÁ ÏÔÏÂÒÁÖÅÎÉÑ ÓÏÏÂÝÅÎÉÑ" - -#: mail/mail-ops.c:1549 -#, c-format -msgid "Display message UID \"%s\"" -msgstr "ðÏËÁÚÁÔØ UID ÓÏÏÂÝÅÎÉÑ \"%s\"" - -#: mail/mail-ops.c:1552 -msgid "Clear message display" -msgstr "ïÞÉÓÔÉÔØ ÏÔÏÂÒÁÖÅÎÉÅ ÓÏÏÂÝÅÎÉÑ" - -#: mail/mail-ops.c:1679 -#, c-format -msgid "Opening messages from folder \"%s\"" -msgstr "ïÔËÒÙÔÉÅ ÓÏÏÂÝÅÎÉÊ ÉÚ ÐÁÐËÉ \"%s\"" - -#: mail/mail-ops.c:1682 -#, c-format -msgid "Open messages from \"%s\"" -msgstr "ïÔËÒÙÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ \"%s\"" - -#: mail/mail-ops.c:1794 -msgid "Loading Draftbox" -msgstr "úÁÇÒÕÚËÁ ÑÝÉËÁ ÞÅÒÎÏ×ÉËÏ×" - -#: mail/mail-ops.c:1796 -msgid "Load Draftbox" -msgstr "úÁÇÒÕÚÉÔØ ÑÝÉË ÞÅÒÎÏ×ÉËÏ×" - -#: mail/mail-ops.c:1864 -#, c-format -msgid "Viewing messages from folder \"%s\"" -msgstr "ðÒÏÓÍÏÔÒ ÓÏÏÂÝÅÎÉÊ ÉÚ ÐÁÐËÉ \"%s\"" - -#: mail/mail-ops.c:1867 -#, c-format -msgid "View messages from \"%s\"" -msgstr "ðÒÏÓÍÏÔÒÅÔØ ÓÏÏÂÝÅÎÉÑ ÉÚ \"%s\"" - -#: mail/mail-threads.c:274 -#, c-format -msgid "" -"Error while preparing to %s:\n" -"%s" -msgstr "" -"ïÛÉÂËÁ ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ Ë %s:\n" -"%s" - -#: mail/mail-threads.c:627 -#, c-format -msgid "" -"Error while `%s':\n" -"%s" -msgstr "" -"ïÛÉÂËÁ ÐÒÉ \"%s\":\n" -"%s" - -#: mail/mail-threads.c:680 -msgid "Incomplete message written on pipe!" -msgstr "îÅÐÏÌÎÏÅ ÓÏÏÂÝÅÎÉÅ ÚÁÐÉÓÁÎÏ × ËÁÎÁÌ!" - -#: mail/mail-threads.c:684 -msgid "Error reading commands from dispatching thread." -msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ËÏÍÁÎÄ ÉÚ ÐÒÏ×ÅÒÑÅÍÏÊ ÎÉÔÉ." - -#: mail/mail-threads.c:749 -msgid "Corrupted message from dispatching thread?" -msgstr "ðÏ×ÒÅÖÄÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ ÉÚ ÐÒÏ×ÅÒÑÅÍÏÊ ÎÉÔÉ?" - -#: mail/mail-threads.c:861 -msgid "Could not create dialog box." -msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÏËÎÏ ÄÉÁÌÏÇÁ." - -#: mail/mail-threads.c:872 -msgid "User cancelled query." -msgstr "ðÏÌØÚÏ×ÁÔÅÌØ ÏÔÍÅÎÉÌ ÚÁÐÒÏÓ." - -#: mail/mail-tools.c:205 -#, c-format -msgid "Couldn't create temporary mbox `%s': %s" -msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ mbox \"%s\": %s" - -#: mail/mail-tools.c:290 -#, c-format -msgid "" -"Could not read UID cache file \"%s\". You may receive duplicate messages." -msgstr "îÅ ÕÄÁÌÏÓØ ÐÒÏÞÅÓÔØ UID ËÜÛ-ÆÁÊÌ \"%s\". ÷Ù ÍÏÖÅÔÅ ÐÏÌÕÞÉÔØ ÄÕÂÌÉËÁÔÙ ÓÏÏÂÝÅÎÉÊ." - -#: mail/mail-tools.c:373 -#, c-format -msgid "[%s] %s" -msgstr "[%s] %s" - -#: mail/mail-tools.c:375 -#, c-format -msgid "[%s] (forwarded message)" -msgstr "[%s] (ÐÅÒÅÓÌÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ)" - -#: mail/mail-tools.c:384 -msgid "Fwd: (no subject)" -msgstr "ðÅÒÅÓÌ.: (ÎÅÔ ÔÅÍÙ)" - -#: mail/mail-tools.c:419 -#, c-format -msgid "Forwarded message - %s" -msgstr "ðÅÒÅÓÌÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ - %s" - -#: mail/mail-tools.c:421 -msgid "Forwarded message (no subject)" -msgstr "ðÅÒÅÓÌÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ (ÂÅÚ ÔÅÍÙ)" - -#: mail/mail-tools.c:532 -#, c-format -msgid "Couldn't stat(2) movemail folder %s" -msgstr "" - -#: mail/mail-tools.c:633 -#, c-format -msgid "Don't know protocol to open URI `%s'" -msgstr "îÅ ÉÚ×ÅÓÔÅÎ ÐÒÏÔÏËÏÌ ÄÌÑ ÏÔËÒÙÔÉÑ URI \"%s\"" - -#: mail/mail-tools.c:662 -#, c-format -msgid "" -"Cannot open location `%s':\n" -"%s" -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÐÏÌÏÖÅÎÉÅ \"%s\":\n" -"%s" - -#: mail/mail-vfolder.c:298 -msgid "New VFolder" -msgstr "îÏ×ÁÑ ×ÉÒÔ.ÐÁÐËÁ" - -#: mail/message-list.c:490 -msgid "Online Status" -msgstr "ðÏÄËÌÀÞÅÎÎÏÅ ÓÏÓÔÏÑÎÉÅ" - -#: mail/message-list.c:526 -msgid "From" -msgstr "ïÔ" - -#: mail/message-list.c:533 -msgid "Subject" -msgstr "ôÅÍÁ" - -#: mail/message-list.c:540 -msgid "Date" -msgstr "äÁÔÁ" - -#: mail/message-list.c:547 -msgid "Received" -msgstr "ðÏÌÕÞÅÎÏ" - -#: mail/message-list.c:554 -msgid "To" -msgstr "ëÏÍÕ" - -#: mail/message-list.c:561 -msgid "Size" -msgstr "òÁÚÍÅÒ" - -#: notes/component-factory.c:27 -msgid "Create a new note" -msgstr "óÏÚÄÁÔØ ÎÏ×ÕÀ ÚÁÐÉÓØ" - -#: notes/component-factory.c:148 -msgid "Cannot initialize Evolution's notes component." -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ËÏÍÐÏÎÅÎÔ \"âÌÏËÎÏÔ\" Evolution." - -#: notes/main.c:30 -msgid "Notes Component: Could not initialize bonobo" -msgstr "ëÏÍÐÏÎÅÎÔ \"âÌÏËÎÏÔ\": îÅ ÕÄÁÌÏÓØ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ Bonobo" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "õÓÔÁÎÏ×ËÁ \"ü×ÏÌÀÃÉÉ\"" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "ðÏÈÏÖÅ ×Ù ÚÁÐÕÓÔÉÌÉ \"ü×ÏÌÀÃÉÀ\" × ÐÅÒ×ÙÅ." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"ðÏÖÁÌÕÊÓÔÁ ÎÁÖÍÉÔÅ \"ïË\", ÞÔÏÂÙ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÅ ÆÁÊÌÙ " -"\"ü×ÏÌÀÃÉÉ\" ×" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ\n" -"%s\n" -"ïÛÉÂËÁ: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÓËÏÐÉÒÏ×ÁÔØ ÆÁÊÌÙ ×\n" -"\"%s\"." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "æÁÊÌÙ \"ü×ÏÌÀÃÉÉ\" ÕÓÐÅÛÎÏ ÕÓÔÁÎÏ×ÌÅÎÙ." - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"æÁÊÌ \"%s\" ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ.\n" -"ðÏÖÁÌÕÊÓÔÁ, ÐÅÒÅÍÅÓÔÉÔÅ ÅÇÏ, ÞÔÏÂÙ ÐÏÚ×ÏÌÉÔØ\n" -"ÕÓÔÁÎÏ×ÉÔØ ÆÁÊÌÙ ÐÏÌØÚÏ×ÁÔÅÌÑ Evolution." - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"æÁÊÌ \"%s\" ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ Evolution.\n" -"ðÏÖÁÌÕÊÓÔÁ, ÕÄÁÌÉÔÅ ÅÇÏ, ÞÔÏÂÙ ÐÏÚ×ÏÌÉÔØ\n" -"ÕÓÔÁÎÏ×ÉÔØ ÆÁÊÌÙ ÐÏÌØÚÏ×ÁÔÅÌÑ Evolution." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÕËÁÚÁÎÎÕÀ ÐÁÐËÕ:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "õËÁÚÁÎÎÏÅ ÉÍÑ ÐÁÐËÉ ÎÅ ÄÏÐÕÓÔÉÍÏ." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "ü×ÏÌÀÃÉÑ - óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"ôÉÐ ×ÙÂÒÁÎÎÏÊ ÐÁÐËÉ ÎÅ ÐÏÄÈÏÄÉÔ ÄÌÑ\n" -"ÚÁÐÒÏÛÅÎÎÏÇÏ ÄÅÊÓÔ×ÉÑ." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "îÏ×ÁÑ..." - -#: shell/e-shell-folder-title-bar.c:451 shell/e-shell-folder-title-bar.c:452 -msgid "(Untitled)" -msgstr "(âÅÚ ÚÁÇÏÌÏ×ËÁ)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug-buddy ÎÅ ÂÙÌ ÎÁÊÄÅÎ × ×ÁÛÅÍ $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Bug-buddy ÎÅ ÍÏÖÅÔ ÂÙÔØ ÚÁÐÕÝÅÎ." - -#: shell/e-shell-view-menu.c:167 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:169 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"\"ü×ÏÌÀÃÉÑ\" ÜÔÏ ÎÁÂÏÒ ÐÒÉÌÏÖÅÎÉÊ ÜÌÅËÔÒÏÎÎÏÊ ÐÏÞÔÙ,\n" -"×ÅÄÅÎÉÑ ËÁÌÅÎÄÁÒÅÊ É ËÏÎÔÁËÔÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÄÌÑ\n" -"ÇÒÕÐÐÏ×ÏÊ ÒÁÂÏÔÙ × ÓÒÅÄÅ GNOME." - -#: shell/e-shell-view-menu.c:319 -msgid "Go to folder..." -msgstr "ðÅÒÅÊÔÉ Ë ÐÁÐËÅ..." - -#: shell/e-shell-view-menu.c:377 -msgid "_New" -msgstr "îÏ×ÏÅ" - -#: shell/e-shell-view-menu.c:389 -msgid "_Folder" -msgstr "ðÁÐËÁ" - -#: shell/e-shell-view-menu.c:395 -msgid "Evolution bar _shortcut" -msgstr "óÔÒÏËÁ ÑÒÌÙËÏ× Evolution" - -#: shell/e-shell-view-menu.c:404 -msgid "_Mail message (FIXME)" -msgstr "ðÏÞÔÏ×ÏÅ ÓÏÏÂÝÅÎÉÅ (FIXME)" - -#: shell/e-shell-view-menu.c:410 -msgid "_Appointment (FIXME)" -msgstr "÷ÓÔÒÅÞÁ (FIXME)" - -#: shell/e-shell-view-menu.c:416 -msgid "_Contact (FIXME)" -msgstr "ëÏÎÔÁËÔ (FIXME)" - -#: shell/e-shell-view-menu.c:422 -msgid "_Task (FIXME)" -msgstr "úÁÄÁÎÉÅ (FIXME)" - -#: shell/e-shell-view-menu.c:444 -msgid "_Go to Folder..." -msgstr "ðÅÒÅÊÔÉ Ë ÐÁÐËÅ..." - -#: shell/e-shell-view-menu.c:445 -msgid "Display a different folder" -msgstr "ðÏËÁÚÁÔØ ÄÒÕÇÕÀ ÐÁÐËÕ" - -#: shell/e-shell-view-menu.c:452 -msgid "_Create New Folder..." -msgstr "óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ..." - -#: shell/e-shell-view-menu.c:453 shell/e-shell-view-menu.c:465 -msgid "Create a new folder" -msgstr "óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ" - -#: shell/e-shell-view-menu.c:464 -msgid "E_xit..." -msgstr "÷ÙÈÏÄ..." - -#: shell/e-shell-view-menu.c:495 -msgid "Show _Shortcut Bar" -msgstr "ðÏËÁÚÁÔØ ÓÔÒÏËÕ ÚÁËÌÁÄÏË" - -#: shell/e-shell-view-menu.c:496 -msgid "Show the shortcut bar" -msgstr "ðÏËÁÚÁÔØ ÓÔÒÏËÕ ÚÁËÌÁÄÏË" - -#: shell/e-shell-view-menu.c:501 -msgid "Show _Folder Bar" -msgstr "ðÏËÁÚÁÔØ ÓÔÒÏËÕ ÐÁÐÏË" - -#: shell/e-shell-view-menu.c:502 -msgid "Show the folder bar" -msgstr "ðÏËÁÚÁÔØ ÓÔÒÏËÕ ÐÁÐÏË" - -#: shell/e-shell-view-menu.c:513 -msgid "_Settings" -msgstr "õÓÔÁÎÏ×ËÉ" - -#: shell/e-shell-view-menu.c:524 -msgid "_Help" -msgstr "óÐÒÁ×ËÁ" - -#: shell/e-shell-view-menu.c:530 -msgid "Help _Index" -msgstr "éÎÄÅËÓ ÓÐÒÁ×ËÉ" - -#: shell/e-shell-view-menu.c:537 -msgid "Getting _Started" -msgstr "÷×ÅÄÅÎÉÅ" - -#: shell/e-shell-view-menu.c:544 -msgid "Using the _Mailer" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ ÐÏÞÔÏ×ÏÊ ÐÒÏÇÒÁÍÍÙ" - -#: shell/e-shell-view-menu.c:551 -msgid "Using the _Calendar" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ ËÁÌÅÎÄÁÒÑ" - -#: shell/e-shell-view-menu.c:558 -msgid "Using the C_ontact Manager" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ ÄÉÓÐÅÔÞÅÒÁ ËÏÎÔÁËÔÏ×" - -#: shell/e-shell-view-menu.c:568 -msgid "_Submit Bug Report" -msgstr "ïÔÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ" - -#: shell/e-shell-view-menu.c:569 -msgid "Submit bug report using Bug Buddy" -msgstr "ïÐÒÁ×ÉÔØ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ ÞÅÒÅÚ bug-buddy" - -#: shell/e-shell-view-menu.c:578 -msgid "_About Evolution..." -msgstr "ï ÐÒÏÇÒÁÍÍÅ Evolution..." - -#: shell/e-shell-view-menu.c:579 -msgid "Show information about Evolution" -msgstr "ðÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÐÒÏÇÒÁÍÍÅ Evolution" - -#: shell/e-shell-view.c:122 -msgid "(No folder displayed)" -msgstr "(ðÁÐËÉ ÎÅ ÐÏËÁÚÁÎÙ)" - -#: shell/e-shell-view.c:350 -msgid "Folders" -msgstr "ðÁÐËÉ" - -#: shell/e-shell-view.c:879 -#, c-format -msgid "Evolution - %s" -msgstr "ü×ÏÌÀÃÉÑ - %s" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÌÏËÁÌØÎÏÅ ÈÒÁÎÉÌÉÝÅ -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "íÁÌÅÎØËÉÅ ÐÉËÔÏÇÒÁÍÍÙ" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "ðÏËÁÚÁÔØ ÚÁËÌÁÄËÉ ËÁË ÍÁÌÅÎØËÉÅ ÐÉËÔÏÇÒÁÍÍÙ" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "âÏÌØÛÉÅ ÐÉËÔÏÇÒÁÍÍÙ" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "ðÏËÁÚÁÔØ ÚÁËÌÁÄËÉ ËÁË ÂÏÌØÛÉÅ ÐÉËÔÏÇÒÁÍÍÙ" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "áËÔÉ×ÉÒÏ×ÁÔØ" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "áËÔÉ×ÉÒÏ×ÁÔØ ÜÔÕ ÚÁËÌÁÄËÕ" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "õÄÁÌÉÔØ ÜÔÕ ÚÁËÌÁÄËÕ ÉÚ ÓÔÒÏËÉ ÚÁËÌÁÄÏË" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÚÁËÌÁÄÏË." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(âÅÚ ÉÍÅÎÉ)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "îÅÔ ÏÛÉÂËÉ" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "ïÂÙÞÎÁÑ ÏÛÉÂËÁ" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "ðÁÐËÁ Ó ÔÁËÉÍ ÎÁÚ×ÁÎÉÅÍ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "õËÁÚÁÎÎÙÊ ÔÉÐ ÐÁÐËÉ ÎÅ ÄÏÐÕÓÔÉÍ" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÍÅÓÔÁ ÄÌÑ ÓÏÚÄÁÎÉÑ ÐÁÐËÉ" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "õËÁÚÁÎÎÁÑ ÐÁÐËÁ ÎÅ ÎÁÊÄÅÎÁ" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "æÕÎËÃÉÑ ÎÅ ÒÅÁÌÉÚÏ×ÁÎÁ ÄÌÑ ÜÔÏÇÏ ÎÏÓÉÔÅÌÑ" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "ïÔËÁÚ × ÄÏÓÔÕÐÅ" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "õËÁÚÁÎÎÙÊ ÔÉÐ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ÜÔÏÇÏ ÎÏÓÉÔÅÌÑ" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "ðÒÏÓÍÏÔÒ ×ÙÂÒÁÎÎÏÊ ÐÁÐËÉ" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"ðÒÉ×ÅÔ! óÐÁÓÉÂÏ, ÞÔÏ ÎÁÛÌÉ ×ÒÅÍÑ ÓËÁÞÁÔØ ÜÔÕ ÐÒÅÄ×ÁÒÉÔÅÌØÎÕÀ ×ÅÒÓÉÀ\n" -"ÎÁÂÏÒÁ ÇÒÕÐÐÏ×ÙÈ ÐÒÉÌÏÖÅÎÉÊ \"ü×ÏÌÀÃÉÑ\"\n" -"ëÏÍÁÎÄÁ \"ü×ÏÌÀÃÉÉ\" ÕÐÏÒÎÏ ÒÁÂÏÔÁÅÔ, ÞÔÏÂÙ ÓÄÅÌÁÔØ ÐÒÏÇÒÁÍÍÕ ÎÁÓÔÏÌØËÏ\n" -"ÕÓÔÏÊÞÉ×ÏÊ, ÒÁÓÛÉÒÑÅÍÏÊ, ËÒÁÓÉ×ÏÊ, ÂÙÓÔÒÏÊ É ÆÕÎËÃÉÏÎÁÌØÎÏÊ ÄÌÑ\n" -"ÉÚÏÝÒÅÎÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ éÎÔÅÒÎÅÔ, ÎÁÓËÏÌØËÏ ×ÏÚÍÏÖÎÏ. é ÍÙ ÕÓÔÁÌÉ.\n" -"îÏ ÍÙ ÅÝÅ ÎÅ ÇÏÔÏ×Ù -- ÐÏËÁ ÎÅÔ.\n" -"\n" -"ëÏÇÄÁ ×Ù ÉÓÓÌÅÄÕÀÔÅ \"ü×ÏÌÀÃÉÀ\", ÐÏÖÁÌÕÊÓÔÁ ÕÞÉÔÙ×ÁÊÔÅ, ÞÔÏ ÂÏÌØÛÁÑ ÞÁÓÔØ\n" -"ÎÁÛÅÊ ÒÁÂÏÔÙ ÂÙÌÁ ÎÁÐÒÁ×ÌÅÎÁ ÎÁ ÓÏÚÄÁÎÉÅ ÍÏÝÎÏÇÏ Ä×ÉÖËÁ, ËÏÔÏÒÙÊ ÂÕÄÅÔ\n" -"ÕÐÒÁ×ÌÑÔØ ×ÓÅÊ ÓÉÓÔÅÍÏÊ, Á ÎÅ ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ. ðÒÅÄÓÔÏÉÔ ÅÝÅ\n" -"ÍÎÏÇÏ ÒÁÂÏÔÙ, ÍÙ Ó ÌÀÂÏ×ØÀ É ×ÎÉÍÁÎÉÅÍ ÂÕÄÅÍ ÒÁÚ×É×ÁÔØ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ\n" -"ÉÎÔÅÒÆÅÊÓ. á ×Ù ÕÚÎÁÅÔÅ, ÞÔÏ ÜÔÏ ÎÅ ÄÅÍÏÎÓÔÒÁÛËÁ.\n" -"\n" -"÷ÒÅÍÑ ÄÌÑ ÚÁÎÕÄÎÏÇÏ \"ïÐÒÏ×ÅÒÖÅÎÉÑ\". \"ü×ÏÌÀÃÉÑ ÂÕÄÅÔ: ÐÁÄÁÔØ, ÕÎÉÞÔÏÖÁÔØ\n" -"×ÁÛÕ ÐÏÞÔÕ, ÏÓÔÁ×ÌÑÔØ ÚÁÐÕÝÅÎÎÙÍÉ ÚÁÂÌÕÄÉ×ÛÉÅÓÑ ÐÒÏÃÅÓÓÙ, ÐÏÇÌÏÝÁÔØ 100%\n" -"ãðõ, ÚÁ×ÉÓÁÔØ, ÏÔÐÒÁ×ÌÑÔØ HTML-ÐÏÞÔÕ × ÓÌÕÞÁÊÎÙÅ ÓÐÉÓËÉ ÒÁÓÓÙÌËÉ É ÓÔÁ×ÉÔØ\n" -"×ÁÓ × ÎÅÌÏ×ËÏÅ ÐÏÌÏÖÅÎÉÅ ÐÅÒÅÄ ÄÒÕÚØÑÍÉ É ËÏÌÌÅÇÁÍÉ. éÓÐÏÌØÚÕÊÔÅ ÎÁ Ó×ÏÊ\n" -"ÓÔÒÁÈ É ÒÉÓË.\n" -"íÙ ÎÁÄÅÅÍÓÑ, ÞÔÏ ×ÁÍ ÐÏÎÒÁ×ÑÔÓÑ ÒÅÚÕÌØÔÁÔÙ ÎÁÛÅÊ ÕÐÏÒÎÏÊ ÒÁÂÏÔÙ É ÍÙ\n" -"ÒÁÓÓÞÉÔÙ×ÁÅÍ ÎÁ ×ÁÛÅ ÕÞÁÓÔÉÅ!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"ó ÂÌÁÇÏÄÁÒÎÏÓÔØÀ\n" -"ëÏÍÁÎÄÁ Evolution\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÏÂÏÌÏÞËÕ \"ü×ÏÌÀÃÉÉ\"." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "îÅ ÕÄÁÌÏÓØ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ËÏÍÐÏÎÅÎÔÎÕÀ ÓÉÓÔÅÍÕ Bonobo." - -#: tests/ui-tests/message-browser.c:360 -msgid "The component now claims that it doesn't support PersistStream!" -msgstr "ëÏÍÐÏÎÅÎÔ ÚÁÑ×ÌÑÅÔ, ÞÔÏ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ PersistStream!" - -#: tests/ui-tests/message-browser.c:378 -msgid "" -"An exception occured while trying to load data into the component with " -"PersistStream" -msgstr "" -"ðÒÉ ÐÏÐÙÔËÅ ÚÁÇÒÕÚÉÔØ ÄÁÎÎÙÅ × ËÏÍÐÏÎÅÎÔ ÞÅÒÅÚ PersistStream ×ÏÚÎÉËÌÏ " -"ÉÓËÌÀÞÅÎÉÅ" - -#: tests/ui-tests/message-browser.c:471 -#, c-format -msgid "The %s component doesn't support PersistStream!\n" -msgstr "ëÏÍÐÏÎÅÎÔ %s ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ PersistStream!\n" - -#: tests/ui-tests/message-browser.c:710 -msgid "Open Mime Message" -msgstr "ïÔËÒÙÔØ Mime-ÓÏÏÂÝÅÎÉÅ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "ðÏÌÑ" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "çÒÕÐÐÉÒÏ×ÁÎÉÅ" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "óÏÒÔÉÒÏ×ÁÔØ" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "æÉÌØÔÒ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#: widgets/e-table/e-table-header-item.c:1164 -msgid "Field Chooser" -msgstr "÷ÙÂÏÒ ÐÏÌÑ" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"þÔÏÂÙ ÄÏÂÁ×ÉÔØ ÓÔÏÌÂÅÃ Ë ×ÁÛÅÊ ÔÁÂÌÉÃÅ, ÐÅÒÅÔÁÝÉÔÅ\n" -"ÅÇÏ × ÔÏ ÍÅÓÔÏ ÇÄÅ ÏÎ ÄÏÌÖÅÎ ÎÁÈÏÄÉÔØÓÑ." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "ÏËÎÏ1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "äÏÓÔÕÐÎÙÅ ÐÏÌÑ" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "ÍÅÔËÁ1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "ðÏËÁÚÁÔØ × ÔÁËÏÍ ÐÏÒÑÄËÅ" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "ÍÅÔËÁ2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "äÏÂÁ×ÉÔØ >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< õÄÁÌÉÔØ" - -#: widgets/e-table/e-table-header-item.c:1156 -msgid "Sort Ascending" -msgstr "óÏÒÔÉÒÏ×ËÁ ÐÏ ×ÏÚÒÁÓÔÁÎÉÀ" - -#: widgets/e-table/e-table-header-item.c:1157 -msgid "Sort Descending" -msgstr "óÏÒÔÉÒÏ×ËÁ ÐÏ ÕÂÙ×ÁÎÉÀ" - -#: widgets/e-table/e-table-header-item.c:1158 -msgid "Unsort" -msgstr "âÅÚ ÓÏÒÔÉÒÏ×ËÉ" - -#: widgets/e-table/e-table-header-item.c:1160 -msgid "Group By This Field" -msgstr "çÒÕÐÐÉÒÏ×ÁÔØ ÐÏ ÜÔÏÍÕ ÐÏÌÀ" - -#: widgets/e-table/e-table-header-item.c:1161 -msgid "Group By Box" -msgstr "çÒÕÐÐÉÒÏ×ÁÔØ ÐÏ ÑÝÉËÕ" - -#: widgets/e-table/e-table-header-item.c:1163 -msgid "Remove This Column" -msgstr "õÄÁÌÉÔØ ÜÔÏÔ ÓÔÏÌÂÅÃ" - -#: widgets/e-table/e-table-header-item.c:1166 -msgid "Alignment" -msgstr "÷ÙÒÁ×ÎÉ×ÁÎÉÅ" - -#: widgets/e-table/e-table-header-item.c:1167 -msgid "Best Fit" -msgstr "ìÕÞÛÅÅ ÚÁÐÏÌÎÅÎÉÅ" - -#: widgets/e-table/e-table-header-item.c:1168 -msgid "Format Columns..." -msgstr "æÏÒÍÁÔÉÒÏ×ÁÎÉÅ ÓÔÏÌÂÃÏ×..." - -#: widgets/e-table/e-table-header-item.c:1170 -msgid "Customize Current View..." -msgstr "îÁÓÔÒÏÊËÁ ÔÅËÕÝÅÇÏ ÐÒÏÓÍÏÔÒÁ..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "üËÓÐÅÒÉÍÅÎÔÁÌØÎÙÊ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "úÁÎÑÔ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "÷ÎÅ ÏÆÉÓÁ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "îÅÔ ÉÎÆÏÒÍÁÃÉÉ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "ðÒÉÇÌÁÓÉÔØ ÄÒÕÇÉÈ..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "ðÁÒÁÍÅÔÒÙ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "ðÏËÁÚÙ×ÁÔØ ÔÏÌØËÏ ÒÁÂÏÞÉÅ ÞÁÓÙ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "ðÏËÁÚÙ×ÁÔØ ÕÍÅÎØÛÅÎÎÙÅ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "ïÂÎÏ×ÉÔØ ó×ÏÂÏÄÅÎ/úÁÎÑÔ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "á×ÔÏ×ÙÂÏÒ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "÷ÓÅ ÌÀÄÉ É ÒÅÓÕÒÓÙ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "÷ÓÅ ÌÀÄÉ É ÏÄÉÎ ÒÅÓÕÒÓ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "ôÒÅÂÕÅÍÙÅ ÌÀÄÉ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "ôÒÅÂÕÅÍÙÅ ÌÀÄÉ É ÏÄÉÎ ÒÅÓÕÒÓ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "÷ÒÅÍÑ ÎÁÞÁÌÁ ÓÏÂÒÁÎÉÑ:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "÷ÒÅÍÑ ÚÁ×ÅÒÛÅÎÉÑ ÓÏÂÒÁÎÉÑ:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "÷ÓÅ ÓÏÐÒÏ×ÏÖÄÅÎÉÅ" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "ð÷óþðó÷" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "çÒÕÐÐÁ %i" diff --git a/po/sl.po b/po/sl.po deleted file mode 100644 index 2dd882445b..0000000000 --- a/po/sl.po +++ /dev/null @@ -1,4025 +0,0 @@ -# Slovenian translation file for Evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Andraz Tori 2000 -# -msgid "" -msgstr "" -"Project-Id-Version: evolution\n" -"POT-Creation-Date: 2000-08-10 23:08+0200\n" -"PO-Revision-Date: 2000-07-28 03:15+0200\n" -"Last-Translator: Andraz Tori \n" -"Language-Team: Slovenian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso8859-2\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Nisem mogel inicializirati Bonoba" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "kategorije" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Predmet(i) pripada(jo) tem kategorijam:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Dostopne kategorije:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "FIXME: _Zmenek" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "FIXME: Za_hteva po sestanku" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "FIXME: _Po¹lji sporoèilo" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "FIXME: _Stik" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "FIXME: _Naloga" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "FIXME: Zahteva po _nalogi" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "FIXME: _Vpis v dnevniku" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "FIXME: _Opomba" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1178 -#: calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "FIXME: Izberi izmed..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "FIXME: V slogu zabele¾ka" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "FIXME: Doloèi sloge tiskanja..." - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "FIXME: Po¹lji" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "FIXME: Dodaj prilogo..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Zbri¹i" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "FIXME: Prestavi v mapo..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "FIXME: Kopiraj v mapo..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "Nastavitev _strani" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "FIXME: Predogled tiskanja" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "FIXME: Prilepi _posebno..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "FIXME: Oznaèi kot _neprebrano" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Zadeva" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1238 -#: calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "FIXME: _Predmet" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1239 -#: calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "FIXME: _Neprebran predmet" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "FIXME: P_rvi predmet v mapi" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "FIXME: _Zadnji predmet v mapi" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "FIXME: _Obièajno" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "FIXME: __Oblikovanje" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "FIXME: _Po meri..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "P_rej¹nji" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "_Naslednji" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "_Orodjarne" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "FIXME: _Datoteka..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "FIXME: Pr_edmet..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "FIXME: _Zadeva..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "FIXME: _Pisava..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "FIXME: _Odstavek..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "FIXME: Obli_kuj ta obrazec" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "FIXME: _Oblikuj obrazec..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "FIXME: Ob_javi obrazec..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "FIXME: O_bjavi obrazec kot..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "FIXME: Razhro¹èevalnik skript" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "FIXME: _Èrkovanje..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "_Obrazci" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "FIXME: _Nov stik" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "FIXME: Nov _stik iz istega podjetja" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "FIXME: Novo _pismo za stik" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "FIXME: Novo sporoèilo za stik" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "FIXME: Nov sestanek s stikom" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "FIXME: _Naèrtuj sestanek..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "FIXME: Nova na_loga za stik" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "FIXME: Nov vpis v _dnevnik za stik" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "FIXME: _Zastavica za nadaljevanje..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "FIXME: _Poka¾i zemljevid naslova" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "FIXME: _Odpri spletno stran" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "FIXME: Posreduj naprej kot _vVizitko" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "FIXME: _Posreduj naprej" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "Vstavi" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "O_blikuj izpis" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1331 -#: shell/e-shell-view-menu.c:513 -msgid "_Tools" -msgstr "_Orodja" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "_Dejanja" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Shrani in zapri" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "Shrani zmenek in zapri dialog" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:687 -msgid "Print..." -msgstr "Natisni..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Natisni ta predmet" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "FIXME: Vstavi datoteko..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Vstavi datoteko kot prilogo" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:427 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:40 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -msgid "Delete" -msgstr "Zbri¹i" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1387 -#: calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "Zbri¹i ta predmet" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "FIXME: Prej¹nji" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Pojdi na prej¹nji predmet" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "FIXME: Naslednji" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Pojdi na naslednji predmet" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "FIXME: Pomoè" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Glej pomoè na liniji" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "Pomoènik" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "Slu¾ba" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "Slu¾ba" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "Slu¾beni faks" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "Povratni klic" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "Avto" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "Podjetje" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "Doma" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "Doma 2" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "Domaèi faks" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "Prenosni telefon" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:27 -msgid "Other" -msgstr "Drugo" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "Drugi faks" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "Pozivnik" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "Prvi" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "Radijo" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "Teleks" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "prvi e-naslov" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "E-naslov 2" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "E-naslov 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"Ste preprièani, da \n" -"¾elite izbrisati ta stik?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "Zbri¹i stik?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Dodaj" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Tipi telefonov" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Nov tip telefona" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "Dodaj" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Urejevalnik stikov" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "_Polno Ime..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Zavedi kot:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Naslov spletne strani:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "®eli dobivati _HTML e-po¹to" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Naslov:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Slu¾beni" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Domaè" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "Slu¾beni _faks" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Prenosni telefon" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "V sl_u¾bi" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "_To je po¹tni naslov" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "_Stiki..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "Ka_tegorije..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "Slu¾beni _naziv:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Podjetje:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "Splo¹no" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "O_ddelek:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "Pi_sarna:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Poklic:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "_Vzdevek:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "_Partner(ka):" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "_Rojstni dan:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "_Ime pomoènika:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "Ime _managerja:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "Ob_letnica:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "Opom_be:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "Podrobnosti" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Preveri polno ime" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Naziv:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Ime:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Drugo ime:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Priimek:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "P_ripona:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"G.\n" -"G.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"St.\n" -"Ml.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/gui/component/addressbook.c:421 -#: calendar/gui/calendar-commands.c:552 -msgid "New" -msgstr "Nov" - -#: addressbook/gui/component/addressbook.c:421 -msgid "Create a new contact" -msgstr "Ustvari nov stik" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Find" -msgstr "Poi¹èi" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Find a contact" -msgstr "Poi¹èi stik" - -#: addressbook/gui/component/addressbook.c:426 -#: calendar/gui/calendar-commands.c:556 mail/folder-browser-factory.c:38 -msgid "Print" -msgstr "Natisni" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Print contacts" -msgstr "Natisni stike" - -#: addressbook/gui/component/addressbook.c:427 -msgid "Delete a contact" -msgstr "Zbri¹i stik" - -#: addressbook/gui/component/addressbook.c:495 -msgid "_Print Contacts..." -msgstr "_Natisni stike..." - -#: addressbook/gui/component/addressbook.c:505 -#: addressbook/gui/component/addressbook.c:1044 -msgid "As _Table" -msgstr "Kot tabelo" - -#: addressbook/gui/component/addressbook.c:512 -msgid "_New Contact" -msgstr "_Nov stik" - -#: addressbook/gui/component/addressbook.c:520 -msgid "N_ew Directory Server" -msgstr "N_ov stre¾nik imenikov" - -#: addressbook/gui/component/addressbook.c:603 -msgid "Unable to open addressbook" -msgstr "Kliknite tu za odprtje adresarja" - -#: addressbook/gui/component/addressbook.c:608 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Adresarja ni bilo mogoèe odpreti. To lahko pomeni ali\n" -"da ste vnesli napaèen URI, ali pa posku¹ali dostopati \n" -"do LDAP stre¾nika brez prevedene LDAP podpore. Èe ste \n" -"vnesli URI, preverite njegovo pravilnost in ga znova \n" -"vnesite. Èe ne, ste verjetno posku¹ali dostopati do LDAP \n" -"stre¾nika. Èe ¾elite dostopati do LDAP morate nalo¾iti in \n" -"namestiti OpenLDAP in ponovno prevesti in namestiti evolution. \n" - -#: addressbook/gui/component/addressbook.c:948 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "Shrani kot vVizitko" - -#: addressbook/gui/component/addressbook.c:1015 -msgid "* Click here to add a contact *" -msgstr "* Kliknite tu za dodajo stika *" - -#: addressbook/gui/component/addressbook.c:1051 -msgid "As _Minicards" -msgstr "Kot _minivizitke" - -#: addressbook/gui/component/addressbook.c:1102 -msgid "The URI that the Folder Browser will display" -msgstr "URI, ki naj ga prika¾e brskalnik map" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "okno2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#: addressbook/gui/component/e-ldap-storage.c:87 -msgid "External Directories" -msgstr "Zunanji imeniki" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Opis:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP stre¾nik:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "©tevilka vrat:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Korenski DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Ime:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"V tem pogledu ni predmetov za prikaz\n" -"\n" -"Èe ¾elite ustvariti nov stik, dvojno kliknite tu.." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Nastavitev strani:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Ime stila:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Predogled:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Mo¾nosti" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Vkljuèi:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Sekcije:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Si sledijo takoj" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Uhlji èrk ob strani" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Zaglavja za vsako èrko" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Zaèni na novi strani" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "©tevilo stolpcev:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Prazni obrazci na koncu:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Pisave" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Pisava..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Zaglavja" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pik Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Telo" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pik Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Senèenje" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Tiskaj z uporabo sivinskega senèenja" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Oblika izpisa" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papir" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Tip:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "oznaèba26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Mere:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "©irina:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Vi¹ina:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Izvor papirja:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Robovi" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Zgoraj:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Spodaj:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Levo:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Desno:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Stran" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Velikost:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Usmerjenost" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Pokonèno" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Le¾eèe" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Glava" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Noga:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Obratno na sodih straneh" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Glava/noga" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -msgid "am" -msgstr "dop" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "pop" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "Obroba:" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "Zaglavja:" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "Prazni dnevi:" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "Zmenki:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "Osvetljen dan:" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "©tevilke dni:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "©tevilka trenutnega dne:" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "Predmet za-opravit, ki ¹e ni na vrsti:" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "Predmet za-opravit, ki je na vrsti danes:" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "Predmet za-opravit, ki je ¾e pretekel:" - -#: calendar/gui/calendar-commands.c:172 -msgid "Gnome Calendar" -msgstr "Gnome Koledar" - -#: calendar/gui/calendar-commands.c:175 -msgid "The GNOME personal calendar and schedule manager." -msgstr "Gnome osebni koledar in urnik." - -#: calendar/gui/calendar-commands.c:442 -msgid "File not found" -msgstr "Datoteke ni mogoèe najti" - -#: calendar/gui/calendar-commands.c:464 -msgid "Open calendar" -msgstr "Odpri koledar" - -#: calendar/gui/calendar-commands.c:503 -msgid "Save calendar" -msgstr "Shrani koledar" - -#: calendar/gui/calendar-commands.c:530 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Dan" - -#: calendar/gui/calendar-commands.c:530 -msgid "Show 1 day" -msgstr "Ka¾i en dan" - -#: calendar/gui/calendar-commands.c:533 -msgid "5 Days" -msgstr "5 dni" - -#: calendar/gui/calendar-commands.c:533 -msgid "Show the working week" -msgstr "Poka¾i delavni teden" - -#: calendar/gui/calendar-commands.c:536 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Teden" - -#: calendar/gui/calendar-commands.c:536 -msgid "Show 1 week" -msgstr "Ka¾i en teden" - -#: calendar/gui/calendar-commands.c:539 -msgid "Month" -msgstr "Mesec" - -#: calendar/gui/calendar-commands.c:539 -msgid "Show 1 month" -msgstr "Ka¾i en mesec" - -#: calendar/gui/calendar-commands.c:543 -msgid "Year" -msgstr "Leto" - -#: calendar/gui/calendar-commands.c:543 -msgid "Show 1 year" -msgstr "Poka¾e vrstico z mapami" - -#: calendar/gui/calendar-commands.c:552 calendar/gui/calendar-commands.c:696 -msgid "Create a new appointment" -msgstr "Ustvari nov zmenek" - -#: calendar/gui/calendar-commands.c:556 calendar/gui/calendar-commands.c:688 -msgid "Print this calendar" -msgstr "Natisni ta koledar" - -#: calendar/gui/calendar-commands.c:560 -msgid "Prev" -msgstr "Nazaj" - -#: calendar/gui/calendar-commands.c:560 -msgid "Go back in time" -msgstr "Pojdi po èasu nazaj" - -#: calendar/gui/calendar-commands.c:561 -msgid "Today" -msgstr "Danes" - -#: calendar/gui/calendar-commands.c:561 -msgid "Go to present time" -msgstr "Pojdi na sedanjost" - -#: calendar/gui/calendar-commands.c:562 -msgid "Next" -msgstr "Naprej" - -#: calendar/gui/calendar-commands.c:562 -msgid "Go forward in time" -msgstr "Pojdi po èasu naprej" - -#: calendar/gui/calendar-commands.c:566 -msgid "Go to" -msgstr "Pojdi na" - -#: calendar/gui/calendar-commands.c:566 -msgid "Go to a specific date" -msgstr "Pojdi na doloèen datum" - -#. file menu -#: calendar/gui/calendar-commands.c:673 -msgid "New Ca_lendar" -msgstr "Nov Ko_ledar" - -#: calendar/gui/calendar-commands.c:674 -msgid "Create a new calendar" -msgstr "Ustvari nov koledar" - -#: calendar/gui/calendar-commands.c:677 -msgid "Open Ca_lendar" -msgstr "Odpri ko_ledar" - -#: calendar/gui/calendar-commands.c:678 -msgid "Open a calendar" -msgstr "Odpri koledar" - -#: calendar/gui/calendar-commands.c:682 calendar/gui/calendar-commands.c:683 -msgid "Save Calendar As" -msgstr "Shrani koledar kot" - -#: calendar/gui/calendar-commands.c:696 -msgid "_New appointment..." -msgstr "_Nov zmenek..." - -#: calendar/gui/calendar-commands.c:701 -msgid "New appointment for _today..." -msgstr "Nov zmenek za _danes..." - -#: calendar/gui/calendar-commands.c:702 -msgid "Create a new appointment for today" -msgstr "Ustvari nov zmenek za danes" - -#: calendar/gui/calendar-commands.c:710 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "Nastavitve" - -#: calendar/gui/calendar-commands.c:717 calendar/gui/calendar-commands.c:718 -msgid "About Calendar" -msgstr "Uporaba _koledarja" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:760 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:760 -msgid "'s calendar" -msgstr " koledar" - -#: calendar/gui/calendar-model.c:452 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" -"Datum mora biti vpisan v obliki: \n" -"\n" -"%s" - -#: calendar/gui/calendar-model.c:525 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" -"Zemljepisna lega mora biti vpisana v obliki: \n" -"\n" -"45.436845,125.862501" - -#: calendar/gui/calendar-model.c:570 -msgid "The percent value must be between 0 and 100" -msgstr "Vrednost v procentih mora biti med 0 in 100" - -#: calendar/gui/calendar-model.c:603 -msgid "The priority must be between 0 and 10" -msgstr "Prioriteta mora biti med 0 in 10" - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "URI, ki naj ga prika¾e brskalnik map" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Alarm na %A %d %b %Y ob %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "Obvestilo o va¹em zmenku na %A %d %b %Y ob %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "Povzetek ni na voljo." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Zapri" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "Podalj¹ek spanja" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Uredi zmenek" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Èas podalj¹ka spanja (minut)" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "FIXME: _Zbri¹i" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -msgid "FIXME: In_complete Task" -msgstr "FIXME: Do_konèana naloga" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "FIXME: Preve_ri imena" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "FIXME: A_dresar..." - -#: calendar/gui/dialogs/task-editor.c:355 -msgid "FIXME: _New Task" -msgstr "FIXME: _Nova naloga" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "FIXME: Po¹lji poroèilo stanja" - -#: calendar/gui/dialogs/task-editor.c:358 -msgid "FIXME: _Mark Complete" -msgstr "FIXME: _Oznaèi kot dokonèano" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "FIXME: Ponovitve..." - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "FIXME: Preskoèi ponovitev" - -#: calendar/gui/dialogs/task-editor.c:363 -msgid "FIXME: Assig_n Task" -msgstr "FIXME: Dodali _nalogo" - -#: calendar/gui/dialogs/task-editor.c:365 -msgid "FIXME: _Reply" -msgstr "FIXME: _Odgovori" - -#: calendar/gui/dialogs/task-editor.c:366 -msgid "FIXME: Reply to A_ll" -msgstr "FIXME: Odgovori v_sem" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "FIXME: Shrani in zapri" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "Shrani nalogo in zapri dialog" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "FIXME: Natisni..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "FIXME: Ponovitev..." - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "Nastavi pravila ponovitev" - -#: calendar/gui/dialogs/task-editor.c:422 -msgid "FIXME: Assign Task..." -msgstr "FIXME: _Dodeli nalogo..." - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "Nekomu dodeli nalogo" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "FIXME: Zbri¹i" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -msgid "S_ubject:" -msgstr "Z_adeva:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "Lastnik:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "Datum _prièetka" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -msgid "_Due Date:" -msgstr "_Do datuma:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "_Stanje:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" -"Ni prièeto\n" -"V delu\n" -"Konèano\n" -"Zavrnjeno\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "Ni prièeto" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -msgid "_Priority:" -msgstr "_Prioriteta:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" -"Visoka\n" -"Obièajna\n" -"Nizka\n" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -msgid "High" -msgstr "Visoka" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "% konèa_no" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -msgid "_Contacts..." -msgstr "_Stiki..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -msgid "Private" -msgstr "Osebno" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -msgid "Task" -msgstr "Naloga" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "Konèano dne:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "Kraj:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "URL:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "Viri:" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "Komentar" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "Konèano" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "Ustvarjeno" - -#: calendar/gui/e-calendar-table.c:204 -msgid "Description" -msgstr "Opis" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "Èasovni ¾ig" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "Datum prièetka" - -#: calendar/gui/e-calendar-table.c:219 -msgid "End Date" -msgstr "Datum konca" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "Zemljepisna lega" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "Datum zadnje spremembe" - -#: calendar/gui/e-calendar-table.c:234 -msgid "Location" -msgstr "Lega" - -#: calendar/gui/e-calendar-table.c:239 -msgid "Organizer" -msgstr "Organizator" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "% konèano" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:436 -#: calendar/gui/prop.c:609 mail/message-list.c:503 -msgid "Priority" -msgstr "Prioriteta" - -#: calendar/gui/e-calendar-table.c:260 -msgid "TaskPad" -msgstr "Naloge" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "URL" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "Opozorilo" - -#: calendar/gui/e-calendar-table.c:369 -msgid "Open..." -msgstr "Odpri..." - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "Odpri nalogo" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "Oznaèi kot opravljeno" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "Oznaèi nalogo kot opravljeno" - -#: calendar/gui/e-calendar-table.c:376 -msgid "Delete the task" -msgstr "Zbri¹i nalogo" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i deljenj minute" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Nov zmenek..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Uredi ta zmenek..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Zbri¹i ta zmenek" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Naredi zmenek prestavljiv" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "Zbri¹i to pojavitev" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Zbri¹i vse pojavitve" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "Uredi zmenek" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "Ni povzetka" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "Zmenek - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "Naloga - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "Vpis v dnevniku - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "FIXME: Ko_kedar..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "FIXME: _Nov zmenek" - -#: calendar/gui/event-editor.c:1312 -msgid "FIXME: Invite _Attendees..." -msgstr "FIXME: Povabi udele¾ence..." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "FIXME: Preklièi povabilo..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "FIXME: Posreduj naprej kot v_Koledar" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "FIXME: Povabi udele¾ence..." - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "Povabi udele¾ence na sestanek" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "%a %d %b %Y" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "dialog-urejevalec-dogodkov" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "_Povzetek:" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "_Lastnik:" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "Èas" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "Èas prièetka:" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "Èas konca" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "_Celodnevni dogodek" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "Uvrstitev" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "_Javno" - -#: calendar/gui/event-editor-dialog.glade.h:16 -msgid "Pri_vate" -msgstr "Pri_vatno" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "_Zaupno" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" -"Minut\n" -"Ur\n" -"Dni\n" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "_Prikaz" - -#: calendar/gui/event-editor-dialog.glade.h:36 -msgid "_Audio" -msgstr "_Zvok" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "_Program" - -#: calendar/gui/event-editor-dialog.glade.h:38 -msgid "_Mail" -msgstr "_Po¹lji po¹to" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "Po¹lji po¹to _za:" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "_Po¾eni program:" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "Pravilo ponovitev" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:736 -msgid "None" -msgstr "Brez" - -#: calendar/gui/event-editor-dialog.glade.h:44 -msgid "Daily" -msgstr "Dnevne" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "Tedenske" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "Meseène" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "Letne" - -#: calendar/gui/event-editor-dialog.glade.h:48 -msgid "label23" -msgstr "label23" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "Vsak " - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "dan" - -#: calendar/gui/event-editor-dialog.glade.h:51 -msgid "label24" -msgstr "label24" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "teden" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "pon" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "tor" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "sre" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "èet" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "pet" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "sob" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "ned" - -#: calendar/gui/event-editor-dialog.glade.h:61 -msgid "label25" -msgstr "label25" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "Ponovitev na" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "dan v mesecu" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" -"1.\n" -"2.\n" -"3.\n" -"4.\n" -"5.\n" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" -"Ponedeljek\n" -"Torek\n" -"Sreda\n" -"Èetrtek\n" -"Petek\n" -"Sobota\n" -"Nedelja\n" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "Vsak" - -#: calendar/gui/event-editor-dialog.glade.h:80 -msgid "month(s)" -msgstr "mesec" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "leto" - -#: calendar/gui/event-editor-dialog.glade.h:84 -msgid "label27" -msgstr "oznaka27" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "Datum zakljuèka" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "Vseskozi ponavljal" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "Konèa se na " - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "Konèaj po" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "pojavitvah" - -#: calendar/gui/event-editor-dialog.glade.h:90 -msgid "Exceptions" -msgstr "Izjeme" - -#: calendar/gui/event-editor-dialog.glade.h:92 -msgid "Change" -msgstr "Spremeni" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "Ponovitev" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "januar" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "februar" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "marec" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "april" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "maj" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "junij" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "julij" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "avgust" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "september" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "sept" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "oktober" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "november" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "december" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "nedelja" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "ponedeljek" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "torek" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "tor" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "sreda" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "sre" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "èetrtek" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "èet" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "èet" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "petek" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "sobota" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "leto" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "mesec" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "¹tirinajst dni" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "teden" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "dan" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "ura" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "minuta" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "sekunda" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "sek" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "jutri" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "vèeraj" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "danes" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "sedaj" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "zadnji" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "ta" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "naslednji" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "prvi" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "tretji" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "èetrti" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "peti" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "¹esti" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "sedmi" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "osmi" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "deveti" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "deseti" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "enajsti" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "dvanajsti" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "nazaj" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "Ustvari predmet za-opravit" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "Uredi predemet za-opravit" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "Povzetek:" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "Do datuma:" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Prioriteta:" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "Komentarji predmeta:" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "Dodaj predmet za-opravit..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "Uredi ta predmet..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Povzetek" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:608 -msgid "Due Date" -msgstr "Do datuma" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "Preostalo èasa" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "Seznam za opravit" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Dodaj..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "Uredi..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Tednov" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Dni" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Ur" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Ura" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Minut" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Minuta" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "Sekund" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "Sekunda" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "Opomin na zmenek ob " - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "V redu" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Leto:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Pojdi na datum" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Prosim izberite datum na katerega hoèete iti.\n" -"Ko klikente na dan boste samodejno ¹li\n" -"na ta datum." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Pojdi na danes" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1." - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2." - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3." - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4." - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5." - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6." - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7." - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8." - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9." - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10." - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11." - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12." - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13." - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14." - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15." - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16." - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17." - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18." - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19." - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20." - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21." - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22." - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23." - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24." - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25." - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26." - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27." - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28." - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29." - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30." - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31." - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "ne" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "po" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "to" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "sr" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "èe" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "pe" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "so" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "Predmeti za-opravit" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "Trenuten dan (%b %a %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%b" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%a" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Trenutni teden (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Trenutni teden (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Trenutni teden (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Trenutni mesec (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Trenutno leto (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Natisni _koledar" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Predogled tiskanja" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "Prikaz èasa" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "Oblika izpisa èasa" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "12 urna (dop./pop.)" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "24 urna" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "Tedni se zaènejo v" - -#: calendar/gui/prop.c:351 -msgid "Sunday" -msgstr "nedeljo" - -#: calendar/gui/prop.c:352 -msgid "Monday" -msgstr "ponedeljek" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "Razpon dni" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Prosim izberite ure zaèetka in konca dneva, ki naj\n" -"bodo prikazane v dnevnem in tedenskem pogledu.\n" -"Èasi izven tega razpona ne bodo samodejno prikazani" - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "Zaèetek dneva:" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "Konec dneva:" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "Barve za prikaz" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "Barve" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "Poka¾i v seznamu za-opravit:" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "Èas do preteka" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "Slog seznama za-opravit:" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "Osvetli preteèene predmete" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "Osvetli ¹e nepreteèene predmete" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "Osvetli predmete z dana¹njim rokom" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "Lastnosti seznama Za-opravit" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "Seznam Za-opravit" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "Alarmi" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -msgid "Alarm Properties" -msgstr "Lastnosti alarma" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "Piskaj ob zaslonskih alarmih" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "Zvoèni alarmi preteèejo po" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr " sekundah" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "Omogoèi podalj¹anje spanja za " - -#. populate default frame/box -#: calendar/gui/prop.c:840 -msgid "Defaults" -msgstr "Privzeto" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "Izre¾i" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "Izre¾i izbran predmet na odlo¾i¹èe" - -#: composer/e-msg-composer-address-dialog.c:186 -msgid "Copy" -msgstr "Kopiraj" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "Kopiraj izbran predmet na odlo¾i¹èe" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "Prilepi" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "Prilepi predmet iz odlo¾i¹èa" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "Izberi naslove prejemnikov" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Seznam prejemnikov:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Iskanje..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Ime" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "Naslov" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Lastnosti..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "Za: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "oznaka9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "oznaka7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "oznaka8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 bajt" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bajtov" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Dodaj prilogo" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Odstrani" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Odstrani izbrane predmete iz seznama prilog" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Dodaj prilogo..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Prilo¾i datoteko k sporoèilu" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Lastnosti priloge" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME tip:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Ime datoteke:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -msgid "From:" -msgstr "Od:" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "Kliknite tu za adresar" - -#: composer/e-msg-composer-hdrs.c:296 -msgid "Enter the identitiy you wish to send this message from" -msgstr "Vnesite identiteto s katero ¾elite poslati to sporoèilo" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "Za:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "Vnesite prejemnike sporoèila" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Vnesite naslove, ki bodo prejeli, karbonske kopije sporoèila" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Vnesite naslove, ki bodo prejeli karbonske kopije sporoèila, a se ne bodo " -"pojavili v seznamu prejemnikov sporoèila." - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "Zadeva:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "Vnesite zadevo sproèila" - -#: composer/e-msg-composer.c:452 -msgid "Save as..." -msgstr "Shrani kot..." - -#: composer/e-msg-composer.c:463 -#, c-format -msgid "Error saving file: %s" -msgstr "Napak ob shranjevanju datoteke: %s" - -#: composer/e-msg-composer.c:483 -#, c-format -msgid "Error loading file: %s" -msgstr "Napaka ob nalaganju datoteke %s" - -#: composer/e-msg-composer.c:505 -msgid "Saving changes to message..." -msgstr "Shranjujem spremembe sporoèila..." - -#: composer/e-msg-composer.c:507 -msgid "About to save changes to message..." -msgstr "Shranil bom spremembe sporoèila" - -#: composer/e-msg-composer.c:591 shell/e-shell-view-menu.c:165 -msgid "Evolution" -msgstr "Evolution" - -#: composer/e-msg-composer.c:597 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" -"To sporoèilo ni bilo poslano.\n" -"\n" -"®elite shraniti spremembe?" - -#: composer/e-msg-composer.c:619 -msgid "Open file" -msgstr "Odpri datoteko" - -#: composer/e-msg-composer.c:731 -msgid "That file does not exist." -msgstr "Datoteka ne obstaja." - -#: composer/e-msg-composer.c:741 -msgid "That is not a regular file." -msgstr "To ni obièajna datoteka." - -#: composer/e-msg-composer.c:751 -msgid "That file exists but is not readable." -msgstr "Ta datoteka obstaja a ni berljiva." - -#: composer/e-msg-composer.c:761 -msgid "That file appeared accesible but open(2) failed." -msgstr "Datoteka se je zdela dostopna a open(2) ni uspel." - -#: composer/e-msg-composer.c:783 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"Datoteka je zelo velika (èez 100K).\n" -"Ste preprièani,da jo ¾elite vstaviti?" - -#: composer/e-msg-composer.c:804 -msgid "An error occurred while reading the file." -msgstr "Ob branju datoteke se je zgodila napaka." - -#: composer/e-msg-composer.c:900 shell/e-shell-view-menu.c:434 -msgid "_File" -msgstr "_Datoteka" - -#: composer/e-msg-composer.c:906 -msgid "_Open..." -msgstr "_Odpri..." - -#: composer/e-msg-composer.c:907 -msgid "Load a previously saved message" -msgstr "Nalo¾i prej shranjeno sporoèilo" - -#: composer/e-msg-composer.c:915 -msgid "_Save..." -msgstr "_Shrani..." - -#: composer/e-msg-composer.c:916 -msgid "Save message" -msgstr "Shrani sporoèilo" - -#: composer/e-msg-composer.c:924 -msgid "_Save as..." -msgstr "Shrani kot..." - -#: composer/e-msg-composer.c:925 -msgid "Save message with a different name" -msgstr "Shrani sporoèilo pod drugaènim imenom" - -#: composer/e-msg-composer.c:933 -msgid "Save in _folder..." -msgstr "Shrani v _mapo..." - -#: composer/e-msg-composer.c:934 -msgid "Save the message in a specified folder" -msgstr "Shrani sporoèilo v izbrano mapo" - -#: composer/e-msg-composer.c:943 -msgid "_Insert text file... (FIXME)" -msgstr "_Vstavi datoteko z besedilom... (FIXME)" - -#: composer/e-msg-composer.c:944 -msgid "Insert a file as text into the message" -msgstr "Vstavi datoteko v sporoèilo kot besedilo" - -#: composer/e-msg-composer.c:953 -msgid "_Send" -msgstr "_Po¹lji" - -#: composer/e-msg-composer.c:954 -msgid "Send the message" -msgstr "Po¹lji sporoèilo" - -#: composer/e-msg-composer.c:964 -msgid "_Close..." -msgstr "_Zapri..." - -#: composer/e-msg-composer.c:965 -msgid "Quit the message composer" -msgstr "Zapri sestavljalca sporoèil" - -#: composer/e-msg-composer.c:978 shell/e-shell-view-menu.c:478 -msgid "_Edit" -msgstr "_Uredi" - -#: composer/e-msg-composer.c:989 -msgid "_Format" -msgstr "_Oblika izpisa" - -#: composer/e-msg-composer.c:995 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:996 -msgid "Send the mail in HTML format" -msgstr "Po¹lji po¹to v HTML obliki" - -#: composer/e-msg-composer.c:1009 shell/e-shell-view-menu.c:383 -#: shell/e-shell-view-menu.c:489 shell/e-storage-set-view.c:242 -msgid "_View" -msgstr "_Pogled" - -#: composer/e-msg-composer.c:1015 -msgid "Show _attachments" -msgstr "Ka¾i priloge" - -#: composer/e-msg-composer.c:1016 -msgid "Show/hide attachments" -msgstr "Ka¾i/skrij priloge" - -#: composer/e-msg-composer.c:1049 -msgid "Send" -msgstr "Po¹lji" - -#: composer/e-msg-composer.c:1050 -msgid "Send this message" -msgstr "Po¹lji to sporoèilo" - -#: composer/e-msg-composer.c:1059 -msgid "Attach" -msgstr "Prilo¾i" - -#: composer/e-msg-composer.c:1060 -msgid "Attach a file" -msgstr "Prilo¾i datoteko" - -#: composer/e-msg-composer.c:1247 -msgid "Compose a message" -msgstr "Sestavi novo sporoèilo" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -msgid "Select Folder" -msgstr "Izberi mapo" - -#: filter/filter-folder.c:246 -msgid "" -msgstr "" - -#: mail/component-factory.c:177 -msgid "Cannot initialize Evolution's mail component." -msgstr "Ne morem inicializirati Evolution komponente za po¹to." - -#: mail/folder-browser-factory.c:24 -msgid "Get mail" -msgstr "Poberi po¹to" - -#: mail/folder-browser-factory.c:24 -msgid "Check for new mail" -msgstr "Preveri za novo po¹to" - -#: mail/folder-browser-factory.c:25 -msgid "Compose" -msgstr "Sestavi" - -#: mail/folder-browser-factory.c:25 -msgid "Compose a new message" -msgstr "Sestavi novo sporoèilo" - -#: mail/folder-browser-factory.c:29 -msgid "Reply" -msgstr "Odgovori" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to the sender of this message" -msgstr "Odgovori po¹iljatelju tega sporoèila" - -#: mail/folder-browser-factory.c:30 -msgid "Reply to All" -msgstr "Odgovori vsem" - -#: mail/folder-browser-factory.c:30 -msgid "Reply to all recipients of this message" -msgstr "Odgovori vsem prejemnikom tega sporoèila" - -#: mail/folder-browser-factory.c:32 -msgid "Forward" -msgstr "Posreduj naprej" - -#: mail/folder-browser-factory.c:32 -msgid "Forward this message" -msgstr "Sporoèilo posreduj naprej" - -#: mail/folder-browser-factory.c:36 -msgid "Move" -msgstr "Prestavi" - -#: mail/folder-browser-factory.c:36 -msgid "Move message to a new folder" -msgstr "Prestavi sporoèilo v novo mapo" - -#: mail/folder-browser-factory.c:38 -msgid "Print the selected message" -msgstr "Natisni izbrano sporoèilo" - -#: mail/folder-browser-factory.c:40 -msgid "Delete this message" -msgstr "Zbri¹i to sporèilo" - -#: mail/folder-browser-factory.c:62 -msgid "_Threaded Message List" -msgstr "_Niten seznam sporoèil" - -#: mail/folder-browser-factory.c:72 -msgid "_Print message" -msgstr "_Natisni sporoèilo" - -#: mail/folder-browser-factory.c:81 -msgid "_Mark all messages seen" -msgstr "_Oznaèi vsa sporoèila kot videna" - -#: mail/folder-browser-factory.c:86 -msgid "E_dit Message" -msgstr "_Uredi sporoèilo" - -#: mail/folder-browser-factory.c:92 -msgid "_View Message" -msgstr "_Glej sporoèilo" - -#: mail/folder-browser-factory.c:98 -msgid "_Expunge" -msgstr "_Unièi" - -#: mail/folder-browser-factory.c:104 -msgid "Mail _Filters ..." -msgstr "Po¹lji _filtre ..." - -#: mail/folder-browser-factory.c:110 -msgid "_vFolder Editor ..." -msgstr "Urejevalnik vMap ..." - -#: mail/folder-browser-factory.c:116 -msgid "_Mail Configuration ..." -msgstr "Nastavitev _Po¹te ..." - -#: mail/folder-browser-factory.c:122 -msgid "Forget _Passwords" -msgstr "Pozabi _gesla" - -#: mail/folder-browser-factory.c:129 -msgid "_Configure Folder" -msgstr "_Nastavi mapo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "Identitete" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "Organizacija" - -#: mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "Datoteka s podpisom" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "Uredi" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "Viri" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "Izvori po¹te" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "Prenos Po¹te" - -#: mail/mail-config.glade.h:21 -msgid "News Servers" -msgstr "Novièarski stre¾niki" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "Viri novic" - -#: mail/mail-config.glade.h:26 -#, fuzzy -msgid "Send messages in HTML format" -msgstr "Po¹lji po¹to v HTML obliki" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "Nastavitev _po¹te" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" -"Dobrodo¹li v nastavitvenem èarovniku po¹te!\n" -"Z vpisom nekaterih podatkov o va¹ih nastavitvah e-po¹te\n" -"lahko takoj priènete po¹iljati in sprejemati po¹to\n" -"Kliknite naprej za nadaljevanje." - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "Identiteta" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "Izvor po¹te" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" -"Nastavljanje va¹e e-po¹te je sedaj gotovo.\n" -"Kliknite \"Konèaj\" za shranitev nastavitev" - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:420 -msgid "No GPG/PGP program available." -msgstr "GPG/PGP program ni na voljo." - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:426 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "Nisem mogel ustvariti cevi do GPG/PGP: %s" - -#: mail/mail-threads.c:618 -msgid "Currently pending operations:" -msgstr "Trenutno èakajoèe operacije:" - -#: mail/mail-threads.c:819 -msgid "Incomplete message written on pipe!" -msgstr "Nepopolno sporoèilo zapisano v cev!" - -#: mail/mail-threads.c:823 -msgid "Error reading commands from dispatching thread." -msgstr "Napaka pri branju ukazov iz razpo¹iljalne niti." - -#: mail/mail-threads.c:937 -msgid "Corrupted message from dispatching thread?" -msgstr "Prispelo pokvarjeno sporoèilo iz razpo¹iljalne niti?" - -#: mail/mail-threads.c:1002 -msgid "Waiting for user to close error dialog" -msgstr "Èakam na uporabnika, da zapre dialog z napako" - -#: mail/mail-threads.c:1063 -msgid "Waiting for user to enter data" -msgstr "Èakam na uporabnika, da vpi¹e podatek" - -#: mail/mail-threads.c:1071 -msgid "Could not create dialog box." -msgstr "Nisem mogel ustvariti dialoga." - -#: mail/mail-threads.c:1113 -msgid "User cancelled query." -msgstr "Uporabnik je preklical poizvedbo." - -#: mail/message-list.c:485 -msgid "Online Status" -msgstr "Stanje priklopa" - -#: mail/message-list.c:521 -msgid "From" -msgstr "Od" - -#: mail/message-list.c:528 -msgid "Subject" -msgstr "Zadeva" - -#: mail/message-list.c:535 -msgid "Date" -msgstr "Datum" - -#: mail/message-list.c:542 -msgid "Received" -msgstr "Sprejeto" - -#: mail/message-list.c:549 -msgid "To" -msgstr "Za" - -#: mail/message-list.c:556 -msgid "Size" -msgstr "Velikost" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Namestitev Evolutiona" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Izgleda, da je tokrat va¹ prvi zagon Evolutiona." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"Prosim kliknite \"V redu\" za namestitev Evoultionovih uporabni¹kih datotek " -"pod" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Ne morem ustvariti imenika\n" -"%s\n" -"Napaka: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Ne morem kopirati datotek v\n" -"`%s'." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolutionove datoteke so se uspe¹no namestile." - -#: shell/e-setup.c:109 -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"Datoteka `%s' ni imenik.\n" -"Prosim premestite jo, da se lahko namestitev\n" -"Evolutionovih uporabni¹kih datotek nadaljuje." - -#: shell/e-setup.c:121 -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" -"Datoteka `%s' obstaja a ni Evolutionov imenik.\n" -"Prosim premestite jo, da se lahko namestitev\n" -"Evolutionovih uporabni¹kih datotek nadaljuje." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"Ne morem ustvariti izbrane mape:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "Izbrano ime mape ni veljavno." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Ustvar novo mapo" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"Tip izbrane mape ni veljaven za zahtevano\n" -"operacijo." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "Nova..." - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "(Neimenovana)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Program 'Bug buddy' ni bil najden v va¹i poti ($PATH)." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Programa 'Bug buddy' ni bilo mogoèe pognati." - -#: shell/e-shell-view-menu.c:167 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Avtorske pravice pridr¾ane 1999,2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:169 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution je zbirka programov okolja \n" -"GNOME za delo v skupinah, za po¹to, koledar in \n" -"urejanje stikov." - -#: shell/e-shell-view-menu.c:319 -msgid "Go to folder..." -msgstr "Pojdi v _mapo..." - -#: shell/e-shell-view-menu.c:377 -msgid "_New" -msgstr "_Nova" - -#: shell/e-shell-view-menu.c:389 -msgid "_Folder" -msgstr "_Mapa" - -#: shell/e-shell-view-menu.c:395 -msgid "Evolution bar _shortcut" -msgstr "Evolution vrstica z blji¾nicami" - -#: shell/e-shell-view-menu.c:404 -msgid "_Mail message (FIXME)" -msgstr "_Po¹lji sporoèilo (FIXME)" - -#: shell/e-shell-view-menu.c:410 -msgid "_Appointment (FIXME)" -msgstr "_Zmenek (FIXME)" - -#: shell/e-shell-view-menu.c:416 -msgid "_Contact (FIXME)" -msgstr "_Kontakt (FIXME)" - -#: shell/e-shell-view-menu.c:422 -msgid "_Task (FIXME)" -msgstr "_Naloga (FIXME)" - -#: shell/e-shell-view-menu.c:444 -msgid "_Go to folder..." -msgstr "Pojdi v _mapo..." - -#: shell/e-shell-view-menu.c:445 -msgid "Display a different folder" -msgstr "Poka¾i drugo mapo" - -#: shell/e-shell-view-menu.c:452 -msgid "_Create new folder..." -msgstr "_Ustvari novo mapo..." - -#: shell/e-shell-view-menu.c:453 shell/e-shell-view-menu.c:465 -msgid "Create a new folder" -msgstr "Ustvari novo mapo" - -#: shell/e-shell-view-menu.c:464 -msgid "E_xit..." -msgstr "_Izhod..." - -#: shell/e-shell-view-menu.c:495 -msgid "Show _shortcut bar" -msgstr "Ka¾i vrstico z _bli¾njicami" - -#: shell/e-shell-view-menu.c:496 -msgid "Show the shortcut bar" -msgstr "Poka¾e vrstico z blji¾nicami" - -#: shell/e-shell-view-menu.c:501 -msgid "Show _folder bar" -msgstr "Ka¾i vrstico z _mapami" - -#: shell/e-shell-view-menu.c:502 -msgid "Show the folder bar" -msgstr "Poka¾e vrstico z mapami" - -#: shell/e-shell-view-menu.c:524 -msgid "_Actions" -msgstr "_Dejanja" - -#: shell/e-shell-view-menu.c:535 -msgid "_Help" -msgstr "_Pomoè" - -#: shell/e-shell-view-menu.c:541 -msgid "Help _index" -msgstr "Kazalo _pomoèi" - -#: shell/e-shell-view-menu.c:548 -msgid "Getting _started" -msgstr "Kako _zaèeti" - -#: shell/e-shell-view-menu.c:555 -msgid "Using the _mailer" -msgstr "Uporaba _po¹te" - -#: shell/e-shell-view-menu.c:562 -msgid "Using the _calendar" -msgstr "Uporaba _koledarja" - -#: shell/e-shell-view-menu.c:569 -msgid "Using the c_ontact manager" -msgstr "Uporaba upravljalnika _stikov" - -#: shell/e-shell-view-menu.c:579 -msgid "_Submit bug report" -msgstr "_Po¹lji poroèilo o hro¹èu" - -#: shell/e-shell-view-menu.c:580 -msgid "Submit bug report using Bug Buddy" -msgstr "Po¹lji poroèilo o hro¹èu z uporabo progama Bug buddy" - -#: shell/e-shell-view-menu.c:589 -msgid "_About Evolution..." -msgstr "_O Evolutionu..." - -#: shell/e-shell-view-menu.c:590 -msgid "Show information about Evolution" -msgstr "Ka¾i podatke o Evolutionu" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "(Nobena mapa ni prikazana)" - -#: shell/e-shell-view.c:342 -msgid "Folders" -msgstr "Mape" - -#: shell/e-shell-view.c:740 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:291 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Ne morem nastaviti krajevnega hranilnika -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "_Majhne ikone" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Ka¾i blji¾nice kot majhne ikone" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "_Velike ikone" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Ka¾i blji¾nice kot velike ikone" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Aktiviraj" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Aktiviraj to blji¾nico" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Odstrani to blji¾nico iz vrstice blji¾nic" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Napaka pri shranjevanju blji¾nic." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Brez imena)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Brez napak" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Generièna napaka" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "Mapa z enakim imenom ¾e obstaja" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "Izbran tip mape ni veljaven" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "V/I napaka" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Ni dovolj prostora za ustvaritev mape" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Izbrana mapa ni bila najdena" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "Funkcija ni implementirana v tem hranilniku" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Nimate dovoljenja" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Operacija ni podprta" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "Izbran tip ni podprt v tem hranilniku" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Neznana napaka" - -#: shell/e-storage-set-view.c:242 -msgid "View the selected folder" -msgstr "Poglej izbrane mape" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Zdravo. Hvala, ker ste si vzeli èas za prenos te predizdaje\n" -"programja za delovne skupine Evolution.\n" -"\n" -"Skozi prej¹nji mesec in pol smo se trudili Evolution narediti \n" -"uporabnega. Veliko razvijalcev Evolutiona ga ¾e exkluzivno \n" -"uporablja za branje svoje po¹te. Tudi vi ga lahko. (Le ne pozabite\n" -"na varnostne kopije.)\n" -"\n" -"Kljub temu, da smo popravili veliko hro¹èev, ki vplivajo na stabilnost \n" -"in varnost vseeno opozarjamo: Evolution se bo: sesul, izgubil va¹o \n" -"po¹to, ko tega ne boste hoteli, zavrnil brisanje va¹e po¹te, boste to \n" -"¾eleli, pustil teèi mrtve procese, uporabil 100% procesorja, se zaklenil, \n" -"poslal HTML na nakljuène dopisne sezname in vas osramotil pred prijatelji \n" -"in sodelavci. \n" -"Uporabljajte ga le tako kot je predvideno.\n" -"\n" -"Upamo, da boste u¾ivali sadove na¹ega trdega dela in nestrpno\n" -"prièakujemo va¹e prispevke!\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Hvala!\n" -"Skupina Evolution\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "Ne morem inicializirati lupine Evolution." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "Ne morem inicializirati komponentnega sistema Bonobo." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Polja" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Grupiranje" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Sortiranje" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtriranje" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "Izbirnik polij" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"Da bi dodali stolpec k va¹i tabeli, ga potegnite\n" -"do mesta kjer ¾elite, da se pojavi." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "okno1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Polja na voljo" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Ka¾i v tem vrstnem redu" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Dodaj >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< odstrani" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Poskusno" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Zaseden" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Iz pisarne" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Ni podatkov" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "_Povabi ostale..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Mo¾nosti" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Ka¾i le delavne ure" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "Ka¾i poman_j¹ano" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "_Posodobi Prosto/Zasedeno" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Samodeno izberi" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Vsi ljudje in vsa sredstva" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Vsi ljudje in eno sredstvo" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "_Potrebni ljudje" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Potrebni ljudje in eno sredstvo" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Èas prièetka sestanka:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Èas zakljuèka sestanka:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Vsi udele¾eni" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "PTSÈPSN" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Skupina %i" - -#~ msgid "Discard this message?" -#~ msgstr "Zavrzi to sporoèilo" - -#~ msgid "" -#~ "Enter your name and email address to be used in outgoing mail. You may also, " -#~ "optionally, enter the name of your organization, and the name of a file to " -#~ "read your signature from." -#~ msgstr "" -#~ "Vnesite svoje ime in e-po¹tni naslov, ki naj se uporablja v izhodni po¹ti Po " -#~ "¾elji lahko vnesete tudi ime va¹e organizacije in ime datoteke iz katere naj " -#~ "se prebere va¹ podpis." - -#~ msgid "Full name:" -#~ msgstr "Polno ime:" - -#~ msgid "Email address:" -#~ msgstr "E-po¹tni naslov:" - -#~ msgid "Signature file:" -#~ msgstr "Datoteka s podpisom:" - -#~ msgid "Server:" -#~ msgstr "Stre¾nik:" - -#~ msgid "Username:" -#~ msgstr "Uporabni¹ko ime:" - -#~ msgid "Path:" -#~ msgstr "Pot:" - -#~ msgid "Authentication:" -#~ msgstr "Avtentikacija:" - -#~ msgid "Detect supported types..." -#~ msgstr "Ugotovi podprte tipe..." - -#~ msgid "Test Settings" -#~ msgstr "Preveri nastavitve" - -#~ msgid "" -#~ "Select the kind of mail server you have, and enter the relevant information " -#~ "about it.\n" -#~ "\n" -#~ "If the server requires authentication, you can click the \"Detect supported " -#~ "types...\" button after entering the other information." -#~ msgstr "" -#~ "Izberite vrsto po¹tnega stre¾nika, ki ga uporabljate in nastavite zanj " -#~ "pomembne podatke.\n" -#~ "\n" -#~ "Èe stre¾nik potrebuje avtentikacijo, lako kliknete na gumb \"Ugotovi podprte " -#~ "tipe...\", ko boste vnesli ostale podatke." - -#~ msgid "" -#~ "Select the kind of news server you have, and enter the relevant information " -#~ "about it.\n" -#~ "\n" -#~ "If the server requires authentication, you can click the \"Detect supported " -#~ "types...\" button after entering the other information." -#~ msgstr "" -#~ "Izberite vrsto po¹tnega stre¾nika, ki ga uporabljate in nastavite zanj " -#~ "pomembne podatke.\n" -#~ "\n" -#~ "Èe stre¾nik potrebuje avtentikacijo, lako kliknete na gumb \"Ugotovi podprte " -#~ "tipe...\", po tem ko boste vnesli ostale podatke." - -#~ msgid "Edit Identity" -#~ msgstr "Uredi identiteto" - -#~ msgid "Add Identity" -#~ msgstr "Dodaj identiteto" - -#~ msgid "Edit Source" -#~ msgstr "Uredi izbor" - -#~ msgid "Edit News Server" -#~ msgstr "Uredi novièarski stre¾nik" - -#~ msgid "Fetching mail" -#~ msgstr "Prena¹am po¹to" - -#~ msgid "" -#~ "This message has no subject.\n" -#~ "Really send?" -#~ msgstr "" -#~ "Sporoèilo nima 'zadeve'.\n" -#~ "Resnièno po¹lji?" - -#~ msgid "" -#~ "You need to configure an identity\n" -#~ "before you can send mail." -#~ msgstr "" -#~ "Nastaviti morate sovjo identiteto\n" -#~ "preden lahko po¹ljete po¹to." - -#~ msgid "Move message(s) to" -#~ msgstr "Prestavi sporoèilo(a) v" - -#~ msgid "Back" -#~ msgstr "Prej¹nji" - -#~ msgid "Finish" -#~ msgstr "Konèaj" - -#~ msgid "Apply" -#~ msgstr "Uporabi" - -#~ msgid "" -#~ "

Create Filtering Rule

Select one of the base rules above, then " -#~ "continue forwards to customise it.

" -#~ msgstr "" -#~ "

Ustvari pravilo filtriranja

Izberite eno od osnovnih pravil " -#~ "zgorajnato nadaljujte naprej, da ga prilagodite.

" - -#~ msgid "_Virtual Folder Druid ..." -#~ msgstr "©krat za navidezne _Vmape ..." - -#~ msgid "Test these values before continuing" -#~ msgstr "Preveri te vrednosti pred nadaljevanjem" - -#~ msgid "Select the method you would like to use to deliver your mail." -#~ msgstr "Izberite naèin na katerega ¾elite dostavljati va¹o po¹to." - -#~ msgid "Enter the hostname of the News Server you have." -#~ msgstr "Vpi¹ite ime raèunalnika na katerem teèe novièarski stre¾nik." - -#~ msgid "Cannot initialize the configuration system." -#~ msgstr "Ne morem inicializirati nastavitvenega sistema." diff --git a/po/sv.po b/po/sv.po deleted file mode 100644 index 087eb8b077..0000000000 --- a/po/sv.po +++ /dev/null @@ -1,3543 +0,0 @@ -# Swedish translation of evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Andreas Hyden , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.1\n" -"POT-Creation-Date: 2000-07-19 02:01+0000\n" -"PO-Revision-Date: 2000-04-04 19:23+0200\n" -"Last-Translator: Andreas Hyden \n" -"Language-Team: Swedish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Kunde inte initialisera bonobo" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "katerogier" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Objekt tillhör dessa katerogier:" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Tillgänliga katerogier:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1118 -#, fuzzy -msgid "FIXME: _Appointment" -msgstr "_Möte" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1119 -#, fuzzy -msgid "FIXME: Meeting Re_quest" -msgstr "Begäran om möte" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/event-editor.c:1121 -#, fuzzy -msgid "FIXME: _Mail Message" -msgstr "_Posta meddelande" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/event-editor.c:1122 -#, fuzzy -msgid "FIXME: _Contact" -msgstr "_Kontakt" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/event-editor.c:1123 -msgid "FIXME: _Task" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/event-editor.c:1124 -#, fuzzy -msgid "FIXME: Task _Request" -msgstr "Uppgiftsbegä_ran" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1125 -#, fuzzy -msgid "FIXME: _Journal Entry" -msgstr "_Dagbokpost" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1126 -msgid "FIXME: _Note" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/event-editor.c:1128 calendar/gui/event-editor.c:1235 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1133 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/event-editor.c:1135 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1142 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/event-editor.c:1146 -#, fuzzy -msgid "FIXME: Save Attac_hments..." -msgstr "Lägg till bilaga..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Ta bort" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1149 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1150 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/event-editor.c:1152 -msgid "Page Set_up" -msgstr "Inställningar för sida" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/event-editor.c:1153 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/event-editor.c:1179 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1183 -msgid "_Object" -msgstr "_Object" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/event-editor.c:1188 calendar/gui/event-editor.c:1195 -msgid "FIXME: _Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/event-editor.c:1189 calendar/gui/event-editor.c:1196 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/event-editor.c:1190 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/event-editor.c:1197 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/event-editor.c:1202 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1204 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/event-editor.c:1207 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/event-editor.c:1212 -msgid "Pre_vious" -msgstr "Föreg_ående" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/event-editor.c:1213 -msgid "Ne_xt" -msgstr "Nä_sta" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1217 -msgid "_Toolbars" -msgstr "_Verktyg" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/event-editor.c:1222 -msgid "FIXME: _File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/event-editor.c:1223 -msgid "FIXME: It_em..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: _Object..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/event-editor.c:1229 -#, fuzzy -msgid "FIXME: _Font..." -msgstr "Typsnitt..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/event-editor.c:1230 -msgid "FIXME: _Paragraph..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/event-editor.c:1237 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/event-editor.c:1238 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/event-editor.c:1241 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/event-editor.c:1243 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/event-editor.c:1248 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/event-editor.c:1253 -msgid "_Forms" -msgstr "_Former" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1266 -msgid "FIXME: For_ward" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/event-editor.c:1279 -msgid "_Insert" -msgstr "_Infoga" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/event-editor.c:1280 -msgid "F_ormat" -msgstr "F_ormatera" - -#. FIXME: add Favorites here -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/event-editor.c:1281 shell/e-shell-view-menu.c:473 -msgid "_Tools" -msgstr "_Verktyg" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/event-editor.c:1282 -msgid "Actio_ns" -msgstr "Hä_ndelser" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Spara och stäng" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1321 -msgid "Save the appointment and close the dialog box" -msgstr "Spara ärendet och stäng dialogen" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:673 -msgid "Print..." -msgstr "Skriv ut..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/event-editor.c:1326 -msgid "Print this item" -msgstr "Skriv ut detta objektet" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/event-editor.c:1327 -msgid "FIXME: Insert File..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/event-editor.c:1328 -msgid "Insert a file as an attachment" -msgstr "Infoga en fil som en bifogning" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:426 calendar/gui/gncal-todo.c:499 -#: mail/folder-browser-factory.c:45 -msgid "Delete" -msgstr "Ta bort" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/event-editor.c:1337 calendar/gui/gncal-todo.c:327 -msgid "Delete this item" -msgstr "Ta bort detta objektet" - -#: addressbook/contact-editor/e-contact-editor.c:856 -#: calendar/gui/event-editor.c:1339 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/event-editor.c:1340 -msgid "Go to the previous item" -msgstr "Gå till det föregående objektet" - -#: addressbook/contact-editor/e-contact-editor.c:859 -#: calendar/gui/event-editor.c:1341 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/event-editor.c:1342 -msgid "Go to the next item" -msgstr "Gå till det nästa objektet" - -#: addressbook/contact-editor/e-contact-editor.c:862 -#: calendar/gui/event-editor.c:1343 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:863 -#: calendar/gui/event-editor.c:1344 -msgid "See online help" -msgstr "Läs direkthjälp" - -#: addressbook/contact-editor/e-contact-editor.c:1278 -msgid "Assistant" -msgstr "Assistant" - -#: addressbook/contact-editor/e-contact-editor.c:1279 -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Business" -msgstr "Företag" - -#: addressbook/contact-editor/e-contact-editor.c:1280 -msgid "Business 2" -msgstr "Företag 2" - -#: addressbook/contact-editor/e-contact-editor.c:1281 -msgid "Business Fax" -msgstr "Fax företag" - -#: addressbook/contact-editor/e-contact-editor.c:1282 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1283 -msgid "Car" -msgstr "Bil" - -#: addressbook/contact-editor/e-contact-editor.c:1284 -msgid "Company" -msgstr "Företag" - -#: addressbook/contact-editor/e-contact-editor.c:1285 -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Home" -msgstr "Hem" - -#: addressbook/contact-editor/e-contact-editor.c:1286 -msgid "Home 2" -msgstr "Hem 2" - -#: addressbook/contact-editor/e-contact-editor.c:1287 -msgid "Home Fax" -msgstr "Fax hem" - -#: addressbook/contact-editor/e-contact-editor.c:1288 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1289 -msgid "Mobile" -msgstr "Mobil" - -#: addressbook/contact-editor/e-contact-editor.c:1290 -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Other" -msgstr "Annat" - -#: addressbook/contact-editor/e-contact-editor.c:1291 -msgid "Other Fax" -msgstr "Annan fax" - -#: addressbook/contact-editor/e-contact-editor.c:1292 -#, fuzzy -msgid "Pager" -msgstr "Sida" - -#: addressbook/contact-editor/e-contact-editor.c:1293 -msgid "Primary" -msgstr "Primär" - -#: addressbook/contact-editor/e-contact-editor.c:1294 -msgid "Radio" -msgstr "Radio" - -#: addressbook/contact-editor/e-contact-editor.c:1295 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1296 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1340 -msgid "Primary Email" -msgstr "Primär epost" - -#: addressbook/contact-editor/e-contact-editor.c:1341 -msgid "Email 2" -msgstr "Epost 2" - -#: addressbook/contact-editor/e-contact-editor.c:1342 -msgid "Email 3" -msgstr "Epost 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Lägg till" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Telefontyper" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Ny telefontyp" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -msgid "Add" -msgstr "Lägg till" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "_Kontakt editor" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "Hela namet..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Spara som:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Webbsajt adress:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "Vill ha _HTML-post" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Adress:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Företag" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Hem" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "Företags_fax" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Mobil" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "F_öretag" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "De_tta är epost-adressen" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "_Kontakter..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "Ka_tegorier..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "Jobbtitel:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "_Företag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -msgid "General" -msgstr "Generellt" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "Av_delning:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "K_ontor:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Yrke:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "_Smeknamn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "Föd_elsedag:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "_Assistantnamn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "Chefens na_mn:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "_Jubileum:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "An_teckningar:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "Detaljer" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Kolla hela namnet" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "_Titel:" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Första:" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Mellan:" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Senaste:" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "_Suffix:" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" - -#: addressbook/gui/component/addressbook.c:420 -#: calendar/gui/calendar-commands.c:544 -msgid "New" -msgstr "Ny" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Create a new contact" -msgstr "Skapa en ny kontakt" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find" -msgstr "Hitta" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find a contact" -msgstr "Hitta en kontakt" - -#: addressbook/gui/component/addressbook.c:425 -#: addressbook/gui/component/addressbook.c:492 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:43 -msgid "Print" -msgstr "Skriv ut" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Print contacts" -msgstr "Skriv ut kontakter" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Delete a contact" -msgstr "Ta bort en kontakt" - -#: addressbook/gui/component/addressbook.c:499 -#: addressbook/gui/component/addressbook.c:1039 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:506 -msgid "_New Contact" -msgstr "_Ny kontakt" - -#: addressbook/gui/component/addressbook.c:514 -msgid "N_ew Directory Server" -msgstr "Ny katalogserver" - -#: addressbook/gui/component/addressbook.c:593 -msgid "Unable to open addressbook" -msgstr "Kunde inte öppna adressboken" - -#: addressbook/gui/component/addressbook.c:598 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:943 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "Spara som VCard" - -#: addressbook/gui/component/addressbook.c:1010 -msgid "* Click here to add a contact *" -msgstr "* Klicka här för att lägga till en kontakt *" - -#: addressbook/gui/component/addressbook.c:1046 -msgid "As _Minicards" -msgstr "Som _minikort" - -#: addressbook/gui/component/addressbook.c:1097 -msgid "The URI that the Folder Browser will display" -msgstr "URL:en som mappbläddraden kommer att visa" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "window2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:98 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Beskrivning:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP-server:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Portnummer:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Rot DN:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Namn:" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Det finns inga objekt att visa i denna vyn\n" -"\n" -"Dubbel-klicka här för att skapa en ny kontakt." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Inställningar för sida:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Bladnamn:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Förhandsgranskning:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Alternativ" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Inkludera:" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Sektioner:" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Följ efter varandra omedelbart" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Brevtabbar på sidan" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Rubriker för varje brev" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Börja på en ny sida" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Antal kolumner" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Tomma blanketter vid slutet:" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Typsnitt" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Typsnitt..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Rubriker" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Kropp" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 pt. Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Skuggning" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Skriv ut med grå skuggning" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Format" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Papper" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Typ:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -msgid "label26" -msgstr "label26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Geometri:" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "Bredd:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Höjd:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Papperskälla:" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Marginaler" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Topp:" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Botten:" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Vänster:" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Höger:" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Sida" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Storlek:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Orientation" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Stående" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Liggande" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Rubrik" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Sidfot:" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Backa vid jämna sidor" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Rubrik/sidfot" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:544 -msgid "am" -msgstr "am" - -#: calendar/cal-util/timeutil.c:96 calendar/gui/print.c:543 -msgid "pm" -msgstr "pm" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "Rubriker:" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "Ärenden:" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "Dagnummer:" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "Gnome-kalender" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "GNOMEs personliga kalender och schemahanterare." - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "Filen hittades inte" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "Öppna kalendern" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "Spara kalendern" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:713 -#: calendar/gui/gncal-todo.c:717 -msgid "Day" -msgstr "Dag" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "Visa 1 dag" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "5 dagar" - -#: calendar/gui/calendar-commands.c:525 -#, fuzzy -msgid "Show the working week" -msgstr "Växlar trädvyn" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:712 -msgid "Week" -msgstr "Vecka" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "Visa 1 vecka" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "Månader" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "Visa 1 månad" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "År" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "Visa 1 år" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:682 -msgid "Create a new appointment" -msgstr "Skapa ett nytt ärende" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:674 -msgid "Print this calendar" -msgstr "Skriv ut denna kalendern" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "Gå tillbaka i tiden" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Idag" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "Gå till nutid" - -#: calendar/gui/calendar-commands.c:554 filter/filter-editor.c:210 -msgid "Next" -msgstr "Nästa" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "Gå fram i tiden" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "Gå till" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "Gå till ett specifikt datum" - -#. file menu -#: calendar/gui/calendar-commands.c:659 -msgid "New Ca_lendar" -msgstr "Ny ka_lender" - -#: calendar/gui/calendar-commands.c:660 -msgid "Create a new calendar" -msgstr "Skapa en ny kalender" - -#: calendar/gui/calendar-commands.c:663 -msgid "Open Ca_lendar" -msgstr "Öppna ka_lender" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open a calendar" -msgstr "Öppna en kalender" - -#: calendar/gui/calendar-commands.c:668 calendar/gui/calendar-commands.c:669 -msgid "Save Calendar As" -msgstr "Spara kalender som" - -#: calendar/gui/calendar-commands.c:682 -msgid "_New appointment..." -msgstr "_Nytt ärende..." - -#: calendar/gui/calendar-commands.c:687 -msgid "New appointment for _today..." -msgstr "Ny_tt ärende för idag..." - -#: calendar/gui/calendar-commands.c:688 -msgid "Create a new appointment for today" -msgstr "Skapa ett nytt ärende för idag" - -#: calendar/gui/calendar-commands.c:696 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "Inställningar" - -#: calendar/gui/calendar-commands.c:703 calendar/gui/calendar-commands.c:704 -msgid "About Calendar" -msgstr "Om kalendern" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:746 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:746 -msgid "'s calendar" -msgstr "'s kalender" - -#: calendar/gui/control-factory.c:136 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "URL:en som mappbläddraden kommer att visa" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "Alarm på %A %b %d %Y %H:%M" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Stäng" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1056 -#, fuzzy -msgid "Snooze" -msgstr "Storlek" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Redigera ärende" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Nytt ärende..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Redigera detta ärendet..." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Ta bort detta ärendet" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Gör detta ärendet flyttbart" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "Ta bort detta meddelandet" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:289 -msgid "Edit Appointment" -msgstr "Redigera ärende" - -#: calendar/gui/event-editor.c:294 -msgid "No summary" -msgstr "Ingen sammanfattning" - -#: calendar/gui/event-editor.c:298 -#, c-format -msgid "Appointment - %s" -msgstr "Ärende - %s" - -#: calendar/gui/event-editor.c:301 -#, c-format -msgid "Task - %s" -msgstr "Uppgift - %s" - -#: calendar/gui/event-editor.c:304 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "_Dagbokpost" - -#. Owner, summary -#: calendar/gui/event-editor.c:594 calendar/gui/event-editor.c:688 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1148 -#, fuzzy -msgid "FIXME: _Delete" -msgstr "Ta bort" - -#: calendar/gui/event-editor.c:1215 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1250 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/event-editor.c:1251 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/event-editor.c:1258 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "_Möte" - -#: calendar/gui/event-editor.c:1260 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1262 -msgid "FIXME: Intive _Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1263 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1320 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/event-editor.c:1325 -msgid "FIXME: Print..." -msgstr "" - -#: calendar/gui/event-editor.c:1330 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/event-editor.c:1331 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/event-editor.c:1333 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1334 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1336 -#, fuzzy -msgid "FIXME: Delete" -msgstr "Ta bort" - -#: calendar/gui/event-editor.c:1745 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "januari" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "februari" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "mars" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "april" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "maj" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "juni" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "juli" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "augusti" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "september" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "sept" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "oktober" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "november" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "december" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "söndag" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "måndag" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "tisdag" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "tis" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "onsdag" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "ons" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "torsdag" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "tor" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "tors" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "fredag" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "lördag" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "år" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "månad" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "vecka" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "dag" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "timme" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "minut" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "min" - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "sekund" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "sek" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "imorgon" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "förgår" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "idag" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "nu" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "Klistra in" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "nästa" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "första" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "tredje" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "fjärde" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "femte" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "sjätte" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "sjunde" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "åttonde" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "nionde" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "tionde" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "elfte" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "tolfte" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "sen" - -#: calendar/gui/gncal-todo.c:137 -msgid "Create to-do item" -msgstr "Skapa att-göra objekt" - -#: calendar/gui/gncal-todo.c:137 -msgid "Edit to-do item" -msgstr "Redigera att-göra objekt" - -#: calendar/gui/gncal-todo.c:171 -msgid "Summary:" -msgstr "Sammanfattning:" - -#: calendar/gui/gncal-todo.c:181 -#, fuzzy -msgid "Due Date:" -msgstr "Avdelning:" - -#: calendar/gui/gncal-todo.c:190 -msgid "Priority:" -msgstr "Prioritet:" - -#: calendar/gui/gncal-todo.c:207 -msgid "Item Comments:" -msgstr "Objektkommentarer:" - -#: calendar/gui/gncal-todo.c:325 -msgid "Add to-do item..." -msgstr "Lägg till att-göra objekt..." - -#: calendar/gui/gncal-todo.c:326 -msgid "Edit this item..." -msgstr "Redigera detta objektet..." - -#: calendar/gui/gncal-todo.c:425 -msgid "Summary" -msgstr "Sammanfattning" - -#: calendar/gui/gncal-todo.c:426 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "" - -#: calendar/gui/gncal-todo.c:427 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Prioritet" - -#: calendar/gui/gncal-todo.c:428 -msgid "Time Left" -msgstr "Tid kvar" - -#. Label -#: calendar/gui/gncal-todo.c:440 -msgid "To-do list" -msgstr "Att-göra lista" - -#. Add -#: calendar/gui/gncal-todo.c:479 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Lägg till..." - -#. Edit -#: calendar/gui/gncal-todo.c:488 -msgid "Edit..." -msgstr "Redigera..." - -#: calendar/gui/gncal-todo.c:712 -msgid "Weeks" -msgstr "Veckor" - -#: calendar/gui/gncal-todo.c:713 calendar/gui/gncal-todo.c:717 -msgid "Days" -msgstr "Dagar" - -#: calendar/gui/gncal-todo.c:718 calendar/gui/gncal-todo.c:722 -msgid "Hours" -msgstr "Timmar" - -#: calendar/gui/gncal-todo.c:718 calendar/gui/gncal-todo.c:722 -msgid "Hour" -msgstr "Timme" - -#: calendar/gui/gncal-todo.c:723 calendar/gui/gncal-todo.c:727 -msgid "Minutes" -msgstr "Minuter" - -#: calendar/gui/gncal-todo.c:723 calendar/gui/gncal-todo.c:727 -msgid "Minute" -msgstr "Minut" - -#: calendar/gui/gncal-todo.c:728 calendar/gui/gncal-todo.c:732 -msgid "Seconds" -msgstr "Sekunder" - -#: calendar/gui/gncal-todo.c:728 calendar/gui/gncal-todo.c:732 -msgid "Second" -msgstr "Sekund" - -#: calendar/gui/gnome-cal.c:453 calendar/gui/gnome-cal.c:1064 -#: calendar/gui/gnome-cal.c:1120 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1069 calendar/gui/gnome-cal.c:1124 -msgid "Ok" -msgstr "Ok" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Sön" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "Mån" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Tis" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Ons" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Tors" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Fre" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "Lör" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "År:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Gå till datum" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Gå till idag" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "Må" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "Ti" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "On" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "To" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "Fr" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "Lö" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "ATT-GÖRA objekt" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "Aktuell dag (%a %b %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Aktuell vecka (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Aktuell vecka (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Aktuell vecka (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Nuvarande månad (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Aktuellt år (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Skriv ut kalender" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Förhandsgranskning" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "Tidsvisning" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "Tidsformat" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "12-timmars (AM/PM)" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "24-timmars" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "Veckor börjar på" - -#: calendar/gui/prop.c:347 -msgid "Sunday" -msgstr "Söndag" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "Måndag" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "Färger för visning" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "Färger" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "Visa på ATT-GÖRA listan:" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "Alarm" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -msgid "Alarm Properties" -msgstr "Egenskaper hos alarm" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr " sekunder" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -#, fuzzy -msgid "Defaults" -msgstr "Detaljer" - -#: composer/e-msg-composer-address-dialog.c:183 composer/e-msg-composer.c:945 -msgid "Cut" -msgstr "Klipp ut" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Klipp ut markerat objekt till urklipp" - -#: composer/e-msg-composer-address-dialog.c:187 composer/e-msg-composer.c:946 -msgid "Copy" -msgstr "Kopiera" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Kopiera markerat objekt till urklipp" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 composer/e-msg-composer.c:947 -msgid "Paste" -msgstr "Klistra in" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Klistra in objekt från urklipp" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Välj mottagaradresser" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Mottagarlista:" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Sök..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Namn" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "Adress" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Egenskaper..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "Till: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "label9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "label7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "label8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 byte" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u byte" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fK" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fM" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fG" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Lägg till bilaga" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Ta bort" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Ta bort markerade objekt från bifogningslistan" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Lägg till bilaga..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Bifoga en fil till meddelandet" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Egenskaper hos bilagan" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "Mime-typ:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Filnamn:" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Klicka här för att ta fram adressboken" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "Till:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Ange meddelandets mottagare" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Ange adresserna som ska få en kopia av meddelandet" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Ange adressen till den som ska ta emot extrakopian av meddelandet utan att " -"den visas i mottagandelistan av meddelandet." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Ämne:" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Ange brevets ämne" - -#: composer/e-msg-composer.c:463 -msgid "Save as..." -msgstr "Spara som..." - -#: composer/e-msg-composer.c:474 -#, c-format -msgid "Error saving file: %s" -msgstr "Fel vid sparning av filen: %s" - -#: composer/e-msg-composer.c:494 -#, c-format -msgid "Error loading file: %s" -msgstr "Fel vid laddning av filen: %s" - -#: composer/e-msg-composer.c:513 -#, fuzzy -msgid "Discard this message?" -msgstr "Skicka detta meddelandet vidare" - -#: composer/e-msg-composer.c:561 -msgid "Open file" -msgstr "Öppna fil" - -#: composer/e-msg-composer.c:676 -msgid "That file does not exist." -msgstr "Den filen finns inte." - -#: composer/e-msg-composer.c:686 -msgid "That is not a regular file." -msgstr "Den där är ingen vanlig fil." - -#: composer/e-msg-composer.c:696 -msgid "That file exists but is not readable." -msgstr "Den filen finns men är inte läsbar." - -#: composer/e-msg-composer.c:707 -msgid "That file appeared accesible but open(2) failed." -msgstr "" - -#: composer/e-msg-composer.c:729 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"Filen är mycket stor (mer än 100K).\n" -"Är du säker på att du vill infoga den?" - -#: composer/e-msg-composer.c:748 -msgid "An error occurred while reading the file." -msgstr "Ett fel uppstod vid läsning av filen." - -#: composer/e-msg-composer.c:888 -msgid "Save in _folder..." -msgstr "Spara i _mapp..." - -#: composer/e-msg-composer.c:888 -msgid "Save the message in a specified folder" -msgstr "Spara meddelandet i en viss mapp" - -#: composer/e-msg-composer.c:891 -msgid "_Insert Text File" -msgstr "_Infoga textfil" - -#: composer/e-msg-composer.c:891 -msgid "Insert a file as text into the message" -msgstr "Infoga en fil som text i meddelandet" - -#: composer/e-msg-composer.c:894 composer/e-msg-composer.c:942 -msgid "Send" -msgstr "Skicka" - -#: composer/e-msg-composer.c:894 -msgid "Send the message" -msgstr "Skicka meddelandet" - -#: composer/e-msg-composer.c:906 -msgid "View _attachments" -msgstr "Visa _bilagor" - -#: composer/e-msg-composer.c:907 -msgid "View/hide attachments" -msgstr "Visa/göm bilagor" - -#: composer/e-msg-composer.c:942 -msgid "Send this message" -msgstr "Skicka detta meddelandet" - -#: composer/e-msg-composer.c:945 -msgid "Cut selected region into the clipboard" -msgstr "Klipp ut markerat område till urklipp" - -#: composer/e-msg-composer.c:946 -msgid "Copy selected region into the clipboard" -msgstr "Kopiera markerat område till urklipp" - -#: composer/e-msg-composer.c:947 -msgid "Paste selected region into the clipboard" -msgstr "Klistra in markerat område till urklipp" - -#: composer/e-msg-composer.c:948 -msgid "Undo" -msgstr "Ångra" - -#: composer/e-msg-composer.c:948 -msgid "Undo last operation" -msgstr "Ångra senaste ändringen" - -#: composer/e-msg-composer.c:951 -msgid "Attach" -msgstr "Bifoga" - -#: composer/e-msg-composer.c:951 -msgid "Attach a file" -msgstr "Bifoga en fil" - -#: composer/e-msg-composer.c:1127 -msgid "Compose a message" -msgstr "" - -#: filter/filter-editor.c:198 -msgid "Edit Filter" -msgstr "Redigera filter" - -#: filter/filter-editor.c:198 -msgid "Create filter" -msgstr "Skapa filter" - -#: filter/filter-editor.c:209 -msgid "Back" -msgstr "Tillbaka" - -#: filter/filter-editor.c:211 -msgid "Finish" -msgstr "Klar" - -#: filter/filter-editor.c:212 -msgid "Cancel" -msgstr "Avbryt" - -#: filter/filter-editor.c:216 -msgid "Apply" -msgstr "Verkställ" - -#: filter/filter-editor.c:233 -msgid "" -"

Create Filtering Rule

Select one of the base rules above, then " -"continue forwards to customise it.

" -msgstr "" - -#: mail/component-factory.c:196 -msgid "Cannot initialize Evolution's mail component." -msgstr "Kan inte initialisera Evolutions postkomponent." - -#: mail/folder-browser-factory.c:29 -msgid "Get mail" -msgstr "Hämta post" - -#: mail/folder-browser-factory.c:29 -msgid "Check for new mail" -msgstr "Kolla efter ny post" - -#: mail/folder-browser-factory.c:30 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:30 -#, fuzzy -msgid "Compose a new message" -msgstr "Skriv ett nytt brev" - -#: mail/folder-browser-factory.c:34 -msgid "Reply" -msgstr "Svara" - -#: mail/folder-browser-factory.c:34 -msgid "Reply to the sender of this message" -msgstr "Svara till sändaren av det här meddelandet" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to All" -msgstr "Svara till alla" - -#: mail/folder-browser-factory.c:35 -msgid "Reply to all recipients of this message" -msgstr "Svara till alla mottagare av det här meddelandet" - -#: mail/folder-browser-factory.c:37 -msgid "Forward" -msgstr "Skicka vidare" - -#: mail/folder-browser-factory.c:37 -msgid "Forward this message" -msgstr "Skicka detta meddelandet vidare" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Refile" -msgstr "Mottag" - -#: mail/folder-browser-factory.c:41 -#, fuzzy -msgid "Move message to a new folder" -msgstr "Spara meddelandet i en viss mapp" - -#: mail/folder-browser-factory.c:43 -msgid "Print the selected message" -msgstr "Skriv ut markerat meddelande" - -#: mail/folder-browser-factory.c:45 -msgid "Delete this message" -msgstr "Ta bort detta meddelandet" - -#: mail/folder-browser-factory.c:65 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:77 -msgid "_Expunge" -msgstr "Rad_era" - -#: mail/folder-browser-factory.c:83 -msgid "_Filter Druid ..." -msgstr "_Filter-guide ..." - -#: mail/folder-browser-factory.c:89 -msgid "_Virtual Folder Druid ..." -msgstr "" - -#: mail/folder-browser-factory.c:95 -msgid "_Mail Configuration ..." -msgstr "_Post konfiguration ..." - -#: mail/folder-browser-factory.c:101 -msgid "Forget _Passwords" -msgstr "_Glöm lösenord" - -#: mail/mail-config.c:262 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Ange ditt namn och epost-adress som ska användas i utgående post. Du kan " -"också, om du vill, ange namnet på din organisation, och namnet på en fil att " -"läsa din signatur från." - -#: mail/mail-config.c:277 -msgid "Full name:" -msgstr "Hela namnet:" - -#: mail/mail-config.c:305 -msgid "Email address:" -msgstr "Epost-adress:" - -#: mail/mail-config.c:328 -msgid "Organization:" -msgstr "Organisation:" - -#: mail/mail-config.c:340 -msgid "Signature file:" -msgstr "Signaturfil:" - -#: mail/mail-config.c:345 -msgid "Signature File" -msgstr "Signaturfil" - -#: mail/mail-config.c:718 mail/mail-config.c:812 mail/mail-config.c:1621 -msgid "Server:" -msgstr "Server:" - -#: mail/mail-config.c:725 -msgid "Username:" -msgstr "Filnamn:" - -#: mail/mail-config.c:732 -msgid "Path:" -msgstr "Sökväg" - -#: mail/mail-config.c:739 mail/mail-config.c:819 -#, fuzzy -msgid "Authentication:" -msgstr "Orientation" - -#: mail/mail-config.c:751 mail/mail-config.c:831 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config.c:777 mail/mail-config.c:853 -msgid "Test these values before continuing" -msgstr "Testa dessa värden innan nästa steg" - -#: mail/mail-config.c:960 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config.c:978 -msgid "Select the method you would like to use to deliver your mail." -msgstr "Välj den metod du vill använda för att leverera din post." - -#: mail/mail-config.c:1163 mail/mail-config.c:1242 -msgid "Mail Configuration" -msgstr "Konfiguration för post" - -#. Identity page -#: mail/mail-config.c:1180 -msgid "Identity" -msgstr "Identitet" - -#. Source page -#: mail/mail-config.c:1199 -msgid "Mail Source" -msgstr "Post-källa" - -#. Transport page -#: mail/mail-config.c:1220 -msgid "Mail Transport" -msgstr "Post-transportering" - -#: mail/mail-config.c:1343 -msgid "Edit Identity" -msgstr "Redigera identitet" - -#: mail/mail-config.c:1345 -msgid "Add Identity" -msgstr "Lägg till identitet" - -#: mail/mail-config.c:1488 -msgid "Edit Source" -msgstr "Redigera källa" - -#: mail/mail-config.c:1490 -msgid "Add Source" -msgstr "Lägg till källa" - -#. "\n\n" -#. "If the server requires authentication, you can click the " -#. "\"Detect supported types...\" button after entering " -#. "the other information." -#: mail/mail-config.c:1600 -msgid "Enter the hostname of the News Server you have." -msgstr "Ange värdnamnet på den nyhetsserver du har." - -#: mail/mail-config.c:1656 -msgid "Edit News Server" -msgstr "Redigera nyhetsserver" - -#: mail/mail-config.c:1658 -msgid "Add News Server" -msgstr "Lägg till nyhetsserver" - -#: mail/mail-ops.c:374 -msgid "Fetching mail" -msgstr "Hämtar post" - -#: mail/mail-ops.c:386 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Detta meddelandet har inget ämne.\n" -"Vill du verkligen skicka?" - -#: mail/mail-ops.c:743 -#, fuzzy -msgid "Refile message(s) to" -msgstr "Nya brev" - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "Kunde inte skapa dialog." - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "" - -#: mail/main.c:62 -msgid "Mail Component: I could not initialize Bonobo" -msgstr "Postkomponent: Jag kunde inte initialisera Bonobo" - -#: mail/message-list.c:460 -msgid "Online Status" -msgstr "Anslutningsstatus" - -#: mail/message-list.c:488 -msgid "From" -msgstr "Från" - -#: mail/message-list.c:495 -msgid "Subject" -msgstr "Ämne" - -#: mail/message-list.c:502 -msgid "Date" -msgstr "Datum" - -#: mail/message-list.c:509 -msgid "Received" -msgstr "Mottog" - -#: mail/message-list.c:516 -msgid "To" -msgstr "Till" - -#: mail/message-list.c:523 -msgid "Size" -msgstr "Storlek" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Installation för Evolution" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Det verkar som det är första gången du kör Evolution." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" -"Var vänlig klicka på \"OK\" för att installera Evolutions användarfiler i" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"Kan inte skapa katalogen\n" -"%s\n" -"Fel: %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Kan inte kopiera filer till\n" -"'%s'." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolutions installation lyckades." - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, fuzzy, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "Spara meddelandet i en viss mapp" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "Det angivna mappnamnet är inte giltigt." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Skapa ny mapp" - -#: shell/e-shell-folder-selection-dialog.c:95 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:236 -msgid "New..." -msgstr "Ny..." - -#: shell/e-shell-folder-title-bar.c:355 -msgid "(Untitled)" -msgstr "(Namnlös)" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:110 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug-buddy hittades inte i din $PATH." - -#. same as above -#: shell/e-shell-view-menu.c:116 -msgid "Bug buddy could not be run." -msgstr "Bug-buddy kunde inte köras." - -#: shell/e-shell-view-menu.c:159 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:161 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:163 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution är en svit av grupprogram\n" -"för epost, kalender, och kontakt-hantering\n" -"inom GNOME's skrivbordsmiljö." - -#: shell/e-shell-view-menu.c:301 -msgid "Go to folder..." -msgstr "Gå till mapp..." - -#: shell/e-shell-view-menu.c:365 -msgid "_Folder" -msgstr "_Mapp" - -#: shell/e-shell-view-menu.c:369 -msgid "Evolution _Bar Shortcut" -msgstr "Evolution genvägsrad" - -#: shell/e-shell-view-menu.c:375 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "_Posta meddelande" - -#: shell/e-shell-view-menu.c:376 shell/e-shell-view-menu.c:379 -msgid "Composes a new mail message" -msgstr "Skriv ett nytt brev" - -#: shell/e-shell-view-menu.c:378 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "_Möte" - -#: shell/e-shell-view-menu.c:381 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "_Kontakt" - -#: shell/e-shell-view-menu.c:384 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:387 -#, fuzzy -msgid "Task _Request (FIXME)" -msgstr "Uppgiftsbegä_ran" - -#: shell/e-shell-view-menu.c:390 -#, fuzzy -msgid "_Journal Entry (FIXME)" -msgstr "_Dagbokpost" - -#: shell/e-shell-view-menu.c:398 -msgid "_New" -msgstr "_Ny" - -#: shell/e-shell-view-menu.c:402 -msgid "_Go to folder..." -msgstr "_Gå till mapp..." - -#: shell/e-shell-view-menu.c:402 -msgid "Display a different folder" -msgstr "Visa en annan mapp" - -#: shell/e-shell-view-menu.c:404 -msgid "_Create new folder..." -msgstr "_Skapa ny mapp..." - -#: shell/e-shell-view-menu.c:404 -msgid "Create a new folder" -msgstr "Skapa en ny mapp" - -#: shell/e-shell-view-menu.c:419 -#, fuzzy -msgid "Show _shortcut bar" -msgstr "_Växla genvägsrad" - -#: shell/e-shell-view-menu.c:420 -#, fuzzy -msgid "Show the shortcut bar" -msgstr "Växlar genvägsraden" - -#: shell/e-shell-view-menu.c:422 -#, fuzzy -msgid "Show _folder bar" -msgstr "_Växla genvägsrad" - -#: shell/e-shell-view-menu.c:423 -#, fuzzy -msgid "Show the folder bar" -msgstr "Växlar genvägsraden" - -#: shell/e-shell-view-menu.c:440 -msgid "Help _Index" -msgstr "" - -#: shell/e-shell-view-menu.c:443 -msgid "Getting _Started" -msgstr "" - -#: shell/e-shell-view-menu.c:446 -msgid "Using the _Mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:449 -msgid "Using the _Calendar" -msgstr "Att använda kalendern" - -#: shell/e-shell-view-menu.c:452 -msgid "Using the Cont_act Manager" -msgstr "Att använda kontakthanteraren" - -#: shell/e-shell-view-menu.c:457 -msgid "_Submit bug report" -msgstr "_Skicka felrapport" - -#: shell/e-shell-view-menu.c:458 -msgid "Submit bug-report via bug-buddy" -msgstr "Skicka felrapport via bug-buddy" - -#: shell/e-shell-view-menu.c:474 -msgid "_Actions" -msgstr "_Händelser" - -#: shell/e-shell-view.c:113 -msgid "(No folder displayed)" -msgstr "(Ingen mapp visas)" - -#: shell/e-shell-view.c:208 -msgid "Folders" -msgstr "Mappar" - -#: shell/e-shell-view.c:596 -msgid "None" -msgstr "Inga" - -#: shell/e-shell-view.c:600 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:299 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Kan inte lägga upp lokal sparningsplats -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "_Små ikoner" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Visa genvägarna som små ikoner" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "S_tora ikoner" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Visa genvägarna som stora ikoner" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Aktivera" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Aktivera denna genvägen" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Ta bort denna genvägen från genvägsraden" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Fel vid sparning av genvägar." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "(Inget namn)" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Inga fel" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "En mapp med samma namn finns redan" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "Den angivna mapptypen är inte giltig" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "I/O-fel" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Inte tillräckligt med utrymme att skapa mapp" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Den angivna mappen hittades inte" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Okänt fel" - -#: shell/main.c:99 -#, fuzzy -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Hej. Tack för att du tog tiden att ladda ner den här förhandsversionen av\n" -"Evolution grupprogramsviten.\n" -"\n" -"Evolution-teamet har jobbat hårt för att göra Evolution så robust,\n" -"utbyggbart, snyggt, snabbt och välutrustat för avancerade internetanvändare " -"som\n" -"möjligt. Och vi är väldigt trötta. Men vi är inte klara -- inte än.\n" -"\n" -"Allt eftersom du utforskar Evolution, var vänlig och förstå att det mesta av " -"vårt arbete har\n" -"fokuserats på backgrundsmotorn som kör hela systemet och\n" -"inte användargränssnittet. Vi håller däremot just på att komma upp för " -"kullen,\n" -"och vi kommer att använda nästan all vår kärlek och uppmärksamhet till UI:et " -"från\n" -"och med nu. Men du vet åtminstone att du inte använder ett demo.\n" -"\n" -"Så, dags för den nördiga förnekelsen. Evolution kommer att: krascha, göra av " -"med din\n" -"epost, lämna kvar förvirrade processer, använda 100% CPU, löpa, låsa sig,\n" -"skicka HTML-post till slumpmässiga maillistor, och skämma ut dig framför\n" -"dina vänner och medarbetare. Använd vid egen risk.\n" -"\n" -"Vi hoppas att du trivs med resultatet av vårt hårda arbete, och vi väntar\n" -"irvrigt på dina bidrag!\n" - -#: shell/main.c:126 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Tack\n" -"Evolution-teamet\n" - -#: shell/main.c:172 -msgid "Cannot initialize the Evolution shell." -msgstr "Kan inte initialisera Evolution-skalet" - -#: shell/main.c:214 -msgid "Cannot initialize the configuration system." -msgstr "Kan inte initialisera konfigurationssystemet." - -#: shell/main.c:220 -msgid "Cannot initialize the Bonobo component system." -msgstr "Kan inte initiera Bonobo-komponentsystemet" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Poster" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Gruppering" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Sortera" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filter" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#, fuzzy -msgid "Field Chooser" -msgstr "Poster" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "window1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Tillgänliga poster" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "label1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Visa i denna ordningen" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "label2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Lägg till >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Ta bort" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -#, fuzzy -msgid "Tentative" -msgstr "Orientation" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Upptagen" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -#, fuzzy -msgid "Out of Office" -msgstr "Kontor:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Ingen information" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Alternativ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Autovälj" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Alla människor och tillgångar" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -#, fuzzy -msgid "Meeting _start time:" -msgstr "Begäran om möte" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -#, fuzzy -msgid "Meeting _end time:" -msgstr "Begäran om möte" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Grupp %i" - -#, fuzzy -#~ msgid "No description" -#~ msgstr "Beskrivning:" - -#, fuzzy -#~ msgid "_Mail" -#~ msgstr "_Mobil" - -#, fuzzy -#~ msgid "Pri_vate" -#~ msgstr "Klistra in" - -#, fuzzy -#~ msgid "Daily" -#~ msgstr "Detaljer" - -#, fuzzy -#~ msgid "label23" -#~ msgstr "label2" - -#, fuzzy -#~ msgid "label24" -#~ msgstr "label2" - -#, fuzzy -#~ msgid "label25" -#~ msgstr "label2" - -#, fuzzy -#~ msgid "month(s)" -#~ msgstr "Typsnitt" - -#, fuzzy -#~ msgid "label27" -#~ msgstr "label7" - -#, fuzzy -#~ msgid "Exceptions" -#~ msgstr "Alternativ" - -#, fuzzy -#~ msgid "Change" -#~ msgstr "Skuggning" - -#~ msgid "Evolution can not create its local folders" -#~ msgstr "Evolution kan inte skapa sina lokala mappar" - -#~ msgid "New group" -#~ msgstr "Ny grupp" - -#~ msgid "Browse..." -#~ msgstr "Bläddra..." - -#~ msgid "Send a new message" -#~ msgstr "Skicka ett nytt meddelande" - -#~ msgid "Find messages" -#~ msgstr "Hitta meddelanden" - -#~ msgid "We are sorry, Evolution's Folder Browser can not be initialized." -#~ msgstr "Tyvärr, Evolutions mappbläddrare kan inte initialiseras." - -#~ msgid "Whether a message preview should be shown" -#~ msgstr "Huruvida meddelanden ska förhandsgranskas" - -#~ msgid "_Task" -#~ msgstr "Uppgif_t" - -#~ msgid "_Selected Items" -#~ msgstr "_Markerade objekt" - -#~ msgid "_New Folder" -#~ msgstr "_Ny mapp" - -#~ msgid "_Open" -#~ msgstr "_Öppna" - -#~ msgid "Clos_e All Items" -#~ msgstr "Stäng _alla objekt" - -#~ msgid "Closes all the open items" -#~ msgstr "Stänger alla öppna objekt" - -#, fuzzy -#~ msgid "Show _Treeview" -#~ msgstr "_Växla trädvy" - -#~ msgid "" -#~ "This is a development version of Evolution.\n" -#~ "Using the mail component on your mail files\n" -#~ "is extremely hazardous.\n" -#~ "\n" -#~ "Do not run this program on your real mail,\n" -#~ "do not give it access to your real mail server,\n" -#~ "and do not send mail to real people with it.\n" -#~ "\n" -#~ "You have been warned\n" -#~ msgstr "" -#~ "Det här är en utvecklingsversion av Evolution.\n" -#~ "Att använda brevkomponenten till dina brevfiler\n" -#~ "är extremt riskfyllt.\n" -#~ "\n" -#~ "Kör inte det här programmet på din riktiga epost,\n" -#~ "ge den inte tillgång till din riktiga brevserver,\n" -#~ "och skicka inte brev till riktiga människor med den.\n" -#~ "\n" -#~ "Du har blivit varnad\n" - -#~ msgid "A folder containing mail items" -#~ msgstr "En mapp som innehåller mailobjekt" - -#~ msgid "A folder containing contacts" -#~ msgstr "En mapp som innehåller kontakter" - -#~ msgid "A folder containing calendar entries" -#~ msgstr "En mapp som innehåller kalenderposter" - -#~ msgid "A folder containing tasks" -#~ msgstr "En mapp som innehåller uppgifter" - -#~ msgid "A service containing mail items" -#~ msgstr "En tjänst som innehåller postobjekt" - -#~ msgid "A service containing contacts" -#~ msgstr "En tjänst som innehåller kontakter" - -#~ msgid "A service containing calendar entries" -#~ msgstr "En tjänst som innehåller kalanderposter" - -#~ msgid "A service containing tasks" -#~ msgstr "En tjänst som innehåller uppgifter" - -#~ msgid "Remove Group" -#~ msgstr "Ta bort grupp" - -#~ msgid "Rename Group" -#~ msgstr "Byt namn på grupp" - -#~ msgid "Open in New Window" -#~ msgstr "Öppna i ett nytt fönster" - -#~ msgid "Advanced Find" -#~ msgstr "Avancerat sök" - -#~ msgid "Rename Shortcut" -#~ msgstr "Byt namn på genväg" - -#~ msgid "Executive Summary" -#~ msgstr "Slutgiltiga summan" - -#~ msgid "Inbox" -#~ msgstr "Inbox" - -#~ msgid "Sent messages" -#~ msgstr "Skickade brev" - -#~ msgid "Sent mail messages" -#~ msgstr "Skickade brev" - -#~ msgid "Draft mail messages" -#~ msgstr "Icke färdigskriven epost" - -#~ msgid "Tasks list" -#~ msgstr "Lista med uppgifter" - -#~ msgid "Other Shortcuts" -#~ msgstr "Andra genvägar" - -#~ msgid "Enables some debugging functions" -#~ msgstr "Aktiverar felsökningsfunktioner" - -#~ msgid "LEVEL" -#~ msgstr "NIVÅ" - -#~ msgid "" -#~ "It was not possible to setup the Evolution startup files. Please\n" -#~ "fix the problem, and restart Evolution" -#~ msgstr "" -#~ "Det gick ej att ställa in Evolutions uppstartsfiler. Var vänlig\n" -#~ "och fixa problemet, och starta om Evolution" - -#~ msgid "" -#~ "An exception occured while trying to load data into the component with " -#~ "PersistStream" -#~ msgstr "" -#~ "Ett undantag uppstod vid laddning av data till komponenten med PersistStream" - -#~ msgid "The %s component doesn't support PersistStream!\n" -#~ msgstr "Komponenten %s stöder inte PersistStream!\n" - -#~ msgid "" -#~ "Evolution detected that the file `%s' is a not a directory.\n" -#~ "\n" -#~ "Evolution can rename the file, delete the file or shutdown and\n" -#~ "let you fix the problem." -#~ msgstr "" -#~ "Evolution har upptäckt att filen \"%s\" inte är en katalog.\n" -#~ "\n" -#~ "Evolution kan byta namn på filen, ta bort den eller stänga av och\n" -#~ "låt dig fixa problemet." - -#~ msgid "Message status" -#~ msgstr "Meddelandestatus" diff --git a/po/tr.po b/po/tr.po deleted file mode 100644 index b5b96dad9d..0000000000 --- a/po/tr.po +++ /dev/null @@ -1,3376 +0,0 @@ -# ------------------------------------------------------- -# Copyright (C) 2000 Free Software Foundation, Inc. -# Fatih Demir , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.3.1\n" -"POT-Creation-Date: 2000-08-05 10:50+0200\n" -"PO-Revision-Date: 2000-08-05 10:53+0200\n" -"Last-Translator: Fatih Demir \n" -"Language-Team: Turkish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-9\n" -"Content-Transfer-Encoding: 8bit\n" - -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/gui/component/addressbook-factory.c:59 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "Bonobo'yu baþlatamadým" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "türler" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "Bu türlere ait olan birimler :" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "Varolan türler :" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "ABY : _Toplantý" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "ABY : Toplantý is_teði" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "ABY : e_Posta iletisi" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "ABY : _Tanýk" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "ABY : _Görev" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "ABY : Görev _isteði" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "ABY : Gü_nlük birimi" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "ABY : _Not" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/event-editor.c:1178 calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "ABY : Seçme _formu ..." - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "ABY : _Aný stili" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "ABY : Yazdýrma _stilini belirle" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "ABY : Gö_nder" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "ABY : Eklem _ekle ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "_Sil" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "ABY : Dizine _taþý ..." - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "ABY : Dizine _kopyala ..." - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "Sayfa _kurulumu" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "ABY : Yazdýrma önizlemesi" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "ABY : Ö_zel yapýþtýr ..." - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "ABY : _Okunmamýþ olarak iþaretle" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "_Nesne" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/event-editor.c:1238 calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "ABY : _Birim" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/event-editor.c:1239 calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "ABY : _Okunmamýþ birim" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "ABY : Dizindeki _ilk birim" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "ABY : Dizindeki _son birim" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "ABY : _Vasat" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "ABY : __Þekillendirme" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "ABY : _Özelleþtir ..." - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "_Geri" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "_Ileri" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "_Araç çubuklarý" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "ABY : _Dosya ..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "ABY : Bi_rim ..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "ABY : _Nesne ..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "ABY : _Yazý tipi ..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "ABY : _Fýkra ..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "ABY : Bu formu _düzenle" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "ABY : _Bir formu düzenle ..." - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "ABY : _Formu açýkla ..." - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "ABY : Formu far_klý açikla ..." - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "ABY : Denetlem çö_zümleyicisi" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "ABY : _Imla ..." - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "_Þekiller" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "ABY : _Yeni tanýk" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "ABY : Ayný þi_rketten yeni bir tanýk" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "ABY : Tanýða yeni bir _mektup" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "ABY : Tanýða yeni bir _ileti" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "ABY : Tanýkla yeni bir t_oplantý" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "ABY : _Bir toplantýyý tasarý et ..." - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "ABY : Tanýk için yeni bir _görev" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "ABY : Tanýk için yeni bir gü_nlük birimi" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "ABY : I_letme için iþaretle ..." - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "ABY : _Adresin haritasýný göster" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "ABY : _Websitesini aç" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "ABY : v_Calendat þeklinde ilet" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "ABY : _Ilet" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "_Içer" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "Þeki_l" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/event-editor.c:1331 shell/e-shell-view-menu.c:510 -msgid "_Tools" -msgstr "_Çerezler" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "E_ylemler" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "Kaydet ve kapat" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "Toplantýyý kaydet ve diyaloðu kapat" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:674 -msgid "Print..." -msgstr "Yazdýr ..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "Bu birimi yazdýrt" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "ABY : Dosya içer ..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "Bir dosyayý eklem olarak ekle" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/gui/component/addressbook.c:426 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:39 -msgid "Delete" -msgstr "Sil" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/event-editor.c:1387 calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "Bu birimi sil" - -#: addressbook/contact-editor/e-contact-editor.c:856 -#: calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "ABY : Geri" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "Gerideki birime git" - -#: addressbook/contact-editor/e-contact-editor.c:859 -#: calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "ABY : Ileri" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "Ilerideki birime git" - -#: addressbook/contact-editor/e-contact-editor.c:862 -#: calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "ABY : Yardým" - -#: addressbook/contact-editor/e-contact-editor.c:863 -#: calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "Yardýma bak" - -#: addressbook/contact-editor/e-contact-editor.c:1278 -msgid "Assistant" -msgstr "Yardýmcý" - -#: addressbook/contact-editor/e-contact-editor.c:1279 -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Business" -msgstr "Meslek" - -#: addressbook/contact-editor/e-contact-editor.c:1280 -msgid "Business 2" -msgstr "2.nci Meslek" - -#: addressbook/contact-editor/e-contact-editor.c:1281 -msgid "Business Fax" -msgstr "Mesleki Faks" - -#: addressbook/contact-editor/e-contact-editor.c:1282 -msgid "Callback" -msgstr "Geri arama" - -#: addressbook/contact-editor/e-contact-editor.c:1283 -msgid "Car" -msgstr "Araba" - -#: addressbook/contact-editor/e-contact-editor.c:1284 -msgid "Company" -msgstr "Þirket" - -#: addressbook/contact-editor/e-contact-editor.c:1285 -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Home" -msgstr "Ev" - -#: addressbook/contact-editor/e-contact-editor.c:1286 -msgid "Home 2" -msgstr "2.nci ev" - -#: addressbook/contact-editor/e-contact-editor.c:1287 -msgid "Home Fax" -msgstr "Ev faksý" - -#: addressbook/contact-editor/e-contact-editor.c:1288 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1289 -msgid "Mobile" -msgstr "Cep" - -#: addressbook/contact-editor/e-contact-editor.c:1290 -#: addressbook/contact-editor/e-contact-editor.c:1385 -msgid "Other" -msgstr "Baþka" - -#: addressbook/contact-editor/e-contact-editor.c:1291 -msgid "Other Fax" -msgstr "Baþka faks" - -#: addressbook/contact-editor/e-contact-editor.c:1292 -msgid "Pager" -msgstr "Haberleyici" - -#: addressbook/contact-editor/e-contact-editor.c:1293 -msgid "Primary" -msgstr "Ilk" - -#: addressbook/contact-editor/e-contact-editor.c:1294 -msgid "Radio" -msgstr "Radyo" - -#: addressbook/contact-editor/e-contact-editor.c:1295 -msgid "Telex" -msgstr "Teleks" - -#: addressbook/contact-editor/e-contact-editor.c:1296 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1340 -msgid "Primary Email" -msgstr "Ilk ePosta adresi" - -#: addressbook/contact-editor/e-contact-editor.c:1341 -msgid "Email 2" -msgstr "2.nci ePosta adresi" - -#: addressbook/contact-editor/e-contact-editor.c:1342 -msgid "Email 3" -msgstr "3.ncü ePosta adresi" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "_Ekle" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "Telefon tipleri" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "Yeni telefon tipi" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -msgid "Add" -msgstr "Ekle" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "Tanýk editörü" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "_Tam isim ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "Farklý dosyala :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "Web sitesi :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "_HTML ePostalarýný kabul ediyor" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "Adres :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "_Meslek" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "_Ev" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "Mesleki _Faks" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "_Cep" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "_Meslek" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "_Bu ePostalaþma adresidir" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "_Tanýk ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -msgid "Ca_tegories..." -msgstr "Tü_rler ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "Meslek _tanýmlamasý :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "Þ_irket :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -msgid "General" -msgstr "Genel" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "_Bölük :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "_Ofis :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "_Meslek :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "_Lakap :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "_Zýpzak :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "_Doðum günü :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "_Yardýmcý'sýnýn adý :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "_Menajerinin adý :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "_Yýldönümü :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "_Notlar :" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -msgid "Details" -msgstr "Ince konular" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "Tam ismi kontrol et" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "Ü_styazý :" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "_Ad :" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "_Orta eki :" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "_Soyad :" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "S_onek :" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"Bay\n" -"Bn.\n" -"Dr.\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" -"\n" -"Büyük\n" -"Küçük\n" -"I.\n" -"II.\n" -"III.\n" -"Esq.\n" - -#: addressbook/gui/component/addressbook.c:420 -#: calendar/gui/calendar-commands.c:544 -msgid "New" -msgstr "Yeni" - -#: addressbook/gui/component/addressbook.c:420 -msgid "Create a new contact" -msgstr "Yeni bir tanýk birimi yarat" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find" -msgstr "Bul" - -#: addressbook/gui/component/addressbook.c:424 -msgid "Find a contact" -msgstr "Bir tanýðý bul" - -#: addressbook/gui/component/addressbook.c:425 -#: addressbook/gui/component/addressbook.c:493 -#: calendar/gui/calendar-commands.c:548 mail/folder-browser-factory.c:37 -msgid "Print" -msgstr "Yazdýr" - -#: addressbook/gui/component/addressbook.c:425 -msgid "Print contacts" -msgstr "Tanýklarýy azdýrt" - -#: addressbook/gui/component/addressbook.c:426 -msgid "Delete a contact" -msgstr "Tanýðý sil" - -#: addressbook/gui/component/addressbook.c:500 -#: addressbook/gui/component/addressbook.c:1035 -msgid "As _Table" -msgstr "Çi_zgiye olarak" - -#: addressbook/gui/component/addressbook.c:507 -msgid "_New Contact" -msgstr "_Yeni tanýk" - -#: addressbook/gui/component/addressbook.c:515 -msgid "N_ew Directory Server" -msgstr "Yeni _dizin sunucusu" - -#: addressbook/gui/component/addressbook.c:594 -msgid "Unable to open addressbook" -msgstr "Adres defterini açamadým" - -#: addressbook/gui/component/addressbook.c:599 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" -"Bu adres defterini açamadýk. Bu ya yanlýþ bir\n" -"URI'nin verilmesinden dolayý ya da LDAP desteði \n" -"olmayan bir sunucuya ulaþmaya denediðinden dolayýdýr.\n" -"Bir URI verdinsen, URI'nin doðru olmasýndan emin olduktan sonra\n" -"bir def'a daha dene. Bir URI vermediysen, bir LDAP sunucusuna\n" -"eriþmeye uðraþtýn. LDAp'i kullanmak istiyorsan, OpenLDAP'i\n" -"yükleyip, Evolution'u yeniden denetleyip yeniden yüklemek zorundasýn.\n" - -#: addressbook/gui/component/addressbook.c:939 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "VCard olarak kaydet" - -#: addressbook/gui/component/addressbook.c:1006 -msgid "* Click here to add a contact *" -msgstr "* Bir tanýðý eklemek için buraya týkla *" - -#: addressbook/gui/component/addressbook.c:1042 -msgid "As _Minicards" -msgstr "_Ufak kartlar olarak" - -#: addressbook/gui/component/addressbook.c:1093 -msgid "The URI that the Folder Browser will display" -msgstr "Dizin Gezginini gösterecek olan URI" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "pencere2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "a" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "b" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "c" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "d" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "e" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "f" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "g" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "h" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "i" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "j" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "k" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "l" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "m" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "n" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "o" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "p" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "q" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "r" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "s" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "t" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "u" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "v" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "w" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "x" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "y" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "z" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "Anlatým :" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "LDAP Sunucusu :" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "Kapý no. :" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "Kök DN :" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "Isim :" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" -"\n" -"\n" -"Bu bakýþta gösterilecek birimler yok\n" -"\n" -"Buraya çift-týklayarak bir tanýk birimini yarat." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "Sayfa _kurulumu :" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "Stil adý :" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "Önizleme :" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "Seçenekler" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "Içer :" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "Bölümler :" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "Peþpeþe" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "Mektup tab'lerinin tarafa koy" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "Her bir mektup için üstyazý" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "Yeni bir sayfayla baþla" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "Sütunlarýn sayýsý :" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "Sonda boþ formlar olsun :" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "Yazý tipleri" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "Yazý tipi ..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "Baþlýklar" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "10 punto Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "Içerik" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "8 punto Tahoma" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "Gölgeleme" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "Gri gölgelemeyi kullanarak yazdýrt" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "Þekil" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "Kaðýt" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "Tip :" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -msgid "label26" -msgstr "yafta26" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "Ebatlar :" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "En :" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "Yükseklik :" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "Kaðýt kaynaðý :" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "Kenarlar" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "Üst :" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "Alt :" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "Sol :" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "Sað :" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "Sayfa" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "Boyut :" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "Taraflama" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "Portre" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "Manzara" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "Baþlýk" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "Son :" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "Ikili sayfalarý ters çevir" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "Baþlýk/son" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -msgid "am" -msgstr " ö.ö." - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr " ö.s" - -#: calendar/gui/calendar-commands.c:56 -msgid "Outline:" -msgstr "Dýþlým :" - -#: calendar/gui/calendar-commands.c:57 -msgid "Headings:" -msgstr "Baþlýklar :" - -#: calendar/gui/calendar-commands.c:58 -msgid "Empty days:" -msgstr "Boþ günler :" - -#: calendar/gui/calendar-commands.c:59 -msgid "Appointments:" -msgstr "T_oplantýlar :" - -#: calendar/gui/calendar-commands.c:60 -msgid "Highlighted day:" -msgstr "Öne getirilmiþ gün :" - -#: calendar/gui/calendar-commands.c:61 -msgid "Day numbers:" -msgstr "Gün sayýsý :" - -#: calendar/gui/calendar-commands.c:62 -msgid "Current day's number:" -msgstr "Þu anki günün numarasý :" - -#: calendar/gui/calendar-commands.c:63 -msgid "To-Do item that is not yet due:" -msgstr "Daha geçmemiþ \"Yapýlacak\" birimi :" - -#: calendar/gui/calendar-commands.c:64 -msgid "To-Do item that is due today:" -msgstr "Bugün geçecek olan \"Yapýlacak\" birimi :" - -#: calendar/gui/calendar-commands.c:65 -msgid "To-Do item that is overdue:" -msgstr "Zamaný geçmiþ \"Yapýlacak\" birimi :" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "Gnome Takvimi" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "GNOME þahsi takvim ve görev yönetmeni ." - -#: calendar/gui/calendar-commands.c:434 -msgid "File not found" -msgstr "Dosya bulunamadý" - -#: calendar/gui/calendar-commands.c:456 -msgid "Open calendar" -msgstr "Takvimi aç" - -#: calendar/gui/calendar-commands.c:495 -msgid "Save calendar" -msgstr "Takvimi kaydet" - -#: calendar/gui/calendar-commands.c:522 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "Gün" - -#: calendar/gui/calendar-commands.c:522 -msgid "Show 1 day" -msgstr "1 günü göster" - -#: calendar/gui/calendar-commands.c:525 -msgid "5 Days" -msgstr "5 gün" - -#: calendar/gui/calendar-commands.c:525 -msgid "Show the working week" -msgstr "Çalýþma haftasýný göster" - -#: calendar/gui/calendar-commands.c:528 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "Hafta" - -#: calendar/gui/calendar-commands.c:528 -msgid "Show 1 week" -msgstr "2 haftayý öster" - -#: calendar/gui/calendar-commands.c:531 -msgid "Month" -msgstr "Ay" - -#: calendar/gui/calendar-commands.c:531 -msgid "Show 1 month" -msgstr "1 ayý göster" - -#: calendar/gui/calendar-commands.c:535 -msgid "Year" -msgstr "Yýl" - -#: calendar/gui/calendar-commands.c:535 -msgid "Show 1 year" -msgstr "1 seneyi göster" - -#: calendar/gui/calendar-commands.c:544 calendar/gui/calendar-commands.c:683 -msgid "Create a new appointment" -msgstr "Yeni bir toplantý" - -#: calendar/gui/calendar-commands.c:548 calendar/gui/calendar-commands.c:675 -msgid "Print this calendar" -msgstr "Bu takvimi yazdýrt" - -#: calendar/gui/calendar-commands.c:552 -msgid "Prev" -msgstr "Geri" - -#: calendar/gui/calendar-commands.c:552 -msgid "Go back in time" -msgstr "Zamanda geri git" - -#: calendar/gui/calendar-commands.c:553 -msgid "Today" -msgstr "Bugün" - -#: calendar/gui/calendar-commands.c:553 -msgid "Go to present time" -msgstr "Þimdiki zamana git" - -#: calendar/gui/calendar-commands.c:554 -msgid "Next" -msgstr "Ileri" - -#: calendar/gui/calendar-commands.c:554 -msgid "Go forward in time" -msgstr "Zamanda ileri git" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to" -msgstr "Git" - -#: calendar/gui/calendar-commands.c:558 -msgid "Go to a specific date" -msgstr "Belirli bir tarihe git" - -#. file menu -#: calendar/gui/calendar-commands.c:660 -msgid "New Ca_lendar" -msgstr "Yeni _takvim" - -#: calendar/gui/calendar-commands.c:661 -msgid "Create a new calendar" -msgstr "Yeni bir takvimi yarat" - -#: calendar/gui/calendar-commands.c:664 -msgid "Open Ca_lendar" -msgstr "_Takvimi aç" - -#: calendar/gui/calendar-commands.c:665 -msgid "Open a calendar" -msgstr "Bir takvimi aç" - -#: calendar/gui/calendar-commands.c:669 calendar/gui/calendar-commands.c:670 -msgid "Save Calendar As" -msgstr "Takvimi farklý kaydet" - -#: calendar/gui/calendar-commands.c:683 -msgid "_New appointment..." -msgstr "_Yeni toplantý ..." - -#: calendar/gui/calendar-commands.c:688 -msgid "New appointment for _today..." -msgstr "_Bugün için yeni bir toplantý ..." - -#: calendar/gui/calendar-commands.c:689 -msgid "Create a new appointment for today" -msgstr "Bugün için yeni bir toplantý yarat" - -#: calendar/gui/calendar-commands.c:697 calendar/gui/prop.c:712 -msgid "Preferences" -msgstr "Ayarlar" - -#: calendar/gui/calendar-commands.c:704 calendar/gui/calendar-commands.c:705 -msgid "About Calendar" -msgstr "Takvým bilgisi" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:747 -#, c-format -msgid "%s%s" -msgstr "%s%s" - -#: calendar/gui/calendar-commands.c:747 -msgid "'s calendar" -msgstr "'in takvimi" - -#: calendar/gui/control-factory.c:136 -msgid "The URI that the calendar will display" -msgstr "Takvimin gösterecek olduðu URI" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:181 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "%A %b %d %Y %H:%M'de ikaz et" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:188 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "%A %b %d %Y %H:%M'deki toplantý için bildirme" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "Kapat" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -msgid "Snooze" -msgstr "Ikaz et" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -msgid "Edit appointment" -msgstr "Toplantýyý deðiþtir" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "Ikaz zamaný ( dakika )" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "%02i dakika bölmeleri" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -msgid "New appointment..." -msgstr "Yeni toplantý ..." - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "Bu toplantýyý deðiþtir .." - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -msgid "Delete this appointment" -msgstr "Bu toplantýyý sil" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "Bu toplantýyý taþýnabilir yap" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -msgid "Delete this occurrence" -msgstr "Bu oluþumu sil" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "Yekin oluþumlarý sil" - -#: calendar/gui/event-editor.c:291 -msgid "Edit Appointment" -msgstr "Toplantýyý deðiþtir" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "Toplama yok" - -#: calendar/gui/event-editor.c:300 -#, c-format -msgid "Appointment - %s" -msgstr "Toplantý - %s" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "Görev - %s" - -#: calendar/gui/event-editor.c:306 -#, c-format -msgid "Journal entry - %s" -msgstr "Günlük birimi - %s" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "?" - -#: calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "ABY : _Sil" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "ABY : _Takvim ..." - -#: calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "ABY : Isimleri gözden g_eçir" - -#: calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "ABY : Adres _defteri ..." - -#: calendar/gui/event-editor.c:1308 -msgid "FIXME: _New Appointment" -msgstr "ABY : _Yeni toplantý" - -#: calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "ABY : _Kaynaklar ..." - -#: calendar/gui/event-editor.c:1312 -msgid "FIXME: Invite _Attendees..." -msgstr "ABY : _Ziyaretçileri davet et .." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "ABY : Daveti i_ptal et ..." - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "ABY : v_Calendat þeklinde ilet" - -#: calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "ABY : KAydet ve kapat" - -#: calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "ABY : Yazdýr ..." - -#: calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "ABY : Geliþler ..." - -#: calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "Geliþ kurallarýný ayarla" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "ABY : Ziyaretçileri davet et .." - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "Ziyaretcýleri davet et" - -#: calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "ABY : Sil" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "%a %b %d %Y" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "ocak" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "þubat" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "mart" - -#: calendar/gui/getdate.y:394 -msgid "april" -msgstr "nisan" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "mayýs" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "haziran" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "temmuz" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "aðustos" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "eylül" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "eylül" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "ekim" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "kasým" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "aralýk" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "pazar" - -#: calendar/gui/getdate.y:405 -msgid "monday" -msgstr "pazartesi" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "salý" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "salý" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "çarþamba" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "çþb." - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "perþembe" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "pþb." - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "perþ." - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "cuma" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "cumartesi" - -#: calendar/gui/getdate.y:420 -msgid "year" -msgstr "yýl" - -#: calendar/gui/getdate.y:421 -msgid "month" -msgstr "ay" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "geceleyin" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "hafta" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "gün" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "saat" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "dakika" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "dak." - -#: calendar/gui/getdate.y:428 -msgid "second" -msgstr "saniye" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "san." - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "yarýn" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "dün" - -#: calendar/gui/getdate.y:437 -msgid "today" -msgstr "bugün" - -#: calendar/gui/getdate.y:438 -msgid "now" -msgstr "þimdi" - -#: calendar/gui/getdate.y:439 -msgid "last" -msgstr "son" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "bu" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "ileri" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "ilk" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "üçüncü" - -#: calendar/gui/getdate.y:445 -msgid "fourth" -msgstr "dürdüncü" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "beþinci" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "altýncý" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "yedinci" - -#: calendar/gui/getdate.y:449 -msgid "eighth" -msgstr "sekizinci" - -#: calendar/gui/getdate.y:450 -msgid "ninth" -msgstr "dokuzuncu" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "onuncu" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "onbirinci" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "onikinci" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "önce" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "Bir \"Yapýlacak\" birimi yarat" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "Bir \"Yapýlacak\" birimini deðiþtir" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "Toplama :" - -#: calendar/gui/gncal-todo.c:186 -msgid "Due Date:" -msgstr "Bu tarihe kadar :" - -#: calendar/gui/gncal-todo.c:195 -msgid "Priority:" -msgstr "Önem :" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "Birim anlatýmý :" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "Bir \"Yapýlacak\" birimini ekle ..." - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "Bu birimi deðiþtir ..." - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "Toplama" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:604 -msgid "Due Date" -msgstr "Tarihe göre" - -#: calendar/gui/gncal-todo.c:436 calendar/gui/prop.c:605 -#: mail/message-list.c:474 -msgid "Priority" -msgstr "Önem" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "Kalan zaman" - -#. Label -#: calendar/gui/gncal-todo.c:449 -msgid "To-do list" -msgstr "\"Yapýlacak\"'lar listesi" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "Ekle ..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -msgid "Edit..." -msgstr "Deðiþtir ..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "Hafta" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "Gün" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "Saat" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "Saat" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "Dakika" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "Dakika" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Seconds" -msgstr "Saniye" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -msgid "Second" -msgstr "Saniye" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "Toplantý anýtlayýcýsý :" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "Oldu" - -#. Initialize by default to three-letter day names -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "Paz" - -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "P.t" - -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "Sal" - -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "Çar" - -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "Per" - -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "Cum" - -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "C.t" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "Yýl :" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "Tarihe git" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" -"Gitmek istediðin tarihi belirt.\n" -"Bir güne týkladýðýn zaman, o tarihe\n" -"gideceksin." - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "Bugüne git" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1.nci" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2.nci" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3.ncü" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4.ncü" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5.nci" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6.ncý" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7.nci" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8.nci" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "8.ncu" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10.ncu" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11.nci" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12.nci" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13.ncü" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14.ncü" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15.nci" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16.ncý" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17.nci" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18.nci" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19.ncu" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20.nci" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21.nci" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22.nci" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23.ncü" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24.ncü" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25.nci" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26.ncý" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27.nci" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28.nci" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29.ncu" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "39.ncu" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31.nci" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "Paz." - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "P.tesi" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "Salý" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "Çarþ." - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "Perþ." - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "Cuma" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "C.tesi" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "\"Yapýlacak\" birimleri" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "geçerli gün ( %a %b %d %Y )" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "Geçerli hafta ( %s %s %d - %s %d %d )" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "Geçerli hafta ( %s %s %d - %s %s %d %d )" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "Geçerli hafta ( %s %s %d %d - %s %s %d %d )" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "Geçerli ay ( %a %Y )" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "Geçerli yýl ( %Y )" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "Takvimi yazdýr" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "Yazdýrma önizlemesi" - -#: calendar/gui/prop.c:330 -msgid "Time display" -msgstr "Zaman gösterimi" - -#. Time format -#: calendar/gui/prop.c:334 -msgid "Time format" -msgstr "Zaman þekli" - -#: calendar/gui/prop.c:335 -msgid "12-hour (AM/PM)" -msgstr "12 saat (ö.ö./ö.s.)" - -#: calendar/gui/prop.c:336 -msgid "24-hour" -msgstr "24 saat" - -#. Weeks start on -#: calendar/gui/prop.c:346 -msgid "Weeks start on" -msgstr "Hafta'nýn baþlama günü" - -#: calendar/gui/prop.c:347 -msgid "Sunday" -msgstr "Pazar" - -#: calendar/gui/prop.c:348 -msgid "Monday" -msgstr "Pazartesi" - -#. Day range -#: calendar/gui/prop.c:358 -msgid "Day range" -msgstr "Gün sýnýrlarý" - -#: calendar/gui/prop.c:369 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" -"Gön ve hafta bakýþýnda gösterilinecek baþlama ve\n" -"bitme saatlerini belirle .\n" -"Bu saatlerin dýþýnda kalan saatler normal bakýþta\n" -"gösterilmeyecektir." - -#: calendar/gui/prop.c:385 -msgid "Day start:" -msgstr "Gün baþlangýçý :" - -#: calendar/gui/prop.c:396 -msgid "Day end:" -msgstr "Gün bitimi :" - -#: calendar/gui/prop.c:519 -msgid "Colors for display" -msgstr "Gösterim renkler" - -#: calendar/gui/prop.c:522 -msgid "Colors" -msgstr "Renkler" - -#: calendar/gui/prop.c:599 -msgid "Show on TODO List:" -msgstr "\"Yapýlacak\"'lar listesinde göster :" - -#: calendar/gui/prop.c:606 -msgid "Time Until Due" -msgstr "Geçmesine kalan zaman" - -#: calendar/gui/prop.c:637 -msgid "To Do List style options:" -msgstr "\"Yapýlacak\" stil seçenekleri :" - -#: calendar/gui/prop.c:642 -msgid "Highlight overdue items" -msgstr "Zamaný geçmiþ birimleri \"gözönüne\" ser" - -#: calendar/gui/prop.c:645 -msgid "Highlight not yet due items" -msgstr "Daha zamaný geçmemiþ bilgileri \"gözönüne\" ser" - -#: calendar/gui/prop.c:648 -msgid "Highlight items due today" -msgstr "Bugün zamaný dolacak birimleri \"gözönüne\" ser" - -#: calendar/gui/prop.c:678 -msgid "To Do List Properties" -msgstr "\"Yapýlacak\"'lar listesi özellikler" - -#: calendar/gui/prop.c:681 -msgid "To Do List" -msgstr "\"Yapýlacak\"'lar listesi" - -#: calendar/gui/prop.c:780 -msgid "Alarms" -msgstr "Ikazlar" - -#. build miscellaneous box -#: calendar/gui/prop.c:783 -msgid "Alarm Properties" -msgstr "Ikaz özellikleri" - -#: calendar/gui/prop.c:793 -msgid "Beep on display alarms" -msgstr "Ekran ikazlarýnda týngýrtý yap" - -#: calendar/gui/prop.c:803 -msgid "Audio alarms timeout after" -msgstr "Sedai ikazlarý kapatma zamaný" - -#: calendar/gui/prop.c:814 calendar/gui/prop.c:831 -msgid " seconds" -msgstr " saniye" - -#: calendar/gui/prop.c:820 -msgid "Enable snoozing for " -msgstr "Ikazlamayý aç :" - -#. populate default frame/box -#: calendar/gui/prop.c:836 -msgid "Defaults" -msgstr "Ince ayarlar" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut" -msgstr "Kes" - -#: composer/e-msg-composer-address-dialog.c:184 -msgid "Cut selected item into clipboard" -msgstr "Seçili birimi arabelleðe kes" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy" -msgstr "Kopyala" - -#: composer/e-msg-composer-address-dialog.c:188 -msgid "Copy selected item into clipboard" -msgstr "Seçili birimi arabelleðe kopyala" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste" -msgstr "Yapýþtýr" - -#: composer/e-msg-composer-address-dialog.c:192 -#: composer/e-msg-composer-address-dialog.c:200 -msgid "Paste item from clipboard" -msgstr "Birimi arabellekten yapýþtýr" - -#: composer/e-msg-composer-address-dialog.c:528 -msgid "Select recipients' addresses" -msgstr "Gönderilecek adresleri belirle" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "Alýcýlar listesi :" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "Ara ..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "Isim" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -msgid "Address" -msgstr "Adres" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "Özellikler ..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "Gn : >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc : >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc : >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "yafta9" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "yafta7" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "yafta8" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 bayt" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u bayt" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1f bin bayt" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1f milyon bayt" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1f milyar bayt" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "Eklem ekle" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "Sil" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "Seçili birimleri eklemler listesinden sil" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "Eklem ekle ..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "Iletiyi bir dosya ekle" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "Eklem özellikleri" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "MIME türü :" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "Dosya adý :" - -#: composer/e-msg-composer-hdrs.c:174 -msgid "Click here for the address book" -msgstr "Adres defteri için buraya týkla" - -#: composer/e-msg-composer-hdrs.c:216 -msgid "To:" -msgstr "Gn:" - -#: composer/e-msg-composer-hdrs.c:217 -msgid "Enter the recipients of the message" -msgstr "Iletinin gönderildiði kiþiler" - -#: composer/e-msg-composer-hdrs.c:221 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:222 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "Iletinin kopyasýnýn gönderilecek olunduðu adresler" - -#: composer/e-msg-composer-hdrs.c:227 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:228 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"Iletinin \"kür\" kopyalarýnýn gönderilecek olunduðu adresleri ver ; bunlar " -"kendilerini iletinin gönderildiði kiþiler arasýn da görmeyecektir ." - -#: composer/e-msg-composer-hdrs.c:234 -msgid "Subject:" -msgstr "Konu :" - -#: composer/e-msg-composer-hdrs.c:235 -msgid "Enter the subject of the mail" -msgstr "Iletinin konusunu ver" - -#: composer/e-msg-composer.c:444 -msgid "Save as..." -msgstr "Farklý kaydet ..." - -#: composer/e-msg-composer.c:455 -#, c-format -msgid "Error saving file: %s" -msgstr "`%s' dosyasýný kaydederken hata oldu" - -#: composer/e-msg-composer.c:475 -#, c-format -msgid "Error loading file: %s" -msgstr "`%s' dosyasýný yüklerken hata oldu" - -#: composer/e-msg-composer.c:494 -msgid "Discard this message?" -msgstr "Bu iletiyi unutalým mý ?" - -#: composer/e-msg-composer.c:511 -msgid "Open file" -msgstr "Dosyayý aç" - -#: composer/e-msg-composer.c:623 -msgid "That file does not exist." -msgstr "Böyle bir dosya yok ." - -#: composer/e-msg-composer.c:633 -msgid "That is not a regular file." -msgstr "Bu normal bir dosya deðildir ." - -#: composer/e-msg-composer.c:643 -msgid "That file exists but is not readable." -msgstr "Bu dosya vardýr ama okunabilir deðil ." - -#: composer/e-msg-composer.c:653 -msgid "That file appeared accesible but open(2) failed." -msgstr "Bu dosya eriþilebilinir gibiydi amma open(2)-çaðrýsý baþarýsýz oldu ." - -#: composer/e-msg-composer.c:675 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" -"Bu dosya çok büyük ( 100 KB'den büyük ! ) .\n" -"Bu dosyayý içermekten emin misin ?" - -#: composer/e-msg-composer.c:696 -msgid "An error occurred while reading the file." -msgstr "Dosyayý okurken bir hata oldu ." - -#: composer/e-msg-composer.c:792 shell/e-shell-view-menu.c:433 -msgid "_File" -msgstr "_Dosya" - -#: composer/e-msg-composer.c:798 -msgid "_Open..." -msgstr "_Aç ..." - -#: composer/e-msg-composer.c:799 -msgid "Load a previously saved message" -msgstr "Önceden kaydedilmiþ iletiyi yükle" - -#: composer/e-msg-composer.c:807 -msgid "_Save..." -msgstr "_Farklý kaydet ..." - -#: composer/e-msg-composer.c:808 -msgid "Save message" -msgstr "Iletiyi kaydet" - -#: composer/e-msg-composer.c:816 -msgid "_Save as..." -msgstr "_Farklý kaydet ..." - -#: composer/e-msg-composer.c:817 -msgid "Save message with a different name" -msgstr "Iletiyi faklý bir isim altýnda kaydet" - -#: composer/e-msg-composer.c:825 -msgid "Save in _folder..." -msgstr "_Dizinde kaydet ..." - -#: composer/e-msg-composer.c:826 -msgid "Save the message in a specified folder" -msgstr "Iletiyi belirlenen dizinde kaydet" - -#: composer/e-msg-composer.c:835 -msgid "_Insert text file... (FIXME)" -msgstr "_Metin dosyasýný içer ... ( ABY )" - -#: composer/e-msg-composer.c:836 -msgid "Insert a file as text into the message" -msgstr "Bir dosyayý metin olarak ekle" - -#: composer/e-msg-composer.c:845 -msgid "_Send" -msgstr "_Gönder" - -#: composer/e-msg-composer.c:846 -msgid "Send the message" -msgstr "Iletiyi gönder" - -#: composer/e-msg-composer.c:856 -msgid "_Close..." -msgstr "_Kapat" - -#: composer/e-msg-composer.c:857 -msgid "Quit the message composer" -msgstr "Ileti tasarýlayýcýsýndan çýk" - -#: composer/e-msg-composer.c:870 shell/e-shell-view-menu.c:475 -msgid "_Edit" -msgstr "_Deðiþtir" - -#: composer/e-msg-composer.c:881 -msgid "_Format" -msgstr "Þe_kil" - -#: composer/e-msg-composer.c:887 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:888 -msgid "Send the mail in HTML format" -msgstr "ePostayý HTML þeklinde gönder" - -#: composer/e-msg-composer.c:901 shell/e-shell-view-menu.c:382 -#: shell/e-shell-view-menu.c:486 -msgid "_View" -msgstr "_Göster" - -#: composer/e-msg-composer.c:907 -msgid "Show _attachments" -msgstr "_Eklemleri göster" - -#: composer/e-msg-composer.c:908 -msgid "Show/hide attachments" -msgstr "Eklemleri göster/gizle" - -#: composer/e-msg-composer.c:941 -msgid "Send" -msgstr "Gönder" - -#: composer/e-msg-composer.c:942 -msgid "Send this message" -msgstr "Bu iletiyi gönder" - -#: composer/e-msg-composer.c:951 -msgid "Attach" -msgstr "Ekle" - -#: composer/e-msg-composer.c:952 -msgid "Attach a file" -msgstr "Bir dosya ekle" - -#: composer/e-msg-composer.c:1139 -msgid "Compose a message" -msgstr "Bir ileti yaz" - -#: mail/component-factory.c:208 -msgid "Cannot initialize Evolution's mail component." -msgstr "Evolution'in ePosta parçasýný baþlatamadým ." - -#: mail/folder-browser-factory.c:23 -msgid "Get mail" -msgstr "ePosta'yý al" - -#: mail/folder-browser-factory.c:23 -msgid "Check for new mail" -msgstr "Yeni ePosta için bak" - -#: mail/folder-browser-factory.c:24 -msgid "Compose" -msgstr "Yaz" - -#: mail/folder-browser-factory.c:24 -msgid "Compose a new message" -msgstr "Yeni bir ePosta iletisini yaz" - -#: mail/folder-browser-factory.c:28 -msgid "Reply" -msgstr "Cevapla" - -#: mail/folder-browser-factory.c:28 -msgid "Reply to the sender of this message" -msgstr "Iletiyi gönderene cevap ver" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to All" -msgstr "Hepsine cevapla" - -#: mail/folder-browser-factory.c:29 -msgid "Reply to all recipients of this message" -msgstr "Iletinin yekin alýcýlarýna cevap ver" - -#: mail/folder-browser-factory.c:31 -msgid "Forward" -msgstr "Ilet" - -#: mail/folder-browser-factory.c:31 -msgid "Forward this message" -msgstr "Bu iletiyi ilet" - -#: mail/folder-browser-factory.c:35 -msgid "Move" -msgstr "Taþý" - -#: mail/folder-browser-factory.c:35 -msgid "Move message to a new folder" -msgstr "Iletiyi yeni bir dizine taþý" - -#: mail/folder-browser-factory.c:37 -msgid "Print the selected message" -msgstr "Seçili iletiyi yazdýr" - -#: mail/folder-browser-factory.c:39 -msgid "Delete this message" -msgstr "Bu iletiyi sil" - -#: mail/folder-browser-factory.c:60 -msgid "_Threaded Message List" -msgstr "Iletilerin k_onu listesi" - -#: mail/folder-browser-factory.c:73 -msgid "_Mark all messages seen" -msgstr "_Yekin iletilei görünmüþ olarak iþaretle" - -#: mail/folder-browser-factory.c:79 -msgid "_Expunge" -msgstr "_Temizle" - -#: mail/folder-browser-factory.c:85 -msgid "Mail _Filters ..." -msgstr "ePosta _filtralarý ..." - -#: mail/folder-browser-factory.c:91 -msgid "_vFolder Editor ..." -msgstr "_sanal klasörler editörü ..." - -#: mail/folder-browser-factory.c:97 -msgid "_Mail Configuration ..." -msgstr "_ePosta ayarlarý ..." - -#: mail/folder-browser-factory.c:103 -msgid "Forget _Passwords" -msgstr "_Parolalarý unut" - -#: mail/mail-config.c:707 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" -"Gönderdiðin ePostalarda kullanýlanacak isim ve ePosta adresini belirle. Ve " -"istersen üye oldudun örgütün adýný ve imza dosyasý olarak kullanýlacak " -"dosyanýn adýný belirtebilirsin." - -#: mail/mail-config.c:720 -msgid "Full name:" -msgstr "Tam ismi :" - -#: mail/mail-config.c:744 -msgid "Email address:" -msgstr "ePosta adresi : " - -#: mail/mail-config.c:759 -msgid "Organization:" -msgstr "Örgüt : " - -#: mail/mail-config.c:770 -msgid "Signature file:" -msgstr "Imza dosyasý : " - -#: mail/mail-config.c:775 -msgid "Signature File" -msgstr "Imza Dosyasý" - -#: mail/mail-config.c:1188 -msgid "Server:" -msgstr "Sunucu :" - -#: mail/mail-config.c:1194 -msgid "Username:" -msgstr "Kullanýcý adý :" - -#: mail/mail-config.c:1200 -msgid "Path:" -msgstr "Dizin :" - -#: mail/mail-config.c:1208 -msgid "Authentication:" -msgstr "Doðrulama :" - -#: mail/mail-config.c:1220 -msgid "Detect supported types..." -msgstr "Desteklenen türleri dene ..." - -#: mail/mail-config.c:1243 -msgid "Test Settings" -msgstr "Ayarlarý dene" - -#: mail/mail-config.c:1365 mail/mail-config.c:1413 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"ePosta sunucusunun türünü seç ve gerekli bilgileri de verebilirsin. \n" -"\n" -"Sunucu bir tanýmlama bekliyorsa o zaman \"Desteklenen türleri dene ...\" " -"basmasýna öbür bilgiler verdikten sonra basabilirsin ." - -#: mail/mail-config.c:1389 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" -"Kullanýlacak haber sunucusunu seç ve yekin gerekn bilgileri ver" -"\n" -"\n" -"Sunucu bir tanýmlama bekliyorsa o zaman \"Desteklenen türleri dene ...\" " -"basmasýna öbür bilgiler verdikten sonra basabilirsin ." - -#: mail/mail-config.c:1455 -msgid "Edit Identity" -msgstr "Kimliði deðiþtir" - -#: mail/mail-config.c:1457 -msgid "Add Identity" -msgstr "Kimlik ekle" - -#: mail/mail-config.c:1537 -msgid "Edit Source" -msgstr "Kaynaðý deðiþtir" - -#: mail/mail-config.c:1539 -msgid "Add Source" -msgstr "Kaynak ekle" - -#: mail/mail-config.c:1622 -msgid "Edit News Server" -msgstr "Haber sunucusuyla oyna" - -#: mail/mail-config.c:1624 -msgid "Add News Server" -msgstr "Haber suncusu ekle" - -#: mail/mail-ops.c:393 -msgid "Fetching mail" -msgstr "ePosta'yý alýyorum" - -#: mail/mail-ops.c:405 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" -"Bu iletinin konusu yok .\n" -"Vallahi mi göndereyim ?" - -#: mail/mail-ops.c:525 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" -"ePosta göndermeden önce bir ePosta\n" -"hesabýný ayarlaman lazým." - -#: mail/mail-ops.c:801 -msgid "Move message(s) to" -msgstr "Ileti(leri) buraya taþý " - -#: mail/mail-threads.c:483 -msgid "Currently pending operations:" -msgstr "Þu an geçerli olan eylemler :" - -#: mail/mail-threads.c:621 -msgid "Incomplete message written on pipe!" -msgstr "Tünellemeden bozuk bir ileti geldi !" - -#: mail/mail-threads.c:623 -msgid "Error reading commands from dispatching thread." -msgstr "Konu dizimini komutalarla okurken hata oldu ." - -#: mail/mail-threads.c:712 -msgid "Corrupted message from dispatching thread?" -msgstr "Konu dizimini ayýrtýrken bir ileti bozuk mu cýktý ?" - -#: mail/mail-threads.c:814 -msgid "Could not create dialog box." -msgstr "Diyalog kutusunu yaratamadým ." - -#: mail/mail-threads.c:849 -msgid "User cancelled query." -msgstr "Sorgulamayý kullanýcý durdurdu ." - -#: mail/message-list.c:456 -msgid "Online Status" -msgstr "Baðlý olma durumu" - -#: mail/message-list.c:492 -msgid "From" -msgstr "Gönderen" - -#: mail/message-list.c:499 -msgid "Subject" -msgstr "Konu" - -#: mail/message-list.c:506 -msgid "Date" -msgstr "Tarih" - -#: mail/message-list.c:513 -msgid "Received" -msgstr "Alýndý" - -#: mail/message-list.c:520 -msgid "To" -msgstr "Gn:" - -#: mail/message-list.c:527 -msgid "Size" -msgstr "Boyut" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "Evolution yüklenmesi" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "Bu Evolution'i ilk çalýþtýrmana benziyor ." - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "\"Oldu\"'ya týklayýp, Evolution kullanýcý dosyalarýný" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" -"%s dizinini yaratamadým\n" -"\n" -"Hata : %s" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" -"Dosyalarý `%s''ye\n" -"kopyalayamadým ." - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "Evolution dosyalarý baþarýlý yüklendi." - -#: shell/e-setup.c:108 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please remove it in order to allow installation\n" -"of the Evolution user files." -msgstr "" -"`%s' bir dizin deðildir.\n" -"Evolution kullanýcý dosyalarýnýn yüklenmesi\n" -"için o'nu sil." - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"%s dizinini yaratamadým\n" -" " - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "Belirtilen dizin adý geçerli deðildir ." - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "Evolution - Yeni dizin yarat" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" -"Belirtilen eylem için bu seçili klasör tipi \n" -"geçerli deðildir ." - -#: shell/e-shell-folder-selection-dialog.c:272 -msgid "New..." -msgstr "Yeni ..." - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "( Isimsiz )" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "Bug-buddy $PATH dizinlenmende bulunamadý." - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "Bug-buddy çalýþtýrýlýnamadý." - -#: shell/e-shell-view-menu.c:164 -msgid "Evolution" -msgstr "Evolution" - -#: shell/e-shell-view-menu.c:166 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Tel'if hakký (C) 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:168 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" -"Evolution GNOME masaüstü için acaip bir ePosta, \n" -"takvim ve tanýklar yönetim uygulamasý\n" -"idir." - -#: shell/e-shell-view-menu.c:318 -msgid "Go to folder..." -msgstr "Dizinde git ..." - -#: shell/e-shell-view-menu.c:376 -msgid "_New" -msgstr "_Yeni" - -#: shell/e-shell-view-menu.c:388 -msgid "_Folder" -msgstr "_Dizin" - -#: shell/e-shell-view-menu.c:394 -msgid "Evolution bar _shortcut" -msgstr "Evolution çubuðu _kýsayolu" - -#: shell/e-shell-view-menu.c:403 -msgid "_Mail message (FIXME)" -msgstr "e_Posta iletisi" - -#: shell/e-shell-view-menu.c:409 -msgid "_Appointment (FIXME)" -msgstr "T_oplantý" - -#: shell/e-shell-view-menu.c:415 -msgid "_Contact (FIXME)" -msgstr "_Tanýk" - -#: shell/e-shell-view-menu.c:421 -msgid "_Task (FIXME)" -msgstr "_Görev" - -#: shell/e-shell-view-menu.c:443 -msgid "_Go to folder..." -msgstr "Dizine _git ..." - -#: shell/e-shell-view-menu.c:444 -msgid "Display a different folder" -msgstr "Deðiþik bir dizini göster" - -#: shell/e-shell-view-menu.c:451 -msgid "_Create new folder..." -msgstr "_Yeni bir dizini yarat ..." - -#: shell/e-shell-view-menu.c:452 shell/e-shell-view-menu.c:462 -msgid "Create a new folder" -msgstr "Yeni bir dizini yarat" - -#: shell/e-shell-view-menu.c:461 -msgid "E_xit..." -msgstr "Çý_k ..." - -#: shell/e-shell-view-menu.c:492 -msgid "Show _shortcut bar" -msgstr "Ký_sayol çubuðunu göster" - -#: shell/e-shell-view-menu.c:493 -msgid "Show the shortcut bar" -msgstr "Kýsayol çubuðunu gösterir" - -#: shell/e-shell-view-menu.c:498 -msgid "Show _folder bar" -msgstr "Di_zinler çubuðunu göster" - -#: shell/e-shell-view-menu.c:499 -msgid "Show the folder bar" -msgstr "Dizinler çubuðunu gösterir" - -#: shell/e-shell-view-menu.c:521 -msgid "_Actions" -msgstr "E_ylemler" - -#: shell/e-shell-view-menu.c:532 -msgid "_Help" -msgstr "_Bark" - -#: shell/e-shell-view-menu.c:538 -msgid "Help _index" -msgstr "Yardým _içeriði" - -#: shell/e-shell-view-menu.c:545 -msgid "Getting _started" -msgstr "Na_sýl baþlarým" - -#: shell/e-shell-view-menu.c:552 -msgid "Using the _mailer" -msgstr "_ePosta bölümünü nasýl kullanýrým" - -#: shell/e-shell-view-menu.c:559 -msgid "Using the _calendar" -msgstr "_Takvimi nasýl kullanýrým" - -#: shell/e-shell-view-menu.c:566 -msgid "Using the c_ontact manager" -msgstr "Ta_nýklar yöneticisini nasýl kullanýrým" - -#: shell/e-shell-view-menu.c:576 -msgid "_Submit bug report" -msgstr "_Hata raporunu gönder" - -#: shell/e-shell-view-menu.c:577 -msgid "Submit bug report using Bug Buddy" -msgstr "bug-buddy desteðiyle bir hata raporunu gönder" - -#: shell/e-shell-view-menu.c:586 -msgid "_About Evolution..." -msgstr "_Evolution bilgisi ..." - -#: shell/e-shell-view-menu.c:587 -msgid "Show information about Evolution" -msgstr "Evolution hakkýnda bilgi göster" - -#: shell/e-shell-view.c:114 -msgid "(No folder displayed)" -msgstr "( Hiç bir dizin gösterilmiyor )" - -#: shell/e-shell-view.c:342 -msgid "Folders" -msgstr "Dizinler" - -#: shell/e-shell-view.c:736 -msgid "None" -msgstr "Yok" - -#: shell/e-shell-view.c:740 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:291 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "Yerel kaydý kuramadým -- %s" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "_Ufak ikonalar" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "Kýsayollarý ufak ikonalar olarak göster" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "_Büyük ikonalar" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "Kýsayollarý büyük ikonalar olarak göster" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "Geçerli yap" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "Bu kýsayolu geçerli yap" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "Bu kýsayolu kýsayol çubuðundan sil" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "Kýsayollarý kaydederken hata oldu." - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "( Ismi yok )" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "Hata yok" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "Genel hata" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "Ayný isimli bir klasör zaten var" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "Belirtilen klasör tipi geçerli deðildir" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "V/D hatasý" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "Klasörü yaratmak için gerekli disk alaný yok" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "Belirtilen klasör bulunamadý" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "Iþlem yazýlmamýþtýr" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "Izin yok" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "Iþlem desteklenmiyor" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "Bu kayýtta belirtilen tip desteklenmiyor" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "Bilinmeyen hata" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" -"Merhaba. Evolution kitlesel iþlemler uygulamasýnýn önizleme neslini\n" -"yüklemen için teþekkürler.\n" -"\n" -"Son bir buçuk ayda, Evolution'u kullanabilir bi' hale getirmeye uðraþtýk.\n" -"Evolution'un yazarlarýnýn çoðu ( idealizm ? ) ePostalarýný \n" -"Evolution ile okuyup, yazmaktadýr . Sen de böyle yapabilirsin tabii ki .\n" -"( Sadece bir yedekleme yapmayý unutma . )\n" -".\n" -"Çoðu aðýr hatalarý ve sorunlarý düzeltmemize raðmen vasat ikaz iletisi\n" -"var. Evolution'un becerilerini sayalým :\n" -"çökmeler, ePosta kaybý, ortada kalan yetim iþlemler, %%100 iþlem kullanýmý,\n" -"kilitlenmeler, tesadüfi ePosta listelerine gönderilmiþ HTML ePostalarý ve " -"arkadaþlarýnýn\n" -"ve meslektaþlarýnýn önünde utanmalar. Yani riski sana kalmýþ.\n" -"\n" -"Aðýr bir iþin sonucunu beðindiðinizi umup, sizin katkýlarýný\n" -"bekliyoruz !\n" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" -"Teþekkürler\n" -"Evolution Takýmý\n" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "Evolution komutasýný baþlatamadým ." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "Bonobo parçalar sistemini baþlatamadým." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "Birimler" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "Kitle" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "Sýrala" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "Filtra" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -msgid "Field Chooser" -msgstr "Birim seçmeni" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" -"Çizgiyene bir sütun eklemek için, o çizgiyeyi\n" -"istediðin yere býrakabilirsin ." - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "pencere1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "Varolan birimler" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "yafta1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "Bu sýralamada göster" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "yafta2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "Ekle >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< Sil" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "Giriþimli" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "Mesþgul" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "Ofis'te deðil" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "Bilgi yok" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "Baþkalarý _davet et ..." - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "_Seçenekler" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "Sadece ça_lýþma saatleri göster" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "_Uzaklaþtýrýlmýþ göster" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "Boþ/Meþgul'leri _yenile" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "_Otomatikman seç" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr ">_>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "_Yekin kiþiler ve kaynaklar" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "Yekin _kiþiler ve bir kaynak" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "_Gerekli kiþiler" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "Gerekli kiþiler ve _bir kaynak" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "Toplantý baþlama saati :" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "Toplantý bitiþ saati :" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "Yekin ziyaretciler" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "Kitle %i" - -#~ msgid "Edit Filter" -#~ msgstr "Filtralarla oyna" - -#~ msgid "Create filter" -#~ msgstr "Filtra yarat" - -#~ msgid "Back" -#~ msgstr "Geri" - -#~ msgid "Finish" -#~ msgstr "Bitir" - -#~ msgid "Cancel" -#~ msgstr "Iptal" - -#~ msgid "Apply" -#~ msgstr "Uygula" - -#~ msgid "" -#~ "

Create Filtering Rule

Select one of the base rules above, then " -#~ "continue forwards to customise it.

" -#~ msgstr "" -#~ "

Filtra kuralýný kur

Alttaki kurallardan bir tanesini seçip, o " -#~ "kuralý özelleþtirmeye devam et .

" - -#~ msgid "_Virtual Folder Druid ..." -#~ msgstr "_Sanal Dizin Sihirbazý ..." - -#~ msgid "Test these values before continuing" -#~ msgstr "Bu deðerleri devam etmekten önce bir dene" - -#~ msgid "Select the method you would like to use to deliver your mail." -#~ msgstr "ePostaný gönderirken tercih ettiðin türü belirle." - -#~ msgid "Mail Configuration" -#~ msgstr "ePosta ayarlamasý" - -#~ msgid "Identity" -#~ msgstr "Kimlik" - -#~ msgid "Mail Source" -#~ msgstr "ePosta kaynaðý" - -#~ msgid "Mail Transport" -#~ msgstr "ePosta transferi" - -#~ msgid "Enter the hostname of the News Server you have." -#~ msgstr "Haber sunucusunun adresini ver ." - -#~ msgid "Cannot initialize the configuration system." -#~ msgstr "Ayarlama sistemini baþlatamadým ." - -#~ msgid "Refile" -#~ msgstr "Yeniden dosyala" - -#~ msgid "Mail Component: I could not initialize Bonobo" -#~ msgstr "ePosta parçasý : Bonobo'yu baþlatamadým" diff --git a/po/uk.po b/po/uk.po deleted file mode 100644 index a70e3c40ef..0000000000 --- a/po/uk.po +++ /dev/null @@ -1,4373 +0,0 @@ -# Ukrainian translation of evolution. -# Copyright (C) 2000 Free Software Foundation, Inc. -# Yuri Syrota , 2000. -# -msgid "" -msgstr "" -"Project-Id-Version: evolution 0.1\n" -"POT-Creation-Date: 2000-08-14 12:45+0300\n" -"PO-Revision-Date: 2000-04-04 15:25+0200\n" -"Last-Translator: Yuri Syrota \n" -"Language-Team: Ukrainian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=koi8-u\n" -"Content-Transfer-Encoding: 8-bit\n" - -#: addressbook/backend/ebook/load-gnomecard-addressbook.c:41 -#: addressbook/backend/ebook/load-pine-addressbook.c:41 -#: addressbook/backend/ebook/test-client-list.c:29 -#: addressbook/backend/ebook/test-client.c:54 -#: addressbook/demo/addressbook-factory.c:32 -#: addressbook/gui/component/addressbook-factory.c:59 -#: addressbook/gui/minicard/test-minicard-view.c:45 -#: calendar/conduits/calendar/calendar-conduit.c:1669 -#: calendar/conduits/todo/todo-conduit.c:1298 calendar/gui/main.c:68 -msgid "Could not initialize Bonobo" -msgstr "îÅ ×ÄÁÌÏÓØ ¦Î¦Ã¦Á̦ÚÕ×ÁÔÉ Bonobo" - -#. This array must be in the same order as enumerations -#. in GnomePilotConduitSyncType as they are used as index. -#. Custom type implies Disabled state. -#. -#: addressbook/conduit/address-conduit-control-applet.c:54 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:55 -#: calendar/conduits/todo/todo-conduit-control-applet.c:55 -msgid "Disabled" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:55 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:56 -#: calendar/conduits/todo/todo-conduit-control-applet.c:56 -msgid "Synchronize" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:56 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:57 -#: calendar/conduits/todo/todo-conduit-control-applet.c:57 -msgid "Copy From Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:57 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:58 -#: calendar/conduits/todo/todo-conduit-control-applet.c:58 -msgid "Copy To Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:58 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:59 -#: calendar/conduits/todo/todo-conduit-control-applet.c:59 -msgid "Merge From Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:59 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:60 -#: calendar/conduits/todo/todo-conduit-control-applet.c:60 -msgid "Merge To Pilot" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:143 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:144 -#: calendar/conduits/todo/todo-conduit-control-applet.c:144 -msgid "Eskil Heyn Olsen " -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:145 -msgid "Gpilotd address conduit" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:146 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:147 -#: calendar/conduits/todo/todo-conduit-control-applet.c:147 -msgid "(C) 1998 the Free Software Foundation" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:148 -msgid "Configuration utility for the address conduit.\n" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:149 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:150 -#: calendar/conduits/todo/todo-conduit-control-applet.c:150 -msgid "gnome-unknown.xpm" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:190 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:191 -#: calendar/conduits/todo/todo-conduit-control-applet.c:191 -msgid "Synchronize Action" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:261 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:262 -#: calendar/conduits/todo/todo-conduit-control-applet.c:262 -msgid "Conduit state" -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:315 -#: addressbook/conduit/address-conduit-control-applet.c:328 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:316 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:329 -#: calendar/conduits/todo/todo-conduit-control-applet.c:316 -#: calendar/conduits/todo/todo-conduit-control-applet.c:329 -msgid "" -"No pilot configured, please choose the\n" -"'Pilot Link Properties' capplet first." -msgstr "" - -#: addressbook/conduit/address-conduit-control-applet.c:334 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:335 -#: calendar/conduits/todo/todo-conduit-control-applet.c:335 -msgid "Not connected to the gnome-pilot daemon" -msgstr "îÅÍÁ¤ Ú'¤ÄÎÁÎÎÑ Ú ÄÅÍÏÎÏÍ gnome-pilot." - -#: addressbook/conduit/address-conduit-control-applet.c:339 -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:340 -#: calendar/conduits/todo/todo-conduit-control-applet.c:340 -msgid "" -"An error occured when trying to fetch\n" -"pilot list from the gnome-pilot daemon" -msgstr "" - -#: addressbook/conduit/address-conduit.c:125 -#: addressbook/conduit/address-conduit.c:139 -msgid "BLARG\n" -msgstr "" - -#: addressbook/conduit/address-conduit.c:456 -#, c-format -msgid "Address holds %ld address entries" -msgstr "" - -#: addressbook/conduit/address-conduit.c:482 -#: addressbook/conduit/address-conduit.c:484 -msgid "Could not start addressbook server" -msgstr "" - -#: addressbook/conduit/address-conduit.c:497 -#: addressbook/conduit/address-conduit.c:500 -msgid "Could not read pilot's Address application block" -msgstr "" - -#: addressbook/conduit/address-conduit.c:838 -msgid "Error while communicating with address server" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/categories-strings.h:7 -msgid "categories" -msgstr "ËÁÔÅÇÏÒ¦§" - -#: addressbook/contact-editor/categories-strings.h:8 -msgid "Item(s) belong to these categories:" -msgstr "" - -#: addressbook/contact-editor/categories-strings.h:9 -msgid "Available Categories:" -msgstr "äÏÓÔÕÐΦ ËÁÔÅÇÏÒ¦§:" - -#: addressbook/contact-editor/e-contact-editor.c:643 -#: calendar/gui/dialogs/task-editor.c:217 calendar/gui/event-editor.c:1168 -msgid "FIXME: _Appointment" -msgstr "úÕÓÔÒ¦Þ" - -#: addressbook/contact-editor/e-contact-editor.c:644 -#: calendar/gui/dialogs/task-editor.c:218 calendar/gui/event-editor.c:1169 -msgid "FIXME: Meeting Re_quest" -msgstr "úÁÐÉÔ ÚÕÓÔÒ¦Þ¦" - -#: addressbook/contact-editor/e-contact-editor.c:646 -#: calendar/gui/dialogs/task-editor.c:216 calendar/gui/event-editor.c:1171 -msgid "FIXME: _Mail Message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: addressbook/contact-editor/e-contact-editor.c:647 -#: calendar/gui/dialogs/task-editor.c:219 calendar/gui/event-editor.c:1172 -msgid "FIXME: _Contact" -msgstr "ëÏÎÔÁËÔ" - -#: addressbook/contact-editor/e-contact-editor.c:648 -#: calendar/gui/dialogs/task-editor.c:213 -#: calendar/gui/dialogs/task-editor.c:220 calendar/gui/event-editor.c:1173 -msgid "FIXME: _Task" -msgstr "úÁ×ÄÁÎÎÑ" - -#: addressbook/contact-editor/e-contact-editor.c:649 -#: calendar/gui/dialogs/task-editor.c:214 -#: calendar/gui/dialogs/task-editor.c:221 calendar/gui/event-editor.c:1174 -msgid "FIXME: Task _Request" -msgstr "úÁÐÉÔ ÚÁ×ÄÁÎÎÑ" - -#: addressbook/contact-editor/e-contact-editor.c:650 -#: calendar/gui/dialogs/task-editor.c:222 calendar/gui/event-editor.c:1175 -msgid "FIXME: _Journal Entry" -msgstr "öÕÒÎÁÌØÎÉÊ ÒÑÄÏË" - -#: addressbook/contact-editor/e-contact-editor.c:651 -#: calendar/gui/dialogs/task-editor.c:223 calendar/gui/event-editor.c:1176 -msgid "FIXME: _Note" -msgstr "îÏÔÁÔËÁ" - -#: addressbook/contact-editor/e-contact-editor.c:653 -#: addressbook/contact-editor/e-contact-editor.c:758 -#: calendar/gui/dialogs/task-editor.c:225 -#: calendar/gui/dialogs/task-editor.c:332 calendar/gui/event-editor.c:1178 -#: calendar/gui/event-editor.c:1285 -msgid "FIXME: Ch_oose Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:658 -#: calendar/gui/dialogs/task-editor.c:230 calendar/gui/event-editor.c:1183 -msgid "FIXME: _Memo Style" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:660 -#: calendar/gui/dialogs/task-editor.c:232 calendar/gui/event-editor.c:1185 -msgid "FIXME: Define Print _Styles..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:667 -#: calendar/gui/dialogs/task-editor.c:239 calendar/gui/event-editor.c:1192 -msgid "FIXME: S_end" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:671 -#: calendar/gui/dialogs/task-editor.c:243 calendar/gui/event-editor.c:1196 -msgid "FIXME: Save Attac_hments..." -msgstr "." - -#: addressbook/contact-editor/e-contact-editor-strings.h:8 -#: addressbook/contact-editor/e-contact-editor.c:673 -msgid "_Delete" -msgstr "óÔÅÒÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:674 -#: calendar/gui/dialogs/task-editor.c:246 calendar/gui/event-editor.c:1199 -msgid "FIXME: _Move to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:675 -#: calendar/gui/dialogs/task-editor.c:247 calendar/gui/event-editor.c:1200 -msgid "FIXME: Cop_y to Folder..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:677 -#: calendar/gui/dialogs/task-editor.c:249 calendar/gui/event-editor.c:1202 -msgid "Page Set_up" -msgstr "ðÁÒÉÍÅÔÒÉ ÓÔÏÒ¦ÎËÉ" - -#: addressbook/contact-editor/e-contact-editor.c:678 -#: calendar/gui/dialogs/task-editor.c:250 calendar/gui/event-editor.c:1203 -msgid "FIXME: Print Pre_view" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:699 -#: calendar/gui/dialogs/task-editor.c:271 calendar/gui/event-editor.c:1224 -msgid "FIXME: Paste _Special..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:704 -#: calendar/gui/dialogs/task-editor.c:276 calendar/gui/event-editor.c:1229 -msgid "FIXME: Mark as U_nread" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:708 -#: calendar/gui/dialogs/task-editor.c:280 calendar/gui/event-editor.c:1233 -msgid "_Object" -msgstr "ïÂ'¤ËÔ" - -#: addressbook/contact-editor/e-contact-editor.c:713 -#: addressbook/contact-editor/e-contact-editor.c:720 -#: calendar/gui/dialogs/task-editor.c:285 -#: calendar/gui/dialogs/task-editor.c:293 calendar/gui/event-editor.c:1238 -#: calendar/gui/event-editor.c:1245 -msgid "FIXME: _Item" -msgstr "åÌÅÍÅÎÔ" - -#: addressbook/contact-editor/e-contact-editor.c:714 -#: addressbook/contact-editor/e-contact-editor.c:721 -#: calendar/gui/dialogs/task-editor.c:286 -#: calendar/gui/dialogs/task-editor.c:294 calendar/gui/event-editor.c:1239 -#: calendar/gui/event-editor.c:1246 -msgid "FIXME: _Unread Item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:715 -#: calendar/gui/dialogs/task-editor.c:288 calendar/gui/event-editor.c:1240 -msgid "FIXME: Fi_rst Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:722 -#: calendar/gui/dialogs/task-editor.c:296 calendar/gui/event-editor.c:1247 -msgid "FIXME: _Last Item in Folder" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:727 -#: calendar/gui/dialogs/task-editor.c:301 calendar/gui/event-editor.c:1252 -msgid "FIXME: _Standard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:729 -#: calendar/gui/dialogs/task-editor.c:303 calendar/gui/event-editor.c:1254 -msgid "FIXME: __Formatting" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:732 -#: calendar/gui/dialogs/task-editor.c:306 calendar/gui/event-editor.c:1257 -msgid "FIXME: _Customize..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:737 -#: calendar/gui/dialogs/task-editor.c:311 calendar/gui/event-editor.c:1262 -msgid "Pre_vious" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:738 -#: calendar/gui/dialogs/task-editor.c:312 calendar/gui/event-editor.c:1263 -msgid "Ne_xt" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:740 -#: calendar/gui/dialogs/task-editor.c:314 calendar/gui/event-editor.c:1267 -msgid "_Toolbars" -msgstr "ðÁÎÅÌØ ¦ÎÓÔÒÕÍÅÎÔ¦×" - -#: addressbook/contact-editor/e-contact-editor.c:745 -#: calendar/gui/dialogs/task-editor.c:319 calendar/gui/event-editor.c:1272 -msgid "FIXME: _File..." -msgstr "æÁÊÌ..." - -#: addressbook/contact-editor/e-contact-editor.c:746 -#: calendar/gui/dialogs/task-editor.c:320 calendar/gui/event-editor.c:1273 -msgid "FIXME: It_em..." -msgstr "åÌÅÍÅÎÔ..." - -#: addressbook/contact-editor/e-contact-editor.c:747 -#: calendar/gui/dialogs/task-editor.c:321 calendar/gui/event-editor.c:1274 -msgid "FIXME: _Object..." -msgstr "ïÂ'¤ËÔ..." - -#: addressbook/contact-editor/e-contact-editor.c:752 -#: calendar/gui/dialogs/task-editor.c:326 calendar/gui/event-editor.c:1279 -msgid "FIXME: _Font..." -msgstr "ûÒÉÆÔ..." - -#: addressbook/contact-editor/e-contact-editor.c:753 -#: calendar/gui/dialogs/task-editor.c:327 calendar/gui/event-editor.c:1280 -msgid "FIXME: _Paragraph..." -msgstr "ðÁÒÁÇÒÁÆ..." - -#: addressbook/contact-editor/e-contact-editor.c:760 -#: calendar/gui/dialogs/task-editor.c:334 calendar/gui/event-editor.c:1287 -msgid "FIXME: Desi_gn This Form" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:761 -#: calendar/gui/dialogs/task-editor.c:335 calendar/gui/event-editor.c:1288 -msgid "FIXME: D_esign a Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:763 -#: calendar/gui/dialogs/task-editor.c:337 calendar/gui/event-editor.c:1290 -msgid "FIXME: Publish _Form..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:764 -#: calendar/gui/dialogs/task-editor.c:338 calendar/gui/event-editor.c:1291 -msgid "FIXME: Pu_blish Form As..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:766 -#: calendar/gui/dialogs/task-editor.c:340 calendar/gui/event-editor.c:1293 -msgid "FIXME: Script _Debugger" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:771 -#: calendar/gui/dialogs/task-editor.c:345 calendar/gui/event-editor.c:1298 -msgid "FIXME: _Spelling..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:773 -#: calendar/gui/dialogs/task-editor.c:350 calendar/gui/event-editor.c:1303 -msgid "_Forms" -msgstr "æÏÒÍÉ" - -#: addressbook/contact-editor/e-contact-editor.c:778 -msgid "FIXME: _New Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:779 -msgid "FIXME: New _Contact from Same Company" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:781 -msgid "FIXME: New _Letter to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:782 -msgid "FIXME: New _Message to Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:783 -msgid "FIXME: New Meetin_g with Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:784 -msgid "FIXME: _Plan a Meeting..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:785 -msgid "FIXME: New _Task for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:786 -msgid "FIXME: New _Journal Entry for Contact" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:788 -msgid "FIXME: _Flag for Follow Up..." -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:789 -msgid "FIXME: _Display Map of Address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:790 -msgid "FIXME: _Open Web Page" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:792 -msgid "FIXME: Forward as _vCard" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:793 -#: calendar/gui/dialogs/task-editor.c:367 calendar/gui/event-editor.c:1316 -msgid "FIXME: For_ward" -msgstr "ðÅÒÅÓÌÁÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:805 -#: calendar/gui/dialogs/task-editor.c:380 calendar/gui/event-editor.c:1329 -msgid "_Insert" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:806 -#: calendar/gui/dialogs/task-editor.c:381 calendar/gui/event-editor.c:1330 -msgid "F_ormat" -msgstr "æÏÒÍÁÔ" - -#: addressbook/contact-editor/e-contact-editor.c:807 -#: calendar/gui/dialogs/task-editor.c:382 calendar/gui/event-editor.c:1331 -#: shell/e-shell-view-menu.c:513 -msgid "_Tools" -msgstr "¶ÎÓÔÒÕÍÅÎÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:808 -#: calendar/gui/dialogs/task-editor.c:383 calendar/gui/event-editor.c:1332 -msgid "Actio_ns" -msgstr "䦧" - -#: addressbook/contact-editor/e-contact-editor.c:839 -msgid "Save and Close" -msgstr "úÂÅÒÅÇÔÉ ÔÁ ÚÁËÒÉÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:840 -#: calendar/gui/event-editor.c:1371 -msgid "Save the appointment and close the dialog box" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:844 -#: calendar/gui/calendar-commands.c:654 -msgid "Print..." -msgstr "äÒÕËÕ×ÁÔÉ..." - -#: addressbook/contact-editor/e-contact-editor.c:845 -#: calendar/gui/dialogs/task-editor.c:415 calendar/gui/event-editor.c:1376 -msgid "Print this item" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ÃÅÊ ÅÌÅÍÅÎÔ" - -#: addressbook/contact-editor/e-contact-editor.c:848 -#: calendar/gui/dialogs/task-editor.c:416 calendar/gui/event-editor.c:1377 -msgid "FIXME: Insert File..." -msgstr "÷ÓÔÁ×ÉÔÉ ÆÁÊÌ..." - -#: addressbook/contact-editor/e-contact-editor.c:849 -#: calendar/gui/dialogs/task-editor.c:417 calendar/gui/event-editor.c:1378 -msgid "Insert a file as an attachment" -msgstr "" - -#. Delete -#: addressbook/contact-editor/e-contact-editor.c:852 -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:424 -#: calendar/gui/e-calendar-table.c:375 -#: calendar/gui/event-editor-dialog.glade.h:93 calendar/gui/gncal-todo.c:508 -#: mail/folder-browser-factory.c:49 mail/mail-config.glade.h:13 -#: mail/mail-config.glade.h:18 mail/mail-config.glade.h:24 -#: mail/mail-view.c:147 -msgid "Delete" -msgstr "óÔÅÒÔÉ" - -#: addressbook/contact-editor/e-contact-editor.c:853 -#: calendar/gui/dialogs/task-editor.c:426 calendar/gui/event-editor.c:1387 -#: calendar/gui/gncal-todo.c:336 -msgid "Delete this item" -msgstr "óÔÅÒÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: addressbook/contact-editor/e-contact-editor.c:857 -#: calendar/gui/dialogs/task-editor.c:428 calendar/gui/event-editor.c:1389 -msgid "FIXME: Previous" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:858 -#: calendar/gui/dialogs/task-editor.c:429 calendar/gui/event-editor.c:1390 -msgid "Go to the previous item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:860 -#: calendar/gui/dialogs/task-editor.c:430 calendar/gui/event-editor.c:1391 -msgid "FIXME: Next" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:861 -#: calendar/gui/dialogs/task-editor.c:431 calendar/gui/event-editor.c:1392 -msgid "Go to the next item" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:864 -#: calendar/gui/dialogs/task-editor.c:432 calendar/gui/event-editor.c:1393 -msgid "FIXME: Help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:865 -#: calendar/gui/dialogs/task-editor.c:433 calendar/gui/event-editor.c:1394 -msgid "See online help" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1320 -msgid "Assistant" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1321 -#: addressbook/contact-editor/e-contact-editor.c:1425 -msgid "Business" -msgstr "òÏÂÏÞÁ" - -#: addressbook/contact-editor/e-contact-editor.c:1322 -msgid "Business 2" -msgstr "òÏÂÏÞÁ 2" - -#: addressbook/contact-editor/e-contact-editor.c:1323 -msgid "Business Fax" -msgstr "òÏÂÏÞÉÊ ÆÁËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1324 -msgid "Callback" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1325 -msgid "Car" -msgstr "á×ÔÏ" - -#: addressbook/contact-editor/e-contact-editor.c:1326 -msgid "Company" -msgstr "ëÏÍÐÁΦÑ" - -#: addressbook/contact-editor/e-contact-editor.c:1327 -#: addressbook/contact-editor/e-contact-editor.c:1426 -msgid "Home" -msgstr "äÏÍÁÛÎÑ" - -#: addressbook/contact-editor/e-contact-editor.c:1328 -msgid "Home 2" -msgstr "äÏÍÁÛÎÑ 2" - -#: addressbook/contact-editor/e-contact-editor.c:1329 -msgid "Home Fax" -msgstr "äÏÍÁÛÎ¦Ê ÆÁËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1330 -msgid "ISDN" -msgstr "ISDN" - -#: addressbook/contact-editor/e-contact-editor.c:1331 -msgid "Mobile" -msgstr "íϦÌØÎÉÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1332 -#: addressbook/contact-editor/e-contact-editor.c:1427 -#: mail/mail-config.glade.h:27 -msgid "Other" -msgstr "¶ÎÛÁ" - -#: addressbook/contact-editor/e-contact-editor.c:1333 -msgid "Other Fax" -msgstr "¶ÎÛÉÊ ÆÁËÓ" - -#: addressbook/contact-editor/e-contact-editor.c:1334 -msgid "Pager" -msgstr "ðÅÊÄÖÅÒ" - -#: addressbook/contact-editor/e-contact-editor.c:1335 -msgid "Primary" -msgstr "ðÅÒ×ÉÎÎÉÊ" - -#: addressbook/contact-editor/e-contact-editor.c:1336 -msgid "Radio" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1337 -msgid "Telex" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor.c:1338 -msgid "TTY/TDD" -msgstr "TTY/TDD" - -#: addressbook/contact-editor/e-contact-editor-strings.h:23 -#: addressbook/contact-editor/e-contact-editor.c:1382 -msgid "Primary Email" -msgstr "ðÅÒ×ÉÎÎÁ Å-ÐÏÛÔÁ" - -#: addressbook/contact-editor/e-contact-editor.c:1383 -msgid "Email 2" -msgstr "å-ÐÏÛÔÁ 2" - -#: addressbook/contact-editor/e-contact-editor.c:1384 -msgid "Email 3" -msgstr "å-ÐÏÛÔÁ 3" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:7 -msgid "" -"Are you sure you want\n" -"to delete this contact?" -msgstr "" -"÷É ×ÐÅ×ÎÅΦ, ÝÏ ÈÏÞÅÔÅ\n" -"ÓÔÅÒÔÉ ÃÀ ËÏÎÔÁËÔÎÕ ¦ÎÆÏÒÍÁæÀ?" - -#: addressbook/contact-editor/e-contact-editor-confirm-delete.glade.h:9 -msgid "Delete Contact?" -msgstr "óÔÅÒÔÉ ËÏÎÔÁËÔÎÕ ¦ÎÆÏÒÍÁæÀ?" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/e-contact-editor-strings.h:7 -msgid "_Add" -msgstr "äÏÄÁÔÉ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:9 -msgid "Phone Types" -msgstr "ôÉÐÉ ÔÅÌÅÆÏΦ×" - -#: addressbook/contact-editor/e-contact-editor-strings.h:10 -#: addressbook/contact-editor/e-contact-editor-strings.h:12 -msgid "New phone type" -msgstr "îÏ×ÉÊ ÔÉÐ ÔÅÌÅÆÏÎÁ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:11 -#: calendar/gui/event-editor-dialog.glade.h:91 mail/mail-config.glade.h:11 -#: mail/mail-config.glade.h:16 mail/mail-config.glade.h:22 -msgid "Add" -msgstr "äÏÄÁÔÉ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:13 -msgid "Contact Editor" -msgstr "òÅÄÁËÔÏÒ Ú×'ÑÚ˦×" - -#: addressbook/contact-editor/e-contact-editor-strings.h:14 -msgid "_Full Name..." -msgstr "ðÏ×ÎÅ ¦Í'Ñ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:15 -msgid "File As:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:16 -msgid "Web page address:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:17 -msgid "Wants to receive _HTML mail" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:18 -msgid "Address:" -msgstr "áÄÒÅÓÁ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:19 -msgid "_Business" -msgstr "òÏÂÏÞÁ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:20 -msgid "_Home" -msgstr "äÏÍÁÛÎÑ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:21 -msgid "Business _Fax" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:22 -msgid "_Mobile" -msgstr "íϦÌØÎÉÊ ÔÅÌÅÆÏÎ" - -#: addressbook/contact-editor/e-contact-editor-strings.h:24 -msgid "B_usiness" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:25 -msgid "_This is the mailing address" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:26 -msgid "C_ontacts..." -msgstr "ú×'ÑÚËÉ..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:27 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:26 -msgid "Ca_tegories..." -msgstr "ëÁÔÅÇÏÒ¦§..." - -#: addressbook/contact-editor/e-contact-editor-strings.h:28 -msgid "_Job title:" -msgstr "ðÏÓÁÄÁ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:29 -msgid "_Company:" -msgstr "ëÏÍÐÁΦÑ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:30 -#: calendar/gui/event-editor-dialog.glade.h:18 -msgid "General" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:31 -msgid "_Department:" -msgstr "÷¦ÄĦÌ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:32 -msgid "_Office:" -msgstr "ïƦÓ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:33 -msgid "_Profession:" -msgstr "ðÒÏÆÅÓ¦Ñ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:34 -msgid "_Nickname:" -msgstr "ðÒ¦Ú×ÉÓØËÏ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:35 -msgid "_Spouse:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:36 -msgid "_Birthday:" -msgstr "äÁÔÁ ÎÁÒÏÄÖÅÎÎÑ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:37 -msgid "_Assistant's name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:38 -msgid "_Manager's Name:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:39 -msgid "Anni_versary:" -msgstr "" - -#: addressbook/contact-editor/e-contact-editor-strings.h:40 -msgid "No_tes:" -msgstr "îÏÔÁÔËÉ:" - -#: addressbook/contact-editor/e-contact-editor-strings.h:41 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:33 -msgid "Details" -msgstr "ðÏÄÒÏÂÉæ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/contact-editor/fullname-strings.h:7 -msgid "Check Full Name" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:8 -msgid "_Title:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:9 -msgid "_First:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:10 -msgid "_Middle:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:11 -msgid "_Last:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:12 -msgid "_Suffix:" -msgstr "" - -#: addressbook/contact-editor/fullname-strings.h:13 -msgid "" -"\n" -"Mr.\n" -"Mrs.\n" -"Dr.\n" -msgstr "" -"\n" -"ðÁÎ\n" -"ðÁΦ\n" -"äÏËÔÏÒ\n" - -#: addressbook/contact-editor/fullname-strings.h:18 -msgid "" -"\n" -"Sr.\n" -"Jr.\n" -"I\n" -"II\n" -"III\n" -"Esq.\n" -msgstr "" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:418 -#: calendar/gui/calendar-commands.c:511 notes/component-factory.c:27 -msgid "New" -msgstr "îÏ×ÉÊ" - -#: addressbook/demo/addressbook.c:78 -#: addressbook/gui/component/addressbook.c:418 -msgid "Create a new contact" -msgstr "óÔ×ÏÒÉÔÉ ÎÏ×ÉÊ ÚÁÐÉÓ" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find" -msgstr "ûÕËÁÔÉ" - -#: addressbook/demo/addressbook.c:82 -#: addressbook/gui/component/addressbook.c:422 -msgid "Find a contact" -msgstr "úÎÁÊÔÉ ËÏÎÔÁËÔÎÕ ¦ÎÆÏÒÍÁæÀ" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:423 -#: calendar/gui/calendar-commands.c:516 mail/folder-browser-factory.c:47 -#: mail/mail-view.c:145 -msgid "Print" -msgstr "äÒÕËÕ×ÁÔÉ" - -#: addressbook/demo/addressbook.c:83 -#: addressbook/gui/component/addressbook.c:423 -msgid "Print contacts" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ËÏÎÔÁËÔÎÕ ¦ÎÆÏÒÍÁæÀ" - -#: addressbook/demo/addressbook.c:84 -#: addressbook/gui/component/addressbook.c:424 -msgid "Delete a contact" -msgstr "óÔÅÒÔÉ ËÏÎÔÁËÔÎÕ ¦ÎÆÏÒÍÁæÀ" - -#: addressbook/demo/addressbook.c:103 -#: addressbook/gui/component/addressbook.c:509 -msgid "_New Contact" -msgstr "îÏ×Á ¦ÎÆÏÒÍÁæÑ" - -#: addressbook/gui/component/addressbook.c:492 -msgid "_Print Contacts..." -msgstr "îÁÄÒÕËÕ×ÁÔÉ ËÏÎÔÁËÔÎÕ ¦ÎÆÏÒÍÁæÀ..." - -#: addressbook/gui/component/addressbook.c:502 -#: addressbook/gui/component/addressbook.c:972 -msgid "As _Table" -msgstr "" - -#: addressbook/gui/component/addressbook.c:517 -msgid "N_ew Directory Server" -msgstr "" - -#: addressbook/gui/component/addressbook.c:600 -msgid "Unable to open addressbook" -msgstr "îÅ ×ÄÁÌÏÓÑ ×¦ÄËÒÉÔÉ ÁÄÒÅÓÎÕ ËÎÉÇÕ" - -#: addressbook/gui/component/addressbook.c:605 -msgid "" -"We were unable to open this addressbook. This either\n" -"means you have entered an incorrect URI, or have tried\n" -"to access an LDAP server and don't have LDAP support\n" -"compiled in. If you've entered a URI, check the URI for\n" -"correctness and reenter. If not, you probably have\n" -"attempted to access an LDAP server. If you wish to be\n" -"able to use LDAP, you'll need to download and install\n" -"OpenLDAP and recompile and install evolution.\n" -msgstr "" - -#: addressbook/gui/component/addressbook.c:876 -#: addressbook/gui/minicard/e-minicard.c:330 -msgid "Save as VCard" -msgstr "úÂÅÒÅÇÔÉ ÑË VCard" - -#: addressbook/gui/component/addressbook.c:943 -msgid "* Click here to add a contact *" -msgstr "" - -#: addressbook/gui/component/addressbook.c:979 -msgid "As _Minicards" -msgstr "ñË _Minicards" - -#: addressbook/gui/component/addressbook.c:1030 -msgid "The URI that the Folder Browser will display" -msgstr "URI ÔÅËÉ, ÝÏ ÂÕÄŠצÄÏÂÒÁÖÅÎÏ ÐÅÒÅÇÌÑÄÁÞÅÍ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/alphabet.glade.h:7 -msgid "window2" -msgstr "צËÎÏ2" - -#: addressbook/gui/component/alphabet.glade.h:8 -msgid "123" -msgstr "123" - -#: addressbook/gui/component/alphabet.glade.h:9 -msgid "a" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:10 -msgid "b" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:11 -msgid "c" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:12 -msgid "d" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:13 -msgid "e" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:14 -msgid "f" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:15 -msgid "g" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:16 -#: calendar/cal-util/timeutil.c:131 -msgid "h" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:17 -msgid "i" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:18 -msgid "j" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:19 -msgid "k" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:20 -msgid "l" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:21 -msgid "m" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:22 -msgid "n" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:23 -msgid "o" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:24 -msgid "p" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:25 -msgid "q" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:26 -msgid "r" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:27 -msgid "s" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:28 -msgid "t" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:29 -msgid "u" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:30 -msgid "v" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:31 -msgid "w" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:32 -msgid "x" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:33 -msgid "y" -msgstr "" - -#: addressbook/gui/component/alphabet.glade.h:34 -msgid "z" -msgstr "" - -#: addressbook/gui/component/e-ldap-storage.c:88 -msgid "External Directories" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/ldap-server-dialog.glade.h:7 -#: composer/e-msg-composer-attachment.glade.h:9 -msgid "Description:" -msgstr "ïÐÉÓ:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:8 -msgid "LDAP Server:" -msgstr "óÅÒ×ÅÒ LDAP:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:9 -msgid "Port Number:" -msgstr "îÏÍÅÒ ÐÏÒÔÁ:" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:10 -msgid "Root DN:" -msgstr "" - -#: addressbook/gui/component/ldap-server-dialog.glade.h:11 -#: composer/e-msg-composer-address-dialog.glade.h:8 -msgid "Name:" -msgstr "¶Í'Ñ:" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/gui/component/select-names/select-names.glade.h:7 -msgid "Select Names" -msgstr "÷ÉÂÒÁÔÉ ÎÁÚ×É" - -#: addressbook/gui/component/select-names/select-names.glade.h:8 -msgid "Find..." -msgstr "ûÕËÁÔÉ..." - -#: addressbook/gui/component/select-names/select-names.glade.h:9 -#, fuzzy -msgid "Select name from List:" -msgstr "÷ÉÂÒÁÔÉ ÎÁÚ×É" - -#: addressbook/gui/component/select-names/select-names.glade.h:10 -msgid "Message Recipients" -msgstr "áÄÒÅÓÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: addressbook/gui/minicard/e-minicard-control.c:276 -#, fuzzy -msgid "Save in addressbook" -msgstr "îÅ ×ÄÁÌÏÓÑ ×¦ÄËÒÉÔÉ ÁÄÒÅÓÎÕ ËÎÉÇÕ" - -#: addressbook/gui/minicard/e-minicard-view.c:110 -msgid "" -"\n" -"\n" -"There are no items to show in this view\n" -"\n" -"Double-click here to create a new Contact." -msgstr "" - -#: addressbook/gui/minicard/test-minicard-view.c:100 -msgid "Reflow Test" -msgstr "" - -#: addressbook/gui/minicard/test-minicard-view.c:101 -#, fuzzy -msgid "Copyright (C) 2000, Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: addressbook/gui/minicard/test-minicard-view.c:103 -msgid "This should test the reflow canvas item" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: addressbook/printing/e-contact-print.glade.h:7 -msgid "Page Setup:" -msgstr "ðÁÒÁÍÅÔÒÉ ÓÔÏÒ¦ÎËÉ:" - -#: addressbook/printing/e-contact-print.glade.h:8 -msgid "Style name:" -msgstr "îÁÚ×Á ÓÔÉÌÀ:" - -#: addressbook/printing/e-contact-print.glade.h:9 -msgid "Preview:" -msgstr "ðÅÒÅÇÌÑÄ:" - -#: addressbook/printing/e-contact-print.glade.h:10 -msgid "Options" -msgstr "ðÁÒÁÍÅÔÒÉ" - -#: addressbook/printing/e-contact-print.glade.h:11 -msgid "Include:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:12 -msgid "Sections:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:13 -msgid "Immediately follow each other" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:14 -msgid "Letter tabs on side" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:15 -msgid "Headings for each letter" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:16 -msgid "Start on a new page" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:17 -msgid "Number of columns:" -msgstr "ë¦ÌØ˦ÓÔØ ÓÔÏ×ÐÞÉ˦×:" - -#: addressbook/printing/e-contact-print.glade.h:18 -msgid "Blank forms at end:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:19 -msgid "Fonts" -msgstr "ûÒÉÆÔÉ" - -#: addressbook/printing/e-contact-print.glade.h:20 -#: addressbook/printing/e-contact-print.glade.h:21 -#: addressbook/printing/e-contact-print.glade.h:51 -#: addressbook/printing/e-contact-print.glade.h:54 -msgid "Font..." -msgstr "ûÒÉÆÔ..." - -#: addressbook/printing/e-contact-print.glade.h:22 -msgid "Headings" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:23 -msgid "10 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:24 -msgid "Body" -msgstr "ô¦ÌÏ" - -#: addressbook/printing/e-contact-print.glade.h:25 -msgid "8 pt. Tahoma" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:26 -msgid "Shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:27 -msgid "Print using gray shading" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:28 -msgid "Format" -msgstr "æÏÒÍÁÔ" - -#: addressbook/printing/e-contact-print.glade.h:29 -#: addressbook/printing/e-contact-print.glade.h:50 -msgid "Paper" -msgstr "ðÁЦÒ" - -#: addressbook/printing/e-contact-print.glade.h:30 -msgid "Type:" -msgstr "ôÉÐ:" - -#: addressbook/printing/e-contact-print.glade.h:31 -#: addressbook/printing/e-contact-print.glade.h:43 -#: calendar/gui/event-editor-dialog.glade.h:81 -msgid "label26" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:32 -#: addressbook/printing/e-contact-print.glade.h:44 -msgid "Dimensions:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:33 -#: addressbook/printing/e-contact-print.glade.h:45 -msgid "Width:" -msgstr "ûÉÒÉÎÁ:" - -#: addressbook/printing/e-contact-print.glade.h:34 -#: addressbook/printing/e-contact-print.glade.h:46 -msgid "Height:" -msgstr "÷ÉÓÏÔÁ:" - -#: addressbook/printing/e-contact-print.glade.h:35 -msgid "Paper source:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:36 -msgid "Margins" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:37 -msgid "Top:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:38 -msgid "Bottom:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:39 -msgid "Left:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:40 -msgid "Right:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:41 -msgid "Page" -msgstr "óÔÏÒ¦ÎËÁ" - -#: addressbook/printing/e-contact-print.glade.h:42 -msgid "Size:" -msgstr "òÏÚͦÒ:" - -#: addressbook/printing/e-contact-print.glade.h:47 -msgid "Orientation" -msgstr "ïÒ¦¤ÎÔÁæÑ" - -#: addressbook/printing/e-contact-print.glade.h:48 -msgid "Portrait" -msgstr "ëÎÉÖÎÁ" - -#: addressbook/printing/e-contact-print.glade.h:49 -msgid "Landscape" -msgstr "áÌØÂÏÍÎÁ" - -#: addressbook/printing/e-contact-print.glade.h:52 -msgid "Header" -msgstr "úÁÇÏÌÏ×ÏË" - -#: addressbook/printing/e-contact-print.glade.h:53 -msgid "Footer:" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:55 -msgid "Reverse on even pages" -msgstr "" - -#: addressbook/printing/e-contact-print.glade.h:56 -msgid "Header/Footer" -msgstr "" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:544 -msgid "am" -msgstr "ÄÐ" - -#: calendar/cal-util/timeutil.c:129 calendar/gui/print.c:543 -msgid "pm" -msgstr "ÐÐ" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:146 -msgid "Gpilotd calendar conduit" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit-control-applet.c:149 -msgid "Configuration utility for the calendar conduit.\n" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit.c:399 -#: calendar/conduits/calendar/calendar-conduit.c:1109 -#: calendar/conduits/todo/todo-conduit.c:443 -#: calendar/conduits/todo/todo-conduit.c:1025 -msgid "Error while communicating with calendar server" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit.c:776 -#: calendar/conduits/calendar/calendar-conduit.c:778 -#: calendar/conduits/todo/todo-conduit.c:707 -#: calendar/conduits/todo/todo-conduit.c:709 -msgid "Could not start gnomecal server" -msgstr "" - -#: calendar/conduits/calendar/calendar-conduit.c:806 -#: calendar/conduits/calendar/calendar-conduit.c:809 -msgid "Could not read pilot's DateBook application block" -msgstr "" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:146 -msgid "Gpilotd todo conduit" -msgstr "" - -#: calendar/conduits/todo/todo-conduit-control-applet.c:149 -msgid "Configuration utility for the todo conduit.\n" -msgstr "" - -#: calendar/conduits/todo/todo-conduit.c:737 -#: calendar/conduits/todo/todo-conduit.c:740 -msgid "Could not read pilot's ToDo application block" -msgstr "" - -#: calendar/gui/calendar-commands.c:59 -msgid "Outline:" -msgstr "" - -#: calendar/gui/calendar-commands.c:60 -msgid "Headings:" -msgstr "" - -#: calendar/gui/calendar-commands.c:61 -msgid "Empty days:" -msgstr "" - -#: calendar/gui/calendar-commands.c:62 -msgid "Appointments:" -msgstr "úÕÓÔÒ¦Þ¦:" - -#: calendar/gui/calendar-commands.c:63 -msgid "Highlighted day:" -msgstr "" - -#: calendar/gui/calendar-commands.c:64 -msgid "Day numbers:" -msgstr "" - -#: calendar/gui/calendar-commands.c:65 -msgid "Current day's number:" -msgstr "" - -#: calendar/gui/calendar-commands.c:66 -msgid "To-Do item that is not yet due:" -msgstr "" - -#: calendar/gui/calendar-commands.c:67 -msgid "To-Do item that is due today:" -msgstr "" - -#: calendar/gui/calendar-commands.c:68 -msgid "To-Do item that is overdue:" -msgstr "" - -#: calendar/gui/calendar-commands.c:175 -msgid "Gnome Calendar" -msgstr "" - -#: calendar/gui/calendar-commands.c:178 -msgid "The GNOME personal calendar and schedule manager." -msgstr "" - -#: calendar/gui/calendar-commands.c:401 tests/ui-tests/message-browser.c:676 -msgid "File not found" -msgstr "æÁÊÌÕ ÎÅ ÚÎÁÊÄÅÎÏ" - -#: calendar/gui/calendar-commands.c:423 -msgid "Open calendar" -msgstr "÷¦ÄËÒÉÔÉ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:462 -msgid "Save calendar" -msgstr "úÂÅÒÅÇÔÉ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:489 calendar/gui/gncal-todo.c:722 -#: calendar/gui/gncal-todo.c:726 -msgid "Day" -msgstr "äÅÎØ" - -#: calendar/gui/calendar-commands.c:489 -msgid "Show 1 day" -msgstr "" - -#: calendar/gui/calendar-commands.c:492 -msgid "5 Days" -msgstr "5 äΦ×" - -#: calendar/gui/calendar-commands.c:492 -msgid "Show the working week" -msgstr "" - -#: calendar/gui/calendar-commands.c:495 calendar/gui/gncal-todo.c:721 -msgid "Week" -msgstr "ôÉÖÄÅÎØ" - -#: calendar/gui/calendar-commands.c:495 -msgid "Show 1 week" -msgstr "" - -#: calendar/gui/calendar-commands.c:498 -msgid "Month" -msgstr "í¦ÓÑÃØ" - -#: calendar/gui/calendar-commands.c:498 -msgid "Show 1 month" -msgstr "" - -#: calendar/gui/calendar-commands.c:502 -msgid "Year" -msgstr "ò¦Ë" - -#: calendar/gui/calendar-commands.c:502 -msgid "Show 1 year" -msgstr "" - -#: calendar/gui/calendar-commands.c:511 calendar/gui/calendar-commands.c:663 -msgid "Create a new appointment" -msgstr "" - -#: calendar/gui/calendar-commands.c:516 calendar/gui/calendar-commands.c:655 -msgid "Print this calendar" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ÃÅÊ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:520 -msgid "Prev" -msgstr "" - -#: calendar/gui/calendar-commands.c:520 -msgid "Go back in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:521 -#, fuzzy -msgid "Today" -msgstr "ô¦ÌÏ" - -#: calendar/gui/calendar-commands.c:521 -msgid "Go to present time" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Next" -msgstr "" - -#: calendar/gui/calendar-commands.c:522 -msgid "Go forward in time" -msgstr "" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to" -msgstr "ðÅÒÅÊÔÉ" - -#: calendar/gui/calendar-commands.c:526 -msgid "Go to a specific date" -msgstr "ðÅÒÅÊÔÉ ÄÏ ×ËÁÚÁÎϧ ÄÁÔÉ" - -#. file menu -#: calendar/gui/calendar-commands.c:640 -msgid "New Ca_lendar" -msgstr "îÏ×ÉÊ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:641 -msgid "Create a new calendar" -msgstr "óÔ×ÏÒÉÔÉ ÎÏ×ÉÊ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:644 -msgid "Open Ca_lendar" -msgstr "÷¦ÄËÒÉÔÉ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:645 -msgid "Open a calendar" -msgstr "÷¦ÄËÒÉÔÉ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/calendar-commands.c:649 calendar/gui/calendar-commands.c:650 -msgid "Save Calendar As" -msgstr "úÂÅÒÅÇÔÉ ËÁÌÅÎÄÁÒ ÑË" - -#: calendar/gui/calendar-commands.c:663 -msgid "_New appointment..." -msgstr "" - -#: calendar/gui/calendar-commands.c:671 calendar/gui/prop.c:716 -msgid "Preferences" -msgstr "" - -#: calendar/gui/calendar-commands.c:678 calendar/gui/calendar-commands.c:679 -msgid "About Calendar" -msgstr "" - -#. i18n: This "%s%s" indicates possession. Languages where the order is -#. * the inverse should translate it to "%2$s%1$s". -#. -#: calendar/gui/calendar-commands.c:721 -#, c-format -msgid "%s%s" -msgstr "" - -#: calendar/gui/calendar-commands.c:721 -msgid "'s calendar" -msgstr "" - -#: calendar/gui/calendar-model.c:323 -msgid "Public" -msgstr "" - -#: calendar/gui/calendar-model.c:326 -#: calendar/gui/dialogs/task-editor-dialog.glade.h:27 -#, fuzzy -msgid "Private" -msgstr "÷ÓÔÁ×ÉÔÉ" - -#: calendar/gui/calendar-model.c:329 -msgid "Confidential" -msgstr "" - -#: calendar/gui/calendar-model.c:332 calendar/gui/calendar-model.c:499 -#, fuzzy -msgid "Unknown" -msgstr "îÅצÄÏÍÁ ÐÏÍÉÌËÁ" - -#: calendar/gui/calendar-model.c:419 -msgid "N" -msgstr "" - -#: calendar/gui/calendar-model.c:419 -msgid "S" -msgstr "" - -#: calendar/gui/calendar-model.c:421 -msgid "E" -msgstr "" - -#: calendar/gui/calendar-model.c:421 -msgid "W" -msgstr "" - -#: calendar/gui/calendar-model.c:493 -msgid "Transparent" -msgstr "" - -#: calendar/gui/calendar-model.c:496 -msgid "Opaque" -msgstr "" - -#: calendar/gui/calendar-model.c:747 -#, c-format -msgid "" -"The date must be entered in the format: \n" -"\n" -"%s" -msgstr "" - -#: calendar/gui/calendar-model.c:820 -msgid "" -"The geographical position must be entered in the format: \n" -"\n" -"45.436845,125.862501" -msgstr "" - -#: calendar/gui/calendar-model.c:865 -msgid "The percent value must be between 0 and 100" -msgstr "" - -#: calendar/gui/calendar-model.c:898 -msgid "The priority must be between 0 and 10" -msgstr "" - -#: calendar/gui/control-factory.c:132 -#, fuzzy -msgid "The URI that the calendar will display" -msgstr "URI ÔÅËÉ, ÝÏ ÂÕÄŠצÄÏÂÒÁÖÅÎÏ ÐÅÒÅÇÌÑÄÁÞÅÍ" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:183 -msgid "Alarm on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:190 -msgid "Notification about your appointment on %A %b %d %Y %H:%M" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify-dialog.c:201 -msgid "No summary available." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/alarm-notify.glade.h:7 -msgid "Close" -msgstr "" - -#: calendar/gui/dialogs/alarm-notify.glade.h:8 calendar/gui/gnome-cal.c:1070 -#, fuzzy -msgid "Snooze" -msgstr "òÏÚͦÒ" - -#: calendar/gui/dialogs/alarm-notify.glade.h:9 -#, fuzzy -msgid "Edit appointment" -msgstr "úÕÓÔÒ¦Þ" - -#: calendar/gui/dialogs/alarm-notify.glade.h:10 -msgid "Snooze time (minutes)" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:245 calendar/gui/event-editor.c:1198 -msgid "FIXME: _Delete" -msgstr "óÔÅÒÔÉ" - -#: calendar/gui/dialogs/task-editor.c:287 -#: calendar/gui/dialogs/task-editor.c:295 -#, fuzzy -msgid "FIXME: In_complete Task" -msgstr "úÁ×ÄÁÎÎÑ" - -#: calendar/gui/dialogs/task-editor.c:347 calendar/gui/event-editor.c:1300 -msgid "FIXME: Chec_k Names" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:348 calendar/gui/event-editor.c:1301 -msgid "FIXME: Address _Book..." -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:355 -#, fuzzy -msgid "FIXME: _New Task" -msgstr "úÁ×ÄÁÎÎÑ" - -#: calendar/gui/dialogs/task-editor.c:357 -msgid "FIXME: S_end Status Report" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:358 -#, fuzzy -msgid "FIXME: _Mark Complete" -msgstr "óÔÅÒÔÉ" - -#: calendar/gui/dialogs/task-editor.c:360 calendar/gui/event-editor.c:1310 -msgid "FIXME: Rec_urrence..." -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:361 -msgid "FIXME: S_kip Occurrence" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:363 -#, fuzzy -msgid "FIXME: Assig_n Task" -msgstr "úÁ×ÄÁÎÎÑ" - -#: calendar/gui/dialogs/task-editor.c:365 -#, fuzzy -msgid "FIXME: _Reply" -msgstr "óÔÅÒÔÉ" - -#: calendar/gui/dialogs/task-editor.c:366 -#, fuzzy -msgid "FIXME: Reply to A_ll" -msgstr "÷¦ÄÐÏצÓÔÉ ×Ó¦Í" - -#: calendar/gui/dialogs/task-editor.c:409 calendar/gui/event-editor.c:1370 -msgid "FIXME: Save and Close" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:410 -msgid "Save the task and close the dialog box" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:414 calendar/gui/event-editor.c:1375 -msgid "FIXME: Print..." -msgstr "äÒÕËÕ×ÁÔÉ..." - -#: calendar/gui/dialogs/task-editor.c:419 calendar/gui/event-editor.c:1380 -msgid "FIXME: Recurrence..." -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:420 calendar/gui/event-editor.c:1381 -msgid "Configure recurrence rules" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:422 -#, fuzzy -msgid "FIXME: Assign Task..." -msgstr "úÁ×ÄÁÎÎÑ" - -#: calendar/gui/dialogs/task-editor.c:423 -msgid "Assign the task to someone" -msgstr "" - -#: calendar/gui/dialogs/task-editor.c:425 calendar/gui/event-editor.c:1386 -msgid "FIXME: Delete" -msgstr "óÔÅÒÔÉ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/dialogs/task-editor-dialog.glade.h:7 -#, fuzzy -msgid "S_ubject:" -msgstr "ôÅÍÁ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:8 -msgid "Owner:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:9 -msgid "Sta_rt Date:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:10 -#, fuzzy -msgid "_Due Date:" -msgstr "äÁÔÁ" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:11 -msgid "_Status:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:12 -msgid "" -"Not Started\n" -"In Progress\n" -"Completed\n" -"Cancelled\n" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:17 -msgid "Not Started" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:18 -#, fuzzy -msgid "_Priority:" -msgstr "ðÒÉÏÒ¦ÔÅÔ" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:19 -msgid "" -"High\n" -"Normal\n" -"Low\n" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:23 -#, fuzzy -msgid "High" -msgstr "÷ÉÓÏÔÁ:" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:24 -msgid "% Comp_lete:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:25 -#, fuzzy -msgid "_Contacts..." -msgstr "ú×'ÑÚËÉ..." - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:28 -#, fuzzy -msgid "Task" -msgstr "úÁ×ÄÁÎÎÑ" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:29 -msgid "Date Completed:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:30 -msgid "Location:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:31 -msgid "URL:" -msgstr "" - -#: calendar/gui/dialogs/task-editor-dialog.glade.h:32 -msgid "Resources:" -msgstr "" - -#: calendar/gui/e-calendar-table.c:189 -msgid "Comment" -msgstr "" - -#: calendar/gui/e-calendar-table.c:194 -msgid "Completed" -msgstr "" - -#: calendar/gui/e-calendar-table.c:199 -msgid "Created" -msgstr "" - -#: calendar/gui/e-calendar-table.c:204 -#, fuzzy -msgid "Description" -msgstr "ïÐÉÓ:" - -#: calendar/gui/e-calendar-table.c:209 -msgid "Timestamp" -msgstr "" - -#: calendar/gui/e-calendar-table.c:214 -msgid "Start Date" -msgstr "" - -#: calendar/gui/e-calendar-table.c:219 -#, fuzzy -msgid "End Date" -msgstr "äÁÔÁ" - -#: calendar/gui/e-calendar-table.c:224 -msgid "Geographical Position" -msgstr "" - -#: calendar/gui/e-calendar-table.c:229 -msgid "Last Modification Date" -msgstr "" - -#: calendar/gui/e-calendar-table.c:234 -#, fuzzy -msgid "Location" -msgstr "䦧" - -#: calendar/gui/e-calendar-table.c:239 -#, fuzzy -msgid "Organizer" -msgstr "ïÒ¦¤ÎÔÁæÑ" - -#: calendar/gui/e-calendar-table.c:244 -msgid "% Complete" -msgstr "" - -#: calendar/gui/e-calendar-table.c:249 calendar/gui/gncal-todo.c:436 -#: calendar/gui/prop.c:609 mail/message-list.c:507 -msgid "Priority" -msgstr "ðÒÉÏÒ¦ÔÅÔ" - -#: calendar/gui/e-calendar-table.c:260 -#, fuzzy -msgid "TaskPad" -msgstr "úÁ×ÄÁÎÎÑ" - -#: calendar/gui/e-calendar-table.c:265 -msgid "URL" -msgstr "" - -#: calendar/gui/e-calendar-table.c:270 -#: calendar/gui/event-editor-dialog.glade.h:41 -msgid "Reminder" -msgstr "" - -#: calendar/gui/e-calendar-table.c:369 -#, fuzzy -msgid "Open..." -msgstr "÷¦ÄËÒÉÔÉ" - -#: calendar/gui/e-calendar-table.c:370 -msgid "Open the task" -msgstr "" - -#: calendar/gui/e-calendar-table.c:372 -msgid "Mark Complete" -msgstr "" - -#: calendar/gui/e-calendar-table.c:373 -msgid "Mark the task complete" -msgstr "" - -#: calendar/gui/e-calendar-table.c:376 -#, fuzzy -msgid "Delete the task" -msgstr "óÔÅÒÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: calendar/gui/e-day-view-time-item.c:391 -#, c-format -msgid "%02i minute divisions" -msgstr "" - -#: calendar/gui/e-day-view.c:2317 calendar/gui/e-day-view.c:2324 -#: calendar/gui/e-day-view.c:2333 calendar/gui/e-week-view.c:2643 -#: calendar/gui/e-week-view.c:2650 calendar/gui/e-week-view.c:2659 -#, fuzzy -msgid "New appointment..." -msgstr "úÕÓÔÒ¦Þ" - -#: calendar/gui/e-day-view.c:2321 calendar/gui/e-day-view.c:2328 -#: calendar/gui/e-week-view.c:2647 calendar/gui/e-week-view.c:2654 -msgid "Edit this appointment..." -msgstr "" - -#: calendar/gui/e-day-view.c:2322 calendar/gui/e-week-view.c:2648 -#, fuzzy -msgid "Delete this appointment" -msgstr "óÔÅÒÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: calendar/gui/e-day-view.c:2329 calendar/gui/e-week-view.c:2655 -msgid "Make this appointment movable" -msgstr "" - -#: calendar/gui/e-day-view.c:2330 calendar/gui/e-week-view.c:2656 -#, fuzzy -msgid "Delete this occurrence" -msgstr "óÔÅÒÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: calendar/gui/e-day-view.c:2331 calendar/gui/e-week-view.c:2657 -msgid "Delete all occurrences" -msgstr "" - -#: calendar/gui/event-editor.c:291 -#, fuzzy -msgid "Edit Appointment" -msgstr "úÕÓÔÒ¦Þ" - -#: calendar/gui/event-editor.c:296 -msgid "No summary" -msgstr "" - -#: calendar/gui/event-editor.c:300 -#, fuzzy, c-format -msgid "Appointment - %s" -msgstr "úÕÓÔÒ¦Þ" - -#: calendar/gui/event-editor.c:303 -#, c-format -msgid "Task - %s" -msgstr "" - -#: calendar/gui/event-editor.c:306 -#, fuzzy, c-format -msgid "Journal entry - %s" -msgstr "öÕÒÎÁÌØÎÉÊ ÒÑÄÏË" - -#. Owner, summary -#: calendar/gui/event-editor.c:622 calendar/gui/event-editor.c:718 -msgid "?" -msgstr "" - -#: calendar/gui/event-editor.c:1265 -msgid "FIXME: Ca_lendar..." -msgstr "" - -#: calendar/gui/event-editor.c:1308 -#, fuzzy -msgid "FIXME: _New Appointment" -msgstr "úÕÓÔÒ¦Þ" - -#: calendar/gui/event-editor.c:1312 -#, fuzzy -msgid "FIXME: Invite _Attendees..." -msgstr "." - -#: calendar/gui/event-editor.c:1313 -msgid "FIXME: C_ancel Invitation..." -msgstr "" - -#: calendar/gui/event-editor.c:1315 -msgid "FIXME: Forward as v_Calendar" -msgstr "" - -#: calendar/gui/event-editor.c:1383 -msgid "FIXME: Invite Attendees..." -msgstr "" - -#: calendar/gui/event-editor.c:1384 -msgid "Invite attendees to a meeting" -msgstr "" - -#: calendar/gui/event-editor.c:1828 -msgid "%a %b %d %Y" -msgstr "" - -#. todo -#. -#. build some of the recur stuff by hand to take into account -#. the start-on-monday preference? -#. -#. get the apply button to work right -#. -#. make the properties stuff unglobal -#. -#. figure out why alarm units aren't sticking between edits -#. -#. closing the dialog window with the wm caused a crash -#. Gtk-WARNING **: invalid cast from `(unknown)' to `GnomeDialog' -#. on line 669: gnome_dialog_close (GNOME_DIALOG(dialog->dialog)); -#. -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: calendar/gui/event-editor-dialog.glade.h:7 -msgid "event-editor-dialog" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:8 -msgid "_Summary:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:9 -msgid "_Owner:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:10 -msgid "Time" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:11 -msgid "Start time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:12 -msgid "End time:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:13 -msgid "A_ll day event" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:14 -msgid "Classification" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:15 -msgid "Pu_blic" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:16 -#, fuzzy -msgid "Pri_vate" -msgstr "÷ÓÔÁ×ÉÔÉ" - -#: calendar/gui/event-editor-dialog.glade.h:17 -msgid "_Confidential" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:19 -#: calendar/gui/event-editor-dialog.glade.h:23 -#: calendar/gui/event-editor-dialog.glade.h:27 -#: calendar/gui/event-editor-dialog.glade.h:31 -msgid "" -"Minutes\n" -"Hours\n" -"Days\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:35 -msgid "_Display" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:36 -#, fuzzy -msgid "_Audio" -msgstr "äÏÄÁÔÉ" - -#: calendar/gui/event-editor-dialog.glade.h:37 -msgid "_Program" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:38 -#, fuzzy -msgid "_Mail" -msgstr "íϦÌØÎÉÊ ÔÅÌÅÆÏÎ" - -#: calendar/gui/event-editor-dialog.glade.h:39 -msgid "Mail _to:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:40 -msgid "_Run program:" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:42 -msgid "Recurrence rule" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:43 shell/e-shell-view.c:865 -#, fuzzy -msgid "None" -msgstr "îÏÔÁÔËÁ" - -#: calendar/gui/event-editor-dialog.glade.h:44 -#, fuzzy -msgid "Daily" -msgstr "ðÏÄÒÏÂÉæ" - -#: calendar/gui/event-editor-dialog.glade.h:45 -msgid "Weekly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:46 -msgid "Monthly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:47 -msgid "Yearly" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:48 -#, fuzzy -msgid "label23" -msgstr "ÐÏÚÎÁÞËÁ2" - -#: calendar/gui/event-editor-dialog.glade.h:49 -#: calendar/gui/event-editor-dialog.glade.h:52 -#: calendar/gui/event-editor-dialog.glade.h:82 -msgid "Every " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:50 -msgid "day(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:51 -#, fuzzy -msgid "label24" -msgstr "ÐÏÚÎÁÞËÁ2" - -#: calendar/gui/event-editor-dialog.glade.h:53 -msgid "week(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:54 -#: calendar/gui/gnome-month-item.c:737 -msgid "Mon" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:55 -#: calendar/gui/gnome-month-item.c:738 -msgid "Tue" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:56 -#: calendar/gui/gnome-month-item.c:739 -msgid "Wed" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:57 -#: calendar/gui/gnome-month-item.c:740 -msgid "Thu" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:58 -#: calendar/gui/gnome-month-item.c:741 -msgid "Fri" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:59 -#: calendar/gui/gnome-month-item.c:742 -msgid "Sat" -msgstr "" - -#. Initialize by default to three-letter day names -#: calendar/gui/event-editor-dialog.glade.h:60 -#: calendar/gui/gnome-month-item.c:736 -msgid "Sun" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:61 -#, fuzzy -msgid "label25" -msgstr "ÐÏÚÎÁÞËÁ2" - -#: calendar/gui/event-editor-dialog.glade.h:62 -#: calendar/gui/event-editor-dialog.glade.h:63 -msgid "Recur on the" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:64 -msgid "th day of the month" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:65 -msgid "" -"1st\n" -"2nd\n" -"3rd\n" -"4th\n" -"5th\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:71 -msgid "" -"Monday\n" -"Tuesday\n" -"Wednesday\n" -"Thursday\n" -"Friday\n" -"Saturday\n" -"Sunday\n" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:79 -msgid "Every" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:80 -#, fuzzy -msgid "month(s)" -msgstr "ûÒÉÆÔÉ" - -#: calendar/gui/event-editor-dialog.glade.h:83 -msgid "year(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:84 -#, fuzzy -msgid "label27" -msgstr "ÐÏÚÎÁÞËÁ2" - -#: calendar/gui/event-editor-dialog.glade.h:85 -msgid "Ending date" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:86 -msgid "Repeat forever" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:87 -msgid "End on " -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:88 -msgid "End after" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:89 -msgid "occurrence(s)" -msgstr "" - -#: calendar/gui/event-editor-dialog.glade.h:90 -#, fuzzy -msgid "Exceptions" -msgstr "ðÁÒÁÍÅÔÒÉ" - -#: calendar/gui/event-editor-dialog.glade.h:92 -#, fuzzy -msgid "Change" -msgstr "óÔÏÒ¦ÎËÁ" - -#: calendar/gui/event-editor-dialog.glade.h:94 -msgid "Recurrence" -msgstr "" - -#: calendar/gui/getdate.y:391 -msgid "january" -msgstr "" - -#: calendar/gui/getdate.y:392 -msgid "february" -msgstr "" - -#: calendar/gui/getdate.y:393 -msgid "march" -msgstr "" - -#: calendar/gui/getdate.y:394 -#, fuzzy -msgid "april" -msgstr "ðÁЦÒ" - -#: calendar/gui/getdate.y:395 -msgid "may" -msgstr "" - -#: calendar/gui/getdate.y:396 -msgid "june" -msgstr "" - -#: calendar/gui/getdate.y:397 -msgid "july" -msgstr "" - -#: calendar/gui/getdate.y:398 -msgid "august" -msgstr "" - -#: calendar/gui/getdate.y:399 -msgid "september" -msgstr "" - -#: calendar/gui/getdate.y:400 -msgid "sept" -msgstr "" - -#: calendar/gui/getdate.y:401 -msgid "october" -msgstr "" - -#: calendar/gui/getdate.y:402 -msgid "november" -msgstr "" - -#: calendar/gui/getdate.y:403 -msgid "december" -msgstr "" - -#: calendar/gui/getdate.y:404 -msgid "sunday" -msgstr "" - -#: calendar/gui/getdate.y:405 -#, fuzzy -msgid "monday" -msgstr "ô¦ÌÏ" - -#: calendar/gui/getdate.y:406 -msgid "tuesday" -msgstr "" - -#: calendar/gui/getdate.y:407 -msgid "tues" -msgstr "" - -#: calendar/gui/getdate.y:408 -msgid "wednesday" -msgstr "" - -#: calendar/gui/getdate.y:409 -msgid "wednes" -msgstr "" - -#: calendar/gui/getdate.y:410 -msgid "thursday" -msgstr "" - -#: calendar/gui/getdate.y:411 -msgid "thur" -msgstr "" - -#: calendar/gui/getdate.y:412 -msgid "thurs" -msgstr "" - -#: calendar/gui/getdate.y:413 -msgid "friday" -msgstr "" - -#: calendar/gui/getdate.y:414 -msgid "saturday" -msgstr "" - -#: calendar/gui/getdate.y:420 -#, fuzzy -msgid "year" -msgstr "úÁÇÏÌÏ×ÏË" - -#: calendar/gui/getdate.y:421 -#, fuzzy -msgid "month" -msgstr "ûÒÉÆÔÉ" - -#: calendar/gui/getdate.y:422 -msgid "fortnight" -msgstr "" - -#: calendar/gui/getdate.y:423 -msgid "week" -msgstr "" - -#: calendar/gui/getdate.y:424 -msgid "day" -msgstr "" - -#: calendar/gui/getdate.y:425 -msgid "hour" -msgstr "" - -#: calendar/gui/getdate.y:426 -msgid "minute" -msgstr "" - -#: calendar/gui/getdate.y:427 -msgid "min" -msgstr "" - -#: calendar/gui/getdate.y:428 -#, fuzzy -msgid "second" -msgstr "÷¦Ä¦ÓÌÁÔÉ" - -#: calendar/gui/getdate.y:429 -msgid "sec" -msgstr "" - -#: calendar/gui/getdate.y:435 -msgid "tomorrow" -msgstr "" - -#: calendar/gui/getdate.y:436 -msgid "yesterday" -msgstr "" - -#: calendar/gui/getdate.y:437 -#, fuzzy -msgid "today" -msgstr "ô¦ÌÏ" - -#: calendar/gui/getdate.y:438 -#, fuzzy -msgid "now" -msgstr "צËÎÏ1" - -#: calendar/gui/getdate.y:439 -#, fuzzy -msgid "last" -msgstr "÷ÓÔÁ×ÉÔÉ" - -#: calendar/gui/getdate.y:440 -msgid "this" -msgstr "" - -#: calendar/gui/getdate.y:441 -msgid "next" -msgstr "" - -#: calendar/gui/getdate.y:442 -msgid "first" -msgstr "" - -#. { N_("second"), tUNUMBER, 2 }, -#: calendar/gui/getdate.y:444 -msgid "third" -msgstr "" - -#: calendar/gui/getdate.y:445 -#, fuzzy -msgid "fourth" -msgstr "óÏÒÔÕ×ÁÔÉ" - -#: calendar/gui/getdate.y:446 -msgid "fifth" -msgstr "" - -#: calendar/gui/getdate.y:447 -msgid "sixth" -msgstr "" - -#: calendar/gui/getdate.y:448 -msgid "seventh" -msgstr "" - -#: calendar/gui/getdate.y:449 -#, fuzzy -msgid "eighth" -msgstr "÷ÉÓÏÔÁ:" - -#: calendar/gui/getdate.y:450 -#, fuzzy -msgid "ninth" -msgstr "äÒÕËÕ×ÁÔÉ" - -#: calendar/gui/getdate.y:451 -msgid "tenth" -msgstr "" - -#: calendar/gui/getdate.y:452 -msgid "eleventh" -msgstr "" - -#: calendar/gui/getdate.y:453 -msgid "twelfth" -msgstr "" - -#: calendar/gui/getdate.y:454 -msgid "ago" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Create to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:140 -msgid "Edit to-do item" -msgstr "" - -#: calendar/gui/gncal-todo.c:176 -msgid "Summary:" -msgstr "" - -#: calendar/gui/gncal-todo.c:186 -#, fuzzy -msgid "Due Date:" -msgstr "äÁÔÁ" - -#: calendar/gui/gncal-todo.c:195 -#, fuzzy -msgid "Priority:" -msgstr "ðÒÉÏÒ¦ÔÅÔ" - -#: calendar/gui/gncal-todo.c:212 -msgid "Item Comments:" -msgstr "" - -#: calendar/gui/gncal-todo.c:334 -msgid "Add to-do item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:335 -msgid "Edit this item..." -msgstr "" - -#: calendar/gui/gncal-todo.c:434 -msgid "Summary" -msgstr "" - -#: calendar/gui/gncal-todo.c:435 calendar/gui/prop.c:608 -#, fuzzy -msgid "Due Date" -msgstr "äÁÔÁ" - -#: calendar/gui/gncal-todo.c:437 -msgid "Time Left" -msgstr "" - -#. Label -#: calendar/gui/gncal-todo.c:449 -#, fuzzy -msgid "To-do list" -msgstr "¶ÎÓÔÒÕÍÅÎÔÉ" - -#. Add -#: calendar/gui/gncal-todo.c:488 -#: composer/e-msg-composer-address-dialog.glade.h:13 -msgid "Add..." -msgstr "äÏÄÁÔÉ..." - -#. Edit -#: calendar/gui/gncal-todo.c:497 -#, fuzzy -msgid "Edit..." -msgstr "äÏÄÁÔÉ..." - -#: calendar/gui/gncal-todo.c:721 -msgid "Weeks" -msgstr "" - -#: calendar/gui/gncal-todo.c:722 calendar/gui/gncal-todo.c:726 -msgid "Days" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hours" -msgstr "" - -#: calendar/gui/gncal-todo.c:727 calendar/gui/gncal-todo.c:731 -msgid "Hour" -msgstr "" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minutes" -msgstr "" - -#: calendar/gui/gncal-todo.c:732 calendar/gui/gncal-todo.c:736 -msgid "Minute" -msgstr "" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -#, fuzzy -msgid "Seconds" -msgstr "÷¦Ä¦ÓÌÁÔÉ" - -#: calendar/gui/gncal-todo.c:737 calendar/gui/gncal-todo.c:741 -#, fuzzy -msgid "Second" -msgstr "÷¦Ä¦ÓÌÁÔÉ" - -#: calendar/gui/gnome-cal.c:461 calendar/gui/gnome-cal.c:1078 -#: calendar/gui/gnome-cal.c:1134 -msgid "Reminder of your appointment at " -msgstr "" - -#. Idea: we need Snooze option :-) -#: calendar/gui/gnome-cal.c:1083 calendar/gui/gnome-cal.c:1138 -msgid "Ok" -msgstr "çÁÒÁÚÄ" - -#: calendar/gui/goto.c:82 -msgid "Year:" -msgstr "ò¦Ë:" - -#: calendar/gui/goto.c:264 -msgid "Go to date" -msgstr "" - -#. Instructions -#: calendar/gui/goto.c:275 -msgid "" -"Please select the date you want to go to.\n" -"When you click on a day, you will be taken\n" -"to that date." -msgstr "" - -#: calendar/gui/goto.c:312 -msgid "Go to today" -msgstr "" - -#: calendar/gui/print.c:265 -msgid "1st" -msgstr "1" - -#: calendar/gui/print.c:265 -msgid "2nd" -msgstr "2" - -#: calendar/gui/print.c:265 -msgid "3rd" -msgstr "3" - -#: calendar/gui/print.c:265 -msgid "4th" -msgstr "4" - -#: calendar/gui/print.c:265 -msgid "5th" -msgstr "5" - -#: calendar/gui/print.c:266 -msgid "6th" -msgstr "6" - -#: calendar/gui/print.c:266 -msgid "7th" -msgstr "7" - -#: calendar/gui/print.c:266 -msgid "8th" -msgstr "8" - -#: calendar/gui/print.c:266 -msgid "9th" -msgstr "9" - -#: calendar/gui/print.c:266 -msgid "10th" -msgstr "10" - -#: calendar/gui/print.c:267 -msgid "11th" -msgstr "11" - -#: calendar/gui/print.c:267 -msgid "12th" -msgstr "12" - -#: calendar/gui/print.c:267 -msgid "13th" -msgstr "13" - -#: calendar/gui/print.c:267 -msgid "14th" -msgstr "14" - -#: calendar/gui/print.c:267 -msgid "15th" -msgstr "15" - -#: calendar/gui/print.c:268 -msgid "16th" -msgstr "16" - -#: calendar/gui/print.c:268 -msgid "17th" -msgstr "17" - -#: calendar/gui/print.c:268 -msgid "18th" -msgstr "18" - -#: calendar/gui/print.c:268 -msgid "19th" -msgstr "19" - -#: calendar/gui/print.c:268 -msgid "20th" -msgstr "20" - -#: calendar/gui/print.c:269 -msgid "21st" -msgstr "21" - -#: calendar/gui/print.c:269 -msgid "22nd" -msgstr "22" - -#: calendar/gui/print.c:269 -msgid "23rd" -msgstr "23" - -#: calendar/gui/print.c:269 -msgid "24th" -msgstr "24" - -#: calendar/gui/print.c:269 -msgid "25th" -msgstr "25" - -#: calendar/gui/print.c:270 -msgid "26th" -msgstr "26" - -#: calendar/gui/print.c:270 -msgid "27th" -msgstr "27" - -#: calendar/gui/print.c:270 -msgid "28th" -msgstr "28" - -#: calendar/gui/print.c:270 -msgid "29th" -msgstr "29" - -#: calendar/gui/print.c:270 -msgid "30th" -msgstr "30" - -#: calendar/gui/print.c:271 -msgid "31st" -msgstr "31" - -#: calendar/gui/print.c:326 -msgid "Su" -msgstr "îÄÌ" - -#: calendar/gui/print.c:326 -msgid "Mo" -msgstr "ðÎÄ" - -#: calendar/gui/print.c:326 -msgid "Tu" -msgstr "÷ÔÒ" - -#: calendar/gui/print.c:326 -msgid "We" -msgstr "óÒÄ" - -#: calendar/gui/print.c:326 -msgid "Th" -msgstr "þÔ×" - -#: calendar/gui/print.c:326 -msgid "Fr" -msgstr "ðÔÎ" - -#: calendar/gui/print.c:326 -msgid "Sa" -msgstr "óÂÔ" - -#: calendar/gui/print.c:868 -msgid "TODO Items" -msgstr "" - -#. Day -#: calendar/gui/print.c:980 -msgid "Current day (%a %b %d %Y)" -msgstr "ðÏÔÏÞÎÉÊ ÄÅÎØ (%a %b %d %Y)" - -#: calendar/gui/print.c:1000 calendar/gui/print.c:1014 -#: calendar/gui/print.c:1015 -msgid "%a" -msgstr "%a" - -#: calendar/gui/print.c:1001 calendar/gui/print.c:1002 -#: calendar/gui/print.c:1016 calendar/gui/print.c:1017 -msgid "%b" -msgstr "%b" - -#: calendar/gui/print.c:1004 -#, c-format -msgid "Current week (%s %s %d - %s %d %d)" -msgstr "ðÏÔÏÞÎÉÊ ÔÉÖÄÅÎØ (%s %s %d - %s %d %d)" - -#: calendar/gui/print.c:1021 -#, c-format -msgid "Current week (%s %s %d - %s %s %d %d)" -msgstr "ðÏÔÏÞÎÉÊ ÔÉÖÄÅÎØ (%s %s %d - %s %s %d %d)" - -#: calendar/gui/print.c:1027 -#, c-format -msgid "Current week (%s %s %d %d - %s %s %d %d)" -msgstr "ðÏÔÏÞÎÉÊ ÔÉÖÄÅÎØ (%s %s %d %d - %s %s %d %d)" - -#. Month -#: calendar/gui/print.c:1040 -msgid "Current month (%a %Y)" -msgstr "ðÏÔÏÞÎÉÊ Í¦ÓÑÃØ (%a %Y)" - -#. Year -#: calendar/gui/print.c:1047 -msgid "Current year (%Y)" -msgstr "ðÏÔÏÞÎÉÊ Ò¦Ë (%Y)" - -#: calendar/gui/print.c:1084 -msgid "Print Calendar" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ËÁÌÅÎÄÁÒ" - -#: calendar/gui/print.c:1249 -msgid "Print Preview" -msgstr "ðÅÒÅÇÌÑÄ ÄÒÕËÕ" - -#: calendar/gui/prop.c:334 -msgid "Time display" -msgstr "" - -#. Time format -#: calendar/gui/prop.c:338 -msgid "Time format" -msgstr "" - -#: calendar/gui/prop.c:339 -msgid "12-hour (AM/PM)" -msgstr "" - -#: calendar/gui/prop.c:340 -msgid "24-hour" -msgstr "" - -#. Weeks start on -#: calendar/gui/prop.c:350 -msgid "Weeks start on" -msgstr "" - -#: calendar/gui/prop.c:351 -#, fuzzy -msgid "Sunday" -msgstr "÷¦Ä¦ÓÌÁÔÉ" - -#: calendar/gui/prop.c:352 -#, fuzzy -msgid "Monday" -msgstr "ô¦ÌÏ" - -#. Day range -#: calendar/gui/prop.c:362 -msgid "Day range" -msgstr "" - -#: calendar/gui/prop.c:373 -msgid "" -"Please select the start and end hours you want\n" -"to be displayed in the day view and week view.\n" -"Times outside this range will not be displayed\n" -"by default." -msgstr "" - -#: calendar/gui/prop.c:389 -msgid "Day start:" -msgstr "" - -#: calendar/gui/prop.c:400 -msgid "Day end:" -msgstr "" - -#: calendar/gui/prop.c:523 -msgid "Colors for display" -msgstr "" - -#: calendar/gui/prop.c:526 -msgid "Colors" -msgstr "" - -#: calendar/gui/prop.c:603 -msgid "Show on TODO List:" -msgstr "" - -#: calendar/gui/prop.c:610 -msgid "Time Until Due" -msgstr "" - -#: calendar/gui/prop.c:641 -msgid "To Do List style options:" -msgstr "" - -#: calendar/gui/prop.c:646 -msgid "Highlight overdue items" -msgstr "" - -#: calendar/gui/prop.c:649 -msgid "Highlight not yet due items" -msgstr "" - -#: calendar/gui/prop.c:652 -msgid "Highlight items due today" -msgstr "" - -#: calendar/gui/prop.c:682 -msgid "To Do List Properties" -msgstr "" - -#: calendar/gui/prop.c:685 -msgid "To Do List" -msgstr "" - -#: calendar/gui/prop.c:784 -msgid "Alarms" -msgstr "" - -#. build miscellaneous box -#: calendar/gui/prop.c:787 -#, fuzzy -msgid "Alarm Properties" -msgstr "÷ÌÁÓÔÉ×ÏÓÔ¦ ÄÏÌÕÞÅÎÎÑ" - -#: calendar/gui/prop.c:797 -msgid "Beep on display alarms" -msgstr "" - -#: calendar/gui/prop.c:807 -msgid "Audio alarms timeout after" -msgstr "" - -#: calendar/gui/prop.c:818 calendar/gui/prop.c:835 -msgid " seconds" -msgstr "" - -#: calendar/gui/prop.c:824 -msgid "Enable snoozing for " -msgstr "" - -#. populate default frame/box -#: calendar/gui/prop.c:840 -#, fuzzy -msgid "Defaults" -msgstr "ðÏÄÒÏÂÉæ" - -#: composer/e-msg-composer-address-dialog.c:182 -msgid "Cut" -msgstr "÷ÉÒ¦ÚÁÔÉ" - -#: composer/e-msg-composer-address-dialog.c:183 -msgid "Cut selected item into clipboard" -msgstr "÷ÉÒ¦ÚÁÔÉ ×ÉÂÒÁÎÉÊ ÅÌÅÍÅÎÔ × ÂÕÆÅÒ ÏÂͦÎÕ" - -#: composer/e-msg-composer-address-dialog.c:186 -msgid "Copy" -msgstr "óËÏЦÀ×ÁÔÉ" - -#: composer/e-msg-composer-address-dialog.c:187 -msgid "Copy selected item into clipboard" -msgstr "óËÏЦÀ×ÁÔÉ ×ÉÂÒÁÎÉÊ ÅÌÅÍÅÎÔ × ÂÕÆÅÒ ÏÂͦÎÕ" - -#: composer/e-msg-composer-address-dialog.c:190 -#: composer/e-msg-composer-address-dialog.c:198 -msgid "Paste" -msgstr "÷ÓÔÁ×ÉÔÉ" - -#: composer/e-msg-composer-address-dialog.c:191 -#: composer/e-msg-composer-address-dialog.c:199 -msgid "Paste item from clipboard" -msgstr "÷ÓÔÁ×ÉÔÉ ÅÌÅÍÅÎÔ Ú ÂÕÆÅÒÕ ÏÂͦÎÕ" - -#: composer/e-msg-composer-address-dialog.c:525 -msgid "Select recipients' addresses" -msgstr "÷ÉÂÒÁÔÉ ÁÄÒÅÓÉ ÁÄÒÅÓÁÔ¦×" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-address-dialog.glade.h:7 -msgid "Recipient list:" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:9 -msgid "Search..." -msgstr "ðÏÛÕË..." - -#: composer/e-msg-composer-address-dialog.glade.h:10 -msgid "Name" -msgstr "¶Í'Ñ" - -#: composer/e-msg-composer-address-dialog.glade.h:11 -#: mail/mail-config.glade.h:8 -msgid "Address" -msgstr "áÄÒÅÓÁ" - -#: composer/e-msg-composer-address-dialog.glade.h:12 -msgid "Properties..." -msgstr "÷ÌÁÓÔÉ×ÏÓÔ¦..." - -#: composer/e-msg-composer-address-dialog.glade.h:14 -msgid "To: >>" -msgstr "äÏ: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:15 -msgid "Cc: >>" -msgstr "Cc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:16 -msgid "Bcc: >>" -msgstr "Bcc: >>" - -#: composer/e-msg-composer-address-dialog.glade.h:17 -msgid "label9" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:18 -msgid "label7" -msgstr "" - -#: composer/e-msg-composer-address-dialog.glade.h:19 -msgid "label8" -msgstr "" - -#: composer/e-msg-composer-attachment-bar.c:76 -msgid "1 byte" -msgstr "1 ÂÁÊÔ" - -#: composer/e-msg-composer-attachment-bar.c:78 -#, c-format -msgid "%u bytes" -msgstr "%u ÂÁÊÔ¦×" - -#: composer/e-msg-composer-attachment-bar.c:85 -#, c-format -msgid "%.1fK" -msgstr "%.1fë" - -#: composer/e-msg-composer-attachment-bar.c:89 -#, c-format -msgid "%.1fM" -msgstr "%.1fí" - -#: composer/e-msg-composer-attachment-bar.c:93 -#, c-format -msgid "%.1fG" -msgstr "%.1fç" - -#: composer/e-msg-composer-attachment-bar.c:299 -msgid "Add attachment" -msgstr "äÏÌÕÞÉÔÉ" - -#: composer/e-msg-composer-attachment-bar.c:362 shell/e-shortcuts-view.c:333 -msgid "Remove" -msgstr "÷ÉÄÁÌÉÔÉ" - -#: composer/e-msg-composer-attachment-bar.c:363 -msgid "Remove selected items from the attachment list" -msgstr "÷ÉÄÁÌÉÔÉ ×ÉÂÒÁΦ ÅÌÅÍÅÎÔÉ Ú ÓÐÉÓËÕ ÄÏÌÕÞÅÎÎÑ" - -#: composer/e-msg-composer-attachment-bar.c:394 -msgid "Add attachment..." -msgstr "äÏÌÕÞÉÔÉ..." - -#: composer/e-msg-composer-attachment-bar.c:395 -msgid "Attach a file to the message" -msgstr "äÏÌÕÞÉÔÉ ÆÁÊÌ ÄÏ ÐÏצÄÏÍÌÅÎÎÑ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: composer/e-msg-composer-attachment.glade.h:7 -msgid "Attachment properties" -msgstr "÷ÌÁÓÔÉ×ÏÓÔ¦ ÄÏÌÕÞÅÎÎÑ" - -#: composer/e-msg-composer-attachment.glade.h:8 -msgid "MIME type:" -msgstr "ôÉÐ MIME:" - -#: composer/e-msg-composer-attachment.glade.h:10 -msgid "File name:" -msgstr "îÁÚ×Á ÆÁÊÌÕ:" - -#: composer/e-msg-composer-hdrs.c:137 composer/e-msg-composer-hdrs.c:295 -#, fuzzy -msgid "From:" -msgstr "÷¦Ä" - -#: composer/e-msg-composer-hdrs.c:243 -msgid "Click here for the address book" -msgstr "ëÌÁÃΦÔØ ÔÕÔ ÝÏ ×ÉËÌÉËÁÔÉ ÁÄÒÅÓÎÕ ËÎÉÇÕ" - -#: composer/e-msg-composer-hdrs.c:296 -#, fuzzy -msgid "Enter the identitiy you wish to send this message from" -msgstr "÷×ÅĦÔØ ÁÄÒÅÓÁÔ¦× ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer-hdrs.c:300 -msgid "To:" -msgstr "äÏ:" - -#: composer/e-msg-composer-hdrs.c:301 -msgid "Enter the recipients of the message" -msgstr "÷×ÅĦÔØ ÁÄÒÅÓÁÔ¦× ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer-hdrs.c:305 -msgid "Cc:" -msgstr "Cc:" - -#: composer/e-msg-composer-hdrs.c:306 -msgid "Enter the addresses that will receive a carbon copy of the message" -msgstr "÷×ÅĦÔØ ÁÄÒÅÓÁÔ¦×, ÝÏ ÏÔÒÉÍÁÀÔØ ËÏЦÀ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer-hdrs.c:311 -msgid "Bcc:" -msgstr "Bcc:" - -#: composer/e-msg-composer-hdrs.c:312 -msgid "" -"Enter the addresses that will receive a carbon copy of the message without " -"appearing in the recipient list of the message." -msgstr "" -"÷×ÅĦÔØ ÁÄÒÅÓÁÔ¦×, ÝÏ ÏÔÒÉÍÁÀÔØ ËÏЦÀ ÐÏצÄÏÍÌÅÎÎÑ ÎÅ ÐÏÐÁ×ÛÉ × ÓÐÉÓÏË " -"ÏÔÒÉÍÕ×ÁÞ¦×." - -#: composer/e-msg-composer-hdrs.c:318 -msgid "Subject:" -msgstr "ôÅÍÁ:" - -#: composer/e-msg-composer-hdrs.c:319 -msgid "Enter the subject of the mail" -msgstr "÷×ÅĦÔØ ÔÅÍÕ ÐÏÓÌÁÎÎÑ" - -#: composer/e-msg-composer.c:451 -msgid "Save as..." -msgstr "úÂÅÒÅÇÔÉ ÑË..." - -#: composer/e-msg-composer.c:462 -#, c-format -msgid "Error saving file: %s" -msgstr "ðÏÍÉÌËÁ ÚÂÅÒÅÖÅÎÎÑ ÆÁÊÌÕ: %s" - -#: composer/e-msg-composer.c:482 -#, c-format -msgid "Error loading file: %s" -msgstr "ðÏÍÉÌËÁ ÚÁ×ÁÎÔÁÖÅÎÎÑ ÆÁÊÌÕ: %s" - -#: composer/e-msg-composer.c:504 -#, fuzzy -msgid "Saving changes to message..." -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer.c:506 -#, fuzzy -msgid "About to save changes to message..." -msgstr "äÏÌÕÞÉÔÉ ÆÁÊÌ ÄÏ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer.c:590 shell/e-shell-view-menu.c:165 -msgid "Evolution" -msgstr "Evolution" - -#: composer/e-msg-composer.c:596 -msgid "" -"This message has not been sent.\n" -"\n" -"Do you wish to save your changes?" -msgstr "" - -#: composer/e-msg-composer.c:618 -msgid "Open file" -msgstr "÷¦ÄËÒÉÔÉ ÆÁÊÌ" - -#: composer/e-msg-composer.c:730 -msgid "That file does not exist." -msgstr "" - -#: composer/e-msg-composer.c:740 -msgid "That is not a regular file." -msgstr "" - -#: composer/e-msg-composer.c:750 -msgid "That file exists but is not readable." -msgstr "" - -#: composer/e-msg-composer.c:760 -msgid "That file appeared accesible but open(2) failed." -msgstr "" - -#: composer/e-msg-composer.c:782 -msgid "" -"The file is very large (more than 100K).\n" -"Are you sure you wish to insert it?" -msgstr "" - -#: composer/e-msg-composer.c:803 -msgid "An error occurred while reading the file." -msgstr "" - -#: composer/e-msg-composer.c:899 shell/e-shell-view-menu.c:434 -msgid "_File" -msgstr "æÁÊÌ" - -#: composer/e-msg-composer.c:905 -msgid "_Open..." -msgstr "÷¦ÄËÒÉÔÉ..." - -#: composer/e-msg-composer.c:906 -msgid "Load a previously saved message" -msgstr "" - -#: composer/e-msg-composer.c:914 -msgid "_Save..." -msgstr "úÂÅÒÅÇÔÉ..." - -#: composer/e-msg-composer.c:915 -#, fuzzy -msgid "Save message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer.c:923 -#, fuzzy -msgid "_Save as..." -msgstr "úÂÅÒÅÇÔÉ ÑË..." - -#: composer/e-msg-composer.c:924 -#, fuzzy -msgid "Save message with a different name" -msgstr "úÂÅÒÅÇÔÉ ÐÏצÄÏÍÌÅÎÎÑ Õ ×ËÁÚÁÎ¦Ê ÔÅæ" - -#: composer/e-msg-composer.c:932 -msgid "Save in _folder..." -msgstr "úÂÅÒÅÇÔÉ Õ ÔÅæ..." - -#: composer/e-msg-composer.c:933 -msgid "Save the message in a specified folder" -msgstr "úÂÅÒÅÇÔÉ ÐÏצÄÏÍÌÅÎÎÑ Õ ×ËÁÚÁÎ¦Ê ÔÅæ" - -#: composer/e-msg-composer.c:942 -msgid "_Insert text file... (FIXME)" -msgstr "" - -#: composer/e-msg-composer.c:943 -#, fuzzy -msgid "Insert a file as text into the message" -msgstr "äÏÌÕÞÉÔÉ ÆÁÊÌ ÄÏ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer.c:952 -#, fuzzy -msgid "_Send" -msgstr "÷¦Ä¦ÓÌÁÔÉ" - -#: composer/e-msg-composer.c:953 -msgid "Send the message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer.c:963 -msgid "_Close..." -msgstr "úÁËÒÉÔÉ..." - -#: composer/e-msg-composer.c:964 -msgid "Quit the message composer" -msgstr "" - -#: composer/e-msg-composer.c:977 shell/e-shell-view-menu.c:478 -#, fuzzy -msgid "_Edit" -msgstr "äÏÄÁÔÉ..." - -#: composer/e-msg-composer.c:988 -msgid "_Format" -msgstr "æÏÒÍÁÔ" - -#: composer/e-msg-composer.c:994 -msgid "HTML" -msgstr "HTML" - -#: composer/e-msg-composer.c:995 -msgid "Send the mail in HTML format" -msgstr "÷¦Ä¦ÓÌÁÔÉ ËÏÒÅÓÐÏÎÄÅÎæÀ × ÆÏÒÍÁÔ¦ HTML" - -#: composer/e-msg-composer.c:1008 shell/e-shell-view-menu.c:383 -#: shell/e-shell-view-menu.c:489 shell/e-storage-set-view.c:242 -#, fuzzy -msgid "_View" -msgstr "îÏ×ÉÊ" - -#: composer/e-msg-composer.c:1014 -#, fuzzy -msgid "Show _attachments" -msgstr "ðÏËÁÚÁÔÉ ÄÏÌÕÞÅÎÎÑ" - -#: composer/e-msg-composer.c:1015 -#, fuzzy -msgid "Show/hide attachments" -msgstr "ðÏËÁÚÁÔÉ/ÐÒÉÂÒÁÔÉ ÄÏÌÕÞÅÎÎÑ" - -#: composer/e-msg-composer.c:1048 -msgid "Send" -msgstr "÷¦Ä¦ÓÌÁÔÉ" - -#: composer/e-msg-composer.c:1049 -msgid "Send this message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: composer/e-msg-composer.c:1058 -msgid "Attach" -msgstr "äÏÌÕÞÉÔÉ" - -#: composer/e-msg-composer.c:1059 -msgid "Attach a file" -msgstr "äÏÌÕÞÉÔÉ ÆÁÊÌ" - -#: composer/e-msg-composer.c:1246 -#, fuzzy -msgid "Compose a message" -msgstr "ð¦ÄÇÏÔÕ×ÁÔÉ ÎÏ×Å ÐÏÛÔÏ×Å ÐÏצÄÏÍÌÅÎÎÑ" - -#: filter/filter-folder.c:183 filter/vfolder-rule.c:269 -#, fuzzy -msgid "Select Folder" -msgstr "÷ÉÂÒÁÔÉ ÎÁÚ×É" - -#: filter/filter-folder.c:245 -msgid "" -msgstr "" - -#: mail/component-factory.c:187 -#, fuzzy -msgid "Cannot initialize Evolution's mail component." -msgstr "îÅ ×ÄÁÌÏÓÑ ¦Î¦Ã¦Á̦ÚÕ×ÁÔÉ ÏÂÏÌÏÎËÕ Evolutuion." - -#: mail/folder-browser-factory.c:33 -msgid "Get mail" -msgstr "" - -#: mail/folder-browser-factory.c:33 -msgid "Check for new mail" -msgstr "" - -#: mail/folder-browser-factory.c:34 -msgid "Compose" -msgstr "" - -#: mail/folder-browser-factory.c:34 -#, fuzzy -msgid "Compose a new message" -msgstr "ð¦ÄÇÏÔÕ×ÁÔÉ ÎÏ×Å ÐÏÛÔÏ×Å ÐÏצÄÏÍÌÅÎÎÑ" - -#. GNOMEUIINFO_ITEM_STOCK (N_("Save"), N_("Save this message"), -#. save_msg, GNOME_STOCK_PIXMAP_SAVE), -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply" -msgstr "÷¦ÄÐÏצÓÔÉ" - -#: mail/folder-browser-factory.c:38 mail/mail-view.c:135 -msgid "Reply to the sender of this message" -msgstr "" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to All" -msgstr "÷¦ÄÐÏצÓÔÉ ×Ó¦Í" - -#: mail/folder-browser-factory.c:39 mail/mail-view.c:138 -msgid "Reply to all recipients of this message" -msgstr "" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward" -msgstr "ðÅÒÅÓÌÁÔÉ" - -#: mail/folder-browser-factory.c:41 mail/mail-view.c:141 -msgid "Forward this message" -msgstr "ðÅÒÅÓÌÁÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/folder-browser-factory.c:45 -#, fuzzy -msgid "Move" -msgstr "íϦÌØÎÉÊ" - -#: mail/folder-browser-factory.c:45 -#, fuzzy -msgid "Move message to a new folder" -msgstr "úÂÅÒÅÇÔÉ ÐÏצÄÏÍÌÅÎÎÑ Õ ×ËÁÚÁÎ¦Ê ÔÅæ" - -#: mail/folder-browser-factory.c:47 mail/mail-view.c:145 -msgid "Print the selected message" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ×ÉÂÒÁÎÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/folder-browser-factory.c:49 mail/mail-view.c:147 -msgid "Delete this message" -msgstr "óÔÅÒÔÉ ÃÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/folder-browser-factory.c:73 -msgid "_Threaded Message List" -msgstr "" - -#: mail/folder-browser-factory.c:83 -#, fuzzy -msgid "_Print message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/folder-browser-factory.c:91 -#, fuzzy -msgid "E_dit Message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/folder-browser-factory.c:98 -#, fuzzy -msgid "_View Message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/folder-browser-factory.c:107 -msgid "_Mark all messages seen" -msgstr "" - -#: mail/folder-browser-factory.c:111 -msgid "_Expunge" -msgstr "" - -#: mail/folder-browser-factory.c:117 -#, fuzzy -msgid "Mail _Filters ..." -msgstr "æÁÊÌ..." - -#: mail/folder-browser-factory.c:123 -msgid "_vFolder Editor ..." -msgstr "" - -#: mail/folder-browser-factory.c:129 -msgid "_Mail Configuration ..." -msgstr "" - -#: mail/folder-browser-factory.c:135 -msgid "Forget _Passwords" -msgstr "" - -#: mail/folder-browser-factory.c:142 -msgid "_Configure Folder" -msgstr "" - -#. gtk_signal_connect(fb->search_entry, "changed", search_activate, fb); -#: mail/folder-browser.c:349 -msgid "Search" -msgstr "ðÏÛÕË" - -#: mail/folder-browser.c:352 -msgid "Save" -msgstr "úÂÅÒÅÇÔÉ" - -#: mail/mail-callbacks.c:134 -msgid "" -"This message has no subject.\n" -"Really send?" -msgstr "" - -#: mail/mail-callbacks.c:166 -msgid "" -"You need to configure an identity\n" -"before you can send mail." -msgstr "" - -#: mail/mail-callbacks.c:182 -msgid "" -"You need to configure a mail transport\n" -"before you can send mail." -msgstr "" - -#: mail/mail-callbacks.c:388 -#, fuzzy -msgid "Move message(s) to" -msgstr "÷¦Ä¦ÓÌÁΦ ÐÏצÄÏÍÌÅÎÎÑ" - -#: mail/mail-callbacks.c:430 -msgid "" -"You may only edit messages saved\n" -"in the Drafts folder." -msgstr "" - -#: mail/mail-callbacks.c:518 -#, fuzzy, c-format -msgid "" -"Error loading filter information:\n" -"%s" -msgstr "ðÏÍÉÌËÁ ÚÁ×ÁÎÔÁÖÅÎÎÑ ÆÁÊÌÕ: %s" - -#: mail/mail-config-gui.c:430 -msgid "" -"Enter your name and email address to be used in outgoing mail. You may also, " -"optionally, enter the name of your organization, and the name of a file to " -"read your signature from." -msgstr "" - -#: mail/mail-config-gui.c:443 -msgid "Full name:" -msgstr "ðÏ×ÎÁ ÎÁÚ×Á:" - -#: mail/mail-config-gui.c:467 -msgid "Email address:" -msgstr "åÌÅËÔÒÏÎÎÁ ÁÄÒÅÓÁ:" - -#: mail/mail-config-gui.c:482 -msgid "Organization:" -msgstr "ïÒ¦¤ÎÔÁæÑ:" - -#: mail/mail-config-gui.c:493 -msgid "Signature file:" -msgstr "æÁÊÌ Ð¦ÄÐÉÓÕ:" - -#: mail/mail-config-gui.c:498 mail/mail-config.glade.h:10 -msgid "Signature File" -msgstr "æÁÊÌ Ð¦ÄÐÉÓÕ" - -#: mail/mail-config-gui.c:897 -msgid "Server:" -msgstr "óÅÒ×ÅÒ:" - -#: mail/mail-config-gui.c:903 -msgid "Username:" -msgstr "îÁÚ×Á ËÏÒÉÓÔÕ×ÁÞÁ:" - -#: mail/mail-config-gui.c:909 -msgid "Path:" -msgstr "ûÌÑÈ:" - -#: mail/mail-config-gui.c:917 -msgid "Authentication:" -msgstr "áÕÔÅÎƦËÁæÑ:" - -#: mail/mail-config-gui.c:929 -msgid "Detect supported types..." -msgstr "" - -#: mail/mail-config-gui.c:952 -msgid "Don't delete messages from server" -msgstr "" - -#: mail/mail-config-gui.c:964 -msgid "Test Settings" -msgstr "" - -#: mail/mail-config-gui.c:1094 mail/mail-config-gui.c:1142 -msgid "" -"Select the kind of mail server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config-gui.c:1118 -msgid "" -"Select the kind of news server you have, and enter the relevant information " -"about it.\n" -"\n" -"If the server requires authentication, you can click the \"Detect supported " -"types...\" button after entering the other information." -msgstr "" - -#: mail/mail-config-gui.c:1192 -msgid "Edit Identity" -msgstr "" - -#: mail/mail-config-gui.c:1194 -msgid "Add Identity" -msgstr "" - -#: mail/mail-config-gui.c:1288 -msgid "Edit Source" -msgstr "" - -#: mail/mail-config-gui.c:1290 -msgid "Add Source" -msgstr "" - -#: mail/mail-config-gui.c:1387 -msgid "Edit News Server" -msgstr "" - -#: mail/mail-config-gui.c:1389 -msgid "Add News Server" -msgstr "" - -#: mail/mail-config-gui.c:2217 -msgid "The connection was successful!" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config.glade.h:7 mail/mail-config.glade.h:14 -msgid "Identities" -msgstr "" - -#: mail/mail-config.glade.h:9 -msgid "Organization" -msgstr "ïÒ¦¤ÎÔÁæÑ" - -#: mail/mail-config.glade.h:12 mail/mail-config.glade.h:17 -#: mail/mail-config.glade.h:23 -msgid "Edit" -msgstr "òÅÄÁÇÕ×ÁÎÎÑ" - -#: mail/mail-config.glade.h:15 -msgid "Sources" -msgstr "" - -#: mail/mail-config.glade.h:19 -msgid "Mail Sources" -msgstr "" - -#: mail/mail-config-druid.glade.h:15 mail/mail-config.glade.h:20 -msgid "Mail Transport" -msgstr "" - -#: mail/mail-config.glade.h:21 -#, fuzzy -msgid "News Servers" -msgstr "óÅÒ×ÅÒ LDAP:" - -#: mail/mail-config.glade.h:25 -msgid "News Sources" -msgstr "" - -#: mail/mail-config.glade.h:26 -msgid "Send messages in HTML format" -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: mail/mail-config-druid.glade.h:7 mail/mail-config-druid.glade.h:8 -#: mail/mail-config-druid.glade.h:16 -msgid "Mail Configuration" -msgstr "" - -#: mail/mail-config-druid.glade.h:9 -msgid "" -"Welcome to the Evolution Mail configuration wizard!\n" -"By filling in some information about your email\n" -"settings, you can start sending and receiving email\n" -"right away. Click Next to continue." -msgstr "" - -#: mail/mail-config-druid.glade.h:13 -msgid "Identity" -msgstr "" - -#: mail/mail-config-druid.glade.h:14 -msgid "Mail Source" -msgstr "" - -#: mail/mail-config-druid.glade.h:17 -msgid "" -"Your email configuration is now complete.\n" -"Click \"Finish\" to save your new settings" -msgstr "" - -#: mail/mail-crypto.c:338 mail/mail-crypto.c:418 -msgid "Please enter your PGP/GPG passphrase." -msgstr "" - -#: mail/mail-crypto.c:342 mail/mail-crypto.c:422 -msgid "No password provided." -msgstr "" - -#: mail/mail-crypto.c:348 mail/mail-crypto.c:428 -#, c-format -msgid "Couldn't create pipe to GPG/PGP: %s" -msgstr "" - -#: mail/mail-local.c:256 -#, c-format -msgid "Changing folder \"%s\" to \"%s\" format" -msgstr "" - -#: mail/mail-local.c:260 -#, c-format -msgid "Change folder \"%s\" to \"%s\" format" -msgstr "" - -#: mail/mail-threads.c:669 -msgid "Incomplete message written on pipe!" -msgstr "" - -#: mail/mail-threads.c:673 -msgid "Error reading commands from dispatching thread." -msgstr "" - -#: mail/mail-threads.c:738 -msgid "Corrupted message from dispatching thread?" -msgstr "" - -#: mail/mail-threads.c:846 -msgid "Could not create dialog box." -msgstr "" - -#: mail/mail-threads.c:857 -msgid "User cancelled query." -msgstr "" - -#: mail/message-list.c:489 -msgid "Online Status" -msgstr "óÔÁÎ ÎÁ ̦Φ§" - -#: mail/message-list.c:525 -msgid "From" -msgstr "÷¦Ä" - -#: mail/message-list.c:532 -msgid "Subject" -msgstr "ôÅÍÁ" - -#: mail/message-list.c:539 -msgid "Date" -msgstr "äÁÔÁ" - -#: mail/message-list.c:546 -msgid "Received" -msgstr "ïÔÒÉÍÁÎÏ" - -#: mail/message-list.c:553 -msgid "To" -msgstr "äÏ" - -#: mail/message-list.c:560 -msgid "Size" -msgstr "òÏÚͦÒ" - -#: notes/component-factory.c:27 -#, fuzzy -msgid "Create a new note" -msgstr "óÔ×ÏÒÉÔÉ ÎÏ×ÉÊ ËÁÌÅÎÄÁÒ" - -#: notes/component-factory.c:148 -#, fuzzy -msgid "Cannot initialize Evolution's notes component." -msgstr "îÅ ×ÄÁÌÏÓÑ ¦Î¦Ã¦Á̦ÚÕ×ÁÔÉ ÏÂÏÌÏÎËÕ Evolutuion." - -#: notes/main.c:30 -#, fuzzy -msgid "Notes Component: Could not initialize bonobo" -msgstr "ðÏÛÔÏ×ÉÊ ËÏÍÐÏÎÅÎÔ: ÎÅ ×ÄÁÌÏÓØ ¦Î¦Ã¦Á̦ÚÕ×ÁÔÉ Bonobo" - -#: shell/e-setup.c:47 -msgid "Evolution installation" -msgstr "" - -#: shell/e-setup.c:51 -msgid "This seems to be the first time you run Evolution." -msgstr "" - -#: shell/e-setup.c:52 -msgid "Please click \"OK\" to install the Evolution user files under" -msgstr "" - -#: shell/e-setup.c:69 -#, c-format -msgid "" -"Cannot create the directory\n" -"%s\n" -"Error: %s" -msgstr "" - -#: shell/e-setup.c:84 -#, c-format -msgid "" -"Cannot copy files into\n" -"`%s'." -msgstr "" - -#: shell/e-setup.c:88 -msgid "Evolution files successfully installed." -msgstr "æÁÊÌÉ Evolution ÕÓЦÛÎÏ ×ÓÔÁÎÏ×ÌÅÎÏ." - -#: shell/e-setup.c:109 -#, c-format -msgid "" -"The file `%s' is not a directory.\n" -"Please move it in order to allow installation\n" -"of the Evolution user files." -msgstr "" - -#: shell/e-setup.c:121 -#, c-format -msgid "" -"The directory `%s' exists but is not the\n" -"Evolution directory. Please move it in order\n" -"to allow installation of the Evolution user files." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:81 -#, c-format -msgid "" -"Cannot create the specified folder:\n" -"%s" -msgstr "" -"îÅÍÏÖÌÉ×Ï ÓÔ×ÏÒÉÔÉ ×ËÁÚÁÎÕ ÔÅËÕ:\n" -"%s" - -#: shell/e-shell-folder-creation-dialog.c:133 -msgid "The specified folder name is not valid." -msgstr "" - -#: shell/e-shell-folder-creation-dialog.c:223 -msgid "Evolution - Create new folder" -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:96 -msgid "" -"The type of the selected folder is not valid for\n" -"the requested operation." -msgstr "" - -#: shell/e-shell-folder-selection-dialog.c:272 -#, fuzzy -msgid "New..." -msgstr "îÏ×ÉÊ" - -#: shell/e-shell-folder-title-bar.c:459 shell/e-shell-folder-title-bar.c:460 -msgid "(Untitled)" -msgstr "" - -#. you might have to call gnome_dialog_run() on the -#. * dialog returned here, I don't remember... -#. -#: shell/e-shell-view-menu.c:113 -msgid "Bug buddy was not found in your $PATH." -msgstr "" - -#. same as above -#: shell/e-shell-view-menu.c:119 -msgid "Bug buddy could not be run." -msgstr "îÅ ×ÄÁÌÏÓÑ ÚÁÐÕÓÔÉÔÉ Bug buddy" - -#: shell/e-shell-view-menu.c:167 -msgid "Copyright 1999, 2000 Helix Code, Inc." -msgstr "Copyright 1999, 2000 Helix Code, Inc." - -#: shell/e-shell-view-menu.c:169 -msgid "" -"Evolution is a suite of groupware applications\n" -"for mail, calendaring, and contact management\n" -"within the GNOME desktop environment." -msgstr "" - -#: shell/e-shell-view-menu.c:319 -msgid "Go to folder..." -msgstr "ðÅÒÅÊÔÉ ÎÁ ÔÅËÕ..." - -#: shell/e-shell-view-menu.c:377 -msgid "_New" -msgstr "îÏ×ÉÊ" - -#: shell/e-shell-view-menu.c:389 -msgid "_Folder" -msgstr "æÏÌÄÅÒ" - -#: shell/e-shell-view-menu.c:395 -#, fuzzy -msgid "Evolution bar _shortcut" -msgstr "ì¦Î¦ÊËÁ ÑÒÌÉË¦× Evolution" - -#: shell/e-shell-view-menu.c:404 -#, fuzzy -msgid "_Mail message (FIXME)" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#: shell/e-shell-view-menu.c:410 -#, fuzzy -msgid "_Appointment (FIXME)" -msgstr "úÕÓÔÒ¦Þ" - -#: shell/e-shell-view-menu.c:416 -#, fuzzy -msgid "_Contact (FIXME)" -msgstr "ëÏÎÔÁËÔ" - -#: shell/e-shell-view-menu.c:422 -msgid "_Task (FIXME)" -msgstr "" - -#: shell/e-shell-view-menu.c:444 -#, fuzzy -msgid "_Go to folder..." -msgstr "ðÅÒÅÊÔÉ ÎÁ ÔÅËÕ..." - -#: shell/e-shell-view-menu.c:445 -msgid "Display a different folder" -msgstr "" - -#: shell/e-shell-view-menu.c:452 -#, fuzzy -msgid "_Create new folder..." -msgstr "úÂÅÒÅÇÔÉ Õ ÔÅæ..." - -#: shell/e-shell-view-menu.c:453 shell/e-shell-view-menu.c:465 -#, fuzzy -msgid "Create a new folder" -msgstr "óÔ×ÏÒÉÔÉ ÎÏ×ÉÊ ËÁÌÅÎÄÁÒ" - -#: shell/e-shell-view-menu.c:464 -msgid "E_xit..." -msgstr "÷ÉÊÔÉ..." - -#: shell/e-shell-view-menu.c:495 -msgid "Show _shortcut bar" -msgstr "" - -#: shell/e-shell-view-menu.c:496 -msgid "Show the shortcut bar" -msgstr "" - -#: shell/e-shell-view-menu.c:501 -msgid "Show _folder bar" -msgstr "ðÏËÁÚÕ×ÁÔÉ ÐÁÎÅÌØ ÔÅË" - -#: shell/e-shell-view-menu.c:502 -msgid "Show the folder bar" -msgstr "ðÏËÁÚÕ×ÁÔÉ ÐÁÎÅÌØ ÔÅË" - -#: shell/e-shell-view-menu.c:524 -msgid "_Actions" -msgstr "䦧" - -#: shell/e-shell-view-menu.c:535 -msgid "_Help" -msgstr "äÏצÄËÁ" - -#: shell/e-shell-view-menu.c:541 -msgid "Help _index" -msgstr "ðÏËÁÖÞÉË ÄÏצÄËÉ" - -#: shell/e-shell-view-menu.c:548 -#, fuzzy -msgid "Getting _started" -msgstr "þÁÓ ÐÏÞÁÔËÕ ÚÕÓÔÒ¦Þ¦:" - -#: shell/e-shell-view-menu.c:555 -msgid "Using the _mailer" -msgstr "" - -#: shell/e-shell-view-menu.c:562 -#, fuzzy -msgid "Using the _calendar" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ÃÅÊ ËÁÌÅÎÄÁÒ" - -#: shell/e-shell-view-menu.c:569 -msgid "Using the c_ontact manager" -msgstr "" - -#: shell/e-shell-view-menu.c:579 -msgid "_Submit bug report" -msgstr "ð¦ÄÇÏÔÕ×ÁÔÉ Ú×¦Ô ÐÒÏ ÐÏÍÉÌËÕ" - -#: shell/e-shell-view-menu.c:580 -#, fuzzy -msgid "Submit bug report using Bug Buddy" -msgstr "ð¦ÄÇÏÔÕ×ÁÔÉ Ú×¦Ô ÐÒÏ ÐÏÍÉÌËÕ × bug-buddy" - -#: shell/e-shell-view-menu.c:589 -msgid "_About Evolution..." -msgstr "ðÒÏ Evolution..." - -#: shell/e-shell-view-menu.c:590 -msgid "Show information about Evolution" -msgstr "ðÏËÁÚÁÔÉ ¦ÎÆÏÒÍÁæÀ ÐÒÏ Evolution" - -#: shell/e-shell-view.c:122 -msgid "(No folder displayed)" -msgstr "" - -#: shell/e-shell-view.c:350 -msgid "Folders" -msgstr "ôÅËÉ" - -#: shell/e-shell-view.c:869 -#, c-format -msgid "Evolution - %s" -msgstr "Evolution - %s" - -#: shell/e-shell.c:293 -#, c-format -msgid "Cannot set up local storage -- %s" -msgstr "" - -#: shell/e-shortcuts-view.c:235 -msgid "_Small icons" -msgstr "íÉ̦ ЦËÔÏÇÒÁÍÉ" - -#: shell/e-shortcuts-view.c:236 -msgid "Show the shortcuts as small icons" -msgstr "" - -#: shell/e-shortcuts-view.c:238 -msgid "_Large icons" -msgstr "÷ÅÌÉ˦ ЦËÔÏÇÒÁÍÉ" - -#: shell/e-shortcuts-view.c:239 -msgid "Show the shortcuts as large icons" -msgstr "" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate" -msgstr "" - -#: shell/e-shortcuts-view.c:330 -msgid "Activate this shortcut" -msgstr "" - -#: shell/e-shortcuts-view.c:333 -msgid "Remove this shortcut from the shortcut bar" -msgstr "" - -#: shell/e-shortcuts.c:358 -msgid "Error saving shortcuts." -msgstr "" - -#: shell/e-storage.c:217 -msgid "(No name)" -msgstr "" - -#: shell/e-storage.c:412 -msgid "No error" -msgstr "" - -#: shell/e-storage.c:414 -msgid "Generic error" -msgstr "" - -#: shell/e-storage.c:416 -msgid "A folder with the same name already exists" -msgstr "" - -#: shell/e-storage.c:418 -msgid "The specified folder type is not valid" -msgstr "" - -#: shell/e-storage.c:420 -msgid "I/O error" -msgstr "ðÏÍÉÌËÁ ××ÏÄÕ/×É×ÏÄÕ" - -#: shell/e-storage.c:422 -msgid "Not enough space to create the folder" -msgstr "" - -#: shell/e-storage.c:424 -msgid "The specified folder was not found" -msgstr "" - -#: shell/e-storage.c:426 -msgid "Function not implemented in this storage" -msgstr "" - -#: shell/e-storage.c:428 -msgid "Permission denied" -msgstr "" - -#: shell/e-storage.c:430 -msgid "Operation not supported" -msgstr "" - -#: shell/e-storage.c:432 -msgid "The specified type is not supported in this storage" -msgstr "" - -#: shell/e-storage.c:434 -msgid "Unknown error" -msgstr "îÅצÄÏÍÁ ÐÏÍÉÌËÁ" - -#: shell/e-storage-set-view.c:242 -#, fuzzy -msgid "View the selected folder" -msgstr "îÁÄÒÕËÕ×ÁÔÉ ×ÉÂÒÁÎÅ ÐÏצÄÏÍÌÅÎÎÑ" - -#: shell/main.c:66 -msgid "" -"Hi. Thanks for taking the time to download this preview release\n" -"of the Evolution groupware suite.\n" -"\n" -"Over the last month and a half, our focus has been on making\n" -"Evolution usable. Many of the Evolution developers are now using\n" -"Evolution to read their mail full time. You could too. (Just\n" -"be sure to keep a backup.)\n" -"\n" -"But while we have fixed many bugs affecting its stability and\n" -"security, you still get the disclaimer: Evolution will: crash,\n" -"lose your mail when you don't want it to, refuse to delete your\n" -"mail when you do want it to, leave stray processes running,\n" -"consume 100% CPU, race, lock, send HTML mail to random mailing\n" -"lists, and embarass you in front of your friends and co-workers.\n" -"Use only as directed.\n" -"\n" -"We hope that you enjoy the results of our hard work, and we eagerly\n" -"await your contributions!\n" -msgstr "" - -#: shell/main.c:93 -msgid "" -"Thanks\n" -"The Evolution Team\n" -msgstr "" - -#: shell/main.c:121 -msgid "Cannot initialize the Evolution shell." -msgstr "îÅ ×ÄÁÌÏÓÑ ¦Î¦Ã¦Á̦ÚÕ×ÁÔÉ ÏÂÏÌÏÎËÕ Evolutuion." - -#: shell/main.c:156 -msgid "Cannot initialize the Bonobo component system." -msgstr "îÅ ×ÄÁÌÏÓÑ ¦Î¦Ã¦Á̦ÚÕ×ÁÔÉ ËÏÍÐÏÎÅÎÔÎÕ ÓÉÓÔÅÍÕ Bonobo." - -#: tests/ui-tests/message-browser.c:360 -msgid "The component now claims that it doesn't support PersistStream!" -msgstr "" - -#: tests/ui-tests/message-browser.c:378 -msgid "" -"An exception occured while trying to load data into the component with " -"PersistStream" -msgstr "" - -#: tests/ui-tests/message-browser.c:471 -#, c-format -msgid "The %s component doesn't support PersistStream!\n" -msgstr "" - -#: tests/ui-tests/message-browser.c:710 -#, fuzzy -msgid "Open Mime Message" -msgstr "÷¦Ä¦ÓÌÁÔÉ ÐÏצÄÏÍÌÅÎÎÑ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-config.glade.h:7 -msgid "Fields" -msgstr "ðÏÌÑ" - -#: widgets/e-table/e-table-config.glade.h:8 -msgid "Grouping" -msgstr "çÒÕÐÕ×ÁÎÎÑ" - -#: widgets/e-table/e-table-config.glade.h:9 -msgid "Sort" -msgstr "óÏÒÔÕ×ÁÔÉ" - -#: widgets/e-table/e-table-config.glade.h:10 -msgid "Filter" -msgstr "æ¦ÌØÔÒ" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-field-chooser.glade.h:7 -#: widgets/e-table/e-table-header-item.c:1164 -msgid "Field Chooser" -msgstr "" - -#: widgets/e-table/e-table-field-chooser.glade.h:8 -msgid "" -"To add a column to your table, drag it into\n" -"the location in which you want it to appear." -msgstr "" - -#. -#. * Translatable strings file generated by Glade. -#. * Add this file to your project's POTFILES.in. -#. * DO NOT compile it as part of your application. -#. -#: widgets/e-table/e-table-group.glade.h:7 -msgid "window1" -msgstr "צËÎÏ1" - -#: widgets/e-table/e-table-group.glade.h:8 -msgid "Available fields" -msgstr "äÏÓÔÕÐΦ ÐÏÌÑ" - -#: widgets/e-table/e-table-group.glade.h:9 -msgid "label1" -msgstr "ÐÏÚÎÁÞËÁ1" - -#: widgets/e-table/e-table-group.glade.h:10 -msgid "Show in this order" -msgstr "ðÏËÁÚÕ×ÁÔÉ × ÃØÏÍÕ ÐÏÒÑÄËÕ" - -#: widgets/e-table/e-table-group.glade.h:11 -msgid "label2" -msgstr "ÐÏÚÎÁÞËÁ2" - -#: widgets/e-table/e-table-group.glade.h:12 -msgid "Add >>" -msgstr "äÏÄÁÔÉ >>" - -#: widgets/e-table/e-table-group.glade.h:13 -msgid "<< Remove" -msgstr "<< ÷ÉÄÁÌÉÔÉ" - -#: widgets/e-table/e-table-header-item.c:1156 -msgid "Sort Ascending" -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1157 -msgid "Sort Descending" -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1158 -#, fuzzy -msgid "Unsort" -msgstr "÷¦ÄͦÎÉÔÉ" - -#: widgets/e-table/e-table-header-item.c:1160 -msgid "Group By This Field" -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1161 -#, fuzzy -msgid "Group By Box" -msgstr "çÒÕÐÁ %i" - -#: widgets/e-table/e-table-header-item.c:1163 -msgid "Remove This Column" -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1166 -msgid "Alignment" -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1167 -msgid "Best Fit" -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1168 -msgid "Format Columns..." -msgstr "" - -#: widgets/e-table/e-table-header-item.c:1170 -msgid "Customize Current View..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:386 -msgid "Tentative" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:387 -msgid "Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:388 -msgid "Out of Office" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:389 -msgid "No Information" -msgstr "îÅÍÁ¤ ¦ÎÆÏÒÍÁæ§" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:405 -msgid "_Invite Others..." -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:425 -msgid "_Options" -msgstr "ðÁÒÁÍÅÔÒÉ" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:442 -msgid "Show _Only Working Hours" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:455 -msgid "Show _Zoomed Out" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:473 -msgid "_Update Free/Busy" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:491 -msgid "_<<" -msgstr "_<<" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:508 -msgid "_Autopick" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:522 -msgid ">_>" -msgstr "_>>" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:539 -msgid "_All People and Resources" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:552 -msgid "All _People and One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:565 -msgid "_Required People" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:578 -msgid "Required People and _One Resource" -msgstr "" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:601 -msgid "Meeting _start time:" -msgstr "þÁÓ ÐÏÞÁÔËÕ ÚÕÓÔÒ¦Þ¦:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:625 -msgid "Meeting _end time:" -msgstr "þÁÓ ÚÁ×ÅÒÛÅÎÎÑ ÚÕÓÔÒ¦Þ¦:" - -#: widgets/meeting-time-sel/e-meeting-time-sel.c:738 -msgid "All Attendees" -msgstr "" - -#. Translators: These are the first characters of each day of the -#. week, 'M' for 'Monday', 'T' for Tuesday etc. -#: widgets/misc/e-calendar-item.c:281 -msgid "MTWTFSS" -msgstr "ð÷óþðóî" - -#: widgets/misc/e-clipped-label.c:106 -msgid "..." -msgstr "..." - -#: widgets/shortcut-bar/e-group-bar.c:632 -#, c-format -msgid "Group %i" -msgstr "çÒÕÐÁ %i" diff --git a/po/update.pl b/po/update.pl deleted file mode 100755 index 9cc746fa46..0000000000 --- a/po/update.pl +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/perl -w - -# GNOME po update utility. -# (C) 2000 The Free Software Foundation -# -# Author(s): Kenneth Christiansen - - -$VERSION = "1.2.5 beta 2"; -$LANG = $ARGV[0]; -$PACKAGE = "evolution"; - -if (! $LANG){ - print "update.pl: missing file arguments\n"; - print "Try `update.pl --help' for more information.\n"; - exit; -} - -if ($LANG=~/^-(.)*/){ - - if ("$LANG" eq "--version" || "$LANG" eq "-V"){ - print "GNOME PO Updater $VERSION\n"; - print "Written by Kenneth Christiansen , 2000.\n\n"; - print "Copyright (C) 2000 Free Software Foundation, Inc.\n"; - print "This is free software; see the source for copying conditions. There is NO\n"; - print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; - exit; - } - - - elsif ($LANG eq "--help" || "$LANG" eq "-H"){ - print "Usage: ./update.pl [OPTIONS] ...LANGCODE\n"; - print "Updates pot files and merge them with the translations.\n\n"; - print " -V, --version shows the version\n"; - print " -H, --help shows this help page\n"; - print " -P, --pot only generates the potfile\n"; - print " -M, --maintain search for missing files in POTFILES.in\n"; - print "\nExamples of use:\n"; - print "update.sh --pot just creates a new pot file from the source\n"; - print "update.sh da created new pot file and updated the da.po file\n\n"; - print "Report bugs to .\n"; - exit; - } - - elsif($LANG eq "--pot" || "$LANG" eq "-P"){ - - print "Building the $PACKAGE.pot ..."; - - $b="xgettext --default-domain\=$PACKAGE --directory\=\.\." - ." --add-comments --keyword\=\_ --keyword\=N\_" - ." --files-from\=\.\/POTFILES\.in "; - $b1="test \! -f $PACKAGE\.po \|\| \( rm -f \.\/$PACKAGE\.pot " - ."&& mv $PACKAGE\.po \.\/$PACKAGE\.pot \)"; - - `$b`; - `$b1`; - - print "...done\n"; - - exit; - } - - elsif ($LANG eq "--maintain" || "$LANG" eq "-M"){ - - $a="find ../ -print | egrep '.*\\.(c|y|cc|c++|h|gob)' "; - - open(BUF2, "POTFILES.in") || die "update.pl: there's not POTFILES.in!!!\n"; - print "Searching for missing _(\" \") entries...\n"; - open(BUF1, "$a|"); - - - @buf2 = ; - @buf1 = ; - - if (-s "POTFILES.ignore"){ - open FILE, "POTFILES.ignore"; - while () { - if ($_=~/^[^#]/o){ - push @bup, $_; - } - } - print "POTFILES.ignore found! Ignoring files...\n"; - @buf2 = (@bup, @buf2); - } - - foreach my $file (@buf1){ - open FILE, "<$file"; - while () { - if ($_=~/_\(\"/o){ - $file = unpack("x3 A*",$file) . "\n"; - push @buff1, $file; - last; - } - } - } - - @bufff1 = sort (@buff1); - - @bufff2 = sort (@buf2); - - my %in2; - foreach (@bufff2) { - $in2{$_} = 1; - } - - foreach (@bufff1){ - if (!exists($in2{$_})){ - push @result, $_ } - } - - if(@result){ - open OUT, ">POTFILES.in.missing"; - print OUT @result; - print "\nHere are the results:\n\n", @result, "\n"; - print "File POTFILES.in.missing is being placed in directory...\n"; - print "Please add the files that should be ignored in POTFILES.ignore\n"; - } - else{ - print "\nWell, it's all perfect! Congratulation!\n"; - } - } - - - else{ - print "update.pl: invalid option -- $LANG\n"; - print "Try `update.pl --help' for more information.\n"; - } - exit; - } - -elsif(-s "$LANG.po"){ - - print "Building the $PACKAGE.pot ..."; - - $c="xgettext --default-domain\=$PACKAGE --directory\=\.\." - ." --add-comments --keyword\=\_ --keyword\=N\_" - ." --files-from\=\.\/POTFILES\.in "; - $c1="test \! -f $PACKAGE\.po \|\| \( rm -f \.\/$PACKAGE\.pot " - ."&& mv $PACKAGE\.po \.\/$PACKAGE\.pot \)"; - - `$c`; - `$c1`; - - print "...done"; - - print "\nNow merging $LANG.po with $PACKAGE.pot, and creating an updated $LANG.po ...\n"; - - - $d="mv $LANG.po $LANG.po.old && msgmerge $LANG.po.old $PACKAGE.pot -o $LANG.po"; - - $f="msgfmt --statistics $LANG.po"; - - `$d`; - `$f`; - - unlink "messages"; - unlink "$LANG.po.old"; - - exit; -} - -else{ - print "update.pl: sorry $LANG.po does not exist!\n"; - print "Try `update.pl --help' for more information.\n"; - exit; -} diff --git a/po/update.sh b/po/update.sh deleted file mode 100755 index 74dca77b27..0000000000 --- a/po/update.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -PACKAGE="evolution" - -if [ "x$1" = "x--help" ]; then - -echo Usage: ./update.sh langcode -echo --help display this help and exit -echo -echo Examples of use: -echo ./update.sh ----- just creates a new pot file from the source -echo ./update.sh da -- created new pot file and updated the da.po file - -elif [ "x$1" = "x" ]; then - -echo "Building the $PACKAGE.pot ..." - -xgettext --default-domain=$PACKAGE --directory=.. \ - --add-comments --keyword=_ --keyword=N_ \ - --files-from=./POTFILES.in \ -&& test ! -f $PACKAGE.po \ - || ( rm -f ./$PACKAGE.pot \ -&& mv $PACKAGE.po ./$PACKAGE.pot ); - -else - -xgettext --default-domain=$PACKAGE --directory=.. \ - --add-comments --keyword=_ --keyword=N_ \ - --files-from=./POTFILES.in \ -&& test ! -f $PACKAGE.po \ - || ( rm -f ./PACKAGE.pot \ -&& mv $PACKAGE.po ./$PACKAGE.pot ); - -echo "Building the $PACKAGE.pot ..." -echo "Now merging $1.po with $PACKAGE.pot, and creating an updated $1.po ..." - -mv $1.po $1.po.old && msgmerge $1.po.old $PACKAGE.pot -o $1.po \ -&& rm $1.po.old; - -msgfmt --statistics $1.po - -fi; diff --git a/shell/.cvsignore b/shell/.cvsignore deleted file mode 100644 index 417b3c6bcf..0000000000 --- a/shell/.cvsignore +++ /dev/null @@ -1,11 +0,0 @@ -.deps -.libs -.pure -evolution -evolution.pure -Makefile.in -Makefile -Evolution-stubs.c -Evolution-skels.c -Evolution-common.c -Evolution.h diff --git a/shell/ChangeLog b/shell/ChangeLog deleted file mode 100644 index a05041c9c9..0000000000 --- a/shell/ChangeLog +++ /dev/null @@ -1,2040 +0,0 @@ -2000-08-20 arik devens - - * Makefile.am (evolution_LDADD): Added UNICODE_LIBS to link in the - new e-text stuff. - -2000-08-19 Christopher James Lahey - - * e-shell-folder-title-bar.c: Fixed a warning. - -2000-08-19 Christopher James Lahey - - * e-shell-view.c: Fixed a warning. - -2000-08-18 Larry Ewing - - * e-shell-folder-title-bar.c (style_set_cb): update the pixmap - define E_USE_STYLES to disable the current darkening behavior - (destroy): free the icon. - (e_shell_folder_title_bar_construct): style_set_cb does everything - important now. - (e_shell_folder_title_bar_set_icon): actually store the pixbuf - when we set it so that we still have it if the style changes and - take care of refcounting them properly. - -2000-08-17 Ettore Perazzoli - - * e-shell-view-menu.c (menu_create_file): Make capitalization of - menu items consistent. - (menu_create_view): Likewise. - (menu_create_help): Likewise. - (e_shell_view_menu_setup): Create a component menu placeholder so - that components can add their own component-specific menus there. - (menu_create_actions): Removed. - (e_shell_view_menu_setup): Don't call it. - (menu_create_tools): Removed. - (e_shell_view_menu_setup): Don't call it. - (menu_create_settings): New. - (e_shell_view_menu_setup): Call it. - -2000-08-13 Ettore Perazzoli - - * e-shell-view.c (delete_event): New. Make the parent shell quit. - -2000-08-13 Ettore Perazzoli - - * e-shell-view.c (shell_view_interface_set_message_cb): Removed - debugging message. - (shell_view_interface_unset_message_cb): Likewise. - -2000-08-13 Ettore Perazzoli - - * e-shell-view.c: New members `progress_bar_timeout_id', - `progress_bar_value' in `EShellViewPrivate'. - (init): Init them. - (destroy): If the timeout id is not zero, remove the associated - timeout. - (progress_bar_timeout_cb): New. - (start_progress_bar): New. - (stop_progress_bar): New. - (shell_view_interface_set_message_cb): If busy, start the progress - bar. Otherwise, stop it. - (shell_view_interface_unset_message_cb): Stop the progress bar. - - * e-shell-view.c (setup_widgets): Enable the progress bar in the - appbar. - - * e-shell-view.c (shell_view_interface_unset_message_cb): New - function, callback for the `EvolutionShellView::unset_message' - signal. - (shell_view_interface_set_message_cb): New function, callback for - the `EvolutionShellView::set_message' signal. - (setup_evolution_shell_view_interface): Connect these signals to a - newly created EvolutionShellView object, add ::add_interface this - object to the control's frame. - - * evolution-shell-view.c: New. - * evolution-shell-view.h: New. - - * Evolution-ShellView.idl: New interface. - -2000-08-10 Dan Winship - - * Evolution-ShellComponent.idl: add "in string evolution_homedir" - to ShellComponent::set_owner's arguments. - - * e-shell.c (e_shell_get_local_directory): Expose local_directory. - - * e-component-registry.c (register_component): Pass the shell's - "local_directory" to the component as its evolution_homedir. - - * evolution-shell-component.c (impl_ShellComponent_set_owner): - Update to include evolution_homedir. - (class_init): Update signal prototype. - - * evolution-shell-component-client.c - (evolution_shell_component_client_set_owner): Update to include - evolution_homedir. - - * e-init.c: Remove. This wasn't being used. - -2000-08-10 Peter Williams - - * e-shell-view-menu.c (command_about_box): Add lil' ol' - me to the about box. - -2000-08-09 Christopher James Lahey - - * e-setup.c, e-shell.c: Fixed some warnings. - -2000-08-09 Christopher James Lahey - - * e-shell-view.c: Fixed a warning. - -2000-08-09 Ettore Perazzoli - - * e-shell-view-menu.c (menu_create_file_new): Create a placeholder - for the print items. - -2000-08-08 Dan Winship - - * e-setup.c (e_setup): Check for ~/evolution/shortcuts.xml in - addition to ~/evolution, to make sure it's really the directory - we're expecting it to be. Also, convert from old-style config file - to new-style config directory. - -2000-08-04 Michael Meeks - - * evolution-shell-component.c (impl_ShellComponent_populate_folder_context_menu): - unref. - - * e-shell.c (e_shell_construct): Remove erroneous refs on - folder_type_registry, storage_set. - - * e-shortcuts-view.c (destroy): unref the shortcuts, causing a - massive ripple chain ref-count reaction. - -2000-08-03 JP Rosevear - - * e-shell.h: Remove gconf references - - * e-shell-view.h: Remove gconf references - - * main.c (idle_cb): Remove gconf references - - * Makefile.am: Remove gconf cflags and libs - - * e-shell-view.c (e_shell_view_load_settings): Change to use - gnome-config - (e_shell_view_save_settings): ditto - - * e-shell.c (e_shell_restore_from_settings): Change to - use gnome_config - (save_settings_for_views): ditto - -2000-08-03 Michael Meeks - - * e-shell-view.c (destroy): unref the UI handler. - -2000-08-03 Jeffrey Stedfast - - * e-shell-folder-selection-dialog.c (set_default_folder): Make - sure default_uri isn't NULL!! - -2000-08-03 Ettore Perazzoli - - * e-shell-view-menu.c (command_goto_folder): Just use the current - URI as the @default_uri parameter for - `e_shell_folder_selection_dialog_new()'. - - * evolution-session.c (class_init): Call `corba_class_init()'. - - * e-shell-folder-selection-dialog.c - (e_shell_folder_selection_dialog_new): @default_path renamed to - @default_uri. - (e_shell_folder_selection_dialog_construct): Likewise. If the - @default_uri is an `evolution:' one, use it as a path; if it is - different, assume it is a physical URI and consequently look for - the folder that has that physical URI and make it the default. - (set_default_folder): New helper function. - (e_shell_folder_selection_dialog_construct): Use it. - - * e-storage-set.c (e_storage_set_get_path_for_physical_uri): New. - - * e-storage.c (e_storage_get_path_for_physical_uri): New. - -2000-07-27 Dan Winship - - * main.c (idle_cb): work with either gconf 0.5 or newer - -2000-07-26 Peter Williams - - * e-storage.c (e_storage_new_folder): Fix tiny mem leak. - -2000-07-26 Ettore Perazzoli - - * e-shell-view.c (disconnect_popup_signals): Disconnect the "map" - signal handler too. - -2000-07-25 Ettore Perazzoli - - * e-shell-folder-creation-dialog.c (add_folder_types): Work around - GtkOptionMenu utter brokenness by destroying the associated - Glade-built GtkMenu and creating a new one from scratch. - -2000-07-24 Dan Winship - - * e-shell.c, main.c: Remove GOAD support. - - * evolution-shell-component-client.c: Remove GOAD support. - (evolution_shell_component_client_new): Give the "maybe - OAF_INFO_PATH" message if no oafinfo file was found, and give a - "consult previous error messages" message if the component was - found but not activated. Abort in either case. - -2000-07-23 Ettore Perazzoli - - * e-shell-view-menu.c: Converted to use `bonobo_ui_handler_*()' - stuff directly, instead of converting from GnomeUIInfo. - (command_quit): Update arg types for BonoboUIHandler. - (command_run_bugbuddy): Likewise. - (command_about_box): Likewise. - (command_new_task): Removed. - (command_new_journal_entry): Removed. - (menu_create_file_new): New. - (menu_create_file): New. - (menu_create_edit): New. - (menu_create_view): New. - (menu_create_tools): New. - (menu_create_actions): New. - (e_shell_view_menu_setup): Create menus using them instead of - converting from GnomeUIInfo. - -2000-07-22 Ettore Perazzoli - - * e-shell.c (e_shell_construct): Don't unref NULL shortcuts, you - idiot. - -2000-07-22 Ettore Perazzoli - - * e-shell-view.c (e_shell_view_set_folder_bar_mode): Make the - title bar non-clickable when the folder tree is visible. - - * e-shell-folder-title-bar.c: New members `button_arrow' and - `clickable' in `EShellFolderTitleBarPrivate'. Renamed `label' - into `button_label'. Added `label'. - (init): Init them. - (e_shell_folder_title_bar_construct): Pass a pointer to the title - bar as the user data for the "realize" signal. Create `label'. - (title_button_box_realize_cb): Use the `button_arrow' member - instead of using `gtk_object_{set,get}_data()'. - (setup_style): Set the style for `label' too. - (e_shell_folder_title_bar_set_clickable): New. - (e_shell_folder_title_bar_set_title): Set both `label' and - `button_label'. - -2000-07-21 Peter Williams - - * evolution-shell-client.c (user_select_folder): Don't use - g_main_loop to block the caller; this will break when - threads are enabled and GDK_THREADS_ENTER deadlocks. Use - gtk_main / gtk_main_exit to enter and exit the main loop, - which handles the recursive case correctly. - (impl_FolderSelectionListener_selected): Same. - (impl_FolderSelectionListener_cancel): Same. - (struct _FolderSelectionListenerServant): No more main_loop member. - -2000-07-21 Ettore Perazzoli - - * e-shell-view.c (storage_set_view_box_button_release_event_cb): - Set the toggle state to FALSE on the title bar. - - * e-shell-folder-title-bar.c: Signal "title_clicked" replaced by - "title_toggled". - (setup_style): Change the style for the button too. - (e_shell_folder_title_bar_construct): Use a GtkToggleButton, not a - GtkButton. - (e_shell_folder_title_bar_set_toggle_state): New. - -2000-07-21 Ettore Perazzoli - - * e-shell-folder-title-bar.c (create_icon_pixmap): New. Create a - small arrow-shaped GtkPixmap. - (title_button_box_realize_cb): New. Callback for the "realize" - signal of the button's inner box. - - * e-shell-view.c (title_bar_clicked_cb): New function, callback - for the "title_clicked" signal of the title bar. - (setup_widgets): Connect it. - - * e-shell-view.c: New member `storage_set_title_bar' in - `EShellViewPrivate'. - (setup_storage_set_subwindow): Set it. - - * e-shell-folder-title-bar.c: Use a GtkLabel instead of an - EClippedLabel for the title. - (title_button_clicked_cb): New. - (e_shell_folder_title_bar_construct): Put the label into a button. - Connect the button's "clicked" signal to - `title_button_clicked_cb'. - -2000-07-21 Ettore Perazzoli - - * evolution-shell-component.c - (impl_ShellComponent_populate_folder_context_menu): If the pointer - to the function to populate the folder context menu is NULL, don't - do anything. - -2000-07-21 Ettore Perazzoli - - * e-storage-set-view.c (popup_folder_menu): New. Create a - BonoboUIHandler-managed pop-up menu, let the component fill it in - with `::populate_folder_context_menu', and display it. Then - destroy it with the associated BonoboUIHandler. - (handle_right_button_selection): New. - (handle_left_button_selection): New. This pops up the right-click - menu. - (button_release_event): Use them. - (init): Set the `GTK_BUTTON_SELECTS' flag for button #3's actions. - - * evolution-shell-component-client.c - (evolution_shell_component_client_populate_folder_context_menu): - New. - (evolution_shell_component_client_async_create_folder): Added - preconditions. - - * e-shell-view.c (e_shell_view_save_settings): Add missing cast. - - * evolution-shell-component.c: New member - `populate_folder_context_menu' in - `EvolutionShellComponentPrivate'. - (impl_ShellComponent_populate_folder_context_menu): New, - implementation for - `Evolution::ShellComponent::populate_folder_context_menu'. - (corba_class_init): Install it. - (evolution_shell_component_new): New arg - @populate_folder_context_menu. - (evolution_shell_component_construct): Likewise. - - * Evolution-ShellComponent.idl: New method - `::populate_folder_context_menu'. - -2000-07-20 Ettore Perazzoli - - * e-shell-view.c (e_shell_view_save_settings): Save the paned - positions. - (e_shell_view_load_settings): Restore them. - -2000-07-20 Ettore Perazzoli - - * e-shell.c (save_settings_for_views): New. Code moved out of - `e_shell_save_settings'. - (e_shell_save_settings): Use it. - (save_settings_for_component): New. - (save_settings_for_components): New. - (e_shell_save_settings): Use it, so that we make all the - components save settings too. - - * e-component-registry.c - (e_component_registry_get_id_list): New. - (e_component_registry_get_component_by_id): New. - - * Makefile.am (libeshell_a_SOURCES): Add - `evolution-shell-component-client' and `evolution-session'. - - * evolution-session.c: New. - * evolution-session.h: New. - - * Makefile.am (evolution_SOURCES): Removed files that were already - in `libeshell.a'. - - * Evolution.idl: #include . - - * Evolution-Session.idl: New. - -2000-07-20 Ettore Perazzoli - - * main.c (no_views_left_cb): Call `e_shell_quit()' on the shell - before getting out of the GTK+ main loop. - (view_delete_event_cb): Removed. - (idle_cb): Don't call it. - - * e-shell-view-menu.c (command_new_view): New, implementation of - the "New view" command. - -2000-07-16 Damon Chaplin - - * e-shortcuts-view.c (e_shortcuts_view_construct): created a model - for the EShortcutBar. This will probably have to be moved to support - multiple views. - (class_init): #if'd out overriding the class functions. They don't - exist any more (they are in the model instead). - -2000-07-12 Christopher James Lahey - - * main.c: Fixed to match gconf API change. - -2000-07-10 Dan Winship - - * main.c (development_warning): Update the message. - -2000-07-10 Ettore Perazzoli - - * e-shell-folder-title-bar.c (title_button_clicked_cb): - Temporarily `#if 0'ed out. - -2000-07-10 Dan Winship - - * e-shell.c (impl_Shell_user_select_folder): Translate a - default_folder of "" into NULL (which can't be passed over CORBA). - -2000-07-10 Ettore Perazzoli - - * e-storage.c (e_storage_new_folder): Removed debugging message. - - * e-storage-set.c (storage_new_folder_cb): Removed debugging - message. - -2000-07-10 Federico Mena Quintero - - * e-shell-view.c (unrealize): As a quasi-hack, do a gdk_flush() - when the shell view is unrealized so that the DeleteEvent gets - sent to the remote plugs as soon as possible before we start - making other CORBA calls. The problem is that our CORBA pipe is - synchronous while our X pipe is asynch. We have to ensure - ordering for certain operations. This is NOT the correct and - complete fix, which should go in Bonobo. - -2000-07-08 Ettore Perazzoli - - * e-shell-view.c (e_shell_view_display_uri): Don't update the - current URI if there are problems creating a view for it. - (show_error): Remove. Not used anymore. - -2000-07-08 Ettore Perazzoli - - * e-shell-view-menu.c: Cleanup some unused menu items and added - "FIXMEs" for the ones we plan to add in the short term but are not - implemented yet. - (command_create_folder): Get rid of an unused variable. - -2000-07-07 Ettore Perazzoli - - * evolution-shell-client.c (user_select_folder): Fix small warning - by adding proper cast when filling in the CORBA sequence struct. - -2000-07-07 Ettore Perazzoli - - * e-shell.c (setup_corba_storages): Ref the CORBA storage - registry. - -2000-07-06 Ettore Perazzoli - - * evolution-storage.c: Removed `corba_storage_registry' member - from `EvolutionStoragePrivate'. - (destroy): Don't unref/release it. Call - `StorageListener::destroy' to notify that we are dead. - (evolution_storage_register): Don't ref and store the registry. - -2000-07-05 Dan Winship - - * e-shell.c (e_shell_save_settings): Use the correct gconf path - (/apps, not /app), and call gconf_client_suggest_sync at the end. - (e_shell_restore_from_settings): Use the correct gconf path. - -2000-07-05 Ettore Perazzoli - - * e-shell-view-menu.c (command_goto_folder): Set the folder - selection dialog as transient for the shell view. - (command_create_folder): New, bound to the "Create folder" - command in the "File" menu. - -2000-07-01 Ettore Perazzoli - - * e-shell.c (impl_Shell_user_select_folder): New arg - @allowed_types. Pass it to the EShellFolderSelectionDialog. - Connect to the "cancelled" and "folder_selected" signals instead - of "clicked". - (corba_listener_destroy_notify): New callback. - (impl_Shell_user_select_folder): Associate it to the DestroyNotify - for the "corba_listener" GtkObject data, so we don't leak it. - (folder_selection_dialog_clicked_cb): Don't release the listener - interface here. - (folder_selection_dialog_cancelled_cb): New callback for the - "cancelled" signal. - (folder_selection_dialog_folder_selected_cb): New callback for the - "folder_selected" signal. - - * e-shell-view-menu.c (command_goto_folder): Don't connect to - "clicked". Connect to "cancelled" and "folder_selected" instead. - (folder_selection_dialog_cancelled_cb): New, callback for the - "cancelled" signal. - (folder_selection_dialog_folder_selected_cb): New, callback for - the "folder_selected" signal. - - * e-shell-folder-selection-dialog.c New members `allowed_types', - `storage_set' in `EShellFolderSelectionDialogPrivate'. - (class_init): Install signals "folder_selected", "cancelled". - (init): Init to NULL. - (impl_destroy): Free/unref them. - (e_shell_folder_selection_dialog_new): New arg @allowed_types. - (e_shell_folder_selection_dialog_construct): New arg - @allowed_types. Initialize `priv->allowed_types' from it. - (check_folder_type): New function. Check if the selected folder - is of the appropriate type and, if not, return FALSE and pop up an - error dialog. Otherwise, return TRUE. - (impl_clicked): Use `check_folder_type()' to check if the folder - type is OK. If it is not, stop emission of the "clicked" signal. - - * e-shell-folder-selection-dialog.h: New signals - "folder_selected", "cancelled". - - * evolution-shell-client.c - (evolution_shell_client_user_select_folder): New arg - @allowed_types. - (user_select_folder): New arg @allowed_types. Pass this to the - ::user_select_folder method. - - * Evolution-Shell.idl: New arg @required_types in - ::user_select_folder. - -2000-07-01 Ettore Perazzoli - - * e-shell.c (setup_components): Don't ref the component registry. - -2000-06-30 Dan Winship - - * Evolution-Shell.idl: add "cancel" to FolderSelectionListener. - - * evolution-shell-client.c (impl_FolderSelectionListener_cancel): - Implement cancel (set *uri and *physical_uri to NULL). - (evolution_shell_client_user_select_folder): document %NULL uri - and physical_uri return values. - - * e-shell.c (folder_selection_dialog_clicked_cb): If the user - clicked "Cancel" or used the wm to close the dialog, call _cancel - instead of _selected. - -2000-06-30 Ettore Perazzoli - - * evolution-shell-component.c (impl_ShellComponent_set_owner): - Duplicate the object before storing it, you doofus. - -2000-06-30 Ettore Perazzoli - - * evolution-shell-component.c (impl_ShellComponent_unset_owner): - NULL the owner_client. - -2000-06-30 Ettore Perazzoli - - * evolution-shell-client.h - (evolution_shell_client_user_select_folder): Add prototype. - -2000-06-29 Ettore Perazzoli - - * evolution-shell-component.c: New member `owner_client'. Removed - member `corba_owner'. All the code updated to use it. - (evolution_shell_component_get_owner): Changed so that it returns - an EvolutionShellClient instead of the raw CORBA object. - - * evolution-shell-component.h: Change signal "owner_set" to get an - EvolutionShellClient wrapper instead of a CORBA interface. - - * evolution-shell-client.c: New. - * evolution-shell-client.h: New. - -2000-06-29 Dan Winship - - * evolution-shell-component-client.c - (evolution_shell_component_client_new): Update warning message to - not say "CRASHING", since it won't if you have current bonobo. - -2000-06-29 Peter Williams - - * e-shell.c (e_shell_restore_from_settings): Check for the - insanely invalid NumberOfViews = 0 case. - -2000-06-29 Peter Williams - - * e-shell.c (e_shell_construct): Ref the various E-things that - we create to go with our unrefs in the destructor. - -2000-06-29 Ettore Perazzoli - - * e-shell-view.c (e_shell_view_construct): Don't ref the shell. - (destroy): Don't unref the shell. - -2000-06-29 Ettore Perazzoli - - * e-shortcuts.c (e_shortcuts_construct): Fix typo: @shortcuts - should unset `GTK_FLOATING', not @storage_set. - - * e-shell-view.c (get_storage_set_path_from_uri): If @uri is NULL, - return NULL. - - * main.c (idle_cb): Restore the shell from the settings. If this - fails, just create a new view. - - * e-shell.c (e_shell_save_settings): New. - (e_shell_quit): Save settings before exiting. - (e_shell_restore_from_settings): New. - - * e-shell-view.c (e_shell_view_save_settings): New. - (e_shell_view_load_settings): New. - - * main.c (idle_cb): Initialize Gconf, create the GConfClient and - pass it to `e_shell_new()'. - - * e-shell.c: New member `gconf_client' in `EShellPrivate'. - (destroy): Unref it if not NULL. - (init): Init to NULL. - (e_shell_new): New param @gconf_client. - (e_shell_construct): Likewise. - - * Makefile.am (INCLUDES): Add `GCONF_CFLAGS'. - -2000-06-27 Ettore Perazzoli - - * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct): - Enable the title bar button. - -2000-06-27 Michael Zucchi - - * e-shell.c (folder_selection_dialog_clicked_cb): Close the dialog - when done. Dont do anything if 'new' was pressed, and always - return empty strings if 'cancel' was pressed. - -2000-06-27 Michael Zucchi - - * e-shell.c (impl_Shell_user_select_folder): Set the listener as - the corba_listener data, not the shell. - -2000-06-26 Christopher James Lahey - - * glade/Makefile.am: Added EXTRA_DIST for make distcheck. - -2000-06-19 Ettore Perazzoli - - * e-local-storage.c: Don't #define POSIX_SOURCE at all; this is - not needed anymore as we no longer use `readdir_r'. - -2000-06-19 Chris Toshok - - * e-local-storage.c: #undef _POSIX_SOURCE after including - dirent.h. this breaks the build on freebsd if we leave it - #defined. go figure. - -2000-06-19 Dan Winship - - * evolution-shell-component-client.c - (evolution_shell_component_client_new): Add a warning before - crashing due to a known bug when it can't activate a component, so - people don't have to waste any time trying to figure out what's - up. - -2000-06-13 Ettore Perazzoli - - * Makefile.am: Compile the CORBA-built files, - evolution-shell-component.c and evolution-storage.c into a - separate `libeshell.a' library. Link the `evolution' executable - to it. Also cleaned up a bit and got rid of the `CPP_FLAGS' - assignment. - -2000-06-12 Michael Meeks - - * e-shell-folder-selection-dialog.c: include gnome-dialog.h - (PARENT_TYPE): GNOME_TYPE_DIALOG replaced with gnome_dialog_get_type. - -2000-06-10 Ettore Perazzoli - - * e-shell.c (impl_Shell_user_select_folder): New, implementation - for `Shell:user_select_folder'. - (corba_class_init): Install it. - (folder_selection_dialog_clicked_cb): Callback for the folder - selection dialog. - - * Evolution-Shell.idl: New method `Shell::user_select_folder'. - New interface `FolderSelectionListener'. - - * glade/e-shell-folder-creation-dialog.glade: Make it larger. - - * e-shell-folder-creation-dialog.h: Fix typo: #include - , not . - - * e-shell-view-menu.c: Added "Go to folder..." command. - (commmand_goto_folder): Implementation for it. - - * e-shell-folder-selection-dialog.c: New. - * e-shell-folder-selection-dialog.h: New. - -2000-06-10 Ettore Perazzoli - - * e-local-folder.c (save_metadata): Don't set the description in - the XML file if null. Compute the physical path correctly. - - * e-folder.c (e_folder_construct): Allow NULL description. - - * evolution-shell-component-client.c (init): Initalize - `listener_interface' to `CORBA_OBJECT_NIL' and `listener_servant' - to NULL. - (create_listener_interface): Return void and set the `servant' and - `listener_servant' fields directly. - (evolution_shell_component_client_async_create_folder): Updated - accordingly. - - * e-shell-folder-creation-dialog.c: New struct `DialogData' to be - passed to the dialog's callbacks. - (dialog_data_destroy): New. - (e_shell_show_folder_creation_dialog): Set up a `DialogData' - object and pass it as the data for the signals. - (shell_destroy_cb): New handler for the "destroy" signal on the - shell. - (e_shell_show_folder_creation_dialog): Connect it. - (dialog_destroy_cb): New handler for the "destroy" signal on the - dialog; it frees the associated `DialogData'. - (e_shell_show_folder_creation_dialog): Connect it. - (async_create_cb): New function, callback for the async folder - creation function. - (entry_name_is_valid): New function to check if the entered folder - name is valid. - (dialog_clicked_cb): Check if the specified folder name is valid - and, if so, asynchronously create the new folder. - (add_folder_types): Set "type_name" data on each menu item. - - * e-storage-set-view.c (e_storage_set_view_get_current_folder): - New function. - - * e-storage-set.c (get_storage_for_path): New helper function. - (e_storage_set_get_folder): Use it. - - * e-storage.c (e_storage_async_create_folder): Renamed from - `e_storage_create_folder'. - (e_storage_remove_folder): Renamed from `e_storage_remove_folder'. - (impl_create_create_folder): Renamed from `impl_create_folder'. - (impl_create_remove_folder): Renamed from `impl_remove_folder'. - (class_init): Updated accordingly. - (e_storage_result_to_string): New function. - - * e-storage.h: `::create_folder' renamed to - `::async_create_folder'. `::remove_folder' renamed to - `::async_remove_folder'. - - * evolution-shell-component.h: Return type of - `EvolutionShellComponentCreateFolderFn' and - `EvolutionShellComponentRemoveFolderFn' changed to `void'. - - * e-local-storage.c: `EComponentRegistry component_registry' - replaced with `EFolderTypeRegistry folder_type_registry' in - `ELocalStoragePrivate' - (component_async_create_folder_callback): New function, to handle - the callback from EvolutionShellComponent. - (construct): Likewise. - (e_local_storage_open): Replaced @component_registry with - @folder_type_registry. - (impl_create_folder): Implemented. - - * e-local-folder.c (e_local_folder_new): New. - (e_local_folder_construct): New. - (e_local_folder_save): Precondition: physical URI is not NULL. - (save_metadata): Unlink the metadata file if `xmlSaveFile()' - fails. - - * e-storage.c (e_storage_create_folder): Precondition: @path is - absolute. - (e_storage_remove_folder): Likewise. - -2000-06-09 Ettore Perazzoli - - * e-shell-view-menu.c: Removed folder menu and "save as..." command. - - * main.c (main): Call `glade_gnome_init()'. - - * e-shell-view-menu.c (command_new_folder): Implemented. - - * e-shell-folder-creation-dialog.c: New. - * e-shell-folder-creation-dialog.h: New. - - * glade/Makefile.am: New. - * glade/e-shell-folder-creation-dialog.glade: New. - - * e-shell-view.c (e_shell_view_get_current_uri): New. - - * e-folder-type-registry.c - (e_folder_type_registry_get_type_names): New. - - * e-shell-view.c (get_control_for_uri): Updated to use - `EvolutionShellComponentClient'. - - * e-folder-type-registry.c: Use `EvolutionShellComponentClient's - instead of `BonoboObjectClient's. - - * e-component-registry.c: Use `EvolutionShellComponentClient' - instead of `BonoboObjectClient' in `Component'. - (component_new): Updated accordingly. - (register_component): Likewise. - - * evolution-shell-component-client.h: New. - * evolution-shell-component-client.c: New. - - * evolution-shell-component.c - (impl_ShellComponent_async_create_folder): New, implementation of - `::async_create_folder'. - (impl_ShellComponent_async_remove_folder): New, implementation of - `::async_remove_folder'. - (corba_class_init): Install them. - (evolution_shell_component_new): New args `create_folder_fn' and - `remove_folder_fn' for setting the handlers for these new methods. - (evolution_shell_component_construct): Likewise. - - * Evolution-ShellComponent.idl - (ShellComponent::async_create_folder): New. - (ShellComponent::async_remove_folder): New. - (ShellComponentListener): New. - - * evolution-shell-component.c (impl_ShellComponent_create_view): - New param @type. Use the new `EvolutionShellComponentCreateViewFn'. - - * evolution-shell-component.h: New enum `EvolutionShellComponentResult'. - Changed `EvolutionShellComponentCreateViewFn' to return an - `EvolutionShellComponentResult'. - - * e-shell-view.c (get_control_for_uri): Pass the folder type to - `ShellComponent::create_view'. - - * Evolution-ShellComponent.idl: New param @type for - `ShellComponent::create_view'. - -2000-06-08 Miguel de Icaza - - * main.c (development_warning): Use version here. Add padding to - the message. - Only destroy object if its window was not closed. - -2000-06-08 Ettore Perazzoli - - * e-shell-view.c (setup_bonobo_ui_handler): Oops. Don't create - the toolbar. This was not supposed to be committed. - -2000-06-07 Ettore Perazzoli - - * e-storage.c (folder_destroy): Don't destroy the subfolders. - (remove_folder): New helper function. - (free_private): Use it. - (e_storage_removed_folder): Use it here too. - (folder_destroy): Don't unref the EFolder if NULL. - - * e-storage-set-view.c (e_storage_set_view_construct): Use - `gtk_signal_connect_while_alive()' instead of just - `gtk_signal_connect()' so that the signal handler is automatically - removed when we are destroyed. - - * e-storage-set.c (e_storage_set_remove_all_storages): New - function. - - * e-shell-view.c (e_shell_view_construct): Use `bonobo_object_ref' - on the shell instead of `gtk_object_ref'. - (destroy): Unref the shell. - - * e-local-storage.h: #include "e-component-registry.h". - - * e-shell.c (setup_local_storage): Renamed from `setup_storages'. - Only set up the local storage, not the CORBA one, and don't create - the storage set. - (e_shell_construct): Create the storage set here instead. Call - `setup_local_storage' after setting up the components. - - * e-local-storage.c: New member `component_registry' in - `ELocalStoragePrivate'. - (init): Init to NULL. - (destroy): If not null, unref it. - (e_local_storage_open): New arg @component_registry. - (construct): New arg @component_registry. Init - `priv->component_registry' from it. - - * e-local-storage.c (impl_get_name): Renamed from `get_name'. - (impl_create_folder): New function, implementing - `EStorage::create_folder'. Just a stub for now. - (impl_remove_folder): New function, implementing - `EStorage::remove_folder'. Just a stub for now. - (class_init): Install these stub implementations. - - * e-storage.c (e_storage_remove_folder): New function. - (e_storage_create_folder): New function. - (impl_create_folder): New function, default implementation for - `::create_folder'. - (impl_remove_folder): New function, default implementation for - `::remove_folder'. - (class_init): Install the implementations. - - * e-storage.c (impl_get_name): Renamed from `get_name'. - (impl_get_folder): Renamed from `get_folder'. - (impl_list_folders): Renamed from `list_folders'. - - * e-storage.h: New virtual methods `remove_folder', - `create_folder'. - - * e-storage.c (e_storage_removed_folder): Renamed from - `e_storage_remove_folder'. - * e-corba-storage.c (impl_StorageListener_removed_folder): Updated - accordingly. - -2000-06-02 Ettore Perazzoli - - * e-shell-view.c (setup_bonobo_ui_handler): Create the default toolbar. - -2000-06-02 Jeffrey Stedfast - - * e-shell-view-menu.c: Changed "Using the Shell" to "Getting Started" - -2000-06-02 Christopher James Lahey - - * e-shell-view.c: Free the uri variable. - - * e-shell.c: Free the local_directory variable. - -2000-06-02 Ettore Perazzoli - - * main.c (view_delete_event_cb): New callback for the - "delete_event" on the view. - (idle_cb): Connect it. - -2000-06-01 Christopher James Lahey - - * e-storage-set-view.c (set_e_shortcut_selection): Added a - g_return_if_fail check. - -2000-06-01 Dan Winship - - * e-shell-view-menu.c (command_help): New menu callback to launch - the help browser. - (menu_help): add pointers to the users' guide. - (e_shell_view_menu_setup): Add the help menu stuff to the uih. - - * main.c (main): Set up gettext. (Problem noted by Héctor García - Alvarez) - -2000-06-01 Ettore Perazzoli - - * e-shell-view.c (DEFAULT_WIDTH): Add more 5 pixels. - -2000-06-01 Ettore Perazzoli - - * e-shell-view.c (DEFAULT_WIDTH): Made the default window a bit - narrower. - (DEFAULT_HEIGHT): And shorter. - (setup_widgets): Set the border width of the vbox that holds the - title bar to 2 pixels, so that the view looks a bit nicer. - -2000-06-01 Ettore Perazzoli - - * e-shell-view.c (DEFAULT_TREE_WIDTH): Made the tree 150 pixel - wide [instead of 100]. - (setup_widgets): Use `DEFAULT_TREE_WIDTH' instead of - `DEFAULT_SHORTCUT_BAR_WIDTH' where appropriate. - (e_shell_view_construct): Hide the folder bar by default. - - * e-storage-set-view.c (e_storage_set_view_construct): Set - auto-resize mode for column one. - -2000-06-01 Ettore Perazzoli - - * e-shell-view-menu.c (e_shell_view_menu_setup): Set the - statusbar. - - * e-shell-view.c: New member `appbar' for `EShellViewPrivate'. - (init): Initialize to NULL. - (setup_widgets): Install a status bar and set `appbar' to point to - it. - (setup_bonobo_ui_handler): Make the BonoboUIHandler use `appbar' - as its statusbar. - (e_shell_view_get_appbar): New function. - (e_shell_view_construct): Set up the BonoboUIHandler after setting - up the widgets. - - * e-shortcuts.c (class_init): Add new signals "new_shortcut", - "removed_shortcut", "new_group", "removed_group". - (e_shortcuts_remove_shortcut): Emit "remove_shortcut". - (e_shortcuts_add_shortcut): Emit "new_shortcut". - (e_shortcuts_remove_group): Emit "remove_group". - (e_shortcuts_add_group): Emit "new_group". - (unload_shortcuts): Emit "remove_group" for all the groups. - - * e-shortcuts.h: New signals "new_shortcut", "removed_shortcut", - "new_group", "removed_group". - - * e-shortcuts-view.c (pop_up_right_click_menu): New function to - pop up the right-click menu for the shortcut bar. - (pop_up_right_click_menu_for_shortcut): New function. - (selected_item): Pop up right click menu when appropriate. Don't - activate the shortcut when right-clicking. - -2000-05-31 Ettore Perazzoli - - * evolution-storage.h: #include 'Evolution.h". - -2000-05-31 Ettore Perazzoli - - * e-shell-view.c (show_error): Use `set_current_notebook_page()' - instead of `gtk_notebook_set_page()'; this will also deactivate - the current control properly. - - * e-shell-view-menu.c (e_shell_view_menu_setup): Initialize the - state of the shortcut/folder toggle menu items using - `e_shell_view_get_shortcut_bar_mode()' and - `e_shell_view_get_folder_bar_mode()'. - (command_toggle_shortcut_bar): Removed debugging message. - (command_toggle_folder_bar): Likewise. - - * e-shell-view.c (e_shell_view_get_shortcut_bar_mode): New - function. - (e_shell_view_get_folder_bar_mode): New function. - -2000-05-31 Ettore Perazzoli - - * e-storage-set-view.c: New constant `DRAG_RESISTANCE'. New - members `button_x', `button_y' in `EStorageSetViewPrivate'. - (init): Initialize to zero. - (button_press_event): Set. - (motion_notify_event): Don't start drag unless the current x/y - position is farther than `DRAG_RESISTANCE', in any of the two - directions, from the original position of the button click. - (button_release_event): Always ungrab the pointer, even if - `selected_row_path' is NULL. - -2000-05-31 Ettore Perazzoli - - * evolution-shell-component.c (class_init): Eeek! - s/owner_set/owner_unset/. - - * e-shell-folder-title-bar.c (e_shell_folder_title_bar_construct): - Increase the size of the border of the hbox slightly to make the - title bar a bit nicer. - -2000-05-31 Ettore Perazzoli - - * e-component-registry.c (component_free): Invoke `::unset_owner' - on the component before releasing it. - - * evolution-shell-component.c (class_init): Install the - "owner_set" signal. - (impl_ShellComponent_unset_owner): New function, implementation of - `ShellComponent::unset_owner'. - (corba_class_init): Install it. - - * evolution-shell-component.h: New signal "owner_unset". - - * Evolution-ShellComponent.idl: New method `ShellComponent:: - unset_owner'. - - * e-shell.c (e_shell_quit): Destroy all the views explicitly. - - * e-shell-view-menu.c: Changed `Show shortcut bar' and `Show - folder tree' items into toggle items. - (shortcut_bar_mode_changed_cb): New callback to update the status - of the "show shortcut bar" toggle item when the shortcut bar is - hidden/shown in the view. - (folder_bar_mode_changed_cb): Likewise for the folder bar. - (e_shell_view_menu_setup): Connect these to the corresponding - signals on the shell. - - * e-shell-view.c: New members `shortcut_bar_mode' and - `folder_bar_mode' in `EShellViewPrivate'. - (init): Initialize `shortcut_bar_mode' and `folder_bar_mode' to - `E_SHELL_VIEW_SUBWINDOW_HIDDEN'. - (class_init): Add the new signals. - (e_shell_view_set_shortcut_bar_mode): Renamed from - `e_shell_view_show_shortcuts'. Emit "shortcut_bar_mode_changed" - and update the `shortcut_bar_mode' member. - (e_shell_view_set_folder_bar_mode): Renamed from - `e_shell_view_show_folders'. Emit "folder_bar_mode_changed" and - update the `folder_bar_mode' member. - - * e-shell-view.h: New signals "shortcut_bar_mode_changed", - "folder_bar_mode_changed". - - * e-shell-view.c (setup_menus): Removed. - (e_shell_view_construct): Use `e_shell_view_menu_setup' instead. - (e_shell_view_get_bonobo_ui_handler): New function. - - * e-shell-view-menu.c (e_shell_view_menu_setup): New. - - * e-shell.c (impl_Shell_get_component_for_type): New function, - implementation of `Evolution::Shell::get_component_for_type'. - (corba_class_init): Install it into the EPV. - - * Evolution-Shell.idl: Added method `get_component_for_type'. - -2000-05-30 Ettore Perazzoli - - * e-shortcuts.c: New members `dirty', `save_idle_id' in - `EShortcutsPrivate'. - (init): Initialize. - (destroy): If the idle ID is nonzero, remove the idle. If `dirty' - is true, save. - (idle_cb): New. - (schedule_idle): New. - (make_dirty): New. - (e_shortcuts_remove_shortcut): Call it. - (e_shortcuts_add_shortcut): Likewise. - (e_shortcuts_remove_group): Likewise. - (e_shortcuts_add_group): Likewise. - - * e-shell.c (e_shell_construct): Updated to match the `EShortcuts' - API changes. - - * e-shortcuts.c: New member `file_name' in `EShortcutsPrivate'. - (init): Init to NULL. - (destroy): Free it. - (e_shortcuts_load): Removed. - (e_shortcuts_save): Removed. - (e_shortcuts_new): New arg @file_name. Load from the specified - file name. - - * e-shortcuts-view.c (added_item): New method implementation. - (removed_item): New method implementation. - (added_group): New method implementation. - (removed_group): New method implementation. - (class_init): Install these. - - * e-shortcuts.c (e_shortcuts_remove_shortcut): New function. - (e_shortcuts_add_shortcut): New function. - (e_shortcuts_remove_group): New function. - (e_shortcuts_add_group): New function. - - * e-shell-view.c: New member `view_title_bar' in - `EShellViewPrivate'. - (setup_widgets): Put an EShellFolderTitleBar on top of the tree - view and the content view. - (update_window_icon): Renamed from `set_icon'. - (update_folder_title_bar): New. - (popup_tree): New function to pop up the tree view when the title - button in the title bar is clicked. - (folder_title_clicked_cb): New callback for the "clicked" signal - of EShellFolderTitleBar. - (setup_widgets): Don't add a title bar to the shortcut bar. - (create_storage_set_subwindow): New helper function. - (setup_widgets): Use it. - (show_error): Use an EClippedLabel instead of a GtkLabel. - - * e-shell-view.c: Replaced all the occurences of `gpointer' with - `void *' for consistency. - - * e-shell-folder-title-bar.c: New file. - * e-shell-folder-title-bar.h: New file. - - * e-storage-set-view.c (e_storage_set_view_construct): Ooops. Fix - inverted key/value pair in the call to `g_hash_table_insert()'. - -2000-05-28 Dan Winship - - * main.c (main): Remove extra free of evolution_directory. - -2000-05-28 Ettore Perazzoli - - * evolution-storage.c (evolution_storage_register): Use the - storage's name when registering. - -2000-05-26 Matt Loper - - * e-shell-view-menu.c (command_about_box): Make authorlist more - alphabetical. - (command_show_treeview): New function; shows the treeview, when it - has been hidden. - (command_show_shortcut_bar): New function; shows the shortcut bar, - when it's been hidden. - -2000-05-26 Ettore Perazzoli - - * e-corba-storage.c (impl_StorageListener_new_folder): Set the - physical URI on the folder using `e_folder_set_physical_uri()'. - - * e-local-folder.c (get_physical_uri): Removed. - (construct_loading_metadata): Use EFolder's `physical_uri' field - instead of ours, which is gone. - (save_metadata): Likewise. - (destroy): Don't free. - - * e-local-folder.h: Removed `physical_uri' from `ELocalFolder'. - - * e-folder.c: New member `physical_uri' in `EFolderPrivate'. - (init): Initialize to NULL. - (destroy): Free it. - (get_physical_uri): Removed. - (e_folder_set_physical_uri): New function. - - * e-storage-set.c (e_storage_set_get_folder): Fix off-by-one error - in extracting the base name. - - * e-storage.c: New member `path' in `Folder'. - (folder_destroy): Free it. - (folder_new): New arg. Initialize `path' from it. - (e_storage_construct): Updated accordingly. - (e_storage_new_folder): Likewise. - (e_storage_remove_folder): Remove the folder from the hash. - - * e-storage-set-view.c (remove_node): New function. - (removed_storage_cb): Use it. - (new_folder_cb): New function, callback for the "new_folder" - signal on the EStorageSet. - (removed_folder_cb): New function, callback for the - "removed_folder" signal on the EStorageSet. - (e_storage_set_view_construct): Connect these signal handlers to - the respective signals on our model storage. - - * e-storage-set.c (storage_new_folder_cb): New function, callback - for the "new_folder" signal on the storages. - (storage_removed_folder_cb): New function, callback for the - "removed_folder" signal on the storages. - (e_storage_set_add_storage): Connect them to the signals of the - storage being added. - - * e-corba-storage-registry.c - (impl_StorageRegistry_register_storage): Throw an exception if - `e_storage_set_add_storage()' returns false. - - * e-shell.c (setup_storages): Unref the local storage after adding - to the storage set. - - * e-corba-storage-registry.c - (impl_StorageRegistry_register_storage): Unref the storage after - adding to the storage set. - - * e-storage-set.c: New hash table `name_to_named_storage' in - `EStorageSetPrivate'. - (named_storage_new): New helper function. - (named_storage_destroy): New helper function. - (e_storage_set_add_storage): Use the hash table. Return value - changed to `gboolean'. Return FALSE if there is a storage with - that name already. Also, ref the storage. - (e_storage_set_remove_storage): Likewise [but of course don't ref - the storage]. - (e_storage_set_get_storage): Use the `name_to_named_storage' hash - table. - (destroy): Destroy the `name_to_named_storage' hash. - - * e-storage-set.h: New signals "new_folder", "removed_folder". - - * e-storage.c (e_storage_get_watcher_for_path): Removed. - (get_watcher_for_path): Removed. - (class_init): Install signals "new_folder" and "removed_folder". - (e_storage_remove_folder): Emit "removed_folder". - (e_storage_new_folder): Emit "new_folder". - - * e-storage.h: Removed method `get_watcher_for_path'. New signals - "new_folder", "removed_folder". - - * e-storage-watcher.c: Removed. - * e-storage-watcher.h: Removed. - - * e-corba-storage-registry.c (corba_class_init): Set the - Bonobo_Unknown evp parts. - - * evolution-storage.c: New. - * evolution-storage.h: New. - - * evolution-shell-component.c - (evolution_shell_component_get_owner): New. - - * e-storage-set-view.c (new_storage_cb): New function. - (e_storage_set_view_construct): Connect to the "new_storage" - signal on the EStorageSet. - (removed_storage_cb): New function. - (e_storage_set_view_construct): Connect to the "removed_storage" - signal on the EStorageSet. - - * e-storage-set-view.c (e_storage_set_view_construct): Make this - always look pretty, with Helix GNOME or without. - -2000-05-25 Christopher James Lahey - - * e-storage-set-view.c: Make this always look pretty, with Helix - GNOME or without. - -2000-05-25 Ettore Perazzoli - - * e-storage-set-view.c (e_storage_set_view_construct): Set the - dotted line type again. Dotted is less butt-ugly than continuous. - - * e-shell-view.c (show_error): Display page zero in the notebook. - - * main.c (idle_cb): Renamed from `new_view_idle_cb'. Create the - EShell object here, because now the shell depends on the GLib loop - to be running for correct operation. - (main): Don't create the EShell here. - - * e-storage-set-view.c (get_pixmap_and_mask_for_folder): If the - icon is not found, set the returned pixmap and mask to NULL. - - * e-shell.c (e_shell_construct): Added precondition: @corba_object - must be non-nil. - (e_shell_new): Added precondition: @local_direcory must be - non-null. - - * evolution-shell-component.c: New. - * evolution-shell-component.h: New. - - * e-shell.c: New member `component_registry' in `EShellPrivate'. - (init): Initialize to NULL. - (destroy): Unref it. - (setup_components): New function to set up the compnent registry - and initialize the mail, calendar and addressbook components. - (e_shell_construct): Call it. - - * e-storage-set.c: Updated to use EFolderTypeRegistry. - * e-storage-set.h: Likewise. - * e-shortcuts.c: Likewise. - * e-shortcuts.h: Likewise. - * e-shell.c: Likewise. - - * e-shell.h: Likewise. - * e-shell-view.c: Likewise. - * e-shortcuts-view.c: Likewise. - * e-storage-set-view.c: Likewise. - - * e-component-registry.c: New. - * e-component-registry.h: New. - - * e-folder-type-registry.c: New. - * e-folder-type-registry.h: New. - - * e-folder-type-repository.c: Removed. - * e-folder-type-repository.h: Removed. - - * Evolution-ShellComponent.idl: New struct `FolderType'; new type - `FolderTypeList'. New attribute `supported_types'. - (ShellComponent::set_owner): Renamed from `set_shell'. - (ShellComponent::create_view): New. - -2000-05-24 Christopher James Lahey - - * e-shell-view.c: Was using the wrong include here. - - * e-storage-set-view.c: Got rid of the lines in the tree view. - -2000-05-24 Christopher James Lahey - - * Makefile.am: Added libepaned.a. - - * e-shell-view.c: Switched from GtkPaned to EPaned. - -2000-05-23 Ettore Perazzoli - - * e-shell.c: New member `corba_storage_registry' in - `EShellPrivate'. - (init): Initialize it to NULL. - (destroy): Unref it if not NULL. - (setup_corba_storages): New function to set up the CORBA storage - registry and `bonobo_object_add_interface()' it to the shell. - (setup_storages): Call it from here. - - * e-shell.h, e-shell.c: Derive EShell from BonoboObject instead of - GtkObject. - - * e-storage.c (e_storage_remove_folder): Return value changed into - `gboolean'; return false if an error occurs, true otherwise. - (e_storage_new_folder): Likewise. - - * e-corba-storage-registry.c: New. - * e-corba-storage-registry.h: New. - - * e-corba-storage.c: New. - * e-corba-storage.h: New. - - * Evolution.idl: Include the new IDLs, but no - `evolution-service-repository.idl' anymore. - - * Evolution-Shell.idl: New. - * Evolution-ShellComponent.idl: New. - * Evolution-Storage.idl: New. - - * evolution-service-repository.idl: Removed. - * evolution-service-repository.c: Removed. - * evolution-service-repository.h: Removed. - - * e-folder-type-repository.c (folder_type_new): Free `icon_path'. - -2000-05-18 Dan Winship - - * main.c (new_view_idle_cb): add development_warning (moved from - mail component) - -2000-05-16 Ettore Perazzoli - - * e-storage-set-view.c: Get rid of the `ICON_WIDTH' and - `ICON_HEIGHT' #defines. - (get_pixmap_and_mask_for_folder): Get the mini icon instead of the - big one. Use `E_SHELL_MINI_ICON_SIZE' instead of `ICON_WIDTH' and - `ICON_HEIGHT'. - - * e-folder-type-repository.c: New member `mini_icon_pixbuf' in - `FolderType'. - (folder_type_new): Initialize `mini_icon_pixbuf' by loading the - mini icon if possible. If the mini icon is not found, resort to - the big one. - (folder_type_free): Unref the mini icon. - (e_folder_type_repository_get_icon_for_type): New arg @mini. If - true, return the mini icon instead of the standard one. - - * e-shell-view.c (set_icon): Get the mini icon instead of the big - one by using `e_shell_get_icon_path's @try_mini arg. - - * e-shell-constants.h: New file. - - * e-shell-utils.c - (e_shell_get_icon_path): New arg @try_mini. If true, look for the - mini version [whose name ends in `-mini']. - - * e-folder-type-repository.c - (folder_type_new): Free string returned by - `e_shell_get_icon_path()'. - -2000-05-16 Ettore Perazzoli - - * e-shell-view.c: New members `storage_set_view_box', - `shortcut_bar_box', `hpaned1_position', `hpaned2_position' in - `EShellViewPrivate'. - (init): Initialize them. - (setup_widgets): Add title bars to the tree and shortcut views. - (shortcuts_view_close_button_clicked_cb): New callback function. - (setup_widgets): Connect to the "close_button_clicked" signal of - the shortcut view's title bar. - (storage_set_view_close_button_clicked_cb): New callback function. - (setup_widgets): Connect to the "close_button_clicked" signal of - the storage set view's title bar. - (e_shell_view_show_shortcuts): New function. - (e_shell_view_show_folders): New function. - - * e-shell-view.c: New members `hpaned1', `hpaned2' in - `EShellViewPrivate'. - (init): Initialize both to NULL. - (setup_widgets): Invert the parenting order for the GtkHPaneds and - store them into the private `hpaned' and `hpaned2' members. - - * Makefile.am (evolution_LDADD): Link with `libemiscwidgets.a'. - -2000-05-15 Ettore Perazzoli - - * e-shortcuts.c - (load_shortcuts_into_view): Removed. - (e_shortcuts_new_view): Don't set up the shortcut bar manually - here anymore, and don't set the icon callback either. The - `EShortcutsView' object is now able to do this by itself. - - * e-shortcuts-view.c - (icon_callback): Moved here from `e-shortcuts.c'. - (load_group): New function. - (load_all_shortcuts): New function. - (e_shortcuts_view_construct): Call it to load the shortcuts from - the `EShortcuts' object. Also, set `icon_callback' as the icon - callback. - - * e-storage-set-view.c - (button_press_event): Add/remove grab with `gtk_grab_add' and - `gtk_grab_remove'. - (button_release_event): Call `gtk_grab_remove' when removing the - grab. - - * e-shortcuts.c: New member `title_to_group' in - `EShortcutsPrivate'. - (init): Initialize here. - (destroy): Destroy here. - (unload_shortcuts): Destroy and recreate here. - (load_shortcuts): Avoid inserting multiple groups with the same - title, and insert the groups into the `title_to_group' hash table. - Also, avoid leaking the return value from `xmlNodeListGetString'. - (e_shortcuts_get_group_titles): New function. - (e_shortcuts_get_shortcuts_in_group): New function. - (e_shortcuts_get_storage_set): New function. - - * e-storage-set-view.c - (e_storage_set_view_set_current_folder): Emit the - "folder_selected" signal. - - * e-local-folder.c - (get_string_value): Return a `char *' to be deallocated by the - caller instead of a `const char *' that does not need to be - deallocated. - (construct_loading_metadata): Free values returned from - `get_string_value'. - -2000-05-15 Ettore Perazzoli - - * e-storage-set-view.c: New members `dragged_row_path', - `selected_row_path_before_click' in `EStorageSetViewPrivate'. - (init): Initialize them to NULL. - (motion_notify_event): Set `dragged_row_path' from - `selected_row_path'. - (button_press_event): Initialize `selected_row_path_before_click' - from `selected_row_path'. - (button_release_event): Set `selected_row_path_before_click' to - NULL. - (drag_end): Restore the current selection from - `selected_row_path_before_click'; then set both `dragged_row_path' - to NULL. - -2000-05-15 Ettore Perazzoli - - * e-storage-set-view.c: New members `in_drag' and `drag_button' in - `EStorageSetViewPrivate'. New static variables `drag_types', - `num_drag_types', `target_list'. - (class_init): Create the `target_list'. - (init): Initialize the private `in_drag' member to false. - Initialize the private `drag_button' member to zero. - (button_release_event): Set it to false. - (motion_notify_event): New function, implementation of - `GtkWidget::motion_notify_event'. If `in_drag' is false, set it - to true and set ourselves up as a drag source. - (button_press_event): New function, implementation of - `GtkWidget::button_press_event'. Set `drag_button' to the event's - button number and then chain to the implementation in the parent - class. - (drag_end): New function, implementation of `GtkWidget::drag_end'. - (drag_data_get): New function, implementation of - `GtkWidget::drag_data_get'. - (set_e_shortcut_selection): New function, helper for `drag_data_get'. - (set_uri_list_selection): New function, helper for `drag_data_get'. - (class_init): Install these method implementations. - - * e-storage-set-view.c: New member `selected_row_path' in - `EStorageSetViewPrivate'. - (init): Initialize it to NULL. - (tree_select_row): Set it to the path of the selected row. Don't - emit "folder_selected" yet. Also, keep the grab. - (button_release_event): New function, implementation of - `GtkWidget::button_release_event'. If `selected_row_path' is not - NULL, emit the "folder_selected" signal with `selected_row_path' - as the parameter and then set `selected_row_path' to NULL again. - (class_init): Install `button_release_event'. - - * e-storage-set-view.c: Made `ICON_WIDTH' and `ICON_HEIGHT' global - #defines. - (e_storage_set_view_construct): Set the row height to - `ICON_HEIGHT'. Alos, set the selection mode to - `GTK_SELECTION_BROWSE'. - -2000-05-15 Iain Holmes - - * e-local-folder.c (get_string_value): Use the correct function to - get the node's contents. - - * e-shortcuts.c (load_shortcuts): Same as above. - -2000-05-14 Ettore Perazzoli - - * e-folder-type-repository.c - (e_folder_type_repository_get_control_id_for_type): Protect - against non-existing types. - (e_folder_type_repository_get_icon_for_type): Likewise. - -2000-05-14 Ettore Perazzoli - - * e-storage-set-view.c - (folder_compare_cb): Callback comparison function for comparing - folders based on their names. - (insert_folders): Use it to sort the folder list before using it. - -2000-05-14 Ettore Perazzoli - - * e-shell.c - (setup_storages): Pass the pointer to the folder type repository. - (e_shell_construct): Initialize the folder type repository before - everything else. - - * e-storage-set.c: New member `folder_type_repository' in - `EStorageSetPrivate'. - (init): Initialize it to NULL. - (destroy): Unref it. - (e_storage_set_construct): New arg @folder_type_repository. - Initialize the corresponding member in the private struct through - it. - (e_storage_set_new): New arg @folder_type_repository. - (e_storage_set_get_folder_type_repository): New function. - - * e-shortcuts.c (icon_callback): Just use [the new version of] - `e_folder_type_repository_get_icon_for_type()' instead of loading - the image manually. - - * e-folder-type-repository.c: New member `icon_pixbuf' in - `FolderType'. - (folder_type_new): Load the pixbuf. - (folder_type_free): Unref the pixbuf. - (e_folder_type_repository_get_icon_name_for_type): Renamed from - `e_folder_type_repository_get_icon_for_type'. - (e_folder_type_repository_get_icon_for_type): New function, now - returning a `GdkPixbuf *'. - - * e-shortcuts.c - (icon_callback): Use `e_shell_get_icon_name()'. - - * e-shell-view.c: New member `storage_set_view' in - `EShellViewPrivate'. - (init): Initialize it to NULL. - (e_shell_view_construct): Create an EStorageSetView for the - shell's EStorageSet and put it into a scrolled window. Also, put - the scrolled window into the EShellView with some - [temporary] GtkPaned action. Store the pointer to the - EStorageSetView to `priv->storage_set_view'. - (set_icon): Get an EShellView and an EFolder instead of an - EShellView and a URI. Also, don't leak. - (update_for_current_uir): New helper function. Call `set_icon'. - (show_error): Call it. - (folder_selected_cb): New function. - (setup_widgets): Connect it to the "folder_selected" signal of the - storage set view. - - * e-storage-set-view.c: New file. - * e-storage-set-view.h: New file. - - * e-shell-utils.c: New file. - * e-shell-utils.h: New file. - -2000-05-10 Christopher James Lahey - - * e-shell-view-menu.c: Added an about box. - -2000-05-10 Christopher James Lahey - - * e-shell-view.c: Set the icons when changing between components. - - * main.c: Set the default icon. (The change in e-shell-view.c - doesn't work unless we do this.) - -2000-05-09 Matt Loper - - * e-shell-view-menu.c (command_run_bugbuddy): New function; allows - users to submit a bug. - (command_run_bugbuddy): Implemented with jacob's patch. - -2000-05-09 Ettore Perazzoli - - * e-shell.c (e_shell_new_view): Display the specified @uri in the - view. - - * e-shell-view.c (e_shell_view_construct): Removed arg @uri. - (e_shell_view_new): Likewise. - - * main.c: New string constant `STARTUP_URI', specifying the URI to - show in the startup view. - (new_view_idle_cb): New callback function to create a new view for - `STARTUP_URI' in the idle loop. We need to do this in the idle - loop because the CORBA stuff cannot work until the loop starts - running. - (main): Set `new_view_idle_cb' up as the idle callback instead of - creating the view right away. - -2000-05-09 Ettore Perazzoli - - * e-shell.c (setup_storages): Woops. Don't free the path before - the warning message, as we need to print it. - -2000-05-08 Ettore Perazzoli - - * main.c (destroy_cb): New function. - (main): Connect it to the `destroy' signal on the shell. - -2000-05-08 Ettore Perazzoli - - * e-shortcuts.c (load_shortcuts): Const fix. - -2000-05-08 Larry Ewing - - * e-shortcuts.c (load_shortcuts_into_view): xmlFree the return - value of xmlGetProp. - -2000-05-07 Ettore Perazzoli - - * e-shortcuts-view.c (e_shortcuts_view_construct): Use - correct cast. - -2000-05-07 Ettore Perazzoli - - * main.c (main): Connect to "no_views_left", not "destroy". - - * e-shell.c (view_destroy_cb): Grmpf. - -2000-05-07 Ettore Perazzoli - - * e-shell.c (e_shell_construct): Output a warning message if the - shortcut file is not found. - (setup_storages): Output a warning message if the local storage - cannot be initialized. - (destroy): Destroy all the views. - - * e-shell-view.c - (e_shell_view_construct): Ref the shell. - - * e-shortcuts-view.c - (e_shortcuts_view_construct): Ref the shortcuts. - - * e-shell.c: Create the "no_views_left" signal. New member - `views' in `EShellPrivate'. - (init): Initialize `views' to NULL. - (view_destroy_cb): Destroy handler for a view: remove the view - from `views', and emit the "no_views_left" signal if this was the - last view. - (e_shell_new_view): Add the new view to `views' and connect the - "destroy" signal to `view_destroy_cb'. - (destroy): Destroy the views. - - * e-shell.h: New signal "no_views_left". - - * e-shell-view-menu.c (command_quit): New function, implementation - of the "quit" command. - - * e-shell-view.c (e_shell_view_get_shell): New function. - - * e-shell.c (e_shell_quit): New function. - - * main.c (main): If it is not possible to create the shell for - some reason, pop up an error message. - (shell_destroy_cb): New function, signal handler for "destroy" on - the shell object. - (main): Connect it. - -2000-05-06 Ettore Perazzoli - - * e-shortcuts.c (destroy): Be safer about NULL objects. - - * e-shell.c (destroy): Be safer about NULL objects. - - * e-local-storage.c (load_folders): Use `readdir()', not - `readdir_r()'. - -2000-05-06 Ettore Perazzoli - - * main.c (init_corba) [! USING_OAF]: We have no options no - popt context. - -2000-05-06 Ettore Perazzoli - - * All files: Reorganized and redone a lot of the shell. New - features: internal URI namespace, extensible storage/folder - mechanism, configurable shortcuts. - -2000-05-03 Damon Chaplin - - * e-shell-view.c (e_shell_view_new): turned the notebook border off. - The calendar looks better without it. If any of the views want a - border they should create it themselves, shouldn't they? - -2000-05-04 Ettore Perazzoli - - * e-shortcut.c (shell_icon_cb): Type of @url changed from `gchar - *' to `const gchar *'; new arg @data. - (e_shortcut_bar_view_new): Pass NULL as the closure value for - `e_shortcut_bar_set_icon_callback()'. - -2000-05-02 Ettore Perazzoli - - * e-folder-mail.c: Removed. - - * e-folder-mail.h: Removed. - - * eshell-types.h: Removed. - - * e-folder.h: Don't #include "eshell-types.h". - -2000-05-02 Ettore Perazzoli - - * e-folder.h: Removed member `eservice' from `EFolder'. - - * e-service.c: Removed. - - * e-service.h: Removed. - -2000-05-02 Matt Loper - - * Makefile.am: set G_LOG_DOMAIN. - -2000-05-01 Dan Winship - - * e-shell-view.c (e_shell_view_set_view): Turn off control frame - autoactivation, so the toolbars work correctly. This may actually - be a bug in Bonobo, but we'll kludge around it here for now. - -2000-04-27 Ettore Perazzoli - - * e-shell-view.c: OAFized. - (get_view): If `bonobo_widget_new_control()' fails for the - calendar, don't try to get the property bag and stuff and thus - prevent a segfault. - - * main.c - (corba_init): Removed Bonobo initialization. Implemented OAF - version for the case in which `USING_OAF' is #defined. - (init_bonob): New function. - (main): Call `init_bonobo()'. - -2000-04-26 Matt Loper - - * e-shell-view.c (bonobo_widget_is_dead): Helper function to see - whether a bonobo widget is a zombie (ie the remote bonobo control - died). - (e_shell_view_set_view): Try to respawn dead widgets. - -2000-04-25 Dan Winship - - * Makefile.am: include -I$(datadir)/idl in orbit-idl arguments so - that you can have bonobo installed in the same prefix as - evolution, when that isn't the same prefix is gnome-libs, which a - lot of people seem to be doing. - (CLEANFILES): add EVOLUTION_CORBA_GENERATED - -2000-04-24 Christopher James Lahey - - * idl/folder.idl: Made some functions syncronous that didn't need - to be asyncronous. - -2000-04-24 Matt Loper - - * e-shell-view.h: Added hpaned and treeview widgets to - EShellView. Added e_shell_view_toggle_shortcut_bar() and - e_shell_view_toggle_treeview(). - - * e-shell-view.c (e_shell_view_setup_shortcut_display): Use EPaned - widget to house our shortcut bar. - (e_shell_view_toggle_shortcut_bar): New function; toggles whether - the shortcut bar is showing. - (e_shell_view_toggle_treeview): Same, for the treeview (NYI). - (e_shell_view_new): Put the notebook view in our EPaned widget. - - * e-shell-view-menu.c (esv_cmd_toggle_shortcut_bar): New function; - toggles whether the shortcut bar is viewed. - (esv_cmd_toggle_treeview): Same, but with the treeview. Added - menuitems in the "view" menu to allow access to the above. - -2000-04-19 Seth Alves - - * e-shell-view.c (get_view): set calendar's uri with a property bag - -2000-04-19 Christopher James Lahey - - * idl/folder.idl: New idl file. Still unused. - -2000-04-14 Christopher James Lahey - - * e-shell-view.c: Made the left pane of the shell view not - autoresize. - -2000-04-09 Matt Loper - - * e-shell-view.c (e_shell_view_setup): Set the default height - bigger, to 600, so that everything in the shortcut-bar shows up. - -2000-04-07 Matt Loper - - * e-shell-view.c (destroy_folder_view): New function; - Bonobo_Unknown_unref's the controls that have the views in them. - (esv_destroy): Calls the above for each folder_view in the - hashtable. - (get_view): unref the ServiceRepository interface of the control - when we're done with it. - -2000-04-06 Miguel de Icaza - - * shell/e-shortcut.c (shell_icon_cb): Append a slash here. - (shell_icons): Only list the filenames. - - * shell/main.c (evolution_boot): Be less rude. - -2000-04-06 Matt Loper - - * shell/main.c (evolution_boot): Make sure our data directory is - available with e_setup_base_dir (). - -2000-04-06 Miguel de Icaza - - * shell/e-shortcut.c (shell_icon_cb): Load the icons from the - installation path, not form the GNOME-libs installation prefix. - (shell_icon_cb): Memory leak fix. - - * shell/Makefile.am (imagesdir): Pass the EVOLUTION_IMAGES - installation directory here. - -2000-04-05 Seth Alves - - * shell/e-shell-view.c (get_view): hook up control:calendar - -2000-03-31 Dan Winship - - * shell/e-shortcut.c (e_shortcut_bar_view_new, shell_icon_cb): - Update for shortcut bar changes. - - * shell/e-folder.h: add E_FOLDER_SUMMARY - * shell/e-shell.c (e_shell_setup_default_folders): make the - "Today" icon be of type E_FOLDER_SUMMARY, not E_FOLDER_MAIL. - -2000-03-30 Dan Winship - - * shell/e-shell-view.c (e_shell_view_set_view): Hold off on - deactivating the "outgoing" control until after setting up the - "incoming" control. That way if the new control takes a few - seconds to load, there won't be an ugly empty spot where the - toolbar used to be while the new control loads. - -2000-03-29 Dan Winship - - * shell/e-shell-view.c (e_shell_view_set_view): Call - bonobo_control_frame_activate on the folder_view every time it - is displayed, and bonobo_control_frame_deactivate every time it is - hidden. - -2000-03-25 Matt Loper - - * shell/e-shell-view.c (get_view): Move CORBA_Environment to - different scope. - -2000-03-22 Matt Loper - - * shell/main.c (evolution_boot): gtk_signal_connect'ed "destroy" - to gtk_main_quit, so that the shell dies when you want it to. - - * shell/e-shell-view.c (get_view): Reorganized, and added - assertions. - (e_shell_view_set_view): Added assertions. - -2000-03-20 Matt Loper - - * shell/e-shell-view.h: New private field in EShellView added, - which contains the notebook and a hashtable of folders to views. - - * shell/e-shell-view.c (e_shell_view_set_view): Instead of - creating a new control every time we set the view, we now keep our - controls in a notebook. This function now switches to the correct - notebook page, or creates a new page/control as necessary. - (e_shell_view_new): Creates and inserts the notebook into the - shell. - -2000-03-13 Christopher James Lahey - - * shell/e-shell-view.c: Added an E_FOLDER_CONTACTS section to the - get_view function. - -2000-03-13 bertrand - - * shell/e-shell.c (EShell_register_service): - test implementation. Show the uri and the type - of service that has just been registered. - - * shell/e-shell-view.c (get_view): - once we have the bonobo control widget, - disable the autoactivation and activate - the control frame. - (get_view): added a parameter to have - a reference to the EShellView. - (get_view): In the case of the mail component - use the Evolution_ServiceRepository to - give the component a reference to the - Shell server. - -2000-03-12 bertrand - - * shell/e-shell-view.c (get_view): name change - - - * shell/e-folder.c (e_folder_get_folder_type): added the - get_e_folder_type function. - - * shell/evolution-service-repository.c: - (evolution_service_repository_new): creates an - Evolution_ServiceRepository object. - (create_evolution_service_repository): - create the corresponding servant. - (evolution_service_repository_construct): set - the closure as well as the virtual functions. - -2000-03-12 bertrand - - * shell/evolution-service-repository.c: - * shell/evolution-service-repository.h: - Implementation of the service repository interface - as a bonobo object. - - * shell/evolution-service-repository.idl: - new file. Contains the definition for the service - repository interface. - - * shell/Shell.idl: move the shell related stuff - here - -2000-03-12 bertrand - - * shell/e-folder.h: add a field refering to a - service associated to the efolder. In the case of - distant folders, it is generally a server. - - * shell/e-service.c: New class. Models a service. - A service is an object with an URI and a root folder. - It genreally reporesents a distant folder. - A service is generally a ressource shared amongst - several folders. - * shell/e-service.h: - -2000-03-07 bertrand - - * shell/e-shell-shortcut.c (shortcut_bar_item_selected): - removed a test that prevented the standard menu - to be shown. - -2000-03-01 Ettore Perazzoli - - * shell/Makefile.am (INCLUDES): use `top_srcdir' instead of - `srcdir'. Also, add `$(top_srcdir)'. And put the srcdir includes - before everything else. - (evolution_LDADD): `libeutil.la', not `libeutil.a'. - -2000-02-22 bertrand - - * shell/Makefile.am (evolution_LDADD): - add libetext.a. - -2000-02-08 Iain Holmes - - * shell/Makefile.am: Changed the order of the compilation, so the CORBA - stuff was generated before it was needed. - -2000-01-15 Miguel de Icaza - - * shell/e-shell.c: Construct the default folders - - * shell/e-shell-view.c (e_shell_view_new): Setup the main GnomeApp - application, load the shortcut, internal api. - - * shell/e-folder.c (e_folder_get_type_name): Return description - here; Change of policy; We now know about all of the possible - types that can be displayed on Evolution. - -2000-01-15 Miguel de Icaza - - * shell/e-folder.c: Renamed signal. - - * widgets/shortcut-bar/e-shortcut-bar.c (e_shortcut_bar_add_item): - Use e_bar_set_item_data. - - Drop item_url; Require image argument; Require user data - argument. - -2000-01-05 Miguel de Icaza - - * shell/Makefile.am: New file. - diff --git a/shell/Evolution-Session.idl b/shell/Evolution-Session.idl deleted file mode 100644 index 855f1c03ea..0000000000 --- a/shell/Evolution-Session.idl +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Interface for saving configuration information. - * - * Authors: - * Ettore Perazzoli - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include - -module Evolution { - - interface Session : Bonobo::Unknown { - exception Failed {}; - - /** - * save_configuration: - * @prefix: A configuration path prefix. - * - * Save the current configuration at the specified @prefix. - * The component can use any path starting by @prefix for its - * keys. - */ - void save_configuration (in string prefix) - raises (Failed); - - /** - * load_configuration: - * @prefix: A configuration path prefix. - * - * Load the saved configuration at the specified @prefix. - */ - void load_configuration (in string prefix) - raises (Failed); - }; - -}; diff --git a/shell/Evolution-Shell.idl b/shell/Evolution-Shell.idl deleted file mode 100644 index bda5732537..0000000000 --- a/shell/Evolution-Shell.idl +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Interface for the Evolution shell. - * - * Authors: - * Ettore Perazzoli - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include - -module Evolution { - interface ShellComponent; - - interface FolderSelectionListener; - - interface Shell : Bonobo::Unknown { - exception NotFound {}; - exception Busy {}; - - /** - * get_component_for_type: - * @type: name of a valid folder type - * - * Get the shell component associated with a specific folder type. - * - * Return value: the Evolution::ShellComponent interface for the component that - * handles @type. - */ - ShellComponent get_component_for_type (in string type) - raises (NotFound); - - typedef sequence FolderTypeList; - - /** - * user_select_folder: - * @listener: a listener interface to report the answer of the user. - * @title: title for the folder selector dialog - * @default_folder: physical or `evolution:' URI for the folder that must be - * selected by default, when the dialog is popped up - * @possible_types: list of the names of the types of folders that are allowed - * - * Pop up a folder selection dialog from which the user can select a folder. - * Initially, the @default_folder is selected. The user can also create a new - * folder by using the "New..." button. The dialog only lets the user choose - * a folder whose type is listed in @possible_types. - */ - void user_select_folder (in FolderSelectionListener listener, - in string title, - in string default_folder, - in FolderTypeList possible_types) - raises (Busy); - }; - - interface FolderSelectionListener { - void selected (in string uri, in string physical_uri); - void cancel (); - }; -}; diff --git a/shell/Evolution-ShellComponent.idl b/shell/Evolution-ShellComponent.idl deleted file mode 100644 index f907cca72b..0000000000 --- a/shell/Evolution-ShellComponent.idl +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Interface for the Evolution components. - * - * Authors: - * Ettore Perazzoli - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include - -module Evolution { - interface Shell; - - struct FolderType { - string name; - string icon_name; - }; - - typedef sequence FolderTypeList; - - interface ShellComponentListener; - - interface ShellComponent : Bonobo::Unknown { - readonly attribute FolderTypeList supported_types; - - /* FIXME: Can we use an attribute here? */ - exception AlreadyOwned {}; - - void set_owner (in Shell shell, in string evolution_homedir) - raises (AlreadyOwned); - - exception NotOwned {}; - - void unset_owner () - raises (NotOwned); - - /* FIXME: We might want more exceptions here. */ - exception NotFound {}; - exception UnsupportedType {}; - exception InternalError {}; - - Bonobo::Control create_view (in string physical_uri, - in string type) - raises (NotFound, UnsupportedType, InternalError); - - exception Busy {}; - - void async_create_folder (in ShellComponentListener listener, - in string physical_uri, - in string type) - raises (Busy); - void async_remove_folder (in ShellComponentListener listener, - in string physical_uri) - raises (Busy); - - void populate_folder_context_menu (in Bonobo::UIHandler uih, - in string physical_uri, - in string type); - }; - - interface ShellComponentListener { - enum Result { - OK, - UNSUPPORTED_OPERATION, - UNSUPPORTED_TYPE, - EXISTS, - INVALID_URI, - PERMISSION_DENIED, - HAS_SUBFOLDERS, - NO_SPACE - }; - - void report_result (in Result result); - }; -}; diff --git a/shell/Evolution-ShellView.idl b/shell/Evolution-ShellView.idl deleted file mode 100644 index f0931dccdd..0000000000 --- a/shell/Evolution-ShellView.idl +++ /dev/null @@ -1,18 +0,0 @@ -/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Interface for the Evolution shell views. - * - * Authors: - * Ettore Perazzoli - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include - -module Evolution { - interface ShellView : Bonobo::Unknown { - void set_message (in string message, in boolean busy); - void unset_message (); - }; -}; diff --git a/shell/Evolution-Storage.idl b/shell/Evolution-Storage.idl deleted file mode 100644 index 4e35e859bf..0000000000 --- a/shell/Evolution-Storage.idl +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Storage interface for the Evolution shell. - * - * Authors: - * Ettore Perazzoli - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include - -module Evolution { - struct Folder { - string type; - string description; - string name; - string physical_uri; - }; - - interface Storage; - interface StorageListener; - - interface Storage : Bonobo::Unknown { - attribute string name; - }; - - interface StorageListener { - exception Exists {}; - exception NotFound {}; - - void destroyed (); - - void new_folder (in string path, in Folder folder) - raises (Exists); - - void removed_folder (in string path) - raises (NotFound); - }; - - interface StorageRegistry : Bonobo::Unknown { - exception Exists {}; - exception NotFound {}; - - StorageListener register_storage (in Storage storage, in string name) - raises (Exists); - - void unregister_storage (in string name) - raises (NotFound); - }; -}; diff --git a/shell/Evolution.idl b/shell/Evolution.idl deleted file mode 100644 index 2463d23b10..0000000000 --- a/shell/Evolution.idl +++ /dev/null @@ -1,17 +0,0 @@ -/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * CORBA interface for the Evolution shell. - * - * Authors: - * Ettore Perazzoli - * - * Copyright (C) 2000 Helix Code, Inc. - */ - -#include - -#include -#include -#include -#include -#include diff --git a/shell/Makefile.am b/shell/Makefile.am deleted file mode 100644 index 0b2457a464..0000000000 --- a/shell/Makefile.am +++ /dev/null @@ -1,133 +0,0 @@ -SUBDIRS = glade - -INCLUDES = \ - -I$(top_srcdir)/widgets \ - -I$(top_srcdir)/widgets/misc \ - -I$(top_srcdir) \ - $(BONOBO_GNOME_CFLAGS) \ - -DEVOLUTION_IMAGES=\""$(datadir)/images/evolution"\" \ - -DEVOLUTION_VERSION=\""$(VERSION)"\" \ - -DEVOLUTION_LOCALEDIR=\""$(datadir)/locale"\" \ - -DEVOLUTION_DATADIR=\""$(datadir)"\" \ - -DEVOLUTION_GLADEDIR=\"$(datadir)/evolution/glade\" \ - -DG_LOG_DOMAIN=\"evolution-shell\" - -EXTRA_DIST = $(IDLS) - -CLEANFILES = $(IDL_GENERATED) - -# CORBA stuff - -IDLS = \ - Evolution.idl \ - Evolution-Session.idl \ - Evolution-Shell.idl \ - Evolution-ShellComponent.idl \ - Evolution-ShellView.idl \ - Evolution-Storage.idl - -IDL_GENERATED = \ - Evolution.h \ - Evolution-common.c \ - Evolution-skels.c \ - Evolution-stubs.c - -Evolution-impl.o: Evolution.h - -$(IDL_GENERATED): $(IDLS) - $(ORBIT_IDL) -I$(datadir)/idl `$(GNOME_CONFIG) --cflags idl` \ - -I$(srcdir) $(srcdir)/Evolution.idl - -# Shell library - -noinst_LIBRARIES = \ - libeshell.a - -libeshell_a_SOURCES = \ - $(IDL_GENERATED) \ - evolution-session.c \ - evolution-session.h \ - evolution-shell-client.c \ - evolution-shell-client.h \ - evolution-shell-component.c \ - evolution-shell-component.h \ - evolution-shell-component-client.c \ - evolution-shell-component-client.h \ - evolution-shell-view.c \ - evolution-shell-view.h \ - evolution-storage.c \ - evolution-storage.h - -# Evolution executable - -bin_PROGRAMS = evolution - -evolution_SOURCES = \ - e-component-registry.c \ - e-component-registry.h \ - e-corba-storage-registry.c \ - e-corba-storage-registry.h \ - e-corba-storage.c \ - e-corba-storage.h \ - e-folder-type-registry.c \ - e-folder-type-registry.h \ - e-folder.c \ - e-folder.h \ - e-local-folder.c \ - e-local-folder.h \ - e-local-storage.c \ - e-local-storage.h \ - e-setup.c \ - e-setup.h \ - e-shell-constants.h \ - e-shell-folder-creation-dialog.c \ - e-shell-folder-creation-dialog.h \ - e-shell-folder-selection-dialog.c \ - e-shell-folder-selection-dialog.h \ - e-shell-folder-title-bar.c \ - e-shell-folder-title-bar.h \ - e-shell-utils.c \ - e-shell-utils.h \ - e-shell-view-menu.c \ - e-shell-view-menu.h \ - e-shell-view.c \ - e-shell-view.h \ - e-shell.c \ - e-shell.h \ - e-shortcuts-view.c \ - e-shortcuts-view.h \ - e-shortcuts.c \ - e-shortcuts.h \ - e-storage-set-view.c \ - e-storage-set-view.h \ - e-storage-set.c \ - e-storage-set.h \ - e-storage.c \ - e-storage.h \ - main.c - -evolution_LDADD = \ - libeshell.a \ - $(top_builddir)/widgets/shortcut-bar/libshortcut-bar.a \ - $(top_builddir)/widgets/e-paned/libepaned.a \ - $(top_builddir)/widgets/e-text/libetext.a \ - $(top_builddir)/widgets/misc/libemiscwidgets.a \ - $(top_builddir)/e-util/libeutil.la \ - $(UNICODE_LIBS) \ - $(BONOBO_GNOME_LIBS) - -# Purify support - -if ENABLE_PURIFY - -PLINK = $(LIBTOOL) --mode=link $(PURIFY) $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ - -all-local: evolution.pure - -evolution.pure: evolution - @rm -f evolution.pure - $(PLINK) $(evolution_LDFLAGS) $(evolution_OBJECTS) $(evolution_LDADD) $(LIBS) - -endif - - diff --git a/shell/e-component-registry.c b/shell/e-component-registry.c deleted file mode 100644 index 411fe93d42..0000000000 --- a/shell/e-component-registry.c +++ /dev/null @@ -1,374 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-component-registry.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "e-util/e-util.h" -#include "e-shell-utils.h" - -#include "Evolution.h" - -#include "evolution-shell-component-client.h" - -#include "e-component-registry.h" - - -#define PARENT_TYPE GTK_TYPE_OBJECT -static GtkObjectClass *parent_class = NULL; - -typedef struct _Component Component; - -struct _Component { - char *id; - - EvolutionShellComponentClient *client; - - /* Names of the folder types we support (normal ASCII strings). */ - GList *folder_type_names; -}; - -struct _EComponentRegistryPrivate { - EShell *shell; - - GHashTable *component_id_to_component; -}; - - -/* Component information handling. */ - -static Component * -component_new (const char *id, - EvolutionShellComponentClient *client) -{ - Component *new; - - bonobo_object_ref (BONOBO_OBJECT (client)); - - new = g_new (Component, 1); - new->id = g_strdup (id); - new->folder_type_names = NULL; - new->client = client; - - return new; -} - -static void -component_free (Component *component) -{ - Evolution_ShellComponent corba_shell_component; - CORBA_Environment ev; - - CORBA_exception_init (&ev); - corba_shell_component = bonobo_object_corba_objref (BONOBO_OBJECT (component->client)); - Evolution_ShellComponent_unset_owner (corba_shell_component, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_warning ("Cannot unregister component -- %s", component->id); - else - g_print ("Component unregistered successfully -- %s\n", component->id); - CORBA_exception_free (&ev); - - g_free (component->id); - - bonobo_object_unref (BONOBO_OBJECT (component->client)); - - e_free_string_list (component->folder_type_names); - - g_free (component); -} - -static gboolean -register_type (EComponentRegistry *component_registry, - const char *name, - const char *icon_name, - Component *handler) -{ - EComponentRegistryPrivate *priv; - EFolderTypeRegistry *folder_type_registry; - - priv = component_registry->priv; - - folder_type_registry = e_shell_get_folder_type_registry (priv->shell); - g_assert (folder_type_registry != NULL); - - if (! e_folder_type_registry_register_type (folder_type_registry, name, icon_name)) { - g_warning ("Trying to register duplicate folder type -- %s", name); - return FALSE; - } - - e_folder_type_registry_set_handler_for_type (folder_type_registry, name, handler->client); - - return TRUE; -} - -static gboolean -register_component (EComponentRegistry *component_registry, - const char *id) -{ - EComponentRegistryPrivate *priv; - Evolution_ShellComponent component_corba_interface; - Evolution_Shell shell_corba_interface; - Evolution_FolderTypeList *supported_types; - Component *component; - EvolutionShellComponentClient *client; - CORBA_Environment ev; - CORBA_unsigned_long i; - const char *local_directory; - - priv = component_registry->priv; - - if (g_hash_table_lookup (priv->component_id_to_component, id) != NULL) { - g_warning ("Trying to register component twice -- %s", id); - return FALSE; - } - - client = evolution_shell_component_client_new (id); - if (client == NULL) - return FALSE; - - CORBA_exception_init (&ev); - - /* FIXME we could use the EvolutionShellComponentClient API here instead, but for - now we don't care. */ - - component_corba_interface = bonobo_object_corba_objref (BONOBO_OBJECT (client)); - shell_corba_interface = bonobo_object_corba_objref (BONOBO_OBJECT (priv->shell)); - local_directory = e_shell_get_local_directory (priv->shell); - - Evolution_ShellComponent_set_owner (component_corba_interface, shell_corba_interface, local_directory, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - bonobo_object_unref (BONOBO_OBJECT (client)); - CORBA_exception_free (&ev); - return FALSE; - } - - supported_types = Evolution_ShellComponent__get_supported_types (component_corba_interface, &ev); - if (ev._major != CORBA_NO_EXCEPTION || supported_types->_length == 0) { - bonobo_object_unref (BONOBO_OBJECT (client)); - CORBA_exception_free (&ev); - return FALSE; - } - - CORBA_exception_free (&ev); - - component = component_new (id, client); - g_hash_table_insert (priv->component_id_to_component, component->id, component); - - for (i = 0; i < supported_types->_length; i++) { - const Evolution_FolderType *type; - - type = supported_types->_buffer + i; - - if (! register_type (component_registry, type->name, type->icon_name, component)) { - g_warning ("Cannot register type `%s' for component %s", - type->name, component->id); - } else { - g_print ("Registered type for component -- (%s) %s\n", - type->name, component->id); - } - } - - CORBA_free (supported_types); - - return TRUE; -} - - -/* GtkObject methods. */ - -static void -component_id_foreach_free (void *key, - void *value, - void *user_data) -{ - Component *component; - - component = (Component *) value; - component_free (component); -} - -static void -destroy (GtkObject *object) -{ - EComponentRegistry *component_registry; - EComponentRegistryPrivate *priv; - - component_registry = E_COMPONENT_REGISTRY (object); - priv = component_registry->priv; - - bonobo_object_unref (BONOBO_OBJECT (priv->shell)); - - g_hash_table_foreach (priv->component_id_to_component, component_id_foreach_free, NULL); - g_hash_table_destroy (priv->component_id_to_component); - - g_free (priv); -} - - -static void -class_init (EComponentRegistryClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - parent_class = gtk_type_class (gtk_object_get_type ()); -} - - -static void -init (EComponentRegistry *component_registry) -{ - EComponentRegistryPrivate *priv; - - priv = g_new (EComponentRegistryPrivate, 1); - priv->shell = NULL; - priv->component_id_to_component = g_hash_table_new (g_str_hash, g_str_equal); - - component_registry->priv = priv; -} - - -void -e_component_registry_construct (EComponentRegistry *component_registry, - EShell *shell) -{ - EComponentRegistryPrivate *priv; - - g_return_if_fail (component_registry != NULL); - g_return_if_fail (E_IS_COMPONENT_REGISTRY (component_registry)); - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - - priv = component_registry->priv; - - bonobo_object_ref (BONOBO_OBJECT (shell)); - priv->shell = shell; -} - -EComponentRegistry * -e_component_registry_new (EShell *shell) -{ - EComponentRegistry *component_registry; - - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - component_registry = gtk_type_new (e_component_registry_get_type ()); - e_component_registry_construct (component_registry, shell); - - return component_registry; -} - - -gboolean -e_component_registry_register_component (EComponentRegistry *component_registry, - const char *id) -{ - g_return_val_if_fail (component_registry != NULL, FALSE); - g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), FALSE); - g_return_val_if_fail (id != NULL, FALSE); - - return register_component (component_registry, id); -} - - -static void -compose_id_list_foreach (void *key, - void *value, - void *data) -{ - GList **listp; - const char *id; - - listp = (GList **) data; - id = (const char *) key; - - *listp = g_list_prepend (*listp, g_strdup (id)); -} - -/** - * e_component_registry_get_id_list: - * @component_registry: - * - * Get the list of components registered. - * - * Return value: A GList of strings containining the IDs for all the registered - * components. The list must be freed by the caller when not used anymore. - **/ -GList * -e_component_registry_get_id_list (EComponentRegistry *component_registry) -{ - EComponentRegistryPrivate *priv; - GList *list; - - g_return_val_if_fail (component_registry != NULL, NULL); - g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), NULL); - - priv = component_registry->priv; - list = NULL; - - g_hash_table_foreach (priv->component_id_to_component, compose_id_list_foreach, &list); - - return list; -} - -/** - * e_component_registry_get_component_by_id: - * @component_registry: - * @id: The component's OAF ID - * - * Get the registered component client for the specified ID. If that component - * is not registered, return NULL. - * - * Return value: A pointer to the ShellComponentClient for that component. - **/ -EvolutionShellComponentClient * -e_component_registry_get_component_by_id (EComponentRegistry *component_registry, - const char *id) -{ - EComponentRegistryPrivate *priv; - const Component *component; - - g_return_val_if_fail (component_registry != NULL, NULL); - g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), NULL); - g_return_val_if_fail (id != NULL, NULL); - - priv = component_registry->priv; - - component = g_hash_table_lookup (priv->component_id_to_component, id); - if (component == NULL) - return NULL; - - return component->client; -} - - -E_MAKE_TYPE (e_component_registry, "EComponentRegistry", EComponentRegistry, - class_init, init, PARENT_TYPE) diff --git a/shell/e-component-registry.h b/shell/e-component-registry.h deleted file mode 100644 index 0a34413844..0000000000 --- a/shell/e-component-registry.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-component-registry.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_COMPONENT_REGISTRY_H__ -#define __E_COMPONENT_REGISTRY_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-shell.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_COMPONENT_REGISTRY (e_component_registry_get_type ()) -#define E_COMPONENT_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_COMPONENT_REGISTRY, EComponentRegistry)) -#define E_COMPONENT_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_COMPONENT_REGISTRY, EComponentRegistryClass)) -#define E_IS_COMPONENT_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY)) -#define E_IS_COMPONENT_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY)) - - -typedef struct _EComponentRegistry EComponentRegistry; -typedef struct _EComponentRegistryPrivate EComponentRegistryPrivate; -typedef struct _EComponentRegistryClass EComponentRegistryClass; - -struct _EComponentRegistry { - GtkObject parent; - - EComponentRegistryPrivate *priv; -}; - -struct _EComponentRegistryClass { - GtkObjectClass parent_class; -}; - - -GtkType e_component_registry_get_type (void); -void e_component_registry_construct (EComponentRegistry *component_registry, - EShell *shell); -EComponentRegistry *e_component_registry_new (EShell *shell); - -gboolean e_component_registry_register_component (EComponentRegistry *component_registry, - const char *id); - -GList *e_component_registry_get_id_list (EComponentRegistry *component_registry); - -EvolutionShellComponentClient *e_component_registry_get_component_by_id (EComponentRegistry *component_registry, - const char *id); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_COMPONENT_REGISTRY_H__ */ diff --git a/shell/e-corba-storage-registry.c b/shell/e-corba-storage-registry.c deleted file mode 100644 index c3b259bb71..0000000000 --- a/shell/e-corba-storage-registry.c +++ /dev/null @@ -1,246 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-corba-storage-registry.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "e-util/e-util.h" - -#include "e-corba-storage.h" - -#include "e-corba-storage-registry.h" - - -#define PARENT_TYPE BONOBO_OBJECT_TYPE -static BonoboObjectClass *parent_class = NULL; - -struct _ECorbaStorageRegistryPrivate { - EStorageSet *storage_set; -}; - - -/* CORBA interface implementation. */ - -static POA_Evolution_StorageRegistry__vepv storage_registry_vepv; - -static POA_Evolution_StorageRegistry * -create_servant (void) -{ - POA_Evolution_StorageRegistry *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_StorageRegistry *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &storage_registry_vepv; - - CORBA_exception_init (&ev); - - POA_Evolution_StorageRegistry__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - return servant; -} - -static Evolution_StorageListener -impl_StorageRegistry_register_storage (PortableServer_Servant servant, - const Evolution_Storage storage_interface, - const CORBA_char *name, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - ECorbaStorageRegistry *storage_registry; - ECorbaStorageRegistryPrivate *priv; - EStorage *storage; - Evolution_StorageListener listener_interface; - - g_print ("Shell: Registering storage -- %s\n", name); - - bonobo_object = bonobo_object_from_servant (servant); - storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object); - priv = storage_registry->priv; - - storage = e_corba_storage_new (storage_interface, name); - - if (! e_storage_set_add_storage (priv->storage_set, storage)) { - CORBA_exception_set (ev, - CORBA_USER_EXCEPTION, - ex_Evolution_StorageRegistry_Exists, - NULL); - return CORBA_OBJECT_NIL; - } - - gtk_object_unref (GTK_OBJECT (storage)); - - listener_interface = CORBA_Object_duplicate (e_corba_storage_get_StorageListener - (E_CORBA_STORAGE (storage)), ev); - - return listener_interface; -} - -static void -impl_StorageRegistry_unregister_storage (PortableServer_Servant servant, - const CORBA_char *name, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - ECorbaStorageRegistry *storage_registry; - ECorbaStorageRegistryPrivate *priv; - EStorage *storage; - - bonobo_object = bonobo_object_from_servant (servant); - storage_registry = E_CORBA_STORAGE_REGISTRY (bonobo_object); - priv = storage_registry->priv; - - storage = e_storage_set_get_storage (priv->storage_set, name); - if (storage == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_StorageRegistry_NotFound, - NULL); - return; - } - - /* FIXME: Yucky to get the storage by name and then remove it. */ - /* FIXME: Check failure. */ - e_storage_set_remove_storage (priv->storage_set, storage); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - ECorbaStorageRegistry *corba_storage_registry; - ECorbaStorageRegistryPrivate *priv; - - corba_storage_registry = E_CORBA_STORAGE_REGISTRY (object); - priv = corba_storage_registry->priv; - - if (priv->storage_set != NULL) - gtk_object_unref (GTK_OBJECT (priv->storage_set)); - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* Initialization. */ - -static void -corba_class_init (void) -{ - POA_Evolution_StorageRegistry__vepv *vepv; - POA_Evolution_StorageRegistry__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_StorageRegistry__epv, 1); - epv->register_storage = impl_StorageRegistry_register_storage; - epv->unregister_storage = impl_StorageRegistry_unregister_storage; - - vepv = &storage_registry_vepv; - vepv->_base_epv = base_epv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_StorageRegistry_epv = epv; -} - -static void -class_init (ECorbaStorageRegistryClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - parent_class = gtk_type_class (PARENT_TYPE); - - corba_class_init (); -} - -static void -init (ECorbaStorageRegistry *corba_storage_registry) -{ - ECorbaStorageRegistryPrivate *priv; - - priv = g_new (ECorbaStorageRegistryPrivate, 1); - priv->storage_set = NULL; - - corba_storage_registry->priv = priv; -} - - -void -e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry, - Evolution_StorageRegistry corba_object, - EStorageSet *storage_set) -{ - ECorbaStorageRegistryPrivate *priv; - - g_return_if_fail (corba_storage_registry != NULL); - g_return_if_fail (E_IS_CORBA_STORAGE_REGISTRY (corba_storage_registry)); - g_return_if_fail (corba_object != CORBA_OBJECT_NIL); - - bonobo_object_construct (BONOBO_OBJECT (corba_storage_registry), corba_object); - - priv = corba_storage_registry->priv; - - gtk_object_ref (GTK_OBJECT (storage_set)); - priv->storage_set = storage_set; -} - -ECorbaStorageRegistry * -e_corba_storage_registry_new (EStorageSet *storage_set) -{ - ECorbaStorageRegistry *corba_storage_registry; - POA_Evolution_StorageRegistry *servant; - Evolution_StorageRegistry corba_object; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - - servant = create_servant (); - if (servant == NULL) - return NULL; - - corba_storage_registry = gtk_type_new (e_corba_storage_registry_get_type ()); - - corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (corba_storage_registry), - servant); - - e_corba_storage_registry_construct (corba_storage_registry, corba_object, storage_set); - - return corba_storage_registry; -} - - -E_MAKE_TYPE (e_corba_storage_registry, "ECorbaStorageRegistry", ECorbaStorageRegistry, class_init, init, PARENT_TYPE) diff --git a/shell/e-corba-storage-registry.h b/shell/e-corba-storage-registry.h deleted file mode 100644 index baf689c551..0000000000 --- a/shell/e-corba-storage-registry.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-corba-storage-registry.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_CORBA_STORAGE_REGISTRY_H__ -#define __E_CORBA_STORAGE_REGISTRY_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" -#include "e-storage-set.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_CORBA_STORAGE_REGISTRY (e_corba_storage_registry_get_type ()) -#define E_CORBA_STORAGE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_STORAGE_REGISTRY, ECorbaStorageRegistry)) -#define E_CORBA_STORAGE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_STORAGE_REGISTRY, ECorbaStorageRegistryClass)) -#define E_IS_CORBA_STORAGE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_STORAGE_REGISTRY)) -#define E_IS_CORBA_STORAGE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_STORAGE_REGISTRY)) - - -typedef struct _ECorbaStorageRegistry ECorbaStorageRegistry; -typedef struct _ECorbaStorageRegistryPrivate ECorbaStorageRegistryPrivate; -typedef struct _ECorbaStorageRegistryClass ECorbaStorageRegistryClass; - -struct _ECorbaStorageRegistry { - BonoboObject parent; - - ECorbaStorageRegistryPrivate *priv; -}; - -struct _ECorbaStorageRegistryClass { - BonoboObjectClass parent_class; -}; - - -GtkType e_corba_storage_registry_get_type (void); -void e_corba_storage_registry_construct (ECorbaStorageRegistry *corba_storage_registry, - Evolution_StorageRegistry corba_object, - EStorageSet *storage_set); -ECorbaStorageRegistry *e_corba_storage_registry_new (EStorageSet *storage_set); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_CORBA_STORAGE_REGISTRY_H__ */ diff --git a/shell/e-corba-storage.c b/shell/e-corba-storage.c deleted file mode 100644 index b4320a4c52..0000000000 --- a/shell/e-corba-storage.c +++ /dev/null @@ -1,354 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-corba-storage.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-util/e-util.h" - -#include "Evolution.h" - -#include "e-corba-storage.h" - - -#define PARENT_TYPE E_TYPE_STORAGE -static EStorageClass *parent_class = NULL; - -typedef struct _StorageListenerServant StorageListenerServant; - -struct _ECorbaStoragePrivate { - char *name; - - Evolution_Storage storage_interface; - - /* The Evolution::StorageListener interface we expose. */ - - Evolution_StorageListener storage_listener_interface; - StorageListenerServant *storage_listener_servant; -}; - - -/* Implementation of the CORBA Evolution::StorageListener interface. */ - -static POA_Evolution_StorageListener__vepv storage_listener_vepv; - -struct _StorageListenerServant { - POA_Evolution_StorageListener servant; - EStorage *storage; -}; - -static StorageListenerServant * -storage_listener_servant_new (ECorbaStorage *corba_storage) -{ - StorageListenerServant *servant; - - servant = g_new0 (StorageListenerServant, 1); - - servant->servant.vepv = &storage_listener_vepv; - - gtk_object_ref (GTK_OBJECT (corba_storage)); - servant->storage = E_STORAGE (corba_storage); - - return servant; -} - -static void -storage_listener_servant_free (StorageListenerServant *servant) -{ - gtk_object_unref (GTK_OBJECT (servant->storage)); - - g_free (servant); -} - -#if 0 -static void -impl_StorageListener_destroy (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - /* FIXME */ -} -#endif - -static void -impl_StorageListener_new_folder (PortableServer_Servant servant, - const CORBA_char *path, - const Evolution_Folder *folder, - CORBA_Environment *ev) -{ - StorageListenerServant *storage_listener_servant; - EStorage *storage; - EFolder *e_folder; - - storage_listener_servant = (StorageListenerServant *) servant; - storage = storage_listener_servant->storage; - - e_folder = e_folder_new (folder->name, - folder->type, - folder->description); - - e_folder_set_physical_uri (e_folder, folder->physical_uri); - - if (! e_storage_new_folder (storage, path, e_folder)) { - g_print ("Cannot register folder -- %s %s\n", path, folder->name); - CORBA_exception_set (ev, - CORBA_USER_EXCEPTION, - ex_Evolution_StorageListener_Exists, - NULL); - gtk_object_unref (GTK_OBJECT (e_folder)); - } - - g_print ("Folder registered successfully -- %s %s\n", path, folder->name); -} - -static void -impl_StorageListener_removed_folder (PortableServer_Servant servant, - const CORBA_char *path, - CORBA_Environment *ev) -{ - StorageListenerServant *storage_listener_servant; - EStorage *storage; - - storage_listener_servant = (StorageListenerServant *) servant; - storage = storage_listener_servant->storage; - - if (! e_storage_removed_folder (storage, path)) - CORBA_exception_set (ev, - CORBA_USER_EXCEPTION, - ex_Evolution_StorageListener_NotFound, - NULL); -} - - -static gboolean -setup_storage_listener (ECorbaStorage *corba_storage) -{ - StorageListenerServant *servant; - ECorbaStoragePrivate *priv; - Evolution_StorageListener storage_listener_interface; - CORBA_Environment ev; - - priv = corba_storage->priv; - - servant = storage_listener_servant_new (corba_storage); - - CORBA_exception_init (&ev); - - POA_Evolution_StorageListener__init (servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - goto error; - - CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), servant, &ev)); - if (ev._major != CORBA_NO_EXCEPTION) - goto error; - - storage_listener_interface = PortableServer_POA_servant_to_reference (bonobo_poa (), - servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - goto error; - - priv->storage_listener_interface = storage_listener_interface; - priv->storage_listener_servant = servant; - - return TRUE; - - error: - storage_listener_servant_free (servant); - CORBA_exception_free (&ev); - return FALSE; -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - CORBA_Environment ev; - ECorbaStorage *corba_storage; - ECorbaStoragePrivate *priv; - - corba_storage = E_CORBA_STORAGE (object); - priv = corba_storage->priv; - - g_free (priv->name); - - CORBA_exception_init (&ev); - - if (priv->storage_interface != CORBA_OBJECT_NIL) { - Bonobo_Unknown_unref (priv->storage_interface, &ev); - CORBA_Object_release (priv->storage_interface, &ev); - } - - if (priv->storage_listener_interface != CORBA_OBJECT_NIL) - CORBA_Object_release (priv->storage_listener_interface, &ev); - - if (priv->storage_listener_servant != NULL) { - PortableServer_ObjectId *object_id; - - object_id = PortableServer_POA_servant_to_id (bonobo_poa (), priv->storage_listener_servant, - &ev); - PortableServer_POA_deactivate_object (bonobo_poa (), object_id, &ev); - - POA_Evolution_StorageListener__fini (priv->storage_listener_servant, &ev); - CORBA_free (object_id); - } - - CORBA_exception_free (&ev); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* EStorage methods. */ - -static const char * -get_name (EStorage *storage) -{ - ECorbaStorage *corba_storage; - ECorbaStoragePrivate *priv; - - corba_storage = E_CORBA_STORAGE (storage); - priv = corba_storage->priv; - - return priv->name; -} - - -static void -corba_class_init (void) -{ - POA_Evolution_StorageListener__vepv *vepv; - POA_Evolution_StorageListener__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_StorageListener__epv, 1); - epv->new_folder = impl_StorageListener_new_folder; - epv->removed_folder = impl_StorageListener_removed_folder; - - vepv = &storage_listener_vepv; - vepv->_base_epv = base_epv; - vepv->Evolution_StorageListener_epv = epv; -} - -static void -class_init (ECorbaStorageClass *klass) -{ - GtkObjectClass *object_class; - EStorageClass *storage_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - storage_class = E_STORAGE_CLASS (klass); - storage_class->get_name = get_name; - - corba_class_init (); - - parent_class = gtk_type_class (PARENT_TYPE); -} - -static void -init (ECorbaStorage *corba_storage) -{ - ECorbaStoragePrivate *priv; - - priv = g_new (ECorbaStoragePrivate, 1); - priv->name = NULL; - priv->storage_interface = CORBA_OBJECT_NIL; - - corba_storage->priv = priv; -} - - -/* FIXME: OK to have a boolean construct function? */ -void -e_corba_storage_construct (ECorbaStorage *corba_storage, - const Evolution_Storage storage_interface, - const char *name) -{ - ECorbaStoragePrivate *priv; - CORBA_Environment ev; - - g_return_if_fail (corba_storage != NULL); - g_return_if_fail (E_IS_CORBA_STORAGE (corba_storage)); - g_return_if_fail (storage_interface != CORBA_OBJECT_NIL); - g_return_if_fail (name != NULL); - - e_storage_construct (E_STORAGE (corba_storage)); - - priv = corba_storage->priv; - - priv->name = g_strdup (name); - - CORBA_exception_init (&ev); - - Bonobo_Unknown_ref (storage_interface, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_warning ("%s -- Cannot reference Bonobo object", __FUNCTION__); - } else { - priv->storage_interface = CORBA_Object_duplicate (storage_interface, &ev); - } - - CORBA_exception_free (&ev); - - setup_storage_listener (corba_storage); -} - -EStorage * -e_corba_storage_new (const Evolution_Storage storage_interface, - const char *name) -{ - EStorage *new; - - g_return_val_if_fail (storage_interface != CORBA_OBJECT_NIL, NULL); - g_return_val_if_fail (name != NULL, NULL); - - new = gtk_type_new (e_corba_storage_get_type ()); - - e_corba_storage_construct (E_CORBA_STORAGE (new), storage_interface, name); - - return new; -} - - -const Evolution_StorageListener -e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage) -{ - g_return_val_if_fail (corba_storage != NULL, NULL); - g_return_val_if_fail (E_IS_CORBA_STORAGE (corba_storage), NULL); - - return corba_storage->priv->storage_listener_interface; -} - - -E_MAKE_TYPE (e_corba_storage, "ECorbaStorage", ECorbaStorage, class_init, init, PARENT_TYPE) diff --git a/shell/e-corba-storage.h b/shell/e-corba-storage.h deleted file mode 100644 index 99ab23e97e..0000000000 --- a/shell/e-corba-storage.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-corba-storage.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_CORBA_STORAGE_H__ -#define __E_CORBA_STORAGE_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "e-storage.h" - -#include "Evolution.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_CORBA_STORAGE (e_corba_storage_get_type ()) -#define E_CORBA_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_CORBA_STORAGE, ECorbaStorage)) -#define E_CORBA_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_CORBA_STORAGE, ECorbaStorageClass)) -#define E_IS_CORBA_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_CORBA_STORAGE)) -#define E_IS_CORBA_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_CORBA_STORAGE)) - - -typedef struct _ECorbaStorage ECorbaStorage; -typedef struct _ECorbaStoragePrivate ECorbaStoragePrivate; -typedef struct _ECorbaStorageClass ECorbaStorageClass; - -struct _ECorbaStorage { - EStorage parent; - - ECorbaStoragePrivate *priv; -}; - -struct _ECorbaStorageClass { - EStorageClass parent_class; -}; - - -GtkType e_corba_storage_get_type (void); -void e_corba_storage_construct (ECorbaStorage *corba_storage, - const Evolution_Storage storage_interface, - const char *name); -EStorage *e_corba_storage_new (const Evolution_Storage storage_interface, - const char *name); - -/* FIXME: I don't like this call. */ -const Evolution_StorageListener e_corba_storage_get_StorageListener (ECorbaStorage *corba_storage); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_CORBA_STORAGE_H__ */ diff --git a/shell/e-folder-type-registry.c b/shell/e-folder-type-registry.c deleted file mode 100644 index 34fa5a0193..0000000000 --- a/shell/e-folder-type-registry.c +++ /dev/null @@ -1,367 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder-type-registry.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "e-util/e-util.h" - -#include "e-shell-utils.h" - -#include "e-folder-type-registry.h" - - -#define PARENT_TYPE GTK_TYPE_OBJECT -static GtkObjectClass *parent_class = NULL; - -struct _FolderType { - char *name; - char *icon_name; - - EvolutionShellComponentClient *handler; - - /* The icon, standard (48x48) and mini (16x16) versions. */ - GdkPixbuf *icon_pixbuf; - GdkPixbuf *mini_icon_pixbuf; -}; -typedef struct _FolderType FolderType; - -struct _EFolderTypeRegistryPrivate { - GHashTable *name_to_type; -}; - - -/* FolderType handling. */ - -static FolderType * -folder_type_new (const char *name, - const char *icon_name) -{ - FolderType *new; - char *icon_path; - - new = g_new (FolderType, 1); - - new->name = g_strdup (name); - new->icon_name = g_strdup (icon_name); - new->handler = NULL; - - icon_path = e_shell_get_icon_path (icon_name, FALSE); - if (icon_path == NULL) - new->icon_pixbuf = NULL; - else - new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path); - - g_free (icon_path); - - icon_path = e_shell_get_icon_path (icon_name, TRUE); - if (icon_path != NULL) { - new->mini_icon_pixbuf = gdk_pixbuf_new_from_file (icon_path); - } else { - if (new->icon_pixbuf != NULL) - new->mini_icon_pixbuf = gdk_pixbuf_ref (new->icon_pixbuf); - else - new->mini_icon_pixbuf = NULL; - } - - g_free (icon_path); - - return new; -} - -static void -folder_type_free (FolderType *folder_type) -{ - g_free (folder_type->name); - g_free (folder_type->icon_name); - - if (folder_type->icon_pixbuf != NULL) - gdk_pixbuf_unref (folder_type->icon_pixbuf); - if (folder_type->mini_icon_pixbuf != NULL) - gdk_pixbuf_unref (folder_type->mini_icon_pixbuf); - - if (folder_type->handler != NULL) - bonobo_object_unref (BONOBO_OBJECT (folder_type->handler)); - - g_free (folder_type); -} - -static FolderType * -get_folder_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name) -{ - EFolderTypeRegistryPrivate *priv; - - priv = folder_type_registry->priv; - - return g_hash_table_lookup (priv->name_to_type, type_name); -} - -static gboolean -register_folder_type (EFolderTypeRegistry *folder_type_registry, - const char *name, - const char *icon_name) -{ - EFolderTypeRegistryPrivate *priv; - FolderType *folder_type; - - priv = folder_type_registry->priv; - - /* Make sure we don't add the same type twice. */ - if (get_folder_type (folder_type_registry, name) != NULL) - return FALSE; - - folder_type = folder_type_new (name, icon_name); - g_hash_table_insert (priv->name_to_type, folder_type->name, folder_type); - - return TRUE; -} - -static gboolean -set_handler (EFolderTypeRegistry *folder_type_registry, - const char *name, - EvolutionShellComponentClient *handler) -{ - EFolderTypeRegistryPrivate *priv; - FolderType *folder_type; - - priv = folder_type_registry->priv; - - folder_type = get_folder_type (folder_type_registry, name); - if (folder_type == NULL) - return FALSE; - if (folder_type->handler != NULL) { - g_warning ("Folder type already has a handler -- %s", - folder_type->name); - return FALSE; - } - - bonobo_object_ref (BONOBO_OBJECT (handler)); - folder_type->handler = handler; - - return TRUE; -} - - -/* GtkObject methods. */ - -static void -hash_forall_free_folder_type (gpointer key, - gpointer value, - gpointer data) -{ - FolderType *folder_type; - - folder_type = (FolderType *) value; - folder_type_free (folder_type); -} - -static void -destroy (GtkObject *object) -{ - EFolderTypeRegistry *folder_type_registry; - EFolderTypeRegistryPrivate *priv; - - folder_type_registry = E_FOLDER_TYPE_REGISTRY (object); - priv = folder_type_registry->priv; - - g_hash_table_foreach (priv->name_to_type, - hash_forall_free_folder_type, NULL); - g_hash_table_destroy (priv->name_to_type); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EFolderTypeRegistryClass *class) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (class); - object_class->destroy = destroy; - - parent_class = gtk_type_class (gtk_object_get_type ()); -} - -static void -init (EFolderTypeRegistry *folder_type_registry) -{ - EFolderTypeRegistryPrivate *priv; - - priv = g_new (EFolderTypeRegistryPrivate, 1); - priv->name_to_type = g_hash_table_new (g_str_hash, g_str_equal); - - folder_type_registry->priv = priv; -} - - -void -e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry) -{ - g_return_if_fail (folder_type_registry != NULL); - g_return_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry)); - - GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder_type_registry), GTK_FLOATING); -} - -EFolderTypeRegistry * -e_folder_type_registry_new (void) -{ - EFolderTypeRegistry *new; - - new = gtk_type_new (e_folder_type_registry_get_type ()); - - e_folder_type_registry_construct (new); - - return new; -} - - -gboolean -e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name, - const char *icon_name) -{ - g_return_val_if_fail (folder_type_registry != NULL, FALSE); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE); - g_return_val_if_fail (type_name != NULL, FALSE); - g_return_val_if_fail (icon_name != NULL, FALSE); - - return register_folder_type (folder_type_registry, type_name, icon_name); -} - -gboolean -e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name, - EvolutionShellComponentClient *handler) -{ - g_return_val_if_fail (folder_type_registry != NULL, FALSE); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE); - g_return_val_if_fail (handler != NULL, FALSE); - g_return_val_if_fail (BONOBO_IS_OBJECT_CLIENT (handler), FALSE); - - return set_handler (folder_type_registry, type_name, handler); -} - - -static void -get_type_names_hash_forall (void *key, - void *value, - void *data) -{ - GList **type_name_list; - - type_name_list = (GList **) data; - - *type_name_list = g_list_prepend (*type_name_list, g_strdup ((const char *) key)); -} - -GList * -e_folder_type_registry_get_type_names (EFolderTypeRegistry *folder_type_registry) -{ - GList *type_name_list; - EFolderTypeRegistryPrivate *priv; - - g_return_val_if_fail (folder_type_registry != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); - - priv = folder_type_registry->priv; - - type_name_list = NULL; - g_hash_table_foreach (priv->name_to_type, get_type_names_hash_forall, &type_name_list); - - return type_name_list; -} - - -const char * -e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name) -{ - const FolderType *folder_type; - - g_return_val_if_fail (folder_type_registry != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); - g_return_val_if_fail (type_name != NULL, NULL); - - folder_type = get_folder_type (folder_type_registry, type_name); - if (folder_type == NULL) { - g_warning ("%s: Unknown type -- %s", __FUNCTION__, type_name); - return NULL; - } - - return folder_type->icon_name; -} - -GdkPixbuf * -e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name, - gboolean mini) -{ - const FolderType *folder_type; - - g_return_val_if_fail (folder_type_registry != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); - g_return_val_if_fail (type_name != NULL, NULL); - - folder_type = get_folder_type (folder_type_registry, type_name); - if (folder_type == NULL) { - g_warning ("%s: Unknown type -- %s", __FUNCTION__, type_name); - return NULL; - } - - if (mini) - return folder_type->mini_icon_pixbuf; - else - return folder_type->icon_pixbuf; -} - -EvolutionShellComponentClient * -e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name) -{ - const FolderType *folder_type; - - g_return_val_if_fail (folder_type_registry != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); - g_return_val_if_fail (type_name != NULL, NULL); - - folder_type = get_folder_type (folder_type_registry, type_name); - if (folder_type == NULL) { - g_warning ("%s: Unknown type -- %s", __FUNCTION__, type_name); - return NULL; - } - - return folder_type->handler; -} - - -E_MAKE_TYPE (e_folder_type_registry, "EFolderTypeRegistry", EFolderTypeRegistry, - class_init, init, PARENT_TYPE) diff --git a/shell/e-folder-type-registry.h b/shell/e-folder-type-registry.h deleted file mode 100644 index 6d832282aa..0000000000 --- a/shell/e-folder-type-registry.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder-type-registry.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_FOLDER_TYPE_REGISTRY_H_ -#define _E_FOLDER_TYPE_REGISTRY_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "evolution-shell-component-client.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_FOLDER_TYPE_REGISTRY (e_folder_type_registry_get_type ()) -#define E_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistry)) -#define E_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistryClass)) -#define E_IS_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY)) -#define E_IS_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY)) - - -typedef struct _EFolderTypeRegistry EFolderTypeRegistry; -typedef struct _EFolderTypeRegistryPrivate EFolderTypeRegistryPrivate; -typedef struct _EFolderTypeRegistryClass EFolderTypeRegistryClass; - -struct _EFolderTypeRegistry { - GtkObject parent; - - EFolderTypeRegistryPrivate *priv; -}; - -struct _EFolderTypeRegistryClass { - GtkObjectClass parent_class; -}; - - -GtkType e_folder_type_registry_get_type (void); -void e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry); -EFolderTypeRegistry *e_folder_type_registry_new (void); - -gboolean e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name, - const char *icon_name); -gboolean e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name, - EvolutionShellComponentClient *handler); - -GList *e_folder_type_registry_get_type_names (EFolderTypeRegistry *folder_type_registry); - -GdkPixbuf *e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name, - gboolean mini); -const char *e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name); -EvolutionShellComponentClient *e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry, - const char *type_name); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_FOLDER_TYPE_REGISTRY_H_ */ diff --git a/shell/e-folder.c b/shell/e-folder.c deleted file mode 100644 index 90bd886352..0000000000 --- a/shell/e-folder.c +++ /dev/null @@ -1,289 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "e-util/e-util.h" - -#include "e-folder.h" - - -#define PARENT_TYPE GTK_TYPE_OBJECT -static GtkObjectClass *parent_class = NULL; - -struct _EFolderPrivate { - char *name; - char *type; - char *description; - char *physical_uri; -}; - -#define EF_CLASS(obj) \ - E_FOLDER_CLASS (GTK_OBJECT (obj)->klass) - - -enum { - CHANGED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* EFolder methods. */ - -static gboolean -save_info (EFolder *folder) -{ - g_warning ("`%s' does not implement `EFolder::save_info()'", - gtk_type_name (GTK_OBJECT_TYPE (folder))); - return FALSE; -} - -static gboolean -load_info (EFolder *folder) -{ - g_warning ("`%s' does not implement `EFolder::load_info()'", - gtk_type_name (GTK_OBJECT_TYPE (folder))); - return FALSE; -} - -static gboolean -remove (EFolder *folder) -{ - g_warning ("`%s' does not implement `EFolder::remove()'", - gtk_type_name (GTK_OBJECT_TYPE (folder))); - return FALSE; -} - -static const char * -get_physical_uri (EFolder *folder) -{ - return folder->priv->physical_uri; -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EFolder *folder; - EFolderPrivate *priv; - - folder = E_FOLDER (object); - priv = folder->priv; - - g_free (priv->name); - g_free (priv->type); - g_free (priv->description); - g_free (priv->physical_uri); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EFolderClass *klass) -{ - GtkObjectClass *object_class; - - parent_class = gtk_type_class (gtk_object_get_type ()); - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - signals[CHANGED] = gtk_signal_new ("changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EFolderClass, changed), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); - - klass->save_info = save_info; - klass->load_info = load_info; - klass->remove = remove; - klass->get_physical_uri = get_physical_uri; -} - -static void -init (EFolder *folder) -{ - EFolderPrivate *priv; - - priv = g_new (EFolderPrivate, 1); - priv->type = NULL; - priv->name = NULL; - priv->description = NULL; - priv->physical_uri = NULL; - - folder->priv = priv; -} - - -void -e_folder_construct (EFolder *folder, - const char *name, - const char *type, - const char *description) -{ - EFolderPrivate *priv; - - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (name != NULL); - g_return_if_fail (type != NULL); - - GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder), GTK_FLOATING); - - priv = folder->priv; - - priv->name = g_strdup (name); - priv->type = g_strdup (type); - priv->description = g_strdup (description); -} - -EFolder * -e_folder_new (const char *name, - const char *type, - const char *description) -{ - EFolder *folder; - - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (type != NULL, NULL); - g_return_val_if_fail (description != NULL, NULL); - - folder = gtk_type_new (E_TYPE_FOLDER); - - e_folder_construct (folder, name, type, description); - - return folder; -} - - -const char * -e_folder_get_name (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->name; -} - -const char * -e_folder_get_type_string (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->type; -} - -const char * -e_folder_get_description (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->description; -} - - -void -e_folder_set_name (EFolder *folder, - const char *name) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (name != NULL); - - g_free (folder->priv->name); - folder->priv->name = g_strdup (name); - - gtk_signal_emit (GTK_OBJECT (folder), signals[CHANGED]); -} - -void -e_folder_set_type_string (EFolder *folder, - const char *type) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (type != NULL); - - g_free (folder->priv->type); - folder->priv->type = g_strdup (type); - - gtk_signal_emit (GTK_OBJECT (folder), signals[CHANGED]); -} - -void -e_folder_set_description (EFolder *folder, - const char *description) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (description != NULL); - - g_free (folder->priv->description); - folder->priv->description = g_strdup (description); - - gtk_signal_emit (GTK_OBJECT (folder), signals[CHANGED]); -} - -void -e_folder_set_physical_uri (EFolder *folder, - const char *physical_uri) -{ - g_return_if_fail (folder != NULL); - g_return_if_fail (E_IS_FOLDER (folder)); - g_return_if_fail (physical_uri != NULL); - - g_free (folder->priv->physical_uri); - folder->priv->physical_uri = g_strdup (physical_uri); - - gtk_signal_emit (GTK_OBJECT (folder), signals[CHANGED]); -} - - -const char * -e_folder_get_physical_uri (EFolder *folder) -{ - g_return_val_if_fail (folder != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER (folder), NULL); - - return folder->priv->physical_uri; -} - - -E_MAKE_TYPE (e_folder, "EFolder", EFolder, class_init, init, PARENT_TYPE) diff --git a/shell/e-folder.h b/shell/e-folder.h deleted file mode 100644 index d7bbd6ba9e..0000000000 --- a/shell/e-folder.h +++ /dev/null @@ -1,93 +0,0 @@ - /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-folder.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_FOLDER_H_ -#define _E_FOLDER_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_FOLDER (e_folder_get_type ()) -#define E_FOLDER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER, EFolder)) -#define E_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER, EFolderClass)) -#define E_IS_FOLDER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER)) -#define E_IS_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER)) - - -typedef struct _EFolder EFolder; -typedef struct _EFolderPrivate EFolderPrivate; -typedef struct _EFolderClass EFolderClass; - -struct _EFolder { - GtkObject parent; - - EFolderPrivate *priv; -}; - -struct _EFolderClass { - GtkObjectClass parent_class; - - /* Virtual methods. */ - gboolean (* save_info) (EFolder *folder); - gboolean (* load_info) (EFolder *folder); - gboolean (* remove) (EFolder *folder); - const char * (* get_physical_uri) (EFolder *folder); - - /* Signals. */ - void (* changed) (EFolder *folder); -}; - - -GtkType e_folder_get_type (void); -void e_folder_construct (EFolder *folder, - const char *name, - const char *type, - const char *description); -EFolder *e_folder_new (const char *name, - const char *type, - const char *description); - -const char *e_folder_get_physical_uri (EFolder *folder); - -const char *e_folder_get_name (EFolder *folder); -const char *e_folder_get_type_string (EFolder *folder); -const char *e_folder_get_description (EFolder *folder); - -void e_folder_set_name (EFolder *folder, const char *name); -void e_folder_set_type_string (EFolder *folder, const char *type); -void e_folder_set_description (EFolder *folder, const char *description); -void e_folder_set_physical_uri (EFolder *folder, const char *physical_uri); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_FOLDER_H_ */ diff --git a/shell/e-local-folder.c b/shell/e-local-folder.c deleted file mode 100644 index 80cee7d7bc..0000000000 --- a/shell/e-local-folder.c +++ /dev/null @@ -1,261 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-local-folder.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -/* The metafile goes like this: - - - - mail - This is the folder where I store mail from my gf - http://www.somewhere.net - - - FIXME: Do we want to use a namespace for this? - FIXME: Do we want to have an internationalized description? - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "e-util/e-util.h" -#include "e-util/e-xml-utils.h" - -#include "e-local-folder.h" - - -#define PARENT_TYPE E_TYPE_FOLDER -static EFolderClass *parent_class = NULL; - -#define URI_PREFIX "file://" -#define URI_PREFIX_LEN 7 - -#define METADATA_FILE_NAME "folder-metadata.xml" -#define METADATA_FILE_NAME_LEN 19 - -struct _ELocalFolderPrivate { - int dummy; -}; - - -static char * -get_string_value (xmlNode *node, - const char *name) -{ - xmlNode *p; - xmlChar *xml_string; - char *retval; - - p = e_xml_get_child_by_name (node, (xmlChar *) name); - if (p == NULL) - return NULL; - - p = e_xml_get_child_by_name (p, (xmlChar *) "text"); - if (p == NULL) - return NULL; - - xml_string = xmlNodeListGetString (node->doc, p, 1); - retval = g_strdup ((char *) xml_string); - xmlFree (xml_string); - - return retval; -} - -static gboolean -construct_loading_metadata (ELocalFolder *local_folder, - const char *path) -{ - EFolder *folder; - xmlDoc *doc; - xmlNode *root; - char *type; - char *description; - char *metadata_path; - char *physical_uri; - - folder = E_FOLDER (local_folder); - - metadata_path = g_concat_dir_and_file (path, METADATA_FILE_NAME); - - doc = xmlParseFile (metadata_path); - if (doc == NULL) { - g_free (metadata_path); - return FALSE; - } - - root = xmlDocGetRootElement (doc); - if (root == NULL || strcmp (root->name, "efolder") != 0) { - g_free (metadata_path); - xmlFreeDoc (doc); - return FALSE; - } - - type = get_string_value (root, "type"); - description = get_string_value (root, "description"); - - e_folder_construct (folder, g_basename (path), type, description); - - g_free (type); - g_free (description); - - xmlFreeDoc (doc); - - physical_uri = g_strconcat (URI_PREFIX, path, NULL); - e_folder_set_physical_uri (folder, physical_uri); - g_free (physical_uri); - - g_free (metadata_path); - - return TRUE; -} - -static gboolean -save_metadata (ELocalFolder *local_folder) -{ - EFolder *folder; - xmlDoc *doc; - xmlNode *root; - const char *physical_directory; - char *physical_path; - - folder = E_FOLDER (local_folder); - - doc = xmlNewDoc ((xmlChar *) "1.0"); - root = xmlNewDocNode (doc, NULL, (xmlChar *) "efolder", NULL); - xmlDocSetRootElement (doc, root); - - xmlNewChild (root, NULL, (xmlChar *) "type", - (xmlChar *) e_folder_get_type_string (folder)); - - if (e_folder_get_description (folder) != NULL) - xmlNewChild (root, NULL, (xmlChar *) "description", - (xmlChar *) e_folder_get_description (folder)); - - physical_directory = e_folder_get_physical_uri (folder) + URI_PREFIX_LEN - 1; - physical_path = g_concat_dir_and_file (physical_directory, METADATA_FILE_NAME); - - if (xmlSaveFile (physical_path, doc) < 0) { - unlink (physical_path); - g_free (physical_path); - xmlFreeDoc (doc); - return FALSE; - } - - g_free (physical_path); - - xmlFreeDoc (doc); - return TRUE; -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - /* No ELocalFolder-specific data to free. */ - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (ELocalFolderClass *klass) -{ - GtkObjectClass *object_class; - - parent_class = gtk_type_class (e_folder_get_type ()); - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; -} - -static void -init (ELocalFolder *local_folder) -{ -} - - -void -e_local_folder_construct (ELocalFolder *local_folder, - const char *name, - const char *type, - const char *description) -{ - g_return_if_fail (local_folder != NULL); - g_return_if_fail (E_IS_LOCAL_FOLDER (local_folder)); - g_return_if_fail (name != NULL); - g_return_if_fail (type != NULL); - - e_folder_construct (E_FOLDER (local_folder), name, type, description); -} - -EFolder * -e_local_folder_new (const char *name, - const char *type, - const char *description) -{ - ELocalFolder *local_folder; - - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (type != NULL, NULL); - - local_folder = gtk_type_new (e_local_folder_get_type ()); - - e_local_folder_construct (local_folder, name, type, description); - - return E_FOLDER (local_folder); -} - -EFolder * -e_local_folder_new_from_path (const char *path) -{ - EFolder *folder; - - g_return_val_if_fail (g_path_is_absolute (path), NULL); - - folder = gtk_type_new (e_local_folder_get_type ()); - - if (! construct_loading_metadata (E_LOCAL_FOLDER (folder), path)) { - gtk_object_unref (GTK_OBJECT (folder)); - return NULL; - } - - return folder; -} - -gboolean -e_local_folder_save (ELocalFolder *local_folder) -{ - g_return_val_if_fail (local_folder != NULL, FALSE); - g_return_val_if_fail (E_IS_LOCAL_FOLDER (local_folder), FALSE); - g_return_val_if_fail (e_folder_get_physical_uri (E_FOLDER (local_folder)) != NULL, FALSE); - - return save_metadata (local_folder); -} - - -E_MAKE_TYPE (e_local_folder, "ELocalFolder", ELocalFolder, class_init, init, PARENT_TYPE) diff --git a/shell/e-local-folder.h b/shell/e-local-folder.h deleted file mode 100644 index aa9e79a990..0000000000 --- a/shell/e-local-folder.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-local-folder.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_LOCAL_FOLDER_H_ -#define _E_LOCAL_FOLDER_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-folder.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_LOCAL_FOLDER (e_local_folder_get_type ()) -#define E_LOCAL_FOLDER(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LOCAL_FOLDER, ELocalFolder)) -#define E_LOCAL_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LOCAL_FOLDER, ELocalFolderClass)) -#define E_IS_LOCAL_FOLDER(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LOCAL_FOLDER)) -#define E_IS_LOCAL_FOLDER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_LOCAL_FOLDER)) - -typedef struct _ELocalFolder ELocalFolder; -typedef struct _ELocalFolderClass ELocalFolderClass; - -struct _ELocalFolder { - EFolder parent; -}; - -struct _ELocalFolderClass { - EFolderClass parent_class; -}; - - -GtkType e_local_folder_get_type (void); -void e_local_folder_construct (ELocalFolder *local_folder, - const char *name, - const char *type, - const char *description); -EFolder *e_local_folder_new (const char *name, - const char *type, - const char *description); -EFolder *e_local_folder_new_from_path (const char *physical_path); -gboolean e_local_folder_save (ELocalFolder *local_folder); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_LOCAL_FOLDER_H__ */ diff --git a/shell/e-local-storage.c b/shell/e-local-storage.c deleted file mode 100644 index 93234b4741..0000000000 --- a/shell/e-local-storage.c +++ /dev/null @@ -1,589 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-local-storage.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -/* FIXMEs: - * - * - If we have `.' or `..' as path elements, we lose. - * - * - If the LocalStorage is destroyed and an async operation on a shell component is - * pending, we get a callback on a bogus object. We need support for cancelling - * operations on the shell component. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include -#include - -#include - -#include "e-util/e-util.h" -#include "e-local-folder.h" - -#include "e-local-storage.h" - - -#define PARENT_TYPE E_TYPE_STORAGE -static EStorageClass *parent_class = NULL; - -#define SUBFOLDER_DIR_NAME "subfolders" -#define SUBFOLDER_DIR_NAME_LEN 10 - -struct _ELocalStoragePrivate { - EFolderTypeRegistry *folder_type_registry; - char *base_path; -}; - - -/* Utility functions. */ - -/* Translate a storage path into a physical path on the file system. */ -static char * -get_physical_path (ELocalStorage *local_storage, - const char *path) -{ - EStorage *storage; - ELocalStoragePrivate *priv; - const char *p, *newp; - char *dp; - char *real_path; - int real_path_len; - int base_path_len; - - storage = E_STORAGE (local_storage); - priv = local_storage->priv; - - /* @path is always absolute, so it starts with a slash. The base class should - make sure this is the case; if not, it's broken. */ - g_assert (*path == G_DIR_SEPARATOR); - path++; - - /* Calculate the length of the real path. */ - - real_path_len = strlen (path); - real_path_len++; /* For the ending zero. */ - - base_path_len = strlen (priv->base_path); - real_path_len += base_path_len; - real_path_len++; /* For the separating slash. */ - - /* Take account for the fact that we need to translate every separator into - `subfolders/'. */ - p = path; - while (1) { - newp = strchr (p, G_DIR_SEPARATOR); - if (newp == NULL) - break; - - real_path_len += SUBFOLDER_DIR_NAME_LEN; - real_path_len++; /* For the separating slash. */ - - /* Skip consecutive slashes. */ - while (*newp == G_DIR_SEPARATOR) - newp++; - - p = newp; - }; - - real_path = g_malloc (real_path_len); - dp = real_path; - - memcpy (dp, priv->base_path, base_path_len); - dp += base_path_len; - *(dp++) = G_DIR_SEPARATOR; - - /* Copy the mangled path. */ - p = path; - while (1) { - newp = strchr (p, G_DIR_SEPARATOR); - if (newp == NULL) { - strcpy (dp, p); - break; - } - - memcpy (dp, p, newp - p + 1); /* `+ 1' to copy the slash too. */ - dp += newp - p + 1; - - memcpy (dp, SUBFOLDER_DIR_NAME, SUBFOLDER_DIR_NAME_LEN); - dp += SUBFOLDER_DIR_NAME_LEN; - - *(dp++) = G_DIR_SEPARATOR; - - /* Skip consecutive slashes. */ - while (*newp == G_DIR_SEPARATOR) - newp++; - - p = newp; - } - - return real_path; -} - -static gboolean -load_folders (ELocalStorage *local_storage, - const char *parent_path, - const char *path, - const char *physical_path) -{ - DIR *dir; - char *subfolder_directory_path; - - if (parent_path == NULL) { - /* On the top level, we don't have any folders and, consequently, no - subfolder directory. */ - - subfolder_directory_path = g_strdup (physical_path); - } else { - EFolder *folder; - - /* Otherwise, we have to load the corresponding folder. */ - - folder = e_local_folder_new_from_path (physical_path); - if (folder == NULL) - return FALSE; - - e_storage_new_folder (E_STORAGE (local_storage), parent_path, folder); - - subfolder_directory_path = g_concat_dir_and_file (physical_path, SUBFOLDER_DIR_NAME); - } - - /* Now scan the subfolders and load them. The subfolders are represented by - directories under the "SUBFOLDER_DIR_NAME" directory. */ - - dir = opendir (subfolder_directory_path); - - if (dir == NULL) { - g_free (subfolder_directory_path); - return FALSE; - } - - while (1) { - struct stat file_stat; - struct dirent *dirent; - char *file_path; - char *new_path; - - dirent = readdir (dir); - if (dirent == NULL) - break; - - if (strcmp (dirent->d_name, ".") == 0 || strcmp (dirent->d_name, "..") == 0) - continue; - - file_path = g_concat_dir_and_file (subfolder_directory_path, - dirent->d_name); - - if (stat (file_path, &file_stat) < 0) { - g_free (file_path); - continue; - } - if (! S_ISDIR (file_stat.st_mode)) { - g_free (file_path); - continue; - } - - new_path = g_concat_dir_and_file (path, dirent->d_name); - - load_folders (local_storage, path, new_path, file_path); - - g_free (file_path); - g_free (new_path); - } - - closedir (dir); - g_free (subfolder_directory_path); - - return TRUE; -} - -static gboolean -load_all_folders (ELocalStorage *local_storage) -{ - const char *base_path; - - base_path = e_local_storage_get_base_path (local_storage); - - return load_folders (local_storage, NULL, G_DIR_SEPARATOR_S, base_path); -} - -static EStorageResult -errno_to_storage_result (void) -{ - EStorageResult storage_result; - - switch (errno) { - case EACCES: - case EROFS: - storage_result = E_STORAGE_PERMISSIONDENIED; - break; - case EEXIST: - storage_result = E_STORAGE_EXISTS; - break; - case ENOSPC: - storage_result = E_STORAGE_NOSPACE; - break; - default: - storage_result = E_STORAGE_GENERICERROR; - } - - return storage_result; -} - -static EStorageResult -shell_component_result_to_storage_result (EvolutionShellComponentResult result) -{ - /* FIXME: Maybe we need better mapping here. */ - switch (result) { - case EVOLUTION_SHELL_COMPONENT_OK: - return E_STORAGE_OK; - case EVOLUTION_SHELL_COMPONENT_NOTFOUND: - return E_STORAGE_NOTFOUND; - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE: - return E_STORAGE_UNSUPPORTEDTYPE; - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION: - return E_STORAGE_UNSUPPORTEDOPERATION; - case EVOLUTION_SHELL_COMPONENT_EXISTS: - return E_STORAGE_EXISTS; - case EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED: - return E_STORAGE_PERMISSIONDENIED; - case EVOLUTION_SHELL_COMPONENT_ALREADYOWNED: - case EVOLUTION_SHELL_COMPONENT_BUSY: - case EVOLUTION_SHELL_COMPONENT_CORBAERROR: - case EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS: - case EVOLUTION_SHELL_COMPONENT_INTERNALERROR: - case EVOLUTION_SHELL_COMPONENT_INTERRUPTED: - case EVOLUTION_SHELL_COMPONENT_INVALIDARG: - case EVOLUTION_SHELL_COMPONENT_INVALIDURI: - case EVOLUTION_SHELL_COMPONENT_NOSPACE: - case EVOLUTION_SHELL_COMPONENT_NOTOWNED: - case EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR: - default: - return E_STORAGE_GENERICERROR; - } -} - - -/* Callbacks for the async methods invoked on the `Evolution::ShellComponent's. */ - -struct _AsyncCreateFolderCallbackData { - EStorage *storage; - - char *parent_path; - char *name; - char *type; - char *description; - char *physical_uri; - char *physical_path; - - EStorageResultCallback callback; - void *callback_data; -}; -typedef struct _AsyncCreateFolderCallbackData AsyncCreateFolderCallbackData; - -static void -component_async_create_folder_callback (EvolutionShellComponentClient *shell_component_client, - EvolutionShellComponentResult result, - void *data) -{ - AsyncCreateFolderCallbackData *callback_data; - - callback_data = (AsyncCreateFolderCallbackData *) data; - - if (result != EVOLUTION_SHELL_COMPONENT_OK) { - /* XXX: This assumes the component won't leave any files in the directory. */ - rmdir (callback_data->physical_path); - } else { - EFolder *folder; - - folder = e_local_folder_new (callback_data->name, - callback_data->type, - callback_data->description); - - e_folder_set_physical_uri (folder, callback_data->physical_uri); - - if (e_local_folder_save (E_LOCAL_FOLDER (folder))) { - e_storage_new_folder (callback_data->storage, - callback_data->parent_path, - folder); - } else { - rmdir (callback_data->physical_path); - gtk_object_unref (GTK_OBJECT (folder)); - result = E_STORAGE_IOERROR; - } - } - - bonobo_object_unref (BONOBO_OBJECT (shell_component_client)); - - (* callback_data->callback) (callback_data->storage, - shell_component_result_to_storage_result (result), - callback_data->callback_data); - - g_free (callback_data->parent_path); - g_free (callback_data->name); - g_free (callback_data->type); - g_free (callback_data->description); - g_free (callback_data->physical_uri); - g_free (callback_data->physical_path); - g_free (callback_data); -} - - -/* GtkObject methods. */ - -static void -impl_destroy (GtkObject *object) -{ - ELocalStorage *local_storage; - ELocalStoragePrivate *priv; - - local_storage = E_LOCAL_STORAGE (object); - priv = local_storage->priv; - - g_free (priv->base_path); - - if (priv->folder_type_registry != NULL) - gtk_object_unref (GTK_OBJECT (priv->folder_type_registry)); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* EStorage methods. */ - -static const char * -impl_get_name (EStorage *storage) -{ - /* FIXME this sucks. */ - return "local"; -} - -static void -impl_async_create_folder (EStorage *storage, - const char *path, - const char *type, - const char *description, - EStorageResultCallback callback, - void *data) -{ - ELocalStorage *local_storage; - ELocalStoragePrivate *priv; - EvolutionShellComponentClient *component_client; - const char *folder_name; - AsyncCreateFolderCallbackData *callback_data; - char *physical_path; - char *physical_uri; - char *parent_path; - - local_storage = E_LOCAL_STORAGE (storage); - priv = local_storage->priv; - - component_client = e_folder_type_registry_get_handler_for_type (priv->folder_type_registry, - type); - if (component_client == NULL) { - (* callback) (storage, E_STORAGE_INVALIDTYPE, data); - return; - } - - g_assert (g_path_is_absolute (path)); - - folder_name = g_basename (path); - if (folder_name == path + 1) { - /* We want a direct child of the root, so we don't need to create a - `subfolders' directory. */ - physical_path = get_physical_path (local_storage, path); - parent_path = g_strdup (G_DIR_SEPARATOR_S); - } else { - char *parent_physical_path; - char *subfolders_directory_physical_path; - - /* Create the `subfolders' subdirectory under the parent. */ - - parent_path = g_strndup (path, folder_name - path - 1); - parent_physical_path = get_physical_path (local_storage, parent_path); - subfolders_directory_physical_path = g_concat_dir_and_file (parent_physical_path, - SUBFOLDER_DIR_NAME); - - if (! g_file_exists (subfolders_directory_physical_path) - && mkdir (subfolders_directory_physical_path, 0700) == -1) { - g_free (parent_path); - g_free (subfolders_directory_physical_path); - g_free (parent_physical_path); - - (* callback) (storage, errno_to_storage_result (), data); - return; - } - - physical_path = g_concat_dir_and_file (subfolders_directory_physical_path, - folder_name); - g_free (subfolders_directory_physical_path); - g_free (parent_physical_path); - } - - /* Create the directory that holds the folder. */ - - if (mkdir (physical_path, 0700) == -1) { - g_free (physical_path); - (* callback) (storage, errno_to_storage_result (), data); - return; - } - - /* Finally tell the component to do the job of creating the physical files in - it. */ - /* FIXME: We should put the operations on a queue so that we can cancel them when - the ELocalStorage is destroyed. */ - - physical_uri = g_strconcat ("file://", physical_path, NULL); - - callback_data = g_new (AsyncCreateFolderCallbackData, 1); - callback_data->storage = storage; - callback_data->parent_path = parent_path; - callback_data->name = g_strdup (folder_name); - callback_data->type = g_strdup (type); - callback_data->description = g_strdup (description); - callback_data->physical_uri = physical_uri; - callback_data->physical_path = physical_path; - callback_data->callback = callback; - callback_data->callback_data = data; - - bonobo_object_ref (BONOBO_OBJECT (component_client)); - - evolution_shell_component_client_async_create_folder (component_client, - physical_path, - type, - component_async_create_folder_callback, - callback_data); -} - -static void -impl_async_remove_folder (EStorage *storage, - const char *path, - EStorageResultCallback callback, - void *data) -{ - ELocalStorage *local_storage; - - local_storage = E_LOCAL_STORAGE (storage); -} - - -/* Initialization. */ - -static void -class_init (ELocalStorageClass *class) -{ - EStorageClass *storage_class; - GtkObjectClass *object_class; - - parent_class = gtk_type_class (e_storage_get_type ()); - object_class = GTK_OBJECT_CLASS (class); - storage_class = E_STORAGE_CLASS (class); - - object_class->destroy = impl_destroy; - - storage_class->get_name = impl_get_name; - storage_class->async_create_folder = impl_async_create_folder; - storage_class->async_remove_folder = impl_async_remove_folder; -} - -static void -init (ELocalStorage *local_storage) -{ - ELocalStoragePrivate *priv; - - priv = g_new (ELocalStoragePrivate, 1); - - priv->base_path = NULL; - priv->folder_type_registry = NULL; - - local_storage->priv = priv; -} - - -static gboolean -construct (ELocalStorage *local_storage, - EFolderTypeRegistry *folder_type_registry, - const char *base_path) -{ - ELocalStoragePrivate *priv; - int base_path_len; - - e_storage_construct (E_STORAGE (local_storage)); - - priv = local_storage->priv; - - base_path_len = strlen (base_path); - while (base_path_len > 0 && base_path[base_path_len - 1] == G_DIR_SEPARATOR) - base_path_len--; - - g_return_val_if_fail (base_path_len != 0, FALSE); - - g_assert (priv->folder_type_registry == NULL); - gtk_object_ref (GTK_OBJECT (folder_type_registry)); - priv->folder_type_registry = folder_type_registry; - - g_assert (priv->base_path == NULL); - priv->base_path = g_strndup (base_path, base_path_len); - - return load_all_folders (local_storage); -} - -EStorage * -e_local_storage_open (EFolderTypeRegistry *folder_type_registry, - const char *base_path) -{ - EStorage *new; - - g_return_val_if_fail (folder_type_registry != NULL, NULL); - g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL); - g_return_val_if_fail (base_path != NULL, NULL); - - new = gtk_type_new (e_local_storage_get_type ()); - - if (! construct (E_LOCAL_STORAGE (new), folder_type_registry, base_path)) { - gtk_object_unref (GTK_OBJECT (new)); - return NULL; - } - - return new; -} - -const char * -e_local_storage_get_base_path (ELocalStorage *local_storage) -{ - g_return_val_if_fail (local_storage != NULL, NULL); - g_return_val_if_fail (E_IS_LOCAL_STORAGE (local_storage), NULL); - - return local_storage->priv->base_path; -} - - -E_MAKE_TYPE (e_local_storage, "ELocalStorage", ELocalStorage, class_init, init, PARENT_TYPE) diff --git a/shell/e-local-storage.h b/shell/e-local-storage.h deleted file mode 100644 index 14a48cbdd4..0000000000 --- a/shell/e-local-storage.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-local-storage.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_LOCAL_STORAGE_H_ -#define _E_LOCAL_STORAGE_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "e-folder-type-registry.h" -#include "e-storage.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_LOCAL_STORAGE (e_local_storage_get_type ()) -#define E_LOCAL_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_LOCAL_STORAGE, ELocalStorage)) -#define E_LOCAL_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_LOCAL_STORAGE, ELocalStorageClass)) -#define E_IS_LOCAL_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_LOCAL_STORAGE)) -#define E_IS_LOCAL_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_LOCAL_STORAGE)) - -typedef struct _ELocalStorage ELocalStorage; -typedef struct _ELocalStoragePrivate ELocalStoragePrivate; -typedef struct _ELocalStorageClass ELocalStorageClass; - -struct _ELocalStorage { - EStorage parent; - - ELocalStoragePrivate *priv; -}; - -struct _ELocalStorageClass { - EStorageClass parent_class; -}; - - -GtkType e_local_storage_get_type (void); -EStorage *e_local_storage_open (EFolderTypeRegistry *folder_type_registry, - const char *base_path); -const char *e_local_storage_get_base_path (ELocalStorage *storage); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_LOCAL_STORAGE_H__ */ diff --git a/shell/e-setup.c b/shell/e-setup.c deleted file mode 100644 index 3393247f35..0000000000 --- a/shell/e-setup.c +++ /dev/null @@ -1,144 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-setup.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -/* This needs to be a lot better. */ - -#include -#include - -#include -#include - -#include "e-util/e-gui-utils.h" - -#include "e-setup.h" - - -static gboolean -copy_default_stuff (const char *evolution_directory) -{ - GtkWidget *dialog; - GtkWidget *label1; - GtkWidget *label2; - GtkWidget *label3; - gboolean retval; - char *command; - int result; - - dialog = gnome_dialog_new (_("Evolution installation"), - GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, - NULL); - - label1 = gtk_label_new (_("This seems to be the first time you run Evolution.")); - label2 = gtk_label_new (_("Please click \"OK\" to install the Evolution user files under")); - label3 = gtk_label_new (evolution_directory); - - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), label1, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), label2, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), label3, TRUE, TRUE, 0); - - gtk_widget_show (label1); - gtk_widget_show (label2); - gtk_widget_show (label3); - - result = gnome_dialog_run_and_close (GNOME_DIALOG (dialog)); - if (result != 0) - return FALSE; - - if (mkdir (evolution_directory, 0700)) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Cannot create the directory\n%s\nError: %s"), - evolution_directory, - g_strerror (errno)); - return FALSE; - } - - command = g_strconcat ("cp -r ", - EVOLUTION_DATADIR, - "/evolution/default_user/* ", - evolution_directory, - NULL); - - if (system (command) != 0) { - /* FIXME: Give more help. */ - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Cannot copy files into\n`%s'."), evolution_directory); - retval = FALSE; - } else { - e_notice (NULL, GNOME_MESSAGE_BOX_INFO, - _("Evolution files successfully installed.")); - retval = TRUE; - } - - g_free (command); - - return retval; -} - - -gboolean -e_setup (const char *evolution_directory) -{ - struct stat statinfo; - char *file; - - if (stat (evolution_directory, &statinfo) != 0) - return copy_default_stuff (evolution_directory); - - if (! S_ISDIR (statinfo.st_mode)) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("The file `%s' is not a directory.\n" - "Please move it in order to allow installation\n" - "of the Evolution user files.")); - return FALSE; - } - - /* Make sure this is really our directory, not an Evolution - * build tree or something like that. - */ - file = g_strdup_printf ("%s/shortcuts.xml", evolution_directory); - if (stat (file, &statinfo) != 0) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("The directory `%s' exists but is not the\n" - "Evolution directory. Please move it in order\n" - "to allow installation of the Evolution user " - "files."), evolution_directory); - g_free (file); - return FALSE; - } - g_free (file); - - /* If the user has an old-style config file, replace it with - * the new-style config directory. FIXME: This should be - * temporary. - */ - file = g_strdup_printf ("%s/config", evolution_directory); - if (stat (file, &statinfo) == 0 && ! S_ISDIR (statinfo.st_mode)) { - char *old = g_strdup_printf ("%s.old", file); - rename (file, old); - mkdir (file, 0700); - g_free (old); - } - g_free (file); - - return TRUE; -} diff --git a/shell/e-setup.h b/shell/e-setup.h deleted file mode 100644 index a69d216b94..0000000000 --- a/shell/e-setup.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-setup.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_SETUP_H -#define _E_SETUP_H - -#include - -gboolean e_setup (const char *evolution_directory); - -#endif /* _E_SETUP_H */ diff --git a/shell/e-shell-constants.h b/shell/e-shell-constants.h deleted file mode 100644 index 70986144d0..0000000000 --- a/shell/e-shell-constants.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-utils.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef E_SHELL_CONSTANTS_H -#define E_SHELL_CONSTANTS_H - -#define E_SHELL_URI_PREFIX "evolution:" -#define E_SHELL_URI_PREFIX_LEN 10 - -#define E_SHELL_MINI_ICON_SUFFIX "-mini" -#define E_SHELL_MINI_ICON_SUFFIX_LEN 5 - -#define E_SHELL_ICON_SIZE 48 -#define E_SHELL_MINI_ICON_SIZE 16 - -#endif diff --git a/shell/e-shell-folder-creation-dialog.c b/shell/e-shell-folder-creation-dialog.c deleted file mode 100644 index e793b2ccff..0000000000 --- a/shell/e-shell-folder-creation-dialog.c +++ /dev/null @@ -1,398 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "e-util/e-gui-utils.h" -#include "e-util/e-util.h" - -#include "widgets/misc/e-scroll-frame.h" - -#include "e-storage-set.h" -#include "e-storage-set-view.h" - -#include "e-shell-folder-creation-dialog.h" - - -#define GLADE_FILE_NAME EVOLUTION_GLADEDIR "/e-shell-folder-creation-dialog.glade" - - -/* Data for the callbacks. */ -struct _DialogData { - GtkWidget *dialog; - EShell *shell; - GtkWidget *folder_name_entry; - GtkWidget *storage_set_view; - GtkWidget *folder_type_option_menu; - GList *folder_types; -}; -typedef struct _DialogData DialogData; - -static void -dialog_data_destroy (DialogData *dialog_data) -{ - e_free_string_list (dialog_data->folder_types); - g_free (dialog_data); -} - - -/* Callback for the asynchronous folder creation function. */ - -static void -async_create_cb (EStorage *storage, - EStorageResult result, - void *data) -{ - DialogData *dialog_data; - - dialog_data = (DialogData *) data; - - if (result == E_STORAGE_OK) { - gtk_widget_destroy (dialog_data->dialog); - return; - } - - e_notice (GTK_WINDOW (dialog_data->dialog), GNOME_MESSAGE_BOX_ERROR, - _("Cannot create the specified folder:\n%s"), - e_storage_result_to_string (result)); -} - - -/* Sanity check for the user-specified folder name. */ -/* FIXME in the future we would like not to have the `G_DIR_SEPARATOR' limitation. */ -static gboolean -entry_name_is_valid (GtkEntry *entry) -{ - const char *name; - - name = gtk_entry_get_text (entry); - - if (name == NULL || *name == '\0') - return FALSE; - - if (strchr (name, G_DIR_SEPARATOR) != NULL) - return FALSE; - - if (strcmp (name, ".") == 0 || strcmp (name, "..") == 0) - return FALSE; - - return TRUE; -} - - -/* Dialog signal callbacks. */ - -static void -dialog_clicked_cb (GnomeDialog *dialog, - int button_number, - void *data) -{ - DialogData *dialog_data; - EStorageSet *storage_set; - GtkWidget *folder_type_menu_item; - const char *folder_type; - const char *parent_path; - const char *folder_name; - char *path; - - if (button_number != 0) { - gnome_dialog_close (dialog); - return; - } - - dialog_data = (DialogData *) data; - - if (! entry_name_is_valid (GTK_ENTRY (dialog_data->folder_name_entry))) { - /* FIXME: Explain better. */ - e_notice (GTK_WINDOW (dialog), GNOME_MESSAGE_BOX_ERROR, - _("The specified folder name is not valid.")); - return; - } - - parent_path = e_storage_set_view_get_current_folder - (E_STORAGE_SET_VIEW (dialog_data->storage_set_view)); - if (parent_path == NULL) { - gnome_dialog_close (dialog); - return; - } - - folder_name = gtk_entry_get_text (GTK_ENTRY (dialog_data->folder_name_entry)); - path = g_concat_dir_and_file (parent_path, folder_name); - - storage_set = e_shell_get_storage_set (dialog_data->shell); - - folder_type_menu_item = GTK_OPTION_MENU (dialog_data->folder_type_option_menu)->menu_item; - folder_type = gtk_object_get_data (GTK_OBJECT (folder_type_menu_item), "folder_type"); - - if (folder_type == NULL) { - g_warning ("Cannot get folder type for selected GtkOptionMenu item."); - return; - } - - e_storage_set_async_create_folder (storage_set, - path, - folder_type, - NULL, /* description */ - async_create_cb, dialog_data); -} - -static void -dialog_close_cb (GnomeDialog *dialog, - void *data) -{ - gtk_widget_destroy (GTK_WIDGET (dialog)); -} - -static void -dialog_destroy_cb (GtkObject *object, - void *data) -{ - DialogData *dialog_data; - - dialog_data = (DialogData *) data; - dialog_data_destroy (dialog_data); -} - -static void -folder_name_entry_changed_cb (GtkEditable *editable, - void *data) -{ - GnomeDialog *dialog; - GtkEntry *entry; - - entry = GTK_ENTRY (editable); - dialog = GNOME_DIALOG (data); - - if (entry->text_length > 0) - gnome_dialog_set_sensitive (dialog, 0, TRUE); - else - gnome_dialog_set_sensitive (dialog, 0, FALSE); -} - - -/* Shell signal callbacks. */ - -static void -shell_destroy_cb (GtkObject *object, - void *data) -{ - GnomeDialog *dialog; - - dialog = GNOME_DIALOG (data); - gtk_widget_destroy (GTK_WIDGET (dialog)); -} - - -/* Dialog setup. */ - -static void -setup_dialog (GtkWidget *dialog, - GladeXML *gui, - EShell *shell, - GtkWindow *parent_window) -{ - if (parent_window != NULL) - gtk_window_set_transient_for (GTK_WINDOW (dialog), parent_window); - - gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_window_set_title (GTK_WINDOW (dialog), _("Evolution - Create new folder")); - - gnome_dialog_set_default (GNOME_DIALOG (dialog), 0); - gnome_dialog_set_sensitive (GNOME_DIALOG (dialog), 0, FALSE); - - gtk_widget_show (dialog); -} - -static void -setup_folder_name_entry (GtkWidget *dialog, - GladeXML *gui, - EShell *shell) -{ - GtkWidget *folder_name_entry; - - folder_name_entry = glade_xml_get_widget (gui, "folder_name_entry"); - - gnome_dialog_editable_enters (GNOME_DIALOG (dialog), GTK_EDITABLE (folder_name_entry)); - - gtk_signal_connect (GTK_OBJECT (folder_name_entry), "changed", - GTK_SIGNAL_FUNC (folder_name_entry_changed_cb), dialog); -} - -static GtkWidget * -add_storage_set_view (GtkWidget *dialog, - GladeXML *gui, - EShell *shell, - const char *default_parent_folder) -{ - EStorageSet *storage_set; - GtkWidget *storage_set_view; - GtkWidget *scroll_frame; - GtkWidget *vbox; - - storage_set = e_shell_get_storage_set (shell); - storage_set_view = e_storage_set_new_view (storage_set); - - GTK_WIDGET_SET_FLAGS (storage_set_view, GTK_CAN_FOCUS); - - if (default_parent_folder != NULL) - e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (storage_set_view), - default_parent_folder); - - vbox = glade_xml_get_widget (gui, "main_vbox"); - - scroll_frame = e_scroll_frame_new (NULL, NULL); - e_scroll_frame_set_policy (E_SCROLL_FRAME (scroll_frame), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (vbox), scroll_frame, TRUE, TRUE, 0); - - gtk_container_add (GTK_CONTAINER (scroll_frame), storage_set_view); - - gtk_widget_show (scroll_frame); - gtk_widget_show (storage_set_view); - - return storage_set_view; -} - -static GList * -add_folder_types (GtkWidget *dialog, - GladeXML *gui, - EShell *shell) -{ - EFolderTypeRegistry *folder_type_registry; - GtkWidget *folder_type_option_menu; - GtkWidget *menu; - GList *folder_types; - GList *p; - int default_item; - int i; - - folder_type_option_menu = glade_xml_get_widget (gui, "folder_type_option_menu"); - - /* KLUDGE. So, GtkOptionMenu is badly broken. It calculates its size - in `gtk_option_menu_set_menu()' instead of using `size_request()' as - any sane widget would do. So, in order to avoid the "narrow - GtkOptionMenu" bug, we have to destroy the existing associated menu - and create a new one. Life sucks. */ - - menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (folder_type_option_menu)); - g_assert (menu != NULL); - gtk_widget_destroy (menu); - - menu = gtk_menu_new (); - - folder_type_registry = e_shell_get_folder_type_registry (shell); - g_assert (folder_type_registry != NULL); - - folder_types = e_folder_type_registry_get_type_names (folder_type_registry); - if (folder_types == NULL) - return NULL; /* Uh? */ - - folder_types = g_list_sort (folder_types, (GCompareFunc) g_strcasecmp); - - /* FIXME: Use descriptive name (not in the registry's implementation yet). */ - /* FIXME: Add icon (I don't feel like writing an alpha-capable thingie again). */ - - default_item = 0; - for (p = folder_types, i = 0; p != NULL; p = p->next, i++) { - const char *type_name; - GtkWidget *menu_item; - - type_name = (const char *) p->data; - - menu_item = gtk_menu_item_new_with_label (type_name); - gtk_widget_show (menu_item); - gtk_menu_append (GTK_MENU (menu), menu_item); - - gtk_object_set_data (GTK_OBJECT (menu_item), "folder_type", (void *) type_name); - - if (strcmp (type_name, "mail") == 0) - default_item = i; - } - - gtk_option_menu_set_menu (GTK_OPTION_MENU (folder_type_option_menu), menu); - gtk_widget_show (menu); - - gtk_option_menu_set_history (GTK_OPTION_MENU (folder_type_option_menu), default_item); - gtk_widget_queue_resize (folder_type_option_menu); - - return folder_types; -} - - -/* FIXME: Currently this is modal. I think it's OK, but if people think it is - not, we should change it to non-modal and make sure only one of these is - open at once. Currently it relies on modality for this. */ -void -e_shell_show_folder_creation_dialog (EShell *shell, - GtkWindow *parent_window, - const char *default_parent_folder) -{ - GladeXML *gui; - GtkWidget *dialog; - GtkWidget *storage_set_view; - GList *folder_types; - DialogData *dialog_data; - - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - - gui = glade_xml_new (GLADE_FILE_NAME, NULL); - if (gui == NULL) { - g_warning ("Cannot load Glade description file for the folder creation dialog -- %s", - GLADE_FILE_NAME); - return; - } - - dialog = glade_xml_get_widget (gui, "create_folder_dialog"); - - setup_dialog (dialog, gui, shell, parent_window); - setup_folder_name_entry (dialog, gui, shell); - - storage_set_view = add_storage_set_view (dialog, gui, shell, default_parent_folder); - folder_types = add_folder_types (dialog, gui, shell); - - dialog_data = g_new (DialogData, 1); - dialog_data->dialog = dialog; - dialog_data->shell = shell; - dialog_data->folder_name_entry = glade_xml_get_widget (gui, "folder_name_entry"); - dialog_data->storage_set_view = storage_set_view; - dialog_data->folder_type_option_menu = glade_xml_get_widget (gui, "folder_type_option_menu"); - dialog_data->folder_types = folder_types; - - gtk_signal_connect (GTK_OBJECT (dialog), "clicked", - GTK_SIGNAL_FUNC (dialog_clicked_cb), dialog_data); - gtk_signal_connect (GTK_OBJECT (dialog), "close", - GTK_SIGNAL_FUNC (dialog_close_cb), dialog_data); - gtk_signal_connect (GTK_OBJECT (dialog), "destroy", - GTK_SIGNAL_FUNC (dialog_destroy_cb), dialog_data); - - gtk_signal_connect_while_alive (GTK_OBJECT (shell), "destroy", - GTK_SIGNAL_FUNC (shell_destroy_cb), dialog_data, - GTK_OBJECT (dialog)); - - gtk_object_unref (GTK_OBJECT (gui)); -} diff --git a/shell/e-shell-folder-creation-dialog.h b/shell/e-shell-folder-creation-dialog.h deleted file mode 100644 index ac7518f986..0000000000 --- a/shell/e-shell-folder-creation-dialog.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef E_SHELL_FOLDER_CREATION_DIALOG_H -#define E_SHELL_FOLDER_CREATION_DIALOG_H - -#include - -#include "e-shell.h" - -void e_shell_show_folder_creation_dialog (EShell *shell, - GtkWindow *parent, - const char *default_parent_folder); - -#endif /* E_SHELL_FOLDER_CREATION_DIALOG_H */ diff --git a/shell/e-shell-folder-selection-dialog.c b/shell/e-shell-folder-selection-dialog.c deleted file mode 100644 index 3bf60d28e4..0000000000 --- a/shell/e-shell-folder-selection-dialog.c +++ /dev/null @@ -1,359 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-folder-selection-dialog.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "e-util/e-gui-utils.h" -#include "e-util/e-util.h" -#include "widgets/misc/e-scroll-frame.h" - -#include "e-shell-constants.h" -#include "e-storage-set-view.h" -#include "e-storage-set.h" - -#include "e-shell-folder-creation-dialog.h" - -#include "e-shell-folder-selection-dialog.h" - - -#define PARENT_TYPE (gnome_dialog_get_type ()) -static GnomeDialogClass *parent_class = NULL; - -struct _EShellFolderSelectionDialogPrivate { - EShell *shell; - GList *allowed_types; - EStorageSet *storage_set; - GtkWidget *storage_set_view; -}; - -enum { - FOLDER_SELECTED, - CANCELLED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -static gboolean -check_folder_type (EShellFolderSelectionDialog *folder_selection_dialog) -{ - EShellFolderSelectionDialogPrivate *priv; - const char *selected_path; - EFolder *folder; - const char *folder_type; - GList *p; - - priv = folder_selection_dialog->priv; - if (priv->allowed_types == NULL) - return TRUE; - - selected_path = e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog); - if (selected_path == NULL) - return FALSE; - - folder = e_storage_set_get_folder (priv->storage_set, selected_path); - if (folder == NULL) - return FALSE; - - folder_type = e_folder_get_type_string (folder); - - for (p = priv->allowed_types; p != NULL; p = p->next) { - const char *type; - - type = (const char *) p->data; - if (strcasecmp (folder_type, type) == 0) - return TRUE; - } - - e_notice (GTK_WINDOW (folder_selection_dialog), GNOME_MESSAGE_BOX_ERROR, - _("The type of the selected folder is not valid for\nthe requested operation.")); - - return FALSE; -} - - -/* GtkObject methods. */ - -static void -impl_destroy (GtkObject *object) -{ - EShellFolderSelectionDialog *folder_selection_dialog; - EShellFolderSelectionDialogPrivate *priv; - - folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (object); - priv = folder_selection_dialog->priv; - - if (priv->storage_set != NULL) - gtk_object_unref (GTK_OBJECT (priv->storage_set)); - - e_free_string_list (priv->allowed_types); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* GnomeDialog methods. */ - -static void -impl_clicked (GnomeDialog *dialog, - int button_number) -{ - EShellFolderSelectionDialog *folder_selection_dialog; - EShellFolderSelectionDialogPrivate *priv; - EStorageSetView *storage_set_view; - const char *default_parent_folder; - - folder_selection_dialog = E_SHELL_FOLDER_SELECTION_DIALOG (dialog); - priv = folder_selection_dialog->priv; - - switch (button_number) { - case 0: /* OK */ - if (check_folder_type (folder_selection_dialog)) { - gtk_signal_emit (GTK_OBJECT (folder_selection_dialog), signals[FOLDER_SELECTED], - e_shell_folder_selection_dialog_get_selected_path (folder_selection_dialog)); - gtk_widget_destroy (GTK_WIDGET (dialog)); - } - break; - case 1: /* Cancel */ - gtk_signal_emit (GTK_OBJECT (folder_selection_dialog), signals[CANCELLED]); - gtk_widget_destroy (GTK_WIDGET (dialog)); - break; - case 2: /* Add */ - storage_set_view = E_STORAGE_SET_VIEW (priv->storage_set_view); - default_parent_folder = e_storage_set_view_get_current_folder (storage_set_view); - - e_shell_show_folder_creation_dialog (priv->shell, GTK_WINDOW (dialog), - default_parent_folder); - - break; - } -} - - -/* GTK+ type initialization. */ - -static void -class_init (EShellFolderSelectionDialogClass *klass) -{ - GtkObjectClass *object_class; - GnomeDialogClass *dialog_class; - - parent_class = gtk_type_class (PARENT_TYPE); - object_class = GTK_OBJECT_CLASS (klass); - dialog_class = GNOME_DIALOG_CLASS (klass); - - object_class->destroy = impl_destroy; - - dialog_class->clicked = impl_clicked; - - signals[FOLDER_SELECTED] - = gtk_signal_new ("folder_selected", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EShellFolderSelectionDialogClass, folder_selected), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - - signals[CANCELLED] - = gtk_signal_new ("cancelled", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EShellFolderSelectionDialogClass, cancelled), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EShellFolderSelectionDialog *shell_folder_selection_dialog) -{ - EShellFolderSelectionDialogPrivate *priv; - - priv = g_new (EShellFolderSelectionDialogPrivate, 1); - priv->shell = NULL; - priv->storage_set = NULL; - priv->storage_set_view = NULL; - priv->allowed_types = NULL; - - shell_folder_selection_dialog->priv = priv; -} - - -static void -set_default_folder (EShellFolderSelectionDialog *shell_folder_selection_dialog, - const char *default_uri) -{ - EShellFolderSelectionDialogPrivate *priv; - char *default_path; - - priv = shell_folder_selection_dialog->priv; - - if (default_uri && strncmp (default_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) { - /* `evolution:' URI. */ - default_path = g_strdup (default_uri + E_SHELL_URI_PREFIX_LEN); - } else { - /* Physical URI. */ - default_path = e_storage_set_get_path_for_physical_uri (priv->storage_set, - default_uri); - } - - e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), - default_path); - - g_free (default_path); -} - - -/** - * e_shell_folder_selection_dialog_construct: - * @folder_selection_dialog: A folder selection dialog widget - * @shell: The this folder selection dialog is for - * @title: Title of the window - * @default_uri: The URI of the folder to be selected by default - * @allowed_types: List of the names of the allowed types - * - * Construct @folder_selection_dialog. - **/ -void -e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_selection_dialog, - EShell *shell, - const char *title, - const char *default_uri, - const char *allowed_types[]) -{ - EShellFolderSelectionDialogPrivate *priv; - GtkWidget *scroll_frame; - int i; - - g_return_if_fail (folder_selection_dialog != NULL); - g_return_if_fail (E_IS_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog)); - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - - priv = folder_selection_dialog->priv; - - gtk_window_set_modal (GTK_WINDOW (folder_selection_dialog), TRUE); - gtk_window_set_title (GTK_WINDOW (folder_selection_dialog), title); - - gnome_dialog_append_buttons (GNOME_DIALOG (folder_selection_dialog), - GNOME_STOCK_BUTTON_OK, - GNOME_STOCK_BUTTON_CANCEL, - _("New..."), - NULL); - gnome_dialog_set_default (GNOME_DIALOG (folder_selection_dialog), 0); - - gtk_window_set_policy (GTK_WINDOW (folder_selection_dialog), TRUE, TRUE, FALSE); - gtk_window_set_default_size (GTK_WINDOW (folder_selection_dialog), 350, 300); - - priv->shell = shell; - gtk_signal_connect_object_while_alive (GTK_OBJECT (shell), "destroy", - GTK_SIGNAL_FUNC (gtk_widget_destroy), - GTK_OBJECT (folder_selection_dialog)); - - priv->storage_set = e_shell_get_storage_set (shell); - gtk_object_ref (GTK_OBJECT (priv->storage_set)); - - priv->storage_set_view = e_storage_set_new_view (priv->storage_set); - GTK_WIDGET_SET_FLAGS (priv->storage_set_view, GTK_CAN_FOCUS); - - g_assert (priv->allowed_types == NULL); - if (allowed_types != NULL) { - for (i = 0; allowed_types[i] != NULL; i++) - priv->allowed_types = g_list_prepend (priv->allowed_types, - g_strdup (allowed_types[i])); - } - - set_default_folder (folder_selection_dialog, default_uri); - - scroll_frame = e_scroll_frame_new (NULL, NULL); - e_scroll_frame_set_policy (E_SCROLL_FRAME (scroll_frame), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - gtk_container_add (GTK_CONTAINER (scroll_frame), priv->storage_set_view); - - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (folder_selection_dialog)->vbox), - scroll_frame, TRUE, TRUE, 2); - - gtk_widget_show (scroll_frame); - gtk_widget_show (priv->storage_set_view); -} - -/** - * e_shell_folder_selection_dialog_new: - * @shell: The this folder selection dialog is for - * @title: Title of the window - * @default_uri: The URI of the folder to be selected by default - * @allowed_types: List of the names of the allowed types - * - * Create a new folder selection dialog widget. @default_uri can be either an - * `evolution:' URI or a physical URI (all the non-`evoluion:' URIs are - * considered to be physical URIs). - * - * Return value: - **/ -GtkWidget * -e_shell_folder_selection_dialog_new (EShell *shell, - const char *title, - const char *default_uri, - const char *allowed_types[]) -{ - EShellFolderSelectionDialog *folder_selection_dialog; - - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - folder_selection_dialog = gtk_type_new (e_shell_folder_selection_dialog_get_type ()); - e_shell_folder_selection_dialog_construct (folder_selection_dialog, shell, - title, default_uri, allowed_types); - - return GTK_WIDGET (folder_selection_dialog); -} - - -const char * -e_shell_folder_selection_dialog_get_selected_path (EShellFolderSelectionDialog *folder_selection_dialog) -{ - EShellFolderSelectionDialogPrivate *priv; - - g_return_val_if_fail (folder_selection_dialog != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL_FOLDER_SELECTION_DIALOG (folder_selection_dialog), NULL); - - priv = folder_selection_dialog->priv; - - return e_storage_set_view_get_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view)); -} - - -E_MAKE_TYPE (e_shell_folder_selection_dialog, "EShellFolderSelectionDialog", EShellFolderSelectionDialog, - class_init, init, PARENT_TYPE) diff --git a/shell/e-shell-folder-selection-dialog.h b/shell/e-shell-folder-selection-dialog.h deleted file mode 100644 index 2ddb98bafe..0000000000 --- a/shell/e-shell-folder-selection-dialog.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-folder-selection-dialog.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef E_SHELL_FOLDER_SELECTION_DIALOG_H -#define E_SHELL_FOLDER_SELECTION_DIALOG_H - -#include - -#include "e-shell.h" - -#ifdef cplusplus -extern "C" { -#pragma } -#endif /* cplusplus */ - -#define E_TYPE_SHELL_FOLDER_SELECTION_DIALOG (e_shell_folder_selection_dialog_get_type ()) -#define E_SHELL_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG, EShellFolderSelectionDialog)) -#define E_SHELL_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG, EShellFolderSelectionDialogClass)) -#define E_IS_SHELL_FOLDER_SELECTION_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG)) -#define E_IS_SHELL_FOLDER_SELECTION_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_FOLDER_SELECTION_DIALOG)) - - -typedef struct _EShellFolderSelectionDialog EShellFolderSelectionDialog; -typedef struct _EShellFolderSelectionDialogPrivate EShellFolderSelectionDialogPrivate; -typedef struct _EShellFolderSelectionDialogClass EShellFolderSelectionDialogClass; - -struct _EShellFolderSelectionDialog { - GnomeDialog parent; - - EShellFolderSelectionDialogPrivate *priv; -}; - -struct _EShellFolderSelectionDialogClass { - GnomeDialogClass parent_class; - - void (* folder_selected) (EShellFolderSelectionDialog *folder_selection_dialog, - const char *path); - void (* cancelled) (EShellFolderSelectionDialog *folder_selection_dialog); -}; - - -GtkType e_shell_folder_selection_dialog_get_type (void); -void e_shell_folder_selection_dialog_construct (EShellFolderSelectionDialog *folder_selection_dialog, - EShell *shell, - const char *title, - const char *default_path, - const char *allowed_types[]); -GtkWidget *e_shell_folder_selection_dialog_new (EShell *shell, - const char *title, - const char *default_path, - const char *allowed_types[]); - -const char *e_shell_folder_selection_dialog_get_selected_path (EShellFolderSelectionDialog *folder_selection_dialog); - -#ifdef cplusplus -} -#endif /* cplusplus */ - -#endif /* E_SHELL_FOLDER_SELECTION_DIALOG_H */ diff --git a/shell/e-shell-folder-title-bar.c b/shell/e-shell-folder-title-bar.c deleted file mode 100644 index 00d0e70e98..0000000000 --- a/shell/e-shell-folder-title-bar.c +++ /dev/null @@ -1,548 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-folder-title-bar.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "widgets/misc/e-clipped-label.h" -#include "e-util/e-util.h" - -#include "e-shell-constants.h" -#include "e-shell-folder-title-bar.h" - - -#define PARENT_TYPE GTK_TYPE_EVENT_BOX -static GtkEventBox *parent_class = NULL; - -struct _EShellFolderTitleBarPrivate { - GdkPixbuf *icon; - GtkWidget *icon_widget; - - /* The hbox containing the button, the label and the icon on the right. */ - GtkWidget *hbox; - - /* We have a label and a button. When the button is enabled, the label is hidden; - when the button is disable, only the label is visible. */ - - /* The label. */ - GtkWidget *label; - - /* The button. */ - GtkWidget *button; - GtkWidget *button_label; - GtkWidget *button_arrow; - - gboolean clickable; -}; - -enum { - TITLE_TOGGLED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -static char *arrow_xpm[] = { - "11 5 2 1", - " c none", - ". c #ffffffffffff", - " ......... ", - " ....... ", - " ..... ", - " ... ", - " . ", -}; - - -/* Icon handling. */ - -static unsigned int -rgb_from_gdk_color (GdkColor *color) -{ - return (((color->red >> 8) << 16) - | ((color->green >> 8) << 8) - | ((color->blue >> 8))); -} - -static GdkPixmap * -make_icon_pixmap (EShellFolderTitleBar *folder_title_bar, - const GdkPixbuf *pixbuf) -{ - GdkPixmap *pixmap; - GtkWidget *widget; - unsigned int depth; - unsigned int rgb; - - widget = GTK_WIDGET (folder_title_bar); - - rgb = rgb_from_gdk_color (&widget->style->bg[GTK_STATE_NORMAL]); - - depth = gtk_widget_get_visual (widget)->depth; - - pixmap = gdk_pixmap_new (GTK_WIDGET (folder_title_bar)->window, - E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, - depth); - - if (pixbuf == NULL) { - gdk_draw_rectangle (pixmap, widget->style->bg_gc[GTK_STATE_NORMAL], TRUE, - 0, 0, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE); - } else { - GdkPixbuf *composited_pixbuf; - - composited_pixbuf = gdk_pixbuf_composite_color_simple - (pixbuf, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf), - GDK_INTERP_NEAREST, 255, 32, rgb, rgb); - - gdk_pixbuf_render_to_drawable (composited_pixbuf, - pixmap, widget->style->fg_gc[GTK_STATE_NORMAL], - 0, 0, 0, 0, - E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, - GDK_RGB_DITHER_MAX, 0, 0); - - gdk_pixbuf_unref (composited_pixbuf); - } - - return pixmap; -} - - -/* Icon pixmap. */ - -static GtkWidget * -create_icon_pixmap (GtkWidget *parent) -{ - GtkWidget *gtk_pixmap; - GdkPixmap *gdk_pixmap; - GdkBitmap *gdk_mask; - - gdk_pixmap = gdk_pixmap_create_from_xpm_d (parent->window, &gdk_mask, NULL, arrow_xpm); - gtk_pixmap = gtk_pixmap_new (gdk_pixmap, gdk_mask); - - gdk_pixmap_unref (gdk_pixmap); - gdk_bitmap_unref (gdk_mask); - - return gtk_pixmap; -} - -static void -title_button_box_realize_cb (GtkWidget *widget, - void *data) -{ - EShellFolderTitleBar *folder_title_bar; - EShellFolderTitleBarPrivate *priv; - GtkWidget *button_arrow; - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data); - priv = folder_title_bar->priv; - - if (priv->button_arrow != NULL) - return; - - button_arrow = create_icon_pixmap (widget); - - gtk_widget_show (button_arrow); - gtk_box_pack_start (GTK_BOX (widget), button_arrow, FALSE, TRUE, 2); - - priv->button_arrow = button_arrow; -} - - -/* Style handling. */ - -static void -endarken_style (GtkWidget *widget) -{ -#ifndef E_USE_STYLES - GtkStyle *style; - GtkRcStyle *new_rc_style; - int i; - - style = widget->style; - - new_rc_style = gtk_rc_style_new (); - - for (i = 0; i < 5; i++) { - new_rc_style->bg[i].red = style->bg[i].red * .8; - new_rc_style->bg[i].green = style->bg[i].green * .8; - new_rc_style->bg[i].blue = style->bg[i].blue * .8; - new_rc_style->fg[i].red = 0xffff; - new_rc_style->fg[i].green = 0xffff; - new_rc_style->fg[i].blue = 0xffff; - - new_rc_style->color_flags[i] = GTK_RC_BG | GTK_RC_FG; - } - - gtk_widget_modify_style (widget, new_rc_style); - - gtk_rc_style_unref (new_rc_style); -#endif -} - -static void -style_set_cb (GtkWidget *widget, - GtkStyle *previous_style, - void *data) -{ - EShellFolderTitleBar *folder_title_bar; - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (widget); - - /* - This will cause a style_set signal to be emitted again, - so we need to do this to prevent infinite recursion. - */ - gtk_signal_handler_block_by_func (GTK_OBJECT (widget), GTK_SIGNAL_FUNC (style_set_cb), data); - - endarken_style (widget); - gtk_signal_handler_unblock_by_func (GTK_OBJECT (widget), GTK_SIGNAL_FUNC (style_set_cb), data); - - if (folder_title_bar->priv->icon) - e_shell_folder_title_bar_set_icon (folder_title_bar, folder_title_bar->priv->icon); -} - - -/* Popup button callback. */ - -static void -title_button_toggled_cb (GtkToggleButton *button, - void *data) -{ - EShellFolderTitleBar *folder_title_bar; - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (data); - gtk_signal_emit (GTK_OBJECT (folder_title_bar), - signals[TITLE_TOGGLED], - gtk_toggle_button_get_active (button)); -} - - -/* GTkWidget methods. */ - -static void -realize (GtkWidget *widget) -{ - EShellFolderTitleBar *folder_title_bar; - EShellFolderTitleBarPrivate *priv; - GdkPixmap *pixmap; - - (* GTK_WIDGET_CLASS (parent_class)->realize) (widget); - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (widget); - priv = folder_title_bar->priv; - - pixmap = make_icon_pixmap (folder_title_bar, priv->icon); - priv->icon_widget = gtk_pixmap_new (pixmap, NULL); - gdk_pixmap_unref (pixmap); - gtk_widget_show (priv->icon_widget); - - gtk_misc_set_alignment (GTK_MISC (priv->icon_widget), 1.0, .5); - gtk_misc_set_padding (GTK_MISC (priv->icon_widget), 5, 0); - gtk_box_pack_start (GTK_BOX (priv->hbox), priv->icon_widget, TRUE, TRUE, 2); -} - -static void -unrealize (GtkWidget *widget) -{ - EShellFolderTitleBar *folder_title_bar; - EShellFolderTitleBarPrivate *priv; - - (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (widget); - priv = folder_title_bar->priv; - - gtk_widget_destroy (priv->icon_widget); - priv->icon_widget = NULL; -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EShellFolderTitleBar *folder_title_bar; - EShellFolderTitleBarPrivate *priv; - - folder_title_bar = E_SHELL_FOLDER_TITLE_BAR (object); - priv = folder_title_bar->priv; - - gdk_pixbuf_unref (priv->icon); - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EShellFolderTitleBarClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - widget_class = GTK_WIDGET_CLASS (klass); - widget_class->realize = realize; - widget_class->unrealize = unrealize; - - parent_class = gtk_type_class (PARENT_TYPE); - - signals[TITLE_TOGGLED] = gtk_signal_new ("title_toggled", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShellFolderTitleBarClass, title_toggled), - gtk_marshal_NONE__BOOL, - GTK_TYPE_NONE, 1, - GTK_TYPE_BOOL); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EShellFolderTitleBar *shell_folder_title_bar) -{ - EShellFolderTitleBarPrivate *priv; - - priv = g_new (EShellFolderTitleBarPrivate, 1); - - priv->icon = NULL; - priv->icon_widget = NULL; - priv->hbox = NULL; - priv->label = NULL; - priv->button_label = NULL; - priv->button = NULL; - priv->button_arrow = NULL; - - priv->clickable = TRUE; - - shell_folder_title_bar->priv = priv; -} - - -/** - * e_shell_folder_title_bar_construct: - * @folder_title_bar: - * - * Construct the folder title bar widget. - **/ -void -e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar) -{ - EShellFolderTitleBarPrivate *priv; - GtkRequisition button_requisition; - GtkWidget *button_hbox; - GtkWidget *widget; - - g_return_if_fail (folder_title_bar != NULL); - g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); - - priv = folder_title_bar->priv; - widget = GTK_WIDGET (folder_title_bar); - - priv->label = gtk_label_new (""); - gtk_misc_set_padding (GTK_MISC (priv->label), 5, 0); - gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5); - - priv->button_label = gtk_label_new (""); - gtk_misc_set_padding (GTK_MISC (priv->button_label), 5, 0); - gtk_misc_set_alignment (GTK_MISC (priv->button_label), 0.0, 0.5); - gtk_widget_show (priv->button_label); - - button_hbox = gtk_hbox_new (FALSE, 0); - gtk_signal_connect (GTK_OBJECT (button_hbox), "realize", - GTK_SIGNAL_FUNC (title_button_box_realize_cb), folder_title_bar); - gtk_box_pack_start (GTK_BOX (button_hbox), priv->button_label, TRUE, TRUE, 0); - gtk_widget_show (button_hbox); - - priv->button = gtk_toggle_button_new (); - gtk_button_set_relief (GTK_BUTTON (priv->button), GTK_RELIEF_NONE); - gtk_container_add (GTK_CONTAINER (priv->button), button_hbox); - GTK_WIDGET_UNSET_FLAGS (priv->button, GTK_CAN_FOCUS); - gtk_widget_show (priv->button); - - priv->hbox = gtk_hbox_new (FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (priv->hbox), 2); - gtk_box_pack_start (GTK_BOX (priv->hbox), priv->label, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (priv->hbox), priv->button, FALSE, TRUE, 0); - - gtk_widget_show (priv->hbox); - - gtk_signal_connect (GTK_OBJECT (priv->button), "toggled", - GTK_SIGNAL_FUNC (title_button_toggled_cb), folder_title_bar); - - gtk_container_add (GTK_CONTAINER (folder_title_bar), priv->hbox); - - gtk_signal_connect (GTK_OBJECT (folder_title_bar), "style_set", - GTK_SIGNAL_FUNC (style_set_cb), NULL); - - e_shell_folder_title_bar_set_title (folder_title_bar, NULL); - - /* KLUDGE */ - gtk_widget_size_request (priv->button, &button_requisition); - gtk_widget_set_usize (priv->label, button_requisition.width, button_requisition.height); -} - -/** - * e_shell_folder_title_bar_new: - * @void: - * - * Create a new title bar widget. - * - * Return value: - **/ -GtkWidget * -e_shell_folder_title_bar_new (void) -{ - EShellFolderTitleBar *new; - - new = gtk_type_new (e_shell_folder_title_bar_get_type ()); - - e_shell_folder_title_bar_construct (new); - - return GTK_WIDGET (new); -} - -/** - * e_shell_folder_title_bar_set_title: - * @folder_title_bar: - * @title: - * - * Set the title for the title bar. - **/ -void -e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar, - const char *title) -{ - EShellFolderTitleBarPrivate *priv; - - g_return_if_fail (folder_title_bar != NULL); - g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); - - priv = folder_title_bar->priv; - - if (title == NULL) { - gtk_label_set_text (GTK_LABEL (priv->button_label), _("(Untitled)")); - gtk_label_set_text (GTK_LABEL (priv->label), _("(Untitled)")); - } else { - gtk_label_set_text (GTK_LABEL (priv->button_label), title); - gtk_label_set_text (GTK_LABEL (priv->label), title); - } - - /* FIXME: There seems to be a bug in EClippedLabel, this is just a workaround. */ - gtk_widget_queue_draw (GTK_WIDGET (folder_title_bar)); -} - -/** - * e_shell_folder_title_bar_set_icon: - * @folder_title_bar: - * @icon: - * - * Set the name of the icon for the title bar. - **/ -void -e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar, - const GdkPixbuf *icon) -{ - EShellFolderTitleBarPrivate *priv; - GdkPixmap *pixmap; - - g_return_if_fail (icon != NULL); - - g_return_if_fail (folder_title_bar != NULL); - g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); - - priv = folder_title_bar->priv; - - gdk_pixbuf_ref ((GdkPixbuf *) icon); - if (priv->icon) - gdk_pixbuf_unref (priv->icon); - priv->icon = (GdkPixbuf *) icon; - - pixmap = make_icon_pixmap (folder_title_bar, icon); - - gtk_pixmap_set (GTK_PIXMAP (priv->icon_widget), pixmap, NULL); -} - - -/** - * e_shell_folder_title_bar_set_toggle_state: - * @folder_title_bar: - * @state: - * - * Set whether the title bar's button is in pressed state (TRUE) or not (FALSE). - **/ -void -e_shell_folder_title_bar_set_toggle_state (EShellFolderTitleBar *folder_title_bar, - gboolean state) -{ - EShellFolderTitleBarPrivate *priv; - - g_return_if_fail (folder_title_bar != NULL); - g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); - - priv = folder_title_bar->priv; - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->button), state); -} - -/** - * e_shell_folder_title_bar_set_clickable: - * @folder_title_bar: - * @clickable: - * - * Specify whether @folder_title_bar is clickable. If not, the arrow pixmap is not shown. - **/ -void -e_shell_folder_title_bar_set_clickable (EShellFolderTitleBar *folder_title_bar, - gboolean clickable) -{ - EShellFolderTitleBarPrivate *priv; - - g_return_if_fail (folder_title_bar != NULL); - g_return_if_fail (E_IS_SHELL_FOLDER_TITLE_BAR (folder_title_bar)); - - priv = folder_title_bar->priv; - - if ((priv->clickable && clickable) || (! priv->clickable && ! clickable)) - return; - - if (clickable) { - gtk_widget_show (priv->button); - gtk_widget_hide (priv->label); - } else { - gtk_widget_hide (priv->button); - gtk_widget_show (priv->label); - } - - priv->clickable = !! clickable; -} - - -E_MAKE_TYPE (e_shell_folder_title_bar, "EShellFolderTitleBar", EShellFolderTitleBar, class_init, init, PARENT_TYPE) diff --git a/shell/e-shell-folder-title-bar.h b/shell/e-shell-folder-title-bar.h deleted file mode 100644 index c8bab9994c..0000000000 --- a/shell/e-shell-folder-title-bar.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-folder-title-bar.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_SHELL_FOLDER_TITLE_BAR_H__ -#define __E_SHELL_FOLDER_TITLE_BAR_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_SHELL_FOLDER_TITLE_BAR (e_shell_folder_title_bar_get_type ()) -#define E_SHELL_FOLDER_TITLE_BAR(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_FOLDER_TITLE_BAR, EShellFolderTitleBar)) -#define E_SHELL_FOLDER_TITLE_BAR_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_FOLDER_TITLE_BAR, EShellFolderTitleBarClass)) -#define E_IS_SHELL_FOLDER_TITLE_BAR(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_FOLDER_TITLE_BAR)) -#define E_IS_SHELL_FOLDER_TITLE_BAR_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_FOLDER_TITLE_BAR)) - - -typedef struct _EShellFolderTitleBar EShellFolderTitleBar; -typedef struct _EShellFolderTitleBarPrivate EShellFolderTitleBarPrivate; -typedef struct _EShellFolderTitleBarClass EShellFolderTitleBarClass; - -struct _EShellFolderTitleBar { - GtkEventBox parent; - - EShellFolderTitleBarPrivate *priv; -}; - -struct _EShellFolderTitleBarClass { - GtkEventBoxClass parent_class; - - /* Signals. */ - void (* title_toggled) (EShellFolderTitleBar *folder_title_bar, gboolean pressed); -}; - - -GtkType e_shell_folder_title_bar_get_type (void); -void e_shell_folder_title_bar_construct (EShellFolderTitleBar *folder_title_bar); -GtkWidget *e_shell_folder_title_bar_new (void); - -void e_shell_folder_title_bar_set_title (EShellFolderTitleBar *folder_title_bar, - const char *title); -void e_shell_folder_title_bar_set_icon (EShellFolderTitleBar *folder_title_bar, - const GdkPixbuf *icon); -void e_shell_folder_title_bar_set_toggle_state (EShellFolderTitleBar *folder_title_bar, - gboolean state); -void e_shell_folder_title_bar_set_clickable (EShellFolderTitleBar *folder_title_bar, - gboolean clickable); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __E_SHELL_FOLDER_TITLE_BAR_H__ */ diff --git a/shell/e-shell-utils.c b/shell/e-shell-utils.c deleted file mode 100644 index 9065fc224c..0000000000 --- a/shell/e-shell-utils.c +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-utils.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-shell-constants.h" - -#include "e-shell-utils.h" - - -static char * -get_icon_path (const char *icon_name) -{ - char *icon_path; - - if (g_path_is_absolute (icon_name)) { - icon_path = g_strdup (icon_name); - } else { - icon_path = gnome_pixmap_file (icon_name); - - if (icon_path == NULL) - icon_path = g_concat_dir_and_file (EVOLUTION_IMAGES, - icon_name); - } - - if (g_file_exists (icon_path)) { - return icon_path; - } else { - g_free (icon_path); - return NULL; - } -} - -static char * -get_mini_name (const char *icon_name) -{ - const char *dot_ptr; - const char *basename; - char *name_without_extension; - char *mini_name; - - basename = g_basename (icon_name); - if (basename == NULL) - return NULL; - - dot_ptr = strrchr (basename, '.'); - - if (dot_ptr == NULL) { - /* No extension. */ - return g_strconcat (icon_name, E_SHELL_MINI_ICON_SUFFIX, NULL); - } - - name_without_extension = g_strndup (icon_name, dot_ptr - icon_name); - mini_name = g_strconcat (name_without_extension, E_SHELL_MINI_ICON_SUFFIX, - dot_ptr, NULL); - g_free (name_without_extension); - - return mini_name; -} - - -char * -e_shell_get_icon_path (const char *icon_name, - gboolean try_mini) -{ - if (try_mini) { - char *path; - char *mini_name; - - mini_name = get_mini_name (icon_name); - if (mini_name == NULL) { - path = NULL; - } else { - path = get_icon_path (mini_name); - g_free (mini_name); - } - - if (path != NULL) - return path; - } - - return get_icon_path (icon_name); -} diff --git a/shell/e-shell-utils.h b/shell/e-shell-utils.h deleted file mode 100644 index a701dd38eb..0000000000 --- a/shell/e-shell-utils.h +++ /dev/null @@ -1,30 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-utils.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef E_SHELL_UTILS_H -#define E_SHELL_UTILS_H - -char *e_shell_get_icon_path (const char *icon_name, - gboolean try_mini); - -#endif diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c deleted file mode 100644 index 6cf7fe826a..0000000000 --- a/shell/e-shell-view-menu.c +++ /dev/null @@ -1,623 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-view.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: - * Miguel de Icaza - * Ettore Perazzoli - */ - -#include -#include - -#include "e-shell-folder-creation-dialog.h" -#include "e-shell-folder-selection-dialog.h" - -#include "e-shell-constants.h" - -#include "e-shell-view-menu.h" - - -/* EShellView callbacks. */ - -static void -shortcut_bar_mode_changed_cb (EShellView *shell_view, - EShellViewSubwindowMode new_mode, - void *data) -{ - BonoboUIHandler *uih; - const char *path; - gboolean toggle_state; - - if (new_mode == E_SHELL_VIEW_SUBWINDOW_HIDDEN) - toggle_state = FALSE; - else - toggle_state = TRUE; - - path = (const char *) data; - uih = e_shell_view_get_bonobo_ui_handler (shell_view); - - bonobo_ui_handler_menu_set_toggle_state (uih, path, toggle_state); -} - -static void -folder_bar_mode_changed_cb (EShellView *shell_view, - EShellViewSubwindowMode new_mode, - void *data) -{ - BonoboUIHandler *uih; - const char *path; - gboolean toggle_state; - - if (new_mode == E_SHELL_VIEW_SUBWINDOW_HIDDEN) - toggle_state = FALSE; - else - toggle_state = TRUE; - - path = (const char *) data; - uih = e_shell_view_get_bonobo_ui_handler (shell_view); - - bonobo_ui_handler_menu_set_toggle_state (uih, path, toggle_state); -} - - -/* Command callbacks. */ -static void -command_quit (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EShellView *shell_view; - EShell *shell; - - shell_view = E_SHELL_VIEW (data); - - shell = e_shell_view_get_shell (shell_view); - e_shell_quit (shell); -} - -static void -command_run_bugbuddy (BonoboUIHandler *uih, - void *data, - const char *path) -{ - int pid; - char *args[] = { - "bug-buddy", - "--sm-disable", - "--package=evolution", - "--package-ver="VERSION, - NULL - }; - args[0] = gnome_is_program_in_path ("bug-buddy"); - if (!args[0]) { - /* you might have to call gnome_dialog_run() on the - * dialog returned here, I don't remember... - */ - gnome_error_dialog (_("Bug buddy was not found in your $PATH.")); - } - pid = gnome_execute_async (NULL, 4, args); - g_free (args[0]); - if (pid == -1) { - /* same as above */ - gnome_error_dialog (_("Bug buddy could not be run.")); - } -} - -static void -zero_pointer(GtkObject *object, void **pointer) -{ - *pointer = NULL; -} - -static void -command_about_box (BonoboUIHandler *uih, - void *data, - const char *path) -{ - static GtkWidget *about_box = NULL; - - if (about_box) - gdk_window_raise(GTK_WIDGET(about_box)->window); - else { - const gchar *authors[] = { - "Seth Alves", - "Anders Carlsson", - "Damon Chaplin", - "Clifford R. Conover", - "Miguel de Icaza", - "Radek Doulik", - "Arturo Espinoza", - "Larry Ewing", - "Nat Friedman", - "Bertrand Guiheneuf", - "Tuomas Kuosmanen", - "Christopher J. Lahey", - "Matthew Loper", - "Federico Mena", - "Eskil Heyn Olsen", - "Ettore Perazzoli", - "Jeffrey Stedfast", - "Russell Steinthal", - "Peter Teichman", - "Chris Toshok", - "Peter Williams", - "Dan Winship", - "Michael Zucchi", - NULL}; - - about_box = gnome_about_new(_("Evolution"), - VERSION, - _("Copyright 1999, 2000 Helix Code, Inc."), - authors, - _("Evolution is a suite of groupware applications\n" - "for mail, calendaring, and contact management\n" - "within the GNOME desktop environment."), - NULL); - gtk_signal_connect(GTK_OBJECT(about_box), "destroy", - GTK_SIGNAL_FUNC(zero_pointer), &about_box); - gtk_widget_show(about_box); - } -} - -static void -command_help (BonoboUIHandler *uih, - void *data, - const char *path) -{ - char *url; - - url = g_strdup_printf ("ghelp:%s/gnome/help/evolution/C/%s", - EVOLUTION_DATADIR, (char *)data); - gnome_url_show (url); -} - -static void -command_toggle_folder_bar (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EShellView *shell_view; - EShellViewSubwindowMode mode; - gboolean show; - - shell_view = E_SHELL_VIEW (data); - - show = bonobo_ui_handler_menu_get_toggle_state (uih, path); - if (show) - mode = E_SHELL_VIEW_SUBWINDOW_STICKY; - else - mode = E_SHELL_VIEW_SUBWINDOW_HIDDEN; - - e_shell_view_set_folder_bar_mode (shell_view, mode); -} - -static void -command_toggle_shortcut_bar (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EShellView *shell_view; - EShellViewSubwindowMode mode; - gboolean show; - - shell_view = E_SHELL_VIEW (data); - - show = bonobo_ui_handler_menu_get_toggle_state (uih, path); - - if (show) - mode = E_SHELL_VIEW_SUBWINDOW_STICKY; - else - mode = E_SHELL_VIEW_SUBWINDOW_HIDDEN; - - e_shell_view_set_shortcut_bar_mode (shell_view, mode); -} - - -static void -command_new_folder (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EShellView *shell_view; - EShell *shell; - const char *current_uri; - const char *default_parent_folder; - - shell_view = E_SHELL_VIEW (data); - shell = e_shell_view_get_shell (shell_view); - current_uri = e_shell_view_get_current_uri (shell_view); - - if (strncmp (current_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) - default_parent_folder = current_uri + E_SHELL_URI_PREFIX_LEN; - else - default_parent_folder = NULL; - - e_shell_show_folder_creation_dialog (shell, GTK_WINDOW (shell_view), - default_parent_folder); -} - -static void -command_new_view (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EShellView *shell_view; - EShell *shell; - const char *current_uri; - - shell_view = E_SHELL_VIEW (data); - shell = e_shell_view_get_shell (shell_view); - current_uri = e_shell_view_get_current_uri (shell_view); - - e_shell_new_view (shell, current_uri); -} - - -/* Going to a folder. */ - -static void -folder_selection_dialog_cancelled_cb (EShellFolderSelectionDialog *folder_selection_dialog, - void *data) -{ - EShellView *shell_view; - - shell_view = E_SHELL_VIEW (data); - - gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog)); -} - -static void -folder_selection_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_selection_dialog, - const char *path, - void *data) -{ - if (path != NULL) { - EShellView *shell_view; - char *uri; - - shell_view = E_SHELL_VIEW (data); - - uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL); - e_shell_view_display_uri (shell_view, uri); - g_free (uri); - } -} - -static void -command_goto_folder (BonoboUIHandler *uih, - void *data, - const char *path) -{ - GtkWidget *folder_selection_dialog; - EShellView *shell_view; - EShell *shell; - const char *current_uri; - - shell_view = E_SHELL_VIEW (data); - shell = e_shell_view_get_shell (shell_view); - - current_uri = e_shell_view_get_current_uri (shell_view); - - folder_selection_dialog = e_shell_folder_selection_dialog_new (shell, - _("Go to folder..."), - current_uri, - NULL); - - gtk_window_set_transient_for (GTK_WINDOW (folder_selection_dialog), GTK_WINDOW (shell_view)); - - gtk_signal_connect (GTK_OBJECT (folder_selection_dialog), "folder_selected", - GTK_SIGNAL_FUNC (folder_selection_dialog_folder_selected_cb), shell_view); - gtk_signal_connect (GTK_OBJECT (folder_selection_dialog), "cancelled", - GTK_SIGNAL_FUNC (folder_selection_dialog_cancelled_cb), shell_view); - - gtk_widget_show (folder_selection_dialog); -} - -static void -command_create_folder (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EShellView *shell_view; - EShell *shell; - const char *current_uri; - const char *default_folder; - - shell_view = E_SHELL_VIEW (data); - shell = e_shell_view_get_shell (shell_view); - - current_uri = e_shell_view_get_current_uri (shell_view); - - if (strncmp (current_uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) == 0) - default_folder = current_uri + E_SHELL_URI_PREFIX_LEN; - else - default_folder = NULL; - - e_shell_show_folder_creation_dialog (shell, GTK_WINDOW (shell_view), default_folder); -} - - -/* Unimplemented commands. */ - -#define DEFINE_UNIMPLEMENTED(func) \ -static void \ -func (BonoboUIHandler *uih, void *data, const char *path) \ -{ \ - g_warning ("EShellView: %s: not implemented.", __FUNCTION__); \ -} \ - -DEFINE_UNIMPLEMENTED (command_new_shortcut) -DEFINE_UNIMPLEMENTED (command_new_mail_message) -DEFINE_UNIMPLEMENTED (command_new_contact) -DEFINE_UNIMPLEMENTED (command_new_task_request) - - -static void -menu_create_file_new (BonoboUIHandler *uih, - void *data) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/File/New", - _("_New"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - bonobo_ui_handler_menu_new_item (uih, "/File/New/View", - _("_View"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 'v', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_view, data); - bonobo_ui_handler_menu_new_item (uih, "/File/New/View", - _("_Folder"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 'f', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_folder, data); - bonobo_ui_handler_menu_new_item (uih, "/File/New/Evolution bar shortcut", - _("Evolution bar _shortcut"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 's', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_shortcut, data); - - bonobo_ui_handler_menu_new_separator (uih, "/File/New/Separator1", -1); - - bonobo_ui_handler_menu_new_item (uih, "/File/New/Mail message", - _("_Mail message (FIXME)"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 'm', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_mail_message, data); - bonobo_ui_handler_menu_new_item (uih, "/File/New/Appointment", - _("_Appointment (FIXME)"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 'a', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_shortcut, data); - bonobo_ui_handler_menu_new_item (uih, "/File/New/Contact", - _("_Contact (FIXME)"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 'c', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_contact, data); - bonobo_ui_handler_menu_new_item (uih, "/File/New/Contact", - _("_Task (FIXME)"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 't', GDK_CONTROL_MASK | GDK_SHIFT_MASK, - command_new_task_request, data); -} - -static void -menu_create_file (BonoboUIHandler *uih, - void *data) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/File", - _("_File"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - menu_create_file_new (uih, data); - - bonobo_ui_handler_menu_new_separator (uih, "/File/Separator1", -1); - - bonobo_ui_handler_menu_new_item (uih, "/File/Go to folder", - _("_Go to Folder..."), - _("Display a different folder"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_goto_folder, data); - - bonobo_ui_handler_menu_new_item (uih, "/File/Create new folder", - _("_Create New Folder..."), - _("Create a new folder"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_create_folder, data); - - bonobo_ui_handler_menu_new_placeholder (uih, "/File/"); - - bonobo_ui_handler_menu_new_separator (uih, "/File/Separator2", -1); - - bonobo_ui_handler_menu_new_item (uih, "/File/Exit", - _("E_xit..."), - _("Create a new folder"), - -1, - BONOBO_UI_HANDLER_PIXMAP_STOCK, - GNOME_STOCK_MENU_EXIT, - 0, 0, - command_quit, data); -} - -static void -menu_create_edit (BonoboUIHandler *uih, - void *data) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/Edit", - _("_Edit"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); -} - -static void -menu_create_view (BonoboUIHandler *uih, - void *data) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/View", - _("_View"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - bonobo_ui_handler_menu_new_toggleitem (uih, "/View/Show shortcut bar", - _("Show _Shortcut Bar"), - _("Show the shortcut bar"), - -1, - 0, 0, - command_toggle_shortcut_bar, data); - bonobo_ui_handler_menu_new_toggleitem (uih, "/View/Show folder bar", - _("Show _Folder Bar"), - _("Show the folder bar"), - -1, - 0, 0, - command_toggle_folder_bar, data); -} - -static void -menu_create_settings (BonoboUIHandler *uih, - void *data) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/Settings", - _("_Settings"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); -} - -static void -menu_create_help (BonoboUIHandler *uih, - void *data) -{ - bonobo_ui_handler_menu_new_subtree (uih, "/Help", - _("_Help"), - NULL, -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0); - - bonobo_ui_handler_menu_new_item (uih, "/Help/Help index", - _("Help _Index"), - NULL, - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_help, "index.html"); - bonobo_ui_handler_menu_new_item (uih, "/Help/Getting started", - _("Getting _Started"), - NULL, - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_help, "usage-mainwindow.html"); - bonobo_ui_handler_menu_new_item (uih, "/Help/Using the mailer", - _("Using the _Mailer"), - NULL, - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_help, "usage-mail.html"); - bonobo_ui_handler_menu_new_item (uih, "/Help/Using the calendar", - _("Using the _Calendar"), - NULL, - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_help, "usage-calendar.html"); - bonobo_ui_handler_menu_new_item (uih, "/Help/Using the contact manager", - _("Using the C_ontact Manager"), - NULL, - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_help, "usage-contact.html"); - - bonobo_ui_handler_menu_new_separator (uih, "/Help/Separator1", -1); - - bonobo_ui_handler_menu_new_item (uih, "/Help/Submit bug report", - _("_Submit Bug Report"), - _("Submit bug report using Bug Buddy"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_run_bugbuddy, data); - - bonobo_ui_handler_menu_new_separator (uih, "/Help/Separator2", -1); - - bonobo_ui_handler_menu_new_item (uih, "/Help/About Evolution", - _("_About Evolution..."), - _("Show information about Evolution"), - -1, - BONOBO_UI_HANDLER_PIXMAP_NONE, NULL, - 0, 0, - command_about_box, data); -} - - -/* FIXME these must match the corresponding setup in the GnomeUIInfo and this sucks sucks. */ -#define SHORTCUT_BAR_TOGGLE_PATH "/View/Show shortcut bar" -#define FOLDER_BAR_TOGGLE_PATH "/View/Show folder bar" - -void -e_shell_view_menu_setup (EShellView *shell_view) -{ - BonoboUIHandler *uih; - - g_return_if_fail (shell_view != NULL); - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - - uih = e_shell_view_get_bonobo_ui_handler (shell_view); - - menu_create_file (uih, shell_view); - menu_create_edit (uih, shell_view); - menu_create_view (uih, shell_view); - menu_create_settings (uih, shell_view); - - bonobo_ui_handler_menu_new_placeholder (uih, "/"); - - menu_create_help (uih, shell_view); - - gtk_signal_connect (GTK_OBJECT (shell_view), "shortcut_bar_mode_changed", - GTK_SIGNAL_FUNC (shortcut_bar_mode_changed_cb), - SHORTCUT_BAR_TOGGLE_PATH); - gtk_signal_connect (GTK_OBJECT (shell_view), "folder_bar_mode_changed", - GTK_SIGNAL_FUNC (folder_bar_mode_changed_cb), - FOLDER_BAR_TOGGLE_PATH); - - /* Initialize the toggles. Yeah, this is, well, yuck. */ - - folder_bar_mode_changed_cb (shell_view, e_shell_view_get_folder_bar_mode (shell_view), - FOLDER_BAR_TOGGLE_PATH); - shortcut_bar_mode_changed_cb (shell_view, e_shell_view_get_shortcut_bar_mode (shell_view), - SHORTCUT_BAR_TOGGLE_PATH); -} diff --git a/shell/e-shell-view-menu.h b/shell/e-shell-view-menu.h deleted file mode 100644 index fb86cb9e98..0000000000 --- a/shell/e-shell-view-menu.h +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-view.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: - * Miguel de Icaza - * Ettore Perazzoli - */ - -#ifndef E_SHELL_VIEW_MENU_H -#define E_SHELL_VIEW_MENU_H - -#include - -#include "e-shell-view.h" - -void e_shell_view_menu_setup (EShellView *shell_view); - -#endif diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c deleted file mode 100644 index c7bc911aad..0000000000 --- a/shell/e-shell-view.c +++ /dev/null @@ -1,1379 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-view.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Authors: - * Ettore Perazzoli - * Miguel de Icaza - * Matt Loper - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include "widgets/misc/e-clipped-label.h" -#include "e-util/e-util.h" -#include "e-util/e-gui-utils.h" - -#include "evolution-shell-view.h" - -#include "e-shell-constants.h" -#include "e-shell-folder-title-bar.h" -#include "e-shell-utils.h" -#include "e-shell.h" -#include "e-shortcuts-view.h" -#include "e-storage-set-view.h" -#include "e-title-bar.h" - -#include "e-shell-view.h" -#include "e-shell-view-menu.h" - -#include - - -#define PARENT_TYPE gnome_app_get_type () /* Losing GnomeApp does not define GNOME_TYPE_APP. */ -static GnomeAppClass *parent_class = NULL; - -struct _EShellViewPrivate { - /* The shell. */ - EShell *shell; - - /* The UI handler. */ - BonoboUIHandler *uih; - - /* Currently displayed URI. */ - char *uri; - - /* The widgetry. */ - GtkWidget *appbar; - GtkWidget *hpaned; - GtkWidget *view_vbox; - GtkWidget *view_title_bar; - GtkWidget *view_hpaned; - GtkWidget *contents; - GtkWidget *notebook; - GtkWidget *shortcut_bar; - GtkWidget *storage_set_title_bar; - GtkWidget *storage_set_view; - GtkWidget *storage_set_view_box; - - /* The view we have already open. */ - GHashTable *uri_to_control; - - /* Position of the handles in the paneds, to be restored when we show elements - after hiding them. */ - unsigned int hpaned_position; - unsigned int view_hpaned_position; - - /* Status of the shortcut and folder bars. */ - EShellViewSubwindowMode shortcut_bar_mode; - EShellViewSubwindowMode folder_bar_mode; - - /* Timeout ID for the progress bar. */ - int progress_bar_timeout_id; - - /* Status of the progress bar. */ - int progress_bar_value; -}; - -enum { - SHORTCUT_BAR_MODE_CHANGED, - FOLDER_BAR_MODE_CHANGED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -#define DEFAULT_SHORTCUT_BAR_WIDTH 100 -#define DEFAULT_TREE_WIDTH 130 - -#define DEFAULT_WIDTH 705 -#define DEFAULT_HEIGHT 550 - - -/* Utility functions. */ - -static GtkWidget * -create_label_for_empty_page (void) -{ - GtkWidget *label; - - label = e_clipped_label_new (_("(No folder displayed)")); - gtk_widget_show (label); - - return label; -} - -/* FIXME this is broken. */ -static gboolean -bonobo_widget_is_dead (BonoboWidget *bonobo_widget) -{ - BonoboControlFrame *control_frame; - CORBA_Object corba_object; - CORBA_Environment ev; - gboolean is_dead; - - control_frame = bonobo_widget_get_control_frame (bonobo_widget); - corba_object = bonobo_control_frame_get_control (control_frame); - - CORBA_exception_init (&ev); - is_dead = CORBA_Object_non_existent (corba_object, &ev); - CORBA_exception_free (&ev); - - return is_dead; -} - - -/* Folder bar pop-up handling. */ - -static void disconnect_popup_signals (EShellView *shell_view); - -static void -storage_set_view_box_button_release_event_cb (GtkWidget *widget, - GdkEventButton *button_event, - void *data) -{ - EShellView *shell_view; - EShellViewPrivate *priv; - - shell_view = E_SHELL_VIEW (data); - priv = shell_view->priv; - - gdk_pointer_ungrab (GDK_CURRENT_TIME); - gtk_grab_remove (priv->storage_set_view_box); - - e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_HIDDEN); - - disconnect_popup_signals (shell_view); - - e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), FALSE); -} - -static void -popup_storage_set_view_close_button_clicked (ETitleBar *title_bar, - void *data) -{ - EShellView *shell_view; - EShellViewPrivate *priv; - - shell_view = E_SHELL_VIEW (data); - priv = shell_view->priv; - - gdk_pointer_ungrab (GDK_CURRENT_TIME); - gtk_grab_remove (priv->storage_set_view_box); - - disconnect_popup_signals (shell_view); - - e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_STICKY); - e_shell_folder_title_bar_set_toggle_state (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), FALSE); -} - -static void -storage_set_view_box_map_cb (GtkWidget *widget, - void *data) -{ - EShellView *shell_view; - EShellViewPrivate *priv; - - shell_view = E_SHELL_VIEW (data); - priv = shell_view->priv; - - if ((gdk_pointer_grab (widget->window, TRUE, - (GDK_BUTTON_PRESS_MASK - | GDK_BUTTON_RELEASE_MASK - | GDK_ENTER_NOTIFY_MASK - | GDK_LEAVE_NOTIFY_MASK - | GDK_POINTER_MOTION_MASK), - NULL, NULL, GDK_CURRENT_TIME) != 0)) { - g_warning ("%s -- pointer grab failed.", __FUNCTION__); - e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_STICKY); - return; - } - - gtk_grab_add (widget); - gtk_signal_connect (GTK_OBJECT (widget), "button_release_event", - GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb), shell_view); - gtk_signal_connect (GTK_OBJECT (priv->storage_set_view), "button_release_event", - GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb), shell_view); - gtk_signal_connect (GTK_OBJECT (priv->storage_set_title_bar), "close_button_clicked", - GTK_SIGNAL_FUNC (popup_storage_set_view_close_button_clicked), shell_view); -} - -static void -disconnect_popup_signals (EShellView *shell_view) -{ - EShellViewPrivate *priv; - - priv = shell_view->priv; - - gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_view_box), - GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb), - shell_view); - gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_view), - GTK_SIGNAL_FUNC (storage_set_view_box_button_release_event_cb), - shell_view); - gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_title_bar), - GTK_SIGNAL_FUNC (popup_storage_set_view_close_button_clicked), - shell_view); - gtk_signal_disconnect_by_func (GTK_OBJECT (priv->storage_set_view_box), - GTK_SIGNAL_FUNC (storage_set_view_box_map_cb), - shell_view); -} - -static void -pop_up_folder_bar (EShellView *shell_view) -{ - EShellViewPrivate *priv; - - priv = shell_view->priv; - - priv->folder_bar_mode = E_SHELL_VIEW_SUBWINDOW_TRANSIENT; - - /* We need to show the storage set view box and do a pointer grab to catch the - mouse clicks. But until the box is shown, we cannot grab. So we connect to - the "map" signa; `storage_set_view_box_map_cb' will do the grab. */ - - gtk_signal_connect (GTK_OBJECT (priv->storage_set_view_box), "map", - GTK_SIGNAL_FUNC (storage_set_view_box_map_cb), shell_view); - gtk_widget_show (priv->storage_set_view_box); - - e_paned_set_position (E_PANED (priv->view_hpaned), priv->view_hpaned_position); -} - - -/* Callbacks. */ - -/* Callback called when an icon on the shortcut bar gets clicked. */ -static void -activate_shortcut_cb (EShortcutsView *shortcut_view, - EShortcuts *shortcuts, - const char *uri, - void *data) -{ - EShellView *shell_view; - - shell_view = E_SHELL_VIEW (data); - - e_shell_view_display_uri (shell_view, uri); -} - -/* Callback called when a folder on the tree view gets clicked. */ -static void -folder_selected_cb (EStorageSetView *storage_set_view, - const char *path, - void *data) -{ - EShellView *shell_view; - char *uri; - - shell_view = E_SHELL_VIEW (data); - - uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL); - e_shell_view_display_uri (shell_view, uri); - g_free (uri); -} - -/* Callback called when the close button on the tree's title bar is clicked. */ -static void -storage_set_view_close_button_clicked_cb (ETitleBar *title_bar, - void *data) -{ - EShellView *shell_view; - - shell_view = E_SHELL_VIEW (data); - - e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_HIDDEN); -} - -/* Callback called when the title bar button has been pressed. */ -static void -title_bar_toggled_cb (EShellFolderTitleBar *title_bar, - gboolean state, - void *data) -{ - EShellView *shell_view; - - shell_view = E_SHELL_VIEW (data); - - if (! state) - return; - - if (e_shell_view_get_folder_bar_mode (shell_view) != E_SHELL_VIEW_SUBWINDOW_TRANSIENT) - pop_up_folder_bar (shell_view); -} - - -/* Widget setup. */ - -static void -setup_storage_set_subwindow (EShellView *shell_view) -{ - EShellViewPrivate *priv; - GtkWidget *storage_set_view; - GtkWidget *vbox; - GtkWidget *scrolled_window; - - priv = shell_view->priv; - - storage_set_view = e_storage_set_view_new (e_shell_get_storage_set (priv->shell)); - gtk_signal_connect (GTK_OBJECT (storage_set_view), "folder_selected", - GTK_SIGNAL_FUNC (folder_selected_cb), shell_view); - - scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - gtk_container_add (GTK_CONTAINER (scrolled_window), storage_set_view); - - vbox = gtk_vbox_new (FALSE, 0); - priv->storage_set_title_bar = e_title_bar_new (_("Folders")); - - gtk_box_pack_start (GTK_BOX (vbox), priv->storage_set_title_bar, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); - - gtk_signal_connect (GTK_OBJECT (priv->storage_set_title_bar), "close_button_clicked", - GTK_SIGNAL_FUNC (storage_set_view_close_button_clicked_cb), shell_view); - - gtk_widget_show (vbox); - gtk_widget_show (storage_set_view); - gtk_widget_show (priv->storage_set_title_bar); - gtk_widget_show (scrolled_window); - - priv->storage_set_view_box = vbox; - priv->storage_set_view = storage_set_view; -} - -static void -setup_widgets (EShellView *shell_view) -{ - EShellViewPrivate *priv; - GtkWidget *progress_bar; - - priv = shell_view->priv; - - /* The application bar. */ - - priv->appbar = gnome_appbar_new (TRUE, TRUE, GNOME_PREFERENCES_NEVER); - gnome_app_set_statusbar (GNOME_APP (shell_view), priv->appbar); - - /* The progress bar. */ - - progress_bar = GNOME_APPBAR (GNOME_APP (shell_view)->statusbar)->progress; - - gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progress_bar), GTK_PROGRESS_LEFT_TO_RIGHT); - gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (progress_bar), GTK_PROGRESS_CONTINUOUS); - - /* The shortcut bar. */ - - priv->shortcut_bar = e_shortcuts_new_view (e_shell_get_shortcuts (priv->shell)); - gtk_signal_connect (GTK_OBJECT (priv->shortcut_bar), "activate_shortcut", - GTK_SIGNAL_FUNC (activate_shortcut_cb), shell_view); - - /* The storage set view. */ - - setup_storage_set_subwindow (shell_view); - - /* The tabless notebook which we used to contain the views. */ - - priv->notebook = gtk_notebook_new (); - gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE); - - /* Page for "No URL displayed" message. */ - - gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), create_label_for_empty_page (), NULL); - - /* Put things into a paned and the paned into the GnomeApp. */ - - priv->view_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (priv->view_vbox), 2); - - priv->view_title_bar = e_shell_folder_title_bar_new (); - gtk_signal_connect (GTK_OBJECT (priv->view_title_bar), "title_toggled", - GTK_SIGNAL_FUNC (title_bar_toggled_cb), shell_view); - - priv->view_hpaned = e_hpaned_new (); - e_paned_add1 (E_PANED (priv->view_hpaned), priv->storage_set_view_box); - e_paned_add2 (E_PANED (priv->view_hpaned), priv->notebook); - e_paned_set_position (E_PANED (priv->view_hpaned), DEFAULT_TREE_WIDTH); - - gtk_box_pack_start (GTK_BOX (priv->view_vbox), priv->view_title_bar, - FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (priv->view_vbox), priv->view_hpaned, - TRUE, TRUE, 2); - - priv->hpaned = e_hpaned_new (); - e_paned_add1 (E_PANED (priv->hpaned), priv->shortcut_bar); - e_paned_add2 (E_PANED (priv->hpaned), priv->view_vbox); - e_paned_set_position (E_PANED (priv->hpaned), DEFAULT_SHORTCUT_BAR_WIDTH); - - gnome_app_set_contents (GNOME_APP (shell_view), priv->hpaned); - - /* Show stuff. */ - - gtk_widget_show (priv->shortcut_bar); - gtk_widget_show (priv->storage_set_view); - gtk_widget_show (priv->storage_set_view_box); - gtk_widget_show (priv->notebook); - gtk_widget_show (priv->hpaned); - gtk_widget_show (priv->view_hpaned); - gtk_widget_show (priv->view_vbox); - gtk_widget_show (priv->view_title_bar); - - /* By default, both the folder bar and shortcut bar are visible. */ - priv->shortcut_bar_mode = E_SHELL_VIEW_SUBWINDOW_STICKY; - priv->folder_bar_mode = E_SHELL_VIEW_SUBWINDOW_STICKY; - - /* FIXME: Session management and stuff? */ - gtk_window_set_default_size (GTK_WINDOW (shell_view), DEFAULT_WIDTH, DEFAULT_HEIGHT); -} - - -/* BonoboUIHandler setup. */ - -static void -setup_bonobo_ui_handler (EShellView *shell_view) -{ - BonoboUIHandler *uih; - EShellViewPrivate *priv; - - priv = shell_view->priv; - - uih = bonobo_ui_handler_new (); - - bonobo_ui_handler_set_app (uih, GNOME_APP (shell_view)); - bonobo_ui_handler_create_menubar (uih); - /* bonobo_ui_handler_create_toolbar (uih, "Toolbar"); */ - bonobo_ui_handler_set_statusbar (uih, priv->appbar); - - priv->uih = uih; -} - - -/* GtkObject methods. */ - -static void -hash_forall_destroy_control (void *name, - void *value, - void *data) -{ - BonoboWidget *bonobo_widget; - - bonobo_widget = BONOBO_WIDGET (value); - gtk_widget_destroy (GTK_WIDGET (bonobo_widget)); - - g_free (name); -} - -static void -destroy (GtkObject *object) -{ - EShellView *shell_view; - EShellViewPrivate *priv; - - shell_view = E_SHELL_VIEW (object); - priv = shell_view->priv; - - g_hash_table_foreach (priv->uri_to_control, hash_forall_destroy_control, NULL); - g_hash_table_destroy (priv->uri_to_control); - - bonobo_object_unref (BONOBO_OBJECT (priv->uih)); - - g_free (priv->uri); - - if (priv->progress_bar_timeout_id != 0) - gtk_timeout_remove (priv->progress_bar_timeout_id); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - -/* Unrealize handler */ -static void -unrealize (GtkWidget *widget) -{ - if (GTK_WIDGET_CLASS (parent_class)->unrealize) - (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); - - /* We flush so that all the destroy window requests for foreign windows - * get sent over the X wire. Hopefully this will diminish the chance of - * hitting the CORBA (sync) vs. Xlib (async) race conditions. This is - * not the complete fix, which should actually be put in Bonobo and - * completed. FIXME. - */ - gdk_flush (); -} - -static int -delete_event (GtkWidget *widget, - GdkEventAny *event) -{ - EShellView *shell_view; - EShell *shell; - - shell_view = E_SHELL_VIEW (widget); - - shell = e_shell_view_get_shell (shell_view); - e_shell_quit (shell); - /* FIXME: Is this right, or should it be FALSE? */ - return TRUE; -} - - -/* Initialization. */ - -static void -class_init (EShellViewClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - - object_class = (GtkObjectClass *) klass; - widget_class = (GtkWidgetClass *) klass; - - object_class->destroy = destroy; - - widget_class->unrealize = unrealize; - widget_class->delete_event = delete_event; - - parent_class = gtk_type_class (gnome_app_get_type ()); - - signals[SHORTCUT_BAR_MODE_CHANGED] - = gtk_signal_new ("shortcut_bar_mode_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShellViewClass, shortcut_bar_mode_changed), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - signals[FOLDER_BAR_MODE_CHANGED] - = gtk_signal_new ("folder_bar_mode_changed", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShellViewClass, folder_bar_mode_changed), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EShellView *shell_view) -{ - EShellViewPrivate *priv; - - priv = g_new (EShellViewPrivate, 1); - - priv->shell = NULL; - priv->uih = NULL; - priv->uri = NULL; - - priv->appbar = NULL; - priv->hpaned = NULL; - priv->view_hpaned = NULL; - priv->contents = NULL; - priv->notebook = NULL; - - priv->storage_set_title_bar = NULL; - priv->storage_set_view = NULL; - priv->storage_set_view_box = NULL; - priv->shortcut_bar = NULL; - - priv->shortcut_bar_mode = E_SHELL_VIEW_SUBWINDOW_HIDDEN; - priv->folder_bar_mode = E_SHELL_VIEW_SUBWINDOW_HIDDEN; - - priv->hpaned_position = 0; - priv->view_hpaned_position = 0; - - priv->uri_to_control = g_hash_table_new (g_str_hash, g_str_equal); - - priv->progress_bar_timeout_id = 0; - priv->progress_bar_value = 0; - - shell_view->priv = priv; -} - - -/* Progress bar handling. */ - -#define PROGRESS_BAR_TIMEOUT 80 - -static int -progress_bar_timeout_cb (void *data) -{ - EShellView *shell_view; - EShellViewPrivate *priv; - GtkWidget *progress_bar; - - shell_view = E_SHELL_VIEW (data); - priv = shell_view->priv; - progress_bar = GNOME_APPBAR (GNOME_APP (shell_view)->statusbar)->progress; - - priv->progress_bar_value = ! priv->progress_bar_value; - gtk_progress_set_value (GTK_PROGRESS (progress_bar), priv->progress_bar_value); - - return TRUE; -} - -static void -start_progress_bar (EShellView *shell_view) -{ - EShellViewPrivate *priv; - GtkWidget *progress_bar; - - priv = shell_view->priv; - progress_bar = GNOME_APPBAR (GNOME_APP (shell_view)->statusbar)->progress; - - if (priv->progress_bar_timeout_id != 0) - return; - - priv->progress_bar_timeout_id = gtk_timeout_add (PROGRESS_BAR_TIMEOUT, - progress_bar_timeout_cb, - shell_view); - - gtk_progress_set_activity_mode (GTK_PROGRESS (progress_bar), TRUE); - gtk_progress_set_value (GTK_PROGRESS (progress_bar), priv->progress_bar_value); -} - -static void -stop_progress_bar (EShellView *shell_view) -{ - EShellViewPrivate *priv; - GtkWidget *progress_bar; - - priv = shell_view->priv; - progress_bar = GNOME_APPBAR (GNOME_APP (shell_view)->statusbar)->progress; - - if (priv->progress_bar_timeout_id != 0) { - gtk_timeout_remove (priv->progress_bar_timeout_id); - priv->progress_bar_timeout_id = 0; - } - - gtk_progress_set_activity_mode (GTK_PROGRESS (progress_bar), FALSE); - gtk_progress_set_value (GTK_PROGRESS (progress_bar), 0); -} - - -/* EvolutionShellView interface callbacks. */ - -static void -shell_view_interface_set_message_cb (EvolutionShellView *shell_view, - const char *message, - gboolean busy, - void *data) -{ - GnomeApp *app; - GnomeAppBar *app_bar; - - app = GNOME_APP (data); - app_bar = GNOME_APPBAR (app->statusbar); - - gtk_progress_set_value (GTK_PROGRESS (app_bar->progress), 1.0); - - if (message != NULL) - gnome_appbar_set_status (app_bar, message); - else - gnome_appbar_set_status (app_bar, ""); - - if (busy) - start_progress_bar (E_SHELL_VIEW (data)); - else - stop_progress_bar (E_SHELL_VIEW (data)); -} - -static void -shell_view_interface_unset_message_cb (EvolutionShellView *shell_view, - void *data) -{ - GnomeApp *app; - GnomeAppBar *app_bar; - - app = GNOME_APP (data); - app_bar = GNOME_APPBAR (app->statusbar); - - gnome_appbar_set_status (app_bar, ""); - - stop_progress_bar (E_SHELL_VIEW (data)); -} - - -void -e_shell_view_construct (EShellView *shell_view, - EShell *shell) -{ - EShellViewPrivate *priv; - - g_return_if_fail (shell_view != NULL); - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - - priv = shell_view->priv; - - gnome_app_construct (GNOME_APP (shell_view), "evolution", "Evolution"); - - priv->shell = shell; - - setup_widgets (shell_view); - setup_bonobo_ui_handler (shell_view); - - e_shell_view_menu_setup (shell_view); - - e_shell_view_set_folder_bar_mode (shell_view, E_SHELL_VIEW_SUBWINDOW_HIDDEN); -} - -GtkWidget * -e_shell_view_new (EShell *shell) -{ - GtkWidget *new; - - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - new = gtk_type_new (e_shell_view_get_type ()); - e_shell_view_construct (E_SHELL_VIEW (new), shell); - - return new; -} - - -static const char * -get_storage_set_path_from_uri (const char *uri) -{ - const char *colon; - - if (uri == NULL) - return NULL; - - if (g_path_is_absolute (uri)) - return NULL; - - colon = strchr (uri, ':'); - if (colon == NULL || colon == uri || colon[1] == '\0') - return NULL; - - if (! g_path_is_absolute (colon + 1)) - return NULL; - - if (g_strncasecmp (uri, E_SHELL_URI_PREFIX, colon - uri) != 0) - return NULL; - - return colon + 1; -} - -static void -update_window_icon (EShellView *shell_view, - EFolder *folder) -{ - EShellViewPrivate *priv; - const char *type; - const char *icon_name; - char *icon_path; - - priv = shell_view->priv; - - if (folder == NULL) - type = NULL; - else - type = e_folder_get_type_string (folder); - - if (type == NULL) { - icon_path = NULL; - } else { - EFolderTypeRegistry *folder_type_registry; - - folder_type_registry = e_shell_get_folder_type_registry (priv->shell); - icon_name = e_folder_type_registry_get_icon_name_for_type (folder_type_registry, type); - if (icon_name == NULL) - icon_path = NULL; - else - icon_path = e_shell_get_icon_path (icon_name, TRUE); - } - - if (icon_path == NULL) { - gnome_window_icon_set_from_default (GTK_WINDOW (shell_view)); - } else { - gnome_window_icon_set_from_file (GTK_WINDOW (shell_view), icon_path); - g_free (icon_path); - } -} - -static void -update_folder_title_bar (EShellView *shell_view, - EFolder *folder) -{ - EShellViewPrivate *priv; - EFolderTypeRegistry *folder_type_registry; - GdkPixbuf *folder_icon; - const char *folder_name; - const char *folder_type_name; - - priv = shell_view->priv; - - if (folder == NULL) - folder_type_name = NULL; - else - folder_type_name = e_folder_get_type_string (folder); - - if (folder_type_name == NULL) { - folder_name = NULL; - folder_icon = NULL; - } else { - folder_type_registry = e_shell_get_folder_type_registry (priv->shell); - folder_icon = e_folder_type_registry_get_icon_for_type (folder_type_registry, - folder_type_name, - TRUE); - folder_name = e_folder_get_name (folder); - } - - e_shell_folder_title_bar_set_icon (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), folder_icon); - e_shell_folder_title_bar_set_title (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), folder_name); -} - -static void -update_for_current_uri (EShellView *shell_view) -{ - EShellViewPrivate *priv; - EFolder *folder; - const char *folder_name; - const char *path; - char *window_title; - - priv = shell_view->priv; - - path = get_storage_set_path_from_uri (priv->uri); - - if (path == NULL) - folder = NULL; - else - folder = e_storage_set_get_folder (e_shell_get_storage_set (priv->shell), - path); - - if (folder == NULL) - folder_name = _("None"); - else - folder_name = e_folder_get_name (folder); - - window_title = g_strdup_printf (_("Evolution - %s"), folder_name); - gtk_window_set_title (GTK_WINDOW (shell_view), window_title); - g_free (window_title); - - update_folder_title_bar (shell_view, folder); - - update_window_icon (shell_view, folder); - - gtk_signal_handler_block_by_func (GTK_OBJECT (priv->storage_set_view), - GTK_SIGNAL_FUNC (folder_selected_cb), - shell_view); - e_storage_set_view_set_current_folder (E_STORAGE_SET_VIEW (priv->storage_set_view), - path); - gtk_signal_handler_unblock_by_func (GTK_OBJECT (priv->storage_set_view), - GTK_SIGNAL_FUNC (folder_selected_cb), - shell_view); -} - -/* This displays the specified page, doing the appropriate Bonobo activation/deactivation - magic to make sure things work nicely. FIXME: Crappy way to solve the issue. */ -static void -set_current_notebook_page (EShellView *shell_view, - int page_num) -{ - EShellViewPrivate *priv; - GtkNotebook *notebook; - GtkWidget *current; - BonoboControlFrame *control_frame; - int current_page; - - priv = shell_view->priv; - notebook = GTK_NOTEBOOK (priv->notebook); - - current_page = gtk_notebook_get_current_page (notebook); - if (current_page == page_num) - return; - - if (current_page != -1 && current_page != 0) { - current = gtk_notebook_get_nth_page (notebook, current_page); - control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (current)); - - bonobo_control_frame_set_autoactivate (control_frame, FALSE); - bonobo_control_frame_control_deactivate (control_frame); - } - - gtk_notebook_set_page (notebook, page_num); - - if (page_num == -1 || page_num == 0) - return; - - current = gtk_notebook_get_nth_page (notebook, page_num); - control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (current)); - - bonobo_control_frame_set_autoactivate (control_frame, FALSE); - bonobo_control_frame_control_activate (control_frame); -} - -static void -setup_evolution_shell_view_interface (EShellView *shell_view, - GtkWidget *control) -{ - BonoboControlFrame *control_frame; - EvolutionShellView *shell_view_interface; - - control_frame = bonobo_widget_get_control_frame (BONOBO_WIDGET (control)); - shell_view_interface = evolution_shell_view_new (); - - gtk_signal_connect_while_alive (GTK_OBJECT (shell_view_interface), "set_message", - GTK_SIGNAL_FUNC (shell_view_interface_set_message_cb), - shell_view, GTK_OBJECT (shell_view)); - gtk_signal_connect_while_alive (GTK_OBJECT (shell_view_interface), "unset_message", - GTK_SIGNAL_FUNC (shell_view_interface_unset_message_cb), - shell_view, GTK_OBJECT (shell_view)); - - bonobo_object_add_interface (BONOBO_OBJECT (control_frame), - BONOBO_OBJECT (shell_view_interface)); -} - -/* Create a new view for @uri with @control. It assumes a view for @uri does not exist yet. */ -static GtkWidget * -get_control_for_uri (EShellView *shell_view, - const char *uri) -{ - EShellViewPrivate *priv; - EFolderTypeRegistry *folder_type_registry; - EStorageSet *storage_set; - EFolder *folder; - Bonobo_UIHandler corba_uih; - EvolutionShellComponentClient *handler_client; - Bonobo_Control corba_control; - Evolution_ShellComponent handler; - const char *path; - const char *folder_type; - GtkWidget *control; - CORBA_Environment ev; - - priv = shell_view->priv; - - path = strchr (uri, ':'); - if (path == NULL) - return NULL; - - path++; - if (*path == '\0') - return NULL; - - storage_set = e_shell_get_storage_set (priv->shell); - folder_type_registry = e_shell_get_folder_type_registry (priv->shell); - - folder = e_storage_set_get_folder (storage_set, path); - if (folder == NULL) - return NULL; - - folder_type = e_folder_get_type_string (folder); - if (folder_type == NULL) - return NULL; - - handler_client = e_folder_type_registry_get_handler_for_type (folder_type_registry, folder_type); - if (handler_client == NULL) - return NULL; - - handler = bonobo_object_corba_objref (BONOBO_OBJECT (handler_client)); - if (handler_client == CORBA_OBJECT_NIL) - return NULL; - - CORBA_exception_init (&ev); - - corba_control = Evolution_ShellComponent_create_view ( - handler, e_folder_get_physical_uri (folder), folder_type, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - corba_uih = bonobo_object_corba_objref (BONOBO_OBJECT (priv->uih)); - control = bonobo_widget_new_control_from_objref (corba_control, corba_uih); - - setup_evolution_shell_view_interface (shell_view, control); - - return control; -} - -static gboolean -show_existing_view (EShellView *shell_view, - const char *uri, - GtkWidget *control) -{ - EShellViewPrivate *priv; - int notebook_page; - - g_print ("Already have view for %s\n", uri); - - priv = shell_view->priv; - - notebook_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), control); - g_assert (notebook_page != -1); - - /* A BonoboWidget can be a "zombie" in the sense that its actual - control is dead; if it's zombie, we have to recreate it. */ - if (bonobo_widget_is_dead (BONOBO_WIDGET (control))) { - GtkWidget *parent; - Bonobo_UIHandler uih; - - parent = control->parent; - uih = bonobo_object_corba_objref (BONOBO_OBJECT (priv->uih)); - - /* Out with the old. */ - gtk_container_remove (GTK_CONTAINER (parent), control); - g_hash_table_remove (priv->uri_to_control, uri); - - /* In with the new. */ - control = get_control_for_uri (shell_view, uri); - if (control == NULL) - return FALSE; - - gtk_container_add (GTK_CONTAINER (parent), control); - g_hash_table_insert (priv->uri_to_control, g_strdup (uri), control); - - /* Show. */ - gtk_widget_show (control); - } - - set_current_notebook_page (shell_view, notebook_page); - - return TRUE; -} - -static gboolean -create_new_view_for_uri (EShellView *shell_view, - const char *uri) -{ - GtkWidget *control; - EShellViewPrivate *priv; - int page_num; - - priv = shell_view->priv; - - control = get_control_for_uri (shell_view, uri); - if (control == NULL) - return FALSE; - - gtk_widget_show (control); - - gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), control, NULL); - - page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), control); - g_assert (page_num != -1); - set_current_notebook_page (shell_view, page_num); - - g_hash_table_insert (priv->uri_to_control, g_strdup (uri), control); - - return TRUE; -} - -gboolean -e_shell_view_display_uri (EShellView *shell_view, - const char *uri) -{ - EShellViewPrivate *priv; - GtkWidget *control; - gboolean retval; - - g_return_val_if_fail (shell_view != NULL, FALSE); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE); - - priv = shell_view->priv; - - if (uri == NULL) { - gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), 0); - gtk_notebook_prepend_page (GTK_NOTEBOOK (priv->notebook), - create_label_for_empty_page (), NULL); - - set_current_notebook_page (shell_view, 0); - - if (priv->uri != NULL) { - g_free (priv->uri); - priv->uri = NULL; - } - - retval = TRUE; - - goto end; - } - - if (strncmp (uri, E_SHELL_URI_PREFIX, E_SHELL_URI_PREFIX_LEN) != 0) { - retval = FALSE; - goto end; - } - - control = g_hash_table_lookup (priv->uri_to_control, uri); - if (control != NULL) { - g_assert (GTK_IS_WIDGET (control)); - show_existing_view (shell_view, uri, control); - } else if (! create_new_view_for_uri (shell_view, uri)) { - retval = FALSE; - goto end; - } - - g_free (priv->uri); - priv->uri = g_strdup (uri); - - retval = TRUE; - - end: - update_for_current_uri (shell_view); - return retval; -} - - -void -e_shell_view_set_shortcut_bar_mode (EShellView *shell_view, - EShellViewSubwindowMode mode) -{ - EShellViewPrivate *priv; - - g_return_if_fail (shell_view != NULL); - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - g_return_if_fail (mode == E_SHELL_VIEW_SUBWINDOW_STICKY - || mode == E_SHELL_VIEW_SUBWINDOW_HIDDEN); - - priv = shell_view->priv; - - if (priv->shortcut_bar_mode == mode) - return; - - if (mode == E_SHELL_VIEW_SUBWINDOW_STICKY) { - if (! GTK_WIDGET_VISIBLE (priv->shortcut_bar)) { - gtk_widget_show (priv->shortcut_bar); - e_paned_set_position (E_PANED (priv->hpaned), priv->hpaned_position); - } - } else { - if (GTK_WIDGET_VISIBLE (priv->shortcut_bar)) { - gtk_widget_hide (priv->shortcut_bar); - /* FIXME this is a private field! */ - priv->hpaned_position = E_PANED (priv->hpaned)->child1_size; - e_paned_set_position (E_PANED (priv->hpaned), 0); - } - } - - priv->shortcut_bar_mode = mode; - - gtk_signal_emit (GTK_OBJECT (shell_view), signals[SHORTCUT_BAR_MODE_CHANGED], mode); -} - -/** - * e_shell_view_set_folder_bar_mode: - * @shell_view: - * @mode: - * - * Set the visualization mode for the folder bar's subwindow. - **/ -void -e_shell_view_set_folder_bar_mode (EShellView *shell_view, - EShellViewSubwindowMode mode) -{ - EShellViewPrivate *priv; - - g_return_if_fail (shell_view != NULL); - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - g_return_if_fail (mode == E_SHELL_VIEW_SUBWINDOW_STICKY - || mode == E_SHELL_VIEW_SUBWINDOW_HIDDEN); - - priv = shell_view->priv; - - if (priv->folder_bar_mode == mode) - return; - - if (mode == E_SHELL_VIEW_SUBWINDOW_STICKY) { - if (! GTK_WIDGET_VISIBLE (priv->storage_set_view_box)) { - gtk_widget_show (priv->storage_set_view_box); - e_paned_set_position (E_PANED (priv->view_hpaned), priv->view_hpaned_position); - } - - e_shell_folder_title_bar_set_clickable (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), - FALSE); - } else { - if (GTK_WIDGET_VISIBLE (priv->storage_set_view_box)) { - gtk_widget_hide (priv->storage_set_view_box); - /* FIXME this is a private field! */ - priv->view_hpaned_position = E_PANED (priv->view_hpaned)->child1_size; - e_paned_set_position (E_PANED (priv->view_hpaned), 0); - } - - e_shell_folder_title_bar_set_clickable (E_SHELL_FOLDER_TITLE_BAR (priv->view_title_bar), - TRUE); - } - - priv->folder_bar_mode = mode; - - gtk_signal_emit (GTK_OBJECT (shell_view), signals[FOLDER_BAR_MODE_CHANGED], mode); -} - -EShellViewSubwindowMode -e_shell_view_get_shortcut_bar_mode (EShellView *shell_view) -{ - g_return_val_if_fail (shell_view != NULL, E_SHELL_VIEW_SUBWINDOW_HIDDEN); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), E_SHELL_VIEW_SUBWINDOW_HIDDEN); - - return shell_view->priv->shortcut_bar_mode; -} - -EShellViewSubwindowMode -e_shell_view_get_folder_bar_mode (EShellView *shell_view) -{ - g_return_val_if_fail (shell_view != NULL, E_SHELL_VIEW_SUBWINDOW_HIDDEN); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), E_SHELL_VIEW_SUBWINDOW_HIDDEN); - - return shell_view->priv->folder_bar_mode; -} - - -EShell * -e_shell_view_get_shell (EShellView *shell_view) -{ - g_return_val_if_fail (shell_view != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - - return shell_view->priv->shell; -} - -BonoboUIHandler * -e_shell_view_get_bonobo_ui_handler (EShellView *shell_view) -{ - g_return_val_if_fail (shell_view != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - - return shell_view->priv->uih; -} - -GtkWidget * -e_shell_view_get_appbar (EShellView *shell_view) -{ - g_return_val_if_fail (shell_view != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - - return shell_view->priv->appbar; -} - -const char * -e_shell_view_get_current_uri (EShellView *shell_view) -{ - g_return_val_if_fail (shell_view != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - - return shell_view->priv->uri; -} - - -/** - * e_shell_view_save_settings: - * @shell_view: - * @prefix: - * - * Save settings for @shell_view at the specified gnome config @prefix - * - * Return value: TRUE if successful, FALSE if not. - **/ -gboolean -e_shell_view_save_settings (EShellView *shell_view, - const char *prefix) -{ - EShellViewPrivate *priv; - const char *uri; - - g_return_val_if_fail (shell_view != NULL, FALSE); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE); - g_return_val_if_fail (prefix != NULL, FALSE); - - priv = shell_view->priv; - - gnome_config_push_prefix (prefix); - - gnome_config_set_int ("FolderBarMode", e_shell_view_get_folder_bar_mode (shell_view)); - gnome_config_set_int ("ShortcutBarMode", e_shell_view_get_shortcut_bar_mode (shell_view)); - gnome_config_set_int ("HPanedPosition", e_paned_get_position (E_PANED (priv->hpaned))); - gnome_config_set_int ("ViewHPanedPosition", e_paned_get_position (E_PANED (priv->view_hpaned))); - - uri = e_shell_view_get_current_uri (shell_view); - if (uri != NULL) - gnome_config_set_string ("DisplayedURI", uri); - else - gnome_config_clean_section ("DisplayedURI"); - - gnome_config_pop_prefix (); - - return TRUE; -} - -/** - * e_shell_view_load_settings: - * @shell_view: - * @prefix: - * - * Load settings for @shell_view at the specified gnome config @prefix - * - * Return value: - **/ -gboolean -e_shell_view_load_settings (EShellView *shell_view, - const char *prefix) -{ - EShellViewPrivate *priv; - int val; - char *stringval; - - g_return_val_if_fail (shell_view != NULL, FALSE); - g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), FALSE); - g_return_val_if_fail (prefix != NULL, FALSE); - - priv = shell_view->priv; - - gnome_config_push_prefix (prefix); - - val = gnome_config_get_int ("FolderBarMode"); - e_shell_view_set_folder_bar_mode (shell_view, val); - - val = gnome_config_get_int ("ShortcutBarMode"); - e_shell_view_set_shortcut_bar_mode (shell_view, val); - - val = gnome_config_get_int ("HPanedPosition"); - e_paned_set_position (E_PANED (priv->hpaned), val); - - val = gnome_config_get_int ("ViewHPanedPosition"); - e_paned_set_position (E_PANED (priv->view_hpaned), val); - - stringval = gnome_config_get_string ("DisplayedURI"); - e_shell_view_display_uri (shell_view, stringval); - g_free (stringval); - - gnome_config_pop_prefix (); - - return TRUE; -} - - -E_MAKE_TYPE (e_shell_view, "EShellView", EShellView, class_init, init, PARENT_TYPE) diff --git a/shell/e-shell-view.h b/shell/e-shell-view.h deleted file mode 100644 index 69a0e5c22c..0000000000 --- a/shell/e-shell-view.h +++ /dev/null @@ -1,103 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell-view.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_SHELL_VIEW_H_ -#define _E_SHELL_VIEW_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "e-shell.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - - -#define E_TYPE_SHELL_VIEW (e_shell_view_get_type ()) -#define E_SHELL_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_VIEW, EShellView)) -#define E_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_VIEW, EShellViewClass)) -#define E_IS_SHELL_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_VIEW)) -#define E_IS_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_VIEW)) - -typedef struct _EShellView EShellView; -typedef struct _EShellViewPrivate EShellViewPrivate; -typedef struct _EShellViewClass EShellViewClass; - -enum _EShellViewSubwindowMode { - E_SHELL_VIEW_SUBWINDOW_HIDDEN, - E_SHELL_VIEW_SUBWINDOW_TRANSIENT, - E_SHELL_VIEW_SUBWINDOW_STICKY -}; -typedef enum _EShellViewSubwindowMode EShellViewSubwindowMode; - -struct _EShellView { - GnomeApp parent; - - EShellViewPrivate *priv; -}; - -struct _EShellViewClass { - GnomeAppClass parent_class; - - /* Signals. */ - void (* shortcut_bar_mode_changed) (EShellView *shell_view, EShellViewSubwindowMode new_mode); - void (* folder_bar_mode_changed) (EShellView *shell_view, EShellViewSubwindowMode mode); -}; - - -GtkType e_shell_view_get_type (void); -void e_shell_view_construct (EShellView *shell_view, - EShell *shell); -GtkWidget *e_shell_view_new (EShell *shell); - -gboolean e_shell_view_display_uri (EShellView *shell_view, - const char *uri); - -void e_shell_view_set_shortcut_bar_mode (EShellView *shell_view, - EShellViewSubwindowMode mode); -void e_shell_view_set_folder_bar_mode (EShellView *shell_view, - EShellViewSubwindowMode mode); -EShellViewSubwindowMode e_shell_view_get_shortcut_bar_mode (EShellView *shell_view); -EShellViewSubwindowMode e_shell_view_get_folder_bar_mode (EShellView *shell_view); - -EShell *e_shell_view_get_shell (EShellView *shell_view); -BonoboUIHandler *e_shell_view_get_bonobo_ui_handler (EShellView *shell_view); -GtkWidget *e_shell_view_get_appbar (EShellView *shell_view); -const char *e_shell_view_get_current_uri (EShellView *shell_view); - -gboolean e_shell_view_save_settings (EShellView *shell_view, - const char *prefix); -gboolean e_shell_view_load_settings (EShellView *shell_view, - const char *prefix); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_SHELL_VIEW_H_ */ diff --git a/shell/e-shell.c b/shell/e-shell.c deleted file mode 100644 index 26a556de96..0000000000 --- a/shell/e-shell.c +++ /dev/null @@ -1,846 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#include "e-util/e-gui-utils.h" -#include "e-util/e-util.h" - -#include "e-component-registry.h" -#include "e-corba-storage-registry.h" -#include "e-folder-type-registry.h" -#include "e-local-storage.h" -#include "e-shell-constants.h" -#include "e-shell-folder-selection-dialog.h" -#include "e-shell-view.h" -#include "e-shortcuts.h" -#include "e-storage-set.h" - -#include "e-shell.h" - - -#define PARENT_TYPE BONOBO_OBJECT_TYPE -static BonoboObjectClass *parent_class = NULL; - -struct _EShellPrivate { - char *local_directory; - - GList *views; - - EStorageSet *storage_set; - EShortcuts *shortcuts; - EFolderTypeRegistry *folder_type_registry; - - EComponentRegistry *component_registry; - - ECorbaStorageRegistry *corba_storage_registry; -}; - - -/* Constants. */ - -/* FIXME: We need a component repository instead. */ - -#define SHORTCUTS_FILE_NAME "shortcuts.xml" -#define LOCAL_STORAGE_DIRECTORY "local" - -#define MAIL_COMPONENT_ID "OAFIID:evolution-shell-component:evolution-mail:d3cb3ed6-a654-4337-8aa0-f443751d6d1b" -#define CALENDAR_COMPONENT_ID "OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51" -#define ADDRESSBOOK_COMPONENT_ID "OAFIID:evolution-shell-component:addressbook:b7a26547-7014-4bb5-98ab-2bcac2bb55ca" - - -enum { - NO_VIEWS_LEFT, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* Callback for the folder selection dialog. */ - -static void -folder_selection_dialog_cancelled_cb (EShellFolderSelectionDialog *folder_selection_dialog, - void *data) -{ - Evolution_FolderSelectionListener listener; - CORBA_Environment ev; - - listener = gtk_object_get_data (GTK_OBJECT (folder_selection_dialog), "corba_listener"); - - CORBA_exception_init (&ev); - - Evolution_FolderSelectionListener_cancel (listener, &ev); - - CORBA_exception_free (&ev); - - gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog)); -} - -static void -folder_selection_dialog_folder_selected_cb (EShellFolderSelectionDialog *folder_selection_dialog, - const char *path, - void *data) -{ - CORBA_Environment ev; - EShell *shell; - Evolution_FolderSelectionListener listener; - EStorageSet *storage_set; - EFolder *folder; - char *uri; - const char *physical_uri; - - shell = E_SHELL (data); - listener = gtk_object_get_data (GTK_OBJECT (folder_selection_dialog), "corba_listener"); - - CORBA_exception_init (&ev); - - storage_set = e_shell_get_storage_set (shell); - folder = e_storage_set_get_folder (storage_set, path); - - uri = g_strconcat (E_SHELL_URI_PREFIX, path, NULL); - - if (folder == NULL) - physical_uri = ""; - else - physical_uri = e_folder_get_physical_uri (folder); - - Evolution_FolderSelectionListener_selected (listener, uri, physical_uri, &ev); - g_free (uri); - - CORBA_exception_free (&ev); - - gtk_widget_destroy (GTK_WIDGET (folder_selection_dialog)); -} - - -/* CORBA interface implementation. */ - -static POA_Evolution_Shell__vepv shell_vepv; - -static POA_Evolution_Shell * -create_servant (void) -{ - POA_Evolution_Shell *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_Shell *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &shell_vepv; - - CORBA_exception_init (&ev); - - POA_Evolution_Shell__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - return servant; -} - -static Evolution_ShellComponent -impl_Shell_get_component_for_type (PortableServer_Servant servant, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponentClient *handler; - EFolderTypeRegistry *folder_type_registry; - Evolution_ShellComponent corba_component; - EShell *shell; - - bonobo_object = bonobo_object_from_servant (servant); - shell = E_SHELL (bonobo_object); - folder_type_registry = shell->priv->folder_type_registry; - - handler = e_folder_type_registry_get_handler_for_type (folder_type_registry, type); - - if (handler == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, ex_Evolution_Shell_NotFound, NULL); - return CORBA_OBJECT_NIL; - } - - corba_component = bonobo_object_corba_objref (BONOBO_OBJECT (handler)); - Bonobo_Unknown_ref (corba_component, ev); - - return CORBA_Object_duplicate (corba_component, ev); -} - -static void -corba_listener_destroy_notify (void *data) -{ - CORBA_Environment ev; - Evolution_FolderSelectionListener listener_interface; - - listener_interface = (Evolution_FolderSelectionListener) data; - - CORBA_exception_init (&ev); - CORBA_Object_release (listener_interface, &ev); - CORBA_exception_free (&ev); -} - -static void -impl_Shell_user_select_folder (PortableServer_Servant servant, - const Evolution_FolderSelectionListener listener, - const CORBA_char *title, - const CORBA_char *default_folder, - const Evolution_Shell_FolderTypeList *corba_allowed_types, - CORBA_Environment *ev) -{ - GtkWidget *folder_selection_dialog; - BonoboObject *bonobo_object; - Evolution_FolderSelectionListener listener_duplicate; - EShell *shell; - const char **allowed_types; - int i; - - bonobo_object = bonobo_object_from_servant (servant); - shell = E_SHELL (bonobo_object); - - allowed_types = alloca (sizeof (allowed_types[0]) * (corba_allowed_types->_length + 1)); - for (i = 0; i < corba_allowed_types->_length; i++) - allowed_types[i] = corba_allowed_types->_buffer[i]; - allowed_types[corba_allowed_types->_length] = NULL; - - /* CORBA doesn't allow you to pass a NULL pointer. */ - if (!*default_folder) - default_folder = NULL; - folder_selection_dialog = e_shell_folder_selection_dialog_new (shell, title, default_folder, allowed_types); - - listener_duplicate = CORBA_Object_duplicate (listener, ev); - gtk_object_set_data_full (GTK_OBJECT (folder_selection_dialog), "corba_listener", - listener_duplicate, corba_listener_destroy_notify); - - gtk_signal_connect (GTK_OBJECT (folder_selection_dialog), "folder_selected", - GTK_SIGNAL_FUNC (folder_selection_dialog_folder_selected_cb), shell); - gtk_signal_connect (GTK_OBJECT (folder_selection_dialog), "cancelled", - GTK_SIGNAL_FUNC (folder_selection_dialog_cancelled_cb), shell); - - gtk_widget_show (folder_selection_dialog); -} - - -/* Initialization of the storages. */ - -static gboolean -setup_corba_storages (EShell *shell) -{ - EShellPrivate *priv; - ECorbaStorageRegistry *corba_storage_registry; - - priv = shell->priv; - - g_assert (priv->storage_set != NULL); - corba_storage_registry = e_corba_storage_registry_new (priv->storage_set); - - if (corba_storage_registry == NULL) - return FALSE; - - bonobo_object_add_interface (BONOBO_OBJECT (shell), BONOBO_OBJECT (corba_storage_registry)); - - /* Notice that `bonobo_object_add_interface()' aggregates the two object's - reference counts, so we need an extra ref here if we want to keep a separate - pointer to the storage interface. */ - bonobo_object_ref (BONOBO_OBJECT (corba_storage_registry)); - priv->corba_storage_registry = corba_storage_registry; - - return TRUE; -} - -static gboolean -setup_local_storage (EShell *shell) -{ - EStorage *local_storage; - EShellPrivate *priv; - gchar *local_storage_path; - - priv = shell->priv; - - local_storage_path = g_concat_dir_and_file (priv->local_directory, - LOCAL_STORAGE_DIRECTORY); - local_storage = e_local_storage_open (priv->folder_type_registry, - local_storage_path); - if (local_storage == NULL) { - g_warning (_("Cannot set up local storage -- %s"), local_storage_path); - g_free (local_storage_path); - return FALSE; - } - g_free (local_storage_path); - - g_assert (shell->priv->folder_type_registry); - - e_storage_set_add_storage (priv->storage_set, local_storage); - - gtk_object_unref (GTK_OBJECT (local_storage)); - - return TRUE; -} - - -/* Initialization of the components. */ - -static void -setup_components (EShell *shell) -{ - EShellPrivate *priv; - - priv = shell->priv; - - priv->component_registry = e_component_registry_new (shell); - - /* FIXME: Hardcoded for now. */ - - if (! e_component_registry_register_component (priv->component_registry, MAIL_COMPONENT_ID)) - g_warning ("Cannot activate mail component -- %s", MAIL_COMPONENT_ID); - - if (! e_component_registry_register_component (priv->component_registry, CALENDAR_COMPONENT_ID)) - g_warning ("Cannot activate calendar component -- %s", CALENDAR_COMPONENT_ID); - - if (! e_component_registry_register_component (priv->component_registry, ADDRESSBOOK_COMPONENT_ID)) - g_warning ("Cannot activate addressbook component -- %s", ADDRESSBOOK_COMPONENT_ID); -} - - -/* EShellView destruction callback. */ - -static void -view_destroy_cb (GtkObject *object, - gpointer data) -{ - EShell *shell; - - g_assert (E_IS_SHELL_VIEW (object)); - - shell = E_SHELL (data); - shell->priv->views = g_list_remove (shell->priv->views, object); - - if (shell->priv->views == NULL) { - /* FIXME: This looks like a Bonobo bug to me. */ - bonobo_object_ref (BONOBO_OBJECT (shell)); - gtk_signal_emit (GTK_OBJECT (shell), signals[NO_VIEWS_LEFT]); - bonobo_object_unref (BONOBO_OBJECT (shell)); - } -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EShell *shell; - EShellPrivate *priv; - GList *p; - - shell = E_SHELL (object); - priv = shell->priv; - - g_free (priv->local_directory); - - if (priv->storage_set != NULL) - gtk_object_unref (GTK_OBJECT (priv->storage_set)); - - if (priv->shortcuts != NULL) - gtk_object_unref (GTK_OBJECT (priv->shortcuts)); - - if (priv->folder_type_registry != NULL) - gtk_object_unref (GTK_OBJECT (priv->folder_type_registry)); - - if (priv->component_registry != NULL) - gtk_object_unref (GTK_OBJECT (priv->component_registry)); - - for (p = priv->views; p != NULL; p = p->next) { - EShellView *view; - - view = E_SHELL_VIEW (p->data); - - gtk_signal_disconnect_by_func (GTK_OBJECT (view), - GTK_SIGNAL_FUNC (view_destroy_cb), shell); - gtk_object_destroy (GTK_OBJECT (view)); - } - - g_list_free (priv->views); - - if (priv->corba_storage_registry != NULL) - bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry)); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* Initialization. */ - -static void -corba_class_init (void) -{ - POA_Evolution_Shell__vepv *vepv; - POA_Evolution_Shell__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_Shell__epv, 1); - epv->get_component_for_type = impl_Shell_get_component_for_type; - epv->user_select_folder = impl_Shell_user_select_folder; - - vepv = &shell_vepv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_Shell_epv = epv; -} - -static void -class_init (EShellClass *klass) -{ - GtkObjectClass *object_class; - - parent_class = gtk_type_class (PARENT_TYPE); - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - signals[NO_VIEWS_LEFT] = - gtk_signal_new ("no_views_left", - GTK_RUN_LAST, - object_class->type, - GTK_SIGNAL_OFFSET (EShellClass, no_views_left), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); - - corba_class_init (); -} - -static void -init (EShell *shell) -{ - EShellPrivate *priv; - - priv = g_new (EShellPrivate, 1); - - priv->views = NULL; - - priv->local_directory = NULL; - priv->storage_set = NULL; - priv->shortcuts = NULL; - priv->component_registry = NULL; - priv->folder_type_registry = NULL; - priv->corba_storage_registry = NULL; - - shell->priv = priv; -} - - -void -e_shell_construct (EShell *shell, - Evolution_Shell corba_object, - const char *local_directory) -{ - EShellPrivate *priv; - gchar *shortcut_path; - - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - g_return_if_fail (corba_object != CORBA_OBJECT_NIL); - g_return_if_fail (local_directory != NULL); - g_return_if_fail (g_path_is_absolute (local_directory)); - - bonobo_object_construct (BONOBO_OBJECT (shell), corba_object); - - priv = shell->priv; - - priv->local_directory = g_strdup (local_directory); - priv->folder_type_registry = e_folder_type_registry_new (); - priv->storage_set = e_storage_set_new (shell->priv->folder_type_registry); - - gtk_object_ref (GTK_OBJECT (priv->storage_set )); - - /* CORBA storages must be set up before the components, because otherwise components - cannot register their own storages. */ - if (! setup_corba_storages (shell)) - return; - - setup_components (shell); - - /* The local storage depends on the component registry. */ - setup_local_storage (shell); - - shortcut_path = g_concat_dir_and_file (local_directory, "shortcuts.xml"); - priv->shortcuts = e_shortcuts_new (priv->storage_set, - priv->folder_type_registry, - shortcut_path); - - if (priv->shortcuts == NULL) - g_warning ("Cannot load shortcuts -- %s", shortcut_path); - - g_free (shortcut_path); -} - -EShell * -e_shell_new (const char *local_directory) -{ - EShell *new; - EShellPrivate *priv; - Evolution_Shell corba_object; - POA_Evolution_Shell *servant; - - g_return_val_if_fail (local_directory != NULL, NULL); - g_return_val_if_fail (*local_directory != '\0', NULL); - - servant = create_servant (); - if (servant == NULL) - return NULL; - - new = gtk_type_new (e_shell_get_type ()); - - corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant); - e_shell_construct (new, corba_object, local_directory); - - priv = new->priv; - - if (priv->shortcuts == NULL || priv->storage_set == NULL) { - bonobo_object_unref (BONOBO_OBJECT (new)); - return NULL; - } - - return new; -} - - -GtkWidget * -e_shell_new_view (EShell *shell, - const char *uri) -{ - GtkWidget *view; - - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - view = e_shell_view_new (shell); - - gtk_widget_show (view); - gtk_signal_connect (GTK_OBJECT (view), "destroy", - GTK_SIGNAL_FUNC (view_destroy_cb), shell); - - if (uri != NULL) - e_shell_view_display_uri (E_SHELL_VIEW (view), uri); - - shell->priv->views = g_list_prepend (shell->priv->views, view); - - return view; -} - - -const char * -e_shell_get_local_directory (EShell *shell) -{ - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->local_directory; -} - -EShortcuts * -e_shell_get_shortcuts (EShell *shell) -{ - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->shortcuts; -} - -EStorageSet * -e_shell_get_storage_set (EShell *shell) -{ - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->storage_set; -} - -EFolderTypeRegistry * -e_shell_get_folder_type_registry (EShell *shell) -{ - g_return_val_if_fail (shell != NULL, NULL); - g_return_val_if_fail (E_IS_SHELL (shell), NULL); - - return shell->priv->folder_type_registry; -} - - -static gboolean -save_settings_for_views (EShell *shell) -{ - EShellPrivate *priv; - GList *p; - gboolean retval; - char *prefix; - int i; - - priv = shell->priv; - retval = TRUE; - - for (p = priv->views, i = 0; p != NULL; p = p->next, i++) { - EShellView *view; - - view = E_SHELL_VIEW (p->data); - - prefix = g_strdup_printf ("=%s/config/Shell=/Views/%d/", - priv->local_directory, i); - - if (! e_shell_view_save_settings (view, prefix)) { - g_warning ("Cannot save settings for view -- %d", i); - retval = FALSE; - } - - g_free (prefix); - } - - prefix = g_strdup_printf ("=%s/config/Shell=/Views/NumberOfViews", - priv->local_directory); - gnome_config_set_int (prefix, g_list_length (priv->views)); - g_free (prefix); - - gnome_config_sync (); - - return TRUE; -} - -static gboolean -save_settings_for_component (EShell *shell, - const char *id, - EvolutionShellComponentClient *client) -{ - Bonobo_Unknown unknown_interface; - Evolution_Session session_interface; - CORBA_Environment ev; - char *prefix; - gboolean retval; - - unknown_interface = bonobo_object_corba_objref (BONOBO_OBJECT (client)); - g_assert (unknown_interface != CORBA_OBJECT_NIL); - - CORBA_exception_init (&ev); - - session_interface = Bonobo_Unknown_query_interface (unknown_interface, "IDL:Evolution/Session:1.0", &ev); - if (ev._major != CORBA_NO_EXCEPTION || CORBA_Object_is_nil (session_interface, &ev)) { - CORBA_exception_free (&ev); - return TRUE; - } - - prefix = g_strconcat ("/apps/Evolution/Shell/Components/", id, NULL); - Evolution_Session_save_configuration (session_interface, prefix, &ev); - - if (ev._major == CORBA_NO_EXCEPTION) - retval = TRUE; - else - retval = FALSE; - - g_free (prefix); - - CORBA_exception_free (&ev); - - return retval; -} - -static gboolean -save_settings_for_components (EShell *shell) -{ - EShellPrivate *priv; - GList *component_ids; - GList *p; - gboolean retval; - - priv = shell->priv; - - g_assert (priv->component_registry); - component_ids = e_component_registry_get_id_list (priv->component_registry); - - retval = TRUE; - for (p = component_ids; p != NULL; p = p->next) { - EvolutionShellComponentClient *client; - const char *id; - - id = p->data; - client = e_component_registry_get_component_by_id (priv->component_registry, id); - - if (! save_settings_for_component (shell, id, client)) - retval = FALSE; - } - - e_free_string_list (component_ids); - - return retval; -} - -/** - * e_shell_save_settings: - * @shell: - * - * Save the settings for this shell. - * - * Return value: %TRUE if it worked, %FALSE otherwise. Even if %FALSE is - * returned, it is possible that at least part of the settings for the views - * have been saved. - **/ -gboolean -e_shell_save_settings (EShell *shell) -{ - gboolean views_saved; - gboolean components_saved; - - g_return_val_if_fail (shell != NULL, FALSE); - g_return_val_if_fail (E_IS_SHELL (shell), FALSE); - - views_saved = save_settings_for_views (shell); - components_saved = save_settings_for_components (shell); - - return views_saved && components_saved; -} - -/** - * e_shell_restore_from_settings: - * @shell: An EShell object. - * - * Restore the existing views from the saved configuration. The shell must - * have no views for this to work. - * - * Return value: %FALSE if the shell has some open views or there is no saved - * configuration. %TRUE if the configuration could be restored successfully. - **/ -gboolean -e_shell_restore_from_settings (EShell *shell) -{ - EShellPrivate *priv; - gboolean retval; - char *prefix; - int num_views; - int i; - - g_return_val_if_fail (shell != NULL, FALSE); - g_return_val_if_fail (E_IS_SHELL (shell), FALSE); - g_return_val_if_fail (shell->priv->views == NULL, FALSE); - - priv = shell->priv; - - prefix = g_strdup_printf ("=%s/config/Shell=/Views/NumberOfViews", - priv->local_directory); - num_views = gnome_config_get_int (prefix); - if (num_views == 0) - return FALSE; - - retval = TRUE; - - for (i = 0; i < num_views; i++) { - GtkWidget *view_widget; - - prefix = g_strdup_printf ("=%s/config/Shell=/Views/%d/", - priv->local_directory, i); - - /* FIXME restore the URI here. There should be an - e_shell_view_new_from_configuration() thingie. */ - view_widget = e_shell_new_view (shell, NULL); - - if (! e_shell_view_load_settings (E_SHELL_VIEW (view_widget), prefix)) - retval = FALSE; - - g_free (prefix); - } - - return retval; -} - -/** - * e_shell_quit: - * @shell: An EShell. - * - * Make @shell quit. This will close all the associated views and destroy the - * object. - **/ -void -e_shell_quit (EShell *shell) -{ - EShellPrivate *priv; - GList *p; - - g_return_if_fail (shell != NULL); - g_return_if_fail (E_IS_SHELL (shell)); - - e_shell_save_settings (shell); - - priv = shell->priv; - - for (p = priv->views; p != NULL; p = p->next) { - EShellView *shell_view; - - shell_view = E_SHELL_VIEW (p->data); - gtk_signal_disconnect_by_func (GTK_OBJECT (shell_view), - GTK_SIGNAL_FUNC (view_destroy_cb), shell); - gtk_widget_destroy (GTK_WIDGET (shell_view)); - } - - g_list_free (priv->views); - priv->views = NULL; - - bonobo_object_unref (BONOBO_OBJECT (priv->corba_storage_registry)); - - priv->corba_storage_registry = NULL; - - e_storage_set_remove_all_storages (priv->storage_set); - - /* - * Ok, so you thought the GUI components lifecycle was coupled to - * the Shell's, in fact this is not the case, they are unref'd - * here, and NULL'd to avoid shell destruction killing them again. - * So; the shell can be destroyed either remotely or localy. - */ - - gtk_object_unref (GTK_OBJECT (priv->storage_set)); - gtk_object_unref (GTK_OBJECT (priv->shortcuts)); - gtk_object_unref (GTK_OBJECT (priv->folder_type_registry)); - gtk_object_unref (GTK_OBJECT (priv->component_registry)); - - priv->storage_set = NULL; - priv->shortcuts = NULL; - priv->folder_type_registry = NULL; - priv->component_registry = NULL; - - bonobo_object_unref (BONOBO_OBJECT (shell)); -} - - -E_MAKE_TYPE (e_shell, "EShell", EShell, class_init, init, PARENT_TYPE) diff --git a/shell/e-shell.h b/shell/e-shell.h deleted file mode 100644 index ca63c4776d..0000000000 --- a/shell/e-shell.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shell.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_SHELL_H_ -#define _E_SHELL_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" -#include "e-shortcuts.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_SHELL (e_shell_get_type ()) -#define E_SHELL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL, EShell)) -#define E_SHELL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL, EShellClass)) -#define E_IS_SHELL(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL)) -#define E_IS_SHELL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL)) - - -typedef struct _EShell EShell; -typedef struct _EShellPrivate EShellPrivate; -typedef struct _EShellClass EShellClass; - -struct _EShell { - BonoboObject parent; - - EShellPrivate *priv; -}; - -struct _EShellClass { - BonoboObjectClass parent_class; - - void (* no_views_left) (EShell *shell); -}; - - -GtkType e_shell_get_type (void); -void e_shell_construct (EShell *shell, - Evolution_Shell corba_object, - const char *local_directory); - -EShell *e_shell_new (const char *local_directory); -GtkWidget *e_shell_new_view (EShell *shell, - const char *uri); - -const char *e_shell_get_local_directory (EShell *shell); -EShortcuts *e_shell_get_shortcuts (EShell *shell); -EStorageSet *e_shell_get_storage_set (EShell *shell); -EFolderTypeRegistry *e_shell_get_folder_type_registry (EShell *shell); - -gboolean e_shell_save_settings (EShell *shell); -gboolean e_shell_restore_from_settings (EShell *shell); - -void e_shell_quit (EShell *shell); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_SHELL_H_ */ diff --git a/shell/e-shortcuts-view.c b/shell/e-shortcuts-view.c deleted file mode 100644 index 6f457cc18d..0000000000 --- a/shell/e-shortcuts-view.c +++ /dev/null @@ -1,584 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shortcuts-view.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-util/e-util.h" - -#include "e-shortcuts-view.h" - - -#define PARENT_TYPE E_TYPE_SHORTCUT_BAR -static EShortcutBarClass *parent_class = NULL; - -struct _EShortcutsViewPrivate { - EShortcuts *shortcuts; -}; - -enum { - ACTIVATE_SHORTCUT, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* View initialization. */ - -static const char * -get_storage_set_path_from_uri (const char *uri) -{ - const char *colon; - - if (g_path_is_absolute (uri)) - return NULL; - - colon = strchr (uri, ':'); - if (colon == NULL || colon == uri || colon[1] == '\0') - return NULL; - - if (! g_path_is_absolute (colon + 1)) - return NULL; - - if (g_strncasecmp (uri, "evolution", colon - uri) != 0) - return NULL; - - return colon + 1; -} - -static void -load_group (EShortcutsView *shortcuts_view, - EShortcuts *shortcuts, - const char *group_title, - int group_num) -{ - EShortcutsViewPrivate *priv; - EStorageSet *storage_set; - GList *shortcut_list; - GList *p; - - priv = shortcuts_view->priv; - - storage_set = e_shortcuts_get_storage_set (shortcuts); - g_assert (storage_set != NULL); - - shortcut_list = e_shortcuts_get_shortcuts_in_group (shortcuts, group_title); - if (shortcut_list == NULL) - return; - - for (p = shortcut_list; p != NULL; p = p->next) { - EFolder *folder; - const char *path; - const char *uri; - const char *name; - - uri = (const char *) p->data; - path = get_storage_set_path_from_uri (uri); - if (path != NULL) - folder = e_storage_set_get_folder (storage_set, path); - - if (path == NULL || folder == NULL) { - /* FIXME */ - g_warning ("Invalid link while loading shortcut bar view -- %s\n", - uri); - continue; - } - - name = e_folder_get_name (folder); - e_shortcut_model_add_item (E_SHORTCUT_BAR (shortcuts_view)->model, group_num, -1, uri, name); - } - - e_free_string_list (shortcut_list); -} - -static void -load_all_shortcuts (EShortcutsView *shortcuts_view, - EShortcuts *shortcuts) -{ - EShortcutsViewPrivate *priv; - GList *group_titles; - GList *p; - int group_num; - - priv = shortcuts_view->priv; - - group_titles = e_shortcuts_get_group_titles (shortcuts); - - for (p = group_titles; p != NULL; p = p->next) { - const char *group_title; - - group_title = (const char *) p->data; - group_num = e_shortcut_model_add_group (E_SHORTCUT_BAR (shortcuts_view)->model, - -1, group_title); - - load_group (shortcuts_view, shortcuts, group_title, group_num); - } - - e_free_string_list (group_titles); - - gtk_object_ref (GTK_OBJECT (shortcuts)); - priv->shortcuts = shortcuts; -} - -/* Icon callback for the shortcut bar. */ -static GdkPixbuf * -icon_callback (EShortcutBar *shortcut_bar, - const char *uri, - gpointer data) -{ - EFolderTypeRegistry *folder_type_registry; - EShortcuts *shortcuts; - EStorageSet *storage_set; - EFolder *folder; - GdkPixbuf *pixbuf; - const char *type; - - shortcuts = E_SHORTCUTS (data); - - storage_set = e_shortcuts_get_storage_set (shortcuts); - folder_type_registry = e_storage_set_get_folder_type_registry (storage_set); - - folder = e_storage_set_get_folder (storage_set, - get_storage_set_path_from_uri (uri)); - - if (folder == NULL) - return NULL; - - type = e_folder_get_type_string (folder); - if (type == NULL) - return NULL; - - /* FIXME mini icons? */ - pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry, type, FALSE); - if (pixbuf != NULL) - gdk_pixbuf_ref (pixbuf); - - return pixbuf; -} - - -/* Shortcut bar right-click menu. */ - -struct _RightClickMenuData { - EShortcutsView *shortcuts_view; - int group_num; -}; -typedef struct _RightClickMenuData RightClickMenuData; - -static void -toggle_large_icons_cb (GtkWidget *widget, - void *data) -{ - RightClickMenuData *menu_data; - - g_return_if_fail (GTK_IS_RADIO_MENU_ITEM (widget)); - - if (data == NULL) - return; - - menu_data = (RightClickMenuData *) data; - - if (! GTK_CHECK_MENU_ITEM (widget)->active) - return; - - e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (menu_data->shortcuts_view), - menu_data->group_num, - E_ICON_BAR_LARGE_ICONS); -} - -static void -toggle_small_icons_cb (GtkWidget *widget, - void *data) -{ - RightClickMenuData *menu_data; - - g_return_if_fail (GTK_IS_RADIO_MENU_ITEM (widget)); - - if (data == NULL) - return; - - menu_data = (RightClickMenuData *) data; - - if (! GTK_CHECK_MENU_ITEM (widget)->active) - return; - - e_shortcut_bar_set_view_type (E_SHORTCUT_BAR (menu_data->shortcuts_view), - menu_data->group_num, - E_ICON_BAR_SMALL_ICONS); -} - -static GnomeUIInfo icon_size_radio_group_uiinfo[] = { - { GNOME_APP_UI_ITEM, N_("_Small icons"), - N_("Show the shortcuts as small icons"), toggle_small_icons_cb, NULL, - NULL, 0, 0, 0, 0 }, - { GNOME_APP_UI_ITEM, N_("_Large icons"), - N_("Show the shortcuts as large icons"), toggle_large_icons_cb, NULL, - NULL, 0, 0, 0, 0 }, - - GNOMEUIINFO_END -}; - -static GnomeUIInfo right_click_menu_uiinfo[] = { - GNOMEUIINFO_RADIOLIST (icon_size_radio_group_uiinfo), - GNOMEUIINFO_END -}; - -static void -pop_up_right_click_menu_for_group (EShortcutsView *shortcuts_view, - GdkEventButton *event, - int group_num) -{ - RightClickMenuData *menu_data; - GtkWidget *popup_menu; - - menu_data = g_new (RightClickMenuData, 1); - menu_data->shortcuts_view = shortcuts_view; - menu_data->group_num = group_num; - - popup_menu = gnome_popup_menu_new (right_click_menu_uiinfo); - - if (e_shortcut_bar_get_view_type (E_SHORTCUT_BAR (shortcuts_view), group_num) - == E_ICON_BAR_SMALL_ICONS) - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (icon_size_radio_group_uiinfo[0].widget), - TRUE); - else - gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (icon_size_radio_group_uiinfo[1].widget), - TRUE); - - gnome_popup_menu_do_popup_modal (popup_menu, NULL, NULL, event, menu_data); - - g_free (menu_data); - gtk_widget_destroy (popup_menu); -} - - -/* Shortcut right-click menu. */ - -struct _ShortcutRightClickMenuData { - EShortcutsView *shortcuts_view; - int group_num; - int item_num; -}; -typedef struct _ShortcutRightClickMenuData ShortcutRightClickMenuData; - -static void -activate_shortcut_cb (GtkWidget *widget, - void *data) -{ - ShortcutRightClickMenuData *menu_data; - EShortcutsView *shortcuts_view; - EShortcuts *shortcuts; - const char *uri; - - menu_data = (ShortcutRightClickMenuData *) data; - shortcuts_view = menu_data->shortcuts_view; - shortcuts = shortcuts_view->priv->shortcuts; - - uri = e_shortcuts_get_uri (shortcuts, menu_data->group_num, menu_data->item_num); - if (uri == NULL) - return; - - gtk_signal_emit (GTK_OBJECT (shortcuts_view), signals[ACTIVATE_SHORTCUT], - shortcuts, uri); -} - -static void -remove_shortcut_cb (GtkWidget *widget, - void *data) -{ - ShortcutRightClickMenuData *menu_data; - EShortcutsView *shortcuts_view; - EShortcuts *shortcuts; - - menu_data = (ShortcutRightClickMenuData *) data; - shortcuts_view = menu_data->shortcuts_view; - shortcuts = shortcuts_view->priv->shortcuts; - - e_shortcuts_remove_shortcut (shortcuts, menu_data->group_num, menu_data->item_num); - - /* FIXME not real model-view. */ - e_shortcut_model_remove_item (E_SHORTCUT_BAR (shortcuts_view)->model, - menu_data->group_num, - menu_data->item_num); -} - -static GnomeUIInfo shortcut_right_click_menu_uiinfo[] = { - GNOMEUIINFO_ITEM (N_("Activate"), N_("Activate this shortcut"), - activate_shortcut_cb, NULL), - GNOMEUIINFO_SEPARATOR, - GNOMEUIINFO_ITEM_STOCK (N_("Remove"), N_("Remove this shortcut from the shortcut bar"), - remove_shortcut_cb, GNOME_STOCK_MENU_CLOSE), - GNOMEUIINFO_END -}; - -static void -pop_up_right_click_menu_for_shortcut (EShortcutsView *shortcuts_view, - GdkEventButton *event, - int group_num, - int item_num) -{ - ShortcutRightClickMenuData *menu_data; - GtkWidget *popup_menu; - - menu_data = g_new (ShortcutRightClickMenuData, 1); - menu_data->shortcuts_view = shortcuts_view; - menu_data->group_num = group_num; - menu_data->item_num = item_num; - - popup_menu = gnome_popup_menu_new (shortcut_right_click_menu_uiinfo); - - gnome_popup_menu_do_popup_modal (popup_menu, NULL, NULL, event, menu_data); - - g_free (menu_data); - gtk_widget_destroy (popup_menu); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EShortcutsViewPrivate *priv; - EShortcutsView *shortcuts_view; - - shortcuts_view = E_SHORTCUTS_VIEW (object); - - priv = shortcuts_view->priv; - - gtk_object_unref (GTK_OBJECT (priv->shortcuts)); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* EShortcutBar methods. */ - -static void -selected_item (EShortcutBar *shortcut_bar, - GdkEvent *event, - int group_num, - int item_num) -{ - EShortcuts *shortcuts; - EShortcutsView *shortcuts_view; - const char *uri; - - shortcuts_view = E_SHORTCUTS_VIEW (shortcut_bar); - shortcuts = shortcuts_view->priv->shortcuts; - - if (event->button.button == 3) { - if (item_num < 0) - pop_up_right_click_menu_for_group (shortcuts_view, &event->button, - group_num); - else - pop_up_right_click_menu_for_shortcut (shortcuts_view, &event->button, - group_num, item_num); - return; - } else if (event->button.button != 1) { - return; - } - - if (item_num < 0) - return; - - uri = e_shortcuts_get_uri (shortcuts, group_num, item_num); - if (uri == NULL) - return; - - gtk_signal_emit (GTK_OBJECT (shortcuts_view), signals[ACTIVATE_SHORTCUT], - shortcuts, uri); -} - -#if 0 -static void -added_item (EShortcutBar *shortcut_bar, - int group_num, - int item_num) -{ - EShortcutsViewPrivate *priv; - EShortcutBarGroup *group; - EShortcuts *shortcuts; - const char *url; - - priv = E_SHORTCUTS_VIEW (shortcut_bar)->priv; - shortcuts = priv->shortcuts; - - if (shortcuts == NULL) - return; - - /* FIXME ** NASTY ** */ - - group = &g_array_index (shortcut_bar->groups, EShortcutBarGroup, group_num); - url = e_icon_bar_get_item_data (E_ICON_BAR (group->icon_bar), item_num); - - if (url == NULL) { - g_warning ("NULL URL being added to the shortcut bar!?"); - return; - } - - e_shortcuts_add_shortcut (shortcuts, group_num, item_num, url); -} - -static void -removed_item (EShortcutBar *shortcut_bar, - int group_num, - int item_num) -{ - EShortcutsViewPrivate *priv; - EShortcuts *shortcuts; - - priv = E_SHORTCUTS_VIEW (shortcut_bar)->priv; - shortcuts = priv->shortcuts; - - e_shortcuts_remove_shortcut (shortcuts, group_num, item_num); -} - -static void -added_group (EShortcutBar *shortcut_bar, - int group_num) -{ - EShortcutsViewPrivate *priv; - EShortcuts *shortcuts; - EShortcutBarGroup *group; - const char *group_name; - - priv = E_SHORTCUTS_VIEW (shortcut_bar)->priv; - shortcuts = priv->shortcuts; - - if (shortcuts == NULL) - return; - - group = &g_array_index (shortcut_bar->groups, EShortcutBarGroup, group_num); - - /* FIXME Losing EShortcutBar does not give me a method to retrieve the - group name. */ - group_name = "Foo"; - - e_shortcuts_add_group (shortcuts, group_num, group_name); -} - -static void -removed_group (EShortcutBar *shortcut_bar, - int group_num) -{ - EShortcutsViewPrivate *priv; - EShortcuts *shortcuts; - - priv = E_SHORTCUTS_VIEW (shortcut_bar)->priv; - shortcuts = priv->shortcuts; - - if (shortcuts == NULL) - return; - - e_shortcuts_remove_group (shortcuts, group_num); -} -#endif - - -static void -class_init (EShortcutsViewClass *klass) -{ - GtkObjectClass *object_class; - EShortcutBarClass *shortcut_bar_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - shortcut_bar_class = E_SHORTCUT_BAR_CLASS (klass); - shortcut_bar_class->selected_item = selected_item; -#if 0 - shortcut_bar_class->added_item = added_item; - shortcut_bar_class->removed_item = removed_item; - shortcut_bar_class->added_group = added_group; - shortcut_bar_class->removed_group = removed_group; -#endif - parent_class = gtk_type_class (e_shortcut_bar_get_type ()); - - signals[ACTIVATE_SHORTCUT] = - gtk_signal_new ("activate_shortcut", - GTK_RUN_LAST | GTK_RUN_ACTION, - object_class->type, - GTK_SIGNAL_OFFSET (EShortcutsViewClass, activate_shortcut), - gtk_marshal_NONE__POINTER_POINTER, - GTK_TYPE_NONE, 2, - GTK_TYPE_POINTER, - GTK_TYPE_STRING); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EShortcutsView *shortcuts_view) -{ - EShortcutsViewPrivate *priv; - - priv = g_new (EShortcutsViewPrivate, 1); - priv->shortcuts = NULL; - - shortcuts_view->priv = priv; -} - - -void -e_shortcuts_view_construct (EShortcutsView *shortcuts_view, - EShortcuts *shortcuts) -{ - EShortcutsViewPrivate *priv; - - g_return_if_fail (shortcuts != NULL); - g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); - - priv = shortcuts_view->priv; - - e_shortcut_bar_set_model (E_SHORTCUT_BAR (shortcuts_view), - e_shortcut_model_new ()); - - e_shortcut_bar_set_icon_callback (E_SHORTCUT_BAR (shortcuts_view), icon_callback, - shortcuts); - - load_all_shortcuts (shortcuts_view, shortcuts); -} - -GtkWidget * -e_shortcuts_view_new (EShortcuts *shortcuts) -{ - GtkWidget *new; - - g_return_val_if_fail (shortcuts != NULL, NULL); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL); - - new = gtk_type_new (e_shortcuts_view_get_type ()); - e_shortcuts_view_construct (E_SHORTCUTS_VIEW (new), shortcuts); - - return new; -} - - -E_MAKE_TYPE (e_shortcuts_view, "EShortcutsView", EShortcutsView, class_init, init, PARENT_TYPE) diff --git a/shell/e-shortcuts-view.h b/shell/e-shortcuts-view.h deleted file mode 100644 index 8f6f8cb0af..0000000000 --- a/shell/e-shortcuts-view.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shortcuts-view.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_SHORTCUTS_VIEW_H_ -#define _E_SHORTCUTS_VIEW_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "shortcut-bar/e-shortcut-bar.h" -#include "e-shortcuts.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_SHORTCUTS_VIEW (e_shortcuts_view_get_type ()) -#define E_SHORTCUTS_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHORTCUTS_VIEW, EShortcutsView)) -#define E_SHORTCUTS_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHORTCUTS_VIEW, EShortcutsViewClass)) -#define E_IS_SHORTCUTS_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHORTCUTS_VIEW)) -#define E_IS_SHORTCUTS_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHORTCUTS_VIEW)) - - -typedef struct _EShortcutsView EShortcutsView; -typedef struct _EShortcutsViewPrivate EShortcutsViewPrivate; -typedef struct _EShortcutsViewClass EShortcutsViewClass; - -struct _EShortcutsView { - EShortcutBar parent; - - EShortcutsViewPrivate *priv; -}; - -struct _EShortcutsViewClass { - EShortcutBarClass parent_class; - - void (* activate_shortcut) (EShortcutsView *view, - EShortcuts *shortcuts, - const char *uri); -}; - - -GtkType e_shortcuts_view_get_type (void); -void e_shortcuts_view_construct (EShortcutsView *shortcuts_view, - EShortcuts *shortcuts); -GtkWidget *e_shortcuts_view_new (EShortcuts *shortcuts); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_SHORTCUTS_VIEW_H_ */ diff --git a/shell/e-shortcuts.c b/shell/e-shortcuts.c deleted file mode 100644 index 1828406df3..0000000000 --- a/shell/e-shortcuts.c +++ /dev/null @@ -1,760 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shortcuts.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -/* The shortcut list goes this: - - - - - evolution:/local/Inbox - evolution:/local/Trash - evolution:/local/Calendar - - - - evolution:/local/Personal - - - - FIXME: Do we want to use a namespace for this? - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include -#include - -#include - -#include "e-util/e-util.h" -#include "e-util/e-xml-utils.h" - -#include "shortcut-bar/e-shortcut-bar.h" -#include "e-shortcuts-view.h" - -#include "e-shortcuts.h" - - -#define PARENT_TYPE GTK_TYPE_OBJECT -static GtkObjectClass *parent_class = NULL; - -struct _ShortcutGroup { - /* Title of the group. */ - char *title; - - /* A list of strings with the URI for the shortcut. */ - GList *shortcuts; -}; -typedef struct _ShortcutGroup ShortcutGroup; - -struct _EShortcutsPrivate { - /* Name of the file associated with these shortcuts. Changes in the shortcuts - will update this file automatically. */ - char *file_name; - - /* ID of the idle function that will be called to save the shortcuts when they are - changed. */ - int save_idle_id; - - /* Whether these shortcuts need to be saved to disk. */ - gboolean dirty; - - /* The storage set to which these shortcuts are associated. */ - EStorageSet *storage_set; - - /* The folder type registry. */ - EFolderTypeRegistry *folder_type_registry; - - /* A list of ShortcutGroups. */ - GList *groups; - - /* A list of ShortcutViews. */ - GList *views; - - /* A hash table to get a group given its name. */ - GHashTable *title_to_group; -}; - -enum { - NEW_GROUP, - REMOVE_GROUP, - NEW_SHORTCUT, - REMOVE_SHORTCUT, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -static void -unload_shortcuts (EShortcuts *shortcuts) -{ - EShortcutsPrivate *priv; - GList *orig_groups; - GList *p, *q; - - priv = shortcuts->priv; - orig_groups = priv->groups; - - for (p = priv->groups; p != NULL; p = p->next) { - ShortcutGroup *group; - - gtk_signal_emit (GTK_OBJECT (shortcuts), signals[REMOVE_GROUP], 0); - - group = (ShortcutGroup *) p->data; - - g_hash_table_remove (priv->title_to_group, group->title); - - for (q = group->shortcuts; q != NULL; q = q->next) - g_free (q->data); - g_free (group->title); - - g_list_free (group->shortcuts); - - priv->groups = priv->groups->next; - } - - if (orig_groups != NULL) - g_list_free (orig_groups); - - priv->groups = NULL; - - g_hash_table_destroy (priv->title_to_group); - priv->title_to_group = g_hash_table_new (g_str_hash, g_str_equal); -} - -static gboolean -load_shortcuts (EShortcuts *shortcuts, - const char *file_name) -{ - EShortcutsPrivate *priv; - xmlDoc *doc; - xmlNode *root; - xmlNode *p, *q; - - /* FIXME: Update the views by emitting the appropriate signals. */ - - priv = shortcuts->priv; - - doc = xmlParseFile (file_name); - if (doc == NULL) - return FALSE; - - root = xmlDocGetRootElement (doc); - if (root == NULL || strcmp (root->name, "shortcuts") != 0) { - xmlFreeDoc (doc); - return FALSE; - } - - unload_shortcuts (shortcuts); - - for (p = root->childs; p != NULL; p = p->next) { - ShortcutGroup *shortcut_group; - char *shortcut_group_title; - - if (strcmp ((char *) p->name, "group") != 0) - continue; - - shortcut_group_title = (char *) xmlGetProp (p, "title"); - if (shortcut_group_title == NULL) - continue; - - shortcut_group = g_hash_table_lookup (priv->title_to_group, - shortcut_group_title); - if (shortcut_group != NULL) { - g_warning ("Duplicate shortcut group title -- %s", - shortcut_group_title); - xmlFree (shortcut_group_title); - continue; - } - - shortcut_group = g_new (ShortcutGroup, 1); - shortcut_group->title = g_strdup (shortcut_group_title); - xmlFree (shortcut_group_title); - - shortcut_group->shortcuts = NULL; - for (q = p->childs; q != NULL; q = q->next) { - char *content; - - if (strcmp ((char *) q->name, "item") != 0) - continue; - - content = xmlNodeListGetString (doc, q->childs, 1); - shortcut_group->shortcuts = g_list_prepend (shortcut_group->shortcuts, - g_strdup (content)); - xmlFree (content); - } - shortcut_group->shortcuts = g_list_reverse (shortcut_group->shortcuts); - - priv->groups = g_list_prepend (priv->groups, shortcut_group); - g_hash_table_insert (priv->title_to_group, shortcut_group->title, shortcut_group); - } - - priv->groups = g_list_reverse (priv->groups); - - xmlFreeDoc (doc); - - return TRUE; -} - -static gboolean -save_shortcuts (EShortcuts *shortcuts, - const char *file_name) -{ - EShortcutsPrivate *priv; - xmlDoc *doc; - xmlNode *root; - GList *p, *q; - - priv = shortcuts->priv; - - doc = xmlNewDoc ((xmlChar *) "1.0"); - root = xmlNewDocNode (doc, NULL, (xmlChar *) "shortcuts", NULL); - xmlDocSetRootElement (doc, root); - - for (p = priv->groups; p != NULL; p = p->next) { - ShortcutGroup *group; - xmlNode *group_node; - - group = (ShortcutGroup *) p->data; - group_node = xmlNewChild (root, NULL, (xmlChar *) "group", NULL); - - xmlSetProp (group_node, (xmlChar *) "title", group->title); - - for (q = group->shortcuts; q != NULL; q = q->next) { - const char *shortcut; - - shortcut = (const char *) q->data; - xmlNewChild (group_node, NULL, (xmlChar *) "item", (xmlChar *) shortcut); - } - } - - if (xmlSaveFile (file_name, doc) < 0) { - xmlFreeDoc (doc); - return FALSE; - } - - xmlFreeDoc (doc); - return TRUE; -} - - -/* Idle function to update the file on disk. */ - -static int -idle_cb (void *data) -{ - EShortcuts *shortcuts; - EShortcutsPrivate *priv; - - shortcuts = E_SHORTCUTS (data); - priv = shortcuts->priv; - - if (priv->dirty) { - g_print ("Saving shortcuts -- %s\n", priv->file_name); - if (! e_shortcuts_save (shortcuts, NULL)) - g_warning ("Saving of shortcuts failed -- %s", priv->file_name); - else - priv->dirty = FALSE; - } - - priv->save_idle_id = 0; - - return FALSE; -} - -static void -schedule_idle (EShortcuts *shortcuts) -{ - EShortcutsPrivate *priv; - - priv = shortcuts->priv; - - if (priv->save_idle_id != 0) - return; - - gtk_idle_add (idle_cb, shortcuts); -} - -static void -make_dirty (EShortcuts *shortcuts) -{ - EShortcutsPrivate *priv; - - priv = shortcuts->priv; - - priv->dirty = TRUE; - schedule_idle (shortcuts); -} - - -/* Signal handlers for the views. */ - -static void -view_destroyed_cb (GtkObject *object, - gpointer data) -{ - EShortcuts *shortcuts; - EShortcutsPrivate *priv; - - shortcuts = E_SHORTCUTS (data); - priv = shortcuts->priv; - - priv->views = g_list_remove (priv->views, object); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EShortcuts *shortcuts; - EShortcutsPrivate *priv; - - shortcuts = E_SHORTCUTS (object); - priv = shortcuts->priv; - - g_free (priv->file_name); - - if (priv->storage_set != NULL) - gtk_object_unref (GTK_OBJECT (priv->storage_set)); - - if (priv->folder_type_registry != NULL) - gtk_object_unref (GTK_OBJECT (priv->folder_type_registry)); - - unload_shortcuts (shortcuts); - - if (priv->save_idle_id != 0) - gtk_idle_remove (priv->save_idle_id); - - if (priv->dirty) { - if (! e_shortcuts_save (shortcuts, NULL)) - g_warning (_("Error saving shortcuts.")); /* FIXME */ - } - - g_hash_table_destroy (priv->title_to_group); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EShortcutsClass *klass) -{ - GtkObjectClass *object_class; - - object_class = (GtkObjectClass*) klass; - object_class->destroy = destroy; - - parent_class = gtk_type_class (gtk_object_get_type ()); - - signals[NEW_GROUP] - = gtk_signal_new ("new_group", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShortcutsClass, new_group), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - signals[REMOVE_GROUP] - = gtk_signal_new ("remove_group", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShortcutsClass, remove_group), - gtk_marshal_NONE__INT, - GTK_TYPE_NONE, 1, - GTK_TYPE_INT); - - signals[NEW_SHORTCUT] - = gtk_signal_new ("new_shortcut", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShortcutsClass, new_shortcut), - gtk_marshal_NONE__INT_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_INT); - - signals[REMOVE_SHORTCUT] - = gtk_signal_new ("remove_shortcut", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EShortcutsClass, remove_shortcut), - gtk_marshal_NONE__INT_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_INT, - GTK_TYPE_INT); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - - -static void -init (EShortcuts *shortcuts) -{ - EShortcutsPrivate *priv; - - priv = g_new (EShortcutsPrivate, 1); - - priv->file_name = NULL; - priv->storage_set = NULL; - priv->groups = NULL; - priv->views = NULL; - priv->title_to_group = g_hash_table_new (g_str_hash, g_str_equal); - priv->dirty = 0; - priv->save_idle_id = 0; - - shortcuts->priv = priv; -} - - -void -e_shortcuts_construct (EShortcuts *shortcuts, - EStorageSet *storage_set, - EFolderTypeRegistry *folder_type_registry) -{ - EShortcutsPrivate *priv; - - g_return_if_fail (shortcuts != NULL); - g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); - g_return_if_fail (storage_set != NULL); - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - - GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (shortcuts), GTK_FLOATING); - - priv = shortcuts->priv; - - gtk_object_ref (GTK_OBJECT (storage_set)); - priv->storage_set = storage_set; - - gtk_object_ref (GTK_OBJECT (folder_type_registry)); - priv->folder_type_registry = folder_type_registry; -} - -EShortcuts * -e_shortcuts_new (EStorageSet *storage_set, - EFolderTypeRegistry *folder_type_registry, - const char *file_name) -{ - EShortcuts *new; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - - new = gtk_type_new (e_shortcuts_get_type ()); - e_shortcuts_construct (new, storage_set, folder_type_registry); - - if (! e_shortcuts_load (new, file_name)) { - gtk_object_unref (GTK_OBJECT (new)); - return NULL; - } - - return new; -} - - -GList * -e_shortcuts_get_group_titles (EShortcuts *shortcuts) -{ - EShortcutsPrivate *priv; - ShortcutGroup *group; - GList *list; - GList *p; - - g_return_val_if_fail (shortcuts != NULL, NULL); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL); - - priv = shortcuts->priv; - - list = NULL; - - for (p = priv->groups; p != NULL; p = p->next) { - group = (ShortcutGroup *) p->data; - list = g_list_prepend (list, g_strdup (group->title)); - } - - return g_list_reverse (list); -} - -GList * -e_shortcuts_get_shortcuts_in_group (EShortcuts *shortcuts, - const char *group_title) -{ - EShortcutsPrivate *priv; - ShortcutGroup *shortcut_group; - GList *list; - GList *p; - - priv = shortcuts->priv; - - g_return_val_if_fail (shortcuts != NULL, NULL); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL); - g_return_val_if_fail (group_title != NULL, NULL); - - shortcut_group = g_hash_table_lookup (priv->title_to_group, group_title); - if (shortcut_group == NULL) - return NULL; - - list = NULL; - - for (p = shortcut_group->shortcuts; p != NULL; p = p->next) - list = g_list_prepend (list, g_strdup ((const char *) p->data)); - - return g_list_reverse (list); -} - - -EStorageSet * -e_shortcuts_get_storage_set (EShortcuts *shortcuts) -{ - g_return_val_if_fail (shortcuts != NULL, NULL); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL); - - return shortcuts->priv->storage_set; -} - - -GtkWidget * -e_shortcuts_new_view (EShortcuts *shortcuts) -{ - EShortcutsPrivate *priv; - GtkWidget *new; - - g_return_val_if_fail (shortcuts != NULL, NULL); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL); - - priv = shortcuts->priv; - - new = e_shortcuts_view_new (shortcuts); - priv->views = g_list_prepend (priv->views, new); - - gtk_signal_connect (GTK_OBJECT (new), "destroy", view_destroyed_cb, shortcuts); - - return new; -} - - -gboolean -e_shortcuts_load (EShortcuts *shortcuts, - const char *file_name) -{ - EShortcutsPrivate *priv; - char *tmp; - - g_return_val_if_fail (shortcuts != NULL, FALSE); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), FALSE); - g_return_val_if_fail (file_name == NULL || g_path_is_absolute (file_name), FALSE); - - priv = shortcuts->priv; - - if (file_name == NULL) { - if (priv->file_name == NULL) - return FALSE; - file_name = priv->file_name; - } - - if (! load_shortcuts (shortcuts, file_name)) - return FALSE; - - tmp = g_strdup (file_name); - g_free (priv->file_name); - priv->file_name = tmp; - - return TRUE; -} - -gboolean -e_shortcuts_save (EShortcuts *shortcuts, - const char *file_name) -{ - EShortcutsPrivate *priv; - char *tmp; - - g_return_val_if_fail (shortcuts != NULL, FALSE); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), FALSE); - g_return_val_if_fail (file_name == NULL || g_path_is_absolute (file_name), FALSE); - - priv = shortcuts->priv; - - if (file_name == NULL) { - if (priv->file_name == NULL) - return FALSE; - file_name = priv->file_name; - } - - if (! save_shortcuts (shortcuts, file_name)) - return FALSE; - - tmp = g_strdup (file_name); - g_free (priv->file_name); - priv->file_name = tmp; - - return TRUE; -} - - -const char * -e_shortcuts_get_uri (EShortcuts *shortcuts, int group_num, int num) -{ - EShortcutsPrivate *priv; - ShortcutGroup *group; - GList *shortcut_element; - - g_return_val_if_fail (shortcuts != NULL, NULL); - g_return_val_if_fail (E_IS_SHORTCUTS (shortcuts), NULL); - - priv = shortcuts->priv; - - group = g_list_nth (priv->groups, group_num)->data; - if (group == NULL) - return NULL; - - shortcut_element = g_list_nth (group->shortcuts, num); - if (shortcut_element == NULL) - return NULL; - - return shortcut_element->data; -} - - -void -e_shortcuts_remove_shortcut (EShortcuts *shortcuts, - int group_num, - int num) -{ - EShortcutsPrivate *priv; - ShortcutGroup *group; - GList *p; - char *uri; - - g_return_if_fail (shortcuts != NULL); - g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); - - priv = shortcuts->priv; - - p = g_list_nth (priv->groups, group_num); - g_return_if_fail (p != NULL); - - group = (ShortcutGroup *) p->data; - - p = g_list_nth (group->shortcuts, num); - g_return_if_fail (p != NULL); - - gtk_signal_emit (GTK_OBJECT (shortcuts), signals[REMOVE_SHORTCUT], group_num, num); - - uri = (char *) p->data; - g_free (uri); - - group->shortcuts = g_list_remove_link (group->shortcuts, p); - - make_dirty (shortcuts); -} - -void -e_shortcuts_add_shortcut (EShortcuts *shortcuts, - int group_num, - int num, - const char *uri) -{ - EShortcutsPrivate *priv; - ShortcutGroup *group; - GList *p; - - g_return_if_fail (shortcuts != NULL); - g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); - - priv = shortcuts->priv; - - p = g_list_nth (priv->groups, group_num); - g_return_if_fail (p != NULL); - - group = (ShortcutGroup *) p->data; - - group->shortcuts = g_list_insert (group->shortcuts, g_strdup (uri), num); - - gtk_signal_emit (GTK_OBJECT (shortcuts), signals[NEW_SHORTCUT], group_num, num); - - make_dirty (shortcuts); -} - -void -e_shortcuts_remove_group (EShortcuts *shortcuts, - int group_num) -{ - EShortcutsPrivate *priv; - ShortcutGroup *group; - GList *p; - - g_return_if_fail (shortcuts != NULL); - g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); - - priv = shortcuts->priv; - - p = g_list_nth (priv->groups, group_num); - g_return_if_fail (p != NULL); - - gtk_signal_emit (GTK_OBJECT (shortcuts), signals[REMOVE_GROUP], group_num); - - group = (ShortcutGroup *) p->data; - - e_free_string_list (group->shortcuts); - - priv->groups = g_list_remove_link (priv->groups, p); - - make_dirty (shortcuts); -} - -void -e_shortcuts_add_group (EShortcuts *shortcuts, - int group_num, - const char *group_name) -{ - EShortcutsPrivate *priv; - ShortcutGroup *group; - - g_return_if_fail (shortcuts != NULL); - g_return_if_fail (E_IS_SHORTCUTS (shortcuts)); - - priv = shortcuts->priv; - - group = g_new (ShortcutGroup, 1); - group->title = g_strdup (group_name); - group->shortcuts = NULL; - - priv->groups = g_list_insert (priv->groups, group, group_num); - - gtk_signal_emit (GTK_OBJECT (shortcuts), signals[NEW_GROUP], group_num); - - make_dirty (shortcuts); -} - - -E_MAKE_TYPE (e_shortcuts, "EShortcuts", EShortcuts, class_init, init, PARENT_TYPE) - diff --git a/shell/e-shortcuts.h b/shell/e-shortcuts.h deleted file mode 100644 index da4dfc1fa0..0000000000 --- a/shell/e-shortcuts.h +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-shortcuts.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_SHORTCUTS_H_ -#define _E_SHORTCUTS_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-folder-type-registry.h" -#include "e-storage-set.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_SHORTCUTS (e_shortcuts_get_type ()) -#define E_SHORTCUTS(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHORTCUTS, EShortcuts)) -#define E_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHORTCUTS, EShortcutsClass)) -#define E_IS_SHORTCUTS(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHORTCUTS)) -#define E_IS_SHORTCUTS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHORTCUTS)) - - -typedef struct _EShortcuts EShortcuts; -typedef struct _EShortcutsPrivate EShortcutsPrivate; -typedef struct _EShortcutsClass EShortcutsClass; - -struct _EShortcuts { - GtkObject parent; - - EShortcutsPrivate *priv; -}; - -struct _EShortcutsClass { - GtkObjectClass parent_class; - - /* Signals. */ - - void (* new_group) (EShortcuts *shortcuts, int group_num); - void (* remove_group) (EShortcuts *shortcuts, int group_num); - void (* new_shortcut) (EShortcuts *shortcuts, int group_num, int item_num); - void (* remove_shortcut) (EShortcuts *shortcuts, int group_num, int item_num);} -; - - -GtkType e_shortcuts_get_type (void); -void e_shortcuts_construct (EShortcuts *shortcuts, - EStorageSet *storage_set, - EFolderTypeRegistry *folder_type_registry); -EShortcuts *e_shortcuts_new (EStorageSet *storage_set, - EFolderTypeRegistry *folder_type_registry, - const char *file_name); - -GList *e_shortcuts_get_group_titles (EShortcuts *shortcuts); -GList *e_shortcuts_get_shortcuts_in_group (EShortcuts *shortcuts, - const char *group_title); -EStorageSet *e_shortcuts_get_storage_set (EShortcuts *shortcuts); -GtkWidget *e_shortcuts_new_view (EShortcuts *shortcuts); - -gboolean e_shortcuts_load (EShortcuts *shortcuts, - const char *path); -gboolean e_shortcuts_save (EShortcuts *shortcuts, - const char *path); - -const char *e_shortcuts_get_uri (EShortcuts *shortcuts, - int group_num, - int num); - -void e_shortcuts_remove_shortcut (EShortcuts *shortcuts, - int group_num, - int num); -void e_shortcuts_add_shortcut (EShortcuts *shortcuts, - int group_num, - int num, - const char *uri); -void e_shortcuts_remove_group (EShortcuts *shortcuts, - int group_num); -void e_shortcuts_add_group (EShortcuts *shortcuts, - int group_num, - const char *group_name); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_SHORTCUTS_H_ */ diff --git a/shell/e-storage-set-view.c b/shell/e-storage-set-view.c deleted file mode 100644 index ea7eb938ee..0000000000 --- a/shell/e-storage-set-view.c +++ /dev/null @@ -1,1003 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-storage-set-view.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-util/e-util.h" -#include "e-shell-constants.h" - -#include "e-storage-set-view.h" - - -#define PARENT_TYPE GTK_TYPE_CTREE -static GtkCTreeClass *parent_class = NULL; - -struct _EStorageSetViewPrivate { - EStorageSet *storage_set; - - /* These tables must always be kept in sync, and one cannot exist - without the other, as they share the dynamically allocated path. */ - GHashTable *ctree_node_to_path; - GHashTable *path_to_ctree_node; - - /* Path of the row selected by the latest "tree_select_row" signal. */ - const char *selected_row_path; - - /* Path of the row currently being dragged. */ - const char *dragged_row_path; - - /* Path of the row that was selected before the latest click. */ - const char *selected_row_path_before_click; - - /* Whether we are currently performing a drag from this view. */ - int in_drag : 1; - - /* X/Y position for the last button click. */ - int button_x, button_y; - - /* Button used for the drag. This is initialized in the `button_press_event' - handler. */ - int drag_button; -}; - -#define DRAG_RESISTANCE 3 - - -enum { - FOLDER_SELECTED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* DND stuff. */ - -enum _DndTargetType { - DND_TARGET_TYPE_URI_LIST, - DND_TARGET_TYPE_E_SHORTCUT -}; -typedef enum _DndTargetType DndTargetType; - -#define URI_LIST_TYPE "text/uri-list" -#define E_SHORTCUT_TYPE "E-SHORTCUT" - -static GtkTargetEntry drag_types [] = { - { URI_LIST_TYPE, 0, DND_TARGET_TYPE_URI_LIST }, - { E_SHORTCUT_TYPE, 0, DND_TARGET_TYPE_E_SHORTCUT } -}; -static const int num_drag_types = sizeof (drag_types) / sizeof (drag_types[0]); - -static GtkTargetList *target_list; - - -/* Helper functions. */ - -static gboolean -add_node_to_hashes (EStorageSetView *storage_set_view, - const char *path, - GtkCTreeNode *node) -{ - EStorageSetViewPrivate *priv; - char *hash_path; - - g_return_val_if_fail (g_path_is_absolute (path), FALSE); - - priv = storage_set_view->priv; - - if (g_hash_table_lookup (priv->path_to_ctree_node, path) != NULL) { - g_warning ("EStorageSetView: Node already existing while adding -- %s", path); - return FALSE; - } - - g_print ("EStorageSetView: Adding -- %s\n", path); - - hash_path = g_strdup (path); - - g_hash_table_insert (priv->path_to_ctree_node, hash_path, node); - g_hash_table_insert (priv->ctree_node_to_path, node, hash_path); - - return TRUE; -} - -static GtkCTreeNode * -remove_node_from_hashes (EStorageSetView *storage_set_view, - const char *path) -{ - EStorageSetViewPrivate *priv; - GtkCTreeNode *node; - char *hash_path; - - priv = storage_set_view->priv; - - node = g_hash_table_lookup (priv->path_to_ctree_node, path); - if (node == NULL) { - g_warning ("EStorageSetView: Node not found while removing -- %s", path); - return NULL; - } - - g_print ("EStorageSetView: Removing -- %s\n", path); - - hash_path = g_hash_table_lookup (priv->ctree_node_to_path, node); - g_free (hash_path); - - g_hash_table_remove (priv->ctree_node_to_path, node); - g_hash_table_remove (priv->path_to_ctree_node, path); - - return node; -} - -static void -get_pixmap_and_mask_for_folder (EStorageSetView *storage_set_view, - EFolder *folder, - GdkPixmap **pixmap_return, - GdkBitmap **mask_return) -{ - EFolderTypeRegistry *folder_type_registry; - EStorageSet *storage_set; - const char *type_name; - GdkPixbuf *icon_pixbuf; - GdkPixbuf *scaled_pixbuf; - GdkVisual *visual; - GdkGC *gc; - - storage_set = storage_set_view->priv->storage_set; - folder_type_registry = e_storage_set_get_folder_type_registry (storage_set); - - type_name = e_folder_get_type_string (folder); - icon_pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry, - type_name, TRUE); - - if (icon_pixbuf == NULL) { - *pixmap_return = NULL; - *mask_return = NULL; - return; - } - - scaled_pixbuf = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (icon_pixbuf), - gdk_pixbuf_get_has_alpha (icon_pixbuf), - gdk_pixbuf_get_bits_per_sample (icon_pixbuf), - E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE); - - gdk_pixbuf_scale (icon_pixbuf, scaled_pixbuf, - 0, 0, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, - 0.0, 0.0, - (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_width (icon_pixbuf), - (double) E_SHELL_MINI_ICON_SIZE / gdk_pixbuf_get_height (icon_pixbuf), - GDK_INTERP_HYPER); - - visual = gdk_rgb_get_visual (); - *pixmap_return = gdk_pixmap_new (NULL, - E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, - visual->depth); - - gc = gdk_gc_new (*pixmap_return); - gdk_pixbuf_render_to_drawable (scaled_pixbuf, *pixmap_return, gc, 0, 0, 0, 0, - E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, - GDK_RGB_DITHER_NORMAL, 0, 0); - gdk_gc_unref (gc); - - *mask_return = gdk_pixmap_new (NULL, E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, 1); - gdk_pixbuf_render_threshold_alpha (scaled_pixbuf, *mask_return, - 0, 0, 0, 0, - E_SHELL_MINI_ICON_SIZE, E_SHELL_MINI_ICON_SIZE, - 0x7f); - - gdk_pixbuf_unref (scaled_pixbuf); -} - - -/* Folder context menu. */ -/* FIXME: This should be moved somewhere else, so that also the sortcut code - can share it. */ - -static void -folder_context_menu_activate_cb (BonoboUIHandler *uih, - void *data, - const char *path) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - - storage_set_view = E_STORAGE_SET_VIEW (data); - priv = storage_set_view->priv; - - gtk_signal_emit (GTK_OBJECT (storage_set_view), signals[FOLDER_SELECTED], - priv->selected_row_path); - - /* Make sure we don't restore the previously selected row after the - menu is popped down. */ - priv->selected_row_path_before_click = NULL; -} - -static void -populate_folder_context_menu_with_common_items (EStorageSetView *storage_set_view, - BonoboUIHandler *uih) -{ - bonobo_ui_handler_menu_new_item (uih, "/Activate", - _("_View"), _("View the selected folder"), - 0, BONOBO_UI_HANDLER_PIXMAP_NONE, - NULL, 0, 0, - folder_context_menu_activate_cb, - storage_set_view); -} - -static void -popup_folder_menu (EStorageSetView *storage_set_view, - GdkEventButton *event) -{ - EvolutionShellComponentClient *handler; - EStorageSetViewPrivate *priv; - EFolderTypeRegistry *folder_type_registry; - BonoboUIHandler *uih; - EFolder *folder; - - priv = storage_set_view->priv; - - uih = bonobo_ui_handler_new (); - bonobo_ui_handler_create_popup_menu (uih); - - folder = e_storage_set_get_folder (priv->storage_set, priv->selected_row_path); - if (folder == NULL) { - /* Uh!? */ - return; - } - - folder_type_registry = e_storage_set_get_folder_type_registry (priv->storage_set); - g_assert (folder_type_registry != NULL); - - handler = e_folder_type_registry_get_handler_for_type (folder_type_registry, - e_folder_get_type_string (folder)); - g_assert (handler != NULL); - - evolution_shell_component_client_populate_folder_context_menu (handler, - uih, - e_folder_get_physical_uri (folder), - e_folder_get_type_string (folder)); - - populate_folder_context_menu_with_common_items (storage_set_view, uih); - - bonobo_ui_handler_do_popup_menu (uih); - - bonobo_object_unref (BONOBO_OBJECT (uih)); -} - - -/* GtkObject methods. */ - -static void -hash_foreach_free_path (gpointer key, - gpointer value, - gpointer data) -{ - g_free (value); -} - -static void -destroy (GtkObject *object) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - - storage_set_view = E_STORAGE_SET_VIEW (object); - priv = storage_set_view->priv; - - gtk_object_unref (GTK_OBJECT (priv->storage_set)); - - g_hash_table_foreach (priv->ctree_node_to_path, hash_foreach_free_path, NULL); - g_hash_table_destroy (priv->ctree_node_to_path); - g_hash_table_destroy (priv->path_to_ctree_node); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* GtkWidget methods. */ - -static int -button_press_event (GtkWidget *widget, - GdkEventButton *event) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - - storage_set_view = E_STORAGE_SET_VIEW (widget); - priv = storage_set_view->priv; - - priv->selected_row_path_before_click = priv->selected_row_path; - - (* GTK_WIDGET_CLASS (parent_class)->button_press_event) (widget, event); - - if (priv->in_drag) - return FALSE; - - priv->drag_button = event->button; - priv->button_x = event->x; - priv->button_y = event->y; - - /* KLUDGE ALERT. So look at this. We need to grab the pointer now, to check for - motion events and maybe start a drag operation. And GtkCTree seems to do it - already in the `button_press_event'. *But* for some reason something is very - broken somewhere and the grab misbehaves when done by GtkCTree's - `button_press_event'. So we have to ungrab the pointer and re-grab it our way. - Weee! */ - - gdk_pointer_ungrab (GDK_CURRENT_TIME); - gdk_flush (); - gtk_grab_remove (widget); - - gdk_pointer_grab (GTK_CLIST (widget)->clist_window, FALSE, - GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, - NULL, NULL, event->time); - gtk_grab_add (widget); - - return TRUE; -} - -static int -motion_notify_event (GtkWidget *widget, - GdkEventMotion *event) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - - if (event->window != GTK_CLIST (widget)->clist_window) - return (* GTK_WIDGET_CLASS (parent_class)->motion_notify_event) (widget, event); - - storage_set_view = E_STORAGE_SET_VIEW (widget); - priv = storage_set_view->priv; - - if (priv->in_drag || priv->drag_button == 0) - return FALSE; - - if (ABS (event->x - priv->button_x) < DRAG_RESISTANCE - && ABS (event->y - priv->button_y) < DRAG_RESISTANCE) - return FALSE; - - priv->in_drag = TRUE; - priv->dragged_row_path = priv->selected_row_path; - - gtk_drag_begin (widget, target_list, GDK_ACTION_MOVE, - priv->drag_button, (GdkEvent *) event); - - return TRUE; -} - -static void -handle_left_button_selection (EStorageSetView *storage_set_view, - GtkWidget *widget, - GdkEventButton *event) -{ - EStorageSetViewPrivate *priv; - - priv = storage_set_view->priv; - - gtk_signal_emit (GTK_OBJECT (widget), signals[FOLDER_SELECTED], - priv->selected_row_path); - priv->selected_row_path = NULL; -} - -static void -handle_right_button_selection (EStorageSetView *storage_set_view, - GtkWidget *widget, - GdkEventButton *event) -{ - EStorageSetViewPrivate *priv; - - priv = storage_set_view->priv; - - popup_folder_menu (storage_set_view, event); - - if (priv->selected_row_path_before_click != NULL) - e_storage_set_view_set_current_folder (storage_set_view, - priv->selected_row_path_before_click); -} - -static int -button_release_event (GtkWidget *widget, - GdkEventButton *event) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - - if (event->window != GTK_CLIST (widget)->clist_window) - return (* GTK_WIDGET_CLASS (parent_class)->button_release_event) (widget, event); - - storage_set_view = E_STORAGE_SET_VIEW (widget); - priv = storage_set_view->priv; - - if (! priv->in_drag) { - gdk_pointer_ungrab (GDK_CURRENT_TIME); - gtk_grab_remove (widget); - gdk_flush (); - - if (priv->selected_row_path != NULL) { - if (priv->drag_button == 1) - handle_left_button_selection (storage_set_view, widget, event); - else - handle_right_button_selection (storage_set_view, widget, event); - } - } - - priv->selected_row_path_before_click = NULL; - - return TRUE; -} - -static void -drag_end (GtkWidget *widget, - GdkDragContext *context) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - - storage_set_view = E_STORAGE_SET_VIEW (widget); - priv = storage_set_view->priv; - - if (priv->dragged_row_path != NULL) - e_storage_set_view_set_current_folder (storage_set_view, - priv->selected_row_path_before_click); - - priv->in_drag = FALSE; - priv->drag_button = 0; - priv->dragged_row_path = NULL; -} - -static void -set_uri_list_selection (EStorageSetView *storage_set_view, - GtkSelectionData *selection_data) -{ - EStorageSetViewPrivate *priv; - char *uri_list; - - priv = storage_set_view->priv; - - /* FIXME: Get `evolution:' from somewhere instead of hardcoding it here. */ - uri_list = g_strconcat ("evolution:", priv->selected_row_path, "\n", NULL); - gtk_selection_data_set (selection_data, selection_data->target, - 8, (guchar *) uri_list, strlen (uri_list)); - g_free (uri_list); -} - -static void -set_e_shortcut_selection (EStorageSetView *storage_set_view, - GtkSelectionData *selection_data) -{ - EStorageSetViewPrivate *priv; - int shortcut_len; - char *shortcut; - const char *trailing_slash; - const char *name; - - g_return_if_fail(storage_set_view != NULL); - - priv = storage_set_view->priv; - - trailing_slash = strrchr (priv->selected_row_path, '/'); - if (trailing_slash == NULL) - name = NULL; - else - name = trailing_slash + 1; - - /* FIXME: Get `evolution:' from somewhere instead of hardcoding it here. */ - - if (name != NULL) - shortcut_len = strlen (name); - else - shortcut_len = 0; - - shortcut_len ++; /* Separating zero. */ - - shortcut_len += strlen ("evolution:"); - shortcut_len += strlen (priv->selected_row_path); - shortcut_len ++; /* Trailing zero. */ - - shortcut = g_malloc (shortcut_len); - - if (name == NULL) - sprintf (shortcut, "%cevolution:%s", '\0', priv->selected_row_path); - else - sprintf (shortcut, "%s%cevolution:%s", name, '\0', priv->selected_row_path); - - gtk_selection_data_set (selection_data, selection_data->target, - 8, (guchar *) shortcut, shortcut_len); - - g_free (shortcut); -} - -static void -drag_data_get (GtkWidget *widget, - GdkDragContext *context, - GtkSelectionData *selection_data, - guint info, - guint32 time) -{ - EStorageSetView *storage_set_view; - - storage_set_view = E_STORAGE_SET_VIEW (widget); - - switch (info) { - case DND_TARGET_TYPE_URI_LIST: - set_uri_list_selection (storage_set_view, selection_data); - break; - case DND_TARGET_TYPE_E_SHORTCUT: - set_e_shortcut_selection (storage_set_view, selection_data); - break; - default: - g_assert_not_reached (); - } -} - - -/* StorageSet signal handling. */ - -static void -new_storage_cb (EStorageSet *storage_set, - EStorage *storage, - void *data) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - GtkCTreeNode *node; - char *text[2]; - char *path; - - storage_set_view = E_STORAGE_SET_VIEW (data); - priv = storage_set_view->priv; - - path = g_strconcat (G_DIR_SEPARATOR_S, e_storage_get_name (storage), NULL); - - text[0] = (char *) e_storage_get_name (storage); /* Yuck. */ - text[1] = NULL; - - node = gtk_ctree_insert_node (GTK_CTREE (storage_set_view), NULL, NULL, - text, 3, NULL, NULL, NULL, NULL, FALSE, TRUE); - - if (! add_node_to_hashes (storage_set_view, path, node)) { - g_free (path); - gtk_ctree_remove_node (GTK_CTREE (storage_set_view), node); - return; - } - - g_free (path); - - /* FIXME: We want a more specialized sort, e.g. the local folders should always be - on top. */ - gtk_ctree_sort_node (GTK_CTREE (storage_set_view), NULL); -} - -static void -removed_storage_cb (EStorageSet *storage_set, - EStorage *storage, - void *data) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - GtkCTreeNode *node; - char *path; - - storage_set_view = E_STORAGE_SET_VIEW (data); - priv = storage_set_view->priv; - - path = g_strconcat (G_DIR_SEPARATOR_S, e_storage_get_name (storage), NULL); - node = remove_node_from_hashes (storage_set_view, path); - g_free (path); - - gtk_ctree_remove_node (GTK_CTREE (storage_set_view), node); -} - -static void -new_folder_cb (EStorageSet *storage_set, - const char *path, - void *data) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - GtkCTreeNode *parent_node; - GtkCTreeNode *node; - GdkPixmap *pixmap; - GdkBitmap *mask; - char *text[2]; - const char *last_separator; - char *parent_path; - - g_return_if_fail (g_path_is_absolute (path)); - - storage_set_view = E_STORAGE_SET_VIEW (data); - priv = storage_set_view->priv; - - last_separator = strrchr (path, G_DIR_SEPARATOR); - - parent_path = g_strndup (path, last_separator - path); - parent_node = g_hash_table_lookup (priv->path_to_ctree_node, parent_path); - if (parent_node == NULL) { - g_print ("EStorageSetView: EStorageSet reported new subfolder for non-existing folder -- %s\n", - parent_path); - g_free (parent_path); - return; - } - - g_free (parent_path); - - if (parent_node == NULL) - return; - - text[0] = (char *) last_separator + 1; /* Yuck. */ - text[1] = NULL; - - get_pixmap_and_mask_for_folder (storage_set_view, - e_storage_set_get_folder (storage_set, path), - &pixmap, &mask); - node = gtk_ctree_insert_node (GTK_CTREE (storage_set_view), - parent_node, NULL, - text, 3, - pixmap, mask, pixmap, mask, - FALSE, TRUE); - - if (! add_node_to_hashes (storage_set_view, path, node)) { - gtk_ctree_remove_node (GTK_CTREE (storage_set_view), node); - return; - } - - gtk_ctree_sort_node (GTK_CTREE (storage_set_view), parent_node); -} - -static void -removed_folder_cb (EStorageSet *storage_set, - const char *path, - void *data) -{ - EStorageSetView *storage_set_view; - GtkCTreeNode *node; - - storage_set_view = E_STORAGE_SET_VIEW (data); - - node = remove_node_from_hashes (storage_set_view, path); - gtk_ctree_remove_node (GTK_CTREE (storage_set_view), node); -} - - -/* GtkCTree methods. */ - -static void -tree_select_row (GtkCTree *ctree, - GtkCTreeNode *row, - gint column) -{ - EStorageSetView *storage_set_view; - EStorageSetViewPrivate *priv; - const char *path; - - (* GTK_CTREE_CLASS (parent_class)->tree_select_row) (ctree, row, column); - - storage_set_view = E_STORAGE_SET_VIEW (ctree); - priv = storage_set_view->priv; - - path = g_hash_table_lookup (storage_set_view->priv->ctree_node_to_path, row); - if (path == NULL) - return; - - priv->selected_row_path = path; -} - - -static void -class_init (EStorageSetViewClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkCTreeClass *ctree_class; - - parent_class = gtk_type_class (gtk_ctree_get_type ()); - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - widget_class = GTK_WIDGET_CLASS (klass); - widget_class->button_press_event = button_press_event; - widget_class->motion_notify_event = motion_notify_event; - widget_class->button_release_event = button_release_event; - widget_class->drag_end = drag_end; - widget_class->drag_data_get = drag_data_get; - - ctree_class = GTK_CTREE_CLASS (klass); - ctree_class->tree_select_row = tree_select_row; - - signals[FOLDER_SELECTED] - = gtk_signal_new ("folder_selected", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageSetViewClass, folder_selected), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); - - /* Set up DND. */ - - target_list = gtk_target_list_new (drag_types, num_drag_types); - g_assert (target_list != NULL); -} - -static void -init (EStorageSetView *storage_set_view) -{ - EStorageSetViewPrivate *priv; - GtkCList *clist; - - /* Avoid GtkCTree's broken focusing behavior. FIXME: Other ways? */ - GTK_WIDGET_UNSET_FLAGS (storage_set_view, GTK_CAN_FOCUS); - - priv = g_new (EStorageSetViewPrivate, 1); - - priv->storage_set = NULL; - priv->ctree_node_to_path = g_hash_table_new (g_direct_hash, g_direct_equal); - priv->path_to_ctree_node = g_hash_table_new (g_str_hash, g_str_equal); - priv->selected_row_path = NULL; - priv->dragged_row_path = NULL; - priv->selected_row_path_before_click = NULL; - priv->in_drag = FALSE; - priv->button_x = 0; - priv->button_y = 0; - - storage_set_view->priv = priv; - - /* Set up the right mouse button so that it also selects. */ - clist = GTK_CLIST (storage_set_view); - clist->button_actions[2] |= GTK_BUTTON_SELECTS; -} - - -static int -folder_compare_cb (gconstpointer a, gconstpointer b) -{ - EFolder *folder_a; - EFolder *folder_b; - const char *name_a; - const char *name_b; - - folder_a = E_FOLDER (a); - folder_b = E_FOLDER (b); - - name_a = e_folder_get_name (folder_a); - name_b = e_folder_get_name (folder_b); - - return strcmp (name_a, name_b); -} - -static void -insert_folders (EStorageSetView *storage_set_view, - GtkCTreeNode *parent, - EStorage *storage, - const char *path, - int level) -{ - EStorageSetViewPrivate *priv; - GtkCTree *ctree; - GtkCTreeNode *node; - GList *folder_list; - GList *p; - const char *storage_name; - - ctree = GTK_CTREE (storage_set_view); - priv = storage_set_view->priv; - - storage_name = e_storage_get_name (storage); - - folder_list = e_storage_list_folders (storage, path); - if (folder_list == NULL) - return; - - folder_list = g_list_sort (folder_list, folder_compare_cb); - - for (p = folder_list; p != NULL; p = p->next) { - EFolder *folder; - const char *folder_name; - char *text[2]; - char *subpath; - char *full_path; - GdkPixmap *pixmap; - GdkBitmap *mask; - - folder = E_FOLDER (p->data); - folder_name = e_folder_get_name (folder); - - text[0] = (char *) folder_name; /* Yuck. */ - text[1] = NULL; - - get_pixmap_and_mask_for_folder (storage_set_view, folder, &pixmap, &mask); - node = gtk_ctree_insert_node (ctree, parent, NULL, - text, 3, - pixmap, mask, pixmap, mask, - FALSE, TRUE); - - subpath = g_concat_dir_and_file (path, folder_name); - insert_folders (storage_set_view, node, storage, subpath, level + 1); - - full_path = g_strconcat("/", storage_name, subpath, NULL); - g_hash_table_insert (priv->ctree_node_to_path, node, full_path); - g_hash_table_insert (priv->path_to_ctree_node, full_path, node); - - g_free (subpath); - } - - e_free_object_list (folder_list); -} - -void -e_storage_set_view_construct (EStorageSetView *storage_set_view, - EStorageSet *storage_set) -{ - EStorageSetViewPrivate *priv; - GtkCTreeNode *parent; - GtkCTree *ctree; - EStorage *storage; - GList *storage_list; - GList *p; - const char *name; - char *text[2]; - char *path; - - g_return_if_fail (storage_set_view != NULL); - g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view)); - g_return_if_fail (storage_set != NULL); - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - - ctree = GTK_CTREE (storage_set_view); - priv = storage_set_view->priv; - - /* Set up GtkCTree/GtkCList parameters. */ - - gtk_ctree_construct (ctree, 1, 0, NULL); - gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED); - gtk_ctree_set_expander_style (ctree, GTK_CTREE_EXPANDER_SQUARE); - - gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_BROWSE); - gtk_clist_set_row_height (GTK_CLIST (ctree), E_SHELL_MINI_ICON_SIZE); - gtk_clist_set_column_auto_resize (GTK_CLIST (ctree), 0, TRUE); - - gtk_object_ref (GTK_OBJECT (storage_set)); - priv->storage_set = storage_set; - - gtk_signal_connect_while_alive (GTK_OBJECT (storage_set), "new_storage", - GTK_SIGNAL_FUNC (new_storage_cb), storage_set_view, - GTK_OBJECT (storage_set_view)); - gtk_signal_connect_while_alive (GTK_OBJECT (storage_set), "removed_storage", - GTK_SIGNAL_FUNC (removed_storage_cb), storage_set_view, - GTK_OBJECT (storage_set_view)); - gtk_signal_connect_while_alive (GTK_OBJECT (storage_set), "new_folder", - GTK_SIGNAL_FUNC (new_folder_cb), storage_set_view, - GTK_OBJECT (storage_set_view)); - gtk_signal_connect_while_alive (GTK_OBJECT (storage_set), "removed_folder", - GTK_SIGNAL_FUNC (removed_folder_cb), storage_set_view, - GTK_OBJECT (storage_set_view)); - - storage_list = e_storage_set_get_storage_list (storage_set); - - text[1] = NULL; - - for (p = storage_list; p != NULL; p = p->next) { - storage = E_STORAGE (p->data); - - name = e_storage_get_name (storage); - text[0] = (char *) name; /* Yuck. */ - - parent = gtk_ctree_insert_node (ctree, NULL, NULL, - text, 3, - NULL, NULL, NULL, NULL, - FALSE, TRUE); - - path = g_strconcat ("/", name, NULL); - g_hash_table_insert (priv->ctree_node_to_path, parent, path); - g_hash_table_insert (priv->path_to_ctree_node, path, parent); - - insert_folders (storage_set_view, parent, storage, "/", 1); - } - - e_free_object_list (storage_list); -} - -GtkWidget * -e_storage_set_view_new (EStorageSet *storage_set) -{ - GtkWidget *new; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - - new = gtk_type_new (e_storage_set_view_get_type ()); - e_storage_set_view_construct (E_STORAGE_SET_VIEW (new), storage_set); - - return new; -} - - -void -e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view, - const char *path) -{ - EStorageSetViewPrivate *priv; - GtkCTreeNode *node; - - g_return_if_fail (storage_set_view != NULL); - g_return_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view)); - g_return_if_fail (path == NULL || g_path_is_absolute (path)); - - priv = storage_set_view->priv; - - if (path == NULL) { - gtk_clist_unselect_all (GTK_CLIST (storage_set_view)); - return; - } - - node = g_hash_table_lookup (priv->path_to_ctree_node, path); - if (node == NULL) { - gtk_clist_unselect_all (GTK_CLIST (storage_set_view)); - return; - } - - gtk_ctree_select (GTK_CTREE (storage_set_view), node); - - gtk_signal_emit (GTK_OBJECT (storage_set_view), signals[FOLDER_SELECTED], path); -} - -const char * -e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view) -{ - EStorageSetViewPrivate *priv; - GtkCList *clist; - GtkCTree *ctree; - GtkCTreeRow *ctree_row; - GtkCTreeNode *ctree_node; - const char *path; - - g_return_val_if_fail (storage_set_view != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET_VIEW (storage_set_view), NULL); - - priv = storage_set_view->priv; - - clist = GTK_CLIST (storage_set_view); - ctree = GTK_CTREE (storage_set_view); - - if (clist->selection == NULL) - return NULL; - - ctree_row = GTK_CTREE_ROW (clist->selection->data); - ctree_node = gtk_ctree_find_node_ptr (ctree, ctree_row); - if (ctree_node == NULL) - return NULL; /* Mmh? */ - - path = g_hash_table_lookup (priv->ctree_node_to_path, ctree_node); - - return path; -} - - -E_MAKE_TYPE (e_storage_set_view, "EStorageSetView", EStorageSetView, class_init, init, PARENT_TYPE) diff --git a/shell/e-storage-set-view.h b/shell/e-storage-set-view.h deleted file mode 100644 index 098de0d2a7..0000000000 --- a/shell/e-storage-set-view.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-storage-set-view.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __E_STORAGE_SET_VIEW_H__ -#define __E_STORAGE_SET_VIEW_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include "e-storage-set.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_STORAGE_SET_VIEW (e_storage_set_view_get_type ()) -#define E_STORAGE_SET_VIEW(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE_SET_VIEW, EStorageSetView)) -#define E_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_SET_VIEW, EStorageSetViewClass)) -#define E_IS_STORAGE_SET_VIEW(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE_SET_VIEW)) -#define E_IS_STORAGE_SET_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_SET_VIEW)) - - -typedef struct _EStorageSetView EStorageSetView; -typedef struct _EStorageSetViewPrivate EStorageSetViewPrivate; -typedef struct _EStorageSetViewClass EStorageSetViewClass; - -struct _EStorageSetView { - GtkCTree parent; - - EStorageSetViewPrivate *priv; -}; - -struct _EStorageSetViewClass { - GtkCTreeClass parent_class; - - /* Signals. */ - - void (* folder_selected) (EStorageSetView *storage_set_view, - const char *uri); -}; - - -GtkType e_storage_set_view_get_type (void); -GtkWidget *e_storage_set_view_new (EStorageSet *storage_set); -void e_storage_set_view_construct (EStorageSetView *storage_set_view, - EStorageSet *storage_set); -void e_storage_set_view_set_current_folder (EStorageSetView *storage_set_view, - const char *path); -const char *e_storage_set_view_get_current_folder (EStorageSetView *storage_set_view); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __E_STORAGE_SET_VIEW_H__ */ diff --git a/shell/e-storage-set.c b/shell/e-storage-set.c deleted file mode 100644 index 7b18d93c1c..0000000000 --- a/shell/e-storage-set.c +++ /dev/null @@ -1,576 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-storage-set.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#include - -#include "e-util/e-util.h" - -#include "e-storage-set-view.h" -#include "e-storage-set.h" - - -#define PARENT_TYPE GTK_TYPE_OBJECT - -static GtkObjectClass *parent_class = NULL; - -/* This is just to make GHashTable happy. */ -struct _NamedStorage { - char *name; - EStorage *storage; -}; -typedef struct _NamedStorage NamedStorage; - -struct _EStorageSetPrivate { - GList *storages; /* EStorage */ - GHashTable *name_to_named_storage; - - EFolderTypeRegistry *folder_type_registry; -}; - -enum { - NEW_STORAGE, - REMOVED_STORAGE, - NEW_FOLDER, - REMOVED_FOLDER, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -static NamedStorage * -named_storage_new (EStorage *storage) -{ - NamedStorage *new; - - new = g_new (NamedStorage, 1); - new->name = g_strdup (e_storage_get_name (storage)); - new->storage = storage; - - return new; -} - -static void -named_storage_destroy (NamedStorage *named_storage) -{ - g_free (named_storage->name); - g_free (named_storage); -} - -static gboolean -name_to_named_storage_foreach_destroy (void *key, - void *value, - void *user_data) -{ - NamedStorage *named_storage; - - named_storage = (NamedStorage *) value; - named_storage_destroy (named_storage); - - return TRUE; -} - - -/* Handling for signals coming from the EStorages. */ - -static char * -make_full_path (EStorage *storage, - const char *path) -{ - const char *storage_name; - char *full_path; - - storage_name = e_storage_get_name (storage); - - if (! g_path_is_absolute (path)) - full_path = g_strconcat (G_DIR_SEPARATOR_S, storage_name, - G_DIR_SEPARATOR_S, path, NULL); - else - full_path = g_strconcat (G_DIR_SEPARATOR_S, storage_name, - path, NULL); - - return full_path; -} - -static void -storage_new_folder_cb (EStorage *storage, - const char *path, - void *data) -{ - EStorageSet *storage_set; - char *full_path; - - storage_set = E_STORAGE_SET (data); - - full_path = make_full_path (storage, path); - gtk_signal_emit (GTK_OBJECT (storage_set), signals[NEW_FOLDER], full_path); - g_free (full_path); -} - -static void -storage_removed_folder_cb (EStorage *storage, - const char *path, - void *data) -{ - EStorageSet *storage_set; - char *full_path; - - storage_set = E_STORAGE_SET (data); - - full_path = make_full_path (storage, path); - g_print ("EStorageSet: Removed folder -- %s\n", full_path); - gtk_signal_emit (GTK_OBJECT (storage_set), signals[REMOVED_FOLDER], full_path); - g_free (full_path); -} - - -static EStorage * -get_storage_for_path (EStorageSet *storage_set, - const char *path, - const char **subpath_return) -{ - EStorage *storage; - char *storage_name; - const char *first_separator; - - g_return_val_if_fail (g_path_is_absolute (path), NULL); - - /* Skip initial separator. */ - path++; - - first_separator = strchr (path, G_DIR_SEPARATOR); - - if (first_separator == NULL || first_separator == path || first_separator[1] == 0) { - *subpath_return = NULL; - return NULL; - } - - storage_name = g_strndup (path, first_separator - path); - storage = e_storage_set_get_storage (storage_set, storage_name); - g_free (storage_name); - - *subpath_return = first_separator; - - return storage; -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EStorageSet *storage_set; - EStorageSetPrivate *priv; - - storage_set = E_STORAGE_SET (object); - priv = storage_set->priv; - - e_free_object_list (priv->storages); - - gtk_object_unref (GTK_OBJECT (priv->folder_type_registry)); - - g_hash_table_foreach (priv->name_to_named_storage, - (GHFunc) named_storage_destroy, NULL); - g_hash_table_destroy (priv->name_to_named_storage); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EStorageSetClass *klass) -{ - GtkObjectClass *object_class; - - parent_class = gtk_type_class (gtk_object_get_type ()); - object_class = GTK_OBJECT_CLASS (klass); - - object_class->destroy = destroy; - - signals[NEW_STORAGE] = - gtk_signal_new ("new_storage", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageSetClass, new_storage), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - signals[REMOVED_STORAGE] = - gtk_signal_new ("removed_storage", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageSetClass, removed_storage), - gtk_marshal_NONE__POINTER, - GTK_TYPE_NONE, 1, - GTK_TYPE_POINTER); - signals[NEW_FOLDER] = - gtk_signal_new ("new_folder", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageSetClass, new_folder), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - signals[REMOVED_FOLDER] = - gtk_signal_new ("removed_folder", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageSetClass, removed_folder), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EStorageSet *storage_set) -{ - EStorageSetPrivate *priv; - - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - - priv = g_new (EStorageSetPrivate, 1); - priv->storages = NULL; - priv->name_to_named_storage = g_hash_table_new (g_str_hash, g_str_equal); - priv->folder_type_registry = NULL; - - storage_set->priv = priv; -} - - -void -e_storage_set_construct (EStorageSet *storage_set, - EFolderTypeRegistry *folder_type_registry) -{ - g_return_if_fail (storage_set != NULL); - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - - GTK_OBJECT_UNSET_FLAGS (storage_set, GTK_FLOATING); - - gtk_object_ref (GTK_OBJECT (folder_type_registry)); - storage_set->priv->folder_type_registry = folder_type_registry; -} - -EStorageSet * -e_storage_set_new (EFolderTypeRegistry *folder_type_registry) -{ - EStorageSet *new; - - new = gtk_type_new (e_storage_set_get_type ()); - - e_storage_set_construct (new, folder_type_registry); - - return new; -} - - -GList * -e_storage_set_get_storage_list (EStorageSet *storage_set) -{ - EStorageSetPrivate *priv; - GList *list; - GList *p; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - - priv = storage_set->priv; - - list = NULL; - for (p = priv->storages; p != NULL; p = p->next) { - gtk_object_ref (GTK_OBJECT (p->data)); - list = g_list_prepend (list, p->data); - } - - return g_list_reverse (list); /* Lame. */ -} - -/** - * e_storage_set_add_storage: - * @storage_set: - * @storage: - * - * Add @storage to @storage_set. Notice that will ref the storage. - **/ -gboolean -e_storage_set_add_storage (EStorageSet *storage_set, - EStorage *storage) -{ - EStorageSetPrivate *priv; - const char *storage_name; - NamedStorage *named_storage; - - g_return_val_if_fail (storage_set != NULL, FALSE); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE); - g_return_val_if_fail (storage != NULL, FALSE); - g_return_val_if_fail (E_IS_STORAGE (storage), FALSE); - - priv = storage_set->priv; - - storage_name = e_storage_get_name (storage); - if (g_hash_table_lookup (priv->name_to_named_storage, storage_name) != NULL) - return FALSE; - - gtk_object_ref (GTK_OBJECT (storage)); - - gtk_signal_connect (GTK_OBJECT (storage), "new_folder", - GTK_SIGNAL_FUNC (storage_new_folder_cb), storage_set); - gtk_signal_connect (GTK_OBJECT (storage), "removed_folder", - GTK_SIGNAL_FUNC (storage_removed_folder_cb), storage_set); - - priv->storages = g_list_append (priv->storages, storage); - - named_storage = named_storage_new (storage); - g_hash_table_insert (priv->name_to_named_storage, named_storage->name, named_storage); - - gtk_signal_emit (GTK_OBJECT (storage_set), signals[NEW_STORAGE], storage); - - return TRUE; -} - -gboolean -e_storage_set_remove_storage (EStorageSet *storage_set, - EStorage *storage) -{ - EStorageSetPrivate *priv; - NamedStorage *named_storage; - - g_return_val_if_fail (storage_set != NULL, FALSE); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), FALSE); - g_return_val_if_fail (storage != NULL, FALSE); - g_return_val_if_fail (E_IS_STORAGE (storage), FALSE); - - priv = storage_set->priv; - - named_storage = g_hash_table_lookup (priv->name_to_named_storage, - e_storage_get_name (storage)); - if (named_storage == NULL) - return FALSE; - - g_hash_table_remove (priv->name_to_named_storage, named_storage->name); - named_storage_destroy (named_storage); - - priv->storages = g_list_remove (priv->storages, storage); - - gtk_signal_emit (GTK_OBJECT (storage_set), signals[REMOVED_STORAGE], storage); - gtk_object_unref (GTK_OBJECT (storage)); - - return TRUE; -} - -void -e_storage_set_remove_all_storages (EStorageSet *storage_set) -{ - EStorageSetPrivate *priv; - GList *p; - - g_return_if_fail (storage_set != NULL); - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - - priv = storage_set->priv; - - for (p = priv->storages; p != NULL; p = p->next) { - EStorage *storage; - - storage = E_STORAGE (p->data); - - gtk_signal_emit (GTK_OBJECT (storage_set), signals[REMOVED_STORAGE], storage); - gtk_object_unref (GTK_OBJECT (storage)); - } - - g_hash_table_foreach_remove (priv->name_to_named_storage, - name_to_named_storage_foreach_destroy, - NULL); - - g_list_free (priv->storages); - priv->storages = NULL; -} - - -EStorage * -e_storage_set_get_storage (EStorageSet *storage_set, - const char *name) -{ - EStorageSetPrivate *priv; - NamedStorage *named_storage; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - g_return_val_if_fail (name != NULL, NULL); - - priv = storage_set->priv; - - named_storage = g_hash_table_lookup (priv->name_to_named_storage, name); - if (named_storage == NULL) - return NULL; - else - return named_storage->storage; -} - -EFolder * -e_storage_set_get_folder (EStorageSet *storage_set, - const char *path) -{ - EStorage *storage; - const char *subpath; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (g_path_is_absolute (path), NULL); - - storage = get_storage_for_path (storage_set, path, &subpath); - - return e_storage_get_folder (storage, subpath); -} - - -GtkWidget * -e_storage_set_new_view (EStorageSet *storage_set) -{ - GtkWidget *storage_set_view; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - - storage_set_view = e_storage_set_view_new (storage_set); - - return storage_set_view; -} - - -void -e_storage_set_async_create_folder (EStorageSet *storage_set, - const char *path, - const char *type, - const char *description, - EStorageResultCallback callback, - void *data) -{ - EStorage *storage; - const char *subpath; - - g_return_if_fail (storage_set != NULL); - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - g_return_if_fail (path != NULL); - g_return_if_fail (g_path_is_absolute (path)); - g_return_if_fail (type != NULL); - g_return_if_fail (callback != NULL); - - storage = get_storage_for_path (storage_set, path, &subpath); - - e_storage_async_create_folder (storage, subpath, type, description, callback, data); -} - -void -e_storage_set_async_remove_folder (EStorageSet *storage_set, - const char *path, - EStorageResultCallback callback, - void *data) -{ - EStorage *storage; - const char *subpath; - - g_return_if_fail (storage_set != NULL); - g_return_if_fail (E_IS_STORAGE_SET (storage_set)); - g_return_if_fail (path != NULL); - g_return_if_fail (g_path_is_absolute (path)); - g_return_if_fail (callback != NULL); - - storage = get_storage_for_path (storage_set, path, &subpath); - - e_storage_async_remove_folder (storage, path, callback, data); -} - - -EFolderTypeRegistry * -e_storage_set_get_folder_type_registry (EStorageSet *storage_set) -{ - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - - return storage_set->priv->folder_type_registry; -} - - -/* Utility functions. */ - -/** - * e_storage_set_get_path_for_physical_uri: - * @storage_set: A storage set - * @physical_uri: A physical URI - * - * Retrieve the path of the folder whose physical URI matches @physical_uri. - * - * Return value: - **/ -char * -e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set, - const char *physical_uri) -{ - EStorageSetPrivate *priv; - GList *p; - - g_return_val_if_fail (storage_set != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL); - g_return_val_if_fail (physical_uri != NULL, NULL); - - priv = storage_set->priv; - - for (p = priv->storages; p != NULL; p = p->next) { - EStorage *storage; - char *storage_path; - - storage = E_STORAGE (p->data); - - storage_path = e_storage_get_path_for_physical_uri (storage, physical_uri); - if (storage_path != NULL) { - char *storage_set_path; - - storage_set_path = g_strconcat (G_DIR_SEPARATOR_S, - e_storage_get_name (storage), - storage_path, - NULL); - g_free (storage_path); - - return storage_set_path; - } - } - - return NULL; -} - - -E_MAKE_TYPE (e_storage_set, "EStorageSet", EStorageSet, class_init, init, PARENT_TYPE) diff --git a/shell/e-storage-set.h b/shell/e-storage-set.h deleted file mode 100644 index cc0d34811a..0000000000 --- a/shell/e-storage-set.h +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-storage-set.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_STORAGE_SET_H_ -#define _E_STORAGE_SET_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-folder-type-registry.h" -#include "e-storage.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_STORAGE_SET (e_storage_set_get_type ()) -#define E_STORAGE_SET(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE_SET, EStorageSet)) -#define E_STORAGE_SET_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE_SET, EStorageSetClass)) -#define E_IS_STORAGE_SET(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE_SET)) -#define E_IS_STORAGE_SET_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE_SET)) - - -typedef struct _EStorageSet EStorageSet; -typedef struct _EStorageSetPrivate EStorageSetPrivate; -typedef struct _EStorageSetClass EStorageSetClass; - -struct _EStorageSet { - GtkObject parent; - - EStorageSetPrivate *priv; -}; - -struct _EStorageSetClass { - GtkObjectClass parent_class; - - /* Signals. */ - - void (* new_storage) (EStorageSet *storage_set, EStorage *storage); - void (* removed_storage) (EStorageSet *storage_set, EStorage *storage); - /* FIXME? Inconsistency between storage and folders. */ - void (* new_folder) (EStorageSet *storage_set, const char *path); - void (* removed_folder) (EStorageSet *storage_set, const char *path); -}; - - -GtkType e_storage_set_get_type (void); -void e_storage_set_construct (EStorageSet *storage_set, - EFolderTypeRegistry *folder_type_registry); -EStorageSet *e_storage_set_new (EFolderTypeRegistry *folder_type_registry); - -gboolean e_storage_set_add_storage (EStorageSet *storage_set, - EStorage *storage); -gboolean e_storage_set_remove_storage (EStorageSet *storage_set, - EStorage *storage); -void e_storage_set_remove_all_storages (EStorageSet *storage_set); - -GList *e_storage_set_get_storage_list (EStorageSet *storage_set); -EStorage *e_storage_set_get_storage (EStorageSet *storage_set, - const char *storage_name); -EFolder *e_storage_set_get_folder (EStorageSet *storage_set, - const char *path); - -GtkWidget *e_storage_set_new_view (EStorageSet *storage_set); - -void e_storage_set_async_create_folder (EStorageSet *storage_set, - const char *path, - const char *type, - const char *description, - EStorageResultCallback callback, - void *data); -void e_storage_set_async_remove_folder (EStorageSet *storage_set, - const char *path, - EStorageResultCallback callback, - void *data); - -EFolderTypeRegistry *e_storage_set_get_folder_type_registry (EStorageSet *storage_set); - -/* Utility functions. */ - -char *e_storage_set_get_path_for_physical_uri (EStorageSet *storage_set, - const char *physical_uri); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_STORAGE_SET_H_ */ diff --git a/shell/e-storage.c b/shell/e-storage.c deleted file mode 100644 index eb03cb36a0..0000000000 --- a/shell/e-storage.c +++ /dev/null @@ -1,593 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-storage.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include - -#include "e-util/e-util.h" - -#include "e-storage.h" - - -#define PARENT_TYPE GTK_TYPE_OBJECT -static GtkObjectClass *parent_class = NULL; - -#define ES_CLASS(obj) \ - E_STORAGE_CLASS (GTK_OBJECT (obj)->klass) - -/* This describes a folder and its children. */ -struct _Folder { - struct _Folder *parent; - - char *path; - EFolder *e_folder; - GList *subfolders; -}; -typedef struct _Folder Folder; - -struct _EStoragePrivate { - GHashTable *path_to_folder; /* Folder */ -}; - -enum { - NEW_FOLDER, - REMOVED_FOLDER, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* Folder handling. */ - -static Folder * -folder_new (EFolder *e_folder, - const char *path) -{ - Folder *folder; - - folder = g_new (Folder, 1); - folder->path = g_strdup (path); - folder->parent = NULL; - folder->e_folder = e_folder; - folder->subfolders = NULL; - - return folder; -} - -static void -folder_remove_subfolder (Folder *folder, Folder *subfolder) -{ - g_list_remove (folder->subfolders, folder); -} - -static void -folder_add_subfolder (Folder *folder, Folder *subfolder) -{ - folder->subfolders = g_list_prepend (folder->subfolders, subfolder); - subfolder->parent = folder; -} - -static void -folder_destroy (Folder *folder) -{ - g_assert (folder->subfolders == NULL); - - if (folder->parent != NULL) - folder_remove_subfolder (folder->parent, folder); - - g_free (folder->path); - - if (folder->e_folder != NULL) - gtk_object_unref (GTK_OBJECT (folder->e_folder)); - - g_free (folder); -} - -static void -remove_folder (EStorage *storage, - Folder *folder) -{ - EStoragePrivate *priv; - - priv = storage->priv; - - if (folder->subfolders != NULL) { - GList *p; - - for (p = folder->subfolders; p != NULL; p = p->next) { - Folder *subfolder; - - subfolder = (Folder *) p->data; - remove_folder (storage, subfolder); - } - - g_list_free (folder->subfolders); - folder->subfolders = NULL; - } - - g_hash_table_remove (priv->path_to_folder, folder->path); - - folder_destroy (folder); -} - -static void -free_private (EStorage *storage) -{ - EStoragePrivate *priv; - Folder *root_folder; - - priv = storage->priv; - - root_folder = g_hash_table_lookup (priv->path_to_folder, G_DIR_SEPARATOR_S); - remove_folder (storage, root_folder); - - g_hash_table_destroy (priv->path_to_folder); - - g_free (priv); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EStorage *storage; - - storage = E_STORAGE (object); - - free_private (storage); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* EStorage methods. */ - -static GList * -impl_list_folders (EStorage *storage, - const char *path) -{ - Folder *folder; - Folder *subfolder; - GList *list; - GList *p; - - folder = g_hash_table_lookup (storage->priv->path_to_folder, path); - if (folder == NULL) - return NULL; - - list = NULL; - for (p = folder->subfolders; p != NULL; p = p->next) { - subfolder = (Folder *) p->data; - - gtk_object_ref (GTK_OBJECT (subfolder->e_folder)); - list = g_list_prepend (list, subfolder->e_folder); - } - - return list; -} - -static EFolder * -impl_get_folder (EStorage *storage, - const char *path) -{ - EStoragePrivate *priv; - Folder *folder; - - priv = storage->priv; - - folder = g_hash_table_lookup (priv->path_to_folder, path); - if (folder == NULL) - return NULL; - - return folder->e_folder; -} - -static const char * -impl_get_name (EStorage *storage) -{ - return _("(No name)"); -} - -static void -impl_async_create_folder (EStorage *storage, - const char *path, - const char *type, - const char *description, - EStorageResultCallback callback, - void *data) -{ - (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data); -} - -static void -impl_async_remove_folder (EStorage *storage, - const char *path, - EStorageResultCallback callback, - void *data) -{ - (* callback) (storage, E_STORAGE_NOTIMPLEMENTED, data); -} - - -/* Initialization. */ - -static void -class_init (EStorageClass *class) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (class); - parent_class = gtk_type_class (gtk_object_get_type ()); - - object_class->destroy = destroy; - - class->list_folders = impl_list_folders; - class->get_folder = impl_get_folder; - class->get_name = impl_get_name; - class->async_create_folder = impl_async_create_folder; - class->async_remove_folder = impl_async_remove_folder; - - signals[NEW_FOLDER] = - gtk_signal_new ("new_folder", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageClass, new_folder), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - signals[REMOVED_FOLDER] = - gtk_signal_new ("removed_folder", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EStorageClass, removed_folder), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); -} - -static void -init (EStorage *storage) -{ - EStoragePrivate *priv; - - priv = g_new (EStoragePrivate, 1); - priv->path_to_folder = g_hash_table_new (g_str_hash, g_str_equal); - - storage->priv = priv; -} - - -/* Creation. */ - -void -e_storage_construct (EStorage *storage) -{ - Folder *root_folder; - - g_return_if_fail (storage != NULL); - g_return_if_fail (E_IS_STORAGE (storage)); - - GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (storage), GTK_FLOATING); - - root_folder = folder_new (NULL, G_DIR_SEPARATOR_S); - g_hash_table_insert (storage->priv->path_to_folder, root_folder->path, root_folder); -} - -EStorage * -e_storage_new (void) -{ - EStorage *new; - - new = gtk_type_new (e_storage_get_type ()); - - e_storage_construct (new); - - return new; -} - - -gboolean -e_storage_path_is_absolute (const char *path) -{ - g_return_val_if_fail (path != NULL, FALSE); - - return *path == G_DIR_SEPARATOR; -} - -gboolean -e_storage_path_is_relative (const char *path) -{ - g_return_val_if_fail (path != NULL, FALSE); - - return *path != G_DIR_SEPARATOR; -} - - -GList * -e_storage_list_folders (EStorage *storage, - const char *path) -{ - g_return_val_if_fail (storage != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE (storage), NULL); - g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (g_path_is_absolute (path), NULL); - - return (* ES_CLASS (storage)->list_folders) (storage, path); -} - -EFolder * -e_storage_get_folder (EStorage *storage, - const char *path) -{ - g_return_val_if_fail (storage != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE (storage), NULL); - g_return_val_if_fail (path != NULL, NULL); - g_return_val_if_fail (e_storage_path_is_absolute (path), NULL); - - return (* ES_CLASS (storage)->get_folder) (storage, path); -} - -const char * -e_storage_get_name (EStorage *storage) -{ - g_return_val_if_fail (storage != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE (storage), NULL); - - return (* ES_CLASS (storage)->get_name) (storage); -} - - -/* Folder operations. */ - -void -e_storage_async_create_folder (EStorage *storage, - const char *path, - const char *type, - const char *description, - EStorageResultCallback callback, - void *data) -{ - g_return_if_fail (storage != NULL); - g_return_if_fail (E_IS_STORAGE (storage)); - g_return_if_fail (path != NULL); - g_return_if_fail (g_path_is_absolute (path)); - g_return_if_fail (type != NULL); - g_return_if_fail (callback != NULL); - - (* ES_CLASS (storage)->async_create_folder) (storage, path, type, description, callback, data); -} - -void -e_storage_async_remove_folder (EStorage *storage, - const char *path, - EStorageResultCallback callback, - void *data) -{ - g_return_if_fail (storage != NULL); - g_return_if_fail (E_IS_STORAGE (storage)); - g_return_if_fail (path != NULL); - g_return_if_fail (g_path_is_absolute (path)); - g_return_if_fail (callback != NULL); - - (* ES_CLASS (storage)->async_remove_folder) (storage, path, callback, data); -} - - -const char * -e_storage_result_to_string (EStorageResult result) -{ - switch (result) { - case E_STORAGE_OK: - return _("No error"); - case E_STORAGE_GENERICERROR: - return _("Generic error"); - case E_STORAGE_EXISTS: - return _("A folder with the same name already exists"); - case E_STORAGE_INVALIDTYPE: - return _("The specified folder type is not valid"); - case E_STORAGE_IOERROR: - return _("I/O error"); - case E_STORAGE_NOSPACE: - return _("Not enough space to create the folder"); - case E_STORAGE_NOTFOUND: - return _("The specified folder was not found"); - case E_STORAGE_NOTIMPLEMENTED: - return _("Function not implemented in this storage"); - case E_STORAGE_PERMISSIONDENIED: - return _("Permission denied"); - case E_STORAGE_UNSUPPORTEDOPERATION: - return _("Operation not supported"); - case E_STORAGE_UNSUPPORTEDTYPE: - return _("The specified type is not supported in this storage"); - default: - return _("Unknown error"); - } -} - - -/* Utility functions. */ - -struct _GetPathForPhysicalUriForeachData { - const char *physical_uri; - char *retval; -}; -typedef struct _GetPathForPhysicalUriForeachData GetPathForPhysicalUriForeachData; - -static void -get_path_for_physical_uri_foreach (void *key, - void *value, - void *data) -{ - GetPathForPhysicalUriForeachData *foreach_data; - const char *physical_uri; - Folder *folder; - - foreach_data = (GetPathForPhysicalUriForeachData *) data; - if (foreach_data->retval != NULL) - return; - - folder = (Folder *) value; - if (folder->e_folder == NULL) - return; - - physical_uri = e_folder_get_physical_uri (folder->e_folder); - - if (strcmp (foreach_data->physical_uri, physical_uri) == 0) { - const char *path; - - path = (const char *) key; - foreach_data->retval = g_strdup (path); - } -} - -/** - * e_storage_get_path_for_physical_uri: - * @storage: A storage - * @physical_uri: A physical URI - * - * Look for the folder having the specified @physical_uri. - * - * Return value: The path of the folder having the specified @physical_uri in - * @storage. If such a folder does not exist, just return NULL. The return - * value must be freed by the caller. - **/ -char * -e_storage_get_path_for_physical_uri (EStorage *storage, - const char *physical_uri) -{ - GetPathForPhysicalUriForeachData foreach_data; - EStoragePrivate *priv; - - g_return_val_if_fail (storage != NULL, NULL); - g_return_val_if_fail (E_IS_STORAGE (storage), NULL); - g_return_val_if_fail (physical_uri != NULL, NULL); - - priv = storage->priv; - - foreach_data.physical_uri = physical_uri; - foreach_data.retval = NULL; - - g_hash_table_foreach (priv->path_to_folder, get_path_for_physical_uri_foreach, &foreach_data); - - return foreach_data.retval; -} - - -/* Protected functions. */ - -/* These functions are used by subclasses to add and remove folders from the - state stored in the storage object. */ - -gboolean -e_storage_new_folder (EStorage *storage, - const char *path, - EFolder *e_folder) -{ - EStoragePrivate *priv; - Folder *folder; - Folder *parent_folder; - const char *name; - char *full_path; - - g_return_val_if_fail (storage != NULL, FALSE); - g_return_val_if_fail (E_IS_STORAGE (storage), FALSE); - g_return_val_if_fail (path != NULL, FALSE); - g_return_val_if_fail (g_path_is_absolute (path), FALSE); - g_return_val_if_fail (e_folder != NULL, FALSE); - g_return_val_if_fail (E_IS_FOLDER (e_folder), FALSE); - - priv = storage->priv; - - parent_folder = g_hash_table_lookup (priv->path_to_folder, path); - if (parent_folder == NULL) { - g_warning ("%s: Trying to add a subfolder to a path that does not exist yet -- %s", - __FUNCTION__, path); - return FALSE; - } - - name = e_folder_get_name (e_folder); - g_assert (name != NULL); - g_return_val_if_fail (*name != G_DIR_SEPARATOR, FALSE); - - full_path = g_concat_dir_and_file (path, name); - - folder = g_hash_table_lookup (priv->path_to_folder, full_path); - if (folder != NULL) { - g_warning ("%s: Trying to add a subfolder for a path that already exists -- %s", - __FUNCTION__, full_path); - g_free (full_path); - return FALSE; - } - - folder = folder_new (e_folder, full_path); - folder_add_subfolder (parent_folder, folder); - - g_hash_table_insert (priv->path_to_folder, folder->path, folder); - - gtk_signal_emit (GTK_OBJECT (storage), signals[NEW_FOLDER], folder->path); - - g_free (full_path); - - return TRUE; -} - -gboolean -e_storage_removed_folder (EStorage *storage, - const char *path) -{ - EStoragePrivate *priv; - Folder *folder; - - g_return_val_if_fail (storage != NULL, FALSE); - g_return_val_if_fail (E_IS_STORAGE (storage), FALSE); - g_return_val_if_fail (path != NULL, FALSE); - g_return_val_if_fail (g_path_is_absolute (path), FALSE); - - priv = storage->priv; - - folder = g_hash_table_lookup (priv->path_to_folder, path); - if (folder == NULL) { - g_warning ("%s: Folder not found -- %s", __FUNCTION__, path); - return FALSE; - } - - gtk_signal_emit (GTK_OBJECT (storage), signals[REMOVED_FOLDER], path); - - remove_folder (storage, folder); - - return TRUE; -} - - -E_MAKE_TYPE (e_storage, "EStorage", EStorage, class_init, init, PARENT_TYPE) diff --git a/shell/e-storage.h b/shell/e-storage.h deleted file mode 100644 index 7b140bda22..0000000000 --- a/shell/e-storage.h +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* e-storage.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef _E_STORAGE_H_ -#define _E_STORAGE_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define E_TYPE_STORAGE (e_storage_get_type ()) -#define E_STORAGE(obj) (GTK_CHECK_CAST ((obj), E_TYPE_STORAGE, EStorage)) -#define E_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_STORAGE, EStorageClass)) -#define E_IS_STORAGE(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_STORAGE)) -#define E_IS_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_STORAGE)) - - -typedef struct _EStorage EStorage; -typedef struct _EStoragePrivate EStoragePrivate; -typedef struct _EStorageClass EStorageClass; - -enum _EStorageResult { - E_STORAGE_OK, - E_STORAGE_GENERICERROR, - E_STORAGE_EXISTS, - E_STORAGE_INVALIDTYPE, - E_STORAGE_IOERROR, - E_STORAGE_NOSPACE, - E_STORAGE_NOTFOUND, - E_STORAGE_NOTIMPLEMENTED, - E_STORAGE_PERMISSIONDENIED, - E_STORAGE_UNSUPPORTEDOPERATION, - E_STORAGE_UNSUPPORTEDTYPE -}; -typedef enum _EStorageResult EStorageResult; - -typedef void (* EStorageResultCallback) (EStorage *storage, EStorageResult result, void *data); - -#include "e-folder.h" - -struct _EStorage { - GtkObject parent; - - EStoragePrivate *priv; -}; - -struct _EStorageClass { - GtkObjectClass parent_class; - - /* Signals. */ - - void * (* new_folder) (EStorage *storage, const char *path); - void * (* removed_folder) (EStorage *storage, const char *path); - - /* Virtual methods. */ - - GList * (* list_folders) (EStorage *storage, const char *path); - EFolder * (* get_folder) (EStorage *storage, const char *path); - const char * (* get_name) (EStorage *storage); - - void (* async_create_folder) (EStorage *storage, const char *path, - const char *type, const char *description, - EStorageResultCallback callback, void *data); - void (* async_remove_folder) (EStorage *storage, const char *path, - EStorageResultCallback callback, void *data); -}; - - -GtkType e_storage_get_type (void); -void e_storage_construct (EStorage *storage); -EStorage *e_storage_new (void); -gboolean e_storage_path_is_relative (const char *path); -gboolean e_storage_path_is_absolute (const char *path); - -GList *e_storage_list_folders (EStorage *storage, const char *path); -EFolder *e_storage_get_folder (EStorage *storage, const char *path); - -const char *e_storage_get_name (EStorage *storage); - -/* Folder operations. */ - -void e_storage_async_create_folder (EStorage *storage, - const char *path, - const char *type, - const char *description, - EStorageResultCallback callback, - void *data); -void e_storage_async_remove_folder (EStorage *storage, - const char *path, - EStorageResultCallback callback, - void *data); - -const char *e_storage_result_to_string (EStorageResult result); - -/* Utility functions. */ - -char *e_storage_get_path_for_physical_uri (EStorage *storage, - const char *physical_uri); - -/* Protected. C++ anyone? */ -gboolean e_storage_new_folder (EStorage *storage, const char *path, EFolder *folder); -gboolean e_storage_removed_folder (EStorage *storage, const char *path); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* _E_STORAGE_H_ */ diff --git a/shell/evolution-session.c b/shell/evolution-session.c deleted file mode 100644 index 1e0acb36b4..0000000000 --- a/shell/evolution-session.c +++ /dev/null @@ -1,213 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-session.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#include "e-util/e-util.h" - -#include "evolution-session.h" - - -#define PARENT_TYPE bonobo_object_get_type () -static BonoboObjectClass *parent_class = NULL; - -struct _EvolutionSessionPrivate { - int dummy; -}; - -enum { - LOAD_CONFIGURATION, - SAVE_CONFIGURATION, - LAST_SIGNAL -}; - -static int signals[LAST_SIGNAL]; - - -/* GtkObject methods. */ - -static void -impl_destroy (GtkObject *object) -{ - EvolutionSession *session; - EvolutionSessionPrivate *priv; - - session = EVOLUTION_SESSION (object); - priv = session->priv; - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -/* CORBA interface implementation. */ - -static void -impl_Evolution_Session_save_configuration (PortableServer_Servant servant, - const CORBA_char *prefix, - CORBA_Environment *ev) -{ - BonoboObject *self; - - self = bonobo_object_from_servant (servant); - gtk_signal_emit (GTK_OBJECT (self), signals[SAVE_CONFIGURATION], prefix); -} - -static void -impl_Evolution_Session_load_configuration (PortableServer_Servant servant, - const CORBA_char *prefix, - CORBA_Environment *ev) -{ - BonoboObject *self; - - self = bonobo_object_from_servant (servant); - gtk_signal_emit (GTK_OBJECT (self), signals[LOAD_CONFIGURATION], prefix); -} - - -/* Initialization. */ - -static POA_Evolution_Session__vepv Evolution_Session_vepv; - -static void -corba_class_init (void) -{ - POA_Evolution_Session__vepv *vepv; - POA_Evolution_Session__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_Session__epv, 1); - epv->save_configuration = impl_Evolution_Session_save_configuration; - epv->load_configuration = impl_Evolution_Session_load_configuration; - - vepv = &Evolution_Session_vepv; - vepv->_base_epv = base_epv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_Session_epv = epv; -} - -static void -class_init (EvolutionSessionClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - parent_class = gtk_type_class (bonobo_object_get_type ()); - - object_class->destroy = impl_destroy; - - signals[LOAD_CONFIGURATION] - = gtk_signal_new ("load_configuration", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EvolutionSessionClass, load_configuration), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - signals[SAVE_CONFIGURATION] - = gtk_signal_new ("save_configuration", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EvolutionSessionClass, save_configuration), - gtk_marshal_NONE__STRING, - GTK_TYPE_NONE, 1, - GTK_TYPE_STRING); - - corba_class_init (); -} - -static void -init (EvolutionSession *session) -{ - EvolutionSessionPrivate *priv; - - priv = g_new (EvolutionSessionPrivate, 1); - - session->priv = priv; -} - - -static Evolution_Session -create_corba_session (BonoboObject *object) -{ - POA_Evolution_Session *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_Session *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &Evolution_Session_vepv; - - CORBA_exception_init (&ev); - - POA_Evolution_Session__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION){ - g_free (servant); - CORBA_exception_free (&ev); - return CORBA_OBJECT_NIL; - } - - CORBA_exception_free (&ev); - return (Evolution_Session) bonobo_object_activate_servant (object, servant); -} - -void -evolution_session_construct (EvolutionSession *session, - CORBA_Object corba_session) -{ - g_return_if_fail (session != NULL); - g_return_if_fail (corba_session != CORBA_OBJECT_NIL); - - bonobo_object_construct (BONOBO_OBJECT (session), corba_session); -} - -EvolutionSession * -evolution_session_new (void) -{ - EvolutionSession *session; - Evolution_Session corba_session; - - session = gtk_type_new (evolution_session_get_type ()); - - corba_session = create_corba_session (BONOBO_OBJECT (session)); - if (corba_session == CORBA_OBJECT_NIL) { - bonobo_object_unref (BONOBO_OBJECT (session)); - return NULL; - } - - evolution_session_construct (session, corba_session); - return session; -} - - -E_MAKE_TYPE (evolution_session, "EvolutionSession", EvolutionSession, class_init, init, PARENT_TYPE) diff --git a/shell/evolution-session.h b/shell/evolution-session.h deleted file mode 100644 index 93c0ebed2a..0000000000 --- a/shell/evolution-session.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-session.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __EVOLUTION_SESSION_H__ -#define __EVOLUTION_SESSION_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_SESSION (evolution_session_get_type ()) -#define EVOLUTION_SESSION(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SESSION, EvolutionSession)) -#define EVOLUTION_SESSION_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SESSION, EvolutionSessionClass)) -#define EVOLUTION_IS_SESSION(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SESSION)) -#define EVOLUTION_IS_SESSION_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SESSION)) - - -typedef struct _EvolutionSession EvolutionSession; -typedef struct _EvolutionSessionPrivate EvolutionSessionPrivate; -typedef struct _EvolutionSessionClass EvolutionSessionClass; - -struct _EvolutionSession { - BonoboObject parent; - - EvolutionSessionPrivate *priv; -}; - -struct _EvolutionSessionClass { - BonoboObjectClass parent_class; - - void (* save_configuration) (EvolutionSession *session, const char *prefix); - void (* load_configuration) (EvolutionSession *session, const char *prefix); -}; - - -GtkType evolution_session_get_type (void); -void evolution_session_construct (EvolutionSession *session, - CORBA_Object corba_session); -EvolutionSession *evolution_session_new (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_SESSION_H__ */ diff --git a/shell/evolution-shell-client.c b/shell/evolution-shell-client.c deleted file mode 100644 index 4e4fd830b3..0000000000 --- a/shell/evolution-shell-client.c +++ /dev/null @@ -1,333 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-client.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "e-util/e-util.h" - -#include "evolution-shell-client.h" - - -struct _EvolutionShellClientPrivate { - int dummy; -}; - -#define PARENT_TYPE bonobo_object_client_get_type () -static BonoboObjectClientClass *parent_class = NULL; - - -/* Easy-to-use wrapper for Evolution::user_select_folder. */ - -static PortableServer_ServantBase__epv FolderSelectionListener_base_epv; -static POA_Evolution_FolderSelectionListener__epv FolderSelectionListener_epv; -static POA_Evolution_FolderSelectionListener__vepv FolderSelectionListener_vepv; -static gboolean FolderSelectionListener_vtables_initialized = FALSE; - -struct _FolderSelectionListenerServant { - POA_Evolution_FolderSelectionListener servant; - char **uri_return; - char **physical_uri_return; -}; -typedef struct _FolderSelectionListenerServant FolderSelectionListenerServant; - -static void -impl_FolderSelectionListener_selected (PortableServer_Servant servant, - const CORBA_char *uri, - const CORBA_char *physical_uri, - CORBA_Environment *ev) -{ - FolderSelectionListenerServant *listener_servant; - - listener_servant = (FolderSelectionListenerServant *) servant; - - if (listener_servant->uri_return != NULL) - * (listener_servant->uri_return) = g_strdup (uri); - - if (listener_servant->physical_uri_return != NULL) - * (listener_servant->physical_uri_return) = g_strdup (physical_uri); - - gtk_main_quit (); -} - -static void -impl_FolderSelectionListener_cancel (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - FolderSelectionListenerServant *listener_servant; - - listener_servant = (FolderSelectionListenerServant *) servant; - - if (listener_servant->uri_return != NULL) - * (listener_servant->uri_return) = NULL; - - if (listener_servant->physical_uri_return != NULL) - * (listener_servant->physical_uri_return) = NULL; - - gtk_main_quit (); -} - -static void -init_FolderSelectionListener_vtables (void) -{ - FolderSelectionListener_base_epv._private = NULL; - FolderSelectionListener_base_epv.finalize = NULL; - FolderSelectionListener_base_epv.default_POA = NULL; - - FolderSelectionListener_epv.selected = impl_FolderSelectionListener_selected; - FolderSelectionListener_epv.cancel = impl_FolderSelectionListener_cancel; - - FolderSelectionListener_vepv._base_epv = &FolderSelectionListener_base_epv; - FolderSelectionListener_vepv.Evolution_FolderSelectionListener_epv = &FolderSelectionListener_epv; - - FolderSelectionListener_vtables_initialized = TRUE; -} - -static Evolution_FolderSelectionListener -create_folder_selection_listener_interface (char **result, - char **uri_return, - char **physical_uri_return) -{ - Evolution_FolderSelectionListener corba_interface; - CORBA_Environment ev; - FolderSelectionListenerServant *servant; - PortableServer_Servant listener_servant; - - if (! FolderSelectionListener_vtables_initialized) - init_FolderSelectionListener_vtables (); - - servant = g_new0 (FolderSelectionListenerServant, 1); - servant->servant.vepv = &FolderSelectionListener_vepv; - servant->uri_return = uri_return; - servant->physical_uri_return = physical_uri_return; - - listener_servant = (PortableServer_Servant) servant; - - CORBA_exception_init (&ev); - - POA_Evolution_FolderSelectionListener__init (listener_servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free(servant); - return CORBA_OBJECT_NIL; - } - - CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), listener_servant, &ev)); - - corba_interface = PortableServer_POA_servant_to_reference (bonobo_poa (), listener_servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - corba_interface = CORBA_OBJECT_NIL; - - CORBA_exception_free (&ev); - - return corba_interface; -} - -static int -count_string_items (const char *list[]) -{ - int i; - - if (list == NULL) - return 0; - - for (i = 0; list[i] != NULL; i++) - ; - - return i; -} - -static void -user_select_folder (EvolutionShellClient *shell_client, - const char *title, - const char *default_folder, - const char *possible_types[], - char **uri_return, - char **physical_uri_return) -{ - Evolution_FolderSelectionListener listener_interface; - Evolution_Shell corba_shell; - CORBA_Environment ev; - Evolution_Shell_FolderTypeList corba_type_list; - int num_possible_types; - char *result; - - result = NULL; - - listener_interface = create_folder_selection_listener_interface (&result, uri_return, - physical_uri_return); - if (listener_interface == CORBA_OBJECT_NIL) - return; - - CORBA_exception_init (&ev); - - corba_shell = bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)); - - num_possible_types = count_string_items (possible_types); - - corba_type_list._length = num_possible_types; - corba_type_list._maximum = num_possible_types; - corba_type_list._buffer = (CORBA_char **) possible_types; - - Evolution_Shell_user_select_folder (corba_shell, listener_interface, - title, default_folder, &corba_type_list, - &ev); - - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - - if (uri_return != NULL) - *uri_return = NULL; - if (physical_uri_return != NULL) - *physical_uri_return = NULL; - - return; - } - - gtk_main(); - - CORBA_Object_release (listener_interface, &ev); - - CORBA_exception_free (&ev); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EvolutionShellClient *shell_client; - EvolutionShellClientPrivate *priv; - - shell_client = EVOLUTION_SHELL_CLIENT (object); - priv = shell_client->priv; - - /* Nothing to do here. */ - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EvolutionShellClientClass *klass) -{ - GtkObjectClass *object_class; - - parent_class = gtk_type_class (bonobo_object_get_type ()); - - object_class = GTK_OBJECT_CLASS (klass); - - object_class->destroy = destroy; -} - -static void -init (EvolutionShellClient *shell_client) -{ - EvolutionShellClientPrivate *priv; - - priv = g_new (EvolutionShellClientPrivate, 1); - priv->dummy = 0; - - shell_client->priv = priv; -} - - -/** - * evolution_shell_client_construct: - * @shell_client: - * @corba_shell: - * - * Construct @shell_client associating it to @corba_shell. - **/ -void -evolution_shell_client_construct (EvolutionShellClient *shell_client, - Evolution_Shell corba_shell) -{ - g_return_if_fail (shell_client != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client)); - g_return_if_fail (corba_shell != CORBA_OBJECT_NIL); - - bonobo_object_construct (BONOBO_OBJECT (shell_client), (CORBA_Object) corba_shell); -} - -/** - * evolution_shell_client_new: - * @corba_shell: A pointer to the CORBA Evolution::Shell interface. - * - * Create a new client object for @corba_shell. - * - * Return value: A pointer to the Evolution::Shell client BonoboObject. - **/ -EvolutionShellClient * -evolution_shell_client_new (Evolution_Shell corba_shell) -{ - EvolutionShellClient *shell_client; - - shell_client = gtk_type_new (evolution_shell_client_get_type ()); - - evolution_shell_client_construct (shell_client, corba_shell); - - if (bonobo_object_corba_objref (BONOBO_OBJECT (shell_client)) == CORBA_OBJECT_NIL) { - bonobo_object_unref (BONOBO_OBJECT (shell_client)); - return NULL; - } - - return shell_client; -} - - -/** - * evolution_shell_client_user_select_folder: - * @shell_client: A EvolutionShellClient object - * @title: The title for the folder selection dialog - * @default_folder: URI (physical or evolution:) of the folder initially selected on the dialog - * @uri_return: - * @physical_uri_return: - * - * Pop up the shell's folder selection dialog with the specified @title and - * @default_folder as the initially selected folder. On return, set *@uri and - * *@physical_uri to the evolution: URI and the physical URI of the selected - * folder (or %NULL if the user cancelled the dialog). (The dialog is modal.) - **/ -void -evolution_shell_client_user_select_folder (EvolutionShellClient *shell_client, - const char *title, - const char *default_folder, - const char *possible_types[], - char **uri_return, - char **physical_uri_return) -{ - g_return_if_fail (shell_client != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_CLIENT (shell_client)); - g_return_if_fail (title != NULL); - g_return_if_fail (default_folder != NULL); - - user_select_folder (shell_client, title, default_folder, possible_types, - uri_return, physical_uri_return); -} - - -E_MAKE_TYPE (evolution_shell_client, "EvolutionShellClient", EvolutionShellClient, class_init, init, PARENT_TYPE) diff --git a/shell/evolution-shell-client.h b/shell/evolution-shell-client.h deleted file mode 100644 index c9258574f7..0000000000 --- a/shell/evolution-shell-client.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-client.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __EVOLUTION_SHELL_CLIENT_H__ -#define __EVOLUTION_SHELL_CLIENT_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_SHELL_CLIENT (evolution_shell_client_get_type ()) -#define EVOLUTION_SHELL_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_CLIENT, EvolutionShellClient)) -#define EVOLUTION_SHELL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_CLIENT, EvolutionShellClientClass)) -#define EVOLUTION_IS_SHELL_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_CLIENT)) -#define EVOLUTION_IS_SHELL_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_CLIENT)) - - -typedef struct _EvolutionShellClient EvolutionShellClient; -typedef struct _EvolutionShellClientPrivate EvolutionShellClientPrivate; -typedef struct _EvolutionShellClientClass EvolutionShellClientClass; - -struct _EvolutionShellClient { - BonoboObjectClient parent; - - EvolutionShellClientPrivate *priv; -}; - -struct _EvolutionShellClientClass { - BonoboObjectClientClass parent_class; -}; - - -GtkType evolution_shell_client_get_type (void); -void evolution_shell_client_construct (EvolutionShellClient *shell_client, - Evolution_Shell corba_shell); -EvolutionShellClient *evolution_shell_client_new (Evolution_Shell shell); - -void evolution_shell_client_user_select_folder (EvolutionShellClient *shell_client, - const char *title, - const char *default_folder, - const char *possible_types[], - char **uri_return, - char **physical_uri_return); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_SHELL_CLIENT_H__ */ diff --git a/shell/evolution-shell-component-client.c b/shell/evolution-shell-component-client.c deleted file mode 100644 index c6cb1463dd..0000000000 --- a/shell/evolution-shell-component-client.c +++ /dev/null @@ -1,526 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-component-client.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include -#include - -#include - -#include "e-util/e-util.h" - -#include "evolution-shell-component-client.h" - - -#define PARENT_TYPE BONOBO_OBJECT_CLIENT_TYPE -static BonoboObjectClass *parent_class = NULL; - -struct _EvolutionShellComponentClientPrivate { - EvolutionShellComponentClientCallback callback; - void *callback_data; - - Evolution_ShellComponentListener listener_interface; - PortableServer_Servant listener_servant; -}; - - -#define RETURN_ERROR_IF_FAIL(cond) \ - g_return_val_if_fail ((cond), EVOLUTION_SHELL_COMPONENT_INVALIDARG) - - -/* Utility functions. */ - -static EvolutionShellComponentResult -corba_exception_to_result (const CORBA_Environment *ev) -{ - if (ev->_major == CORBA_NO_EXCEPTION) - return EVOLUTION_SHELL_COMPONENT_OK; - - if (ev->_major == CORBA_USER_EXCEPTION) { - if (strcmp (ev->_repo_id, ex_Evolution_ShellComponent_AlreadyOwned) == 0) - return EVOLUTION_SHELL_COMPONENT_ALREADYOWNED; - if (strcmp (ev->_repo_id, ex_Evolution_ShellComponent_NotOwned) == 0) - return EVOLUTION_SHELL_COMPONENT_NOTOWNED; - if (strcmp (ev->_repo_id, ex_Evolution_ShellComponent_NotFound) == 0) - return EVOLUTION_SHELL_COMPONENT_NOTFOUND; - if (strcmp (ev->_repo_id, ex_Evolution_ShellComponent_UnsupportedType) == 0) - return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE; - if (strcmp (ev->_repo_id, ex_Evolution_ShellComponent_InternalError) == 0) - return EVOLUTION_SHELL_COMPONENT_INTERNALERROR; - if (strcmp (ev->_repo_id, ex_Evolution_ShellComponent_Busy) == 0) - return EVOLUTION_SHELL_COMPONENT_BUSY; - - return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR; - } else { - /* FIXME maybe we need something more specific here. */ - return EVOLUTION_SHELL_COMPONENT_CORBAERROR; - } -} - -static void -dispatch_callback (EvolutionShellComponentClient *shell_component_client, - EvolutionShellComponentResult result) -{ - EvolutionShellComponentClientPrivate *priv; - EvolutionShellComponentClientCallback callback; - PortableServer_ObjectId *oid; - void *callback_data; - CORBA_Environment ev; - - priv = shell_component_client->priv; - - g_return_if_fail (priv->callback != NULL); - g_return_if_fail (priv->listener_servant != NULL); - - /* Notice that we destroy the interface and reset the callback information before - dispatching the callback so that the callback can generate another request. */ - - CORBA_exception_init (&ev); - - oid = PortableServer_POA_servant_to_id (bonobo_poa (), priv->listener_servant, &ev); - PortableServer_POA_deactivate_object (bonobo_poa (), oid, &ev); - POA_Evolution_ShellComponentListener__fini (priv->listener_servant, &ev); - CORBA_free (oid); - - CORBA_Object_release (priv->listener_interface, &ev); - - CORBA_exception_free (&ev); - - priv->listener_servant = NULL; - priv->listener_interface = CORBA_OBJECT_NIL; - - callback = priv->callback; - callback_data = priv->callback_data; - - priv->callback = NULL; - priv->callback_data = NULL; - - (* callback) (shell_component_client, result, callback_data); -} - - -/* CORBA listener interface implementation. */ - -static PortableServer_ServantBase__epv ShellComponentListener_base_epv; -static POA_Evolution_ShellComponentListener__epv ShellComponentListener_epv; -static POA_Evolution_ShellComponentListener__vepv ShellComponentListener_vepv; -static gboolean ShellComponentListener_vepv_initialized = FALSE; - -struct _ShellComponentListenerServant { - POA_Evolution_ShellComponentListener servant; - EvolutionShellComponentClient *component_client; -}; -typedef struct _ShellComponentListenerServant ShellComponentListenerServant; - -static EvolutionShellComponentClient * -component_client_from_ShellComponentListener_servant (PortableServer_Servant servant) -{ - ShellComponentListenerServant *listener_servant; - - listener_servant = (ShellComponentListenerServant *) servant; - return listener_servant->component_client; -} - -static EvolutionShellComponentResult -result_from_async_corba_result (Evolution_ShellComponentListener_Result async_corba_result) -{ - switch (async_corba_result) { - case Evolution_ShellComponentListener_OK: - return EVOLUTION_SHELL_COMPONENT_OK; - case Evolution_ShellComponentListener_UNSUPPORTED_OPERATION: - return EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION; - case Evolution_ShellComponentListener_EXISTS: - return EVOLUTION_SHELL_COMPONENT_EXISTS; - case Evolution_ShellComponentListener_INVALID_URI: - return EVOLUTION_SHELL_COMPONENT_INVALIDURI; - case Evolution_ShellComponentListener_PERMISSION_DENIED: - return EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED; - case Evolution_ShellComponentListener_HAS_SUBFOLDERS: - return EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS; - case Evolution_ShellComponentListener_NO_SPACE: - return EVOLUTION_SHELL_COMPONENT_NOSPACE; - default: - return EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR; - } -} - -static void -impl_ShellComponentListener_report_result (PortableServer_Servant servant, - const Evolution_ShellComponentListener_Result result, - CORBA_Environment *ev) -{ - EvolutionShellComponentClient *component_client; - - component_client = component_client_from_ShellComponentListener_servant (servant); - dispatch_callback (component_client, result_from_async_corba_result (result)); -} - -static void -ShellComponentListener_vepv_initialize (void) -{ - ShellComponentListener_base_epv._private = NULL; - ShellComponentListener_base_epv.finalize = NULL; - ShellComponentListener_base_epv.default_POA = NULL; - - ShellComponentListener_epv.report_result = impl_ShellComponentListener_report_result; - - ShellComponentListener_vepv._base_epv = & ShellComponentListener_base_epv; - ShellComponentListener_vepv.Evolution_ShellComponentListener_epv = & ShellComponentListener_epv; - - ShellComponentListener_vepv_initialized = TRUE; -} - -static PortableServer_Servant * -create_ShellComponentListener_servant (EvolutionShellComponentClient *component_client) -{ - ShellComponentListenerServant *servant; - - if (! ShellComponentListener_vepv_initialized) - ShellComponentListener_vepv_initialize (); - - servant = g_new0 (ShellComponentListenerServant, 1); - servant->servant.vepv = &ShellComponentListener_vepv; - servant->component_client = component_client; - - return (PortableServer_Servant) servant; -} - -static void -free_ShellComponentListener_servant (PortableServer_Servant servant) -{ - g_free (servant); -} - -static void -create_listener_interface (EvolutionShellComponentClient *shell_component_client) -{ - EvolutionShellComponentClientPrivate *priv; - PortableServer_Servant listener_servant; - Evolution_ShellComponentListener corba_interface; - CORBA_Environment ev; - - priv = shell_component_client->priv; - - listener_servant = create_ShellComponentListener_servant (shell_component_client); - - CORBA_exception_init (&ev); - - POA_Evolution_ShellComponentListener__init (listener_servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - free_ShellComponentListener_servant (listener_servant); - return; - } - - CORBA_free (PortableServer_POA_activate_object (bonobo_poa (), listener_servant, &ev)); - - corba_interface = PortableServer_POA_servant_to_reference (bonobo_poa (), listener_servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - corba_interface = CORBA_OBJECT_NIL; - free_ShellComponentListener_servant (listener_servant); - } - - CORBA_exception_free (&ev); - - priv->listener_servant = listener_servant; - priv->listener_interface = corba_interface; -} - - -/* GtkObject methods. */ - -static void -impl_destroy (GtkObject *object) -{ - EvolutionShellComponentClient *shell_component_client; - EvolutionShellComponentClientPrivate *priv; - - shell_component_client = EVOLUTION_SHELL_COMPONENT_CLIENT (object); - priv = shell_component_client->priv; - - if (priv->callback != NULL) - dispatch_callback (shell_component_client, EVOLUTION_SHELL_COMPONENT_INTERRUPTED); - - g_free (priv); - - (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); -} - - -static void -class_init (EvolutionShellComponentClientClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - parent_class = gtk_type_class (PARENT_TYPE); - - object_class->destroy = impl_destroy; -} - -static void -init (EvolutionShellComponentClient *shell_component_client) -{ - EvolutionShellComponentClientPrivate *priv; - - priv = g_new (EvolutionShellComponentClientPrivate, 1); - priv->listener_interface = CORBA_OBJECT_NIL; - priv->listener_servant = NULL; - priv->callback = NULL; - priv->callback_data = NULL; - - shell_component_client->priv = priv; -} - - -/* Construction. */ - -void -evolution_shell_component_client_construct (EvolutionShellComponentClient *shell_component_client, - CORBA_Object corba_object) -{ - g_return_if_fail (shell_component_client != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client)); - g_return_if_fail (corba_object != CORBA_OBJECT_NIL); - - bonobo_object_client_construct (BONOBO_OBJECT_CLIENT (shell_component_client), - corba_object); -} - -EvolutionShellComponentClient * -evolution_shell_component_client_new (const char *id) -{ - EvolutionShellComponentClient *new; - CORBA_Environment ev; - CORBA_Object corba_object; - - g_return_val_if_fail (id != NULL, NULL); - - CORBA_exception_init (&ev); - - corba_object = oaf_activate_from_id ((char *) id, 0, NULL, &ev); /* Yuck. */ - if (ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - g_error ("Could not start up component for %s. " - "(See previous error messages?)", id); - } - CORBA_exception_free (&ev); - - if (corba_object == CORBA_OBJECT_NIL) { - g_error ("Could not activate component %s. " - "(Maybe you need to set OAF_INFO_PATH?)", id); - } - - new = gtk_type_new (evolution_shell_component_client_get_type ()); - evolution_shell_component_client_construct (new, corba_object); - - return new; -} - - -/* Synchronous operations. */ - -EvolutionShellComponentResult -evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell_component_client, - Evolution_Shell shell, - const char *evolution_homedir) -{ - EvolutionShellComponentResult result; - CORBA_Environment ev; - - RETURN_ERROR_IF_FAIL (shell_component_client != NULL); - RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client)); - RETURN_ERROR_IF_FAIL (shell != CORBA_OBJECT_NIL); - - CORBA_exception_init (&ev); - - Evolution_ShellComponent_set_owner (bonobo_object_corba_objref (BONOBO_OBJECT (shell_component_client)), - shell, evolution_homedir, &ev); - - result = corba_exception_to_result (&ev); - - CORBA_exception_free (&ev); - - return result; -} - -EvolutionShellComponentResult -evolution_shell_component_client_unset_owner (EvolutionShellComponentClient *shell_component_client, - Evolution_Shell shell) -{ - EvolutionShellComponentResult result; - Evolution_ShellComponent corba_component; - CORBA_Environment ev; - - RETURN_ERROR_IF_FAIL (shell_component_client != NULL); - RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client)); - RETURN_ERROR_IF_FAIL (shell != CORBA_OBJECT_NIL); - - CORBA_exception_init (&ev); - - corba_component = bonobo_object_corba_objref (BONOBO_OBJECT (shell_component_client)); - - Evolution_ShellComponent_unset_owner (corba_component, &ev); - - result = corba_exception_to_result (&ev); - - CORBA_exception_free (&ev); - - return result; -} - -EvolutionShellComponentResult -evolution_shell_component_client_create_view (EvolutionShellComponentClient *shell_component_client, - BonoboUIHandler *uih, - const char *physical_uri, - const char *type_string, - BonoboControl **control_return) -{ - EvolutionShellComponentResult result; - CORBA_Environment ev; - Evolution_ShellComponent corba_component; - Bonobo_Control corba_control; - - RETURN_ERROR_IF_FAIL (shell_component_client != NULL); - RETURN_ERROR_IF_FAIL (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client)); - RETURN_ERROR_IF_FAIL (uih != NULL); - RETURN_ERROR_IF_FAIL (BONOBO_IS_UI_HANDLER (uih)); - RETURN_ERROR_IF_FAIL (physical_uri != NULL); - RETURN_ERROR_IF_FAIL (type_string != NULL); - RETURN_ERROR_IF_FAIL (control_return != NULL); - - CORBA_exception_init (&ev); - - corba_component = bonobo_object_corba_objref (BONOBO_OBJECT (shell_component_client)); - corba_control = Evolution_ShellComponent_create_view (corba_component, physical_uri, type_string, &ev); - - result = corba_exception_to_result (&ev); - - if (result != EVOLUTION_SHELL_COMPONENT_OK) { - *control_return = NULL; - } else { - Bonobo_UIHandler corba_uih; - - corba_uih = bonobo_object_corba_objref (BONOBO_OBJECT (uih)); - *control_return = BONOBO_CONTROL (bonobo_widget_new_control_from_objref (corba_control, - corba_uih)); - } - - CORBA_exception_free (&ev); - - return result; -} - - -/* Asyncronous operations. */ - -void -evolution_shell_component_client_async_create_folder (EvolutionShellComponentClient *shell_component_client, - const char *physical_uri, - const char *type, - EvolutionShellComponentClientCallback callback, - void *data) -{ - EvolutionShellComponentClientPrivate *priv; - Evolution_ShellComponent corba_shell_component; - CORBA_Environment ev; - - g_return_if_fail (shell_component_client != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client)); - g_return_if_fail (physical_uri != NULL); - g_return_if_fail (type != NULL); - g_return_if_fail (callback != NULL); - - priv = shell_component_client->priv; - - if (priv->callback != NULL) { - (* callback) (shell_component_client, EVOLUTION_SHELL_COMPONENT_BUSY, data); - return; - } - - create_listener_interface (shell_component_client); - - CORBA_exception_init (&ev); - - corba_shell_component = bonobo_object_corba_objref (BONOBO_OBJECT (shell_component_client)); - - priv->callback = callback; - priv->callback_data = data; - - Evolution_ShellComponent_async_create_folder (corba_shell_component, - priv->listener_interface, - physical_uri, type, - &ev); - - CORBA_exception_free (&ev); -} - -void -evolution_shell_component_client_async_remove_folder (EvolutionShellComponentClient *shell_component_client, - const char *physical_uri, - EvolutionShellComponentClientCallback callback, - void *data) -{ - /* FIXME to do. */ -} - -void -evolution_shell_component_client_populate_folder_context_menu (EvolutionShellComponentClient *shell_component_client, - BonoboUIHandler *uih, - const char *physical_uri, - const char *type) -{ - Bonobo_UIHandler corba_uih; - EvolutionShellComponentClientPrivate *priv; - Evolution_ShellComponent corba_shell_component; - CORBA_Environment ev; - - g_return_if_fail (shell_component_client != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_COMPONENT_CLIENT (shell_component_client)); - g_return_if_fail (physical_uri != NULL); - g_return_if_fail (type != NULL); - - priv = shell_component_client->priv; - - CORBA_exception_init (&ev); - - corba_shell_component = bonobo_object_corba_objref (BONOBO_OBJECT (shell_component_client)); - corba_uih = bonobo_object_corba_objref (BONOBO_OBJECT (uih)); - - Evolution_ShellComponent_populate_folder_context_menu (corba_shell_component, - corba_uih, - physical_uri, - type, - &ev); - - CORBA_exception_free (&ev); -} - - -E_MAKE_TYPE (evolution_shell_component_client, "EvolutionShellComponentClient", - EvolutionShellComponentClient, class_init, init, PARENT_TYPE) diff --git a/shell/evolution-shell-component-client.h b/shell/evolution-shell-component-client.h deleted file mode 100644 index fa066cb27d..0000000000 --- a/shell/evolution-shell-component-client.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-component-client.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef EVOLUTION_SHELL_COMPONENT_CLIENT_H -#define EVOLUTION_SHELL_COMPONENT_CLIENT_H - -#include -#include - -#include "evolution-shell-component.h" - -#ifdef cplusplus -extern "C" { -#pragma } -#endif /* cplusplus */ - -#define EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT (evolution_shell_component_client_get_type ()) -#define EVOLUTION_SHELL_COMPONENT_CLIENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT, EvolutionShellComponentClient)) -#define EVOLUTION_SHELL_COMPONENT_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT, EvolutionShellComponentClientClass)) -#define EVOLUTION_IS_SHELL_COMPONENT_CLIENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT)) -#define EVOLUTION_IS_SHELL_COMPONENT_CLIENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT_CLIENT)) - - -typedef struct _EvolutionShellComponentClient EvolutionShellComponentClient; -typedef struct _EvolutionShellComponentClientPrivate EvolutionShellComponentClientPrivate; -typedef struct _EvolutionShellComponentClientClass EvolutionShellComponentClientClass; - -struct _EvolutionShellComponentClient { - BonoboObjectClient parent; - - EvolutionShellComponentClientPrivate *priv; -}; - -struct _EvolutionShellComponentClientClass { - BonoboObjectClientClass parent_class; -}; - -typedef void (* EvolutionShellComponentClientCallback) (EvolutionShellComponentClient *shell_component_client, - EvolutionShellComponentResult result, - void *data); - - -/* Construction. */ -GtkType evolution_shell_component_client_get_type (void); -void evolution_shell_component_client_construct (EvolutionShellComponentClient *shell_component_client, - CORBA_Object corba_object); -EvolutionShellComponentClient *evolution_shell_component_client_new (const char *id); - -/* Synchronous operations. */ -EvolutionShellComponentResult evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell_component_client, - Evolution_Shell shell, - const char *evolution_homedir); -EvolutionShellComponentResult evolution_shell_component_client_unset_owner (EvolutionShellComponentClient *shell_component_client, - Evolution_Shell shell); -EvolutionShellComponentResult evolution_shell_component_client_create_view (EvolutionShellComponentClient *shell_component_client, - BonoboUIHandler *uih, - const char *physical_uri, - const char *type_string, - BonoboControl **control_return); - -/* Asyncronous operations. */ -void evolution_shell_component_client_async_create_folder (EvolutionShellComponentClient *shell_component_client, - const char *physical_uri, - const char *type, - EvolutionShellComponentClientCallback callback, - void *data); -void evolution_shell_component_client_async_remove_folder (EvolutionShellComponentClient *shell_component_client, - const char *physical_uri, - EvolutionShellComponentClientCallback callback, - void *data); - -void evolution_shell_component_client_populate_folder_context_menu (EvolutionShellComponentClient *shell_component_client, - BonoboUIHandler *uih, - const char *physical_uri, - const char *type); - -#ifdef cplusplus -} -#endif /* cplusplus */ - -#endif /* EVOLUTION_SHELL_COMPONENT_CLIENT_H */ diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c deleted file mode 100644 index cedcf64b98..0000000000 --- a/shell/evolution-shell-component.c +++ /dev/null @@ -1,498 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-component.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#include "e-util/e-util.h" - -#include "evolution-shell-component.h" - - -#define PARENT_TYPE BONOBO_OBJECT_TYPE -static BonoboObjectClass *parent_class = NULL; - -struct _EvolutionShellComponentPrivate { - GList *folder_types; /* EvolutionShellComponentFolderType */ - - EvolutionShellComponentCreateViewFn create_view_fn; - EvolutionShellComponentCreateFolderFn create_folder_fn; - EvolutionShellComponentRemoveFolderFn remove_folder_fn; - EvolutionShellComponentPopulateFolderContextMenu populate_folder_context_menu_fn; - - EvolutionShellClient *owner_client; - - void *closure; -}; - -enum { - OWNER_SET, - OWNER_UNSET, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - - -/* CORBA interface implementation. */ - -static POA_Evolution_ShellComponent__vepv ShellComponent_vepv; - -static POA_Evolution_ShellComponent * -create_servant (void) -{ - POA_Evolution_ShellComponent *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_ShellComponent *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &ShellComponent_vepv; - - CORBA_exception_init (&ev); - - POA_Evolution_ShellComponent__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - return servant; -} - -static Evolution_FolderTypeList * -impl_ShellComponent__get_supported_types (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - Evolution_FolderTypeList *folder_type_list; - unsigned int i; - GList *p; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - folder_type_list = Evolution_FolderTypeList__alloc (); - folder_type_list->_length = g_list_length (priv->folder_types); - folder_type_list->_maximum = folder_type_list->_length; - folder_type_list->_buffer = CORBA_sequence_Evolution_FolderType_allocbuf (folder_type_list->_maximum); - - for (p = priv->folder_types, i = 0; p != NULL; p = p->next, i++) { - Evolution_FolderType *corba_folder_type; - EvolutionShellComponentFolderType *folder_type; - - folder_type = (EvolutionShellComponentFolderType *) p->data; - - corba_folder_type = folder_type_list->_buffer + i; - corba_folder_type->name = CORBA_string_dup (folder_type->name); - corba_folder_type->icon_name = CORBA_string_dup (folder_type->icon_name); - } - - return folder_type_list; -} - -static void -impl_ShellComponent_set_owner (PortableServer_Servant servant, - const Evolution_Shell shell, - const CORBA_char *evolution_homedir, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - Evolution_Shell shell_duplicate; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->owner_client != NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_ShellComponent_AlreadyOwned, NULL); - return; - } - - shell_duplicate = CORBA_Object_duplicate (shell, ev); - - if (ev->_major == CORBA_NO_EXCEPTION) { - priv->owner_client = evolution_shell_client_new (shell_duplicate); - gtk_signal_emit (GTK_OBJECT (shell_component), signals[OWNER_SET], priv->owner_client, evolution_homedir); - } -} - -static void -impl_ShellComponent_unset_owner (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->owner_client == NULL) { - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_ShellComponent_NotOwned, NULL); - return; - } - - bonobo_object_unref (BONOBO_OBJECT (priv->owner_client)); - priv->owner_client = NULL; - - gtk_signal_emit (GTK_OBJECT (shell_component), signals[OWNER_UNSET]); -} - -static Bonobo_Control -impl_ShellComponent_create_view (PortableServer_Servant servant, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - EvolutionShellComponentResult result; - BonoboControl *control; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - result = (* priv->create_view_fn) (shell_component, physical_uri, type, - &control, priv->closure); - - if (result != EVOLUTION_SHELL_COMPONENT_OK) { - switch (result) { - case EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE: - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_ShellComponent_UnsupportedType, - NULL); - break; - case EVOLUTION_SHELL_COMPONENT_INTERNALERROR: - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_ShellComponent_InternalError, - NULL); - break; - default: - CORBA_exception_set (ev, CORBA_USER_EXCEPTION, - ex_Evolution_ShellComponent_NotFound, - NULL); - } - - return CORBA_OBJECT_NIL; - } - - return bonobo_object_corba_objref (BONOBO_OBJECT (control)); -} - -static void -impl_ShellComponent_async_create_folder (PortableServer_Servant servant, - const Evolution_ShellComponentListener listener, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->create_folder_fn == NULL) { - Evolution_ShellComponentListener_report_result (listener, - Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, - ev); - return; - } - - (* priv->create_folder_fn) (shell_component, physical_uri, type, listener, priv->closure); -} - -static void -impl_ShellComponent_async_remove_folder (PortableServer_Servant servant, - const Evolution_ShellComponentListener listener, - const CORBA_char *physical_uri, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->remove_folder_fn == NULL) { - Evolution_ShellComponentListener_report_result (listener, - Evolution_ShellComponentListener_UNSUPPORTED_OPERATION, - ev); - return; - } - - (* priv->remove_folder_fn) (shell_component, physical_uri, listener, priv->closure); -} - -static void -impl_ShellComponent_populate_folder_context_menu (PortableServer_Servant servant, - const Bonobo_UIHandler corba_uih, - const CORBA_char *physical_uri, - const CORBA_char *type, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - BonoboUIHandler *uih; - - bonobo_object = bonobo_object_from_servant (servant); - shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object); - priv = shell_component->priv; - - if (priv->populate_folder_context_menu_fn == NULL) - return; - - uih = bonobo_ui_handler_new (); - bonobo_ui_handler_set_container (uih, corba_uih); - bonobo_object_release_unref (corba_uih, NULL); - - (* priv->populate_folder_context_menu_fn) (shell_component, uih, physical_uri, type, priv->closure); - - bonobo_object_unref (BONOBO_OBJECT (uih)); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EvolutionShellComponent *shell_component; - EvolutionShellComponentPrivate *priv; - CORBA_Environment ev; - GList *p; - - shell_component = EVOLUTION_SHELL_COMPONENT (object); - - priv = shell_component->priv; - - CORBA_exception_init (&ev); - - if (priv->owner_client != NULL) - bonobo_object_unref (BONOBO_OBJECT (priv->owner_client)); - - CORBA_exception_free (&ev); - - for (p = priv->folder_types; p != NULL; p = p->next) { - EvolutionShellComponentFolderType *folder_type; - - folder_type = (EvolutionShellComponentFolderType *) p->data; - - g_free (folder_type->name); - g_free (folder_type->icon_name); - g_free (folder_type); - } - g_list_free (priv->folder_types); - - g_free (priv); -} - - -/* Initialization. */ - -static void -corba_class_init (void) -{ - POA_Evolution_ShellComponent__vepv *vepv; - POA_Evolution_ShellComponent__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_ShellComponent__epv, 1); - epv->_get_supported_types = impl_ShellComponent__get_supported_types; - epv->set_owner = impl_ShellComponent_set_owner; - epv->unset_owner = impl_ShellComponent_unset_owner; - epv->create_view = impl_ShellComponent_create_view; - epv->async_create_folder = impl_ShellComponent_async_create_folder; - epv->async_remove_folder = impl_ShellComponent_async_remove_folder; - epv->populate_folder_context_menu = impl_ShellComponent_populate_folder_context_menu; - - vepv = &ShellComponent_vepv; - vepv->_base_epv = base_epv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_ShellComponent_epv = epv; -} - -static void -class_init (EvolutionShellComponentClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - signals[OWNER_SET] - = gtk_signal_new ("owner_set", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EvolutionShellComponentClass, owner_set), - gtk_marshal_NONE__POINTER_POINTER, - GTK_TYPE_NONE, 2, - GTK_TYPE_POINTER, GTK_TYPE_POINTER); - - signals[OWNER_UNSET] - = gtk_signal_new ("owner_unset", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EvolutionShellComponentClass, owner_unset), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); - - parent_class = gtk_type_class (PARENT_TYPE); - - corba_class_init (); -} - -static void -init (EvolutionShellComponent *shell_component) -{ - EvolutionShellComponentPrivate *priv; - - priv = g_new (EvolutionShellComponentPrivate, 1); - - priv->folder_types = NULL; - priv->create_view_fn = NULL; - priv->create_folder_fn = NULL; - priv->remove_folder_fn = NULL; - priv->populate_folder_context_menu_fn = NULL; - - priv->owner_client = NULL; - priv->closure = NULL; - - shell_component->priv = priv; -} - - -void -evolution_shell_component_construct (EvolutionShellComponent *shell_component, - const EvolutionShellComponentFolderType folder_types[], - Evolution_ShellComponent corba_object, - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentPopulateFolderContextMenu populate_folder_context_menu_fn, - void *closure) -{ - EvolutionShellComponentPrivate *priv; - int i; - - g_return_if_fail (shell_component != NULL); - g_return_if_fail (corba_object != CORBA_OBJECT_NIL); - - bonobo_object_construct (BONOBO_OBJECT (shell_component), corba_object); - - priv = shell_component->priv; - - priv->create_view_fn = create_view_fn; - priv->create_folder_fn = create_folder_fn; - priv->remove_folder_fn = remove_folder_fn; - priv->populate_folder_context_menu_fn = populate_folder_context_menu_fn; - - priv->closure = closure; - - for (i = 0; folder_types[i].name != NULL; i++) { - EvolutionShellComponentFolderType *new; - - if (folder_types[i].icon_name == NULL - || folder_types[i].name[0] == '\0' - || folder_types[i].icon_name[0] == '\0') - continue; - - new = g_new (EvolutionShellComponentFolderType, 1); - new->name = g_strdup (folder_types[i].name); - new->icon_name = g_strdup (folder_types[i].icon_name); - - priv->folder_types = g_list_prepend (priv->folder_types, new); - } - - if (priv->folder_types == NULL) - g_warning ("No valid folder types constructing EShellComponent %p", shell_component); -} - -EvolutionShellComponent * -evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[], - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentPopulateFolderContextMenu populate_folder_context_menu_fn, - void *closure) -{ - EvolutionShellComponent *new; - POA_Evolution_ShellComponent *servant; - Evolution_ShellComponent corba_object; - - servant = create_servant (); - if (servant == NULL) - return NULL; - - new = gtk_type_new (evolution_shell_component_get_type ()); - - corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant); - evolution_shell_component_construct (new, folder_types, corba_object, - create_view_fn, create_folder_fn, remove_folder_fn, - populate_folder_context_menu_fn, - closure); - - return new; -} - -EvolutionShellClient * -evolution_shell_component_get_owner (EvolutionShellComponent *shell_component) -{ - g_return_val_if_fail (shell_component != NULL, NULL); - g_return_val_if_fail (EVOLUTION_IS_SHELL_COMPONENT (shell_component), NULL); - - return shell_component->priv->owner_client; -} - - -E_MAKE_TYPE (evolution_shell_component, "EvolutionShellComponent", EvolutionShellComponent, - class_init, init, PARENT_TYPE) diff --git a/shell/evolution-shell-component.h b/shell/evolution-shell-component.h deleted file mode 100644 index 6b080e48c3..0000000000 --- a/shell/evolution-shell-component.h +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-component.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef EVOLUTION_SHELL_COMPONENT_H -#define EVOLUTION_SHELL_COMPONENT_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "Evolution.h" - -#include "evolution-shell-client.h" - -#ifdef cplusplus -extern "C" { -#pragma } -#endif /* cplusplus */ - -#define EVOLUTION_TYPE_SHELL_COMPONENT (evolution_shell_component_get_type ()) -#define EVOLUTION_SHELL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponent)) -#define EVOLUTION_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponentClass)) -#define EVOLUTION_IS_SHELL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT)) -#define EVOLUTION_IS_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT)) - - -typedef struct _EvolutionShellComponent EvolutionShellComponent; -typedef struct _EvolutionShellComponentPrivate EvolutionShellComponentPrivate; -typedef struct _EvolutionShellComponentClass EvolutionShellComponentClass; - -enum _EvolutionShellComponentResult { - EVOLUTION_SHELL_COMPONENT_OK, - EVOLUTION_SHELL_COMPONENT_CORBAERROR, - EVOLUTION_SHELL_COMPONENT_INTERRUPTED, - EVOLUTION_SHELL_COMPONENT_INVALIDARG, - EVOLUTION_SHELL_COMPONENT_ALREADYOWNED, - EVOLUTION_SHELL_COMPONENT_NOTOWNED, - EVOLUTION_SHELL_COMPONENT_NOTFOUND, - EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDTYPE, - EVOLUTION_SHELL_COMPONENT_UNSUPPORTEDOPERATION, - EVOLUTION_SHELL_COMPONENT_INTERNALERROR, - EVOLUTION_SHELL_COMPONENT_BUSY, - EVOLUTION_SHELL_COMPONENT_EXISTS, - EVOLUTION_SHELL_COMPONENT_INVALIDURI, - EVOLUTION_SHELL_COMPONENT_PERMISSIONDENIED, - EVOLUTION_SHELL_COMPONENT_HASSUBFOLDERS, - EVOLUTION_SHELL_COMPONENT_NOSPACE, - EVOLUTION_SHELL_COMPONENT_UNKNOWNERROR -}; -typedef enum _EvolutionShellComponentResult EvolutionShellComponentResult; - -typedef EvolutionShellComponentResult (* EvolutionShellComponentCreateViewFn) - (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - BonoboControl **control_return, - void *closure); -typedef void (* EvolutionShellComponentCreateFolderFn) (EvolutionShellComponent *shell_component, - const char *physical_uri, - const char *type, - const Evolution_ShellComponentListener listener, - void *closure); -typedef void (* EvolutionShellComponentRemoveFolderFn) (EvolutionShellComponent *shell_component, - const char *physical_uri, - const Evolution_ShellComponentListener listener, - void *closure); -typedef void (* EvolutionShellComponentPopulateFolderContextMenu) (EvolutionShellComponent *shell_component, - BonoboUIHandler *uih, - const char *physical_uri, - const char *type, - void *closure); - -struct _EvolutionShellComponentFolderType { - char *name; - char *icon_name; -}; -typedef struct _EvolutionShellComponentFolderType EvolutionShellComponentFolderType; - -struct _EvolutionShellComponent { - BonoboObject parent; - - EvolutionShellComponentPrivate *priv; -}; - -struct _EvolutionShellComponentClass { - BonoboObjectClass parent_class; - - /* Signals. */ - - void (* owner_set) (EvolutionShellComponent *shell_component, - EvolutionShellClient *shell_client, - const char *evolution_homedir); - void (* owner_unset) (EvolutionShellComponent *shell_component); -}; - - -GtkType evolution_shell_component_get_type (void); -void evolution_shell_component_construct (EvolutionShellComponent *shell_component, - const EvolutionShellComponentFolderType folder_types[], - Evolution_ShellComponent corba_object, - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentPopulateFolderContextMenu populate_folder_context_menu_fn, - void *closure); -EvolutionShellComponent *evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[], - EvolutionShellComponentCreateViewFn create_view_fn, - EvolutionShellComponentCreateFolderFn create_folder_fn, - EvolutionShellComponentRemoveFolderFn remove_folder_fn, - EvolutionShellComponentPopulateFolderContextMenu populate_folder_context_menu_fn, - void *closure); -EvolutionShellClient *evolution_shell_component_get_owner (EvolutionShellComponent *shell_component); - -#ifdef cplusplus -} -#endif /* cplusplus */ - -#endif /* EVOLUTION_SHELL_COMPONENT_H */ diff --git a/shell/evolution-shell-view.c b/shell/evolution-shell-view.c deleted file mode 100644 index 8ace962f1b..0000000000 --- a/shell/evolution-shell-view.c +++ /dev/null @@ -1,226 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-view.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "e-util/e-util.h" - -#include "evolution-shell-view.h" - - -#define PARENT_TYPE bonobo_object_get_type () -static BonoboObjectClass *parent_class = NULL; - -struct _EvolutionShellViewPrivate { - int dummy; -}; - -enum { - SET_MESSAGE, - UNSET_MESSAGE, - LAST_SIGNAL -}; -static int signals[LAST_SIGNAL] = { 0 }; - - -/* CORBA interface implementation. */ - -static POA_Evolution_ShellView__vepv ShellView_vepv; - -static POA_Evolution_ShellView * -create_servant (void) -{ - POA_Evolution_ShellView *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_ShellView *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &ShellView_vepv; - CORBA_exception_init (&ev); - - POA_Evolution_ShellView__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - return servant; -} - -static void -impl_ShellView_set_message (PortableServer_Servant servant, - const CORBA_char *message, - const CORBA_boolean busy, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - - bonobo_object = bonobo_object_from_servant (servant); - gtk_signal_emit (GTK_OBJECT (bonobo_object), signals[SET_MESSAGE], message, busy); -} - -static void -impl_ShellView_unset_message (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - - bonobo_object = bonobo_object_from_servant (servant); - gtk_signal_emit (GTK_OBJECT (bonobo_object), signals[UNSET_MESSAGE]); -} - - -/* GtkObject methods. */ -static void -destroy (GtkObject *object) -{ - EvolutionShellView *shell_view; - EvolutionShellViewPrivate *priv; - - shell_view = EVOLUTION_SHELL_VIEW (object); - priv = shell_view->priv; - - g_free (priv); -} - - -static void -corba_class_init (void) -{ - POA_Evolution_ShellView__vepv *vepv; - POA_Evolution_ShellView__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_ShellView__epv, 1); - epv->set_message = impl_ShellView_set_message; - epv->unset_message = impl_ShellView_unset_message; - - vepv = &ShellView_vepv; - vepv->_base_epv = base_epv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_ShellView_epv = epv; -} - -static void -class_init (EvolutionShellViewClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - signals[SET_MESSAGE] - = gtk_signal_new ("set_message", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EvolutionShellViewClass, set_message), - gtk_marshal_NONE__POINTER_INT, - GTK_TYPE_NONE, 2, - GTK_TYPE_STRING, - GTK_TYPE_BOOL); - - signals[UNSET_MESSAGE] - = gtk_signal_new ("unset_message", - GTK_RUN_FIRST, - object_class->type, - GTK_SIGNAL_OFFSET (EvolutionShellViewClass, unset_message), - gtk_marshal_NONE__NONE, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); - - parent_class = gtk_type_class (bonobo_object_get_type ()); - - corba_class_init (); -} - -static void -init (EvolutionShellView *shell_view) -{ - EvolutionShellViewPrivate *priv; - - priv = g_new (EvolutionShellViewPrivate, 1); - priv->dummy = 0; - - shell_view->priv = priv; -} - - -/** - * evolution_shell_view_construct: - * @shell_view: - * @corba_object: - * - * Construct @shell_view with the specified @corba_object. - **/ -void -evolution_shell_view_construct (EvolutionShellView *shell_view, - Evolution_ShellView corba_object) -{ - g_return_if_fail (shell_view != NULL); - g_return_if_fail (EVOLUTION_IS_SHELL_VIEW (shell_view)); - - bonobo_object_construct (BONOBO_OBJECT (shell_view), corba_object); -} - -/** - * evolution_shell_view_new: - * - * Create a new EvolutionShellView object. - * - * Return value: The new EvolutionShellView object. - **/ -EvolutionShellView * -evolution_shell_view_new (void) -{ - POA_Evolution_ShellView *servant; - Evolution_ShellView corba_object; - EvolutionShellView *new; - - servant = create_servant (); - if (servant == NULL) - return NULL; - - new = gtk_type_new (evolution_shell_view_get_type ()); - - corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant); - - evolution_shell_view_construct (new, corba_object); - - return new; -} - - -E_MAKE_TYPE (evolution_shell_view, "EvolutionShellView", EvolutionShellView, class_init, init, PARENT_TYPE) diff --git a/shell/evolution-shell-view.h b/shell/evolution-shell-view.h deleted file mode 100644 index e12e8be2e1..0000000000 --- a/shell/evolution-shell-view.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-shell-view.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __EVOLUTION_SHELL_VIEW_H__ -#define __EVOLUTION_SHELL_VIEW_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_SHELL_VIEW (evolution_shell_view_get_type ()) -#define EVOLUTION_SHELL_VIEW(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_VIEW, EvolutionShellView)) -#define EVOLUTION_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_VIEW, EvolutionShellViewClass)) -#define EVOLUTION_IS_SHELL_VIEW(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_VIEW)) -#define EVOLUTION_IS_SHELL_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_VIEW)) - - -typedef struct _EvolutionShellView EvolutionShellView; -typedef struct _EvolutionShellViewPrivate EvolutionShellViewPrivate; -typedef struct _EvolutionShellViewClass EvolutionShellViewClass; - -struct _EvolutionShellView { - BonoboObject parent; - - EvolutionShellViewPrivate *priv; -}; - -struct _EvolutionShellViewClass { - BonoboObjectClass parent_class; - - /* Signals. */ - - void (* set_message) (EvolutionShellView *shell_view, const char *message, gboolean busy); - void (* unset_message) (EvolutionShellView *shell_view); -}; - - -GtkType evolution_shell_view_get_type (void); -void evolution_shell_view_construct (EvolutionShellView *shell_view, - Evolution_ShellView corba_object); -EvolutionShellView *evolution_shell_view_new (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_SHELL_VIEW_H__ */ diff --git a/shell/evolution-storage.c b/shell/evolution-storage.c deleted file mode 100644 index 2503905b13..0000000000 --- a/shell/evolution-storage.c +++ /dev/null @@ -1,387 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-storage.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#include "e-util/e-util.h" - -#include "evolution-storage.h" - - -#define PARENT_TYPE BONOBO_OBJECT_TYPE -static BonoboObjectClass *parent_class = NULL; - -struct _EvolutionStoragePrivate { - char *name; - - Evolution_StorageListener corba_storage_listener; -}; - - -/* CORBA interface implementation. */ - -static POA_Evolution_Storage__vepv Storage_vepv; - -static POA_Evolution_Storage * -create_servant (void) -{ - POA_Evolution_Storage *servant; - CORBA_Environment ev; - - servant = (POA_Evolution_Storage *) g_new0 (BonoboObjectServant, 1); - servant->vepv = &Storage_vepv; - - CORBA_exception_init (&ev); - - POA_Evolution_Storage__init ((PortableServer_Servant) servant, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_free (servant); - CORBA_exception_free (&ev); - return NULL; - } - - CORBA_exception_free (&ev); - - return servant; -} - -static CORBA_char * -impl_Storage__get_name (PortableServer_Servant servant, - CORBA_Environment *ev) -{ - BonoboObject *bonobo_object; - EvolutionStorage *storage; - EvolutionStoragePrivate *priv; - - bonobo_object = bonobo_object_from_servant (servant); - storage = EVOLUTION_STORAGE (bonobo_object); - priv = storage->priv; - - return CORBA_string_dup (priv->name); -} - - -/* GtkObject methods. */ - -static void -destroy (GtkObject *object) -{ - EvolutionStorage *storage; - EvolutionStoragePrivate *priv; - CORBA_Environment ev; - - storage = EVOLUTION_STORAGE (object); - priv = storage->priv; - - g_free (priv->name); - - CORBA_exception_init (&ev); - - if (priv->corba_storage_listener != CORBA_OBJECT_NIL) { - Evolution_StorageListener_destroyed (priv->corba_storage_listener, &ev); - - /* (This is not a Bonobo object, so no unref.) */ - CORBA_Object_release (priv->corba_storage_listener, &ev); - } - - CORBA_exception_free (&ev); - - g_free (priv); -} - - -static void -corba_class_init (void) -{ - POA_Evolution_Storage__vepv *vepv; - POA_Evolution_Storage__epv *epv; - PortableServer_ServantBase__epv *base_epv; - - base_epv = g_new0 (PortableServer_ServantBase__epv, 1); - base_epv->_private = NULL; - base_epv->finalize = NULL; - base_epv->default_POA = NULL; - - epv = g_new0 (POA_Evolution_Storage__epv, 1); - epv->_get_name = impl_Storage__get_name; - - vepv = &Storage_vepv; - vepv->Bonobo_Unknown_epv = bonobo_object_get_epv (); - vepv->Evolution_Storage_epv = epv; -} - -static void -class_init (EvolutionStorageClass *klass) -{ - GtkObjectClass *object_class; - - object_class = GTK_OBJECT_CLASS (klass); - object_class->destroy = destroy; - - parent_class = gtk_type_class (bonobo_object_get_type ()); - - corba_class_init (); -} - -static void -init (EvolutionStorage *storage) -{ - EvolutionStoragePrivate *priv; - - priv = g_new (EvolutionStoragePrivate, 1); - priv->name = NULL; - priv->corba_storage_listener = NULL; - - storage->priv = priv; -} - - -void -evolution_storage_construct (EvolutionStorage *storage, - Evolution_Storage corba_object, - const char *name) -{ - EvolutionStoragePrivate *priv; - - g_return_if_fail (storage != NULL); - g_return_if_fail (EVOLUTION_IS_STORAGE (storage)); - g_return_if_fail (corba_object != CORBA_OBJECT_NIL); - g_return_if_fail (name != NULL); - g_return_if_fail (name[0] != '\0'); - - bonobo_object_construct (BONOBO_OBJECT (storage), corba_object); - - priv = storage->priv; - priv->name = g_strdup (name); -} - -EvolutionStorage * -evolution_storage_new (const char *name) -{ - EvolutionStorage *new; - POA_Evolution_Storage *servant; - Evolution_Storage corba_object; - - g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (name[0] != '\0', NULL); - - servant = create_servant (); - if (servant == NULL) - return NULL; - - new = gtk_type_new (evolution_storage_get_type ()); - - corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant); - evolution_storage_construct (new, corba_object, name); - - return new; -} - -EvolutionStorageResult -evolution_storage_register (EvolutionStorage *evolution_storage, - Evolution_StorageRegistry corba_storage_registry) -{ - EvolutionStorageResult result; - Evolution_StorageListener corba_storage_listener; - Evolution_Storage corba_storage; - EvolutionStoragePrivate *priv; - CORBA_Environment ev; - - g_return_val_if_fail (evolution_storage != NULL, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage), - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (corba_storage_registry != CORBA_OBJECT_NIL, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - - priv = evolution_storage->priv; - - if (priv->corba_storage_listener != CORBA_OBJECT_NIL) - return EVOLUTION_STORAGE_ERROR_ALREADYREGISTERED; - - CORBA_exception_init (&ev); - - corba_storage = bonobo_object_corba_objref (BONOBO_OBJECT (evolution_storage)); - corba_storage_listener = Evolution_StorageRegistry_register_storage (corba_storage_registry, - corba_storage, - priv->name, &ev); - - if (ev._major == CORBA_NO_EXCEPTION) { - priv->corba_storage_listener = corba_storage_listener; - result = EVOLUTION_STORAGE_OK; - } else { - if (ev._major != CORBA_USER_EXCEPTION) - result = EVOLUTION_STORAGE_ERROR_CORBA; - else if (strcmp (CORBA_exception_id (&ev), ex_Evolution_StorageRegistry_Exists) == 0) - result = EVOLUTION_STORAGE_ERROR_EXISTS; - else - result = EVOLUTION_STORAGE_ERROR_GENERIC; - } - - CORBA_exception_free (&ev); - - return result; -} - -EvolutionStorageResult -evolution_storage_register_on_shell (EvolutionStorage *evolution_storage, - Evolution_Shell corba_shell) -{ - Evolution_StorageRegistry corba_storage_registry; - EvolutionStorageResult result; - CORBA_Environment ev; - - g_return_val_if_fail (evolution_storage != NULL, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage), - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (corba_shell != CORBA_OBJECT_NIL, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - - CORBA_exception_init (&ev); - - corba_storage_registry = Bonobo_Unknown_query_interface (corba_shell, - "IDL:Evolution/StorageRegistry:1.0", - &ev); - if (corba_storage_registry == CORBA_OBJECT_NIL || ev._major != CORBA_NO_EXCEPTION) { - CORBA_exception_free (&ev); - return EVOLUTION_STORAGE_ERROR_NOREGISTRY; - } - - result = evolution_storage_register (evolution_storage, corba_storage_registry); - - Bonobo_Unknown_unref (corba_storage_registry, &ev); - CORBA_Object_release (corba_storage_registry, &ev); - - CORBA_exception_free (&ev); - - return result; -} - -EvolutionStorageResult -evolution_storage_new_folder (EvolutionStorage *evolution_storage, - const char *path, - const char *type, - const char *physical_uri, - const char *description) -{ - EvolutionStorageResult result; - EvolutionStoragePrivate *priv; - Evolution_Folder corba_folder; - CORBA_Environment ev; - const char *path_basename; - char *parent_path; - - g_return_val_if_fail (evolution_storage != NULL, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage), - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (description != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (type != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (physical_uri != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - - priv = evolution_storage->priv; - - path_basename = g_basename (path); - - /* Yuck. */ - corba_folder.name = (CORBA_char *) path_basename; - corba_folder.description = (CORBA_char *) description; - corba_folder.type = (CORBA_char *) type; - corba_folder.physical_uri = (CORBA_char *) physical_uri; - - if (path_basename - path > 1) { - parent_path = g_strndup (path, path_basename - path - 1); - } else { - parent_path = g_strdup (G_DIR_SEPARATOR_S); - } - - CORBA_exception_init (&ev); - - Evolution_StorageListener_new_folder (priv->corba_storage_listener, parent_path, - &corba_folder, &ev); - - if (ev._major == CORBA_NO_EXCEPTION) - result = EVOLUTION_STORAGE_OK; - else if (ev._major != CORBA_USER_EXCEPTION) - result = EVOLUTION_STORAGE_ERROR_CORBA; - else if (strcmp (CORBA_exception_id (&ev), ex_Evolution_StorageListener_Exists) == 0) - result = EVOLUTION_STORAGE_ERROR_EXISTS; - else - result = EVOLUTION_STORAGE_ERROR_GENERIC; - - CORBA_exception_free (&ev); - - g_free (parent_path); - - return result; -} - -EvolutionStorageResult -evolution_storage_removed_folder (EvolutionStorage *evolution_storage, - const char *path) -{ - EvolutionStorageResult result; - EvolutionStoragePrivate *priv; - CORBA_Environment ev; - - g_return_val_if_fail (evolution_storage != NULL, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (EVOLUTION_IS_STORAGE (evolution_storage), - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (path != NULL, EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - g_return_val_if_fail (g_path_is_absolute (path), EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER); - - priv = evolution_storage->priv; - - if (priv->corba_storage_listener == CORBA_OBJECT_NIL) - return EVOLUTION_STORAGE_ERROR_NOTREGISTERED; - - CORBA_exception_init (&ev); - - Evolution_StorageListener_removed_folder (priv->corba_storage_listener, path, &ev); - - if (ev._major == CORBA_NO_EXCEPTION) - result = EVOLUTION_STORAGE_OK; - else if (ev._major != CORBA_USER_EXCEPTION) - result = EVOLUTION_STORAGE_ERROR_CORBA; - else if (strcmp (CORBA_exception_id (&ev), ex_Evolution_StorageListener_NotFound) == 0) - result = EVOLUTION_STORAGE_ERROR_NOTFOUND; - else - result = EVOLUTION_STORAGE_ERROR_GENERIC; - - CORBA_exception_free (&ev); - - return result; -} - - -E_MAKE_TYPE (evolution_storage, "EvolutionStorage", EvolutionStorage, class_init, init, PARENT_TYPE) diff --git a/shell/evolution-storage.h b/shell/evolution-storage.h deleted file mode 100644 index 4e96e28df8..0000000000 --- a/shell/evolution-storage.h +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* evolution-storage.h - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#ifndef __EVOLUTION_STORAGE_H__ -#define __EVOLUTION_STORAGE_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Evolution.h" - -#ifdef __cplusplus -extern "C" { -#pragma } -#endif /* __cplusplus */ - -#define EVOLUTION_TYPE_STORAGE (evolution_storage_get_type ()) -#define EVOLUTION_STORAGE(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_STORAGE, EvolutionStorage)) -#define EVOLUTION_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_STORAGE, EvolutionStorageClass)) -#define EVOLUTION_IS_STORAGE(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_STORAGE)) -#define EVOLUTION_IS_STORAGE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_STORAGE)) - - -typedef struct _EvolutionStorage EvolutionStorage; -typedef struct _EvolutionStoragePrivate EvolutionStoragePrivate; -typedef struct _EvolutionStorageClass EvolutionStorageClass; - -enum _EvolutionStorageResult { - EVOLUTION_STORAGE_OK, - EVOLUTION_STORAGE_ERROR_ALREADYREGISTERED, - EVOLUTION_STORAGE_ERROR_NOTREGISTERED, - EVOLUTION_STORAGE_ERROR_NOREGISTRY, - EVOLUTION_STORAGE_ERROR_CORBA, - EVOLUTION_STORAGE_ERROR_EXISTS, - EVOLUTION_STORAGE_ERROR_INVALIDPARAMETER, - EVOLUTION_STORAGE_ERROR_NOTFOUND, - EVOLUTION_STORAGE_ERROR_GENERIC -}; -typedef enum _EvolutionStorageResult EvolutionStorageResult; - -struct _EvolutionStorage { - BonoboObject parent; - - EvolutionStoragePrivate *priv; -}; - -struct _EvolutionStorageClass { - BonoboObjectClass parent_class; -}; - - -GtkType evolution_storage_get_type (void); -void evolution_storage_construct (EvolutionStorage *storage, - Evolution_Storage corba_object, - const char *name); -EvolutionStorage *evolution_storage_new (const char *name); - -EvolutionStorageResult evolution_storage_register (EvolutionStorage *storage, - Evolution_StorageRegistry corba_registry); -EvolutionStorageResult evolution_storage_register_on_shell (EvolutionStorage *evolution_storage, - Evolution_Shell corba_shell); - -EvolutionStorageResult evolution_storage_new_folder (EvolutionStorage *evolution_storage, - const char *path, - const char *type, - const char *physical_uri, - const char *description); -EvolutionStorageResult evolution_storage_removed_folder (EvolutionStorage *evolution_storage, - const char *path); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __EVOLUTION_STORAGE_H__ */ diff --git a/shell/glade/.cvsignore b/shell/glade/.cvsignore deleted file mode 100644 index 3045c518dc..0000000000 --- a/shell/glade/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -.deps -.libs -Makefile.in -Makefile diff --git a/shell/glade/Makefile.am b/shell/glade/Makefile.am deleted file mode 100644 index 9ef3238360..0000000000 --- a/shell/glade/Makefile.am +++ /dev/null @@ -1,5 +0,0 @@ -gladedir = $(datadir)/evolution/glade - -glade_DATA = e-shell-folder-creation-dialog.glade - -EXTRA_DIST = $(glade_DATA) diff --git a/shell/glade/e-shell-folder-creation-dialog.glade b/shell/glade/e-shell-folder-creation-dialog.glade deleted file mode 100644 index 21701a2a29..0000000000 --- a/shell/glade/e-shell-folder-creation-dialog.glade +++ /dev/null @@ -1,168 +0,0 @@ - - - - - Shell - shell - - src - pixmaps - C - True - True - - - - GnomeDialog - create_folder_dialog - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - 350 - 410 - True - True - False - False - False - - - GtkVBox - GnomeDialog:vbox - dialog-vbox1 - False - 8 - - 4 - True - True - - - - GtkHButtonBox - GnomeDialog:action_area - dialog-action_area1 - GTK_BUTTONBOX_END - 8 - 85 - 27 - 7 - 0 - - 0 - False - True - GTK_PACK_END - - - - GtkButton - ok_button - True - True - GNOME_STOCK_BUTTON_OK - - - - GtkButton - cancel_button - True - True - GNOME_STOCK_BUTTON_CANCEL - - - - - GtkVBox - main_vbox - False - 6 - - 0 - True - True - - - - GtkLabel - folder_name_label - - GTK_JUSTIFY_CENTER - False - 7.45058e-09 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkEntry - folder_name_entry - True - True - True - 0 - - - 0 - False - False - - - - - GtkLabel - folder_type_label - - GTK_JUSTIFY_CENTER - False - 7.45058e-09 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkOptionMenu - folder_type_option_menu - True - - 0 - - 0 - False - False - - - - - GtkLabel - creation_position_label - - GTK_JUSTIFY_CENTER - False - 7.45058e-09 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - - diff --git a/shell/idl/folder.idl b/shell/idl/folder.idl deleted file mode 100644 index 4a9850a468..0000000000 --- a/shell/idl/folder.idl +++ /dev/null @@ -1,87 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * folder.idl - * Copyright (C) 2000 Helix Code, Inc. - * Author: Christopher James Lahey - * - * Based on original from Matt Loper. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -module Evolution { - - interface FolderListener { - - enum CallStatus { - Success, - RepositoryOffline, - PermissionDenied, - WrongFolderType, - WrongFolderDomain, - FolderNotFound - }; - - void folder_listener_ready (in CallStatus status, - in Folder folder); - - void respond_add_subfolder (in CallStatus status, - in Folder folder); - void respond_move_subfolder (in CallStatus status); - void respond_delete_subfolder (in CallStatus status); - - /* This signals that some piece of data has changed. - The name or icon has changed. */ - void signal_name_changed(in Folder folder); - void signal_icon_changed(in Folder folder); - - /* This says a child/children has been added. */ - void signal_subfolder_added(in FolderList folders); - /* This says a child has been removed. */ - void signal_subfolder_removed(in Folder folder); - }; - - interface Folder { - void set_listener (in FolderListener listener); - - /* - * get a bonobo control for this view; a client won't - * use the goad_id gathered in the above function, b/c - * only the wombat knows how to do that, by surfing - * the physical evolution directory structure - */ - Bonobo::control get_control(); - - /* - * You must know what interface to query_interface() - * for once you get a data source! - */ - Bonobo::Unknown get_data_source(); - - char *get_name(); - char *get_icon(); - - void add_subfolder (in string data_source_id, - in string control_id, - in string viewable_name); - void move_subfolder (in Folder subfolder); - void delete_subfolder (in Folder subfolder); - }; - - interface Wombat { - void get_root_folder(FolderListener listener); - }; -}; diff --git a/shell/main.c b/shell/main.c deleted file mode 100644 index 1e2d3c3cc2..0000000000 --- a/shell/main.c +++ /dev/null @@ -1,174 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ -/* main.c - * - * Copyright (C) 2000 Helix Code, Inc. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * Author: Ettore Perazzoli - */ - -#include -#include -#include -#include -#include -#include - -#include "e-util/e-gui-utils.h" -#include "e-setup.h" - -#include "e-shell.h" - -#define STARTUP_URI "evolution:/local/Inbox" - -static EShell *shell; - -static void -no_views_left_cb (EShell *shell, gpointer data) -{ - e_shell_quit (shell); - gtk_main_quit (); -} - -static void -destroy_cb (GtkObject *object, gpointer data) -{ - gtk_main_quit (); -} - -static void -development_warning () -{ - GtkWidget *label, *warning_dialog; - int ret; - - warning_dialog = gnome_dialog_new ( - "Evolution" VERSION, - GNOME_STOCK_BUTTON_OK, - NULL); - - label = gtk_label_new ( - _( - "Hi. Thanks for taking the time to download this preview release\n" - "of the Evolution groupware suite.\n" - "\n" - "Over the last month and a half, our focus has been on making\n" - "Evolution usable. Many of the Evolution developers are now using\n" - "Evolution to read their mail full time. You could too. (Just\n" - "be sure to keep a backup.)\n" - "\n" - "But while we have fixed many bugs affecting its stability and\n" - "security, you still get the disclaimer: Evolution will: crash,\n" - "lose your mail when you don't want it to, refuse to delete your\n" - "mail when you do want it to, leave stray processes running,\n" - "consume 100% CPU, race, lock, send HTML mail to random mailing\n" - "lists, and embarass you in front of your friends and co-workers.\n" - "Use only as directed.\n" - "\n" - "We hope that you enjoy the results of our hard work, and we eagerly\n" - "await your contributions!\n" - )); - gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - gtk_widget_show (label); - - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (warning_dialog)->vbox), - label, TRUE, TRUE, 4); - - label = gtk_label_new ( - _( - "Thanks\n" - "The Evolution Team\n" - )); - gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT); - gtk_misc_set_alignment(GTK_MISC(label), 1, .5); - gtk_widget_show (label); - - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (warning_dialog)->vbox), - label, TRUE, TRUE, 0); - - ret = gnome_dialog_run (GNOME_DIALOG (warning_dialog)); - if (ret != -1) - gtk_object_destroy (GTK_OBJECT (warning_dialog)); -} - -static gint -idle_cb (gpointer data) -{ - GtkWidget *view; - char *evolution_directory; - - evolution_directory = (char *) data; - - shell = e_shell_new (evolution_directory); - g_free (evolution_directory); - - if (shell == NULL) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Cannot initialize the Evolution shell.")); - exit (1); - } - - gtk_signal_connect (GTK_OBJECT (shell), "no_views_left", - GTK_SIGNAL_FUNC (no_views_left_cb), NULL); - gtk_signal_connect (GTK_OBJECT (shell), "destroy", - GTK_SIGNAL_FUNC (destroy_cb), NULL); - - if (! e_shell_restore_from_settings (shell)) - view = e_shell_new_view (shell, STARTUP_URI); - - if (!getenv ("EVOLVE_ME_HARDER")) - development_warning (); - - return FALSE; -} - -int -main (int argc, char **argv) -{ - char *evolution_directory; - - bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR); - textdomain (PACKAGE); - - gnome_init_with_popt_table ("Evolution", VERSION, argc, argv, oaf_popt_options, 0, NULL); - oaf_init (argc, argv); - - glade_gnome_init (); - - gnome_window_icon_set_default_from_file (EVOLUTION_IMAGES "/evolution-inbox.png"); - - if (! bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL)) { - e_notice (NULL, GNOME_MESSAGE_BOX_ERROR, - _("Cannot initialize the Bonobo component system.")); - exit (1); - } - - /* FIXME */ - evolution_directory = g_concat_dir_and_file (g_get_home_dir (), "evolution"); - - if (! e_setup (evolution_directory)) { - g_free (evolution_directory); - exit (1); - } - - gtk_idle_add (idle_cb, evolution_directory); - - bonobo_main (); - - return 0; -} - diff --git a/stamp.h.in b/stamp.h.in deleted file mode 100644 index 8b13789179..0000000000 --- a/stamp.h.in +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/.cvsignore b/tests/.cvsignore deleted file mode 100644 index 1ad18182a2..0000000000 --- a/tests/.cvsignore +++ /dev/null @@ -1,24 +0,0 @@ -test1 -test2 -test3 -test4 -test5 -test6 -test7 -test8 -test9 -test10 -test11 -test12 -test13 -Makefile.in -Makefile -.deps -.libs -.pure -mail1.test -mail2.test -test-formatter -test-movemail -test-url - diff --git a/tests/Makefile.am b/tests/Makefile.am deleted file mode 100644 index a73eb21c55..0000000000 --- a/tests/Makefile.am +++ /dev/null @@ -1,73 +0,0 @@ -# process this file with automake to create Makefile.in - -INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir) -I$(top_srcdir)/camel \ - -I$(includedir) -I$(top_srcdir)/camel/providers/pop3 \ - -I$(top_srcdir)/camel/providers/mbox -I$(top_srcdir)/camel/providers/nntp \ - -DG_LOG_DOMAIN=\"evolution-tests\" - -LDADD = \ - $(top_builddir)/camel/libcamel.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libibex/libibex.la \ - $(GNOME_LIBDIR) \ - $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS) -# $(BONOBO_LIBS) - - - - -#test4_LDADD = \ -# $(top_builddir)/camel/libcamel.la \ -# $(top_builddir)/camel/providers/MH/libcamelmh.la \ -# $(GNOME_LIBDIR) \ -# $(GNOMEUI_LIBS) $(INTLLIBS) $(PTHREAD_LIB) - -#test11_LDADD = \ -# $(LDADD) \ -# $(top_builddir)/filter/libfilter.la \ -# $(top_builddir)/libibex/libibex.a - -#test9_LDADD = \ -# $(top_builddir)/camel/libcamel.la \ -# $(top_builddir)/camel/providers/mbox/libcamelmbox.la \ -# $(top_builddir)/libibex/libibex.la \ -# $(GNOME_LIBDIR) \ -# $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS) - -test14_LDADD = \ - $(top_builddir)/camel/providers/vee/libcamelvee.la \ - $(top_builddir)/camel/libcamel.la \ - $(top_builddir)/libibex/libibex.la \ - $(GNOME_LIBDIR) \ - $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS) - -#test12_LDADD = \ -# $(top_builddir)/camel/libcamel.la \ -# $(top_builddir)/camel/providers/nntp/libcamelnntp.la \ -# $(top_builddir)/libibex/libibex.la \ -# $(GNOME_LIBDIR) \ -# $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS) - -test_movemail_LDADD = \ - $(top_builddir)/camel/libcamel.la \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/libibex/libibex.la \ - $(GNOME_LIBDIR) \ - $(GNOMEUI_LIBS) $(INTLLIBS) $(EXTRA_GNOME_LIBS) - -THREAD_RELATED_TESTS=test8 - -noinst_PROGRAMS = \ - test1 \ - test2 \ - test10 \ - test11 \ - test13 \ - test14 \ - test-movemail \ - test-url \ - $(THREAD_RELATED_TESTS) - -# test3 \ -# test12 \ -# test-formatter diff --git a/tests/test-movemail.c b/tests/test-movemail.c deleted file mode 100644 index bcd5334b5a..0000000000 --- a/tests/test-movemail.c +++ /dev/null @@ -1,164 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include -#include - -static char * -auth_callback (char *prompt, gboolean secret, CamelService *service, - char *item, CamelException *ex) -{ - char buf[80]; - - printf ("%s\n", prompt); - if (secret) - printf ("(Warning: your input will be displayed)\n"); - if (fgets (buf, sizeof (buf), stdin) == NULL) { - camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, - "User cancelled input."); - return NULL; - } - return g_strdup (buf); -} - -extern char *evolution_folders_dir; - -int main (int argc, char **argv) -{ - CamelSession *session; - CamelException *ex; - CamelStore *store, *outstore; - CamelFolder *folder, *outfolder; - int nmsgs, i; - CamelMimeMessage *msg; - char *url; - gboolean delete = FALSE; - - gtk_init (&argc, &argv); - camel_init (); - - if (argc == 3) { - if (!strcmp (argv[1], "--delete") || - !strcmp (argv[1], "-d")) { - delete = TRUE; - argc--; - argv++; - } - } - if (argc != 2) { - fprintf (stderr, "Usage: test-movemail [--delete] url\n"); - exit (1); - } - e_setup_base_dir (); - session = camel_session_new (auth_callback); - - ex = camel_exception_new (); - store = camel_session_get_store (session, argv[1], ex); - if (!store) { - fprintf(stderr, "Could not open store %s:\n%s\n", argv[1], - camel_exception_get_description (ex)); - exit (1); - } - camel_service_connect_with_url (CAMEL_SERVICE (store), argv[1], ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't connect to %s:\n%s\n", argv[1], - camel_exception_get_description (ex)); - exit (1); - } - - folder = camel_store_get_folder (store, "inbox", ex); - if (!folder) { - fprintf(stderr, "Could not get inbox:\n%s\n", - camel_exception_get_description (ex)); - exit (1); - } - camel_folder_open (folder, FOLDER_OPEN_READ, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't open folder: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - - nmsgs = camel_folder_get_message_count (folder, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't get message count: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - printf ("Inbox contains %d messages.\n", nmsgs); - -#ifdef DISPLAY_ONLY - stdout_stream = camel_stream_fs_new_with_fd (1); -#else - url = g_strdup_printf ("mbox://%s", evolution_folders_dir); - outstore = camel_session_get_store (session, url, ex); - g_free (url); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't open output store: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - outfolder = camel_store_get_folder (outstore, "inbox", ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't make output folder: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - camel_folder_open (outfolder, FOLDER_OPEN_WRITE, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't open output folder: %s\n", - camel_exception_get_description (ex)); - exit (1); - } -#endif - - for (i = 1; i <= nmsgs; i++) { - msg = camel_folder_get_message_by_number (folder, i, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't get message: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - -#ifdef DISPLAY_ONLY - camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (msg), - stdout_stream); -#else - camel_folder_append_message (outfolder, msg, ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't write message: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - - if (delete) { - camel_folder_delete_message_by_number (folder, i, ex); - if (camel_exception_get_id (ex) != - CAMEL_EXCEPTION_NONE) { - printf ("Couldn't delete message: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - } -#endif - } - -#ifndef DISPLAY_ONLY - camel_folder_close (outfolder, FALSE, ex); -#endif - camel_folder_close (folder, TRUE, ex); - - camel_service_disconnect (CAMEL_SERVICE (store), ex); - if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) { - printf ("Couldn't disconnect: %s\n", - camel_exception_get_description (ex)); - exit (1); - } - - return 0; -} - -void -gratuitous_dependency_generator() -{ - xmlSetProp(); -} diff --git a/tests/test-url.c b/tests/test-url.c deleted file mode 100644 index 5d8d75951b..0000000000 --- a/tests/test-url.c +++ /dev/null @@ -1,37 +0,0 @@ -#include - -int main (int argc, char **argv) -{ - CamelURL *url; - CamelException *ex; - - if (argc != 2) { - fprintf (stderr, "Usage: test-url URL\n"); - exit (1); - } - - ex = camel_exception_new (); - url = camel_url_new (argv[1], ex); - if (!url) { - fprintf (stderr, "Could not parse URL:\n%s", - camel_exception_get_description (ex)); - exit (1); - } - - printf ("URL : %s\n\n", camel_url_to_string (url, TRUE)); - printf ("Protocol: %s\n", url->protocol); - if (url->user) - printf ("User : %s\n", url->user); - if (url->authmech) - printf ("Authmech: %s\n", url->authmech); - if (url->passwd) - printf ("Password: %s\n", url->passwd); - if (url->host) - printf ("Host : %s\n", url->host); - if (url->port) - printf ("Port : %d\n", url->port); - if (url->path) - printf ("Path : %s\n", url->path); - - return 0; -} diff --git a/tests/test1.c b/tests/test1.c deleted file mode 100644 index c21cfd371b..0000000000 --- a/tests/test1.c +++ /dev/null @@ -1,136 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include - -#include "camel-mime-message.h" -#include "camel-multipart.h" -#include "camel-stream.h" -#include "camel-stream-fs.h" -#include "camel-data-wrapper.h" -#include "camel.h" - -int -main (int argc, char**argv) -{ - CamelMimeMessage *message; - CamelMultipart *multipart; - CamelMimePart *body_part; - CamelMimePart *attachment_part; - CamelStream *attachment_stream; - CamelStream *stream; - CamelException *ex = camel_exception_new (); - - gtk_init (&argc, &argv); - camel_init (); - - if (argc < 2) { - attachment_stream = NULL; - } else { - if (argc == 2) { - attachment_stream = camel_stream_fs_new_with_name (argv[1], O_RDONLY, 0, ex); - if (attachment_stream == NULL) { - fprintf (stderr, "Cannot open `%s': %s\n", - argv[1], - camel_exception_get_description (ex)); - return 1; - } - } else { - fprintf (stderr, "Usage: %s []\n", - argv[0]); - return 1; - } - } - - message = camel_mime_message_new (); - - camel_mime_part_set_description (CAMEL_MIME_PART (message), "a test"); - - camel_medium_add_header (CAMEL_MEDIUM (message), "X-test1", "the value of a test"); - camel_medium_add_header (CAMEL_MEDIUM (message), "X-test2", "the value of another test"); - /*camel_mime_part_add_content_language (CAMEL_MIME_PART (message), g_string_new ("es-ca"));*/ - - camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0); - camel_mime_message_set_subject (message, g_strdup ("A test message")); - camel_mime_message_set_reply_to (message, g_strdup ("toto@toto.com")); - camel_mime_message_set_from (message, g_strdup ("Bertrand.Guiheneuf@aful.org")); - - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_TO, - "Franck DeChamps", "franck.dechamps@alseve.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_TO, - NULL, "mc@alseve.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_TO, - "Richo", "richard.lengagne@inria.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_CC, - "Frank", "Francois.fleuret@inria.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_CC, - NULL, "maury@justmagic.com"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_BCC, - "Bertie", "Bertrand.Guiheneuf@aful.org"); - - multipart = camel_multipart_new (); - body_part = camel_mime_part_new (); - camel_mime_part_set_content (CAMEL_MIME_PART (body_part), "This is a test.\nThis is only a test.\n", - strlen("This is a test.\nThis is only a test.\n"), "text/plain"); - camel_multipart_add_part (multipart, body_part); - - if (attachment_stream == NULL) { - attachment_part = NULL; - } else { - CamelDataWrapper *attachment_wrapper; - - /*CamelDataWrapper *stream_wrapper; - - stream_wrapper = camel_stream_data_wrapper_new - (attachment_stream); - - attachment_part = camel_mime_body_part_new (); - camel_mime_part_set_encoding (CAMEL_MIME_PART (attachment_part), - CAMEL_MIME_PART_ENCODING_BASE64); - camel_medium_set_content_object (CAMEL_MEDIUM (attachment_part), - stream_wrapper); - camel_multipart_add_part (multipart, attachment_part); - - gtk_object_unref (GTK_OBJECT (stream_wrapper));*/ - - attachment_wrapper = camel_data_wrapper_new (); - camel_data_wrapper_construct_from_stream (attachment_wrapper, - attachment_stream); - - attachment_part = camel_mime_part_new (); - camel_mime_part_set_encoding (CAMEL_MIME_PART (attachment_part), - CAMEL_MIME_PART_ENCODING_BASE64); - camel_medium_set_content_object (CAMEL_MEDIUM (attachment_part), - attachment_wrapper); - camel_multipart_add_part (multipart, attachment_part); - } - - camel_medium_set_content_object (CAMEL_MEDIUM (message), CAMEL_DATA_WRAPPER (multipart)); - - stream = camel_stream_fs_new_with_name ("mail1.test", O_WRONLY|O_TRUNC|O_CREAT, 0600, ex); - if (!stream) { - printf ("Could not open output file: %s\n", - camel_exception_get_description (ex)); - exit(2); - } - - camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), - stream, ex); - camel_stream_flush (stream, ex); - gtk_object_unref (GTK_OBJECT (stream)); - if (camel_exception_is_set (ex)) { - printf ("Oops. Failed. %s\n", - camel_exception_get_description (ex)); - exit (1); - } - - gtk_object_unref (GTK_OBJECT (message)); - gtk_object_unref (GTK_OBJECT (multipart)); - gtk_object_unref (GTK_OBJECT (body_part)); - - if (attachment_part != NULL) - gtk_object_unref (GTK_OBJECT (attachment_part)); - - printf ("Test1 finished\n"); - return 1; -} - diff --git a/tests/test10.c b/tests/test10.c deleted file mode 100644 index efe069242a..0000000000 --- a/tests/test10.c +++ /dev/null @@ -1,127 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - - -#include "camel.h" -#include "camel-mbox-folder.h" -#include "camel-exception.h" -#include "md5-utils.h" -#include -#include -#include -#include -#include -#include -#include - - -static CamelMimeMessage * -create_sample_mime_message () -{ - CamelMimeMessage *message; - CamelMimePart *body_part; - CamelMultipart *multipart; - - - message = camel_mime_message_new (); - - camel_mime_part_set_description (CAMEL_MIME_PART (message), "a test"); - - camel_medium_add_header (CAMEL_MEDIUM (message), "X-test1", "the value of a test"); - camel_medium_add_header (CAMEL_MEDIUM (message), "X-test2", "the value of another test"); - - camel_mime_message_set_date (message, time(0), 200); - camel_mime_message_set_subject (message, "A test message"); - camel_mime_message_set_reply_to (message, "toto@toto.com"); - camel_mime_message_set_from (message, "Bertrand.Guiheneuf@aful.org"); - - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_TO, - "Franck DeChamps", "franck.dechamps@alseve.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_TO, - NULL, "mc@alseve.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_TO, - "Richo", "richard.lengagne@inria.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_CC, - "Frank", "Francois.fleuret@inria.fr"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_CC, - NULL, "maury@justmagic.com"); - camel_mime_message_add_recipient (message, CAMEL_RECIPIENT_TYPE_BCC, - "Bertie", "Bertrand.Guiheneuf@aful.org"); - - multipart = camel_multipart_new (); - body_part = camel_mime_part_new (); - camel_mime_part_set_content (CAMEL_MIME_PART (body_part), "This is a test.\nThis is only a test.\n", - strlen("This is a test.\nThis is only a test.\n"), "text/plain"); - camel_multipart_add_part (multipart, body_part); - camel_medium_set_content_object (CAMEL_MEDIUM (message), CAMEL_DATA_WRAPPER (multipart)); - - return message; -} - -static char * -auth_callback(char *prompt, gboolean secret, - CamelService *service, char *item, - CamelException *ex) -{ - printf ("auth_callback called: %s\n", prompt); - return NULL; -} - - - - -int -main (int argc, char**argv) -{ - CamelSession *session; - CamelException *ex; - CamelStore *store; - gchar *store_url = "mbox:///tmp/evmail"; - CamelFolder *folder; - CamelMimeMessage *message; - GList *uid_list; - - gtk_init (&argc, &argv); - camel_init (); - ex = camel_exception_new (); - - session = camel_session_new (auth_callback); - store = camel_session_get_store (session, store_url, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_session_get_store\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - folder = camel_store_get_folder (store, "Inbox", ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_store_get_folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - camel_folder_open (folder, FOLDER_OPEN_RW, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught when trying to open the folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - message = create_sample_mime_message (); - camel_folder_append_message (folder, message, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught when trying to append a message to the folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - uid_list = camel_folder_get_uid_list (folder, ex); - - - camel_folder_get_message_by_uid (folder, (gchar *)uid_list->data, ex); - camel_folder_close (folder, FALSE, ex); - return 1; -} - - - - diff --git a/tests/test11.c b/tests/test11.c deleted file mode 100644 index 1323a5f90b..0000000000 --- a/tests/test11.c +++ /dev/null @@ -1,136 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - Test search api - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static char * -auth_callback(char *prompt, gboolean secret, - CamelService *service, char *item, - CamelException *ex) -{ - printf ("auth_callback called: %s\n", prompt); - return NULL; -} - -int -main (int argc, char**argv) -{ - CamelSession *session; - CamelException *ex; - CamelStore *store; - gchar *store_url = "mbox:///tmp/evmail"; - CamelFolder *folder, *outbox; - GList *n, *matches; - - gtk_init (&argc, &argv); - camel_init (); - ex = camel_exception_new (); - - session = camel_session_new (auth_callback); - - camel_provider_load (session, "../camel/providers/mbox/.libs/libcamelmbox.so.0", ex); - if (camel_exception_get_id (ex)) { - printf ("Exceptions suck: %s\n", camel_exception_get_description (ex)); - return 1; - } - - store = camel_session_get_store (session, store_url, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_session_get_store\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - printf("get folder\n"); - - folder = camel_store_get_folder (store, "Inbox", ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_store_get_folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - printf("open folder\n"); - - camel_folder_open (folder, FOLDER_OPEN_READ, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught when trying to open the folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - printf("create output folder ...\n"); - outbox = camel_store_get_folder (store, "Gnome", ex); - if (!camel_folder_exists(outbox, ex)) { - camel_folder_create(outbox, ex); - } - - camel_folder_open (outbox, FOLDER_OPEN_WRITE, ex); - - printf("Search for messages\n"); - - matches = camel_folder_search_by_expression (folder, -/* "(match-all (header-contains \"subject\" \"gnome\"))",*/ - "(body-contains \"gnome\")", - ex); - - printf("search found matches:\n"); - n = matches; - while (n) { - CamelMimeMessage *m; - - printf("uid: %s\n", (char *) n->data); - m = camel_folder_get_message_by_uid(folder, n->data, ex); - - if (camel_exception_get_id (ex)) { - printf ("Cannot get message\n" - "Full description : %s\n", camel_exception_get_description (ex)); - camel_exception_init(ex); - } else { - -#if 1 - - camel_folder_append_message(outbox, m, ex); - - if (camel_exception_get_id (ex)) { - printf ("Cannot save message\n" - "Full description : %s\n", camel_exception_get_description (ex)); - } - - printf("Removing matching message from source folder?\n"); - camel_mime_message_set_flags(m, CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED); -/* camel_mime_message_set_flags(m, CAMEL_MESSAGE_ANSWERED, CAMEL_MESSAGE_ANSWERED);*/ -#endif - - } - if (m) - gtk_object_unref(m); - n = g_list_next(n); - } - - camel_folder_close (outbox, TRUE, ex); - camel_folder_close (folder, TRUE, ex); - - gtk_object_unref((GtkObject *)outbox); - gtk_object_unref((GtkObject *)folder); - - return 0; -} - - - - diff --git a/tests/test12.c b/tests/test12.c deleted file mode 100644 index 223eb980a8..0000000000 --- a/tests/test12.c +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include - -#include "camel.h" -#include "camel-nntp-store.h" -#include "camel-session.h" -#include "camel-exception.h" - -static char* -authenticator (char *prompt, gboolean secret, CamelService *service, char *item, - CamelException *ex) -{ -} - -static void -print_name(gpointer data, gpointer foo) -{ - printf ("%s\n", (char*)data); -} - -int -main (int argc, char **argv) -{ - CamelSession *session; - CamelException *ex; - CamelStore *store; - CamelFolder *n_p_m_a; - GList *groups; - const gchar *news_url = "news://news.mozilla.org"; - - gtk_init (&argc, &argv); - camel_init (); - ex = camel_exception_new (); - - g_assert (camel_provider_register_as_module ("/usr/local/lib/evolution/camel-providers/0.0.1/libcamelnntp.so")); - - session = camel_session_new (authenticator); - store = camel_session_get_store (session, news_url, ex); - - g_assert (store); - - camel_nntp_store_subscribe_group (store, "netscape.public.mozilla.announce"); - - printf ("subscribed groups on %s\n", news_url); - - groups = camel_nntp_store_list_subscribed_groups (store); - - g_list_foreach(groups, print_name, NULL); - - n_p_m_a = camel_store_get_folder (store, "netscape.public.mozilla.announce", ex); - - camel_folder_open(n_p_m_a, FOLDER_OPEN_READ, ex); - - camel_folder_close(n_p_m_a, FALSE, ex); -} diff --git a/tests/test13.c b/tests/test13.c deleted file mode 100644 index 3e191eddf5..0000000000 --- a/tests/test13.c +++ /dev/null @@ -1,123 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* tests mime message file parsing */ -#include "stdio.h" -#include "camel-mime-message.h" -#include "camel-mime-part.h" -#include "camel-stream.h" -#include "camel-stream-fs.h" -#include "camel.h" - - -static void -dump_message_content(CamelDataWrapper *object) -{ - CamelDataWrapper *containee; - CamelStream *stream; - int parts, i; - int len; - int left; - char buffer[128]; - - printf("Dumping message ..."); - - containee = camel_medium_get_content_object(CAMEL_MEDIUM(object)); - - if (containee) { - char *type = gmime_content_field_get_mime_type(containee->mime_type); - - printf("type = %s\n", type); - - if (CAMEL_IS_MULTIPART(containee)) { - parts = camel_multipart_get_number (CAMEL_MULTIPART(containee)); - printf("multipart message, scanning contents %d parts ...\n", parts); - for (i=0;i 0) { - fwrite(buffer, len, 1, stdout); - } - printf("\n"); - } else { - g_warning("cannot get stream for message?"); - } - } - - g_free(type); - } else { - printf("no containee?\n"); - } -} - -int -main (int argc, char**argv) -{ - CamelMimeMessage *message; - CamelStream *input_stream, *output_stream; - CamelMimeParser *parser; - - gtk_init (&argc, &argv); - camel_init (); - -/* should have another program to test all this internationalisation/header parsing stuff */ -#if 0 - { - char *s, *o; - s = "This is a test, simple ascii text"; - o = header_encode_string(s); - printf("%s -> %s\n", s, o); - s = "To: Markus \"DÃ…hr\" "; - o = header_encode_string(s); - printf("%s -> %s\n", s, o); - - s = "From: =?iso-8859-1?Q?Kenneth_ll=E9phaane_Christiansen?= "; - o = header_encode_string(s); - printf("%s -> %s\n", s, o); - - printf("decoding ... \n"); - s = "From: =?iso-8859-1?Q?Kenneth_ll=E9phaane_Christiansen?= "; - o = header_decode_string(s); - printf("%s -> %s\n", s, o); - - printf("reencoded\n"); - s = header_encode_string(o); - printf("%s -> %s\n", o, s); - return 0; - } -#endif - - message = camel_mime_message_new (); - - - input_stream = camel_stream_fs_new_with_name ("mail.test", O_RDONLY, 0, NULL); - if (!input_stream) { - perror ("could not open input file\n"); - printf ("You must create the file mail.test before running this test\n"); - exit(2); - } - - printf("creating parser to create message\n"); - parser = camel_mime_parser_new(); - camel_mime_parser_init_with_stream(parser, input_stream); - camel_mime_part_construct_from_parser(CAMEL_MIME_PART (message), - parser); - - dump_message_content(CAMEL_DATA_WRAPPER (message)); - - gtk_object_unref (GTK_OBJECT (input_stream)); - - output_stream = camel_stream_fs_new_with_name ("mail2.test", O_WRONLY|O_CREAT|O_TRUNC, 0600, NULL); - camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream, NULL); - camel_stream_flush (output_stream, NULL); - gtk_object_unref (GTK_OBJECT (output_stream)); - - //gtk_object_unref (GTK_OBJECT (message)); - return 0; - -} diff --git a/tests/test14.c b/tests/test14.c deleted file mode 100644 index 80963415db..0000000000 --- a/tests/test14.c +++ /dev/null @@ -1,177 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* - Test vfolder. - */ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void -dump_message_content(CamelDataWrapper *object) -{ - CamelDataWrapper *containee; - CamelStream *stream; - int parts, i; - int len; - int left; - char buffer[128]; - - printf("Dumping message ..."); - - containee = camel_medium_get_content_object(CAMEL_MEDIUM(object)); - - if (containee) { - char *type = gmime_content_field_get_mime_type(containee->mime_type); - - printf("type = %s\n", type); - - if (CAMEL_IS_MULTIPART(containee)) { - parts = camel_multipart_get_number (CAMEL_MULTIPART(containee)); - printf("multipart message, scanning contents %d parts ...\n", parts); - for (i=0;i 0) { - fwrite(buffer, len, 1, stdout); - } - printf("\n"); - } else { - g_warning("cannot get stream for message?"); - } - } - - g_free(type); - } else { - printf("no containee?\n"); - } -} - - -static char * -auth_callback(char *prompt, gboolean secret, - CamelService *service, char *item, - CamelException *ex) -{ - printf ("auth_callback called: %s\n", prompt); - return NULL; -} - -int -main (int argc, char**argv) -{ - CamelSession *session; - CamelException *ex; - CamelStore *store; - gchar *store_url = "vfolder:"; - CamelFolder *folder; - GList *n, *matches; - - gtk_init (&argc, &argv); - camel_init (); - ex = camel_exception_new (); - - session = camel_session_new (auth_callback); - - camel_provider_load (session, "../camel/providers/vee/.libs/libcamelvee.so.0", ex); - if (camel_exception_get_id (ex)) { - printf ("Exceptions suck: %s\n", camel_exception_get_description (ex)); - return 1; - } - - store = camel_session_get_store (session, store_url, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_session_get_store\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - printf("get folder\n"); - - folder = camel_store_get_folder (store, "gnome_email?(match-all (header-contains \"subject\" \"gnome\"))", ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_store_get_folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - /* setup searched folders */ - { - CamelFolder *subfolder; - CamelStore *substore; - - substore = camel_session_get_store (session, "mbox:///home/notzed/evolution/local/Inbox", ex); - subfolder = camel_store_get_folder(substore, "mbox", ex); - camel_folder_open (subfolder, FOLDER_OPEN_READ, ex); - camel_vee_folder_add_folder(folder, subfolder); - - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_store_get_folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - substore = camel_session_get_store (session, "mbox:///home/notzed/evolution/local/Outbox", ex); - subfolder = camel_store_get_folder(substore, "mbox", ex); - camel_folder_open (subfolder, FOLDER_OPEN_READ, ex); - camel_vee_folder_add_folder(folder, subfolder); - - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_store_get_folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - } - - printf("open folder\n"); - - camel_folder_open (folder, FOLDER_OPEN_READ, ex); - if (camel_exception_get_id (ex)) { - printf ("Exception caught when trying to open the folder\n" - "Full description : %s\n", camel_exception_get_description (ex)); - return -1; - } - - printf("vfolder's uid's:\n"); - n = camel_folder_get_uid_list(folder, ex); - while (n) { - CamelMimeMessage *m; - - printf("uid: %s\n", (char *) n->data); - - m = camel_folder_get_message_by_uid(folder, n->data, ex); - if (m) { - dump_message_content(m); - gtk_object_unref(m); - } - n = g_list_next(n); - } - - camel_folder_close (folder, TRUE, ex); - - gtk_object_unref((GtkObject *)folder); - - return 0; -} - - - - diff --git a/tests/test2.c b/tests/test2.c deleted file mode 100644 index a6299357cb..0000000000 --- a/tests/test2.c +++ /dev/null @@ -1,48 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* tests mime message file parsing */ -#include "stdio.h" -#include "camel-mime-message.h" -#include "camel-mime-part.h" -#include "camel-stream.h" -#include "camel-stream-fs.h" -#include "camel.h" - -int -main (int argc, char**argv) -{ - CamelMimeMessage *message; - CamelStream *input_stream; - CamelException *ex = camel_exception_new (); - - gtk_init (&argc, &argv); - camel_init (); - - message = camel_mime_message_new (); - - - input_stream = camel_stream_fs_new_with_name ("mail.test", O_RDONLY, 0, ex); - if (!input_stream) { - perror ("could not open input file\n"); - printf ("You must create the file mail.test before running this test\n"); - exit(2); - } - - - camel_data_wrapper_construct_from_stream ( CAMEL_DATA_WRAPPER (message), input_stream); - - camel_medium_get_content_object (CAMEL_MEDIUM (message)); - -#if 0 - camel_stream_close (input_stream); - gtk_object_unref (GTK_OBJECT (input_stream)); - - output_stream = camel_stream_fs_new_with_name ("mail2.test", O_WRONLY|O_TRUNC|O_CREAT, 0600); - camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (message), output_stream); - camel_stream_close (output_stream); - gtk_object_unref (GTK_OBJECT (output_stream)); - - //gtk_object_unref (GTK_OBJECT (message)); -#endif - return 0; - -} diff --git a/tests/test3.c b/tests/test3.c deleted file mode 100644 index 9893e2e507..0000000000 --- a/tests/test3.c +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -#include "camel.h" - -int -main (int argc, char**argv) -{ - GtkType type; - - gtk_init (&argc, &argv); - camel_init (); - - printf ("Test 3 : data wrapper repository\n"); - - printf ("\nMime type : \"multipart\"\n"); - type = data_wrapper_repository_get_data_wrapper_type ("multipart"); - printf ("Type found %s\n", gtk_type_name (type) ); - - printf ("\nMime type : \"multipart/alternative\"\n"); - type = data_wrapper_repository_get_data_wrapper_type ("multipart/alternative"); - printf ("Type found %s\n", gtk_type_name (type) ); - - printf ("\nMime type : \"toto/titi\"\n"); - type = data_wrapper_repository_get_data_wrapper_type ("toto/titi"); - printf ("Type found %s\n", gtk_type_name (type) ); - - printf ("Test3 finished\n"); - return 1; -} - diff --git a/tests/test4.c b/tests/test4.c deleted file mode 100644 index bc9eef71d1..0000000000 --- a/tests/test4.c +++ /dev/null @@ -1,65 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* testing mh providers - do not use CamelMhFolder and CamelMhStore directly. - We do it here for test purpose only */ - - - -#include "camel-folder.h" -#include "camel-mh-folder.h" -#include "camel-mh-store.h" -#include "camel.h" - -int -main (int argc, char**argv) -{ - CamelStore *store; - CamelFolder *inbox_folder; - CamelFolder *root_mh_folder; - GList *mh_subfolders_name; - CamelMimeMessage *message_1; - gboolean inbox_exists; - - gtk_init (&argc, &argv); - camel_init (); - - - store = gtk_type_new (CAMEL_MH_STORE_TYPE); - camel_store_init (store, (CamelSession *)NULL, g_strdup ("mh:///root/Mail")); - - root_mh_folder = camel_store_get_folder (store, ""); - mh_subfolders_name = camel_folder_list_subfolders (root_mh_folder, NULL); - - printf ("\n------------- Listing root Mh folder subfolders --------\n"); - while (mh_subfolders_name) { - printf ("\t\"%s\"\n", (gchar *)mh_subfolders_name->data); - mh_subfolders_name = mh_subfolders_name->next; - } - printf ("--------------------------------------------------------\n\n"); - - inbox_folder = camel_store_get_folder (store, "inbox"); - if (!inbox_folder) { - printf ("** Error: could not get inbox folder from store\n"); - return 1; - } - - /* test existence */ - inbox_exists = camel_folder_exists (inbox_folder, NULL); - if (inbox_exists) - printf ("MH folder inbox exists, continuing tests\n"); - else { - printf ("MH folder inbox does not exist. Stopping \n"); - return 1; - } - - printf ("\n Inbox folder contains %d messages\n", camel_folder_get_message_count (inbox_folder, NULL)); - printf ("\n------------- Gettting message numer 3 in inbox --------\n"); - message_1 = camel_folder_get_message (inbox_folder, 3, NULL); - printf ("--------------------------------------------------------\n\n"); - - - return 1; - - -} diff --git a/tests/test5.c b/tests/test5.c deleted file mode 100644 index 81c5e2256a..0000000000 --- a/tests/test5.c +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* test for the RFC 2047 decoder */ - -#include -#include - -#include "gmime-utils.h" -#include "stdio.h" -#include "camel-mime-message.h" -#include "camel-mime-part.h" -#include "camel-stream.h" -#include "camel-stream-fs.h" -#include "camel.h" -#include "gmime-rfc2047.h" - -#define TERMINAL_CHARSET "UTF-8" - -/* - * Info on many unicode issues, including, utf-8 xterms from : - * - * http://www.cl.cam.ac.uk/~mgk/unicode.html - * - */ - -const char *tests[] = -{ -/* these strings come from RFC 2047. Ought to add a few torture cases here. */ - "=?US-ASCII?Q?Keith_Moore?= ", - "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= ", - "=?ISO-8859-1?Q?Andr=E9?= Pirard ", - "=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=", - "=?ISO-8859-1?Q?Olle_J=E4rnefors?= ", - "=?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= ", - "Nathaniel Borenstein (=?iso-8859-8?b?7eXs+SDv4SDp7Oj08A==?=)", - "", - "(=?ISO-8859-1?Q?a?=)", /* should be displayed as (a) */ - "(=?ISO-8859-1?Q?a?= b)", /* (a b) */ - "(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)", /* (ab) */ - "(=?ISO-8859-1?Q?a?= =?ISO-8859-1?Q?b?=)", /* (ab) */ - "(=?ISO-8859-1?Q?a?= \n=?ISO-8859-1?Q?b?=)", /* (ab) */ - "(=?ISO-8859-1?Q?a_b?=)", /* (a b) */ - "(=?ISO-8859-1?Q?a?= =?ISO-8859-2?Q?_b?=)", /* (ab) */ - NULL -}; - - -int -main (int argc, char**argv) -{ - const char **b = tests; - while (*b) { - printf("%s\n", gmime_rfc2047_decode(*b, TERMINAL_CHARSET)); - b++; - } - - return 0; - -} diff --git a/tests/test6.c b/tests/test6.c deleted file mode 100644 index c2883d89c0..0000000000 --- a/tests/test6.c +++ /dev/null @@ -1,49 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -/* test for the RFC 2047 encoder */ - -#include -#include - -#include "gmime-utils.h" -#include "stdio.h" -#include "camel-mime-message.h" -#include "camel-mime-part.h" -#include "camel-stream.h" -#include "camel-stream-fs.h" -#include "camel.h" -#include "gmime-rfc2047.h" - -#define TERMINAL_CHARSET "UTF-8" - -/* - * Info on many unicode issues, including, utf-8 xterms from : - * - * http://www.cl.cam.ac.uk/~mgk25/unicode.html - * - */ - -const char *tests[] = -{ - "Ðis is a test", "ISO-8859-1", - "Iñtérñàtiönælîçation", "ISO-8859-1", - "ΚαλημέÏα κόσμε", "UTF-8", - "コンニãƒãƒ", "UTF-8", - "ði ıntəˈnæʃənÉ™l fəˈnÉ›tık É™soÊŠsiˈeıʃn", "UTF-8", - NULL -}; - - -int -main (int argc, char**argv) -{ - const char **b = tests; - while (*b) { - char *e = gmime_rfc2047_encode(b[0], b[1]); - printf("%s\t%s\n", e, gmime_rfc2047_decode(e, TERMINAL_CHARSET)); - b+=2; - } - - return 0; - -} diff --git a/tests/test8.c b/tests/test8.c deleted file mode 100644 index aa7debdba9..0000000000 --- a/tests/test8.c +++ /dev/null @@ -1,75 +0,0 @@ -/* test posix thread folder proxy */ - - -#include "camel.h" - -CamelThreadProxy *proxy; -CamelFuncDef *func_def; - - -void -test_sync_func (int num) -{ - printf ("Sync function number %d\n", num); - printf ("Sync function : current thread : %d\n", pthread_self ()); - -} - - -void -test_async_cb (int num) -{ - printf ("Callback number %d\n", num); - printf ("Callback : current thread : %d\n", pthread_self ()); -} - -void -test_async_func (int num) -{ - CamelOp *cb; - - printf ("Async function number %d\n", num); - printf ("Async function : current thread : %d\n", pthread_self ()); - sleep (1); - cb = camel_marshal_create_op (func_def, test_async_cb, num); - camel_thread_proxy_push_cb (proxy, cb); - - -} - -int -main (int argc, char **argv) -{ - int i; - CamelOp *op; - - camel_init (); - - func_def = - camel_func_def_new (camel_marshal_NONE__INT, - 1, - GTK_TYPE_INT); - - printf ("--== Testing Simple marshalling system ==--\n"); - for (i=0; i<5; i++) { - printf ("Iterration number %d\n", i); - op = camel_marshal_create_op (func_def, test_sync_func, i); - camel_op_run (op); - camel_op_free (op); - - } - printf ("\n\n"); - - proxy = camel_thread_proxy_new (); - - printf ("--== Testing Asynchronous Operation System ==--\n"); - for (i=0; i<5; i++) { - printf ("Pushing async operation number %d for execution\n", i); - op = camel_marshal_create_op (func_def, test_async_func, i); - camel_thread_proxy_push_op (proxy, op); - } - printf ("\n\n"); - printf ("--== Operations execution planned ==--\n"); - gtk_main (); -} - diff --git a/tests/test9.c b/tests/test9.c deleted file mode 100644 index 7fbbee8b8a..0000000000 --- a/tests/test9.c +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ - -#include "camel.h" -#include "camel-mbox-folder.h" -#include "camel-mbox-parser.h" -#include "camel-mbox-utils.h" -#include "camel-mbox-summary.h" -#include "camel-exception.h" -#include -#include -#include -#include -#include -#include -#include - -int -main (int argc, char**argv) -{ - GArray *message_info_array; - gint test_file_fd; - CamelException *ex; - CamelMboxSummary *sum1, *sum2; - GArray *mbox_summary_info; - CamelMboxSummaryInformation *msg_info; - int i; - guint32 next_uid; - guint32 mbox_file_size; - - gtk_init (&argc, &argv); - camel_init (); - - ex = camel_exception_new (); - test_file_fd = open (argv[1], O_RDONLY); - message_info_array = camel_mbox_parse_file (test_file_fd, - "From ", - 0, - &mbox_file_size, - &next_uid, - TRUE, - NULL, - 0, - ex); - - close (test_file_fd); -#warning This test is no longer valid. -#if 0 - /* needs a folder to work with (indexing) */ - camel_mbox_write_xev (argv[1], message_info_array, &mbox_file_size, 1, ex); -#endif - if (camel_exception_get_id (ex)) { - printf ("Exception caught in camel_mbox_write_xev : %s\n", camel_exception_get_description (ex)); - } - - - mbox_summary_info = - parsed_information_to_mbox_summary (message_info_array); - sum1 = CAMEL_MBOX_SUMMARY (gtk_object_new (camel_mbox_summary_get_type (), NULL)); - - sum1->nb_message = mbox_summary_info->len; - - sum1->message_info = mbox_summary_info; - - camel_mbox_summary_save (sum1, "ev-summary.mbox", ex); - - sum2 = camel_mbox_summary_load ("ev-summary.mbox", ex); - - for (i=0; inb_message; i++) { - - msg_info = (CamelMboxSummaryInformation *)(sum1->message_info->data) + i; - printf ("Message %d :\n" - " From : %s\n", i, msg_info->headers.sender); - } - - return 1; - -} - - - diff --git a/tests/ui-tests/.cvsignore b/tests/ui-tests/.cvsignore deleted file mode 100644 index 84c2937bdc..0000000000 --- a/tests/ui-tests/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -Makefile.in -Makefile -.deps -.libs -store_listing -msg-composer-test -message-browser -filter \ No newline at end of file diff --git a/tests/ui-tests/Makefile.am b/tests/ui-tests/Makefile.am deleted file mode 100644 index e61a054093..0000000000 --- a/tests/ui-tests/Makefile.am +++ /dev/null @@ -1,39 +0,0 @@ -# process this file with automake to create Makefile.in - -INCLUDES = \ - -I$(top_srcdir)/intl \ - -I$(top_srcdir)/camel \ - -I$(includedir) \ - -I$(top_srcdir)/camel/providers/MH \ - -I$(top_srcdir)/widgets \ - -I$(top_srcdir)/filter \ - $(EXTRA_GNOME_CFLAGS) $(BONOBO_GNOME_CFLAGS) \ - -DG_LOG_DOMAIN=\"evolution-ui-tests\" - -LDADD = \ - $(top_builddir)/widgets/libevolutionwidgets.la \ - $(top_builddir)/camel/libcamel.la \ - $(INTLLIBS) \ - $(EXTRA_GNOME_LIBS) \ - $(PTHREAD_LIB) - -message_browser_LDADD = \ - $(top_builddir)/camel/libcamel.la \ - $(INTLLIBS) \ - $(EXTRA_GNOME_LIBS) \ - $(PTHREAD_LIB) \ - $(EXTRA_GNOME_LIBS) \ - -lgtkhtml -lgnomeprint ../../mail/html-stream.o $(BONOBO_GNOME_LIBS) - -filter_LDADD = \ - $(top_builddir)/camel/libcamel.la \ - $(INTLLIBS) \ - $(EXTRA_GNOME_LIBS) \ - $(PTHREAD_LIB) \ - $(EXTRA_GNOME_LIBS) \ - $(top_builddir)/filter/libfilter.la \ - -lgtkhtml -lgnomeprint - -noinst_PROGRAMS = \ - message-browser \ - filter diff --git a/tests/ui-tests/filter.c b/tests/ui-tests/filter.c deleted file mode 100644 index 3ff6a1b1ae..0000000000 --- a/tests/ui-tests/filter.c +++ /dev/null @@ -1,30 +0,0 @@ - -#include -#include "filter-editor.h" - -int main(int argc, char **argv) -{ - GList *rules, *options, *options2; - xmlDocPtr doc, out, optionset, filteroptions; - GString *s; - GtkWidget *w; - - gnome_init("Test", "0.0", argc, argv); - gdk_rgb_init (); - gtk_widget_set_default_colormap (gdk_rgb_get_cmap ()); - gtk_widget_set_default_visual (gdk_rgb_get_visual ()); - - w = filter_editor_new(); - - doc = xmlParseFile("filterdescription.xml"); - rules = filter_load_ruleset(doc); - options = filter_load_optionset(doc, rules); - options2 = options; - out = xmlParseFile("saveoptions.xml"); - options = filter_load_optionset(out, rules); - - filter_editor_set_rules(w, rules, options2, options); - - gtk_widget_show(w); - gtk_main(); -} diff --git a/tests/ui-tests/filterdescription.xml b/tests/ui-tests/filterdescription.xml deleted file mode 100644 index 07c392aa70..0000000000 --- a/tests/ui-tests/filterdescription.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - (match-all (header-contains "From" ${sender})) - - The From address matches sender(s). - - - - - (match-all (header-contains "To" ${receipient})) - - The To address matches receipients. - - - - - (match-all (header-contains "CC" ${self-email})) - - I am in the cc list. - - - - - (& (> message-size (size-lower size-range)) - (< message-size (size-uppwer size-range))) - - The message is a certain size. - - - - - - - (copy-to ${folder}) - - Send a copy to folder. - - - - (forward-to ${address}) - - Forward the message to people. - - - - (delete) - - Delete message. - - - - (stop) - - Stop processing further rules for this message. - - - - - - - (match-all (not (header-contains "To" "zucchi@zedzone"))) - - When I am the receipient. - - - - - - - - -